diff --git a/.dart_tool/package_config.json b/.dart_tool/package_config.json
index 8c08a77..ebfd144 100644
--- a/.dart_tool/package_config.json
+++ b/.dart_tool/package_config.json
@@ -201,6 +201,12 @@
       "languageVersion": "2.3"
     },
     {
+      "name": "dds",
+      "rootUri": "../pkg/dds",
+      "packageUri": "lib/",
+      "languageVersion": "2.3"
+    },
+    {
       "name": "dev_compiler",
       "rootUri": "../pkg/dev_compiler",
       "packageUri": "lib/",
@@ -568,6 +574,12 @@
       "languageVersion": "1.22"
     },
     {
+      "name": "shelf_proxy",
+      "rootUri": "../third_party/pkg/shelf_proxy",
+      "packageUri": "lib/",
+      "languageVersion": "2.3"
+    },
+    {
       "name": "shelf_static",
       "rootUri": "../third_party/pkg/shelf_static",
       "packageUri": "lib/",
@@ -607,7 +619,7 @@
       "name": "source_span",
       "rootUri": "../third_party/pkg/source_span",
       "packageUri": "lib/",
-      "languageVersion": "1.8"
+      "languageVersion": "2.6"
     },
     {
       "name": "sourcemap_testing",
@@ -724,18 +736,6 @@
       "languageVersion": "2.0"
     },
     {
-      "name": "unittest",
-      "rootUri": "../third_party/pkg/unittest",
-      "packageUri": "lib/",
-      "languageVersion": "2.0"
-    },
-    {
-      "name": "unittest-orig",
-      "rootUri": "../third_party/pkg/unittest-orig",
-      "packageUri": "lib/",
-      "languageVersion": "1.0"
-    },
-    {
       "name": "usage",
       "rootUri": "../third_party/pkg/usage",
       "packageUri": "lib/",
@@ -784,4 +784,4 @@
       "languageVersion": "2.0"
     }
   ]
-}
\ No newline at end of file
+}
diff --git a/.packages b/.packages
index a5ab646..bb207f5 100644
--- a/.packages
+++ b/.packages
@@ -36,6 +36,7 @@
 dartdev:pkg/dartdev/lib
 dartdoc:third_party/pkg/dartdoc/lib
 dartfix:pkg/dartfix/lib
+dds:pkg/dds/lib
 dev_compiler:pkg/dev_compiler/lib
 diagnostic:pkg/diagnostic/lib
 expect:pkg/expect/lib
@@ -85,6 +86,7 @@
 sdk_library_metadata:sdk/lib/_internal/sdk_library_metadata/lib
 shelf:third_party/pkg/shelf/lib
 shelf_packages_handler:third_party/pkg/shelf_packages_handler/lib
+shelf_proxy:third_party/pkg/shelf_proxy/lib
 shelf_static:third_party/pkg/shelf_static/lib
 shelf_web_socket:third_party/pkg/shelf_web_socket/lib
 smith:pkg/smith/lib
@@ -109,7 +111,6 @@
 testing:pkg/testing/lib
 tflite_native:third_party/pkg/tflite_native/lib
 typed_data:third_party/pkg/typed_data/lib
-unittest:third_party/pkg/unittest/lib
 usage:third_party/pkg/usage/lib
 vm:pkg/vm/lib
 vm_service:pkg/vm_service/lib
diff --git a/CHANGELOG.md b/CHANGELOG.md
index bfced46..6e4afcd 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -6,13 +6,28 @@
 
 ### Core libraries
 
+#### `dart:async`
+
+* Make stack traces non-null. Where methods like `completer.completeError`
+  allows omitting a stack trace, the platform will now insert a default
+  stack trace rather than propagate a `null` value.
+  Error handling functions need no longer be prepared for `null` stack traces.
+
 #### `dart:core`
 
+* Adds `StackTrace.empty` constant which is the stack trace used as default
+  stack trace when no better alternative is available.
+
 * The class `TypeError` no longer extends `AssertionError`.
   This also means that it no longer inherits the spurious `message` getter
   which was added to `AssertionError` when the second operand to `assert`
   was allowed. The value of that getter on a `TypeError` was the same
   string as returned by `toString`, so it is still available.
+* `ArgumentError.checkNotNull` and the `RangeError` static methods
+  `checkValueInInterval`, `checkValidIndex` and `checkNotNegative`
+  all return their first argument on success.
+  This makes these functions more convenient to use in-line in,
+  for example, `=>` function bodies or constructor initialization lists.
 
 #### `dart:developer`
 
@@ -74,6 +89,54 @@
   now contains Unix epoch timestamps instead of `null` for the `accessed`,
   `changed`, and `modified` getters.
 
+* **Breaking change** [#40709](https://github.com/dart-lang/sdk/issues/40709):
+  The `HeaderValue` class now parses more strictly in two invalid edge cases.
+  This is the class used to parse the semicolon delimited parameters used in the
+  `Accept`, `Authorization`, `Content-Type`, and other such HTTP headers.
+
+  The empty parameter value without double quotes (which is not allowed by the
+  standards) is now parsed as the empty string rather than `null`. E.g.
+  `HeaderValue.parse("v;a=").parameters` now gives `{"a": ""}` rather than
+  `{"a": null}`.
+
+  Invalid inputs with unbalanced double quotes are now rejected. E.g.
+  `HeaderValue.parse('v;a="b').parameters` will now throw a `HttpException`
+  instead of giving `{"a": "b"}`.
+
+* The `HeaderValue.toString()` method now supports parameters with `null` values
+  by omitting the value. `HeaderValue("v", {"a": null, "b": "c"}).toString()`
+  now gives `v; a; b=c`. This behavior can be used to implement some features in
+  the `Accept` and `Sec-WebSocket-Extensions` headers.
+
+  Likewise the empty value and values using characters outside of
+  [RFC 7230 tokens](https://tools.ietf.org/html/rfc7230#section-3.2.6) are now
+  correctly implemented by double quoting such values with escape sequences.
+  E.g:
+
+  ```dart
+  HeaderValue("v",
+      {"a": "A", "b": "(B)", "c": "", "d": "ø", "e": "\\\""}).toString()
+  ```
+
+  now gives `v;a=A;b="(B)";c="";d="ø";e="\\\""`.
+
+* [Unix domain sockets](https://en.wikipedia.org/wiki/Unix_domain_socket) are
+  now supported on Linux, Android and MacOS, which can be used by passing a
+  `InternetAddress` of `InternetAddressType.Unix` into `connect`, `startConnect`
+  and `bind` methods. `port` argument in those methods will be ignored. Getter
+  of `port` will always return 0 for Unix domain sockets.
+
+* Class `InternetAddressType` gains one more option `Unix`, which represents a
+  Unix domain address.
+
+* Class `InternetAddress`:
+  * `InternetAddress` constructor gains an optional `type` parameter. To create
+    a Unix domain address, `type` is set to `InternetAddressType.Unix` and
+    `address` is a file path.
+  * `InternetAddress` gains a new constructor `fromRawAddress` that takes an
+    address in byte format for Internet addresses or raw file path for Unix
+    domain addresses.
+
 #### `dart:mirrors`
 
 * Added `MirrorSystem.neverType`.
@@ -166,6 +229,9 @@
 
 #### Pub
 
+* Added `pub outdated` command which lists outdated package dependencies, and
+  gives advice on how to upgrade.
+
 * `pub get` and `pub upgrade` now fetches version information about hosted
   dependencies in parallel, improving the time package resolution performance.
 
@@ -178,13 +244,19 @@
 * Importing packages not in `pubspec.yaml` now causes `pub publish` to reject
   the package.
 
+* `pub publish` no longer requires the presence of a `homepage` field, if the
+  `repository` field is provided.
+
+* `pub publish` will now warn if non-pre-release packages depends on pre-release
+  packages or pre-release Dart SDKs.
+
 * Relative paths in `pubspec.lock` are now using `/` also on Windows to make
   the file sharable between machines.
 
 * Fixed language version in [`.dart_tool/package_config.json`](https://github.com/dart-lang/language/blob/master/accepted/future-releases/language-versioning/package-config-file-v2.md)
   for packages without an explicit sdk constraint.
 
-  Now writes an empty language-version while efore the language version of the
+  Now writes an empty language-version while before the language version of the
   current sdk would be used.
 
 * `%LOCALAPPDATA%` is now preferred over `%APPDATA%` when creating a pub cache
@@ -243,9 +315,14 @@
 
 [17207]: https://github.com/dart-lang/sdk/issues/17207
 
-## 2.7.2 - 2020-03-16
+## 2.7.2 - 2020-03-23
 
-This is a patch release that improves compatibility with ARMv8 processors
+This is a patch release that addresses a vulnerability dart:html
+[NodeValidator](https://api.dart.dev/stable/dart-html/NodeValidator-class.html)
+related to DOM clobbering of `previousSibling`. Thanks to **Vincenzo di Cicco**
+for finding and reporting this issue.
+
+This release also improves compatibility with ARMv8 processors
 (issue [40001][]) and dart:io stability (issue [40589][]).
 
 [40001]: https://github.com/dart-lang/sdk/issues/40001
diff --git a/DEPS b/DEPS
index 353c1c2..9a6d8c6 100644
--- a/DEPS
+++ b/DEPS
@@ -99,7 +99,7 @@
   "http_throttle_tag" : "1.0.2",
   "icu_rev" : "c56c671998902fcc4fc9ace88c83daa99f980793",
   "idl_parser_rev": "5fb1ebf49d235b5a70c9f49047e83b0654031eb7",
-  "intl_tag": "0.15.7",
+  "intl_tag": "0.16.1",
   "jinja2_rev": "2222b31554f03e62600cd7e383376a7c187967a1",
   "json_rpc_2_tag": "2.0.9",
   "linter_tag": "0.1.113",
@@ -119,7 +119,7 @@
   "ply_rev": "604b32590ffad5cbb82e4afef1d305512d06ae93",
   "pool_tag": "1.3.6",
   "protobuf_rev": "3746c8fd3f2b0147623a8e3db89c3ff4330de760",
-  "pub_rev": "429a06039d185149f387a65e3503b0693ce6d24e",
+  "pub_rev": "11afdac99fe67373829f37acc75b625011d360ad",
   "pub_semver_tag": "v1.4.4",
   "quiver-dart_tag": "2.0.0+1",
   "resource_rev": "f8e37558a1c4f54550aa463b88a6a831e3e33cd6",
@@ -127,12 +127,13 @@
   "rust_revision": "60960a260f7b5c695fd0717311d72ce62dd4eb43",
   "shelf_static_rev": "v0.2.8",
   "shelf_packages_handler_tag": "2.0.0",
+  "shelf_proxy_tag": "0.1.0+7",
   "shelf_tag": "0.7.3+3",
   "shelf_web_socket_tag": "0.2.2+3",
   "source_map_stack_trace_tag": "2.0.0",
   "source_maps-0.9.4_rev": "38524",
   "source_maps_tag": "8af7cc1a1c3a193c1fba5993ce22a546a319c40e",
-  "source_span_tag": "1.5.5",
+  "source_span_tag": "1.7.0",
   "stack_trace_tag": "1.9.3",
   "stagehand_tag": "v3.3.7",
   "stream_channel_tag": "2.0.0",
@@ -144,11 +145,10 @@
   "test_tag": "test_core-v0.3.2",
   "tflite_native_rev": "3c777c40608a2a9f1427bfe0028ab48e7116b4c1",
   "typed_data_tag": "1.1.6",
-  "unittest_rev": "2b8375bc98bb9dc81c539c91aaea6adce12e1072",
   "usage_tag": "3.4.0",
   "watcher_rev": "0.9.7+14",
   "web_components_rev": "8f57dac273412a7172c8ade6f361b407e2e4ed02",
-  "web_socket_channel_tag": "1.0.9",
+  "web_socket_channel_tag": "1.0.15",
   "WebCore_rev": "fb11e887f77919450e497344da570d780e078bc8",
   "yaml_tag": "2.2.0",
   "zlib_rev": "c44fb7248079cc3d5563b14b3f758aee60d6b415",
@@ -365,6 +365,8 @@
   Var("dart_root") + "/third_party/pkg/shelf_packages_handler":
       Var("dart_git") + "shelf_packages_handler.git"
       + "@" + Var("shelf_packages_handler_tag"),
+  Var("dart_root") + "/third_party/pkg/shelf_proxy":
+      Var("dart_git") + "shelf_proxy.git" + "@" + Var("shelf_proxy_tag"),
   Var("dart_root") + "/third_party/pkg/shelf_static":
       Var("dart_git") + "shelf_static.git" + "@" + Var("shelf_static_rev"),
   Var("dart_root") + "/third_party/pkg/shelf_web_socket":
@@ -402,12 +404,6 @@
       "@" + Var("test_reflective_loader_tag"),
   Var("dart_root") + "/third_party/pkg/typed_data":
       Var("dart_git") + "typed_data.git" + "@" + Var("typed_data_tag"),
-  # Unittest is an early version, 0.11.x, of the package "test"
-  # Do not use it in any new tests. Fetched from chromium_git to avoid
-  # race condition in cache with pkg/test.
-  Var("dart_root") + "/third_party/pkg/unittest":
-      Var("chromium_git") + "/external/github.com/dart-lang/test.git" +
-      "@" + Var("unittest_rev"),
   Var("dart_root") + "/third_party/pkg/usage":
       Var("dart_git") + "usage.git" + "@" + Var("usage_tag"),
   Var("dart_root") + "/third_party/pkg/watcher":
diff --git a/README.md b/README.md
index a88db95..27cbb2b 100644
--- a/README.md
+++ b/README.md
@@ -61,6 +61,6 @@
 [tools]: https://www.dartlang.org/tools/
 [codelab]: https://dart.dev/codelabs
 [dartbug]: http://dartbug.com
-[contrib]: https://github.com/dart-lang/sdk/wiki/Contributing
+[contrib]: https://github.com/dart-lang/sdk/blob/master/CONTRIBUTING.md
 [pubsite]: https://pub.dev
 [patent_grant]: https://github.com/dart-lang/sdk/blob/master/PATENT_GRANT
diff --git a/WATCHLISTS b/WATCHLISTS
index e88ada2..3e5b2ab 100644
--- a/WATCHLISTS
+++ b/WATCHLISTS
@@ -68,9 +68,8 @@
 
   'WATCHLISTS': {
     'build': [ 'keertip@google.com' ],
-    'dart2js': [ 'johnniwinther@google.com', 'sigmund@google.com',
-                 'sra@google.com', 'fishythefish@google.com',
-                 'joshualitt@google.com' ],
+    'dart2js': [ 'sigmund@google.com', 'sra@google.com',
+                 'fishythefish@google.com', 'joshualitt@google.com' ],
     'front_end': [ 'dart-fe-team+reviews@google.com' ],
     'kernel': [ 'jensj@google.com', 'alexmarkov@google.com' ],
     'messages_review': [ 'dart-uxr+reviews@google.com' ],
diff --git a/benchmarks/ListCopy/dart/ListCopy.dart b/benchmarks/ListCopy/dart/ListCopy.dart
index e058928..cd16fc0 100644
--- a/benchmarks/ListCopy/dart/ListCopy.dart
+++ b/benchmarks/ListCopy/dart/ListCopy.dart
@@ -56,7 +56,8 @@
     while (totalLength < elements) {
       var variants = makeVariants();
       inputs.addAll(variants);
-      totalLength += variants.fold(0, (sum, iterable) => sum + iterable.length);
+      totalLength +=
+          variants.fold<int>(0, (sum, iterable) => sum + iterable.length);
     }
 
     // Sanity checks.
@@ -90,7 +91,7 @@
 
 // All the 'copy' methods use [input] and [output] rather than a parameter and
 // return value to avoid any possibility of type check in the call sequence.
-Iterable<num> input;
+Iterable<num> input = const [];
 var output;
 
 List<Benchmark> makeBenchmarks(int length) => [
diff --git a/build/config/mac/mac_sdk.gni b/build/config/mac/mac_sdk.gni
index e0a3abc..e93ede0 100644
--- a/build/config/mac/mac_sdk.gni
+++ b/build/config/mac/mac_sdk.gni
@@ -2,6 +2,8 @@
 # Use of this source code is governed by a BSD-style license that can be
 # found in the LICENSE file.
 
+import("//build/toolchain/goma.gni")
+
 declare_args() {
   # Minimum supported version of the Mac SDK.
   mac_sdk_min = "10.8"
@@ -10,6 +12,8 @@
   # the end. If empty, the path to the lowest version greater than or equal to
   # mac_sdk_min is used.
   mac_sdk_path = ""
+
+  mac_enable_relative_sdk_path = mac_use_goma_rbe
 }
 
 find_sdk_args = [
@@ -17,6 +21,15 @@
   mac_sdk_min,
 ]
 
+if (mac_use_goma_rbe) {
+  find_sdk_args += [
+    "--create_symlink_at",
+
+    # $root_build_dir starts with "//", which is removed by rebase_path().
+    rebase_path("$root_build_dir/sdk/xcode_links", "//"),
+  ]
+}
+
 # The tool will print the SDK path on the first line, and the version on the
 # second line.
 find_sdk_lines =
diff --git a/build/mac/find_sdk.py b/build/mac/find_sdk.py
index 3e7bbc1..a53ba28 100755
--- a/build/mac/find_sdk.py
+++ b/build/mac/find_sdk.py
@@ -17,6 +17,41 @@
 from optparse import OptionParser
 
 
+# sdk/build/xcode_links
+ROOT_SRC_DIR = os.path.join(
+    os.path.dirname(
+        os.path.dirname(os.path.dirname(os.path.realpath(__file__)))))
+
+
+def CreateSymlinkForSDKAt(src, dst):
+    """
+    Create symlink to Xcode directory at target location, which can be absolute or
+    relative to `ROOT_SRC_DIR`.
+    """
+
+    # If `dst` is relative, it is assumed to be relative to src root.
+    if not os.path.isabs(dst):
+        dst = os.path.join(ROOT_SRC_DIR, dst)
+
+    if not os.path.isdir(dst):
+        os.makedirs(dst)
+
+    dst = os.path.join(dst, os.path.basename(src))
+
+    # Update the symlink if exists.
+    if os.path.islink(dst):
+        current_src = os.readlink(dst)
+        if current_src == src:
+            return dst
+
+        os.unlink(dst)
+        sys.stderr.write('existing symlink %s points %s; want %s. Removed.' %
+                         (dst, current_src, src))
+
+    os.symlink(src, dst)
+    return dst
+
+
 def parse_version(version_str):
     """'10.6' => [10, 6]"""
     return map(int, re.findall(r'(\d+)', version_str))
@@ -43,6 +78,13 @@
         dest="print_sdk_path",
         default=False,
         help="Additionaly print the path the SDK (appears first).")
+    parser.add_option(
+        "--create_symlink_at",
+        action="store",
+        dest="create_symlink_at",
+        help=
+        "Create symlink to SDK at given location and return symlink path as SDK "
+        "info instead of the original location.")
     (options, args) = parser.parse_args()
     min_sdk_version = args[0]
 
@@ -91,9 +133,13 @@
         return min_sdk_version
 
     if options.print_sdk_path:
-        print subprocess.check_output(
+        sdk_path = subprocess.check_output(
             ['xcodebuild', '-version', '-sdk', 'macosx' + best_sdk,
              'Path']).strip()
+        if options.create_symlink_at:
+            print CreateSymlinkForSDKAt(sdk_path, options.create_symlink_at)
+        else:
+            print sdk_path
 
     return best_sdk
 
diff --git a/build/toolchain/goma.gni b/build/toolchain/goma.gni
index c0f4cf2..d2bfcf9 100644
--- a/build/toolchain/goma.gni
+++ b/build/toolchain/goma.gni
@@ -19,4 +19,8 @@
     # Absolute directory containing the Goma source code.
     goma_dir = getenv("HOME") + "/goma"
   }
+
+  # Sets relative symlink path to Xcode SDK path.
+  # Based on http://crrev.com/c/1946174.
+  mac_use_goma_rbe = false
 }
diff --git a/build/toolchain/mac/BUILD.gn b/build/toolchain/mac/BUILD.gn
index 48ef702..2c1839f 100644
--- a/build/toolchain/mac/BUILD.gn
+++ b/build/toolchain/mac/BUILD.gn
@@ -222,6 +222,9 @@
   ld = cxx
   strip = "strip"
   is_clang = true
+  if (mac_enable_relative_sdk_path) {
+    mac_sdk_path = rebase_path(mac_sdk_path, root_build_dir)
+  }
   sysroot_flags = "-isysroot $mac_sdk_path -mmacosx-version-min=$mac_sdk_min"
 }
 
@@ -236,5 +239,8 @@
   ld = cxx
   strip = "strip"
   is_clang = true
+  if (mac_enable_relative_sdk_path) {
+    mac_sdk_path = rebase_path(mac_sdk_path, root_build_dir)
+  }
   sysroot_flags = "-isysroot $mac_sdk_path -mmacosx-version-min=$mac_sdk_min"
 }
diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes.dart
index 0b7cc1c..743f67d 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes.dart
@@ -123,6 +123,7 @@
 
   Map<String, dynamic> get arguments => messageObject.arguments;
 
+  @override
   int compareTo(LocatedMessage other) {
     int result = "${uri}".compareTo("${other.uri}");
     if (result != 0) return result;
@@ -136,6 +137,28 @@
     return new FormattedMessage(
         this, formatted, line, column, severity, relatedInformation);
   }
+
+  @override
+  int get hashCode =>
+      13 * uri.hashCode +
+      17 * charOffset.hashCode +
+      19 * length.hashCode +
+      23 * messageObject.hashCode;
+
+  @override
+  bool operator ==(Object other) {
+    if (identical(this, other)) return true;
+    return other is LocatedMessage &&
+        uri == other.uri &&
+        charOffset == other.charOffset &&
+        length == other.length &&
+        messageObject == other.messageObject;
+  }
+
+  @override
+  String toString() =>
+      'LocatedMessage(uri=$uri,charOffset=$charOffset,length=$length,'
+      'messageObject=$messageObject)';
 }
 
 class FormattedMessage implements DiagnosticMessage {
diff --git a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
index 6d316e6..b4145ba 100644
--- a/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
+++ b/pkg/_fe_analyzer_shared/lib/src/messages/codes_generated.dart
@@ -103,6 +103,15 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeAmbiguousExtensionCause = messageAmbiguousExtensionCause;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageAmbiguousExtensionCause = const MessageCode(
+    "AmbiguousExtensionCause",
+    severity: Severity.context,
+    message: r"""This is one of the extension members.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeAnnotationOnFunctionTypeTypeVariable =
     messageAnnotationOnFunctionTypeTypeVariable;
 
@@ -952,17 +961,6 @@
         message: r"""Constructor is marked 'const' so fields can't be late.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Null> codeConstConstructorLateFinalFieldWarning =
-    messageConstConstructorLateFinalFieldWarning;
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const MessageCode messageConstConstructorLateFinalFieldWarning =
-    const MessageCode("ConstConstructorLateFinalFieldWarning",
-        severity: Severity.warning,
-        message:
-            r"""Constructor is marked 'const' and some fields are late.""");
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeConstConstructorNonFinalField =
     messageConstConstructorNonFinalField;
 
@@ -1685,6 +1683,16 @@
         message: r"""This is the inherited member.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeDeclaredMemberConflictsWithInheritedMembersCause =
+    messageDeclaredMemberConflictsWithInheritedMembersCause;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageDeclaredMemberConflictsWithInheritedMembersCause =
+    const MessageCode("DeclaredMemberConflictsWithInheritedMembersCause",
+        severity: Severity.context,
+        message: r"""This is one of the inherited members.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeDefaultListConstructorError =
     messageDefaultListConstructorError;
 
@@ -1695,17 +1703,6 @@
     tip: r"""Try using List.filled instead.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Null> codeDefaultListConstructorWarning =
-    messageDefaultListConstructorWarning;
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const MessageCode messageDefaultListConstructorWarning = const MessageCode(
-    "DefaultListConstructorWarning",
-    severity: Severity.warning,
-    message: r"""Using the default List constructor.""",
-    tip: r"""Try using List.filled instead.""");
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)>
     templateDefaultValueInRedirectingFactoryConstructor =
     const Template<Message Function(String name)>(
@@ -2959,6 +2956,15 @@
         r"""This can't be used as metadata; metadata should be a reference to a compile-time constant variable, or a call to a constant constructor.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeExtendFunction = messageExtendFunction;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageExtendFunction = const MessageCode("ExtendFunction",
+    severity: Severity.ignored,
+    message: r"""Extending 'Function' is deprecated.""",
+    tip: r"""Try removing 'Function' from the 'extends' clause.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateExtendingEnum =
     const Template<Message Function(String name)>(
         messageTemplate:
@@ -3972,6 +3978,16 @@
     message: r"""Functions marked 'sync*' can't have return type 'void'.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeImplementFunction = messageImplementFunction;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageImplementFunction = const MessageCode(
+    "ImplementFunction",
+    severity: Severity.ignored,
+    message: r"""Implementing 'Function' is deprecated.""",
+    tip: r"""Try removing 'Function' from the 'implements' clause.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeImplementsBeforeExtends = messageImplementsBeforeExtends;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -5857,6 +5873,15 @@
     message: r"""Mixins can't declare constructors.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeMixinFunction = messageMixinFunction;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageMixinFunction = const MessageCode("MixinFunction",
+    severity: Severity.ignored,
+    message: r"""Mixing in 'Function' is deprecated.""",
+    tip: r"""Try removing 'Function' from the 'with' clause.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
     Message Function(
         String string,
@@ -6170,6 +6195,58 @@
     message: r"""Can't spread a value with static type Null.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(String name)>
+    templateNonNullableLateDefinitelyAssignedError =
+    const Template<Message Function(String name)>(
+        messageTemplate:
+            r"""Non-nullable late final variable '#name' definitely assigned.""",
+        withArguments: _withArgumentsNonNullableLateDefinitelyAssignedError);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)>
+    codeNonNullableLateDefinitelyAssignedError =
+    const Code<Message Function(String name)>(
+  "NonNullableLateDefinitelyAssignedError",
+  templateNonNullableLateDefinitelyAssignedError,
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsNonNullableLateDefinitelyAssignedError(String name) {
+  if (name.isEmpty) throw 'No name provided';
+  name = demangleMixinApplicationName(name);
+  return new Message(codeNonNullableLateDefinitelyAssignedError,
+      message:
+          """Non-nullable late final variable '${name}' definitely assigned.""",
+      arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(String name)>
+    templateNonNullableLateDefinitelyUnassignedError =
+    const Template<Message Function(String name)>(
+        messageTemplate:
+            r"""Non-nullable late variable '#name' without initializer is definitely unassigned.""",
+        withArguments: _withArgumentsNonNullableLateDefinitelyUnassignedError);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name)>
+    codeNonNullableLateDefinitelyUnassignedError =
+    const Code<Message Function(String name)>(
+  "NonNullableLateDefinitelyUnassignedError",
+  templateNonNullableLateDefinitelyUnassignedError,
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsNonNullableLateDefinitelyUnassignedError(String name) {
+  if (name.isEmpty) throw 'No name provided';
+  name = demangleMixinApplicationName(name);
+  return new Message(codeNonNullableLateDefinitelyUnassignedError,
+      message:
+          """Non-nullable late variable '${name}' without initializer is definitely unassigned.""",
+      arguments: {'name': name});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
     Message Function(
         String
@@ -6197,30 +6274,6 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<Message Function(String name)>
-    templateNonNullableNotAssignedWarning =
-    const Template<Message Function(String name)>(
-        messageTemplate:
-            r"""Non-nullable variable '#name' is used before it's assigned.""",
-        withArguments: _withArgumentsNonNullableNotAssignedWarning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Message Function(String name)> codeNonNullableNotAssignedWarning =
-    const Code<Message Function(String name)>(
-        "NonNullableNotAssignedWarning", templateNonNullableNotAssignedWarning,
-        severity: Severity.warning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsNonNullableNotAssignedWarning(String name) {
-  if (name.isEmpty) throw 'No name provided';
-  name = demangleMixinApplicationName(name);
-  return new Message(codeNonNullableNotAssignedWarning,
-      message:
-          """Non-nullable variable '${name}' is used before it's assigned.""",
-      arguments: {'name': name});
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeNonNullableOptOut = messageNonNullableOptOut;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6451,27 +6504,6 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<Message Function(String name)> templateNullableInterfaceWarning =
-    const Template<Message Function(String name)>(
-        messageTemplate: r"""Implementing '#name' marked with '?'.""",
-        withArguments: _withArgumentsNullableInterfaceWarning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Message Function(String name)> codeNullableInterfaceWarning =
-    const Code<Message Function(String name)>(
-        "NullableInterfaceWarning", templateNullableInterfaceWarning,
-        severity: Severity.warning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsNullableInterfaceWarning(String name) {
-  if (name.isEmpty) throw 'No name provided';
-  name = demangleMixinApplicationName(name);
-  return new Message(codeNullableInterfaceWarning,
-      message: """Implementing '${name}' marked with '?'.""",
-      arguments: {'name': name});
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateNullableMixinError =
     const Template<Message Function(String name)>(
         messageTemplate:
@@ -6495,27 +6527,6 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<Message Function(String name)> templateNullableMixinWarning =
-    const Template<Message Function(String name)>(
-        messageTemplate: r"""Mixing in '#name' marked with '?'.""",
-        withArguments: _withArgumentsNullableMixinWarning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Message Function(String name)> codeNullableMixinWarning =
-    const Code<Message Function(String name)>(
-        "NullableMixinWarning", templateNullableMixinWarning,
-        severity: Severity.warning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsNullableMixinWarning(String name) {
-  if (name.isEmpty) throw 'No name provided';
-  name = demangleMixinApplicationName(name);
-  return new Message(codeNullableMixinWarning,
-      message: """Mixing in '${name}' marked with '?'.""",
-      arguments: {'name': name});
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateNullableSuperclassError =
     const Template<Message Function(String name)>(
         messageTemplate:
@@ -6539,28 +6550,6 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<Message Function(String name)>
-    templateNullableSuperclassWarning =
-    const Template<Message Function(String name)>(
-        messageTemplate: r"""Extending '#name' marked with '?'.""",
-        withArguments: _withArgumentsNullableSuperclassWarning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Message Function(String name)> codeNullableSuperclassWarning =
-    const Code<Message Function(String name)>(
-        "NullableSuperclassWarning", templateNullableSuperclassWarning,
-        severity: Severity.warning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsNullableSuperclassWarning(String name) {
-  if (name.isEmpty) throw 'No name provided';
-  name = demangleMixinApplicationName(name);
-  return new Message(codeNullableSuperclassWarning,
-      message: """Extending '${name}' marked with '?'.""",
-      arguments: {'name': name});
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<Message Function(String name)> templateNullableTearoffError =
     const Template<Message Function(String name)>(
         messageTemplate:
@@ -6585,29 +6574,6 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<Message Function(String name)> templateNullableTearoffWarning =
-    const Template<Message Function(String name)>(
-        messageTemplate:
-            r"""Tearing off method '#name' from a potentially null value.""",
-        withArguments: _withArgumentsNullableTearoffWarning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Message Function(String name)> codeNullableTearoffWarning =
-    const Code<Message Function(String name)>(
-        "NullableTearoffWarning", templateNullableTearoffWarning,
-        severity: Severity.warning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsNullableTearoffWarning(String name) {
-  if (name.isEmpty) throw 'No name provided';
-  name = demangleMixinApplicationName(name);
-  return new Message(codeNullableTearoffWarning,
-      message:
-          """Tearing off method '${name}' from a potentially null value.""",
-      arguments: {'name': name});
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeObjectExtends = messageObjectExtends;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -6877,6 +6843,37 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<Message Function(String name, String name2, String name3)>
+    templateOverrideMismatchRequiredNamedParameter =
+    const Template<Message Function(String name, String name2, String name3)>(
+        messageTemplate:
+            r"""The required named parameter '#name' in method '#name2' is not required in overridden method '#name3'.""",
+        withArguments: _withArgumentsOverrideMismatchRequiredNamedParameter);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(String name, String name2, String name3)>
+    codeOverrideMismatchRequiredNamedParameter =
+    const Code<Message Function(String name, String name2, String name3)>(
+  "OverrideMismatchRequiredNamedParameter",
+  templateOverrideMismatchRequiredNamedParameter,
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsOverrideMismatchRequiredNamedParameter(
+    String name, String name2, String name3) {
+  if (name.isEmpty) throw 'No name provided';
+  name = demangleMixinApplicationName(name);
+  if (name2.isEmpty) throw 'No name provided';
+  name2 = demangleMixinApplicationName(name2);
+  if (name3.isEmpty) throw 'No name provided';
+  name3 = demangleMixinApplicationName(name3);
+  return new Message(codeOverrideMismatchRequiredNamedParameter,
+      message:
+          """The required named parameter '${name}' in method '${name2}' is not required in overridden method '${name3}'.""",
+      arguments: {'name': name, 'name2': name2, 'name3': name3});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
     Message Function(
         String name,
@@ -7407,34 +7404,6 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<Message Function(String name)>
-    templateRequiredNamedParameterHasDefaultValueWarning =
-    const Template<Message Function(String name)>(
-        messageTemplate:
-            r"""Named parameter '#name' is required and has a default value.""",
-        withArguments:
-            _withArgumentsRequiredNamedParameterHasDefaultValueWarning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Message Function(String name)>
-    codeRequiredNamedParameterHasDefaultValueWarning =
-    const Code<Message Function(String name)>(
-        "RequiredNamedParameterHasDefaultValueWarning",
-        templateRequiredNamedParameterHasDefaultValueWarning,
-        severity: Severity.warning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsRequiredNamedParameterHasDefaultValueWarning(
-    String name) {
-  if (name.isEmpty) throw 'No name provided';
-  name = demangleMixinApplicationName(name);
-  return new Message(codeRequiredNamedParameterHasDefaultValueWarning,
-      message:
-          """Named parameter '${name}' is required and has a default value.""",
-      arguments: {'name': name});
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeRequiredParameterWithDefault =
     messageRequiredParameterWithDefault;
 
@@ -8412,6 +8381,14 @@
     message: r"""Can't create typedef from non-type.""");
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Null> codeTypedefNullableType = messageTypedefNullableType;
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const MessageCode messageTypedefNullableType = const MessageCode(
+    "TypedefNullableType",
+    message: r"""Can't create typedef from nullable type.""");
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeUnexpectedDollarInString = messageUnexpectedDollarInString;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
@@ -8652,31 +8629,6 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<Message Function(String name)>
-    templateValueForRequiredParameterNotProvidedWarning =
-    const Template<Message Function(String name)>(
-        messageTemplate: r"""Missing required named parameter '#name'.""",
-        withArguments:
-            _withArgumentsValueForRequiredParameterNotProvidedWarning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Message Function(String name)>
-    codeValueForRequiredParameterNotProvidedWarning =
-    const Code<Message Function(String name)>(
-        "ValueForRequiredParameterNotProvidedWarning",
-        templateValueForRequiredParameterNotProvidedWarning,
-        severity: Severity.warning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsValueForRequiredParameterNotProvidedWarning(String name) {
-  if (name.isEmpty) throw 'No name provided';
-  name = demangleMixinApplicationName(name);
-  return new Message(codeValueForRequiredParameterNotProvidedWarning,
-      message: """Missing required named parameter '${name}'.""",
-      arguments: {'name': name});
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Code<Null> codeVarAsTypeName = messageVarAsTypeName;
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
diff --git a/pkg/_fe_analyzer_shared/test/flow_analysis/reachability/data/switch.dart b/pkg/_fe_analyzer_shared/test/flow_analysis/reachability/data/switch.dart
index 9a817a5..3ff0405 100644
--- a/pkg/_fe_analyzer_shared/test/flow_analysis/reachability/data/switch.dart
+++ b/pkg/_fe_analyzer_shared/test/flow_analysis/reachability/data/switch.dart
@@ -37,7 +37,7 @@
   /*stmt: unreachable*/ 1;
 }
 
-/*analyzer.member: enum_no_default:doesNotComplete*/
+/*member: enum_no_default:doesNotComplete*/
 void enum_no_default(MyEnum e) {
   switch (e) {
     case MyEnum.a:
@@ -45,5 +45,5 @@
     case MyEnum.b:
       return;
   }
-  /*analyzer.stmt: unreachable*/ 1;
+  /*stmt: unreachable*/ 1;
 }
diff --git a/pkg/_fe_analyzer_shared/test/flow_analysis/type_promotion/data/function_expression.dart b/pkg/_fe_analyzer_shared/test/flow_analysis/type_promotion/data/function_expression.dart
index e44c4a7..a76e128 100644
--- a/pkg/_fe_analyzer_shared/test/flow_analysis/type_promotion/data/function_expression.dart
+++ b/pkg/_fe_analyzer_shared/test/flow_analysis/type_promotion/data/function_expression.dart
@@ -35,9 +35,7 @@
   }
 }
 
-void outerIsType_assignedOutside(Object x) {
-  void Function() g;
-
+void outerIsType_assignedOutside(Object x, void Function() g) {
   if (x is String) {
     /*String*/ x;
 
diff --git a/pkg/_fe_analyzer_shared/test/inheritance/data/from_opt_in/main.dart b/pkg/_fe_analyzer_shared/test/inheritance/data/from_opt_in/main.dart
index 61e7e36..ae5b1dbf 100644
--- a/pkg/_fe_analyzer_shared/test/inheritance/data/from_opt_in/main.dart
+++ b/pkg/_fe_analyzer_shared/test/inheritance/data/from_opt_in/main.dart
@@ -30,8 +30,7 @@
 */
 class LegacyClass3b<T> extends Class3<T> implements GenericInterface<T> {}
 
-/*cfe.class: LegacyClass4a:Class4a,GenericInterface<num*>,LegacyClass4a,Object*/
-/*cfe:builder|analyzer.class: LegacyClass4a:Class4a,GenericInterface<num>,LegacyClass4a,Object*/
+/*class: LegacyClass4a:Class4a,GenericInterface<num*>,LegacyClass4a,Object*/
 class LegacyClass4a extends Class4a {}
 
 /*class: LegacyClass4b:GenericInterface<num*>,LegacyClass4b,Object*/
@@ -40,12 +39,10 @@
 /*class: LegacyClass4c:Class4a,GenericInterface<num*>,LegacyClass4c,Object*/
 class LegacyClass4c extends Class4a implements GenericInterface<num> {}
 
-/*cfe|cfe:builder.class: LegacyClass4d:Class4a,Class4b,GenericInterface<num*>,LegacyClass4d,Object*/
-/*analyzer.class: LegacyClass4d:Class4a,Class4b,GenericInterface<num>,LegacyClass4d,Object*/
+/*class: LegacyClass4d:Class4a,Class4b,GenericInterface<num*>,LegacyClass4d,Object*/
 class LegacyClass4d implements Class4a, Class4b {}
 
-/*cfe|cfe:builder.class: LegacyClass5:Class5,GenericInterface<dynamic>,LegacyClass5,Object*/
-/*analyzer.class: LegacyClass5:Class5,GenericInterface<Object*>,LegacyClass5,Object*/
+/*class: LegacyClass5:Class5,GenericInterface<dynamic>,LegacyClass5,Object*/
 /*analyzer.error: CompileTimeErrorCode.CONFLICTING_GENERIC_INTERFACES*/
 class
 /*cfe|cfe:builder.error: AmbiguousSupertypes*/
diff --git a/pkg/_fe_analyzer_shared/test/inheritance/data/function.dart b/pkg/_fe_analyzer_shared/test/inheritance/data/function.dart
new file mode 100644
index 0000000..eef3371
--- /dev/null
+++ b/pkg/_fe_analyzer_shared/test/inheritance/data/function.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/*library: nnbd=true*/
+
+/*class: A:A,Object*/
+class A implements Function {}
+
+/*class: B:B,Object*/
+class B extends Function {}
+
+/*cfe|cfe:builder.class: C:C,Object,_C&Object&Function*/
+/*analyzer.class: C:C,Object*/
+class C extends Object with Function {}
+
+// CFE hides that this is a mixin declaration since its mixed in type has been
+// removed.
+/*cfe|cfe:builder.class: _C&Object&Function:Object,_C&Object&Function*/
+
+/*cfe|cfe:builder.class: D:D,Object*/
+class D = Object with Function;
diff --git a/pkg/_fe_analyzer_shared/test/inheritance/data/in_out_in/main.dart b/pkg/_fe_analyzer_shared/test/inheritance/data/in_out_in/main.dart
index 11d144e..55ab8f7 100644
--- a/pkg/_fe_analyzer_shared/test/inheritance/data/in_out_in/main.dart
+++ b/pkg/_fe_analyzer_shared/test/inheritance/data/in_out_in/main.dart
@@ -17,3 +17,31 @@
   /*cfe|cfe:builder.member: SubClass2.method:int? Function(int)*/
   /*analyzer.member: SubClass2.method:int* Function(int*)**/
 }
+
+/*class: GenericSubClass1a:GenericClass1,GenericInterface<int?>,GenericLegacyClass1a,GenericSubClass1a,Object*/
+/*analyzer.error: CompileTimeErrorCode.CONFLICTING_GENERIC_INTERFACES*/ abstract class GenericSubClass1a
+    extends GenericLegacyClass1a implements GenericInterface<int?> {
+  /*cfe|cfe:builder.member: GenericSubClass1a.method:int? Function(int?)*/
+  /*analyzer.member: GenericSubClass1a.method:int* Function(int*)**/
+}
+
+/*class: GenericSubClass1b:GenericClass1,GenericInterface<int?>,GenericLegacyClass1b,GenericSubClass1b,Object*/
+/*analyzer.error: CompileTimeErrorCode.CONFLICTING_GENERIC_INTERFACES*/ abstract class GenericSubClass1b
+    extends GenericLegacyClass1b implements GenericInterface<int?> {
+  /*cfe|cfe:builder.member: GenericSubClass1b.method:int? Function(int?)*/
+  /*analyzer.member: GenericSubClass1b.method:int* Function(int*)**/
+}
+
+/*class: GenericSubClass2a:GenericClass2,GenericInterface<int>,GenericLegacyClass2a,GenericSubClass2a,Object*/
+/*analyzer.error: CompileTimeErrorCode.CONFLICTING_GENERIC_INTERFACES*/ abstract class GenericSubClass2a
+    extends GenericLegacyClass2a implements GenericInterface<int> {
+  /*cfe|cfe:builder.member: GenericSubClass2a.method:int Function(int)*/
+  /*analyzer.member: GenericSubClass2a.method:int* Function(int*)**/
+}
+
+/*class: GenericSubClass2b:GenericClass2,GenericInterface<int>,GenericLegacyClass2b,GenericSubClass2b,Object*/
+/*analyzer.error: CompileTimeErrorCode.CONFLICTING_GENERIC_INTERFACES*/ abstract class GenericSubClass2b
+    extends GenericLegacyClass2b implements GenericInterface<int> {
+  /*cfe|cfe:builder.member: GenericSubClass2b.method:int Function(int)*/
+  /*analyzer.member: GenericSubClass2b.method:int* Function(int*)**/
+}
diff --git a/pkg/_fe_analyzer_shared/test/inheritance/data/in_out_in/opt_in.dart b/pkg/_fe_analyzer_shared/test/inheritance/data/in_out_in/opt_in.dart
index 2e4244b..086a993 100644
--- a/pkg/_fe_analyzer_shared/test/inheritance/data/in_out_in/opt_in.dart
+++ b/pkg/_fe_analyzer_shared/test/inheritance/data/in_out_in/opt_in.dart
@@ -15,3 +15,19 @@
   /*member: Interface.method:int? Function(int)*/
   int? method(int i) => i;
 }
+
+/*class: GenericInterface:GenericInterface<T>,Object*/
+abstract class GenericInterface<T> {
+  /*member: GenericInterface.method:T Function(T)*/
+  T method(T t);
+}
+
+/*class: GenericClass1:GenericClass1,GenericInterface<int>,Object*/
+abstract class GenericClass1 implements GenericInterface<int> {
+  /*member: GenericClass1.method:int Function(int)*/
+}
+
+/*class: GenericClass2:GenericClass2,GenericInterface<int?>,Object*/
+abstract class GenericClass2 implements GenericInterface<int?> {
+  /*member: GenericClass2.method:int? Function(int?)*/
+}
diff --git a/pkg/_fe_analyzer_shared/test/inheritance/data/in_out_in/opt_out.dart b/pkg/_fe_analyzer_shared/test/inheritance/data/in_out_in/opt_out.dart
index c3e2b41..aa5fccf 100644
--- a/pkg/_fe_analyzer_shared/test/inheritance/data/in_out_in/opt_out.dart
+++ b/pkg/_fe_analyzer_shared/test/inheritance/data/in_out_in/opt_out.dart
@@ -17,3 +17,29 @@
 abstract class LegacyClass2 extends Class {
   /*member: LegacyClass2.method:int* Function(int*)**/
 }
+
+/*class: GenericLegacyClass1a:GenericClass1,GenericInterface<int*>,GenericLegacyClass1a,Object*/
+abstract class GenericLegacyClass1a extends GenericClass1 {
+  /*cfe|cfe:builder.member: GenericLegacyClass1a.method:int* Function(int*)*/
+  /*analyzer.member: GenericLegacyClass1a.method:int* Function(int*)**/
+}
+
+/*class: GenericLegacyClass1b:GenericClass1,GenericInterface<int*>,GenericLegacyClass1b,Object*/
+abstract class GenericLegacyClass1b extends GenericClass1
+    implements GenericInterface<int> {
+  /*cfe|cfe:builder.member: GenericLegacyClass1b.method:int* Function(int*)*/
+  /*analyzer.member: GenericLegacyClass1b.method:int* Function(int*)**/
+}
+
+/*class: GenericLegacyClass2a:GenericClass2,GenericInterface<int*>,GenericLegacyClass2a,Object*/
+abstract class GenericLegacyClass2a extends GenericClass2 {
+  /*cfe|cfe:builder.member: GenericLegacyClass2a.method:int* Function(int*)*/
+  /*analyzer.member: GenericLegacyClass2a.method:int* Function(int*)**/
+}
+
+/*class: GenericLegacyClass2b:GenericClass2,GenericInterface<int*>,GenericLegacyClass2b,Object*/
+abstract class GenericLegacyClass2b extends GenericClass2
+    implements GenericInterface<int> {
+  /*cfe|cfe:builder.member: GenericLegacyClass2b.method:int* Function(int*)*/
+  /*analyzer.member: GenericLegacyClass2b.method:int* Function(int*)**/
+}
diff --git a/pkg/_fe_analyzer_shared/test/inheritance/data/issue40481.dart b/pkg/_fe_analyzer_shared/test/inheritance/data/issue40481.dart
index a388a8d..9ef0a47 100644
--- a/pkg/_fe_analyzer_shared/test/inheritance/data/issue40481.dart
+++ b/pkg/_fe_analyzer_shared/test/inheritance/data/issue40481.dart
@@ -19,8 +19,7 @@
 /*class: B1:A<Object?>,A_Object,A_dynamic,B1,Object*/
 class B1 extends A_Object implements A_dynamic {}
 
-/*cfe|cfe:builder.class: B2:A<void>,A_Object,A_void,B2,Object*/
-/*analyzer.class: B2:A<Object?>,A_Object,A_void,B2,Object*/
+/*class: B2:A<void>,A_Object,A_void,B2,Object*/
 class B2 extends A_Object implements A_void {}
 
 main() {}
diff --git a/pkg/_fe_analyzer_shared/test/inheritance/data/issue40481/main.dart b/pkg/_fe_analyzer_shared/test/inheritance/data/issue40481/main.dart
index 4206e56..4a6f1ad 100644
--- a/pkg/_fe_analyzer_shared/test/inheritance/data/issue40481/main.dart
+++ b/pkg/_fe_analyzer_shared/test/inheritance/data/issue40481/main.dart
@@ -12,12 +12,10 @@
 /*class: A_void:A<void>,A_void,Object*/
 class A_void implements A<void> {}
 
-/*cfe|cfe:builder.class: B1:A<Object?>,A_Object,A_dynamic,B1,Object*/
-/*analyzer.class: B1:A<Object*>,A_Object,A_dynamic,B1,Object*/
+/*class: B1:A<Object?>,A_Object,A_dynamic,B1,Object*/
 class B1 extends A_Object implements A_dynamic {}
 
-/*cfe|cfe:builder.class: B2:A<void>,A_Object,A_void,B2,Object*/
-/*analyzer.class: B2:A<Object*>,A_Object,A_void,B2,Object*/
+/*class: B2:A<void>,A_Object,A_void,B2,Object*/
 class B2 extends A_Object implements A_void {}
 
 main() {}
diff --git a/pkg/_fe_analyzer_shared/test/inheritance/data/issue40524/main.dart b/pkg/_fe_analyzer_shared/test/inheritance/data/issue40524/main.dart
index 2428a5f..83ad4bb 100644
--- a/pkg/_fe_analyzer_shared/test/inheritance/data/issue40524/main.dart
+++ b/pkg/_fe_analyzer_shared/test/inheritance/data/issue40524/main.dart
@@ -11,8 +11,7 @@
   /*member: B.getType:Type* Function()**/
 }
 
-/*cfe|cfe:builder.class: C:A<int?>,B,C,Object,out_int*/
-/*analyzer.class: C:A<int*>,B,C,Object,out_int*/
+/*class: C:A<int?>,B,C,Object,out_int*/
 class C extends out_int implements B {
   /*member: C.getType:Type* Function()**/
 }
diff --git a/pkg/_fe_analyzer_shared/test/inheritance/data/issue40541.dart b/pkg/_fe_analyzer_shared/test/inheritance/data/issue40541.dart
index 16456a7..4ff5000 100644
--- a/pkg/_fe_analyzer_shared/test/inheritance/data/issue40541.dart
+++ b/pkg/_fe_analyzer_shared/test/inheritance/data/issue40541.dart
@@ -26,8 +26,7 @@
   /*member: D1.test:void Function()*/
 }
 
-/*cfe|cfe:builder.class: D2:A<Object?>,B,C,D2,Object*/
-/*analyzer.class: D2:A<dynamic>,B,C,D2,Object*/
+/*class: D2:A<Object?>,B,C,D2,Object*/
 class D2 extends C implements B {
   /*member: D2.test:void Function()*/
 }
diff --git a/pkg/_fe_analyzer_shared/test/inheritance/data/issue40553/main.dart b/pkg/_fe_analyzer_shared/test/inheritance/data/issue40553/main.dart
index 46bd14d..7917c9b 100644
--- a/pkg/_fe_analyzer_shared/test/inheritance/data/issue40553/main.dart
+++ b/pkg/_fe_analyzer_shared/test/inheritance/data/issue40553/main.dart
@@ -14,8 +14,12 @@
   /*member: D.getType:Type* Function()**/
 }
 
+/// TODO: Solve CFE / analyzer disagreement.
+/// It looks to me that CFE type of `A` is incorrect.
+/// As described in https://github.com/dart-lang/sdk/issues/40553,
+/// NNBD_TOP_MERGE(FutureOr<int?>, FutureOr*<int*>) = FutureOr<int?>
 /*cfe|cfe:builder.class: E:A<FutureOr<int?>?>,B,C,E,Object*/
-/*analyzer.class: E:A<FutureOr<int*>*>,B,C,E,Object*/
+/*analyzer.class: E:A<FutureOr<int?>>,B,C,E,Object*/
 class E extends B implements C {
   /*member: E.getType:Type* Function()**/
 }
diff --git a/pkg/_fe_analyzer_shared/test/inheritance/data/members_from_opt_out/main.dart b/pkg/_fe_analyzer_shared/test/inheritance/data/members_from_opt_out/main.dart
index 0fef8c6..8ae0381 100644
--- a/pkg/_fe_analyzer_shared/test/inheritance/data/members_from_opt_out/main.dart
+++ b/pkg/_fe_analyzer_shared/test/inheritance/data/members_from_opt_out/main.dart
@@ -39,22 +39,12 @@
   /*member: Interface.method5b:int Function({int a, int b})*/
   int method5b({int a: 0, int b: 0});
 
-  /*member: Interface.method5c:int Function({required int a, required int b})*/
-  int method5c(
-      {required int /*analyzer.error: CompileTimeErrorCode.DEFAULT_VALUE_ON_REQUIRED_PARAMETER*/ a:
-          0,
-      required int /*analyzer.error: CompileTimeErrorCode.DEFAULT_VALUE_ON_REQUIRED_PARAMETER*/ b:
-          0});
-
   /*member: Interface.method6a:int? Function(int?, {int? b})*/
   int? method6a(int? a, {int? b});
 
   /*member: Interface.method6b:int? Function({int? a, int? b})*/
   int? method6b({int? a, int? b});
 
-  /*member: Interface.method6c:int? Function({required int? a, required int? b})*/
-  int? method6c({required int? a, required int? b});
-
   /*member: Interface.getter1:int*/
   int get getter1;
 
@@ -134,10 +124,8 @@
   /*member: Class1.method4c:int* Function([int*, int*])**/
   /*member: Class1.method5a:int* Function(int*, {int* b})**/
   /*member: Class1.method5b:int* Function({int* a, int* b})**/
-  /*member: Class1.method5c:int* Function({int* a, int* b})**/
   /*member: Class1.method6a:int* Function(int*, {int* b})**/
   /*member: Class1.method6b:int* Function({int* a, int* b})**/
-  /*member: Class1.method6c:int* Function({int* a, int* b})**/
   /*member: Class1.getter1:int**/
   /*member: Class1.getter2:int**/
   /*member: Class1.setter1=:int**/
@@ -190,22 +178,12 @@
   /*cfe|cfe:builder.member: Class2a.method5b:int Function({int a, int b})*/
   /*analyzer.member: Class2a.method5b:int* Function({int* a, int* b})**/
 
-  // TODO(johnniwinther): Should `method5c` be an error? It mixes required
-  // and optional named parameters.
-  /*cfe|cfe:builder.member: Class2a.method5c:int Function({int a, int b})*/
-  /*analyzer.member: Class2a.method5c:int* Function({int* a, int* b})**/
-
   /*cfe|cfe:builder.member: Class2a.method6a:int? Function(int?, {int? b})*/
   /*analyzer.member: Class2a.method6a:int* Function(int*, {int* b})**/
 
   /*cfe|cfe:builder.member: Class2a.method6b:int? Function({int? a, int? b})*/
   /*analyzer.member: Class2a.method6b:int* Function({int* a, int* b})**/
 
-  // TODO(johnniwinther): Should `method6c` be an error? It mixes required
-  // and optional named parameters.
-  /*cfe|cfe:builder.member: Class2a.method6c:int? Function({int? a, int? b})*/
-  /*analyzer.member: Class2a.method6c:int* Function({int* a, int* b})**/
-
   /*cfe|cfe:builder.member: Class2a.getter1:int*/
   /*analyzer.member: Class2a.getter1:int**/
   /*cfe|cfe:builder.member: Class2a.getter2:int?*/
@@ -299,26 +277,12 @@
   /*member: Class2b.method5b:int Function({int a, int b})*/
   int method5b({int a: 0, int b: 0}) => 0;
 
-  /*member: Class2b.method5c:int Function({required int a, required int b})*/
-  int /*analyzer.error: CompileTimeErrorCode.INVALID_OVERRIDE*/
-      method5c(
-              {required int /*analyzer.error: CompileTimeErrorCode.DEFAULT_VALUE_ON_REQUIRED_PARAMETER*/ a:
-                  0,
-              required int /*analyzer.error: CompileTimeErrorCode.DEFAULT_VALUE_ON_REQUIRED_PARAMETER*/ b:
-                  0}) =>
-          0;
-
   /*member: Class2b.method6a:int? Function(int?, {int? b})*/
   int? method6a(int? a, {int? b}) => 0;
 
   /*member: Class2b.method6b:int? Function({int? a, int? b})*/
   int? method6b({int? a, int? b}) => 0;
 
-  /*member: Class2b.method6c:int? Function({required int? a, required int? b})*/
-  int? /*analyzer.error: CompileTimeErrorCode.INVALID_OVERRIDE*/ method6c(
-          {required int? a, required int? b}) =>
-      0;
-
   /*member: Class2b.getter1:int*/
   int get getter1 => 0;
 
diff --git a/pkg/_fe_analyzer_shared/test/inheritance/data/members_from_opt_out/opt_out.dart b/pkg/_fe_analyzer_shared/test/inheritance/data/members_from_opt_out/opt_out.dart
index 97e1926..ea49b9879 100644
--- a/pkg/_fe_analyzer_shared/test/inheritance/data/members_from_opt_out/opt_out.dart
+++ b/pkg/_fe_analyzer_shared/test/inheritance/data/members_from_opt_out/opt_out.dart
@@ -39,18 +39,12 @@
   /*member: LegacyClass.method5b:int* Function({int* a, int* b})**/
   int method5b({int a, int b}) => 0;
 
-  /*member: LegacyClass.method5c:int* Function({int* a, int* b})**/
-  int method5c({int a, int b}) => 0;
-
   /*member: LegacyClass.method6a:int* Function(int*, {int* b})**/
   int method6a(int a, {int b}) => 0;
 
   /*member: LegacyClass.method6b:int* Function({int* a, int* b})**/
   int method6b({int a, int b}) => 0;
 
-  /*member: LegacyClass.method6c:int* Function({int* a, int* b})**/
-  int method6c({int a, int b}) => 0;
-
   /*member: LegacyClass.getter1:int**/
   int get getter1 => 0;
 
diff --git a/pkg/_fe_analyzer_shared/test/inheritance/data/norm_supertypes.dart b/pkg/_fe_analyzer_shared/test/inheritance/data/norm_supertypes.dart
index fc0acb4..37dcca4 100644
--- a/pkg/_fe_analyzer_shared/test/inheritance/data/norm_supertypes.dart
+++ b/pkg/_fe_analyzer_shared/test/inheritance/data/norm_supertypes.dart
@@ -12,6 +12,10 @@
 /*class: Foo:A<FutureOr<T?>>,Foo<T, S>,Object*/
 class Foo<T extends S, S extends Never> implements A<FutureOr<T?>> {}
 
+/// TODO: Solve CFE / analyzer disagreement.
+/// It looks to me that is should be `A<FutureOr<Never?>>`, because this is
+/// what is written in the code. We don't do normalization because there is
+/// only one implementation of `A` in `Bar`.
 /*cfe|cfe:builder.class: Bar:A<FutureOr<Never>>,Bar,Object*/
 /*analyzer.class: Bar:A<FutureOr<Never?>>,Bar,Object*/
 class Bar implements A<FutureOr<Never?>> {}
@@ -19,12 +23,10 @@
 /*class: Baz:A<Future<Null>?>,Baz,Object*/
 class Baz implements A<Future<Null>?> {}
 
-/*cfe|cfe:builder.class: Hest:A<Future<Null>?>,Bar,Foo<Never, Never>,Hest,Object*/
-/*analyzer.class: Hest:A<FutureOr<Never?>>,Bar,Foo<Never, Never>,Hest,Object*/
+/*class: Hest:A<Future<Null>?>,Bar,Foo<Never, Never>,Hest,Object*/
 class Hest extends Foo implements Bar {}
 
-/*cfe|cfe:builder.class: Fisk:A<Future<Null>?>,Bar,Baz,Fisk,Object*/
-/*analyzer.class: Fisk:A<FutureOr<Never?>>,Bar,Baz,Fisk,Object*/
+/*class: Fisk:A<Future<Null>?>,Bar,Baz,Fisk,Object*/
 class Fisk extends Bar implements Baz {}
 
 /*class: Naebdyr:A<Future<Null>?>,Baz,Foo<Never, Never>,Naebdyr,Object*/
diff --git a/pkg/_fe_analyzer_shared/test/inheritance/data/object_opt_out/async.dart b/pkg/_fe_analyzer_shared/test/inheritance/data/object_opt_out/async.dart
index 9dbd3d0..77a5afa 100644
--- a/pkg/_fe_analyzer_shared/test/inheritance/data/object_opt_out/async.dart
+++ b/pkg/_fe_analyzer_shared/test/inheritance/data/object_opt_out/async.dart
@@ -6,10 +6,8 @@
 
 /*library: nnbd=false*/
 
-/*cfe|cfe:builder.class: Future:Future<T*>,Object*/
-/*analyzer.class: Future:Future<T>,Object*/
+/*class: Future:Future<T*>,Object*/
 class Future<T> {}
 
-/*cfe|cfe:builder.class: FutureOr:FutureOr<T*>,Object*/
-/*analyzer.class: FutureOr:FutureOr<T>,Object*/
+/*class: FutureOr:FutureOr<T*>,Object*/
 class FutureOr<T> {}
diff --git a/pkg/_fe_analyzer_shared/test/inheritance/data/object_opt_out/core.dart b/pkg/_fe_analyzer_shared/test/inheritance/data/object_opt_out/core.dart
index 7601e98..2712fa3 100644
--- a/pkg/_fe_analyzer_shared/test/inheritance/data/object_opt_out/core.dart
+++ b/pkg/_fe_analyzer_shared/test/inheritance/data/object_opt_out/core.dart
@@ -46,27 +46,22 @@
 /*class: String:Object,String*/
 class String {}
 
-/*cfe|cfe:builder.class: Iterable:Iterable<E*>,Object*/
-/*analyzer.class: Iterable:Iterable<E>,Object*/
+/*class: Iterable:Iterable<E*>,Object*/
 abstract class Iterable<E> {}
 
-/*cfe|cfe:builder.class: List:EfficientLengthIterable<E*>,Iterable<E*>,List<E*>,Object*/
-/*analyzer.class: List:Iterable<E>,List<E>,Object*/
+/*class: List:EfficientLengthIterable<E*>,Iterable<E*>,List<E*>,Object*/
 abstract class List<E> implements EfficientLengthIterable<E> {
   /*cfe|cfe:builder.member: List.==:bool* Function(Object*)**/
   bool operator ==(Object other);
 }
 
-/*cfe|cfe:builder.class: Set:Iterable<E*>,Object,Set<E*>*/
-/*analyzer.class: Set:Iterable<E>,Object,Set<E>*/
+/*class: Set:Iterable<E*>,Object,Set<E*>*/
 class Set<E> implements Iterable<E> {}
 
-/*cfe|cfe:builder.class: Map:Map<K*, V*>,Object*/
-/*analyzer.class: Map:Map<K, V>,Object*/
+/*class: Map:Map<K*, V*>,Object*/
 class Map<K, V> {}
 
-/*cfe|cfe:builder.class: Stream:Object,Stream<E*>*/
-/*analyzer.class: Stream:Object,Stream<E>*/
+/*class: Stream:Object,Stream<E*>*/
 class Stream<E> {}
 
 /*class: Function:Function,Object*/
diff --git a/pkg/analysis_server/lib/src/edit/nnbd_migration/README.md b/pkg/analysis_server/lib/src/edit/nnbd_migration/README.md
deleted file mode 100644
index be03e90..0000000
--- a/pkg/analysis_server/lib/src/edit/nnbd_migration/README.md
+++ /dev/null
@@ -1,50 +0,0 @@
-# Null Safety Migration Tooling
-
-Note: the null safety migration tooling and workflow is in an early state;
-this doc will be updated as the steps and workflow are simplified.
-
-## Building the NNBD sdk
-
-In order to run the tool currently you have to be able to build your own copy
-of the Dart SDK.
-
-To do this, run:
-
-```
-./tools/build.py -mrelease --nnbd create_sdk
-```
-
-The NNBD sdk now lives under the ReleaseX64NNBD sub-directory of your build
-directory, e.g.
-
-```
-xcodebuild/ReleaseX64NNBD/dart-sdk/
-```
-
-## Migrating a package
-
-- build a NNBD version of the SDK (see above)
-- select a package to work on
-- in that package, edit the `analysis_options.yaml` to enable the NNBD
-  experiment from the POV of the analyzer:
-```yaml
-analyzer:
-  enable-experiment:
-    - non-nullable
-```
-- run `pub get` for the package (and, verify that the
-  `.dart_tool/package_config.json` file was created)
-
-Then, run the migration tool from the top-level of the package directory:
-
-```
-<sdk-repo>/xcodebuild/ReleaseX64NNBD/dart migrate .
-```
-
-The migration tool will run, print the proposed changes to the console, and
-display a url for the preview tool. Open that url from a browser to see a rich
-preview of the proposed null safety changes.
-
-## Using the tool
-
-TODO:
diff --git a/pkg/analysis_server/lib/src/edit/nnbd_migration/info_builder.dart b/pkg/analysis_server/lib/src/edit/nnbd_migration/info_builder.dart
index bf2926f2..f006600 100644
--- a/pkg/analysis_server/lib/src/edit/nnbd_migration/info_builder.dart
+++ b/pkg/analysis_server/lib/src/edit/nnbd_migration/info_builder.dart
@@ -48,20 +48,13 @@
   /// The [NullabilityMigration] instance for this migration.
   final NullabilityMigration migration;
 
-  /// A flag indicating whether types that were not changed (because they should
-  /// be non-nullable) should be explained.
-  final bool explainNonNullableTypes;
-
   /// A map from the path of a compilation unit to the information about that
   /// unit.
   final Map<String, UnitInfo> unitMap = {};
 
   /// Initialize a newly created builder.
   InfoBuilder(this.provider, this.includedPath, this.info, this.listener,
-      this.adapter, this.migration,
-      // TODO(srawlins): Re-enable once
-      //  https://github.com/dart-lang/sdk/issues/40253 is fixed.
-      {this.explainNonNullableTypes = false});
+      this.adapter, this.migration);
 
   /// The analysis server used to get information about libraries.
   AnalysisServer get server => listener.server;
@@ -478,7 +471,7 @@
         // There's no need for hints around code that is being removed.
         break;
       case NullabilityFixKind.makeTypeNullable:
-      case NullabilityFixKind.noModification:
+      case NullabilityFixKind.typeNotMadeNullable:
         edits.add(
             EditDetail('Force type to be non-nullable.', offset, 0, '/*!*/'));
         edits.add(EditDetail('Force type to be nullable.', offset, 0, '/*?*/'));
@@ -523,6 +516,11 @@
     }
     assert(identical(step.node, node));
     while (step != null) {
+      if (step.node == info.never) {
+        // Assert that we are only ever trimming off the last step.
+        assert(step.principalCause == null);
+        break;
+      }
       entries.add(_nodeToTraceEntry(step.node));
       if (step.codeReference != null) {
         entries.add(_stepToTraceEntry(step));
@@ -543,6 +541,12 @@
     assert(identical(step.targetNode, node));
     while (step != null) {
       entries.add(_nodeToTraceEntry(step.targetNode));
+      if (step.targetNode.upstreamEdges.isNotEmpty &&
+          step.targetNode.upstreamEdges.first.sourceNode == info.always) {
+        // Assert that we are only ever trimming off the last step.
+        assert(step.principalCause == null);
+        break;
+      }
       if (step.codeReference != null) {
         entries.add(_stepToTraceEntry(step));
       }
@@ -558,6 +562,8 @@
       if (reason is NullabilityNodeInfo) {
         if (reason.isNullable) {
           _computeTraceNullableInfo(reason, traces);
+        } else {
+          _computeTraceNonNullableInfo(reason, traces);
         }
       } else if (reason is EdgeInfo) {
         assert(reason.sourceNode.isNullable);
@@ -571,36 +577,6 @@
     return traces;
   }
 
-  /// Compute details about [edgeInfos] which are upstream triggered.
-  List<RegionDetail> _computeUpstreamTriggeredDetails(
-      Iterable<EdgeInfo> edgeInfos) {
-    List<RegionDetail> details = [];
-    for (var edge in edgeInfos) {
-      EdgeOriginInfo origin = info.edgeOrigin[edge];
-      if (origin == null) {
-        // TODO(srawlins): I think this shouldn't happen? But it does on the
-        //  collection and path packages.
-        assert(false, 'edge with no origin $edge');
-        continue;
-      }
-      NavigationTarget target =
-          _proximateTargetForNode(origin.source.fullName, origin.node);
-      if (origin.kind == EdgeOriginKind.expressionChecks) {
-        details.add(RegionDetail(
-            'This value is unconditionally used in a non-nullable context',
-            target));
-      } else if (origin.kind == EdgeOriginKind.nonNullAssertion) {
-        details
-            .add(RegionDetail('This value is asserted to be non-null', target));
-      } else if (origin.kind == EdgeOriginKind.nullabilityComment) {
-        details.add(RegionDetail(
-            'This type is annotated with a non-nullability comment ("/*!*/")',
-            target));
-      }
-    }
-    return details;
-  }
-
   /// Describe why an edge may have gotten a '!'.
   String _describeNonNullEdge(EdgeOriginInfo edge) {
     // TODO(mfairhurst/paulberry): Do NOT use astNode/parent to create this
@@ -618,37 +594,6 @@
     return 'This value must be null-checked before use here.';
   }
 
-  /// Explain the type annotations that were not changed because they were
-  /// determined to be non-nullable.
-  void _explainNonNullableTypes(SourceInformation sourceInfo,
-      List<RegionInfo> regions, OffsetMapper mapper, LineInfo lineInfo) {
-    Iterable<MapEntry<TypeAnnotation, NullabilityNodeInfo>> nonNullableTypes =
-        sourceInfo.explicitTypeNullability.entries
-            .where((entry) => !entry.value.isNullable);
-    for (MapEntry<TypeAnnotation, NullabilityNodeInfo> nonNullableType
-        in nonNullableTypes) {
-      Iterable<EdgeInfo> upstreamTriggeredEdgeInfos = info.edgeOrigin.keys
-          .where((e) =>
-              e.sourceNode == nonNullableType.value &&
-              e.isUpstreamTriggered &&
-              !e.destinationNode.isNullable);
-      if (upstreamTriggeredEdgeInfos.isNotEmpty) {
-        List<RegionDetail> details =
-            _computeUpstreamTriggeredDetails(upstreamTriggeredEdgeInfos);
-        if (details.isNotEmpty) {
-          TypeAnnotation node = nonNullableType.key;
-          regions.add(RegionInfo(
-              RegionType.unchanged,
-              mapper.map(node.offset),
-              node.length,
-              lineInfo.getLocation(node.offset).lineNumber,
-              'This type is not changed; it is determined to be non-nullable',
-              details));
-        }
-      }
-    }
-  }
-
   /// Return the migration information for the unit associated with the
   /// [result].
   UnitInfo _explainUnit(SourceInformation sourceInfo, ResolvedUnitResult result,
@@ -703,9 +648,15 @@
                 lineNumber, explanation, details,
                 edits: edits, traces: traces));
           } else {
-            regions.add(RegionInfo(RegionType.add, offset, replacement.length,
-                lineNumber, explanation, details,
-                edits: edits, traces: traces));
+            if (edit.isInformative) {
+              regions.add(RegionInfo(RegionType.informative, offset,
+                  replacement.length, lineNumber, explanation, const [],
+                  edits: edits, traces: traces));
+            } else {
+              regions.add(RegionInfo(RegionType.add, offset, replacement.length,
+                  lineNumber, explanation, details,
+                  edits: edits, traces: traces));
+            }
           }
         }
         offset += replacement.length;
@@ -718,11 +669,6 @@
     List<SourceEdit> edits = insertions.toSourceEdits();
     edits.sort((first, second) => first.offset.compareTo(second.offset));
     OffsetMapper mapper = OffsetMapper.forEdits(edits);
-
-    if (explainNonNullableTypes) {
-      _explainNonNullableTypes(
-          sourceInfo, regions, mapper, result.unit.lineInfo);
-    }
     regions.sort((first, second) => first.offset.compareTo(second.offset));
     unitInfo.offsetMapper = mapper;
     unitInfo.content = content;
diff --git a/pkg/analysis_server/lib/src/edit/nnbd_migration/migration_info.dart b/pkg/analysis_server/lib/src/edit/nnbd_migration/migration_info.dart
index a80ef58..7bd0a6d 100644
--- a/pkg/analysis_server/lib/src/edit/nnbd_migration/migration_info.dart
+++ b/pkg/analysis_server/lib/src/edit/nnbd_migration/migration_info.dart
@@ -181,9 +181,9 @@
   /// This is a region of code that was removed in migration.
   remove,
 
-  /// This is a region of code that was unchanged in migration; likely a type
-  /// that was declared non-nullable in migration.
-  unchanged,
+  /// This is a region of code that wasn't changed by migration, but is being
+  /// shown to give the user more information about the migration.
+  informative,
 }
 
 /// Information about a single entry in a nullability trace.
@@ -240,13 +240,14 @@
   UnitInfo(this.path);
 
   /// Returns the [regions] that represent a fixed (changed) region of code.
-  List<RegionInfo> get fixRegions => List.of(
-      regions.where((region) => region.regionType != RegionType.unchanged));
+  List<RegionInfo> get fixRegions => regions
+      .where((region) => region.regionType != RegionType.informative)
+      .toList();
 
-  /// Returns the [regions] that represent an unchanged type which was
-  /// determined to be non-null.
-  List<RegionInfo> get nonNullableTypeRegions => List.of(
-      regions.where((region) => region.regionType == RegionType.unchanged));
+  /// Returns the [regions] that are informative.
+  List<RegionInfo> get informativeRegions => regions
+      .where((region) => region.regionType == RegionType.informative)
+      .toList();
 
   /// Returns the [RegionInfo] at offset [offset].
   // TODO(srawlins): This is O(n), used each time the user clicks on a region.
diff --git a/pkg/analysis_server/lib/src/edit/nnbd_migration/resources/index.html b/pkg/analysis_server/lib/src/edit/nnbd_migration/resources/index.html
index 9dbed6e..6fa41e4 100644
--- a/pkg/analysis_server/lib/src/edit/nnbd_migration/resources/index.html
+++ b/pkg/analysis_server/lib/src/edit/nnbd_migration/resources/index.html
@@ -53,7 +53,7 @@
 </div><!-- /panels -->
 <footer>
     <a target="_blank"
-       href="https://github.com/dart-lang/sdk/blob/master/pkg/analysis_server/lib/src/edit/nnbd_migration/README.md">Null
+       href="https://github.com/dart-lang/sdk/blob/master/pkg/nnbd_migration/README.md">Null
         safety migration help</a>
     <span class="wide"> </span>
     <div>Based on {{ sdkVersion }}</div>
diff --git a/pkg/analysis_server/lib/src/edit/nnbd_migration/resources/migration.css b/pkg/analysis_server/lib/src/edit/nnbd_migration/resources/migration.css
index 0c63e02..27c3340 100644
--- a/pkg/analysis_server/lib/src/edit/nnbd_migration/resources/migration.css
+++ b/pkg/analysis_server/lib/src/edit/nnbd_migration/resources/migration.css
@@ -280,13 +280,9 @@
   color: #001100;
 }
 
-.region.unchanged-region {
-  background-color: rgba(0, 0, 0, 0.3);
-  border-bottom: solid 2px #ccc;
-  /* Invisible text; use underlying highlighting. */
-  color: rgba(0, 0, 0, 0);
-  /* Reduce line height to make room for border. */
-  line-height: 1;
+.region.informative-region {
+  background-color: #888888;
+  color: #000000;
 }
 
 .target {
diff --git a/pkg/analysis_server/lib/src/edit/nnbd_migration/resources/resources.g.dart b/pkg/analysis_server/lib/src/edit/nnbd_migration/resources/resources.g.dart
index 3a39789..1a941df 100644
--- a/pkg/analysis_server/lib/src/edit/nnbd_migration/resources/resources.g.dart
+++ b/pkg/analysis_server/lib/src/edit/nnbd_migration/resources/resources.g.dart
@@ -270,7 +270,7 @@
 ''';
 
 String _index_html;
-// index_html md5 is '5ea053889e3c34ee57db31a5a3d2d8b9'
+// index_html md5 is '54a9928481db293c8e6d1869622d95a2'
 String _index_html_base64 = '''
 PGh0bWw+CjxoZWFkPgogICAgPHRpdGxlPk51bGwgU2FmZXR5IFByZXZpZXc8L3RpdGxlPgogICAgPHNj
 cmlwdCBzcmM9Int7IGhpZ2hsaWdodEpzUGF0aCB9fSI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0Pnt7IGRh
@@ -309,14 +309,14 @@
 ZWwtY29udGVudCAtLT4KICAgICAgICA8L2Rpdj48IS0tIC9lZGl0LXBhbmVsIC0tPgogICAgPC9kaXY+
 PCEtLSAvaW5mby1wYW5lbCAtLT4KPC9kaXY+PCEtLSAvcGFuZWxzIC0tPgo8Zm9vdGVyPgogICAgPGEg
 dGFyZ2V0PSJfYmxhbmsiCiAgICAgICBocmVmPSJodHRwczovL2dpdGh1Yi5jb20vZGFydC1sYW5nL3Nk
-ay9ibG9iL21hc3Rlci9wa2cvYW5hbHlzaXNfc2VydmVyL2xpYi9zcmMvZWRpdC9ubmJkX21pZ3JhdGlv
-bi9SRUFETUUubWQiPk51bGwKICAgICAgICBzYWZldHkgbWlncmF0aW9uIGhlbHA8L2E+CiAgICA8c3Bh
-biBjbGFzcz0id2lkZSI+IDwvc3Bhbj4KICAgIDxkaXY+QmFzZWQgb24ge3sgc2RrVmVyc2lvbiB9fTwv
-ZGl2Pgo8L2Zvb3Rlcj4KPC9ib2R5Pgo8L2h0bWw+Cg==
+ay9ibG9iL21hc3Rlci9wa2cvbm5iZF9taWdyYXRpb24vUkVBRE1FLm1kIj5OdWxsCiAgICAgICAgc2Fm
+ZXR5IG1pZ3JhdGlvbiBoZWxwPC9hPgogICAgPHNwYW4gY2xhc3M9IndpZGUiPiA8L3NwYW4+CiAgICA8
+ZGl2PkJhc2VkIG9uIHt7IHNka1ZlcnNpb24gfX08L2Rpdj4KPC9mb290ZXI+CjwvYm9keT4KPC9odG1s
+Pgo=
 ''';
 
 String _migration_css;
-// migration_css md5 is '2bfe65627f29ccb0a43fa1b79569a571'
+// migration_css md5 is '2b325a70e847b11533218ca621f9763f'
 String _migration_css_base64 = '''
 LyogQ29weXJpZ2h0IChjKSAyMDE5LCB0aGUgRGFydCBwcm9qZWN0IGF1dGhvcnMuIFBsZWFzZSBzZWUg
 dGhlIEFVVEhPUlMgZmlsZSAgKi8KLyogZm9yIGRldGFpbHMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFVz
@@ -388,56 +388,53 @@
 bG9jazsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgdmlzaWJpbGl0eTogdmlzaWJsZTsKICB6LWluZGV4
 OiAyMDA7Cn0KCi5yZWdpb24uYWRkZWQtcmVnaW9uIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjY2NmZmNj
 OwogIGNvbG9yOiAjMDAzMzAwOwp9CgoucmVnaW9uLnJlbW92ZWQtcmVnaW9uIHsKICBiYWNrZ3JvdW5k
-LWNvbG9yOiAjZmY2NjY2OwogIGNvbG9yOiAjMDAxMTAwOwp9CgoucmVnaW9uLnVuY2hhbmdlZC1yZWdp
-b24gewogIGJhY2tncm91bmQtY29sb3I6IHJnYmEoMCwgMCwgMCwgMC4zKTsKICBib3JkZXItYm90dG9t
-OiBzb2xpZCAycHggI2NjYzsKICAvKiBJbnZpc2libGUgdGV4dDsgdXNlIHVuZGVybHlpbmcgaGlnaGxp
-Z2h0aW5nLiAqLwogIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDApOwogIC8qIFJlZHVjZSBsaW5lIGhlaWdo
-dCB0byBtYWtlIHJvb20gZm9yIGJvcmRlci4gKi8KICBsaW5lLWhlaWdodDogMTsKfQoKLnRhcmdldCB7
-CiAgYmFja2dyb3VuZC1jb2xvcjogIzQ0NDsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgdmlzaWJpbGl0
-eTogdmlzaWJsZTsKICBmb250LXdlaWdodDogNjAwOwp9CgouaW5mby1wYW5lbCB7CiAgZmxleDogMSAy
-MDBweDsKICBtYXJnaW46IDA7CiAgaGVpZ2h0OiAxMDAlOwogIGRpc3BsYXk6IGZsZXg7CiAgZmxleC1k
-aXJlY3Rpb246IGNvbHVtbjsKfQoKLmluZm8tcGFuZWwgLmVkaXQtcGFuZWwgewogIGJhY2tncm91bmQt
-Y29sb3I6ICMyODJiMmU7CiAgb3ZlcmZsb3c6IGF1dG87Cn0KCi5pbmZvLXBhbmVsIC5wYW5lbC1jb250
-ZW50IHsKICBwYWRkaW5nOiA3cHg7Cn0KCi5pbmZvLXBhbmVsIC5wYW5lbC1jb250ZW50PiA6Zmlyc3Qt
-Y2hpbGQgewogIG1hcmdpbi10b3A6IDA7Cn0KCi5pbmZvLXBhbmVsIC5ub3dyYXAgewogIHdoaXRlLXNw
-YWNlOiBub3dyYXA7Cn0KCi5pbmZvLXBhbmVsIHVsLAouaW5mby1wYW5lbCBvbCB7CiAgcGFkZGluZy1s
-ZWZ0OiAyMHB4Owp9CgouaW5mby1wYW5lbCBsaSB7CiAgbWFyZ2luOiAwIDAgNXB4IDA7Cn0KCi5pbmZv
-LXBhbmVsIGEgewogIGNvbG9yOiAjMzNjY2ZmOwp9CgouaW5mby1wYW5lbCAuZWRpdC1saXN0IHsKICBi
-YWNrZ3JvdW5kLWNvbG9yOiAjMjgyYjJlOwogIG92ZXJmbG93OiBhdXRvOwp9CgouZWRpdC1wYW5lbCB7
-CiAgbWFyZ2luLXRvcDogNnB4OwogIGZsZXg6IDEgMTAwcHg7Cn0KCi5lZGl0LWxpc3QgewogIGZsZXg6
-IDIgMTAwcHg7Cn0KCi5lZGl0LWxpc3QgLmVkaXQgewogIG1hcmdpbjogM3B4IDA7Cn0KCi5lZGl0LWxp
-c3QgLmVkaXQtbGluayB7CiAgY3Vyc29yOiBwb2ludGVyOwp9CgoucmVydW5uaW5nLXBhbmUgewogIGRp
-c3BsYXk6IG5vbmU7Cn0KCmJvZHkucmVydW5uaW5nIC5yZXJ1bm5pbmctcGFuZSB7CiAgZGlzcGxheTog
-YmxvY2s7CiAgcG9zaXRpb246IGZpeGVkOwogIHRvcDogMHB4OwogIGJvdHRvbTogMHB4OwogIGxlZnQ6
-IDBweDsKICByaWdodDogMHB4OwogIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDBBQTsgLyogdHJhbnNs
-dWNlbnQgYmxhY2sgKi8KICB6LWluZGV4OiA0MDA7Cn0KCi5yZXJ1bm5pbmctcGFuZSBoMSB7CiAgcG9z
-aXRpb246IGFic29sdXRlOwogIHRvcDogNTAlOwogIGxlZnQ6IDUwJTsKICB0cmFuc2Zvcm06IHRyYW5z
-bGF0ZSgtNTAlLCAtNTAlKTsKfQoKcC50cmFjZSAudHlwZS1kZXNjcmlwdGlvbiB7CiAgLyogRnJvbSBI
-TEpTJ3MgLmhsanMta2V5d29yZCwgLmhsanMtc2VsZWN0b3ItdGFnLCAuaGxqcy1kZWxldGlvbiAqLwog
-IGNvbG9yOiAjY2M3ODMyOwogIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cn0KCnVsLnRyYWNlIHsKICBm
-b250LXNpemU6IDEzcHg7CiAgbGlzdC1zdHlsZS10eXBlOiBub25lOwogIHBhZGRpbmctbGVmdDogMHB4
-Owp9Cgp1bC50cmFjZSBsaSB7CiAgY29sb3I6IHdoaXRlOwogIG1hcmdpbi1sZWZ0OiAxNHB4OwogIHRl
-eHQtaW5kZW50OiAtMTRweDsKfQoKdWwudHJhY2UgbGkgLmZ1bmN0aW9uIHsKICAvKiBGcm9tIEhMSlMn
-cyAuaGxqcy1zZWN0aW9uLCAuaGxqcy10aXRsZSwgLmhsanMtdHlwZSAqLwogIGNvbG9yOiAjZmZjNjZk
-OwogIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgZm9udC13ZWlnaHQ6IDYwMDsKfQoKLmVsZXZhdGlv
-bi16NCB7CiAgYm94LXNoYWRvdzogMHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAuMiksCiAg
-ICAgIDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAwcHggMXB4IDEwcHgg
-MHB4IHJnYmEoMCwgMCwgMCwgLjEyKTsKfQoKYSB7CiAgY29sb3I6ICNjY2M7CiAgZmlsbDogI2NjYzsK
-ICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCmE6aG92ZXIgewogIGNvbG9yOiAjZmZmOwogIGZpbGw6
-ICNmZmY7Cn0KCmJ1dHRvbiB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzMzY2NmZjsKICBib3JkZXI6IDJw
-eCBzb2xpZCAjMzdhZWRjOwogIGJvcmRlci1yYWRpdXM6IDNweDsKICBwYWRkaW5nOiA2cHggMTBweDsK
-ICBmb250LXdlaWdodDogYm9sZDsKICBjb2xvcjogIzI4MjgyODsKfQoKYnV0dG9uOmhvdmVyIHsKICBi
-YWNrZ3JvdW5kLWNvbG9yOiAjODBkZmZmOwogIGJvcmRlcjogMnB4IHNvbGlkICM1MmI4ZTA7CiAgY3Vy
-c29yOiBwb2ludGVyOwp9CgpidXR0b25bZGlzYWJsZWRdIHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjN2Fh
-OGI4OwogIGNvbG9yOiAjNTA3MTc3OwogIGJvcmRlcjogMnB4IHNvbGlkICM1MDcxNzc7CiAgY3Vyc29y
-OiBub3QtYWxsb3dlZDsKfQoKLnBsYWNlaG9sZGVyIHsKICBjb2xvcjogIzc3NzsKICB0ZXh0LWFsaWdu
-OiBjZW50ZXI7CiAgbWFyZ2luLXRvcDogM2VtICFpbXBvcnRhbnQ7Cn0KCi8qKgogKiBITEpTIE92ZXJy
-aWRlcwogKi8KLmhsanMgewogIC8qKgogICAqIFRoaXMgYWxsb3dzIHRoZSBwZXItbGluZSBoaWdobGln
-aHRzIHRvIHNob3cuCiAgICovCiAgYmFja2dyb3VuZDogbm9uZTsKfQo=
+LWNvbG9yOiAjZmY2NjY2OwogIGNvbG9yOiAjMDAxMTAwOwp9CgoucmVnaW9uLmluZm9ybWF0aXZlLXJl
+Z2lvbiB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzg4ODg4ODsKICBjb2xvcjogIzAwMDAwMDsKfQoKLnRh
+cmdldCB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzQ0NDsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgdmlz
+aWJpbGl0eTogdmlzaWJsZTsKICBmb250LXdlaWdodDogNjAwOwp9CgouaW5mby1wYW5lbCB7CiAgZmxl
+eDogMSAyMDBweDsKICBtYXJnaW46IDA7CiAgaGVpZ2h0OiAxMDAlOwogIGRpc3BsYXk6IGZsZXg7CiAg
+ZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKfQoKLmluZm8tcGFuZWwgLmVkaXQtcGFuZWwgewogIGJhY2tn
+cm91bmQtY29sb3I6ICMyODJiMmU7CiAgb3ZlcmZsb3c6IGF1dG87Cn0KCi5pbmZvLXBhbmVsIC5wYW5l
+bC1jb250ZW50IHsKICBwYWRkaW5nOiA3cHg7Cn0KCi5pbmZvLXBhbmVsIC5wYW5lbC1jb250ZW50PiA6
+Zmlyc3QtY2hpbGQgewogIG1hcmdpbi10b3A6IDA7Cn0KCi5pbmZvLXBhbmVsIC5ub3dyYXAgewogIHdo
+aXRlLXNwYWNlOiBub3dyYXA7Cn0KCi5pbmZvLXBhbmVsIHVsLAouaW5mby1wYW5lbCBvbCB7CiAgcGFk
+ZGluZy1sZWZ0OiAyMHB4Owp9CgouaW5mby1wYW5lbCBsaSB7CiAgbWFyZ2luOiAwIDAgNXB4IDA7Cn0K
+Ci5pbmZvLXBhbmVsIGEgewogIGNvbG9yOiAjMzNjY2ZmOwp9CgouaW5mby1wYW5lbCAuZWRpdC1saXN0
+IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjMjgyYjJlOwogIG92ZXJmbG93OiBhdXRvOwp9CgouZWRpdC1w
+YW5lbCB7CiAgbWFyZ2luLXRvcDogNnB4OwogIGZsZXg6IDEgMTAwcHg7Cn0KCi5lZGl0LWxpc3Qgewog
+IGZsZXg6IDIgMTAwcHg7Cn0KCi5lZGl0LWxpc3QgLmVkaXQgewogIG1hcmdpbjogM3B4IDA7Cn0KCi5l
+ZGl0LWxpc3QgLmVkaXQtbGluayB7CiAgY3Vyc29yOiBwb2ludGVyOwp9CgoucmVydW5uaW5nLXBhbmUg
+ewogIGRpc3BsYXk6IG5vbmU7Cn0KCmJvZHkucmVydW5uaW5nIC5yZXJ1bm5pbmctcGFuZSB7CiAgZGlz
+cGxheTogYmxvY2s7CiAgcG9zaXRpb246IGZpeGVkOwogIHRvcDogMHB4OwogIGJvdHRvbTogMHB4Owog
+IGxlZnQ6IDBweDsKICByaWdodDogMHB4OwogIGJhY2tncm91bmQtY29sb3I6ICMwMDAwMDBBQTsgLyog
+dHJhbnNsdWNlbnQgYmxhY2sgKi8KICB6LWluZGV4OiA0MDA7Cn0KCi5yZXJ1bm5pbmctcGFuZSBoMSB7
+CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRvcDogNTAlOwogIGxlZnQ6IDUwJTsKICB0cmFuc2Zvcm06
+IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKfQoKcC50cmFjZSAudHlwZS1kZXNjcmlwdGlvbiB7CiAgLyog
+RnJvbSBITEpTJ3MgLmhsanMta2V5d29yZCwgLmhsanMtc2VsZWN0b3ItdGFnLCAuaGxqcy1kZWxldGlv
+biAqLwogIGNvbG9yOiAjY2M3ODMyOwogIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cn0KCnVsLnRyYWNl
+IHsKICBmb250LXNpemU6IDEzcHg7CiAgbGlzdC1zdHlsZS10eXBlOiBub25lOwogIHBhZGRpbmctbGVm
+dDogMHB4Owp9Cgp1bC50cmFjZSBsaSB7CiAgY29sb3I6IHdoaXRlOwogIG1hcmdpbi1sZWZ0OiAxNHB4
+OwogIHRleHQtaW5kZW50OiAtMTRweDsKfQoKdWwudHJhY2UgbGkgLmZ1bmN0aW9uIHsKICAvKiBGcm9t
+IEhMSlMncyAuaGxqcy1zZWN0aW9uLCAuaGxqcy10aXRsZSwgLmhsanMtdHlwZSAqLwogIGNvbG9yOiAj
+ZmZjNjZkOwogIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgZm9udC13ZWlnaHQ6IDYwMDsKfQoKLmVs
+ZXZhdGlvbi16NCB7CiAgYm94LXNoYWRvdzogMHB4IDJweCA0cHggLTFweCByZ2JhKDAsIDAsIDAsIDAu
+MiksCiAgICAgIDBweCA0cHggNXB4IDBweCByZ2JhKDAsIDAsIDAsIDAuMTQpLAogICAgICAwcHggMXB4
+IDEwcHggMHB4IHJnYmEoMCwgMCwgMCwgLjEyKTsKfQoKYSB7CiAgY29sb3I6ICNjY2M7CiAgZmlsbDog
+I2NjYzsKICB0ZXh0LWRlY29yYXRpb246IG5vbmU7Cn0KCmE6aG92ZXIgewogIGNvbG9yOiAjZmZmOwog
+IGZpbGw6ICNmZmY7Cn0KCmJ1dHRvbiB7CiAgYmFja2dyb3VuZC1jb2xvcjogIzMzY2NmZjsKICBib3Jk
+ZXI6IDJweCBzb2xpZCAjMzdhZWRjOwogIGJvcmRlci1yYWRpdXM6IDNweDsKICBwYWRkaW5nOiA2cHgg
+MTBweDsKICBmb250LXdlaWdodDogYm9sZDsKICBjb2xvcjogIzI4MjgyODsKfQoKYnV0dG9uOmhvdmVy
+IHsKICBiYWNrZ3JvdW5kLWNvbG9yOiAjODBkZmZmOwogIGJvcmRlcjogMnB4IHNvbGlkICM1MmI4ZTA7
+CiAgY3Vyc29yOiBwb2ludGVyOwp9CgpidXR0b25bZGlzYWJsZWRdIHsKICBiYWNrZ3JvdW5kLWNvbG9y
+OiAjN2FhOGI4OwogIGNvbG9yOiAjNTA3MTc3OwogIGJvcmRlcjogMnB4IHNvbGlkICM1MDcxNzc7CiAg
+Y3Vyc29yOiBub3QtYWxsb3dlZDsKfQoKLnBsYWNlaG9sZGVyIHsKICBjb2xvcjogIzc3NzsKICB0ZXh0
+LWFsaWduOiBjZW50ZXI7CiAgbWFyZ2luLXRvcDogM2VtICFpbXBvcnRhbnQ7Cn0KCi8qKgogKiBITEpT
+IE92ZXJyaWRlcwogKi8KLmhsanMgewogIC8qKgogICAqIFRoaXMgYWxsb3dzIHRoZSBwZXItbGluZSBo
+aWdobGlnaHRzIHRvIHNob3cuCiAgICovCiAgYmFja2dyb3VuZDogbm9uZTsKfQo=
 ''';
 
 String _migration_js;
-// migration_dart md5 is 'fed856f862bffea0f76b893ef77223dc'
+// migration_dart md5 is '6520368a5d56a6a3d8049dbc6ac1b17f'
 String _migration_js_base64 = '''
 KGZ1bmN0aW9uIGRhcnRQcm9ncmFtKCl7ZnVuY3Rpb24gY29weVByb3BlcnRpZXMoYSxiKXt2YXIgdD1P
 YmplY3Qua2V5cyhhKQpmb3IodmFyIHM9MDtzPHQubGVuZ3RoO3MrKyl7dmFyIHI9dFtzXQpiW3JdPWFb
@@ -536,3415 +533,3414 @@
 ZiB0IT0ic3RyaW5nIil0aHJvdyBILmIoSC50TChhKSkKcmV0dXJuIHR9LAplUTpmdW5jdGlvbihhKXt2
 YXIgdD1hLiRpZGVudGl0eUhhc2gKaWYodD09bnVsbCl7dD1NYXRoLnJhbmRvbSgpKjB4M2ZmZmZmZmZ8
 MAphLiRpZGVudGl0eUhhc2g9dH1yZXR1cm4gdH0sCkhwOmZ1bmN0aW9uKGEsYil7dmFyIHQscyxyLHEs
-cCxvCmlmKHR5cGVvZiBhIT0ic3RyaW5nIilILnZoKEgudEwoYSkpCnQ9L15ccypbKy1dPygoMHhbYS1m
-MC05XSspfChcZCspfChbYS16MC05XSspKVxzKiQvaS5leGVjKGEpCmlmKHQ9PW51bGwpcmV0dXJuCmlm
-KDM+PXQubGVuZ3RoKXJldHVybiBILk9IKHQsMykKcz1ILnkodFszXSkKaWYoYj09bnVsbCl7aWYocyE9
-bnVsbClyZXR1cm4gcGFyc2VJbnQoYSwxMCkKaWYodFsyXSE9bnVsbClyZXR1cm4gcGFyc2VJbnQoYSwx
-NikKcmV0dXJufWlmKGI8Mnx8Yj4zNil0aHJvdyBILmIoUC5URShiLDIsMzYsInJhZGl4IixudWxsKSkK
-aWYoYj09PTEwJiZzIT1udWxsKXJldHVybiBwYXJzZUludChhLDEwKQppZihiPDEwfHxzPT1udWxsKXty
-PWI8PTEwPzQ3K2I6ODYrYgpxPXRbMV0KZm9yKHA9cS5sZW5ndGgsbz0wO288cDsrK28paWYoKEMueEIu
-VyhxLG8pfDMyKT5yKXJldHVybn1yZXR1cm4gcGFyc2VJbnQoYSxiKX0sCk06ZnVuY3Rpb24oYSl7dmFy
-IHQ9SC5INShhKQpyZXR1cm4gdH0sCkg1OmZ1bmN0aW9uKGEpe3ZhciB0LHMscgppZihhIGluc3RhbmNl
-b2YgUC5rKXJldHVybiBILmRtKEgueksoYSksbnVsbCkKaWYoSi5pYShhKT09PUMuT2t8fHUuYWsuYyhh
-KSl7dD1DLk80KGEpCmlmKEguZih0KSlyZXR1cm4gdApzPWEuY29uc3RydWN0b3IKaWYodHlwZW9mIHM9
-PSJmdW5jdGlvbiIpe3I9cy5uYW1lCmlmKHR5cGVvZiByPT0ic3RyaW5nIiYmSC5mKHIpKXJldHVybiBy
-fX1yZXR1cm4gSC5kbShILnpLKGEpLG51bGwpfSwKZjpmdW5jdGlvbihhKXt2YXIgdD1hIT09Ik9iamVj
-dCImJmEhPT0iIgpyZXR1cm4gdH0sCk0wOmZ1bmN0aW9uKCl7aWYoISFzZWxmLmxvY2F0aW9uKXJldHVy
-biBzZWxmLmxvY2F0aW9uLmhyZWYKcmV0dXJufSwKVks6ZnVuY3Rpb24oYSl7dmFyIHQscyxyLHEscD1h
-Lmxlbmd0aAppZihwPD01MDApcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxhKQpm
-b3IodD0iIixzPTA7czxwO3M9cil7cj1zKzUwMApxPXI8cD9yOnAKdCs9U3RyaW5nLmZyb21DaGFyQ29k
-ZS5hcHBseShudWxsLGEuc2xpY2UocyxxKSl9cmV0dXJuIHR9LApQTDpmdW5jdGlvbihhKXt2YXIgdCxz
-LHIscT1ILlZNKFtdLHUudCkKZm9yKHQ9YS5sZW5ndGgscz0wO3M8YS5sZW5ndGg7YS5sZW5ndGg9PT10
-fHwoMCxILmxrKShhKSwrK3Mpe3I9YVtzXQppZighSC5vayhyKSl0aHJvdyBILmIoSC50TChyKSkKaWYo
-cjw9NjU1MzUpQy5ObS5pKHEscikKZWxzZSBpZihyPD0xMTE0MTExKXtDLk5tLmkocSw1NTI5NisoQy5q
-bi53RyhyLTY1NTM2LDEwKSYxMDIzKSkKQy5ObS5pKHEsNTYzMjArKHImMTAyMykpfWVsc2UgdGhyb3cg
-SC5iKEgudEwocikpfXJldHVybiBILlZLKHEpfSwKZVQ6ZnVuY3Rpb24oYSl7dmFyIHQscyxyCmZvcih0
-PWEubGVuZ3RoLHM9MDtzPHQ7KytzKXtyPWFbc10KaWYoIUgub2socikpdGhyb3cgSC5iKEgudEwocikp
-CmlmKHI8MCl0aHJvdyBILmIoSC50TChyKSkKaWYocj42NTUzNSlyZXR1cm4gSC5QTChhKX1yZXR1cm4g
-SC5WSyhhKX0sCmZ3OmZ1bmN0aW9uKGEsYixjKXt2YXIgdCxzLHIscQppZihjPD01MDAmJmI9PT0wJiZj
-PT09YS5sZW5ndGgpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxhKQpmb3IodD1i
-LHM9IiI7dDxjO3Q9cil7cj10KzUwMApxPXI8Yz9yOmMKcys9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBs
-eShudWxsLGEuc3ViYXJyYXkodCxxKSl9cmV0dXJuIHN9LApMdzpmdW5jdGlvbihhKXt2YXIgdAppZigw
-PD1hKXtpZihhPD02NTUzNSlyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShhKQppZihhPD0xMTE0MTEx
-KXt0PWEtNjU1MzYKcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoKDU1Mjk2fEMuam4ud0codCwxMCkp
-Pj4+MCw1NjMyMHx0JjEwMjMpfX10aHJvdyBILmIoUC5URShhLDAsMTExNDExMSxudWxsLG51bGwpKX0s
-Cm8yOmZ1bmN0aW9uKGEpe2lmKGEuZGF0ZT09PXZvaWQgMClhLmRhdGU9bmV3IERhdGUoYS5hKQpyZXR1
-cm4gYS5kYXRlfSwKdEo6ZnVuY3Rpb24oYSl7dmFyIHQ9SC5vMihhKS5nZXRGdWxsWWVhcigpKzAKcmV0
-dXJuIHR9LApOUzpmdW5jdGlvbihhKXt2YXIgdD1ILm8yKGEpLmdldE1vbnRoKCkrMQpyZXR1cm4gdH0s
-CmpBOmZ1bmN0aW9uKGEpe3ZhciB0PUgubzIoYSkuZ2V0RGF0ZSgpKzAKcmV0dXJuIHR9LApLTDpmdW5j
-dGlvbihhKXt2YXIgdD1ILm8yKGEpLmdldEhvdXJzKCkrMApyZXR1cm4gdH0sCmNoOmZ1bmN0aW9uKGEp
-e3ZhciB0PUgubzIoYSkuZ2V0TWludXRlcygpKzAKcmV0dXJuIHR9LApKZDpmdW5jdGlvbihhKXt2YXIg
-dD1ILm8yKGEpLmdldFNlY29uZHMoKSswCnJldHVybiB0fSwKbzE6ZnVuY3Rpb24oYSl7dmFyIHQ9SC5v
-MihhKS5nZXRNaWxsaXNlY29uZHMoKSswCnJldHVybiB0fSwKem86ZnVuY3Rpb24oYSxiLGMpe3ZhciB0
-LHMscj17fQpyLmE9MAp0PVtdCnM9W10Kci5hPWIubGVuZ3RoCkMuTm0uRlYodCxiKQpyLmI9IiIKaWYo
-YyE9bnVsbCYmYy5hIT09MCljLksoMCxuZXcgSC5DaihyLHMsdCkpCiIiK3IuYQpyZXR1cm4gSi5KeShh
-LG5ldyBILkxJKEMuVGUsMCx0LHMsMCkpfSwKRWs6ZnVuY3Rpb24oYSxiLGMpe3ZhciB0LHMscixxCmlm
-KGIgaW5zdGFuY2VvZiBBcnJheSl0PWM9PW51bGx8fGMuYT09PTAKZWxzZSB0PSExCmlmKHQpe3M9Ygpy
-PXMubGVuZ3RoCmlmKHI9PT0wKXtpZighIWEuJDApcmV0dXJuIGEuJDAoKX1lbHNlIGlmKHI9PT0xKXtp
-ZighIWEuJDEpcmV0dXJuIGEuJDEoc1swXSl9ZWxzZSBpZihyPT09Mil7aWYoISFhLiQyKXJldHVybiBh
-LiQyKHNbMF0sc1sxXSl9ZWxzZSBpZihyPT09Myl7aWYoISFhLiQzKXJldHVybiBhLiQzKHNbMF0sc1sx
-XSxzWzJdKX1lbHNlIGlmKHI9PT00KXtpZighIWEuJDQpcmV0dXJuIGEuJDQoc1swXSxzWzFdLHNbMl0s
-c1szXSl9ZWxzZSBpZihyPT09NSlpZighIWEuJDUpcmV0dXJuIGEuJDUoc1swXSxzWzFdLHNbMl0sc1sz
-XSxzWzRdKQpxPWFbIiIrIiQiK3JdCmlmKHEhPW51bGwpcmV0dXJuIHEuYXBwbHkoYSxzKX1yZXR1cm4g
-SC5FdyhhLGIsYyl9LApFdzpmdW5jdGlvbihhLGIsYyl7dmFyIHQscyxyLHEscCxvLG4sbSxsLGs9YiBp
-bnN0YW5jZW9mIEFycmF5P2I6UC5DSChiLCEwLHUueiksaj1rLmxlbmd0aCxpPWEuJFIKaWYoajxpKXJl
-dHVybiBILnpvKGEsayxjKQp0PWEuJEQKcz10PT1udWxsCnI9IXM/dCgpOm51bGwKcT1KLmlhKGEpCnA9
-cS4kQwppZih0eXBlb2YgcD09InN0cmluZyIpcD1xW3BdCmlmKHMpe2lmKGMhPW51bGwmJmMuYSE9PTAp
-cmV0dXJuIEguem8oYSxrLGMpCmlmKGo9PT1pKXJldHVybiBwLmFwcGx5KGEsaykKcmV0dXJuIEguem8o
-YSxrLGMpfWlmKHIgaW5zdGFuY2VvZiBBcnJheSl7aWYoYyE9bnVsbCYmYy5hIT09MClyZXR1cm4gSC56
-byhhLGssYykKaWYoaj5pK3IubGVuZ3RoKXJldHVybiBILnpvKGEsayxudWxsKQpDLk5tLkZWKGssci5z
-bGljZShqLWkpKQpyZXR1cm4gcC5hcHBseShhLGspfWVsc2V7aWYoaj5pKXJldHVybiBILnpvKGEsayxj
-KQpvPU9iamVjdC5rZXlzKHIpCmlmKGM9PW51bGwpZm9yKHM9by5sZW5ndGgsbj0wO248by5sZW5ndGg7
-by5sZW5ndGg9PT1zfHwoMCxILmxrKShvKSwrK24pQy5ObS5pKGsscltILnkob1tuXSldKQplbHNle2Zv
-cihzPW8ubGVuZ3RoLG09MCxuPTA7bjxvLmxlbmd0aDtvLmxlbmd0aD09PXN8fCgwLEgubGspKG8pLCsr
-bil7bD1ILnkob1tuXSkKaWYoYy54NChsKSl7KyttCkMuTm0uaShrLGMucSgwLGwpKX1lbHNlIEMuTm0u
-aShrLHJbbF0pfWlmKG0hPT1jLmEpcmV0dXJuIEguem8oYSxrLGMpfXJldHVybiBwLmFwcGx5KGEsayl9
-fSwKcFk6ZnVuY3Rpb24oYSl7dGhyb3cgSC5iKEgudEwoYSkpfSwKT0g6ZnVuY3Rpb24oYSxiKXtpZihh
-PT1udWxsKUouSG0oYSkKdGhyb3cgSC5iKEguSFkoYSxiKSl9LApIWTpmdW5jdGlvbihhLGIpe3ZhciB0
-LHMscj0iaW5kZXgiCmlmKCFILm9rKGIpKXJldHVybiBuZXcgUC51KCEwLGIscixudWxsKQp0PUguU2Mo
-Si5IbShhKSkKaWYoIShiPDApKXtpZih0eXBlb2YgdCE9PSJudW1iZXIiKXJldHVybiBILnBZKHQpCnM9
-Yj49dH1lbHNlIHM9ITAKaWYocylyZXR1cm4gUC5DZihiLGEscixudWxsLHQpCnJldHVybiBQLngoYixy
-KX0sCmF1OmZ1bmN0aW9uKGEsYixjKXt2YXIgdD0iSW52YWxpZCB2YWx1ZSIKaWYoYT5jKXJldHVybiBu
-ZXcgUC5iSigwLGMsITAsYSwic3RhcnQiLHQpCmlmKGIhPW51bGwpe2lmKCFILm9rKGIpKXJldHVybiBu
-ZXcgUC51KCEwLGIsImVuZCIsbnVsbCkKaWYoYjxhfHxiPmMpcmV0dXJuIG5ldyBQLmJKKGEsYywhMCxi
-LCJlbmQiLHQpfXJldHVybiBuZXcgUC51KCEwLGIsImVuZCIsbnVsbCl9LAp0TDpmdW5jdGlvbihhKXty
-ZXR1cm4gbmV3IFAudSghMCxhLG51bGwsbnVsbCl9LApiOmZ1bmN0aW9uKGEpe3ZhciB0CmlmKGE9PW51
-bGwpYT1uZXcgUC5uKCkKdD1uZXcgRXJyb3IoKQp0LmRhcnRFeGNlcHRpb249YQppZigiZGVmaW5lUHJv
-cGVydHkiIGluIE9iamVjdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIm1lc3NhZ2UiLHtnZXQ6SC5o
-fSkKdC5uYW1lPSIifWVsc2UgdC50b1N0cmluZz1ILmgKcmV0dXJuIHR9LApoOmZ1bmN0aW9uKCl7cmV0
-dXJuIEouaih0aGlzLmRhcnRFeGNlcHRpb24pfSwKdmg6ZnVuY3Rpb24oYSl7dGhyb3cgSC5iKGEpfSwK
-bGs6ZnVuY3Rpb24oYSl7dGhyb3cgSC5iKFAuYTQoYSkpfSwKY006ZnVuY3Rpb24oYSl7dmFyIHQscyxy
-LHEscCxvCmE9SC5lQShhLnJlcGxhY2UoU3RyaW5nKHt9KSwnJHJlY2VpdmVyJCcpKQp0PWEubWF0Y2go
-L1xcXCRbYS16QS1aXStcXFwkL2cpCmlmKHQ9PW51bGwpdD1ILlZNKFtdLHUucykKcz10LmluZGV4T2Yo
-IlxcJGFyZ3VtZW50c1xcJCIpCnI9dC5pbmRleE9mKCJcXCRhcmd1bWVudHNFeHByXFwkIikKcT10Lmlu
-ZGV4T2YoIlxcJGV4cHJcXCQiKQpwPXQuaW5kZXhPZigiXFwkbWV0aG9kXFwkIikKbz10LmluZGV4T2Yo
-IlxcJHJlY2VpdmVyXFwkIikKcmV0dXJuIG5ldyBILlpyKGEucmVwbGFjZShuZXcgUmVnRXhwKCdcXFxc
-XFwkYXJndW1lbnRzXFxcXFxcJCcsJ2cnKSwnKCg/Onh8W154XSkqKScpLnJlcGxhY2UobmV3IFJlZ0V4
-cCgnXFxcXFxcJGFyZ3VtZW50c0V4cHJcXFxcXFwkJywnZycpLCcoKD86eHxbXnhdKSopJykucmVwbGFj
-ZShuZXcgUmVnRXhwKCdcXFxcXFwkZXhwclxcXFxcXCQnLCdnJyksJygoPzp4fFteeF0pKiknKS5yZXBs
-YWNlKG5ldyBSZWdFeHAoJ1xcXFxcXCRtZXRob2RcXFxcXFwkJywnZycpLCcoKD86eHxbXnhdKSopJyku
-cmVwbGFjZShuZXcgUmVnRXhwKCdcXFxcXFwkcmVjZWl2ZXJcXFxcXFwkJywnZycpLCcoKD86eHxbXnhd
-KSopJykscyxyLHEscCxvKX0sClM3OmZ1bmN0aW9uKGEpe3JldHVybiBmdW5jdGlvbigkZXhwciQpe3Zh
-ciAkYXJndW1lbnRzRXhwciQ9JyRhcmd1bWVudHMkJwp0cnl7JGV4cHIkLiRtZXRob2QkKCRhcmd1bWVu
-dHNFeHByJCl9Y2F0Y2godCl7cmV0dXJuIHQubWVzc2FnZX19KGEpfSwKTWo6ZnVuY3Rpb24oYSl7cmV0
-dXJuIGZ1bmN0aW9uKCRleHByJCl7dHJ5eyRleHByJC4kbWV0aG9kJH1jYXRjaCh0KXtyZXR1cm4gdC5t
-ZXNzYWdlfX0oYSl9LApJajpmdW5jdGlvbihhLGIpe3JldHVybiBuZXcgSC5XMChhLGI9PW51bGw/bnVs
-bDpiLm1ldGhvZCl9LApUMzpmdW5jdGlvbihhLGIpe3ZhciB0PWI9PW51bGwscz10P251bGw6Yi5tZXRo
-b2QKcmV0dXJuIG5ldyBILmF6KGEscyx0P251bGw6Yi5yZWNlaXZlcil9LApSdTpmdW5jdGlvbihhKXt2
-YXIgdCxzLHIscSxwLG8sbixtLGwsayxqLGksaCxnLGY9bnVsbCxlPW5ldyBILkFtKGEpCmlmKGE9PW51
-bGwpcmV0dXJuCmlmKGEgaW5zdGFuY2VvZiBILmJxKXJldHVybiBlLiQxKGEuYSkKaWYodHlwZW9mIGEh
-PT0ib2JqZWN0IilyZXR1cm4gYQppZigiZGFydEV4Y2VwdGlvbiIgaW4gYSlyZXR1cm4gZS4kMShhLmRh
-cnRFeGNlcHRpb24pCmVsc2UgaWYoISgibWVzc2FnZSIgaW4gYSkpcmV0dXJuIGEKdD1hLm1lc3NhZ2UK
-aWYoIm51bWJlciIgaW4gYSYmdHlwZW9mIGEubnVtYmVyPT0ibnVtYmVyIil7cz1hLm51bWJlcgpyPXMm
-NjU1MzUKaWYoKEMuam4ud0cocywxNikmODE5MSk9PT0xMClzd2l0Y2gocil7Y2FzZSA0Mzg6cmV0dXJu
-IGUuJDEoSC5UMyhILmQodCkrIiAoRXJyb3IgIityKyIpIixmKSkKY2FzZSA0NDU6Y2FzZSA1MDA3OnJl
-dHVybiBlLiQxKEguSWooSC5kKHQpKyIgKEVycm9yICIrcisiKSIsZikpfX1pZihhIGluc3RhbmNlb2Yg
-VHlwZUVycm9yKXtxPSQuU24oKQpwPSQubHEoKQpvPSQuTjkoKQpuPSQuaUkoKQptPSQuS2YoKQpsPSQu
-WmgoKQprPSQuY1AoKQokLmMzKCkKaj0kLkhLKCkKaT0kLnIxKCkKaD1xLnFTKHQpCmlmKGghPW51bGwp
-cmV0dXJuIGUuJDEoSC5UMyhILnkodCksaCkpCmVsc2V7aD1wLnFTKHQpCmlmKGghPW51bGwpe2gubWV0
-aG9kPSJjYWxsIgpyZXR1cm4gZS4kMShILlQzKEgueSh0KSxoKSl9ZWxzZXtoPW8ucVModCkKaWYoaD09
-bnVsbCl7aD1uLnFTKHQpCmlmKGg9PW51bGwpe2g9bS5xUyh0KQppZihoPT1udWxsKXtoPWwucVModCkK
-aWYoaD09bnVsbCl7aD1rLnFTKHQpCmlmKGg9PW51bGwpe2g9bi5xUyh0KQppZihoPT1udWxsKXtoPWou
-cVModCkKaWYoaD09bnVsbCl7aD1pLnFTKHQpCmc9aCE9bnVsbH1lbHNlIGc9ITB9ZWxzZSBnPSEwfWVs
-c2UgZz0hMH1lbHNlIGc9ITB9ZWxzZSBnPSEwfWVsc2UgZz0hMH1lbHNlIGc9ITAKaWYoZylyZXR1cm4g
-ZS4kMShILklqKEgueSh0KSxoKSl9fXJldHVybiBlLiQxKG5ldyBILnZWKHR5cGVvZiB0PT0ic3RyaW5n
-Ij90OiIiKSl9aWYoYSBpbnN0YW5jZW9mIFJhbmdlRXJyb3Ipe2lmKHR5cGVvZiB0PT0ic3RyaW5nIiYm
-dC5pbmRleE9mKCJjYWxsIHN0YWNrIikhPT0tMSlyZXR1cm4gbmV3IFAuS1koKQp0PWZ1bmN0aW9uKGIp
-e3RyeXtyZXR1cm4gU3RyaW5nKGIpfWNhdGNoKGQpe31yZXR1cm4gbnVsbH0oYSkKcmV0dXJuIGUuJDEo
-bmV3IFAudSghMSxmLGYsdHlwZW9mIHQ9PSJzdHJpbmciP3QucmVwbGFjZSgvXlJhbmdlRXJyb3I6XHMq
-LywiIik6dCkpfWlmKHR5cGVvZiBJbnRlcm5hbEVycm9yPT0iZnVuY3Rpb24iJiZhIGluc3RhbmNlb2Yg
-SW50ZXJuYWxFcnJvcilpZih0eXBlb2YgdD09InN0cmluZyImJnQ9PT0idG9vIG11Y2ggcmVjdXJzaW9u
-IilyZXR1cm4gbmV3IFAuS1koKQpyZXR1cm4gYX0sCnRzOmZ1bmN0aW9uKGEpe3ZhciB0CmlmKGEgaW5z
-dGFuY2VvZiBILmJxKXJldHVybiBhLmIKaWYoYT09bnVsbClyZXR1cm4gbmV3IEguWE8oYSkKdD1hLiRj
-YWNoZWRUcmFjZQppZih0IT1udWxsKXJldHVybiB0CnJldHVybiBhLiRjYWNoZWRUcmFjZT1uZXcgSC5Y
-TyhhKX0sCkI3OmZ1bmN0aW9uKGEsYil7dmFyIHQscyxyLHE9YS5sZW5ndGgKZm9yKHQ9MDt0PHE7dD1y
-KXtzPXQrMQpyPXMrMQpiLlkoMCxhW3RdLGFbc10pfXJldHVybiBifSwKZnQ6ZnVuY3Rpb24oYSxiLGMs
-ZCxlLGYpe3UuWi5iKGEpCnN3aXRjaChILlNjKGIpKXtjYXNlIDA6cmV0dXJuIGEuJDAoKQpjYXNlIDE6
-cmV0dXJuIGEuJDEoYykKY2FzZSAyOnJldHVybiBhLiQyKGMsZCkKY2FzZSAzOnJldHVybiBhLiQzKGMs
-ZCxlKQpjYXNlIDQ6cmV0dXJuIGEuJDQoYyxkLGUsZil9dGhyb3cgSC5iKG5ldyBQLkNEKCJVbnN1cHBv
-cnRlZCBudW1iZXIgb2YgYXJndW1lbnRzIGZvciB3cmFwcGVkIGNsb3N1cmUiKSl9LAp0UjpmdW5jdGlv
-bihhLGIpe3ZhciB0CmlmKGE9PW51bGwpcmV0dXJuCnQ9YS4kaWRlbnRpdHkKaWYoISF0KXJldHVybiB0
-CnQ9ZnVuY3Rpb24oYyxkLGUpe3JldHVybiBmdW5jdGlvbihmLGcsaCxpKXtyZXR1cm4gZShjLGQsZixn
-LGgsaSl9fShhLGIsSC5mdCkKYS4kaWRlbnRpdHk9dApyZXR1cm4gdH0sCmlBOmZ1bmN0aW9uKGEsYixj
-LGQsZSxmLGcpe3ZhciB0LHMscixxLHAsbyxuLG0sbD1udWxsLGs9YlswXSxqPWsuJGNhbGxOYW1lLGk9
-ZT9PYmplY3QuY3JlYXRlKG5ldyBILnp4KCkuY29uc3RydWN0b3IucHJvdG90eXBlKTpPYmplY3QuY3Jl
-YXRlKG5ldyBILnJUKGwsbCxsLGwpLmNvbnN0cnVjdG9yLnByb3RvdHlwZSkKaS4kaW5pdGlhbGl6ZT1p
-LmNvbnN0cnVjdG9yCmlmKGUpdD1mdW5jdGlvbiBzdGF0aWNfdGVhcl9vZmYoKXt0aGlzLiRpbml0aWFs
-aXplKCl9CmVsc2V7cz0kLnlqCmlmKHR5cGVvZiBzIT09Im51bWJlciIpcmV0dXJuIHMuaCgpCiQueWo9
-cysxCnM9bmV3IEZ1bmN0aW9uKCJhLGIsYyxkIitzLCJ0aGlzLiRpbml0aWFsaXplKGEsYixjLGQiK3Mr
-IikiKQp0PXN9aS5jb25zdHJ1Y3Rvcj10CnQucHJvdG90eXBlPWkKaWYoIWUpe3I9SC5ieChhLGssZikK
-ci4kcmVmbGVjdGlvbkluZm89ZH1lbHNle2kuJHN0YXRpY19uYW1lPWcKcj1rfXE9SC5pbShkLGUsZikK
-aS4kUz1xCmlbal09cgpmb3IocD1yLG89MTtvPGIubGVuZ3RoOysrbyl7bj1iW29dCm09bi4kY2FsbE5h
-bWUKaWYobSE9bnVsbCl7bj1lP246SC5ieChhLG4sZikKaVttXT1ufWlmKG89PT1jKXtuLiRyZWZsZWN0
-aW9uSW5mbz1kCnA9bn19aS4kQz1wCmkuJFI9ay4kUgppLiREPWsuJEQKcmV0dXJuIHR9LAppbTpmdW5j
-dGlvbihhLGIsYyl7dmFyIHQKaWYodHlwZW9mIGE9PSJudW1iZXIiKXJldHVybiBmdW5jdGlvbihkLGUp
-e3JldHVybiBmdW5jdGlvbigpe3JldHVybiBkKGUpfX0oSC5CcCxhKQppZih0eXBlb2YgYT09InN0cmlu
-ZyIpe2lmKGIpdGhyb3cgSC5iKCJDYW5ub3QgY29tcHV0ZSBzaWduYXR1cmUgZm9yIHN0YXRpYyB0ZWFy
-b2ZmLiIpCnQ9Yz9ILlBXOkguVG4KcmV0dXJuIGZ1bmN0aW9uKGQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7
-cmV0dXJuIGUodGhpcyxkKX19KGEsdCl9dGhyb3cgSC5iKCJFcnJvciBpbiBmdW5jdGlvblR5cGUgb2Yg
-dGVhcm9mZiIpfSwKdnE6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIHQ9SC5EVgpzd2l0Y2goYj8tMTphKXtj
-YXNlIDA6cmV0dXJuIGZ1bmN0aW9uKGUsZil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGYodGhpcylb
-ZV0oKX19KGMsdCkKY2FzZSAxOnJldHVybiBmdW5jdGlvbihlLGYpe3JldHVybiBmdW5jdGlvbihnKXty
-ZXR1cm4gZih0aGlzKVtlXShnKX19KGMsdCkKY2FzZSAyOnJldHVybiBmdW5jdGlvbihlLGYpe3JldHVy
-biBmdW5jdGlvbihnLGgpe3JldHVybiBmKHRoaXMpW2VdKGcsaCl9fShjLHQpCmNhc2UgMzpyZXR1cm4g
-ZnVuY3Rpb24oZSxmKXtyZXR1cm4gZnVuY3Rpb24oZyxoLGkpe3JldHVybiBmKHRoaXMpW2VdKGcsaCxp
-KX19KGMsdCkKY2FzZSA0OnJldHVybiBmdW5jdGlvbihlLGYpe3JldHVybiBmdW5jdGlvbihnLGgsaSxq
-KXtyZXR1cm4gZih0aGlzKVtlXShnLGgsaSxqKX19KGMsdCkKY2FzZSA1OnJldHVybiBmdW5jdGlvbihl
-LGYpe3JldHVybiBmdW5jdGlvbihnLGgsaSxqLGspe3JldHVybiBmKHRoaXMpW2VdKGcsaCxpLGosayl9
-fShjLHQpCmRlZmF1bHQ6cmV0dXJuIGZ1bmN0aW9uKGUsZil7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJu
-IGUuYXBwbHkoZih0aGlzKSxhcmd1bWVudHMpfX0oZCx0KX19LApieDpmdW5jdGlvbihhLGIsYyl7dmFy
-IHQscyxyLHEscCxvLG4KaWYoYylyZXR1cm4gSC5IZihhLGIpCnQ9Yi4kc3R1Yk5hbWUKcz1iLmxlbmd0
-aApyPWFbdF0KcT1iPT1udWxsP3I9PW51bGw6Yj09PXIKcD0hcXx8cz49MjcKaWYocClyZXR1cm4gSC52
-cShzLCFxLHQsYikKaWYocz09PTApe3E9JC55agppZih0eXBlb2YgcSE9PSJudW1iZXIiKXJldHVybiBx
-LmgoKQokLnlqPXErMQpvPSJzZWxmIitxCnE9InJldHVybiBmdW5jdGlvbigpe3ZhciAiK28rIiA9IHRo
-aXMuIgpwPSQubUoKcmV0dXJuIG5ldyBGdW5jdGlvbihxK0guZChwPT1udWxsPyQubUo9SC5FMigic2Vs
-ZiIpOnApKyI7cmV0dXJuICIrbysiLiIrSC5kKHQpKyIoKTt9IikoKX1uPSJhYmNkZWZnaGlqa2xtbm9w
-cXJzdHV2d3h5eiIuc3BsaXQoIiIpLnNwbGljZSgwLHMpLmpvaW4oIiwiKQpxPSQueWoKaWYodHlwZW9m
-IHEhPT0ibnVtYmVyIilyZXR1cm4gcS5oKCkKJC55aj1xKzEKbis9cQpxPSJyZXR1cm4gZnVuY3Rpb24o
-IituKyIpe3JldHVybiB0aGlzLiIKcD0kLm1KCnJldHVybiBuZXcgRnVuY3Rpb24ocStILmQocD09bnVs
-bD8kLm1KPUguRTIoInNlbGYiKTpwKSsiLiIrSC5kKHQpKyIoIituKyIpO30iKSgpfSwKWjQ6ZnVuY3Rp
-b24oYSxiLGMsZCl7dmFyIHQ9SC5EVixzPUgueVMKc3dpdGNoKGI/LTE6YSl7Y2FzZSAwOnRocm93IEgu
-YihILkVmKCJJbnRlcmNlcHRlZCBmdW5jdGlvbiB3aXRoIG5vIGFyZ3VtZW50cy4iKSkKY2FzZSAxOnJl
-dHVybiBmdW5jdGlvbihlLGYsZyl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGYodGhpcylbZV0oZyh0
-aGlzKSl9fShjLHQscykKY2FzZSAyOnJldHVybiBmdW5jdGlvbihlLGYsZyl7cmV0dXJuIGZ1bmN0aW9u
-KGgpe3JldHVybiBmKHRoaXMpW2VdKGcodGhpcyksaCl9fShjLHQscykKY2FzZSAzOnJldHVybiBmdW5j
-dGlvbihlLGYsZyl7cmV0dXJuIGZ1bmN0aW9uKGgsaSl7cmV0dXJuIGYodGhpcylbZV0oZyh0aGlzKSxo
-LGkpfX0oYyx0LHMpCmNhc2UgNDpyZXR1cm4gZnVuY3Rpb24oZSxmLGcpe3JldHVybiBmdW5jdGlvbiho
-LGksail7cmV0dXJuIGYodGhpcylbZV0oZyh0aGlzKSxoLGksail9fShjLHQscykKY2FzZSA1OnJldHVy
-biBmdW5jdGlvbihlLGYsZyl7cmV0dXJuIGZ1bmN0aW9uKGgsaSxqLGspe3JldHVybiBmKHRoaXMpW2Vd
-KGcodGhpcyksaCxpLGosayl9fShjLHQscykKY2FzZSA2OnJldHVybiBmdW5jdGlvbihlLGYsZyl7cmV0
-dXJuIGZ1bmN0aW9uKGgsaSxqLGssbCl7cmV0dXJuIGYodGhpcylbZV0oZyh0aGlzKSxoLGksaixrLGwp
-fX0oYyx0LHMpCmRlZmF1bHQ6cmV0dXJuIGZ1bmN0aW9uKGUsZixnLGgpe3JldHVybiBmdW5jdGlvbigp
-e2g9W2codGhpcyldCkFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGgsYXJndW1lbnRzKQpyZXR1cm4g
-ZS5hcHBseShmKHRoaXMpLGgpfX0oZCx0LHMpfX0sCkhmOmZ1bmN0aW9uKGEsYil7dmFyIHQscyxyLHEs
-cCxvLG4sbT0kLm1KCmlmKG09PW51bGwpbT0kLm1KPUguRTIoInNlbGYiKQp0PSQuUDQKaWYodD09bnVs
-bCl0PSQuUDQ9SC5FMigicmVjZWl2ZXIiKQpzPWIuJHN0dWJOYW1lCnI9Yi5sZW5ndGgKcT1hW3NdCnA9
-Yj09bnVsbD9xPT1udWxsOmI9PT1xCm89IXB8fHI+PTI4CmlmKG8pcmV0dXJuIEguWjQociwhcCxzLGIp
-CmlmKHI9PT0xKXttPSJyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy4iK0guZChtKSsiLiIrSC5k
-KHMpKyIodGhpcy4iK0guZCh0KSsiKTsiCnQ9JC55agppZih0eXBlb2YgdCE9PSJudW1iZXIiKXJldHVy
-biB0LmgoKQokLnlqPXQrMQpyZXR1cm4gbmV3IEZ1bmN0aW9uKG0rdCsifSIpKCl9bj0iYWJjZGVmZ2hp
-amtsbW5vcHFyc3R1dnd4eXoiLnNwbGl0KCIiKS5zcGxpY2UoMCxyLTEpLmpvaW4oIiwiKQptPSJyZXR1
-cm4gZnVuY3Rpb24oIituKyIpe3JldHVybiB0aGlzLiIrSC5kKG0pKyIuIitILmQocykrIih0aGlzLiIr
-SC5kKHQpKyIsICIrbisiKTsiCnQ9JC55agppZih0eXBlb2YgdCE9PSJudW1iZXIiKXJldHVybiB0Lmgo
-KQokLnlqPXQrMQpyZXR1cm4gbmV3IEZ1bmN0aW9uKG0rdCsifSIpKCl9LApLcTpmdW5jdGlvbihhLGIs
-YyxkLGUsZixnKXtyZXR1cm4gSC5pQShhLGIsYyxkLCEhZSwhIWYsZyl9LApUbjpmdW5jdGlvbihhLGIp
-e3JldHVybiBILmNFKHYudHlwZVVuaXZlcnNlLEgueksoYS5hKSxiKX0sClBXOmZ1bmN0aW9uKGEsYil7
-cmV0dXJuIEguY0Uodi50eXBlVW5pdmVyc2UsSC56SyhhLmMpLGIpfSwKRFY6ZnVuY3Rpb24oYSl7cmV0
-dXJuIGEuYX0sCnlTOmZ1bmN0aW9uKGEpe3JldHVybiBhLmN9LApFMjpmdW5jdGlvbihhKXt2YXIgdCxz
-LHIscT1uZXcgSC5yVCgic2VsZiIsInRhcmdldCIsInJlY2VpdmVyIiwibmFtZSIpLHA9Si5FcChPYmpl
-Y3QuZ2V0T3duUHJvcGVydHlOYW1lcyhxKSkKZm9yKHQ9cC5sZW5ndGgscz0wO3M8dDsrK3Mpe3I9cFtz
-XQppZihxW3JdPT09YSlyZXR1cm4gcn19LApvVDpmdW5jdGlvbihhKXtpZihhPT1udWxsKUguZk8oImJv
-b2xlYW4gZXhwcmVzc2lvbiBtdXN0IG5vdCBiZSBudWxsIikKcmV0dXJuIGF9LApmTzpmdW5jdGlvbihh
-KXt0aHJvdyBILmIobmV3IEgua1koYSkpfSwKYWc6ZnVuY3Rpb24oYSl7dGhyb3cgSC5iKG5ldyBQLmMo
-YSkpfSwKRWY6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBILkVxKGEpfSwKWWc6ZnVuY3Rpb24oYSl7cmV0
-dXJuIHYuZ2V0SXNvbGF0ZVRhZyhhKX0sClZNOmZ1bmN0aW9uKGEsYil7YS4kdGk9YgpyZXR1cm4gYX0s
-Cm9YOmZ1bmN0aW9uKGEpe2lmKGE9PW51bGwpcmV0dXJuCnJldHVybiBhLiR0aX0sCklNOmZ1bmN0aW9u
-KGEsYixjKXtyZXR1cm4gSC5ZOShhWyIkYSIrSC5kKGMpXSxILm9YKGIpKX0sClk5OmZ1bmN0aW9uKGEs
-Yil7aWYoYT09bnVsbClyZXR1cm4gYgphPWEuYXBwbHkobnVsbCxiKQppZihhPT1udWxsKXJldHVybgpp
-ZihBcnJheS5pc0FycmF5KGEpKXJldHVybiBhCmlmKHR5cGVvZiBhPT0iZnVuY3Rpb24iKXJldHVybiBh
-LmFwcGx5KG51bGwsYikKcmV0dXJuIGJ9LApJRzpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIGEuYXBwbHko
-YixILlk5KEouaWEoYilbIiRhIitILmQoYyldLEgub1goYikpKX0sCml3OmZ1bmN0aW9uKGEsYixjKXtP
-YmplY3QuZGVmaW5lUHJvcGVydHkoYSxiLHt2YWx1ZTpjLGVudW1lcmFibGU6ZmFsc2Usd3JpdGFibGU6
-dHJ1ZSxjb25maWd1cmFibGU6dHJ1ZX0pfSwKdzM6ZnVuY3Rpb24oYSl7dmFyIHQscyxyLHEscD1ILnko
-JC5ORi4kMShhKSksbz0kLm53W3BdCmlmKG8hPW51bGwpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLHYu
-ZGlzcGF0Y2hQcm9wZXJ0eU5hbWUse3ZhbHVlOm8sZW51bWVyYWJsZTpmYWxzZSx3cml0YWJsZTp0cnVl
-LGNvbmZpZ3VyYWJsZTp0cnVlfSkKcmV0dXJuIG8uaX10PSQudnZbcF0KaWYodCE9bnVsbClyZXR1cm4g
-dApzPXYuaW50ZXJjZXB0b3JzQnlUYWdbcF0KaWYocz09bnVsbCl7cD1ILnkoJC5UWC4kMihhLHApKQpp
-ZihwIT1udWxsKXtvPSQubndbcF0KaWYobyE9bnVsbCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsdi5k
-aXNwYXRjaFByb3BlcnR5TmFtZSx7dmFsdWU6byxlbnVtZXJhYmxlOmZhbHNlLHdyaXRhYmxlOnRydWUs
-Y29uZmlndXJhYmxlOnRydWV9KQpyZXR1cm4gby5pfXQ9JC52dltwXQppZih0IT1udWxsKXJldHVybiB0
-CnM9di5pbnRlcmNlcHRvcnNCeVRhZ1twXX19aWYocz09bnVsbClyZXR1cm4KdD1zLnByb3RvdHlwZQpy
-PXBbMF0KaWYocj09PSIhIil7bz1ILlZhKHQpCiQubndbcF09bwpPYmplY3QuZGVmaW5lUHJvcGVydHko
-YSx2LmRpc3BhdGNoUHJvcGVydHlOYW1lLHt2YWx1ZTpvLGVudW1lcmFibGU6ZmFsc2Usd3JpdGFibGU6
-dHJ1ZSxjb25maWd1cmFibGU6dHJ1ZX0pCnJldHVybiBvLml9aWYocj09PSJ+Iil7JC52dltwXT10CnJl
-dHVybiB0fWlmKHI9PT0iLSIpe3E9SC5WYSh0KQpPYmplY3QuZGVmaW5lUHJvcGVydHkoT2JqZWN0Lmdl
-dFByb3RvdHlwZU9mKGEpLHYuZGlzcGF0Y2hQcm9wZXJ0eU5hbWUse3ZhbHVlOnEsZW51bWVyYWJsZTpm
-YWxzZSx3cml0YWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTp0cnVlfSkKcmV0dXJuIHEuaX1pZihyPT09Iisi
-KXJldHVybiBILkxjKGEsdCkKaWYocj09PSIqIil0aHJvdyBILmIoUC5TWShwKSkKaWYodi5sZWFmVGFn
-c1twXT09PXRydWUpe3E9SC5WYSh0KQpPYmplY3QuZGVmaW5lUHJvcGVydHkoT2JqZWN0LmdldFByb3Rv
-dHlwZU9mKGEpLHYuZGlzcGF0Y2hQcm9wZXJ0eU5hbWUse3ZhbHVlOnEsZW51bWVyYWJsZTpmYWxzZSx3
-cml0YWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTp0cnVlfSkKcmV0dXJuIHEuaX1lbHNlIHJldHVybiBILkxj
-KGEsdCl9LApMYzpmdW5jdGlvbihhLGIpe3ZhciB0PU9iamVjdC5nZXRQcm90b3R5cGVPZihhKQpPYmpl
-Y3QuZGVmaW5lUHJvcGVydHkodCx2LmRpc3BhdGNoUHJvcGVydHlOYW1lLHt2YWx1ZTpKLlF1KGIsdCxu
-dWxsLG51bGwpLGVudW1lcmFibGU6ZmFsc2Usd3JpdGFibGU6dHJ1ZSxjb25maWd1cmFibGU6dHJ1ZX0p
-CnJldHVybiBifSwKVmE6ZnVuY3Rpb24oYSl7cmV0dXJuIEouUXUoYSwhMSxudWxsLCEhYS4kaVhqKX0s
-ClZGOmZ1bmN0aW9uKGEsYixjKXt2YXIgdD1iLnByb3RvdHlwZQppZih2LmxlYWZUYWdzW2FdPT09dHJ1
-ZSlyZXR1cm4gSC5WYSh0KQplbHNlIHJldHVybiBKLlF1KHQsYyxudWxsLG51bGwpfSwKWEQ6ZnVuY3Rp
-b24oKXtpZighMD09PSQuQnYpcmV0dXJuCiQuQnY9ITAKSC5aMSgpfSwKWjE6ZnVuY3Rpb24oKXt2YXIg
-dCxzLHIscSxwLG8sbixtCiQubnc9T2JqZWN0LmNyZWF0ZShudWxsKQokLnZ2PU9iamVjdC5jcmVhdGUo
-bnVsbCkKSC5rTygpCnQ9di5pbnRlcmNlcHRvcnNCeVRhZwpzPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5h
-bWVzKHQpCmlmKHR5cGVvZiB3aW5kb3chPSJ1bmRlZmluZWQiKXt3aW5kb3cKcj1mdW5jdGlvbigpe30K
-Zm9yKHE9MDtxPHMubGVuZ3RoOysrcSl7cD1zW3FdCm89JC54Ny4kMShwKQppZihvIT1udWxsKXtuPUgu
-VkYocCx0W3BdLG8pCmlmKG4hPW51bGwpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHYuZGlzcGF0Y2hQ
-cm9wZXJ0eU5hbWUse3ZhbHVlOm4sZW51bWVyYWJsZTpmYWxzZSx3cml0YWJsZTp0cnVlLGNvbmZpZ3Vy
-YWJsZTp0cnVlfSkKci5wcm90b3R5cGU9b319fX1mb3IocT0wO3E8cy5sZW5ndGg7KytxKXtwPXNbcV0K
-aWYoL15bQS1aYS16X10vLnRlc3QocCkpe209dFtwXQp0WyIhIitwXT1tCnRbIn4iK3BdPW0KdFsiLSIr
-cF09bQp0WyIrIitwXT1tCnRbIioiK3BdPW19fX0sCmtPOmZ1bmN0aW9uKCl7dmFyIHQscyxyLHEscCxv
-LG49Qy5ZcSgpCm49SC51ZChDLktVLEgudWQoQy5mUSxILnVkKEMuaTcsSC51ZChDLmk3LEgudWQoQy54
-aSxILnVkKEMuZGssSC51ZChDLndiKEMuTzQpLG4pKSkpKSkpCmlmKHR5cGVvZiBkYXJ0TmF0aXZlRGlz
-cGF0Y2hIb29rc1RyYW5zZm9ybWVyIT0idW5kZWZpbmVkIil7dD1kYXJ0TmF0aXZlRGlzcGF0Y2hIb29r
-c1RyYW5zZm9ybWVyCmlmKHR5cGVvZiB0PT0iZnVuY3Rpb24iKXQ9W3RdCmlmKHQuY29uc3RydWN0b3I9
-PUFycmF5KWZvcihzPTA7czx0Lmxlbmd0aDsrK3Mpe3I9dFtzXQppZih0eXBlb2Ygcj09ImZ1bmN0aW9u
-IiluPXIobil8fG59fXE9bi5nZXRUYWcKcD1uLmdldFVua25vd25UYWcKbz1uLnByb3RvdHlwZUZvclRh
-ZwokLk5GPW5ldyBILmRDKHEpCiQuVFg9bmV3IEgud04ocCkKJC54Nz1uZXcgSC5WWChvKX0sCnVkOmZ1
-bmN0aW9uKGEsYil7cmV0dXJuIGEoYil8fGJ9LAp2NDpmdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIHQ9
-Yj8ibSI6IiIscz1jPyIiOiJpIixyPWQ/InUiOiIiLHE9ZT8icyI6IiIscD1mPyJnIjoiIixvPWZ1bmN0
-aW9uKGcsaCl7dHJ5e3JldHVybiBuZXcgUmVnRXhwKGcsaCl9Y2F0Y2gobil7cmV0dXJuIG59fShhLHQr
-cytyK3ErcCkKaWYobyBpbnN0YW5jZW9mIFJlZ0V4cClyZXR1cm4gbwp0aHJvdyBILmIoUC5ycigiSWxs
-ZWdhbCBSZWdFeHAgcGF0dGVybiAoIitTdHJpbmcobykrIikiLGEsbnVsbCkpfSwKbTI6ZnVuY3Rpb24o
-YSxiLGMpe3ZhciB0CmlmKHR5cGVvZiBiPT0ic3RyaW5nIilyZXR1cm4gYS5pbmRleE9mKGIsYyk+PTAK
-ZWxzZSBpZihiIGluc3RhbmNlb2YgSC5WUil7dD1DLnhCLkcoYSxjKQpyZXR1cm4gYi5iLnRlc3QodCl9
-ZWxzZXt0PUouRkwoYixDLnhCLkcoYSxjKSkKcmV0dXJuIXQuZ2wwKHQpfX0sCkE0OmZ1bmN0aW9uKGEp
-e2lmKGEuaW5kZXhPZigiJCIsMCk+PTApcmV0dXJuIGEucmVwbGFjZSgvXCQvZywiJCQkJCIpCnJldHVy
-biBhfSwKZUE6ZnVuY3Rpb24oYSl7aWYoL1tbXF17fSgpKis/LlxcXiR8XS8udGVzdChhKSlyZXR1cm4g
-YS5yZXBsYWNlKC9bW1xde30oKSorPy5cXF4kfF0vZywiXFwkJiIpCnJldHVybiBhfSwKeXM6ZnVuY3Rp
-b24oYSxiLGMpe3ZhciB0PUgubk0oYSxiLGMpCnJldHVybiB0fSwKbk06ZnVuY3Rpb24oYSxiLGMpe3Zh
-ciB0LHMscixxCmlmKGI9PT0iIil7aWYoYT09PSIiKXJldHVybiBjCnQ9YS5sZW5ndGgKZm9yKHM9Yyxy
-PTA7cjx0OysrcilzPXMrYVtyXStjCnJldHVybiBzLmNoYXJDb2RlQXQoMCk9PTA/czpzfXE9YS5pbmRl
-eE9mKGIsMCkKaWYocTwwKXJldHVybiBhCmlmKGEubGVuZ3RoPDUwMHx8Yy5pbmRleE9mKCIkIiwwKT49
-MClyZXR1cm4gYS5zcGxpdChiKS5qb2luKGMpCnJldHVybiBhLnJlcGxhY2UobmV3IFJlZ0V4cChILmVB
-KGIpLCdnJyksSC5BNChjKSl9LApQRDpmdW5jdGlvbiBQRChhLGIpe3RoaXMuYT1hCnRoaXMuJHRpPWJ9
-LApXVTpmdW5jdGlvbiBXVSgpe30sCkxQOmZ1bmN0aW9uIExQKGEsYixjLGQpe3ZhciBfPXRoaXMKXy5h
-PWEKXy5iPWIKXy5jPWMKXy4kdGk9ZH0sCkxJOmZ1bmN0aW9uIExJKGEsYixjLGQsZSl7dmFyIF89dGhp
-cwpfLmE9YQpfLmM9YgpfLmQ9YwpfLmU9ZApfLmY9ZX0sCkNqOmZ1bmN0aW9uIENqKGEsYixjKXt0aGlz
-LmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sClpyOmZ1bmN0aW9uIFpyKGEsYixjLGQsZSxmKXt2YXIgXz10
-aGlzCl8uYT1hCl8uYj1iCl8uYz1jCl8uZD1kCl8uZT1lCl8uZj1mfSwKVzA6ZnVuY3Rpb24gVzAoYSxi
-KXt0aGlzLmE9YQp0aGlzLmI9Yn0sCmF6OmZ1bmN0aW9uIGF6KGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9
-Ygp0aGlzLmM9Y30sCnZWOmZ1bmN0aW9uIHZWKGEpe3RoaXMuYT1hfSwKYnE6ZnVuY3Rpb24gYnEoYSxi
-KXt0aGlzLmE9YQp0aGlzLmI9Yn0sCkFtOmZ1bmN0aW9uIEFtKGEpe3RoaXMuYT1hfSwKWE86ZnVuY3Rp
-b24gWE8oYSl7dGhpcy5hPWEKdGhpcy5iPW51bGx9LApUcDpmdW5jdGlvbiBUcCgpe30sCmxjOmZ1bmN0
-aW9uIGxjKCl7fSwKeng6ZnVuY3Rpb24gengoKXt9LApyVDpmdW5jdGlvbiByVChhLGIsYyxkKXt2YXIg
-Xz10aGlzCl8uYT1hCl8uYj1iCl8uYz1jCl8uZD1kfSwKRXE6ZnVuY3Rpb24gRXEoYSl7dGhpcy5hPWF9
-LAprWTpmdW5jdGlvbiBrWShhKXt0aGlzLmE9YX0sCk41OmZ1bmN0aW9uIE41KGEpe3ZhciBfPXRoaXMK
-Xy5hPTAKXy5mPV8uZT1fLmQ9Xy5jPV8uYj1udWxsCl8ucj0wCl8uJHRpPWF9LApkYjpmdW5jdGlvbiBk
-YihhLGIpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5kPV8uYz1udWxsfSwKaTU6ZnVuY3Rpb24gaTUo
-YSxiKXt0aGlzLmE9YQp0aGlzLiR0aT1ifSwKTjY6ZnVuY3Rpb24gTjYoYSxiLGMpe3ZhciBfPXRoaXMK
-Xy5hPWEKXy5iPWIKXy5kPV8uYz1udWxsCl8uJHRpPWN9LApkQzpmdW5jdGlvbiBkQyhhKXt0aGlzLmE9
-YX0sCndOOmZ1bmN0aW9uIHdOKGEpe3RoaXMuYT1hfSwKVlg6ZnVuY3Rpb24gVlgoYSl7dGhpcy5hPWF9
-LApWUjpmdW5jdGlvbiBWUihhLGIpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5kPV8uYz1udWxsfSwK
-RUs6ZnVuY3Rpb24gRUsoYSl7dGhpcy5iPWF9LApLVzpmdW5jdGlvbiBLVyhhLGIsYyl7dGhpcy5hPWEK
-dGhpcy5iPWIKdGhpcy5jPWN9LApQYjpmdW5jdGlvbiBQYihhLGIsYyl7dmFyIF89dGhpcwpfLmE9YQpf
-LmI9YgpfLmM9YwpfLmQ9bnVsbH0sCnRROmZ1bmN0aW9uIHRRKGEsYil7dGhpcy5hPWEKdGhpcy5jPWJ9
-LAp1bjpmdW5jdGlvbiB1bihhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LApTZDpmdW5j
-dGlvbiBTZChhLGIsYyl7dmFyIF89dGhpcwpfLmE9YQpfLmI9YgpfLmM9YwpfLmQ9bnVsbH0sClhGOmZ1
-bmN0aW9uKGEpe3JldHVybiBhfSwKRFE6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBJbnQ4QXJyYXkoYSl9
-LApvZDpmdW5jdGlvbihhLGIsYyl7aWYoYT4+PjAhPT1hfHxhPj1jKXRocm93IEguYihILkhZKGIsYSkp
-fSwKck06ZnVuY3Rpb24oYSxiLGMpe3ZhciB0CmlmKCEoYT4+PjAhPT1hKSl0PWI+Pj4wIT09Ynx8YT5i
-fHxiPmMKZWxzZSB0PSEwCmlmKHQpdGhyb3cgSC5iKEguYXUoYSxiLGMpKQpyZXR1cm4gYn0sCkVUOmZ1
-bmN0aW9uIEVUKCl7fSwKYjA6ZnVuY3Rpb24gYjAoKXt9LApEZzpmdW5jdGlvbiBEZygpe30sClBnOmZ1
-bmN0aW9uIFBnKCl7fSwKeGo6ZnVuY3Rpb24geGooKXt9LApkRTpmdW5jdGlvbiBkRSgpe30sClpBOmZ1
-bmN0aW9uIFpBKCl7fSwKd2Y6ZnVuY3Rpb24gd2YoKXt9LApQcTpmdW5jdGlvbiBQcSgpe30sCmVFOmZ1
-bmN0aW9uIGVFKCl7fSwKVjY6ZnVuY3Rpb24gVjYoKXt9LApSRzpmdW5jdGlvbiBSRygpe30sClZQOmZ1
-bmN0aW9uIFZQKCl7fSwKV0I6ZnVuY3Rpb24gV0IoKXt9LApaRzpmdW5jdGlvbiBaRygpe30sCnhaOmZ1
-bmN0aW9uKGEsYil7dmFyIHQ9Yi5kCnJldHVybiB0PT1udWxsP2IuZD1ILkooYSwiYjgiLFtiLlFdKTp0
-fSwKUTE6ZnVuY3Rpb24oYSl7dmFyIHQ9YS56CmlmKHQ9PT02fHx0PT09N3x8dD09PTgpcmV0dXJuIEgu
-UTEoYS5RKQpyZXR1cm4gdD09PTExfHx0PT09MTJ9LAptRDpmdW5jdGlvbihhKXtyZXR1cm4gYS5kYn0s
-Ck4wOmZ1bmN0aW9uKGEpe3JldHVybiBILkUodi50eXBlVW5pdmVyc2UsYSl9LApKUzpmdW5jdGlvbihh
-KXt2YXIgdD1hLiRTCmlmKHQhPW51bGwpe2lmKHR5cGVvZiB0PT0ibnVtYmVyIilyZXR1cm4gSC5CcCh0
-KQpyZXR1cm4gYS4kUygpfXJldHVybn0sClVlOmZ1bmN0aW9uKGEsYil7dmFyIHQKaWYoSC5RMShiKSlp
-ZihhIGluc3RhbmNlb2YgSC5UcCl7dD1ILkpTKGEpCmlmKHQhPW51bGwpcmV0dXJuIHR9cmV0dXJuIEgu
-eksoYSl9LAp6SzpmdW5jdGlvbihhKXt2YXIgdAppZihhIGluc3RhbmNlb2YgUC5rKXt0PWEuJHRpCnJl
-dHVybiB0IT1udWxsP3Q6SC5WVShhKX1pZihBcnJheS5pc0FycmF5KGEpKXJldHVybiBILnQ2KGEpCnJl
-dHVybiBILlZVKEouaWEoYSkpfSwKdDY6ZnVuY3Rpb24oYSl7dmFyIHQ9YS4kdGkscz11Lm0KaWYodD09
-bnVsbClyZXR1cm4gcwppZih0LmNvbnN0cnVjdG9yIT09cy5jb25zdHJ1Y3RvcilyZXR1cm4gcwpyZXR1
-cm4gdH0sCkxoOmZ1bmN0aW9uKGEpe3ZhciB0PWEuJHRpCnJldHVybiB0IT1udWxsP3Q6SC5WVShhKX0s
-ClZVOmZ1bmN0aW9uKGEpe3ZhciB0PWEuY29uc3RydWN0b3Iscz10LiRjY2FjaGUKaWYocyE9bnVsbCly
-ZXR1cm4gcwpyZXR1cm4gSC5yOShhLHQpfSwKcjk6ZnVuY3Rpb24oYSxiKXt2YXIgdD1hIGluc3RhbmNl
-b2YgSC5UcD9hLl9fcHJvdG9fXy5fX3Byb3RvX18uY29uc3RydWN0b3I6YixzPUguYWkodi50eXBlVW5p
-dmVyc2UsdC5uYW1lKQpiLiRjY2FjaGU9cwpyZXR1cm4gc30sCkJwOmZ1bmN0aW9uKGEpe3ZhciB0LHM9
-YSxyPXYudHlwZXMscT1yW3NdCmlmKHR5cGVvZiBxPT0ic3RyaW5nIil7dD1ILkUodi50eXBlVW5pdmVy
-c2UscSkKcltzXT10CnJldHVybiB0fXJldHVybiBxfSwKSko6ZnVuY3Rpb24oYSl7dmFyIHQscz10aGlz
-LHI9cy56LHE9SC5ZTwppZihILmNjKHMsITApKXtxPUguSXcKcy5iPXMuYT1ILmhufWVsc2UgaWYocj09
-PTkpe3Q9cy5kYgppZigiS04iPT09dClxPUgub2sKZWxzZSBpZigiQ1AiPT09dClxPUguS0gKZWxzZSBp
-ZigiRksiPT09dClxPUguS0gKZWxzZSBpZigicVUiPT09dClxPUguTU0KZWxzZSBpZigiYTIiPT09dClx
-PUgubAplbHNle3I9cy5RCmlmKHMuY2guZXZlcnkoSC5yTikpe3MueD0iJGkiK3IKcT1ILnQ0fX19cy5j
-PXEKcmV0dXJuIHMuYyhhKX0sCllPOmZ1bmN0aW9uKGEpe3ZhciB0PXRoaXMKcmV0dXJuIEguV2Uodi50
-eXBlVW5pdmVyc2UsSC5VZShhLHQpLG51bGwsdCxudWxsLCEwKX0sCnQ0OmZ1bmN0aW9uKGEpe3ZhciB0
-PXRoaXMueAppZihhIGluc3RhbmNlb2YgUC5rKXJldHVybiEhYVt0XQpyZXR1cm4hIUouaWEoYSlbdF19
-LApPejpmdW5jdGlvbihhKXt2YXIgdAppZihhPT1udWxsKXJldHVybiBhCnQ9dGhpcwppZih0LmMoYSkp
-cmV0dXJuIGEKdGhyb3cgSC5iKEguUTUoSC5XSyhhLEguVWUoYSx0KSxILmRtKHQsbnVsbCkpKSl9LApB
-djpmdW5jdGlvbihhKXt2YXIgdAppZihhPT1udWxsKXJldHVybiBhCnQ9dGhpcwppZih0LmMoYSkpcmV0
-dXJuIGEKdGhyb3cgSC5iKEguWmMoSC5XSyhhLEguVWUoYSx0KSxILmRtKHQsbnVsbCkpKSl9LApEaDpm
-dW5jdGlvbihhLGIsYyxkKXt2YXIgdD1udWxsCmlmKEguV2Uodi50eXBlVW5pdmVyc2UsYSx0LGIsdCwh
-MCkpcmV0dXJuIGEKdGhyb3cgSC5iKEguWmMoIlRoZSB0eXBlIGFyZ3VtZW50ICciK0guZChILmRtKGEs
-dCkpKyInIGlzIG5vdCBhIHN1YnR5cGUgb2YgdGhlIHR5cGUgdmFyaWFibGUgYm91bmQgJyIrSC5kKEgu
-ZG0oYix0KSkrIicgb2YgdHlwZSB2YXJpYWJsZSAnIitjKyInIGluICciK0guZChkKSsiJy4iKSl9LApX
-SzpmdW5jdGlvbihhLGIsYyl7dmFyIHQ9UC5wKGEpLHM9SC5kbShiPT1udWxsP0gueksoYSk6YixudWxs
-KQpyZXR1cm4gdCsiOiB0eXBlICciK0guZChzKSsiJyBpcyBub3QgYSBzdWJ0eXBlIG9mIHR5cGUgJyIr
-SC5kKGMpKyInIn0sClE1OmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgSC5oeigiQ2FzdEVycm9yOiAiK2Ep
-fSwKUHY6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IEguaHooIkNhc3RFcnJvcjogIitILldLKGEsbnVs
-bCxiKSl9LApaYzpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IEguaU0oIlR5cGVFcnJvcjogIithKX0sCnE6
-ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IEguaU0oIlR5cGVFcnJvcjogIitILldLKGEsbnVsbCxiKSl9
-LApJdzpmdW5jdGlvbihhKXtyZXR1cm4hMH0sCmhuOmZ1bmN0aW9uKGEpe3JldHVybiBhfSwKbDpmdW5j
-dGlvbihhKXtyZXR1cm4hMD09PWF8fCExPT09YX0sCkU5OmZ1bmN0aW9uKGEpe2lmKCEwPT09YXx8ITE9
-PT1hKXJldHVybiBhCmlmKGE9PW51bGwpcmV0dXJuIGEKdGhyb3cgSC5iKEguUHYoYSwiYm9vbCIpKX0s
-CnhkOmZ1bmN0aW9uKGEpe2lmKCEwPT09YXx8ITE9PT1hKXJldHVybiBhCmlmKGE9PW51bGwpcmV0dXJu
-IGEKdGhyb3cgSC5iKEgucShhLCJib29sIikpfSwKZGo6ZnVuY3Rpb24oYSl7aWYodHlwZW9mIGE9PSJu
-dW1iZXIiKXJldHVybiBhCmlmKGE9PW51bGwpcmV0dXJuIGEKdGhyb3cgSC5iKEguUHYoYSwiZG91Ymxl
-IikpfSwKSWc6ZnVuY3Rpb24oYSl7aWYodHlwZW9mIGE9PSJudW1iZXIiKXJldHVybiBhCmlmKGE9PW51
-bGwpcmV0dXJuIGEKdGhyb3cgSC5iKEgucShhLCJkb3VibGUiKSl9LApvazpmdW5jdGlvbihhKXtyZXR1
-cm4gdHlwZW9mIGE9PSJudW1iZXIiJiZNYXRoLmZsb29yKGEpPT09YX0sClNIOmZ1bmN0aW9uKGEpe2lm
-KHR5cGVvZiBhPT0ibnVtYmVyIiYmTWF0aC5mbG9vcihhKT09PWEpcmV0dXJuIGEKaWYoYT09bnVsbCly
-ZXR1cm4gYQp0aHJvdyBILmIoSC5QdihhLCJpbnQiKSl9LApTYzpmdW5jdGlvbihhKXtpZih0eXBlb2Yg
-YT09Im51bWJlciImJk1hdGguZmxvb3IoYSk9PT1hKXJldHVybiBhCmlmKGE9PW51bGwpcmV0dXJuIGEK
-dGhyb3cgSC5iKEgucShhLCJpbnQiKSl9LApLSDpmdW5jdGlvbihhKXtyZXR1cm4gdHlwZW9mIGE9PSJu
-dW1iZXIifSwKdVU6ZnVuY3Rpb24oYSl7aWYodHlwZW9mIGE9PSJudW1iZXIiKXJldHVybiBhCmlmKGE9
-PW51bGwpcmV0dXJuIGEKdGhyb3cgSC5iKEguUHYoYSwibnVtIikpfSwKRE46ZnVuY3Rpb24oYSl7aWYo
+cCxvLG49bnVsbAppZih0eXBlb2YgYSE9InN0cmluZyIpSC52aChILnRMKGEpKQp0PS9eXHMqWystXT8o
+KDB4W2EtZjAtOV0rKXwoXGQrKXwoW2EtejAtOV0rKSlccyokL2kuZXhlYyhhKQppZih0PT1udWxsKXJl
+dHVybiBuCmlmKDM+PXQubGVuZ3RoKXJldHVybiBILk9IKHQsMykKcz1ILnkodFszXSkKaWYoYj09bnVs
+bCl7aWYocyE9bnVsbClyZXR1cm4gcGFyc2VJbnQoYSwxMCkKaWYodFsyXSE9bnVsbClyZXR1cm4gcGFy
+c2VJbnQoYSwxNikKcmV0dXJuIG59aWYoYjwyfHxiPjM2KXRocm93IEguYihQLlRFKGIsMiwzNiwicmFk
+aXgiLG4pKQppZihiPT09MTAmJnMhPW51bGwpcmV0dXJuIHBhcnNlSW50KGEsMTApCmlmKGI8MTB8fHM9
+PW51bGwpe3I9Yjw9MTA/NDcrYjo4NitiCnE9dFsxXQpmb3IocD1xLmxlbmd0aCxvPTA7bzxwOysrbylp
+ZigoQy54Qi5XKHEsbyl8MzIpPnIpcmV0dXJuIG59cmV0dXJuIHBhcnNlSW50KGEsYil9LApNOmZ1bmN0
+aW9uKGEpe3ZhciB0PUguSDUoYSkKcmV0dXJuIHR9LApINTpmdW5jdGlvbihhKXt2YXIgdCxzLHIKaWYo
+YSBpbnN0YW5jZW9mIFAuaylyZXR1cm4gSC5kbShILnpLKGEpLG51bGwpCmlmKEouaWEoYSk9PT1DLk9r
+fHx1LmFrLmMoYSkpe3Q9Qy5PNChhKQppZihILmYodCkpcmV0dXJuIHQKcz1hLmNvbnN0cnVjdG9yCmlm
+KHR5cGVvZiBzPT0iZnVuY3Rpb24iKXtyPXMubmFtZQppZih0eXBlb2Ygcj09InN0cmluZyImJkguZihy
+KSlyZXR1cm4gcn19cmV0dXJuIEguZG0oSC56SyhhKSxudWxsKX0sCmY6ZnVuY3Rpb24oYSl7dmFyIHQ9
+YSE9PSJPYmplY3QiJiZhIT09IiIKcmV0dXJuIHR9LApNMDpmdW5jdGlvbigpe2lmKCEhc2VsZi5sb2Nh
+dGlvbilyZXR1cm4gc2VsZi5sb2NhdGlvbi5ocmVmCnJldHVybiBudWxsfSwKVks6ZnVuY3Rpb24oYSl7
+dmFyIHQscyxyLHEscD1hLmxlbmd0aAppZihwPD01MDApcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUu
+YXBwbHkobnVsbCxhKQpmb3IodD0iIixzPTA7czxwO3M9cil7cj1zKzUwMApxPXI8cD9yOnAKdCs9U3Ry
+aW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGEuc2xpY2UocyxxKSl9cmV0dXJuIHR9LApQTDpmdW5j
+dGlvbihhKXt2YXIgdCxzLHIscT1ILlZNKFtdLHUudCkKZm9yKHQ9YS5sZW5ndGgscz0wO3M8YS5sZW5n
+dGg7YS5sZW5ndGg9PT10fHwoMCxILmxrKShhKSwrK3Mpe3I9YVtzXQppZighSC5vayhyKSl0aHJvdyBI
+LmIoSC50TChyKSkKaWYocjw9NjU1MzUpQy5ObS5pKHEscikKZWxzZSBpZihyPD0xMTE0MTExKXtDLk5t
+LmkocSw1NTI5NisoQy5qbi53RyhyLTY1NTM2LDEwKSYxMDIzKSkKQy5ObS5pKHEsNTYzMjArKHImMTAy
+MykpfWVsc2UgdGhyb3cgSC5iKEgudEwocikpfXJldHVybiBILlZLKHEpfSwKZVQ6ZnVuY3Rpb24oYSl7
+dmFyIHQscyxyCmZvcih0PWEubGVuZ3RoLHM9MDtzPHQ7KytzKXtyPWFbc10KaWYoIUgub2socikpdGhy
+b3cgSC5iKEgudEwocikpCmlmKHI8MCl0aHJvdyBILmIoSC50TChyKSkKaWYocj42NTUzNSlyZXR1cm4g
+SC5QTChhKX1yZXR1cm4gSC5WSyhhKX0sCmZ3OmZ1bmN0aW9uKGEsYixjKXt2YXIgdCxzLHIscQppZihj
+PD01MDAmJmI9PT0wJiZjPT09YS5sZW5ndGgpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHko
+bnVsbCxhKQpmb3IodD1iLHM9IiI7dDxjO3Q9cil7cj10KzUwMApxPXI8Yz9yOmMKcys9U3RyaW5nLmZy
+b21DaGFyQ29kZS5hcHBseShudWxsLGEuc3ViYXJyYXkodCxxKSl9cmV0dXJuIHN9LApMdzpmdW5jdGlv
+bihhKXt2YXIgdAppZigwPD1hKXtpZihhPD02NTUzNSlyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShh
+KQppZihhPD0xMTE0MTExKXt0PWEtNjU1MzYKcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoKDU1Mjk2
+fEMuam4ud0codCwxMCkpPj4+MCw1NjMyMHx0JjEwMjMpfX10aHJvdyBILmIoUC5URShhLDAsMTExNDEx
+MSxudWxsLG51bGwpKX0sCm8yOmZ1bmN0aW9uKGEpe2lmKGEuZGF0ZT09PXZvaWQgMClhLmRhdGU9bmV3
+IERhdGUoYS5hKQpyZXR1cm4gYS5kYXRlfSwKdEo6ZnVuY3Rpb24oYSl7dmFyIHQ9SC5vMihhKS5nZXRG
+dWxsWWVhcigpKzAKcmV0dXJuIHR9LApOUzpmdW5jdGlvbihhKXt2YXIgdD1ILm8yKGEpLmdldE1vbnRo
+KCkrMQpyZXR1cm4gdH0sCmpBOmZ1bmN0aW9uKGEpe3ZhciB0PUgubzIoYSkuZ2V0RGF0ZSgpKzAKcmV0
+dXJuIHR9LApLTDpmdW5jdGlvbihhKXt2YXIgdD1ILm8yKGEpLmdldEhvdXJzKCkrMApyZXR1cm4gdH0s
+CmNoOmZ1bmN0aW9uKGEpe3ZhciB0PUgubzIoYSkuZ2V0TWludXRlcygpKzAKcmV0dXJuIHR9LApKZDpm
+dW5jdGlvbihhKXt2YXIgdD1ILm8yKGEpLmdldFNlY29uZHMoKSswCnJldHVybiB0fSwKbzE6ZnVuY3Rp
+b24oYSl7dmFyIHQ9SC5vMihhKS5nZXRNaWxsaXNlY29uZHMoKSswCnJldHVybiB0fSwKem86ZnVuY3Rp
+b24oYSxiLGMpe3ZhciB0LHMscj17fQpyLmE9MAp0PVtdCnM9W10Kci5hPWIubGVuZ3RoCkMuTm0uRlYo
+dCxiKQpyLmI9IiIKaWYoYyE9bnVsbCYmYy5hIT09MCljLksoMCxuZXcgSC5DaihyLHMsdCkpCiIiK3Iu
+YQpyZXR1cm4gSi5KeShhLG5ldyBILkxJKEMuVGUsMCx0LHMsMCkpfSwKRWs6ZnVuY3Rpb24oYSxiLGMp
+e3ZhciB0LHMscixxCmlmKGIgaW5zdGFuY2VvZiBBcnJheSl0PWM9PW51bGx8fGMuYT09PTAKZWxzZSB0
+PSExCmlmKHQpe3M9YgpyPXMubGVuZ3RoCmlmKHI9PT0wKXtpZighIWEuJDApcmV0dXJuIGEuJDAoKX1l
+bHNlIGlmKHI9PT0xKXtpZighIWEuJDEpcmV0dXJuIGEuJDEoc1swXSl9ZWxzZSBpZihyPT09Mil7aWYo
+ISFhLiQyKXJldHVybiBhLiQyKHNbMF0sc1sxXSl9ZWxzZSBpZihyPT09Myl7aWYoISFhLiQzKXJldHVy
+biBhLiQzKHNbMF0sc1sxXSxzWzJdKX1lbHNlIGlmKHI9PT00KXtpZighIWEuJDQpcmV0dXJuIGEuJDQo
+c1swXSxzWzFdLHNbMl0sc1szXSl9ZWxzZSBpZihyPT09NSlpZighIWEuJDUpcmV0dXJuIGEuJDUoc1sw
+XSxzWzFdLHNbMl0sc1szXSxzWzRdKQpxPWFbIiIrIiQiK3JdCmlmKHEhPW51bGwpcmV0dXJuIHEuYXBw
+bHkoYSxzKX1yZXR1cm4gSC5FdyhhLGIsYyl9LApFdzpmdW5jdGlvbihhLGIsYyl7dmFyIHQscyxyLHEs
+cCxvLG4sbSxsLGs9YiBpbnN0YW5jZW9mIEFycmF5P2I6UC5DSChiLCEwLHUueiksaj1rLmxlbmd0aCxp
+PWEuJFIKaWYoajxpKXJldHVybiBILnpvKGEsayxjKQp0PWEuJEQKcz10PT1udWxsCnI9IXM/dCgpOm51
+bGwKcT1KLmlhKGEpCnA9cS4kQwppZih0eXBlb2YgcD09InN0cmluZyIpcD1xW3BdCmlmKHMpe2lmKGMh
+PW51bGwmJmMuYSE9PTApcmV0dXJuIEguem8oYSxrLGMpCmlmKGo9PT1pKXJldHVybiBwLmFwcGx5KGEs
+aykKcmV0dXJuIEguem8oYSxrLGMpfWlmKHIgaW5zdGFuY2VvZiBBcnJheSl7aWYoYyE9bnVsbCYmYy5h
+IT09MClyZXR1cm4gSC56byhhLGssYykKaWYoaj5pK3IubGVuZ3RoKXJldHVybiBILnpvKGEsayxudWxs
+KQpDLk5tLkZWKGssci5zbGljZShqLWkpKQpyZXR1cm4gcC5hcHBseShhLGspfWVsc2V7aWYoaj5pKXJl
+dHVybiBILnpvKGEsayxjKQpvPU9iamVjdC5rZXlzKHIpCmlmKGM9PW51bGwpZm9yKHM9by5sZW5ndGgs
+bj0wO248by5sZW5ndGg7by5sZW5ndGg9PT1zfHwoMCxILmxrKShvKSwrK24pQy5ObS5pKGsscltILnko
+b1tuXSldKQplbHNle2ZvcihzPW8ubGVuZ3RoLG09MCxuPTA7bjxvLmxlbmd0aDtvLmxlbmd0aD09PXN8
+fCgwLEgubGspKG8pLCsrbil7bD1ILnkob1tuXSkKaWYoYy54NChsKSl7KyttCkMuTm0uaShrLGMucSgw
+LGwpKX1lbHNlIEMuTm0uaShrLHJbbF0pfWlmKG0hPT1jLmEpcmV0dXJuIEguem8oYSxrLGMpfXJldHVy
+biBwLmFwcGx5KGEsayl9fSwKcFk6ZnVuY3Rpb24oYSl7dGhyb3cgSC5iKEgudEwoYSkpfSwKT0g6ZnVu
+Y3Rpb24oYSxiKXtpZihhPT1udWxsKUouSG0oYSkKdGhyb3cgSC5iKEguSFkoYSxiKSl9LApIWTpmdW5j
+dGlvbihhLGIpe3ZhciB0LHMscj0iaW5kZXgiCmlmKCFILm9rKGIpKXJldHVybiBuZXcgUC51KCEwLGIs
+cixudWxsKQp0PUguU2MoSi5IbShhKSkKaWYoIShiPDApKXtpZih0eXBlb2YgdCE9PSJudW1iZXIiKXJl
+dHVybiBILnBZKHQpCnM9Yj49dH1lbHNlIHM9ITAKaWYocylyZXR1cm4gUC5DZihiLGEscixudWxsLHQp
+CnJldHVybiBQLngoYixyKX0sCmF1OmZ1bmN0aW9uKGEsYixjKXt2YXIgdD0iSW52YWxpZCB2YWx1ZSIK
+aWYoYT5jKXJldHVybiBuZXcgUC5iSigwLGMsITAsYSwic3RhcnQiLHQpCmlmKGIhPW51bGwpe2lmKCFI
+Lm9rKGIpKXJldHVybiBuZXcgUC51KCEwLGIsImVuZCIsbnVsbCkKaWYoYjxhfHxiPmMpcmV0dXJuIG5l
+dyBQLmJKKGEsYywhMCxiLCJlbmQiLHQpfXJldHVybiBuZXcgUC51KCEwLGIsImVuZCIsbnVsbCl9LAp0
+TDpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IFAudSghMCxhLG51bGwsbnVsbCl9LApiOmZ1bmN0aW9uKGEp
+e3ZhciB0CmlmKGE9PW51bGwpYT1uZXcgUC5uKCkKdD1uZXcgRXJyb3IoKQp0LmRhcnRFeGNlcHRpb249
+YQppZigiZGVmaW5lUHJvcGVydHkiIGluIE9iamVjdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIm1l
+c3NhZ2UiLHtnZXQ6SC5ofSkKdC5uYW1lPSIifWVsc2UgdC50b1N0cmluZz1ILmgKcmV0dXJuIHR9LApo
+OmZ1bmN0aW9uKCl7cmV0dXJuIEouaih0aGlzLmRhcnRFeGNlcHRpb24pfSwKdmg6ZnVuY3Rpb24oYSl7
+dGhyb3cgSC5iKGEpfSwKbGs6ZnVuY3Rpb24oYSl7dGhyb3cgSC5iKFAuYTQoYSkpfSwKY006ZnVuY3Rp
+b24oYSl7dmFyIHQscyxyLHEscCxvCmE9SC5lQShhLnJlcGxhY2UoU3RyaW5nKHt9KSwnJHJlY2VpdmVy
+JCcpKQp0PWEubWF0Y2goL1xcXCRbYS16QS1aXStcXFwkL2cpCmlmKHQ9PW51bGwpdD1ILlZNKFtdLHUu
+cykKcz10LmluZGV4T2YoIlxcJGFyZ3VtZW50c1xcJCIpCnI9dC5pbmRleE9mKCJcXCRhcmd1bWVudHNF
+eHByXFwkIikKcT10LmluZGV4T2YoIlxcJGV4cHJcXCQiKQpwPXQuaW5kZXhPZigiXFwkbWV0aG9kXFwk
+IikKbz10LmluZGV4T2YoIlxcJHJlY2VpdmVyXFwkIikKcmV0dXJuIG5ldyBILmY5KGEucmVwbGFjZShu
+ZXcgUmVnRXhwKCdcXFxcXFwkYXJndW1lbnRzXFxcXFxcJCcsJ2cnKSwnKCg/Onh8W154XSkqKScpLnJl
+cGxhY2UobmV3IFJlZ0V4cCgnXFxcXFxcJGFyZ3VtZW50c0V4cHJcXFxcXFwkJywnZycpLCcoKD86eHxb
+XnhdKSopJykucmVwbGFjZShuZXcgUmVnRXhwKCdcXFxcXFwkZXhwclxcXFxcXCQnLCdnJyksJygoPzp4
+fFteeF0pKiknKS5yZXBsYWNlKG5ldyBSZWdFeHAoJ1xcXFxcXCRtZXRob2RcXFxcXFwkJywnZycpLCco
+KD86eHxbXnhdKSopJykucmVwbGFjZShuZXcgUmVnRXhwKCdcXFxcXFwkcmVjZWl2ZXJcXFxcXFwkJywn
+ZycpLCcoKD86eHxbXnhdKSopJykscyxyLHEscCxvKX0sClM3OmZ1bmN0aW9uKGEpe3JldHVybiBmdW5j
+dGlvbigkZXhwciQpe3ZhciAkYXJndW1lbnRzRXhwciQ9JyRhcmd1bWVudHMkJwp0cnl7JGV4cHIkLiRt
+ZXRob2QkKCRhcmd1bWVudHNFeHByJCl9Y2F0Y2godCl7cmV0dXJuIHQubWVzc2FnZX19KGEpfSwKTWo6
+ZnVuY3Rpb24oYSl7cmV0dXJuIGZ1bmN0aW9uKCRleHByJCl7dHJ5eyRleHByJC4kbWV0aG9kJH1jYXRj
+aCh0KXtyZXR1cm4gdC5tZXNzYWdlfX0oYSl9LApJajpmdW5jdGlvbihhLGIpe3JldHVybiBuZXcgSC5X
+MChhLGI9PW51bGw/bnVsbDpiLm1ldGhvZCl9LApUMzpmdW5jdGlvbihhLGIpe3ZhciB0PWI9PW51bGws
+cz10P251bGw6Yi5tZXRob2QKcmV0dXJuIG5ldyBILmF6KGEscyx0P251bGw6Yi5yZWNlaXZlcil9LApS
+dTpmdW5jdGlvbihhKXt2YXIgdCxzLHIscSxwLG8sbixtLGwsayxqLGksaCxnLGY9bnVsbCxlPW5ldyBI
+LkFtKGEpCmlmKGE9PW51bGwpcmV0dXJuIGYKaWYoYSBpbnN0YW5jZW9mIEguYnEpcmV0dXJuIGUuJDEo
+YS5hKQppZih0eXBlb2YgYSE9PSJvYmplY3QiKXJldHVybiBhCmlmKCJkYXJ0RXhjZXB0aW9uIiBpbiBh
+KXJldHVybiBlLiQxKGEuZGFydEV4Y2VwdGlvbikKZWxzZSBpZighKCJtZXNzYWdlIiBpbiBhKSlyZXR1
+cm4gYQp0PWEubWVzc2FnZQppZigibnVtYmVyIiBpbiBhJiZ0eXBlb2YgYS5udW1iZXI9PSJudW1iZXIi
+KXtzPWEubnVtYmVyCnI9cyY2NTUzNQppZigoQy5qbi53RyhzLDE2KSY4MTkxKT09PTEwKXN3aXRjaChy
+KXtjYXNlIDQzODpyZXR1cm4gZS4kMShILlQzKEguZCh0KSsiIChFcnJvciAiK3IrIikiLGYpKQpjYXNl
+IDQ0NTpjYXNlIDUwMDc6cmV0dXJuIGUuJDEoSC5JaihILmQodCkrIiAoRXJyb3IgIityKyIpIixmKSl9
+fWlmKGEgaW5zdGFuY2VvZiBUeXBlRXJyb3Ipe3E9JC5TbigpCnA9JC5scSgpCm89JC5OOSgpCm49JC5p
+SSgpCm09JC5LZigpCmw9JC5aaCgpCms9JC5yTigpCiQuYzMoKQpqPSQuSEsoKQppPSQucjEoKQpoPXEu
+cVModCkKaWYoaCE9bnVsbClyZXR1cm4gZS4kMShILlQzKEgueSh0KSxoKSkKZWxzZXtoPXAucVModCkK
+aWYoaCE9bnVsbCl7aC5tZXRob2Q9ImNhbGwiCnJldHVybiBlLiQxKEguVDMoSC55KHQpLGgpKX1lbHNl
+e2g9by5xUyh0KQppZihoPT1udWxsKXtoPW4ucVModCkKaWYoaD09bnVsbCl7aD1tLnFTKHQpCmlmKGg9
+PW51bGwpe2g9bC5xUyh0KQppZihoPT1udWxsKXtoPWsucVModCkKaWYoaD09bnVsbCl7aD1uLnFTKHQp
+CmlmKGg9PW51bGwpe2g9ai5xUyh0KQppZihoPT1udWxsKXtoPWkucVModCkKZz1oIT1udWxsfWVsc2Ug
+Zz0hMH1lbHNlIGc9ITB9ZWxzZSBnPSEwfWVsc2UgZz0hMH1lbHNlIGc9ITB9ZWxzZSBnPSEwfWVsc2Ug
+Zz0hMAppZihnKXJldHVybiBlLiQxKEguSWooSC55KHQpLGgpKX19cmV0dXJuIGUuJDEobmV3IEgudlYo
+dHlwZW9mIHQ9PSJzdHJpbmciP3Q6IiIpKX1pZihhIGluc3RhbmNlb2YgUmFuZ2VFcnJvcil7aWYodHlw
+ZW9mIHQ9PSJzdHJpbmciJiZ0LmluZGV4T2YoImNhbGwgc3RhY2siKSE9PS0xKXJldHVybiBuZXcgUC5L
+WSgpCnQ9ZnVuY3Rpb24oYil7dHJ5e3JldHVybiBTdHJpbmcoYil9Y2F0Y2goZCl7fXJldHVybiBudWxs
+fShhKQpyZXR1cm4gZS4kMShuZXcgUC51KCExLGYsZix0eXBlb2YgdD09InN0cmluZyI/dC5yZXBsYWNl
+KC9eUmFuZ2VFcnJvcjpccyovLCIiKTp0KSl9aWYodHlwZW9mIEludGVybmFsRXJyb3I9PSJmdW5jdGlv
+biImJmEgaW5zdGFuY2VvZiBJbnRlcm5hbEVycm9yKWlmKHR5cGVvZiB0PT0ic3RyaW5nIiYmdD09PSJ0
+b28gbXVjaCByZWN1cnNpb24iKXJldHVybiBuZXcgUC5LWSgpCnJldHVybiBhfSwKdHM6ZnVuY3Rpb24o
+YSl7dmFyIHQKaWYoYSBpbnN0YW5jZW9mIEguYnEpcmV0dXJuIGEuYgppZihhPT1udWxsKXJldHVybiBu
+ZXcgSC5YTyhhKQp0PWEuJGNhY2hlZFRyYWNlCmlmKHQhPW51bGwpcmV0dXJuIHQKcmV0dXJuIGEuJGNh
+Y2hlZFRyYWNlPW5ldyBILlhPKGEpfSwKQjc6ZnVuY3Rpb24oYSxiKXt2YXIgdCxzLHIscT1hLmxlbmd0
+aApmb3IodD0wO3Q8cTt0PXIpe3M9dCsxCnI9cysxCmIuWSgwLGFbdF0sYVtzXSl9cmV0dXJuIGJ9LApm
+dDpmdW5jdGlvbihhLGIsYyxkLGUsZil7dS5aLmIoYSkKc3dpdGNoKEguU2MoYikpe2Nhc2UgMDpyZXR1
+cm4gYS4kMCgpCmNhc2UgMTpyZXR1cm4gYS4kMShjKQpjYXNlIDI6cmV0dXJuIGEuJDIoYyxkKQpjYXNl
+IDM6cmV0dXJuIGEuJDMoYyxkLGUpCmNhc2UgNDpyZXR1cm4gYS4kNChjLGQsZSxmKX10aHJvdyBILmIo
+bmV3IFAuQ0QoIlVuc3VwcG9ydGVkIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIHdyYXBwZWQgY2xvc3Vy
+ZSIpKX0sCnRSOmZ1bmN0aW9uKGEsYil7dmFyIHQKaWYoYT09bnVsbClyZXR1cm4gbnVsbAp0PWEuJGlk
+ZW50aXR5CmlmKCEhdClyZXR1cm4gdAp0PWZ1bmN0aW9uKGMsZCxlKXtyZXR1cm4gZnVuY3Rpb24oZixn
+LGgsaSl7cmV0dXJuIGUoYyxkLGYsZyxoLGkpfX0oYSxiLEguZnQpCmEuJGlkZW50aXR5PXQKcmV0dXJu
+IHR9LAppQTpmdW5jdGlvbihhLGIsYyxkLGUsZixnKXt2YXIgdCxzLHIscSxwLG8sbixtLGw9bnVsbCxr
+PWJbMF0saj1rLiRjYWxsTmFtZSxpPWU/T2JqZWN0LmNyZWF0ZShuZXcgSC56eCgpLmNvbnN0cnVjdG9y
+LnByb3RvdHlwZSk6T2JqZWN0LmNyZWF0ZShuZXcgSC5yVChsLGwsbCxsKS5jb25zdHJ1Y3Rvci5wcm90
+b3R5cGUpCmkuJGluaXRpYWxpemU9aS5jb25zdHJ1Y3RvcgppZihlKXQ9ZnVuY3Rpb24gc3RhdGljX3Rl
+YXJfb2ZmKCl7dGhpcy4kaW5pdGlhbGl6ZSgpfQplbHNle3M9JC55agppZih0eXBlb2YgcyE9PSJudW1i
+ZXIiKXJldHVybiBzLmgoKQokLnlqPXMrMQpzPW5ldyBGdW5jdGlvbigiYSxiLGMsZCIrcywidGhpcy4k
+aW5pdGlhbGl6ZShhLGIsYyxkIitzKyIpIikKdD1zfWkuY29uc3RydWN0b3I9dAp0LnByb3RvdHlwZT1p
+CmlmKCFlKXtyPUguYngoYSxrLGYpCnIuJHJlZmxlY3Rpb25JbmZvPWR9ZWxzZXtpLiRzdGF0aWNfbmFt
+ZT1nCnI9a31xPUguaW0oZCxlLGYpCmkuJFM9cQppW2pdPXIKZm9yKHA9cixvPTE7bzxiLmxlbmd0aDsr
+K28pe249YltvXQptPW4uJGNhbGxOYW1lCmlmKG0hPW51bGwpe249ZT9uOkguYngoYSxuLGYpCmlbbV09
+bn1pZihvPT09Yyl7bi4kcmVmbGVjdGlvbkluZm89ZApwPW59fWkuJEM9cAppLiRSPWsuJFIKaS4kRD1r
+LiRECnJldHVybiB0fSwKaW06ZnVuY3Rpb24oYSxiLGMpe3ZhciB0CmlmKHR5cGVvZiBhPT0ibnVtYmVy
+IilyZXR1cm4gZnVuY3Rpb24oZCxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZChlKX19KEguQnAs
+YSkKaWYodHlwZW9mIGE9PSJzdHJpbmciKXtpZihiKXRocm93IEguYigiQ2Fubm90IGNvbXB1dGUgc2ln
+bmF0dXJlIGZvciBzdGF0aWMgdGVhcm9mZi4iKQp0PWM/SC5QVzpILlRuCnJldHVybiBmdW5jdGlvbihk
+LGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKHRoaXMsZCl9fShhLHQpfXRocm93IEguYigiRXJy
+b3IgaW4gZnVuY3Rpb25UeXBlIG9mIHRlYXJvZmYiKX0sCnZxOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciB0
+PUguRFYKc3dpdGNoKGI/LTE6YSl7Y2FzZSAwOnJldHVybiBmdW5jdGlvbihlLGYpe3JldHVybiBmdW5j
+dGlvbigpe3JldHVybiBmKHRoaXMpW2VdKCl9fShjLHQpCmNhc2UgMTpyZXR1cm4gZnVuY3Rpb24oZSxm
+KXtyZXR1cm4gZnVuY3Rpb24oZyl7cmV0dXJuIGYodGhpcylbZV0oZyl9fShjLHQpCmNhc2UgMjpyZXR1
+cm4gZnVuY3Rpb24oZSxmKXtyZXR1cm4gZnVuY3Rpb24oZyxoKXtyZXR1cm4gZih0aGlzKVtlXShnLGgp
+fX0oYyx0KQpjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKGUsZil7cmV0dXJuIGZ1bmN0aW9uKGcsaCxpKXty
+ZXR1cm4gZih0aGlzKVtlXShnLGgsaSl9fShjLHQpCmNhc2UgNDpyZXR1cm4gZnVuY3Rpb24oZSxmKXty
+ZXR1cm4gZnVuY3Rpb24oZyxoLGksail7cmV0dXJuIGYodGhpcylbZV0oZyxoLGksail9fShjLHQpCmNh
+c2UgNTpyZXR1cm4gZnVuY3Rpb24oZSxmKXtyZXR1cm4gZnVuY3Rpb24oZyxoLGksaixrKXtyZXR1cm4g
+Zih0aGlzKVtlXShnLGgsaSxqLGspfX0oYyx0KQpkZWZhdWx0OnJldHVybiBmdW5jdGlvbihlLGYpe3Jl
+dHVybiBmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KGYodGhpcyksYXJndW1lbnRzKX19KGQsdCl9fSwK
+Yng6ZnVuY3Rpb24oYSxiLGMpe3ZhciB0LHMscixxLHAsbyxuCmlmKGMpcmV0dXJuIEguSGYoYSxiKQp0
+PWIuJHN0dWJOYW1lCnM9Yi5sZW5ndGgKcj1hW3RdCnE9Yj09bnVsbD9yPT1udWxsOmI9PT1yCnA9IXF8
+fHM+PTI3CmlmKHApcmV0dXJuIEgudnEocywhcSx0LGIpCmlmKHM9PT0wKXtxPSQueWoKaWYodHlwZW9m
+IHEhPT0ibnVtYmVyIilyZXR1cm4gcS5oKCkKJC55aj1xKzEKbz0ic2VsZiIrcQpxPSJyZXR1cm4gZnVu
+Y3Rpb24oKXt2YXIgIitvKyIgPSB0aGlzLiIKcD0kLm1KCnJldHVybiBuZXcgRnVuY3Rpb24ocStILmQo
+cD09bnVsbD8kLm1KPUguRTIoInNlbGYiKTpwKSsiO3JldHVybiAiK28rIi4iK0guZCh0KSsiKCk7fSIp
+KCl9bj0iYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLnNwbGl0KCIiKS5zcGxpY2UoMCxzKS5qb2lu
+KCIsIikKcT0kLnlqCmlmKHR5cGVvZiBxIT09Im51bWJlciIpcmV0dXJuIHEuaCgpCiQueWo9cSsxCm4r
+PXEKcT0icmV0dXJuIGZ1bmN0aW9uKCIrbisiKXtyZXR1cm4gdGhpcy4iCnA9JC5tSgpyZXR1cm4gbmV3
+IEZ1bmN0aW9uKHErSC5kKHA9PW51bGw/JC5tSj1ILkUyKCJzZWxmIik6cCkrIi4iK0guZCh0KSsiKCIr
+bisiKTt9IikoKX0sClo0OmZ1bmN0aW9uKGEsYixjLGQpe3ZhciB0PUguRFYscz1ILnlTCnN3aXRjaChi
+Py0xOmEpe2Nhc2UgMDp0aHJvdyBILmIoSC5FZigiSW50ZXJjZXB0ZWQgZnVuY3Rpb24gd2l0aCBubyBh
+cmd1bWVudHMuIikpCmNhc2UgMTpyZXR1cm4gZnVuY3Rpb24oZSxmLGcpe3JldHVybiBmdW5jdGlvbigp
+e3JldHVybiBmKHRoaXMpW2VdKGcodGhpcykpfX0oYyx0LHMpCmNhc2UgMjpyZXR1cm4gZnVuY3Rpb24o
+ZSxmLGcpe3JldHVybiBmdW5jdGlvbihoKXtyZXR1cm4gZih0aGlzKVtlXShnKHRoaXMpLGgpfX0oYyx0
+LHMpCmNhc2UgMzpyZXR1cm4gZnVuY3Rpb24oZSxmLGcpe3JldHVybiBmdW5jdGlvbihoLGkpe3JldHVy
+biBmKHRoaXMpW2VdKGcodGhpcyksaCxpKX19KGMsdCxzKQpjYXNlIDQ6cmV0dXJuIGZ1bmN0aW9uKGUs
+ZixnKXtyZXR1cm4gZnVuY3Rpb24oaCxpLGope3JldHVybiBmKHRoaXMpW2VdKGcodGhpcyksaCxpLGop
+fX0oYyx0LHMpCmNhc2UgNTpyZXR1cm4gZnVuY3Rpb24oZSxmLGcpe3JldHVybiBmdW5jdGlvbihoLGks
+aixrKXtyZXR1cm4gZih0aGlzKVtlXShnKHRoaXMpLGgsaSxqLGspfX0oYyx0LHMpCmNhc2UgNjpyZXR1
+cm4gZnVuY3Rpb24oZSxmLGcpe3JldHVybiBmdW5jdGlvbihoLGksaixrLGwpe3JldHVybiBmKHRoaXMp
+W2VdKGcodGhpcyksaCxpLGosayxsKX19KGMsdCxzKQpkZWZhdWx0OnJldHVybiBmdW5jdGlvbihlLGYs
+ZyxoKXtyZXR1cm4gZnVuY3Rpb24oKXtoPVtnKHRoaXMpXQpBcnJheS5wcm90b3R5cGUucHVzaC5hcHBs
+eShoLGFyZ3VtZW50cykKcmV0dXJuIGUuYXBwbHkoZih0aGlzKSxoKX19KGQsdCxzKX19LApIZjpmdW5j
+dGlvbihhLGIpe3ZhciB0LHMscixxLHAsbyxuLG09JC5tSgppZihtPT1udWxsKW09JC5tSj1ILkUyKCJz
+ZWxmIikKdD0kLlA0CmlmKHQ9PW51bGwpdD0kLlA0PUguRTIoInJlY2VpdmVyIikKcz1iLiRzdHViTmFt
+ZQpyPWIubGVuZ3RoCnE9YVtzXQpwPWI9PW51bGw/cT09bnVsbDpiPT09cQpvPSFwfHxyPj0yOAppZihv
+KXJldHVybiBILlo0KHIsIXAscyxiKQppZihyPT09MSl7bT0icmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJu
+IHRoaXMuIitILmQobSkrIi4iK0guZChzKSsiKHRoaXMuIitILmQodCkrIik7Igp0PSQueWoKaWYodHlw
+ZW9mIHQhPT0ibnVtYmVyIilyZXR1cm4gdC5oKCkKJC55aj10KzEKcmV0dXJuIG5ldyBGdW5jdGlvbiht
+K3QrIn0iKSgpfW49ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Ii5zcGxpdCgiIikuc3BsaWNlKDAs
+ci0xKS5qb2luKCIsIikKbT0icmV0dXJuIGZ1bmN0aW9uKCIrbisiKXtyZXR1cm4gdGhpcy4iK0guZCht
+KSsiLiIrSC5kKHMpKyIodGhpcy4iK0guZCh0KSsiLCAiK24rIik7Igp0PSQueWoKaWYodHlwZW9mIHQh
+PT0ibnVtYmVyIilyZXR1cm4gdC5oKCkKJC55aj10KzEKcmV0dXJuIG5ldyBGdW5jdGlvbihtK3QrIn0i
+KSgpfSwKS3E6ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyl7cmV0dXJuIEguaUEoYSxiLGMsZCwhIWUsISFm
+LGcpfSwKVG46ZnVuY3Rpb24oYSxiKXtyZXR1cm4gSC5jRSh2LnR5cGVVbml2ZXJzZSxILnpLKGEuYSks
+Yil9LApQVzpmdW5jdGlvbihhLGIpe3JldHVybiBILmNFKHYudHlwZVVuaXZlcnNlLEgueksoYS5jKSxi
+KX0sCkRWOmZ1bmN0aW9uKGEpe3JldHVybiBhLmF9LAp5UzpmdW5jdGlvbihhKXtyZXR1cm4gYS5jfSwK
+RTI6ZnVuY3Rpb24oYSl7dmFyIHQscyxyLHE9bmV3IEguclQoInNlbGYiLCJ0YXJnZXQiLCJyZWNlaXZl
+ciIsIm5hbWUiKSxwPUouRXAoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocSkpCmZvcih0PXAubGVu
+Z3RoLHM9MDtzPHQ7KytzKXtyPXBbc10KaWYocVtyXT09PWEpcmV0dXJuIHJ9fSwKb1Q6ZnVuY3Rpb24o
+YSl7aWYoYT09bnVsbClILmZPKCJib29sZWFuIGV4cHJlc3Npb24gbXVzdCBub3QgYmUgbnVsbCIpCnJl
+dHVybiBhfSwKZk86ZnVuY3Rpb24oYSl7dGhyb3cgSC5iKG5ldyBILmtZKGEpKX0sCmFnOmZ1bmN0aW9u
+KGEpe3Rocm93IEguYihuZXcgUC5jKGEpKX0sCkVmOmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgSC5FcShh
+KX0sCllnOmZ1bmN0aW9uKGEpe3JldHVybiB2LmdldElzb2xhdGVUYWcoYSl9LApWTTpmdW5jdGlvbihh
+LGIpe2EuJHRpPWIKcmV0dXJuIGF9LApvWDpmdW5jdGlvbihhKXtpZihhPT1udWxsKXJldHVybiBudWxs
+CnJldHVybiBhLiR0aX0sCklNOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gSC5ZOShhWyIkYSIrSC5kKGMp
+XSxILm9YKGIpKX0sClk5OmZ1bmN0aW9uKGEsYil7aWYoYT09bnVsbClyZXR1cm4gYgphPWEuYXBwbHko
+bnVsbCxiKQppZihhPT1udWxsKXJldHVybiBudWxsCmlmKEFycmF5LmlzQXJyYXkoYSkpcmV0dXJuIGEK
+aWYodHlwZW9mIGE9PSJmdW5jdGlvbiIpcmV0dXJuIGEuYXBwbHkobnVsbCxiKQpyZXR1cm4gYn0sCklH
+OmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYS5hcHBseShiLEguWTkoSi5pYShiKVsiJGEiK0guZChjKV0s
+SC5vWChiKSkpfSwKaXc6ZnVuY3Rpb24oYSxiLGMpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLGIse3Zh
+bHVlOmMsZW51bWVyYWJsZTpmYWxzZSx3cml0YWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTp0cnVlfSl9LAp3
+MzpmdW5jdGlvbihhKXt2YXIgdCxzLHIscSxwPUgueSgkLk5GLiQxKGEpKSxvPSQubndbcF0KaWYobyE9
+bnVsbCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEsdi5kaXNwYXRjaFByb3BlcnR5TmFtZSx7dmFsdWU6
+byxlbnVtZXJhYmxlOmZhbHNlLHdyaXRhYmxlOnRydWUsY29uZmlndXJhYmxlOnRydWV9KQpyZXR1cm4g
+by5pfXQ9JC52dltwXQppZih0IT1udWxsKXJldHVybiB0CnM9di5pbnRlcmNlcHRvcnNCeVRhZ1twXQpp
+ZihzPT1udWxsKXtwPUgueSgkLlRYLiQyKGEscCkpCmlmKHAhPW51bGwpe289JC5ud1twXQppZihvIT1u
+dWxsKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSx2LmRpc3BhdGNoUHJvcGVydHlOYW1lLHt2YWx1ZTpv
+LGVudW1lcmFibGU6ZmFsc2Usd3JpdGFibGU6dHJ1ZSxjb25maWd1cmFibGU6dHJ1ZX0pCnJldHVybiBv
+Lml9dD0kLnZ2W3BdCmlmKHQhPW51bGwpcmV0dXJuIHQKcz12LmludGVyY2VwdG9yc0J5VGFnW3BdfX1p
+ZihzPT1udWxsKXJldHVybiBudWxsCnQ9cy5wcm90b3R5cGUKcj1wWzBdCmlmKHI9PT0iISIpe289SC5W
+YSh0KQokLm53W3BdPW8KT2JqZWN0LmRlZmluZVByb3BlcnR5KGEsdi5kaXNwYXRjaFByb3BlcnR5TmFt
+ZSx7dmFsdWU6byxlbnVtZXJhYmxlOmZhbHNlLHdyaXRhYmxlOnRydWUsY29uZmlndXJhYmxlOnRydWV9
+KQpyZXR1cm4gby5pfWlmKHI9PT0ifiIpeyQudnZbcF09dApyZXR1cm4gdH1pZihyPT09Ii0iKXtxPUgu
+VmEodCkKT2JqZWN0LmRlZmluZVByb3BlcnR5KE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSx2LmRpc3Bh
+dGNoUHJvcGVydHlOYW1lLHt2YWx1ZTpxLGVudW1lcmFibGU6ZmFsc2Usd3JpdGFibGU6dHJ1ZSxjb25m
+aWd1cmFibGU6dHJ1ZX0pCnJldHVybiBxLml9aWYocj09PSIrIilyZXR1cm4gSC5MYyhhLHQpCmlmKHI9
+PT0iKiIpdGhyb3cgSC5iKFAuU1kocCkpCmlmKHYubGVhZlRhZ3NbcF09PT10cnVlKXtxPUguVmEodCkK
+T2JqZWN0LmRlZmluZVByb3BlcnR5KE9iamVjdC5nZXRQcm90b3R5cGVPZihhKSx2LmRpc3BhdGNoUHJv
+cGVydHlOYW1lLHt2YWx1ZTpxLGVudW1lcmFibGU6ZmFsc2Usd3JpdGFibGU6dHJ1ZSxjb25maWd1cmFi
+bGU6dHJ1ZX0pCnJldHVybiBxLml9ZWxzZSByZXR1cm4gSC5MYyhhLHQpfSwKTGM6ZnVuY3Rpb24oYSxi
+KXt2YXIgdD1PYmplY3QuZ2V0UHJvdG90eXBlT2YoYSkKT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsdi5k
+aXNwYXRjaFByb3BlcnR5TmFtZSx7dmFsdWU6Si5RdShiLHQsbnVsbCxudWxsKSxlbnVtZXJhYmxlOmZh
+bHNlLHdyaXRhYmxlOnRydWUsY29uZmlndXJhYmxlOnRydWV9KQpyZXR1cm4gYn0sClZhOmZ1bmN0aW9u
+KGEpe3JldHVybiBKLlF1KGEsITEsbnVsbCwhIWEuJGlYail9LApWRjpmdW5jdGlvbihhLGIsYyl7dmFy
+IHQ9Yi5wcm90b3R5cGUKaWYodi5sZWFmVGFnc1thXT09PXRydWUpcmV0dXJuIEguVmEodCkKZWxzZSBy
+ZXR1cm4gSi5RdSh0LGMsbnVsbCxudWxsKX0sClhEOmZ1bmN0aW9uKCl7aWYoITA9PT0kLkJ2KXJldHVy
+bgokLkJ2PSEwCkguWjEoKX0sCloxOmZ1bmN0aW9uKCl7dmFyIHQscyxyLHEscCxvLG4sbQokLm53PU9i
+amVjdC5jcmVhdGUobnVsbCkKJC52dj1PYmplY3QuY3JlYXRlKG51bGwpCkgua08oKQp0PXYuaW50ZXJj
+ZXB0b3JzQnlUYWcKcz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0KQppZih0eXBlb2Ygd2luZG93
+IT0idW5kZWZpbmVkIil7d2luZG93CnI9ZnVuY3Rpb24oKXt9CmZvcihxPTA7cTxzLmxlbmd0aDsrK3Ep
+e3A9c1txXQpvPSQueDcuJDEocCkKaWYobyE9bnVsbCl7bj1ILlZGKHAsdFtwXSxvKQppZihuIT1udWxs
+KXtPYmplY3QuZGVmaW5lUHJvcGVydHkobyx2LmRpc3BhdGNoUHJvcGVydHlOYW1lLHt2YWx1ZTpuLGVu
+dW1lcmFibGU6ZmFsc2Usd3JpdGFibGU6dHJ1ZSxjb25maWd1cmFibGU6dHJ1ZX0pCnIucHJvdG90eXBl
+PW99fX19Zm9yKHE9MDtxPHMubGVuZ3RoOysrcSl7cD1zW3FdCmlmKC9eW0EtWmEtel9dLy50ZXN0KHAp
+KXttPXRbcF0KdFsiISIrcF09bQp0WyJ+IitwXT1tCnRbIi0iK3BdPW0KdFsiKyIrcF09bQp0WyIqIitw
+XT1tfX19LAprTzpmdW5jdGlvbigpe3ZhciB0LHMscixxLHAsbyxuPUMuWXEoKQpuPUgudWQoQy5LVSxI
+LnVkKEMuZlEsSC51ZChDLmk3LEgudWQoQy5pNyxILnVkKEMueGksSC51ZChDLmRrLEgudWQoQy53YihD
+Lk80KSxuKSkpKSkpKQppZih0eXBlb2YgZGFydE5hdGl2ZURpc3BhdGNoSG9va3NUcmFuc2Zvcm1lciE9
+InVuZGVmaW5lZCIpe3Q9ZGFydE5hdGl2ZURpc3BhdGNoSG9va3NUcmFuc2Zvcm1lcgppZih0eXBlb2Yg
+dD09ImZ1bmN0aW9uIil0PVt0XQppZih0LmNvbnN0cnVjdG9yPT1BcnJheSlmb3Iocz0wO3M8dC5sZW5n
+dGg7KytzKXtyPXRbc10KaWYodHlwZW9mIHI9PSJmdW5jdGlvbiIpbj1yKG4pfHxufX1xPW4uZ2V0VGFn
+CnA9bi5nZXRVbmtub3duVGFnCm89bi5wcm90b3R5cGVGb3JUYWcKJC5ORj1uZXcgSC5kQyhxKQokLlRY
+PW5ldyBILndOKHApCiQueDc9bmV3IEguVlgobyl9LAp1ZDpmdW5jdGlvbihhLGIpe3JldHVybiBhKGIp
+fHxifSwKdjQ6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3ZhciB0PWI/Im0iOiIiLHM9Yz8iIjoiaSIscj1k
+PyJ1IjoiIixxPWU/InMiOiIiLHA9Zj8iZyI6IiIsbz1mdW5jdGlvbihnLGgpe3RyeXtyZXR1cm4gbmV3
+IFJlZ0V4cChnLGgpfWNhdGNoKG4pe3JldHVybiBufX0oYSx0K3MrcitxK3ApCmlmKG8gaW5zdGFuY2Vv
+ZiBSZWdFeHApcmV0dXJuIG8KdGhyb3cgSC5iKFAucnIoIklsbGVnYWwgUmVnRXhwIHBhdHRlcm4gKCIr
+U3RyaW5nKG8pKyIpIixhLG51bGwpKX0sCm0yOmZ1bmN0aW9uKGEsYixjKXt2YXIgdAppZih0eXBlb2Yg
+Yj09InN0cmluZyIpcmV0dXJuIGEuaW5kZXhPZihiLGMpPj0wCmVsc2UgaWYoYiBpbnN0YW5jZW9mIEgu
+VlIpe3Q9Qy54Qi5HKGEsYykKcmV0dXJuIGIuYi50ZXN0KHQpfWVsc2V7dD1KLkZMKGIsQy54Qi5HKGEs
+YykpCnJldHVybiF0LmdsMCh0KX19LApBNDpmdW5jdGlvbihhKXtpZihhLmluZGV4T2YoIiQiLDApPj0w
+KXJldHVybiBhLnJlcGxhY2UoL1wkL2csIiQkJCQiKQpyZXR1cm4gYX0sCmVBOmZ1bmN0aW9uKGEpe2lm
+KC9bW1xde30oKSorPy5cXF4kfF0vLnRlc3QoYSkpcmV0dXJuIGEucmVwbGFjZSgvW1tcXXt9KCkqKz8u
+XFxeJHxdL2csIlxcJCYiKQpyZXR1cm4gYX0sCnlzOmZ1bmN0aW9uKGEsYixjKXt2YXIgdD1ILm5NKGEs
+YixjKQpyZXR1cm4gdH0sCm5NOmZ1bmN0aW9uKGEsYixjKXt2YXIgdCxzLHIscQppZihiPT09IiIpe2lm
+KGE9PT0iIilyZXR1cm4gYwp0PWEubGVuZ3RoCmZvcihzPWMscj0wO3I8dDsrK3Ipcz1zK2Fbcl0rYwpy
+ZXR1cm4gcy5jaGFyQ29kZUF0KDApPT0wP3M6c31xPWEuaW5kZXhPZihiLDApCmlmKHE8MClyZXR1cm4g
+YQppZihhLmxlbmd0aDw1MDB8fGMuaW5kZXhPZigiJCIsMCk+PTApcmV0dXJuIGEuc3BsaXQoYikuam9p
+bihjKQpyZXR1cm4gYS5yZXBsYWNlKG5ldyBSZWdFeHAoSC5lQShiKSwnZycpLEguQTQoYykpfSwKUEQ6
+ZnVuY3Rpb24gUEQoYSxiKXt0aGlzLmE9YQp0aGlzLiR0aT1ifSwKV1U6ZnVuY3Rpb24gV1UoKXt9LApM
+UDpmdW5jdGlvbiBMUChhLGIsYyxkKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uYz1jCl8uJHRpPWR9
+LApMSTpmdW5jdGlvbiBMSShhLGIsYyxkLGUpe3ZhciBfPXRoaXMKXy5hPWEKXy5jPWIKXy5kPWMKXy5l
+PWQKXy5mPWV9LApDajpmdW5jdGlvbiBDaihhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9
+LApmOTpmdW5jdGlvbiBmOShhLGIsYyxkLGUsZil7dmFyIF89dGhpcwpfLmE9YQpfLmI9YgpfLmM9Ywpf
+LmQ9ZApfLmU9ZQpfLmY9Zn0sClcwOmZ1bmN0aW9uIFcwKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LAph
+ejpmdW5jdGlvbiBheihhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LAp2VjpmdW5jdGlv
+biB2VihhKXt0aGlzLmE9YX0sCmJxOmZ1bmN0aW9uIGJxKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApB
+bTpmdW5jdGlvbiBBbShhKXt0aGlzLmE9YX0sClhPOmZ1bmN0aW9uIFhPKGEpe3RoaXMuYT1hCnRoaXMu
+Yj1udWxsfSwKVHA6ZnVuY3Rpb24gVHAoKXt9LApsYzpmdW5jdGlvbiBsYygpe30sCnp4OmZ1bmN0aW9u
+IHp4KCl7fSwKclQ6ZnVuY3Rpb24gclQoYSxiLGMsZCl7dmFyIF89dGhpcwpfLmE9YQpfLmI9YgpfLmM9
+YwpfLmQ9ZH0sCkVxOmZ1bmN0aW9uIEVxKGEpe3RoaXMuYT1hfSwKa1k6ZnVuY3Rpb24ga1koYSl7dGhp
+cy5hPWF9LApONTpmdW5jdGlvbiBONShhKXt2YXIgXz10aGlzCl8uYT0wCl8uZj1fLmU9Xy5kPV8uYz1f
+LmI9bnVsbApfLnI9MApfLiR0aT1hfSwKZGI6ZnVuY3Rpb24gZGIoYSxiKXt2YXIgXz10aGlzCl8uYT1h
+Cl8uYj1iCl8uZD1fLmM9bnVsbH0sCmk1OmZ1bmN0aW9uIGk1KGEsYil7dGhpcy5hPWEKdGhpcy4kdGk9
+Yn0sCk42OmZ1bmN0aW9uIE42KGEsYixjKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uZD1fLmM9bnVs
+bApfLiR0aT1jfSwKZEM6ZnVuY3Rpb24gZEMoYSl7dGhpcy5hPWF9LAp3TjpmdW5jdGlvbiB3TihhKXt0
+aGlzLmE9YX0sClZYOmZ1bmN0aW9uIFZYKGEpe3RoaXMuYT1hfSwKVlI6ZnVuY3Rpb24gVlIoYSxiKXt2
+YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uZD1fLmM9bnVsbH0sCkVLOmZ1bmN0aW9uIEVLKGEpe3RoaXMu
+Yj1hfSwKS1c6ZnVuY3Rpb24gS1coYSxiLGMpe3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuYz1jfSwKUGI6
+ZnVuY3Rpb24gUGIoYSxiLGMpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5jPWMKXy5kPW51bGx9LAp0
+UTpmdW5jdGlvbiB0UShhLGIpe3RoaXMuYT1hCnRoaXMuYz1ifSwKdW46ZnVuY3Rpb24gdW4oYSxiLGMp
+e3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuYz1jfSwKU2Q6ZnVuY3Rpb24gU2QoYSxiLGMpe3ZhciBfPXRo
+aXMKXy5hPWEKXy5iPWIKXy5jPWMKXy5kPW51bGx9LApYRjpmdW5jdGlvbihhKXtyZXR1cm4gYX0sCkRR
+OmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgSW50OEFycmF5KGEpfSwKb2Q6ZnVuY3Rpb24oYSxiLGMpe2lm
+KGE+Pj4wIT09YXx8YT49Yyl0aHJvdyBILmIoSC5IWShiLGEpKX0sCnJNOmZ1bmN0aW9uKGEsYixjKXt2
+YXIgdAppZighKGE+Pj4wIT09YSkpdD1iPj4+MCE9PWJ8fGE+Ynx8Yj5jCmVsc2UgdD0hMAppZih0KXRo
+cm93IEguYihILmF1KGEsYixjKSkKcmV0dXJuIGJ9LApFVDpmdW5jdGlvbiBFVCgpe30sCmIwOmZ1bmN0
+aW9uIGIwKCl7fSwKRGc6ZnVuY3Rpb24gRGcoKXt9LApQZzpmdW5jdGlvbiBQZygpe30sCnhqOmZ1bmN0
+aW9uIHhqKCl7fSwKZEU6ZnVuY3Rpb24gZEUoKXt9LApaQTpmdW5jdGlvbiBaQSgpe30sCndmOmZ1bmN0
+aW9uIHdmKCl7fSwKUHE6ZnVuY3Rpb24gUHEoKXt9LAplRTpmdW5jdGlvbiBlRSgpe30sClY2OmZ1bmN0
+aW9uIFY2KCl7fSwKUkc6ZnVuY3Rpb24gUkcoKXt9LApWUDpmdW5jdGlvbiBWUCgpe30sCldCOmZ1bmN0
+aW9uIFdCKCl7fSwKWkc6ZnVuY3Rpb24gWkcoKXt9LAp4WjpmdW5jdGlvbihhLGIpe3ZhciB0PWIuZApy
+ZXR1cm4gdD09bnVsbD9iLmQ9SC5KKGEsImI4IixbYi5RXSk6dH0sClExOmZ1bmN0aW9uKGEpe3ZhciB0
+PWEuegppZih0PT09Nnx8dD09PTd8fHQ9PT04KXJldHVybiBILlExKGEuUSkKcmV0dXJuIHQ9PT0xMXx8
+dD09PTEyfSwKbUQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuZGJ9LApOMDpmdW5jdGlvbihhKXtyZXR1cm4g
+SC5FKHYudHlwZVVuaXZlcnNlLGEpfSwKSlM6ZnVuY3Rpb24oYSl7dmFyIHQ9YS4kUwppZih0IT1udWxs
+KXtpZih0eXBlb2YgdD09Im51bWJlciIpcmV0dXJuIEguQnAodCkKcmV0dXJuIGEuJFMoKX1yZXR1cm4g
+bnVsbH0sClVlOmZ1bmN0aW9uKGEsYil7dmFyIHQKaWYoSC5RMShiKSlpZihhIGluc3RhbmNlb2YgSC5U
+cCl7dD1ILkpTKGEpCmlmKHQhPW51bGwpcmV0dXJuIHR9cmV0dXJuIEgueksoYSl9LAp6SzpmdW5jdGlv
+bihhKXt2YXIgdAppZihhIGluc3RhbmNlb2YgUC5rKXt0PWEuJHRpCnJldHVybiB0IT1udWxsP3Q6SC5W
+VShhKX1pZihBcnJheS5pc0FycmF5KGEpKXJldHVybiBILnQ2KGEpCnJldHVybiBILlZVKEouaWEoYSkp
+fSwKdDY6ZnVuY3Rpb24oYSl7dmFyIHQ9YS4kdGkscz11Lm0KaWYodD09bnVsbClyZXR1cm4gcwppZih0
+LmNvbnN0cnVjdG9yIT09cy5jb25zdHJ1Y3RvcilyZXR1cm4gcwpyZXR1cm4gdH0sCkxoOmZ1bmN0aW9u
+KGEpe3ZhciB0PWEuJHRpCnJldHVybiB0IT1udWxsP3Q6SC5WVShhKX0sClZVOmZ1bmN0aW9uKGEpe3Zh
+ciB0PWEuY29uc3RydWN0b3Iscz10LiRjY2FjaGUKaWYocyE9bnVsbClyZXR1cm4gcwpyZXR1cm4gSC5y
+OShhLHQpfSwKcjk6ZnVuY3Rpb24oYSxiKXt2YXIgdD1hIGluc3RhbmNlb2YgSC5UcD9hLl9fcHJvdG9f
+Xy5fX3Byb3RvX18uY29uc3RydWN0b3I6YixzPUguYWkodi50eXBlVW5pdmVyc2UsdC5uYW1lKQpiLiRj
+Y2FjaGU9cwpyZXR1cm4gc30sCkJwOmZ1bmN0aW9uKGEpe3ZhciB0LHM9YSxyPXYudHlwZXMscT1yW3Nd
+CmlmKHR5cGVvZiBxPT0ic3RyaW5nIil7dD1ILkUodi50eXBlVW5pdmVyc2UscSkKcltzXT10CnJldHVy
+biB0fXJldHVybiBxfSwKSko6ZnVuY3Rpb24oYSl7dmFyIHQscz10aGlzLHI9cy56LHE9SC5ZTwppZihI
+LmNjKHMpKXtxPUguSXcKcy5iPXMuYT1ILmhufWVsc2UgaWYocj09PTkpe3Q9cy5kYgppZigiS04iPT09
+dClxPUgub2sKZWxzZSBpZigiQ1AiPT09dClxPUguS0gKZWxzZSBpZigiRksiPT09dClxPUguS0gKZWxz
+ZSBpZigicVUiPT09dClxPUguTU0KZWxzZSBpZigiYTIiPT09dClxPUgubAplbHNle3I9cy5RCmlmKHMu
+Y2guZXZlcnkoSC5jYykpe3MueD0iJGkiK3IKcT1ILnQ0fX19cy5jPXEKcmV0dXJuIHMuYyhhKX0sCllP
+OmZ1bmN0aW9uKGEpe3ZhciB0PXRoaXMKcmV0dXJuIEguV2Uodi50eXBlVW5pdmVyc2UsSC5VZShhLHQp
+LG51bGwsdCxudWxsKX0sCnQ0OmZ1bmN0aW9uKGEpe3ZhciB0PXRoaXMueAppZihhIGluc3RhbmNlb2Yg
+UC5rKXJldHVybiEhYVt0XQpyZXR1cm4hIUouaWEoYSlbdF19LApPejpmdW5jdGlvbihhKXt2YXIgdApp
+ZihhPT1udWxsKXJldHVybiBhCnQ9dGhpcwppZih0LmMoYSkpcmV0dXJuIGEKdGhyb3cgSC5iKEguUTUo
+SC5XSyhhLEguVWUoYSx0KSxILmRtKHQsbnVsbCkpKSl9LApBdjpmdW5jdGlvbihhKXt2YXIgdAppZihh
+PT1udWxsKXJldHVybiBhCnQ9dGhpcwppZih0LmMoYSkpcmV0dXJuIGEKdGhyb3cgSC5iKEguWmMoSC5X
+SyhhLEguVWUoYSx0KSxILmRtKHQsbnVsbCkpKSl9LApEaDpmdW5jdGlvbihhLGIsYyxkKXt2YXIgdD1u
+dWxsCmlmKEguV2Uodi50eXBlVW5pdmVyc2UsYSx0LGIsdCkpcmV0dXJuIGEKdGhyb3cgSC5iKEguWmMo
+IlRoZSB0eXBlIGFyZ3VtZW50ICciK0guZChILmRtKGEsdCkpKyInIGlzIG5vdCBhIHN1YnR5cGUgb2Yg
+dGhlIHR5cGUgdmFyaWFibGUgYm91bmQgJyIrSC5kKEguZG0oYix0KSkrIicgb2YgdHlwZSB2YXJpYWJs
+ZSAnIitjKyInIGluICciK0guZChkKSsiJy4iKSl9LApXSzpmdW5jdGlvbihhLGIsYyl7dmFyIHQ9UC5w
+KGEpLHM9SC5kbShiPT1udWxsP0gueksoYSk6YixudWxsKQpyZXR1cm4gdCsiOiB0eXBlICciK0guZChz
+KSsiJyBpcyBub3QgYSBzdWJ0eXBlIG9mIHR5cGUgJyIrSC5kKGMpKyInIn0sClE1OmZ1bmN0aW9uKGEp
+e3JldHVybiBuZXcgSC5oeigiQ2FzdEVycm9yOiAiK2EpfSwKUHY6ZnVuY3Rpb24oYSxiKXtyZXR1cm4g
+bmV3IEguaHooIkNhc3RFcnJvcjogIitILldLKGEsbnVsbCxiKSl9LApaYzpmdW5jdGlvbihhKXtyZXR1
+cm4gbmV3IEguaU0oIlR5cGVFcnJvcjogIithKX0sCnE6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IEgu
+aU0oIlR5cGVFcnJvcjogIitILldLKGEsbnVsbCxiKSl9LApJdzpmdW5jdGlvbihhKXtyZXR1cm4hMH0s
+CmhuOmZ1bmN0aW9uKGEpe3JldHVybiBhfSwKbDpmdW5jdGlvbihhKXtyZXR1cm4hMD09PWF8fCExPT09
+YX0sCkU5OmZ1bmN0aW9uKGEpe2lmKCEwPT09YXx8ITE9PT1hKXJldHVybiBhCmlmKGE9PW51bGwpcmV0
+dXJuIGEKdGhyb3cgSC5iKEguUHYoYSwiYm9vbCIpKX0sCnhkOmZ1bmN0aW9uKGEpe2lmKCEwPT09YXx8
+ITE9PT1hKXJldHVybiBhCmlmKGE9PW51bGwpcmV0dXJuIGEKdGhyb3cgSC5iKEgucShhLCJib29sIikp
+fSwKZGo6ZnVuY3Rpb24oYSl7aWYodHlwZW9mIGE9PSJudW1iZXIiKXJldHVybiBhCmlmKGE9PW51bGwp
+cmV0dXJuIGEKdGhyb3cgSC5iKEguUHYoYSwiZG91YmxlIikpfSwKSWc6ZnVuY3Rpb24oYSl7aWYodHlw
+ZW9mIGE9PSJudW1iZXIiKXJldHVybiBhCmlmKGE9PW51bGwpcmV0dXJuIGEKdGhyb3cgSC5iKEgucShh
+LCJkb3VibGUiKSl9LApvazpmdW5jdGlvbihhKXtyZXR1cm4gdHlwZW9mIGE9PSJudW1iZXIiJiZNYXRo
+LmZsb29yKGEpPT09YX0sClNIOmZ1bmN0aW9uKGEpe2lmKHR5cGVvZiBhPT0ibnVtYmVyIiYmTWF0aC5m
+bG9vcihhKT09PWEpcmV0dXJuIGEKaWYoYT09bnVsbClyZXR1cm4gYQp0aHJvdyBILmIoSC5QdihhLCJp
+bnQiKSl9LApTYzpmdW5jdGlvbihhKXtpZih0eXBlb2YgYT09Im51bWJlciImJk1hdGguZmxvb3IoYSk9
+PT1hKXJldHVybiBhCmlmKGE9PW51bGwpcmV0dXJuIGEKdGhyb3cgSC5iKEgucShhLCJpbnQiKSl9LApL
+SDpmdW5jdGlvbihhKXtyZXR1cm4gdHlwZW9mIGE9PSJudW1iZXIifSwKdVU6ZnVuY3Rpb24oYSl7aWYo
 dHlwZW9mIGE9PSJudW1iZXIiKXJldHVybiBhCmlmKGE9PW51bGwpcmV0dXJuIGEKdGhyb3cgSC5iKEgu
-cShhLCJudW0iKSl9LApNTTpmdW5jdGlvbihhKXtyZXR1cm4gdHlwZW9mIGE9PSJzdHJpbmcifSwKYzA6
-ZnVuY3Rpb24oYSl7aWYodHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBhCmlmKGE9PW51bGwpcmV0dXJu
-IGEKdGhyb3cgSC5iKEguUHYoYSwiU3RyaW5nIikpfSwKeTpmdW5jdGlvbihhKXtpZih0eXBlb2YgYT09
-InN0cmluZyIpcmV0dXJuIGEKaWYoYT09bnVsbClyZXR1cm4gYQp0aHJvdyBILmIoSC5xKGEsIlN0cmlu
-ZyIpKX0sCmlvOmZ1bmN0aW9uKGEsYil7dmFyIHQscyxyCmZvcih0PSIiLHM9IiIscj0wO3I8YS5sZW5n
-dGg7KytyLHM9IiwgIil0Kz1DLnhCLmgocyxILmRtKGFbcl0sYikpCnJldHVybiB0fSwKYkk6ZnVuY3Rp
-b24oYTAsYTEsYTIpe3ZhciB0LHMscixxLHAsbyxuLG0sbCxrLGosaSxoLGcsZixlLGQsYyxiLGE9Iiwg
-IgppZihhMiE9bnVsbCl7dD1hMi5sZW5ndGgKaWYoYTE9PW51bGwpe2ExPUguVk0oW10sdS5zKQpzPW51
-bGx9ZWxzZSBzPWExLmxlbmd0aApyPWExLmxlbmd0aApmb3IocT10O3E+MDstLXEpQy5ObS5pKGExLCJU
-IisocitxKSkKZm9yKHA9IjwiLG89IiIscT0wO3E8dDsrK3Esbz1hKXtwKz1vCm49YTEubGVuZ3RoCm09
-bi0xLXEKaWYobTwwKXJldHVybiBILk9IKGExLG0pCnA9Qy54Qi5oKHAsYTFbbV0pCmw9YTJbcV0KaWYo
-IUguY2MobCwhMCkpcCs9Qy54Qi5oKCIgZXh0ZW5kcyAiLEguZG0obCxhMSkpfXArPSI+In1lbHNle3A9
-IiIKcz1udWxsfW49YTAuUQprPWEwLmNoCmo9ay5hCmk9ai5sZW5ndGgKaD1rLmIKZz1oLmxlbmd0aApm
-PWsuYwplPWYubGVuZ3RoCmQ9SC5kbShuLGExKQpmb3IoYz0iIixiPSIiLHE9MDtxPGk7KytxLGI9YSlj
-Kz1DLnhCLmgoYixILmRtKGpbcV0sYTEpKQppZihnPjApe2MrPWIrIlsiCmZvcihiPSIiLHE9MDtxPGc7
-KytxLGI9YSljKz1DLnhCLmgoYixILmRtKGhbcV0sYTEpKQpjKz0iXSJ9aWYoZT4wKXtjKz1iKyJ7Igpm
-b3IoYj0iIixxPTA7cTxlO3ErPTIsYj1hKWMrPUMueEIuaChiLEguZG0oZltxKzFdLGExKSkrIiAiK2Zb
-cV0KYys9In0ifWlmKHMhPW51bGwpYTEubGVuZ3RoPXMKcmV0dXJuIHArIigiK2MrIikgPT4gIitILmQo
-ZCl9LApkbTpmdW5jdGlvbihhLGIpe3ZhciB0LHMscixxLHA9YS56CmlmKHA9PT01KXJldHVybiJlcmFz
-ZWQiCmlmKHA9PT0yKXJldHVybiJkeW5hbWljIgppZihwPT09MylyZXR1cm4idm9pZCIKaWYocD09PTEp
-cmV0dXJuIk5ldmVyIgppZihwPT09NClyZXR1cm4iYW55IgppZihwPT09NilyZXR1cm4gSC5kKEguZG0o
-YS5RLGIpKSsiKiIKaWYocD09PTcpcmV0dXJuIEguZChILmRtKGEuUSxiKSkrIj8iCmlmKHA9PT04KXJl
-dHVybiJGdXR1cmVPcjwiK0guZChILmRtKGEuUSxiKSkrIj4iCmlmKHA9PT05KXt0PUgubzMoYS5RKQpz
-PWEuY2gKcmV0dXJuIHMubGVuZ3RoIT09MD90KygiPCIrSC5pbyhzLGIpKyI+Iik6dH1pZihwPT09MTEp
-cmV0dXJuIEguYkkoYSxiLG51bGwpCmlmKHA9PT0xMilyZXR1cm4gSC5iSShhLlEsYixhLmNoKQppZihw
-PT09MTMpe3I9YS5RCnE9Yi5sZW5ndGgKcj1xLTEtcgppZihyPDB8fHI+PXEpcmV0dXJuIEguT0goYixy
-KQpyZXR1cm4gYltyXX1yZXR1cm4iPyJ9LApvMzpmdW5jdGlvbihhKXt2YXIgdCxzPUguSmcoYSkKaWYo
-cyE9bnVsbClyZXR1cm4gcwp0PSJtaW5pZmllZDoiK2EKcmV0dXJuIHR9LApRbzpmdW5jdGlvbihhLGIp
-e3ZhciB0PWEudFJbYl0KZm9yKDt0eXBlb2YgdD09InN0cmluZyI7KXQ9YS50Ult0XQpyZXR1cm4gdH0s
-CmFpOmZ1bmN0aW9uKGEsYil7dmFyIHQscyxyLHEscCxvPWEuZVQsbj1vW2JdCmlmKG49PW51bGwpcmV0
-dXJuIEguRShhLGIpCmVsc2UgaWYodHlwZW9mIG49PSJudW1iZXIiKXt0PW4Kcz1ILm0oYSw1LCIjIikK
-cj1bXQpmb3IocT0wO3E8dDsrK3Epci5wdXNoKHMpCnA9SC5KKGEsYixyKQpvW2JdPXAKcmV0dXJuIHB9
-ZWxzZSByZXR1cm4gbn0sCnhiOmZ1bmN0aW9uKGEsYil7cmV0dXJuIEguSXgoYS50UixiKX0sCkZGOmZ1
-bmN0aW9uKGEsYil7cmV0dXJuIEguSXgoYS5lVCxiKX0sCkU6ZnVuY3Rpb24oYSxiKXt2YXIgdCxzPWEu
-ZUMscj1zLmdldChiKQppZihyIT1udWxsKXJldHVybiByCnQ9SC56KGEsbnVsbCxiKQpzLnNldChiLHQp
-CnJldHVybiB0fSwKY0U6ZnVuY3Rpb24oYSxiLGMpe3ZhciB0LHMscj1iLmN4CmlmKHI9PW51bGwpcj1i
-LmN4PW5ldyBNYXAoKQp0PXIuZ2V0KGMpCmlmKHQhPW51bGwpcmV0dXJuIHQKcz1ILnooYSxiLGMpCnIu
-c2V0KGMscykKcmV0dXJuIHN9LAp2NTpmdW5jdGlvbihhLGIsYyl7dmFyIHQscyxyLHE9Yi5jeQppZihx
-PT1udWxsKXE9Yi5jeT1uZXcgTWFwKCkKdD1jLmRiCnM9cS5nZXQodCkKaWYocyE9bnVsbClyZXR1cm4g
-cwpyPUguYShhLGIsYy56PT09MTA/Yy5jaDpbY10pCnEuc2V0KHQscikKcmV0dXJuIHJ9LAp6OmZ1bmN0
-aW9uKGEsYixjKXt2YXIgdD1ILmkoSC5vKGEsYixjKSkKcmV0dXJuIHR9LApXRzpmdW5jdGlvbihhLGIp
-e3ZhciB0PWIuZGIKYS5lQy5zZXQodCxiKQpiLmE9SC5PegpiLmI9SC5BdgpiLmM9SC5KSgpyZXR1cm4g
-Yn0sCm06ZnVuY3Rpb24oYSxiLGMpe3ZhciB0LHM9YS5lQy5nZXQoYykKaWYocyE9bnVsbClyZXR1cm4g
-cwp0PW5ldyBILkpjKG51bGwsbnVsbCxudWxsKQp0Lno9Ygp0LmRiPWMKcmV0dXJuIEguV0coYSx0KX0s
-CnY6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIHQscz1hLmVDLmdldChkKQppZihzIT1udWxsKXJldHVybiBz
-CnQ9bmV3IEguSmMobnVsbCxudWxsLG51bGwpCnQuej1iCnQuUT1jCnQuZGI9ZApyZXR1cm4gSC5XRyhh
-LHQpfSwKSDpmdW5jdGlvbihhLGIpe3ZhciB0LHM9IiIrYisiXiIscj1hLmVDLmdldChzKQppZihyIT1u
-dWxsKXJldHVybiByCnQ9bmV3IEguSmMobnVsbCxudWxsLG51bGwpCnQuej0xMwp0LlE9Ygp0LmRiPXMK
-cmV0dXJuIEguV0coYSx0KX0sClV4OmZ1bmN0aW9uKGEpe3ZhciB0LHMscixxPWEubGVuZ3RoCmZvcih0
-PSIiLHM9IiIscj0wO3I8cTsrK3Iscz0iLCIpdCs9cythW3JdLmRiCnJldHVybiB0fSwKUzQ6ZnVuY3Rp
-b24oYSl7dmFyIHQscyxyLHEscCxvPWEubGVuZ3RoCmZvcih0PSIiLHM9IiIscj0wO3I8bztyKz0yLHM9
-IiwiKXtxPWFbcl0KcD1hW3IrMV0uZGIKdCs9cytxKyI6IitwfXJldHVybiB0fSwKSjpmdW5jdGlvbihh
-LGIsYyl7dmFyIHQscyxyPWIKaWYoYy5sZW5ndGghPT0wKXIrPSI8IitILlV4KGMpKyI+Igp0PWEuZUMu
-Z2V0KHIpCmlmKHQhPW51bGwpcmV0dXJuIHQKcz1uZXcgSC5KYyhudWxsLG51bGwsbnVsbCkKcy56PTkK
-cy5RPWIKcy5jaD1jCmlmKGMubGVuZ3RoPjApcy5kPWNbMF0Kcy5kYj1yCnJldHVybiBILldHKGEscyl9
-LAphOmZ1bmN0aW9uKGEsYixjKXt2YXIgdCxzLHIscSxwCmlmKGIuej09PTEwKXt0PWIuUQpzPWIuY2gu
-Y29uY2F0KGMpfWVsc2V7cz1jCnQ9Yn1yPXQuZGIrIjsiKygiPCIrSC5VeChzKSsiPiIpCnE9YS5lQy5n
-ZXQocikKaWYocSE9bnVsbClyZXR1cm4gcQpwPW5ldyBILkpjKG51bGwsbnVsbCxudWxsKQpwLno9MTAK
-cC5RPXQKcC5jaD1zCnAuZGI9cgpyZXR1cm4gSC5XRyhhLHApfSwKQzpmdW5jdGlvbihhLGIsYyl7dmFy
-IHQscyxyLHE9Yi5kYixwPWMuYSxvPXAubGVuZ3RoLG49Yy5iLG09bi5sZW5ndGgsbD1jLmMsaz1sLmxl
-bmd0aCxqPSIoIitILlV4KHApCmlmKG0+MClqKz0obz4wPyIsIjoiIikrIlsiK0guVXgobikrIl0iCmlm
-KGs+MClqKz0obz4wPyIsIjoiIikrInsiK0guUzQobCkrIn0iCnQ9cSsoaisiKSIpCnM9YS5lQy5nZXQo
-dCkKaWYocyE9bnVsbClyZXR1cm4gcwpyPW5ldyBILkpjKG51bGwsbnVsbCxudWxsKQpyLno9MTEKci5R
-PWIKci5jaD1jCnIuZGI9dApyZXR1cm4gSC5XRyhhLHIpfSwKRDpmdW5jdGlvbihhLGIsYyl7dmFyIHQs
-cz1iLmRiKyI8IitILlV4KGMpKyI+IixyPWEuZUMuZ2V0KHMpCmlmKHIhPW51bGwpcmV0dXJuIHIKdD1u
-ZXcgSC5KYyhudWxsLG51bGwsbnVsbCkKdC56PTEyCnQuUT1iCnQuY2g9Ywp0LmRiPXMKcmV0dXJuIEgu
-V0coYSx0KX0sCm86ZnVuY3Rpb24oYSxiLGMpe3JldHVybnt1OmEsZTpiLHI6YyxzOltdLHA6MH19LApp
-OmZ1bmN0aW9uKGEpe3ZhciB0LHMscixxLHAsbyxuLG0sbCxrLGosaSxoLGc9YS5yLGY9YS5zCmZvcih0
-PWcubGVuZ3RoLHM9MDtzPHQ7KXtyPWcuY2hhckNvZGVBdChzKQppZihyPj00OCYmcjw9NTcpcz1ILkEo
-cysxLHIsZyxmKQplbHNlIGlmKCgoKHJ8MzIpPj4+MCktOTcmNjU1MzUpPDI2fHxyPT09OTV8fHI9PT0z
-NilzPUgudChhLHMsZyxmLCExKQplbHNlIGlmKHI9PT00NilzPUgudChhLHMsZyxmLCEwKQplbHNleysr
-cwpzd2l0Y2gocil7Y2FzZSA0NDpicmVhawpjYXNlIDU4OmJyZWFrCmNhc2UgNTk6Zi5wdXNoKEguSyhh
-LnUsYS5lLGYucG9wKCkpKQpicmVhawpjYXNlIDk0OmYucHVzaChILkgoYS51LGYucG9wKCkpKQpicmVh
-awpjYXNlIDM1OmYucHVzaChILm0oYS51LDUsIiMiKSkKYnJlYWsKY2FzZSA2NDpmLnB1c2goSC5tKGEu
-dSwyLCJAIikpCmJyZWFrCmNhc2UgMTI2OmYucHVzaChILm0oYS51LDMsIn4iKSkKYnJlYWsKY2FzZSA2
-MDpmLnB1c2goYS5wKQphLnA9Zi5sZW5ndGgKYnJlYWsKY2FzZSA2MjpxPWEudQpwPWYuc3BsaWNlKGEu
-cCkKSC5yKGEudSxhLmUscCkKYS5wPWYucG9wKCkKbz1mLnBvcCgpCmlmKHR5cGVvZiBvPT0ic3RyaW5n
-IilmLnB1c2goSC5KKHEsbyxwKSkKZWxzZXtuPUguSyhxLGEuZSxvKQpzd2l0Y2gobi56KXtjYXNlIDEx
-OmYucHVzaChILkQocSxuLHApKQpicmVhawpkZWZhdWx0OmYucHVzaChILmEocSxuLHApKQpicmVha319
-YnJlYWsKY2FzZSAzODpILkkoYSxmKQpicmVhawpjYXNlIDQyOm09YS51Cmw9SC5LKG0sYS5lLGYucG9w
-KCkpCmYucHVzaChILnYobSw2LGwsbC5kYisiKiIpKQpicmVhawpjYXNlIDYzOm09YS51Cmw9SC5LKG0s
-YS5lLGYucG9wKCkpCmYucHVzaChILnYobSw3LGwsbC5kYisiPyIpKQpicmVhawpjYXNlIDQ3Om09YS51
-Cmw9SC5LKG0sYS5lLGYucG9wKCkpCmYucHVzaChILnYobSw4LGwsbC5kYisiLyIpKQpicmVhawpjYXNl
-IDQwOmYucHVzaChhLnApCmEucD1mLmxlbmd0aApicmVhawpjYXNlIDQxOnE9YS51Cms9bmV3IEguRygp
-Cmo9cS5zRUEKaT1xLnNFQQpvPWYucG9wKCkKaWYodHlwZW9mIG89PSJudW1iZXIiKXN3aXRjaChvKXtj
-YXNlLTE6aj1mLnBvcCgpCmJyZWFrCmNhc2UtMjppPWYucG9wKCkKYnJlYWsKZGVmYXVsdDpmLnB1c2go
-bykKYnJlYWt9ZWxzZSBmLnB1c2gobykKcD1mLnNwbGljZShhLnApCkgucihhLnUsYS5lLHApCmEucD1m
-LnBvcCgpCmsuYT1wCmsuYj1qCmsuYz1pCmYucHVzaChILkMocSxILksocSxhLmUsZi5wb3AoKSksaykp
-CmJyZWFrCmNhc2UgOTE6Zi5wdXNoKGEucCkKYS5wPWYubGVuZ3RoCmJyZWFrCmNhc2UgOTM6cD1mLnNw
-bGljZShhLnApCkgucihhLnUsYS5lLHApCmEucD1mLnBvcCgpCmYucHVzaChwKQpmLnB1c2goLTEpCmJy
-ZWFrCmNhc2UgMTIzOmYucHVzaChhLnApCmEucD1mLmxlbmd0aApicmVhawpjYXNlIDEyNTpwPWYuc3Bs
-aWNlKGEucCkKSC5CKGEudSxhLmUscCkKYS5wPWYucG9wKCkKZi5wdXNoKHApCmYucHVzaCgtMikKYnJl
-YWsKZGVmYXVsdDp0aHJvdyJCYWQgY2hhcmFjdGVyICIrcn19fWg9Zi5wb3AoKQpyZXR1cm4gSC5LKGEu
-dSxhLmUsaCl9LApBOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciB0LHMscj1iLTQ4CmZvcih0PWMubGVuZ3Ro
-O2E8dDsrK2Epe3M9Yy5jaGFyQ29kZUF0KGEpCmlmKCEocz49NDgmJnM8PTU3KSlicmVhawpyPXIqMTAr
-KHMtNDgpfWQucHVzaChyKQpyZXR1cm4gYX0sCnQ6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgdCxzLHIs
-cSxwLG8sbj1iKzEKZm9yKHQ9Yy5sZW5ndGg7bjx0Oysrbil7cz1jLmNoYXJDb2RlQXQobikKaWYocz09
-PTQ2KXtpZihlKWJyZWFrCmU9ITB9ZWxzZXtpZighKCgoKHN8MzIpPj4+MCktOTcmNjU1MzUpPDI2fHxz
-PT09OTV8fHM9PT0zNikpcj1zPj00OCYmczw9NTcKZWxzZSByPSEwCmlmKCFyKWJyZWFrfX1xPWMuc3Vi
-c3RyaW5nKGIsbikKaWYoZSl7dD1hLnUKcD1hLmUKaWYocC56PT09MTApcD1wLlEKbz1ILlFvKHQscC5R
-KVtxXQppZihvPT1udWxsKUgudmgoJ05vICInK3ErJyIgaW4gIicrSC5tRChwKSsnIicpCmQucHVzaChI
-LmNFKHQscCxvKSl9ZWxzZSBkLnB1c2gocSkKcmV0dXJuIG59LApJOmZ1bmN0aW9uKGEsYil7dmFyIHQ9
-Yi5wb3AoKQppZigwPT09dCl7Yi5wdXNoKEgubShhLnUsMSwiMCYiKSkKcmV0dXJufWlmKDE9PT10KXti
-LnB1c2goSC5tKGEudSw0LCIxJiIpKQpyZXR1cm59dGhyb3cgSC5iKFAuaFYoIlVuZXhwZWN0ZWQgZXh0
-ZW5kZWQgb3BlcmF0aW9uICIrSC5kKHQpKSl9LApLOmZ1bmN0aW9uKGEsYixjKXtpZih0eXBlb2YgYz09
-InN0cmluZyIpcmV0dXJuIEguSihhLGMsYS5zRUEpCmVsc2UgaWYodHlwZW9mIGM9PSJudW1iZXIiKXJl
-dHVybiBILlRWKGEsYixjKQplbHNlIHJldHVybiBjfSwKcjpmdW5jdGlvbihhLGIsYyl7dmFyIHQscz1j
-Lmxlbmd0aApmb3IodD0wO3Q8czsrK3QpY1t0XT1ILksoYSxiLGNbdF0pfSwKQjpmdW5jdGlvbihhLGIs
-Yyl7dmFyIHQscz1jLmxlbmd0aApmb3IodD0xO3Q8czt0Kz0yKWNbdF09SC5LKGEsYixjW3RdKX0sClRW
-OmZ1bmN0aW9uKGEsYixjKXt2YXIgdCxzLHI9Yi56CmlmKHI9PT0xMCl7aWYoYz09PTApcmV0dXJuIGIu
-UQp0PWIuY2gKcz10Lmxlbmd0aAppZihjPD1zKXJldHVybiB0W2MtMV0KYy09cwpiPWIuUQpyPWIuen1l
-bHNlIGlmKGM9PT0wKXJldHVybiBiCmlmKHIhPT05KXRocm93IEguYihQLmhWKCJJbmRleGVkIGJhc2Ug
-bXVzdCBiZSBhbiBpbnRlcmZhY2UgdHlwZSIpKQp0PWIuY2gKaWYoYzw9dC5sZW5ndGgpcmV0dXJuIHRb
-Yy0xXQp0aHJvdyBILmIoUC5oVigiQmFkIGluZGV4ICIrYysiIGZvciAiK2IudygwKSkpfSwKV2U6ZnVu
-Y3Rpb24oYSxiLGMsZCxlLGYpe3ZhciB0LHMscixxLHAsbwppZihiPT09ZClyZXR1cm4hMAppZihILmNj
-KGQsITApKXJldHVybiEwCnQ9Yi56CmlmKHQ9PT00KXJldHVybiEwCmlmKEguY2MoYiwhMCkpcmV0dXJu
-ITEKaWYoYj09PXUuUClyZXR1cm4hMApzPXQ9PT0xMwppZihzKWlmKEguV2UoYSxjW2IuUV0sYyxkLGUs
-ITApKXJldHVybiEwCnI9ZC56CmlmKHQ9PT02KXJldHVybiBILldlKGEsYi5RLGMsZCxlLCEwKQppZihy
-PT09Nil7cT1kLlEKcmV0dXJuIEguV2UoYSxiLGMscSxlLCEwKX1pZih0PT09OCl7aWYoIUguV2UoYSxi
-LlEsYyxkLGUsITApKXJldHVybiExCnJldHVybiBILldlKGEsSC54WihhLGIpLGMsZCxlLCEwKX1pZih0
-PT09Nyl7cT1ILldlKGEsYi5RLGMsZCxlLCEwKQpyZXR1cm4gcX1pZihyPT09OCl7aWYoSC5XZShhLGIs
-YyxkLlEsZSwhMCkpcmV0dXJuITAKcmV0dXJuIEguV2UoYSxiLGMsSC54WihhLGQpLGUsITApfWlmKHI9
-PT03KXtxPUguV2UoYSxiLGMsZC5RLGUsITApCnJldHVybiBxfWlmKHMpcmV0dXJuITEKcT10IT09MTEK
-aWYoKCFxfHx0PT09MTIpJiZkPT09dS5aKXJldHVybiEwCmlmKHI9PT0xMil7aWYoYj09PXUuZylyZXR1
-cm4hMAppZih0IT09MTIpcmV0dXJuITEKcD1iLmNoCm89ZC5jaAppZighSC56dShwLG8sITApKXJldHVy
-biExCmM9Yz09bnVsbD9wOnAuY29uY2F0KGMpCmU9ZT09bnVsbD9vOm8uY29uY2F0KGUpCnJldHVybiBI
-LmJPKGEsYi5RLGMsZC5RLGUsITApfWlmKHI9PT0xMSl7aWYoYj09PXUuZylyZXR1cm4hMAppZihxKXJl
-dHVybiExCnJldHVybiBILmJPKGEsYixjLGQsZSwhMCl9aWYodD09PTkpe2lmKHIhPT05KXJldHVybiEx
-CnJldHVybiBILnBHKGEsYixjLGQsZSwhMCl9cmV0dXJuITF9LApiTzpmdW5jdGlvbihhMCxhMSxhMixh
-MyxhNCxhNSl7dmFyIHQscyxyLHEscCxvLG4sbSxsLGssaixpLGgsZyxmLGUsZCxjLGIsYQppZighSC5X
-ZShhMCxhMS5RLGEyLGEzLlEsYTQsITApKXJldHVybiExCnQ9YTEuY2gKcz1hMy5jaApyPXQuYQpxPXMu
-YQpwPXIubGVuZ3RoCm89cS5sZW5ndGgKaWYocD5vKXJldHVybiExCm49by1wCm09dC5iCmw9cy5iCms9
-bS5sZW5ndGgKaj1sLmxlbmd0aAppZihwK2s8bytqKXJldHVybiExCmZvcihpPTA7aTxwOysraSl7aD1y
-W2ldCmlmKCFILldlKGEwLHFbaV0sYTQsaCxhMiwhMCkpcmV0dXJuITF9Zm9yKGk9MDtpPG47KytpKXto
-PW1baV0KaWYoIUguV2UoYTAscVtwK2ldLGE0LGgsYTIsITApKXJldHVybiExfWZvcihpPTA7aTxqOysr
-aSl7aD1tW24raV0KaWYoIUguV2UoYTAsbFtpXSxhNCxoLGEyLCEwKSlyZXR1cm4hMX1nPXQuYwpmPXMu
-YwplPWcubGVuZ3RoCmQ9Zi5sZW5ndGgKZm9yKGk9MCxjPTA7YzxkO2MrPTIpe2I9ZltjXQpkb3tpZihp
-Pj1lKXJldHVybiExCmE9Z1tpXQppKz0yfXdoaWxlKGE8YikKaWYoYjxhKXJldHVybiExCmg9Z1tpLTFd
-CmlmKCFILldlKGEwLGZbYysxXSxhNCxoLGEyLCEwKSlyZXR1cm4hMX1yZXR1cm4hMH0sCnBHOmZ1bmN0
-aW9uKGEsYixjLGQsZSxmKXt2YXIgdCxzLHIscSxwLG8sbixtLGw9Yi5RLGs9ZC5RCmlmKGw9PT1rKXt0
-PWIuY2gKcz1kLmNoCnI9dC5sZW5ndGgKZm9yKHE9MDtxPHI7KytxKXtwPXRbcV0Kbz1zW3FdCmlmKCFI
-LldlKGEscCxjLG8sZSwhMCkpcmV0dXJuITF9cmV0dXJuITB9bj1ILlFvKGEsbCkKaWYobj09bnVsbCly
-ZXR1cm4hMQptPW5ba10KaWYobT09bnVsbClyZXR1cm4hMQpyPW0ubGVuZ3RoCnM9ZC5jaApmb3IocT0w
-O3E8cjsrK3EpaWYoIUguV2UoYSxILmNFKGEsYixtW3FdKSxjLHNbcV0sZSwhMCkpcmV0dXJuITEKcmV0
-dXJuITB9LApyYTpmdW5jdGlvbihhLGIsYyl7dmFyIHQscyxyCmlmKGE9PT1iKXJldHVybiEwCmlmKEgu
-Y2MoYSwhMCkpcmV0dXJuIEguY2MoYiwhMCkKdD1hLnoKaWYodCE9PWIueilyZXR1cm4hMQpzd2l0Y2go
-dCl7Y2FzZSA2OmNhc2UgNzpjYXNlIDg6cmV0dXJuIEgucmEoYS5RLGIuUSwhMCkKY2FzZSA5OmlmKGEu
-USE9PWIuUSlyZXR1cm4hMQpyZXR1cm4gSC56dShhLmNoLGIuY2gsITApCmNhc2UgMTA6cmV0dXJuIEgu
-cmEoYS5RLGIuUSwhMCkmJkguenUoYS5jaCxiLmNoLCEwKQpjYXNlIDExOmlmKEgucmEoYS5RLGIuUSwh
-MCkpe3M9YS5jaApyPWIuY2gKcz1ILnp1KHMuYSxyLmEsITApJiZILnp1KHMuYixyLmIsITApJiZILlhz
-KHMuYyxyLmMsITApfWVsc2Ugcz0hMQpyZXR1cm4gcwpjYXNlIDEyOnJldHVybiBILnJhKGEuUSxiLlEs
-ITApJiZILnp1KGEuY2gsYi5jaCwhMCkKZGVmYXVsdDpyZXR1cm4hMX19LAp6dTpmdW5jdGlvbihhLGIs
-Yyl7dmFyIHQscz1hLmxlbmd0aAppZihzIT09Yi5sZW5ndGgpcmV0dXJuITEKZm9yKHQ9MDt0PHM7Kyt0
-KWlmKCFILnJhKGFbdF0sYlt0XSwhMCkpcmV0dXJuITEKcmV0dXJuITB9LApYczpmdW5jdGlvbihhLGIs
-Yyl7dmFyIHQscyxyPWEubGVuZ3RoCmlmKHIhPT1iLmxlbmd0aClyZXR1cm4hMQpmb3IodD0wO3Q8cjt0
-Kz0yKXtpZihhW3RdIT09Ylt0XSlyZXR1cm4hMQpzPXQrMQppZighSC5yYShhW3NdLGJbc10sITApKXJl
-dHVybiExfXJldHVybiEwfSwKck46ZnVuY3Rpb24oYSl7cmV0dXJuIEguY2MoYSwhMCl9LApjYzpmdW5j
-dGlvbihhLGIpe3ZhciB0LHMKaWYoYT09PXUuSylyZXR1cm4hMAp0PWEuegppZih0IT09MilpZih0IT09
-MylpZih0IT09NClpZih0IT09NSlzPXQ9PT04JiZILmNjKGEuUSwhMCkKZWxzZSBzPSEwCmVsc2Ugcz0h
-MAplbHNlIHM9ITAKZWxzZSBzPSEwCnJldHVybiBzfSwKSXg6ZnVuY3Rpb24oYSxiKXt2YXIgdCxzLHI9
-T2JqZWN0LmtleXMoYikscT1yLmxlbmd0aApmb3IodD0wO3Q8cTsrK3Qpe3M9clt0XQphW3NdPWJbc119
-fSwKSmM6ZnVuY3Rpb24gSmMoYSxiLGMpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5jPWMKXy55PV8u
-eD1fLmQ9bnVsbApfLno9MApfLmRiPV8uY3k9Xy5jeD1fLmNoPV8uUT1udWxsfSwKRzpmdW5jdGlvbiBH
-KCl7dGhpcy5jPXRoaXMuYj10aGlzLmE9bnVsbH0sCnU5OmZ1bmN0aW9uIHU5KCl7fSwKaHo6ZnVuY3Rp
-b24gaHooYSl7dGhpcy5hPWF9LAppTTpmdW5jdGlvbiBpTShhKXt0aGlzLmE9YX0sClI5OmZ1bmN0aW9u
-KGEpe3JldHVybiB1LmQuYyhhKXx8dS5CLmMoYSl8fHUuZHouYyhhKXx8dS5JLmMoYSl8fHUuQS5jKGEp
-fHx1Lmc0LmMoYSl8fHUuZzIuYyhhKX0sCkpnOmZ1bmN0aW9uKGEpe3JldHVybiB2Lm1hbmdsZWRHbG9i
-YWxOYW1lc1thXX19LEo9ewpRdTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm57aTphLHA6YixlOmMseDpk
-fX0sCmtzOmZ1bmN0aW9uKGEpe3ZhciB0LHMscixxLHA9YVt2LmRpc3BhdGNoUHJvcGVydHlOYW1lXQpp
-ZihwPT1udWxsKWlmKCQuQnY9PW51bGwpe0guWEQoKQpwPWFbdi5kaXNwYXRjaFByb3BlcnR5TmFtZV19
-aWYocCE9bnVsbCl7dD1wLnAKaWYoITE9PT10KXJldHVybiBwLmkKaWYoITA9PT10KXJldHVybiBhCnM9
-T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpCmlmKHQ9PT1zKXJldHVybiBwLmkKaWYocC5lPT09cyl0aHJv
-dyBILmIoUC5TWSgiUmV0dXJuIGludGVyY2VwdG9yIGZvciAiK0guZCh0KGEscCkpKSl9cj1hLmNvbnN0
-cnVjdG9yCnE9cj09bnVsbD9udWxsOnJbJC5VTigpXQppZihxIT1udWxsKXJldHVybiBxCnE9SC53Myhh
-KQppZihxIT1udWxsKXJldHVybiBxCmlmKHR5cGVvZiBhPT0iZnVuY3Rpb24iKXJldHVybiBDLkRHCnQ9
-T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpCmlmKHQ9PW51bGwpcmV0dXJuIEMuWlEKaWYodD09PU9iamVj
-dC5wcm90b3R5cGUpcmV0dXJuIEMuWlEKaWYodHlwZW9mIHI9PSJmdW5jdGlvbiIpe09iamVjdC5kZWZp
-bmVQcm9wZXJ0eShyLCQuVU4oKSx7dmFsdWU6Qy52QixlbnVtZXJhYmxlOmZhbHNlLHdyaXRhYmxlOnRy
-dWUsY29uZmlndXJhYmxlOnRydWV9KQpyZXR1cm4gQy52Qn1yZXR1cm4gQy52Qn0sClFpOmZ1bmN0aW9u
-KGEsYil7aWYoYTwwfHxhPjQyOTQ5NjcyOTUpdGhyb3cgSC5iKFAuVEUoYSwwLDQyOTQ5NjcyOTUsImxl
-bmd0aCIsbnVsbCkpCnJldHVybiBKLnB5KG5ldyBBcnJheShhKSxiKX0sCnB5OmZ1bmN0aW9uKGEsYil7
-cmV0dXJuIEouRXAoSC5WTShhLGIuQygiamQ8MD4iKSkpfSwKRXA6ZnVuY3Rpb24oYSl7YS5maXhlZCRs
-ZW5ndGg9QXJyYXkKcmV0dXJuIGF9LAp6QzpmdW5jdGlvbihhKXthLmZpeGVkJGxlbmd0aD1BcnJheQph
-LmltbXV0YWJsZSRsaXN0PUFycmF5CnJldHVybiBhfSwKR2E6ZnVuY3Rpb24oYSl7aWYoYTwyNTYpc3dp
-dGNoKGEpe2Nhc2UgOTpjYXNlIDEwOmNhc2UgMTE6Y2FzZSAxMjpjYXNlIDEzOmNhc2UgMzI6Y2FzZSAx
-MzM6Y2FzZSAxNjA6cmV0dXJuITAKZGVmYXVsdDpyZXR1cm4hMX1zd2l0Y2goYSl7Y2FzZSA1NzYwOmNh
-c2UgODE5MjpjYXNlIDgxOTM6Y2FzZSA4MTk0OmNhc2UgODE5NTpjYXNlIDgxOTY6Y2FzZSA4MTk3OmNh
-c2UgODE5ODpjYXNlIDgxOTk6Y2FzZSA4MjAwOmNhc2UgODIwMTpjYXNlIDgyMDI6Y2FzZSA4MjMyOmNh
-c2UgODIzMzpjYXNlIDgyMzk6Y2FzZSA4Mjg3OmNhc2UgMTIyODg6Y2FzZSA2NTI3OTpyZXR1cm4hMApk
-ZWZhdWx0OnJldHVybiExfX0sCm1tOmZ1bmN0aW9uKGEsYil7dmFyIHQscwpmb3IodD1hLmxlbmd0aDti
-PHQ7KXtzPUMueEIuVyhhLGIpCmlmKHMhPT0zMiYmcyE9PTEzJiYhSi5HYShzKSlicmVhazsrK2J9cmV0
-dXJuIGJ9LApjMTpmdW5jdGlvbihhLGIpe3ZhciB0LHMKZm9yKDtiPjA7Yj10KXt0PWItMQpzPUMueEIu
-bShhLHQpCmlmKHMhPT0zMiYmcyE9PTEzJiYhSi5HYShzKSlicmVha31yZXR1cm4gYn0sClJFOmZ1bmN0
-aW9uKGEpe2lmKGE9PW51bGwpcmV0dXJuIGEKaWYodHlwZW9mIGEhPSJvYmplY3QiKXtpZih0eXBlb2Yg
-YT09ImZ1bmN0aW9uIilyZXR1cm4gSi5jNS5wcm90b3R5cGUKcmV0dXJuIGF9aWYoYSBpbnN0YW5jZW9m
-IFAuaylyZXR1cm4gYQpyZXR1cm4gSi5rcyhhKX0sClRKOmZ1bmN0aW9uKGEpe2lmKHR5cGVvZiBhPT0i
-bnVtYmVyIilyZXR1cm4gSi5xSS5wcm90b3R5cGUKaWYodHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBK
-LkRyLnByb3RvdHlwZQppZihhPT1udWxsKXJldHVybiBhCmlmKGEuY29uc3RydWN0b3I9PUFycmF5KXJl
-dHVybiBKLmpkLnByb3RvdHlwZQppZih0eXBlb2YgYSE9Im9iamVjdCIpe2lmKHR5cGVvZiBhPT0iZnVu
-Y3Rpb24iKXJldHVybiBKLmM1LnByb3RvdHlwZQpyZXR1cm4gYX1pZihhIGluc3RhbmNlb2YgUC5rKXJl
-dHVybiBhCnJldHVybiBKLmtzKGEpfSwKVTY6ZnVuY3Rpb24oYSl7aWYodHlwZW9mIGE9PSJzdHJpbmci
-KXJldHVybiBKLkRyLnByb3RvdHlwZQppZihhPT1udWxsKXJldHVybiBhCmlmKGEuY29uc3RydWN0b3I9
-PUFycmF5KXJldHVybiBKLmpkLnByb3RvdHlwZQppZih0eXBlb2YgYSE9Im9iamVjdCIpe2lmKHR5cGVv
-ZiBhPT0iZnVuY3Rpb24iKXJldHVybiBKLmM1LnByb3RvdHlwZQpyZXR1cm4gYX1pZihhIGluc3RhbmNl
-b2YgUC5rKXJldHVybiBhCnJldHVybiBKLmtzKGEpfSwKaWE6ZnVuY3Rpb24oYSl7aWYodHlwZW9mIGE9
-PSJudW1iZXIiKXtpZihNYXRoLmZsb29yKGEpPT1hKXJldHVybiBKLnVyLnByb3RvdHlwZQpyZXR1cm4g
-Si5WQS5wcm90b3R5cGV9aWYodHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBKLkRyLnByb3RvdHlwZQpp
-ZihhPT1udWxsKXJldHVybiBKLllFLnByb3RvdHlwZQppZih0eXBlb2YgYT09ImJvb2xlYW4iKXJldHVy
-biBKLnlFLnByb3RvdHlwZQppZihhLmNvbnN0cnVjdG9yPT1BcnJheSlyZXR1cm4gSi5qZC5wcm90b3R5
-cGUKaWYodHlwZW9mIGEhPSJvYmplY3QiKXtpZih0eXBlb2YgYT09ImZ1bmN0aW9uIilyZXR1cm4gSi5j
-NS5wcm90b3R5cGUKcmV0dXJuIGF9aWYoYSBpbnN0YW5jZW9mIFAuaylyZXR1cm4gYQpyZXR1cm4gSi5r
-cyhhKX0sCnJZOmZ1bmN0aW9uKGEpe2lmKHR5cGVvZiBhPT0ic3RyaW5nIilyZXR1cm4gSi5Eci5wcm90
-b3R5cGUKaWYoYT09bnVsbClyZXR1cm4gYQppZighKGEgaW5zdGFuY2VvZiBQLmspKXJldHVybiBKLmtk
-LnByb3RvdHlwZQpyZXR1cm4gYX0sCncxOmZ1bmN0aW9uKGEpe2lmKGE9PW51bGwpcmV0dXJuIGEKaWYo
-YS5jb25zdHJ1Y3Rvcj09QXJyYXkpcmV0dXJuIEouamQucHJvdG90eXBlCmlmKHR5cGVvZiBhIT0ib2Jq
-ZWN0Iil7aWYodHlwZW9mIGE9PSJmdW5jdGlvbiIpcmV0dXJuIEouYzUucHJvdG90eXBlCnJldHVybiBh
-fWlmKGEgaW5zdGFuY2VvZiBQLmspcmV0dXJuIGEKcmV0dXJuIEoua3MoYSl9LApBTTpmdW5jdGlvbihh
-LGIpe3JldHVybiBKLncxKGEpLkUoYSxiKX0sCkNNOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBKLlJF
-KGEpLmR1KGEsYixjLGQpfSwKRkw6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gSi5yWShhKS5kZChhLGIpfSwK
-R3I6ZnVuY3Rpb24oYSl7cmV0dXJuIEouUkUoYSkuZ21XKGEpfSwKSG06ZnVuY3Rpb24oYSl7cmV0dXJu
-IEouVTYoYSkuZ0EoYSl9LApJVDpmdW5jdGlvbihhKXtyZXR1cm4gSi53MShhKS5na3ooYSl9LApKeTpm
-dW5jdGlvbihhLGIpe3JldHVybiBKLmlhKGEpLmU3KGEsYil9LApLVjpmdW5jdGlvbihhLGIpe3JldHVy
-biBKLnJZKGEpLkcoYSxiKX0sCkx0OmZ1bmN0aW9uKGEpe3JldHVybiBKLlJFKGEpLndnKGEpfSwKTTE6
-ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBKLncxKGEpLkUyKGEsYixjKX0sClF6OmZ1bmN0aW9uKGEsYil7
-cmV0dXJuIEouclkoYSkuVyhhLGIpfSwKUk06ZnVuY3Rpb24oYSxiKXtpZihhPT1udWxsKXJldHVybiBi
-PT1udWxsCmlmKHR5cGVvZiBhIT0ib2JqZWN0IilyZXR1cm4gYiE9bnVsbCYmYT09PWIKcmV0dXJuIEou
-aWEoYSkuRE4oYSxiKX0sClQwOmZ1bmN0aW9uKGEpe3JldHVybiBKLnJZKGEpLmJTKGEpfSwKYTY6ZnVu
-Y3Rpb24oYSxiKXtyZXR1cm4gSi5yWShhKS5tKGEsYil9LApiVDpmdW5jdGlvbihhKXtyZXR1cm4gSi5S
-RShhKS5ENChhKX0sCmJiOmZ1bmN0aW9uKGEsYil7aWYodHlwZW9mIGE9PSJudW1iZXIiJiZ0eXBlb2Yg
-Yj09Im51bWJlciIpcmV0dXJuIGErYgpyZXR1cm4gSi5USihhKS5oKGEsYil9LApjSDpmdW5jdGlvbihh
-KXtyZXR1cm4gSi5yWShhKS5oYyhhKX0sCmRSOmZ1bmN0aW9uKGEpe3JldHVybiBKLlJFKGEpLmdEKGEp
-fSwKZFo6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIEouUkUoYSkuT24oYSxiLGMsZCl9LApkaDpmdW5j
-dGlvbihhKXtyZXR1cm4gSi5SRShhKS50bihhKX0sCmhmOmZ1bmN0aW9uKGEpe3JldHVybiBKLmlhKGEp
-LmdpTyhhKX0sCmlnOmZ1bmN0aW9uKGEpe3JldHVybiBKLlJFKGEpLmdRZyhhKX0sCmo6ZnVuY3Rpb24o
-YSl7cmV0dXJuIEouaWEoYSkudyhhKX0sCmw1OmZ1bmN0aW9uKGEsYil7cmV0dXJuIEouUkUoYSkuc2hm
-KGEsYil9LApsZDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIEouclkoYSkuTmooYSxiLGMpfSwKcTA6ZnVu
-Y3Rpb24oYSxiLGMpe3JldHVybiBKLnJZKGEpLlFpKGEsYixjKX0sCnFGOmZ1bmN0aW9uKGEpe3JldHVy
-biBKLlJFKGEpLmdWbChhKX0sCnRIOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gSi5SRShhKS5wayhhLGIs
-Yyl9LAp3MjpmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBiPT09Im51bWJlciIpaWYoYS5jb25zdHJ1Y3Rv
-cj09QXJyYXl8fHR5cGVvZiBhPT0ic3RyaW5nInx8SC53VihhLGFbdi5kaXNwYXRjaFByb3BlcnR5TmFt
-ZV0pKWlmKGI+Pj4wPT09YiYmYjxhLmxlbmd0aClyZXR1cm4gYVtiXQpyZXR1cm4gSi5VNihhKS5xKGEs
-Yil9LAp5UTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gSi5yWShhKS5pNyhhLGIsYyxkKX0sCnpsOmZ1
-bmN0aW9uKGEsYil7cmV0dXJuIEouVTYoYSkudGcoYSxiKX0sCnZCOmZ1bmN0aW9uIHZCKCl7fSwKeUU6
-ZnVuY3Rpb24geUUoKXt9LApZRTpmdW5jdGlvbiBZRSgpe30sCk1GOmZ1bmN0aW9uIE1GKCl7fSwKaUM6
-ZnVuY3Rpb24gaUMoKXt9LAprZDpmdW5jdGlvbiBrZCgpe30sCmM1OmZ1bmN0aW9uIGM1KCl7fSwKamQ6
-ZnVuY3Rpb24gamQoYSl7dGhpcy4kdGk9YX0sClBvOmZ1bmN0aW9uIFBvKGEpe3RoaXMuJHRpPWF9LApt
-MTpmdW5jdGlvbiBtMShhLGIsYyl7dmFyIF89dGhpcwpfLmE9YQpfLmI9YgpfLmM9MApfLmQ9bnVsbApf
-LiR0aT1jfSwKcUk6ZnVuY3Rpb24gcUkoKXt9LAp1cjpmdW5jdGlvbiB1cigpe30sClZBOmZ1bmN0aW9u
-IFZBKCl7fSwKRHI6ZnVuY3Rpb24gRHIoKXt9fSxQPXsKT2o6ZnVuY3Rpb24oKXt2YXIgdCxzLHI9e30K
-aWYoc2VsZi5zY2hlZHVsZUltbWVkaWF0ZSE9bnVsbClyZXR1cm4gUC5FWCgpCmlmKHNlbGYuTXV0YXRp
-b25PYnNlcnZlciE9bnVsbCYmc2VsZi5kb2N1bWVudCE9bnVsbCl7dD1zZWxmLmRvY3VtZW50LmNyZWF0
-ZUVsZW1lbnQoImRpdiIpCnM9c2VsZi5kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIikKci5hPW51
-bGwKbmV3IHNlbGYuTXV0YXRpb25PYnNlcnZlcihILnRSKG5ldyBQLnRoKHIpLDEpKS5vYnNlcnZlKHQs
-e2NoaWxkTGlzdDp0cnVlfSkKcmV0dXJuIG5ldyBQLmhhKHIsdCxzKX1lbHNlIGlmKHNlbGYuc2V0SW1t
-ZWRpYXRlIT1udWxsKXJldHVybiBQLnl0KCkKcmV0dXJuIFAucVcoKX0sClpWOmZ1bmN0aW9uKGEpe3Nl
-bGYuc2NoZWR1bGVJbW1lZGlhdGUoSC50UihuZXcgUC5Wcyh1Lk0uYihhKSksMCkpfSwKb0E6ZnVuY3Rp
-b24oYSl7c2VsZi5zZXRJbW1lZGlhdGUoSC50UihuZXcgUC5GdCh1Lk0uYihhKSksMCkpfSwKQno6ZnVu
-Y3Rpb24oYSl7dS5NLmIoYSkKUC5RTigwLGEpfSwKUU46ZnVuY3Rpb24oYSxiKXt2YXIgdD1uZXcgUC5X
-MygpCnQuQ1koYSxiKQpyZXR1cm4gdH0sCkZYOmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgUC5paChuZXcg
-UC52cygkLlgzLGEuQygidnM8MD4iKSksYS5DKCJpaDwwPiIpKX0sCkRJOmZ1bmN0aW9uKGEsYil7YS4k
-MigwLG51bGwpCmIuYj0hMApyZXR1cm4gYi5hfSwKalE6ZnVuY3Rpb24oYSxiKXtQLkplKGEsYil9LAp5
-QzpmdW5jdGlvbihhLGIpe2IuYU0oMCxhKX0sCmYzOmZ1bmN0aW9uKGEsYil7Yi53MChILlJ1KGEpLEgu
-dHMoYSkpfSwKSmU6ZnVuY3Rpb24oYSxiKXt2YXIgdCxzLHI9bmV3IFAuV00oYikscT1uZXcgUC5TWChi
-KQppZihhIGluc3RhbmNlb2YgUC52cylhLlFkKHIscSx1LnopCmVsc2V7dD11LnoKaWYodS5jLmMoYSkp
-YS5TcShyLHEsdCkKZWxzZXtzPW5ldyBQLnZzKCQuWDMsdS5fKQpzLmE9NApzLmM9YQpzLlFkKHIsbnVs
-bCx0KX19fSwKbHo6ZnVuY3Rpb24oYSl7dmFyIHQ9ZnVuY3Rpb24oYixjKXtyZXR1cm4gZnVuY3Rpb24o
-ZCxlKXt3aGlsZSh0cnVlKXRyeXtiKGQsZSkKYnJlYWt9Y2F0Y2gocyl7ZT1zCmQ9Y319fShhLDEpCnJl
-dHVybiAkLlgzLkxqKG5ldyBQLkdzKHQpLHUuUCx1LmVnLHUueil9LAprMzpmdW5jdGlvbihhLGIpe3Zh
-ciB0LHMscgpiLmE9MQp0cnl7YS5TcShuZXcgUC5wVihiKSxuZXcgUC5VNyhiKSx1LlApfWNhdGNoKHIp
-e3Q9SC5SdShyKQpzPUgudHMocikKUC5yYihuZXcgUC52cihiLHQscykpfX0sCkE5OmZ1bmN0aW9uKGEs
-Yil7dmFyIHQscyxyCmZvcih0PXUuXztzPWEuYSxzPT09MjspYT10LmIoYS5jKQppZihzPj00KXtyPWIu
-YWgoKQpiLmE9YS5hCmIuYz1hLmMKUC5IWihiLHIpfWVsc2V7cj11LnguYihiLmMpCmIuYT0yCmIuYz1h
-CmEualEocil9fSwKSFo6ZnVuY3Rpb24oYSxiKXt2YXIgdCxzLHIscSxwLG8sbixtLGwsayxqLGksaCxn
-LGYsZT1udWxsLGQ9e30sYz1kLmE9YQpmb3IodD11Lm4scz11Lngscj11LmM7ITA7KXtxPXt9CnA9Yy5h
-PT09OAppZihiPT1udWxsKXtpZihwKXtvPXQuYihjLmMpClAuTDIoZSxlLGMuYixvLmEsby5iKX1yZXR1
-cm59Zm9yKDtuPWIuYSxuIT1udWxsO2I9bil7Yi5hPW51bGwKUC5IWihkLmEsYil9Yz1kLmEKbT1jLmMK
-cS5hPXAKcS5iPW0KbD0hcAppZihsKXtrPWIuYwprPShrJjEpIT09MHx8KGsmMTUpPT09OH1lbHNlIGs9
-ITAKaWYoayl7az1iLmIKaj1rLmIKaWYocCl7aT1jLmI9PT1qCmk9IShpfHxpKX1lbHNlIGk9ITEKaWYo
-aSl7dC5iKG0pClAuTDIoZSxlLGMuYixtLmEsbS5iKQpyZXR1cm59aD0kLlgzCmlmKGghPT1qKSQuWDM9
-agplbHNlIGg9ZQpjPWIuYwppZigoYyYxNSk9PT04KW5ldyBQLlJUKGQscSxiLHApLiQwKCkKZWxzZSBp
-ZihsKXtpZigoYyYxKSE9PTApbmV3IFAucnEocSxiLG0pLiQwKCl9ZWxzZSBpZigoYyYyKSE9PTApbmV3
-IFAuUlcoZCxxLGIpLiQwKCkKaWYoaCE9bnVsbCkkLlgzPWgKYz1xLmIKaWYoci5jKGMpKXtpZihjLmE+
-PTQpe2c9cy5iKGsuYykKay5jPW51bGwKYj1rLk44KGcpCmsuYT1jLmEKay5jPWMuYwpkLmE9Ywpjb250
-aW51ZX1lbHNlIFAuQTkoYyxrKQpyZXR1cm59fWY9Yi5iCmc9cy5iKGYuYykKZi5jPW51bGwKYj1mLk44
-KGcpCmM9cS5hCmw9cS5iCmlmKCFjKXtmLiR0aS5kLmIobCkKZi5hPTQKZi5jPWx9ZWxzZXt0LmIobCkK
-Zi5hPTgKZi5jPWx9ZC5hPWYKYz1mfX0sClZIOmZ1bmN0aW9uKGEsYil7dmFyIHQKaWYodS5XLmMoYSkp
-cmV0dXJuIGIuTGooYSx1LnosdS5LLHUubCkKdD11LnkKaWYodC5jKGEpKXJldHVybiB0LmIoYSkKdGhy
-b3cgSC5iKFAuTDMoYSwib25FcnJvciIsIkVycm9yIGhhbmRsZXIgbXVzdCBhY2NlcHQgb25lIE9iamVj
-dCBvciBvbmUgT2JqZWN0IGFuZCBhIFN0YWNrVHJhY2UgYXMgYXJndW1lbnRzLCBhbmQgcmV0dXJuIGEg
-YSB2YWxpZCByZXN1bHQiKSl9LApwdTpmdW5jdGlvbigpe3ZhciB0LHMKZm9yKDt0PSQuUzYsdCE9bnVs
-bDspeyQubWc9bnVsbApzPXQuYgokLlM2PXMKaWYocz09bnVsbCkkLms4PW51bGwKdC5hLiQwKCl9fSwK
-ZU46ZnVuY3Rpb24oKXskLlVEPSEwCnRyeXtQLnB1KCl9ZmluYWxseXskLm1nPW51bGwKJC5VRD0hMQpp
-ZigkLlM2IT1udWxsKSQudXQoKS4kMShQLlVJKCkpfX0sCmVXOmZ1bmN0aW9uKGEpe3ZhciB0PW5ldyBQ
-Lk9NKGEpCmlmKCQuUzY9PW51bGwpeyQuUzY9JC5rOD10CmlmKCEkLlVEKSQudXQoKS4kMShQLlVJKCkp
-fWVsc2UgJC5rOD0kLms4LmI9dH0sCnJSOmZ1bmN0aW9uKGEpe3ZhciB0LHMscj0kLlM2CmlmKHI9PW51
-bGwpe1AuZVcoYSkKJC5tZz0kLms4CnJldHVybn10PW5ldyBQLk9NKGEpCnM9JC5tZwppZihzPT1udWxs
-KXt0LmI9cgokLlM2PSQubWc9dH1lbHNle3QuYj1zLmIKJC5tZz1zLmI9dAppZih0LmI9PW51bGwpJC5r
-OD10fX0sCnJiOmZ1bmN0aW9uKGEpe3ZhciB0PW51bGwscz0kLlgzCmlmKEMuTlU9PT1zKXtQLlRrKHQs
-dCxDLk5VLGEpCnJldHVybn1QLlRrKHQsdCxzLHUuTS5iKHMuR1koYSkpKX0sClF3OmZ1bmN0aW9uKGEs
-Yil7aWYoYT09bnVsbClILnZoKFAuRWUoInN0cmVhbSIpKQpyZXR1cm4gbmV3IFAueEkoYi5DKCJ4STww
-PiIpKX0sCkwyOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIHQ9e30KdC5hPWQKUC5yUihuZXcgUC5wSyh0
-LGUpKX0sClQ4OmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIHQscz0kLlgzCmlmKHM9PT1jKXJldHVybiBk
-LiQwKCkKJC5YMz1jCnQ9cwp0cnl7cz1kLiQwKCkKcmV0dXJuIHN9ZmluYWxseXskLlgzPXR9fSwKeXY6
-ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyl7dmFyIHQscz0kLlgzCmlmKHM9PT1jKXJldHVybiBkLiQxKGUp
-CiQuWDM9Ywp0PXMKdHJ5e3M9ZC4kMShlKQpyZXR1cm4gc31maW5hbGx5eyQuWDM9dH19LApReDpmdW5j
-dGlvbihhLGIsYyxkLGUsZixnLGgsaSl7dmFyIHQscz0kLlgzCmlmKHM9PT1jKXJldHVybiBkLiQyKGUs
-ZikKJC5YMz1jCnQ9cwp0cnl7cz1kLiQyKGUsZikKcmV0dXJuIHN9ZmluYWxseXskLlgzPXR9fSwKVGs6
-ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIHQKdS5NLmIoZCkKdD1DLk5VIT09YwppZih0KWQ9ISghdHx8ITEp
-P2MuR1koZCk6Yy5SVChkLHUuSCkKUC5lVyhkKX0sCnRoOmZ1bmN0aW9uIHRoKGEpe3RoaXMuYT1hfSwK
-aGE6ZnVuY3Rpb24gaGEoYSxiLGMpe3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuYz1jfSwKVnM6ZnVuY3Rp
-b24gVnMoYSl7dGhpcy5hPWF9LApGdDpmdW5jdGlvbiBGdChhKXt0aGlzLmE9YX0sClczOmZ1bmN0aW9u
-IFczKCl7fSwKeUg6ZnVuY3Rpb24geUgoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCmloOmZ1bmN0aW9u
-IGloKGEsYil7dGhpcy5hPWEKdGhpcy5iPSExCnRoaXMuJHRpPWJ9LApXTTpmdW5jdGlvbiBXTShhKXt0
-aGlzLmE9YX0sClNYOmZ1bmN0aW9uIFNYKGEpe3RoaXMuYT1hfSwKR3M6ZnVuY3Rpb24gR3MoYSl7dGhp
-cy5hPWF9LApQZjpmdW5jdGlvbiBQZigpe30sClpmOmZ1bmN0aW9uIFpmKGEsYil7dGhpcy5hPWEKdGhp
-cy4kdGk9Yn0sCkZlOmZ1bmN0aW9uIEZlKGEsYixjLGQsZSl7dmFyIF89dGhpcwpfLmE9bnVsbApfLmI9
-YQpfLmM9YgpfLmQ9YwpfLmU9ZApfLiR0aT1lfSwKdnM6ZnVuY3Rpb24gdnMoYSxiKXt2YXIgXz10aGlz
-Cl8uYT0wCl8uYj1hCl8uYz1udWxsCl8uJHRpPWJ9LApkYTpmdW5jdGlvbiBkYShhLGIpe3RoaXMuYT1h
-CnRoaXMuYj1ifSwKb1E6ZnVuY3Rpb24gb1EoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCnBWOmZ1bmN0
-aW9uIHBWKGEpe3RoaXMuYT1hfSwKVTc6ZnVuY3Rpb24gVTcoYSl7dGhpcy5hPWF9LAp2cjpmdW5jdGlv
-biB2cihhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LApySDpmdW5jdGlvbiBySChhLGIp
-e3RoaXMuYT1hCnRoaXMuYj1ifSwKS0Y6ZnVuY3Rpb24gS0YoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0s
-ClpMOmZ1bmN0aW9uIFpMKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sClJUOmZ1bmN0
-aW9uIFJUKGEsYixjLGQpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5jPWMKXy5kPWR9LApqWjpmdW5j
-dGlvbiBqWihhKXt0aGlzLmE9YX0sCnJxOmZ1bmN0aW9uIHJxKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9
-Ygp0aGlzLmM9Y30sClJXOmZ1bmN0aW9uIFJXKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9
-Y30sCk9NOmZ1bmN0aW9uIE9NKGEpe3RoaXMuYT1hCnRoaXMuYj1udWxsfSwKcWg6ZnVuY3Rpb24gcWgo
-KXt9LApCNTpmdW5jdGlvbiBCNShhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKUEk6ZnVuY3Rpb24gUEko
-YSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCk1POmZ1bmN0aW9uIE1PKCl7fSwKa1Q6ZnVuY3Rpb24ga1Qo
-KXt9LAp4STpmdW5jdGlvbiB4SShhKXt0aGlzLiR0aT1hfSwKQ3c6ZnVuY3Rpb24gQ3coYSxiKXt0aGlz
-LmE9YQp0aGlzLmI9Yn0sCm0wOmZ1bmN0aW9uIG0wKCl7fSwKcEs6ZnVuY3Rpb24gcEsoYSxiKXt0aGlz
-LmE9YQp0aGlzLmI9Yn0sCkppOmZ1bmN0aW9uIEppKCl7fSwKaGo6ZnVuY3Rpb24gaGooYSxiLGMpe3Ro
-aXMuYT1hCnRoaXMuYj1iCnRoaXMuYz1jfSwKVnA6ZnVuY3Rpb24gVnAoYSxiKXt0aGlzLmE9YQp0aGlz
-LmI9Yn0sCk9SOmZ1bmN0aW9uIE9SKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCkVG
-OmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYi5DKCJAPDA+IikuS3EoYykuQygiRm88MSwyPiIpLmIoSC5C
-NyhhLG5ldyBILk41KGIuQygiQDwwPiIpLktxKGMpLkMoIk41PDEsMj4iKSkpKX0sCkZsOmZ1bmN0aW9u
-KGEsYil7cmV0dXJuIG5ldyBILk41KGEuQygiQDwwPiIpLktxKGIpLkMoIk41PDEsMj4iKSl9LApMczpm
-dW5jdGlvbihhKXtyZXR1cm4gbmV3IFAuYjYoYS5DKCJiNjwwPiIpKX0sClQyOmZ1bmN0aW9uKCl7dmFy
-IHQ9T2JqZWN0LmNyZWF0ZShudWxsKQp0WyI8bm9uLWlkZW50aWZpZXIta2V5PiJdPXQKZGVsZXRlIHRb
-Ijxub24taWRlbnRpZmllci1rZXk+Il0KcmV0dXJuIHR9LApyajpmdW5jdGlvbihhLGIsYyl7dmFyIHQ9
-bmV3IFAubG0oYSxiLGMuQygibG08MD4iKSkKdC5jPWEuZQpyZXR1cm4gdH0sCkVQOmZ1bmN0aW9uKGEs
-YixjKXt2YXIgdCxzCmlmKFAuaEIoYSkpe2lmKGI9PT0iKCImJmM9PT0iKSIpcmV0dXJuIiguLi4pIgpy
-ZXR1cm4gYisiLi4uIitjfXQ9SC5WTShbXSx1LnMpCkMuTm0uaSgkLnhnLGEpCnRyeXtQLlZyKGEsdCl9
-ZmluYWxseXtpZigwPj0kLnhnLmxlbmd0aClyZXR1cm4gSC5PSCgkLnhnLC0xKQokLnhnLnBvcCgpfXM9
-UC52ZyhiLHUuUi5iKHQpLCIsICIpK2MKcmV0dXJuIHMuY2hhckNvZGVBdCgwKT09MD9zOnN9LApXRTpm
-dW5jdGlvbihhLGIsYyl7dmFyIHQscwppZihQLmhCKGEpKXJldHVybiBiKyIuLi4iK2MKdD1uZXcgUC5S
-bihiKQpDLk5tLmkoJC54ZyxhKQp0cnl7cz10CnMuYT1QLnZnKHMuYSxhLCIsICIpfWZpbmFsbHl7aWYo
-MD49JC54Zy5sZW5ndGgpcmV0dXJuIEguT0goJC54ZywtMSkKJC54Zy5wb3AoKX10LmErPWMKcz10LmEK
-cmV0dXJuIHMuY2hhckNvZGVBdCgwKT09MD9zOnN9LApoQjpmdW5jdGlvbihhKXt2YXIgdCxzCmZvcih0
-PSQueGcubGVuZ3RoLHM9MDtzPHQ7KytzKWlmKGE9PT0kLnhnW3NdKXJldHVybiEwCnJldHVybiExfSwK
-VnI6ZnVuY3Rpb24oYSxiKXt2YXIgdCxzLHIscSxwLG8sbixtPWEuZ2t6KGEpLGw9MCxrPTAKd2hpbGUo
-ITApe2lmKCEobDw4MHx8azwzKSlicmVhawppZighbS5GKCkpcmV0dXJuCnQ9SC5kKG0uZ2woKSkKQy5O
-bS5pKGIsdCkKbCs9dC5sZW5ndGgrMjsrK2t9aWYoIW0uRigpKXtpZihrPD01KXJldHVybgppZigwPj1i
-Lmxlbmd0aClyZXR1cm4gSC5PSChiLC0xKQpzPWIucG9wKCkKaWYoMD49Yi5sZW5ndGgpcmV0dXJuIEgu
-T0goYiwtMSkKcj1iLnBvcCgpfWVsc2V7cT1tLmdsKCk7KytrCmlmKCFtLkYoKSl7aWYoazw9NCl7Qy5O
-bS5pKGIsSC5kKHEpKQpyZXR1cm59cz1ILmQocSkKaWYoMD49Yi5sZW5ndGgpcmV0dXJuIEguT0goYiwt
-MSkKcj1iLnBvcCgpCmwrPXMubGVuZ3RoKzJ9ZWxzZXtwPW0uZ2woKTsrK2sKZm9yKDttLkYoKTtxPXAs
-cD1vKXtvPW0uZ2woKTsrK2sKaWYoaz4xMDApe3doaWxlKCEwKXtpZighKGw+NzUmJms+MykpYnJlYWsK
-aWYoMD49Yi5sZW5ndGgpcmV0dXJuIEguT0goYiwtMSkKbC09Yi5wb3AoKS5sZW5ndGgrMjstLWt9Qy5O
-bS5pKGIsIi4uLiIpCnJldHVybn19cj1ILmQocSkKcz1ILmQocCkKbCs9cy5sZW5ndGgrci5sZW5ndGgr
-NH19aWYoaz5iLmxlbmd0aCsyKXtsKz01Cm49Ii4uLiJ9ZWxzZSBuPW51bGwKd2hpbGUoITApe2lmKCEo
-bD44MCYmYi5sZW5ndGg+MykpYnJlYWsKaWYoMD49Yi5sZW5ndGgpcmV0dXJuIEguT0goYiwtMSkKbC09
-Yi5wb3AoKS5sZW5ndGgrMgppZihuPT1udWxsKXtsKz01Cm49Ii4uLiJ9fWlmKG4hPW51bGwpQy5ObS5p
-KGIsbikKQy5ObS5pKGIscikKQy5ObS5pKGIscyl9LAp0TTpmdW5jdGlvbihhLGIpe3ZhciB0LHMscj1Q
-LkxzKGIpCmZvcih0PWEubGVuZ3RoLHM9MDtzPGEubGVuZ3RoO2EubGVuZ3RoPT09dHx8KDAsSC5sayko
-YSksKytzKXIuaSgwLGIuYihhW3NdKSkKcmV0dXJuIHJ9LApuTzpmdW5jdGlvbihhKXt2YXIgdCxzPXt9
-CmlmKFAuaEIoYSkpcmV0dXJuInsuLi59Igp0PW5ldyBQLlJuKCIiKQp0cnl7Qy5ObS5pKCQueGcsYSkK
-dC5hKz0ieyIKcy5hPSEwCmEuSygwLG5ldyBQLkdBKHMsdCkpCnQuYSs9In0ifWZpbmFsbHl7aWYoMD49
-JC54Zy5sZW5ndGgpcmV0dXJuIEguT0goJC54ZywtMSkKJC54Zy5wb3AoKX1zPXQuYQpyZXR1cm4gcy5j
-aGFyQ29kZUF0KDApPT0wP3M6c30sCmI2OmZ1bmN0aW9uIGI2KGEpe3ZhciBfPXRoaXMKXy5hPTAKXy5m
-PV8uZT1fLmQ9Xy5jPV8uYj1udWxsCl8ucj0wCl8uJHRpPWF9LApibjpmdW5jdGlvbiBibihhKXt0aGlz
-LmE9YQp0aGlzLmM9dGhpcy5iPW51bGx9LApsbTpmdW5jdGlvbiBsbShhLGIsYyl7dmFyIF89dGhpcwpf
-LmE9YQpfLmI9YgpfLmQ9Xy5jPW51bGwKXy4kdGk9Y30sCm1XOmZ1bmN0aW9uIG1XKCl7fSwKTFU6ZnVu
-Y3Rpb24gTFUoKXt9LApsRDpmdW5jdGlvbiBsRCgpe30sCmlsOmZ1bmN0aW9uIGlsKCl7fSwKR0E6ZnVu
-Y3Rpb24gR0EoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCllrOmZ1bmN0aW9uIFlrKCl7fSwKS1A6ZnVu
-Y3Rpb24gS1AoKXt9LApQbjpmdW5jdGlvbiBQbigpe30sCkdqOmZ1bmN0aW9uIEdqKGEsYil7dGhpcy5h
-PWEKdGhpcy4kdGk9Yn0sCmxmOmZ1bmN0aW9uIGxmKCl7fSwKVmo6ZnVuY3Rpb24gVmooKXt9LApYdjpm
-dW5jdGlvbiBYdigpe30sCm5ZOmZ1bmN0aW9uIG5ZKCl7fSwKV1k6ZnVuY3Rpb24gV1koKXt9LApSVTpm
-dW5jdGlvbiBSVSgpe30sCkJTOmZ1bmN0aW9uKGEsYil7dmFyIHQscyxyLHEKaWYodHlwZW9mIGEhPSJz
-dHJpbmciKXRocm93IEguYihILnRMKGEpKQp0PW51bGwKdHJ5e3Q9SlNPTi5wYXJzZShhKX1jYXRjaChy
-KXtzPUguUnUocikKcT1QLnJyKFN0cmluZyhzKSxudWxsLG51bGwpCnRocm93IEguYihxKX1xPVAuUWUo
-dCkKcmV0dXJuIHF9LApRZTpmdW5jdGlvbihhKXt2YXIgdAppZihhPT1udWxsKXJldHVybgppZih0eXBl
-b2YgYSE9Im9iamVjdCIpcmV0dXJuIGEKaWYoT2JqZWN0LmdldFByb3RvdHlwZU9mKGEpIT09QXJyYXku
-cHJvdG90eXBlKXJldHVybiBuZXcgUC51dyhhLE9iamVjdC5jcmVhdGUobnVsbCkpCmZvcih0PTA7dDxh
-Lmxlbmd0aDsrK3QpYVt0XT1QLlFlKGFbdF0pCnJldHVybiBhfSwKa3k6ZnVuY3Rpb24oYSxiLGMsZCl7
-aWYoYiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpcmV0dXJuIFAuUlAoITEsYixjLGQpCnJldHVybn0sClJQ
-OmZ1bmN0aW9uKGEsYixjLGQpe3ZhciB0LHMscj0kLnJmKCkKaWYocj09bnVsbClyZXR1cm4KdD0wPT09
-YwppZih0JiYhMClyZXR1cm4gUC5PUShyLGIpCnM9Yi5sZW5ndGgKZD1QLmpCKGMsZCxzKQppZih0JiZk
-PT09cylyZXR1cm4gUC5PUShyLGIpCnJldHVybiBQLk9RKHIsYi5zdWJhcnJheShjLGQpKX0sCk9ROmZ1
-bmN0aW9uKGEsYil7aWYoUC5CZShiKSlyZXR1cm4KcmV0dXJuIFAuSmgoYSxiKX0sCkpoOmZ1bmN0aW9u
-KGEsYil7dmFyIHQscwp0cnl7dD1hLmRlY29kZShiKQpyZXR1cm4gdH1jYXRjaChzKXtILlJ1KHMpfXJl
-dHVybn0sCkJlOmZ1bmN0aW9uKGEpe3ZhciB0LHM9YS5sZW5ndGgtMgpmb3IodD0wO3Q8czsrK3QpaWYo
-YVt0XT09PTIzNylpZigoYVt0KzFdJjIyNCk9PT0xNjApcmV0dXJuITAKcmV0dXJuITF9LApXSTpmdW5j
-dGlvbigpe3ZhciB0LHMKdHJ5e3Q9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIse2ZhdGFsOnRydWV9KQpy
-ZXR1cm4gdH1jYXRjaChzKXtILlJ1KHMpfXJldHVybn0sCndHOmZ1bmN0aW9uKGEsYixjKXt2YXIgdCxz
-LHIKZm9yKHQ9Si5VNihhKSxzPWI7czxjOysrcyl7cj10LnEoYSxzKQppZih0eXBlb2YgciE9PSJudW1i
-ZXIiKXJldHVybiByLnpNKCkKaWYoKHImMTI3KSE9PXIpcmV0dXJuIHMtYn1yZXR1cm4gYy1ifSwKeE06
-ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe2lmKEMuam4uelkoZiw0KSE9PTApdGhyb3cgSC5iKFAucnIoIklu
-dmFsaWQgYmFzZTY0IHBhZGRpbmcsIHBhZGRlZCBsZW5ndGggbXVzdCBiZSBtdWx0aXBsZSBvZiBmb3Vy
-LCBpcyAiK2YsYSxjKSkKaWYoZCtlIT09Zil0aHJvdyBILmIoUC5ycigiSW52YWxpZCBiYXNlNjQgcGFk
-ZGluZywgJz0nIG5vdCBhdCB0aGUgZW5kIixhLGIpKQppZihlPjIpdGhyb3cgSC5iKFAucnIoIkludmFs
-aWQgYmFzZTY0IHBhZGRpbmcsIG1vcmUgdGhhbiB0d28gJz0nIGNoYXJhY3RlcnMiLGEsYikpfSwKdXc6
-ZnVuY3Rpb24gdXcoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9bnVsbH0sCmk4OmZ1bmN0aW9u
-IGk4KGEpe3RoaXMuYT1hfSwKQ1Y6ZnVuY3Rpb24gQ1YoKXt9LApVODpmdW5jdGlvbiBVOCgpe30sClVr
-OmZ1bmN0aW9uIFVrKCl7fSwKd0k6ZnVuY3Rpb24gd0koKXt9LApaaTpmdW5jdGlvbiBaaSgpe30sCmJ5
-OmZ1bmN0aW9uIGJ5KCl7fSwKTXg6ZnVuY3Rpb24gTXgoYSl7dGhpcy5hPWF9LAp1NTpmdW5jdGlvbiB1
-NSgpe30sCkUzOmZ1bmN0aW9uIEUzKCl7fSwKUnc6ZnVuY3Rpb24gUncoYSl7dGhpcy5iPTAKdGhpcy5j
-PWF9LApHWTpmdW5jdGlvbiBHWShhKXt0aGlzLmE9YX0sCmJ6OmZ1bmN0aW9uIGJ6KGEsYil7dmFyIF89
-dGhpcwpfLmE9YQpfLmI9YgpfLmM9ITAKXy5mPV8uZT1fLmQ9MH0sClFBOmZ1bmN0aW9uKGEsYixjKXt2
-YXIgdD1ILkhwKGEsYykKaWYodCE9bnVsbClyZXR1cm4gdAppZihiIT1udWxsKXJldHVybiBiLiQxKGEp
-CnRocm93IEguYihQLnJyKGEsbnVsbCxudWxsKSl9LApGOmZ1bmN0aW9uKGEpe2lmKGEgaW5zdGFuY2Vv
-ZiBILlRwKXJldHVybiBhLncoMCkKcmV0dXJuIkluc3RhbmNlIG9mICciK0guZChILk0oYSkpKyInIn0s
-Ck84OmZ1bmN0aW9uKGEsYixjKXt2YXIgdCxzPUouUWkoYSxjKQppZihhIT09MCYmITApZm9yKHQ9MDt0
-PHMubGVuZ3RoOysrdClDLk5tLlkocyx0LGIpCnJldHVybiBzfSwKQ0g6ZnVuY3Rpb24oYSxiLGMpe3Zh
-ciB0LHM9SC5WTShbXSxjLkMoImpkPDA+IikpCmZvcih0PUouSVQoYSk7dC5GKCk7KUMuTm0uaShzLGMu
-Yih0LmdsKCkpKQppZihiKXJldHVybiBzCnJldHVybiBjLkMoInpNPDA+IikuYihKLkVwKHMpKX0sCkFG
-OmZ1bmN0aW9uKGEsYil7cmV0dXJuIGIuQygiek08MD4iKS5iKEouekMoUC5DSChhLCExLGIpKSl9LApI
-TTpmdW5jdGlvbihhLGIsYyl7dmFyIHQKaWYoQXJyYXkuaXNBcnJheShhKSl7dS50LmIoYSkKdD1hLmxl
-bmd0aApjPVAuakIoYixjLHQpCnJldHVybiBILmVUKGI+MHx8Yzx0P0MuTm0uRDYoYSxiLGMpOmEpfWlm
-KHUuYm0uYyhhKSlyZXR1cm4gSC5mdyhhLGIsUC5qQihiLGMsYS5sZW5ndGgpKQpyZXR1cm4gUC5idyhh
-LGIsYyl9LApPbzpmdW5jdGlvbihhKXtyZXR1cm4gSC5MdyhhKX0sCmJ3OmZ1bmN0aW9uKGEsYixjKXt2
-YXIgdCxzLHIscSxwPW51bGwKaWYoYjwwKXRocm93IEguYihQLlRFKGIsMCxKLkhtKGEpLHAscCkpCnQ9
-Yz09bnVsbAppZighdCYmYzxiKXRocm93IEguYihQLlRFKGMsYixKLkhtKGEpLHAscCkpCnM9Si5JVChh
-KQpmb3Iocj0wO3I8YjsrK3IpaWYoIXMuRigpKXRocm93IEguYihQLlRFKGIsMCxyLHAscCkpCnE9W10K
-aWYodClmb3IoO3MuRigpOylxLnB1c2gocy5nbCgpKQplbHNlIGZvcihyPWI7cjxjOysrcil7aWYoIXMu
-RigpKXRocm93IEguYihQLlRFKGMsYixyLHAscCkpCnEucHVzaChzLmdsKCkpfXJldHVybiBILmVUKHEp
-fSwKbnU6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBILlZSKGEsSC52NChhLCExLCEwLCExLCExLCExKSl9
-LAp2ZzpmdW5jdGlvbihhLGIsYyl7dmFyIHQ9Si5JVChiKQppZighdC5GKCkpcmV0dXJuIGEKaWYoYy5s
-ZW5ndGg9PT0wKXtkbyBhKz1ILmQodC5nbCgpKQp3aGlsZSh0LkYoKSl9ZWxzZXthKz1ILmQodC5nbCgp
-KQpmb3IoO3QuRigpOylhPWErYytILmQodC5nbCgpKX1yZXR1cm4gYX0sCmxyOmZ1bmN0aW9uKGEsYixj
-LGQpe3JldHVybiBuZXcgUC5tcChhLGIsYyxkKX0sCnVvOmZ1bmN0aW9uKCl7dmFyIHQ9SC5NMCgpCmlm
-KHQhPW51bGwpcmV0dXJuIFAuaEsodCkKdGhyb3cgSC5iKFAuTDQoIidVcmkuYmFzZScgaXMgbm90IHN1
-cHBvcnRlZCIpKX0sCmVQOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciB0LHMscixxLHAsbyxuPSIwMTIzNDU2
-Nzg5QUJDREVGIgppZihjPT09Qy54TSl7dD0kLno0KCkuYgppZih0eXBlb2YgYiE9InN0cmluZyIpSC52
-aChILnRMKGIpKQp0PXQudGVzdChiKX1lbHNlIHQ9ITEKaWYodClyZXR1cm4gYgpILkxoKGMpLkMoIlVr
-LlMiKS5iKGIpCnM9Yy5nWkUoKS5XSihiKQpmb3IodD1zLmxlbmd0aCxyPTAscT0iIjtyPHQ7KytyKXtw
-PXNbcl0KaWYocDwxMjgpe289cD4+PjQKaWYobz49OClyZXR1cm4gSC5PSChhLG8pCm89KGFbb10mMTw8
-KHAmMTUpKSE9PTB9ZWxzZSBvPSExCmlmKG8pcSs9SC5MdyhwKQplbHNlIHE9ZCYmcD09PTMyP3ErIisi
-OnErIiUiK25bcD4+PjQmMTVdK25bcCYxNV19cmV0dXJuIHEuY2hhckNvZGVBdCgwKT09MD9xOnF9LApH
-cTpmdW5jdGlvbihhKXt2YXIgdD1NYXRoLmFicyhhKSxzPWE8MD8iLSI6IiIKaWYodD49MTAwMClyZXR1
-cm4iIithCmlmKHQ+PTEwMClyZXR1cm4gcysiMCIrdAppZih0Pj0xMClyZXR1cm4gcysiMDAiK3QKcmV0
-dXJuIHMrIjAwMCIrdH0sClZ4OmZ1bmN0aW9uKGEpe2lmKGE+PTEwMClyZXR1cm4iIithCmlmKGE+PTEw
-KXJldHVybiIwIithCnJldHVybiIwMCIrYX0sCmgwOmZ1bmN0aW9uKGEpe2lmKGE+PTEwKXJldHVybiIi
-K2EKcmV0dXJuIjAiK2F9LApwOmZ1bmN0aW9uKGEpe2lmKHR5cGVvZiBhPT0ibnVtYmVyInx8SC5sKGEp
-fHxudWxsPT1hKXJldHVybiBKLmooYSkKaWYodHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBKU09OLnN0
-cmluZ2lmeShhKQpyZXR1cm4gUC5GKGEpfSwKaFY6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBQLkM2KGEp
-fSwKeFk6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBQLnUoITEsbnVsbCxudWxsLGEpfSwKTDM6ZnVuY3Rp
-b24oYSxiLGMpe3JldHVybiBuZXcgUC51KCEwLGEsYixjKX0sCkVlOmZ1bmN0aW9uKGEpe3JldHVybiBu
-ZXcgUC51KCExLG51bGwsYSwiTXVzdCBub3QgYmUgbnVsbCIpfSwKeDpmdW5jdGlvbihhLGIpe3JldHVy
-biBuZXcgUC5iSihudWxsLG51bGwsITAsYSxiLCJWYWx1ZSBub3QgaW4gcmFuZ2UiKX0sClRFOmZ1bmN0
-aW9uKGEsYixjLGQsZSl7cmV0dXJuIG5ldyBQLmJKKGIsYywhMCxhLGQsIkludmFsaWQgdmFsdWUiKX0s
-CndBOmZ1bmN0aW9uKGEsYixjLGQpe2lmKGE8Ynx8YT5jKXRocm93IEguYihQLlRFKGEsYixjLGQsbnVs
-bCkpfSwKakI6ZnVuY3Rpb24oYSxiLGMpe2lmKDA+YXx8YT5jKXRocm93IEguYihQLlRFKGEsMCxjLCJz
-dGFydCIsbnVsbCkpCmlmKGIhPW51bGwpe2lmKGE+Ynx8Yj5jKXRocm93IEguYihQLlRFKGIsYSxjLCJl
-bmQiLG51bGwpKQpyZXR1cm4gYn1yZXR1cm4gY30sCmsxOmZ1bmN0aW9uKGEsYil7aWYodHlwZW9mIGEh
-PT0ibnVtYmVyIilyZXR1cm4gYS5KKCkKaWYoYTwwKXRocm93IEguYihQLlRFKGEsMCxudWxsLGIsbnVs
-bCkpfSwKQ2Y6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgdD1ILlNjKGU9PW51bGw/Si5IbShiKTplKQpy
-ZXR1cm4gbmV3IFAuZVkodCwhMCxhLGMsIkluZGV4IG91dCBvZiByYW5nZSIpfSwKTDQ6ZnVuY3Rpb24o
-YSl7cmV0dXJuIG5ldyBQLnViKGEpfSwKU1k6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBQLmRzKGEpfSwK
-UFY6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBQLmxqKGEpfSwKYTQ6ZnVuY3Rpb24oYSl7cmV0dXJuIG5l
-dyBQLlVWKGEpfSwKcnI6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBuZXcgUC5hRShhLGIsYyl9LApkSDpm
-dW5jdGlvbihhLGIsYyxkKXt2YXIgdCxzPUguVk0oW10sZC5DKCJqZDwwPiIpKQpDLk5tLnNBKHMsYSkK
-Zm9yKHQ9MDt0PGE7Kyt0KUMuTm0uWShzLHQsYi4kMSh0KSkKcmV0dXJuIHN9LApoSzpmdW5jdGlvbihh
-KXt2YXIgdCxzLHIscSxwLG8sbixtLGwsayxqLGksaCxnLGYsZT1udWxsLGQ9YS5sZW5ndGgKaWYoZD49
-NSl7dD0oKEouUXooYSw0KV41OCkqM3xDLnhCLlcoYSwwKV4xMDB8Qy54Qi5XKGEsMSleOTd8Qy54Qi5X
-KGEsMileMTE2fEMueEIuVyhhLDMpXjk3KT4+PjAKaWYodD09PTApcmV0dXJuIFAuS0QoZDxkP0MueEIu
-TmooYSwwLGQpOmEsNSxlKS5nbFIoKQplbHNlIGlmKHQ9PT0zMilyZXR1cm4gUC5LRChDLnhCLk5qKGEs
-NSxkKSwwLGUpLmdsUigpfXM9bmV3IEFycmF5KDgpCnMuZml4ZWQkbGVuZ3RoPUFycmF5CnI9SC5WTShz
-LHUudCkKQy5ObS5ZKHIsMCwwKQpDLk5tLlkociwxLC0xKQpDLk5tLlkociwyLC0xKQpDLk5tLlkociw3
-LC0xKQpDLk5tLlkociwzLDApCkMuTm0uWShyLDQsMCkKQy5ObS5ZKHIsNSxkKQpDLk5tLlkociw2LGQp
-CmlmKFAuVUIoYSwwLGQsMCxyKT49MTQpQy5ObS5ZKHIsNyxkKQpxPXJbMV0KaWYodHlwZW9mIHEhPT0i
-bnVtYmVyIilyZXR1cm4gcS50QigpCmlmKHE+PTApaWYoUC5VQihhLDAscSwyMCxyKT09PTIwKXJbN109
-cQpzPXJbMl0KaWYodHlwZW9mIHMhPT0ibnVtYmVyIilyZXR1cm4gcy5oKCkKcD1zKzEKbz1yWzNdCm49
-cls0XQptPXJbNV0KbD1yWzZdCmlmKHR5cGVvZiBsIT09Im51bWJlciIpcmV0dXJuIGwuSigpCmlmKHR5
-cGVvZiBtIT09Im51bWJlciIpcmV0dXJuIEgucFkobSkKaWYobDxtKW09bAppZih0eXBlb2YgbiE9PSJu
-dW1iZXIiKXJldHVybiBuLkooKQppZihuPHApbj1tCmVsc2UgaWYobjw9cSluPXErMQppZih0eXBlb2Yg
-byE9PSJudW1iZXIiKXJldHVybiBvLkooKQppZihvPHApbz1uCnM9cls3XQppZih0eXBlb2YgcyE9PSJu
-dW1iZXIiKXJldHVybiBzLkooKQprPXM8MAppZihrKWlmKHA+cSszKXtqPWUKaz0hMX1lbHNle3M9bz4w
-CmlmKHMmJm8rMT09PW4pe2o9ZQprPSExfWVsc2V7aWYoIShtPGQmJm09PT1uKzImJkoucTAoYSwiLi4i
-LG4pKSlpPW0+bisyJiZKLnEwKGEsIi8uLiIsbS0zKQplbHNlIGk9ITAKaWYoaSl7aj1lCms9ITF9ZWxz
-ZXtpZihxPT09NClpZihKLnEwKGEsImZpbGUiLDApKXtpZihwPD0wKXtpZighQy54Qi5RaShhLCIvIixu
-KSl7aD0iZmlsZTovLy8iCnQ9M31lbHNle2g9ImZpbGU6Ly8iCnQ9Mn1hPWgrQy54Qi5OaihhLG4sZCkK
-cS09MApzPXQtMAptKz1zCmwrPXMKZD1hLmxlbmd0aApwPTcKbz03Cm49N31lbHNlIGlmKG49PT1tKXtn
-PW0rMTsrK2wKYT1DLnhCLmk3KGEsbixtLCIvIik7KytkCm09Z31qPSJmaWxlIn1lbHNlIGlmKEMueEIu
-UWkoYSwiaHR0cCIsMCkpe2lmKHMmJm8rMz09PW4mJkMueEIuUWkoYSwiODAiLG8rMSkpe2Y9bi0zCm0t
-PTMKbC09MwphPUMueEIuaTcoYSxvLG4sIiIpCmQtPTMKbj1mfWo9Imh0dHAifWVsc2Ugaj1lCmVsc2Ug
-aWYocT09PTUmJkoucTAoYSwiaHR0cHMiLDApKXtpZihzJiZvKzQ9PT1uJiZKLnEwKGEsIjQ0MyIsbysx
-KSl7Zj1uLTQKbS09NApsLT00CmE9Si55UShhLG8sbiwiIikKZC09MwpuPWZ9aj0iaHR0cHMifWVsc2Ug
-aj1lCms9ITB9fX1lbHNlIGo9ZQppZihrKXtzPWEubGVuZ3RoCmlmKGQ8cyl7YT1KLmxkKGEsMCxkKQpx
-LT0wCnAtPTAKby09MApuLT0wCm0tPTAKbC09MH1yZXR1cm4gbmV3IFAuVWYoYSxxLHAsbyxuLG0sbCxq
-KX1yZXR1cm4gUC5qdihhLDAsZCxxLHAsbyxuLG0sbCxqKX0sCk10OmZ1bmN0aW9uKGEpe0gueShhKQpy
-ZXR1cm4gUC5rdShhLDAsYS5sZW5ndGgsQy54TSwhMSl9LApXWDpmdW5jdGlvbihhKXt2YXIgdD11Lk4K
-cmV0dXJuIEMuTm0uTjAoSC5WTShhLnNwbGl0KCImIiksdS5zKSxQLkZsKHQsdCksbmV3IFAubjEoQy54
-TSksdS5mKX0sCkhoOmZ1bmN0aW9uKGEsYixjKXt2YXIgdCxzLHIscSxwLG8sbixtPW51bGwsbD0iSVB2
-NCBhZGRyZXNzIHNob3VsZCBjb250YWluIGV4YWN0bHkgNCBwYXJ0cyIsaz0iZWFjaCBwYXJ0IG11c3Qg
-YmUgaW4gdGhlIHJhbmdlIDAuLjI1NSIsaj1uZXcgUC5jUyhhKSxpPW5ldyBVaW50OEFycmF5KDQpCmZv
-cih0PWkubGVuZ3RoLHM9YixyPXMscT0wO3M8YzsrK3Mpe3A9Qy54Qi5tKGEscykKaWYocCE9PTQ2KXtp
-ZigocF40OCk+OSlqLiQyKCJpbnZhbGlkIGNoYXJhY3RlciIscyl9ZWxzZXtpZihxPT09MylqLiQyKGws
-cykKbz1QLlFBKEMueEIuTmooYSxyLHMpLG0sbSkKaWYodHlwZW9mIG8hPT0ibnVtYmVyIilyZXR1cm4g
-by5vcygpCmlmKG8+MjU1KWouJDIoayxyKQpuPXErMQppZihxPj10KXJldHVybiBILk9IKGkscSkKaVtx
-XT1vCnI9cysxCnE9bn19aWYocSE9PTMpai4kMihsLGMpCm89UC5RQShDLnhCLk5qKGEscixjKSxtLG0p
-CmlmKHR5cGVvZiBvIT09Im51bWJlciIpcmV0dXJuIG8ub3MoKQppZihvPjI1NSlqLiQyKGsscikKaWYo
-cT49dClyZXR1cm4gSC5PSChpLHEpCmlbcV09bwpyZXR1cm4gaX0sCmVnOmZ1bmN0aW9uKGEsYixhMCl7
-dmFyIHQscyxyLHEscCxvLG4sbSxsLGssaixpLGgsZyxmLGUsZD1uZXcgUC5WQyhhKSxjPW5ldyBQLnRw
-KGQsYSkKaWYoYS5sZW5ndGg8MilkLiQxKCJhZGRyZXNzIGlzIHRvbyBzaG9ydCIpCnQ9SC5WTShbXSx1
-LnQpCmZvcihzPWIscj1zLHE9ITEscD0hMTtzPGEwOysrcyl7bz1DLnhCLm0oYSxzKQppZihvPT09NTgp
-e2lmKHM9PT1iKXsrK3MKaWYoQy54Qi5tKGEscykhPT01OClkLiQyKCJpbnZhbGlkIHN0YXJ0IGNvbG9u
-LiIscykKcj1zfWlmKHM9PT1yKXtpZihxKWQuJDIoIm9ubHkgb25lIHdpbGRjYXJkIGA6OmAgaXMgYWxs
-b3dlZCIscykKQy5ObS5pKHQsLTEpCnE9ITB9ZWxzZSBDLk5tLmkodCxjLiQyKHIscykpCnI9cysxfWVs
-c2UgaWYobz09PTQ2KXA9ITB9aWYodC5sZW5ndGg9PT0wKWQuJDEoInRvbyBmZXcgcGFydHMiKQpuPXI9
-PT1hMAptPUMuTm0uZ3JaKHQpCmlmKG4mJm0hPT0tMSlkLiQyKCJleHBlY3RlZCBhIHBhcnQgYWZ0ZXIg
-bGFzdCBgOmAiLGEwKQppZighbilpZighcClDLk5tLmkodCxjLiQyKHIsYTApKQplbHNle2w9UC5IaChh
-LHIsYTApCkMuTm0uaSh0LChsWzBdPDw4fGxbMV0pPj4+MCkKQy5ObS5pKHQsKGxbMl08PDh8bFszXSk+
-Pj4wKX1pZihxKXtpZih0Lmxlbmd0aD43KWQuJDEoImFuIGFkZHJlc3Mgd2l0aCBhIHdpbGRjYXJkIG11
-c3QgaGF2ZSBsZXNzIHRoYW4gNyBwYXJ0cyIpfWVsc2UgaWYodC5sZW5ndGghPT04KWQuJDEoImFuIGFk
-ZHJlc3Mgd2l0aG91dCBhIHdpbGRjYXJkIG11c3QgY29udGFpbiBleGFjdGx5IDggcGFydHMiKQprPW5l
-dyBVaW50OEFycmF5KDE2KQpmb3IobT10Lmxlbmd0aCxqPWsubGVuZ3RoLGk9OS1tLHM9MCxoPTA7czxt
-Oysrcyl7Zz10W3NdCmlmKGc9PT0tMSlmb3IoZj0wO2Y8aTsrK2Ype2lmKGg8MHx8aD49ailyZXR1cm4g
-SC5PSChrLGgpCmtbaF09MAplPWgrMQppZihlPj1qKXJldHVybiBILk9IKGssZSkKa1tlXT0wCmgrPTJ9
-ZWxzZXtlPUMuam4ud0coZyw4KQppZihoPDB8fGg+PWopcmV0dXJuIEguT0goayxoKQprW2hdPWUKZT1o
-KzEKaWYoZT49ailyZXR1cm4gSC5PSChrLGUpCmtbZV09ZyYyNTUKaCs9Mn19cmV0dXJuIGt9LApqdjpm
-dW5jdGlvbihhLGIsYyxkLGUsZixnLGgsaSxqKXt2YXIgdCxzLHIscSxwLG8sbixtPW51bGwKaWYoaj09
-bnVsbClpZihkPmIpaj1QLlBpKGEsYixkKQplbHNle2lmKGQ9PT1iKVAuUjMoYSxiLCJJbnZhbGlkIGVt
-cHR5IHNjaGVtZSIpCmo9IiJ9aWYoZT5iKXt0PWQrMwpzPXQ8ZT9QLnpSKGEsdCxlLTEpOiIiCnI9UC5P
-ZShhLGUsZiwhMSkKaWYodHlwZW9mIGYhPT0ibnVtYmVyIilyZXR1cm4gZi5oKCkKcT1mKzEKaWYodHlw
-ZW9mIGchPT0ibnVtYmVyIilyZXR1cm4gSC5wWShnKQpwPXE8Zz9QLndCKFAuUUEoSi5sZChhLHEsZyks
-bmV3IFAuZTEoYSxmKSxtKSxqKTptfWVsc2V7cD1tCnI9cApzPSIifW89UC5rYShhLGcsaCxtLGosciE9
-bnVsbCkKaWYodHlwZW9mIGghPT0ibnVtYmVyIilyZXR1cm4gaC5KKCkKbj1oPGk/UC5sZShhLGgrMSxp
-LG0pOm0KcmV0dXJuIG5ldyBQLkRuKGoscyxyLHAsbyxuLGk8Yz9QLnRHKGEsaSsxLGMpOm0pfSwKd0s6
-ZnVuY3Rpb24oYSl7aWYoYT09PSJodHRwIilyZXR1cm4gODAKaWYoYT09PSJodHRwcyIpcmV0dXJuIDQ0
-MwpyZXR1cm4gMH0sClIzOmZ1bmN0aW9uKGEsYixjKXt0aHJvdyBILmIoUC5ycihjLGEsYikpfSwKa0U6
-ZnVuY3Rpb24oYSxiKXtDLk5tLksoYSxuZXcgUC5OWSghMSkpfSwKSE46ZnVuY3Rpb24oYSxiLGMpe3Zh
-ciB0LHMscgpmb3IodD1ILnFDKGEsYyxudWxsLEgudDYoYSkuZCksdD1uZXcgSC5hNyh0LHQuZ0EodCks
-dC4kdGkuQygiYTc8YUwuRT4iKSk7dC5GKCk7KXtzPXQuZApyPVAubnUoJ1siKi86PD4/XFxcXHxdJykK
-cy50b1N0cmluZwppZihILm0yKHMsciwwKSl7dD1QLkw0KCJJbGxlZ2FsIGNoYXJhY3RlciBpbiBwYXRo
-OiAiK3MpCnRocm93IEguYih0KX19fSwKcmc6ZnVuY3Rpb24oYSxiKXt2YXIgdAppZighKDY1PD1hJiZh
-PD05MCkpdD05Nzw9YSYmYTw9MTIyCmVsc2UgdD0hMAppZih0KXJldHVybgp0PVAuTDQoIklsbGVnYWwg
-ZHJpdmUgbGV0dGVyICIrUC5PbyhhKSkKdGhyb3cgSC5iKHQpfSwKd0I6ZnVuY3Rpb24oYSxiKXtpZihh
-IT1udWxsJiZhPT09UC53SyhiKSlyZXR1cm4KcmV0dXJuIGF9LApPZTpmdW5jdGlvbihhLGIsYyxkKXt2
-YXIgdCxzLHIscSxwLG8KaWYoYT09bnVsbClyZXR1cm4KaWYoYj09PWMpcmV0dXJuIiIKaWYoQy54Qi5t
-KGEsYik9PT05MSl7aWYodHlwZW9mIGMhPT0ibnVtYmVyIilyZXR1cm4gYy5ITigpCnQ9Yy0xCmlmKEMu
-eEIubShhLHQpIT09OTMpUC5SMyhhLGIsIk1pc3NpbmcgZW5kIGBdYCB0byBtYXRjaCBgW2AgaW4gaG9z
-dCIpCnM9YisxCnI9UC50byhhLHMsdCkKaWYodHlwZW9mIHIhPT0ibnVtYmVyIilyZXR1cm4gci5KKCkK
-aWYocjx0KXtxPXIrMQpwPVAuT0EoYSxDLnhCLlFpKGEsIjI1IixxKT9yKzM6cSx0LCIlMjUiKX1lbHNl
-IHA9IiIKUC5lZyhhLHMscikKcmV0dXJuIEMueEIuTmooYSxiLHIpLnRvTG93ZXJDYXNlKCkrcCsiXSJ9
-aWYodHlwZW9mIGMhPT0ibnVtYmVyIilyZXR1cm4gSC5wWShjKQpvPWIKZm9yKDtvPGM7KytvKWlmKEMu
-eEIubShhLG8pPT09NTgpe3I9Qy54Qi5YVShhLCIlIixiKQppZighKHI+PWImJnI8Yykpcj1jCmlmKHI8
-Yyl7cT1yKzEKcD1QLk9BKGEsQy54Qi5RaShhLCIyNSIscSk/ciszOnEsYywiJTI1Iil9ZWxzZSBwPSIi
-ClAuZWcoYSxiLHIpCnJldHVybiJbIitDLnhCLk5qKGEsYixyKStwKyJdIn1yZXR1cm4gUC5PTChhLGIs
-Yyl9LAp0bzpmdW5jdGlvbihhLGIsYyl7dmFyIHQscz1DLnhCLlhVKGEsIiUiLGIpCmlmKHM+PWIpe2lm
-KHR5cGVvZiBjIT09Im51bWJlciIpcmV0dXJuIEgucFkoYykKdD1zPGN9ZWxzZSB0PSExCnJldHVybiB0
-P3M6Y30sCk9BOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciB0LHMscixxLHAsbyxuLG0sbCxrPWQhPT0iIj9u
-ZXcgUC5SbihkKTpudWxsCmlmKHR5cGVvZiBjIT09Im51bWJlciIpcmV0dXJuIEgucFkoYykKdD1iCnM9
-dApyPSEwCmZvcig7dDxjOyl7cT1DLnhCLm0oYSx0KQppZihxPT09Mzcpe3A9UC5ydihhLHQsITApCm89
-cD09bnVsbAppZihvJiZyKXt0Kz0zCmNvbnRpbnVlfWlmKGs9PW51bGwpaz1uZXcgUC5SbigiIikKbj1r
-LmErPUMueEIuTmooYSxzLHQpCmlmKG8pcD1DLnhCLk5qKGEsdCx0KzMpCmVsc2UgaWYocD09PSIlIilQ
-LlIzKGEsdCwiWm9uZUlEIHNob3VsZCBub3QgY29udGFpbiAlIGFueW1vcmUiKQprLmE9bitwCnQrPTMK
-cz10CnI9ITB9ZWxzZXtpZihxPDEyNyl7bz1xPj4+NAppZihvPj04KXJldHVybiBILk9IKEMuRjMsbykK
-bz0oQy5GM1tvXSYxPDwocSYxNSkpIT09MH1lbHNlIG89ITEKaWYobyl7aWYociYmNjU8PXEmJjkwPj1x
-KXtpZihrPT1udWxsKWs9bmV3IFAuUm4oIiIpCmlmKHM8dCl7ay5hKz1DLnhCLk5qKGEscyx0KQpzPXR9
-cj0hMX0rK3R9ZWxzZXtpZigocSY2NDUxMik9PT01NTI5NiYmdCsxPGMpe209Qy54Qi5tKGEsdCsxKQpp
-ZigobSY2NDUxMik9PT01NjMyMCl7cT02NTUzNnwocSYxMDIzKTw8MTB8bSYxMDIzCmw9Mn1lbHNlIGw9
-MX1lbHNlIGw9MQppZihrPT1udWxsKWs9bmV3IFAuUm4oIiIpCmsuYSs9Qy54Qi5OaihhLHMsdCkKay5h
-Kz1QLkhIKHEpCnQrPWwKcz10fX19aWYoaz09bnVsbClyZXR1cm4gQy54Qi5OaihhLGIsYykKaWYoczxj
-KWsuYSs9Qy54Qi5OaihhLHMsYykKbz1rLmEKcmV0dXJuIG8uY2hhckNvZGVBdCgwKT09MD9vOm99LApP
-TDpmdW5jdGlvbihhLGIsYyl7dmFyIHQscyxyLHEscCxvLG4sbSxsLGssagppZih0eXBlb2YgYyE9PSJu
-dW1iZXIiKXJldHVybiBILnBZKGMpCnQ9YgpzPXQKcj1udWxsCnE9ITAKZm9yKDt0PGM7KXtwPUMueEIu
-bShhLHQpCmlmKHA9PT0zNyl7bz1QLnJ2KGEsdCwhMCkKbj1vPT1udWxsCmlmKG4mJnEpe3QrPTMKY29u
-dGludWV9aWYocj09bnVsbClyPW5ldyBQLlJuKCIiKQptPUMueEIuTmooYSxzLHQpCmw9ci5hKz0hcT9t
-LnRvTG93ZXJDYXNlKCk6bQppZihuKXtvPUMueEIuTmooYSx0LHQrMykKaz0zfWVsc2UgaWYobz09PSIl
-Iil7bz0iJTI1IgprPTF9ZWxzZSBrPTMKci5hPWwrbwp0Kz1rCnM9dApxPSEwfWVsc2V7aWYocDwxMjcp
-e249cD4+PjQKaWYobj49OClyZXR1cm4gSC5PSChDLmVhLG4pCm49KEMuZWFbbl0mMTw8KHAmMTUpKSE9
-PTB9ZWxzZSBuPSExCmlmKG4pe2lmKHEmJjY1PD1wJiY5MD49cCl7aWYocj09bnVsbClyPW5ldyBQLlJu
-KCIiKQppZihzPHQpe3IuYSs9Qy54Qi5OaihhLHMsdCkKcz10fXE9ITF9Kyt0fWVsc2V7aWYocDw9OTMp
-e249cD4+PjQKaWYobj49OClyZXR1cm4gSC5PSChDLmFrLG4pCm49KEMuYWtbbl0mMTw8KHAmMTUpKSE9
-PTB9ZWxzZSBuPSExCmlmKG4pUC5SMyhhLHQsIkludmFsaWQgY2hhcmFjdGVyIikKZWxzZXtpZigocCY2
-NDUxMik9PT01NTI5NiYmdCsxPGMpe2o9Qy54Qi5tKGEsdCsxKQppZigoaiY2NDUxMik9PT01NjMyMCl7
-cD02NTUzNnwocCYxMDIzKTw8MTB8aiYxMDIzCms9Mn1lbHNlIGs9MX1lbHNlIGs9MQppZihyPT1udWxs
-KXI9bmV3IFAuUm4oIiIpCm09Qy54Qi5OaihhLHMsdCkKci5hKz0hcT9tLnRvTG93ZXJDYXNlKCk6bQpy
-LmErPVAuSEgocCkKdCs9awpzPXR9fX19aWYocj09bnVsbClyZXR1cm4gQy54Qi5OaihhLGIsYykKaWYo
-czxjKXttPUMueEIuTmooYSxzLGMpCnIuYSs9IXE/bS50b0xvd2VyQ2FzZSgpOm19bj1yLmEKcmV0dXJu
-IG4uY2hhckNvZGVBdCgwKT09MD9uOm59LApQaTpmdW5jdGlvbihhLGIsYyl7dmFyIHQscyxyLHEKaWYo
-Yj09PWMpcmV0dXJuIiIKaWYoIVAuRXQoSi5yWShhKS5XKGEsYikpKVAuUjMoYSxiLCJTY2hlbWUgbm90
-IHN0YXJ0aW5nIHdpdGggYWxwaGFiZXRpYyBjaGFyYWN0ZXIiKQpmb3IodD1iLHM9ITE7dDxjOysrdCl7
-cj1DLnhCLlcoYSx0KQppZihyPDEyOCl7cT1yPj4+NAppZihxPj04KXJldHVybiBILk9IKEMubUsscSkK
-cT0oQy5tS1txXSYxPDwociYxNSkpIT09MH1lbHNlIHE9ITEKaWYoIXEpUC5SMyhhLHQsIklsbGVnYWwg
-c2NoZW1lIGNoYXJhY3RlciIpCmlmKDY1PD1yJiZyPD05MClzPSEwfWE9Qy54Qi5OaihhLGIsYykKcmV0
-dXJuIFAuWWEocz9hLnRvTG93ZXJDYXNlKCk6YSl9LApZYTpmdW5jdGlvbihhKXtpZihhPT09Imh0dHAi
-KXJldHVybiJodHRwIgppZihhPT09ImZpbGUiKXJldHVybiJmaWxlIgppZihhPT09Imh0dHBzIilyZXR1
-cm4iaHR0cHMiCmlmKGE9PT0icGFja2FnZSIpcmV0dXJuInBhY2thZ2UiCnJldHVybiBhfSwKelI6ZnVu
-Y3Rpb24oYSxiLGMpe2lmKGE9PW51bGwpcmV0dXJuIiIKcmV0dXJuIFAudU8oYSxiLGMsQy50bywhMSl9
-LAprYTpmdW5jdGlvbihhLGIsYyxkLGUsZil7dmFyIHQscz1lPT09ImZpbGUiLHI9c3x8ZixxPWE9PW51
-bGwKaWYocSYmITApcmV0dXJuIHM/Ii8iOiIiCnQ9IXE/UC51TyhhLGIsYyxDLldkLCEwKTpDLmpOLkUy
-KGQsbmV3IFAuUlooKSx1Lk4pLkgoMCwiLyIpCmlmKHQubGVuZ3RoPT09MCl7aWYocylyZXR1cm4iLyJ9
-ZWxzZSBpZihyJiYhQy54Qi5uKHQsIi8iKSl0PSIvIit0CnJldHVybiBQLkpyKHQsZSxmKX0sCkpyOmZ1
-bmN0aW9uKGEsYixjKXt2YXIgdD1iLmxlbmd0aD09PTAKaWYodCYmIWMmJiFDLnhCLm4oYSwiLyIpKXJl
-dHVybiBQLndGKGEsIXR8fGMpCnJldHVybiBQLnhlKGEpfSwKbGU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFy
-IHQscz17fQppZihhIT1udWxsKXtpZihkIT1udWxsKXRocm93IEguYihQLnhZKCJCb3RoIHF1ZXJ5IGFu
-ZCBxdWVyeVBhcmFtZXRlcnMgc3BlY2lmaWVkIikpCnJldHVybiBQLnVPKGEsYixjLEMuVkMsITApfWlm
-KGQ9PW51bGwpcmV0dXJuCnQ9bmV3IFAuUm4oIiIpCnMuYT0iIgpkLksoMCxuZXcgUC55NShuZXcgUC5N
-RShzLHQpKSkKcz10LmEKcmV0dXJuIHMuY2hhckNvZGVBdCgwKT09MD9zOnN9LAp0RzpmdW5jdGlvbihh
-LGIsYyl7aWYoYT09bnVsbClyZXR1cm4KcmV0dXJuIFAudU8oYSxiLGMsQy5WQywhMCl9LApydjpmdW5j
-dGlvbihhLGIsYyl7dmFyIHQscyxyLHEscCxvPWIrMgppZihvPj1hLmxlbmd0aClyZXR1cm4iJSIKdD1D
-LnhCLm0oYSxiKzEpCnM9Qy54Qi5tKGEsbykKcj1ILm9vKHQpCnE9SC5vbyhzKQppZihyPDB8fHE8MCly
-ZXR1cm4iJSIKcD1yKjE2K3EKaWYocDwxMjcpe289Qy5qbi53RyhwLDQpCmlmKG8+PTgpcmV0dXJuIEgu
-T0goQy5GMyxvKQpvPShDLkYzW29dJjE8PChwJjE1KSkhPT0wfWVsc2Ugbz0hMQppZihvKXJldHVybiBI
-Lkx3KGMmJjY1PD1wJiY5MD49cD8ocHwzMik+Pj4wOnApCmlmKHQ+PTk3fHxzPj05NylyZXR1cm4gQy54
-Qi5OaihhLGIsYiszKS50b1VwcGVyQ2FzZSgpCnJldHVybn0sCkhIOmZ1bmN0aW9uKGEpe3ZhciB0LHMs
-cixxLHAsbyxuPSIwMTIzNDU2Nzg5QUJDREVGIgppZihhPDEyOCl7dD1uZXcgQXJyYXkoMykKdC5maXhl
-ZCRsZW5ndGg9QXJyYXkKcz1ILlZNKHQsdS50KQpDLk5tLlkocywwLDM3KQpDLk5tLlkocywxLEMueEIu
-VyhuLGE+Pj40KSkKQy5ObS5ZKHMsMixDLnhCLlcobixhJjE1KSl9ZWxzZXtpZihhPjIwNDcpaWYoYT42
-NTUzNSl7cj0yNDAKcT00fWVsc2V7cj0yMjQKcT0zfWVsc2V7cj0xOTIKcT0yfXQ9bmV3IEFycmF5KDMq
-cSkKdC5maXhlZCRsZW5ndGg9QXJyYXkKcz1ILlZNKHQsdS50KQpmb3IocD0wOy0tcSxxPj0wO3I9MTI4
-KXtvPUMuam4uYmYoYSw2KnEpJjYzfHIKQy5ObS5ZKHMscCwzNykKQy5ObS5ZKHMscCsxLEMueEIuVyhu
-LG8+Pj40KSkKQy5ObS5ZKHMscCsyLEMueEIuVyhuLG8mMTUpKQpwKz0zfX1yZXR1cm4gUC5ITShzLDAs
-bnVsbCl9LAp1TzpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciB0PVAuVWwoYSxiLGMsZCxlKQpyZXR1cm4g
-dD09bnVsbD9DLnhCLk5qKGEsYixjKTp0fSwKVWw6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgdCxzLHIs
-cSxwLG89IWUsbj1iLG09bixsPW51bGwKd2hpbGUoITApe2lmKHR5cGVvZiBuIT09Im51bWJlciIpcmV0
-dXJuIG4uSigpCmlmKHR5cGVvZiBjIT09Im51bWJlciIpcmV0dXJuIEgucFkoYykKaWYoIShuPGMpKWJy
-ZWFrCmMkMDp7dD1DLnhCLm0oYSxuKQppZih0PDEyNyl7cz10Pj4+NAppZihzPj04KXJldHVybiBILk9I
-KGQscykKcz0oZFtzXSYxPDwodCYxNSkpIT09MH1lbHNlIHM9ITEKaWYocykrK24KZWxzZXtpZih0PT09
-Mzcpe3I9UC5ydihhLG4sITEpCmlmKHI9PW51bGwpe24rPTMKYnJlYWsgYyQwfWlmKCIlIj09PXIpe3I9
-IiUyNSIKcT0xfWVsc2UgcT0zfWVsc2V7aWYobylpZih0PD05Myl7cz10Pj4+NAppZihzPj04KXJldHVy
-biBILk9IKEMuYWsscykKcz0oQy5ha1tzXSYxPDwodCYxNSkpIT09MH1lbHNlIHM9ITEKZWxzZSBzPSEx
-CmlmKHMpe1AuUjMoYSxuLCJJbnZhbGlkIGNoYXJhY3RlciIpCnI9bnVsbApxPW51bGx9ZWxzZXtpZigo
-dCY2NDUxMik9PT01NTI5Nil7cz1uKzEKaWYoczxjKXtwPUMueEIubShhLHMpCmlmKChwJjY0NTEyKT09
-PTU2MzIwKXt0PTY1NTM2fCh0JjEwMjMpPDwxMHxwJjEwMjMKcT0yfWVsc2UgcT0xfWVsc2UgcT0xfWVs
-c2UgcT0xCnI9UC5ISCh0KX19aWYobD09bnVsbClsPW5ldyBQLlJuKCIiKQpsLmErPUMueEIuTmooYSxt
-LG4pCmwuYSs9SC5kKHIpCmlmKHR5cGVvZiBxIT09Im51bWJlciIpcmV0dXJuIEgucFkocSkKbis9cQpt
-PW59fX1pZihsPT1udWxsKXJldHVybgppZih0eXBlb2YgbSE9PSJudW1iZXIiKXJldHVybiBtLkooKQpp
-ZihtPGMpbC5hKz1DLnhCLk5qKGEsbSxjKQpvPWwuYQpyZXR1cm4gby5jaGFyQ29kZUF0KDApPT0wP286
-b30sCnlCOmZ1bmN0aW9uKGEpe2lmKEMueEIubihhLCIuIikpcmV0dXJuITAKcmV0dXJuIEMueEIuT1ko
-YSwiLy4iKSE9PS0xfSwKeGU6ZnVuY3Rpb24oYSl7dmFyIHQscyxyLHEscCxvLG4KaWYoIVAueUIoYSkp
-cmV0dXJuIGEKdD1ILlZNKFtdLHUucykKZm9yKHM9YS5zcGxpdCgiLyIpLHI9cy5sZW5ndGgscT0hMSxw
-PTA7cDxyOysrcCl7bz1zW3BdCmlmKEouUk0obywiLi4iKSl7bj10Lmxlbmd0aAppZihuIT09MCl7aWYo
-MD49bilyZXR1cm4gSC5PSCh0LC0xKQp0LnBvcCgpCmlmKHQubGVuZ3RoPT09MClDLk5tLmkodCwiIil9
-cT0hMH1lbHNlIGlmKCIuIj09PW8pcT0hMAplbHNle0MuTm0uaSh0LG8pCnE9ITF9fWlmKHEpQy5ObS5p
-KHQsIiIpCnJldHVybiBDLk5tLkgodCwiLyIpfSwKd0Y6ZnVuY3Rpb24oYSxiKXt2YXIgdCxzLHIscSxw
-LG8KaWYoIVAueUIoYSkpcmV0dXJuIWI/UC5DMShhKTphCnQ9SC5WTShbXSx1LnMpCmZvcihzPWEuc3Bs
-aXQoIi8iKSxyPXMubGVuZ3RoLHE9ITEscD0wO3A8cjsrK3Ape289c1twXQppZigiLi4iPT09bylpZih0
-Lmxlbmd0aCE9PTAmJkMuTm0uZ3JaKHQpIT09Ii4uIil7aWYoMD49dC5sZW5ndGgpcmV0dXJuIEguT0go
-dCwtMSkKdC5wb3AoKQpxPSEwfWVsc2V7Qy5ObS5pKHQsIi4uIikKcT0hMX1lbHNlIGlmKCIuIj09PW8p
-cT0hMAplbHNle0MuTm0uaSh0LG8pCnE9ITF9fXM9dC5sZW5ndGgKaWYocyE9PTApaWYocz09PTEpe2lm
-KDA+PXMpcmV0dXJuIEguT0godCwwKQpzPXRbMF0ubGVuZ3RoPT09MH1lbHNlIHM9ITEKZWxzZSBzPSEw
-CmlmKHMpcmV0dXJuIi4vIgppZihxfHxDLk5tLmdyWih0KT09PSIuLiIpQy5ObS5pKHQsIiIpCmlmKCFi
-KXtpZigwPj10Lmxlbmd0aClyZXR1cm4gSC5PSCh0LDApCkMuTm0uWSh0LDAsUC5DMSh0WzBdKSl9cmV0
-dXJuIEMuTm0uSCh0LCIvIil9LApDMTpmdW5jdGlvbihhKXt2YXIgdCxzLHIscT1hLmxlbmd0aAppZihx
-Pj0yJiZQLkV0KEouUXooYSwwKSkpZm9yKHQ9MTt0PHE7Kyt0KXtzPUMueEIuVyhhLHQpCmlmKHM9PT01
-OClyZXR1cm4gQy54Qi5OaihhLDAsdCkrIiUzQSIrQy54Qi5HKGEsdCsxKQppZihzPD0xMjcpe3I9cz4+
-PjQKaWYocj49OClyZXR1cm4gSC5PSChDLm1LLHIpCnI9KEMubUtbcl0mMTw8KHMmMTUpKT09PTB9ZWxz
-ZSByPSEwCmlmKHIpYnJlYWt9cmV0dXJuIGF9LAptbjpmdW5jdGlvbihhKXt2YXIgdCxzLHIscT1hLmdG
-aigpLHA9cS5sZW5ndGgKaWYocD4wJiZKLkhtKHFbMF0pPT09MiYmSi5hNihxWzBdLDEpPT09NTgpe2lm
-KDA+PXApcmV0dXJuIEguT0gocSwwKQpQLnJnKEouYTYocVswXSwwKSwhMSkKUC5ITihxLCExLDEpCnQ9
-ITB9ZWxzZXtQLkhOKHEsITEsMCkKdD0hMX1zPWEuZ3RUKCkmJiF0PyJcXCI6IiIKaWYoYS5nY2ooKSl7
-cj1hLmdKZihhKQppZihyLmxlbmd0aCE9PTApcz1zKyJcXCIrcisiXFwifXM9UC52ZyhzLHEsIlxcIikK
-cD10JiZwPT09MT9zKyJcXCI6cwpyZXR1cm4gcC5jaGFyQ29kZUF0KDApPT0wP3A6cH0sCkloOmZ1bmN0
-aW9uKGEsYil7dmFyIHQscyxyCmZvcih0PTAscz0wO3M8MjsrK3Mpe3I9Qy54Qi5XKGEsYitzKQppZig0
-ODw9ciYmcjw9NTcpdD10KjE2K3ItNDgKZWxzZXtyfD0zMgppZig5Nzw9ciYmcjw9MTAyKXQ9dCoxNity
-LTg3CmVsc2UgdGhyb3cgSC5iKFAueFkoIkludmFsaWQgVVJMIGVuY29kaW5nIikpfX1yZXR1cm4gdH0s
-Cmt1OmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIHQscyxyLHEscD1KLnJZKGEpLG89Ygp3aGlsZSghMCl7
-aWYoIShvPGMpKXt0PSEwCmJyZWFrfXM9cC5XKGEsbykKaWYoczw9MTI3KWlmKHMhPT0zNylyPWUmJnM9
-PT00MwplbHNlIHI9ITAKZWxzZSByPSEwCmlmKHIpe3Q9ITEKYnJlYWt9KytvfWlmKHQpe2lmKEMueE0h
-PT1kKXI9ITEKZWxzZSByPSEwCmlmKHIpcmV0dXJuIHAuTmooYSxiLGMpCmVsc2UgcT1uZXcgSC5xaihw
-Lk5qKGEsYixjKSl9ZWxzZXtxPUguVk0oW10sdS50KQpmb3Iobz1iO288YzsrK28pe3M9cC5XKGEsbykK
-aWYocz4xMjcpdGhyb3cgSC5iKFAueFkoIklsbGVnYWwgcGVyY2VudCBlbmNvZGluZyBpbiBVUkkiKSkK
-aWYocz09PTM3KXtpZihvKzM+YS5sZW5ndGgpdGhyb3cgSC5iKFAueFkoIlRydW5jYXRlZCBVUkkiKSkK
-Qy5ObS5pKHEsUC5JaChhLG8rMSkpCm8rPTJ9ZWxzZSBpZihlJiZzPT09NDMpQy5ObS5pKHEsMzIpCmVs
-c2UgQy5ObS5pKHEscyl9fXUuTC5iKHEpCnJldHVybiBuZXcgUC5HWSghMSkuV0oocSl9LApFdDpmdW5j
-dGlvbihhKXt2YXIgdD1hfDMyCnJldHVybiA5Nzw9dCYmdDw9MTIyfSwKS0Q6ZnVuY3Rpb24oYSxiLGMp
-e3ZhciB0LHMscixxLHAsbyxuLG0sbD0iSW52YWxpZCBNSU1FIHR5cGUiLGs9SC5WTShbYi0xXSx1LnQp
-CmZvcih0PWEubGVuZ3RoLHM9YixyPS0xLHE9bnVsbDtzPHQ7KytzKXtxPUMueEIuVyhhLHMpCmlmKHE9
-PT00NHx8cT09PTU5KWJyZWFrCmlmKHE9PT00Nyl7aWYocjwwKXtyPXMKY29udGludWV9dGhyb3cgSC5i
-KFAucnIobCxhLHMpKX19aWYocjwwJiZzPmIpdGhyb3cgSC5iKFAucnIobCxhLHMpKQpmb3IoO3EhPT00
-NDspe0MuTm0uaShrLHMpOysrcwpmb3IocD0tMTtzPHQ7KytzKXtxPUMueEIuVyhhLHMpCmlmKHE9PT02
-MSl7aWYocDwwKXA9c31lbHNlIGlmKHE9PT01OXx8cT09PTQ0KWJyZWFrfWlmKHA+PTApQy5ObS5pKGss
-cCkKZWxzZXtvPUMuTm0uZ3JaKGspCmlmKHEhPT00NHx8cyE9PW8rN3x8IUMueEIuUWkoYSwiYmFzZTY0
-IixvKzEpKXRocm93IEguYihQLnJyKCJFeHBlY3RpbmcgJz0nIixhLHMpKQpicmVha319Qy5ObS5pKGss
-cykKbj1zKzEKaWYoKGsubGVuZ3RoJjEpPT09MSlhPUMuaDkueXIoYSxuLHQpCmVsc2V7bT1QLlVsKGEs
-bix0LEMuVkMsITApCmlmKG0hPW51bGwpYT1DLnhCLmk3KGEsbix0LG0pfXJldHVybiBuZXcgUC5QRShh
-LGssYyl9LAp1eDpmdW5jdGlvbigpe3ZhciB0PSIwMTIzNDU2Nzg5QUJDREVGR0hJSktMTU5PUFFSU1RV
-VldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ei0uX34hJCYnKCkqKyw7PSIscz0iLiIscj0iOiIs
-cT0iLyIscD0iPyIsbz0iIyIsbj11LmdjLG09UC5kSCgyMixuZXcgUC5xMygpLCEwLG4pLGw9bmV3IFAu
-eUkobSksaz1uZXcgUC5jNigpLGo9bmV3IFAucWQoKSxpPW4uYihsLiQyKDAsMjI1KSkKay4kMyhpLHQs
-MSkKay4kMyhpLHMsMTQpCmsuJDMoaSxyLDM0KQprLiQzKGkscSwzKQprLiQzKGkscCwxNzIpCmsuJDMo
-aSxvLDIwNSkKaT1uLmIobC4kMigxNCwyMjUpKQprLiQzKGksdCwxKQprLiQzKGkscywxNSkKay4kMyhp
-LHIsMzQpCmsuJDMoaSxxLDIzNCkKay4kMyhpLHAsMTcyKQprLiQzKGksbywyMDUpCmk9bi5iKGwuJDIo
-MTUsMjI1KSkKay4kMyhpLHQsMSkKay4kMyhpLCIlIiwyMjUpCmsuJDMoaSxyLDM0KQprLiQzKGkscSw5
-KQprLiQzKGkscCwxNzIpCmsuJDMoaSxvLDIwNSkKaT1uLmIobC4kMigxLDIyNSkpCmsuJDMoaSx0LDEp
-CmsuJDMoaSxyLDM0KQprLiQzKGkscSwxMCkKay4kMyhpLHAsMTcyKQprLiQzKGksbywyMDUpCmk9bi5i
-KGwuJDIoMiwyMzUpKQprLiQzKGksdCwxMzkpCmsuJDMoaSxxLDEzMSkKay4kMyhpLHMsMTQ2KQprLiQz
-KGkscCwxNzIpCmsuJDMoaSxvLDIwNSkKaT1uLmIobC4kMigzLDIzNSkpCmsuJDMoaSx0LDExKQprLiQz
-KGkscSw2OCkKay4kMyhpLHMsMTgpCmsuJDMoaSxwLDE3MikKay4kMyhpLG8sMjA1KQppPW4uYihsLiQy
-KDQsMjI5KSkKay4kMyhpLHQsNSkKai4kMyhpLCJBWiIsMjI5KQprLiQzKGksciwxMDIpCmsuJDMoaSwi
-QCIsNjgpCmsuJDMoaSwiWyIsMjMyKQprLiQzKGkscSwxMzgpCmsuJDMoaSxwLDE3MikKay4kMyhpLG8s
-MjA1KQppPW4uYihsLiQyKDUsMjI5KSkKay4kMyhpLHQsNSkKai4kMyhpLCJBWiIsMjI5KQprLiQzKGks
-ciwxMDIpCmsuJDMoaSwiQCIsNjgpCmsuJDMoaSxxLDEzOCkKay4kMyhpLHAsMTcyKQprLiQzKGksbywy
-MDUpCmk9bi5iKGwuJDIoNiwyMzEpKQpqLiQzKGksIjE5Iiw3KQprLiQzKGksIkAiLDY4KQprLiQzKGks
-cSwxMzgpCmsuJDMoaSxwLDE3MikKay4kMyhpLG8sMjA1KQppPW4uYihsLiQyKDcsMjMxKSkKai4kMyhp
-LCIwOSIsNykKay4kMyhpLCJAIiw2OCkKay4kMyhpLHEsMTM4KQprLiQzKGkscCwxNzIpCmsuJDMoaSxv
-LDIwNSkKay4kMyhuLmIobC4kMig4LDgpKSwiXSIsNSkKaT1uLmIobC4kMig5LDIzNSkpCmsuJDMoaSx0
-LDExKQprLiQzKGkscywxNikKay4kMyhpLHEsMjM0KQprLiQzKGkscCwxNzIpCmsuJDMoaSxvLDIwNSkK
-aT1uLmIobC4kMigxNiwyMzUpKQprLiQzKGksdCwxMSkKay4kMyhpLHMsMTcpCmsuJDMoaSxxLDIzNCkK
-ay4kMyhpLHAsMTcyKQprLiQzKGksbywyMDUpCmk9bi5iKGwuJDIoMTcsMjM1KSkKay4kMyhpLHQsMTEp
-CmsuJDMoaSxxLDkpCmsuJDMoaSxwLDE3MikKay4kMyhpLG8sMjA1KQppPW4uYihsLiQyKDEwLDIzNSkp
-CmsuJDMoaSx0LDExKQprLiQzKGkscywxOCkKay4kMyhpLHEsMjM0KQprLiQzKGkscCwxNzIpCmsuJDMo
-aSxvLDIwNSkKaT1uLmIobC4kMigxOCwyMzUpKQprLiQzKGksdCwxMSkKay4kMyhpLHMsMTkpCmsuJDMo
-aSxxLDIzNCkKay4kMyhpLHAsMTcyKQprLiQzKGksbywyMDUpCmk9bi5iKGwuJDIoMTksMjM1KSkKay4k
-MyhpLHQsMTEpCmsuJDMoaSxxLDIzNCkKay4kMyhpLHAsMTcyKQprLiQzKGksbywyMDUpCmk9bi5iKGwu
-JDIoMTEsMjM1KSkKay4kMyhpLHQsMTEpCmsuJDMoaSxxLDEwKQprLiQzKGkscCwxNzIpCmsuJDMoaSxv
-LDIwNSkKaT1uLmIobC4kMigxMiwyMzYpKQprLiQzKGksdCwxMikKay4kMyhpLHAsMTIpCmsuJDMoaSxv
-LDIwNSkKaT1uLmIobC4kMigxMywyMzcpKQprLiQzKGksdCwxMykKay4kMyhpLHAsMTMpCmouJDMobi5i
-KGwuJDIoMjAsMjQ1KSksImF6IiwyMSkKbD1uLmIobC4kMigyMSwyNDUpKQpqLiQzKGwsImF6IiwyMSkK
-ai4kMyhsLCIwOSIsMjEpCmsuJDMobCwiKy0uIiwyMSkKcmV0dXJuIG19LApVQjpmdW5jdGlvbihhLGIs
-YyxkLGUpe3ZhciB0LHMscixxLHAsbz0kLnZaKCkKZm9yKHQ9Si5yWShhKSxzPWI7czxjOysrcyl7aWYo
-ZDwwfHxkPj1vLmxlbmd0aClyZXR1cm4gSC5PSChvLGQpCnI9b1tkXQpxPXQuVyhhLHMpXjk2CmlmKHE+
-OTUpcT0zMQppZihxPj1yLmxlbmd0aClyZXR1cm4gSC5PSChyLHEpCnA9cltxXQpkPXAmMzEKQy5ObS5Z
-KGUscD4+PjUscyl9cmV0dXJuIGR9LApXRjpmdW5jdGlvbiBXRihhLGIpe3RoaXMuYT1hCnRoaXMuYj1i
-fSwKYTI6ZnVuY3Rpb24gYTIoKXt9LAppUDpmdW5jdGlvbiBpUChhLGIpe3RoaXMuYT1hCnRoaXMuYj1i
-fSwKQ1A6ZnVuY3Rpb24gQ1AoKXt9LApYUzpmdW5jdGlvbiBYUygpe30sCkM2OmZ1bmN0aW9uIEM2KGEp
-e3RoaXMuYT1hfSwKbjpmdW5jdGlvbiBuKCl7fSwKdTpmdW5jdGlvbiB1KGEsYixjLGQpe3ZhciBfPXRo
-aXMKXy5hPWEKXy5iPWIKXy5jPWMKXy5kPWR9LApiSjpmdW5jdGlvbiBiSihhLGIsYyxkLGUsZil7dmFy
-IF89dGhpcwpfLmU9YQpfLmY9YgpfLmE9YwpfLmI9ZApfLmM9ZQpfLmQ9Zn0sCmVZOmZ1bmN0aW9uIGVZ
-KGEsYixjLGQsZSl7dmFyIF89dGhpcwpfLmY9YQpfLmE9YgpfLmI9YwpfLmM9ZApfLmQ9ZX0sCm1wOmZ1
-bmN0aW9uIG1wKGEsYixjLGQpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5jPWMKXy5kPWR9LAp1Yjpm
-dW5jdGlvbiB1YihhKXt0aGlzLmE9YX0sCmRzOmZ1bmN0aW9uIGRzKGEpe3RoaXMuYT1hfSwKbGo6ZnVu
-Y3Rpb24gbGooYSl7dGhpcy5hPWF9LApVVjpmdW5jdGlvbiBVVihhKXt0aGlzLmE9YX0sCms1OmZ1bmN0
-aW9uIGs1KCl7fSwKS1k6ZnVuY3Rpb24gS1koKXt9LApjOmZ1bmN0aW9uIGMoYSl7dGhpcy5hPWF9LApD
-RDpmdW5jdGlvbiBDRChhKXt0aGlzLmE9YX0sCmFFOmZ1bmN0aW9uIGFFKGEsYixjKXt0aGlzLmE9YQp0
-aGlzLmI9Ygp0aGlzLmM9Y30sCkVIOmZ1bmN0aW9uIEVIKCl7fSwKS046ZnVuY3Rpb24gS04oKXt9LApj
-WDpmdW5jdGlvbiBjWCgpe30sCkFuOmZ1bmN0aW9uIEFuKCl7fSwKek06ZnVuY3Rpb24gek0oKXt9LApa
-MDpmdW5jdGlvbiBaMCgpe30sCmM4OmZ1bmN0aW9uIGM4KCl7fSwKRks6ZnVuY3Rpb24gRksoKXt9LApr
-OmZ1bmN0aW9uIGsoKXt9LApPZDpmdW5jdGlvbiBPZCgpe30sCmliOmZ1bmN0aW9uIGliKCl7fSwKeHU6
-ZnVuY3Rpb24geHUoKXt9LApHejpmdW5jdGlvbiBHeigpe30sCnFVOmZ1bmN0aW9uIHFVKCl7fSwKUm46
-ZnVuY3Rpb24gUm4oYSl7dGhpcy5hPWF9LApHRDpmdW5jdGlvbiBHRCgpe30sCm4xOmZ1bmN0aW9uIG4x
-KGEpe3RoaXMuYT1hfSwKY1M6ZnVuY3Rpb24gY1MoYSl7dGhpcy5hPWF9LApWQzpmdW5jdGlvbiBWQyhh
-KXt0aGlzLmE9YX0sCnRwOmZ1bmN0aW9uIHRwKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApEbjpmdW5j
-dGlvbiBEbihhLGIsYyxkLGUsZixnKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uYz1jCl8uZD1kCl8u
-ZT1lCl8uZj1mCl8ucj1nCl8uUT1fLno9Xy55PV8ueD1udWxsfSwKZTE6ZnVuY3Rpb24gZTEoYSxiKXt0
-aGlzLmE9YQp0aGlzLmI9Yn0sCk5ZOmZ1bmN0aW9uIE5ZKGEpe3RoaXMuYT1hfSwKUlo6ZnVuY3Rpb24g
-UlooKXt9LApNRTpmdW5jdGlvbiBNRShhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKeTU6ZnVuY3Rpb24g
-eTUoYSl7dGhpcy5hPWF9LApQRTpmdW5jdGlvbiBQRShhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhp
-cy5jPWN9LApxMzpmdW5jdGlvbiBxMygpe30sCnlJOmZ1bmN0aW9uIHlJKGEpe3RoaXMuYT1hfSwKYzY6
-ZnVuY3Rpb24gYzYoKXt9LApxZDpmdW5jdGlvbiBxZCgpe30sClVmOmZ1bmN0aW9uIFVmKGEsYixjLGQs
-ZSxmLGcsaCl7dmFyIF89dGhpcwpfLmE9YQpfLmI9YgpfLmM9YwpfLmQ9ZApfLmU9ZQpfLmY9ZgpfLnI9
-ZwpfLng9aApfLnk9bnVsbH0sCnFlOmZ1bmN0aW9uIHFlKGEsYixjLGQsZSxmLGcpe3ZhciBfPXRoaXMK
-Xy5hPWEKXy5iPWIKXy5jPWMKXy5kPWQKXy5lPWUKXy5mPWYKXy5yPWcKXy5RPV8uej1fLnk9Xy54PW51
-bGx9LAppSjpmdW5jdGlvbiBpSigpe30sCmxSOmZ1bmN0aW9uIGxSKGEsYil7dGhpcy5hPWEKdGhpcy5i
-PWJ9LApqZzpmdW5jdGlvbiBqZyhhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKQmY6ZnVuY3Rpb24gQmYo
-YSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCkFzOmZ1bmN0aW9uIEFzKCl7fSwKR0U6ZnVuY3Rpb24gR0Uo
-YSl7dGhpcy5hPWF9LApONzpmdW5jdGlvbiBONyhhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKdVE6ZnVu
-Y3Rpb24gdVEoKXt9LApoRjpmdW5jdGlvbiBoRigpe30sClI0OmZ1bmN0aW9uKGEsYixjLGQpe3ZhciB0
-LHMscgpILnhkKGIpCnUuai5iKGQpCmlmKEgub1QoYikpe3Q9W2NdCkMuTm0uRlYodCxkKQpkPXR9cz11
-LnoKcj1QLkNIKEouTTEoZCxQLncwKCkscyksITAscykKdS5aLmIoYSkKcmV0dXJuIFAud1koSC5Fayhh
-LHIsbnVsbCkpfSwKRG06ZnVuY3Rpb24oYSxiLGMpe3ZhciB0CnRyeXtpZihPYmplY3QuaXNFeHRlbnNp
-YmxlKGEpJiYhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGEsYikpe09iamVjdC5k
-ZWZpbmVQcm9wZXJ0eShhLGIse3ZhbHVlOmN9KQpyZXR1cm4hMH19Y2F0Y2godCl7SC5SdSh0KX1yZXR1
-cm4hMX0sCk9tOmZ1bmN0aW9uKGEsYil7aWYoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5j
-YWxsKGEsYikpcmV0dXJuIGFbYl0KcmV0dXJufSwKd1k6ZnVuY3Rpb24oYSl7aWYoYT09bnVsbHx8dHlw
-ZW9mIGE9PSJzdHJpbmcifHx0eXBlb2YgYT09Im51bWJlciJ8fEgubChhKSlyZXR1cm4gYQppZihhIGlu
-c3RhbmNlb2YgUC5FNClyZXR1cm4gYS5hCmlmKEguUjkoYSkpcmV0dXJuIGEKaWYodS53LmMoYSkpcmV0
-dXJuIGEKaWYoYSBpbnN0YW5jZW9mIFAuaVApcmV0dXJuIEgubzIoYSkKaWYodS5aLmMoYSkpcmV0dXJu
-IFAuaEUoYSwiJGRhcnRfanNGdW5jdGlvbiIsbmV3IFAuUEMoKSkKcmV0dXJuIFAuaEUoYSwiXyRkYXJ0
-X2pzT2JqZWN0IixuZXcgUC5ZbSgkLmtJKCkpKX0sCmhFOmZ1bmN0aW9uKGEsYixjKXt2YXIgdD1QLk9t
-KGEsYikKaWYodD09bnVsbCl7dD1jLiQxKGEpClAuRG0oYSxiLHQpfXJldHVybiB0fSwKTDc6ZnVuY3Rp
-b24oYSl7dmFyIHQscwppZihhPT1udWxsfHx0eXBlb2YgYT09InN0cmluZyJ8fHR5cGVvZiBhPT0ibnVt
-YmVyInx8dHlwZW9mIGE9PSJib29sZWFuIilyZXR1cm4gYQplbHNlIGlmKGEgaW5zdGFuY2VvZiBPYmpl
-Y3QmJkguUjkoYSkpcmV0dXJuIGEKZWxzZSBpZihhIGluc3RhbmNlb2YgT2JqZWN0JiZ1LncuYyhhKSly
-ZXR1cm4gYQplbHNlIGlmKGEgaW5zdGFuY2VvZiBEYXRlKXt0PUguU2MoYS5nZXRUaW1lKCkpCmlmKE1h
-dGguYWJzKHQpPD04NjRlMTMpcz0hMQplbHNlIHM9ITAKaWYocylILnZoKFAueFkoIkRhdGVUaW1lIGlz
-IG91dHNpZGUgdmFsaWQgcmFuZ2U6ICIrdCkpCnJldHVybiBuZXcgUC5pUCh0LCExKX1lbHNlIGlmKGEu
-Y29uc3RydWN0b3I9PT0kLmtJKCkpcmV0dXJuIGEubwplbHNlIHJldHVybiBQLk5EKGEpfSwKTkQ6ZnVu
-Y3Rpb24oYSl7aWYodHlwZW9mIGE9PSJmdW5jdGlvbiIpcmV0dXJuIFAuaVEoYSwkLncoKSxuZXcgUC5O
-eigpKQppZihhIGluc3RhbmNlb2YgQXJyYXkpcmV0dXJuIFAuaVEoYSwkLlI4KCksbmV3IFAubnAoKSkK
-cmV0dXJuIFAuaVEoYSwkLlI4KCksbmV3IFAuVXQoKSl9LAppUTpmdW5jdGlvbihhLGIsYyl7dmFyIHQ9
-UC5PbShhLGIpCmlmKHQ9PW51bGx8fCEoYSBpbnN0YW5jZW9mIE9iamVjdCkpe3Q9Yy4kMShhKQpQLkRt
-KGEsYix0KX1yZXR1cm4gdH0sClBDOmZ1bmN0aW9uIFBDKCl7fSwKWW06ZnVuY3Rpb24gWW0oYSl7dGhp
-cy5hPWF9LApOejpmdW5jdGlvbiBOeigpe30sCm5wOmZ1bmN0aW9uIG5wKCl7fSwKVXQ6ZnVuY3Rpb24g
-VXQoKXt9LApFNDpmdW5jdGlvbiBFNChhKXt0aGlzLmE9YX0sCnI3OmZ1bmN0aW9uIHI3KGEpe3RoaXMu
-YT1hfSwKVHo6ZnVuY3Rpb24gVHooYSxiKXt0aGlzLmE9YQp0aGlzLiR0aT1ifSwKY286ZnVuY3Rpb24g
-Y28oKXt9LApuZDpmdW5jdGlvbiBuZCgpe30sCktlOmZ1bmN0aW9uIEtlKGEpe3RoaXMuYT1hfSwKZDU6
-ZnVuY3Rpb24gZDUoKXt9LApuNjpmdW5jdGlvbiBuNigpe319LFc9ewpVOTpmdW5jdGlvbihhLGIsYyl7
-dmFyIHQ9ZG9jdW1lbnQuYm9keSxzPSh0JiZDLlJZKS5yNih0LGEsYixjKQpzLnRvU3RyaW5nCnQ9dS5h
-Ywp0PW5ldyBILlU1KG5ldyBXLmU3KHMpLHQuQygiYTIobEQuRSkiKS5iKG5ldyBXLkN2KCkpLHQuQygi
-VTU8bEQuRT4iKSkKcmV0dXJuIHUuaC5iKHQuZ3I4KHQpKX0sCnJTOmZ1bmN0aW9uKGEpe3ZhciB0LHMs
-cj0iZWxlbWVudCB0YWcgdW5hdmFpbGFibGUiCnRyeXt0PUouUkUoYSkKaWYodHlwZW9mIHQuZ25zKGEp
-PT0ic3RyaW5nIilyPXQuZ25zKGEpfWNhdGNoKHMpe0guUnUocyl9cmV0dXJuIHJ9LApxRDpmdW5jdGlv
-bihhLGIsYyl7dmFyIHQscyxyLHE9bmV3IFAudnMoJC5YMyx1LmFvKSxwPW5ldyBQLlpmKHEsdS5iaiks
-bz1uZXcgWE1MSHR0cFJlcXVlc3QoKQpDLkR0LmVvKG8sYj09bnVsbD8iR0VUIjpiLGEsITApCmMuSygw
-LG5ldyBXLmJVKG8pKQp0PXUuYW4Kcz10LmIobmV3IFcuaEgobyxwKSkKdS5NLmIobnVsbCkKcj11LnAK
-Vy5KRShvLCJsb2FkIixzLCExLHIpClcuSkUobywiZXJyb3IiLHQuYihwLmdZSigpKSwhMSxyKQpvLnNl
-bmQoKQpyZXR1cm4gcX0sCkMwOmZ1bmN0aW9uKGEsYil7YT01MzY4NzA5MTEmYStiCmE9NTM2ODcwOTEx
-JmErKCg1MjQyODcmYSk8PDEwKQpyZXR1cm4gYV5hPj4+Nn0sCnJFOmZ1bmN0aW9uKGEsYixjLGQpe3Zh
-ciB0PVcuQzAoVy5DMChXLkMwKFcuQzAoMCxhKSxiKSxjKSxkKSxzPTUzNjg3MDkxMSZ0KygoNjcxMDg4
-NjMmdCk8PDMpCnNePXM+Pj4xMQpyZXR1cm4gNTM2ODcwOTExJnMrKCgxNjM4MyZzKTw8MTUpfSwKVE46
-ZnVuY3Rpb24oYSxiKXt2YXIgdCxzLHI9YS5jbGFzc0xpc3QKZm9yKHQ9Yi5sZW5ndGgscz0wO3M8Yi5s
-ZW5ndGg7Yi5sZW5ndGg9PT10fHwoMCxILmxrKShiKSwrK3Mpci5hZGQoYltzXSl9LApKRTpmdW5jdGlv
-bihhLGIsYyxkLGUpe3ZhciB0PVcuYUYobmV3IFcudk4oYyksdS5CKQppZih0IT1udWxsJiYhMClKLmRa
-KGEsYix0LCExKQpyZXR1cm4gbmV3IFcueEMoYSxiLHQsITEsZS5DKCJ4QzwwPiIpKX0sClR3OmZ1bmN0
-aW9uKGEpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxzPW5ldyBXLm1rKHQsd2luZG93
-LmxvY2F0aW9uKQpzPW5ldyBXLkpRKHMpCnMuQ1koYSkKcmV0dXJuIHN9LAp5VzpmdW5jdGlvbihhLGIs
-YyxkKXt1LmguYihhKQpILnkoYikKSC55KGMpCnUuTy5iKGQpCnJldHVybiEwfSwKUVc6ZnVuY3Rpb24o
-YSxiLGMsZCl7dmFyIHQscyxyCnUuaC5iKGEpCkgueShiKQpILnkoYykKdD11Lk8uYihkKS5hCnM9dC5h
-CnMuaHJlZj1jCnI9cy5ob3N0bmFtZQp0PXQuYgppZighKHI9PXQuaG9zdG5hbWUmJnMucG9ydD09dC5w
-b3J0JiZzLnByb3RvY29sPT10LnByb3RvY29sKSlpZihyPT09IiIpaWYocy5wb3J0PT09IiIpe3Q9cy5w
-cm90b2NvbAp0PXQ9PT0iOiJ8fHQ9PT0iIn1lbHNlIHQ9ITEKZWxzZSB0PSExCmVsc2UgdD0hMApyZXR1
-cm4gdH0sCkJsOmZ1bmN0aW9uKCl7dmFyIHQ9dS5OLHM9UC50TShDLlF4LHQpLHI9dS5kRy5iKG5ldyBX
-LklBKCkpLHE9SC5WTShbIlRFTVBMQVRFIl0sdS5zKQp0PW5ldyBXLmN0KHMsUC5Mcyh0KSxQLkxzKHQp
-LFAuTHModCksbnVsbCkKdC5DWShudWxsLG5ldyBILkE4KEMuUXgscix1LmR2KSxxLG51bGwpCnJldHVy
-biB0fSwKdVY6ZnVuY3Rpb24oYSl7aWYoYT09bnVsbClyZXR1cm4KcmV0dXJuIFcuUDEoYSl9LApxYzpm
-dW5jdGlvbihhKXt2YXIgdAppZihhPT1udWxsKXJldHVybgppZigicG9zdE1lc3NhZ2UiIGluIGEpe3Q9
-Vy5QMShhKQpyZXR1cm4gdH1lbHNlIHJldHVybiB1LmFTLmIoYSl9LApQMTpmdW5jdGlvbihhKXtpZihh
-PT09d2luZG93KXJldHVybiB1LmNpLmIoYSkKZWxzZSByZXR1cm4gbmV3IFcuZFcoYSl9LAp6WDpmdW5j
-dGlvbihhKXtpZihhPT09d2luZG93LmxvY2F0aW9uKXJldHVybiBhCmVsc2UgcmV0dXJuIG5ldyBXLkZi
-KCl9LAphRjpmdW5jdGlvbihhLGIpe3ZhciB0PSQuWDMKaWYodD09PUMuTlUpcmV0dXJuIGEKcmV0dXJu
-IHQuUHkoYSxiKX0sCnFFOmZ1bmN0aW9uIHFFKCl7fSwKR2g6ZnVuY3Rpb24gR2goKXt9LApmWTpmdW5j
-dGlvbiBmWSgpe30sCm5COmZ1bmN0aW9uIG5CKCl7fSwKQXo6ZnVuY3Rpb24gQXooKXt9LApRUDpmdW5j
-dGlvbiBRUCgpe30sCm54OmZ1bmN0aW9uIG54KCl7fSwKb0o6ZnVuY3Rpb24gb0ooKXt9LAppZDpmdW5j
-dGlvbiBpZCgpe30sClFGOmZ1bmN0aW9uIFFGKCl7fSwKTmg6ZnVuY3Rpb24gTmgoKXt9LApJQjpmdW5j
-dGlvbiBJQigpe30sCm43OmZ1bmN0aW9uIG43KCl7fSwKd3o6ZnVuY3Rpb24gd3ooYSxiKXt0aGlzLmE9
-YQp0aGlzLiR0aT1ifSwKY3Y6ZnVuY3Rpb24gY3YoKXt9LApDdjpmdW5jdGlvbiBDdigpe30sCmVhOmZ1
-bmN0aW9uIGVhKCl7fSwKRDA6ZnVuY3Rpb24gRDAoKXt9LApUNTpmdW5jdGlvbiBUNSgpe30sCmg0OmZ1
-bmN0aW9uIGg0KCl7fSwKYnI6ZnVuY3Rpb24gYnIoKXt9LApWYjpmdW5jdGlvbiBWYigpe30sCk83OmZ1
-bmN0aW9uIE83KCl7fSwKYlU6ZnVuY3Rpb24gYlUoYSl7dGhpcy5hPWF9LApoSDpmdW5jdGlvbiBoSChh
-LGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKd2E6ZnVuY3Rpb24gd2EoKXt9LApTZzpmdW5jdGlvbiBTZygp
-e30sCnU4OmZ1bmN0aW9uIHU4KCl7fSwKQWo6ZnVuY3Rpb24gQWooKXt9LAplNzpmdW5jdGlvbiBlNyhh
-KXt0aGlzLmE9YX0sCnVIOmZ1bmN0aW9uIHVIKCl7fSwKQkg6ZnVuY3Rpb24gQkgoKXt9LApTTjpmdW5j
-dGlvbiBTTigpe30sCmV3OmZ1bmN0aW9uIGV3KCl7fSwKbHA6ZnVuY3Rpb24gbHAoKXt9LApUYjpmdW5j
-dGlvbiBUYigpe30sCkl2OmZ1bmN0aW9uIEl2KCl7fSwKQlQ6ZnVuY3Rpb24gQlQoKXt9LAp5WTpmdW5j
-dGlvbiB5WSgpe30sCnc2OmZ1bmN0aW9uIHc2KCl7fSwKSzU6ZnVuY3Rpb24gSzUoKXt9LApDbTpmdW5j
-dGlvbiBDbSgpe30sCkNROmZ1bmN0aW9uIENRKCl7fSwKdzQ6ZnVuY3Rpb24gdzQoKXt9LApyaDpmdW5j
-dGlvbiByaCgpe30sCkQ5OmZ1bmN0aW9uIEQ5KCl7fSwKaTc6ZnVuY3Rpb24gaTcoYSl7dGhpcy5hPWF9
-LApTeTpmdW5jdGlvbiBTeShhKXt0aGlzLmE9YX0sCktTOmZ1bmN0aW9uIEtTKGEsYil7dGhpcy5hPWEK
-dGhpcy5iPWJ9LApBMzpmdW5jdGlvbiBBMyhhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKSTQ6ZnVuY3Rp
-b24gSTQoYSl7dGhpcy5hPWF9LApGazpmdW5jdGlvbiBGayhhLGIpe3RoaXMuYT1hCnRoaXMuJHRpPWJ9
-LApSTzpmdW5jdGlvbiBSTyhhLGIsYyxkKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uYz1jCl8uJHRp
-PWR9LApDcTpmdW5jdGlvbiBDcShhLGIsYyxkKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uYz1jCl8u
-JHRpPWR9LAp4QzpmdW5jdGlvbiB4QyhhLGIsYyxkLGUpe3ZhciBfPXRoaXMKXy5iPWEKXy5jPWIKXy5k
-PWMKXy5lPWQKXy4kdGk9ZX0sCnZOOmZ1bmN0aW9uIHZOKGEpe3RoaXMuYT1hfSwKSlE6ZnVuY3Rpb24g
-SlEoYSl7dGhpcy5hPWF9LApHbTpmdW5jdGlvbiBHbSgpe30sCnZEOmZ1bmN0aW9uIHZEKGEpe3RoaXMu
-YT1hfSwKVXY6ZnVuY3Rpb24gVXYoYSl7dGhpcy5hPWF9LApFZzpmdW5jdGlvbiBFZyhhLGIsYyl7dGhp
-cy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LAptNjpmdW5jdGlvbiBtNigpe30sCkVvOmZ1bmN0aW9uIEVv
-KCl7fSwKV2s6ZnVuY3Rpb24gV2soKXt9LApjdDpmdW5jdGlvbiBjdChhLGIsYyxkLGUpe3ZhciBfPXRo
-aXMKXy5lPWEKXy5hPWIKXy5iPWMKXy5jPWQKXy5kPWV9LApJQTpmdW5jdGlvbiBJQSgpe30sCk93OmZ1
-bmN0aW9uIE93KCl7fSwKVzk6ZnVuY3Rpb24gVzkoYSxiLGMpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIK
-Xy5jPS0xCl8uZD1udWxsCl8uJHRpPWN9LApkVzpmdW5jdGlvbiBkVyhhKXt0aGlzLmE9YX0sCkZiOmZ1
-bmN0aW9uIEZiKCl7fSwKa0Y6ZnVuY3Rpb24ga0YoKXt9LAptazpmdW5jdGlvbiBtayhhLGIpe3RoaXMu
-YT1hCnRoaXMuYj1ifSwKS286ZnVuY3Rpb24gS28oYSl7dGhpcy5hPWF9LApmbTpmdW5jdGlvbiBmbShh
-KXt0aGlzLmE9YX0sCkxlOmZ1bmN0aW9uIExlKCl7fSwKSzc6ZnVuY3Rpb24gSzcoKXt9LApyQjpmdW5j
-dGlvbiByQigpe30sClhXOmZ1bmN0aW9uIFhXKCl7fSwKb2E6ZnVuY3Rpb24gb2EoKXt9fSxVPXsKeXU6
-ZnVuY3Rpb24oYSl7dmFyIHQscyxyLHEscCxvLG49SC5WTShbXSx1LmJQKQpmb3IodD1KLlU2KGEpLHM9
-Si5JVCh1LlIuYih0LnEoYSwiZGV0YWlscyIpKSk7cy5GKCk7KXtyPXMuZ2woKQpxPUouVTYocikKcD1I
-LnkocS5xKHIsImRlc2NyaXB0aW9uIikpCnE9cS5xKHIsImxpbmsiKQppZihxPT1udWxsKXE9bnVsbApl
-bHNle289Si5VNihxKQpxPW5ldyBVLk1sKEgueShvLnEocSwiaHJlZiIpKSxILlNjKG8ucShxLCJsaW5l
-IikpLEgueShvLnEocSwicGF0aCIpKSl9Qy5ObS5pKG4sbmV3IFUudUYocCxxKSl9cmV0dXJuIG5ldyBV
-LmQyKG4sVS5qZih0LnEoYSwiZWRpdHMiKSksSC55KHQucShhLCJleHBsYW5hdGlvbiIpKSxILlNjKHQu
-cShhLCJsaW5lIikpLEgueSh0LnEoYSwicGF0aCIpKSxVLk5kKHQucShhLCJ0cmFjZXMiKSkpfSwKamY6
-ZnVuY3Rpb24oYSl7dmFyIHQscyxyLHEKaWYoYT09bnVsbCl0PW51bGwKZWxzZXt0PUguVk0oW10sdS5m
-QSkKZm9yKHM9Si5JVCh1LlIuYihhKSk7cy5GKCk7KXtyPXMuZ2woKQpxPUouVTYocikKQy5ObS5pKHQs
-bmV3IFUuU2UoSC55KHEucShyLCJkZXNjcmlwdGlvbiIpKSxILnkocS5xKHIsImhyZWYiKSkpKX19cmV0
-dXJuIHR9LApOZDpmdW5jdGlvbihhKXt2YXIgdCxzCmlmKGE9PW51bGwpdD1udWxsCmVsc2V7dD1ILlZN
-KFtdLHUuaGgpCmZvcihzPUouSVQodS5SLmIoYSkpO3MuRigpOylDLk5tLmkodCxVLk5mKHMuZ2woKSkp
-fXJldHVybiB0fSwKTmY6ZnVuY3Rpb24oYSl7dmFyIHQscyxyLHEscCxvPSJkZXNjcmlwdGlvbiIsbj1K
-LlU2KGEpLG09SC55KG4ucShhLG8pKSxsPUguVk0oW10sdS5hSikKZm9yKG49Si5JVCh1LlIuYihuLnEo
-YSwiZW50cmllcyIpKSk7bi5GKCk7KXt0PW4uZ2woKQpzPUouVTYodCkKcj1ILnkocy5xKHQsbykpCnE9
-SC55KHMucSh0LCJmdW5jdGlvbiIpKQpzPXMucSh0LCJsaW5rIikKaWYocz09bnVsbClzPW51bGwKZWxz
-ZXtwPUouVTYocykKcz1uZXcgVS5NbChILnkocC5xKHMsImhyZWYiKSksSC5TYyhwLnEocywibGluZSIp
-KSxILnkocC5xKHMsInBhdGgiKSkpfUMuTm0uaShsLG5ldyBVLndiKHIscSxzKSl9cmV0dXJuIG5ldyBV
-LnlEKG0sbCl9LApkMjpmdW5jdGlvbiBkMihhLGIsYyxkLGUsZil7dmFyIF89dGhpcwpfLmE9YQpfLmI9
-YgpfLmM9YwpfLmQ9ZApfLmU9ZQpfLmY9Zn0sClNlOmZ1bmN0aW9uIFNlKGEsYil7dGhpcy5hPWEKdGhp
-cy5iPWJ9LAp1RjpmdW5jdGlvbiB1RihhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKTWw6ZnVuY3Rpb24g
-TWwoYSxiLGMpe3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuYz1jfSwKeUQ6ZnVuY3Rpb24geUQoYSxiKXt0
-aGlzLmE9YQp0aGlzLmI9Yn0sCndiOmZ1bmN0aW9uIHdiKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0
-aGlzLmM9Y319LEI9ewpZZjpmdW5jdGlvbihhKXt2YXIgdCxzLHIscT1ILnkoYS5xKDAsInJlZ2lvbnMi
-KSkscD1ILnkoYS5xKDAsIm5hdmlnYXRpb25Db250ZW50IikpLG89SC55KGEucSgwLCJzb3VyY2VDb2Rl
-IikpLG49SC5WTShbXSx1LnUpCmZvcih0PUouSVQodS5SLmIoYS5xKDAsImVkaXRzIikpKTt0LkYoKTsp
-e3M9dC5nbCgpCnI9Si5VNihzKQpDLk5tLmkobixuZXcgQi5qOChILlNjKHIucShzLCJsaW5lIikpLEgu
-eShyLnEocywiZXhwbGFuYXRpb24iKSksSC5TYyhyLnEocywib2Zmc2V0IikpKSl9cmV0dXJuIG5ldyBC
-LnFwKHEscCxvLG4pfSwKajg6ZnVuY3Rpb24gajgoYSxiLGMpe3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMu
-Yz1jfSwKcXA6ZnVuY3Rpb24gcXAoYSxiLGMsZCl7dmFyIF89dGhpcwpfLmE9YQpfLmI9YgpfLmM9Ywpf
-LmQ9ZH0sCkx1OmZ1bmN0aW9uIEx1KCl7fSwKT1M6ZnVuY3Rpb24oYSl7dmFyIHQKaWYoIShhPj02NSYm
-YTw9OTApKXQ9YT49OTcmJmE8PTEyMgplbHNlIHQ9ITAKcmV0dXJuIHR9LApZdTpmdW5jdGlvbihhLGIp
-e3ZhciB0PWEubGVuZ3RoLHM9YisyCmlmKHQ8cylyZXR1cm4hMQppZighQi5PUyhDLnhCLm0oYSxiKSkp
-cmV0dXJuITEKaWYoQy54Qi5tKGEsYisxKSE9PTU4KXJldHVybiExCmlmKHQ9PT1zKXJldHVybiEwCnJl
-dHVybiBDLnhCLm0oYSxzKT09PTQ3fX0sVD17R1Y6ZnVuY3Rpb24gR1YoKXt9fSxMPXsKSXE6ZnVuY3Rp
-b24oKXtDLkJaLkIoZG9jdW1lbnQsIkRPTUNvbnRlbnRMb2FkZWQiLG5ldyBMLmUoKSkKQy5vbC5CKHdp
-bmRvdywicG9wc3RhdGUiLG5ldyBMLkwoKSl9LAprejpmdW5jdGlvbihhKXt2YXIgdCxzPXUuaC5hKGEu
-cGFyZW50Tm9kZSkucXVlcnlTZWxlY3RvcigiOnNjb3BlID4gdWwiKSxyPXMuc3R5bGUscT0iIitDLkNE
-LnpRKHMub2Zmc2V0SGVpZ2h0KSoyKyJweCIKci5tYXhIZWlnaHQ9cQpyPUoucUYoYSkKcT1yLiR0aQp0
-PXEuQygifigxKSIpLmIobmV3IEwuV3gocyxhKSkKdS5NLmIobnVsbCkKVy5KRShyLmEsci5iLHQsITEs
-cS5kKX0sCnlYOmZ1bmN0aW9uKGEpe3ZhciB0LHMscixxLHAsbz0icXVlcnlTZWxlY3RvckFsbCIsbj1k
-b2N1bWVudC5xdWVyeVNlbGVjdG9yKGEpLG09dS5oCm4udG9TdHJpbmcKSC5EaChtLG0sIlQiLG8pCnQ9
-dS5TCnM9bmV3IFcud3oobi5xdWVyeVNlbGVjdG9yQWxsKCIubmF2LWxpbmsiKSx0KQpzLksocyxuZXcg
-TC5BTygpKQpILkRoKG0sbSwiVCIsbykKcj1uZXcgVy53eihuLnF1ZXJ5U2VsZWN0b3JBbGwoIi5yZWdp
-b24iKSx0KQppZihyLmdBKHIpIT09MCl7cT1uLnF1ZXJ5U2VsZWN0b3IoInRhYmxlW2RhdGEtcGF0aF0i
-KQpxLnRvU3RyaW5nCnIuSyhyLG5ldyBMLkhvKHEuZ2V0QXR0cmlidXRlKCJkYXRhLSIrbmV3IFcuU3ko
-bmV3IFcuaTcocSkpLk8oInBhdGgiKSkpKX1ILkRoKG0sbSwiVCIsbykKcD1uZXcgVy53eihuLnF1ZXJ5
-U2VsZWN0b3JBbGwoIi5wb3N0LWxpbmsiKSx0KQpwLksocCxuZXcgTC5JQygpKX0sCnR5OmZ1bmN0aW9u
-KGEpe3ZhciB0PXUuTgpyZXR1cm4gVy5xRChhLCJQT1NUIixQLkVGKFsiQ29udGVudC1UeXBlIiwiYXBw
-bGljYXRpb24vanNvbjsgY2hhcnNldD1VVEYtOCJdLHQsdCkpLlc3KG5ldyBMLkwxKCksdS5yKX0sCmFL
-OmZ1bmN0aW9uKGEpe3ZhciB0PVAuaEsoYSkuZ2hZKCkucSgwLCJsaW5lIikKcmV0dXJuIHQ9PW51bGw/
-bnVsbDpILkhwKHQsbnVsbCl9LApHNjpmdW5jdGlvbihhKXt2YXIgdD1QLmhLKGEpLmdoWSgpLnEoMCwi
-b2Zmc2V0IikKcmV0dXJuIHQ9PW51bGw/bnVsbDpILkhwKHQsbnVsbCl9LAp0MjpmdW5jdGlvbihhLGIp
-e3ZhciB0LHMscixxLHAsbyxuPXt9CnUuVi5iKGEpCnQ9bi5hPXUuaC5iKFcucWMoYS5jdXJyZW50VGFy
-Z2V0KSkuZ2V0QXR0cmlidXRlKCJocmVmIikKaWYoSi56bCh0LCI/Iikpe3M9Qy54Qi5Oaih0LDAsQy54
-Qi5PWSh0LCI/IikpCm4uYT1zCnI9c31lbHNlIHI9dAppZihiIT1udWxsKXtxPSQublUoKQpyPW4uYT1x
-Lm81KEQubnIocS50TShiKSxyKSl9cD1MLkc2KHQpCm89TC5hSyh0KQppZihwIT1udWxsKUwuYWYocixw
-LG8sbmV3IEwublQobixwLG8pKQplbHNlIEwuYWYocixudWxsLG51bGwsbmV3IEwuQloobikpCmEucHJl
-dmVudERlZmF1bHQoKX0sCnVtOmZ1bmN0aW9uKGEpe3JldHVybiBMLlFTKHUuVi5iKGEpKX0sClFTOmZ1
-bmN0aW9uKGEpe3ZhciB0PTAscz1QLkZYKHUueikscj0xLHEscD1bXSxvLG4sbSxsLGssagp2YXIgJGFz
-eW5jJHVtPVAubHooZnVuY3Rpb24oYixjKXtpZihiPT09MSl7cT1jCnQ9cn13aGlsZSh0cnVlKXN3aXRj
-aCh0KXtjYXNlIDA6az11LmguYShXLnFjKGEuY3VycmVudFRhcmdldCkpLmdldEF0dHJpYnV0ZSgiaHJl
-ZiIpCmEucHJldmVudERlZmF1bHQoKQptPWRvY3VtZW50Cm0uYm9keS5jbGFzc0xpc3QuYWRkKCJyZXJ1
-bm5pbmciKQpyPTMKdD02CnJldHVybiBQLmpRKEwudHkoayksJGFzeW5jJHVtKQpjYXNlIDY6dS5GLmEo
-Si5HcihXLnVWKG0uZGVmYXVsdFZpZXcpKSkucmVsb2FkKCkKcC5wdXNoKDUpCnQ9NApicmVhawpjYXNl
-IDM6cj0yCmo9cQpvPUguUnUoaikKbj1ILnRzKGopCkwucUooImhhbmRsZVBvc3RMaW5rQ2xpY2s6ICIr
-SC5kKG8pLG4pCndpbmRvdy5hbGVydCgiQ291bGQgbm90IGxvYWQgIitILmQoaykrIiAoIitILmQobykr
-IikuIikKcC5wdXNoKDUpCnQ9NApicmVhawpjYXNlIDI6cD1bMV0KY2FzZSA0OnI9MQptLmJvZHkuY2xh
-c3NMaXN0LnJlbW92ZSgicmVydW5uaW5nIikKdD1wLnBvcCgpCmJyZWFrCmNhc2UgNTpyZXR1cm4gUC55
-QyhudWxsLHMpCmNhc2UgMTpyZXR1cm4gUC5mMyhxLHMpfX0pCnJldHVybiBQLkRJKCRhc3luYyR1bSxz
-KX0sCnZVOmZ1bmN0aW9uKCl7dmFyIHQ9ZG9jdW1lbnQscz11LmgKSC5EaChzLHMsIlQiLCJxdWVyeVNl
-bGVjdG9yQWxsIikKdD1uZXcgVy53eih0LnF1ZXJ5U2VsZWN0b3JBbGwoIi5jb2RlIiksdS5TKQp0Lkso
-dCxuZXcgTC5HSCgpKX0sCmhYOmZ1bmN0aW9uKGEsYil7dmFyIHQ9dS5OClcucUQoSC5kKGEpKyI/cmVn
-aW9uPXJlZ2lvbiZvZmZzZXQ9IitILmQoYiksbnVsbCxQLkVGKFsiQ29udGVudC1UeXBlIiwiYXBwbGlj
-YXRpb24vanNvbjsgY2hhcnNldD1VVEYtOCJdLHQsdCkpLlc3KG5ldyBMLkRUKCksdS5QKS5PQShuZXcg
-TC5lSChhKSl9LApHNzpmdW5jdGlvbihhLGIsYyxkKXt2YXIgdCxzCmlmKCFKLnJZKGEpLlRjKGEsIi5k
-YXJ0Iikpe0wuQkUoYSxuZXcgQi5xcCgiIiwiIiwiIixDLnhEKSkKTC5CWChhLG51bGwpCmlmKGQhPW51
-bGwpZC4kMCgpCnJldHVybn10PUMueEIudGcoYSwiPyIpP2ErIiZpbmxpbmU9dHJ1ZSI6YSsiP2lubGlu
-ZT10cnVlIgpzPXUuTgpXLnFEKHQsbnVsbCxQLkVGKFsiQ29udGVudC1UeXBlIiwiYXBwbGljYXRpb24v
-anNvbjsgY2hhcnNldD1VVEYtOCJdLHMscykpLlc3KG5ldyBMLnpEKGEsYixjLGQpLHUuUCkuT0EobmV3
-IEwuT0UoYSkpfSwKR2U6ZnVuY3Rpb24oKXt2YXIgdD0iL19wcmV2aWV3L25hdmlnYXRpb25UcmVlLmpz
-b24iLHM9dS5OClcucUQodCxudWxsLFAuRUYoWyJDb250ZW50LVR5cGUiLCJhcHBsaWNhdGlvbi9qc29u
-OyBjaGFyc2V0PVVURi04Il0scyxzKSkuVzcobmV3IEwuVFcoKSx1LlApLk9BKG5ldyBMLnhyKHQpKX0s
-CnFKOmZ1bmN0aW9uKGEsYil7dmFyIHQKd2luZG93CmlmKHR5cGVvZiBjb25zb2xlIT0idW5kZWZpbmVk
-Iil3aW5kb3cuY29uc29sZS5lcnJvcihhKQp3aW5kb3cKdD1ILmQoYikKaWYodHlwZW9mIGNvbnNvbGUh
-PSJ1bmRlZmluZWQiKXdpbmRvdy5jb25zb2xlLmVycm9yKHQpfSwKcU86ZnVuY3Rpb24oYSl7dmFyIHQ9
-YS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSxzPXQuYm90dG9tLHI9d2luZG93LmlubmVySGVpZ2h0Cmlm
-KHR5cGVvZiByIT09Im51bWJlciIpcmV0dXJuIEgucFkocikKaWYocz5yKUouZGgoYSkKZWxzZSBpZih0
-LnRvcDwwKUouZGgoYSl9LApmRzpmdW5jdGlvbihhLGIpe3ZhciB0LHMscgppZihhIT1udWxsKXt0PWRv
-Y3VtZW50CnM9dC5nZXRFbGVtZW50QnlJZCgibyIrSC5kKGEpKQpyPXQucXVlcnlTZWxlY3RvcigiLmxp
-bmUtIitILmQoYikpCmlmKHMhPW51bGwpe0wucU8ocykKSi5kUihzKS5pKDAsInRhcmdldCIpfWVsc2Ug
-aWYociE9bnVsbClMLnFPKHIucGFyZW50RWxlbWVudCkKaWYociE9bnVsbClKLmRSKHUuaC5hKHIucGFy
-ZW50Tm9kZSkpLmkoMCwiaGlnaGxpZ2h0Iil9ZWxzZSBMLnFPKGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
-KCJ1bml0LW5hbWUiKSl9LAphZjpmdW5jdGlvbihhLGIsYyxkKXt2YXIgdCxzLHI9TC5HNih3aW5kb3cu
-bG9jYXRpb24uaHJlZikscT1MLmFLKHdpbmRvdy5sb2NhdGlvbi5ocmVmKQppZihyIT1udWxsKXt0PWRv
-Y3VtZW50LmdldEVsZW1lbnRCeUlkKCJvIitILmQocikpCmlmKHQhPW51bGwpSi5kUih0KS5SKDAsInRh
-cmdldCIpfWlmKHEhPW51bGwpe3M9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmxpbmUtIitILmQocSkp
-CmlmKHMhPW51bGwpSi5kUihzLnBhcmVudEVsZW1lbnQpLlIoMCwiaGlnaGxpZ2h0Iil9aWYoYT09d2lu
-ZG93LmxvY2F0aW9uLnBhdGhuYW1lKXtMLmZHKGIsYykKZC4kMCgpfWVsc2UgTC5HNyhhLGIsYyxkKX0s
-Ckx4OmZ1bmN0aW9uKGEsYil7dmFyIHQKaWYoYT09PTEpdD1iCmVsc2UgdD1iKyJzIgpyZXR1cm4gdH0s
-ClQxOmZ1bmN0aW9uKGIwKXt2YXIgdCxzLHIscSxwLG8sbixtLGwsayxqLGksaCxnLGYsZSxkLGMsYixh
-LGEwLGExLGEyLGEzLGE0LGE1LGE2LGE3LGE4PWRvY3VtZW50LGE5PWE4LnF1ZXJ5U2VsZWN0b3IoIi5l
-ZGl0LXBhbmVsIC5wYW5lbC1jb250ZW50IikKSi5sNShhOSwiIikKaWYoYjA9PW51bGwpe2E4PWE4LmNy
-ZWF0ZUVsZW1lbnQoInAiKQphOC50ZXh0Q29udGVudD0iU2VlIGRldGFpbHMgYWJvdXQgYSBwcm9wb3Nl
-ZCBlZGl0LiIKQy5MdC5zRChhOCxILlZNKFsicGxhY2Vob2xkZXIiXSx1LnMpKQphOS5hcHBlbmRDaGls
-ZChhOCkKcmV0dXJufXQ9YjAuZQpzPSQublUoKQpyPXMudE0odCkKcT1iMC5jCnA9cy5IUCh0LEouVDAo
-YTgucXVlcnlTZWxlY3RvcigiLnJvb3QiKS50ZXh0Q29udGVudCkpCm89YjAuZApzPWE4LmNyZWF0ZUVs
-ZW1lbnQoInAiKQpuPXUuaApuLmIoYTkuYXBwZW5kQ2hpbGQocykpLmFwcGVuZENoaWxkKGE4LmNyZWF0
-ZVRleHROb2RlKEguZChxKSsiIGF0ICIrSC5kKHApKyI6IitILmQobykrIi4iKSkKcz1iMC5hCmlmKHMu
-bGVuZ3RoIT09MCl7bT1hOC5jcmVhdGVFbGVtZW50KCJwIikKbS50ZXh0Q29udGVudD0iRWRpdCByYXRp
-b25hbGU6IgphOS5hcHBlbmRDaGlsZChtKQptPWE4LmNyZWF0ZUVsZW1lbnQoInVsIikKbD1uLmIoYTku
-YXBwZW5kQ2hpbGQobSkpCmZvcihtPXMubGVuZ3RoLGs9MDtrPHMubGVuZ3RoO3MubGVuZ3RoPT09bXx8
-KDAsSC5saykocyksKytrKXtqPXNba10KaT1hOC5jcmVhdGVFbGVtZW50KCJsaSIpCmg9bC5hcHBlbmRD
-aGlsZChpKQpoLmFwcGVuZENoaWxkKGE4LmNyZWF0ZVRleHROb2RlKGouYSkpCmc9ai5iCmlmKGchPW51
-bGwpe2guYXBwZW5kQ2hpbGQoYTguY3JlYXRlVGV4dE5vZGUoIiAoIikpCmguYXBwZW5kQ2hpbGQoTC5j
-NChnLHIpKQpoLmFwcGVuZENoaWxkKGE4LmNyZWF0ZVRleHROb2RlKCIpIikpfX19cz1iMC5iCmlmKHMh
-PW51bGwpZm9yKG09cy5sZW5ndGgsaT11LnMsZj11Llgsaz0wO2s8cy5sZW5ndGg7cy5sZW5ndGg9PT1t
-fHwoMCxILmxrKShzKSwrK2spe2U9c1trXQpkPWE4LmNyZWF0ZUVsZW1lbnQoInAiKQpjPW4uYihhOS5h
-cHBlbmRDaGlsZChkKSkKZD1hOC5jcmVhdGVFbGVtZW50KCJhIikKYj1uLmIoYy5hcHBlbmRDaGlsZChk
-KSkKYi5hcHBlbmRDaGlsZChhOC5jcmVhdGVUZXh0Tm9kZShlLmEpKQpiLnNldEF0dHJpYnV0ZSgiaHJl
-ZiIsZS5iKQpkPWYuYihILlZNKFsicG9zdC1saW5rIiwiYmVmb3JlLWFwcGx5Il0saSkpCmE9Si5kUihi
-KQphLlYxKDApCmEuRlYoMCxkKX1mb3Iocz1iMC5mLG49cy5sZW5ndGgsbT11LnMsaT11Llgsaz0wO2s8
-cy5sZW5ndGg7cy5sZW5ndGg9PT1ufHwoMCxILmxrKShzKSwrK2spe2EwPXNba10KZj1hOC5jcmVhdGVF
-bGVtZW50KCJwIikKZD1pLmIoSC5WTShbInRyYWNlIl0sbSkpCmE9Si5kUihmKQphLlYxKDApCmEuRlYo
-MCxkKQphMT1hOS5hcHBlbmRDaGlsZChmKQphMS5hcHBlbmRDaGlsZChhOC5jcmVhdGVUZXh0Tm9kZSgi
-TnVsbGFiaWxpdHkgdHJhY2UgZm9yOiAiKSkKZj1hOC5jcmVhdGVFbGVtZW50KCJzcGFuIikKZD1pLmIo
-SC5WTShbInR5cGUtZGVzY3JpcHRpb24iXSxtKSkKYT1KLmRSKGYpCmEuVjEoMCkKYS5GVigwLGQpCmYu
-YXBwZW5kQ2hpbGQoYTguY3JlYXRlVGV4dE5vZGUoYTAuYSkpCmExLmFwcGVuZENoaWxkKGYpCmY9YTgu
-Y3JlYXRlRWxlbWVudCgidWwiKQpkPWkuYihILlZNKFsidHJhY2UiXSxtKSkKYT1KLmRSKGYpCmEuVjEo
-MCkKYS5GVigwLGQpCmEyPWExLmFwcGVuZENoaWxkKGYpCmZvcihmPWEwLmIsZD1mLmxlbmd0aCxhMz0w
-O2EzPGYubGVuZ3RoO2YubGVuZ3RoPT09ZHx8KDAsSC5saykoZiksKythMyl7YTQ9ZlthM10KYTU9YTgu
-Y3JlYXRlRWxlbWVudCgibGkiKQpKLmw1KGE1LCImI3gyNzRGOyAiKQphNj1hMi5hcHBlbmRDaGlsZChh
-NSkKYTU9YTguY3JlYXRlRWxlbWVudCgic3BhbiIpCmE3PWkuYihILlZNKFsiZnVuY3Rpb24iXSxtKSkK
-YT1KLmRSKGE1KQphLlYxKDApCmEuRlYoMCxhNykKYTc9YTQuYgppZihhNz09bnVsbClhNz0idW5rbm93
-biIKYTUuYXBwZW5kQ2hpbGQoYTguY3JlYXRlVGV4dE5vZGUoYTcpKQphNi5hcHBlbmRDaGlsZChhNSkK
-Zz1hNC5jCmlmKGchPW51bGwpe2E2LmFwcGVuZENoaWxkKGE4LmNyZWF0ZVRleHROb2RlKCIgKCIpKQph
-Ni5hcHBlbmRDaGlsZChMLmM0KGcscikpCmE2LmFwcGVuZENoaWxkKGE4LmNyZWF0ZVRleHROb2RlKCIp
-IikpfWE2LmFwcGVuZENoaWxkKGE4LmNyZWF0ZVRleHROb2RlKCI6ICIpKQphNi5hcHBlbmRDaGlsZChh
-OC5jcmVhdGVUZXh0Tm9kZShhNC5hKSl9fX0sCkxIOmZ1bmN0aW9uKGEsYil7dmFyIHQscyxyLHEscCxv
-LG4sbSxsLGssaixpLGgsZyxmLGUsZD1kb2N1bWVudCxjPWQucXVlcnlTZWxlY3RvcigiLmVkaXQtbGlz
-dCAucGFuZWwtY29udGVudCIpCkoubDUoYywiIikKdD1kLmNyZWF0ZUVsZW1lbnQoInAiKQpzPXUuaApy
-PXMuYihjLmFwcGVuZENoaWxkKHQpKQpxPWIubGVuZ3RoCmlmKHE9PT0wKXIuYXBwZW5kQ2hpbGQoZC5j
-cmVhdGVUZXh0Tm9kZSgiTm8gcHJvcG9zZWQgZWRpdHMiKSkKZWxzZSByLmFwcGVuZENoaWxkKGQuY3Jl
-YXRlVGV4dE5vZGUoIiIrcSsiIHByb3Bvc2VkICIrTC5MeChxLCJlZGl0IikrIjoiKSkKdD1kLmNyZWF0
-ZUVsZW1lbnQoInVsIikKcD1zLmIoYy5hcHBlbmRDaGlsZCh0KSkKZm9yKHQ9Yi5sZW5ndGgsbz11Lmks
-bj11LlEsbT1uLkMoIn4oMSkiKSxsPXUuTSxuPW4uZCxrPTA7azxiLmxlbmd0aDtiLmxlbmd0aD09PXR8
-fCgwLEgubGspKGIpLCsrayl7aj1iW2tdCmk9ZC5jcmVhdGVFbGVtZW50KCJsaSIpCmg9cy5iKHAuYXBw
-ZW5kQ2hpbGQoaSkpCkouZFIoaCkuaSgwLCJlZGl0IikKaT1kLmNyZWF0ZUVsZW1lbnQoImEiKQpnPW8u
-YihoLmFwcGVuZENoaWxkKGkpKQpnLmNsYXNzTGlzdC5hZGQoImVkaXQtbGluayIpCmY9ai5jCmk9SC5k
-KGYpCmcuc2V0QXR0cmlidXRlKCJkYXRhLSIrbmV3IFcuU3kobmV3IFcuaTcoZykpLk8oIm9mZnNldCIp
-LGkpCmU9ai5hCmk9SC5kKGUpCmcuc2V0QXR0cmlidXRlKCJkYXRhLSIrbmV3IFcuU3kobmV3IFcuaTco
-ZykpLk8oImxpbmUiKSxpKQpnLmFwcGVuZENoaWxkKGQuY3JlYXRlVGV4dE5vZGUoImxpbmUgIitILmQo
-ZSkpKQppPW0uYihuZXcgTC5FRShmLGUsYSkpCmwuYihudWxsKQpXLkpFKGcsImNsaWNrIixpLCExLG4p
-CmguYXBwZW5kQ2hpbGQoZC5jcmVhdGVUZXh0Tm9kZSgiOiAiK0guZChqLmIpKSl9TC5UMShudWxsKX0s
-CkZyOmZ1bmN0aW9uKGEsYixjKXt2YXIgdCxzLHIscT13aW5kb3cubG9jYXRpb24scD1QLmhLKChxJiZD
-LkV4KS5nRHIocSkrSC5kKGEpKQpxPXUuegp0PVAuRmwodS5OLHEpCmlmKGIhPW51bGwpdC5ZKDAsIm9m
-ZnNldCIsSC5kKGIpKQppZihjIT1udWxsKXQuWSgwLCJsaW5lIixILmQoYykpCnA9cC5ubSgwLHQuYT09
-PTA/bnVsbDp0KQpzPXdpbmRvdy5oaXN0b3J5CnI9cC53KDApCnMudG9TdHJpbmcKcy5wdXNoU3RhdGUo
-bmV3IFAuQmYoW10sW10pLlB2KFAuRmwocSxxKSksIiIscil9LApFbjpmdW5jdGlvbihhKXt2YXIgdD1K
-LmJiKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5yb290IikudGV4dENvbnRlbnQsIi8iKQppZihDLnhC
-Lm4oYSx0KSlyZXR1cm4gQy54Qi5HKGEsdC5sZW5ndGgpCmVsc2UgcmV0dXJuIGF9LApCWDpmdW5jdGlv
-bihhLGIpe3ZhciB0LHMscj17fQpyLmE9YQphPUwuRW4oYSkKci5hPWEKdD1kb2N1bWVudAp0LnF1ZXJ5
-U2VsZWN0b3IoIiN1bml0LW5hbWUiKS50ZXh0Q29udGVudD1hCnM9dS5oCkguRGgocyxzLCJUIiwicXVl
-cnlTZWxlY3RvckFsbCIpCnQ9bmV3IFcud3oodC5xdWVyeVNlbGVjdG9yQWxsKCIubmF2LXBhbmVsIC5u
-YXYtbGluayIpLHUuUykKdC5LKHQsbmV3IEwuVlMocikpfSwKQkU6ZnVuY3Rpb24oYSxiKXt2YXIgdD0i
-LnJlZ2lvbnMiLHM9ZG9jdW1lbnQscj1zLnF1ZXJ5U2VsZWN0b3IodCkscT1zLnF1ZXJ5U2VsZWN0b3Io
-Ii5jb2RlIikKSi50SChyLGIuYSwkLktHKCkpCkoudEgocSxiLmIsJC5LRygpKQpMLkxIKGEsYi5kKQpM
-LnZVKCkKTC55WCgiLmNvZGUiKQpMLnlYKHQpfSwKdFg6ZnVuY3Rpb24oYSxiKXt2YXIgdCxzLHIscSxw
-LG8sbixtLGwsayxqPWRvY3VtZW50LGk9ai5jcmVhdGVFbGVtZW50KCJ1bCIpLGg9dS5oLGc9aC5iKGEu
-YXBwZW5kQ2hpbGQoaSkpCmZvcihpPWIubGVuZ3RoLHQ9dS5NLHM9MDtzPGIubGVuZ3RoO2IubGVuZ3Ro
-PT09aXx8KDAsSC5saykoYiksKytzKXtyPWJbc10KcT1qLmNyZWF0ZUVsZW1lbnQoImxpIikKcD1oLmIo
-Zy5hcHBlbmRDaGlsZChxKSkKcT1KLlJFKHApCmlmKHIuYT09PUMuWTIpe3EuZ0QocCkuaSgwLCJkaXIi
-KQpxPWouY3JlYXRlRWxlbWVudCgic3BhbiIpCm89aC5iKHAuYXBwZW5kQ2hpbGQocSkpCnE9Si5SRShv
-KQpxLmdEKG8pLmkoMCwiYXJyb3ciKQpxLnNoZihvLCImI3gyNUJDOyIpCnE9ai5jcmVhdGVFbGVtZW50
-KCJzcGFuIikKSi5sNShoLmIocC5hcHBlbmRDaGlsZChxKSksIiYjeDFGNEMxOyIpCnAuYXBwZW5kQ2hp
-bGQoai5jcmVhdGVUZXh0Tm9kZShyLmIpKQpMLnRYKHAsci5jKQpMLmt6KG8pfWVsc2V7cS5zaGYocCwi
-JiN4MUY0QzQ7IikKcT1qLmNyZWF0ZUVsZW1lbnQoImEiKQpuPWguYihwLmFwcGVuZENoaWxkKHEpKQpx
-PUouUkUobikKcS5nRChuKS5pKDAsIm5hdi1saW5rIikKbi5zZXRBdHRyaWJ1dGUoImRhdGEtIituZXcg
-Vy5TeShuZXcgVy5pNyhuKSkuTygibmFtZSIpLHIuZCkKbi5zZXRBdHRyaWJ1dGUoImhyZWYiLHIuZSkK
-bi5hcHBlbmRDaGlsZChqLmNyZWF0ZVRleHROb2RlKHIuYikpCnE9cS5nVmwobikKbT1xLiR0aQptLkMo
-In4oMSkiKS5iKEwuWE4oKSkKdC5iKG51bGwpClcuSkUocS5hLHEuYixMLlhOKCksITEsbS5kKQpsPXIu
-ZgppZih0eXBlb2YgbCE9PSJudW1iZXIiKXJldHVybiBsLm9zKCkKaWYobD4wKXtxPWouY3JlYXRlRWxl
-bWVudCgic3BhbiIpCms9aC5iKHAuYXBwZW5kQ2hpbGQocSkpCkouZFIoaykuaSgwLCJlZGl0LWNvdW50
-IikKcT0iIitsKyIgIgppZihsPT09MSltPSJlZGl0IgplbHNlIG09ImVkaXRzIgprLnNldEF0dHJpYnV0
-ZSgidGl0bGUiLHErbSkKay5hcHBlbmRDaGlsZChqLmNyZWF0ZVRleHROb2RlKEMuam4udyhsKSkpfX19
-fSwKYzQ6ZnVuY3Rpb24oYSxiKXt2YXIgdD1kb2N1bWVudCxzPXQuY3JlYXRlRWxlbWVudCgiYSIpCnUu
-aS5iKHMpCnMuYXBwZW5kQ2hpbGQodC5jcmVhdGVUZXh0Tm9kZShILmQoYS5jKSsiOiIrSC5kKGEuYikp
-KQp0PUQubnIoYixhLmEpCnMuc2V0QXR0cmlidXRlKCJocmVmIiwkLm5VKCkubzUodCkpCnMuY2xhc3NM
-aXN0LmFkZCgibmF2LWxpbmsiKQpyZXR1cm4gc30sCmU6ZnVuY3Rpb24gZSgpe30sClZXOmZ1bmN0aW9u
-IFZXKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCm9aOmZ1bmN0aW9uIG9aKCl7fSwK
-anI6ZnVuY3Rpb24ganIoKXt9LApxbDpmdW5jdGlvbiBxbCgpe30sCkw6ZnVuY3Rpb24gTCgpe30sCld4
-OmZ1bmN0aW9uIFd4KGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApBTzpmdW5jdGlvbiBBTygpe30sCmRO
-OmZ1bmN0aW9uIGROKCl7fSwKSG86ZnVuY3Rpb24gSG8oYSl7dGhpcy5hPWF9LAp4ejpmdW5jdGlvbiB4
-eihhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKSUM6ZnVuY3Rpb24gSUMoKXt9LApMMTpmdW5jdGlvbiBM
-MSgpe30sCm5UOmZ1bmN0aW9uIG5UKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCkJa
-OmZ1bmN0aW9uIEJaKGEpe3RoaXMuYT1hfSwKR0g6ZnVuY3Rpb24gR0goKXt9LApEVDpmdW5jdGlvbiBE
-VCgpe30sCmVIOmZ1bmN0aW9uIGVIKGEpe3RoaXMuYT1hfSwKekQ6ZnVuY3Rpb24gekQoYSxiLGMsZCl7
-dmFyIF89dGhpcwpfLmE9YQpfLmI9YgpfLmM9YwpfLmQ9ZH0sCk9FOmZ1bmN0aW9uIE9FKGEpe3RoaXMu
-YT1hfSwKVFc6ZnVuY3Rpb24gVFcoKXt9LAp4cjpmdW5jdGlvbiB4cihhKXt0aGlzLmE9YX0sCkVFOmZ1
-bmN0aW9uIEVFKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sClFMOmZ1bmN0aW9uIFFM
-KGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApWUzpmdW5jdGlvbiBWUyhhKXt0aGlzLmE9YX0sClhBOmZ1
-bmN0aW9uIFhBKCl7fSwKbUs6ZnVuY3Rpb24oYSl7dmFyIHQscyxyLHEscCxvLG49SC5WTShbXSx1LmZo
-KQpmb3IodD1KLklUKHUuUi5iKGEpKTt0LkYoKTspe3M9dC5nbCgpCnI9Si5VNihzKQpxPUwucDIoSC55
-KHIucShzLCJ0eXBlIikpKQpwPUgueShyLnEocywibmFtZSIpKQpvPXIucShzLCJzdWJ0cmVlIikKbz1v
-PT1udWxsP251bGw6TC5tSyhvKQpDLk5tLmkobixuZXcgTC5aWihxLHAsbyxILnkoci5xKHMsInBhdGgi
-KSksSC55KHIucShzLCJocmVmIikpLEguU2Moci5xKHMsImVkaXRDb3VudCIpKSkpfXJldHVybiBufSwK
-cDI6ZnVuY3Rpb24oYSl7c3dpdGNoKGEpe2Nhc2UiZGlyZWN0b3J5IjpyZXR1cm4gQy5ZMgpjYXNlImZp
-bGUiOnJldHVybiBDLnJmCmRlZmF1bHQ6dGhyb3cgSC5iKFAuUFYoIlVucmVjb2duaXplZCBuYXZpZ2F0
-aW9uIHRyZWUgbm9kZSB0eXBlOiAiK0guZChhKSkpfX0sClpaOmZ1bmN0aW9uIFpaKGEsYixjLGQsZSxm
-KXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uYz1jCl8uZD1kCl8uZT1lCl8uZj1mfSwKeTg6ZnVuY3Rp
-b24geTgoYSl7dGhpcy5iPWF9LApJVjpmdW5jdGlvbiBJVihhLGIsYyxkKXt2YXIgXz10aGlzCl8uZD1h
-Cl8uZT1iCl8uZj1jCl8ucj1kfX0sTT17CllGOmZ1bmN0aW9uKGEsYil7dmFyIHQscyxyLHEscCxvLG4K
-Zm9yKHQ9Yi5sZW5ndGgscz0xO3M8dDsrK3Mpe2lmKGJbc109PW51bGx8fGJbcy0xXSE9bnVsbCljb250
-aW51ZQpmb3IoO3Q+PTE7dD1yKXtyPXQtMQppZihiW3JdIT1udWxsKWJyZWFrfXE9bmV3IFAuUm4oIiIp
-CnA9YSsiKCIKcS5hPXAKbz1ILnFDKGIsMCx0LEgudDYoYikuZCkKbj1vLiR0aQpuPXArbmV3IEguQTgo
-byxuLkMoInFVKGFMLkUpIikuYihuZXcgTS5ObygpKSxuLkMoIkE4PGFMLkUscVU+IikpLkgoMCwiLCAi
-KQpxLmE9bgpxLmE9bisoIik6IHBhcnQgIisocy0xKSsiIHdhcyBudWxsLCBidXQgcGFydCAiK3MrIiB3
-YXMgbm90LiIpCnRocm93IEguYihQLnhZKHEudygwKSkpfX0sCmxJOmZ1bmN0aW9uIGxJKGEpe3RoaXMu
-YT1hfSwKTWk6ZnVuY3Rpb24gTWkoKXt9LApxNzpmdW5jdGlvbiBxNygpe30sCk5vOmZ1bmN0aW9uIE5v
-KCl7fX0sWD17CkNMOmZ1bmN0aW9uKGEsYil7dmFyIHQscyxyLHEscCxvPWIueFooYSkKYi5oSyhhKQpp
-ZihvIT1udWxsKWE9Si5LVihhLG8ubGVuZ3RoKQp0PXUucwpzPUguVk0oW10sdCkKcj1ILlZNKFtdLHQp
-CnQ9YS5sZW5ndGgKaWYodCE9PTAmJmIucjQoQy54Qi5XKGEsMCkpKXtpZigwPj10KXJldHVybiBILk9I
-KGEsMCkKQy5ObS5pKHIsYVswXSkKcT0xfWVsc2V7Qy5ObS5pKHIsIiIpCnE9MH1mb3IocD1xO3A8dDsr
-K3ApaWYoYi5yNChDLnhCLlcoYSxwKSkpe0MuTm0uaShzLEMueEIuTmooYSxxLHApKQpDLk5tLmkocixh
-W3BdKQpxPXArMX1pZihxPHQpe0MuTm0uaShzLEMueEIuRyhhLHEpKQpDLk5tLmkociwiIil9cmV0dXJu
-IG5ldyBYLldEKGIsbyxzLHIpfSwKV0Q6ZnVuY3Rpb24gV0QoYSxiLGMsZCl7dmFyIF89dGhpcwpfLmE9
-YQpfLmI9YgpfLmQ9YwpfLmU9ZH0sCnFSOmZ1bmN0aW9uIHFSKGEpe3RoaXMuYT1hfSwKSlQ6ZnVuY3Rp
-b24oYSl7cmV0dXJuIG5ldyBYLmR2KGEpfSwKZHY6ZnVuY3Rpb24gZHYoYSl7dGhpcy5hPWF9fSxPPXsK
-Umg6ZnVuY3Rpb24oKXt2YXIgdCxzLHIscSxwLG8sbixtLGwsayxqLGk9bnVsbAppZihQLnVvKCkuZ0Zp
-KCkhPT0iZmlsZSIpcmV0dXJuICQuRWIoKQp0PVAudW8oKQppZighQy54Qi5UYyh0LmdJaSh0KSwiLyIp
-KXJldHVybiAkLkViKCkKcz1QLlBpKGksMCwwKQpyPVAuelIoaSwwLDApCnE9UC5PZShpLDAsMCwhMSkK
-cD1QLmxlKGksMCwwLGkpCm89UC50RyhpLDAsMCkKbj1QLndCKGkscykKbT1zPT09ImZpbGUiCmlmKHE9
-PW51bGwpdD1yLmxlbmd0aCE9PTB8fG4hPW51bGx8fG0KZWxzZSB0PSExCmlmKHQpcT0iIgp0PXE9PW51
-bGwKbD0hdAprPVAua2EoImEvYiIsMCwzLGkscyxsKQpqPXMubGVuZ3RoPT09MAppZihqJiZ0JiYhQy54
-Qi5uKGssIi8iKSlrPVAud0Yoaywhanx8bCkKZWxzZSBrPVAueGUoaykKaWYobmV3IFAuRG4ocyxyLHQm
-JkMueEIubihrLCIvLyIpPyIiOnEsbixrLHAsbykudDQoKT09PSJhXFxiIilyZXR1cm4gJC5LaygpCnJl
-dHVybiAkLmJEKCl9LAp6TDpmdW5jdGlvbiB6TCgpe319LEU9e09GOmZ1bmN0aW9uIE9GKGEsYixjKXt0
-aGlzLmQ9YQp0aGlzLmU9Ygp0aGlzLmY9Y319LEY9e3J1OmZ1bmN0aW9uIHJ1KGEsYixjLGQpe3ZhciBf
-PXRoaXMKXy5kPWEKXy5lPWIKXy5mPWMKXy5yPWR9fSxEPXsKUlg6ZnVuY3Rpb24oKXt2YXIgdCxzLHI9
-UC51bygpCmlmKEouUk0ociwkLkk2KSlyZXR1cm4gJC5GZgokLkk2PXIKaWYoJC5IaygpPT0kLkViKCkp
-cmV0dXJuICQuRmY9ci5aSSgiLiIpLncoMCkKZWxzZXt0PXIudDQoKQpzPXQubGVuZ3RoLTEKcmV0dXJu
-ICQuRmY9cz09PTA/dDpDLnhCLk5qKHQsMCxzKX19LApucjpmdW5jdGlvbihhLGIpe3ZhciB0PW51bGwK
-cmV0dXJuICQublUoKS5xNygwLGEsYix0LHQsdCx0LHQsdCl9fQp2YXIgdz1bQyxILEosUCxXLFUsQixU
-LEwsTSxYLE8sRSxGLERdCmh1bmtIZWxwZXJzLnNldEZ1bmN0aW9uTmFtZXNJZk5lY2Vzc2FyeSh3KQp2
-YXIgJD17fQpILmVvLnByb3RvdHlwZT17fQpKLnZCLnByb3RvdHlwZT17CkROOmZ1bmN0aW9uKGEsYil7
-cmV0dXJuIGE9PT1ifSwKZ2lPOmZ1bmN0aW9uKGEpe3JldHVybiBILmVRKGEpfSwKdzpmdW5jdGlvbihh
-KXtyZXR1cm4iSW5zdGFuY2Ugb2YgJyIrSC5kKEguTShhKSkrIicifSwKZTc6ZnVuY3Rpb24oYSxiKXt1
-Lm8uYihiKQp0aHJvdyBILmIoUC5scihhLGIuZ1dhKCksYi5nbmQoKSxiLmdWbSgpKSl9fQpKLnlFLnBy
-b3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7cmV0dXJuIFN0cmluZyhhKX0sCmdpTzpmdW5jdGlvbihhKXty
-ZXR1cm4gYT81MTkwMTg6MjE4MTU5fSwKJGlhMjoxfQpKLllFLnByb3RvdHlwZT17CkROOmZ1bmN0aW9u
-KGEsYil7cmV0dXJuIG51bGw9PWJ9LAp3OmZ1bmN0aW9uKGEpe3JldHVybiJudWxsIn0sCmdpTzpmdW5j
-dGlvbihhKXtyZXR1cm4gMH0sCmU3OmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuU2ooYSx1Lm8uYihi
-KSl9LAokaWM4OjF9CkouTUYucHJvdG90eXBlPXsKZ2lPOmZ1bmN0aW9uKGEpe3JldHVybiAwfSwKdzpm
-dW5jdGlvbihhKXtyZXR1cm4gU3RyaW5nKGEpfSwKJGl2bToxfQpKLmlDLnByb3RvdHlwZT17fQpKLmtk
-LnByb3RvdHlwZT17fQpKLmM1LnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7dmFyIHQ9YVskLncoKV0K
-aWYodD09bnVsbClyZXR1cm4gdGhpcy50KGEpCnJldHVybiJKYXZhU2NyaXB0IGZ1bmN0aW9uIGZvciAi
-K0guZChKLmoodCkpfSwKJFM6ZnVuY3Rpb24oKXtyZXR1cm57ZnVuYzoxLG9wdDpbLCwsLCwsLCwsLCws
-LCwsLF19fSwKJGlFSDoxfQpKLmpkLnByb3RvdHlwZT17Cmk6ZnVuY3Rpb24oYSxiKXtILnQ2KGEpLmQu
-YihiKQppZighIWEuZml4ZWQkbGVuZ3RoKUgudmgoUC5MNCgiYWRkIikpCmEucHVzaChiKX0sClc0OmZ1
-bmN0aW9uKGEsYil7dmFyIHQKaWYoISFhLmZpeGVkJGxlbmd0aClILnZoKFAuTDQoInJlbW92ZUF0Iikp
-CnQ9YS5sZW5ndGgKaWYoYj49dCl0aHJvdyBILmIoUC54KGIsbnVsbCkpCnJldHVybiBhLnNwbGljZShi
-LDEpWzBdfSwKVUc6ZnVuY3Rpb24oYSxiLGMpe3ZhciB0LHMscgpILnQ2KGEpLkMoImNYPDE+IikuYihj
-KQppZighIWEuZml4ZWQkbGVuZ3RoKUgudmgoUC5MNCgiaW5zZXJ0QWxsIikpCnQ9YS5sZW5ndGgKUC53
-QShiLDAsdCwiaW5kZXgiKQpzPWMubGVuZ3RoCnRoaXMuc0EoYSx0K3MpCnI9YitzCnRoaXMuWVcoYSxy
-LGEubGVuZ3RoLGEsYikKdGhpcy52ZyhhLGIscixjKX0sCm12OmZ1bmN0aW9uKGEpe2lmKCEhYS5maXhl
-ZCRsZW5ndGgpSC52aChQLkw0KCJyZW1vdmVMYXN0IikpCmlmKGEubGVuZ3RoPT09MCl0aHJvdyBILmIo
-SC5IWShhLC0xKSkKcmV0dXJuIGEucG9wKCl9LApGVjpmdW5jdGlvbihhLGIpe3ZhciB0CkgudDYoYSku
-QygiY1g8MT4iKS5iKGIpCmlmKCEhYS5maXhlZCRsZW5ndGgpSC52aChQLkw0KCJhZGRBbGwiKSkKZm9y
-KHQ9Si5JVChiKTt0LkYoKTspYS5wdXNoKHQuZ2woKSl9LApLOmZ1bmN0aW9uKGEsYil7dmFyIHQscwpI
-LnQ2KGEpLkMoIn4oMSkiKS5iKGIpCnQ9YS5sZW5ndGgKZm9yKHM9MDtzPHQ7KytzKXtiLiQxKGFbc10p
-CmlmKGEubGVuZ3RoIT09dCl0aHJvdyBILmIoUC5hNChhKSl9fSwKRTI6ZnVuY3Rpb24oYSxiLGMpe3Zh
-ciB0PUgudDYoYSkKcmV0dXJuIG5ldyBILkE4KGEsdC5LcShjKS5DKCIxKDIpIikuYihiKSx0LkMoIkA8
-MT4iKS5LcShjKS5DKCJBODwxLDI+IikpfSwKSDpmdW5jdGlvbihhLGIpe3ZhciB0LHM9bmV3IEFycmF5
-KGEubGVuZ3RoKQpzLmZpeGVkJGxlbmd0aD1BcnJheQpmb3IodD0wO3Q8YS5sZW5ndGg7Kyt0KXRoaXMu
-WShzLHQsSC5kKGFbdF0pKQpyZXR1cm4gcy5qb2luKGIpfSwKTjA6ZnVuY3Rpb24oYSxiLGMsZCl7dmFy
-IHQscyxyCmQuYihiKQpILnQ2KGEpLktxKGQpLkMoIjEoMSwyKSIpLmIoYykKdD1hLmxlbmd0aApmb3Io
-cz1iLHI9MDtyPHQ7KytyKXtzPWMuJDIocyxhW3JdKQppZihhLmxlbmd0aCE9PXQpdGhyb3cgSC5iKFAu
-YTQoYSkpfXJldHVybiBzfSwKRTpmdW5jdGlvbihhLGIpe2lmKGI8MHx8Yj49YS5sZW5ndGgpcmV0dXJu
-IEguT0goYSxiKQpyZXR1cm4gYVtiXX0sCkQ2OmZ1bmN0aW9uKGEsYixjKXtpZihiPDB8fGI+YS5sZW5n
-dGgpdGhyb3cgSC5iKFAuVEUoYiwwLGEubGVuZ3RoLCJzdGFydCIsbnVsbCkpCmlmKGM8Ynx8Yz5hLmxl
-bmd0aCl0aHJvdyBILmIoUC5URShjLGIsYS5sZW5ndGgsImVuZCIsbnVsbCkpCmlmKGI9PT1jKXJldHVy
-biBILlZNKFtdLEgudDYoYSkpCnJldHVybiBILlZNKGEuc2xpY2UoYixjKSxILnQ2KGEpKX0sCmdyWjpm
-dW5jdGlvbihhKXt2YXIgdD1hLmxlbmd0aAppZih0PjApcmV0dXJuIGFbdC0xXQp0aHJvdyBILmIoSC5X
-cCgpKX0sCllXOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIHQscyxyPUgudDYoYSkKci5DKCJjWDwxPiIp
-LmIoZCkKaWYoISFhLmltbXV0YWJsZSRsaXN0KUgudmgoUC5MNCgic2V0UmFuZ2UiKSkKUC5qQihiLGMs
-YS5sZW5ndGgpCnQ9Yy1iCmlmKHQ9PT0wKXJldHVybgpQLmsxKGUsInNraXBDb3VudCIpCnIuQygiek08
-MT4iKS5iKGQpCnI9Si5VNihkKQppZihlK3Q+ci5nQShkKSl0aHJvdyBILmIoSC5hcigpKQppZihlPGIp
-Zm9yKHM9dC0xO3M+PTA7LS1zKWFbYitzXT1yLnEoZCxlK3MpCmVsc2UgZm9yKHM9MDtzPHQ7KytzKWFb
-YitzXT1yLnEoZCxlK3MpfSwKdmc6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMuWVcoYSxiLGMs
-ZCwwKX0sClZyOmZ1bmN0aW9uKGEsYil7dmFyIHQscwpILnQ2KGEpLkMoImEyKDEpIikuYihiKQp0PWEu
-bGVuZ3RoCmZvcihzPTA7czx0Oysrcyl7aWYoSC5vVChiLiQxKGFbc10pKSlyZXR1cm4hMAppZihhLmxl
-bmd0aCE9PXQpdGhyb3cgSC5iKFAuYTQoYSkpfXJldHVybiExfSwKdGc6ZnVuY3Rpb24oYSxiKXt2YXIg
-dApmb3IodD0wO3Q8YS5sZW5ndGg7Kyt0KWlmKEouUk0oYVt0XSxiKSlyZXR1cm4hMApyZXR1cm4hMX0s
-Cnc6ZnVuY3Rpb24oYSl7cmV0dXJuIFAuV0UoYSwiWyIsIl0iKX0sCmdrejpmdW5jdGlvbihhKXtyZXR1
-cm4gbmV3IEoubTEoYSxhLmxlbmd0aCxILnQ2KGEpLkMoIm0xPDE+IikpfSwKZ2lPOmZ1bmN0aW9uKGEp
-e3JldHVybiBILmVRKGEpfSwKZ0E6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVuZ3RofSwKc0E6ZnVuY3Rp
-b24oYSxiKXtpZighIWEuZml4ZWQkbGVuZ3RoKUgudmgoUC5MNCgic2V0IGxlbmd0aCIpKQppZihiPDAp
-dGhyb3cgSC5iKFAuVEUoYiwwLG51bGwsIm5ld0xlbmd0aCIsbnVsbCkpCmEubGVuZ3RoPWJ9LApxOmZ1
-bmN0aW9uKGEsYil7SC5TYyhiKQppZihiPj1hLmxlbmd0aHx8YjwwKXRocm93IEguYihILkhZKGEsYikp
-CnJldHVybiBhW2JdfSwKWTpmdW5jdGlvbihhLGIsYyl7SC50NihhKS5kLmIoYykKaWYoISFhLmltbXV0
-YWJsZSRsaXN0KUgudmgoUC5MNCgiaW5kZXhlZCBzZXQiKSkKaWYoYj49YS5sZW5ndGh8fGI8MCl0aHJv
-dyBILmIoSC5IWShhLGIpKQphW2JdPWN9LAokaWNYOjEsCiRpek06MX0KSi5Qby5wcm90b3R5cGU9e30K
-Si5tMS5wcm90b3R5cGU9ewpnbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LApGOmZ1bmN0aW9uKCl7
-dmFyIHQscz10aGlzLHI9cy5hLHE9ci5sZW5ndGgKaWYocy5iIT09cSl0aHJvdyBILmIoSC5sayhyKSkK
-dD1zLmMKaWYodD49cSl7cy5zTShudWxsKQpyZXR1cm4hMX1zLnNNKHJbdF0pOysrcy5jCnJldHVybiEw
-fSwKc006ZnVuY3Rpb24oYSl7dGhpcy5kPXRoaXMuJHRpLmQuYihhKX0sCiRpQW46MX0KSi5xSS5wcm90
-b3R5cGU9ewp5dTpmdW5jdGlvbihhKXt2YXIgdAppZihhPj0tMjE0NzQ4MzY0OCYmYTw9MjE0NzQ4MzY0
-NylyZXR1cm4gYXwwCmlmKGlzRmluaXRlKGEpKXt0PWE8MD9NYXRoLmNlaWwoYSk6TWF0aC5mbG9vcihh
-KQpyZXR1cm4gdCswfXRocm93IEguYihQLkw0KCIiK2ErIi50b0ludCgpIikpfSwKelE6ZnVuY3Rpb24o
-YSl7aWYoYT4wKXtpZihhIT09MS8wKXJldHVybiBNYXRoLnJvdW5kKGEpfWVsc2UgaWYoYT4tMS8wKXJl
-dHVybiAwLU1hdGgucm91bmQoMC1hKQp0aHJvdyBILmIoUC5MNCgiIithKyIucm91bmQoKSIpKX0sClda
-OmZ1bmN0aW9uKGEsYil7dmFyIHQscyxyLHEKaWYoYjwyfHxiPjM2KXRocm93IEguYihQLlRFKGIsMiwz
-NiwicmFkaXgiLG51bGwpKQp0PWEudG9TdHJpbmcoYikKaWYoQy54Qi5tKHQsdC5sZW5ndGgtMSkhPT00
-MSlyZXR1cm4gdApzPS9eKFtcZGEtel0rKSg/OlwuKFtcZGEtel0rKSk/XChlXCsoXGQrKVwpJC8uZXhl
-Yyh0KQppZihzPT1udWxsKUgudmgoUC5MNCgiVW5leHBlY3RlZCB0b1N0cmluZyByZXN1bHQ6ICIrdCkp
-CnI9cy5sZW5ndGgKaWYoMT49cilyZXR1cm4gSC5PSChzLDEpCnQ9c1sxXQppZigzPj1yKXJldHVybiBI
-Lk9IKHMsMykKcT0rc1szXQpyPXNbMl0KaWYociE9bnVsbCl7dCs9cgpxLT1yLmxlbmd0aH1yZXR1cm4g
-dCtDLnhCLkl4KCIwIixxKX0sCnc6ZnVuY3Rpb24oYSl7aWYoYT09PTAmJjEvYTwwKXJldHVybiItMC4w
-IgplbHNlIHJldHVybiIiK2F9LApnaU86ZnVuY3Rpb24oYSl7dmFyIHQscyxyLHEscD1hfDAKaWYoYT09
-PXApcmV0dXJuIDUzNjg3MDkxMSZwCnQ9TWF0aC5hYnMoYSkKcz1NYXRoLmxvZyh0KS8wLjY5MzE0NzE4
-MDU1OTk0NTN8MApyPU1hdGgucG93KDIscykKcT10PDE/dC9yOnIvdApyZXR1cm4gNTM2ODcwOTExJigo
-cSo5MDA3MTk5MjU0NzQwOTkyfDApKyhxKjM1NDIyNDMxODExNzY1MjF8MCkpKjU5OTE5NytzKjEyNTl9
-LAp6WTpmdW5jdGlvbihhLGIpe3ZhciB0PWElYgppZih0PT09MClyZXR1cm4gMAppZih0PjApcmV0dXJu
-IHQKaWYoYjwwKXJldHVybiB0LWIKZWxzZSByZXR1cm4gdCtifSwKd0c6ZnVuY3Rpb24oYSxiKXt2YXIg
-dAppZihhPjApdD10aGlzLnAzKGEsYikKZWxzZXt0PWI+MzE/MzE6Ygp0PWE+PnQ+Pj4wfXJldHVybiB0
-fSwKYmY6ZnVuY3Rpb24oYSxiKXtpZihiPDApdGhyb3cgSC5iKEgudEwoYikpCnJldHVybiB0aGlzLnAz
-KGEsYil9LApwMzpmdW5jdGlvbihhLGIpe3JldHVybiBiPjMxPzA6YT4+PmJ9LAokaUNQOjEsCiRpRks6
-MX0KSi51ci5wcm90b3R5cGU9eyRpS046MX0KSi5WQS5wcm90b3R5cGU9e30KSi5Eci5wcm90b3R5cGU9
-ewptOmZ1bmN0aW9uKGEsYil7aWYoYjwwKXRocm93IEguYihILkhZKGEsYikpCmlmKGI+PWEubGVuZ3Ro
-KUgudmgoSC5IWShhLGIpKQpyZXR1cm4gYS5jaGFyQ29kZUF0KGIpfSwKVzpmdW5jdGlvbihhLGIpe2lm
-KGI+PWEubGVuZ3RoKXRocm93IEguYihILkhZKGEsYikpCnJldHVybiBhLmNoYXJDb2RlQXQoYil9LApk
-ZDpmdW5jdGlvbihhLGIpe3JldHVybiBuZXcgSC51bihiLGEsMCl9LApoOmZ1bmN0aW9uKGEsYil7aWYo
-dHlwZW9mIGIhPSJzdHJpbmciKXRocm93IEguYihQLkwzKGIsbnVsbCxudWxsKSkKcmV0dXJuIGErYn0s
-ClRjOmZ1bmN0aW9uKGEsYil7dmFyIHQ9Yi5sZW5ndGgscz1hLmxlbmd0aAppZih0PnMpcmV0dXJuITEK
-cmV0dXJuIGI9PT10aGlzLkcoYSxzLXQpfSwKaTc6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIHQscwpjPVAu
-akIoYixjLGEubGVuZ3RoKQp0PWEuc3Vic3RyaW5nKDAsYikKcz1hLnN1YnN0cmluZyhjKQpyZXR1cm4g
-dCtkK3N9LApRaTpmdW5jdGlvbihhLGIsYyl7dmFyIHQKaWYoIUgub2soYykpSC52aChILnRMKGMpKQpp
-Zih0eXBlb2YgYyE9PSJudW1iZXIiKXJldHVybiBjLkooKQppZihjPDB8fGM+YS5sZW5ndGgpdGhyb3cg
-SC5iKFAuVEUoYywwLGEubGVuZ3RoLG51bGwsbnVsbCkpCnQ9YytiLmxlbmd0aAppZih0PmEubGVuZ3Ro
-KXJldHVybiExCnJldHVybiBiPT09YS5zdWJzdHJpbmcoYyx0KX0sCm46ZnVuY3Rpb24oYSxiKXtyZXR1
-cm4gdGhpcy5RaShhLGIsMCl9LApOajpmdW5jdGlvbihhLGIsYyl7aWYoIUgub2soYikpSC52aChILnRM
-KGIpKQppZihjPT1udWxsKWM9YS5sZW5ndGgKaWYodHlwZW9mIGIhPT0ibnVtYmVyIilyZXR1cm4gYi5K
-KCkKaWYoYjwwKXRocm93IEguYihQLngoYixudWxsKSkKaWYoYj5jKXRocm93IEguYihQLngoYixudWxs
-KSkKaWYoYz5hLmxlbmd0aCl0aHJvdyBILmIoUC54KGMsbnVsbCkpCnJldHVybiBhLnN1YnN0cmluZyhi
-LGMpfSwKRzpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLk5qKGEsYixudWxsKX0sCmhjOmZ1bmN0aW9u
-KGEpe3JldHVybiBhLnRvTG93ZXJDYXNlKCl9LApiUzpmdW5jdGlvbihhKXt2YXIgdCxzLHIscT1hLnRy
-aW0oKSxwPXEubGVuZ3RoCmlmKHA9PT0wKXJldHVybiBxCmlmKHRoaXMuVyhxLDApPT09MTMzKXt0PUou
-bW0ocSwxKQppZih0PT09cClyZXR1cm4iIn1lbHNlIHQ9MApzPXAtMQpyPXRoaXMubShxLHMpPT09MTMz
-P0ouYzEocSxzKTpwCmlmKHQ9PT0wJiZyPT09cClyZXR1cm4gcQpyZXR1cm4gcS5zdWJzdHJpbmcodCxy
-KX0sCkl4OmZ1bmN0aW9uKGEsYil7dmFyIHQscwppZigwPj1iKXJldHVybiIiCmlmKGI9PT0xfHxhLmxl
-bmd0aD09PTApcmV0dXJuIGEKaWYoYiE9PWI+Pj4wKXRocm93IEguYihDLkVxKQpmb3IodD1hLHM9IiI7
-ITA7KXtpZigoYiYxKT09PTEpcz10K3MKYj1iPj4+MQppZihiPT09MClicmVhawp0Kz10fXJldHVybiBz
-fSwKWFU6ZnVuY3Rpb24oYSxiLGMpe3ZhciB0CmlmKGM8MHx8Yz5hLmxlbmd0aCl0aHJvdyBILmIoUC5U
-RShjLDAsYS5sZW5ndGgsbnVsbCxudWxsKSkKdD1hLmluZGV4T2YoYixjKQpyZXR1cm4gdH0sCk9ZOmZ1
-bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuWFUoYSxiLDApfSwKUGs6ZnVuY3Rpb24oYSxiLGMpe3ZhciB0
-LHMKaWYoYz09bnVsbCljPWEubGVuZ3RoCmVsc2UgaWYoYzwwfHxjPmEubGVuZ3RoKXRocm93IEguYihQ
-LlRFKGMsMCxhLmxlbmd0aCxudWxsLG51bGwpKQp0PWIubGVuZ3RoCnM9YS5sZW5ndGgKaWYoYyt0PnMp
-Yz1zLXQKcmV0dXJuIGEubGFzdEluZGV4T2YoYixjKX0sCmNuOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRo
-aXMuUGsoYSxiLG51bGwpfSwKSXM6ZnVuY3Rpb24oYSxiLGMpe3ZhciB0PWEubGVuZ3RoCmlmKGM+dCl0
-aHJvdyBILmIoUC5URShjLDAsdCxudWxsLG51bGwpKQpyZXR1cm4gSC5tMihhLGIsYyl9LAp0ZzpmdW5j
-dGlvbihhLGIpe3JldHVybiB0aGlzLklzKGEsYiwwKX0sCnc6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LApn
-aU86ZnVuY3Rpb24oYSl7dmFyIHQscyxyCmZvcih0PWEubGVuZ3RoLHM9MCxyPTA7cjx0Oysrcil7cz01
-MzY4NzA5MTEmcythLmNoYXJDb2RlQXQocikKcz01MzY4NzA5MTEmcysoKDUyNDI4NyZzKTw8MTApCnNe
-PXM+PjZ9cz01MzY4NzA5MTEmcysoKDY3MTA4ODYzJnMpPDwzKQpzXj1zPj4xMQpyZXR1cm4gNTM2ODcw
-OTExJnMrKCgxNjM4MyZzKTw8MTUpfSwKZ0E6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVuZ3RofSwKcTpm
-dW5jdGlvbihhLGIpe0guU2MoYikKaWYoYj49YS5sZW5ndGh8fCExKXRocm93IEguYihILkhZKGEsYikp
-CnJldHVybiBhW2JdfSwKJGl2WDoxLAokaXFVOjF9CkgucWoucHJvdG90eXBlPXsKZ0E6ZnVuY3Rpb24o
-YSl7cmV0dXJuIHRoaXMuYS5sZW5ndGh9LApxOmZ1bmN0aW9uKGEsYil7cmV0dXJuIEMueEIubSh0aGlz
-LmEsSC5TYyhiKSl9fQpILmJRLnByb3RvdHlwZT17fQpILmFMLnByb3RvdHlwZT17CmdrejpmdW5jdGlv
-bihhKXt2YXIgdD10aGlzCnJldHVybiBuZXcgSC5hNyh0LHQuZ0EodCksSC5MaCh0KS5DKCJhNzxhTC5F
-PiIpKX0sCkg6ZnVuY3Rpb24oYSxiKXt2YXIgdCxzLHIscT10aGlzLHA9cS5nQShxKQppZihiLmxlbmd0
-aCE9PTApe2lmKHA9PT0wKXJldHVybiIiCnQ9SC5kKHEuRSgwLDApKQppZihwIT09cS5nQShxKSl0aHJv
-dyBILmIoUC5hNChxKSkKZm9yKHM9dCxyPTE7cjxwOysrcil7cz1zK2IrSC5kKHEuRSgwLHIpKQppZihw
-IT09cS5nQShxKSl0aHJvdyBILmIoUC5hNChxKSl9cmV0dXJuIHMuY2hhckNvZGVBdCgwKT09MD9zOnN9
-ZWxzZXtmb3Iocj0wLHM9IiI7cjxwOysrcil7cys9SC5kKHEuRSgwLHIpKQppZihwIT09cS5nQShxKSl0
-aHJvdyBILmIoUC5hNChxKSl9cmV0dXJuIHMuY2hhckNvZGVBdCgwKT09MD9zOnN9fSwKZXY6ZnVuY3Rp
-b24oYSxiKXtyZXR1cm4gdGhpcy5HRygwLEguTGgodGhpcykuQygiYTIoYUwuRSkiKS5iKGIpKX19Ckgu
-bkgucHJvdG90eXBlPXsKZ1VEOmZ1bmN0aW9uKCl7dmFyIHQ9Si5IbSh0aGlzLmEpLHM9dGhpcy5jCmlm
-KHM9PW51bGx8fHM+dClyZXR1cm4gdApyZXR1cm4gc30sCmdBczpmdW5jdGlvbigpe3ZhciB0PUouSG0o
-dGhpcy5hKSxzPXRoaXMuYgppZihzPnQpcmV0dXJuIHQKcmV0dXJuIHN9LApnQTpmdW5jdGlvbihhKXt2
-YXIgdCxzPUouSG0odGhpcy5hKSxyPXRoaXMuYgppZihyPj1zKXJldHVybiAwCnQ9dGhpcy5jCmlmKHQ9
-PW51bGx8fHQ+PXMpcmV0dXJuIHMtcgppZih0eXBlb2YgdCE9PSJudW1iZXIiKXJldHVybiB0LkhOKCkK
-cmV0dXJuIHQtcn0sCkU6ZnVuY3Rpb24oYSxiKXt2YXIgdCxzPXRoaXMscj1zLmdBcygpK2IKaWYoYj49
-MCl7dD1zLmdVRCgpCmlmKHR5cGVvZiB0IT09Im51bWJlciIpcmV0dXJuIEgucFkodCkKdD1yPj10fWVs
-c2UgdD0hMAppZih0KXRocm93IEguYihQLkNmKGIscywiaW5kZXgiLG51bGwsbnVsbCkpCnJldHVybiBK
-LkFNKHMuYSxyKX19CkguYTcucHJvdG90eXBlPXsKZ2w6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSwK
-RjpmdW5jdGlvbigpe3ZhciB0LHM9dGhpcyxyPXMuYSxxPUouVTYocikscD1xLmdBKHIpCmlmKHMuYiE9
-PXApdGhyb3cgSC5iKFAuYTQocikpCnQ9cy5jCmlmKHQ+PXApe3Muc0kobnVsbCkKcmV0dXJuITF9cy5z
-SShxLkUocix0KSk7KytzLmMKcmV0dXJuITB9LApzSTpmdW5jdGlvbihhKXt0aGlzLmQ9dGhpcy4kdGku
-ZC5iKGEpfSwKJGlBbjoxfQpILkE4LnByb3RvdHlwZT17CmdBOmZ1bmN0aW9uKGEpe3JldHVybiBKLkht
-KHRoaXMuYSl9LApFOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuYi4kMShKLkFNKHRoaXMuYSxiKSl9
-fQpILlU1LnByb3RvdHlwZT17CmdrejpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IEguU08oSi5JVCh0aGlz
-LmEpLHRoaXMuYix0aGlzLiR0aS5DKCJTTzwxPiIpKX19CkguU08ucHJvdG90eXBlPXsKRjpmdW5jdGlv
-bigpe3ZhciB0LHMKZm9yKHQ9dGhpcy5hLHM9dGhpcy5iO3QuRigpOylpZihILm9UKHMuJDEodC5nbCgp
-KSkpcmV0dXJuITAKcmV0dXJuITF9LApnbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2woKX19Ckgu
-U1UucHJvdG90eXBlPXt9CkguUmUucHJvdG90eXBlPXsKWTpmdW5jdGlvbihhLGIsYyl7SC5MaCh0aGlz
-KS5DKCJSZS5FIikuYihjKQp0aHJvdyBILmIoUC5MNCgiQ2Fubm90IG1vZGlmeSBhbiB1bm1vZGlmaWFi
-bGUgbGlzdCIpKX19CkguWEMucHJvdG90eXBlPXt9Ckgud3YucHJvdG90eXBlPXsKZ2lPOmZ1bmN0aW9u
-KGEpe3ZhciB0PXRoaXMuX2hhc2hDb2RlCmlmKHQhPW51bGwpcmV0dXJuIHQKdD01MzY4NzA5MTEmNjY0
-NTk3KkouaGYodGhpcy5hKQp0aGlzLl9oYXNoQ29kZT10CnJldHVybiB0fSwKdzpmdW5jdGlvbihhKXty
-ZXR1cm4nU3ltYm9sKCInK0guZCh0aGlzLmEpKyciKSd9LApETjpmdW5jdGlvbihhLGIpe2lmKGI9PW51
-bGwpcmV0dXJuITEKcmV0dXJuIGIgaW5zdGFuY2VvZiBILnd2JiZ0aGlzLmE9PWIuYX0sCiRpR0Q6MX0K
-SC5QRC5wcm90b3R5cGU9e30KSC5XVS5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3JldHVybiBQLm5P
-KHRoaXMpfSwKWTpmdW5jdGlvbihhLGIsYyl7dmFyIHQ9SC5MaCh0aGlzKQp0LmQuYihiKQp0LmNoWzFd
-LmIoYykKcmV0dXJuIEguZGMoKX0sCiRpWjA6MX0KSC5MUC5wcm90b3R5cGU9ewpnQTpmdW5jdGlvbihh
-KXtyZXR1cm4gdGhpcy5hfSwKeDQ6ZnVuY3Rpb24oYSl7aWYodHlwZW9mIGEhPSJzdHJpbmciKXJldHVy
-biExCmlmKCJfX3Byb3RvX18iPT09YSlyZXR1cm4hMQpyZXR1cm4gdGhpcy5iLmhhc093blByb3BlcnR5
-KGEpfSwKcTpmdW5jdGlvbihhLGIpe2lmKCF0aGlzLng0KGIpKXJldHVybgpyZXR1cm4gdGhpcy5xUChi
-KX0sCnFQOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmJbSC55KGEpXX0sCks6ZnVuY3Rpb24oYSxiKXt2
-YXIgdCxzLHIscSxwPUguTGgodGhpcykKcC5DKCJ+KDEsMikiKS5iKGIpCnQ9dGhpcy5jCmZvcihzPXQu
-bGVuZ3RoLHA9cC5jaFsxXSxyPTA7cjxzOysrcil7cT10W3JdCmIuJDIocSxwLmIodGhpcy5xUChxKSkp
-fX19CkguTEkucHJvdG90eXBlPXsKZ1dhOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5hCnJldHVybiB0fSwK
-Z25kOmZ1bmN0aW9uKCl7dmFyIHQscyxyLHEscD10aGlzCmlmKHAuYz09PTEpcmV0dXJuIEMuaFUKdD1w
-LmQKcz10Lmxlbmd0aC1wLmUubGVuZ3RoLXAuZgppZihzPT09MClyZXR1cm4gQy5oVQpyPVtdCmZvcihx
-PTA7cTxzOysrcSl7aWYocT49dC5sZW5ndGgpcmV0dXJuIEguT0godCxxKQpyLnB1c2godFtxXSl9cmV0
-dXJuIEouekMocil9LApnVm06ZnVuY3Rpb24oKXt2YXIgdCxzLHIscSxwLG8sbixtLGw9dGhpcwppZihs
-LmMhPT0wKXJldHVybiBDLkNNCnQ9bC5lCnM9dC5sZW5ndGgKcj1sLmQKcT1yLmxlbmd0aC1zLWwuZgpp
-ZihzPT09MClyZXR1cm4gQy5DTQpwPW5ldyBILk41KHUuZW8pCmZvcihvPTA7bzxzOysrbyl7aWYobz49
-dC5sZW5ndGgpcmV0dXJuIEguT0godCxvKQpuPXRbb10KbT1xK28KaWYobTwwfHxtPj1yLmxlbmd0aCly
-ZXR1cm4gSC5PSChyLG0pCnAuWSgwLG5ldyBILnd2KG4pLHJbbV0pfXJldHVybiBuZXcgSC5QRChwLHUu
-Z0YpfSwKJGl2UToxfQpILkNqLnByb3RvdHlwZT17CiQyOmZ1bmN0aW9uKGEsYil7dmFyIHQKSC55KGEp
-CnQ9dGhpcy5hCnQuYj10LmIrIiQiK0guZChhKQpDLk5tLmkodGhpcy5iLGEpCkMuTm0uaSh0aGlzLmMs
-Yik7Kyt0LmF9LAokUzoxM30KSC5aci5wcm90b3R5cGU9ewpxUzpmdW5jdGlvbihhKXt2YXIgdCxzLHI9
-dGhpcyxxPW5ldyBSZWdFeHAoci5hKS5leGVjKGEpCmlmKHE9PW51bGwpcmV0dXJuCnQ9T2JqZWN0LmNy
-ZWF0ZShudWxsKQpzPXIuYgppZihzIT09LTEpdC5hcmd1bWVudHM9cVtzKzFdCnM9ci5jCmlmKHMhPT0t
-MSl0LmFyZ3VtZW50c0V4cHI9cVtzKzFdCnM9ci5kCmlmKHMhPT0tMSl0LmV4cHI9cVtzKzFdCnM9ci5l
-CmlmKHMhPT0tMSl0Lm1ldGhvZD1xW3MrMV0Kcz1yLmYKaWYocyE9PS0xKXQucmVjZWl2ZXI9cVtzKzFd
-CnJldHVybiB0fX0KSC5XMC5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3ZhciB0PXRoaXMuYgppZih0
-PT1udWxsKXJldHVybiJOb1N1Y2hNZXRob2RFcnJvcjogIitILmQodGhpcy5hKQpyZXR1cm4iTm9TdWNo
-TWV0aG9kRXJyb3I6IG1ldGhvZCBub3QgZm91bmQ6ICciK3QrIicgb24gbnVsbCJ9fQpILmF6LnByb3Rv
-dHlwZT17Cnc6ZnVuY3Rpb24oYSl7dmFyIHQscz10aGlzLHI9Ik5vU3VjaE1ldGhvZEVycm9yOiBtZXRo
-b2Qgbm90IGZvdW5kOiAnIixxPXMuYgppZihxPT1udWxsKXJldHVybiJOb1N1Y2hNZXRob2RFcnJvcjog
-IitILmQocy5hKQp0PXMuYwppZih0PT1udWxsKXJldHVybiByK3ErIicgKCIrSC5kKHMuYSkrIikiCnJl
-dHVybiByK3ErIicgb24gJyIrdCsiJyAoIitILmQocy5hKSsiKSJ9fQpILnZWLnByb3RvdHlwZT17Cnc6
-ZnVuY3Rpb24oYSl7dmFyIHQ9dGhpcy5hCnJldHVybiB0Lmxlbmd0aD09PTA/IkVycm9yIjoiRXJyb3I6
-ICIrdH19CkguYnEucHJvdG90eXBlPXt9CkguQW0ucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7aWYo
-dS5iVS5jKGEpKWlmKGEuJHRocm93bkpzRXJyb3I9PW51bGwpYS4kdGhyb3duSnNFcnJvcj10aGlzLmEK
-cmV0dXJuIGF9LAokUzozfQpILlhPLnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7dmFyIHQscz10aGlz
-LmIKaWYocyE9bnVsbClyZXR1cm4gcwpzPXRoaXMuYQp0PXMhPT1udWxsJiZ0eXBlb2Ygcz09PSJvYmpl
-Y3QiP3Muc3RhY2s6bnVsbApyZXR1cm4gdGhpcy5iPXQ9PW51bGw/IiI6dH0sCiRpR3o6MX0KSC5UcC5w
-cm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3ZhciB0PXRoaXMuY29uc3RydWN0b3Iscz10PT1udWxsP251
-bGw6dC5uYW1lCnJldHVybiJDbG9zdXJlICciK0guTlEocz09bnVsbD8idW5rbm93biI6cykrIicifSwK
-JGlFSDoxLApnUWw6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sCiRDOiIkMSIsCiRSOjEsCiREOm51bGx9
-CkgubGMucHJvdG90eXBlPXt9CkguengucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXt2YXIgdD10aGlz
-LiRzdGF0aWNfbmFtZQppZih0PT1udWxsKXJldHVybiJDbG9zdXJlIG9mIHVua25vd24gc3RhdGljIG1l
-dGhvZCIKcmV0dXJuIkNsb3N1cmUgJyIrSC5OUSh0KSsiJyJ9fQpILnJULnByb3RvdHlwZT17CkROOmZ1
-bmN0aW9uKGEsYil7dmFyIHQ9dGhpcwppZihiPT1udWxsKXJldHVybiExCmlmKHQ9PT1iKXJldHVybiEw
-CmlmKCEoYiBpbnN0YW5jZW9mIEguclQpKXJldHVybiExCnJldHVybiB0LmE9PT1iLmEmJnQuYj09PWIu
-YiYmdC5jPT09Yi5jfSwKZ2lPOmZ1bmN0aW9uKGEpe3ZhciB0LHM9dGhpcy5jCmlmKHM9PW51bGwpdD1I
-LmVRKHRoaXMuYSkKZWxzZSB0PXR5cGVvZiBzIT09Im9iamVjdCI/Si5oZihzKTpILmVRKHMpCnJldHVy
-bih0XkguZVEodGhpcy5iKSk+Pj4wfSwKdzpmdW5jdGlvbihhKXt2YXIgdD10aGlzLmMKaWYodD09bnVs
-bCl0PXRoaXMuYQpyZXR1cm4iQ2xvc3VyZSAnIitILmQodGhpcy5kKSsiJyBvZiAiKygiSW5zdGFuY2Ug
-b2YgJyIrSC5kKEguTSh0KSkrIiciKX19CkguRXEucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXtyZXR1
-cm4iUnVudGltZUVycm9yOiAiK0guZCh0aGlzLmEpfX0KSC5rWS5wcm90b3R5cGU9ewp3OmZ1bmN0aW9u
-KGEpe3JldHVybiJBc3NlcnRpb24gZmFpbGVkOiAiK1AucCh0aGlzLmEpfX0KSC5ONS5wcm90b3R5cGU9
-ewpnQTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hfSwKZ1Y6ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IEgu
-aTUodGhpcyxILkxoKHRoaXMpLkMoImk1PDE+IikpfSwKeDQ6ZnVuY3Rpb24oYSl7dmFyIHQscwppZih0
-eXBlb2YgYT09InN0cmluZyIpe3Q9dGhpcy5iCmlmKHQ9PW51bGwpcmV0dXJuITEKcmV0dXJuIHRoaXMu
-WHUodCxhKX1lbHNle3M9dGhpcy5DWChhKQpyZXR1cm4gc319LApDWDpmdW5jdGlvbihhKXt2YXIgdD10
-aGlzLmQKaWYodD09bnVsbClyZXR1cm4hMQpyZXR1cm4gdGhpcy5GaCh0aGlzLkJ0KHQsSi5oZihhKSYw
-eDNmZmZmZmYpLGEpPj0wfSwKcTpmdW5jdGlvbihhLGIpe3ZhciB0LHMscixxLHA9dGhpcwppZih0eXBl
-b2YgYj09InN0cmluZyIpe3Q9cC5iCmlmKHQ9PW51bGwpcmV0dXJuCnM9cC5qMih0LGIpCnI9cz09bnVs
-bD9udWxsOnMuYgpyZXR1cm4gcn1lbHNlIGlmKHR5cGVvZiBiPT0ibnVtYmVyIiYmKGImMHgzZmZmZmZm
-KT09PWIpe3E9cC5jCmlmKHE9PW51bGwpcmV0dXJuCnM9cC5qMihxLGIpCnI9cz09bnVsbD9udWxsOnMu
-YgpyZXR1cm4gcn1lbHNlIHJldHVybiBwLmFhKGIpfSwKYWE6ZnVuY3Rpb24oYSl7dmFyIHQscyxyPXRo
-aXMuZAppZihyPT1udWxsKXJldHVybgp0PXRoaXMuQnQocixKLmhmKGEpJjB4M2ZmZmZmZikKcz10aGlz
-LkZoKHQsYSkKaWYoczwwKXJldHVybgpyZXR1cm4gdFtzXS5ifSwKWTpmdW5jdGlvbihhLGIsYyl7dmFy
-IHQscyxyLHEscCxvLG49dGhpcyxtPUguTGgobikKbS5kLmIoYikKbS5jaFsxXS5iKGMpCmlmKHR5cGVv
-ZiBiPT0ic3RyaW5nIil7dD1uLmIKbi5FSCh0PT1udWxsP24uYj1uLnpLKCk6dCxiLGMpfWVsc2UgaWYo
-dHlwZW9mIGI9PSJudW1iZXIiJiYoYiYweDNmZmZmZmYpPT09Yil7cz1uLmMKbi5FSChzPT1udWxsP24u
-Yz1uLnpLKCk6cyxiLGMpfWVsc2V7cj1uLmQKaWYocj09bnVsbClyPW4uZD1uLnpLKCkKcT1KLmhmKGIp
-JjB4M2ZmZmZmZgpwPW4uQnQocixxKQppZihwPT1udWxsKW4uRUkocixxLFtuLkhuKGIsYyldKQplbHNl
-e289bi5GaChwLGIpCmlmKG8+PTApcFtvXS5iPWMKZWxzZSBwLnB1c2gobi5IbihiLGMpKX19fSwKSzpm
-dW5jdGlvbihhLGIpe3ZhciB0LHMscj10aGlzCkguTGgocikuQygifigxLDIpIikuYihiKQp0PXIuZQpz
-PXIucgpmb3IoO3QhPW51bGw7KXtiLiQyKHQuYSx0LmIpCmlmKHMhPT1yLnIpdGhyb3cgSC5iKFAuYTQo
-cikpCnQ9dC5jfX0sCkVIOmZ1bmN0aW9uKGEsYixjKXt2YXIgdCxzPXRoaXMscj1ILkxoKHMpCnIuZC5i
-KGIpCnIuY2hbMV0uYihjKQp0PXMuajIoYSxiKQppZih0PT1udWxsKXMuRUkoYSxiLHMuSG4oYixjKSkK
-ZWxzZSB0LmI9Y30sCmtzOmZ1bmN0aW9uKCl7dGhpcy5yPXRoaXMucisxJjY3MTA4ODYzfSwKSG46ZnVu
-Y3Rpb24oYSxiKXt2YXIgdCxzPXRoaXMscj1ILkxoKHMpLHE9bmV3IEguZGIoci5kLmIoYSksci5jaFsx
-XS5iKGIpKQppZihzLmU9PW51bGwpcy5lPXMuZj1xCmVsc2V7dD1zLmYKcS5kPXQKcy5mPXQuYz1xfSsr
-cy5hCnMua3MoKQpyZXR1cm4gcX0sCkZoOmZ1bmN0aW9uKGEsYil7dmFyIHQscwppZihhPT1udWxsKXJl
-dHVybi0xCnQ9YS5sZW5ndGgKZm9yKHM9MDtzPHQ7KytzKWlmKEouUk0oYVtzXS5hLGIpKXJldHVybiBz
-CnJldHVybi0xfSwKdzpmdW5jdGlvbihhKXtyZXR1cm4gUC5uTyh0aGlzKX0sCmoyOmZ1bmN0aW9uKGEs
-Yil7cmV0dXJuIGFbYl19LApCdDpmdW5jdGlvbihhLGIpe3JldHVybiBhW2JdfSwKRUk6ZnVuY3Rpb24o
-YSxiLGMpe2FbYl09Y30sCnJuOmZ1bmN0aW9uKGEsYil7ZGVsZXRlIGFbYl19LApYdTpmdW5jdGlvbihh
-LGIpe3JldHVybiB0aGlzLmoyKGEsYikhPW51bGx9LAp6SzpmdW5jdGlvbigpe3ZhciB0PSI8bm9uLWlk
-ZW50aWZpZXIta2V5PiIscz1PYmplY3QuY3JlYXRlKG51bGwpCnRoaXMuRUkocyx0LHMpCnRoaXMucm4o
-cyx0KQpyZXR1cm4gc30sCiRpRm86MX0KSC5kYi5wcm90b3R5cGU9e30KSC5pNS5wcm90b3R5cGU9ewpn
-QTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hLmF9LApna3o6ZnVuY3Rpb24oYSl7dmFyIHQ9dGhpcy5h
-LHM9bmV3IEguTjYodCx0LnIsdGhpcy4kdGkuQygiTjY8MT4iKSkKcy5jPXQuZQpyZXR1cm4gc319Ckgu
-TjYucHJvdG90eXBlPXsKZ2w6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSwKRjpmdW5jdGlvbigpe3Zh
-ciB0PXRoaXMscz10LmEKaWYodC5iIT09cy5yKXRocm93IEguYihQLmE0KHMpKQplbHNle3M9dC5jCmlm
-KHM9PW51bGwpe3Quc3FZKG51bGwpCnJldHVybiExfWVsc2V7dC5zcVkocy5hKQp0LmM9dC5jLmMKcmV0
-dXJuITB9fX0sCnNxWTpmdW5jdGlvbihhKXt0aGlzLmQ9dGhpcy4kdGkuZC5iKGEpfSwKJGlBbjoxfQpI
-LmRDLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmEoYSl9LAokUzozfQpILndO
-LnByb3RvdHlwZT17CiQyOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuYShhLGIpfSwKJFM6Mzh9Ckgu
-VlgucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYShILnkoYSkpfSwKJFM6Mzd9
-CkguVlIucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXtyZXR1cm4iUmVnRXhwLyIrdGhpcy5hKyIvIit0
-aGlzLmIuZmxhZ3N9LApnSGM6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLHM9dC5jCmlmKHMhPW51bGwpcmV0
-dXJuIHMKcz10LmIKcmV0dXJuIHQuYz1ILnY0KHQuYSxzLm11bHRpbGluZSwhcy5pZ25vcmVDYXNlLHMu
-dW5pY29kZSxzLmRvdEFsbCwhMCl9LApkZDpmdW5jdGlvbihhLGIpe3JldHVybiBuZXcgSC5LVyh0aGlz
-LGIsMCl9LApVWjpmdW5jdGlvbihhLGIpe3ZhciB0LHM9dGhpcy5nSGMoKQpzLmxhc3RJbmRleD1iCnQ9
-cy5leGVjKGEpCmlmKHQ9PW51bGwpcmV0dXJuCnJldHVybiBuZXcgSC5FSyh0KX0sCiRpdlg6MSwKJGl3
-TDoxfQpILkVLLnByb3RvdHlwZT17CnE6ZnVuY3Rpb24oYSxiKXt2YXIgdApILlNjKGIpCnQ9dGhpcy5i
-CmlmKGI+PXQubGVuZ3RoKXJldHVybiBILk9IKHQsYikKcmV0dXJuIHRbYl19LAokaU9kOjEsCiRpaWI6
-MX0KSC5LVy5wcm90b3R5cGU9ewpna3o6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBILlBiKHRoaXMuYSx0
-aGlzLmIsdGhpcy5jKX19CkguUGIucHJvdG90eXBlPXsKZ2w6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5k
-fSwKRjpmdW5jdGlvbigpe3ZhciB0LHMscixxLHA9dGhpcyxvPXAuYgppZihvPT1udWxsKXJldHVybiEx
-CnQ9cC5jCmlmKHQ8PW8ubGVuZ3RoKXtzPXAuYQpyPXMuVVoobyx0KQppZihyIT1udWxsKXtwLmQ9cgpv
-PXIuYgp0PW8uaW5kZXgKcT10K29bMF0ubGVuZ3RoCmlmKHQ9PT1xKXtpZihzLmIudW5pY29kZSl7bz1w
-LmMKdD1vKzEKcz1wLmIKaWYodDxzLmxlbmd0aCl7bz1KLnJZKHMpLm0ocyxvKQppZihvPj01NTI5NiYm
-bzw9NTYzMTkpe289Qy54Qi5tKHMsdCkKbz1vPj01NjMyMCYmbzw9NTczNDN9ZWxzZSBvPSExfWVsc2Ug
-bz0hMX1lbHNlIG89ITEKcT0obz9xKzE6cSkrMX1wLmM9cQpyZXR1cm4hMH19cC5iPXAuZD1udWxsCnJl
-dHVybiExfSwKJGlBbjoxfQpILnRRLnByb3RvdHlwZT17CnE6ZnVuY3Rpb24oYSxiKXtILlNjKGIpCmlm
-KGIhPT0wKUgudmgoUC54KGIsbnVsbCkpCnJldHVybiB0aGlzLmN9LAokaU9kOjF9CkgudW4ucHJvdG90
-eXBlPXsKZ2t6OmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgSC5TZCh0aGlzLmEsdGhpcy5iLHRoaXMuYyl9
-fQpILlNkLnByb3RvdHlwZT17CkY6ZnVuY3Rpb24oKXt2YXIgdCxzLHI9dGhpcyxxPXIuYyxwPXIuYixv
-PXAubGVuZ3RoLG49ci5hLG09bi5sZW5ndGgKaWYocStvPm0pe3IuZD1udWxsCnJldHVybiExfXQ9bi5p
-bmRleE9mKHAscSkKaWYodDwwKXtyLmM9bSsxCnIuZD1udWxsCnJldHVybiExfXM9dCtvCnIuZD1uZXcg
-SC50USh0LHApCnIuYz1zPT09ci5jP3MrMTpzCnJldHVybiEwfSwKZ2w6ZnVuY3Rpb24oKXtyZXR1cm4g
-dGhpcy5kfSwKJGlBbjoxfQpILkVULnByb3RvdHlwZT17JGlFVDoxLCRpQVM6MX0KSC5iMC5wcm90b3R5
-cGU9ewpnQTpmdW5jdGlvbihhKXtyZXR1cm4gYS5sZW5ndGh9LAokaVhqOjF9CkguRGcucHJvdG90eXBl
-PXsKcTpmdW5jdGlvbihhLGIpe0guU2MoYikKSC5vZChiLGEsYS5sZW5ndGgpCnJldHVybiBhW2JdfSwK
-WTpmdW5jdGlvbihhLGIsYyl7SC5JZyhjKQpILm9kKGIsYSxhLmxlbmd0aCkKYVtiXT1jfSwKJGljWDox
-LAokaXpNOjF9CkguUGcucHJvdG90eXBlPXsKWTpmdW5jdGlvbihhLGIsYyl7SC5TYyhjKQpILm9kKGIs
-YSxhLmxlbmd0aCkKYVtiXT1jfSwKJGljWDoxLAokaXpNOjF9CkgueGoucHJvdG90eXBlPXsKcTpmdW5j
-dGlvbihhLGIpe0guU2MoYikKSC5vZChiLGEsYS5sZW5ndGgpCnJldHVybiBhW2JdfX0KSC5kRS5wcm90
+UHYoYSwibnVtIikpfSwKRE46ZnVuY3Rpb24oYSl7aWYodHlwZW9mIGE9PSJudW1iZXIiKXJldHVybiBh
+CmlmKGE9PW51bGwpcmV0dXJuIGEKdGhyb3cgSC5iKEgucShhLCJudW0iKSl9LApNTTpmdW5jdGlvbihh
+KXtyZXR1cm4gdHlwZW9mIGE9PSJzdHJpbmcifSwKYzA6ZnVuY3Rpb24oYSl7aWYodHlwZW9mIGE9PSJz
+dHJpbmciKXJldHVybiBhCmlmKGE9PW51bGwpcmV0dXJuIGEKdGhyb3cgSC5iKEguUHYoYSwiU3RyaW5n
+IikpfSwKeTpmdW5jdGlvbihhKXtpZih0eXBlb2YgYT09InN0cmluZyIpcmV0dXJuIGEKaWYoYT09bnVs
+bClyZXR1cm4gYQp0aHJvdyBILmIoSC5xKGEsIlN0cmluZyIpKX0sCmlvOmZ1bmN0aW9uKGEsYil7dmFy
+IHQscyxyCmZvcih0PSIiLHM9IiIscj0wO3I8YS5sZW5ndGg7KytyLHM9IiwgIil0Kz1DLnhCLmgocyxI
+LmRtKGFbcl0sYikpCnJldHVybiB0fSwKYkk6ZnVuY3Rpb24oYTAsYTEsYTIpe3ZhciB0LHMscixxLHAs
+byxuLG0sbCxrLGosaSxoLGcsZixlLGQsYyxiLGE9IiwgIgppZihhMiE9bnVsbCl7dD1hMi5sZW5ndGgK
+aWYoYTE9PW51bGwpe2ExPUguVk0oW10sdS5zKQpzPW51bGx9ZWxzZSBzPWExLmxlbmd0aApyPWExLmxl
+bmd0aApmb3IocT10O3E+MDstLXEpQy5ObS5pKGExLCJUIisocitxKSkKZm9yKHA9IjwiLG89IiIscT0w
+O3E8dDsrK3Esbz1hKXtwKz1vCm49YTEubGVuZ3RoCm09bi0xLXEKaWYobTwwKXJldHVybiBILk9IKGEx
+LG0pCnA9Qy54Qi5oKHAsYTFbbV0pCmw9YTJbcV0KaWYoIUguY2MobCkpcCs9Qy54Qi5oKCIgZXh0ZW5k
+cyAiLEguZG0obCxhMSkpfXArPSI+In1lbHNle3A9IiIKcz1udWxsfW49YTAuUQprPWEwLmNoCmo9ay5h
+Cmk9ai5sZW5ndGgKaD1rLmIKZz1oLmxlbmd0aApmPWsuYwplPWYubGVuZ3RoCmQ9SC5kbShuLGExKQpm
+b3IoYz0iIixiPSIiLHE9MDtxPGk7KytxLGI9YSljKz1DLnhCLmgoYixILmRtKGpbcV0sYTEpKQppZihn
+PjApe2MrPWIrIlsiCmZvcihiPSIiLHE9MDtxPGc7KytxLGI9YSljKz1DLnhCLmgoYixILmRtKGhbcV0s
+YTEpKQpjKz0iXSJ9aWYoZT4wKXtjKz1iKyJ7Igpmb3IoYj0iIixxPTA7cTxlO3ErPTIsYj1hKWMrPUMu
+eEIuaChiLEguZG0oZltxKzFdLGExKSkrIiAiK2ZbcV0KYys9In0ifWlmKHMhPW51bGwpYTEubGVuZ3Ro
+PXMKcmV0dXJuIHArIigiK2MrIikgPT4gIitILmQoZCl9LApkbTpmdW5jdGlvbihhLGIpe3ZhciB0LHMs
+cixxLHA9YS56CmlmKHA9PT01KXJldHVybiJlcmFzZWQiCmlmKHA9PT0yKXJldHVybiJkeW5hbWljIgpp
+ZihwPT09MylyZXR1cm4idm9pZCIKaWYocD09PTEpcmV0dXJuIk5ldmVyIgppZihwPT09NClyZXR1cm4i
+YW55IgppZihwPT09NilyZXR1cm4gSC5kKEguZG0oYS5RLGIpKSsiKiIKaWYocD09PTcpcmV0dXJuIEgu
+ZChILmRtKGEuUSxiKSkrIj8iCmlmKHA9PT04KXJldHVybiJGdXR1cmVPcjwiK0guZChILmRtKGEuUSxi
+KSkrIj4iCmlmKHA9PT05KXt0PUgubzMoYS5RKQpzPWEuY2gKcmV0dXJuIHMubGVuZ3RoIT09MD90Kygi
+PCIrSC5pbyhzLGIpKyI+Iik6dH1pZihwPT09MTEpcmV0dXJuIEguYkkoYSxiLG51bGwpCmlmKHA9PT0x
+MilyZXR1cm4gSC5iSShhLlEsYixhLmNoKQppZihwPT09MTMpe3I9YS5RCnE9Yi5sZW5ndGgKcj1xLTEt
+cgppZihyPDB8fHI+PXEpcmV0dXJuIEguT0goYixyKQpyZXR1cm4gYltyXX1yZXR1cm4iPyJ9LApvMzpm
+dW5jdGlvbihhKXt2YXIgdCxzPUguSmcoYSkKaWYocyE9bnVsbClyZXR1cm4gcwp0PSJtaW5pZmllZDoi
+K2EKcmV0dXJuIHR9LApRbzpmdW5jdGlvbihhLGIpe3ZhciB0PWEudFJbYl0KZm9yKDt0eXBlb2YgdD09
+InN0cmluZyI7KXQ9YS50Ult0XQpyZXR1cm4gdH0sCmFpOmZ1bmN0aW9uKGEsYil7dmFyIHQscyxyLHEs
+cCxvPWEuZVQsbj1vW2JdCmlmKG49PW51bGwpcmV0dXJuIEguRShhLGIpCmVsc2UgaWYodHlwZW9mIG49
+PSJudW1iZXIiKXt0PW4Kcz1ILm0oYSw1LCIjIikKcj1bXQpmb3IocT0wO3E8dDsrK3Epci5wdXNoKHMp
+CnA9SC5KKGEsYixyKQpvW2JdPXAKcmV0dXJuIHB9ZWxzZSByZXR1cm4gbn0sCnhiOmZ1bmN0aW9uKGEs
+Yil7cmV0dXJuIEguSXgoYS50UixiKX0sCkZGOmZ1bmN0aW9uKGEsYil7cmV0dXJuIEguSXgoYS5lVCxi
+KX0sCkU6ZnVuY3Rpb24oYSxiKXt2YXIgdCxzPWEuZUMscj1zLmdldChiKQppZihyIT1udWxsKXJldHVy
+biByCnQ9SC56KGEsbnVsbCxiKQpzLnNldChiLHQpCnJldHVybiB0fSwKY0U6ZnVuY3Rpb24oYSxiLGMp
+e3ZhciB0LHMscj1iLmN4CmlmKHI9PW51bGwpcj1iLmN4PW5ldyBNYXAoKQp0PXIuZ2V0KGMpCmlmKHQh
+PW51bGwpcmV0dXJuIHQKcz1ILnooYSxiLGMpCnIuc2V0KGMscykKcmV0dXJuIHN9LAp2NTpmdW5jdGlv
+bihhLGIsYyl7dmFyIHQscyxyLHE9Yi5jeQppZihxPT1udWxsKXE9Yi5jeT1uZXcgTWFwKCkKdD1jLmRi
+CnM9cS5nZXQodCkKaWYocyE9bnVsbClyZXR1cm4gcwpyPUguYShhLGIsYy56PT09MTA/Yy5jaDpbY10p
+CnEuc2V0KHQscikKcmV0dXJuIHJ9LAp6OmZ1bmN0aW9uKGEsYixjKXt2YXIgdD1ILmkoSC5vKGEsYixj
+KSkKcmV0dXJuIHR9LApXRzpmdW5jdGlvbihhLGIpe3ZhciB0PWIuZGIKYS5lQy5zZXQodCxiKQpiLmE9
+SC5PegpiLmI9SC5BdgpiLmM9SC5KSgpyZXR1cm4gYn0sCm06ZnVuY3Rpb24oYSxiLGMpe3ZhciB0LHM9
+YS5lQy5nZXQoYykKaWYocyE9bnVsbClyZXR1cm4gcwp0PW5ldyBILkpjKG51bGwsbnVsbCxudWxsKQp0
+Lno9Ygp0LmRiPWMKcmV0dXJuIEguV0coYSx0KX0sCnY6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIHQscz1h
+LmVDLmdldChkKQppZihzIT1udWxsKXJldHVybiBzCnQ9bmV3IEguSmMobnVsbCxudWxsLG51bGwpCnQu
+ej1iCnQuUT1jCnQuZGI9ZApyZXR1cm4gSC5XRyhhLHQpfSwKSDpmdW5jdGlvbihhLGIpe3ZhciB0LHM9
+IiIrYisiXiIscj1hLmVDLmdldChzKQppZihyIT1udWxsKXJldHVybiByCnQ9bmV3IEguSmMobnVsbCxu
+dWxsLG51bGwpCnQuej0xMwp0LlE9Ygp0LmRiPXMKcmV0dXJuIEguV0coYSx0KX0sClV4OmZ1bmN0aW9u
+KGEpe3ZhciB0LHMscixxPWEubGVuZ3RoCmZvcih0PSIiLHM9IiIscj0wO3I8cTsrK3Iscz0iLCIpdCs9
+cythW3JdLmRiCnJldHVybiB0fSwKUzQ6ZnVuY3Rpb24oYSl7dmFyIHQscyxyLHEscCxvPWEubGVuZ3Ro
+CmZvcih0PSIiLHM9IiIscj0wO3I8bztyKz0yLHM9IiwiKXtxPWFbcl0KcD1hW3IrMV0uZGIKdCs9cytx
+KyI6IitwfXJldHVybiB0fSwKSjpmdW5jdGlvbihhLGIsYyl7dmFyIHQscyxyPWIKaWYoYy5sZW5ndGgh
+PT0wKXIrPSI8IitILlV4KGMpKyI+Igp0PWEuZUMuZ2V0KHIpCmlmKHQhPW51bGwpcmV0dXJuIHQKcz1u
+ZXcgSC5KYyhudWxsLG51bGwsbnVsbCkKcy56PTkKcy5RPWIKcy5jaD1jCmlmKGMubGVuZ3RoPjApcy5k
+PWNbMF0Kcy5kYj1yCnJldHVybiBILldHKGEscyl9LAphOmZ1bmN0aW9uKGEsYixjKXt2YXIgdCxzLHIs
+cSxwCmlmKGIuej09PTEwKXt0PWIuUQpzPWIuY2guY29uY2F0KGMpfWVsc2V7cz1jCnQ9Yn1yPXQuZGIr
+IjsiKygiPCIrSC5VeChzKSsiPiIpCnE9YS5lQy5nZXQocikKaWYocSE9bnVsbClyZXR1cm4gcQpwPW5l
+dyBILkpjKG51bGwsbnVsbCxudWxsKQpwLno9MTAKcC5RPXQKcC5jaD1zCnAuZGI9cgpyZXR1cm4gSC5X
+RyhhLHApfSwKQzpmdW5jdGlvbihhLGIsYyl7dmFyIHQscyxyLHE9Yi5kYixwPWMuYSxvPXAubGVuZ3Ro
+LG49Yy5iLG09bi5sZW5ndGgsbD1jLmMsaz1sLmxlbmd0aCxqPSIoIitILlV4KHApCmlmKG0+MClqKz0o
+bz4wPyIsIjoiIikrIlsiK0guVXgobikrIl0iCmlmKGs+MClqKz0obz4wPyIsIjoiIikrInsiK0guUzQo
+bCkrIn0iCnQ9cSsoaisiKSIpCnM9YS5lQy5nZXQodCkKaWYocyE9bnVsbClyZXR1cm4gcwpyPW5ldyBI
+LkpjKG51bGwsbnVsbCxudWxsKQpyLno9MTEKci5RPWIKci5jaD1jCnIuZGI9dApyZXR1cm4gSC5XRyhh
+LHIpfSwKRDpmdW5jdGlvbihhLGIsYyl7dmFyIHQscz1iLmRiKyI8IitILlV4KGMpKyI+IixyPWEuZUMu
+Z2V0KHMpCmlmKHIhPW51bGwpcmV0dXJuIHIKdD1uZXcgSC5KYyhudWxsLG51bGwsbnVsbCkKdC56PTEy
+CnQuUT1iCnQuY2g9Ywp0LmRiPXMKcmV0dXJuIEguV0coYSx0KX0sCm86ZnVuY3Rpb24oYSxiLGMpe3Jl
+dHVybnt1OmEsZTpiLHI6YyxzOltdLHA6MH19LAppOmZ1bmN0aW9uKGEpe3ZhciB0LHMscixxLHAsbyxu
+LG0sbCxrLGosaSxoLGc9YS5yLGY9YS5zCmZvcih0PWcubGVuZ3RoLHM9MDtzPHQ7KXtyPWcuY2hhckNv
+ZGVBdChzKQppZihyPj00OCYmcjw9NTcpcz1ILkEocysxLHIsZyxmKQplbHNlIGlmKCgoKHJ8MzIpPj4+
+MCktOTcmNjU1MzUpPDI2fHxyPT09OTV8fHI9PT0zNilzPUgudChhLHMsZyxmLCExKQplbHNlIGlmKHI9
+PT00NilzPUgudChhLHMsZyxmLCEwKQplbHNleysrcwpzd2l0Y2gocil7Y2FzZSA0NDpicmVhawpjYXNl
+IDU4OmJyZWFrCmNhc2UgNTk6Zi5wdXNoKEguSyhhLnUsYS5lLGYucG9wKCkpKQpicmVhawpjYXNlIDk0
+OmYucHVzaChILkgoYS51LGYucG9wKCkpKQpicmVhawpjYXNlIDM1OmYucHVzaChILm0oYS51LDUsIiMi
+KSkKYnJlYWsKY2FzZSA2NDpmLnB1c2goSC5tKGEudSwyLCJAIikpCmJyZWFrCmNhc2UgMTI2OmYucHVz
+aChILm0oYS51LDMsIn4iKSkKYnJlYWsKY2FzZSA2MDpmLnB1c2goYS5wKQphLnA9Zi5sZW5ndGgKYnJl
+YWsKY2FzZSA2MjpxPWEudQpwPWYuc3BsaWNlKGEucCkKSC5yKGEudSxhLmUscCkKYS5wPWYucG9wKCkK
+bz1mLnBvcCgpCmlmKHR5cGVvZiBvPT0ic3RyaW5nIilmLnB1c2goSC5KKHEsbyxwKSkKZWxzZXtuPUgu
+SyhxLGEuZSxvKQpzd2l0Y2gobi56KXtjYXNlIDExOmYucHVzaChILkQocSxuLHApKQpicmVhawpkZWZh
+dWx0OmYucHVzaChILmEocSxuLHApKQpicmVha319YnJlYWsKY2FzZSAzODpILkkoYSxmKQpicmVhawpj
+YXNlIDQyOm09YS51Cmw9SC5LKG0sYS5lLGYucG9wKCkpCmYucHVzaChILnYobSw2LGwsbC5kYisiKiIp
+KQpicmVhawpjYXNlIDYzOm09YS51Cmw9SC5LKG0sYS5lLGYucG9wKCkpCmYucHVzaChILnYobSw3LGws
+bC5kYisiPyIpKQpicmVhawpjYXNlIDQ3Om09YS51Cmw9SC5LKG0sYS5lLGYucG9wKCkpCmYucHVzaChI
+LnYobSw4LGwsbC5kYisiLyIpKQpicmVhawpjYXNlIDQwOmYucHVzaChhLnApCmEucD1mLmxlbmd0aApi
+cmVhawpjYXNlIDQxOnE9YS51Cms9bmV3IEguRygpCmo9cS5zRUEKaT1xLnNFQQpvPWYucG9wKCkKaWYo
+dHlwZW9mIG89PSJudW1iZXIiKXN3aXRjaChvKXtjYXNlLTE6aj1mLnBvcCgpCmJyZWFrCmNhc2UtMjpp
+PWYucG9wKCkKYnJlYWsKZGVmYXVsdDpmLnB1c2gobykKYnJlYWt9ZWxzZSBmLnB1c2gobykKcD1mLnNw
+bGljZShhLnApCkgucihhLnUsYS5lLHApCmEucD1mLnBvcCgpCmsuYT1wCmsuYj1qCmsuYz1pCmYucHVz
+aChILkMocSxILksocSxhLmUsZi5wb3AoKSksaykpCmJyZWFrCmNhc2UgOTE6Zi5wdXNoKGEucCkKYS5w
+PWYubGVuZ3RoCmJyZWFrCmNhc2UgOTM6cD1mLnNwbGljZShhLnApCkgucihhLnUsYS5lLHApCmEucD1m
+LnBvcCgpCmYucHVzaChwKQpmLnB1c2goLTEpCmJyZWFrCmNhc2UgMTIzOmYucHVzaChhLnApCmEucD1m
+Lmxlbmd0aApicmVhawpjYXNlIDEyNTpwPWYuc3BsaWNlKGEucCkKSC5CKGEudSxhLmUscCkKYS5wPWYu
+cG9wKCkKZi5wdXNoKHApCmYucHVzaCgtMikKYnJlYWsKZGVmYXVsdDp0aHJvdyJCYWQgY2hhcmFjdGVy
+ICIrcn19fWg9Zi5wb3AoKQpyZXR1cm4gSC5LKGEudSxhLmUsaCl9LApBOmZ1bmN0aW9uKGEsYixjLGQp
+e3ZhciB0LHMscj1iLTQ4CmZvcih0PWMubGVuZ3RoO2E8dDsrK2Epe3M9Yy5jaGFyQ29kZUF0KGEpCmlm
+KCEocz49NDgmJnM8PTU3KSlicmVhawpyPXIqMTArKHMtNDgpfWQucHVzaChyKQpyZXR1cm4gYX0sCnQ6
+ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgdCxzLHIscSxwLG8sbj1iKzEKZm9yKHQ9Yy5sZW5ndGg7bjx0
+Oysrbil7cz1jLmNoYXJDb2RlQXQobikKaWYocz09PTQ2KXtpZihlKWJyZWFrCmU9ITB9ZWxzZXtpZigh
+KCgoKHN8MzIpPj4+MCktOTcmNjU1MzUpPDI2fHxzPT09OTV8fHM9PT0zNikpcj1zPj00OCYmczw9NTcK
+ZWxzZSByPSEwCmlmKCFyKWJyZWFrfX1xPWMuc3Vic3RyaW5nKGIsbikKaWYoZSl7dD1hLnUKcD1hLmUK
+aWYocC56PT09MTApcD1wLlEKbz1ILlFvKHQscC5RKVtxXQppZihvPT1udWxsKUgudmgoJ05vICInK3Er
+JyIgaW4gIicrSC5tRChwKSsnIicpCmQucHVzaChILmNFKHQscCxvKSl9ZWxzZSBkLnB1c2gocSkKcmV0
+dXJuIG59LApJOmZ1bmN0aW9uKGEsYil7dmFyIHQ9Yi5wb3AoKQppZigwPT09dCl7Yi5wdXNoKEgubShh
+LnUsMSwiMCYiKSkKcmV0dXJufWlmKDE9PT10KXtiLnB1c2goSC5tKGEudSw0LCIxJiIpKQpyZXR1cm59
+dGhyb3cgSC5iKFAuaFYoIlVuZXhwZWN0ZWQgZXh0ZW5kZWQgb3BlcmF0aW9uICIrSC5kKHQpKSl9LApL
+OmZ1bmN0aW9uKGEsYixjKXtpZih0eXBlb2YgYz09InN0cmluZyIpcmV0dXJuIEguSihhLGMsYS5zRUEp
+CmVsc2UgaWYodHlwZW9mIGM9PSJudW1iZXIiKXJldHVybiBILlRWKGEsYixjKQplbHNlIHJldHVybiBj
+fSwKcjpmdW5jdGlvbihhLGIsYyl7dmFyIHQscz1jLmxlbmd0aApmb3IodD0wO3Q8czsrK3QpY1t0XT1I
+LksoYSxiLGNbdF0pfSwKQjpmdW5jdGlvbihhLGIsYyl7dmFyIHQscz1jLmxlbmd0aApmb3IodD0xO3Q8
+czt0Kz0yKWNbdF09SC5LKGEsYixjW3RdKX0sClRWOmZ1bmN0aW9uKGEsYixjKXt2YXIgdCxzLHI9Yi56
+CmlmKHI9PT0xMCl7aWYoYz09PTApcmV0dXJuIGIuUQp0PWIuY2gKcz10Lmxlbmd0aAppZihjPD1zKXJl
+dHVybiB0W2MtMV0KYy09cwpiPWIuUQpyPWIuen1lbHNlIGlmKGM9PT0wKXJldHVybiBiCmlmKHIhPT05
+KXRocm93IEguYihQLmhWKCJJbmRleGVkIGJhc2UgbXVzdCBiZSBhbiBpbnRlcmZhY2UgdHlwZSIpKQp0
+PWIuY2gKaWYoYzw9dC5sZW5ndGgpcmV0dXJuIHRbYy0xXQp0aHJvdyBILmIoUC5oVigiQmFkIGluZGV4
+ICIrYysiIGZvciAiK2IudygwKSkpfSwKV2U6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgdCxzLHIscSxw
+LG8sbixtLGwsawppZihiPT09ZClyZXR1cm4hMAppZihILmNjKGQpKXJldHVybiEwCnQ9Yi56CmlmKHQ9
+PT00KXJldHVybiEwCmlmKEguY2MoYikpcmV0dXJuITEKaWYoYj09PXUuUClyZXR1cm4hMApzPXQ9PT0x
+MwppZihzKWlmKEguV2UoYSxjW2IuUV0sYyxkLGUpKXJldHVybiEwCnI9ZC56CmlmKHQ9PT02KXJldHVy
+biBILldlKGEsYi5RLGMsZCxlKQppZihyPT09Nil7cT1kLlEKcmV0dXJuIEguV2UoYSxiLGMscSxlKX1p
+Zih0PT09OCl7aWYoIUguV2UoYSxiLlEsYyxkLGUpKXJldHVybiExCnJldHVybiBILldlKGEsSC54Wihh
+LGIpLGMsZCxlKX1pZih0PT09Nyl7cT1ILldlKGEsYi5RLGMsZCxlKQpyZXR1cm4gcX1pZihyPT09OCl7
+aWYoSC5XZShhLGIsYyxkLlEsZSkpcmV0dXJuITAKcmV0dXJuIEguV2UoYSxiLGMsSC54WihhLGQpLGUp
+fWlmKHI9PT03KXtxPUguV2UoYSxiLGMsZC5RLGUpCnJldHVybiBxfWlmKHMpcmV0dXJuITEKcT10IT09
+MTEKaWYoKCFxfHx0PT09MTIpJiZkPT09dS5aKXJldHVybiEwCmlmKHI9PT0xMil7aWYoYj09PXUuZyly
+ZXR1cm4hMAppZih0IT09MTIpcmV0dXJuITEKcD1iLmNoCm89ZC5jaApuPXAubGVuZ3RoCmlmKG4hPT1v
+Lmxlbmd0aClyZXR1cm4hMQpmb3IocT11LmF2LG09MDttPG47KyttKXtsPXBbbV0Kaz1vW21dCnEuYihs
+KQpxLmIoaykKaWYoIUguV2UoYSxsLGMsayxlKXx8IUguV2UoYSxrLGUsbCxjKSlyZXR1cm4hMX1jPWM9
+PW51bGw/cDpwLmNvbmNhdChjKQplPWU9PW51bGw/bzpvLmNvbmNhdChlKQpyZXR1cm4gSC5iTyhhLGIu
+USxjLGQuUSxlKX1pZihyPT09MTEpe2lmKGI9PT11LmcpcmV0dXJuITAKaWYocSlyZXR1cm4hMQpyZXR1
+cm4gSC5iTyhhLGIsYyxkLGUpfWlmKHQ9PT05KXtpZihyIT09OSlyZXR1cm4hMQpyZXR1cm4gSC5wRyhh
+LGIsYyxkLGUpfXJldHVybiExfSwKYk86ZnVuY3Rpb24oYTAsYTEsYTIsYTMsYTQpe3ZhciB0LHMscixx
+LHAsbyxuLG0sbCxrLGosaSxoLGcsZixlLGQsYyxiLGEKaWYoIUguV2UoYTAsYTEuUSxhMixhMy5RLGE0
+KSlyZXR1cm4hMQp0PWExLmNoCnM9YTMuY2gKcj10LmEKcT1zLmEKcD1yLmxlbmd0aApvPXEubGVuZ3Ro
+CmlmKHA+bylyZXR1cm4hMQpuPW8tcAptPXQuYgpsPXMuYgprPW0ubGVuZ3RoCmo9bC5sZW5ndGgKaWYo
+cCtrPG8railyZXR1cm4hMQpmb3IoaT0wO2k8cDsrK2kpe2g9cltpXQppZighSC5XZShhMCxxW2ldLGE0
+LGgsYTIpKXJldHVybiExfWZvcihpPTA7aTxuOysraSl7aD1tW2ldCmlmKCFILldlKGEwLHFbcCtpXSxh
+NCxoLGEyKSlyZXR1cm4hMX1mb3IoaT0wO2k8ajsrK2kpe2g9bVtuK2ldCmlmKCFILldlKGEwLGxbaV0s
+YTQsaCxhMikpcmV0dXJuITF9Zz10LmMKZj1zLmMKZT1nLmxlbmd0aApkPWYubGVuZ3RoCmZvcihpPTAs
+Yz0wO2M8ZDtjKz0yKXtiPWZbY10KZG97aWYoaT49ZSlyZXR1cm4hMQphPWdbaV0KaSs9Mn13aGlsZShh
+PGIpCmlmKGI8YSlyZXR1cm4hMQpoPWdbaS0xXQppZighSC5XZShhMCxmW2MrMV0sYTQsaCxhMikpcmV0
+dXJuITF9cmV0dXJuITB9LApwRzpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciB0LHMscixxLHAsbyxuLG0s
+bD1iLlEsaz1kLlEKaWYobD09PWspe3Q9Yi5jaApzPWQuY2gKcj10Lmxlbmd0aApmb3IocT0wO3E8cjsr
+K3Epe3A9dFtxXQpvPXNbcV0KaWYoIUguV2UoYSxwLGMsbyxlKSlyZXR1cm4hMX1yZXR1cm4hMH1uPUgu
+UW8oYSxsKQppZihuPT1udWxsKXJldHVybiExCm09bltrXQppZihtPT1udWxsKXJldHVybiExCnI9bS5s
+ZW5ndGgKcz1kLmNoCmZvcihxPTA7cTxyOysrcSlpZighSC5XZShhLEguY0UoYSxiLG1bcV0pLGMsc1tx
+XSxlKSlyZXR1cm4hMQpyZXR1cm4hMH0sCmNjOmZ1bmN0aW9uKGEpe3ZhciB0LHMKaWYoYT09PXUuSyly
+ZXR1cm4hMAp0PWEuegppZih0IT09MilpZih0IT09MylpZih0IT09NClpZih0IT09NSlzPXQ9PT04JiZI
+LmNjKGEuUSkKZWxzZSBzPSEwCmVsc2Ugcz0hMAplbHNlIHM9ITAKZWxzZSBzPSEwCnJldHVybiBzfSwK
+SXg6ZnVuY3Rpb24oYSxiKXt2YXIgdCxzLHI9T2JqZWN0LmtleXMoYikscT1yLmxlbmd0aApmb3IodD0w
+O3Q8cTsrK3Qpe3M9clt0XQphW3NdPWJbc119fSwKSmM6ZnVuY3Rpb24gSmMoYSxiLGMpe3ZhciBfPXRo
+aXMKXy5hPWEKXy5iPWIKXy5jPWMKXy55PV8ueD1fLmQ9bnVsbApfLno9MApfLmRiPV8uY3k9Xy5jeD1f
+LmNoPV8uUT1udWxsfSwKRzpmdW5jdGlvbiBHKCl7dGhpcy5jPXRoaXMuYj10aGlzLmE9bnVsbH0sCnU5
+OmZ1bmN0aW9uIHU5KCl7fSwKaHo6ZnVuY3Rpb24gaHooYSl7dGhpcy5hPWF9LAppTTpmdW5jdGlvbiBp
+TShhKXt0aGlzLmE9YX0sClI5OmZ1bmN0aW9uKGEpe3JldHVybiB1LmQuYyhhKXx8dS5CLmMoYSl8fHUu
+ZHouYyhhKXx8dS5JLmMoYSl8fHUuQS5jKGEpfHx1Lmc0LmMoYSl8fHUuZzIuYyhhKX0sCkpnOmZ1bmN0
+aW9uKGEpe3JldHVybiB2Lm1hbmdsZWRHbG9iYWxOYW1lc1thXX19LEo9ewpRdTpmdW5jdGlvbihhLGIs
+YyxkKXtyZXR1cm57aTphLHA6YixlOmMseDpkfX0sCmtzOmZ1bmN0aW9uKGEpe3ZhciB0LHMscixxLHA9
+YVt2LmRpc3BhdGNoUHJvcGVydHlOYW1lXQppZihwPT1udWxsKWlmKCQuQnY9PW51bGwpe0guWEQoKQpw
+PWFbdi5kaXNwYXRjaFByb3BlcnR5TmFtZV19aWYocCE9bnVsbCl7dD1wLnAKaWYoITE9PT10KXJldHVy
+biBwLmkKaWYoITA9PT10KXJldHVybiBhCnM9T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpCmlmKHQ9PT1z
+KXJldHVybiBwLmkKaWYocC5lPT09cyl0aHJvdyBILmIoUC5TWSgiUmV0dXJuIGludGVyY2VwdG9yIGZv
+ciAiK0guZCh0KGEscCkpKSl9cj1hLmNvbnN0cnVjdG9yCnE9cj09bnVsbD9udWxsOnJbJC5VTigpXQpp
+ZihxIT1udWxsKXJldHVybiBxCnE9SC53MyhhKQppZihxIT1udWxsKXJldHVybiBxCmlmKHR5cGVvZiBh
+PT0iZnVuY3Rpb24iKXJldHVybiBDLkRHCnQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKGEpCmlmKHQ9PW51
+bGwpcmV0dXJuIEMuWlEKaWYodD09PU9iamVjdC5wcm90b3R5cGUpcmV0dXJuIEMuWlEKaWYodHlwZW9m
+IHI9PSJmdW5jdGlvbiIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShyLCQuVU4oKSx7dmFsdWU6Qy52Qixl
+bnVtZXJhYmxlOmZhbHNlLHdyaXRhYmxlOnRydWUsY29uZmlndXJhYmxlOnRydWV9KQpyZXR1cm4gQy52
+Qn1yZXR1cm4gQy52Qn0sClFpOmZ1bmN0aW9uKGEsYil7aWYoYTwwfHxhPjQyOTQ5NjcyOTUpdGhyb3cg
+SC5iKFAuVEUoYSwwLDQyOTQ5NjcyOTUsImxlbmd0aCIsbnVsbCkpCnJldHVybiBKLnB5KG5ldyBBcnJh
+eShhKSxiKX0sCnB5OmZ1bmN0aW9uKGEsYil7cmV0dXJuIEouRXAoSC5WTShhLGIuQygiamQ8MD4iKSkp
+fSwKRXA6ZnVuY3Rpb24oYSl7YS5maXhlZCRsZW5ndGg9QXJyYXkKcmV0dXJuIGF9LAp6QzpmdW5jdGlv
+bihhKXthLmZpeGVkJGxlbmd0aD1BcnJheQphLmltbXV0YWJsZSRsaXN0PUFycmF5CnJldHVybiBhfSwK
+R2E6ZnVuY3Rpb24oYSl7aWYoYTwyNTYpc3dpdGNoKGEpe2Nhc2UgOTpjYXNlIDEwOmNhc2UgMTE6Y2Fz
+ZSAxMjpjYXNlIDEzOmNhc2UgMzI6Y2FzZSAxMzM6Y2FzZSAxNjA6cmV0dXJuITAKZGVmYXVsdDpyZXR1
+cm4hMX1zd2l0Y2goYSl7Y2FzZSA1NzYwOmNhc2UgODE5MjpjYXNlIDgxOTM6Y2FzZSA4MTk0OmNhc2Ug
+ODE5NTpjYXNlIDgxOTY6Y2FzZSA4MTk3OmNhc2UgODE5ODpjYXNlIDgxOTk6Y2FzZSA4MjAwOmNhc2Ug
+ODIwMTpjYXNlIDgyMDI6Y2FzZSA4MjMyOmNhc2UgODIzMzpjYXNlIDgyMzk6Y2FzZSA4Mjg3OmNhc2Ug
+MTIyODg6Y2FzZSA2NTI3OTpyZXR1cm4hMApkZWZhdWx0OnJldHVybiExfX0sCm1tOmZ1bmN0aW9uKGEs
+Yil7dmFyIHQscwpmb3IodD1hLmxlbmd0aDtiPHQ7KXtzPUMueEIuVyhhLGIpCmlmKHMhPT0zMiYmcyE9
+PTEzJiYhSi5HYShzKSlicmVhazsrK2J9cmV0dXJuIGJ9LApjMTpmdW5jdGlvbihhLGIpe3ZhciB0LHMK
+Zm9yKDtiPjA7Yj10KXt0PWItMQpzPUMueEIubShhLHQpCmlmKHMhPT0zMiYmcyE9PTEzJiYhSi5HYShz
+KSlicmVha31yZXR1cm4gYn0sClJFOmZ1bmN0aW9uKGEpe2lmKGE9PW51bGwpcmV0dXJuIGEKaWYodHlw
+ZW9mIGEhPSJvYmplY3QiKXtpZih0eXBlb2YgYT09ImZ1bmN0aW9uIilyZXR1cm4gSi5jNS5wcm90b3R5
+cGUKcmV0dXJuIGF9aWYoYSBpbnN0YW5jZW9mIFAuaylyZXR1cm4gYQpyZXR1cm4gSi5rcyhhKX0sClRK
+OmZ1bmN0aW9uKGEpe2lmKHR5cGVvZiBhPT0ibnVtYmVyIilyZXR1cm4gSi5xSS5wcm90b3R5cGUKaWYo
+dHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBKLkRyLnByb3RvdHlwZQppZihhPT1udWxsKXJldHVybiBh
+CmlmKGEuY29uc3RydWN0b3I9PUFycmF5KXJldHVybiBKLmpkLnByb3RvdHlwZQppZih0eXBlb2YgYSE9
+Im9iamVjdCIpe2lmKHR5cGVvZiBhPT0iZnVuY3Rpb24iKXJldHVybiBKLmM1LnByb3RvdHlwZQpyZXR1
+cm4gYX1pZihhIGluc3RhbmNlb2YgUC5rKXJldHVybiBhCnJldHVybiBKLmtzKGEpfSwKVTY6ZnVuY3Rp
+b24oYSl7aWYodHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBKLkRyLnByb3RvdHlwZQppZihhPT1udWxs
+KXJldHVybiBhCmlmKGEuY29uc3RydWN0b3I9PUFycmF5KXJldHVybiBKLmpkLnByb3RvdHlwZQppZih0
+eXBlb2YgYSE9Im9iamVjdCIpe2lmKHR5cGVvZiBhPT0iZnVuY3Rpb24iKXJldHVybiBKLmM1LnByb3Rv
+dHlwZQpyZXR1cm4gYX1pZihhIGluc3RhbmNlb2YgUC5rKXJldHVybiBhCnJldHVybiBKLmtzKGEpfSwK
+aWE6ZnVuY3Rpb24oYSl7aWYodHlwZW9mIGE9PSJudW1iZXIiKXtpZihNYXRoLmZsb29yKGEpPT1hKXJl
+dHVybiBKLnVyLnByb3RvdHlwZQpyZXR1cm4gSi5WQS5wcm90b3R5cGV9aWYodHlwZW9mIGE9PSJzdHJp
+bmciKXJldHVybiBKLkRyLnByb3RvdHlwZQppZihhPT1udWxsKXJldHVybiBKLllFLnByb3RvdHlwZQpp
+Zih0eXBlb2YgYT09ImJvb2xlYW4iKXJldHVybiBKLnlFLnByb3RvdHlwZQppZihhLmNvbnN0cnVjdG9y
+PT1BcnJheSlyZXR1cm4gSi5qZC5wcm90b3R5cGUKaWYodHlwZW9mIGEhPSJvYmplY3QiKXtpZih0eXBl
+b2YgYT09ImZ1bmN0aW9uIilyZXR1cm4gSi5jNS5wcm90b3R5cGUKcmV0dXJuIGF9aWYoYSBpbnN0YW5j
+ZW9mIFAuaylyZXR1cm4gYQpyZXR1cm4gSi5rcyhhKX0sCnJZOmZ1bmN0aW9uKGEpe2lmKHR5cGVvZiBh
+PT0ic3RyaW5nIilyZXR1cm4gSi5Eci5wcm90b3R5cGUKaWYoYT09bnVsbClyZXR1cm4gYQppZighKGEg
+aW5zdGFuY2VvZiBQLmspKXJldHVybiBKLmtkLnByb3RvdHlwZQpyZXR1cm4gYX0sCncxOmZ1bmN0aW9u
+KGEpe2lmKGE9PW51bGwpcmV0dXJuIGEKaWYoYS5jb25zdHJ1Y3Rvcj09QXJyYXkpcmV0dXJuIEouamQu
+cHJvdG90eXBlCmlmKHR5cGVvZiBhIT0ib2JqZWN0Iil7aWYodHlwZW9mIGE9PSJmdW5jdGlvbiIpcmV0
+dXJuIEouYzUucHJvdG90eXBlCnJldHVybiBhfWlmKGEgaW5zdGFuY2VvZiBQLmspcmV0dXJuIGEKcmV0
+dXJuIEoua3MoYSl9LApDTTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gSi5SRShhKS5kdShhLGIsYyxk
+KX0sCkZMOmZ1bmN0aW9uKGEsYil7cmV0dXJuIEouclkoYSkuZGQoYSxiKX0sCkdBOmZ1bmN0aW9uKGEs
+Yil7cmV0dXJuIEoudzEoYSkuRShhLGIpfSwKR3I6ZnVuY3Rpb24oYSl7cmV0dXJuIEouUkUoYSkuZ21X
+KGEpfSwKSG06ZnVuY3Rpb24oYSl7cmV0dXJuIEouVTYoYSkuZ0EoYSl9LApJVDpmdW5jdGlvbihhKXty
+ZXR1cm4gSi53MShhKS5na3ooYSl9LApKeTpmdW5jdGlvbihhLGIpe3JldHVybiBKLmlhKGEpLmU3KGEs
+Yil9LApLVjpmdW5jdGlvbihhLGIpe3JldHVybiBKLnJZKGEpLkcoYSxiKX0sCkx0OmZ1bmN0aW9uKGEp
+e3JldHVybiBKLlJFKGEpLndnKGEpfSwKTTE6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBKLncxKGEpLkUy
+KGEsYixjKX0sClF6OmZ1bmN0aW9uKGEsYil7cmV0dXJuIEouclkoYSkuVyhhLGIpfSwKUk06ZnVuY3Rp
+b24oYSxiKXtpZihhPT1udWxsKXJldHVybiBiPT1udWxsCmlmKHR5cGVvZiBhIT0ib2JqZWN0IilyZXR1
+cm4gYiE9bnVsbCYmYT09PWIKcmV0dXJuIEouaWEoYSkuRE4oYSxiKX0sClQwOmZ1bmN0aW9uKGEpe3Jl
+dHVybiBKLnJZKGEpLmJTKGEpfSwKYTY6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gSi5yWShhKS5tKGEsYil9
+LApiVDpmdW5jdGlvbihhKXtyZXR1cm4gSi5SRShhKS5ENChhKX0sCmJiOmZ1bmN0aW9uKGEsYil7aWYo
+dHlwZW9mIGE9PSJudW1iZXIiJiZ0eXBlb2YgYj09Im51bWJlciIpcmV0dXJuIGErYgpyZXR1cm4gSi5U
+SihhKS5oKGEsYil9LApjSDpmdW5jdGlvbihhKXtyZXR1cm4gSi5yWShhKS5oYyhhKX0sCmRSOmZ1bmN0
+aW9uKGEpe3JldHVybiBKLlJFKGEpLmdEKGEpfSwKZFo6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIEou
+UkUoYSkuT24oYSxiLGMsZCl9LApkaDpmdW5jdGlvbihhKXtyZXR1cm4gSi5SRShhKS50bihhKX0sCmhm
+OmZ1bmN0aW9uKGEpe3JldHVybiBKLmlhKGEpLmdpTyhhKX0sCmlnOmZ1bmN0aW9uKGEpe3JldHVybiBK
+LlJFKGEpLmdRZyhhKX0sCmo6ZnVuY3Rpb24oYSl7cmV0dXJuIEouaWEoYSkudyhhKX0sCmw1OmZ1bmN0
+aW9uKGEsYil7cmV0dXJuIEouUkUoYSkuc2hmKGEsYil9LApsZDpmdW5jdGlvbihhLGIsYyl7cmV0dXJu
+IEouclkoYSkuTmooYSxiLGMpfSwKcTA6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBKLnJZKGEpLlFpKGEs
+YixjKX0sCnFGOmZ1bmN0aW9uKGEpe3JldHVybiBKLlJFKGEpLmdWbChhKX0sCnRIOmZ1bmN0aW9uKGEs
+YixjKXtyZXR1cm4gSi5SRShhKS5wayhhLGIsYyl9LAp3MjpmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBi
+PT09Im51bWJlciIpaWYoYS5jb25zdHJ1Y3Rvcj09QXJyYXl8fHR5cGVvZiBhPT0ic3RyaW5nInx8SC53
+VihhLGFbdi5kaXNwYXRjaFByb3BlcnR5TmFtZV0pKWlmKGI+Pj4wPT09YiYmYjxhLmxlbmd0aClyZXR1
+cm4gYVtiXQpyZXR1cm4gSi5VNihhKS5xKGEsYil9LAp5UTpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4g
+Si5yWShhKS5pNyhhLGIsYyxkKX0sCnpsOmZ1bmN0aW9uKGEsYil7cmV0dXJuIEouVTYoYSkudGcoYSxi
+KX0sCnZCOmZ1bmN0aW9uIHZCKCl7fSwKeUU6ZnVuY3Rpb24geUUoKXt9LApZRTpmdW5jdGlvbiBZRSgp
+e30sCk1GOmZ1bmN0aW9uIE1GKCl7fSwKaUM6ZnVuY3Rpb24gaUMoKXt9LAprZDpmdW5jdGlvbiBrZCgp
+e30sCmM1OmZ1bmN0aW9uIGM1KCl7fSwKamQ6ZnVuY3Rpb24gamQoYSl7dGhpcy4kdGk9YX0sClBvOmZ1
+bmN0aW9uIFBvKGEpe3RoaXMuJHRpPWF9LAptMTpmdW5jdGlvbiBtMShhLGIsYyl7dmFyIF89dGhpcwpf
+LmE9YQpfLmI9YgpfLmM9MApfLmQ9bnVsbApfLiR0aT1jfSwKcUk6ZnVuY3Rpb24gcUkoKXt9LAp1cjpm
+dW5jdGlvbiB1cigpe30sClZBOmZ1bmN0aW9uIFZBKCl7fSwKRHI6ZnVuY3Rpb24gRHIoKXt9fSxQPXsK
+T2o6ZnVuY3Rpb24oKXt2YXIgdCxzLHI9e30KaWYoc2VsZi5zY2hlZHVsZUltbWVkaWF0ZSE9bnVsbCly
+ZXR1cm4gUC5FWCgpCmlmKHNlbGYuTXV0YXRpb25PYnNlcnZlciE9bnVsbCYmc2VsZi5kb2N1bWVudCE9
+bnVsbCl7dD1zZWxmLmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpCnM9c2VsZi5kb2N1bWVudC5j
+cmVhdGVFbGVtZW50KCJzcGFuIikKci5hPW51bGwKbmV3IHNlbGYuTXV0YXRpb25PYnNlcnZlcihILnRS
+KG5ldyBQLnRoKHIpLDEpKS5vYnNlcnZlKHQse2NoaWxkTGlzdDp0cnVlfSkKcmV0dXJuIG5ldyBQLmhh
+KHIsdCxzKX1lbHNlIGlmKHNlbGYuc2V0SW1tZWRpYXRlIT1udWxsKXJldHVybiBQLnl0KCkKcmV0dXJu
+IFAucVcoKX0sClpWOmZ1bmN0aW9uKGEpe3NlbGYuc2NoZWR1bGVJbW1lZGlhdGUoSC50UihuZXcgUC5W
+cyh1Lk0uYihhKSksMCkpfSwKb0E6ZnVuY3Rpb24oYSl7c2VsZi5zZXRJbW1lZGlhdGUoSC50UihuZXcg
+UC5GdCh1Lk0uYihhKSksMCkpfSwKQno6ZnVuY3Rpb24oYSl7dS5NLmIoYSkKUC5RTigwLGEpfSwKUU46
+ZnVuY3Rpb24oYSxiKXt2YXIgdD1uZXcgUC5XMygpCnQuQ1koYSxiKQpyZXR1cm4gdH0sCkZYOmZ1bmN0
+aW9uKGEpe3JldHVybiBuZXcgUC5paChuZXcgUC52cygkLlgzLGEuQygidnM8MD4iKSksYS5DKCJpaDww
+PiIpKX0sCkRJOmZ1bmN0aW9uKGEsYil7YS4kMigwLG51bGwpCmIuYj0hMApyZXR1cm4gYi5hfSwKalE6
+ZnVuY3Rpb24oYSxiKXtQLkplKGEsYil9LAp5QzpmdW5jdGlvbihhLGIpe2IuYU0oMCxhKX0sCmYzOmZ1
+bmN0aW9uKGEsYil7Yi53MChILlJ1KGEpLEgudHMoYSkpfSwKSmU6ZnVuY3Rpb24oYSxiKXt2YXIgdCxz
+LHI9bmV3IFAuV00oYikscT1uZXcgUC5TWChiKQppZihhIGluc3RhbmNlb2YgUC52cylhLlFkKHIscSx1
+LnopCmVsc2V7dD11LnoKaWYodS5jLmMoYSkpYS5TcShyLHEsdCkKZWxzZXtzPW5ldyBQLnZzKCQuWDMs
+dS5fKQpzLmE9NApzLmM9YQpzLlFkKHIsbnVsbCx0KX19fSwKbHo6ZnVuY3Rpb24oYSl7dmFyIHQ9ZnVu
+Y3Rpb24oYixjKXtyZXR1cm4gZnVuY3Rpb24oZCxlKXt3aGlsZSh0cnVlKXRyeXtiKGQsZSkKYnJlYWt9
+Y2F0Y2gocyl7ZT1zCmQ9Y319fShhLDEpCnJldHVybiAkLlgzLkxqKG5ldyBQLkdzKHQpLHUuUCx1LmVn
+LHUueil9LAprMzpmdW5jdGlvbihhLGIpe3ZhciB0LHMscgpiLmE9MQp0cnl7YS5TcShuZXcgUC5wVihi
+KSxuZXcgUC5VNyhiKSx1LlApfWNhdGNoKHIpe3Q9SC5SdShyKQpzPUgudHMocikKUC5yYihuZXcgUC52
+cihiLHQscykpfX0sCkE5OmZ1bmN0aW9uKGEsYil7dmFyIHQscyxyCmZvcih0PXUuXztzPWEuYSxzPT09
+MjspYT10LmIoYS5jKQppZihzPj00KXtyPWIuYWgoKQpiLmE9YS5hCmIuYz1hLmMKUC5IWihiLHIpfWVs
+c2V7cj11LnguYihiLmMpCmIuYT0yCmIuYz1hCmEualEocil9fSwKSFo6ZnVuY3Rpb24oYSxiKXt2YXIg
+dCxzLHIscSxwLG8sbixtLGwsayxqLGksaCxnLGYsZT1udWxsLGQ9e30sYz1kLmE9YQpmb3IodD11Lm4s
+cz11Lngscj11LmM7ITA7KXtxPXt9CnA9Yy5hPT09OAppZihiPT1udWxsKXtpZihwKXtvPXQuYihjLmMp
+ClAuTDIoZSxlLGMuYixvLmEsby5iKX1yZXR1cm59Zm9yKDtuPWIuYSxuIT1udWxsO2I9bil7Yi5hPW51
+bGwKUC5IWihkLmEsYil9Yz1kLmEKbT1jLmMKcS5hPXAKcS5iPW0KbD0hcAppZihsKXtrPWIuYwprPShr
+JjEpIT09MHx8KGsmMTUpPT09OH1lbHNlIGs9ITAKaWYoayl7az1iLmIKaj1rLmIKaWYocCl7aT1jLmI9
+PT1qCmk9IShpfHxpKX1lbHNlIGk9ITEKaWYoaSl7dC5iKG0pClAuTDIoZSxlLGMuYixtLmEsbS5iKQpy
+ZXR1cm59aD0kLlgzCmlmKGghPT1qKSQuWDM9agplbHNlIGg9ZQpjPWIuYwppZigoYyYxNSk9PT04KW5l
+dyBQLlJUKGQscSxiLHApLiQwKCkKZWxzZSBpZihsKXtpZigoYyYxKSE9PTApbmV3IFAucnEocSxiLG0p
+LiQwKCl9ZWxzZSBpZigoYyYyKSE9PTApbmV3IFAuUlcoZCxxLGIpLiQwKCkKaWYoaCE9bnVsbCkkLlgz
+PWgKYz1xLmIKaWYoci5jKGMpKXtpZihjLmE+PTQpe2c9cy5iKGsuYykKay5jPW51bGwKYj1rLk44KGcp
+CmsuYT1jLmEKay5jPWMuYwpkLmE9Ywpjb250aW51ZX1lbHNlIFAuQTkoYyxrKQpyZXR1cm59fWY9Yi5i
+Cmc9cy5iKGYuYykKZi5jPW51bGwKYj1mLk44KGcpCmM9cS5hCmw9cS5iCmlmKCFjKXtmLiR0aS5kLmIo
+bCkKZi5hPTQKZi5jPWx9ZWxzZXt0LmIobCkKZi5hPTgKZi5jPWx9ZC5hPWYKYz1mfX0sClZIOmZ1bmN0
+aW9uKGEsYil7dmFyIHQKaWYodS5XLmMoYSkpcmV0dXJuIGIuTGooYSx1LnosdS5LLHUubCkKdD11LnkK
+aWYodC5jKGEpKXJldHVybiB0LmIoYSkKdGhyb3cgSC5iKFAuTDMoYSwib25FcnJvciIsIkVycm9yIGhh
+bmRsZXIgbXVzdCBhY2NlcHQgb25lIE9iamVjdCBvciBvbmUgT2JqZWN0IGFuZCBhIFN0YWNrVHJhY2Ug
+YXMgYXJndW1lbnRzLCBhbmQgcmV0dXJuIGEgYSB2YWxpZCByZXN1bHQiKSl9LApwdTpmdW5jdGlvbigp
+e3ZhciB0LHMKZm9yKDt0PSQuUzYsdCE9bnVsbDspeyQubWc9bnVsbApzPXQuYgokLlM2PXMKaWYocz09
+bnVsbCkkLms4PW51bGwKdC5hLiQwKCl9fSwKZU46ZnVuY3Rpb24oKXskLlVEPSEwCnRyeXtQLnB1KCl9
+ZmluYWxseXskLm1nPW51bGwKJC5VRD0hMQppZigkLlM2IT1udWxsKSQudXQoKS4kMShQLlVJKCkpfX0s
+CmVXOmZ1bmN0aW9uKGEpe3ZhciB0PW5ldyBQLk9NKGEpCmlmKCQuUzY9PW51bGwpeyQuUzY9JC5rOD10
+CmlmKCEkLlVEKSQudXQoKS4kMShQLlVJKCkpfWVsc2UgJC5rOD0kLms4LmI9dH0sCnJSOmZ1bmN0aW9u
+KGEpe3ZhciB0LHMscj0kLlM2CmlmKHI9PW51bGwpe1AuZVcoYSkKJC5tZz0kLms4CnJldHVybn10PW5l
+dyBQLk9NKGEpCnM9JC5tZwppZihzPT1udWxsKXt0LmI9cgokLlM2PSQubWc9dH1lbHNle3QuYj1zLmIK
+JC5tZz1zLmI9dAppZih0LmI9PW51bGwpJC5rOD10fX0sCnJiOmZ1bmN0aW9uKGEpe3ZhciB0PW51bGws
+cz0kLlgzCmlmKEMuTlU9PT1zKXtQLlRrKHQsdCxDLk5VLGEpCnJldHVybn1QLlRrKHQsdCxzLHUuTS5i
+KHMuR1koYSkpKX0sClF3OmZ1bmN0aW9uKGEsYil7aWYoYT09bnVsbClILnZoKFAuRWUoInN0cmVhbSIp
+KQpyZXR1cm4gbmV3IFAueEkoYi5DKCJ4STwwPiIpKX0sCkwyOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFy
+IHQ9e30KdC5hPWQKUC5yUihuZXcgUC5wSyh0LGUpKX0sClQ4OmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFy
+IHQscz0kLlgzCmlmKHM9PT1jKXJldHVybiBkLiQwKCkKJC5YMz1jCnQ9cwp0cnl7cz1kLiQwKCkKcmV0
+dXJuIHN9ZmluYWxseXskLlgzPXR9fSwKeXY6ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyl7dmFyIHQscz0k
+LlgzCmlmKHM9PT1jKXJldHVybiBkLiQxKGUpCiQuWDM9Ywp0PXMKdHJ5e3M9ZC4kMShlKQpyZXR1cm4g
+c31maW5hbGx5eyQuWDM9dH19LApReDpmdW5jdGlvbihhLGIsYyxkLGUsZixnLGgsaSl7dmFyIHQscz0k
+LlgzCmlmKHM9PT1jKXJldHVybiBkLiQyKGUsZikKJC5YMz1jCnQ9cwp0cnl7cz1kLiQyKGUsZikKcmV0
+dXJuIHN9ZmluYWxseXskLlgzPXR9fSwKVGs6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIHQKdS5NLmIoZCkK
+dD1DLk5VIT09YwppZih0KWQ9ISghdHx8ITEpP2MuR1koZCk6Yy5SVChkLHUuSCkKUC5lVyhkKX0sCnRo
+OmZ1bmN0aW9uIHRoKGEpe3RoaXMuYT1hfSwKaGE6ZnVuY3Rpb24gaGEoYSxiLGMpe3RoaXMuYT1hCnRo
+aXMuYj1iCnRoaXMuYz1jfSwKVnM6ZnVuY3Rpb24gVnMoYSl7dGhpcy5hPWF9LApGdDpmdW5jdGlvbiBG
+dChhKXt0aGlzLmE9YX0sClczOmZ1bmN0aW9uIFczKCl7fSwKeUg6ZnVuY3Rpb24geUgoYSxiKXt0aGlz
+LmE9YQp0aGlzLmI9Yn0sCmloOmZ1bmN0aW9uIGloKGEsYil7dGhpcy5hPWEKdGhpcy5iPSExCnRoaXMu
+JHRpPWJ9LApXTTpmdW5jdGlvbiBXTShhKXt0aGlzLmE9YX0sClNYOmZ1bmN0aW9uIFNYKGEpe3RoaXMu
+YT1hfSwKR3M6ZnVuY3Rpb24gR3MoYSl7dGhpcy5hPWF9LApQZjpmdW5jdGlvbiBQZigpe30sClpmOmZ1
+bmN0aW9uIFpmKGEsYil7dGhpcy5hPWEKdGhpcy4kdGk9Yn0sCkZlOmZ1bmN0aW9uIEZlKGEsYixjLGQs
+ZSl7dmFyIF89dGhpcwpfLmE9bnVsbApfLmI9YQpfLmM9YgpfLmQ9YwpfLmU9ZApfLiR0aT1lfSwKdnM6
+ZnVuY3Rpb24gdnMoYSxiKXt2YXIgXz10aGlzCl8uYT0wCl8uYj1hCl8uYz1udWxsCl8uJHRpPWJ9LApk
+YTpmdW5jdGlvbiBkYShhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKb1E6ZnVuY3Rpb24gb1EoYSxiKXt0
+aGlzLmE9YQp0aGlzLmI9Yn0sCnBWOmZ1bmN0aW9uIHBWKGEpe3RoaXMuYT1hfSwKVTc6ZnVuY3Rpb24g
+VTcoYSl7dGhpcy5hPWF9LAp2cjpmdW5jdGlvbiB2cihhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhp
+cy5jPWN9LApySDpmdW5jdGlvbiBySChhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKS0Y6ZnVuY3Rpb24g
+S0YoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sClpMOmZ1bmN0aW9uIFpMKGEsYixjKXt0aGlzLmE9YQp0
+aGlzLmI9Ygp0aGlzLmM9Y30sClJUOmZ1bmN0aW9uIFJUKGEsYixjLGQpe3ZhciBfPXRoaXMKXy5hPWEK
+Xy5iPWIKXy5jPWMKXy5kPWR9LApqWjpmdW5jdGlvbiBqWihhKXt0aGlzLmE9YX0sCnJxOmZ1bmN0aW9u
+IHJxKGEsYixjKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sClJXOmZ1bmN0aW9uIFJXKGEsYixj
+KXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCk9NOmZ1bmN0aW9uIE9NKGEpe3RoaXMuYT1hCnRo
+aXMuYj1udWxsfSwKcWg6ZnVuY3Rpb24gcWgoKXt9LApCNTpmdW5jdGlvbiBCNShhLGIpe3RoaXMuYT1h
+CnRoaXMuYj1ifSwKUEk6ZnVuY3Rpb24gUEkoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCk1POmZ1bmN0
+aW9uIE1PKCl7fSwKa1Q6ZnVuY3Rpb24ga1QoKXt9LAp4STpmdW5jdGlvbiB4SShhKXt0aGlzLiR0aT1h
+fSwKQ3c6ZnVuY3Rpb24gQ3coYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCm0wOmZ1bmN0aW9uIG0wKCl7
+fSwKcEs6ZnVuY3Rpb24gcEsoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCkppOmZ1bmN0aW9uIEppKCl7
+fSwKaGo6ZnVuY3Rpb24gaGooYSxiLGMpe3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuYz1jfSwKVnA6ZnVu
+Y3Rpb24gVnAoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCk9SOmZ1bmN0aW9uIE9SKGEsYixjKXt0aGlz
+LmE9YQp0aGlzLmI9Ygp0aGlzLmM9Y30sCkVGOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gYi5DKCJAPDA+
+IikuS3EoYykuQygiRm88MSwyPiIpLmIoSC5CNyhhLG5ldyBILk41KGIuQygiQDwwPiIpLktxKGMpLkMo
+Ik41PDEsMj4iKSkpKX0sCkZsOmZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyBILk41KGEuQygiQDwwPiIp
+LktxKGIpLkMoIk41PDEsMj4iKSl9LApMczpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IFAuYjYoYS5DKCJi
+NjwwPiIpKX0sClQyOmZ1bmN0aW9uKCl7dmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKQp0WyI8bm9uLWlk
+ZW50aWZpZXIta2V5PiJdPXQKZGVsZXRlIHRbIjxub24taWRlbnRpZmllci1rZXk+Il0KcmV0dXJuIHR9
+LApyajpmdW5jdGlvbihhLGIsYyl7dmFyIHQ9bmV3IFAubG0oYSxiLGMuQygibG08MD4iKSkKdC5jPWEu
+ZQpyZXR1cm4gdH0sCkVQOmZ1bmN0aW9uKGEsYixjKXt2YXIgdCxzCmlmKFAuaEIoYSkpe2lmKGI9PT0i
+KCImJmM9PT0iKSIpcmV0dXJuIiguLi4pIgpyZXR1cm4gYisiLi4uIitjfXQ9SC5WTShbXSx1LnMpCkMu
+Tm0uaSgkLnhnLGEpCnRyeXtQLlZyKGEsdCl9ZmluYWxseXtpZigwPj0kLnhnLmxlbmd0aClyZXR1cm4g
+SC5PSCgkLnhnLC0xKQokLnhnLnBvcCgpfXM9UC52ZyhiLHUuUi5iKHQpLCIsICIpK2MKcmV0dXJuIHMu
+Y2hhckNvZGVBdCgwKT09MD9zOnN9LApXRTpmdW5jdGlvbihhLGIsYyl7dmFyIHQscwppZihQLmhCKGEp
+KXJldHVybiBiKyIuLi4iK2MKdD1uZXcgUC5SbihiKQpDLk5tLmkoJC54ZyxhKQp0cnl7cz10CnMuYT1Q
+LnZnKHMuYSxhLCIsICIpfWZpbmFsbHl7aWYoMD49JC54Zy5sZW5ndGgpcmV0dXJuIEguT0goJC54Zywt
+MSkKJC54Zy5wb3AoKX10LmErPWMKcz10LmEKcmV0dXJuIHMuY2hhckNvZGVBdCgwKT09MD9zOnN9LApo
+QjpmdW5jdGlvbihhKXt2YXIgdCxzCmZvcih0PSQueGcubGVuZ3RoLHM9MDtzPHQ7KytzKWlmKGE9PT0k
+LnhnW3NdKXJldHVybiEwCnJldHVybiExfSwKVnI6ZnVuY3Rpb24oYSxiKXt2YXIgdCxzLHIscSxwLG8s
+bixtPWEuZ2t6KGEpLGw9MCxrPTAKd2hpbGUoITApe2lmKCEobDw4MHx8azwzKSlicmVhawppZighbS5G
+KCkpcmV0dXJuCnQ9SC5kKG0uZ2woKSkKQy5ObS5pKGIsdCkKbCs9dC5sZW5ndGgrMjsrK2t9aWYoIW0u
+RigpKXtpZihrPD01KXJldHVybgppZigwPj1iLmxlbmd0aClyZXR1cm4gSC5PSChiLC0xKQpzPWIucG9w
+KCkKaWYoMD49Yi5sZW5ndGgpcmV0dXJuIEguT0goYiwtMSkKcj1iLnBvcCgpfWVsc2V7cT1tLmdsKCk7
+KytrCmlmKCFtLkYoKSl7aWYoazw9NCl7Qy5ObS5pKGIsSC5kKHEpKQpyZXR1cm59cz1ILmQocSkKaWYo
+MD49Yi5sZW5ndGgpcmV0dXJuIEguT0goYiwtMSkKcj1iLnBvcCgpCmwrPXMubGVuZ3RoKzJ9ZWxzZXtw
+PW0uZ2woKTsrK2sKZm9yKDttLkYoKTtxPXAscD1vKXtvPW0uZ2woKTsrK2sKaWYoaz4xMDApe3doaWxl
+KCEwKXtpZighKGw+NzUmJms+MykpYnJlYWsKaWYoMD49Yi5sZW5ndGgpcmV0dXJuIEguT0goYiwtMSkK
+bC09Yi5wb3AoKS5sZW5ndGgrMjstLWt9Qy5ObS5pKGIsIi4uLiIpCnJldHVybn19cj1ILmQocSkKcz1I
+LmQocCkKbCs9cy5sZW5ndGgrci5sZW5ndGgrNH19aWYoaz5iLmxlbmd0aCsyKXtsKz01Cm49Ii4uLiJ9
+ZWxzZSBuPW51bGwKd2hpbGUoITApe2lmKCEobD44MCYmYi5sZW5ndGg+MykpYnJlYWsKaWYoMD49Yi5s
+ZW5ndGgpcmV0dXJuIEguT0goYiwtMSkKbC09Yi5wb3AoKS5sZW5ndGgrMgppZihuPT1udWxsKXtsKz01
+Cm49Ii4uLiJ9fWlmKG4hPW51bGwpQy5ObS5pKGIsbikKQy5ObS5pKGIscikKQy5ObS5pKGIscyl9LAp0
+TTpmdW5jdGlvbihhLGIpe3ZhciB0LHMscj1QLkxzKGIpCmZvcih0PWEubGVuZ3RoLHM9MDtzPGEubGVu
+Z3RoO2EubGVuZ3RoPT09dHx8KDAsSC5saykoYSksKytzKXIuaSgwLGIuYihhW3NdKSkKcmV0dXJuIHJ9
+LApuTzpmdW5jdGlvbihhKXt2YXIgdCxzPXt9CmlmKFAuaEIoYSkpcmV0dXJuInsuLi59Igp0PW5ldyBQ
+LlJuKCIiKQp0cnl7Qy5ObS5pKCQueGcsYSkKdC5hKz0ieyIKcy5hPSEwCmEuSygwLG5ldyBQLnJhKHMs
+dCkpCnQuYSs9In0ifWZpbmFsbHl7aWYoMD49JC54Zy5sZW5ndGgpcmV0dXJuIEguT0goJC54ZywtMSkK
+JC54Zy5wb3AoKX1zPXQuYQpyZXR1cm4gcy5jaGFyQ29kZUF0KDApPT0wP3M6c30sCmI2OmZ1bmN0aW9u
+IGI2KGEpe3ZhciBfPXRoaXMKXy5hPTAKXy5mPV8uZT1fLmQ9Xy5jPV8uYj1udWxsCl8ucj0wCl8uJHRp
+PWF9LApibjpmdW5jdGlvbiBibihhKXt0aGlzLmE9YQp0aGlzLmM9dGhpcy5iPW51bGx9LApsbTpmdW5j
+dGlvbiBsbShhLGIsYyl7dmFyIF89dGhpcwpfLmE9YQpfLmI9YgpfLmQ9Xy5jPW51bGwKXy4kdGk9Y30s
+Cm1XOmZ1bmN0aW9uIG1XKCl7fSwKTFU6ZnVuY3Rpb24gTFUoKXt9LApsRDpmdW5jdGlvbiBsRCgpe30s
+CmlsOmZ1bmN0aW9uIGlsKCl7fSwKcmE6ZnVuY3Rpb24gcmEoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0s
+CllrOmZ1bmN0aW9uIFlrKCl7fSwKS1A6ZnVuY3Rpb24gS1AoKXt9LApQbjpmdW5jdGlvbiBQbigpe30s
+CkdqOmZ1bmN0aW9uIEdqKGEsYil7dGhpcy5hPWEKdGhpcy4kdGk9Yn0sCmxmOmZ1bmN0aW9uIGxmKCl7
+fSwKVmo6ZnVuY3Rpb24gVmooKXt9LApYdjpmdW5jdGlvbiBYdigpe30sCm5ZOmZ1bmN0aW9uIG5ZKCl7
+fSwKV1k6ZnVuY3Rpb24gV1koKXt9LApSVTpmdW5jdGlvbiBSVSgpe30sCkJTOmZ1bmN0aW9uKGEsYil7
+dmFyIHQscyxyLHEKaWYodHlwZW9mIGEhPSJzdHJpbmciKXRocm93IEguYihILnRMKGEpKQp0PW51bGwK
+dHJ5e3Q9SlNPTi5wYXJzZShhKX1jYXRjaChyKXtzPUguUnUocikKcT1QLnJyKFN0cmluZyhzKSxudWxs
+LG51bGwpCnRocm93IEguYihxKX1xPVAuUWUodCkKcmV0dXJuIHF9LApRZTpmdW5jdGlvbihhKXt2YXIg
+dAppZihhPT1udWxsKXJldHVybiBudWxsCmlmKHR5cGVvZiBhIT0ib2JqZWN0IilyZXR1cm4gYQppZihP
+YmplY3QuZ2V0UHJvdG90eXBlT2YoYSkhPT1BcnJheS5wcm90b3R5cGUpcmV0dXJuIG5ldyBQLnV3KGEs
+T2JqZWN0LmNyZWF0ZShudWxsKSkKZm9yKHQ9MDt0PGEubGVuZ3RoOysrdClhW3RdPVAuUWUoYVt0XSkK
+cmV0dXJuIGF9LApreTpmdW5jdGlvbihhLGIsYyxkKXtpZihiIGluc3RhbmNlb2YgVWludDhBcnJheSly
+ZXR1cm4gUC5SUCghMSxiLGMsZCkKcmV0dXJuIG51bGx9LApSUDpmdW5jdGlvbihhLGIsYyxkKXt2YXIg
+dCxzLHI9JC5yZigpCmlmKHI9PW51bGwpcmV0dXJuIG51bGwKdD0wPT09YwppZih0JiYhMClyZXR1cm4g
+UC5PUShyLGIpCnM9Yi5sZW5ndGgKZD1QLmpCKGMsZCxzKQppZih0JiZkPT09cylyZXR1cm4gUC5PUShy
+LGIpCnJldHVybiBQLk9RKHIsYi5zdWJhcnJheShjLGQpKX0sCk9ROmZ1bmN0aW9uKGEsYil7aWYoUC5C
+ZShiKSlyZXR1cm4gbnVsbApyZXR1cm4gUC5KaChhLGIpfSwKSmg6ZnVuY3Rpb24oYSxiKXt2YXIgdCxz
+CnRyeXt0PWEuZGVjb2RlKGIpCnJldHVybiB0fWNhdGNoKHMpe0guUnUocyl9cmV0dXJuIG51bGx9LApC
+ZTpmdW5jdGlvbihhKXt2YXIgdCxzPWEubGVuZ3RoLTIKZm9yKHQ9MDt0PHM7Kyt0KWlmKGFbdF09PT0y
+MzcpaWYoKGFbdCsxXSYyMjQpPT09MTYwKXJldHVybiEwCnJldHVybiExfSwKV0k6ZnVuY3Rpb24oKXt2
+YXIgdCxzCnRyeXt0PW5ldyBUZXh0RGVjb2RlcigidXRmLTgiLHtmYXRhbDp0cnVlfSkKcmV0dXJuIHR9
+Y2F0Y2gocyl7SC5SdShzKX1yZXR1cm4gbnVsbH0sCmNQOmZ1bmN0aW9uKGEsYixjKXt2YXIgdCxzLHIK
+Zm9yKHQ9Si5VNihhKSxzPWI7czxjOysrcyl7cj10LnEoYSxzKQppZih0eXBlb2YgciE9PSJudW1iZXIi
+KXJldHVybiByLnpNKCkKaWYoKHImMTI3KSE9PXIpcmV0dXJuIHMtYn1yZXR1cm4gYy1ifSwKeE06ZnVu
+Y3Rpb24oYSxiLGMsZCxlLGYpe2lmKEMuam4uelkoZiw0KSE9PTApdGhyb3cgSC5iKFAucnIoIkludmFs
+aWQgYmFzZTY0IHBhZGRpbmcsIHBhZGRlZCBsZW5ndGggbXVzdCBiZSBtdWx0aXBsZSBvZiBmb3VyLCBp
+cyAiK2YsYSxjKSkKaWYoZCtlIT09Zil0aHJvdyBILmIoUC5ycigiSW52YWxpZCBiYXNlNjQgcGFkZGlu
+ZywgJz0nIG5vdCBhdCB0aGUgZW5kIixhLGIpKQppZihlPjIpdGhyb3cgSC5iKFAucnIoIkludmFsaWQg
+YmFzZTY0IHBhZGRpbmcsIG1vcmUgdGhhbiB0d28gJz0nIGNoYXJhY3RlcnMiLGEsYikpfSwKdXc6ZnVu
+Y3Rpb24gdXcoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Ygp0aGlzLmM9bnVsbH0sCmk4OmZ1bmN0aW9uIGk4
+KGEpe3RoaXMuYT1hfSwKQ1Y6ZnVuY3Rpb24gQ1YoKXt9LApVODpmdW5jdGlvbiBVOCgpe30sClVrOmZ1
+bmN0aW9uIFVrKCl7fSwKd0k6ZnVuY3Rpb24gd0koKXt9LApaaTpmdW5jdGlvbiBaaSgpe30sCmJ5OmZ1
+bmN0aW9uIGJ5KCl7fSwKTXg6ZnVuY3Rpb24gTXgoYSl7dGhpcy5hPWF9LAp1NTpmdW5jdGlvbiB1NSgp
+e30sCkUzOmZ1bmN0aW9uIEUzKCl7fSwKUnc6ZnVuY3Rpb24gUncoYSl7dGhpcy5iPTAKdGhpcy5jPWF9
+LApHWTpmdW5jdGlvbiBHWShhKXt0aGlzLmE9YX0sCmJ6OmZ1bmN0aW9uIGJ6KGEsYil7dmFyIF89dGhp
+cwpfLmE9YQpfLmI9YgpfLmM9ITAKXy5mPV8uZT1fLmQ9MH0sClFBOmZ1bmN0aW9uKGEsYixjKXt2YXIg
+dD1ILkhwKGEsYykKaWYodCE9bnVsbClyZXR1cm4gdAppZihiIT1udWxsKXJldHVybiBiLiQxKGEpCnRo
+cm93IEguYihQLnJyKGEsbnVsbCxudWxsKSl9LApGOmZ1bmN0aW9uKGEpe2lmKGEgaW5zdGFuY2VvZiBI
+LlRwKXJldHVybiBhLncoMCkKcmV0dXJuIkluc3RhbmNlIG9mICciK0guZChILk0oYSkpKyInIn0sCk84
+OmZ1bmN0aW9uKGEsYixjKXt2YXIgdCxzPUouUWkoYSxjKQppZihhIT09MCYmITApZm9yKHQ9MDt0PHMu
+bGVuZ3RoOysrdClDLk5tLlkocyx0LGIpCnJldHVybiBzfSwKQ0g6ZnVuY3Rpb24oYSxiLGMpe3ZhciB0
+LHM9SC5WTShbXSxjLkMoImpkPDA+IikpCmZvcih0PUouSVQoYSk7dC5GKCk7KUMuTm0uaShzLGMuYih0
+LmdsKCkpKQppZihiKXJldHVybiBzCnJldHVybiBjLkMoInpNPDA+IikuYihKLkVwKHMpKX0sCkFGOmZ1
+bmN0aW9uKGEsYil7cmV0dXJuIGIuQygiek08MD4iKS5iKEouekMoUC5DSChhLCExLGIpKSl9LApITTpm
+dW5jdGlvbihhLGIsYyl7dmFyIHQKaWYoQXJyYXkuaXNBcnJheShhKSl7dS50LmIoYSkKdD1hLmxlbmd0
+aApjPVAuakIoYixjLHQpCnJldHVybiBILmVUKGI+MHx8Yzx0P0MuTm0uRDYoYSxiLGMpOmEpfWlmKHUu
+Ym0uYyhhKSlyZXR1cm4gSC5mdyhhLGIsUC5qQihiLGMsYS5sZW5ndGgpKQpyZXR1cm4gUC5idyhhLGIs
+Yyl9LApPbzpmdW5jdGlvbihhKXtyZXR1cm4gSC5MdyhhKX0sCmJ3OmZ1bmN0aW9uKGEsYixjKXt2YXIg
+dCxzLHIscSxwPW51bGwKaWYoYjwwKXRocm93IEguYihQLlRFKGIsMCxKLkhtKGEpLHAscCkpCnQ9Yz09
+bnVsbAppZighdCYmYzxiKXRocm93IEguYihQLlRFKGMsYixKLkhtKGEpLHAscCkpCnM9Si5JVChhKQpm
+b3Iocj0wO3I8YjsrK3IpaWYoIXMuRigpKXRocm93IEguYihQLlRFKGIsMCxyLHAscCkpCnE9W10KaWYo
+dClmb3IoO3MuRigpOylxLnB1c2gocy5nbCgpKQplbHNlIGZvcihyPWI7cjxjOysrcil7aWYoIXMuRigp
+KXRocm93IEguYihQLlRFKGMsYixyLHAscCkpCnEucHVzaChzLmdsKCkpfXJldHVybiBILmVUKHEpfSwK
+bnU6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBILlZSKGEsSC52NChhLCExLCEwLCExLCExLCExKSl9LAp2
+ZzpmdW5jdGlvbihhLGIsYyl7dmFyIHQ9Si5JVChiKQppZighdC5GKCkpcmV0dXJuIGEKaWYoYy5sZW5n
+dGg9PT0wKXtkbyBhKz1ILmQodC5nbCgpKQp3aGlsZSh0LkYoKSl9ZWxzZXthKz1ILmQodC5nbCgpKQpm
+b3IoO3QuRigpOylhPWErYytILmQodC5nbCgpKX1yZXR1cm4gYX0sCmxyOmZ1bmN0aW9uKGEsYixjLGQp
+e3JldHVybiBuZXcgUC5tcChhLGIsYyxkKX0sCnVvOmZ1bmN0aW9uKCl7dmFyIHQ9SC5NMCgpCmlmKHQh
+PW51bGwpcmV0dXJuIFAuaEsodCkKdGhyb3cgSC5iKFAuTDQoIidVcmkuYmFzZScgaXMgbm90IHN1cHBv
+cnRlZCIpKX0sCmVQOmZ1bmN0aW9uKGEsYixjLGQpe3ZhciB0LHMscixxLHAsbyxuPSIwMTIzNDU2Nzg5
+QUJDREVGIgppZihjPT09Qy54TSl7dD0kLno0KCkuYgppZih0eXBlb2YgYiE9InN0cmluZyIpSC52aChI
+LnRMKGIpKQp0PXQudGVzdChiKX1lbHNlIHQ9ITEKaWYodClyZXR1cm4gYgpILkxoKGMpLkMoIlVrLlMi
+KS5iKGIpCnM9Yy5nWkUoKS5XSihiKQpmb3IodD1zLmxlbmd0aCxyPTAscT0iIjtyPHQ7KytyKXtwPXNb
+cl0KaWYocDwxMjgpe289cD4+PjQKaWYobz49OClyZXR1cm4gSC5PSChhLG8pCm89KGFbb10mMTw8KHAm
+MTUpKSE9PTB9ZWxzZSBvPSExCmlmKG8pcSs9SC5MdyhwKQplbHNlIHE9ZCYmcD09PTMyP3ErIisiOnEr
+IiUiK25bcD4+PjQmMTVdK25bcCYxNV19cmV0dXJuIHEuY2hhckNvZGVBdCgwKT09MD9xOnF9LApHcTpm
+dW5jdGlvbihhKXt2YXIgdD1NYXRoLmFicyhhKSxzPWE8MD8iLSI6IiIKaWYodD49MTAwMClyZXR1cm4i
+IithCmlmKHQ+PTEwMClyZXR1cm4gcysiMCIrdAppZih0Pj0xMClyZXR1cm4gcysiMDAiK3QKcmV0dXJu
+IHMrIjAwMCIrdH0sClZ4OmZ1bmN0aW9uKGEpe2lmKGE+PTEwMClyZXR1cm4iIithCmlmKGE+PTEwKXJl
+dHVybiIwIithCnJldHVybiIwMCIrYX0sCmgwOmZ1bmN0aW9uKGEpe2lmKGE+PTEwKXJldHVybiIiK2EK
+cmV0dXJuIjAiK2F9LApwOmZ1bmN0aW9uKGEpe2lmKHR5cGVvZiBhPT0ibnVtYmVyInx8SC5sKGEpfHxu
+dWxsPT1hKXJldHVybiBKLmooYSkKaWYodHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBKU09OLnN0cmlu
+Z2lmeShhKQpyZXR1cm4gUC5GKGEpfSwKaFY6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBQLkM2KGEpfSwK
+eFk6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBQLnUoITEsbnVsbCxudWxsLGEpfSwKTDM6ZnVuY3Rpb24o
+YSxiLGMpe3JldHVybiBuZXcgUC51KCEwLGEsYixjKX0sCkVlOmZ1bmN0aW9uKGEpe3JldHVybiBuZXcg
+UC51KCExLG51bGwsYSwiTXVzdCBub3QgYmUgbnVsbCIpfSwKeDpmdW5jdGlvbihhLGIpe3JldHVybiBu
+ZXcgUC5iSihudWxsLG51bGwsITAsYSxiLCJWYWx1ZSBub3QgaW4gcmFuZ2UiKX0sClRFOmZ1bmN0aW9u
+KGEsYixjLGQsZSl7cmV0dXJuIG5ldyBQLmJKKGIsYywhMCxhLGQsIkludmFsaWQgdmFsdWUiKX0sCndB
+OmZ1bmN0aW9uKGEsYixjLGQpe2lmKGE8Ynx8YT5jKXRocm93IEguYihQLlRFKGEsYixjLGQsbnVsbCkp
+fSwKakI6ZnVuY3Rpb24oYSxiLGMpe2lmKDA+YXx8YT5jKXRocm93IEguYihQLlRFKGEsMCxjLCJzdGFy
+dCIsbnVsbCkpCmlmKGIhPW51bGwpe2lmKGE+Ynx8Yj5jKXRocm93IEguYihQLlRFKGIsYSxjLCJlbmQi
+LG51bGwpKQpyZXR1cm4gYn1yZXR1cm4gY30sCmsxOmZ1bmN0aW9uKGEsYil7aWYodHlwZW9mIGEhPT0i
+bnVtYmVyIilyZXR1cm4gYS5KKCkKaWYoYTwwKXRocm93IEguYihQLlRFKGEsMCxudWxsLGIsbnVsbCkp
+fSwKQ2Y6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgdD1ILlNjKGU9PW51bGw/Si5IbShiKTplKQpyZXR1
+cm4gbmV3IFAuZVkodCwhMCxhLGMsIkluZGV4IG91dCBvZiByYW5nZSIpfSwKTDQ6ZnVuY3Rpb24oYSl7
+cmV0dXJuIG5ldyBQLnViKGEpfSwKU1k6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBQLmRzKGEpfSwKUFY6
+ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBQLmxqKGEpfSwKYTQ6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBQ
+LlVWKGEpfSwKcnI6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBuZXcgUC5hRShhLGIsYyl9LApkSDpmdW5j
+dGlvbihhLGIsYyxkKXt2YXIgdCxzPUguVk0oW10sZC5DKCJqZDwwPiIpKQpDLk5tLnNBKHMsYSkKZm9y
+KHQ9MDt0PGE7Kyt0KUMuTm0uWShzLHQsYi4kMSh0KSkKcmV0dXJuIHN9LApoSzpmdW5jdGlvbihhKXt2
+YXIgdCxzLHIscSxwLG8sbixtLGwsayxqLGksaCxnLGYsZT1udWxsLGQ9YS5sZW5ndGgKaWYoZD49NSl7
+dD0oKEouUXooYSw0KV41OCkqM3xDLnhCLlcoYSwwKV4xMDB8Qy54Qi5XKGEsMSleOTd8Qy54Qi5XKGEs
+MileMTE2fEMueEIuVyhhLDMpXjk3KT4+PjAKaWYodD09PTApcmV0dXJuIFAuS0QoZDxkP0MueEIuTmoo
+YSwwLGQpOmEsNSxlKS5nbFIoKQplbHNlIGlmKHQ9PT0zMilyZXR1cm4gUC5LRChDLnhCLk5qKGEsNSxk
+KSwwLGUpLmdsUigpfXM9bmV3IEFycmF5KDgpCnMuZml4ZWQkbGVuZ3RoPUFycmF5CnI9SC5WTShzLHUu
+dCkKQy5ObS5ZKHIsMCwwKQpDLk5tLlkociwxLC0xKQpDLk5tLlkociwyLC0xKQpDLk5tLlkociw3LC0x
+KQpDLk5tLlkociwzLDApCkMuTm0uWShyLDQsMCkKQy5ObS5ZKHIsNSxkKQpDLk5tLlkociw2LGQpCmlm
+KFAuVUIoYSwwLGQsMCxyKT49MTQpQy5ObS5ZKHIsNyxkKQpxPXJbMV0KaWYodHlwZW9mIHEhPT0ibnVt
+YmVyIilyZXR1cm4gcS50QigpCmlmKHE+PTApaWYoUC5VQihhLDAscSwyMCxyKT09PTIwKXJbN109cQpz
+PXJbMl0KaWYodHlwZW9mIHMhPT0ibnVtYmVyIilyZXR1cm4gcy5oKCkKcD1zKzEKbz1yWzNdCm49cls0
+XQptPXJbNV0KbD1yWzZdCmlmKHR5cGVvZiBsIT09Im51bWJlciIpcmV0dXJuIGwuSigpCmlmKHR5cGVv
+ZiBtIT09Im51bWJlciIpcmV0dXJuIEgucFkobSkKaWYobDxtKW09bAppZih0eXBlb2YgbiE9PSJudW1i
+ZXIiKXJldHVybiBuLkooKQppZihuPHApbj1tCmVsc2UgaWYobjw9cSluPXErMQppZih0eXBlb2YgbyE9
+PSJudW1iZXIiKXJldHVybiBvLkooKQppZihvPHApbz1uCnM9cls3XQppZih0eXBlb2YgcyE9PSJudW1i
+ZXIiKXJldHVybiBzLkooKQprPXM8MAppZihrKWlmKHA+cSszKXtqPWUKaz0hMX1lbHNle3M9bz4wCmlm
+KHMmJm8rMT09PW4pe2o9ZQprPSExfWVsc2V7aWYoIShtPGQmJm09PT1uKzImJkoucTAoYSwiLi4iLG4p
+KSlpPW0+bisyJiZKLnEwKGEsIi8uLiIsbS0zKQplbHNlIGk9ITAKaWYoaSl7aj1lCms9ITF9ZWxzZXtp
+ZihxPT09NClpZihKLnEwKGEsImZpbGUiLDApKXtpZihwPD0wKXtpZighQy54Qi5RaShhLCIvIixuKSl7
+aD0iZmlsZTovLy8iCnQ9M31lbHNle2g9ImZpbGU6Ly8iCnQ9Mn1hPWgrQy54Qi5OaihhLG4sZCkKcS09
+MApzPXQtMAptKz1zCmwrPXMKZD1hLmxlbmd0aApwPTcKbz03Cm49N31lbHNlIGlmKG49PT1tKXtnPW0r
+MTsrK2wKYT1DLnhCLmk3KGEsbixtLCIvIik7KytkCm09Z31qPSJmaWxlIn1lbHNlIGlmKEMueEIuUWko
+YSwiaHR0cCIsMCkpe2lmKHMmJm8rMz09PW4mJkMueEIuUWkoYSwiODAiLG8rMSkpe2Y9bi0zCm0tPTMK
+bC09MwphPUMueEIuaTcoYSxvLG4sIiIpCmQtPTMKbj1mfWo9Imh0dHAifWVsc2Ugaj1lCmVsc2UgaWYo
+cT09PTUmJkoucTAoYSwiaHR0cHMiLDApKXtpZihzJiZvKzQ9PT1uJiZKLnEwKGEsIjQ0MyIsbysxKSl7
+Zj1uLTQKbS09NApsLT00CmE9Si55UShhLG8sbiwiIikKZC09MwpuPWZ9aj0iaHR0cHMifWVsc2Ugaj1l
+Cms9ITB9fX1lbHNlIGo9ZQppZihrKXtzPWEubGVuZ3RoCmlmKGQ8cyl7YT1KLmxkKGEsMCxkKQpxLT0w
+CnAtPTAKby09MApuLT0wCm0tPTAKbC09MH1yZXR1cm4gbmV3IFAuVWYoYSxxLHAsbyxuLG0sbCxqKX1y
+ZXR1cm4gUC5qdihhLDAsZCxxLHAsbyxuLG0sbCxqKX0sCk10OmZ1bmN0aW9uKGEpe0gueShhKQpyZXR1
+cm4gUC5rdShhLDAsYS5sZW5ndGgsQy54TSwhMSl9LApXWDpmdW5jdGlvbihhKXt2YXIgdD11Lk4KcmV0
+dXJuIEMuTm0uTjAoSC5WTShhLnNwbGl0KCImIiksdS5zKSxQLkZsKHQsdCksbmV3IFAubjEoQy54TSks
+dS5mKX0sCkhoOmZ1bmN0aW9uKGEsYixjKXt2YXIgdCxzLHIscSxwLG8sbixtPW51bGwsbD0iSVB2NCBh
+ZGRyZXNzIHNob3VsZCBjb250YWluIGV4YWN0bHkgNCBwYXJ0cyIsaz0iZWFjaCBwYXJ0IG11c3QgYmUg
+aW4gdGhlIHJhbmdlIDAuLjI1NSIsaj1uZXcgUC5jUyhhKSxpPW5ldyBVaW50OEFycmF5KDQpCmZvcih0
+PWkubGVuZ3RoLHM9YixyPXMscT0wO3M8YzsrK3Mpe3A9Qy54Qi5tKGEscykKaWYocCE9PTQ2KXtpZigo
+cF40OCk+OSlqLiQyKCJpbnZhbGlkIGNoYXJhY3RlciIscyl9ZWxzZXtpZihxPT09MylqLiQyKGwscykK
+bz1QLlFBKEMueEIuTmooYSxyLHMpLG0sbSkKaWYodHlwZW9mIG8hPT0ibnVtYmVyIilyZXR1cm4gby5v
+cygpCmlmKG8+MjU1KWouJDIoayxyKQpuPXErMQppZihxPj10KXJldHVybiBILk9IKGkscSkKaVtxXT1v
+CnI9cysxCnE9bn19aWYocSE9PTMpai4kMihsLGMpCm89UC5RQShDLnhCLk5qKGEscixjKSxtLG0pCmlm
+KHR5cGVvZiBvIT09Im51bWJlciIpcmV0dXJuIG8ub3MoKQppZihvPjI1NSlqLiQyKGsscikKaWYocT49
+dClyZXR1cm4gSC5PSChpLHEpCmlbcV09bwpyZXR1cm4gaX0sCmVnOmZ1bmN0aW9uKGEsYixhMCl7dmFy
+IHQscyxyLHEscCxvLG4sbSxsLGssaixpLGgsZyxmLGUsZD1uZXcgUC5WQyhhKSxjPW5ldyBQLnRwKGQs
+YSkKaWYoYS5sZW5ndGg8MilkLiQxKCJhZGRyZXNzIGlzIHRvbyBzaG9ydCIpCnQ9SC5WTShbXSx1LnQp
+CmZvcihzPWIscj1zLHE9ITEscD0hMTtzPGEwOysrcyl7bz1DLnhCLm0oYSxzKQppZihvPT09NTgpe2lm
+KHM9PT1iKXsrK3MKaWYoQy54Qi5tKGEscykhPT01OClkLiQyKCJpbnZhbGlkIHN0YXJ0IGNvbG9uLiIs
+cykKcj1zfWlmKHM9PT1yKXtpZihxKWQuJDIoIm9ubHkgb25lIHdpbGRjYXJkIGA6OmAgaXMgYWxsb3dl
+ZCIscykKQy5ObS5pKHQsLTEpCnE9ITB9ZWxzZSBDLk5tLmkodCxjLiQyKHIscykpCnI9cysxfWVsc2Ug
+aWYobz09PTQ2KXA9ITB9aWYodC5sZW5ndGg9PT0wKWQuJDEoInRvbyBmZXcgcGFydHMiKQpuPXI9PT1h
+MAptPUMuTm0uZ3JaKHQpCmlmKG4mJm0hPT0tMSlkLiQyKCJleHBlY3RlZCBhIHBhcnQgYWZ0ZXIgbGFz
+dCBgOmAiLGEwKQppZighbilpZighcClDLk5tLmkodCxjLiQyKHIsYTApKQplbHNle2w9UC5IaChhLHIs
+YTApCkMuTm0uaSh0LChsWzBdPDw4fGxbMV0pPj4+MCkKQy5ObS5pKHQsKGxbMl08PDh8bFszXSk+Pj4w
+KX1pZihxKXtpZih0Lmxlbmd0aD43KWQuJDEoImFuIGFkZHJlc3Mgd2l0aCBhIHdpbGRjYXJkIG11c3Qg
+aGF2ZSBsZXNzIHRoYW4gNyBwYXJ0cyIpfWVsc2UgaWYodC5sZW5ndGghPT04KWQuJDEoImFuIGFkZHJl
+c3Mgd2l0aG91dCBhIHdpbGRjYXJkIG11c3QgY29udGFpbiBleGFjdGx5IDggcGFydHMiKQprPW5ldyBV
+aW50OEFycmF5KDE2KQpmb3IobT10Lmxlbmd0aCxqPWsubGVuZ3RoLGk9OS1tLHM9MCxoPTA7czxtOysr
+cyl7Zz10W3NdCmlmKGc9PT0tMSlmb3IoZj0wO2Y8aTsrK2Ype2lmKGg8MHx8aD49ailyZXR1cm4gSC5P
+SChrLGgpCmtbaF09MAplPWgrMQppZihlPj1qKXJldHVybiBILk9IKGssZSkKa1tlXT0wCmgrPTJ9ZWxz
+ZXtlPUMuam4ud0coZyw4KQppZihoPDB8fGg+PWopcmV0dXJuIEguT0goayxoKQprW2hdPWUKZT1oKzEK
+aWYoZT49ailyZXR1cm4gSC5PSChrLGUpCmtbZV09ZyYyNTUKaCs9Mn19cmV0dXJuIGt9LApqdjpmdW5j
+dGlvbihhLGIsYyxkLGUsZixnLGgsaSxqKXt2YXIgdCxzLHIscSxwLG8sbixtPW51bGwKaWYoaj09bnVs
+bClpZihkPmIpaj1QLlBpKGEsYixkKQplbHNle2lmKGQ9PT1iKVAuUjMoYSxiLCJJbnZhbGlkIGVtcHR5
+IHNjaGVtZSIpCmo9IiJ9aWYoZT5iKXt0PWQrMwpzPXQ8ZT9QLnpSKGEsdCxlLTEpOiIiCnI9UC5PZShh
+LGUsZiwhMSkKaWYodHlwZW9mIGYhPT0ibnVtYmVyIilyZXR1cm4gZi5oKCkKcT1mKzEKaWYodHlwZW9m
+IGchPT0ibnVtYmVyIilyZXR1cm4gSC5wWShnKQpwPXE8Zz9QLndCKFAuUUEoSi5sZChhLHEsZyksbmV3
+IFAuZTEoYSxmKSxtKSxqKTptfWVsc2V7cD1tCnI9cApzPSIifW89UC5rYShhLGcsaCxtLGosciE9bnVs
+bCkKaWYodHlwZW9mIGghPT0ibnVtYmVyIilyZXR1cm4gaC5KKCkKbj1oPGk/UC5sZShhLGgrMSxpLG0p
+Om0KcmV0dXJuIG5ldyBQLkRuKGoscyxyLHAsbyxuLGk8Yz9QLnRHKGEsaSsxLGMpOm0pfSwKd0s6ZnVu
+Y3Rpb24oYSl7aWYoYT09PSJodHRwIilyZXR1cm4gODAKaWYoYT09PSJodHRwcyIpcmV0dXJuIDQ0Mwpy
+ZXR1cm4gMH0sClIzOmZ1bmN0aW9uKGEsYixjKXt0aHJvdyBILmIoUC5ycihjLGEsYikpfSwKa0U6ZnVu
+Y3Rpb24oYSxiKXtDLk5tLksoYSxuZXcgUC5OWSghMSkpfSwKSE46ZnVuY3Rpb24oYSxiLGMpe3ZhciB0
+LHMscgpmb3IodD1ILnFDKGEsYyxudWxsLEgudDYoYSkuZCksdD1uZXcgSC5hNyh0LHQuZ0EodCksdC4k
+dGkuQygiYTc8YUwuRT4iKSk7dC5GKCk7KXtzPXQuZApyPVAubnUoJ1siKi86PD4/XFxcXHxdJykKcy50
+b1N0cmluZwppZihILm0yKHMsciwwKSl7dD1QLkw0KCJJbGxlZ2FsIGNoYXJhY3RlciBpbiBwYXRoOiAi
+K3MpCnRocm93IEguYih0KX19fSwKcmc6ZnVuY3Rpb24oYSxiKXt2YXIgdAppZighKDY1PD1hJiZhPD05
+MCkpdD05Nzw9YSYmYTw9MTIyCmVsc2UgdD0hMAppZih0KXJldHVybgp0PVAuTDQoIklsbGVnYWwgZHJp
+dmUgbGV0dGVyICIrUC5PbyhhKSkKdGhyb3cgSC5iKHQpfSwKd0I6ZnVuY3Rpb24oYSxiKXtpZihhIT1u
+dWxsJiZhPT09UC53SyhiKSlyZXR1cm4gbnVsbApyZXR1cm4gYX0sCk9lOmZ1bmN0aW9uKGEsYixjLGQp
+e3ZhciB0LHMscixxLHAsbwppZihhPT1udWxsKXJldHVybiBudWxsCmlmKGI9PT1jKXJldHVybiIiCmlm
+KEMueEIubShhLGIpPT09OTEpe2lmKHR5cGVvZiBjIT09Im51bWJlciIpcmV0dXJuIGMuSE4oKQp0PWMt
+MQppZihDLnhCLm0oYSx0KSE9PTkzKVAuUjMoYSxiLCJNaXNzaW5nIGVuZCBgXWAgdG8gbWF0Y2ggYFtg
+IGluIGhvc3QiKQpzPWIrMQpyPVAudG8oYSxzLHQpCmlmKHR5cGVvZiByIT09Im51bWJlciIpcmV0dXJu
+IHIuSigpCmlmKHI8dCl7cT1yKzEKcD1QLk9BKGEsQy54Qi5RaShhLCIyNSIscSk/ciszOnEsdCwiJTI1
+Iil9ZWxzZSBwPSIiClAuZWcoYSxzLHIpCnJldHVybiBDLnhCLk5qKGEsYixyKS50b0xvd2VyQ2FzZSgp
+K3ArIl0ifWlmKHR5cGVvZiBjIT09Im51bWJlciIpcmV0dXJuIEgucFkoYykKbz1iCmZvcig7bzxjOysr
+bylpZihDLnhCLm0oYSxvKT09PTU4KXtyPUMueEIuWFUoYSwiJSIsYikKaWYoIShyPj1iJiZyPGMpKXI9
+YwppZihyPGMpe3E9cisxCnA9UC5PQShhLEMueEIuUWkoYSwiMjUiLHEpP3IrMzpxLGMsIiUyNSIpfWVs
+c2UgcD0iIgpQLmVnKGEsYixyKQpyZXR1cm4iWyIrQy54Qi5OaihhLGIscikrcCsiXSJ9cmV0dXJuIFAu
+T0woYSxiLGMpfSwKdG86ZnVuY3Rpb24oYSxiLGMpe3ZhciB0LHM9Qy54Qi5YVShhLCIlIixiKQppZihz
+Pj1iKXtpZih0eXBlb2YgYyE9PSJudW1iZXIiKXJldHVybiBILnBZKGMpCnQ9czxjfWVsc2UgdD0hMQpy
+ZXR1cm4gdD9zOmN9LApPQTpmdW5jdGlvbihhLGIsYyxkKXt2YXIgdCxzLHIscSxwLG8sbixtLGwsaz1k
+IT09IiI/bmV3IFAuUm4oZCk6bnVsbAppZih0eXBlb2YgYyE9PSJudW1iZXIiKXJldHVybiBILnBZKGMp
+CnQ9YgpzPXQKcj0hMApmb3IoO3Q8Yzspe3E9Qy54Qi5tKGEsdCkKaWYocT09PTM3KXtwPVAucnYoYSx0
+LCEwKQpvPXA9PW51bGwKaWYobyYmcil7dCs9Mwpjb250aW51ZX1pZihrPT1udWxsKWs9bmV3IFAuUm4o
+IiIpCm49ay5hKz1DLnhCLk5qKGEscyx0KQppZihvKXA9Qy54Qi5OaihhLHQsdCszKQplbHNlIGlmKHA9
+PT0iJSIpUC5SMyhhLHQsIlpvbmVJRCBzaG91bGQgbm90IGNvbnRhaW4gJSBhbnltb3JlIikKay5hPW4r
+cAp0Kz0zCnM9dApyPSEwfWVsc2V7aWYocTwxMjcpe289cT4+PjQKaWYobz49OClyZXR1cm4gSC5PSChD
+LkYzLG8pCm89KEMuRjNbb10mMTw8KHEmMTUpKSE9PTB9ZWxzZSBvPSExCmlmKG8pe2lmKHImJjY1PD1x
+JiY5MD49cSl7aWYoaz09bnVsbClrPW5ldyBQLlJuKCIiKQppZihzPHQpe2suYSs9Qy54Qi5OaihhLHMs
+dCkKcz10fXI9ITF9Kyt0fWVsc2V7aWYoKHEmNjQ1MTIpPT09NTUyOTYmJnQrMTxjKXttPUMueEIubShh
+LHQrMSkKaWYoKG0mNjQ1MTIpPT09NTYzMjApe3E9NjU1MzZ8KHEmMTAyMyk8PDEwfG0mMTAyMwpsPTJ9
+ZWxzZSBsPTF9ZWxzZSBsPTEKaWYoaz09bnVsbClrPW5ldyBQLlJuKCIiKQprLmErPUMueEIuTmooYSxz
+LHQpCmsuYSs9UC5ISChxKQp0Kz1sCnM9dH19fWlmKGs9PW51bGwpcmV0dXJuIEMueEIuTmooYSxiLGMp
+CmlmKHM8YylrLmErPUMueEIuTmooYSxzLGMpCm89ay5hCnJldHVybiBvLmNoYXJDb2RlQXQoMCk9PTA/
+bzpvfSwKT0w6ZnVuY3Rpb24oYSxiLGMpe3ZhciB0LHMscixxLHAsbyxuLG0sbCxrLGoKaWYodHlwZW9m
+IGMhPT0ibnVtYmVyIilyZXR1cm4gSC5wWShjKQp0PWIKcz10CnI9bnVsbApxPSEwCmZvcig7dDxjOyl7
+cD1DLnhCLm0oYSx0KQppZihwPT09Mzcpe289UC5ydihhLHQsITApCm49bz09bnVsbAppZihuJiZxKXt0
+Kz0zCmNvbnRpbnVlfWlmKHI9PW51bGwpcj1uZXcgUC5SbigiIikKbT1DLnhCLk5qKGEscyx0KQpsPXIu
+YSs9IXE/bS50b0xvd2VyQ2FzZSgpOm0KaWYobil7bz1DLnhCLk5qKGEsdCx0KzMpCms9M31lbHNlIGlm
+KG89PT0iJSIpe289IiUyNSIKaz0xfWVsc2Ugaz0zCnIuYT1sK28KdCs9awpzPXQKcT0hMH1lbHNle2lm
+KHA8MTI3KXtuPXA+Pj40CmlmKG4+PTgpcmV0dXJuIEguT0goQy5lYSxuKQpuPShDLmVhW25dJjE8PChw
+JjE1KSkhPT0wfWVsc2Ugbj0hMQppZihuKXtpZihxJiY2NTw9cCYmOTA+PXApe2lmKHI9PW51bGwpcj1u
+ZXcgUC5SbigiIikKaWYoczx0KXtyLmErPUMueEIuTmooYSxzLHQpCnM9dH1xPSExfSsrdH1lbHNle2lm
+KHA8PTkzKXtuPXA+Pj40CmlmKG4+PTgpcmV0dXJuIEguT0goQy5hayxuKQpuPShDLmFrW25dJjE8PChw
+JjE1KSkhPT0wfWVsc2Ugbj0hMQppZihuKVAuUjMoYSx0LCJJbnZhbGlkIGNoYXJhY3RlciIpCmVsc2V7
+aWYoKHAmNjQ1MTIpPT09NTUyOTYmJnQrMTxjKXtqPUMueEIubShhLHQrMSkKaWYoKGomNjQ1MTIpPT09
+NTYzMjApe3A9NjU1MzZ8KHAmMTAyMyk8PDEwfGomMTAyMwprPTJ9ZWxzZSBrPTF9ZWxzZSBrPTEKaWYo
+cj09bnVsbClyPW5ldyBQLlJuKCIiKQptPUMueEIuTmooYSxzLHQpCnIuYSs9IXE/bS50b0xvd2VyQ2Fz
+ZSgpOm0Kci5hKz1QLkhIKHApCnQrPWsKcz10fX19fWlmKHI9PW51bGwpcmV0dXJuIEMueEIuTmooYSxi
+LGMpCmlmKHM8Yyl7bT1DLnhCLk5qKGEscyxjKQpyLmErPSFxP20udG9Mb3dlckNhc2UoKTptfW49ci5h
+CnJldHVybiBuLmNoYXJDb2RlQXQoMCk9PTA/bjpufSwKUGk6ZnVuY3Rpb24oYSxiLGMpe3ZhciB0LHMs
+cixxCmlmKGI9PT1jKXJldHVybiIiCmlmKCFQLkV0KEouclkoYSkuVyhhLGIpKSlQLlIzKGEsYiwiU2No
+ZW1lIG5vdCBzdGFydGluZyB3aXRoIGFscGhhYmV0aWMgY2hhcmFjdGVyIikKZm9yKHQ9YixzPSExO3Q8
+YzsrK3Qpe3I9Qy54Qi5XKGEsdCkKaWYocjwxMjgpe3E9cj4+PjQKaWYocT49OClyZXR1cm4gSC5PSChD
+Lm1LLHEpCnE9KEMubUtbcV0mMTw8KHImMTUpKSE9PTB9ZWxzZSBxPSExCmlmKCFxKVAuUjMoYSx0LCJJ
+bGxlZ2FsIHNjaGVtZSBjaGFyYWN0ZXIiKQppZig2NTw9ciYmcjw9OTApcz0hMH1hPUMueEIuTmooYSxi
+LGMpCnJldHVybiBQLllhKHM/YS50b0xvd2VyQ2FzZSgpOmEpfSwKWWE6ZnVuY3Rpb24oYSl7aWYoYT09
+PSJodHRwIilyZXR1cm4iaHR0cCIKaWYoYT09PSJmaWxlIilyZXR1cm4iZmlsZSIKaWYoYT09PSJodHRw
+cyIpcmV0dXJuImh0dHBzIgppZihhPT09InBhY2thZ2UiKXJldHVybiJwYWNrYWdlIgpyZXR1cm4gYX0s
+CnpSOmZ1bmN0aW9uKGEsYixjKXtpZihhPT1udWxsKXJldHVybiIiCnJldHVybiBQLnVPKGEsYixjLEMu
+dG8sITEpfSwKa2E6ZnVuY3Rpb24oYSxiLGMsZCxlLGYpe3ZhciB0LHM9ZT09PSJmaWxlIixyPXN8fGYs
+cT1hPT1udWxsCmlmKHEmJiEwKXJldHVybiBzPyIvIjoiIgp0PSFxP1AudU8oYSxiLGMsQy5XZCwhMCk6
+Qy5qTi5FMihkLG5ldyBQLlJaKCksdS5OKS5IKDAsIi8iKQppZih0Lmxlbmd0aD09PTApe2lmKHMpcmV0
+dXJuIi8ifWVsc2UgaWYociYmIUMueEIubih0LCIvIikpdD0iLyIrdApyZXR1cm4gUC5Kcih0LGUsZil9
+LApKcjpmdW5jdGlvbihhLGIsYyl7dmFyIHQ9Yi5sZW5ndGg9PT0wCmlmKHQmJiFjJiYhQy54Qi5uKGEs
+Ii8iKSlyZXR1cm4gUC53RihhLCF0fHxjKQpyZXR1cm4gUC54ZShhKX0sCmxlOmZ1bmN0aW9uKGEsYixj
+LGQpe3ZhciB0LHM9e30KaWYoYSE9bnVsbCl7aWYoZCE9bnVsbCl0aHJvdyBILmIoUC54WSgiQm90aCBx
+dWVyeSBhbmQgcXVlcnlQYXJhbWV0ZXJzIHNwZWNpZmllZCIpKQpyZXR1cm4gUC51TyhhLGIsYyxDLlZD
+LCEwKX1pZihkPT1udWxsKXJldHVybiBudWxsCnQ9bmV3IFAuUm4oIiIpCnMuYT0iIgpkLksoMCxuZXcg
+UC55NShuZXcgUC5NRShzLHQpKSkKcz10LmEKcmV0dXJuIHMuY2hhckNvZGVBdCgwKT09MD9zOnN9LAp0
+RzpmdW5jdGlvbihhLGIsYyl7aWYoYT09bnVsbClyZXR1cm4gbnVsbApyZXR1cm4gUC51TyhhLGIsYyxD
+LlZDLCEwKX0sCnJ2OmZ1bmN0aW9uKGEsYixjKXt2YXIgdCxzLHIscSxwLG89YisyCmlmKG8+PWEubGVu
+Z3RoKXJldHVybiIlIgp0PUMueEIubShhLGIrMSkKcz1DLnhCLm0oYSxvKQpyPUgub28odCkKcT1ILm9v
+KHMpCmlmKHI8MHx8cTwwKXJldHVybiIlIgpwPXIqMTYrcQppZihwPDEyNyl7bz1DLmpuLndHKHAsNCkK
+aWYobz49OClyZXR1cm4gSC5PSChDLkYzLG8pCm89KEMuRjNbb10mMTw8KHAmMTUpKSE9PTB9ZWxzZSBv
+PSExCmlmKG8pcmV0dXJuIEguTHcoYyYmNjU8PXAmJjkwPj1wPyhwfDMyKT4+PjA6cCkKaWYodD49OTd8
+fHM+PTk3KXJldHVybiBDLnhCLk5qKGEsYixiKzMpLnRvVXBwZXJDYXNlKCkKcmV0dXJuIG51bGx9LApI
+SDpmdW5jdGlvbihhKXt2YXIgdCxzLHIscSxwLG8sbj0iMDEyMzQ1Njc4OUFCQ0RFRiIKaWYoYTwxMjgp
+e3Q9bmV3IEFycmF5KDMpCnQuZml4ZWQkbGVuZ3RoPUFycmF5CnM9SC5WTSh0LHUudCkKQy5ObS5ZKHMs
+MCwzNykKQy5ObS5ZKHMsMSxDLnhCLlcobixhPj4+NCkpCkMuTm0uWShzLDIsQy54Qi5XKG4sYSYxNSkp
+fWVsc2V7aWYoYT4yMDQ3KWlmKGE+NjU1MzUpe3I9MjQwCnE9NH1lbHNle3I9MjI0CnE9M31lbHNle3I9
+MTkyCnE9Mn10PW5ldyBBcnJheSgzKnEpCnQuZml4ZWQkbGVuZ3RoPUFycmF5CnM9SC5WTSh0LHUudCkK
+Zm9yKHA9MDstLXEscT49MDtyPTEyOCl7bz1DLmpuLmJmKGEsNipxKSY2M3xyCkMuTm0uWShzLHAsMzcp
+CkMuTm0uWShzLHArMSxDLnhCLlcobixvPj4+NCkpCkMuTm0uWShzLHArMixDLnhCLlcobixvJjE1KSkK
+cCs9M319cmV0dXJuIFAuSE0ocywwLG51bGwpfSwKdU86ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgdD1Q
+LlVsKGEsYixjLGQsZSkKcmV0dXJuIHQ9PW51bGw/Qy54Qi5OaihhLGIsYyk6dH0sClVsOmZ1bmN0aW9u
+KGEsYixjLGQsZSl7dmFyIHQscyxyLHEscCxvPW51bGwsbj0hZSxtPWIsbD1tLGs9bwp3aGlsZSghMCl7
+aWYodHlwZW9mIG0hPT0ibnVtYmVyIilyZXR1cm4gbS5KKCkKaWYodHlwZW9mIGMhPT0ibnVtYmVyIily
+ZXR1cm4gSC5wWShjKQppZighKG08YykpYnJlYWsKYyQwOnt0PUMueEIubShhLG0pCmlmKHQ8MTI3KXtz
+PXQ+Pj40CmlmKHM+PTgpcmV0dXJuIEguT0goZCxzKQpzPShkW3NdJjE8PCh0JjE1KSkhPT0wfWVsc2Ug
+cz0hMQppZihzKSsrbQplbHNle2lmKHQ9PT0zNyl7cj1QLnJ2KGEsbSwhMSkKaWYocj09bnVsbCl7bSs9
+MwpicmVhayBjJDB9aWYoIiUiPT09cil7cj0iJTI1IgpxPTF9ZWxzZSBxPTN9ZWxzZXtpZihuKWlmKHQ8
+PTkzKXtzPXQ+Pj40CmlmKHM+PTgpcmV0dXJuIEguT0goQy5hayxzKQpzPShDLmFrW3NdJjE8PCh0JjE1
+KSkhPT0wfWVsc2Ugcz0hMQplbHNlIHM9ITEKaWYocyl7UC5SMyhhLG0sIkludmFsaWQgY2hhcmFjdGVy
+IikKcT1vCnI9cX1lbHNle2lmKCh0JjY0NTEyKT09PTU1Mjk2KXtzPW0rMQppZihzPGMpe3A9Qy54Qi5t
+KGEscykKaWYoKHAmNjQ1MTIpPT09NTYzMjApe3Q9NjU1MzZ8KHQmMTAyMyk8PDEwfHAmMTAyMwpxPTJ9
+ZWxzZSBxPTF9ZWxzZSBxPTF9ZWxzZSBxPTEKcj1QLkhIKHQpfX1pZihrPT1udWxsKWs9bmV3IFAuUm4o
+IiIpCmsuYSs9Qy54Qi5OaihhLGwsbSkKay5hKz1ILmQocikKaWYodHlwZW9mIHEhPT0ibnVtYmVyIily
+ZXR1cm4gSC5wWShxKQptKz1xCmw9bX19fWlmKGs9PW51bGwpcmV0dXJuIG8KaWYodHlwZW9mIGwhPT0i
+bnVtYmVyIilyZXR1cm4gbC5KKCkKaWYobDxjKWsuYSs9Qy54Qi5OaihhLGwsYykKbj1rLmEKcmV0dXJu
+IG4uY2hhckNvZGVBdCgwKT09MD9uOm59LAp5QjpmdW5jdGlvbihhKXtpZihDLnhCLm4oYSwiLiIpKXJl
+dHVybiEwCnJldHVybiBDLnhCLk9ZKGEsIi8uIikhPT0tMX0sCnhlOmZ1bmN0aW9uKGEpe3ZhciB0LHMs
+cixxLHAsbyxuCmlmKCFQLnlCKGEpKXJldHVybiBhCnQ9SC5WTShbXSx1LnMpCmZvcihzPWEuc3BsaXQo
+Ii8iKSxyPXMubGVuZ3RoLHE9ITEscD0wO3A8cjsrK3Ape289c1twXQppZihKLlJNKG8sIi4uIikpe249
+dC5sZW5ndGgKaWYobiE9PTApe2lmKDA+PW4pcmV0dXJuIEguT0godCwtMSkKdC5wb3AoKQppZih0Lmxl
+bmd0aD09PTApQy5ObS5pKHQsIiIpfXE9ITB9ZWxzZSBpZigiLiI9PT1vKXE9ITAKZWxzZXtDLk5tLmko
+dCxvKQpxPSExfX1pZihxKUMuTm0uaSh0LCIiKQpyZXR1cm4gQy5ObS5IKHQsIi8iKX0sCndGOmZ1bmN0
+aW9uKGEsYil7dmFyIHQscyxyLHEscCxvCmlmKCFQLnlCKGEpKXJldHVybiFiP1AuQzEoYSk6YQp0PUgu
+Vk0oW10sdS5zKQpmb3Iocz1hLnNwbGl0KCIvIikscj1zLmxlbmd0aCxxPSExLHA9MDtwPHI7KytwKXtv
+PXNbcF0KaWYoIi4uIj09PW8paWYodC5sZW5ndGghPT0wJiZDLk5tLmdyWih0KSE9PSIuLiIpe2lmKDA+
+PXQubGVuZ3RoKXJldHVybiBILk9IKHQsLTEpCnQucG9wKCkKcT0hMH1lbHNle0MuTm0uaSh0LCIuLiIp
+CnE9ITF9ZWxzZSBpZigiLiI9PT1vKXE9ITAKZWxzZXtDLk5tLmkodCxvKQpxPSExfX1zPXQubGVuZ3Ro
+CmlmKHMhPT0wKWlmKHM9PT0xKXtpZigwPj1zKXJldHVybiBILk9IKHQsMCkKcz10WzBdLmxlbmd0aD09
+PTB9ZWxzZSBzPSExCmVsc2Ugcz0hMAppZihzKXJldHVybiIuLyIKaWYocXx8Qy5ObS5ncloodCk9PT0i
+Li4iKUMuTm0uaSh0LCIiKQppZighYil7aWYoMD49dC5sZW5ndGgpcmV0dXJuIEguT0godCwwKQpDLk5t
+LlkodCwwLFAuQzEodFswXSkpfXJldHVybiBDLk5tLkgodCwiLyIpfSwKQzE6ZnVuY3Rpb24oYSl7dmFy
+IHQscyxyLHE9YS5sZW5ndGgKaWYocT49MiYmUC5FdChKLlF6KGEsMCkpKWZvcih0PTE7dDxxOysrdCl7
+cz1DLnhCLlcoYSx0KQppZihzPT09NTgpcmV0dXJuIEMueEIuTmooYSwwLHQpKyIlM0EiK0MueEIuRyhh
+LHQrMSkKaWYoczw9MTI3KXtyPXM+Pj40CmlmKHI+PTgpcmV0dXJuIEguT0goQy5tSyxyKQpyPShDLm1L
+W3JdJjE8PChzJjE1KSk9PT0wfWVsc2Ugcj0hMAppZihyKWJyZWFrfXJldHVybiBhfSwKbW46ZnVuY3Rp
+b24oYSl7dmFyIHQscyxyLHE9YS5nRmooKSxwPXEubGVuZ3RoCmlmKHA+MCYmSi5IbShxWzBdKT09PTIm
+JkouYTYocVswXSwxKT09PTU4KXtpZigwPj1wKXJldHVybiBILk9IKHEsMCkKUC5yZyhKLmE2KHFbMF0s
+MCksITEpClAuSE4ocSwhMSwxKQp0PSEwfWVsc2V7UC5ITihxLCExLDApCnQ9ITF9cz1hLmd0VCgpJiYh
+dD8iXFwiOiIiCmlmKGEuZ2NqKCkpe3I9YS5nSmYoYSkKaWYoci5sZW5ndGghPT0wKXM9cysiXFwiK3Ir
+IlxcIn1zPVAudmcocyxxLCJcXCIpCnA9dCYmcD09PTE/cysiXFwiOnMKcmV0dXJuIHAuY2hhckNvZGVB
+dCgwKT09MD9wOnB9LApJaDpmdW5jdGlvbihhLGIpe3ZhciB0LHMscgpmb3IodD0wLHM9MDtzPDI7Kytz
+KXtyPUMueEIuVyhhLGIrcykKaWYoNDg8PXImJnI8PTU3KXQ9dCoxNityLTQ4CmVsc2V7cnw9MzIKaWYo
+OTc8PXImJnI8PTEwMil0PXQqMTYrci04NwplbHNlIHRocm93IEguYihQLnhZKCJJbnZhbGlkIFVSTCBl
+bmNvZGluZyIpKX19cmV0dXJuIHR9LAprdTpmdW5jdGlvbihhLGIsYyxkLGUpe3ZhciB0LHMscixxLHA9
+Si5yWShhKSxvPWIKd2hpbGUoITApe2lmKCEobzxjKSl7dD0hMApicmVha31zPXAuVyhhLG8pCmlmKHM8
+PTEyNylpZihzIT09Mzcpcj1lJiZzPT09NDMKZWxzZSByPSEwCmVsc2Ugcj0hMAppZihyKXt0PSExCmJy
+ZWFrfSsrb31pZih0KXtpZihDLnhNIT09ZClyPSExCmVsc2Ugcj0hMAppZihyKXJldHVybiBwLk5qKGEs
+YixjKQplbHNlIHE9bmV3IEgucWoocC5OaihhLGIsYykpfWVsc2V7cT1ILlZNKFtdLHUudCkKZm9yKG89
+YjtvPGM7KytvKXtzPXAuVyhhLG8pCmlmKHM+MTI3KXRocm93IEguYihQLnhZKCJJbGxlZ2FsIHBlcmNl
+bnQgZW5jb2RpbmcgaW4gVVJJIikpCmlmKHM9PT0zNyl7aWYobyszPmEubGVuZ3RoKXRocm93IEguYihQ
+LnhZKCJUcnVuY2F0ZWQgVVJJIikpCkMuTm0uaShxLFAuSWgoYSxvKzEpKQpvKz0yfWVsc2UgaWYoZSYm
+cz09PTQzKUMuTm0uaShxLDMyKQplbHNlIEMuTm0uaShxLHMpfX11LkwuYihxKQpyZXR1cm4gbmV3IFAu
+R1koITEpLldKKHEpfSwKRXQ6ZnVuY3Rpb24oYSl7dmFyIHQ9YXwzMgpyZXR1cm4gOTc8PXQmJnQ8PTEy
+Mn0sCktEOmZ1bmN0aW9uKGEsYixjKXt2YXIgdCxzLHIscSxwLG8sbixtLGw9IkludmFsaWQgTUlNRSB0
+eXBlIixrPUguVk0oW2ItMV0sdS50KQpmb3IodD1hLmxlbmd0aCxzPWIscj0tMSxxPW51bGw7czx0Oysr
+cyl7cT1DLnhCLlcoYSxzKQppZihxPT09NDR8fHE9PT01OSlicmVhawppZihxPT09NDcpe2lmKHI8MCl7
+cj1zCmNvbnRpbnVlfXRocm93IEguYihQLnJyKGwsYSxzKSl9fWlmKHI8MCYmcz5iKXRocm93IEguYihQ
+LnJyKGwsYSxzKSkKZm9yKDtxIT09NDQ7KXtDLk5tLmkoayxzKTsrK3MKZm9yKHA9LTE7czx0Oysrcyl7
+cT1DLnhCLlcoYSxzKQppZihxPT09NjEpe2lmKHA8MClwPXN9ZWxzZSBpZihxPT09NTl8fHE9PT00NCli
+cmVha31pZihwPj0wKUMuTm0uaShrLHApCmVsc2V7bz1DLk5tLmdyWihrKQppZihxIT09NDR8fHMhPT1v
+Kzd8fCFDLnhCLlFpKGEsImJhc2U2NCIsbysxKSl0aHJvdyBILmIoUC5ycigiRXhwZWN0aW5nICc9JyIs
+YSxzKSkKYnJlYWt9fUMuTm0uaShrLHMpCm49cysxCmlmKChrLmxlbmd0aCYxKT09PTEpYT1DLmg5Lnly
+KGEsbix0KQplbHNle209UC5VbChhLG4sdCxDLlZDLCEwKQppZihtIT1udWxsKWE9Qy54Qi5pNyhhLG4s
+dCxtKX1yZXR1cm4gbmV3IFAuUEUoYSxrLGMpfSwKdXg6ZnVuY3Rpb24oKXt2YXIgdD0iMDEyMzQ1Njc4
+OUFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXotLl9+ISQm
+JygpKissOz0iLHM9Ii4iLHI9IjoiLHE9Ii8iLHA9Ij8iLG89IiMiLG49dS5nYyxtPVAuZEgoMjIsbmV3
+IFAucTMoKSwhMCxuKSxsPW5ldyBQLnlJKG0pLGs9bmV3IFAuYzYoKSxqPW5ldyBQLnFkKCksaT1uLmIo
+bC4kMigwLDIyNSkpCmsuJDMoaSx0LDEpCmsuJDMoaSxzLDE0KQprLiQzKGksciwzNCkKay4kMyhpLHEs
+MykKay4kMyhpLHAsMTcyKQprLiQzKGksbywyMDUpCmk9bi5iKGwuJDIoMTQsMjI1KSkKay4kMyhpLHQs
+MSkKay4kMyhpLHMsMTUpCmsuJDMoaSxyLDM0KQprLiQzKGkscSwyMzQpCmsuJDMoaSxwLDE3MikKay4k
+MyhpLG8sMjA1KQppPW4uYihsLiQyKDE1LDIyNSkpCmsuJDMoaSx0LDEpCmsuJDMoaSwiJSIsMjI1KQpr
+LiQzKGksciwzNCkKay4kMyhpLHEsOSkKay4kMyhpLHAsMTcyKQprLiQzKGksbywyMDUpCmk9bi5iKGwu
+JDIoMSwyMjUpKQprLiQzKGksdCwxKQprLiQzKGksciwzNCkKay4kMyhpLHEsMTApCmsuJDMoaSxwLDE3
+MikKay4kMyhpLG8sMjA1KQppPW4uYihsLiQyKDIsMjM1KSkKay4kMyhpLHQsMTM5KQprLiQzKGkscSwx
+MzEpCmsuJDMoaSxzLDE0NikKay4kMyhpLHAsMTcyKQprLiQzKGksbywyMDUpCmk9bi5iKGwuJDIoMywy
+MzUpKQprLiQzKGksdCwxMSkKay4kMyhpLHEsNjgpCmsuJDMoaSxzLDE4KQprLiQzKGkscCwxNzIpCmsu
+JDMoaSxvLDIwNSkKaT1uLmIobC4kMig0LDIyOSkpCmsuJDMoaSx0LDUpCmouJDMoaSwiQVoiLDIyOSkK
+ay4kMyhpLHIsMTAyKQprLiQzKGksIkAiLDY4KQprLiQzKGksIlsiLDIzMikKay4kMyhpLHEsMTM4KQpr
+LiQzKGkscCwxNzIpCmsuJDMoaSxvLDIwNSkKaT1uLmIobC4kMig1LDIyOSkpCmsuJDMoaSx0LDUpCmou
+JDMoaSwiQVoiLDIyOSkKay4kMyhpLHIsMTAyKQprLiQzKGksIkAiLDY4KQprLiQzKGkscSwxMzgpCmsu
+JDMoaSxwLDE3MikKay4kMyhpLG8sMjA1KQppPW4uYihsLiQyKDYsMjMxKSkKai4kMyhpLCIxOSIsNykK
+ay4kMyhpLCJAIiw2OCkKay4kMyhpLHEsMTM4KQprLiQzKGkscCwxNzIpCmsuJDMoaSxvLDIwNSkKaT1u
+LmIobC4kMig3LDIzMSkpCmouJDMoaSwiMDkiLDcpCmsuJDMoaSwiQCIsNjgpCmsuJDMoaSxxLDEzOCkK
+ay4kMyhpLHAsMTcyKQprLiQzKGksbywyMDUpCmsuJDMobi5iKGwuJDIoOCw4KSksIl0iLDUpCmk9bi5i
+KGwuJDIoOSwyMzUpKQprLiQzKGksdCwxMSkKay4kMyhpLHMsMTYpCmsuJDMoaSxxLDIzNCkKay4kMyhp
+LHAsMTcyKQprLiQzKGksbywyMDUpCmk9bi5iKGwuJDIoMTYsMjM1KSkKay4kMyhpLHQsMTEpCmsuJDMo
+aSxzLDE3KQprLiQzKGkscSwyMzQpCmsuJDMoaSxwLDE3MikKay4kMyhpLG8sMjA1KQppPW4uYihsLiQy
+KDE3LDIzNSkpCmsuJDMoaSx0LDExKQprLiQzKGkscSw5KQprLiQzKGkscCwxNzIpCmsuJDMoaSxvLDIw
+NSkKaT1uLmIobC4kMigxMCwyMzUpKQprLiQzKGksdCwxMSkKay4kMyhpLHMsMTgpCmsuJDMoaSxxLDIz
+NCkKay4kMyhpLHAsMTcyKQprLiQzKGksbywyMDUpCmk9bi5iKGwuJDIoMTgsMjM1KSkKay4kMyhpLHQs
+MTEpCmsuJDMoaSxzLDE5KQprLiQzKGkscSwyMzQpCmsuJDMoaSxwLDE3MikKay4kMyhpLG8sMjA1KQpp
+PW4uYihsLiQyKDE5LDIzNSkpCmsuJDMoaSx0LDExKQprLiQzKGkscSwyMzQpCmsuJDMoaSxwLDE3MikK
+ay4kMyhpLG8sMjA1KQppPW4uYihsLiQyKDExLDIzNSkpCmsuJDMoaSx0LDExKQprLiQzKGkscSwxMCkK
+ay4kMyhpLHAsMTcyKQprLiQzKGksbywyMDUpCmk9bi5iKGwuJDIoMTIsMjM2KSkKay4kMyhpLHQsMTIp
+CmsuJDMoaSxwLDEyKQprLiQzKGksbywyMDUpCmk9bi5iKGwuJDIoMTMsMjM3KSkKay4kMyhpLHQsMTMp
+CmsuJDMoaSxwLDEzKQpqLiQzKG4uYihsLiQyKDIwLDI0NSkpLCJheiIsMjEpCmw9bi5iKGwuJDIoMjEs
+MjQ1KSkKai4kMyhsLCJheiIsMjEpCmouJDMobCwiMDkiLDIxKQprLiQzKGwsIistLiIsMjEpCnJldHVy
+biBtfSwKVUI6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgdCxzLHIscSxwLG89JC52WigpCmZvcih0PUou
+clkoYSkscz1iO3M8YzsrK3Mpe2lmKGQ8MHx8ZD49by5sZW5ndGgpcmV0dXJuIEguT0gobyxkKQpyPW9b
+ZF0KcT10LlcoYSxzKV45NgppZihxPjk1KXE9MzEKaWYocT49ci5sZW5ndGgpcmV0dXJuIEguT0gocixx
+KQpwPXJbcV0KZD1wJjMxCkMuTm0uWShlLHA+Pj41LHMpfXJldHVybiBkfSwKV0Y6ZnVuY3Rpb24gV0Yo
+YSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCmEyOmZ1bmN0aW9uIGEyKCl7fSwKaVA6ZnVuY3Rpb24gaVAo
+YSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCkNQOmZ1bmN0aW9uIENQKCl7fSwKWFM6ZnVuY3Rpb24gWFMo
+KXt9LApDNjpmdW5jdGlvbiBDNihhKXt0aGlzLmE9YX0sCm46ZnVuY3Rpb24gbigpe30sCnU6ZnVuY3Rp
+b24gdShhLGIsYyxkKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uYz1jCl8uZD1kfSwKYko6ZnVuY3Rp
+b24gYkooYSxiLGMsZCxlLGYpe3ZhciBfPXRoaXMKXy5lPWEKXy5mPWIKXy5hPWMKXy5iPWQKXy5jPWUK
+Xy5kPWZ9LAplWTpmdW5jdGlvbiBlWShhLGIsYyxkLGUpe3ZhciBfPXRoaXMKXy5mPWEKXy5hPWIKXy5i
+PWMKXy5jPWQKXy5kPWV9LAptcDpmdW5jdGlvbiBtcChhLGIsYyxkKXt2YXIgXz10aGlzCl8uYT1hCl8u
+Yj1iCl8uYz1jCl8uZD1kfSwKdWI6ZnVuY3Rpb24gdWIoYSl7dGhpcy5hPWF9LApkczpmdW5jdGlvbiBk
+cyhhKXt0aGlzLmE9YX0sCmxqOmZ1bmN0aW9uIGxqKGEpe3RoaXMuYT1hfSwKVVY6ZnVuY3Rpb24gVVYo
+YSl7dGhpcy5hPWF9LAprNTpmdW5jdGlvbiBrNSgpe30sCktZOmZ1bmN0aW9uIEtZKCl7fSwKYzpmdW5j
+dGlvbiBjKGEpe3RoaXMuYT1hfSwKQ0Q6ZnVuY3Rpb24gQ0QoYSl7dGhpcy5hPWF9LAphRTpmdW5jdGlv
+biBhRShhLGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LApFSDpmdW5jdGlvbiBFSCgpe30s
+CktOOmZ1bmN0aW9uIEtOKCl7fSwKY1g6ZnVuY3Rpb24gY1goKXt9LApBbjpmdW5jdGlvbiBBbigpe30s
+CnpNOmZ1bmN0aW9uIHpNKCl7fSwKWjA6ZnVuY3Rpb24gWjAoKXt9LApjODpmdW5jdGlvbiBjOCgpe30s
+CkZLOmZ1bmN0aW9uIEZLKCl7fSwKazpmdW5jdGlvbiBrKCl7fSwKT2Q6ZnVuY3Rpb24gT2QoKXt9LApp
+YjpmdW5jdGlvbiBpYigpe30sCnh1OmZ1bmN0aW9uIHh1KCl7fSwKR3o6ZnVuY3Rpb24gR3ooKXt9LApx
+VTpmdW5jdGlvbiBxVSgpe30sClJuOmZ1bmN0aW9uIFJuKGEpe3RoaXMuYT1hfSwKR0Q6ZnVuY3Rpb24g
+R0QoKXt9LApuMTpmdW5jdGlvbiBuMShhKXt0aGlzLmE9YX0sCmNTOmZ1bmN0aW9uIGNTKGEpe3RoaXMu
+YT1hfSwKVkM6ZnVuY3Rpb24gVkMoYSl7dGhpcy5hPWF9LAp0cDpmdW5jdGlvbiB0cChhLGIpe3RoaXMu
+YT1hCnRoaXMuYj1ifSwKRG46ZnVuY3Rpb24gRG4oYSxiLGMsZCxlLGYsZyl7dmFyIF89dGhpcwpfLmE9
+YQpfLmI9YgpfLmM9YwpfLmQ9ZApfLmU9ZQpfLmY9ZgpfLnI9ZwpfLlE9Xy56PV8ueT1fLng9bnVsbH0s
+CmUxOmZ1bmN0aW9uIGUxKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApOWTpmdW5jdGlvbiBOWShhKXt0
+aGlzLmE9YX0sClJaOmZ1bmN0aW9uIFJaKCl7fSwKTUU6ZnVuY3Rpb24gTUUoYSxiKXt0aGlzLmE9YQp0
+aGlzLmI9Yn0sCnk1OmZ1bmN0aW9uIHk1KGEpe3RoaXMuYT1hfSwKUEU6ZnVuY3Rpb24gUEUoYSxiLGMp
+e3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuYz1jfSwKcTM6ZnVuY3Rpb24gcTMoKXt9LAp5STpmdW5jdGlv
+biB5SShhKXt0aGlzLmE9YX0sCmM2OmZ1bmN0aW9uIGM2KCl7fSwKcWQ6ZnVuY3Rpb24gcWQoKXt9LApV
+ZjpmdW5jdGlvbiBVZihhLGIsYyxkLGUsZixnLGgpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5jPWMK
+Xy5kPWQKXy5lPWUKXy5mPWYKXy5yPWcKXy54PWgKXy55PW51bGx9LApxZTpmdW5jdGlvbiBxZShhLGIs
+YyxkLGUsZixnKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8uYz1jCl8uZD1kCl8uZT1lCl8uZj1mCl8u
+cj1nCl8uUT1fLno9Xy55PV8ueD1udWxsfSwKaUo6ZnVuY3Rpb24gaUooKXt9LApsUjpmdW5jdGlvbiBs
+UihhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKamc6ZnVuY3Rpb24gamcoYSxiKXt0aGlzLmE9YQp0aGlz
+LmI9Yn0sCkJmOmZ1bmN0aW9uIEJmKGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApBczpmdW5jdGlvbiBB
+cygpe30sCkdFOmZ1bmN0aW9uIEdFKGEpe3RoaXMuYT1hfSwKTjc6ZnVuY3Rpb24gTjcoYSxiKXt0aGlz
+LmE9YQp0aGlzLmI9Yn0sCnVROmZ1bmN0aW9uIHVRKCl7fSwKaEY6ZnVuY3Rpb24gaEYoKXt9LApSNDpm
+dW5jdGlvbihhLGIsYyxkKXt2YXIgdCxzLHIKSC54ZChiKQp1LmouYihkKQppZihILm9UKGIpKXt0PVtj
+XQpDLk5tLkZWKHQsZCkKZD10fXM9dS56CnI9UC5DSChKLk0xKGQsUC53MCgpLHMpLCEwLHMpCnUuWi5i
+KGEpCnJldHVybiBQLndZKEguRWsoYSxyLG51bGwpKX0sCkRtOmZ1bmN0aW9uKGEsYixjKXt2YXIgdAp0
+cnl7aWYoT2JqZWN0LmlzRXh0ZW5zaWJsZShhKSYmIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVy
+dHkuY2FsbChhLGIpKXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYSxiLHt2YWx1ZTpjfSkKcmV0dXJuITB9
+fWNhdGNoKHQpe0guUnUodCl9cmV0dXJuITF9LApPbTpmdW5jdGlvbihhLGIpe2lmKE9iamVjdC5wcm90
+b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChhLGIpKXJldHVybiBhW2JdCnJldHVybiBudWxsfSwKd1k6
+ZnVuY3Rpb24oYSl7aWYoYT09bnVsbHx8dHlwZW9mIGE9PSJzdHJpbmcifHx0eXBlb2YgYT09Im51bWJl
+ciJ8fEgubChhKSlyZXR1cm4gYQppZihhIGluc3RhbmNlb2YgUC5FNClyZXR1cm4gYS5hCmlmKEguUjko
+YSkpcmV0dXJuIGEKaWYodS53LmMoYSkpcmV0dXJuIGEKaWYoYSBpbnN0YW5jZW9mIFAuaVApcmV0dXJu
+IEgubzIoYSkKaWYodS5aLmMoYSkpcmV0dXJuIFAuaEUoYSwiJGRhcnRfanNGdW5jdGlvbiIsbmV3IFAu
+UEMoKSkKcmV0dXJuIFAuaEUoYSwiXyRkYXJ0X2pzT2JqZWN0IixuZXcgUC5ZbSgkLmtJKCkpKX0sCmhF
+OmZ1bmN0aW9uKGEsYixjKXt2YXIgdD1QLk9tKGEsYikKaWYodD09bnVsbCl7dD1jLiQxKGEpClAuRG0o
+YSxiLHQpfXJldHVybiB0fSwKTDc6ZnVuY3Rpb24oYSl7dmFyIHQscwppZihhPT1udWxsfHx0eXBlb2Yg
+YT09InN0cmluZyJ8fHR5cGVvZiBhPT0ibnVtYmVyInx8dHlwZW9mIGE9PSJib29sZWFuIilyZXR1cm4g
+YQplbHNlIGlmKGEgaW5zdGFuY2VvZiBPYmplY3QmJkguUjkoYSkpcmV0dXJuIGEKZWxzZSBpZihhIGlu
+c3RhbmNlb2YgT2JqZWN0JiZ1LncuYyhhKSlyZXR1cm4gYQplbHNlIGlmKGEgaW5zdGFuY2VvZiBEYXRl
+KXt0PUguU2MoYS5nZXRUaW1lKCkpCmlmKE1hdGguYWJzKHQpPD04NjRlMTMpcz0hMQplbHNlIHM9ITAK
+aWYocylILnZoKFAueFkoIkRhdGVUaW1lIGlzIG91dHNpZGUgdmFsaWQgcmFuZ2U6ICIrdCkpCnJldHVy
+biBuZXcgUC5pUCh0LCExKX1lbHNlIGlmKGEuY29uc3RydWN0b3I9PT0kLmtJKCkpcmV0dXJuIGEubwpl
+bHNlIHJldHVybiBQLk5EKGEpfSwKTkQ6ZnVuY3Rpb24oYSl7aWYodHlwZW9mIGE9PSJmdW5jdGlvbiIp
+cmV0dXJuIFAuaVEoYSwkLncoKSxuZXcgUC5OeigpKQppZihhIGluc3RhbmNlb2YgQXJyYXkpcmV0dXJu
+IFAuaVEoYSwkLlI4KCksbmV3IFAubnAoKSkKcmV0dXJuIFAuaVEoYSwkLlI4KCksbmV3IFAuVXQoKSl9
+LAppUTpmdW5jdGlvbihhLGIsYyl7dmFyIHQ9UC5PbShhLGIpCmlmKHQ9PW51bGx8fCEoYSBpbnN0YW5j
+ZW9mIE9iamVjdCkpe3Q9Yy4kMShhKQpQLkRtKGEsYix0KX1yZXR1cm4gdH0sClBDOmZ1bmN0aW9uIFBD
+KCl7fSwKWW06ZnVuY3Rpb24gWW0oYSl7dGhpcy5hPWF9LApOejpmdW5jdGlvbiBOeigpe30sCm5wOmZ1
+bmN0aW9uIG5wKCl7fSwKVXQ6ZnVuY3Rpb24gVXQoKXt9LApFNDpmdW5jdGlvbiBFNChhKXt0aGlzLmE9
+YX0sCnI3OmZ1bmN0aW9uIHI3KGEpe3RoaXMuYT1hfSwKVHo6ZnVuY3Rpb24gVHooYSxiKXt0aGlzLmE9
+YQp0aGlzLiR0aT1ifSwKY286ZnVuY3Rpb24gY28oKXt9LApuZDpmdW5jdGlvbiBuZCgpe30sCktlOmZ1
+bmN0aW9uIEtlKGEpe3RoaXMuYT1hfSwKZDU6ZnVuY3Rpb24gZDUoKXt9LApuNjpmdW5jdGlvbiBuNigp
+e319LFc9ewpacjpmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudH0sClU5OmZ1bmN0aW9uKGEsYixjKXt2
+YXIgdD1kb2N1bWVudC5ib2R5LHM9KHQmJkMuUlkpLnI2KHQsYSxiLGMpCnMudG9TdHJpbmcKdD11LmFj
+CnQ9bmV3IEguVTUobmV3IFcuZTcocyksdC5DKCJhMihsRC5FKSIpLmIobmV3IFcuQ3YoKSksdC5DKCJV
+NTxsRC5FPiIpKQpyZXR1cm4gdS5oLmIodC5ncjgodCkpfSwKclM6ZnVuY3Rpb24oYSl7dmFyIHQscyxy
+PSJlbGVtZW50IHRhZyB1bmF2YWlsYWJsZSIKdHJ5e3Q9Si5SRShhKQppZih0eXBlb2YgdC5nbnMoYSk9
+PSJzdHJpbmciKXI9dC5nbnMoYSl9Y2F0Y2gocyl7SC5SdShzKX1yZXR1cm4gcn0sCnFEOmZ1bmN0aW9u
+KGEsYixjKXt2YXIgdCxzLHIscT1uZXcgUC52cygkLlgzLHUuYW8pLHA9bmV3IFAuWmYocSx1LmJqKSxv
+PW5ldyBYTUxIdHRwUmVxdWVzdCgpCkMuRHQuZW8obyxiPT1udWxsPyJHRVQiOmIsYSwhMCkKYy5LKDAs
+bmV3IFcuYlUobykpCnQ9dS5hbgpzPXQuYihuZXcgVy5oSChvLHApKQp1Lk0uYihudWxsKQpyPXUucApX
+LkpFKG8sImxvYWQiLHMsITEscikKVy5KRShvLCJlcnJvciIsdC5iKHAuZ1lKKCkpLCExLHIpCm8uc2Vu
+ZCgpCnJldHVybiBxfSwKQzA6ZnVuY3Rpb24oYSxiKXthPTUzNjg3MDkxMSZhK2IKYT01MzY4NzA5MTEm
+YSsoKDUyNDI4NyZhKTw8MTApCnJldHVybiBhXmE+Pj42fSwKckU6ZnVuY3Rpb24oYSxiLGMsZCl7dmFy
+IHQ9Vy5DMChXLkMwKFcuQzAoVy5DMCgwLGEpLGIpLGMpLGQpLHM9NTM2ODcwOTExJnQrKCg2NzEwODg2
+MyZ0KTw8MykKc149cz4+PjExCnJldHVybiA1MzY4NzA5MTEmcysoKDE2MzgzJnMpPDwxNSl9LApUTjpm
+dW5jdGlvbihhLGIpe3ZhciB0LHMscj1hLmNsYXNzTGlzdApmb3IodD1iLmxlbmd0aCxzPTA7czxiLmxl
+bmd0aDtiLmxlbmd0aD09PXR8fCgwLEgubGspKGIpLCsrcylyLmFkZChiW3NdKX0sCkpFOmZ1bmN0aW9u
+KGEsYixjLGQsZSl7dmFyIHQ9Vy5hRihuZXcgVy52TihjKSx1LkIpCmlmKHQhPW51bGwmJiEwKUouZFoo
+YSxiLHQsITEpCnJldHVybiBuZXcgVy54QyhhLGIsdCwhMSxlLkMoInhDPDA+IikpfSwKVHc6ZnVuY3Rp
+b24oYSl7dmFyIHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLHM9bmV3IFcubWsodCx3aW5kb3cu
+bG9jYXRpb24pCnM9bmV3IFcuSlEocykKcy5DWShhKQpyZXR1cm4gc30sCnlXOmZ1bmN0aW9uKGEsYixj
+LGQpe3UuaC5iKGEpCkgueShiKQpILnkoYykKdS5PLmIoZCkKcmV0dXJuITB9LApRVzpmdW5jdGlvbihh
+LGIsYyxkKXt2YXIgdCxzLHIKdS5oLmIoYSkKSC55KGIpCkgueShjKQp0PXUuTy5iKGQpLmEKcz10LmEK
+cy5ocmVmPWMKcj1zLmhvc3RuYW1lCnQ9dC5iCmlmKCEocj09dC5ob3N0bmFtZSYmcy5wb3J0PT10LnBv
+cnQmJnMucHJvdG9jb2w9PXQucHJvdG9jb2wpKWlmKHI9PT0iIilpZihzLnBvcnQ9PT0iIil7dD1zLnBy
+b3RvY29sCnQ9dD09PSI6Inx8dD09PSIifWVsc2UgdD0hMQplbHNlIHQ9ITEKZWxzZSB0PSEwCnJldHVy
+biB0fSwKQmw6ZnVuY3Rpb24oKXt2YXIgdD11Lk4scz1QLnRNKEMuUXgsdCkscj11LmRHLmIobmV3IFcu
+SUEoKSkscT1ILlZNKFsiVEVNUExBVEUiXSx1LnMpCnQ9bmV3IFcuY3QocyxQLkxzKHQpLFAuTHModCks
+UC5Mcyh0KSxudWxsKQp0LkNZKG51bGwsbmV3IEguQTgoQy5ReCxyLHUuZHYpLHEsbnVsbCkKcmV0dXJu
+IHR9LAp1VjpmdW5jdGlvbihhKXtpZihhPT1udWxsKXJldHVybiBudWxsCnJldHVybiBXLlAxKGEpfSwK
+cWM6ZnVuY3Rpb24oYSl7dmFyIHQKaWYoYT09bnVsbClyZXR1cm4gbnVsbAppZigicG9zdE1lc3NhZ2Ui
+IGluIGEpe3Q9Vy5QMShhKQpyZXR1cm4gdH1lbHNlIHJldHVybiB1LmFTLmIoYSl9LApQMTpmdW5jdGlv
+bihhKXtpZihhPT09d2luZG93KXJldHVybiB1LmNpLmIoYSkKZWxzZSByZXR1cm4gbmV3IFcuZFcoYSl9
+LAp6WDpmdW5jdGlvbihhKXtpZihhPT09d2luZG93LmxvY2F0aW9uKXJldHVybiBhCmVsc2UgcmV0dXJu
+IG5ldyBXLkZiKCl9LAphRjpmdW5jdGlvbihhLGIpe3ZhciB0PSQuWDMKaWYodD09PUMuTlUpcmV0dXJu
+IGEKcmV0dXJuIHQuUHkoYSxiKX0sCnFFOmZ1bmN0aW9uIHFFKCl7fSwKR2g6ZnVuY3Rpb24gR2goKXt9
+LApmWTpmdW5jdGlvbiBmWSgpe30sCm5COmZ1bmN0aW9uIG5CKCl7fSwKQXo6ZnVuY3Rpb24gQXooKXt9
+LApRUDpmdW5jdGlvbiBRUCgpe30sCm54OmZ1bmN0aW9uIG54KCl7fSwKb0o6ZnVuY3Rpb24gb0ooKXt9
+LAppZDpmdW5jdGlvbiBpZCgpe30sClFGOmZ1bmN0aW9uIFFGKCl7fSwKTmg6ZnVuY3Rpb24gTmgoKXt9
+LApJQjpmdW5jdGlvbiBJQigpe30sCm43OmZ1bmN0aW9uIG43KCl7fSwKd3o6ZnVuY3Rpb24gd3ooYSxi
+KXt0aGlzLmE9YQp0aGlzLiR0aT1ifSwKY3Y6ZnVuY3Rpb24gY3YoKXt9LApDdjpmdW5jdGlvbiBDdigp
+e30sCmVhOmZ1bmN0aW9uIGVhKCl7fSwKRDA6ZnVuY3Rpb24gRDAoKXt9LApUNTpmdW5jdGlvbiBUNSgp
+e30sCmg0OmZ1bmN0aW9uIGg0KCl7fSwKYnI6ZnVuY3Rpb24gYnIoKXt9LApWYjpmdW5jdGlvbiBWYigp
+e30sCk83OmZ1bmN0aW9uIE83KCl7fSwKYlU6ZnVuY3Rpb24gYlUoYSl7dGhpcy5hPWF9LApoSDpmdW5j
+dGlvbiBoSChhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKd2E6ZnVuY3Rpb24gd2EoKXt9LApTZzpmdW5j
+dGlvbiBTZygpe30sCnU4OmZ1bmN0aW9uIHU4KCl7fSwKQWo6ZnVuY3Rpb24gQWooKXt9LAplNzpmdW5j
+dGlvbiBlNyhhKXt0aGlzLmE9YX0sCnVIOmZ1bmN0aW9uIHVIKCl7fSwKQkg6ZnVuY3Rpb24gQkgoKXt9
+LApTTjpmdW5jdGlvbiBTTigpe30sCmV3OmZ1bmN0aW9uIGV3KCl7fSwKbHA6ZnVuY3Rpb24gbHAoKXt9
+LApUYjpmdW5jdGlvbiBUYigpe30sCkl2OmZ1bmN0aW9uIEl2KCl7fSwKQlQ6ZnVuY3Rpb24gQlQoKXt9
+LAp5WTpmdW5jdGlvbiB5WSgpe30sCnc2OmZ1bmN0aW9uIHc2KCl7fSwKSzU6ZnVuY3Rpb24gSzUoKXt9
+LApDbTpmdW5jdGlvbiBDbSgpe30sCkNROmZ1bmN0aW9uIENRKCl7fSwKdzQ6ZnVuY3Rpb24gdzQoKXt9
+LApyaDpmdW5jdGlvbiByaCgpe30sCmNmOmZ1bmN0aW9uIGNmKCl7fSwKaTc6ZnVuY3Rpb24gaTcoYSl7
+dGhpcy5hPWF9LApTeTpmdW5jdGlvbiBTeShhKXt0aGlzLmE9YX0sCktTOmZ1bmN0aW9uIEtTKGEsYil7
+dGhpcy5hPWEKdGhpcy5iPWJ9LApBMzpmdW5jdGlvbiBBMyhhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwK
+STQ6ZnVuY3Rpb24gSTQoYSl7dGhpcy5hPWF9LApGazpmdW5jdGlvbiBGayhhLGIpe3RoaXMuYT1hCnRo
+aXMuJHRpPWJ9LApSTzpmdW5jdGlvbiBSTyhhLGIsYyxkKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1iCl8u
+Yz1jCl8uJHRpPWR9LApDcTpmdW5jdGlvbiBDcShhLGIsYyxkKXt2YXIgXz10aGlzCl8uYT1hCl8uYj1i
+Cl8uYz1jCl8uJHRpPWR9LAp4QzpmdW5jdGlvbiB4QyhhLGIsYyxkLGUpe3ZhciBfPXRoaXMKXy5iPWEK
+Xy5jPWIKXy5kPWMKXy5lPWQKXy4kdGk9ZX0sCnZOOmZ1bmN0aW9uIHZOKGEpe3RoaXMuYT1hfSwKSlE6
+ZnVuY3Rpb24gSlEoYSl7dGhpcy5hPWF9LApHbTpmdW5jdGlvbiBHbSgpe30sCnZEOmZ1bmN0aW9uIHZE
+KGEpe3RoaXMuYT1hfSwKVXY6ZnVuY3Rpb24gVXYoYSl7dGhpcy5hPWF9LApFZzpmdW5jdGlvbiBFZyhh
+LGIsYyl7dGhpcy5hPWEKdGhpcy5iPWIKdGhpcy5jPWN9LAptNjpmdW5jdGlvbiBtNigpe30sCkVvOmZ1
+bmN0aW9uIEVvKCl7fSwKV2s6ZnVuY3Rpb24gV2soKXt9LApjdDpmdW5jdGlvbiBjdChhLGIsYyxkLGUp
+e3ZhciBfPXRoaXMKXy5lPWEKXy5hPWIKXy5iPWMKXy5jPWQKXy5kPWV9LApJQTpmdW5jdGlvbiBJQSgp
+e30sCk93OmZ1bmN0aW9uIE93KCl7fSwKVzk6ZnVuY3Rpb24gVzkoYSxiLGMpe3ZhciBfPXRoaXMKXy5h
+PWEKXy5iPWIKXy5jPS0xCl8uZD1udWxsCl8uJHRpPWN9LApkVzpmdW5jdGlvbiBkVyhhKXt0aGlzLmE9
+YX0sCkZiOmZ1bmN0aW9uIEZiKCl7fSwKa0Y6ZnVuY3Rpb24ga0YoKXt9LAptazpmdW5jdGlvbiBtayhh
+LGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKS286ZnVuY3Rpb24gS28oYSl7dGhpcy5hPWF9LApmbTpmdW5j
+dGlvbiBmbShhKXt0aGlzLmE9YX0sCkxlOmZ1bmN0aW9uIExlKCl7fSwKSzc6ZnVuY3Rpb24gSzcoKXt9
+LApyQjpmdW5jdGlvbiByQigpe30sClhXOmZ1bmN0aW9uIFhXKCl7fSwKb2E6ZnVuY3Rpb24gb2EoKXt9
+fSxVPXsKeXU6ZnVuY3Rpb24oYSl7dmFyIHQscyxyLHEscCxvLG49SC5WTShbXSx1LmJQKQpmb3IodD1K
+LlU2KGEpLHM9Si5JVCh1LlIuYih0LnEoYSwiZGV0YWlscyIpKSk7cy5GKCk7KXtyPXMuZ2woKQpxPUou
+VTYocikKcD1ILnkocS5xKHIsImRlc2NyaXB0aW9uIikpCnE9cS5xKHIsImxpbmsiKQppZihxPT1udWxs
+KXE9bnVsbAplbHNle289Si5VNihxKQpxPW5ldyBVLk1sKEgueShvLnEocSwiaHJlZiIpKSxILlNjKG8u
+cShxLCJsaW5lIikpLEgueShvLnEocSwicGF0aCIpKSl9Qy5ObS5pKG4sbmV3IFUudUYocCxxKSl9cmV0
+dXJuIG5ldyBVLmQyKG4sVS5qZih0LnEoYSwiZWRpdHMiKSksSC55KHQucShhLCJleHBsYW5hdGlvbiIp
+KSxILlNjKHQucShhLCJsaW5lIikpLEgueSh0LnEoYSwicGF0aCIpKSxVLk5kKHQucShhLCJ0cmFjZXMi
+KSkpfSwKamY6ZnVuY3Rpb24oYSl7dmFyIHQscyxyLHEKaWYoYT09bnVsbCl0PW51bGwKZWxzZXt0PUgu
+Vk0oW10sdS5mQSkKZm9yKHM9Si5JVCh1LlIuYihhKSk7cy5GKCk7KXtyPXMuZ2woKQpxPUouVTYocikK
+Qy5ObS5pKHQsbmV3IFUuU2UoSC55KHEucShyLCJkZXNjcmlwdGlvbiIpKSxILnkocS5xKHIsImhyZWYi
+KSkpKX19cmV0dXJuIHR9LApOZDpmdW5jdGlvbihhKXt2YXIgdCxzCmlmKGE9PW51bGwpdD1udWxsCmVs
+c2V7dD1ILlZNKFtdLHUuaGgpCmZvcihzPUouSVQodS5SLmIoYSkpO3MuRigpOylDLk5tLmkodCxVLk5m
+KHMuZ2woKSkpfXJldHVybiB0fSwKTmY6ZnVuY3Rpb24oYSl7dmFyIHQscyxyLHEscCxvPSJkZXNjcmlw
+dGlvbiIsbj1KLlU2KGEpLG09SC55KG4ucShhLG8pKSxsPUguVk0oW10sdS5hSikKZm9yKG49Si5JVCh1
+LlIuYihuLnEoYSwiZW50cmllcyIpKSk7bi5GKCk7KXt0PW4uZ2woKQpzPUouVTYodCkKcj1ILnkocy5x
+KHQsbykpCnE9SC55KHMucSh0LCJmdW5jdGlvbiIpKQpzPXMucSh0LCJsaW5rIikKaWYocz09bnVsbClz
+PW51bGwKZWxzZXtwPUouVTYocykKcz1uZXcgVS5NbChILnkocC5xKHMsImhyZWYiKSksSC5TYyhwLnEo
+cywibGluZSIpKSxILnkocC5xKHMsInBhdGgiKSkpfUMuTm0uaShsLG5ldyBVLndiKHIscSxzKSl9cmV0
+dXJuIG5ldyBVLnlEKG0sbCl9LApkMjpmdW5jdGlvbiBkMihhLGIsYyxkLGUsZil7dmFyIF89dGhpcwpf
+LmE9YQpfLmI9YgpfLmM9YwpfLmQ9ZApfLmU9ZQpfLmY9Zn0sClNlOmZ1bmN0aW9uIFNlKGEsYil7dGhp
+cy5hPWEKdGhpcy5iPWJ9LAp1RjpmdW5jdGlvbiB1RihhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKTWw6
+ZnVuY3Rpb24gTWwoYSxiLGMpe3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuYz1jfSwKeUQ6ZnVuY3Rpb24g
+eUQoYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCndiOmZ1bmN0aW9uIHdiKGEsYixjKXt0aGlzLmE9YQp0
+aGlzLmI9Ygp0aGlzLmM9Y319LEI9ewpZZjpmdW5jdGlvbihhKXt2YXIgdCxzLHIscT1ILnkoYS5xKDAs
+InJlZ2lvbnMiKSkscD1ILnkoYS5xKDAsIm5hdmlnYXRpb25Db250ZW50IikpLG89SC55KGEucSgwLCJz
+b3VyY2VDb2RlIikpLG49SC5WTShbXSx1LnUpCmZvcih0PUouSVQodS5SLmIoYS5xKDAsImVkaXRzIikp
+KTt0LkYoKTspe3M9dC5nbCgpCnI9Si5VNihzKQpDLk5tLmkobixuZXcgQi5qOChILlNjKHIucShzLCJs
+aW5lIikpLEgueShyLnEocywiZXhwbGFuYXRpb24iKSksSC5TYyhyLnEocywib2Zmc2V0IikpKSl9cmV0
+dXJuIG5ldyBCLnFwKHEscCxvLG4pfSwKajg6ZnVuY3Rpb24gajgoYSxiLGMpe3RoaXMuYT1hCnRoaXMu
+Yj1iCnRoaXMuYz1jfSwKcXA6ZnVuY3Rpb24gcXAoYSxiLGMsZCl7dmFyIF89dGhpcwpfLmE9YQpfLmI9
+YgpfLmM9YwpfLmQ9ZH0sCkx1OmZ1bmN0aW9uIEx1KCl7fSwKT1M6ZnVuY3Rpb24oYSl7dmFyIHQKaWYo
+IShhPj02NSYmYTw9OTApKXQ9YT49OTcmJmE8PTEyMgplbHNlIHQ9ITAKcmV0dXJuIHR9LApZdTpmdW5j
+dGlvbihhLGIpe3ZhciB0PWEubGVuZ3RoLHM9YisyCmlmKHQ8cylyZXR1cm4hMQppZighQi5PUyhDLnhC
+Lm0oYSxiKSkpcmV0dXJuITEKaWYoQy54Qi5tKGEsYisxKSE9PTU4KXJldHVybiExCmlmKHQ9PT1zKXJl
+dHVybiEwCnJldHVybiBDLnhCLm0oYSxzKT09PTQ3fX0sVD17R1Y6ZnVuY3Rpb24gR1YoKXt9fSxMPXsK
+SXE6ZnVuY3Rpb24oKXtDLkJaLkIoZG9jdW1lbnQsIkRPTUNvbnRlbnRMb2FkZWQiLG5ldyBMLmUoKSkK
+Qy5vbC5CKHdpbmRvdywicG9wc3RhdGUiLG5ldyBMLkwoKSl9LAprejpmdW5jdGlvbihhKXt2YXIgdCxz
+PXUuaC5hKGEucGFyZW50Tm9kZSkucXVlcnlTZWxlY3RvcigiOnNjb3BlID4gdWwiKSxyPXMuc3R5bGUs
+cT0iIitDLkNELnpRKHMub2Zmc2V0SGVpZ2h0KSoyKyJweCIKci5tYXhIZWlnaHQ9cQpyPUoucUYoYSkK
+cT1yLiR0aQp0PXEuQygifigxKSIpLmIobmV3IEwuV3gocyxhKSkKdS5NLmIobnVsbCkKVy5KRShyLmEs
+ci5iLHQsITEscS5kKX0sCnlYOmZ1bmN0aW9uKGEsYil7dmFyIHQscyxyLHEscCxvPSJxdWVyeVNlbGVj
+dG9yQWxsIixuPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoYSksbT11LmgKbi50b1N0cmluZwpILkRoKG0s
+bSwiVCIsbykKdD11LlMKcz1uZXcgVy53eihuLnF1ZXJ5U2VsZWN0b3JBbGwoIi5uYXYtbGluayIpLHQp
+CnMuSyhzLG5ldyBMLkFPKGIpKQpILkRoKG0sbSwiVCIsbykKcj1uZXcgVy53eihuLnF1ZXJ5U2VsZWN0
+b3JBbGwoIi5yZWdpb24iKSx0KQppZihyLmdBKHIpIT09MCl7cT1uLnF1ZXJ5U2VsZWN0b3IoInRhYmxl
+W2RhdGEtcGF0aF0iKQpxLnRvU3RyaW5nCnIuSyhyLG5ldyBMLkhvKHEuZ2V0QXR0cmlidXRlKCJkYXRh
+LSIrbmV3IFcuU3kobmV3IFcuaTcocSkpLk8oInBhdGgiKSkpKX1ILkRoKG0sbSwiVCIsbykKcD1uZXcg
+Vy53eihuLnF1ZXJ5U2VsZWN0b3JBbGwoIi5wb3N0LWxpbmsiKSx0KQpwLksocCxuZXcgTC5JQygpKX0s
+CnR5OmZ1bmN0aW9uKGEpe3ZhciB0PXUuTgpyZXR1cm4gVy5xRChhLCJQT1NUIixQLkVGKFsiQ29udGVu
+dC1UeXBlIiwiYXBwbGljYXRpb24vanNvbjsgY2hhcnNldD1VVEYtOCJdLHQsdCkpLlc3KG5ldyBMLkwx
+KCksdS5yKX0sCmFLOmZ1bmN0aW9uKGEpe3ZhciB0PVAuaEsoYSkuZ2hZKCkucSgwLCJsaW5lIikKcmV0
+dXJuIHQ9PW51bGw/bnVsbDpILkhwKHQsbnVsbCl9LApHNjpmdW5jdGlvbihhKXt2YXIgdD1QLmhLKGEp
+LmdoWSgpLnEoMCwib2Zmc2V0IikKcmV0dXJuIHQ9PW51bGw/bnVsbDpILkhwKHQsbnVsbCl9LAp0Mjpm
+dW5jdGlvbihhLGIsYyl7dmFyIHQscyxyLHEscCxvPXt9LG49by5hPXUuaC5iKFcucWMoYS5jdXJyZW50
+VGFyZ2V0KSkuZ2V0QXR0cmlidXRlKCJocmVmIikKaWYoSi56bChuLCI/Iikpe3Q9Qy54Qi5OaihuLDAs
+Qy54Qi5PWShuLCI/IikpCm8uYT10CnM9dH1lbHNlIHM9bgppZihjIT1udWxsKXtyPSQublUoKQpzPW8u
+YT1yLm81KEQubnIoci50TShjKSxzKSl9cT1MLkc2KG4pCnA9TC5hSyhuKQppZihxIT1udWxsKUwuYWYo
+cyxxLHAsYixuZXcgTC5uVChvLHEscCkpCmVsc2UgTC5hZihzLG51bGwsbnVsbCxiLG5ldyBMLkJaKG8p
+KQphLnByZXZlbnREZWZhdWx0KCl9LAp1bTpmdW5jdGlvbihhKXtyZXR1cm4gTC5RUyh1LlYuYihhKSl9
+LApRUzpmdW5jdGlvbihhKXt2YXIgdD0wLHM9UC5GWCh1LnopLHI9MSxxLHA9W10sbyxuLG0sbCxrLGoK
+dmFyICRhc3luYyR1bT1QLmx6KGZ1bmN0aW9uKGIsYyl7aWYoYj09PTEpe3E9Ywp0PXJ9d2hpbGUodHJ1
+ZSlzd2l0Y2godCl7Y2FzZSAwOms9dS5oLmEoVy5xYyhhLmN1cnJlbnRUYXJnZXQpKS5nZXRBdHRyaWJ1
+dGUoImhyZWYiKQphLnByZXZlbnREZWZhdWx0KCkKbT1kb2N1bWVudAptLmJvZHkuY2xhc3NMaXN0LmFk
+ZCgicmVydW5uaW5nIikKcj0zCnQ9NgpyZXR1cm4gUC5qUShMLnR5KGspLCRhc3luYyR1bSkKY2FzZSA2
+OnUuRi5hKEouR3IoVy51VihtLmRlZmF1bHRWaWV3KSkpLnJlbG9hZCgpCnAucHVzaCg1KQp0PTQKYnJl
+YWsKY2FzZSAzOnI9MgpqPXEKbz1ILlJ1KGopCm49SC50cyhqKQpMLnFKKCJoYW5kbGVQb3N0TGlua0Ns
+aWNrOiAiK0guZChvKSxuKQp3aW5kb3cuYWxlcnQoIkNvdWxkIG5vdCBsb2FkICIrSC5kKGspKyIgKCIr
+SC5kKG8pKyIpLiIpCnAucHVzaCg1KQp0PTQKYnJlYWsKY2FzZSAyOnA9WzFdCmNhc2UgNDpyPTEKbS5i
+b2R5LmNsYXNzTGlzdC5yZW1vdmUoInJlcnVubmluZyIpCnQ9cC5wb3AoKQpicmVhawpjYXNlIDU6cmV0
+dXJuIFAueUMobnVsbCxzKQpjYXNlIDE6cmV0dXJuIFAuZjMocSxzKX19KQpyZXR1cm4gUC5ESSgkYXN5
+bmMkdW0scyl9LAp2VTpmdW5jdGlvbigpe3ZhciB0PWRvY3VtZW50LHM9dS5oCkguRGgocyxzLCJUIiwi
+cXVlcnlTZWxlY3RvckFsbCIpCnQ9bmV3IFcud3oodC5xdWVyeVNlbGVjdG9yQWxsKCIuY29kZSIpLHUu
+UykKdC5LKHQsbmV3IEwuR0goKSl9LApoWDpmdW5jdGlvbihhLGIpe3ZhciB0PXUuTgpXLnFEKEguZChh
+KSsiP3JlZ2lvbj1yZWdpb24mb2Zmc2V0PSIrSC5kKGIpLG51bGwsUC5FRihbIkNvbnRlbnQtVHlwZSIs
+ImFwcGxpY2F0aW9uL2pzb247IGNoYXJzZXQ9VVRGLTgiXSx0LHQpKS5XNyhuZXcgTC5EVCgpLHUuUCku
+T0EobmV3IEwuZUgoYSkpfSwKRzc6ZnVuY3Rpb24oYSxiLGMsZCxlKXt2YXIgdCxzCmlmKCFKLnJZKGEp
+LlRjKGEsIi5kYXJ0Iikpe0wuQkUoYSxuZXcgQi5xcCgiIiwiIiwiIixDLnhEKSxkKQpMLkJYKGEsbnVs
+bCkKaWYoZSE9bnVsbCllLiQwKCkKcmV0dXJufXQ9Qy54Qi50ZyhhLCI/Iik/YSsiJmlubGluZT10cnVl
+IjphKyI/aW5saW5lPXRydWUiCnM9dS5OClcucUQodCxudWxsLFAuRUYoWyJDb250ZW50LVR5cGUiLCJh
+cHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PVVURi04Il0scyxzKSkuVzcobmV3IEwuekQoYSxkLGIsYyxl
+KSx1LlApLk9BKG5ldyBMLk9FKGEpKX0sCkdlOmZ1bmN0aW9uKCl7dmFyIHQ9Ii9fcHJldmlldy9uYXZp
+Z2F0aW9uVHJlZS5qc29uIixzPXUuTgpXLnFEKHQsbnVsbCxQLkVGKFsiQ29udGVudC1UeXBlIiwiYXBw
+bGljYXRpb24vanNvbjsgY2hhcnNldD1VVEYtOCJdLHMscykpLlc3KG5ldyBMLlRXKCksdS5QKS5PQShu
+ZXcgTC54cih0KSl9LApxSjpmdW5jdGlvbihhLGIpe3ZhciB0CndpbmRvdwppZih0eXBlb2YgY29uc29s
+ZSE9InVuZGVmaW5lZCIpd2luZG93LmNvbnNvbGUuZXJyb3IoYSkKd2luZG93CnQ9SC5kKGIpCmlmKHR5
+cGVvZiBjb25zb2xlIT0idW5kZWZpbmVkIil3aW5kb3cuY29uc29sZS5lcnJvcih0KX0sCnFPOmZ1bmN0
+aW9uKGEpe3ZhciB0PWEuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkscz1DLkNELnpRKCQuZmkoKS5vZmZz
+ZXRIZWlnaHQpLHI9d2luZG93LmlubmVySGVpZ2h0LHE9Qy5DRC56USgkLkRXKCkub2Zmc2V0SGVpZ2h0
+KQppZih0eXBlb2YgciE9PSJudW1iZXIiKXJldHVybiByLkhOKCkKaWYodC5ib3R0b20+ci0ocSsxNCkp
+Si5kaChhKQplbHNlIGlmKHQudG9wPHMrMTQpSi5kaChhKX0sCmZHOmZ1bmN0aW9uKGEsYil7dmFyIHQs
+cyxyCmlmKGEhPW51bGwpe3Q9ZG9jdW1lbnQKcz10LmdldEVsZW1lbnRCeUlkKCJvIitILmQoYSkpCnI9
+dC5xdWVyeVNlbGVjdG9yKCIubGluZS0iK0guZChiKSkKaWYocyE9bnVsbCl7TC5xTyhzKQpKLmRSKHMp
+LmkoMCwidGFyZ2V0Iil9ZWxzZSBpZihyIT1udWxsKUwucU8oci5wYXJlbnRFbGVtZW50KQppZihyIT1u
+dWxsKUouZFIodS5oLmEoci5wYXJlbnROb2RlKSkuaSgwLCJoaWdobGlnaHQiKX1lbHNlIEwucU8oJC5E
+OSgpKX0sCmFmOmZ1bmN0aW9uKGEsYixjLGQsZSl7dmFyIHQscyxyPUwuRzYod2luZG93LmxvY2F0aW9u
+LmhyZWYpLHE9TC5hSyh3aW5kb3cubG9jYXRpb24uaHJlZikKaWYociE9bnVsbCl7dD1kb2N1bWVudC5n
+ZXRFbGVtZW50QnlJZCgibyIrSC5kKHIpKQppZih0IT1udWxsKUouZFIodCkuUigwLCJ0YXJnZXQiKX1p
+ZihxIT1udWxsKXtzPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5saW5lLSIrSC5kKHEpKQppZihzIT1u
+dWxsKUouZFIocy5wYXJlbnRFbGVtZW50KS5SKDAsImhpZ2hsaWdodCIpfWlmKGE9PXdpbmRvdy5sb2Nh
+dGlvbi5wYXRobmFtZSl7TC5mRyhiLGMpCmUuJDAoKX1lbHNlIEwuRzcoYSxiLGMsZCxlKX0sCkx4OmZ1
+bmN0aW9uKGEsYil7dmFyIHQKaWYoYT09PTEpdD1iCmVsc2UgdD1iKyJzIgpyZXR1cm4gdH0sClQxOmZ1
+bmN0aW9uKGEpe3ZhciB0LHMscixxLHAsbyxuLG09JC5oTCgpCkoubDUobSwiIikKaWYoYT09bnVsbCl7
+dD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwIikKdC50ZXh0Q29udGVudD0iU2VlIGRldGFpbHMgYWJv
+dXQgYSBwcm9wb3NlZCBlZGl0LiIKQy5MdC5zRCh0LEguVk0oWyJwbGFjZWhvbGRlciJdLHUucykpCm0u
+YXBwZW5kQ2hpbGQodCkKcmV0dXJufXM9YS5lCnQ9JC5uVSgpCnI9dC50TShzKQpxPWEuYwpwPWRvY3Vt
+ZW50Cm89dC5IUChzLEouVDAocC5xdWVyeVNlbGVjdG9yKCIucm9vdCIpLnRleHRDb250ZW50KSkKbj1h
+LmQKdD1wLmNyZWF0ZUVsZW1lbnQoInAiKQp1LmguYihtLmFwcGVuZENoaWxkKHQpKS5hcHBlbmRDaGls
+ZChwLmNyZWF0ZVRleHROb2RlKEguZChxKSsiIGF0ICIrSC5kKG8pKyI6IitILmQobikrIi4iKSkKTC5D
+QyhhLG0scikKTC5GeihhLG0pCkwuTkcoYSxtLHIpfSwKTEg6ZnVuY3Rpb24oYSxiLGMpe3ZhciB0LHMs
+cixxLHAsbyxuLG0sbCxrLGosaSxoLGcsZixlLGQ9JC5tUSgpCkoubDUoZCwiIikKdD1kb2N1bWVudApz
+PXQuY3JlYXRlRWxlbWVudCgicCIpCnI9dS5oCnE9ci5iKGQuYXBwZW5kQ2hpbGQocykpCnA9Yi5sZW5n
+dGgKaWYocD09PTApcS5hcHBlbmRDaGlsZCh0LmNyZWF0ZVRleHROb2RlKCJObyBwcm9wb3NlZCBlZGl0
+cyIpKQplbHNlIHEuYXBwZW5kQ2hpbGQodC5jcmVhdGVUZXh0Tm9kZSgiIitwKyIgcHJvcG9zZWQgIitM
+Lkx4KHAsImVkaXQiKSsiOiIpKQpzPXQuY3JlYXRlRWxlbWVudCgidWwiKQpvPXIuYihkLmFwcGVuZENo
+aWxkKHMpKQpmb3IoZD1iLmxlbmd0aCxzPXUuaSxuPXUuUSxtPW4uQygifigxKSIpLGw9dS5NLG49bi5k
+LGs9MDtrPGIubGVuZ3RoO2IubGVuZ3RoPT09ZHx8KDAsSC5saykoYiksKytrKXtqPWJba10KaT10LmNy
+ZWF0ZUVsZW1lbnQoImxpIikKaD1yLmIoby5hcHBlbmRDaGlsZChpKSkKSi5kUihoKS5pKDAsImVkaXQi
+KQppPXQuY3JlYXRlRWxlbWVudCgiYSIpCmc9cy5iKGguYXBwZW5kQ2hpbGQoaSkpCmcuY2xhc3NMaXN0
+LmFkZCgiZWRpdC1saW5rIikKZj1qLmMKaT1ILmQoZikKZy5zZXRBdHRyaWJ1dGUoImRhdGEtIituZXcg
+Vy5TeShuZXcgVy5pNyhnKSkuTygib2Zmc2V0IiksaSkKZT1qLmEKaT1ILmQoZSkKZy5zZXRBdHRyaWJ1
+dGUoImRhdGEtIituZXcgVy5TeShuZXcgVy5pNyhnKSkuTygibGluZSIpLGkpCmcuYXBwZW5kQ2hpbGQo
+dC5jcmVhdGVUZXh0Tm9kZSgibGluZSAiK0guZChlKSkpCmk9bS5iKG5ldyBMLkVFKGYsZSxhKSkKbC5i
+KG51bGwpClcuSkUoZywiY2xpY2siLGksITEsbikKaC5hcHBlbmRDaGlsZCh0LmNyZWF0ZVRleHROb2Rl
+KCI6ICIrSC5kKGouYikpKX1pZihjKUwuVDEobnVsbCl9LApGcjpmdW5jdGlvbihhLGIsYyl7dmFyIHQs
+cyxyLHE9d2luZG93LmxvY2F0aW9uLHA9UC5oSygocSYmQy5FeCkuZ0RyKHEpK0guZChhKSkKcT11LnoK
+dD1QLkZsKHUuTixxKQppZihiIT1udWxsKXQuWSgwLCJvZmZzZXQiLEguZChiKSkKaWYoYyE9bnVsbCl0
+LlkoMCwibGluZSIsSC5kKGMpKQpwPXAubm0oMCx0LmE9PT0wP251bGw6dCkKcz13aW5kb3cuaGlzdG9y
+eQpyPXAudygwKQpzLnRvU3RyaW5nCnMucHVzaFN0YXRlKG5ldyBQLkJmKFtdLFtdKS5QdihQLkZsKHEs
+cSkpLCIiLHIpfSwKRW46ZnVuY3Rpb24oYSl7dmFyIHQ9Si5iYihkb2N1bWVudC5xdWVyeVNlbGVjdG9y
+KCIucm9vdCIpLnRleHRDb250ZW50LCIvIikKaWYoQy54Qi5uKGEsdCkpcmV0dXJuIEMueEIuRyhhLHQu
+bGVuZ3RoKQplbHNlIHJldHVybiBhfSwKQlg6ZnVuY3Rpb24oYSxiKXt2YXIgdCxzLHI9e30Kci5hPWEK
+YT1MLkVuKGEpCnIuYT1hCiQuRDkoKS50ZXh0Q29udGVudD1hCnQ9ZG9jdW1lbnQKcz11LmgKSC5EaChz
+LHMsIlQiLCJxdWVyeVNlbGVjdG9yQWxsIikKdD1uZXcgVy53eih0LnF1ZXJ5U2VsZWN0b3JBbGwoIi5u
+YXYtcGFuZWwgLm5hdi1saW5rIiksdS5TKQp0LksodCxuZXcgTC5WUyhyKSl9LApCRTpmdW5jdGlvbihh
+LGIsYyl7dmFyIHQ9Ii5yZWdpb25zIixzPWRvY3VtZW50LHI9cy5xdWVyeVNlbGVjdG9yKHQpLHE9cy5x
+dWVyeVNlbGVjdG9yKCIuY29kZSIpCkoudEgocixiLmEsJC5LRygpKQpKLnRIKHEsYi5iLCQuS0coKSkK
+TC5MSChhLGIuZCxjKQpMLnZVKCkKTC55WCgiLmNvZGUiLCEwKQpMLnlYKHQsITApfSwKdFg6ZnVuY3Rp
+b24oYSxiKXt2YXIgdCxzLHIscSxwLG8sbixtLGwsayxqLGk9ZG9jdW1lbnQsaD1pLmNyZWF0ZUVsZW1l
+bnQoInVsIiksZz11LmgsZj1nLmIoYS5hcHBlbmRDaGlsZChoKSkKZm9yKGg9Yi5sZW5ndGgsdD11Lk0s
+cz0wO3M8Yi5sZW5ndGg7Yi5sZW5ndGg9PT1ofHwoMCxILmxrKShiKSwrK3Mpe3I9YltzXQpxPWkuY3Jl
+YXRlRWxlbWVudCgibGkiKQpwPWcuYihmLmFwcGVuZENoaWxkKHEpKQpxPUouUkUocCkKaWYoci5hPT09
+Qy5ZMil7cS5nRChwKS5pKDAsImRpciIpCnE9aS5jcmVhdGVFbGVtZW50KCJzcGFuIikKbz1nLmIocC5h
+cHBlbmRDaGlsZChxKSkKcT1KLlJFKG8pCnEuZ0QobykuaSgwLCJhcnJvdyIpCnEuc2hmKG8sIiYjeDI1
+QkM7IikKcT1pLmNyZWF0ZUVsZW1lbnQoInNwYW4iKQpKLmw1KGcuYihwLmFwcGVuZENoaWxkKHEpKSwi
+JiN4MUY0QzE7IikKcC5hcHBlbmRDaGlsZChpLmNyZWF0ZVRleHROb2RlKHIuYikpCkwudFgocCxyLmMp
+Ckwua3oobyl9ZWxzZXtxLnNoZihwLCImI3gxRjRDNDsiKQpxPWkuY3JlYXRlRWxlbWVudCgiYSIpCm49
+Zy5iKHAuYXBwZW5kQ2hpbGQocSkpCnE9Si5SRShuKQpxLmdEKG4pLmkoMCwibmF2LWxpbmsiKQpuLnNl
+dEF0dHJpYnV0ZSgiZGF0YS0iK25ldyBXLlN5KG5ldyBXLmk3KG4pKS5PKCJuYW1lIiksci5kKQpuLnNl
+dEF0dHJpYnV0ZSgiaHJlZiIsci5lKQpuLmFwcGVuZENoaWxkKGkuY3JlYXRlVGV4dE5vZGUoci5iKSkK
+cT1xLmdWbChuKQptPXEuJHRpCmw9bS5DKCJ+KDEpIikuYihuZXcgTC5URCgpKQp0LmIobnVsbCkKVy5K
+RShxLmEscS5iLGwsITEsbS5kKQprPXIuZgppZih0eXBlb2YgayE9PSJudW1iZXIiKXJldHVybiBrLm9z
+KCkKaWYoaz4wKXtxPWkuY3JlYXRlRWxlbWVudCgic3BhbiIpCmo9Zy5iKHAuYXBwZW5kQ2hpbGQocSkp
+CkouZFIoaikuaSgwLCJlZGl0LWNvdW50IikKcT0iIitrKyIgIgppZihrPT09MSltPSJlZGl0IgplbHNl
+IG09ImVkaXRzIgpqLnNldEF0dHJpYnV0ZSgidGl0bGUiLHErbSkKai5hcHBlbmRDaGlsZChpLmNyZWF0
+ZVRleHROb2RlKEMuam4udyhrKSkpfX19fSwKYzQ6ZnVuY3Rpb24oYSxiKXt2YXIgdD1kb2N1bWVudCxz
+PXQuY3JlYXRlRWxlbWVudCgiYSIpCnUuaS5iKHMpCnMuYXBwZW5kQ2hpbGQodC5jcmVhdGVUZXh0Tm9k
+ZShILmQoYS5jKSsiOiIrSC5kKGEuYikpKQp0PUQubnIoYixhLmEpCnMuc2V0QXR0cmlidXRlKCJocmVm
+IiwkLm5VKCkubzUodCkpCnMuY2xhc3NMaXN0LmFkZCgibmF2LWxpbmsiKQpyZXR1cm4gc30sCkZ6OmZ1
+bmN0aW9uKGEsYil7dmFyIHQscyxyLHEscCxvLG4sbSxsLGssaixpPWEuYgppZihpIT1udWxsKWZvcih0
+PWkubGVuZ3RoLHM9dS5oLHI9dS5zLHE9dS5YLHA9MDtwPGkubGVuZ3RoO2kubGVuZ3RoPT09dHx8KDAs
+SC5saykoaSksKytwKXtvPWlbcF0Kbj1kb2N1bWVudAptPW4uY3JlYXRlRWxlbWVudCgicCIpCmw9cy5i
+KGIuYXBwZW5kQ2hpbGQobSkpCm09bi5jcmVhdGVFbGVtZW50KCJhIikKaz1zLmIobC5hcHBlbmRDaGls
+ZChtKSkKay5hcHBlbmRDaGlsZChuLmNyZWF0ZVRleHROb2RlKG8uYSkpCmsuc2V0QXR0cmlidXRlKCJo
+cmVmIixvLmIpCm49cS5iKEguVk0oWyJwb3N0LWxpbmsiLCJiZWZvcmUtYXBwbHkiXSxyKSkKaj1KLmRS
+KGspCmouVjEoMCkKai5GVigwLG4pfX0sCk5HOmZ1bmN0aW9uKGEsYixjKXt2YXIgdCxzLHIscSxwLG8s
+bixtLGw9YS5hCmlmKGwubGVuZ3RoIT09MCl7dD1kb2N1bWVudApzPXQuY3JlYXRlRWxlbWVudCgicCIp
+CnMudGV4dENvbnRlbnQ9IkVkaXQgcmF0aW9uYWxlIChleHBlcmltZW50YWwpOiIKYi5hcHBlbmRDaGls
+ZChzKQpzPXQuY3JlYXRlRWxlbWVudCgidWwiKQpyPXUuaC5iKGIuYXBwZW5kQ2hpbGQocykpCmZvcihz
+PWwubGVuZ3RoLHE9MDtxPGwubGVuZ3RoO2wubGVuZ3RoPT09c3x8KDAsSC5saykobCksKytxKXtwPWxb
+cV0Kbz10LmNyZWF0ZUVsZW1lbnQoImxpIikKbj1yLmFwcGVuZENoaWxkKG8pCm4uYXBwZW5kQ2hpbGQo
+dC5jcmVhdGVUZXh0Tm9kZShwLmEpKQptPXAuYgppZihtIT1udWxsKXtuLmFwcGVuZENoaWxkKHQuY3Jl
+YXRlVGV4dE5vZGUoIiAoIikpCm4uYXBwZW5kQ2hpbGQoTC5jNChtLGMpKQpuLmFwcGVuZENoaWxkKHQu
+Y3JlYXRlVGV4dE5vZGUoIikiKSl9fX19LApDQzpmdW5jdGlvbihhLGIsYTApe3ZhciB0LHMscixxLHAs
+byxuLG0sbCxrLGosaSxoLGcsZixlLGQsYwpmb3IodD1hLmYscz10Lmxlbmd0aCxyPXUucyxxPXUuWCxw
+PTA7cDx0Lmxlbmd0aDt0Lmxlbmd0aD09PXN8fCgwLEgubGspKHQpLCsrcCl7bz10W3BdCm49ZG9jdW1l
+bnQKbT1uLmNyZWF0ZUVsZW1lbnQoInAiKQpsPXEuYihILlZNKFsidHJhY2UiXSxyKSkKaz1KLmRSKG0p
+CmsuVjEoMCkKay5GVigwLGwpCmo9Yi5hcHBlbmRDaGlsZChtKQptPW4uY3JlYXRlRWxlbWVudCgic3Bh
+biIpCmw9cS5iKEguVk0oWyJ0eXBlLWRlc2NyaXB0aW9uIl0scikpCms9Si5kUihtKQprLlYxKDApCmsu
+RlYoMCxsKQptLmFwcGVuZENoaWxkKG4uY3JlYXRlVGV4dE5vZGUoby5hKSkKai5hcHBlbmRDaGlsZCht
+KQpqLmFwcGVuZENoaWxkKG4uY3JlYXRlVGV4dE5vZGUoIjoiKSkKbT1uLmNyZWF0ZUVsZW1lbnQoInVs
+IikKbD1xLmIoSC5WTShbInRyYWNlIl0scikpCms9Si5kUihtKQprLlYxKDApCmsuRlYoMCxsKQppPWou
+YXBwZW5kQ2hpbGQobSkKZm9yKG09by5iLGw9bS5sZW5ndGgsaD0wO2g8bS5sZW5ndGg7bS5sZW5ndGg9
+PT1sfHwoMCxILmxrKShtKSwrK2gpe2c9bVtoXQpmPW4uY3JlYXRlRWxlbWVudCgibGkiKQpKLmw1KGYs
+IiYjeDI3NEY7ICIpCmU9aS5hcHBlbmRDaGlsZChmKQpmPW4uY3JlYXRlRWxlbWVudCgic3BhbiIpCmQ9
+cS5iKEguVk0oWyJmdW5jdGlvbiJdLHIpKQprPUouZFIoZikKay5WMSgwKQprLkZWKDAsZCkKZD1nLmIK
+aWYoZD09bnVsbClkPSJ1bmtub3duIgpmLmFwcGVuZENoaWxkKG4uY3JlYXRlVGV4dE5vZGUoZCkpCmUu
+YXBwZW5kQ2hpbGQoZikKYz1nLmMKaWYoYyE9bnVsbCl7ZS5hcHBlbmRDaGlsZChuLmNyZWF0ZVRleHRO
+b2RlKCIgKCIpKQplLmFwcGVuZENoaWxkKEwuYzQoYyxhMCkpCmUuYXBwZW5kQ2hpbGQobi5jcmVhdGVU
+ZXh0Tm9kZSgiKSIpKX1lLmFwcGVuZENoaWxkKG4uY3JlYXRlVGV4dE5vZGUoIjogIikpCmUuYXBwZW5k
+Q2hpbGQobi5jcmVhdGVUZXh0Tm9kZShnLmEpKX19fSwKZTpmdW5jdGlvbiBlKCl7fSwKVlc6ZnVuY3Rp
+b24gVlcoYSxiLGMpe3RoaXMuYT1hCnRoaXMuYj1iCnRoaXMuYz1jfSwKb1o6ZnVuY3Rpb24gb1ooKXt9
+LApqcjpmdW5jdGlvbiBqcigpe30sCnFsOmZ1bmN0aW9uIHFsKCl7fSwKTDpmdW5jdGlvbiBMKCl7fSwK
+V3g6ZnVuY3Rpb24gV3goYSxiKXt0aGlzLmE9YQp0aGlzLmI9Yn0sCkFPOmZ1bmN0aW9uIEFPKGEpe3Ro
+aXMuYT1hfSwKZE46ZnVuY3Rpb24gZE4oYSl7dGhpcy5hPWF9LApIbzpmdW5jdGlvbiBIbyhhKXt0aGlz
+LmE9YX0sCnh6OmZ1bmN0aW9uIHh6KGEsYil7dGhpcy5hPWEKdGhpcy5iPWJ9LApJQzpmdW5jdGlvbiBJ
+Qygpe30sCkwxOmZ1bmN0aW9uIEwxKCl7fSwKblQ6ZnVuY3Rpb24gblQoYSxiLGMpe3RoaXMuYT1hCnRo
+aXMuYj1iCnRoaXMuYz1jfSwKQlo6ZnVuY3Rpb24gQlooYSl7dGhpcy5hPWF9LApHSDpmdW5jdGlvbiBH
+SCgpe30sCkRUOmZ1bmN0aW9uIERUKCl7fSwKZUg6ZnVuY3Rpb24gZUgoYSl7dGhpcy5hPWF9LAp6RDpm
+dW5jdGlvbiB6RChhLGIsYyxkLGUpe3ZhciBfPXRoaXMKXy5hPWEKXy5iPWIKXy5jPWMKXy5kPWQKXy5l
+PWV9LApPRTpmdW5jdGlvbiBPRShhKXt0aGlzLmE9YX0sClRXOmZ1bmN0aW9uIFRXKCl7fSwKeHI6ZnVu
+Y3Rpb24geHIoYSl7dGhpcy5hPWF9LApFRTpmdW5jdGlvbiBFRShhLGIsYyl7dGhpcy5hPWEKdGhpcy5i
+PWIKdGhpcy5jPWN9LApRTDpmdW5jdGlvbiBRTChhLGIpe3RoaXMuYT1hCnRoaXMuYj1ifSwKVlM6ZnVu
+Y3Rpb24gVlMoYSl7dGhpcy5hPWF9LApURDpmdW5jdGlvbiBURCgpe30sClhBOmZ1bmN0aW9uIFhBKCl7
+fSwKbUs6ZnVuY3Rpb24oYSl7dmFyIHQscyxyLHEscCxvLG49SC5WTShbXSx1LmZoKQpmb3IodD1KLklU
+KHUuUi5iKGEpKTt0LkYoKTspe3M9dC5nbCgpCnI9Si5VNihzKQpxPUwucDIoSC55KHIucShzLCJ0eXBl
+IikpKQpwPUgueShyLnEocywibmFtZSIpKQpvPXIucShzLCJzdWJ0cmVlIikKbz1vPT1udWxsP251bGw6
+TC5tSyhvKQpDLk5tLmkobixuZXcgTC5aWihxLHAsbyxILnkoci5xKHMsInBhdGgiKSksSC55KHIucShz
+LCJocmVmIikpLEguU2Moci5xKHMsImVkaXRDb3VudCIpKSkpfXJldHVybiBufSwKcDI6ZnVuY3Rpb24o
+YSl7c3dpdGNoKGEpe2Nhc2UiZGlyZWN0b3J5IjpyZXR1cm4gQy5ZMgpjYXNlImZpbGUiOnJldHVybiBD
+LnJmCmRlZmF1bHQ6dGhyb3cgSC5iKFAuUFYoIlVucmVjb2duaXplZCBuYXZpZ2F0aW9uIHRyZWUgbm9k
+ZSB0eXBlOiAiK0guZChhKSkpfX0sClpaOmZ1bmN0aW9uIFpaKGEsYixjLGQsZSxmKXt2YXIgXz10aGlz
+Cl8uYT1hCl8uYj1iCl8uYz1jCl8uZD1kCl8uZT1lCl8uZj1mfSwKeTg6ZnVuY3Rpb24geTgoYSl7dGhp
+cy5iPWF9LApJVjpmdW5jdGlvbiBJVihhLGIsYyxkKXt2YXIgXz10aGlzCl8uZD1hCl8uZT1iCl8uZj1j
+Cl8ucj1kfX0sTT17CllGOmZ1bmN0aW9uKGEsYil7dmFyIHQscyxyLHEscCxvLG4KZm9yKHQ9Yi5sZW5n
+dGgscz0xO3M8dDsrK3Mpe2lmKGJbc109PW51bGx8fGJbcy0xXSE9bnVsbCljb250aW51ZQpmb3IoO3Q+
+PTE7dD1yKXtyPXQtMQppZihiW3JdIT1udWxsKWJyZWFrfXE9bmV3IFAuUm4oIiIpCnA9YSsiKCIKcS5h
+PXAKbz1ILnFDKGIsMCx0LEgudDYoYikuZCkKbj1vLiR0aQpuPXArbmV3IEguQTgobyxuLkMoInFVKGFM
+LkUpIikuYihuZXcgTS5ObygpKSxuLkMoIkE4PGFMLkUscVU+IikpLkgoMCwiLCAiKQpxLmE9bgpxLmE9
+bisoIik6IHBhcnQgIisocy0xKSsiIHdhcyBudWxsLCBidXQgcGFydCAiK3MrIiB3YXMgbm90LiIpCnRo
+cm93IEguYihQLnhZKHEudygwKSkpfX0sCmxJOmZ1bmN0aW9uIGxJKGEpe3RoaXMuYT1hfSwKTWk6ZnVu
+Y3Rpb24gTWkoKXt9LApxNzpmdW5jdGlvbiBxNygpe30sCk5vOmZ1bmN0aW9uIE5vKCl7fX0sWD17CkNM
+OmZ1bmN0aW9uKGEsYil7dmFyIHQscyxyLHEscCxvPWIueFooYSkKYi5oSyhhKQppZihvIT1udWxsKWE9
+Si5LVihhLG8ubGVuZ3RoKQp0PXUucwpzPUguVk0oW10sdCkKcj1ILlZNKFtdLHQpCnQ9YS5sZW5ndGgK
+aWYodCE9PTAmJmIucjQoQy54Qi5XKGEsMCkpKXtpZigwPj10KXJldHVybiBILk9IKGEsMCkKQy5ObS5p
+KHIsYVswXSkKcT0xfWVsc2V7Qy5ObS5pKHIsIiIpCnE9MH1mb3IocD1xO3A8dDsrK3ApaWYoYi5yNChD
+LnhCLlcoYSxwKSkpe0MuTm0uaShzLEMueEIuTmooYSxxLHApKQpDLk5tLmkocixhW3BdKQpxPXArMX1p
+ZihxPHQpe0MuTm0uaShzLEMueEIuRyhhLHEpKQpDLk5tLmkociwiIil9cmV0dXJuIG5ldyBYLldEKGIs
+byxzLHIpfSwKV0Q6ZnVuY3Rpb24gV0QoYSxiLGMsZCl7dmFyIF89dGhpcwpfLmE9YQpfLmI9YgpfLmQ9
+YwpfLmU9ZH0sCnFSOmZ1bmN0aW9uIHFSKGEpe3RoaXMuYT1hfSwKSlQ6ZnVuY3Rpb24oYSl7cmV0dXJu
+IG5ldyBYLmR2KGEpfSwKZHY6ZnVuY3Rpb24gZHYoYSl7dGhpcy5hPWF9fSxPPXsKUmg6ZnVuY3Rpb24o
+KXt2YXIgdCxzLHIscSxwLG8sbixtLGwsayxqLGk9bnVsbAppZihQLnVvKCkuZ0ZpKCkhPT0iZmlsZSIp
+cmV0dXJuICQuRWIoKQp0PVAudW8oKQppZighQy54Qi5UYyh0LmdJaSh0KSwiLyIpKXJldHVybiAkLkVi
+KCkKcz1QLlBpKGksMCwwKQpyPVAuelIoaSwwLDApCnE9UC5PZShpLDAsMCwhMSkKcD1QLmxlKGksMCww
+LGkpCm89UC50RyhpLDAsMCkKbj1QLndCKGkscykKbT1zPT09ImZpbGUiCmlmKHE9PW51bGwpdD1yLmxl
+bmd0aCE9PTB8fG4hPW51bGx8fG0KZWxzZSB0PSExCmlmKHQpcT0iIgp0PXE9PW51bGwKbD0hdAprPVAu
+a2EoImEvYiIsMCwzLGkscyxsKQpqPXMubGVuZ3RoPT09MAppZihqJiZ0JiYhQy54Qi5uKGssIi8iKSlr
+PVAud0Yoaywhanx8bCkKZWxzZSBrPVAueGUoaykKaWYobmV3IFAuRG4ocyxyLHQmJkMueEIubihrLCIv
+LyIpPyIiOnEsbixrLHAsbykudDQoKT09PSJhXFxiIilyZXR1cm4gJC5LaygpCnJldHVybiAkLmJEKCl9
+LAp6TDpmdW5jdGlvbiB6TCgpe319LEU9e09GOmZ1bmN0aW9uIE9GKGEsYixjKXt0aGlzLmQ9YQp0aGlz
+LmU9Ygp0aGlzLmY9Y319LEY9e3J1OmZ1bmN0aW9uIHJ1KGEsYixjLGQpe3ZhciBfPXRoaXMKXy5kPWEK
+Xy5lPWIKXy5mPWMKXy5yPWR9fSxEPXsKUlg6ZnVuY3Rpb24oKXt2YXIgdCxzLHI9UC51bygpCmlmKEou
+Uk0ociwkLkk2KSlyZXR1cm4gJC5GZgokLkk2PXIKaWYoJC5IaygpPT0kLkViKCkpcmV0dXJuICQuRmY9
+ci5aSSgiLiIpLncoMCkKZWxzZXt0PXIudDQoKQpzPXQubGVuZ3RoLTEKcmV0dXJuICQuRmY9cz09PTA/
+dDpDLnhCLk5qKHQsMCxzKX19LApucjpmdW5jdGlvbihhLGIpe3ZhciB0PW51bGwKcmV0dXJuICQublUo
+KS5xNygwLGEsYix0LHQsdCx0LHQsdCl9fQp2YXIgdz1bQyxILEosUCxXLFUsQixULEwsTSxYLE8sRSxG
+LERdCmh1bmtIZWxwZXJzLnNldEZ1bmN0aW9uTmFtZXNJZk5lY2Vzc2FyeSh3KQp2YXIgJD17fQpILmVv
+LnByb3RvdHlwZT17fQpKLnZCLnByb3RvdHlwZT17CkROOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9PT1i
+fSwKZ2lPOmZ1bmN0aW9uKGEpe3JldHVybiBILmVRKGEpfSwKdzpmdW5jdGlvbihhKXtyZXR1cm4iSW5z
+dGFuY2Ugb2YgJyIrSC5kKEguTShhKSkrIicifSwKZTc6ZnVuY3Rpb24oYSxiKXt1Lm8uYihiKQp0aHJv
+dyBILmIoUC5scihhLGIuZ1dhKCksYi5nbmQoKSxiLmdWbSgpKSl9fQpKLnlFLnByb3RvdHlwZT17Cnc6
+ZnVuY3Rpb24oYSl7cmV0dXJuIFN0cmluZyhhKX0sCmdpTzpmdW5jdGlvbihhKXtyZXR1cm4gYT81MTkw
+MTg6MjE4MTU5fSwKJGlhMjoxfQpKLllFLnByb3RvdHlwZT17CkROOmZ1bmN0aW9uKGEsYil7cmV0dXJu
+IG51bGw9PWJ9LAp3OmZ1bmN0aW9uKGEpe3JldHVybiJudWxsIn0sCmdpTzpmdW5jdGlvbihhKXtyZXR1
+cm4gMH0sCmU3OmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuU2ooYSx1Lm8uYihiKSl9LAokaWM4OjF9
+CkouTUYucHJvdG90eXBlPXsKZ2lPOmZ1bmN0aW9uKGEpe3JldHVybiAwfSwKdzpmdW5jdGlvbihhKXty
+ZXR1cm4gU3RyaW5nKGEpfSwKJGl2bToxfQpKLmlDLnByb3RvdHlwZT17fQpKLmtkLnByb3RvdHlwZT17
+fQpKLmM1LnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7dmFyIHQ9YVskLncoKV0KaWYodD09bnVsbCly
+ZXR1cm4gdGhpcy50KGEpCnJldHVybiJKYXZhU2NyaXB0IGZ1bmN0aW9uIGZvciAiK0guZChKLmoodCkp
+fSwKJFM6ZnVuY3Rpb24oKXtyZXR1cm57ZnVuYzoxLG9wdDpbLCwsLCwsLCwsLCwsLCwsLF19fSwKJGlF
+SDoxfQpKLmpkLnByb3RvdHlwZT17Cmk6ZnVuY3Rpb24oYSxiKXtILnQ2KGEpLmQuYihiKQppZighIWEu
+Zml4ZWQkbGVuZ3RoKUgudmgoUC5MNCgiYWRkIikpCmEucHVzaChiKX0sClc0OmZ1bmN0aW9uKGEsYil7
+dmFyIHQKaWYoISFhLmZpeGVkJGxlbmd0aClILnZoKFAuTDQoInJlbW92ZUF0IikpCnQ9YS5sZW5ndGgK
+aWYoYj49dCl0aHJvdyBILmIoUC54KGIsbnVsbCkpCnJldHVybiBhLnNwbGljZShiLDEpWzBdfSwKVUc6
+ZnVuY3Rpb24oYSxiLGMpe3ZhciB0LHMscgpILnQ2KGEpLkMoImNYPDE+IikuYihjKQppZighIWEuZml4
+ZWQkbGVuZ3RoKUgudmgoUC5MNCgiaW5zZXJ0QWxsIikpCnQ9YS5sZW5ndGgKUC53QShiLDAsdCwiaW5k
+ZXgiKQpzPWMubGVuZ3RoCnRoaXMuc0EoYSx0K3MpCnI9YitzCnRoaXMuWVcoYSxyLGEubGVuZ3RoLGEs
+YikKdGhpcy52ZyhhLGIscixjKX0sCm12OmZ1bmN0aW9uKGEpe2lmKCEhYS5maXhlZCRsZW5ndGgpSC52
+aChQLkw0KCJyZW1vdmVMYXN0IikpCmlmKGEubGVuZ3RoPT09MCl0aHJvdyBILmIoSC5IWShhLC0xKSkK
+cmV0dXJuIGEucG9wKCl9LApGVjpmdW5jdGlvbihhLGIpe3ZhciB0CkgudDYoYSkuQygiY1g8MT4iKS5i
+KGIpCmlmKCEhYS5maXhlZCRsZW5ndGgpSC52aChQLkw0KCJhZGRBbGwiKSkKZm9yKHQ9Si5JVChiKTt0
+LkYoKTspYS5wdXNoKHQuZ2woKSl9LApLOmZ1bmN0aW9uKGEsYil7dmFyIHQscwpILnQ2KGEpLkMoIn4o
+MSkiKS5iKGIpCnQ9YS5sZW5ndGgKZm9yKHM9MDtzPHQ7KytzKXtiLiQxKGFbc10pCmlmKGEubGVuZ3Ro
+IT09dCl0aHJvdyBILmIoUC5hNChhKSl9fSwKRTI6ZnVuY3Rpb24oYSxiLGMpe3ZhciB0PUgudDYoYSkK
+cmV0dXJuIG5ldyBILkE4KGEsdC5LcShjKS5DKCIxKDIpIikuYihiKSx0LkMoIkA8MT4iKS5LcShjKS5D
+KCJBODwxLDI+IikpfSwKSDpmdW5jdGlvbihhLGIpe3ZhciB0LHM9bmV3IEFycmF5KGEubGVuZ3RoKQpz
+LmZpeGVkJGxlbmd0aD1BcnJheQpmb3IodD0wO3Q8YS5sZW5ndGg7Kyt0KXRoaXMuWShzLHQsSC5kKGFb
+dF0pKQpyZXR1cm4gcy5qb2luKGIpfSwKTjA6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIHQscyxyCmQuYihi
+KQpILnQ2KGEpLktxKGQpLkMoIjEoMSwyKSIpLmIoYykKdD1hLmxlbmd0aApmb3Iocz1iLHI9MDtyPHQ7
+KytyKXtzPWMuJDIocyxhW3JdKQppZihhLmxlbmd0aCE9PXQpdGhyb3cgSC5iKFAuYTQoYSkpfXJldHVy
+biBzfSwKRTpmdW5jdGlvbihhLGIpe2lmKGI8MHx8Yj49YS5sZW5ndGgpcmV0dXJuIEguT0goYSxiKQpy
+ZXR1cm4gYVtiXX0sCkQ2OmZ1bmN0aW9uKGEsYixjKXtpZihiPDB8fGI+YS5sZW5ndGgpdGhyb3cgSC5i
+KFAuVEUoYiwwLGEubGVuZ3RoLCJzdGFydCIsbnVsbCkpCmlmKGM8Ynx8Yz5hLmxlbmd0aCl0aHJvdyBI
+LmIoUC5URShjLGIsYS5sZW5ndGgsImVuZCIsbnVsbCkpCmlmKGI9PT1jKXJldHVybiBILlZNKFtdLEgu
+dDYoYSkpCnJldHVybiBILlZNKGEuc2xpY2UoYixjKSxILnQ2KGEpKX0sCmdyWjpmdW5jdGlvbihhKXt2
+YXIgdD1hLmxlbmd0aAppZih0PjApcmV0dXJuIGFbdC0xXQp0aHJvdyBILmIoSC5XcCgpKX0sCllXOmZ1
+bmN0aW9uKGEsYixjLGQsZSl7dmFyIHQscyxyPUgudDYoYSkKci5DKCJjWDwxPiIpLmIoZCkKaWYoISFh
+LmltbXV0YWJsZSRsaXN0KUgudmgoUC5MNCgic2V0UmFuZ2UiKSkKUC5qQihiLGMsYS5sZW5ndGgpCnQ9
+Yy1iCmlmKHQ9PT0wKXJldHVybgpQLmsxKGUsInNraXBDb3VudCIpCnIuQygiek08MT4iKS5iKGQpCnI9
+Si5VNihkKQppZihlK3Q+ci5nQShkKSl0aHJvdyBILmIoSC5hcigpKQppZihlPGIpZm9yKHM9dC0xO3M+
+PTA7LS1zKWFbYitzXT1yLnEoZCxlK3MpCmVsc2UgZm9yKHM9MDtzPHQ7KytzKWFbYitzXT1yLnEoZCxl
+K3MpfSwKdmc6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIHRoaXMuWVcoYSxiLGMsZCwwKX0sClZyOmZ1
+bmN0aW9uKGEsYil7dmFyIHQscwpILnQ2KGEpLkMoImEyKDEpIikuYihiKQp0PWEubGVuZ3RoCmZvcihz
+PTA7czx0Oysrcyl7aWYoSC5vVChiLiQxKGFbc10pKSlyZXR1cm4hMAppZihhLmxlbmd0aCE9PXQpdGhy
+b3cgSC5iKFAuYTQoYSkpfXJldHVybiExfSwKdGc6ZnVuY3Rpb24oYSxiKXt2YXIgdApmb3IodD0wO3Q8
+YS5sZW5ndGg7Kyt0KWlmKEouUk0oYVt0XSxiKSlyZXR1cm4hMApyZXR1cm4hMX0sCnc6ZnVuY3Rpb24o
+YSl7cmV0dXJuIFAuV0UoYSwiWyIsIl0iKX0sCmdrejpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IEoubTEo
+YSxhLmxlbmd0aCxILnQ2KGEpLkMoIm0xPDE+IikpfSwKZ2lPOmZ1bmN0aW9uKGEpe3JldHVybiBILmVR
+KGEpfSwKZ0E6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVuZ3RofSwKc0E6ZnVuY3Rpb24oYSxiKXtpZigh
+IWEuZml4ZWQkbGVuZ3RoKUgudmgoUC5MNCgic2V0IGxlbmd0aCIpKQppZihiPDApdGhyb3cgSC5iKFAu
+VEUoYiwwLG51bGwsIm5ld0xlbmd0aCIsbnVsbCkpCmEubGVuZ3RoPWJ9LApxOmZ1bmN0aW9uKGEsYil7
+SC5TYyhiKQppZihiPj1hLmxlbmd0aHx8YjwwKXRocm93IEguYihILkhZKGEsYikpCnJldHVybiBhW2Jd
+fSwKWTpmdW5jdGlvbihhLGIsYyl7SC50NihhKS5kLmIoYykKaWYoISFhLmltbXV0YWJsZSRsaXN0KUgu
+dmgoUC5MNCgiaW5kZXhlZCBzZXQiKSkKaWYoYj49YS5sZW5ndGh8fGI8MCl0aHJvdyBILmIoSC5IWShh
+LGIpKQphW2JdPWN9LAokaWNYOjEsCiRpek06MX0KSi5Qby5wcm90b3R5cGU9e30KSi5tMS5wcm90b3R5
+cGU9ewpnbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmR9LApGOmZ1bmN0aW9uKCl7dmFyIHQscz10aGlz
+LHI9cy5hLHE9ci5sZW5ndGgKaWYocy5iIT09cSl0aHJvdyBILmIoSC5sayhyKSkKdD1zLmMKaWYodD49
+cSl7cy5zTShudWxsKQpyZXR1cm4hMX1zLnNNKHJbdF0pOysrcy5jCnJldHVybiEwfSwKc006ZnVuY3Rp
+b24oYSl7dGhpcy5kPXRoaXMuJHRpLmQuYihhKX0sCiRpQW46MX0KSi5xSS5wcm90b3R5cGU9ewp5dTpm
+dW5jdGlvbihhKXt2YXIgdAppZihhPj0tMjE0NzQ4MzY0OCYmYTw9MjE0NzQ4MzY0NylyZXR1cm4gYXww
+CmlmKGlzRmluaXRlKGEpKXt0PWE8MD9NYXRoLmNlaWwoYSk6TWF0aC5mbG9vcihhKQpyZXR1cm4gdCsw
+fXRocm93IEguYihQLkw0KCIiK2ErIi50b0ludCgpIikpfSwKelE6ZnVuY3Rpb24oYSl7aWYoYT4wKXtp
+ZihhIT09MS8wKXJldHVybiBNYXRoLnJvdW5kKGEpfWVsc2UgaWYoYT4tMS8wKXJldHVybiAwLU1hdGgu
+cm91bmQoMC1hKQp0aHJvdyBILmIoUC5MNCgiIithKyIucm91bmQoKSIpKX0sCldaOmZ1bmN0aW9uKGEs
+Yil7dmFyIHQscyxyLHEKaWYoYjwyfHxiPjM2KXRocm93IEguYihQLlRFKGIsMiwzNiwicmFkaXgiLG51
+bGwpKQp0PWEudG9TdHJpbmcoYikKaWYoQy54Qi5tKHQsdC5sZW5ndGgtMSkhPT00MSlyZXR1cm4gdApz
+PS9eKFtcZGEtel0rKSg/OlwuKFtcZGEtel0rKSk/XChlXCsoXGQrKVwpJC8uZXhlYyh0KQppZihzPT1u
+dWxsKUgudmgoUC5MNCgiVW5leHBlY3RlZCB0b1N0cmluZyByZXN1bHQ6ICIrdCkpCnI9cy5sZW5ndGgK
+aWYoMT49cilyZXR1cm4gSC5PSChzLDEpCnQ9c1sxXQppZigzPj1yKXJldHVybiBILk9IKHMsMykKcT0r
+c1szXQpyPXNbMl0KaWYociE9bnVsbCl7dCs9cgpxLT1yLmxlbmd0aH1yZXR1cm4gdCtDLnhCLkl4KCIw
+IixxKX0sCnc6ZnVuY3Rpb24oYSl7aWYoYT09PTAmJjEvYTwwKXJldHVybiItMC4wIgplbHNlIHJldHVy
+biIiK2F9LApnaU86ZnVuY3Rpb24oYSl7dmFyIHQscyxyLHEscD1hfDAKaWYoYT09PXApcmV0dXJuIDUz
+Njg3MDkxMSZwCnQ9TWF0aC5hYnMoYSkKcz1NYXRoLmxvZyh0KS8wLjY5MzE0NzE4MDU1OTk0NTN8MApy
+PU1hdGgucG93KDIscykKcT10PDE/dC9yOnIvdApyZXR1cm4gNTM2ODcwOTExJigocSo5MDA3MTk5MjU0
+NzQwOTkyfDApKyhxKjM1NDIyNDMxODExNzY1MjF8MCkpKjU5OTE5NytzKjEyNTl9LAp6WTpmdW5jdGlv
+bihhLGIpe3ZhciB0PWElYgppZih0PT09MClyZXR1cm4gMAppZih0PjApcmV0dXJuIHQKaWYoYjwwKXJl
+dHVybiB0LWIKZWxzZSByZXR1cm4gdCtifSwKd0c6ZnVuY3Rpb24oYSxiKXt2YXIgdAppZihhPjApdD10
+aGlzLnAzKGEsYikKZWxzZXt0PWI+MzE/MzE6Ygp0PWE+PnQ+Pj4wfXJldHVybiB0fSwKYmY6ZnVuY3Rp
+b24oYSxiKXtpZihiPDApdGhyb3cgSC5iKEgudEwoYikpCnJldHVybiB0aGlzLnAzKGEsYil9LApwMzpm
+dW5jdGlvbihhLGIpe3JldHVybiBiPjMxPzA6YT4+PmJ9LAokaUNQOjEsCiRpRks6MX0KSi51ci5wcm90
+b3R5cGU9eyRpS046MX0KSi5WQS5wcm90b3R5cGU9e30KSi5Eci5wcm90b3R5cGU9ewptOmZ1bmN0aW9u
+KGEsYil7aWYoYjwwKXRocm93IEguYihILkhZKGEsYikpCmlmKGI+PWEubGVuZ3RoKUgudmgoSC5IWShh
+LGIpKQpyZXR1cm4gYS5jaGFyQ29kZUF0KGIpfSwKVzpmdW5jdGlvbihhLGIpe2lmKGI+PWEubGVuZ3Ro
+KXRocm93IEguYihILkhZKGEsYikpCnJldHVybiBhLmNoYXJDb2RlQXQoYil9LApkZDpmdW5jdGlvbihh
+LGIpe3JldHVybiBuZXcgSC51bihiLGEsMCl9LApoOmZ1bmN0aW9uKGEsYil7aWYodHlwZW9mIGIhPSJz
+dHJpbmciKXRocm93IEguYihQLkwzKGIsbnVsbCxudWxsKSkKcmV0dXJuIGErYn0sClRjOmZ1bmN0aW9u
+KGEsYil7dmFyIHQ9Yi5sZW5ndGgscz1hLmxlbmd0aAppZih0PnMpcmV0dXJuITEKcmV0dXJuIGI9PT10
+aGlzLkcoYSxzLXQpfSwKaTc6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIHQscwpjPVAuakIoYixjLGEubGVu
+Z3RoKQp0PWEuc3Vic3RyaW5nKDAsYikKcz1hLnN1YnN0cmluZyhjKQpyZXR1cm4gdCtkK3N9LApRaTpm
+dW5jdGlvbihhLGIsYyl7dmFyIHQKaWYoIUgub2soYykpSC52aChILnRMKGMpKQppZih0eXBlb2YgYyE9
+PSJudW1iZXIiKXJldHVybiBjLkooKQppZihjPDB8fGM+YS5sZW5ndGgpdGhyb3cgSC5iKFAuVEUoYyww
+LGEubGVuZ3RoLG51bGwsbnVsbCkpCnQ9YytiLmxlbmd0aAppZih0PmEubGVuZ3RoKXJldHVybiExCnJl
+dHVybiBiPT09YS5zdWJzdHJpbmcoYyx0KX0sCm46ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5RaShh
+LGIsMCl9LApOajpmdW5jdGlvbihhLGIsYyl7aWYoIUgub2soYikpSC52aChILnRMKGIpKQppZihjPT1u
+dWxsKWM9YS5sZW5ndGgKaWYodHlwZW9mIGIhPT0ibnVtYmVyIilyZXR1cm4gYi5KKCkKaWYoYjwwKXRo
+cm93IEguYihQLngoYixudWxsKSkKaWYoYj5jKXRocm93IEguYihQLngoYixudWxsKSkKaWYoYz5hLmxl
+bmd0aCl0aHJvdyBILmIoUC54KGMsbnVsbCkpCnJldHVybiBhLnN1YnN0cmluZyhiLGMpfSwKRzpmdW5j
+dGlvbihhLGIpe3JldHVybiB0aGlzLk5qKGEsYixudWxsKX0sCmhjOmZ1bmN0aW9uKGEpe3JldHVybiBh
+LnRvTG93ZXJDYXNlKCl9LApiUzpmdW5jdGlvbihhKXt2YXIgdCxzLHIscT1hLnRyaW0oKSxwPXEubGVu
+Z3RoCmlmKHA9PT0wKXJldHVybiBxCmlmKHRoaXMuVyhxLDApPT09MTMzKXt0PUoubW0ocSwxKQppZih0
+PT09cClyZXR1cm4iIn1lbHNlIHQ9MApzPXAtMQpyPXRoaXMubShxLHMpPT09MTMzP0ouYzEocSxzKTpw
+CmlmKHQ9PT0wJiZyPT09cClyZXR1cm4gcQpyZXR1cm4gcS5zdWJzdHJpbmcodCxyKX0sCkl4OmZ1bmN0
+aW9uKGEsYil7dmFyIHQscwppZigwPj1iKXJldHVybiIiCmlmKGI9PT0xfHxhLmxlbmd0aD09PTApcmV0
+dXJuIGEKaWYoYiE9PWI+Pj4wKXRocm93IEguYihDLkVxKQpmb3IodD1hLHM9IiI7ITA7KXtpZigoYiYx
+KT09PTEpcz10K3MKYj1iPj4+MQppZihiPT09MClicmVhawp0Kz10fXJldHVybiBzfSwKWFU6ZnVuY3Rp
+b24oYSxiLGMpe3ZhciB0CmlmKGM8MHx8Yz5hLmxlbmd0aCl0aHJvdyBILmIoUC5URShjLDAsYS5sZW5n
+dGgsbnVsbCxudWxsKSkKdD1hLmluZGV4T2YoYixjKQpyZXR1cm4gdH0sCk9ZOmZ1bmN0aW9uKGEsYil7
+cmV0dXJuIHRoaXMuWFUoYSxiLDApfSwKUGs6ZnVuY3Rpb24oYSxiLGMpe3ZhciB0LHMKaWYoYz09bnVs
+bCljPWEubGVuZ3RoCmVsc2UgaWYoYzwwfHxjPmEubGVuZ3RoKXRocm93IEguYihQLlRFKGMsMCxhLmxl
+bmd0aCxudWxsLG51bGwpKQp0PWIubGVuZ3RoCnM9YS5sZW5ndGgKaWYoYyt0PnMpYz1zLXQKcmV0dXJu
+IGEubGFzdEluZGV4T2YoYixjKX0sCmNuOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuUGsoYSxiLG51
+bGwpfSwKSXM6ZnVuY3Rpb24oYSxiLGMpe3ZhciB0PWEubGVuZ3RoCmlmKGM+dCl0aHJvdyBILmIoUC5U
+RShjLDAsdCxudWxsLG51bGwpKQpyZXR1cm4gSC5tMihhLGIsYyl9LAp0ZzpmdW5jdGlvbihhLGIpe3Jl
+dHVybiB0aGlzLklzKGEsYiwwKX0sCnc6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LApnaU86ZnVuY3Rpb24o
+YSl7dmFyIHQscyxyCmZvcih0PWEubGVuZ3RoLHM9MCxyPTA7cjx0Oysrcil7cz01MzY4NzA5MTEmcyth
+LmNoYXJDb2RlQXQocikKcz01MzY4NzA5MTEmcysoKDUyNDI4NyZzKTw8MTApCnNePXM+PjZ9cz01MzY4
+NzA5MTEmcysoKDY3MTA4ODYzJnMpPDwzKQpzXj1zPj4xMQpyZXR1cm4gNTM2ODcwOTExJnMrKCgxNjM4
+MyZzKTw8MTUpfSwKZ0E6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVuZ3RofSwKcTpmdW5jdGlvbihhLGIp
+e0guU2MoYikKaWYoYj49YS5sZW5ndGh8fCExKXRocm93IEguYihILkhZKGEsYikpCnJldHVybiBhW2Jd
+fSwKJGl2WDoxLAokaXFVOjF9CkgucWoucHJvdG90eXBlPXsKZ0E6ZnVuY3Rpb24oYSl7cmV0dXJuIHRo
+aXMuYS5sZW5ndGh9LApxOmZ1bmN0aW9uKGEsYil7cmV0dXJuIEMueEIubSh0aGlzLmEsSC5TYyhiKSl9
+fQpILmJRLnByb3RvdHlwZT17fQpILmFMLnByb3RvdHlwZT17CmdrejpmdW5jdGlvbihhKXt2YXIgdD10
+aGlzCnJldHVybiBuZXcgSC5hNyh0LHQuZ0EodCksSC5MaCh0KS5DKCJhNzxhTC5FPiIpKX0sCkg6ZnVu
+Y3Rpb24oYSxiKXt2YXIgdCxzLHIscT10aGlzLHA9cS5nQShxKQppZihiLmxlbmd0aCE9PTApe2lmKHA9
+PT0wKXJldHVybiIiCnQ9SC5kKHEuRSgwLDApKQppZihwIT09cS5nQShxKSl0aHJvdyBILmIoUC5hNChx
+KSkKZm9yKHM9dCxyPTE7cjxwOysrcil7cz1zK2IrSC5kKHEuRSgwLHIpKQppZihwIT09cS5nQShxKSl0
+aHJvdyBILmIoUC5hNChxKSl9cmV0dXJuIHMuY2hhckNvZGVBdCgwKT09MD9zOnN9ZWxzZXtmb3Iocj0w
+LHM9IiI7cjxwOysrcil7cys9SC5kKHEuRSgwLHIpKQppZihwIT09cS5nQShxKSl0aHJvdyBILmIoUC5h
+NChxKSl9cmV0dXJuIHMuY2hhckNvZGVBdCgwKT09MD9zOnN9fSwKZXY6ZnVuY3Rpb24oYSxiKXtyZXR1
+cm4gdGhpcy5HRygwLEguTGgodGhpcykuQygiYTIoYUwuRSkiKS5iKGIpKX19CkgubkgucHJvdG90eXBl
+PXsKZ1VEOmZ1bmN0aW9uKCl7dmFyIHQ9Si5IbSh0aGlzLmEpLHM9dGhpcy5jCmlmKHM9PW51bGx8fHM+
+dClyZXR1cm4gdApyZXR1cm4gc30sCmdBczpmdW5jdGlvbigpe3ZhciB0PUouSG0odGhpcy5hKSxzPXRo
+aXMuYgppZihzPnQpcmV0dXJuIHQKcmV0dXJuIHN9LApnQTpmdW5jdGlvbihhKXt2YXIgdCxzPUouSG0o
+dGhpcy5hKSxyPXRoaXMuYgppZihyPj1zKXJldHVybiAwCnQ9dGhpcy5jCmlmKHQ9PW51bGx8fHQ+PXMp
+cmV0dXJuIHMtcgppZih0eXBlb2YgdCE9PSJudW1iZXIiKXJldHVybiB0LkhOKCkKcmV0dXJuIHQtcn0s
+CkU6ZnVuY3Rpb24oYSxiKXt2YXIgdCxzPXRoaXMscj1zLmdBcygpK2IKaWYoYj49MCl7dD1zLmdVRCgp
+CmlmKHR5cGVvZiB0IT09Im51bWJlciIpcmV0dXJuIEgucFkodCkKdD1yPj10fWVsc2UgdD0hMAppZih0
+KXRocm93IEguYihQLkNmKGIscywiaW5kZXgiLG51bGwsbnVsbCkpCnJldHVybiBKLkdBKHMuYSxyKX19
+CkguYTcucHJvdG90eXBlPXsKZ2w6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSwKRjpmdW5jdGlvbigp
+e3ZhciB0LHM9dGhpcyxyPXMuYSxxPUouVTYocikscD1xLmdBKHIpCmlmKHMuYiE9PXApdGhyb3cgSC5i
+KFAuYTQocikpCnQ9cy5jCmlmKHQ+PXApe3Muc0kobnVsbCkKcmV0dXJuITF9cy5zSShxLkUocix0KSk7
+KytzLmMKcmV0dXJuITB9LApzSTpmdW5jdGlvbihhKXt0aGlzLmQ9dGhpcy4kdGkuZC5iKGEpfSwKJGlB
+bjoxfQpILkE4LnByb3RvdHlwZT17CmdBOmZ1bmN0aW9uKGEpe3JldHVybiBKLkhtKHRoaXMuYSl9LApF
+OmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuYi4kMShKLkdBKHRoaXMuYSxiKSl9fQpILlU1LnByb3Rv
+dHlwZT17CmdrejpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IEguU08oSi5JVCh0aGlzLmEpLHRoaXMuYix0
+aGlzLiR0aS5DKCJTTzwxPiIpKX19CkguU08ucHJvdG90eXBlPXsKRjpmdW5jdGlvbigpe3ZhciB0LHMK
+Zm9yKHQ9dGhpcy5hLHM9dGhpcy5iO3QuRigpOylpZihILm9UKHMuJDEodC5nbCgpKSkpcmV0dXJuITAK
+cmV0dXJuITF9LApnbDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmEuZ2woKX19CkguU1UucHJvdG90eXBl
+PXt9CkguUmUucHJvdG90eXBlPXsKWTpmdW5jdGlvbihhLGIsYyl7SC5MaCh0aGlzKS5DKCJSZS5FIiku
+YihjKQp0aHJvdyBILmIoUC5MNCgiQ2Fubm90IG1vZGlmeSBhbiB1bm1vZGlmaWFibGUgbGlzdCIpKX19
+CkguWEMucHJvdG90eXBlPXt9Ckgud3YucHJvdG90eXBlPXsKZ2lPOmZ1bmN0aW9uKGEpe3ZhciB0PXRo
+aXMuX2hhc2hDb2RlCmlmKHQhPW51bGwpcmV0dXJuIHQKdD01MzY4NzA5MTEmNjY0NTk3KkouaGYodGhp
+cy5hKQp0aGlzLl9oYXNoQ29kZT10CnJldHVybiB0fSwKdzpmdW5jdGlvbihhKXtyZXR1cm4nU3ltYm9s
+KCInK0guZCh0aGlzLmEpKyciKSd9LApETjpmdW5jdGlvbihhLGIpe2lmKGI9PW51bGwpcmV0dXJuITEK
+cmV0dXJuIGIgaW5zdGFuY2VvZiBILnd2JiZ0aGlzLmE9PWIuYX0sCiRpR0Q6MX0KSC5QRC5wcm90b3R5
+cGU9e30KSC5XVS5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3JldHVybiBQLm5PKHRoaXMpfSwKWTpm
+dW5jdGlvbihhLGIsYyl7dmFyIHQ9SC5MaCh0aGlzKQp0LmQuYihiKQp0LmNoWzFdLmIoYykKcmV0dXJu
+IEguZGMoKX0sCiRpWjA6MX0KSC5MUC5wcm90b3R5cGU9ewpnQTpmdW5jdGlvbihhKXtyZXR1cm4gdGhp
+cy5hfSwKeDQ6ZnVuY3Rpb24oYSl7aWYodHlwZW9mIGEhPSJzdHJpbmciKXJldHVybiExCmlmKCJfX3By
+b3RvX18iPT09YSlyZXR1cm4hMQpyZXR1cm4gdGhpcy5iLmhhc093blByb3BlcnR5KGEpfSwKcTpmdW5j
+dGlvbihhLGIpe2lmKCF0aGlzLng0KGIpKXJldHVybiBudWxsCnJldHVybiB0aGlzLnFQKGIpfSwKcVA6
+ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYltILnkoYSldfSwKSzpmdW5jdGlvbihhLGIpe3ZhciB0LHMs
+cixxLHA9SC5MaCh0aGlzKQpwLkMoIn4oMSwyKSIpLmIoYikKdD10aGlzLmMKZm9yKHM9dC5sZW5ndGgs
+cD1wLmNoWzFdLHI9MDtyPHM7KytyKXtxPXRbcl0KYi4kMihxLHAuYih0aGlzLnFQKHEpKSl9fX0KSC5M
+SS5wcm90b3R5cGU9ewpnV2E6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmEKcmV0dXJuIHR9LApnbmQ6ZnVu
+Y3Rpb24oKXt2YXIgdCxzLHIscSxwPXRoaXMKaWYocC5jPT09MSlyZXR1cm4gQy5oVQp0PXAuZApzPXQu
+bGVuZ3RoLXAuZS5sZW5ndGgtcC5mCmlmKHM9PT0wKXJldHVybiBDLmhVCnI9W10KZm9yKHE9MDtxPHM7
+KytxKXtpZihxPj10Lmxlbmd0aClyZXR1cm4gSC5PSCh0LHEpCnIucHVzaCh0W3FdKX1yZXR1cm4gSi56
+QyhyKX0sCmdWbTpmdW5jdGlvbigpe3ZhciB0LHMscixxLHAsbyxuLG0sbD10aGlzCmlmKGwuYyE9PTAp
+cmV0dXJuIEMuQ00KdD1sLmUKcz10Lmxlbmd0aApyPWwuZApxPXIubGVuZ3RoLXMtbC5mCmlmKHM9PT0w
+KXJldHVybiBDLkNNCnA9bmV3IEguTjUodS5lbykKZm9yKG89MDtvPHM7KytvKXtpZihvPj10Lmxlbmd0
+aClyZXR1cm4gSC5PSCh0LG8pCm49dFtvXQptPXErbwppZihtPDB8fG0+PXIubGVuZ3RoKXJldHVybiBI
+Lk9IKHIsbSkKcC5ZKDAsbmV3IEgud3YobiksclttXSl9cmV0dXJuIG5ldyBILlBEKHAsdS5nRil9LAok
+aXZROjF9CkguQ2oucHJvdG90eXBlPXsKJDI6ZnVuY3Rpb24oYSxiKXt2YXIgdApILnkoYSkKdD10aGlz
+LmEKdC5iPXQuYisiJCIrSC5kKGEpCkMuTm0uaSh0aGlzLmIsYSkKQy5ObS5pKHRoaXMuYyxiKTsrK3Qu
+YX0sCiRTOjEyfQpILmY5LnByb3RvdHlwZT17CnFTOmZ1bmN0aW9uKGEpe3ZhciB0LHMscj10aGlzLHE9
+bmV3IFJlZ0V4cChyLmEpLmV4ZWMoYSkKaWYocT09bnVsbClyZXR1cm4gbnVsbAp0PU9iamVjdC5jcmVh
+dGUobnVsbCkKcz1yLmIKaWYocyE9PS0xKXQuYXJndW1lbnRzPXFbcysxXQpzPXIuYwppZihzIT09LTEp
+dC5hcmd1bWVudHNFeHByPXFbcysxXQpzPXIuZAppZihzIT09LTEpdC5leHByPXFbcysxXQpzPXIuZQpp
+ZihzIT09LTEpdC5tZXRob2Q9cVtzKzFdCnM9ci5mCmlmKHMhPT0tMSl0LnJlY2VpdmVyPXFbcysxXQpy
+ZXR1cm4gdH19CkguVzAucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXt2YXIgdD10aGlzLmIKaWYodD09
+bnVsbClyZXR1cm4iTm9TdWNoTWV0aG9kRXJyb3I6ICIrSC5kKHRoaXMuYSkKcmV0dXJuIk5vU3VjaE1l
+dGhvZEVycm9yOiBtZXRob2Qgbm90IGZvdW5kOiAnIit0KyInIG9uIG51bGwifX0KSC5hei5wcm90b3R5
+cGU9ewp3OmZ1bmN0aW9uKGEpe3ZhciB0LHM9dGhpcyxyPSJOb1N1Y2hNZXRob2RFcnJvcjogbWV0aG9k
+IG5vdCBmb3VuZDogJyIscT1zLmIKaWYocT09bnVsbClyZXR1cm4iTm9TdWNoTWV0aG9kRXJyb3I6ICIr
+SC5kKHMuYSkKdD1zLmMKaWYodD09bnVsbClyZXR1cm4gcitxKyInICgiK0guZChzLmEpKyIpIgpyZXR1
+cm4gcitxKyInIG9uICciK3QrIicgKCIrSC5kKHMuYSkrIikifX0KSC52Vi5wcm90b3R5cGU9ewp3OmZ1
+bmN0aW9uKGEpe3ZhciB0PXRoaXMuYQpyZXR1cm4gdC5sZW5ndGg9PT0wPyJFcnJvciI6IkVycm9yOiAi
+K3R9fQpILmJxLnByb3RvdHlwZT17fQpILkFtLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe2lmKHUu
+YlUuYyhhKSlpZihhLiR0aHJvd25Kc0Vycm9yPT1udWxsKWEuJHRocm93bkpzRXJyb3I9dGhpcy5hCnJl
+dHVybiBhfSwKJFM6NH0KSC5YTy5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3ZhciB0LHM9dGhpcy5i
+CmlmKHMhPW51bGwpcmV0dXJuIHMKcz10aGlzLmEKdD1zIT09bnVsbCYmdHlwZW9mIHM9PT0ib2JqZWN0
+Ij9zLnN0YWNrOm51bGwKcmV0dXJuIHRoaXMuYj10PT1udWxsPyIiOnR9LAokaUd6OjF9CkguVHAucHJv
+dG90eXBlPXsKdzpmdW5jdGlvbihhKXt2YXIgdD10aGlzLmNvbnN0cnVjdG9yLHM9dD09bnVsbD9udWxs
+OnQubmFtZQpyZXR1cm4iQ2xvc3VyZSAnIitILk5RKHM9PW51bGw/InVua25vd24iOnMpKyInIn0sCiRp
+RUg6MSwKZ1FsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LAokQzoiJDEiLAokUjoxLAokRDpudWxsfQpI
+LmxjLnByb3RvdHlwZT17fQpILnp4LnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7dmFyIHQ9dGhpcy4k
+c3RhdGljX25hbWUKaWYodD09bnVsbClyZXR1cm4iQ2xvc3VyZSBvZiB1bmtub3duIHN0YXRpYyBtZXRo
+b2QiCnJldHVybiJDbG9zdXJlICciK0guTlEodCkrIicifX0KSC5yVC5wcm90b3R5cGU9ewpETjpmdW5j
+dGlvbihhLGIpe3ZhciB0PXRoaXMKaWYoYj09bnVsbClyZXR1cm4hMQppZih0PT09YilyZXR1cm4hMApp
+ZighKGIgaW5zdGFuY2VvZiBILnJUKSlyZXR1cm4hMQpyZXR1cm4gdC5hPT09Yi5hJiZ0LmI9PT1iLmIm
+JnQuYz09PWIuY30sCmdpTzpmdW5jdGlvbihhKXt2YXIgdCxzPXRoaXMuYwppZihzPT1udWxsKXQ9SC5l
+USh0aGlzLmEpCmVsc2UgdD10eXBlb2YgcyE9PSJvYmplY3QiP0ouaGYocyk6SC5lUShzKQpyZXR1cm4o
+dF5ILmVRKHRoaXMuYikpPj4+MH0sCnc6ZnVuY3Rpb24oYSl7dmFyIHQ9dGhpcy5jCmlmKHQ9PW51bGwp
+dD10aGlzLmEKcmV0dXJuIkNsb3N1cmUgJyIrSC5kKHRoaXMuZCkrIicgb2YgIisoIkluc3RhbmNlIG9m
+ICciK0guZChILk0odCkpKyInIil9fQpILkVxLnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7cmV0dXJu
+IlJ1bnRpbWVFcnJvcjogIitILmQodGhpcy5hKX19Ckgua1kucHJvdG90eXBlPXsKdzpmdW5jdGlvbihh
+KXtyZXR1cm4iQXNzZXJ0aW9uIGZhaWxlZDogIitQLnAodGhpcy5hKX19CkguTjUucHJvdG90eXBlPXsK
+Z0E6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYX0sCmdWOmZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBILmk1
+KHRoaXMsSC5MaCh0aGlzKS5DKCJpNTwxPiIpKX0sCng0OmZ1bmN0aW9uKGEpe3ZhciB0LHMKaWYodHlw
+ZW9mIGE9PSJzdHJpbmciKXt0PXRoaXMuYgppZih0PT1udWxsKXJldHVybiExCnJldHVybiB0aGlzLlh1
+KHQsYSl9ZWxzZXtzPXRoaXMuQ1goYSkKcmV0dXJuIHN9fSwKQ1g6ZnVuY3Rpb24oYSl7dmFyIHQ9dGhp
+cy5kCmlmKHQ9PW51bGwpcmV0dXJuITEKcmV0dXJuIHRoaXMuRmgodGhpcy5CdCh0LEouaGYoYSkmMHgz
+ZmZmZmZmKSxhKT49MH0sCnE6ZnVuY3Rpb24oYSxiKXt2YXIgdCxzLHIscSxwPXRoaXMsbz1udWxsCmlm
+KHR5cGVvZiBiPT0ic3RyaW5nIil7dD1wLmIKaWYodD09bnVsbClyZXR1cm4gbwpzPXAuajIodCxiKQpy
+PXM9PW51bGw/bzpzLmIKcmV0dXJuIHJ9ZWxzZSBpZih0eXBlb2YgYj09Im51bWJlciImJihiJjB4M2Zm
+ZmZmZik9PT1iKXtxPXAuYwppZihxPT1udWxsKXJldHVybiBvCnM9cC5qMihxLGIpCnI9cz09bnVsbD9v
+OnMuYgpyZXR1cm4gcn1lbHNlIHJldHVybiBwLmFhKGIpfSwKYWE6ZnVuY3Rpb24oYSl7dmFyIHQscyxy
+PXRoaXMuZAppZihyPT1udWxsKXJldHVybiBudWxsCnQ9dGhpcy5CdChyLEouaGYoYSkmMHgzZmZmZmZm
+KQpzPXRoaXMuRmgodCxhKQppZihzPDApcmV0dXJuIG51bGwKcmV0dXJuIHRbc10uYn0sClk6ZnVuY3Rp
+b24oYSxiLGMpe3ZhciB0LHMscixxLHAsbyxuPXRoaXMsbT1ILkxoKG4pCm0uZC5iKGIpCm0uY2hbMV0u
+YihjKQppZih0eXBlb2YgYj09InN0cmluZyIpe3Q9bi5iCm4uRUgodD09bnVsbD9uLmI9bi56SygpOnQs
+YixjKX1lbHNlIGlmKHR5cGVvZiBiPT0ibnVtYmVyIiYmKGImMHgzZmZmZmZmKT09PWIpe3M9bi5jCm4u
+RUgocz09bnVsbD9uLmM9bi56SygpOnMsYixjKX1lbHNle3I9bi5kCmlmKHI9PW51bGwpcj1uLmQ9bi56
+SygpCnE9Si5oZihiKSYweDNmZmZmZmYKcD1uLkJ0KHIscSkKaWYocD09bnVsbCluLkVJKHIscSxbbi5I
+bihiLGMpXSkKZWxzZXtvPW4uRmgocCxiKQppZihvPj0wKXBbb10uYj1jCmVsc2UgcC5wdXNoKG4uSG4o
+YixjKSl9fX0sCks6ZnVuY3Rpb24oYSxiKXt2YXIgdCxzLHI9dGhpcwpILkxoKHIpLkMoIn4oMSwyKSIp
+LmIoYikKdD1yLmUKcz1yLnIKZm9yKDt0IT1udWxsOyl7Yi4kMih0LmEsdC5iKQppZihzIT09ci5yKXRo
+cm93IEguYihQLmE0KHIpKQp0PXQuY319LApFSDpmdW5jdGlvbihhLGIsYyl7dmFyIHQscz10aGlzLHI9
+SC5MaChzKQpyLmQuYihiKQpyLmNoWzFdLmIoYykKdD1zLmoyKGEsYikKaWYodD09bnVsbClzLkVJKGEs
+YixzLkhuKGIsYykpCmVsc2UgdC5iPWN9LAprczpmdW5jdGlvbigpe3RoaXMucj10aGlzLnIrMSY2NzEw
+ODg2M30sCkhuOmZ1bmN0aW9uKGEsYil7dmFyIHQscz10aGlzLHI9SC5MaChzKSxxPW5ldyBILmRiKHIu
+ZC5iKGEpLHIuY2hbMV0uYihiKSkKaWYocy5lPT1udWxsKXMuZT1zLmY9cQplbHNle3Q9cy5mCnEuZD10
+CnMuZj10LmM9cX0rK3MuYQpzLmtzKCkKcmV0dXJuIHF9LApGaDpmdW5jdGlvbihhLGIpe3ZhciB0LHMK
+aWYoYT09bnVsbClyZXR1cm4tMQp0PWEubGVuZ3RoCmZvcihzPTA7czx0OysrcylpZihKLlJNKGFbc10u
+YSxiKSlyZXR1cm4gcwpyZXR1cm4tMX0sCnc6ZnVuY3Rpb24oYSl7cmV0dXJuIFAubk8odGhpcyl9LApq
+MjpmdW5jdGlvbihhLGIpe3JldHVybiBhW2JdfSwKQnQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gYVtiXX0s
+CkVJOmZ1bmN0aW9uKGEsYixjKXthW2JdPWN9LApybjpmdW5jdGlvbihhLGIpe2RlbGV0ZSBhW2JdfSwK
+WHU6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5qMihhLGIpIT1udWxsfSwKeks6ZnVuY3Rpb24oKXt2
+YXIgdD0iPG5vbi1pZGVudGlmaWVyLWtleT4iLHM9T2JqZWN0LmNyZWF0ZShudWxsKQp0aGlzLkVJKHMs
+dCxzKQp0aGlzLnJuKHMsdCkKcmV0dXJuIHN9LAokaUZvOjF9CkguZGIucHJvdG90eXBlPXt9CkguaTUu
+cHJvdG90eXBlPXsKZ0E6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYS5hfSwKZ2t6OmZ1bmN0aW9uKGEp
+e3ZhciB0PXRoaXMuYSxzPW5ldyBILk42KHQsdC5yLHRoaXMuJHRpLkMoIk42PDE+IikpCnMuYz10LmUK
+cmV0dXJuIHN9fQpILk42LnByb3RvdHlwZT17CmdsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0sCkY6
+ZnVuY3Rpb24oKXt2YXIgdD10aGlzLHM9dC5hCmlmKHQuYiE9PXMucil0aHJvdyBILmIoUC5hNChzKSkK
+ZWxzZXtzPXQuYwppZihzPT1udWxsKXt0LnNxWShudWxsKQpyZXR1cm4hMX1lbHNle3Quc3FZKHMuYSkK
+dC5jPXQuYy5jCnJldHVybiEwfX19LApzcVk6ZnVuY3Rpb24oYSl7dGhpcy5kPXRoaXMuJHRpLmQuYihh
+KX0sCiRpQW46MX0KSC5kQy5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hKGEp
+fSwKJFM6NH0KSC53Ti5wcm90b3R5cGU9ewokMjpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmEoYSxi
+KX0sCiRTOjM4fQpILlZYLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmEoSC55
+KGEpKX0sCiRTOjQwfQpILlZSLnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7cmV0dXJuIlJlZ0V4cC8i
+K3RoaXMuYSsiLyIrdGhpcy5iLmZsYWdzfSwKZ0hjOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxzPXQuYwpp
+ZihzIT1udWxsKXJldHVybiBzCnM9dC5iCnJldHVybiB0LmM9SC52NCh0LmEscy5tdWx0aWxpbmUsIXMu
+aWdub3JlQ2FzZSxzLnVuaWNvZGUscy5kb3RBbGwsITApfSwKZGQ6ZnVuY3Rpb24oYSxiKXtyZXR1cm4g
+bmV3IEguS1codGhpcyxiLDApfSwKVVo6ZnVuY3Rpb24oYSxiKXt2YXIgdCxzPXRoaXMuZ0hjKCkKcy5s
+YXN0SW5kZXg9Ygp0PXMuZXhlYyhhKQppZih0PT1udWxsKXJldHVybiBudWxsCnJldHVybiBuZXcgSC5F
+Syh0KX0sCiRpdlg6MSwKJGl3TDoxfQpILkVLLnByb3RvdHlwZT17CnE6ZnVuY3Rpb24oYSxiKXt2YXIg
+dApILlNjKGIpCnQ9dGhpcy5iCmlmKGI+PXQubGVuZ3RoKXJldHVybiBILk9IKHQsYikKcmV0dXJuIHRb
+Yl19LAokaU9kOjEsCiRpaWI6MX0KSC5LVy5wcm90b3R5cGU9ewpna3o6ZnVuY3Rpb24oYSl7cmV0dXJu
+IG5ldyBILlBiKHRoaXMuYSx0aGlzLmIsdGhpcy5jKX19CkguUGIucHJvdG90eXBlPXsKZ2w6ZnVuY3Rp
+b24oKXtyZXR1cm4gdGhpcy5kfSwKRjpmdW5jdGlvbigpe3ZhciB0LHMscixxLHA9dGhpcyxvPXAuYgpp
+ZihvPT1udWxsKXJldHVybiExCnQ9cC5jCmlmKHQ8PW8ubGVuZ3RoKXtzPXAuYQpyPXMuVVoobyx0KQpp
+ZihyIT1udWxsKXtwLmQ9cgpvPXIuYgp0PW8uaW5kZXgKcT10K29bMF0ubGVuZ3RoCmlmKHQ9PT1xKXtp
+ZihzLmIudW5pY29kZSl7bz1wLmMKdD1vKzEKcz1wLmIKaWYodDxzLmxlbmd0aCl7bz1KLnJZKHMpLm0o
+cyxvKQppZihvPj01NTI5NiYmbzw9NTYzMTkpe289Qy54Qi5tKHMsdCkKbz1vPj01NjMyMCYmbzw9NTcz
+NDN9ZWxzZSBvPSExfWVsc2Ugbz0hMX1lbHNlIG89ITEKcT0obz9xKzE6cSkrMX1wLmM9cQpyZXR1cm4h
+MH19cC5iPXAuZD1udWxsCnJldHVybiExfSwKJGlBbjoxfQpILnRRLnByb3RvdHlwZT17CnE6ZnVuY3Rp
+b24oYSxiKXtILlNjKGIpCmlmKGIhPT0wKUgudmgoUC54KGIsbnVsbCkpCnJldHVybiB0aGlzLmN9LAok
+aU9kOjF9CkgudW4ucHJvdG90eXBlPXsKZ2t6OmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgSC5TZCh0aGlz
+LmEsdGhpcy5iLHRoaXMuYyl9fQpILlNkLnByb3RvdHlwZT17CkY6ZnVuY3Rpb24oKXt2YXIgdCxzLHI9
+dGhpcyxxPXIuYyxwPXIuYixvPXAubGVuZ3RoLG49ci5hLG09bi5sZW5ndGgKaWYocStvPm0pe3IuZD1u
+dWxsCnJldHVybiExfXQ9bi5pbmRleE9mKHAscSkKaWYodDwwKXtyLmM9bSsxCnIuZD1udWxsCnJldHVy
+biExfXM9dCtvCnIuZD1uZXcgSC50USh0LHApCnIuYz1zPT09ci5jP3MrMTpzCnJldHVybiEwfSwKZ2w6
+ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSwKJGlBbjoxfQpILkVULnByb3RvdHlwZT17JGlFVDoxLCRp
+QVM6MX0KSC5iMC5wcm90b3R5cGU9ewpnQTpmdW5jdGlvbihhKXtyZXR1cm4gYS5sZW5ndGh9LAokaVhq
+OjF9CkguRGcucHJvdG90eXBlPXsKcTpmdW5jdGlvbihhLGIpe0guU2MoYikKSC5vZChiLGEsYS5sZW5n
+dGgpCnJldHVybiBhW2JdfSwKWTpmdW5jdGlvbihhLGIsYyl7SC5JZyhjKQpILm9kKGIsYSxhLmxlbmd0
+aCkKYVtiXT1jfSwKJGljWDoxLAokaXpNOjF9CkguUGcucHJvdG90eXBlPXsKWTpmdW5jdGlvbihhLGIs
+Yyl7SC5TYyhjKQpILm9kKGIsYSxhLmxlbmd0aCkKYVtiXT1jfSwKJGljWDoxLAokaXpNOjF9CkgueGou
+cHJvdG90eXBlPXsKcTpmdW5jdGlvbihhLGIpe0guU2MoYikKSC5vZChiLGEsYS5sZW5ndGgpCnJldHVy
+biBhW2JdfX0KSC5kRS5wcm90b3R5cGU9ewpxOmZ1bmN0aW9uKGEsYil7SC5TYyhiKQpILm9kKGIsYSxh
+Lmxlbmd0aCkKcmV0dXJuIGFbYl19fQpILlpBLnByb3RvdHlwZT17CnE6ZnVuY3Rpb24oYSxiKXtILlNj
+KGIpCkgub2QoYixhLGEubGVuZ3RoKQpyZXR1cm4gYVtiXX19Ckgud2YucHJvdG90eXBlPXsKcTpmdW5j
+dGlvbihhLGIpe0guU2MoYikKSC5vZChiLGEsYS5sZW5ndGgpCnJldHVybiBhW2JdfX0KSC5QcS5wcm90
 b3R5cGU9ewpxOmZ1bmN0aW9uKGEsYil7SC5TYyhiKQpILm9kKGIsYSxhLmxlbmd0aCkKcmV0dXJuIGFb
-Yl19fQpILlpBLnByb3RvdHlwZT17CnE6ZnVuY3Rpb24oYSxiKXtILlNjKGIpCkgub2QoYixhLGEubGVu
-Z3RoKQpyZXR1cm4gYVtiXX19Ckgud2YucHJvdG90eXBlPXsKcTpmdW5jdGlvbihhLGIpe0guU2MoYikK
-SC5vZChiLGEsYS5sZW5ndGgpCnJldHVybiBhW2JdfX0KSC5QcS5wcm90b3R5cGU9ewpxOmZ1bmN0aW9u
-KGEsYil7SC5TYyhiKQpILm9kKGIsYSxhLmxlbmd0aCkKcmV0dXJuIGFbYl19fQpILmVFLnByb3RvdHlw
-ZT17CmdBOmZ1bmN0aW9uKGEpe3JldHVybiBhLmxlbmd0aH0sCnE6ZnVuY3Rpb24oYSxiKXtILlNjKGIp
-Ckgub2QoYixhLGEubGVuZ3RoKQpyZXR1cm4gYVtiXX19CkguVjYucHJvdG90eXBlPXsKZ0E6ZnVuY3Rp
-b24oYSl7cmV0dXJuIGEubGVuZ3RofSwKcTpmdW5jdGlvbihhLGIpe0guU2MoYikKSC5vZChiLGEsYS5s
-ZW5ndGgpCnJldHVybiBhW2JdfSwKJGlWNjoxLAokaW42OjF9CkguUkcucHJvdG90eXBlPXt9CkguVlAu
-cHJvdG90eXBlPXt9CkguV0IucHJvdG90eXBlPXt9CkguWkcucHJvdG90eXBlPXt9CkguSmMucHJvdG90
-eXBlPXsKQzpmdW5jdGlvbihhKXtyZXR1cm4gSC5jRSh2LnR5cGVVbml2ZXJzZSx0aGlzLGEpfSwKS3E6
-ZnVuY3Rpb24oYSl7cmV0dXJuIEgudjUodi50eXBlVW5pdmVyc2UsdGhpcyxhKX19CkguRy5wcm90b3R5
-cGU9e30KSC51OS5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmF9fQpILmh6LnBy
-b3RvdHlwZT17fQpILmlNLnByb3RvdHlwZT17fQpQLnRoLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEp
-e3ZhciB0PXRoaXMuYSxzPXQuYQp0LmE9bnVsbApzLiQwKCl9LAokUzoxMn0KUC5oYS5wcm90b3R5cGU9
-ewokMTpmdW5jdGlvbihhKXt2YXIgdCxzCnRoaXMuYS5hPXUuTS5iKGEpCnQ9dGhpcy5iCnM9dGhpcy5j
-CnQuZmlyc3RDaGlsZD90LnJlbW92ZUNoaWxkKHMpOnQuYXBwZW5kQ2hpbGQocyl9LAokUzoyMH0KUC5W
-cy5wcm90b3R5cGU9ewokMDpmdW5jdGlvbigpe3RoaXMuYS4kMCgpfSwKJEM6IiQwIiwKJFI6MCwKJFM6
-MH0KUC5GdC5wcm90b3R5cGU9ewokMDpmdW5jdGlvbigpe3RoaXMuYS4kMCgpfSwKJEM6IiQwIiwKJFI6
-MCwKJFM6MH0KUC5XMy5wcm90b3R5cGU9ewpDWTpmdW5jdGlvbihhLGIpe2lmKHNlbGYuc2V0VGltZW91
-dCE9bnVsbClzZWxmLnNldFRpbWVvdXQoSC50UihuZXcgUC55SCh0aGlzLGIpLDApLGEpCmVsc2UgdGhy
-b3cgSC5iKFAuTDQoImBzZXRUaW1lb3V0KClgIG5vdCBmb3VuZC4iKSl9fQpQLnlILnByb3RvdHlwZT17
-CiQwOmZ1bmN0aW9uKCl7dGhpcy5iLiQwKCl9LAokQzoiJDAiLAokUjowLAokUzoyfQpQLmloLnByb3Rv
-dHlwZT17CmFNOmZ1bmN0aW9uKGEsYil7dmFyIHQscyxyPXRoaXMuJHRpCnIuQygiMS8iKS5iKGIpCnQ9
-IXRoaXMuYnx8ci5DKCJiODwxPiIpLmMoYikKcz10aGlzLmEKaWYodClzLlhmKGIpCmVsc2Ugcy5YMihy
-LmQuYihiKSl9LAp3MDpmdW5jdGlvbihhLGIpe3ZhciB0PXRoaXMuYQppZih0aGlzLmIpdC5aTChhLGIp
-CmVsc2UgdC5OayhhLGIpfX0KUC5XTS5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXtyZXR1cm4gdGhp
-cy5hLiQyKDAsYSl9LAokUzo0N30KUC5TWC5wcm90b3R5cGU9ewokMjpmdW5jdGlvbihhLGIpe3RoaXMu
-YS4kMigxLG5ldyBILmJxKGEsdS5sLmIoYikpKX0sCiRDOiIkMiIsCiRSOjIsCiRTOjIxfQpQLkdzLnBy
-b3RvdHlwZT17CiQyOmZ1bmN0aW9uKGEsYil7dGhpcy5hKEguU2MoYSksYil9LAokUzoyNn0KUC5QZi5w
-cm90b3R5cGU9ewp3MDpmdW5jdGlvbihhLGIpe3ZhciB0CmlmKGE9PW51bGwpYT1uZXcgUC5uKCkKdD10
-aGlzLmEKaWYodC5hIT09MCl0aHJvdyBILmIoUC5QVigiRnV0dXJlIGFscmVhZHkgY29tcGxldGVkIikp
-CnQuTmsoYSxiKX0sCnBtOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLncwKGEsbnVsbCl9fQpQLlpmLnBy
-b3RvdHlwZT17CmFNOmZ1bmN0aW9uKGEsYil7dmFyIHQKdGhpcy4kdGkuQygiMS8iKS5iKGIpCnQ9dGhp
-cy5hCmlmKHQuYSE9PTApdGhyb3cgSC5iKFAuUFYoIkZ1dHVyZSBhbHJlYWR5IGNvbXBsZXRlZCIpKQp0
-LlhmKGIpfX0KUC5GZS5wcm90b3R5cGU9ewpIUjpmdW5jdGlvbihhKXtpZigodGhpcy5jJjE1KSE9PTYp
-cmV0dXJuITAKcmV0dXJuIHRoaXMuYi5iLmJ2KHUuYWwuYih0aGlzLmQpLGEuYSx1LmNKLHUuSyl9LApL
-dzpmdW5jdGlvbihhKXt2YXIgdD10aGlzLmUscz11Lnoscj11LksscT10aGlzLiR0aS5DKCIyLyIpLHA9
-dGhpcy5iLmIKaWYodS5XLmModCkpcmV0dXJuIHEuYihwLnJwKHQsYS5hLGEuYixzLHIsdS5sKSkKZWxz
-ZSByZXR1cm4gcS5iKHAuYnYodS55LmIodCksYS5hLHMscikpfX0KUC52cy5wcm90b3R5cGU9ewpTcTpm
-dW5jdGlvbihhLGIsYyl7dmFyIHQscyxyLHE9dGhpcy4kdGkKcS5LcShjKS5DKCIxLygyKSIpLmIoYSkK
-dD0kLlgzCmlmKHQhPT1DLk5VKXtjLkMoIkA8MC8+IikuS3EocS5kKS5DKCIxKDIpIikuYihhKQppZihi
-IT1udWxsKWI9UC5WSChiLHQpfXM9bmV3IFAudnMoJC5YMyxjLkMoInZzPDA+IikpCnI9Yj09bnVsbD8x
-OjMKdGhpcy54ZihuZXcgUC5GZShzLHIsYSxiLHEuQygiQDwxPiIpLktxKGMpLkMoIkZlPDEsMj4iKSkp
-CnJldHVybiBzfSwKVzc6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5TcShhLG51bGwsYil9LApRZDpm
-dW5jdGlvbihhLGIsYyl7dmFyIHQscz10aGlzLiR0aQpzLktxKGMpLkMoIjEvKDIpIikuYihhKQp0PW5l
-dyBQLnZzKCQuWDMsYy5DKCJ2czwwPiIpKQp0aGlzLnhmKG5ldyBQLkZlKHQsKGI9PW51bGw/MTozKXwx
-NixhLGIscy5DKCJAPDE+IikuS3EoYykuQygiRmU8MSwyPiIpKSkKcmV0dXJuIHR9LApPQTpmdW5jdGlv
-bihhKXt2YXIgdCxzLHIKdS5iZi5iKG51bGwpCnQ9dGhpcy4kdGkKcz0kLlgzCnI9bmV3IFAudnMocyx0
-KQppZihzIT09Qy5OVSlhPVAuVkgoYSxzKQp0aGlzLnhmKG5ldyBQLkZlKHIsMixudWxsLGEsdC5DKCJA
-PDE+IikuS3EodC5kKS5DKCJGZTwxLDI+IikpKQpyZXR1cm4gcn0sCnhmOmZ1bmN0aW9uKGEpe3ZhciB0
-LHM9dGhpcyxyPXMuYQppZihyPD0xKXthLmE9dS54LmIocy5jKQpzLmM9YX1lbHNle2lmKHI9PT0yKXt0
-PXUuXy5iKHMuYykKcj10LmEKaWYocjw0KXt0LnhmKGEpCnJldHVybn1zLmE9cgpzLmM9dC5jfVAuVGso
-bnVsbCxudWxsLHMuYix1Lk0uYihuZXcgUC5kYShzLGEpKSl9fSwKalE6ZnVuY3Rpb24oYSl7dmFyIHQs
-cyxyLHEscCxvPXRoaXMsbj17fQpuLmE9YQppZihhPT1udWxsKXJldHVybgp0PW8uYQppZih0PD0xKXtz
-PXUueC5iKG8uYykKcj1vLmM9YQppZihzIT1udWxsKXtmb3IoO3E9ci5hLHEhPW51bGw7cj1xKTtyLmE9
-c319ZWxzZXtpZih0PT09Mil7cD11Ll8uYihvLmMpCnQ9cC5hCmlmKHQ8NCl7cC5qUShhKQpyZXR1cm59
-by5hPXQKby5jPXAuY31uLmE9by5OOChhKQpQLlRrKG51bGwsbnVsbCxvLmIsdS5NLmIobmV3IFAub1Eo
-bixvKSkpfX0sCmFoOmZ1bmN0aW9uKCl7dmFyIHQ9dS54LmIodGhpcy5jKQp0aGlzLmM9bnVsbApyZXR1
-cm4gdGhpcy5OOCh0KX0sCk44OmZ1bmN0aW9uKGEpe3ZhciB0LHMscgpmb3IodD1hLHM9bnVsbDt0IT1u
-dWxsO3M9dCx0PXIpe3I9dC5hCnQuYT1zfXJldHVybiBzfSwKSEg6ZnVuY3Rpb24oYSl7dmFyIHQscz10
-aGlzLHI9cy4kdGkKci5DKCIxLyIpLmIoYSkKaWYoci5DKCJiODwxPiIpLmMoYSkpaWYoci5jKGEpKVAu
-QTkoYSxzKQplbHNlIFAuazMoYSxzKQplbHNle3Q9cy5haCgpCnIuZC5iKGEpCnMuYT00CnMuYz1hClAu
-SFoocyx0KX19LApYMjpmdW5jdGlvbihhKXt2YXIgdCxzPXRoaXMKcy4kdGkuZC5iKGEpCnQ9cy5haCgp
-CnMuYT00CnMuYz1hClAuSFoocyx0KX0sClpMOmZ1bmN0aW9uKGEsYil7dmFyIHQscz10aGlzCnUubC5i
-KGIpCnQ9cy5haCgpCnMuYT04CnMuYz1uZXcgUC5DdyhhLGIpClAuSFoocyx0KX0sClhmOmZ1bmN0aW9u
-KGEpe3ZhciB0PXRoaXMscz10LiR0aQpzLkMoIjEvIikuYihhKQppZihzLkMoImI4PDE+IikuYyhhKSl7
-dC5jVShhKQpyZXR1cm59dC5hPTEKUC5UayhudWxsLG51bGwsdC5iLHUuTS5iKG5ldyBQLnJIKHQsYSkp
-KX0sCmNVOmZ1bmN0aW9uKGEpe3ZhciB0PXRoaXMscz10LiR0aQpzLkMoImI4PDE+IikuYihhKQppZihz
-LmMoYSkpe2lmKGEuYT09PTgpe3QuYT0xClAuVGsobnVsbCxudWxsLHQuYix1Lk0uYihuZXcgUC5LRih0
-LGEpKSl9ZWxzZSBQLkE5KGEsdCkKcmV0dXJufVAuazMoYSx0KX0sCk5rOmZ1bmN0aW9uKGEsYil7dGhp
-cy5hPTEKUC5UayhudWxsLG51bGwsdGhpcy5iLHUuTS5iKG5ldyBQLlpMKHRoaXMsYSxiKSkpfSwKJGli
-ODoxfQpQLmRhLnByb3RvdHlwZT17CiQwOmZ1bmN0aW9uKCl7UC5IWih0aGlzLmEsdGhpcy5iKX0sCiRT
-OjB9ClAub1EucHJvdG90eXBlPXsKJDA6ZnVuY3Rpb24oKXtQLkhaKHRoaXMuYix0aGlzLmEuYSl9LAok
-UzowfQpQLnBWLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3ZhciB0PXRoaXMuYQp0LmE9MAp0LkhI
-KGEpfSwKJFM6MTJ9ClAuVTcucHJvdG90eXBlPXsKJDI6ZnVuY3Rpb24oYSxiKXt1LmwuYihiKQp0aGlz
-LmEuWkwoYSxiKX0sCiQxOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLiQyKGEsbnVsbCl9LAokQzoiJDIi
-LAokRDpmdW5jdGlvbigpe3JldHVybltudWxsXX0sCiRTOjMwfQpQLnZyLnByb3RvdHlwZT17CiQwOmZ1
-bmN0aW9uKCl7dGhpcy5hLlpMKHRoaXMuYix0aGlzLmMpfSwKJFM6MH0KUC5ySC5wcm90b3R5cGU9ewok
-MDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuYQp0LlgyKHQuJHRpLmQuYih0aGlzLmIpKX0sCiRTOjB9ClAu
-S0YucHJvdG90eXBlPXsKJDA6ZnVuY3Rpb24oKXtQLkE5KHRoaXMuYix0aGlzLmEpfSwKJFM6MH0KUC5a
-TC5wcm90b3R5cGU9ewokMDpmdW5jdGlvbigpe3RoaXMuYS5aTCh0aGlzLmIsdGhpcy5jKX0sCiRTOjB9
-ClAuUlQucHJvdG90eXBlPXsKJDA6ZnVuY3Rpb24oKXt2YXIgdCxzLHIscSxwLG8sbj10aGlzLG09bnVs
-bAp0cnl7cj1uLmMKbT1yLmIuYi56eih1LmZPLmIoci5kKSx1LnopfWNhdGNoKHEpe3Q9SC5SdShxKQpz
-PUgudHMocSkKaWYobi5kKXtyPXUubi5iKG4uYS5hLmMpLmEKcD10CnA9cj09bnVsbD9wPT1udWxsOnI9
-PT1wCnI9cH1lbHNlIHI9ITEKcD1uLmIKaWYocilwLmI9dS5uLmIobi5hLmEuYykKZWxzZSBwLmI9bmV3
-IFAuQ3codCxzKQpwLmE9ITAKcmV0dXJufWlmKHUuYy5jKG0pKXtpZihtIGluc3RhbmNlb2YgUC52cyYm
-bS5hPj00KXtpZihtLmE9PT04KXtyPW4uYgpyLmI9dS5uLmIobS5jKQpyLmE9ITB9cmV0dXJufW89bi5h
-LmEKcj1uLmIKci5iPW0uVzcobmV3IFAualoobyksdS56KQpyLmE9ITF9fSwKJFM6Mn0KUC5qWi5wcm90
-b3R5cGU9ewokMTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hfSwKJFM6MzN9ClAucnEucHJvdG90eXBl
-PXsKJDA6ZnVuY3Rpb24oKXt2YXIgdCxzLHIscSxwLG8sbixtPXRoaXMKdHJ5e3I9bS5iCnE9ci4kdGkK
-cD1xLmQKbz1wLmIobS5jKQptLmEuYj1yLmIuYi5idihxLkMoIjIvKDEpIikuYihyLmQpLG8scS5DKCIy
-LyIpLHApfWNhdGNoKG4pe3Q9SC5SdShuKQpzPUgudHMobikKcj1tLmEKci5iPW5ldyBQLkN3KHQscykK
-ci5hPSEwfX0sCiRTOjJ9ClAuUlcucHJvdG90eXBlPXsKJDA6ZnVuY3Rpb24oKXt2YXIgdCxzLHIscSxw
-LG8sbixtLGw9dGhpcwp0cnl7dD11Lm4uYihsLmEuYS5jKQpxPWwuYwppZihILm9UKHEuSFIodCkpJiZx
-LmUhPW51bGwpe3A9bC5iCnAuYj1xLkt3KHQpCnAuYT0hMX19Y2F0Y2gobyl7cz1ILlJ1KG8pCnI9SC50
-cyhvKQpxPXUubi5iKGwuYS5hLmMpCnA9cS5hCm49cwptPWwuYgppZihwPT1udWxsP249PW51bGw6cD09
-PW4pbS5iPXEKZWxzZSBtLmI9bmV3IFAuQ3cocyxyKQptLmE9ITB9fSwKJFM6Mn0KUC5PTS5wcm90b3R5
-cGU9e30KUC5xaC5wcm90b3R5cGU9ewpnQTpmdW5jdGlvbihhKXt2YXIgdCxzLHI9dGhpcyxxPXt9LHA9
-bmV3IFAudnMoJC5YMyx1LmZKKQpxLmE9MAp0PUguTGgocikKcz10LkMoIn4oMSkiKS5iKG5ldyBQLkI1
-KHEscikpCnUuTS5iKG5ldyBQLlBJKHEscCkpClcuSkUoci5hLHIuYixzLCExLHQuZCkKcmV0dXJuIHB9
-fQpQLkI1LnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe0guTGgodGhpcy5iKS5kLmIoYSk7Kyt0aGlz
-LmEuYX0sCiRTOmZ1bmN0aW9uKCl7cmV0dXJuIEguTGgodGhpcy5iKS5DKCJjOCgxKSIpfX0KUC5QSS5w
-cm90b3R5cGU9ewokMDpmdW5jdGlvbigpe3RoaXMuYi5ISCh0aGlzLmEuYSl9LAokUzowfQpQLk1PLnBy
-b3RvdHlwZT17fQpQLmtULnByb3RvdHlwZT17fQpQLnhJLnByb3RvdHlwZT17fQpQLkN3LnByb3RvdHlw
-ZT17Cnc6ZnVuY3Rpb24oYSl7cmV0dXJuIEguZCh0aGlzLmEpfSwKJGlYUzoxfQpQLm0wLnByb3RvdHlw
-ZT17JGlKQjoxfQpQLnBLLnByb3RvdHlwZT17CiQwOmZ1bmN0aW9uKCl7dmFyIHQscz10aGlzLmEscj1z
-LmEKcz1yPT1udWxsP3MuYT1uZXcgUC5uKCk6cgpyPXRoaXMuYgppZihyPT1udWxsKXRocm93IEguYihz
-KQp0PUguYihzKQp0LnN0YWNrPXIudygwKQp0aHJvdyB0fSwKJFM6MH0KUC5KaS5wcm90b3R5cGU9ewpi
-SDpmdW5jdGlvbihhKXt2YXIgdCxzLHIscT1udWxsCnUuTS5iKGEpCnRyeXtpZihDLk5VPT09JC5YMyl7
-YS4kMCgpCnJldHVybn1QLlQ4KHEscSx0aGlzLGEsdS5IKX1jYXRjaChyKXt0PUguUnUocikKcz1ILnRz
-KHIpClAuTDIocSxxLHRoaXMsdCx1LmwuYihzKSl9fSwKRGw6ZnVuY3Rpb24oYSxiLGMpe3ZhciB0LHMs
-cixxPW51bGwKYy5DKCJ+KDApIikuYihhKQpjLmIoYikKdHJ5e2lmKEMuTlU9PT0kLlgzKXthLiQxKGIp
-CnJldHVybn1QLnl2KHEscSx0aGlzLGEsYix1LkgsYyl9Y2F0Y2gocil7dD1ILlJ1KHIpCnM9SC50cyhy
-KQpQLkwyKHEscSx0aGlzLHQsdS5sLmIocykpfX0sClJUOmZ1bmN0aW9uKGEsYil7cmV0dXJuIG5ldyBQ
-LmhqKHRoaXMsYi5DKCIwKCkiKS5iKGEpLGIpfSwKR1k6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBQLlZw
-KHRoaXMsdS5NLmIoYSkpfSwKUHk6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gbmV3IFAuT1IodGhpcyxiLkMo
-In4oMCkiKS5iKGEpLGIpfSwKcTpmdW5jdGlvbihhLGIpe3JldHVybn0sCnp6OmZ1bmN0aW9uKGEsYil7
-Yi5DKCIwKCkiKS5iKGEpCmlmKCQuWDM9PT1DLk5VKXJldHVybiBhLiQwKCkKcmV0dXJuIFAuVDgobnVs
-bCxudWxsLHRoaXMsYSxiKX0sCmJ2OmZ1bmN0aW9uKGEsYixjLGQpe2MuQygiQDwwPiIpLktxKGQpLkMo
-IjEoMikiKS5iKGEpCmQuYihiKQppZigkLlgzPT09Qy5OVSlyZXR1cm4gYS4kMShiKQpyZXR1cm4gUC55
-dihudWxsLG51bGwsdGhpcyxhLGIsYyxkKX0sCnJwOmZ1bmN0aW9uKGEsYixjLGQsZSxmKXtkLkMoIkA8
-MD4iKS5LcShlKS5LcShmKS5DKCIxKDIsMykiKS5iKGEpCmUuYihiKQpmLmIoYykKaWYoJC5YMz09PUMu
-TlUpcmV0dXJuIGEuJDIoYixjKQpyZXR1cm4gUC5ReChudWxsLG51bGwsdGhpcyxhLGIsYyxkLGUsZil9
-LApMajpmdW5jdGlvbihhLGIsYyxkKXtyZXR1cm4gYi5DKCJAPDA+IikuS3EoYykuS3EoZCkuQygiMSgy
-LDMpIikuYihhKX19ClAuaGoucHJvdG90eXBlPXsKJDA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5hLnp6
-KHRoaXMuYix0aGlzLmMpfSwKJFM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jLkMoIjAoKSIpfX0KUC5W
-cC5wcm90b3R5cGU9ewokMDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmEuYkgodGhpcy5iKX0sCiRTOjJ9
-ClAuT1IucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dmFyIHQ9dGhpcy5jCnJldHVybiB0aGlzLmEu
-RGwodGhpcy5iLHQuYihhKSx0KX0sCiRTOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYy5DKCJ+KDApIil9
-fQpQLmI2LnByb3RvdHlwZT17CmdrejpmdW5jdGlvbihhKXt2YXIgdD10aGlzLHM9bmV3IFAubG0odCx0
-LnIsSC5MaCh0KS5DKCJsbTwxPiIpKQpzLmM9dC5lCnJldHVybiBzfSwKZ0E6ZnVuY3Rpb24oYSl7cmV0
-dXJuIHRoaXMuYX0sCnRnOmZ1bmN0aW9uKGEsYil7dmFyIHQscwppZih0eXBlb2YgYj09InN0cmluZyIm
-JmIhPT0iX19wcm90b19fIil7dD10aGlzLmIKaWYodD09bnVsbClyZXR1cm4hMQpyZXR1cm4gdS5KLmIo
-dFtiXSkhPW51bGx9ZWxzZXtzPXRoaXMuUFIoYikKcmV0dXJuIHN9fSwKUFI6ZnVuY3Rpb24oYSl7dmFy
-IHQ9dGhpcy5kCmlmKHQ9PW51bGwpcmV0dXJuITEKcmV0dXJuIHRoaXMuREYodFt0aGlzLk4oYSldLGEp
-Pj0wfSwKaTpmdW5jdGlvbihhLGIpe3ZhciB0LHMscj10aGlzCkguTGgocikuZC5iKGIpCmlmKHR5cGVv
-ZiBiPT0ic3RyaW5nIiYmYiE9PSJfX3Byb3RvX18iKXt0PXIuYgpyZXR1cm4gci5iUSh0PT1udWxsP3Iu
-Yj1QLlQyKCk6dCxiKX1lbHNlIGlmKHR5cGVvZiBiPT0ibnVtYmVyIiYmKGImMTA3Mzc0MTgyMyk9PT1i
-KXtzPXIuYwpyZXR1cm4gci5iUShzPT1udWxsP3IuYz1QLlQyKCk6cyxiKX1lbHNlIHJldHVybiByLkI3
-KGIpfSwKQjc6ZnVuY3Rpb24oYSl7dmFyIHQscyxyLHE9dGhpcwpILkxoKHEpLmQuYihhKQp0PXEuZApp
-Zih0PT1udWxsKXQ9cS5kPVAuVDIoKQpzPXEuTihhKQpyPXRbc10KaWYocj09bnVsbCl0W3NdPVtxLnlv
-KGEpXQplbHNle2lmKHEuREYocixhKT49MClyZXR1cm4hMQpyLnB1c2gocS55byhhKSl9cmV0dXJuITB9
-LApSOmZ1bmN0aW9uKGEsYil7dmFyIHQ9dGhpcwppZih0eXBlb2YgYj09InN0cmluZyImJmIhPT0iX19w
-cm90b19fIilyZXR1cm4gdC5MKHQuYixiKQplbHNlIGlmKHR5cGVvZiBiPT0ibnVtYmVyIiYmKGImMTA3
-Mzc0MTgyMyk9PT1iKXJldHVybiB0LkwodC5jLGIpCmVsc2UgcmV0dXJuIHQucWcoYil9LApxZzpmdW5j
-dGlvbihhKXt2YXIgdCxzLHIscSxwPXRoaXMsbz1wLmQKaWYobz09bnVsbClyZXR1cm4hMQp0PXAuTihh
-KQpzPW9bdF0Kcj1wLkRGKHMsYSkKaWYocjwwKXJldHVybiExCnE9cy5zcGxpY2UociwxKVswXQppZigw
-PT09cy5sZW5ndGgpZGVsZXRlIG9bdF0KcC5HUyhxKQpyZXR1cm4hMH0sCmJROmZ1bmN0aW9uKGEsYil7
-SC5MaCh0aGlzKS5kLmIoYikKaWYodS5KLmIoYVtiXSkhPW51bGwpcmV0dXJuITEKYVtiXT10aGlzLnlv
-KGIpCnJldHVybiEwfSwKTDpmdW5jdGlvbihhLGIpe3ZhciB0CmlmKGE9PW51bGwpcmV0dXJuITEKdD11
-LkouYihhW2JdKQppZih0PT1udWxsKXJldHVybiExCnRoaXMuR1ModCkKZGVsZXRlIGFbYl0KcmV0dXJu
-ITB9LApTOmZ1bmN0aW9uKCl7dGhpcy5yPTEwNzM3NDE4MjMmdGhpcy5yKzF9LAp5bzpmdW5jdGlvbihh
-KXt2YXIgdCxzPXRoaXMscj1uZXcgUC5ibihILkxoKHMpLmQuYihhKSkKaWYocy5lPT1udWxsKXMuZT1z
-LmY9cgplbHNle3Q9cy5mCnIuYz10CnMuZj10LmI9cn0rK3MuYQpzLlMoKQpyZXR1cm4gcn0sCkdTOmZ1
-bmN0aW9uKGEpe3ZhciB0PXRoaXMscz1hLmMscj1hLmIKaWYocz09bnVsbCl0LmU9cgplbHNlIHMuYj1y
-CmlmKHI9PW51bGwpdC5mPXMKZWxzZSByLmM9czstLXQuYQp0LlMoKX0sCk46ZnVuY3Rpb24oYSl7cmV0
-dXJuIEouaGYoYSkmMTA3Mzc0MTgyM30sCkRGOmZ1bmN0aW9uKGEsYil7dmFyIHQscwppZihhPT1udWxs
-KXJldHVybi0xCnQ9YS5sZW5ndGgKZm9yKHM9MDtzPHQ7KytzKWlmKEouUk0oYVtzXS5hLGIpKXJldHVy
-biBzCnJldHVybi0xfX0KUC5ibi5wcm90b3R5cGU9e30KUC5sbS5wcm90b3R5cGU9ewpnbDpmdW5jdGlv
-bigpe3JldHVybiB0aGlzLmR9LApGOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxzPXQuYQppZih0LmIhPT1z
-LnIpdGhyb3cgSC5iKFAuYTQocykpCmVsc2V7cz10LmMKaWYocz09bnVsbCl7dC5zaihudWxsKQpyZXR1
-cm4hMX1lbHNle3Quc2oodC4kdGkuZC5iKHMuYSkpCnQuYz10LmMuYgpyZXR1cm4hMH19fSwKc2o6ZnVu
-Y3Rpb24oYSl7dGhpcy5kPXRoaXMuJHRpLmQuYihhKX0sCiRpQW46MX0KUC5tVy5wcm90b3R5cGU9e30K
-UC5MVS5wcm90b3R5cGU9eyRpY1g6MSwkaXpNOjF9ClAubEQucHJvdG90eXBlPXsKZ2t6OmZ1bmN0aW9u
-KGEpe3JldHVybiBuZXcgSC5hNyhhLHRoaXMuZ0EoYSksSC56SyhhKS5DKCJhNzxsRC5FPiIpKX0sCkU6
-ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5xKGEsYil9LApLOmZ1bmN0aW9uKGEsYil7dmFyIHQscwpI
-LnpLKGEpLkMoIn4obEQuRSkiKS5iKGIpCnQ9dGhpcy5nQShhKQpmb3Iocz0wO3M8dDsrK3Mpe2IuJDEo
-dGhpcy5xKGEscykpCmlmKHQhPT10aGlzLmdBKGEpKXRocm93IEguYihQLmE0KGEpKX19LApFMjpmdW5j
-dGlvbihhLGIsYyl7dmFyIHQ9SC56SyhhKQpyZXR1cm4gbmV3IEguQTgoYSx0LktxKGMpLkMoIjEobEQu
-RSkiKS5iKGIpLHQuQygiQDxsRC5FPiIpLktxKGMpLkMoIkE4PDEsMj4iKSl9LApkdTpmdW5jdGlvbihh
-LGIsYyxkKXt2YXIgdApILnpLKGEpLkMoImxELkUiKS5iKGQpClAuakIoYixjLHRoaXMuZ0EoYSkpCmZv
-cih0PWI7dDxjOysrdCl0aGlzLlkoYSx0LGQpfSwKdzpmdW5jdGlvbihhKXtyZXR1cm4gUC5XRShhLCJb
-IiwiXSIpfX0KUC5pbC5wcm90b3R5cGU9e30KUC5HQS5wcm90b3R5cGU9ewokMjpmdW5jdGlvbihhLGIp
-e3ZhciB0LHM9dGhpcy5hCmlmKCFzLmEpdGhpcy5iLmErPSIsICIKcy5hPSExCnM9dGhpcy5iCnQ9cy5h
-Kz1ILmQoYSkKcy5hPXQrIjogIgpzLmErPUguZChiKX0sCiRTOjF9ClAuWWsucHJvdG90eXBlPXsKSzpm
-dW5jdGlvbihhLGIpe3ZhciB0LHMKSC5MaCh0aGlzKS5DKCJ+KFlrLkssWWsuVikiKS5iKGIpCmZvcih0
-PUouSVQodGhpcy5nVigpKTt0LkYoKTspe3M9dC5nbCgpCmIuJDIocyx0aGlzLnEoMCxzKSl9fSwKZ0E6
-ZnVuY3Rpb24oYSl7cmV0dXJuIEouSG0odGhpcy5nVigpKX0sCnc6ZnVuY3Rpb24oYSl7cmV0dXJuIFAu
-bk8odGhpcyl9LAokaVowOjF9ClAuS1AucHJvdG90eXBlPXsKWTpmdW5jdGlvbihhLGIsYyl7dmFyIHQ9
-SC5MaCh0aGlzKQp0LmQuYihiKQp0LmNoWzFdLmIoYykKdGhyb3cgSC5iKFAuTDQoIkNhbm5vdCBtb2Rp
-ZnkgdW5tb2RpZmlhYmxlIG1hcCIpKX19ClAuUG4ucHJvdG90eXBlPXsKcTpmdW5jdGlvbihhLGIpe3Jl
-dHVybiB0aGlzLmEucSgwLGIpfSwKWTpmdW5jdGlvbihhLGIsYyl7dmFyIHQ9SC5MaCh0aGlzKQp0aGlz
-LmEuWSgwLHQuZC5iKGIpLHQuY2hbMV0uYihjKSl9LApLOmZ1bmN0aW9uKGEsYil7dGhpcy5hLksoMCxI
-LkxoKHRoaXMpLkMoIn4oMSwyKSIpLmIoYikpfSwKZ0E6ZnVuY3Rpb24oYSl7dmFyIHQ9dGhpcy5hCnJl
-dHVybiB0LmdBKHQpfSwKdzpmdW5jdGlvbihhKXtyZXR1cm4gSi5qKHRoaXMuYSl9LAokaVowOjF9ClAu
-R2oucHJvdG90eXBlPXt9ClAubGYucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXtyZXR1cm4gUC5XRSh0
-aGlzLCJ7IiwifSIpfX0KUC5Wai5wcm90b3R5cGU9eyRpY1g6MSwkaXh1OjF9ClAuWHYucHJvdG90eXBl
-PXsKRlY6ZnVuY3Rpb24oYSxiKXt2YXIgdApmb3IodD1KLklUKEguTGgodGhpcykuQygiY1g8MT4iKS5i
-KGIpKTt0LkYoKTspdGhpcy5pKDAsdC5nbCgpKX0sCnc6ZnVuY3Rpb24oYSl7cmV0dXJuIFAuV0UodGhp
-cywieyIsIn0iKX0sCkg6ZnVuY3Rpb24oYSxiKXt2YXIgdCxzPVAucmoodGhpcyx0aGlzLnIsSC5MaCh0
-aGlzKS5kKQppZighcy5GKCkpcmV0dXJuIiIKaWYoYj09PSIiKXt0PSIiCmRvIHQrPUguZChzLmQpCndo
-aWxlKHMuRigpKX1lbHNle3Q9SC5kKHMuZCkKZm9yKDtzLkYoKTspdD10K2IrSC5kKHMuZCl9cmV0dXJu
-IHQuY2hhckNvZGVBdCgwKT09MD90OnR9LAokaWNYOjEsCiRpeHU6MX0KUC5uWS5wcm90b3R5cGU9e30K
-UC5XWS5wcm90b3R5cGU9e30KUC5SVS5wcm90b3R5cGU9e30KUC51dy5wcm90b3R5cGU9ewpxOmZ1bmN0
-aW9uKGEsYil7dmFyIHQscz10aGlzLmIKaWYocz09bnVsbClyZXR1cm4gdGhpcy5jLnEoMCxiKQplbHNl
-IGlmKHR5cGVvZiBiIT0ic3RyaW5nIilyZXR1cm4KZWxzZXt0PXNbYl0KcmV0dXJuIHR5cGVvZiB0PT0i
-dW5kZWZpbmVkIj90aGlzLmZiKGIpOnR9fSwKZ0E6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYj09bnVs
-bD90aGlzLmMuYTp0aGlzLkNmKCkubGVuZ3RofSwKZ1Y6ZnVuY3Rpb24oKXtpZih0aGlzLmI9PW51bGwp
-e3ZhciB0PXRoaXMuYwpyZXR1cm4gbmV3IEguaTUodCxILkxoKHQpLkMoImk1PDE+IikpfXJldHVybiBu
-ZXcgUC5pOCh0aGlzKX0sClk6ZnVuY3Rpb24oYSxiLGMpe3ZhciB0LHMscj10aGlzCmlmKHIuYj09bnVs
-bClyLmMuWSgwLGIsYykKZWxzZSBpZihyLng0KGIpKXt0PXIuYgp0W2JdPWMKcz1yLmEKaWYocz09bnVs
-bD90IT1udWxsOnMhPT10KXNbYl09bnVsbH1lbHNlIHIuWEsoKS5ZKDAsYixjKX0sCng0OmZ1bmN0aW9u
-KGEpe2lmKHRoaXMuYj09bnVsbClyZXR1cm4gdGhpcy5jLng0KGEpCnJldHVybiBPYmplY3QucHJvdG90
-eXBlLmhhc093blByb3BlcnR5LmNhbGwodGhpcy5hLGEpfSwKSzpmdW5jdGlvbihhLGIpe3ZhciB0LHMs
-cixxLHA9dGhpcwp1LmNBLmIoYikKaWYocC5iPT1udWxsKXJldHVybiBwLmMuSygwLGIpCnQ9cC5DZigp
-CmZvcihzPTA7czx0Lmxlbmd0aDsrK3Mpe3I9dFtzXQpxPXAuYltyXQppZih0eXBlb2YgcT09InVuZGVm
-aW5lZCIpe3E9UC5RZShwLmFbcl0pCnAuYltyXT1xfWIuJDIocixxKQppZih0IT09cC5jKXRocm93IEgu
-YihQLmE0KHApKX19LApDZjpmdW5jdGlvbigpe3ZhciB0PXUuai5iKHRoaXMuYykKaWYodD09bnVsbCl0
-PXRoaXMuYz1ILlZNKE9iamVjdC5rZXlzKHRoaXMuYSksdS5zKQpyZXR1cm4gdH0sClhLOmZ1bmN0aW9u
-KCl7dmFyIHQscyxyLHEscCxvPXRoaXMKaWYoby5iPT1udWxsKXJldHVybiBvLmMKdD1QLkZsKHUuTix1
-LnopCnM9by5DZigpCmZvcihyPTA7cT1zLmxlbmd0aCxyPHE7KytyKXtwPXNbcl0KdC5ZKDAscCxvLnEo
-MCxwKSl9aWYocT09PTApQy5ObS5pKHMsbnVsbCkKZWxzZSBDLk5tLnNBKHMsMCkKby5hPW8uYj1udWxs
-CnJldHVybiBvLmM9dH0sCmZiOmZ1bmN0aW9uKGEpe3ZhciB0CmlmKCFPYmplY3QucHJvdG90eXBlLmhh
-c093blByb3BlcnR5LmNhbGwodGhpcy5hLGEpKXJldHVybgp0PVAuUWUodGhpcy5hW2FdKQpyZXR1cm4g
-dGhpcy5iW2FdPXR9fQpQLmk4LnByb3RvdHlwZT17CmdBOmZ1bmN0aW9uKGEpe3ZhciB0PXRoaXMuYQpy
-ZXR1cm4gdC5nQSh0KX0sCkU6ZnVuY3Rpb24oYSxiKXt2YXIgdD10aGlzLmEKaWYodC5iPT1udWxsKXQ9
-dC5nVigpLkUoMCxiKQplbHNle3Q9dC5DZigpCmlmKGI8MHx8Yj49dC5sZW5ndGgpcmV0dXJuIEguT0go
-dCxiKQp0PXRbYl19cmV0dXJuIHR9LApna3o6ZnVuY3Rpb24oYSl7dmFyIHQ9dGhpcy5hCmlmKHQuYj09
-bnVsbCl7dD10LmdWKCkKdD10Lmdreih0KX1lbHNle3Q9dC5DZigpCnQ9bmV3IEoubTEodCx0Lmxlbmd0
-aCxILnQ2KHQpLkMoIm0xPDE+IikpfXJldHVybiB0fX0KUC5DVi5wcm90b3R5cGU9ewp5cjpmdW5jdGlv
-bihhLGEwLGExKXt2YXIgdCxzLHIscSxwLG8sbixtLGwsayxqLGksaCxnLGYsZSxkLGMsYj0iSW52YWxp
-ZCBiYXNlNjQgZW5jb2RpbmcgbGVuZ3RoICIKYTE9UC5qQihhMCxhMSxhLmxlbmd0aCkKdD0kLlY3KCkK
-Zm9yKHM9YTAscj1zLHE9bnVsbCxwPS0xLG89LTEsbj0wO3M8YTE7cz1tKXttPXMrMQpsPUMueEIuVyhh
-LHMpCmlmKGw9PT0zNyl7az1tKzIKaWYoazw9YTEpe2o9SC5vbyhDLnhCLlcoYSxtKSkKaT1ILm9vKEMu
-eEIuVyhhLG0rMSkpCmg9aioxNitpLShpJjI1NikKaWYoaD09PTM3KWg9LTEKbT1rfWVsc2UgaD0tMX1l
-bHNlIGg9bAppZigwPD1oJiZoPD0xMjcpe2lmKGg8MHx8aD49dC5sZW5ndGgpcmV0dXJuIEguT0godCxo
-KQpnPXRbaF0KaWYoZz49MCl7aD1DLnhCLm0oIkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVm
-Z2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky8iLGcpCmlmKGg9PT1sKWNvbnRpbnVlCmw9aH1l
-bHNle2lmKGc9PT0tMSl7aWYocDwwKXtmPXE9PW51bGw/bnVsbDpxLmEubGVuZ3RoCmlmKGY9PW51bGwp
-Zj0wCnA9Zisocy1yKQpvPXN9KytuCmlmKGw9PT02MSljb250aW51ZX1sPWh9aWYoZyE9PS0yKXtpZihx
-PT1udWxsKXE9bmV3IFAuUm4oIiIpCnEuYSs9Qy54Qi5OaihhLHIscykKcS5hKz1ILkx3KGwpCnI9bQpj
-b250aW51ZX19dGhyb3cgSC5iKFAucnIoIkludmFsaWQgYmFzZTY0IGRhdGEiLGEscykpfWlmKHEhPW51
-bGwpe2Y9cS5hKz1DLnhCLk5qKGEscixhMSkKZT1mLmxlbmd0aAppZihwPj0wKVAueE0oYSxvLGExLHAs
-bixlKQplbHNle2Q9Qy5qbi56WShlLTEsNCkrMQppZihkPT09MSl0aHJvdyBILmIoUC5ycihiLGEsYTEp
-KQpmb3IoO2Q8NDspe2YrPSI9IgpxLmE9ZjsrK2R9fWY9cS5hCnJldHVybiBDLnhCLmk3KGEsYTAsYTEs
-Zi5jaGFyQ29kZUF0KDApPT0wP2Y6Zil9Yz1hMS1hMAppZihwPj0wKVAueE0oYSxvLGExLHAsbixjKQpl
-bHNle2Q9Qy5qbi56WShjLDQpCmlmKGQ9PT0xKXRocm93IEguYihQLnJyKGIsYSxhMSkpCmlmKGQ+MSlh
-PUMueEIuaTcoYSxhMSxhMSxkPT09Mj8iPT0iOiI9Iil9cmV0dXJuIGF9fQpQLlU4LnByb3RvdHlwZT17
-fQpQLlVrLnByb3RvdHlwZT17fQpQLndJLnByb3RvdHlwZT17fQpQLlppLnByb3RvdHlwZT17fQpQLmJ5
-LnByb3RvdHlwZT17CnBXOmZ1bmN0aW9uKGEsYixjKXt2YXIgdAp1LmVwLmIoYykKdD1QLkJTKGIsdGhp
-cy5nSGUoKS5hKQpyZXR1cm4gdH0sCmdIZTpmdW5jdGlvbigpe3JldHVybiBDLkEzfX0KUC5NeC5wcm90
-b3R5cGU9e30KUC51NS5wcm90b3R5cGU9ewpnWkU6ZnVuY3Rpb24oKXtyZXR1cm4gQy5Ra319ClAuRTMu
-cHJvdG90eXBlPXsKV0o6ZnVuY3Rpb24oYSl7dmFyIHQscyxyPVAuakIoMCxudWxsLGEubGVuZ3RoKSxx
-PXItMAppZihxPT09MClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCkKdD1uZXcgVWludDhBcnJheShxKjMp
-CnM9bmV3IFAuUncodCkKaWYocy5HeChhLDAscikhPT1yKXMuTzYoSi5hNihhLHItMSksMCkKcmV0dXJu
-IG5ldyBVaW50OEFycmF5KHQuc3ViYXJyYXkoMCxILnJNKDAscy5iLHQubGVuZ3RoKSkpfX0KUC5Sdy5w
-cm90b3R5cGU9ewpPNjpmdW5jdGlvbihhLGIpe3ZhciB0LHM9dGhpcyxyPXMuYyxxPXMuYixwPXErMSxv
-PXIubGVuZ3RoCmlmKChiJjY0NTEyKT09PTU2MzIwKXt0PTY1NTM2KygoYSYxMDIzKTw8MTApfGImMTAy
-MwpzLmI9cAppZihxPj1vKXJldHVybiBILk9IKHIscSkKcltxXT0yNDB8dD4+PjE4CnE9cy5iPXArMQpp
-ZihwPj1vKXJldHVybiBILk9IKHIscCkKcltwXT0xMjh8dD4+PjEyJjYzCnA9cy5iPXErMQppZihxPj1v
-KXJldHVybiBILk9IKHIscSkKcltxXT0xMjh8dD4+PjYmNjMKcy5iPXArMQppZihwPj1vKXJldHVybiBI
-Lk9IKHIscCkKcltwXT0xMjh8dCY2MwpyZXR1cm4hMH1lbHNle3MuYj1wCmlmKHE+PW8pcmV0dXJuIEgu
-T0gocixxKQpyW3FdPTIyNHxhPj4+MTIKcT1zLmI9cCsxCmlmKHA+PW8pcmV0dXJuIEguT0gocixwKQpy
-W3BdPTEyOHxhPj4+NiY2MwpzLmI9cSsxCmlmKHE+PW8pcmV0dXJuIEguT0gocixxKQpyW3FdPTEyOHxh
-JjYzCnJldHVybiExfX0sCkd4OmZ1bmN0aW9uKGEsYixjKXt2YXIgdCxzLHIscSxwLG8sbixtPXRoaXMK
-aWYoYiE9PWMmJihDLnhCLm0oYSxjLTEpJjY0NTEyKT09PTU1Mjk2KS0tYwpmb3IodD1tLmMscz10Lmxl
-bmd0aCxyPWI7cjxjOysrcil7cT1DLnhCLlcoYSxyKQppZihxPD0xMjcpe3A9bS5iCmlmKHA+PXMpYnJl
-YWsKbS5iPXArMQp0W3BdPXF9ZWxzZSBpZigocSY2NDUxMik9PT01NTI5Nil7aWYobS5iKzM+PXMpYnJl
-YWsKbz1yKzEKaWYobS5PNihxLEMueEIuVyhhLG8pKSlyPW99ZWxzZSBpZihxPD0yMDQ3KXtwPW0uYgpu
-PXArMQppZihuPj1zKWJyZWFrCm0uYj1uCmlmKHA+PXMpcmV0dXJuIEguT0godCxwKQp0W3BdPTE5Mnxx
-Pj4+NgptLmI9bisxCnRbbl09MTI4fHEmNjN9ZWxzZXtwPW0uYgppZihwKzI+PXMpYnJlYWsKbj1tLmI9
-cCsxCmlmKHA+PXMpcmV0dXJuIEguT0godCxwKQp0W3BdPTIyNHxxPj4+MTIKcD1tLmI9bisxCmlmKG4+
-PXMpcmV0dXJuIEguT0godCxuKQp0W25dPTEyOHxxPj4+NiY2MwptLmI9cCsxCmlmKHA+PXMpcmV0dXJu
-IEguT0godCxwKQp0W3BdPTEyOHxxJjYzfX1yZXR1cm4gcn19ClAuR1kucHJvdG90eXBlPXsKV0o6ZnVu
-Y3Rpb24oYSl7dmFyIHQscyxyLHEscCxvLG4sbSxsCnUuTC5iKGEpCnQ9UC5reSghMSxhLDAsbnVsbCkK
-aWYodCE9bnVsbClyZXR1cm4gdApzPVAuakIoMCxudWxsLEouSG0oYSkpCnI9UC53RyhhLDAscykKaWYo
-cj4wKXtxPVAuSE0oYSwwLHIpCmlmKHI9PT1zKXJldHVybiBxCnA9bmV3IFAuUm4ocSkKbz1yCm49ITF9
-ZWxzZXtvPTAKcD1udWxsCm49ITB9aWYocD09bnVsbClwPW5ldyBQLlJuKCIiKQptPW5ldyBQLmJ6KCEx
-LHApCm0uYz1uCm0uTUUoYSxvLHMpCmlmKG0uZT4wKXtILnZoKFAucnIoIlVuZmluaXNoZWQgVVRGLTgg
-b2N0ZXQgc2VxdWVuY2UiLGEscykpCnAuYSs9SC5Mdyg2NTUzMykKbS5mPW0uZT1tLmQ9MH1sPXAuYQpy
-ZXR1cm4gbC5jaGFyQ29kZUF0KDApPT0wP2w6bH19ClAuYnoucHJvdG90eXBlPXsKTUU6ZnVuY3Rpb24o
-YSxiLGMpe3ZhciB0LHMscixxLHAsbyxuLG0sbCxrLGosaSxoPXRoaXMsZz0iQmFkIFVURi04IGVuY29k
-aW5nIDB4Igp1LkwuYihhKQp0PWguZApzPWguZQpyPWguZgpoLmY9aC5lPWguZD0wCiRsYWJlbDAkMDpm
-b3IocT1KLlU2KGEpLHA9aC5iLG89YjshMDtvPWopeyRsYWJlbDEkMTppZihzPjApe2Rve2lmKG89PT1j
-KWJyZWFrICRsYWJlbDAkMApuPXEucShhLG8pCmlmKHR5cGVvZiBuIT09Im51bWJlciIpcmV0dXJuIG4u
-ek0oKQppZigobiYxOTIpIT09MTI4KXttPVAucnIoZytDLmpuLldaKG4sMTYpLGEsbykKdGhyb3cgSC5i
-KG0pfWVsc2V7dD0odDw8NnxuJjYzKT4+PjA7LS1zOysrb319d2hpbGUocz4wKQptPXItMQppZihtPDB8
-fG0+PTQpcmV0dXJuIEguT0goQy5HYixtKQppZih0PD1DLkdiW21dKXttPVAucnIoIk92ZXJsb25nIGVu
-Y29kaW5nIG9mIDB4IitDLmpuLldaKHQsMTYpLGEsby1yLTEpCnRocm93IEguYihtKX1pZih0PjExMTQx
-MTEpe209UC5ycigiQ2hhcmFjdGVyIG91dHNpZGUgdmFsaWQgVW5pY29kZSByYW5nZTogMHgiK0Muam4u
-V1oodCwxNiksYSxvLXItMSkKdGhyb3cgSC5iKG0pfWlmKCFoLmN8fHQhPT02NTI3OSlwLmErPUguTHco
-dCkKaC5jPSExfWZvcihtPW88YzttOyl7bD1QLndHKGEsbyxjKQppZihsPjApe2guYz0hMQprPW8rbApw
-LmErPVAuSE0oYSxvLGspCmlmKGs9PT1jKWJyZWFrfWVsc2Ugaz1vCmo9aysxCm49cS5xKGEsaykKaWYo
-dHlwZW9mIG4hPT0ibnVtYmVyIilyZXR1cm4gbi5KKCkKaWYobjwwKXtpPVAucnIoIk5lZ2F0aXZlIFVU
-Ri04IGNvZGUgdW5pdDogLTB4IitDLmpuLldaKC1uLDE2KSxhLGotMSkKdGhyb3cgSC5iKGkpfWVsc2V7
-aWYoKG4mMjI0KT09PTE5Mil7dD1uJjMxCnM9MQpyPTEKY29udGludWUgJGxhYmVsMCQwfWlmKChuJjI0
-MCk9PT0yMjQpe3Q9biYxNQpzPTIKcj0yCmNvbnRpbnVlICRsYWJlbDAkMH1pZigobiYyNDgpPT09MjQw
-JiZuPDI0NSl7dD1uJjcKcz0zCnI9Mwpjb250aW51ZSAkbGFiZWwwJDB9aT1QLnJyKGcrQy5qbi5XWihu
-LDE2KSxhLGotMSkKdGhyb3cgSC5iKGkpfX1icmVhayAkbGFiZWwwJDB9aWYocz4wKXtoLmQ9dApoLmU9
-cwpoLmY9cn19fQpQLldGLnByb3RvdHlwZT17CiQyOmZ1bmN0aW9uKGEsYil7dmFyIHQscyxyCnUuZm8u
-YihhKQp0PXRoaXMuYgpzPXRoaXMuYQp0LmErPXMuYQpyPXQuYSs9SC5kKGEuYSkKdC5hPXIrIjogIgp0
-LmErPVAucChiKQpzLmE9IiwgIn0sCiRTOjE4fQpQLmEyLnByb3RvdHlwZT17fQpQLmlQLnByb3RvdHlw
-ZT17CkROOmZ1bmN0aW9uKGEsYil7aWYoYj09bnVsbClyZXR1cm4hMQpyZXR1cm4gYiBpbnN0YW5jZW9m
-IFAuaVAmJnRoaXMuYT09PWIuYSYmITB9LApnaU86ZnVuY3Rpb24oYSl7dmFyIHQ9dGhpcy5hCnJldHVy
-bih0XkMuam4ud0codCwzMCkpJjEwNzM3NDE4MjN9LAp3OmZ1bmN0aW9uKGEpe3ZhciB0PXRoaXMscz1Q
-LkdxKEgudEoodCkpLHI9UC5oMChILk5TKHQpKSxxPVAuaDAoSC5qQSh0KSkscD1QLmgwKEguS0wodCkp
-LG89UC5oMChILmNoKHQpKSxuPVAuaDAoSC5KZCh0KSksbT1QLlZ4KEgubzEodCkpLGw9cysiLSIrcisi
-LSIrcSsiICIrcCsiOiIrbysiOiIrbisiLiIrbQpyZXR1cm4gbH19ClAuQ1AucHJvdG90eXBlPXt9ClAu
-WFMucHJvdG90eXBlPXt9ClAuQzYucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXt2YXIgdD10aGlzLmEK
-aWYodCE9bnVsbClyZXR1cm4iQXNzZXJ0aW9uIGZhaWxlZDogIitQLnAodCkKcmV0dXJuIkFzc2VydGlv
-biBmYWlsZWQifX0KUC5uLnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7cmV0dXJuIlRocm93IG9mIG51
-bGwuIn19ClAudS5wcm90b3R5cGU9ewpnWjpmdW5jdGlvbigpe3JldHVybiJJbnZhbGlkIGFyZ3VtZW50
-IisoIXRoaXMuYT8iKHMpIjoiIil9LApndTpmdW5jdGlvbigpe3JldHVybiIifSwKdzpmdW5jdGlvbihh
-KXt2YXIgdCxzLHIscSxwPXRoaXMsbz1wLmMsbj1vIT1udWxsPyIgKCIrbysiKSI6IiIKbz1wLmQKdD1v
-PT1udWxsPyIiOiI6ICIrSC5kKG8pCnM9cC5nWigpK24rdAppZighcC5hKXJldHVybiBzCnI9cC5ndSgp
-CnE9UC5wKHAuYikKcmV0dXJuIHMrcisiOiAiK3F9fQpQLmJKLnByb3RvdHlwZT17CmdaOmZ1bmN0aW9u
-KCl7cmV0dXJuIlJhbmdlRXJyb3IifSwKZ3U6ZnVuY3Rpb24oKXt2YXIgdCxzLHI9dGhpcy5lCmlmKHI9
-PW51bGwpe3I9dGhpcy5mCnQ9ciE9bnVsbD8iOiBOb3QgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICIrSC5k
-KHIpOiIifWVsc2V7cz10aGlzLmYKaWYocz09bnVsbCl0PSI6IE5vdCBncmVhdGVyIHRoYW4gb3IgZXF1
-YWwgdG8gIitILmQocikKZWxzZSBpZihzPnIpdD0iOiBOb3QgaW4gcmFuZ2UgIitILmQocikrIi4uIitI
-LmQocykrIiwgaW5jbHVzaXZlIgplbHNlIHQ9czxyPyI6IFZhbGlkIHZhbHVlIHJhbmdlIGlzIGVtcHR5
-IjoiOiBPbmx5IHZhbGlkIHZhbHVlIGlzICIrSC5kKHIpfXJldHVybiB0fX0KUC5lWS5wcm90b3R5cGU9
-ewpnWjpmdW5jdGlvbigpe3JldHVybiJSYW5nZUVycm9yIn0sCmd1OmZ1bmN0aW9uKCl7dmFyIHQscz1I
-LlNjKHRoaXMuYikKaWYodHlwZW9mIHMhPT0ibnVtYmVyIilyZXR1cm4gcy5KKCkKaWYoczwwKXJldHVy
-biI6IGluZGV4IG11c3Qgbm90IGJlIG5lZ2F0aXZlIgp0PXRoaXMuZgppZih0PT09MClyZXR1cm4iOiBu
-byBpbmRpY2VzIGFyZSB2YWxpZCIKcmV0dXJuIjogaW5kZXggc2hvdWxkIGJlIGxlc3MgdGhhbiAiK0gu
-ZCh0KX0sCmdBOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmZ9fQpQLm1wLnByb3RvdHlwZT17Cnc6ZnVu
-Y3Rpb24oYSl7dmFyIHQscyxyLHEscCxvLG4sbSxsPXRoaXMsaz17fSxqPW5ldyBQLlJuKCIiKQprLmE9
-IiIKZm9yKHQ9bC5jLHM9dC5sZW5ndGgscj0wLHE9IiIscD0iIjtyPHM7KytyLHA9IiwgIil7bz10W3Jd
-CmouYT1xK3AKcT1qLmErPVAucChvKQprLmE9IiwgIn1sLmQuSygwLG5ldyBQLldGKGssaikpCm49UC5w
-KGwuYSkKbT1qLncoMCkKdD0iTm9TdWNoTWV0aG9kRXJyb3I6IG1ldGhvZCBub3QgZm91bmQ6ICciK0gu
-ZChsLmIuYSkrIidcblJlY2VpdmVyOiAiK24rIlxuQXJndW1lbnRzOiBbIittKyJdIgpyZXR1cm4gdH19
-ClAudWIucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXtyZXR1cm4iVW5zdXBwb3J0ZWQgb3BlcmF0aW9u
-OiAiK3RoaXMuYX19ClAuZHMucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXt2YXIgdD10aGlzLmEKcmV0
-dXJuIHQhPW51bGw/IlVuaW1wbGVtZW50ZWRFcnJvcjogIit0OiJVbmltcGxlbWVudGVkRXJyb3IifX0K
-UC5sai5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3JldHVybiJCYWQgc3RhdGU6ICIrdGhpcy5hfX0K
-UC5VVi5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3ZhciB0PXRoaXMuYQppZih0PT1udWxsKXJldHVy
-biJDb25jdXJyZW50IG1vZGlmaWNhdGlvbiBkdXJpbmcgaXRlcmF0aW9uLiIKcmV0dXJuIkNvbmN1cnJl
-bnQgbW9kaWZpY2F0aW9uIGR1cmluZyBpdGVyYXRpb246ICIrUC5wKHQpKyIuIn19ClAuazUucHJvdG90
-eXBlPXsKdzpmdW5jdGlvbihhKXtyZXR1cm4iT3V0IG9mIE1lbW9yeSJ9LAokaVhTOjF9ClAuS1kucHJv
-dG90eXBlPXsKdzpmdW5jdGlvbihhKXtyZXR1cm4iU3RhY2sgT3ZlcmZsb3cifSwKJGlYUzoxfQpQLmMu
-cHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXt2YXIgdD10aGlzLmEKcmV0dXJuIHQ9PW51bGw/IlJlYWRp
-bmcgc3RhdGljIHZhcmlhYmxlIGR1cmluZyBpdHMgaW5pdGlhbGl6YXRpb24iOiJSZWFkaW5nIHN0YXRp
-YyB2YXJpYWJsZSAnIit0KyInIGR1cmluZyBpdHMgaW5pdGlhbGl6YXRpb24ifX0KUC5DRC5wcm90b3R5
-cGU9ewp3OmZ1bmN0aW9uKGEpe3JldHVybiJFeGNlcHRpb246ICIrdGhpcy5hfX0KUC5hRS5wcm90b3R5
-cGU9ewp3OmZ1bmN0aW9uKGEpe3ZhciB0LHMscixxLHAsbyxuLG0sbCxrLGosaSxoPXRoaXMuYSxnPWgh
-PW51bGwmJiIiIT09aD8iRm9ybWF0RXhjZXB0aW9uOiAiK0guZChoKToiRm9ybWF0RXhjZXB0aW9uIixm
-PXRoaXMuYyxlPXRoaXMuYgppZih0eXBlb2YgZT09InN0cmluZyIpe2lmKGYhPW51bGwpaD1mPDB8fGY+
-ZS5sZW5ndGgKZWxzZSBoPSExCmlmKGgpZj1udWxsCmlmKGY9PW51bGwpe3Q9ZS5sZW5ndGg+Nzg/Qy54
-Qi5OaihlLDAsNzUpKyIuLi4iOmUKcmV0dXJuIGcrIlxuIit0fWZvcihzPTEscj0wLHE9ITEscD0wO3A8
-ZjsrK3Ape289Qy54Qi5XKGUscCkKaWYobz09PTEwKXtpZihyIT09cHx8IXEpKytzCnI9cCsxCnE9ITF9
-ZWxzZSBpZihvPT09MTMpeysrcwpyPXArMQpxPSEwfX1nPXM+MT9nKygiIChhdCBsaW5lICIrcysiLCBj
-aGFyYWN0ZXIgIisoZi1yKzEpKyIpXG4iKTpnKygiIChhdCBjaGFyYWN0ZXIgIisoZisxKSsiKVxuIikK
-bj1lLmxlbmd0aApmb3IocD1mO3A8bjsrK3Ape289Qy54Qi5tKGUscCkKaWYobz09PTEwfHxvPT09MTMp
-e249cApicmVha319aWYobi1yPjc4KWlmKGYtcjw3NSl7bT1yKzc1Cmw9cgprPSIiCmo9Ii4uLiJ9ZWxz
-ZXtpZihuLWY8NzUpe2w9bi03NQptPW4Kaj0iIn1lbHNle2w9Zi0zNgptPWYrMzYKaj0iLi4uIn1rPSIu
-Li4ifWVsc2V7bT1uCmw9cgprPSIiCmo9IiJ9aT1DLnhCLk5qKGUsbCxtKQpyZXR1cm4gZytrK2kraisi
-XG4iK0MueEIuSXgoIiAiLGYtbCtrLmxlbmd0aCkrIl5cbiJ9ZWxzZSByZXR1cm4gZiE9bnVsbD9nKygi
-IChhdCBvZmZzZXQgIitILmQoZikrIikiKTpnfX0KUC5FSC5wcm90b3R5cGU9e30KUC5LTi5wcm90b3R5
-cGU9e30KUC5jWC5wcm90b3R5cGU9ewpldjpmdW5jdGlvbihhLGIpe3ZhciB0PUguTGgodGhpcykKcmV0
-dXJuIG5ldyBILlU1KHRoaXMsdC5DKCJhMihjWC5FKSIpLmIoYiksdC5DKCJVNTxjWC5FPiIpKX0sCmdB
-OmZ1bmN0aW9uKGEpe3ZhciB0LHM9dGhpcy5na3oodGhpcykKZm9yKHQ9MDtzLkYoKTspKyt0CnJldHVy
-biB0fSwKZ2wwOmZ1bmN0aW9uKGEpe3JldHVybiF0aGlzLmdreih0aGlzKS5GKCl9LApncjg6ZnVuY3Rp
-b24oYSl7dmFyIHQscz10aGlzLmdreih0aGlzKQppZighcy5GKCkpdGhyb3cgSC5iKEguV3AoKSkKdD1z
-LmdsKCkKaWYocy5GKCkpdGhyb3cgSC5iKEguZFUoKSkKcmV0dXJuIHR9LApFOmZ1bmN0aW9uKGEsYil7
-dmFyIHQscyxyClAuazEoYiwiaW5kZXgiKQpmb3IodD10aGlzLmdreih0aGlzKSxzPTA7dC5GKCk7KXty
-PXQuZ2woKQppZihiPT09cylyZXR1cm4gcjsrK3N9dGhyb3cgSC5iKFAuQ2YoYix0aGlzLCJpbmRleCIs
-bnVsbCxzKSl9LAp3OmZ1bmN0aW9uKGEpe3JldHVybiBQLkVQKHRoaXMsIigiLCIpIil9fQpQLkFuLnBy
-b3RvdHlwZT17fQpQLnpNLnByb3RvdHlwZT17JGljWDoxfQpQLlowLnByb3RvdHlwZT17fQpQLmM4LnBy
-b3RvdHlwZT17CmdpTzpmdW5jdGlvbihhKXtyZXR1cm4gUC5rLnByb3RvdHlwZS5naU8uY2FsbCh0aGlz
-LHRoaXMpfSwKdzpmdW5jdGlvbihhKXtyZXR1cm4ibnVsbCJ9fQpQLkZLLnByb3RvdHlwZT17fQpQLmsu
-cHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpQLmssJGlrOjEsCkROOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRo
-aXM9PT1ifSwKZ2lPOmZ1bmN0aW9uKGEpe3JldHVybiBILmVRKHRoaXMpfSwKdzpmdW5jdGlvbihhKXty
-ZXR1cm4iSW5zdGFuY2Ugb2YgJyIrSC5kKEguTSh0aGlzKSkrIicifSwKZTc6ZnVuY3Rpb24oYSxiKXt1
-Lm8uYihiKQp0aHJvdyBILmIoUC5scih0aGlzLGIuZ1dhKCksYi5nbmQoKSxiLmdWbSgpKSl9LAp0b1N0
-cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLncodGhpcyl9fQpQLk9kLnByb3RvdHlwZT17fQpQLmli
-LnByb3RvdHlwZT17JGlPZDoxfQpQLnh1LnByb3RvdHlwZT17fQpQLkd6LnByb3RvdHlwZT17fQpQLnFV
-LnByb3RvdHlwZT17JGl2WDoxfQpQLlJuLnByb3RvdHlwZT17CmdBOmZ1bmN0aW9uKGEpe3JldHVybiB0
-aGlzLmEubGVuZ3RofSwKdzpmdW5jdGlvbihhKXt2YXIgdD10aGlzLmEKcmV0dXJuIHQuY2hhckNvZGVB
-dCgwKT09MD90OnR9LAokaUJMOjF9ClAuR0QucHJvdG90eXBlPXt9ClAubjEucHJvdG90eXBlPXsKJDI6
-ZnVuY3Rpb24oYSxiKXt2YXIgdCxzLHIscQp1LmYuYihhKQpILnkoYikKdD1KLnJZKGIpLk9ZKGIsIj0i
-KQppZih0PT09LTEpe2lmKGIhPT0iIilhLlkoMCxQLmt1KGIsMCxiLmxlbmd0aCx0aGlzLmEsITApLCIi
-KX1lbHNlIGlmKHQhPT0wKXtzPUMueEIuTmooYiwwLHQpCnI9Qy54Qi5HKGIsdCsxKQpxPXRoaXMuYQph
-LlkoMCxQLmt1KHMsMCxzLmxlbmd0aCxxLCEwKSxQLmt1KHIsMCxyLmxlbmd0aCxxLCEwKSl9cmV0dXJu
-IGF9LAokUzo0MH0KUC5jUy5wcm90b3R5cGU9ewokMjpmdW5jdGlvbihhLGIpe3Rocm93IEguYihQLnJy
-KCJJbGxlZ2FsIElQdjQgYWRkcmVzcywgIithLHRoaXMuYSxiKSl9LAokUzo0M30KUC5WQy5wcm90b3R5
-cGU9ewokMjpmdW5jdGlvbihhLGIpe3Rocm93IEguYihQLnJyKCJJbGxlZ2FsIElQdjYgYWRkcmVzcywg
-IithLHRoaXMuYSxiKSl9LAokMTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy4kMihhLG51bGwpfSwKJFM6
-NDR9ClAudHAucHJvdG90eXBlPXsKJDI6ZnVuY3Rpb24oYSxiKXt2YXIgdAppZihiLWE+NCl0aGlzLmEu
-JDIoImFuIElQdjYgcGFydCBjYW4gb25seSBjb250YWluIGEgbWF4aW11bSBvZiA0IGhleCBkaWdpdHMi
-LGEpCnQ9UC5RQShDLnhCLk5qKHRoaXMuYixhLGIpLG51bGwsMTYpCmlmKHR5cGVvZiB0IT09Im51bWJl
-ciIpcmV0dXJuIHQuSigpCmlmKHQ8MHx8dD42NTUzNSl0aGlzLmEuJDIoImVhY2ggcGFydCBtdXN0IGJl
-IGluIHRoZSByYW5nZSBvZiBgMHgwLi4weEZGRkZgIixhKQpyZXR1cm4gdH0sCiRTOjE5fQpQLkRuLnBy
-b3RvdHlwZT17CmdrdTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmJ9LApnSmY6ZnVuY3Rpb24oYSl7dmFy
-IHQ9dGhpcy5jCmlmKHQ9PW51bGwpcmV0dXJuIiIKaWYoQy54Qi5uKHQsIlsiKSlyZXR1cm4gQy54Qi5O
-aih0LDEsdC5sZW5ndGgtMSkKcmV0dXJuIHR9LApndHA6ZnVuY3Rpb24oYSl7dmFyIHQ9dGhpcy5kCmlm
-KHQ9PW51bGwpcmV0dXJuIFAud0sodGhpcy5hKQpyZXR1cm4gdH0sCmd0UDpmdW5jdGlvbigpe3ZhciB0
-PXRoaXMuZgpyZXR1cm4gdD09bnVsbD8iIjp0fSwKZ0thOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yCnJl
-dHVybiB0PT1udWxsPyIiOnR9LApubTpmdW5jdGlvbihhLGIpe3ZhciB0LHMscixxLHAsbyxuLG0sbD10
-aGlzCnUuWC5iKG51bGwpCnUuYi5iKGIpCnQ9bC5hCnM9dD09PSJmaWxlIgpyPWwuYgpxPWwuZApwPWwu
-YwppZighKHAhPW51bGwpKXA9ci5sZW5ndGghPT0wfHxxIT1udWxsfHxzPyIiOm51bGwKbz1sLmUKaWYo
-IXMpbj1wIT1udWxsJiZvLmxlbmd0aCE9PTAKZWxzZSBuPSEwCmlmKG4mJiFDLnhCLm4obywiLyIpKW89
-Ii8iK28KaWYoYiE9bnVsbCltPVAubGUobnVsbCwwLDAsYikKZWxzZSBtPWwuZgpyZXR1cm4gbmV3IFAu
-RG4odCxyLHAscSxvLG0sbC5yKX0sCmdGajpmdW5jdGlvbigpe3ZhciB0LHM9dGhpcy54CmlmKHMhPW51
-bGwpcmV0dXJuIHMKdD10aGlzLmUKaWYodC5sZW5ndGghPT0wJiZDLnhCLlcodCwwKT09PTQ3KXQ9Qy54
-Qi5HKHQsMSkKcz10PT09IiI/Qy5kbjpQLkFGKG5ldyBILkE4KEguVk0odC5zcGxpdCgiLyIpLHUucyks
-dS5kTy5iKFAuUEgoKSksdS5kbyksdS5OKQp0aGlzLnNvNihzKQpyZXR1cm4gc30sCmdoWTpmdW5jdGlv
-bigpe3ZhciB0LHM9dGhpcwppZihzLlE9PW51bGwpe3Q9cy5mCnMuc1JIKG5ldyBQLkdqKFAuV1godD09
-bnVsbD8iIjp0KSx1LlQpKX1yZXR1cm4gcy5RfSwKSmg6ZnVuY3Rpb24oYSxiKXt2YXIgdCxzLHIscSxw
-LG8KZm9yKHQ9MCxzPTA7Qy54Qi5RaShiLCIuLi8iLHMpOyl7cys9MzsrK3R9cj1DLnhCLmNuKGEsIi8i
-KQp3aGlsZSghMCl7aWYoIShyPjAmJnQ+MCkpYnJlYWsKcT1DLnhCLlBrKGEsIi8iLHItMSkKaWYocTww
-KWJyZWFrCnA9ci1xCm89cCE9PTIKaWYoIW98fHA9PT0zKWlmKEMueEIubShhLHErMSk9PT00NilvPSFv
-fHxDLnhCLm0oYSxxKzIpPT09NDYKZWxzZSBvPSExCmVsc2Ugbz0hMQppZihvKWJyZWFrOy0tdApyPXF9
-cmV0dXJuIEMueEIuaTcoYSxyKzEsbnVsbCxDLnhCLkcoYixzLTMqdCkpfSwKWkk6ZnVuY3Rpb24oYSl7
-cmV0dXJuIHRoaXMubVMoUC5oSyhhKSl9LAptUzpmdW5jdGlvbihhKXt2YXIgdCxzLHIscSxwLG8sbixt
-LGwsaz10aGlzLGo9bnVsbAppZihhLmdGaSgpLmxlbmd0aCE9PTApe3Q9YS5nRmkoKQppZihhLmdjaigp
-KXtzPWEuZ2t1KCkKcj1hLmdKZihhKQpxPWEuZ3hBKCk/YS5ndHAoYSk6an1lbHNle3E9agpyPXEKcz0i
-In1wPVAueGUoYS5nSWkoYSkpCm89YS5nUUQoKT9hLmd0UCgpOmp9ZWxzZXt0PWsuYQppZihhLmdjaigp
-KXtzPWEuZ2t1KCkKcj1hLmdKZihhKQpxPVAud0IoYS5neEEoKT9hLmd0cChhKTpqLHQpCnA9UC54ZShh
-LmdJaShhKSkKbz1hLmdRRCgpP2EuZ3RQKCk6an1lbHNle3M9ay5iCnI9ay5jCnE9ay5kCmlmKGEuZ0lp
-KGEpPT09IiIpe3A9ay5lCm89YS5nUUQoKT9hLmd0UCgpOmsuZn1lbHNle2lmKGEuZ3RUKCkpcD1QLnhl
-KGEuZ0lpKGEpKQplbHNle249ay5lCmlmKG4ubGVuZ3RoPT09MClpZihyPT1udWxsKXA9dC5sZW5ndGg9
-PT0wP2EuZ0lpKGEpOlAueGUoYS5nSWkoYSkpCmVsc2UgcD1QLnhlKCIvIithLmdJaShhKSkKZWxzZXtt
-PWsuSmgobixhLmdJaShhKSkKbD10Lmxlbmd0aD09PTAKaWYoIWx8fHIhPW51bGx8fEMueEIubihuLCIv
-IikpcD1QLnhlKG0pCmVsc2UgcD1QLndGKG0sIWx8fHIhPW51bGwpfX1vPWEuZ1FEKCk/YS5ndFAoKTpq
-fX19cmV0dXJuIG5ldyBQLkRuKHQscyxyLHEscCxvLGEuZ1o4KCk/YS5nS2EoKTpqKX0sCmdjajpmdW5j
-dGlvbigpe3JldHVybiB0aGlzLmMhPW51bGx9LApneEE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kIT1u
-dWxsfSwKZ1FEOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZiE9bnVsbH0sCmdaODpmdW5jdGlvbigpe3Jl
-dHVybiB0aGlzLnIhPW51bGx9LApndFQ6ZnVuY3Rpb24oKXtyZXR1cm4gQy54Qi5uKHRoaXMuZSwiLyIp
-fSwKdDQ6ZnVuY3Rpb24oKXt2YXIgdCxzLHI9dGhpcyxxPXIuYQppZihxIT09IiImJnEhPT0iZmlsZSIp
-dGhyb3cgSC5iKFAuTDQoIkNhbm5vdCBleHRyYWN0IGEgZmlsZSBwYXRoIGZyb20gYSAiK0guZChxKSsi
-IFVSSSIpKQpxPXIuZgppZigocT09bnVsbD8iIjpxKSE9PSIiKXRocm93IEguYihQLkw0KCJDYW5ub3Qg
-ZXh0cmFjdCBhIGZpbGUgcGF0aCBmcm9tIGEgVVJJIHdpdGggYSBxdWVyeSBjb21wb25lbnQiKSkKcT1y
-LnIKaWYoKHE9PW51bGw/IiI6cSkhPT0iIil0aHJvdyBILmIoUC5MNCgiQ2Fubm90IGV4dHJhY3QgYSBm
-aWxlIHBhdGggZnJvbSBhIFVSSSB3aXRoIGEgZnJhZ21lbnQgY29tcG9uZW50IikpCnQ9JC53USgpCmlm
-KEgub1QodCkpcT1QLm1uKHIpCmVsc2V7aWYoci5jIT1udWxsJiZyLmdKZihyKSE9PSIiKUgudmgoUC5M
-NCgiQ2Fubm90IGV4dHJhY3QgYSBub24tV2luZG93cyBmaWxlIHBhdGggZnJvbSBhIGZpbGUgVVJJIHdp
-dGggYW4gYXV0aG9yaXR5IikpCnM9ci5nRmooKQpQLmtFKHMsITEpCnE9UC52ZyhDLnhCLm4oci5lLCIv
-Iik/Ii8iOiIiLHMsIi8iKQpxPXEuY2hhckNvZGVBdCgwKT09MD9xOnF9cmV0dXJuIHF9LAp3OmZ1bmN0
-aW9uKGEpe3ZhciB0LHMscixxPXRoaXMscD1xLnkKaWYocD09bnVsbCl7cD1xLmEKdD1wLmxlbmd0aCE9
-PTA/cCsiOiI6IiIKcz1xLmMKcj1zPT1udWxsCmlmKCFyfHxwPT09ImZpbGUiKXtwPXQrIi8vIgp0PXEu
-YgppZih0Lmxlbmd0aCE9PTApcD1wK3QrIkAiCmlmKCFyKXArPXMKdD1xLmQKaWYodCE9bnVsbClwPXAr
-IjoiK0guZCh0KX1lbHNlIHA9dApwKz1xLmUKdD1xLmYKaWYodCE9bnVsbClwPXArIj8iK3QKdD1xLnIK
-aWYodCE9bnVsbClwPXArIiMiK3QKcD1xLnk9cC5jaGFyQ29kZUF0KDApPT0wP3A6cH1yZXR1cm4gcH0s
-CkROOmZ1bmN0aW9uKGEsYil7dmFyIHQscyxyPXRoaXMKaWYoYj09bnVsbClyZXR1cm4hMQppZihyPT09
-YilyZXR1cm4hMAppZih1LkQuYyhiKSlpZihyLmE9PWIuZ0ZpKCkpaWYoci5jIT1udWxsPT09Yi5nY2oo
-KSlpZihyLmI9PWIuZ2t1KCkpaWYoci5nSmYocik9PWIuZ0pmKGIpKWlmKHIuZ3RwKHIpPT1iLmd0cChi
-KSlpZihyLmU9PT1iLmdJaShiKSl7dD1yLmYKcz10PT1udWxsCmlmKCFzPT09Yi5nUUQoKSl7aWYocyl0
-PSIiCmlmKHQ9PT1iLmd0UCgpKXt0PXIucgpzPXQ9PW51bGwKaWYoIXM9PT1iLmdaOCgpKXtpZihzKXQ9
-IiIKdD10PT09Yi5nS2EoKX1lbHNlIHQ9ITF9ZWxzZSB0PSExfWVsc2UgdD0hMX1lbHNlIHQ9ITEKZWxz
-ZSB0PSExCmVsc2UgdD0hMQplbHNlIHQ9ITEKZWxzZSB0PSExCmVsc2UgdD0hMQplbHNlIHQ9ITEKcmV0
-dXJuIHR9LApnaU86ZnVuY3Rpb24oYSl7dmFyIHQ9dGhpcy56CnJldHVybiB0PT1udWxsP3RoaXMuej1D
-LnhCLmdpTyh0aGlzLncoMCkpOnR9LApzbzY6ZnVuY3Rpb24oYSl7dGhpcy54PXUuYS5iKGEpfSwKc1JI
-OmZ1bmN0aW9uKGEpe3RoaXMuUT11LmYuYihhKX0sCiRpaUQ6MSwKZ0ZpOmZ1bmN0aW9uKCl7cmV0dXJu
-IHRoaXMuYX0sCmdJaTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5lfX0KUC5lMS5wcm90b3R5cGU9ewok
-MTpmdW5jdGlvbihhKXt0aHJvdyBILmIoUC5ycigiSW52YWxpZCBwb3J0Iix0aGlzLmEsdGhpcy5iKzEp
-KX0sCiRTOjE0fQpQLk5ZLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3ZhciB0PSJJbGxlZ2FsIHBh
-dGggY2hhcmFjdGVyICIKSC55KGEpCmlmKEouemwoYSwiLyIpKWlmKHRoaXMuYSl0aHJvdyBILmIoUC54
-WSh0K2EpKQplbHNlIHRocm93IEguYihQLkw0KHQrYSkpfSwKJFM6MTR9ClAuUloucHJvdG90eXBlPXsK
-JDE6ZnVuY3Rpb24oYSl7cmV0dXJuIFAuZVAoQy5aSixhLEMueE0sITEpfSwKJFM6NH0KUC5NRS5wcm90
-b3R5cGU9ewokMjpmdW5jdGlvbihhLGIpe3ZhciB0PXRoaXMuYixzPXRoaXMuYQp0LmErPXMuYQpzLmE9
-IiYiCnM9dC5hKz1ILmQoUC5lUChDLkYzLGEsQy54TSwhMCkpCmlmKGIhPW51bGwmJmIubGVuZ3RoIT09
-MCl7dC5hPXMrIj0iCnQuYSs9SC5kKFAuZVAoQy5GMyxiLEMueE0sITApKX19LAokUzoyMn0KUC55NS5w
-cm90b3R5cGU9ewokMjpmdW5jdGlvbihhLGIpe3ZhciB0LHMKSC55KGEpCmlmKGI9PW51bGx8fHR5cGVv
-ZiBiPT0ic3RyaW5nIil0aGlzLmEuJDIoYSxILnkoYikpCmVsc2UgZm9yKHQ9Si5JVCh1LlIuYihiKSks
-cz10aGlzLmE7dC5GKCk7KXMuJDIoYSxILnkodC5nbCgpKSl9LAokUzoxM30KUC5QRS5wcm90b3R5cGU9
-ewpnbFI6ZnVuY3Rpb24oKXt2YXIgdCxzLHIscSxwPXRoaXMsbz1udWxsLG49cC5jCmlmKG4hPW51bGwp
-cmV0dXJuIG4Kbj1wLmIKaWYoMD49bi5sZW5ndGgpcmV0dXJuIEguT0gobiwwKQp0PXAuYQpuPW5bMF0r
-MQpzPUMueEIuWFUodCwiPyIsbikKcj10Lmxlbmd0aAppZihzPj0wKXtxPVAudU8odCxzKzEscixDLlZD
-LCExKQpyPXN9ZWxzZSBxPW8KcmV0dXJuIHAuYz1uZXcgUC5xZSgiZGF0YSIsbyxvLG8sUC51Tyh0LG4s
-cixDLldkLCExKSxxLG8pfSwKdzpmdW5jdGlvbihhKXt2YXIgdCxzPXRoaXMuYgppZigwPj1zLmxlbmd0
-aClyZXR1cm4gSC5PSChzLDApCnQ9dGhpcy5hCnJldHVybiBzWzBdPT09LTE/ImRhdGE6Iit0OnR9fQpQ
-LnEzLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgVWludDhBcnJheSg5Nil9LAok
-UzoyM30KUC55SS5wcm90b3R5cGU9ewokMjpmdW5jdGlvbihhLGIpe3ZhciB0PXRoaXMuYQppZihhPj10
-Lmxlbmd0aClyZXR1cm4gSC5PSCh0LGEpCnQ9dFthXQpKLkNNKHQsMCw5NixiKQpyZXR1cm4gdH0sCiRT
-OjI0fQpQLmM2LnByb3RvdHlwZT17CiQzOmZ1bmN0aW9uKGEsYixjKXt2YXIgdCxzLHIscQpmb3IodD1i
-Lmxlbmd0aCxzPWEubGVuZ3RoLHI9MDtyPHQ7KytyKXtxPUMueEIuVyhiLHIpXjk2CmlmKHE+PXMpcmV0
-dXJuIEguT0goYSxxKQphW3FdPWN9fX0KUC5xZC5wcm90b3R5cGU9ewokMzpmdW5jdGlvbihhLGIsYyl7
-dmFyIHQscyxyLHEKZm9yKHQ9Qy54Qi5XKGIsMCkscz1DLnhCLlcoYiwxKSxyPWEubGVuZ3RoO3Q8PXM7
-Kyt0KXtxPSh0Xjk2KT4+PjAKaWYocT49cilyZXR1cm4gSC5PSChhLHEpCmFbcV09Y319fQpQLlVmLnBy
-b3RvdHlwZT17CmdjajpmdW5jdGlvbigpe3JldHVybiB0aGlzLmM+MH0sCmd4QTpmdW5jdGlvbigpe3Zh
-ciB0LHMKaWYodGhpcy5jPjApe3Q9dGhpcy5kCmlmKHR5cGVvZiB0IT09Im51bWJlciIpcmV0dXJuIHQu
-aCgpCnM9dGhpcy5lCmlmKHR5cGVvZiBzIT09Im51bWJlciIpcmV0dXJuIEgucFkocykKcz10KzE8cwp0
-PXN9ZWxzZSB0PSExCnJldHVybiB0fSwKZ1FEOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5mCmlmKHR5cGVv
-ZiB0IT09Im51bWJlciIpcmV0dXJuIHQuSigpCnJldHVybiB0PHRoaXMucn0sCmdaODpmdW5jdGlvbigp
-e3JldHVybiB0aGlzLnI8dGhpcy5hLmxlbmd0aH0sCmdOdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmI9
-PT00JiZDLnhCLm4odGhpcy5hLCJmaWxlIil9LApndmg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iPT09
-NCYmQy54Qi5uKHRoaXMuYSwiaHR0cCIpfSwKZ3FCOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYj09PTUm
-JkMueEIubih0aGlzLmEsImh0dHBzIil9LApndFQ6ZnVuY3Rpb24oKXtyZXR1cm4gQy54Qi5RaSh0aGlz
-LmEsIi8iLHRoaXMuZSl9LApnRmk6ZnVuY3Rpb24oKXt2YXIgdCxzPXRoaXMscj0icGFja2FnZSIscT1z
-LmIKaWYocTw9MClyZXR1cm4iIgp0PXMueAppZih0IT1udWxsKXJldHVybiB0CmlmKHMuZ3ZoKCkpcT1z
-Lng9Imh0dHAiCmVsc2UgaWYocy5ncUIoKSl7cy54PSJodHRwcyIKcT0iaHR0cHMifWVsc2UgaWYocy5n
-TncoKSl7cy54PSJmaWxlIgpxPSJmaWxlIn1lbHNlIGlmKHE9PT03JiZDLnhCLm4ocy5hLHIpKXtzLng9
-cgpxPXJ9ZWxzZXtxPUMueEIuTmoocy5hLDAscSkKcy54PXF9cmV0dXJuIHF9LApna3U6ZnVuY3Rpb24o
-KXt2YXIgdD10aGlzLmMscz10aGlzLmIrMwpyZXR1cm4gdD5zP0MueEIuTmoodGhpcy5hLHMsdC0xKToi
-In0sCmdKZjpmdW5jdGlvbihhKXt2YXIgdD10aGlzLmMKcmV0dXJuIHQ+MD9DLnhCLk5qKHRoaXMuYSx0
-LHRoaXMuZCk6IiJ9LApndHA6ZnVuY3Rpb24oYSl7dmFyIHQscz10aGlzCmlmKHMuZ3hBKCkpe3Q9cy5k
-CmlmKHR5cGVvZiB0IT09Im51bWJlciIpcmV0dXJuIHQuaCgpCnJldHVybiBQLlFBKEMueEIuTmoocy5h
-LHQrMSxzLmUpLG51bGwsbnVsbCl9aWYocy5ndmgoKSlyZXR1cm4gODAKaWYocy5ncUIoKSlyZXR1cm4g
-NDQzCnJldHVybiAwfSwKZ0lpOmZ1bmN0aW9uKGEpe3JldHVybiBDLnhCLk5qKHRoaXMuYSx0aGlzLmUs
-dGhpcy5mKX0sCmd0UDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZixzPXRoaXMucgppZih0eXBlb2YgdCE9
-PSJudW1iZXIiKXJldHVybiB0LkooKQpyZXR1cm4gdDxzP0MueEIuTmoodGhpcy5hLHQrMSxzKToiIn0s
-CmdLYTpmdW5jdGlvbigpe3ZhciB0PXRoaXMucixzPXRoaXMuYQpyZXR1cm4gdDxzLmxlbmd0aD9DLnhC
-Lkcocyx0KzEpOiIifSwKZ0ZqOmZ1bmN0aW9uKCl7dmFyIHQscyxyPXRoaXMuZSxxPXRoaXMuZixwPXRo
-aXMuYQppZihDLnhCLlFpKHAsIi8iLHIpKXtpZih0eXBlb2YgciE9PSJudW1iZXIiKXJldHVybiByLmgo
-KTsrK3J9aWYocj09cSlyZXR1cm4gQy5kbgp0PUguVk0oW10sdS5zKQpzPXIKd2hpbGUoITApe2lmKHR5
-cGVvZiBzIT09Im51bWJlciIpcmV0dXJuIHMuSigpCmlmKHR5cGVvZiBxIT09Im51bWJlciIpcmV0dXJu
-IEgucFkocSkKaWYoIShzPHEpKWJyZWFrCmlmKEMueEIubShwLHMpPT09NDcpe0MuTm0uaSh0LEMueEIu
-TmoocCxyLHMpKQpyPXMrMX0rK3N9Qy5ObS5pKHQsQy54Qi5OaihwLHIscSkpCnJldHVybiBQLkFGKHQs
-dS5OKX0sCmdoWTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZgppZih0eXBlb2YgdCE9PSJudW1iZXIiKXJl
-dHVybiB0LkooKQppZih0Pj10aGlzLnIpcmV0dXJuIEMuV08KcmV0dXJuIG5ldyBQLkdqKFAuV1godGhp
-cy5ndFAoKSksdS5UKX0sCmtYOmZ1bmN0aW9uKGEpe3ZhciB0LHM9dGhpcy5kCmlmKHR5cGVvZiBzIT09
-Im51bWJlciIpcmV0dXJuIHMuaCgpCnQ9cysxCnJldHVybiB0K2EubGVuZ3RoPT09dGhpcy5lJiZDLnhC
-LlFpKHRoaXMuYSxhLHQpfSwKTjk6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLHM9dC5yLHI9dC5hCmlmKHM+
-PXIubGVuZ3RoKXJldHVybiB0CnJldHVybiBuZXcgUC5VZihDLnhCLk5qKHIsMCxzKSx0LmIsdC5jLHQu
-ZCx0LmUsdC5mLHMsdC54KX0sCm5tOmZ1bmN0aW9uKGEsYil7dmFyIHQscyxyLHEscCxvLG4sbSxsLGss
-aixpPXRoaXMsaD1udWxsCnUuWC5iKG51bGwpCnUuYi5iKGIpCnQ9aS5nRmkoKQpzPXQ9PT0iZmlsZSIK
-cj1pLmMKcT1yPjA/Qy54Qi5OaihpLmEsaS5iKzMscik6IiIKcD1pLmd4QSgpP2kuZ3RwKGkpOmgKcj1p
-LmMKaWYocj4wKW89Qy54Qi5OaihpLmEscixpLmQpCmVsc2Ugbz1xLmxlbmd0aCE9PTB8fHAhPW51bGx8
-fHM/IiI6aApyPWkuYQpuPWkuZgptPUMueEIuTmoocixpLmUsbikKaWYoIXMpbD1vIT1udWxsJiZtLmxl
-bmd0aCE9PTAKZWxzZSBsPSEwCmlmKGwmJiFDLnhCLm4obSwiLyIpKW09Ii8iK20KaWYoYiE9bnVsbClr
-PVAubGUoaCwwLDAsYikKZWxzZXtsPWkucgppZih0eXBlb2YgbiE9PSJudW1iZXIiKXJldHVybiBuLkoo
-KQprPW48bD9DLnhCLk5qKHIsbisxLGwpOmh9bj1pLnIKaj1uPHIubGVuZ3RoP0MueEIuRyhyLG4rMSk6
-aApyZXR1cm4gbmV3IFAuRG4odCxxLG8scCxtLGssail9LApaSTpmdW5jdGlvbihhKXtyZXR1cm4gdGhp
-cy5tUyhQLmhLKGEpKX0sCm1TOmZ1bmN0aW9uKGEpe2lmKGEgaW5zdGFuY2VvZiBQLlVmKXJldHVybiB0
-aGlzLnUxKHRoaXMsYSkKcmV0dXJuIHRoaXMuUmUoKS5tUyhhKX0sCnUxOmZ1bmN0aW9uKGEsYil7dmFy
-IHQscyxyLHEscCxvLG4sbSxsLGssaixpLGgsZyxmLGU9Yi5iCmlmKGU+MClyZXR1cm4gYgp0PWIuYwpp
-Zih0PjApe3M9YS5iCmlmKHM8PTApcmV0dXJuIGIKaWYoYS5nTncoKSlyPWIuZSE9Yi5mCmVsc2UgaWYo
-YS5ndmgoKSlyPSFiLmtYKCI4MCIpCmVsc2Ugcj0hYS5ncUIoKXx8IWIua1goIjQ0MyIpCmlmKHIpe3E9
-cysxCnA9Qy54Qi5OaihhLmEsMCxxKStDLnhCLkcoYi5hLGUrMSkKZT1iLmQKaWYodHlwZW9mIGUhPT0i
-bnVtYmVyIilyZXR1cm4gZS5oKCkKbz1iLmUKaWYodHlwZW9mIG8hPT0ibnVtYmVyIilyZXR1cm4gby5o
-KCkKbj1iLmYKaWYodHlwZW9mIG4hPT0ibnVtYmVyIilyZXR1cm4gbi5oKCkKcmV0dXJuIG5ldyBQLlVm
-KHAscyx0K3EsZStxLG8rcSxuK3EsYi5yK3EsYS54KX1lbHNlIHJldHVybiB0aGlzLlJlKCkubVMoYil9
-bT1iLmUKZT1iLmYKaWYobT09ZSl7dD1iLnIKaWYodHlwZW9mIGUhPT0ibnVtYmVyIilyZXR1cm4gZS5K
-KCkKaWYoZTx0KXtzPWEuZgppZih0eXBlb2YgcyE9PSJudW1iZXIiKXJldHVybiBzLkhOKCkKcT1zLWUK
-cmV0dXJuIG5ldyBQLlVmKEMueEIuTmooYS5hLDAscykrQy54Qi5HKGIuYSxlKSxhLmIsYS5jLGEuZCxh
-LmUsZStxLHQrcSxhLngpfWU9Yi5hCmlmKHQ8ZS5sZW5ndGgpe3M9YS5yCnJldHVybiBuZXcgUC5VZihD
-LnhCLk5qKGEuYSwwLHMpK0MueEIuRyhlLHQpLGEuYixhLmMsYS5kLGEuZSxhLmYsdCsocy10KSxhLngp
-fXJldHVybiBhLk45KCl9dD1iLmEKaWYoQy54Qi5RaSh0LCIvIixtKSl7cz1hLmUKaWYodHlwZW9mIHMh
-PT0ibnVtYmVyIilyZXR1cm4gcy5ITigpCmlmKHR5cGVvZiBtIT09Im51bWJlciIpcmV0dXJuIEgucFko
-bSkKcT1zLW0KcD1DLnhCLk5qKGEuYSwwLHMpK0MueEIuRyh0LG0pCmlmKHR5cGVvZiBlIT09Im51bWJl
-ciIpcmV0dXJuIGUuaCgpCnJldHVybiBuZXcgUC5VZihwLGEuYixhLmMsYS5kLHMsZStxLGIucitxLGEu
-eCl9bD1hLmUKaz1hLmYKaWYobD09ayYmYS5jPjApe2Zvcig7Qy54Qi5RaSh0LCIuLi8iLG0pOyl7aWYo
-dHlwZW9mIG0hPT0ibnVtYmVyIilyZXR1cm4gbS5oKCkKbSs9M31pZih0eXBlb2YgbCE9PSJudW1iZXIi
-KXJldHVybiBsLkhOKCkKaWYodHlwZW9mIG0hPT0ibnVtYmVyIilyZXR1cm4gSC5wWShtKQpxPWwtbSsx
-CnA9Qy54Qi5OaihhLmEsMCxsKSsiLyIrQy54Qi5HKHQsbSkKaWYodHlwZW9mIGUhPT0ibnVtYmVyIily
-ZXR1cm4gZS5oKCkKcmV0dXJuIG5ldyBQLlVmKHAsYS5iLGEuYyxhLmQsbCxlK3EsYi5yK3EsYS54KX1q
-PWEuYQpmb3IoaT1sO0MueEIuUWkoaiwiLi4vIixpKTspe2lmKHR5cGVvZiBpIT09Im51bWJlciIpcmV0
-dXJuIGkuaCgpCmkrPTN9aD0wCndoaWxlKCEwKXtpZih0eXBlb2YgbSE9PSJudW1iZXIiKXJldHVybiBt
-LmgoKQpnPW0rMwppZih0eXBlb2YgZSE9PSJudW1iZXIiKXJldHVybiBILnBZKGUpCmlmKCEoZzw9ZSYm
-Qy54Qi5RaSh0LCIuLi8iLG0pKSlicmVhazsrK2gKbT1nfWY9IiIKd2hpbGUoITApe2lmKHR5cGVvZiBr
-IT09Im51bWJlciIpcmV0dXJuIGsub3MoKQppZih0eXBlb2YgaSE9PSJudW1iZXIiKXJldHVybiBILnBZ
-KGkpCmlmKCEoaz5pKSlicmVhazstLWsKaWYoQy54Qi5tKGosayk9PT00Nyl7aWYoaD09PTApe2Y9Ii8i
-CmJyZWFrfS0taApmPSIvIn19aWYoaz09PWkmJmEuYjw9MCYmIUMueEIuUWkoaiwiLyIsbCkpe20tPWgq
-MwpmPSIifXE9ay1tK2YubGVuZ3RoCnJldHVybiBuZXcgUC5VZihDLnhCLk5qKGosMCxrKStmK0MueEIu
-Ryh0LG0pLGEuYixhLmMsYS5kLGwsZStxLGIucitxLGEueCl9LAp0NDpmdW5jdGlvbigpe3ZhciB0LHMs
-cixxLHA9dGhpcwppZihwLmI+PTAmJiFwLmdOdygpKXRocm93IEguYihQLkw0KCJDYW5ub3QgZXh0cmFj
-dCBhIGZpbGUgcGF0aCBmcm9tIGEgIitILmQocC5nRmkoKSkrIiBVUkkiKSkKdD1wLmYKcz1wLmEKaWYo
-dHlwZW9mIHQhPT0ibnVtYmVyIilyZXR1cm4gdC5KKCkKaWYodDxzLmxlbmd0aCl7aWYodDxwLnIpdGhy
-b3cgSC5iKFAuTDQoIkNhbm5vdCBleHRyYWN0IGEgZmlsZSBwYXRoIGZyb20gYSBVUkkgd2l0aCBhIHF1
-ZXJ5IGNvbXBvbmVudCIpKQp0aHJvdyBILmIoUC5MNCgiQ2Fubm90IGV4dHJhY3QgYSBmaWxlIHBhdGgg
-ZnJvbSBhIFVSSSB3aXRoIGEgZnJhZ21lbnQgY29tcG9uZW50IikpfXI9JC53USgpCmlmKEgub1Qocikp
-dD1QLm1uKHApCmVsc2V7cT1wLmQKaWYodHlwZW9mIHEhPT0ibnVtYmVyIilyZXR1cm4gSC5wWShxKQpp
-ZihwLmM8cSlILnZoKFAuTDQoIkNhbm5vdCBleHRyYWN0IGEgbm9uLVdpbmRvd3MgZmlsZSBwYXRoIGZy
-b20gYSBmaWxlIFVSSSB3aXRoIGFuIGF1dGhvcml0eSIpKQp0PUMueEIuTmoocyxwLmUsdCl9cmV0dXJu
-IHR9LApnaU86ZnVuY3Rpb24oYSl7dmFyIHQ9dGhpcy55CnJldHVybiB0PT1udWxsP3RoaXMueT1DLnhC
-LmdpTyh0aGlzLmEpOnR9LApETjpmdW5jdGlvbihhLGIpe2lmKGI9PW51bGwpcmV0dXJuITEKaWYodGhp
-cz09PWIpcmV0dXJuITAKcmV0dXJuIHUuRC5jKGIpJiZ0aGlzLmE9PT1iLncoMCl9LApSZTpmdW5jdGlv
-bigpe3ZhciB0PXRoaXMscz1udWxsLHI9dC5nRmkoKSxxPXQuZ2t1KCkscD10LmM+MD90LmdKZih0KTpz
-LG89dC5neEEoKT90Lmd0cCh0KTpzLG49dC5hLG09dC5mLGw9Qy54Qi5OaihuLHQuZSxtKSxrPXQucgpp
-Zih0eXBlb2YgbSE9PSJudW1iZXIiKXJldHVybiBtLkooKQptPW08az90Lmd0UCgpOnMKcmV0dXJuIG5l
-dyBQLkRuKHIscSxwLG8sbCxtLGs8bi5sZW5ndGg/dC5nS2EoKTpzKX0sCnc6ZnVuY3Rpb24oYSl7cmV0
-dXJuIHRoaXMuYX0sCiRpaUQ6MX0KUC5xZS5wcm90b3R5cGU9e30KVy5xRS5wcm90b3R5cGU9e30KVy5H
-aC5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3JldHVybiBTdHJpbmcoYSl9LAokaUdoOjF9ClcuZlku
-cHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXtyZXR1cm4gU3RyaW5nKGEpfX0KVy5uQi5wcm90b3R5cGU9
-eyRpbkI6MX0KVy5Bei5wcm90b3R5cGU9eyRpQXo6MX0KVy5RUC5wcm90b3R5cGU9eyRpUVA6MX0KVy5u
-eC5wcm90b3R5cGU9ewpnQTpmdW5jdGlvbihhKXtyZXR1cm4gYS5sZW5ndGh9fQpXLm9KLnByb3RvdHlw
-ZT17CmdBOmZ1bmN0aW9uKGEpe3JldHVybiBhLmxlbmd0aH19ClcuaWQucHJvdG90eXBlPXt9ClcuUUYu
-cHJvdG90eXBlPXt9ClcuTmgucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXtyZXR1cm4gU3RyaW5nKGEp
-fX0KVy5JQi5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3JldHVybiJSZWN0YW5nbGUgKCIrSC5kKGEu
-bGVmdCkrIiwgIitILmQoYS50b3ApKyIpICIrSC5kKGEud2lkdGgpKyIgeCAiK0guZChhLmhlaWdodCl9
-LApETjpmdW5jdGlvbihhLGIpe2lmKGI9PW51bGwpcmV0dXJuITEKcmV0dXJuIHUucS5jKGIpJiZhLmxl
-ZnQ9PT1iLmxlZnQmJmEudG9wPT09Yi50b3AmJmEud2lkdGg9PT1iLndpZHRoJiZhLmhlaWdodD09PWIu
-aGVpZ2h0fSwKZ2lPOmZ1bmN0aW9uKGEpe3JldHVybiBXLnJFKEMuQ0QuZ2lPKGEubGVmdCksQy5DRC5n
-aU8oYS50b3ApLEMuQ0QuZ2lPKGEud2lkdGgpLEMuQ0QuZ2lPKGEuaGVpZ2h0KSl9LAokaXRuOjF9Clcu
-bjcucHJvdG90eXBlPXsKZ0E6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVuZ3RofX0KVy53ei5wcm90b3R5
-cGU9ewpnQTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hLmxlbmd0aH0sCnE6ZnVuY3Rpb24oYSxiKXt2
-YXIgdApILlNjKGIpCnQ9dGhpcy5hCmlmKGI8MHx8Yj49dC5sZW5ndGgpcmV0dXJuIEguT0godCxiKQpy
-ZXR1cm4gdGhpcy4kdGkuZC5iKHRbYl0pfSwKWTpmdW5jdGlvbihhLGIsYyl7dGhpcy4kdGkuZC5iKGMp
-CnRocm93IEguYihQLkw0KCJDYW5ub3QgbW9kaWZ5IGxpc3QiKSl9fQpXLmN2LnByb3RvdHlwZT17CmdR
-ZzpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IFcuaTcoYSl9LApnRDpmdW5jdGlvbihhKXtyZXR1cm4gbmV3
-IFcuSTQoYSl9LApzRDpmdW5jdGlvbihhLGIpe3ZhciB0CnUuWC5iKGIpCnQ9dGhpcy5nRChhKQp0LlYx
-KDApCnQuRlYoMCxiKX0sCnc6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubG9jYWxOYW1lfSwKdG46ZnVuY3Rp
-b24oYSl7dmFyIHQ9ISFhLnNjcm9sbEludG9WaWV3SWZOZWVkZWQKaWYodClhLnNjcm9sbEludG9WaWV3
-SWZOZWVkZWQoKQplbHNlIGEuc2Nyb2xsSW50b1ZpZXcoKX0sCnI2OmZ1bmN0aW9uKGEsYixjLGQpe3Zh
-ciB0LHMscixxCmlmKGM9PW51bGwpe2lmKGQ9PW51bGwpe3Q9JC5sdAppZih0PT1udWxsKXt0PUguVk0o
-W10sdS5rKQpzPW5ldyBXLnZEKHQpCkMuTm0uaSh0LFcuVHcobnVsbCkpCkMuTm0uaSh0LFcuQmwoKSkK
-JC5sdD1zCmQ9c31lbHNlIGQ9dH10PSQuRVUKaWYodD09bnVsbCl7dD1uZXcgVy5LbyhkKQokLkVVPXQK
-Yz10fWVsc2V7dC5hPWQKYz10fX1lbHNlIGlmKGQhPW51bGwpdGhyb3cgSC5iKFAueFkoInZhbGlkYXRv
-ciBjYW4gb25seSBiZSBwYXNzZWQgaWYgdHJlZVNhbml0aXplciBpcyBudWxsIikpCmlmKCQueG89PW51
-bGwpe3Q9ZG9jdW1lbnQKcz10LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiIikKJC54
-bz1zCiQuQk89cy5jcmVhdGVSYW5nZSgpCnM9JC54by5jcmVhdGVFbGVtZW50KCJiYXNlIikKdS5jUi5i
-KHMpCnMuaHJlZj10LmJhc2VVUkkKJC54by5oZWFkLmFwcGVuZENoaWxkKHMpfXQ9JC54bwppZih0LmJv
-ZHk9PW51bGwpe3M9dC5jcmVhdGVFbGVtZW50KCJib2R5IikKdC5ib2R5PXUuWS5iKHMpfXQ9JC54bwpp
-Zih1LlkuYyhhKSlyPXQuYm9keQplbHNle3I9dC5jcmVhdGVFbGVtZW50KGEudGFnTmFtZSkKJC54by5i
-b2R5LmFwcGVuZENoaWxkKHIpfWlmKCJjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQiIGluIHdpbmRvdy5S
-YW5nZS5wcm90b3R5cGUmJiFDLk5tLnRnKEMuU3EsYS50YWdOYW1lKSl7JC5CTy5zZWxlY3ROb2RlQ29u
-dGVudHMocikKcT0kLkJPLmNyZWF0ZUNvbnRleHR1YWxGcmFnbWVudChiKX1lbHNle3IuaW5uZXJIVE1M
-PWIKcT0kLnhvLmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKQpmb3IoO3Q9ci5maXJzdENoaWxkLHQhPW51
-bGw7KXEuYXBwZW5kQ2hpbGQodCl9dD0kLnhvLmJvZHkKaWYocj09bnVsbD90IT1udWxsOnIhPT10KUou
-THQocikKYy5QbihxKQpkb2N1bWVudC5hZG9wdE5vZGUocSkKcmV0dXJuIHF9LApBSDpmdW5jdGlvbihh
-LGIsYyl7cmV0dXJuIHRoaXMucjYoYSxiLGMsbnVsbCl9LApzaGY6ZnVuY3Rpb24oYSxiKXt0aGlzLllD
-KGEsYil9LApwazpmdW5jdGlvbihhLGIsYyl7YS50ZXh0Q29udGVudD1udWxsCmEuYXBwZW5kQ2hpbGQo
-dGhpcy5yNihhLGIsbnVsbCxjKSl9LApZQzpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLnBrKGEsYixu
-dWxsKX0sCmdWbDpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IFcuQ3EoYSwiY2xpY2siLCExLHUuUSl9LAok
-aWN2OjEsCmduczpmdW5jdGlvbihhKXtyZXR1cm4gYS50YWdOYW1lfX0KVy5Ddi5wcm90b3R5cGU9ewok
-MTpmdW5jdGlvbihhKXtyZXR1cm4gdS5oLmModS5BLmIoYSkpfSwKJFM6MjV9ClcuZWEucHJvdG90eXBl
-PXskaWVhOjF9ClcuRDAucHJvdG90eXBlPXsKT246ZnVuY3Rpb24oYSxiLGMsZCl7dS5VLmIoYykKaWYo
-YyE9bnVsbCl0aGlzLnYoYSxiLGMsZCl9LApCOmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5Pbihh
-LGIsYyxudWxsKX0sCnY6ZnVuY3Rpb24oYSxiLGMsZCl7cmV0dXJuIGEuYWRkRXZlbnRMaXN0ZW5lcihi
-LEgudFIodS5VLmIoYyksMSksZCl9LAokaUQwOjF9ClcuVDUucHJvdG90eXBlPXskaVQ1OjF9ClcuaDQu
-cHJvdG90eXBlPXsKZ0E6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVuZ3RofX0KVy5ici5wcm90b3R5cGU9
-ewpnQTpmdW5jdGlvbihhKXtyZXR1cm4gYS5sZW5ndGh9fQpXLlZiLnByb3RvdHlwZT17fQpXLk83LnBy
-b3RvdHlwZT17CmVvOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBhLm9wZW4oYixjLCEwKX0sCiRpTzc6
-MX0KVy5iVS5wcm90b3R5cGU9ewokMjpmdW5jdGlvbihhLGIpe3RoaXMuYS5zZXRSZXF1ZXN0SGVhZGVy
-KEgueShhKSxILnkoYikpfSwKJFM6OX0KVy5oSC5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXt2YXIg
-dCxzLHIscSxwCnUucC5iKGEpCnQ9dGhpcy5hCnM9dC5zdGF0dXMKaWYodHlwZW9mIHMhPT0ibnVtYmVy
-IilyZXR1cm4gcy50QigpCnI9cz49MjAwJiZzPDMwMApxPXM+MzA3JiZzPDQwMApzPXJ8fHM9PT0wfHxz
-PT09MzA0fHxxCnA9dGhpcy5iCmlmKHMpcC5hTSgwLHQpCmVsc2UgcC5wbShhKX0sCiRTOjI3fQpXLndh
-LnByb3RvdHlwZT17fQpXLlNnLnByb3RvdHlwZT17JGlTZzoxfQpXLnU4LnByb3RvdHlwZT17CmdEcjpm
-dW5jdGlvbihhKXtpZigib3JpZ2luIiBpbiBhKXJldHVybiBhLm9yaWdpbgpyZXR1cm4gSC5kKGEucHJv
-dG9jb2wpKyIvLyIrSC5kKGEuaG9zdCl9LAp3OmZ1bmN0aW9uKGEpe3JldHVybiBTdHJpbmcoYSl9LAok
-aXU4OjF9ClcuQWoucHJvdG90eXBlPXskaUFqOjF9ClcuZTcucHJvdG90eXBlPXsKZ3I4OmZ1bmN0aW9u
-KGEpe3ZhciB0PXRoaXMuYSxzPXQuY2hpbGROb2Rlcy5sZW5ndGgKaWYocz09PTApdGhyb3cgSC5iKFAu
-UFYoIk5vIGVsZW1lbnRzIikpCmlmKHM+MSl0aHJvdyBILmIoUC5QVigiTW9yZSB0aGFuIG9uZSBlbGVt
-ZW50IikpCnJldHVybiB0LmZpcnN0Q2hpbGR9LApGVjpmdW5jdGlvbihhLGIpe3ZhciB0LHMscixxCnUu
-ZWguYihiKQp0PWIuYQpzPXRoaXMuYQppZih0IT09cylmb3Iocj10LmNoaWxkTm9kZXMubGVuZ3RoLHE9
-MDtxPHI7KytxKXMuYXBwZW5kQ2hpbGQodC5maXJzdENoaWxkKQpyZXR1cm59LApZOmZ1bmN0aW9uKGEs
-YixjKXt2YXIgdCxzCnUuQS5iKGMpCnQ9dGhpcy5hCnM9dC5jaGlsZE5vZGVzCmlmKGI8MHx8Yj49cy5s
-ZW5ndGgpcmV0dXJuIEguT0gocyxiKQp0LnJlcGxhY2VDaGlsZChjLHNbYl0pfSwKZ2t6OmZ1bmN0aW9u
-KGEpe3ZhciB0PXRoaXMuYS5jaGlsZE5vZGVzCnJldHVybiBuZXcgVy5XOSh0LHQubGVuZ3RoLEguekso
-dCkuQygiVzk8R20uRT4iKSl9LApnQTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hLmNoaWxkTm9kZXMu
-bGVuZ3RofSwKcTpmdW5jdGlvbihhLGIpe3ZhciB0CkguU2MoYikKdD10aGlzLmEuY2hpbGROb2Rlcwpp
-ZihiPDB8fGI+PXQubGVuZ3RoKXJldHVybiBILk9IKHQsYikKcmV0dXJuIHRbYl19fQpXLnVILnByb3Rv
-dHlwZT17CndnOmZ1bmN0aW9uKGEpe3ZhciB0PWEucGFyZW50Tm9kZQppZih0IT1udWxsKXQucmVtb3Zl
-Q2hpbGQoYSl9LApENDpmdW5jdGlvbihhKXt2YXIgdApmb3IoO3Q9YS5maXJzdENoaWxkLHQhPW51bGw7
-KWEucmVtb3ZlQ2hpbGQodCl9LAp3OmZ1bmN0aW9uKGEpe3ZhciB0PWEubm9kZVZhbHVlCnJldHVybiB0
-PT1udWxsP3RoaXMuVShhKTp0fSwKJGl1SDoxfQpXLkJILnByb3RvdHlwZT17CmdBOmZ1bmN0aW9uKGEp
-e3JldHVybiBhLmxlbmd0aH0sCnE6ZnVuY3Rpb24oYSxiKXtILlNjKGIpCmlmKGI+Pj4wIT09Ynx8Yj49
-YS5sZW5ndGgpdGhyb3cgSC5iKFAuQ2YoYixhLG51bGwsbnVsbCxudWxsKSkKcmV0dXJuIGFbYl19LApZ
-OmZ1bmN0aW9uKGEsYixjKXt1LkEuYihjKQp0aHJvdyBILmIoUC5MNCgiQ2Fubm90IGFzc2lnbiBlbGVt
-ZW50IG9mIGltbXV0YWJsZSBMaXN0LiIpKX0sCkU6ZnVuY3Rpb24oYSxiKXtpZihiPDB8fGI+PWEubGVu
-Z3RoKXJldHVybiBILk9IKGEsYikKcmV0dXJuIGFbYl19LAokaVhqOjEsCiRpY1g6MSwKJGl6TToxfQpX
-LlNOLnByb3RvdHlwZT17fQpXLmV3LnByb3RvdHlwZT17JGlldzoxfQpXLmxwLnByb3RvdHlwZT17CmdB
-OmZ1bmN0aW9uKGEpe3JldHVybiBhLmxlbmd0aH19ClcuVGIucHJvdG90eXBlPXsKcjY6ZnVuY3Rpb24o
-YSxiLGMsZCl7dmFyIHQscwppZigiY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50IiBpbiB3aW5kb3cuUmFu
-Z2UucHJvdG90eXBlKXJldHVybiB0aGlzLkRXKGEsYixjLGQpCnQ9Vy5VOSgiPHRhYmxlPiIrSC5kKGIp
-KyI8L3RhYmxlPiIsYyxkKQpzPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKQpzLnRvU3Ry
-aW5nCnQudG9TdHJpbmcKbmV3IFcuZTcocykuRlYoMCxuZXcgVy5lNyh0KSkKcmV0dXJuIHN9fQpXLkl2
-LnByb3RvdHlwZT17CnI2OmZ1bmN0aW9uKGEsYixjLGQpe3ZhciB0LHMscixxCmlmKCJjcmVhdGVDb250
-ZXh0dWFsRnJhZ21lbnQiIGluIHdpbmRvdy5SYW5nZS5wcm90b3R5cGUpcmV0dXJuIHRoaXMuRFcoYSxi
-LGMsZCkKdD1kb2N1bWVudApzPXQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpCnQ9Qy5JZS5yNih0LmNy
-ZWF0ZUVsZW1lbnQoInRhYmxlIiksYixjLGQpCnQudG9TdHJpbmcKdD1uZXcgVy5lNyh0KQpyPXQuZ3I4
-KHQpCnIudG9TdHJpbmcKdD1uZXcgVy5lNyhyKQpxPXQuZ3I4KHQpCnMudG9TdHJpbmcKcS50b1N0cmlu
-ZwpuZXcgVy5lNyhzKS5GVigwLG5ldyBXLmU3KHEpKQpyZXR1cm4gc319ClcuQlQucHJvdG90eXBlPXsK
-cjY6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIHQscyxyCmlmKCJjcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQi
-IGluIHdpbmRvdy5SYW5nZS5wcm90b3R5cGUpcmV0dXJuIHRoaXMuRFcoYSxiLGMsZCkKdD1kb2N1bWVu
-dApzPXQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpCnQ9Qy5JZS5yNih0LmNyZWF0ZUVsZW1lbnQoInRh
-YmxlIiksYixjLGQpCnQudG9TdHJpbmcKdD1uZXcgVy5lNyh0KQpyPXQuZ3I4KHQpCnMudG9TdHJpbmcK
-ci50b1N0cmluZwpuZXcgVy5lNyhzKS5GVigwLG5ldyBXLmU3KHIpKQpyZXR1cm4gc319ClcueVkucHJv
-dG90eXBlPXsKcGs6ZnVuY3Rpb24oYSxiLGMpe3ZhciB0LHMKYS50ZXh0Q29udGVudD1udWxsCnQ9YS5j
-b250ZW50CnQudG9TdHJpbmcKSi5iVCh0KQpzPXRoaXMucjYoYSxiLG51bGwsYykKYS5jb250ZW50LmFw
-cGVuZENoaWxkKHMpfSwKWUM6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5wayhhLGIsbnVsbCl9LAok
-aXlZOjF9ClcudzYucHJvdG90eXBlPXt9ClcuSzUucHJvdG90eXBlPXsKZ21XOmZ1bmN0aW9uKGEpe3Jl
-dHVybiBhLmxvY2F0aW9ufSwKJGlLNToxLAokaXY2OjF9ClcuQ20ucHJvdG90eXBlPXskaUNtOjF9Clcu
-Q1EucHJvdG90eXBlPXskaUNROjF9ClcudzQucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXtyZXR1cm4i
-UmVjdGFuZ2xlICgiK0guZChhLmxlZnQpKyIsICIrSC5kKGEudG9wKSsiKSAiK0guZChhLndpZHRoKSsi
-IHggIitILmQoYS5oZWlnaHQpfSwKRE46ZnVuY3Rpb24oYSxiKXtpZihiPT1udWxsKXJldHVybiExCnJl
-dHVybiB1LnEuYyhiKSYmYS5sZWZ0PT09Yi5sZWZ0JiZhLnRvcD09PWIudG9wJiZhLndpZHRoPT09Yi53
-aWR0aCYmYS5oZWlnaHQ9PT1iLmhlaWdodH0sCmdpTzpmdW5jdGlvbihhKXtyZXR1cm4gVy5yRShDLkNE
-LmdpTyhhLmxlZnQpLEMuQ0QuZ2lPKGEudG9wKSxDLkNELmdpTyhhLndpZHRoKSxDLkNELmdpTyhhLmhl
-aWdodCkpfX0KVy5yaC5wcm90b3R5cGU9ewpnQTpmdW5jdGlvbihhKXtyZXR1cm4gYS5sZW5ndGh9LApx
-OmZ1bmN0aW9uKGEsYil7SC5TYyhiKQppZihiPj4+MCE9PWJ8fGI+PWEubGVuZ3RoKXRocm93IEguYihQ
-LkNmKGIsYSxudWxsLG51bGwsbnVsbCkpCnJldHVybiBhW2JdfSwKWTpmdW5jdGlvbihhLGIsYyl7dS5B
-LmIoYykKdGhyb3cgSC5iKFAuTDQoIkNhbm5vdCBhc3NpZ24gZWxlbWVudCBvZiBpbW11dGFibGUgTGlz
-dC4iKSl9LApFOmZ1bmN0aW9uKGEsYil7aWYoYjwwfHxiPj1hLmxlbmd0aClyZXR1cm4gSC5PSChhLGIp
-CnJldHVybiBhW2JdfSwKJGlYajoxLAokaWNYOjEsCiRpek06MX0KVy5EOS5wcm90b3R5cGU9ewpLOmZ1
-bmN0aW9uKGEsYil7dmFyIHQscyxyLHEscAp1LkUuYihiKQpmb3IodD10aGlzLmdWKCkscz10Lmxlbmd0
-aCxyPXRoaXMuYSxxPTA7cTx0Lmxlbmd0aDt0Lmxlbmd0aD09PXN8fCgwLEgubGspKHQpLCsrcSl7cD10
-W3FdCmIuJDIocCxyLmdldEF0dHJpYnV0ZShwKSl9fSwKZ1Y6ZnVuY3Rpb24oKXt2YXIgdCxzLHIscSxw
-PXRoaXMuYS5hdHRyaWJ1dGVzLG89SC5WTShbXSx1LnMpCmZvcih0PXAubGVuZ3RoLHM9dS5oOSxyPTA7
-cjx0Oysrcil7aWYocj49cC5sZW5ndGgpcmV0dXJuIEguT0gocCxyKQpxPXMuYihwW3JdKQppZihxLm5h
-bWVzcGFjZVVSST09bnVsbClDLk5tLmkobyxxLm5hbWUpfXJldHVybiBvfX0KVy5pNy5wcm90b3R5cGU9
-ewpxOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuYS5nZXRBdHRyaWJ1dGUoSC55KGIpKX0sClk6ZnVu
-Y3Rpb24oYSxiLGMpe3RoaXMuYS5zZXRBdHRyaWJ1dGUoYixjKX0sCmdBOmZ1bmN0aW9uKGEpe3JldHVy
-biB0aGlzLmdWKCkubGVuZ3RofX0KVy5TeS5wcm90b3R5cGU9ewpxOmZ1bmN0aW9uKGEsYil7cmV0dXJu
-IHRoaXMuYS5hLmdldEF0dHJpYnV0ZSgiZGF0YS0iK3RoaXMuTyhILnkoYikpKX0sClk6ZnVuY3Rpb24o
-YSxiLGMpe3RoaXMuYS5hLnNldEF0dHJpYnV0ZSgiZGF0YS0iK3RoaXMuTyhiKSxjKX0sCks6ZnVuY3Rp
-b24oYSxiKXt0aGlzLmEuSygwLG5ldyBXLktTKHRoaXMsdS5FLmIoYikpKX0sCmdWOmZ1bmN0aW9uKCl7
-dmFyIHQ9SC5WTShbXSx1LnMpCnRoaXMuYS5LKDAsbmV3IFcuQTModGhpcyx0KSkKcmV0dXJuIHR9LApn
-QTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5nVigpLmxlbmd0aH0sCms6ZnVuY3Rpb24oYSl7dmFyIHQs
-cyxyPUguVk0oYS5zcGxpdCgiLSIpLHUucykKZm9yKHQ9MTt0PHIubGVuZ3RoOysrdCl7cz1yW3RdCmlm
-KHMubGVuZ3RoPjApQy5ObS5ZKHIsdCxzWzBdLnRvVXBwZXJDYXNlKCkrSi5LVihzLDEpKX1yZXR1cm4g
-Qy5ObS5IKHIsIiIpfSwKTzpmdW5jdGlvbihhKXt2YXIgdCxzLHIscSxwCmZvcih0PWEubGVuZ3RoLHM9
-MCxyPSIiO3M8dDsrK3Mpe3E9YVtzXQpwPXEudG9Mb3dlckNhc2UoKQpyPShxIT09cCYmcz4wP3IrIi0i
-OnIpK3B9cmV0dXJuIHIuY2hhckNvZGVBdCgwKT09MD9yOnJ9fQpXLktTLnByb3RvdHlwZT17CiQyOmZ1
-bmN0aW9uKGEsYil7aWYoSi5yWShhKS5uKGEsImRhdGEtIikpdGhpcy5iLiQyKHRoaXMuYS5rKEMueEIu
-RyhhLDUpKSxiKX0sCiRTOjl9ClcuQTMucHJvdG90eXBlPXsKJDI6ZnVuY3Rpb24oYSxiKXtpZihKLnJZ
-KGEpLm4oYSwiZGF0YS0iKSlDLk5tLmkodGhpcy5iLHRoaXMuYS5rKEMueEIuRyhhLDUpKSl9LAokUzo5
-fQpXLkk0LnByb3RvdHlwZT17ClA6ZnVuY3Rpb24oKXt2YXIgdCxzLHIscSxwPVAuTHModS5OKQpmb3Io
-dD10aGlzLmEuY2xhc3NOYW1lLnNwbGl0KCIgIikscz10Lmxlbmd0aCxyPTA7cjxzOysrcil7cT1KLlQw
-KHRbcl0pCmlmKHEubGVuZ3RoIT09MClwLmkoMCxxKX1yZXR1cm4gcH0sClg6ZnVuY3Rpb24oYSl7dGhp
-cy5hLmNsYXNzTmFtZT11LkMuYihhKS5IKDAsIiAiKX0sCmdBOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlz
-LmEuY2xhc3NMaXN0Lmxlbmd0aH0sClYxOmZ1bmN0aW9uKGEpe3RoaXMuYS5jbGFzc05hbWU9IiJ9LAp0
-ZzpmdW5jdGlvbihhLGIpe3ZhciB0PXRoaXMuYS5jbGFzc0xpc3QuY29udGFpbnMoYikKcmV0dXJuIHR9
-LAppOmZ1bmN0aW9uKGEsYil7dmFyIHQ9dGhpcy5hLmNsYXNzTGlzdCxzPXQuY29udGFpbnMoYikKdC5h
-ZGQoYikKcmV0dXJuIXN9LApSOmZ1bmN0aW9uKGEsYil7dmFyIHQ9dGhpcy5hLmNsYXNzTGlzdCxzPXQu
-Y29udGFpbnMoYikKdC5yZW1vdmUoYikKcmV0dXJuIHN9LApGVjpmdW5jdGlvbihhLGIpe1cuVE4odGhp
-cy5hLHUuWC5iKGIpKX19ClcuRmsucHJvdG90eXBlPXt9ClcuUk8ucHJvdG90eXBlPXt9ClcuQ3EucHJv
-dG90eXBlPXt9ClcueEMucHJvdG90eXBlPXt9Clcudk4ucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7
-cmV0dXJuIHRoaXMuYS4kMSh1LkIuYihhKSl9LAokUzoyOH0KVy5KUS5wcm90b3R5cGU9ewpDWTpmdW5j
-dGlvbihhKXt2YXIgdAppZigkLm9yLmE9PT0wKXtmb3IodD0wO3Q8MjYyOysrdCkkLm9yLlkoMCxDLmNt
-W3RdLFcucFMoKSkKZm9yKHQ9MDt0PDEyOysrdCkkLm9yLlkoMCxDLkJJW3RdLFcuVjQoKSl9fSwKaTA6
-ZnVuY3Rpb24oYSl7cmV0dXJuICQuQU4oKS50ZygwLFcuclMoYSkpfSwKRWI6ZnVuY3Rpb24oYSxiLGMp
-e3ZhciB0PSQub3IucSgwLEguZChXLnJTKGEpKSsiOjoiK2IpCmlmKHQ9PW51bGwpdD0kLm9yLnEoMCwi
-Kjo6IitiKQppZih0PT1udWxsKXJldHVybiExCnJldHVybiBILnhkKHQuJDQoYSxiLGMsdGhpcykpfSwK
-JGlrRjoxfQpXLkdtLnByb3RvdHlwZT17CmdrejpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IFcuVzkoYSx0
-aGlzLmdBKGEpLEgueksoYSkuQygiVzk8R20uRT4iKSl9fQpXLnZELnByb3RvdHlwZT17CmkwOmZ1bmN0
-aW9uKGEpe3JldHVybiBDLk5tLlZyKHRoaXMuYSxuZXcgVy5VdihhKSl9LApFYjpmdW5jdGlvbihhLGIs
-Yyl7cmV0dXJuIEMuTm0uVnIodGhpcy5hLG5ldyBXLkVnKGEsYixjKSl9LAokaWtGOjF9ClcuVXYucHJv
-dG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7cmV0dXJuIHUuZS5iKGEpLmkwKHRoaXMuYSl9LAokUzoxNX0K
-Vy5FZy5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXtyZXR1cm4gdS5lLmIoYSkuRWIodGhpcy5hLHRo
-aXMuYix0aGlzLmMpfSwKJFM6MTV9ClcubTYucHJvdG90eXBlPXsKQ1k6ZnVuY3Rpb24oYSxiLGMsZCl7
-dmFyIHQscyxyCnRoaXMuYS5GVigwLGMpCnQ9Yi5ldigwLG5ldyBXLkVvKCkpCnM9Yi5ldigwLG5ldyBX
-LldrKCkpCnRoaXMuYi5GVigwLHQpCnI9dGhpcy5jCnIuRlYoMCxDLmRuKQpyLkZWKDAscyl9LAppMDpm
-dW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hLnRnKDAsVy5yUyhhKSl9LApFYjpmdW5jdGlvbihhLGIsYyl7
-dmFyIHQ9dGhpcyxzPVcuclMoYSkscj10LmMKaWYoci50ZygwLEguZChzKSsiOjoiK2IpKXJldHVybiB0
-LmQuRHQoYykKZWxzZSBpZihyLnRnKDAsIio6OiIrYikpcmV0dXJuIHQuZC5EdChjKQplbHNle3I9dC5i
-CmlmKHIudGcoMCxILmQocykrIjo6IitiKSlyZXR1cm4hMAplbHNlIGlmKHIudGcoMCwiKjo6IitiKSly
-ZXR1cm4hMAplbHNlIGlmKHIudGcoMCxILmQocykrIjo6KiIpKXJldHVybiEwCmVsc2UgaWYoci50Zygw
-LCIqOjoqIikpcmV0dXJuITB9cmV0dXJuITF9LAokaWtGOjF9ClcuRW8ucHJvdG90eXBlPXsKJDE6ZnVu
-Y3Rpb24oYSl7cmV0dXJuIUMuTm0udGcoQy5CSSxILnkoYSkpfSwKJFM6OH0KVy5Xay5wcm90b3R5cGU9
-ewokMTpmdW5jdGlvbihhKXtyZXR1cm4gQy5ObS50ZyhDLkJJLEgueShhKSl9LAokUzo4fQpXLmN0LnBy
-b3RvdHlwZT17CkViOmZ1bmN0aW9uKGEsYixjKXtpZih0aGlzLmpGKGEsYixjKSlyZXR1cm4hMAppZihi
-PT09InRlbXBsYXRlIiYmYz09PSIiKXJldHVybiEwCmlmKGEuZ2V0QXR0cmlidXRlKCJ0ZW1wbGF0ZSIp
-PT09IiIpcmV0dXJuIHRoaXMuZS50ZygwLGIpCnJldHVybiExfX0KVy5JQS5wcm90b3R5cGU9ewokMTpm
-dW5jdGlvbihhKXtyZXR1cm4iVEVNUExBVEU6OiIrSC5kKEgueShhKSl9LAokUzo0fQpXLk93LnByb3Rv
-dHlwZT17CmkwOmZ1bmN0aW9uKGEpe3ZhciB0CmlmKHUuZXcuYyhhKSlyZXR1cm4hMQp0PXUuZzcuYyhh
-KQppZih0JiZXLnJTKGEpPT09ImZvcmVpZ25PYmplY3QiKXJldHVybiExCmlmKHQpcmV0dXJuITAKcmV0
-dXJuITF9LApFYjpmdW5jdGlvbihhLGIsYyl7aWYoYj09PSJpcyJ8fEMueEIubihiLCJvbiIpKXJldHVy
-biExCnJldHVybiB0aGlzLmkwKGEpfSwKJGlrRjoxfQpXLlc5LnByb3RvdHlwZT17CkY6ZnVuY3Rpb24o
-KXt2YXIgdD10aGlzLHM9dC5jKzEscj10LmIKaWYoczxyKXt0LnNwKEoudzIodC5hLHMpKQp0LmM9cwpy
-ZXR1cm4hMH10LnNwKG51bGwpCnQuYz1yCnJldHVybiExfSwKZ2w6ZnVuY3Rpb24oKXtyZXR1cm4gdGhp
-cy5kfSwKc3A6ZnVuY3Rpb24oYSl7dGhpcy5kPXRoaXMuJHRpLmQuYihhKX0sCiRpQW46MX0KVy5kVy5w
-cm90b3R5cGU9ewpnbVc6ZnVuY3Rpb24oYSl7cmV0dXJuIFcuelgodGhpcy5hLmxvY2F0aW9uKX0sCiRp
-RDA6MSwKJGl2NjoxfQpXLkZiLnByb3RvdHlwZT17fQpXLmtGLnByb3RvdHlwZT17fQpXLm1rLnByb3Rv
-dHlwZT17JGl5MDoxfQpXLktvLnByb3RvdHlwZT17ClBuOmZ1bmN0aW9uKGEpe25ldyBXLmZtKHRoaXMp
-LiQyKGEsbnVsbCl9LApFUDpmdW5jdGlvbihhLGIpe2lmKGI9PW51bGwpSi5MdChhKQplbHNlIGIucmVt
-b3ZlQ2hpbGQoYSl9LApJNDpmdW5jdGlvbihhLGIpe3ZhciB0LHMscixxLHAsbz0hMCxuPW51bGwsbT1u
-dWxsCnRyeXtuPUouaWcoYSkKbT1uLmEuZ2V0QXR0cmlidXRlKCJpcyIpCnUuaC5iKGEpCnQ9ZnVuY3Rp
-b24oYyl7aWYoIShjLmF0dHJpYnV0ZXMgaW5zdGFuY2VvZiBOYW1lZE5vZGVNYXApKXJldHVybiB0cnVl
-CnZhciBsPWMuY2hpbGROb2RlcwppZihjLmxhc3RDaGlsZCYmYy5sYXN0Q2hpbGQhPT1sW2wubGVuZ3Ro
-LTFdKXJldHVybiB0cnVlCmlmKGMuY2hpbGRyZW4paWYoIShjLmNoaWxkcmVuIGluc3RhbmNlb2YgSFRN
-TENvbGxlY3Rpb258fGMuY2hpbGRyZW4gaW5zdGFuY2VvZiBOb2RlTGlzdCkpcmV0dXJuIHRydWUKdmFy
-IGs9MAppZihjLmNoaWxkcmVuKWs9Yy5jaGlsZHJlbi5sZW5ndGgKZm9yKHZhciBqPTA7ajxrO2orKyl7
-dmFyIGk9Yy5jaGlsZHJlbltqXQppZihpLmlkPT0nYXR0cmlidXRlcyd8fGkubmFtZT09J2F0dHJpYnV0
-ZXMnfHxpLmlkPT0nbGFzdENoaWxkJ3x8aS5uYW1lPT0nbGFzdENoaWxkJ3x8aS5pZD09J2NoaWxkcmVu
-J3x8aS5uYW1lPT0nY2hpbGRyZW4nKXJldHVybiB0cnVlfXJldHVybiBmYWxzZX0oYSkKbz1ILm9UKHQp
-PyEwOiEoYS5hdHRyaWJ1dGVzIGluc3RhbmNlb2YgTmFtZWROb2RlTWFwKX1jYXRjaChxKXtILlJ1KHEp
-fXM9ImVsZW1lbnQgdW5wcmludGFibGUiCnRyeXtzPUouaihhKX1jYXRjaChxKXtILlJ1KHEpfXRyeXty
-PVcuclMoYSkKdGhpcy5rUih1LmguYihhKSxiLG8scyxyLHUuRy5iKG4pLEgueShtKSl9Y2F0Y2gocSl7
-aWYoSC5SdShxKSBpbnN0YW5jZW9mIFAudSl0aHJvdyBxCmVsc2V7dGhpcy5FUChhLGIpCndpbmRvdwpw
-PSJSZW1vdmluZyBjb3JydXB0ZWQgZWxlbWVudCAiK0guZChzKQppZih0eXBlb2YgY29uc29sZSE9InVu
-ZGVmaW5lZCIpd2luZG93LmNvbnNvbGUud2FybihwKX19fSwKa1I6ZnVuY3Rpb24oYSxiLGMsZCxlLGYs
-Zyl7dmFyIHQscyxyLHEscCxvLG49dGhpcwppZihjKXtuLkVQKGEsYikKd2luZG93CnQ9IlJlbW92aW5n
-IGVsZW1lbnQgZHVlIHRvIGNvcnJ1cHRlZCBhdHRyaWJ1dGVzIG9uIDwiK2QrIj4iCmlmKHR5cGVvZiBj
-b25zb2xlIT0idW5kZWZpbmVkIil3aW5kb3cuY29uc29sZS53YXJuKHQpCnJldHVybn1pZighbi5hLmkw
-KGEpKXtuLkVQKGEsYikKd2luZG93CnQ9IlJlbW92aW5nIGRpc2FsbG93ZWQgZWxlbWVudCA8IitILmQo
-ZSkrIj4gZnJvbSAiK0guZChiKQppZih0eXBlb2YgY29uc29sZSE9InVuZGVmaW5lZCIpd2luZG93LmNv
-bnNvbGUud2Fybih0KQpyZXR1cm59aWYoZyE9bnVsbClpZighbi5hLkViKGEsImlzIixnKSl7bi5FUChh
-LGIpCndpbmRvdwp0PSJSZW1vdmluZyBkaXNhbGxvd2VkIHR5cGUgZXh0ZW5zaW9uIDwiK0guZChlKSsn
-IGlzPSInK2crJyI+JwppZih0eXBlb2YgY29uc29sZSE9InVuZGVmaW5lZCIpd2luZG93LmNvbnNvbGUu
-d2Fybih0KQpyZXR1cm59dD1mLmdWKCkKcz1ILlZNKHQuc2xpY2UoMCksSC50Nih0KS5DKCJqZDwxPiIp
-KQpmb3Iocj1mLmdWKCkubGVuZ3RoLTEsdD1mLmE7cj49MDstLXIpe2lmKHI+PXMubGVuZ3RoKXJldHVy
-biBILk9IKHMscikKcT1zW3JdCnA9bi5hCm89Si5jSChxKQpILnkocSkKaWYoIXAuRWIoYSxvLHQuZ2V0
-QXR0cmlidXRlKHEpKSl7d2luZG93CnA9IlJlbW92aW5nIGRpc2FsbG93ZWQgYXR0cmlidXRlIDwiK0gu
-ZChlKSsiICIrcSsnPSInK0guZCh0LmdldEF0dHJpYnV0ZShxKSkrJyI+JwppZih0eXBlb2YgY29uc29s
-ZSE9InVuZGVmaW5lZCIpd2luZG93LmNvbnNvbGUud2FybihwKQp0LnJlbW92ZUF0dHJpYnV0ZShxKX19
-aWYodS5hVy5jKGEpKW4uUG4oYS5jb250ZW50KX0sCiRpb246MX0KVy5mbS5wcm90b3R5cGU9ewokMjpm
-dW5jdGlvbihhLGIpe3ZhciB0LHMscixxLHA9dGhpcy5hCnN3aXRjaChhLm5vZGVUeXBlKXtjYXNlIDE6
-cC5JNChhLGIpCmJyZWFrCmNhc2UgODpjYXNlIDExOmNhc2UgMzpjYXNlIDQ6YnJlYWsKZGVmYXVsdDpw
-LkVQKGEsYil9dD1hLmxhc3RDaGlsZApmb3IocD11LkE7bnVsbCE9dDspe3M9bnVsbAp0cnl7cz10LnBy
-ZXZpb3VzU2libGluZ31jYXRjaChyKXtILlJ1KHIpCnE9cC5iKHQpCmEucmVtb3ZlQ2hpbGQocSkKdD1u
-dWxsCnM9YS5sYXN0Q2hpbGR9aWYodCE9bnVsbCl0aGlzLiQyKHQsYSkKdD1wLmIocyl9fSwKJFM6Mzl9
-ClcuTGUucHJvdG90eXBlPXt9ClcuSzcucHJvdG90eXBlPXt9ClcuckIucHJvdG90eXBlPXt9ClcuWFcu
-cHJvdG90eXBlPXt9Clcub2EucHJvdG90eXBlPXt9ClAuaUoucHJvdG90eXBlPXsKVkg6ZnVuY3Rpb24o
-YSl7dmFyIHQscz10aGlzLmEscj1zLmxlbmd0aApmb3IodD0wO3Q8cjsrK3QpaWYoc1t0XT09PWEpcmV0
-dXJuIHQKQy5ObS5pKHMsYSkKQy5ObS5pKHRoaXMuYixudWxsKQpyZXR1cm4gcn0sClB2OmZ1bmN0aW9u
-KGEpe3ZhciB0LHMscixxPXRoaXMscD17fQppZihhPT1udWxsKXJldHVybiBhCmlmKEgubChhKSlyZXR1
-cm4gYQppZih0eXBlb2YgYT09Im51bWJlciIpcmV0dXJuIGEKaWYodHlwZW9mIGE9PSJzdHJpbmciKXJl
-dHVybiBhCmlmKGEgaW5zdGFuY2VvZiBQLmlQKXJldHVybiBuZXcgRGF0ZShhLmEpCmlmKHUuZnYuYyhh
-KSl0aHJvdyBILmIoUC5TWSgic3RydWN0dXJlZCBjbG9uZSBvZiBSZWdFeHAiKSkKaWYodS5jOC5jKGEp
-KXJldHVybiBhCmlmKHUuZC5jKGEpKXJldHVybiBhCmlmKHUuSS5jKGEpKXJldHVybiBhCnQ9dS5kRC5j
-KGEpfHwhMQppZih0KXJldHVybiBhCmlmKHUuRy5jKGEpKXtzPXEuVkgoYSkKdD1xLmIKaWYocz49dC5s
-ZW5ndGgpcmV0dXJuIEguT0godCxzKQpyPXAuYT10W3NdCmlmKHIhPW51bGwpcmV0dXJuIHIKcj17fQpw
-LmE9cgpDLk5tLlkodCxzLHIpCmEuSygwLG5ldyBQLmxSKHAscSkpCnJldHVybiBwLmF9aWYodS5qLmMo
-YSkpe3M9cS5WSChhKQpwPXEuYgppZihzPj1wLmxlbmd0aClyZXR1cm4gSC5PSChwLHMpCnI9cFtzXQpp
-ZihyIT1udWxsKXJldHVybiByCnJldHVybiBxLmVrKGEscyl9aWYodS5lSC5jKGEpKXtzPXEuVkgoYSkK
-dD1xLmIKaWYocz49dC5sZW5ndGgpcmV0dXJuIEguT0godCxzKQpyPXAuYj10W3NdCmlmKHIhPW51bGwp
-cmV0dXJuIHIKcj17fQpwLmI9cgpDLk5tLlkodCxzLHIpCnEuaW0oYSxuZXcgUC5qZyhwLHEpKQpyZXR1
-cm4gcC5ifXRocm93IEguYihQLlNZKCJzdHJ1Y3R1cmVkIGNsb25lIG9mIG90aGVyIHR5cGUiKSl9LApl
-azpmdW5jdGlvbihhLGIpe3ZhciB0LHM9Si5VNihhKSxyPXMuZ0EoYSkscT1uZXcgQXJyYXkocikKQy5O
-bS5ZKHRoaXMuYixiLHEpCmZvcih0PTA7dDxyOysrdClDLk5tLlkocSx0LHRoaXMuUHYocy5xKGEsdCkp
-KQpyZXR1cm4gcX19ClAubFIucHJvdG90eXBlPXsKJDI6ZnVuY3Rpb24oYSxiKXt0aGlzLmEuYVthXT10
-aGlzLmIuUHYoYil9LAokUzoxfQpQLmpnLnByb3RvdHlwZT17CiQyOmZ1bmN0aW9uKGEsYil7dGhpcy5h
-LmJbYV09dGhpcy5iLlB2KGIpfSwKJFM6MX0KUC5CZi5wcm90b3R5cGU9ewppbTpmdW5jdGlvbihhLGIp
-e3ZhciB0LHMscixxCnUuYjguYihiKQpmb3IodD1PYmplY3Qua2V5cyhhKSxzPXQubGVuZ3RoLHI9MDty
-PHM7KytyKXtxPXRbcl0KYi4kMihxLGFbcV0pfX19ClAuQXMucHJvdG90eXBlPXsKVDpmdW5jdGlvbihh
-KXt2YXIgdApILnkoYSkKdD0kLmhHKCkuYgppZih0eXBlb2YgYSE9InN0cmluZyIpSC52aChILnRMKGEp
-KQppZih0LnRlc3QoYSkpcmV0dXJuIGEKdGhyb3cgSC5iKFAuTDMoYSwidmFsdWUiLCJOb3QgYSB2YWxp
-ZCBjbGFzcyB0b2tlbiIpKX0sCnc6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuUCgpLkgoMCwiICIpfSwK
-Z2t6OmZ1bmN0aW9uKGEpe3ZhciB0PXRoaXMuUCgpCnJldHVybiBQLnJqKHQsdC5yLEguTGgodCkuZCl9
-LApnQTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5QKCkuYX0sCnRnOmZ1bmN0aW9uKGEsYil7dGhpcy5U
-KGIpCnJldHVybiB0aGlzLlAoKS50ZygwLGIpfSwKaTpmdW5jdGlvbihhLGIpe3RoaXMuVChiKQpyZXR1
-cm4gSC54ZCh0aGlzLk9TKG5ldyBQLkdFKGIpKSl9LApSOmZ1bmN0aW9uKGEsYil7dmFyIHQscwp0aGlz
-LlQoYikKdD10aGlzLlAoKQpzPXQuUigwLGIpCnRoaXMuWCh0KQpyZXR1cm4gc30sCkZWOmZ1bmN0aW9u
-KGEsYil7dGhpcy5PUyhuZXcgUC5ONyh0aGlzLHUuWC5iKGIpKSl9LApWMTpmdW5jdGlvbihhKXt0aGlz
-Lk9TKG5ldyBQLnVRKCkpfSwKT1M6ZnVuY3Rpb24oYSl7dmFyIHQscwp1LmNoLmIoYSkKdD10aGlzLlAo
-KQpzPWEuJDEodCkKdGhpcy5YKHQpCnJldHVybiBzfX0KUC5HRS5wcm90b3R5cGU9ewokMTpmdW5jdGlv
-bihhKXtyZXR1cm4gdS5DLmIoYSkuaSgwLHRoaXMuYSl9LAokUzozMn0KUC5ONy5wcm90b3R5cGU9ewok
-MTpmdW5jdGlvbihhKXt2YXIgdD10aGlzLmIscz1ILnQ2KHQpCnJldHVybiB1LkMuYihhKS5GVigwLG5l
-dyBILkE4KHQscy5DKCJxVSgxKSIpLmIodGhpcy5hLmd1TSgpKSxzLkMoIkE4PDEscVU+IikpKX0sCiRT
-OjE2fQpQLnVRLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3UuQy5iKGEpCmlmKGEuYT4wKXthLmI9
-YS5jPWEuZD1hLmU9YS5mPW51bGwKYS5hPTAKYS5TKCl9cmV0dXJufSwKJFM6MTZ9ClAuaEYucHJvdG90
-eXBlPXskaWhGOjF9ClAuUEMucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dmFyIHQKdS5aLmIoYSkK
-dD1mdW5jdGlvbihiLGMsZCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGIoYyxkLHRoaXMsQXJyYXku
-cHJvdG90eXBlLnNsaWNlLmFwcGx5KGFyZ3VtZW50cykpfX0oUC5SNCxhLCExKQpQLkRtKHQsJC53KCks
-YSkKcmV0dXJuIHR9LAokUzozfQpQLlltLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3JldHVybiBu
-ZXcgdGhpcy5hKGEpfSwKJFM6M30KUC5Oei5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXtyZXR1cm4g
-bmV3IFAucjcoYSl9LAokUzozNH0KUC5ucC5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXtyZXR1cm4g
-bmV3IFAuVHooYSx1LmFtKX0sCiRTOjM1fQpQLlV0LnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3Jl
-dHVybiBuZXcgUC5FNChhKX0sCiRTOjM2fQpQLkU0LnByb3RvdHlwZT17CnE6ZnVuY3Rpb24oYSxiKXtp
-Zih0eXBlb2YgYiE9InN0cmluZyImJnR5cGVvZiBiIT0ibnVtYmVyIil0aHJvdyBILmIoUC54WSgicHJv
-cGVydHkgaXMgbm90IGEgU3RyaW5nIG9yIG51bSIpKQpyZXR1cm4gUC5MNyh0aGlzLmFbYl0pfSwKWTpm
-dW5jdGlvbihhLGIsYyl7aWYodHlwZW9mIGIhPSJzdHJpbmciJiZ0eXBlb2YgYiE9Im51bWJlciIpdGhy
-b3cgSC5iKFAueFkoInByb3BlcnR5IGlzIG5vdCBhIFN0cmluZyBvciBudW0iKSkKdGhpcy5hW2JdPVAu
-d1koYyl9LApETjpmdW5jdGlvbihhLGIpe2lmKGI9PW51bGwpcmV0dXJuITEKcmV0dXJuIGIgaW5zdGFu
-Y2VvZiBQLkU0JiZ0aGlzLmE9PT1iLmF9LAp3OmZ1bmN0aW9uKGEpe3ZhciB0LHMKdHJ5e3Q9U3RyaW5n
-KHRoaXMuYSkKcmV0dXJuIHR9Y2F0Y2gocyl7SC5SdShzKQp0PXRoaXMueGIoMCkKcmV0dXJuIHR9fSwK
-Vjc6ZnVuY3Rpb24oYSxiKXt2YXIgdCxzPXRoaXMuYQppZihiPT1udWxsKXQ9bnVsbAplbHNle3Q9SC50
-NihiKQp0PVAuQ0gobmV3IEguQTgoYix0LkMoIkAoMSkiKS5iKFAuaUcoKSksdC5DKCJBODwxLEA+Iikp
-LCEwLHUueil9cmV0dXJuIFAuTDcoc1thXS5hcHBseShzLHQpKX0sCmdpTzpmdW5jdGlvbihhKXtyZXR1
-cm4gMH19ClAucjcucHJvdG90eXBlPXt9ClAuVHoucHJvdG90eXBlPXsKY1A6ZnVuY3Rpb24oYSl7dmFy
-IHQ9dGhpcyxzPWE8MHx8YT49dC5nQSh0KQppZihzKXRocm93IEguYihQLlRFKGEsMCx0LmdBKHQpLG51
-bGwsbnVsbCkpfSwKcTpmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBiPT0ibnVtYmVyIiYmYj09PUMuam4u
-eXUoYikpdGhpcy5jUChILlNjKGIpKQpyZXR1cm4gdGhpcy4kdGkuZC5iKHRoaXMuVXIoMCxiKSl9LApZ
-OmZ1bmN0aW9uKGEsYixjKXt2YXIgdAp0aGlzLiR0aS5kLmIoYykKdD1DLmpuLnl1KGIpCmlmKGI9PT10
-KXRoaXMuY1AoYikKdGhpcy5lNCgwLGIsYyl9LApnQTpmdW5jdGlvbihhKXt2YXIgdD10aGlzLmEubGVu
-Z3RoCmlmKHR5cGVvZiB0PT09Im51bWJlciImJnQ+Pj4wPT09dClyZXR1cm4gdAp0aHJvdyBILmIoUC5Q
-VigiQmFkIEpzQXJyYXkgbGVuZ3RoIikpfSwKJGljWDoxLAokaXpNOjF9ClAuY28ucHJvdG90eXBlPXt9
-ClAubmQucHJvdG90eXBlPXskaW5kOjF9ClAuS2UucHJvdG90eXBlPXsKUDpmdW5jdGlvbigpe3ZhciB0
-LHMscixxLHA9dGhpcy5hLmdldEF0dHJpYnV0ZSgiY2xhc3MiKSxvPVAuTHModS5OKQppZihwPT1udWxs
-KXJldHVybiBvCmZvcih0PXAuc3BsaXQoIiAiKSxzPXQubGVuZ3RoLHI9MDtyPHM7KytyKXtxPUouVDAo
-dFtyXSkKaWYocS5sZW5ndGghPT0wKW8uaSgwLHEpfXJldHVybiBvfSwKWDpmdW5jdGlvbihhKXt0aGlz
-LmEuc2V0QXR0cmlidXRlKCJjbGFzcyIsYS5IKDAsIiAiKSl9fQpQLmQ1LnByb3RvdHlwZT17CmdEOmZ1
-bmN0aW9uKGEpe3JldHVybiBuZXcgUC5LZShhKX0sCnNoZjpmdW5jdGlvbihhLGIpe3RoaXMuWUMoYSxi
-KX0sCnI2OmZ1bmN0aW9uKGEsYixjLGQpe3ZhciB0LHMscixxLHAsbwppZihkPT1udWxsKXt0PUguVk0o
-W10sdS5rKQpkPW5ldyBXLnZEKHQpCkMuTm0uaSh0LFcuVHcobnVsbCkpCkMuTm0uaSh0LFcuQmwoKSkK
-Qy5ObS5pKHQsbmV3IFcuT3coKSl9Yz1uZXcgVy5LbyhkKQpzPSc8c3ZnIHZlcnNpb249IjEuMSI+JytI
-LmQoYikrIjwvc3ZnPiIKdD1kb2N1bWVudApyPXQuYm9keQpxPShyJiZDLlJZKS5BSChyLHMsYykKcD10
-LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKQpxLnRvU3RyaW5nCnQ9bmV3IFcuZTcocSkKbz10LmdyOCh0
-KQpmb3IoO3Q9by5maXJzdENoaWxkLHQhPW51bGw7KXAuYXBwZW5kQ2hpbGQodCkKcmV0dXJuIHB9LApn
-Vmw6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBXLkNxKGEsImNsaWNrIiwhMSx1LlEpfSwKJGlkNToxfQpQ
-Lm42LnByb3RvdHlwZT17JGljWDoxLCRpek06MSwkaUFTOjF9ClUuZDIucHJvdG90eXBlPXt9ClUuU2Uu
-cHJvdG90eXBlPXt9ClUudUYucHJvdG90eXBlPXt9ClUuTWwucHJvdG90eXBlPXt9ClUueUQucHJvdG90
-eXBlPXt9ClUud2IucHJvdG90eXBlPXt9CkIuajgucHJvdG90eXBlPXt9CkIucXAucHJvdG90eXBlPXt9
-ClQuR1YucHJvdG90eXBlPXt9CkwuZS5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXt2YXIgdCxzLHIs
-cSxwLG8KdS5CLmIoYSkKdD13aW5kb3cubG9jYXRpb24ucGF0aG5hbWUKcz1MLkc2KHdpbmRvdy5sb2Nh
-dGlvbi5ocmVmKQpyPUwuYUsod2luZG93LmxvY2F0aW9uLmhyZWYpCkwuR2UoKQppZih0IT09Ii8iJiZ0
-IT09Si5UMChkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIucm9vdCIpLnRleHRDb250ZW50KSlMLkc3KHQs
-cyxyLG5ldyBMLlZXKHQscyxyKSkKcT1KLnFGKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5hcHBseS1t
-aWdyYXRpb24iKSkKcD1xLiR0aQpvPXAuQygifigxKSIpLmIobmV3IEwub1ooKSkKdS5NLmIobnVsbCkK
-Vy5KRShxLmEscS5iLG8sITEscC5kKX0sCiRTOjE3fQpMLlZXLnByb3RvdHlwZT17CiQwOmZ1bmN0aW9u
-KCl7TC5Gcih0aGlzLmEsdGhpcy5iLHRoaXMuYyl9LAokUzowfQpMLm9aLnByb3RvdHlwZT17CiQxOmZ1
-bmN0aW9uKGEpe3UuVi5iKGEpCkwudHkoIi9hcHBseS1taWdyYXRpb24iKS5XNyhuZXcgTC5qcigpLHUu
-UCkuT0EobmV3IEwucWwoKSl9LAokUzo1fQpMLmpyLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3Zh
-ciB0CnUuci5iKGEpCnQ9ZG9jdW1lbnQuYm9keQp0LmNsYXNzTGlzdC5yZW1vdmUoInByb3Bvc2VkIikK
-dC5jbGFzc0xpc3QuYWRkKCJhcHBsaWVkIil9LAokUzo3fQpMLnFsLnByb3RvdHlwZT17CiQyOmZ1bmN0
-aW9uKGEsYil7TC5xSigiYXBwbHkgbWlncmF0aW9uIGVycm9yOiAiK0guZChhKSxiKQp3aW5kb3cuYWxl
-cnQoIkNvdWxkIG5vdCBhcHBseSBtaWdyYXRpb24gKCIrSC5kKGEpKyIpLiIpfSwKJEM6IiQyIiwKJFI6
-MiwKJFM6MX0KTC5MLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3ZhciB0LHMscgp1LkIuYihhKQp0
-PXdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZQpzPUwuRzYod2luZG93LmxvY2F0aW9uLmhyZWYpCnI9TC5h
-Syh3aW5kb3cubG9jYXRpb24uaHJlZikKaWYodC5sZW5ndGg+MSlMLkc3KHQscyxyLG51bGwpCmVsc2V7
-TC5CRSh0LG5ldyBCLnFwKCIiLCIiLCIiLEMueEQpKQpMLkJYKCImbmJzcDsiLG51bGwpfX0sCiRTOjE3
-fQpMLld4LnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3ZhciB0LHMscixxPSJjb2xsYXBzZWQiCnUu
-Vi5iKGEpCnQ9dGhpcy5hCnM9Si5SRSh0KQpyPXRoaXMuYgppZighcy5nRCh0KS50ZygwLHEpKXtzLmdE
-KHQpLmkoMCxxKQpKLmRSKHIpLmkoMCxxKX1lbHNle3MuZ0QodCkuUigwLHEpCkouZFIocikuUigwLHEp
-fX0sCiRTOjV9CkwuQU8ucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dmFyIHQ9Si5xRih1LmguYihh
-KSkscz10LiR0aSxyPXMuQygifigxKSIpLmIobmV3IEwuZE4oKSkKdS5NLmIobnVsbCkKVy5KRSh0LmEs
-dC5iLHIsITEscy5kKX0sCiRTOjZ9CkwuZE4ucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dmFyIHQK
-dS5WLmIoYSkKdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJ0YWJsZVtkYXRhLXBhdGhdIikKdC50b1N0
-cmluZwpMLnQyKGEsdC5nZXRBdHRyaWJ1dGUoImRhdGEtIituZXcgVy5TeShuZXcgVy5pNyh0KSkuTygi
-cGF0aCIpKSl9LAokUzo1fQpMLkhvLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3ZhciB0LHMscgp1
-LmguYihhKQp0PUoucUYoYSkKcz10LiR0aQpyPXMuQygifigxKSIpLmIobmV3IEwueHooYSx0aGlzLmEp
-KQp1Lk0uYihudWxsKQpXLkpFKHQuYSx0LmIsciwhMSxzLmQpfSwKJFM6Nn0KTC54ei5wcm90b3R5cGU9
-ewokMTpmdW5jdGlvbihhKXt2YXIgdAp1LlYuYihhKQp0PXRoaXMuYQpMLmhYKHRoaXMuYixQLlFBKHQu
-Z2V0QXR0cmlidXRlKCJkYXRhLSIrbmV3IFcuU3kobmV3IFcuaTcodCkpLk8oIm9mZnNldCIpKSxudWxs
-LG51bGwpKX0sCiRTOjV9CkwuSUMucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dmFyIHQ9Si5xRih1
-LmguYihhKSkscz10LiR0aQpzLkMoIn4oMSkiKS5iKEwuSDAoKSkKdS5NLmIobnVsbCkKVy5KRSh0LmEs
-dC5iLEwuSDAoKSwhMSxzLmQpfSwKJFM6Nn0KTC5MMS5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXt2
-YXIgdAp1LnIuYihhKQp0PWEuc3RhdHVzCmlmKHQ9PT0yMDApcmV0dXJuIGEKZWxzZSB0aHJvdyBILmIo
-IlJlcXVlc3QgZmFpbGVkOyBzdGF0dXMgb2YgIitILmQodCkpfSwKJFM6NDF9CkwublQucHJvdG90eXBl
-PXsKJDA6ZnVuY3Rpb24oKXtMLkZyKHRoaXMuYS5hLHRoaXMuYix0aGlzLmMpfSwKJFM6MH0KTC5CWi5w
-cm90b3R5cGU9ewokMDpmdW5jdGlvbigpe0wuRnIodGhpcy5hLmEsbnVsbCxudWxsKX0sCiRTOjB9Ckwu
-R0gucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dS5oLmIoYSkKJC56QigpLnRvU3RyaW5nCnUudi5i
-KCQub3coKS5xKDAsImhsanMiKSkuVjcoImhpZ2hsaWdodEJsb2NrIixbYV0pfSwKJFM6Nn0KTC5EVC5w
-cm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXt2YXIgdAp1LnIuYihhKQp0PWEuc3RhdHVzCmlmKHQ9PT0y
-MDApe0wuVDEoVS55dShDLkN0LnBXKDAsYS5yZXNwb25zZVRleHQsbnVsbCkpKQpMLnlYKCIuZWRpdC1w
-YW5lbCAucGFuZWwtY29udGVudCIpfWVsc2Ugd2luZG93LmFsZXJ0KCJSZXF1ZXN0IGZhaWxlZDsgc3Rh
-dHVzIG9mICIrSC5kKHQpKX0sCiRTOjd9CkwuZUgucHJvdG90eXBlPXsKJDI6ZnVuY3Rpb24oYSxiKXtM
-LnFKKCJsb2FkUmVnaW9uRXhwbGFuYXRpb246ICIrSC5kKGEpLGIpCndpbmRvdy5hbGVydCgiQ291bGQg
-bm90IGxvYWQgIitILmQodGhpcy5hKSsiICgiK0guZChhKSsiKS4iKX0sCiRDOiIkMiIsCiRSOjIsCiRT
-OjF9CkwuekQucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dmFyIHQscyxyPXRoaXMKdS5yLmIoYSkK
-dD1hLnN0YXR1cwppZih0PT09MjAwKXtzPXIuYQpMLkJFKHMsQi5ZZih1LmIuYihDLkN0LnBXKDAsYS5y
-ZXNwb25zZVRleHQsbnVsbCkpKSkKdD1yLmIKTC5mRyh0LHIuYykKTC5CWChDLnhCLnRnKHMsIj8iKT9D
-LnhCLk5qKHMsMCxDLnhCLk9ZKHMsIj8iKSk6cyx0KQp0PXIuZAppZih0IT1udWxsKXQuJDAoKX1lbHNl
-IHdpbmRvdy5hbGVydCgiUmVxdWVzdCBmYWlsZWQ7IHN0YXR1cyBvZiAiK0guZCh0KSl9LAokUzo3fQpM
-Lk9FLnByb3RvdHlwZT17CiQyOmZ1bmN0aW9uKGEsYil7TC5xSigibG9hZEZpbGU6ICIrSC5kKGEpLGIp
-CndpbmRvdy5hbGVydCgiQ291bGQgbm90IGxvYWQgIit0aGlzLmErIiAoIitILmQoYSkrIikuIil9LAok
-QzoiJDIiLAokUjoyLAokUzoxfQpMLlRXLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3ZhciB0LHMs
-cgp1LnIuYihhKQp0PWEuc3RhdHVzCmlmKHQ9PT0yMDApe3M9Qy5DdC5wVygwLGEucmVzcG9uc2VUZXh0
-LG51bGwpCnI9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLm5hdi10cmVlIikKSi5sNShyLCIiKQpMLnRY
-KHIsTC5tSyhzKSl9ZWxzZSB3aW5kb3cuYWxlcnQoIlJlcXVlc3QgZmFpbGVkOyBzdGF0dXMgb2YgIitI
-LmQodCkpfSwKJFM6N30KTC54ci5wcm90b3R5cGU9ewokMjpmdW5jdGlvbihhLGIpe0wucUooImxvYWRO
-YXZpZ2F0aW9uVHJlZTogIitILmQoYSksYikKd2luZG93LmFsZXJ0KCJDb3VsZCBub3QgbG9hZCAiK3Ro
-aXMuYSsiICgiK0guZChhKSsiKS4iKX0sCiRDOiIkMiIsCiRSOjIsCiRTOjF9CkwuRUUucHJvdG90eXBl
-PXsKJDE6ZnVuY3Rpb24oYSl7dmFyIHQscwp1LlYuYihhKQp0PXRoaXMuYQpzPXRoaXMuYgpMLmFmKHdp
-bmRvdy5sb2NhdGlvbi5wYXRobmFtZSx0LHMsbmV3IEwuUUwodCxzKSkKTC5oWCh0aGlzLmMsdCl9LAok
-Uzo1fQpMLlFMLnByb3RvdHlwZT17CiQwOmZ1bmN0aW9uKCl7TC5Gcih3aW5kb3cubG9jYXRpb24ucGF0
-aG5hbWUsdGhpcy5hLHRoaXMuYil9LAokUzowfQpMLlZTLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEp
-e3ZhciB0LHM9InNlbGVjdGVkLWZpbGUiCnUuaC5iKGEpCmEudG9TdHJpbmcKdD1KLlJFKGEpCmlmKGEu
-Z2V0QXR0cmlidXRlKCJkYXRhLSIrbmV3IFcuU3kobmV3IFcuaTcoYSkpLk8oIm5hbWUiKSk9PT10aGlz
-LmEuYSl0LmdEKGEpLmkoMCxzKQplbHNlIHQuZ0QoYSkuUigwLHMpfSwKJFM6Nn0KTC5YQS5wcm90b3R5
-cGU9ewpFYjpmdW5jdGlvbihhLGIsYyl7cmV0dXJuITB9LAppMDpmdW5jdGlvbihhKXtyZXR1cm4hMH0s
-CiRpa0Y6MX0KTC5aWi5wcm90b3R5cGU9e30KTC55OC5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3Jl
-dHVybiB0aGlzLmJ9fQpNLmxJLnByb3RvdHlwZT17CldPOmZ1bmN0aW9uKGEsYil7dmFyIHQscz1udWxs
-Ck0uWUYoImFic29sdXRlIixILlZNKFtiLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsXSx1LnMp
-KQp0PXRoaXMuYQp0PXQuWXIoYik+MCYmIXQuaEsoYikKaWYodClyZXR1cm4gYgp0PUQuUlgoKQpyZXR1
-cm4gdGhpcy5xNygwLHQsYixzLHMscyxzLHMscyl9LAp0TTpmdW5jdGlvbihhKXt2YXIgdCxzLHI9WC5D
-TChhLHRoaXMuYSkKci5JVigpCnQ9ci5kCnM9dC5sZW5ndGgKaWYocz09PTApe3Q9ci5iCnJldHVybiB0
-PT1udWxsPyIuIjp0fWlmKHM9PT0xKXt0PXIuYgpyZXR1cm4gdD09bnVsbD8iLiI6dH1pZigwPj1zKXJl
-dHVybiBILk9IKHQsLTEpCnQucG9wKCkKQy5ObS5tdihyLmUpCnIuSVYoKQpyZXR1cm4gci53KDApfSwK
-cTc6ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoLGkpe3ZhciB0PUguVk0oW2IsYyxkLGUsZixnLGgsaV0s
-dS5zKQpNLllGKCJqb2luIix0KQpyZXR1cm4gdGhpcy5JUChuZXcgSC5VNSh0LHUuYkIuYihuZXcgTS5N
-aSgpKSx1LmNjKSl9LApJUDpmdW5jdGlvbihhKXt2YXIgdCxzLHIscSxwLG8sbixtLGwKdS5YLmIoYSkK
-Zm9yKHQ9YS4kdGkscz10LkMoImEyKGNYLkUpIikuYihuZXcgTS5xNygpKSxyPWEuZ2t6KGEpLHQ9bmV3
-IEguU08ocixzLHQuQygiU088Y1guRT4iKSkscz10aGlzLmEscT0hMSxwPSExLG89IiI7dC5GKCk7KXtu
-PXIuZ2woKQppZihzLmhLKG4pJiZwKXttPVguQ0wobixzKQpsPW8uY2hhckNvZGVBdCgwKT09MD9vOm8K
-bz1DLnhCLk5qKGwsMCxzLlNwKGwsITApKQptLmI9bwppZihzLmRzKG8pKUMuTm0uWShtLmUsMCxzLmdt
-SSgpKQpvPW0udygwKX1lbHNlIGlmKHMuWXIobik+MCl7cD0hcy5oSyhuKQpvPUguZChuKX1lbHNle2lm
-KCEobi5sZW5ndGg+MCYmcy5VZChuWzBdKSkpaWYocSlvKz1zLmdtSSgpCm8rPUguZChuKX1xPXMuZHMo
-bil9cmV0dXJuIG8uY2hhckNvZGVBdCgwKT09MD9vOm99LApvNTpmdW5jdGlvbihhKXt2YXIgdAppZigh
-dGhpcy55MyhhKSlyZXR1cm4gYQp0PVguQ0woYSx0aGlzLmEpCnQuclIoKQpyZXR1cm4gdC53KDApfSwK
-eTM6ZnVuY3Rpb24oYSl7dmFyIHQscyxyLHEscCxvLG4sbSxsLGsKYS50b1N0cmluZwp0PXRoaXMuYQpz
-PXQuWXIoYSkKaWYocyE9PTApe2lmKHQ9PT0kLktrKCkpZm9yKHI9MDtyPHM7KytyKWlmKEMueEIuVyhh
-LHIpPT09NDcpcmV0dXJuITAKcT1zCnA9NDd9ZWxzZXtxPTAKcD1udWxsfWZvcihvPW5ldyBILnFqKGEp
-LmEsbj1vLmxlbmd0aCxyPXEsbT1udWxsO3I8bjsrK3IsbT1wLHA9bCl7bD1DLnhCLm0obyxyKQppZih0
-LnI0KGwpKXtpZih0PT09JC5LaygpJiZsPT09NDcpcmV0dXJuITAKaWYocCE9bnVsbCYmdC5yNChwKSly
-ZXR1cm4hMAppZihwPT09NDYpaz1tPT1udWxsfHxtPT09NDZ8fHQucjQobSkKZWxzZSBrPSExCmlmKGsp
-cmV0dXJuITB9fWlmKHA9PW51bGwpcmV0dXJuITAKaWYodC5yNChwKSlyZXR1cm4hMAppZihwPT09NDYp
-dD1tPT1udWxsfHx0LnI0KG0pfHxtPT09NDYKZWxzZSB0PSExCmlmKHQpcmV0dXJuITAKcmV0dXJuITF9
-LApIUDpmdW5jdGlvbihhLGIpe3ZhciB0LHMscixxLHAsbz10aGlzLG49J1VuYWJsZSB0byBmaW5kIGEg
-cGF0aCB0byAiJwpiPW8uV08oMCxiKQp0PW8uYQppZih0LllyKGIpPD0wJiZ0LllyKGEpPjApcmV0dXJu
-IG8ubzUoYSkKaWYodC5ZcihhKTw9MHx8dC5oSyhhKSlhPW8uV08oMCxhKQppZih0LllyKGEpPD0wJiZ0
-LllyKGIpPjApdGhyb3cgSC5iKFguSlQobitILmQoYSkrJyIgZnJvbSAiJytILmQoYikrJyIuJykpCnM9
-WC5DTChiLHQpCnMuclIoKQpyPVguQ0woYSx0KQpyLnJSKCkKcT1zLmQKaWYocS5sZW5ndGg+MCYmSi5S
-TShxWzBdLCIuIikpcmV0dXJuIHIudygwKQpxPXMuYgpwPXIuYgppZihxIT1wKXE9cT09bnVsbHx8cD09
-bnVsbHx8IXQuTmMocSxwKQplbHNlIHE9ITEKaWYocSlyZXR1cm4gci53KDApCndoaWxlKCEwKXtxPXMu
-ZAppZihxLmxlbmd0aD4wKXtwPXIuZApxPXAubGVuZ3RoPjAmJnQuTmMocVswXSxwWzBdKX1lbHNlIHE9
-ITEKaWYoIXEpYnJlYWsKQy5ObS5XNChzLmQsMCkKQy5ObS5XNChzLmUsMSkKQy5ObS5XNChyLmQsMCkK
-Qy5ObS5XNChyLmUsMSl9cT1zLmQKaWYocS5sZW5ndGg+MCYmSi5STShxWzBdLCIuLiIpKXRocm93IEgu
-YihYLkpUKG4rSC5kKGEpKyciIGZyb20gIicrSC5kKGIpKyciLicpKQpxPXUuTgpDLk5tLlVHKHIuZCww
-LFAuTzgocy5kLmxlbmd0aCwiLi4iLHEpKQpDLk5tLlkoci5lLDAsIiIpCkMuTm0uVUcoci5lLDEsUC5P
-OChzLmQubGVuZ3RoLHQuZ21JKCkscSkpCnQ9ci5kCnE9dC5sZW5ndGgKaWYocT09PTApcmV0dXJuIi4i
-CmlmKHE+MSYmSi5STShDLk5tLmdyWih0KSwiLiIpKXt0PXIuZAppZigwPj10Lmxlbmd0aClyZXR1cm4g
-SC5PSCh0LC0xKQp0LnBvcCgpCnQ9ci5lCkMuTm0ubXYodCkKQy5ObS5tdih0KQpDLk5tLmkodCwiIil9
-ci5iPSIiCnIuSVYoKQpyZXR1cm4gci53KDApfX0KTS5NaS5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihh
-KXtyZXR1cm4gSC55KGEpIT1udWxsfSwKJFM6OH0KTS5xNy5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihh
-KXtyZXR1cm4gSC55KGEpIT09IiJ9LAokUzo4fQpNLk5vLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEp
-e0gueShhKQpyZXR1cm4gYT09bnVsbD8ibnVsbCI6JyInK2ErJyInfSwKJFM6NH0KQi5MdS5wcm90b3R5
-cGU9ewp4WjpmdW5jdGlvbihhKXt2YXIgdCxzPXRoaXMuWXIoYSkKaWYocz4wKXJldHVybiBKLmxkKGEs
-MCxzKQppZih0aGlzLmhLKGEpKXtpZigwPj1hLmxlbmd0aClyZXR1cm4gSC5PSChhLDApCnQ9YVswXX1l
-bHNlIHQ9bnVsbApyZXR1cm4gdH0sCk5jOmZ1bmN0aW9uKGEsYil7cmV0dXJuIGE9PWJ9fQpYLldELnBy
-b3RvdHlwZT17CklWOmZ1bmN0aW9uKCl7dmFyIHQscyxyPXRoaXMKd2hpbGUoITApe3Q9ci5kCmlmKCEo
-dC5sZW5ndGghPT0wJiZKLlJNKEMuTm0uZ3JaKHQpLCIiKSkpYnJlYWsKdD1yLmQKaWYoMD49dC5sZW5n
-dGgpcmV0dXJuIEguT0godCwtMSkKdC5wb3AoKQpDLk5tLm12KHIuZSl9dD1yLmUKcz10Lmxlbmd0aApp
-ZihzPjApQy5ObS5ZKHQscy0xLCIiKX0sCnJSOmZ1bmN0aW9uKCl7dmFyIHQscyxyLHEscCxvLG4sbT10
-aGlzLGw9SC5WTShbXSx1LnMpCmZvcih0PW0uZCxzPXQubGVuZ3RoLHI9MCxxPTA7cTx0Lmxlbmd0aDt0
-Lmxlbmd0aD09PXN8fCgwLEgubGspKHQpLCsrcSl7cD10W3FdCm89Si5pYShwKQppZighKG8uRE4ocCwi
-LiIpfHxvLkROKHAsIiIpKSlpZihvLkROKHAsIi4uIikpaWYobC5sZW5ndGg+MClsLnBvcCgpCmVsc2Ug
-KytyCmVsc2UgQy5ObS5pKGwscCl9aWYobS5iPT1udWxsKUMuTm0uVUcobCwwLFAuTzgociwiLi4iLHUu
-TikpCmlmKGwubGVuZ3RoPT09MCYmbS5iPT1udWxsKUMuTm0uaShsLCIuIikKbj1QLmRIKGwubGVuZ3Ro
-LG5ldyBYLnFSKG0pLCEwLHUuTikKdD1tLmIKdD10IT1udWxsJiZsLmxlbmd0aD4wJiZtLmEuZHModCk/
-bS5hLmdtSSgpOiIiCkgudDYobikuZC5iKHQpCmlmKCEhbi5maXhlZCRsZW5ndGgpSC52aChQLkw0KCJp
-bnNlcnQiKSkKbi5zcGxpY2UoMCwwLHQpCm0uc25KKGwpCm0uc1BoKG4pCnQ9bS5iCmlmKHQhPW51bGwm
-Jm0uYT09PSQuS2soKSl7dC50b1N0cmluZwptLmI9SC55cyh0LCIvIiwiXFwiKX1tLklWKCl9LAp3OmZ1
-bmN0aW9uKGEpe3ZhciB0LHMscj10aGlzLHE9ci5iCnE9cSE9bnVsbD9xOiIiCmZvcih0PTA7dDxyLmQu
-bGVuZ3RoOysrdCl7cz1yLmUKaWYodD49cy5sZW5ndGgpcmV0dXJuIEguT0gocyx0KQpzPXErSC5kKHNb
-dF0pCnE9ci5kCmlmKHQ+PXEubGVuZ3RoKXJldHVybiBILk9IKHEsdCkKcT1zK0guZChxW3RdKX1xKz1I
-LmQoQy5ObS5nclooci5lKSkKcmV0dXJuIHEuY2hhckNvZGVBdCgwKT09MD9xOnF9LApzbko6ZnVuY3Rp
-b24oYSl7dGhpcy5kPXUuYS5iKGEpfSwKc1BoOmZ1bmN0aW9uKGEpe3RoaXMuZT11LmEuYihhKX19Clgu
-cVIucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYS5hLmdtSSgpfSwKJFM6NDJ9
-ClguZHYucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXtyZXR1cm4iUGF0aEV4Y2VwdGlvbjogIit0aGlz
-LmF9fQpPLnpMLnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuZ29jKHRoaXMpfX0K
-RS5PRi5wcm90b3R5cGU9ewpVZDpmdW5jdGlvbihhKXtyZXR1cm4gQy54Qi50ZyhhLCIvIil9LApyNDpm
-dW5jdGlvbihhKXtyZXR1cm4gYT09PTQ3fSwKZHM6ZnVuY3Rpb24oYSl7dmFyIHQ9YS5sZW5ndGgKcmV0
-dXJuIHQhPT0wJiZDLnhCLm0oYSx0LTEpIT09NDd9LApTcDpmdW5jdGlvbihhLGIpe2lmKGEubGVuZ3Ro
-IT09MCYmQy54Qi5XKGEsMCk9PT00NylyZXR1cm4gMQpyZXR1cm4gMH0sCllyOmZ1bmN0aW9uKGEpe3Jl
-dHVybiB0aGlzLlNwKGEsITEpfSwKaEs6ZnVuY3Rpb24oYSl7cmV0dXJuITF9LApnb2M6ZnVuY3Rpb24o
-KXtyZXR1cm4icG9zaXgifSwKZ21JOmZ1bmN0aW9uKCl7cmV0dXJuIi8ifX0KRi5ydS5wcm90b3R5cGU9
-ewpVZDpmdW5jdGlvbihhKXtyZXR1cm4gQy54Qi50ZyhhLCIvIil9LApyNDpmdW5jdGlvbihhKXtyZXR1
-cm4gYT09PTQ3fSwKZHM6ZnVuY3Rpb24oYSl7dmFyIHQ9YS5sZW5ndGgKaWYodD09PTApcmV0dXJuITEK
-aWYoQy54Qi5tKGEsdC0xKSE9PTQ3KXJldHVybiEwCnJldHVybiBDLnhCLlRjKGEsIjovLyIpJiZ0aGlz
-LllyKGEpPT09dH0sClNwOmZ1bmN0aW9uKGEsYil7dmFyIHQscyxyLHEscD1hLmxlbmd0aAppZihwPT09
-MClyZXR1cm4gMAppZihDLnhCLlcoYSwwKT09PTQ3KXJldHVybiAxCmZvcih0PTA7dDxwOysrdCl7cz1D
-LnhCLlcoYSx0KQppZihzPT09NDcpcmV0dXJuIDAKaWYocz09PTU4KXtpZih0PT09MClyZXR1cm4gMApy
-PUMueEIuWFUoYSwiLyIsQy54Qi5RaShhLCIvLyIsdCsxKT90KzM6dCkKaWYocjw9MClyZXR1cm4gcApp
-ZighYnx8cDxyKzMpcmV0dXJuIHIKaWYoIUMueEIubihhLCJmaWxlOi8vIikpcmV0dXJuIHIKaWYoIUIu
-WXUoYSxyKzEpKXJldHVybiByCnE9ciszCnJldHVybiBwPT09cT9xOnIrNH19cmV0dXJuIDB9LApZcjpm
-dW5jdGlvbihhKXtyZXR1cm4gdGhpcy5TcChhLCExKX0sCmhLOmZ1bmN0aW9uKGEpe3JldHVybiBhLmxl
-bmd0aCE9PTAmJkMueEIuVyhhLDApPT09NDd9LApnb2M6ZnVuY3Rpb24oKXtyZXR1cm4idXJsIn0sCmdt
-STpmdW5jdGlvbigpe3JldHVybiIvIn19CkwuSVYucHJvdG90eXBlPXsKVWQ6ZnVuY3Rpb24oYSl7cmV0
-dXJuIEMueEIudGcoYSwiLyIpfSwKcjQ6ZnVuY3Rpb24oYSl7cmV0dXJuIGE9PT00N3x8YT09PTkyfSwK
-ZHM6ZnVuY3Rpb24oYSl7dmFyIHQ9YS5sZW5ndGgKaWYodD09PTApcmV0dXJuITEKdD1DLnhCLm0oYSx0
-LTEpCnJldHVybiEodD09PTQ3fHx0PT09OTIpfSwKU3A6ZnVuY3Rpb24oYSxiKXt2YXIgdCxzLHI9YS5s
-ZW5ndGgKaWYocj09PTApcmV0dXJuIDAKdD1DLnhCLlcoYSwwKQppZih0PT09NDcpcmV0dXJuIDEKaWYo
-dD09PTkyKXtpZihyPDJ8fEMueEIuVyhhLDEpIT09OTIpcmV0dXJuIDEKcz1DLnhCLlhVKGEsIlxcIiwy
-KQppZihzPjApe3M9Qy54Qi5YVShhLCJcXCIscysxKQppZihzPjApcmV0dXJuIHN9cmV0dXJuIHJ9aWYo
-cjwzKXJldHVybiAwCmlmKCFCLk9TKHQpKXJldHVybiAwCmlmKEMueEIuVyhhLDEpIT09NTgpcmV0dXJu
-IDAKcj1DLnhCLlcoYSwyKQppZighKHI9PT00N3x8cj09PTkyKSlyZXR1cm4gMApyZXR1cm4gM30sClly
-OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLlNwKGEsITEpfSwKaEs6ZnVuY3Rpb24oYSl7cmV0dXJuIHRo
-aXMuWXIoYSk9PT0xfSwKT3Q6ZnVuY3Rpb24oYSxiKXt2YXIgdAppZihhPT09YilyZXR1cm4hMAppZihh
-PT09NDcpcmV0dXJuIGI9PT05MgppZihhPT09OTIpcmV0dXJuIGI9PT00NwppZigoYV5iKSE9PTMyKXJl
-dHVybiExCnQ9YXwzMgpyZXR1cm4gdD49OTcmJnQ8PTEyMn0sCk5jOmZ1bmN0aW9uKGEsYil7dmFyIHQs
-cyxyCmlmKGE9PWIpcmV0dXJuITAKdD1hLmxlbmd0aAppZih0IT09Yi5sZW5ndGgpcmV0dXJuITEKZm9y
-KHM9Si5yWShiKSxyPTA7cjx0OysrcilpZighdGhpcy5PdChDLnhCLlcoYSxyKSxzLlcoYixyKSkpcmV0
-dXJuITEKcmV0dXJuITB9LApnb2M6ZnVuY3Rpb24oKXtyZXR1cm4id2luZG93cyJ9LApnbUk6ZnVuY3Rp
-b24oKXtyZXR1cm4iXFwifX07KGZ1bmN0aW9uIGFsaWFzZXMoKXt2YXIgdD1KLnZCLnByb3RvdHlwZQp0
-LlU9dC53CnQuU2o9dC5lNwp0PUouTUYucHJvdG90eXBlCnQudD10LncKdD1QLmNYLnByb3RvdHlwZQp0
-LkdHPXQuZXYKdD1QLmsucHJvdG90eXBlCnQueGI9dC53CnQ9Vy5jdi5wcm90b3R5cGUKdC5EVz10LnI2
-CnQ9Vy5tNi5wcm90b3R5cGUKdC5qRj10LkViCnQ9UC5FNC5wcm90b3R5cGUKdC5Vcj10LnEKdC5lND10
-Lll9KSgpOyhmdW5jdGlvbiBpbnN0YWxsVGVhck9mZnMoKXt2YXIgdD1odW5rSGVscGVycy5fc3RhdGlj
-XzEscz1odW5rSGVscGVycy5fc3RhdGljXzAscj1odW5rSGVscGVycy5pbnN0YWxsSW5zdGFuY2VUZWFy
-T2ZmLHE9aHVua0hlbHBlcnMuaW5zdGFsbFN0YXRpY1RlYXJPZmYscD1odW5rSGVscGVycy5faW5zdGFu
-Y2VfMXUKdChQLCJFWCIsIlpWIiwxMCkKdChQLCJ5dCIsIm9BIiwxMCkKdChQLCJxVyIsIkJ6IiwxMCkK
-cyhQLCJVSSIsImVOIiwyKQpyKFAuUGYucHJvdG90eXBlLCJnWUoiLDAsMSxudWxsLFsiJDIiLCIkMSJd
-LFsidzAiLCJwbSJdLDI5LDApCnQoUCwiUEgiLCJNdCIsNCkKcShXLCJwUyIsNCxudWxsLFsiJDQiXSxb
-InlXIl0sMTEsMCkKcShXLCJWNCIsNCxudWxsLFsiJDQiXSxbIlFXIl0sMTEsMCkKcChQLkFzLnByb3Rv
-dHlwZSwiZ3VNIiwiVCIsNCkKdChQLCJpRyIsIndZIiwzKQp0KFAsIncwIiwiTDciLDQ1KQpxKEwsIlhO
-IiwxLG51bGwsWyIkMiRyZWxhdGl2ZVRvIiwiJDEiXSxbInQyIixmdW5jdGlvbihhKXtyZXR1cm4gTC50
-MihhLG51bGwpfV0sNDYsMCkKdChMLCJIMCIsInVtIiwzMSl9KSgpOyhmdW5jdGlvbiBpbmhlcml0YW5j
-ZSgpe3ZhciB0PWh1bmtIZWxwZXJzLm1peGluLHM9aHVua0hlbHBlcnMuaW5oZXJpdCxyPWh1bmtIZWxw
-ZXJzLmluaGVyaXRNYW55CnMoUC5rLG51bGwpCnIoUC5rLFtILmVvLEoudkIsSi5tMSxQLm5ZLFAuY1gs
-SC5hNyxQLkFuLEguU1UsSC5SZSxILnd2LFAuUG4sSC5XVSxILkxJLEguVHAsSC5acixQLlhTLEguYnEs
-SC5YTyxQLllrLEguZGIsSC5ONixILlZSLEguRUssSC5QYixILnRRLEguU2QsSC5KYyxILkcsUC5XMyxQ
-LmloLFAuUGYsUC5GZSxQLnZzLFAuT00sUC5xaCxQLk1PLFAua1QsUC54SSxQLkN3LFAubTAsUC5YdixQ
-LmJuLFAubG0sUC5sRCxQLktQLFAubGYsUC5XWSxQLlVrLFAuUncsUC5ieixQLmEyLFAuaVAsUC5GSyxQ
-Lms1LFAuS1ksUC5DRCxQLmFFLFAuRUgsUC56TSxQLlowLFAuYzgsUC5PZCxQLmliLFAuR3osUC5xVSxQ
-LlJuLFAuR0QsUC5EbixQLlBFLFAuVWYsVy5pZCxXLkZrLFcuSlEsVy5HbSxXLnZELFcubTYsVy5PdyxX
-Llc5LFcuZFcsVy5GYixXLmtGLFcubWssVy5LbyxQLmlKLFAuRTQsUC5uNixVLmQyLFUuU2UsVS51RixV
-Lk1sLFUueUQsVS53YixCLmo4LEIucXAsVC5HVixMLlhBLEwuWlosTC55OCxNLmxJLE8uekwsWC5XRCxY
-LmR2XSkKcihKLnZCLFtKLnlFLEouWUUsSi5NRixKLmpkLEoucUksSi5EcixILkVULFcuRDAsVy5BeixX
-LkxlLFcuTmgsVy5JQixXLm43LFcuZWEsVy5icixXLlNnLFcudTgsVy5LNyxXLlhXLFAuaEZdKQpyKEou
-TUYsW0ouaUMsSi5rZCxKLmM1XSkKcyhKLlBvLEouamQpCnIoSi5xSSxbSi51cixKLlZBXSkKcyhQLkxV
-LFAublkpCnIoUC5MVSxbSC5YQyxXLnd6LFcuZTddKQpzKEgucWosSC5YQykKcihQLmNYLFtILmJRLEgu
-VTUsUC5tVyxILnVuXSkKcihILmJRLFtILmFMLEguaTUsUC54dV0pCnIoSC5hTCxbSC5uSCxILkE4LFAu
-aThdKQpzKEguU08sUC5BbikKcyhQLlJVLFAuUG4pCnMoUC5HaixQLlJVKQpzKEguUEQsUC5HaikKcyhI
-LkxQLEguV1UpCnIoSC5UcCxbSC5DaixILkFtLEgubGMsSC5kQyxILndOLEguVlgsUC50aCxQLmhhLFAu
-VnMsUC5GdCxQLnlILFAuV00sUC5TWCxQLkdzLFAuZGEsUC5vUSxQLnBWLFAuVTcsUC52cixQLnJILFAu
-S0YsUC5aTCxQLlJULFAualosUC5ycSxQLlJXLFAuQjUsUC5QSSxQLnBLLFAuaGosUC5WcCxQLk9SLFAu
-R0EsUC5XRixQLm4xLFAuY1MsUC5WQyxQLnRwLFAuZTEsUC5OWSxQLlJaLFAuTUUsUC55NSxQLnEzLFAu
-eUksUC5jNixQLnFkLFcuQ3YsVy5iVSxXLmhILFcuS1MsVy5BMyxXLnZOLFcuVXYsVy5FZyxXLkVvLFcu
-V2ssVy5JQSxXLmZtLFAubFIsUC5qZyxQLkdFLFAuTjcsUC51USxQLlBDLFAuWW0sUC5OeixQLm5wLFAu
-VXQsTC5lLEwuVlcsTC5vWixMLmpyLEwucWwsTC5MLEwuV3gsTC5BTyxMLmROLEwuSG8sTC54eixMLklD
-LEwuTDEsTC5uVCxMLkJaLEwuR0gsTC5EVCxMLmVILEwuekQsTC5PRSxMLlRXLEwueHIsTC5FRSxMLlFM
-LEwuVlMsTS5NaSxNLnE3LE0uTm8sWC5xUl0pCnIoUC5YUyxbSC5XMCxILmF6LEgudlYsSC5FcSxQLkM2
-LEgudTksUC5uLFAudSxQLm1wLFAudWIsUC5kcyxQLmxqLFAuVVYsUC5jXSkKcihILmxjLFtILnp4LEgu
-clRdKQpzKEgua1ksUC5DNikKcyhQLmlsLFAuWWspCnIoUC5pbCxbSC5ONSxQLnV3LFcuRDksVy5TeV0p
-CnMoSC5LVyxQLm1XKQpzKEguYjAsSC5FVCkKcihILmIwLFtILlJHLEguV0JdKQpzKEguVlAsSC5SRykK
-cyhILkRnLEguVlApCnMoSC5aRyxILldCKQpzKEguUGcsSC5aRykKcihILlBnLFtILnhqLEguZEUsSC5a
-QSxILndmLEguUHEsSC5lRSxILlY2XSkKcihILnU5LFtILmh6LEguaU1dKQpzKFAuWmYsUC5QZikKcyhQ
-LkppLFAubTApCnMoUC5iNixQLlh2KQpzKFAuVmosUC5XWSkKcihQLlVrLFtQLkNWLFAuWmksUC5ieV0p
-CnMoUC53SSxQLmtUKQpyKFAud0ksW1AuVTgsUC5NeCxQLkUzLFAuR1ldKQpzKFAudTUsUC5aaSkKcihQ
-LkZLLFtQLkNQLFAuS05dKQpyKFAudSxbUC5iSixQLmVZXSkKcyhQLnFlLFAuRG4pCnIoVy5EMCxbVy51
-SCxXLndhLFcuSzUsVy5DbV0pCnIoVy51SCxbVy5jdixXLm54LFcuUUYsVy5DUV0pCnIoVy5jdixbVy5x
-RSxQLmQ1XSkKcihXLnFFLFtXLkdoLFcuZlksVy5uQixXLlFQLFcuaDQsVy5TTixXLmxwLFcuVGIsVy5J
-dixXLkJULFcueVldKQpzKFcub0osVy5MZSkKcyhXLlQ1LFcuQXopCnMoVy5WYixXLlFGKQpzKFcuTzcs
-Vy53YSkKcihXLmVhLFtXLnc2LFcuZXddKQpzKFcuQWosVy53NikKcyhXLnJCLFcuSzcpCnMoVy5CSCxX
-LnJCKQpzKFcudzQsVy5JQikKcyhXLm9hLFcuWFcpCnMoVy5yaCxXLm9hKQpzKFcuaTcsVy5EOSkKcyhQ
-LkFzLFAuVmopCnIoUC5BcyxbVy5JNCxQLktlXSkKcyhXLlJPLFAucWgpCnMoVy5DcSxXLlJPKQpzKFcu
-eEMsUC5NTykKcyhXLmN0LFcubTYpCnMoUC5CZixQLmlKKQpyKFAuRTQsW1AucjcsUC5jb10pCnMoUC5U
-eixQLmNvKQpzKFAubmQsUC5kNSkKcyhCLkx1LE8uekwpCnIoQi5MdSxbRS5PRixGLnJ1LEwuSVZdKQp0
-KEguWEMsSC5SZSkKdChILlJHLFAubEQpCnQoSC5WUCxILlNVKQp0KEguV0IsUC5sRCkKdChILlpHLEgu
-U1UpCnQoUC5uWSxQLmxEKQp0KFAuV1ksUC5sZikKdChQLlJVLFAuS1ApCnQoVy5MZSxXLmlkKQp0KFcu
-SzcsUC5sRCkKdChXLnJCLFcuR20pCnQoVy5YVyxQLmxEKQp0KFcub2EsVy5HbSkKdChQLmNvLFAubEQp
-fSkoKQp2YXIgdj17dHlwZVVuaXZlcnNlOntlQzpuZXcgTWFwKCksdFI6e30sZVQ6e30sdFBWOnt9LHNF
-QTpbXX0sbWFuZ2xlZEdsb2JhbE5hbWVzOntLTjoiaW50IixDUDoiZG91YmxlIixGSzoibnVtIixxVToi
-U3RyaW5nIixhMjoiYm9vbCIsYzg6Ik51bGwiLHpNOiJMaXN0In0sbWFuZ2xlZE5hbWVzOnt9LGdldFR5
-cGVGcm9tTmFtZTpnZXRHbG9iYWxGcm9tTmFtZSxtZXRhZGF0YTpbXSx0eXBlczpbImM4KCkiLCJjOChA
-LEApIiwifigpIiwiQChAKSIsInFVKHFVKSIsImM4KEFqKSIsImM4KGN2KSIsImM4KE83KSIsImEyKHFV
-KSIsImM4KHFVLHFVKSIsIn4ofigpKSIsImEyKGN2LHFVLHFVLEpRKSIsImM4KEApIiwiYzgocVUsQCki
-LCJjOChxVSkiLCJhMihrRikiLCJ+KHh1PHFVPikiLCJjOChlYSkiLCJjOChHRCxAKSIsIktOKEtOLEtO
-KSIsImM4KH4oKSkiLCJjOChALEd6KSIsIn4ocVUscVUpIiwibjYoS04pIiwibjYoQCxAKSIsImEyKHVI
-KSIsImM4KEtOLEApIiwiYzgoZXcpIiwiQChlYSkiLCJ+KGtbR3pdKSIsImM4KEBbR3pdKSIsIn4oQWop
-IiwiYTIoeHU8cVU+KSIsInZzPEA+KEApIiwicjcoQCkiLCJUejxAPihAKSIsIkU0KEApIiwiQChxVSki
-LCJAKEAscVUpIiwifih1SCx1SCkiLCJaMDxxVSxxVT4oWjA8cVUscVU+LHFVKSIsIk83KE83KSIsInFV
-KEtOKSIsIn4ocVUsS04pIiwifihxVVtAXSkiLCJrKEApIiwifihBantyZWxhdGl2ZVRvOnFVfSkiLCJ+
-KEApIl0saW50ZXJjZXB0b3JzQnlUYWc6bnVsbCxsZWFmVGFnczpudWxsfQpILnhiKHYudHlwZVVuaXZl
-cnNlLEpTT04ucGFyc2UoJ3sicngiOiJlYSIsImU1IjoiZWEiLCJZMCI6ImQ1IiwiV3QiOiJkNSIsInYw
-IjoiZXciLCJNciI6InFFIiwiZUwiOiJxRSIsIkkwIjoidUgiLCJocyI6InVIIiwiWGciOiJRRiIsInlj
-IjoiQWoiLCJ5NCI6Inc2IiwiYVAiOiJDbSIsInhjIjoibngiLCJrSiI6Im54IiwielUiOiJEZyIsImRm
-IjoiRVQiLCJ5RSI6eyJhMiI6W119LCJZRSI6eyJjOCI6W119LCJNRiI6eyJ2bSI6W119LCJpQyI6eyJ2
-bSI6W119LCJrZCI6eyJ2bSI6W119LCJjNSI6eyJFSCI6W10sInZtIjpbXX0sImpkIjp7InpNIjpbIjEi
-XSwiY1giOlsiMSJdfSwiUG8iOnsiamQiOlsiMSJdLCJ6TSI6WyIxIl0sImNYIjpbIjEiXX0sIm0xIjp7
-IkFuIjpbIjEiXX0sInFJIjp7IkNQIjpbXSwiRksiOltdfSwidXIiOnsiS04iOltdLCJDUCI6W10sIkZL
-IjpbXX0sIlZBIjp7IkNQIjpbXSwiRksiOltdfSwiRHIiOnsicVUiOltdLCJ2WCI6W119LCJxaiI6eyJS
-ZSI6WyJLTiJdLCJsRCI6WyJLTiJdLCJ6TSI6WyJLTiJdLCJjWCI6WyJLTiJdLCJsRC5FIjoiS04iLCJS
-ZS5FIjoiS04ifSwiYlEiOnsiY1giOlsiMSJdfSwiYUwiOnsiY1giOlsiMSJdfSwibkgiOnsiYUwiOlsi
-MSJdLCJjWCI6WyIxIl0sImFMLkUiOiIxIiwiY1guRSI6IjEifSwiYTciOnsiQW4iOlsiMSJdfSwiQTgi
-OnsiYUwiOlsiMiJdLCJjWCI6WyIyIl0sImFMLkUiOiIyIiwiY1guRSI6IjIifSwiVTUiOnsiY1giOlsi
-MSJdLCJjWC5FIjoiMSJ9LCJTTyI6eyJBbiI6WyIxIl19LCJYQyI6eyJSZSI6WyIxIl0sImxEIjpbIjEi
-XSwiek0iOlsiMSJdLCJjWCI6WyIxIl19LCJ3diI6eyJHRCI6W119LCJQRCI6eyJHaiI6WyIxIiwiMiJd
-LCJSVSI6WyIxIiwiMiJdLCJQbiI6WyIxIiwiMiJdLCJLUCI6WyIxIiwiMiJdLCJaMCI6WyIxIiwiMiJd
-fSwiV1UiOnsiWjAiOlsiMSIsIjIiXX0sIkxQIjp7IldVIjpbIjEiLCIyIl0sIlowIjpbIjEiLCIyIl19
-LCJMSSI6eyJ2USI6W119LCJXMCI6eyJYUyI6W119LCJheiI6eyJYUyI6W119LCJ2ViI6eyJYUyI6W119
-LCJYTyI6eyJHeiI6W119LCJUcCI6eyJFSCI6W119LCJsYyI6eyJFSCI6W119LCJ6eCI6eyJFSCI6W119
-LCJyVCI6eyJFSCI6W119LCJFcSI6eyJYUyI6W119LCJrWSI6eyJYUyI6W119LCJONSI6eyJGbyI6WyIx
-IiwiMiJdLCJZayI6WyIxIiwiMiJdLCJaMCI6WyIxIiwiMiJdLCJZay5LIjoiMSIsIllrLlYiOiIyIn0s
-Imk1Ijp7ImNYIjpbIjEiXSwiY1guRSI6IjEifSwiTjYiOnsiQW4iOlsiMSJdfSwiVlIiOnsid0wiOltd
-LCJ2WCI6W119LCJFSyI6eyJpYiI6W10sIk9kIjpbXX0sIktXIjp7ImNYIjpbImliIl0sImNYLkUiOiJp
-YiJ9LCJQYiI6eyJBbiI6WyJpYiJdfSwidFEiOnsiT2QiOltdfSwidW4iOnsiY1giOlsiT2QiXSwiY1gu
-RSI6Ik9kIn0sIlNkIjp7IkFuIjpbIk9kIl19LCJFVCI6eyJBUyI6W119LCJiMCI6eyJYaiI6WyJAIl0s
-IkVUIjpbXSwiQVMiOltdfSwiRGciOnsibEQiOlsiQ1AiXSwiWGoiOlsiQCJdLCJ6TSI6WyJDUCJdLCJF
-VCI6W10sIlNVIjpbIkNQIl0sIkFTIjpbXSwiY1giOlsiQ1AiXSwibEQuRSI6IkNQIn0sIlBnIjp7ImxE
-IjpbIktOIl0sInpNIjpbIktOIl0sIlhqIjpbIkAiXSwiRVQiOltdLCJTVSI6WyJLTiJdLCJBUyI6W10s
-ImNYIjpbIktOIl19LCJ4aiI6eyJsRCI6WyJLTiJdLCJ6TSI6WyJLTiJdLCJYaiI6WyJAIl0sIkVUIjpb
-XSwiU1UiOlsiS04iXSwiQVMiOltdLCJjWCI6WyJLTiJdLCJsRC5FIjoiS04ifSwiZEUiOnsibEQiOlsi
-S04iXSwiek0iOlsiS04iXSwiWGoiOlsiQCJdLCJFVCI6W10sIlNVIjpbIktOIl0sIkFTIjpbXSwiY1gi
-OlsiS04iXSwibEQuRSI6IktOIn0sIlpBIjp7ImxEIjpbIktOIl0sInpNIjpbIktOIl0sIlhqIjpbIkAi
-XSwiRVQiOltdLCJTVSI6WyJLTiJdLCJBUyI6W10sImNYIjpbIktOIl0sImxELkUiOiJLTiJ9LCJ3ZiI6
-eyJsRCI6WyJLTiJdLCJ6TSI6WyJLTiJdLCJYaiI6WyJAIl0sIkVUIjpbXSwiU1UiOlsiS04iXSwiQVMi
-OltdLCJjWCI6WyJLTiJdLCJsRC5FIjoiS04ifSwiUHEiOnsibEQiOlsiS04iXSwiek0iOlsiS04iXSwi
-WGoiOlsiQCJdLCJFVCI6W10sIlNVIjpbIktOIl0sIkFTIjpbXSwiY1giOlsiS04iXSwibEQuRSI6IktO
-In0sImVFIjp7ImxEIjpbIktOIl0sInpNIjpbIktOIl0sIlhqIjpbIkAiXSwiRVQiOltdLCJTVSI6WyJL
-TiJdLCJBUyI6W10sImNYIjpbIktOIl0sImxELkUiOiJLTiJ9LCJWNiI6eyJuNiI6W10sImxEIjpbIktO
-Il0sInpNIjpbIktOIl0sIlhqIjpbIkAiXSwiRVQiOltdLCJTVSI6WyJLTiJdLCJBUyI6W10sImNYIjpb
-IktOIl0sImxELkUiOiJLTiJ9LCJ1OSI6eyJYUyI6W119LCJoeiI6eyJYUyI6W119LCJpTSI6eyJYUyI6
-W119LCJaZiI6eyJQZiI6WyIxIl19LCJ2cyI6eyJiOCI6WyIxIl19LCJDdyI6eyJYUyI6W119LCJtMCI6
-eyJKQiI6W119LCJKaSI6eyJKQiI6W119LCJiNiI6eyJYdiI6WyIxIl0sInh1IjpbIjEiXSwiY1giOlsi
-MSJdfSwibG0iOnsiQW4iOlsiMSJdfSwibVciOnsiY1giOlsiMSJdfSwiTFUiOnsibEQiOlsiMSJdLCJ6
-TSI6WyIxIl0sImNYIjpbIjEiXX0sImlsIjp7IllrIjpbIjEiLCIyIl0sIlowIjpbIjEiLCIyIl19LCJZ
-ayI6eyJaMCI6WyIxIiwiMiJdfSwiUG4iOnsiWjAiOlsiMSIsIjIiXX0sIkdqIjp7IlJVIjpbIjEiLCIy
-Il0sIlBuIjpbIjEiLCIyIl0sIktQIjpbIjEiLCIyIl0sIlowIjpbIjEiLCIyIl19LCJWaiI6eyJsZiI6
-WyIxIl0sInh1IjpbIjEiXSwiY1giOlsiMSJdfSwiWHYiOnsieHUiOlsiMSJdLCJjWCI6WyIxIl19LCJ1
-dyI6eyJZayI6WyJxVSIsIkAiXSwiWjAiOlsicVUiLCJAIl0sIllrLksiOiJxVSIsIllrLlYiOiJAIn0s
-Imk4Ijp7ImFMIjpbInFVIl0sImNYIjpbInFVIl0sImFMLkUiOiJxVSIsImNYLkUiOiJxVSJ9LCJDViI6
-eyJVayI6WyJ6TTxLTj4iLCJxVSJdLCJVay5TIjoiek08S04+In0sIlU4Ijp7IndJIjpbInpNPEtOPiIs
-InFVIl19LCJaaSI6eyJVayI6WyJxVSIsInpNPEtOPiJdfSwiYnkiOnsiVWsiOlsiayIsInFVIl0sIlVr
-LlMiOiJrIn0sIk14Ijp7IndJIjpbInFVIiwiayJdfSwidTUiOnsiVWsiOlsicVUiLCJ6TTxLTj4iXSwi
-VWsuUyI6InFVIn0sIkUzIjp7IndJIjpbInFVIiwiek08S04+Il19LCJHWSI6eyJ3SSI6WyJ6TTxLTj4i
-LCJxVSJdfSwiQ1AiOnsiRksiOltdfSwiQzYiOnsiWFMiOltdfSwibiI6eyJYUyI6W119LCJ1Ijp7IlhT
-IjpbXX0sImJKIjp7IlhTIjpbXX0sImVZIjp7IlhTIjpbXX0sIm1wIjp7IlhTIjpbXX0sInViIjp7IlhT
-IjpbXX0sImRzIjp7IlhTIjpbXX0sImxqIjp7IlhTIjpbXX0sIlVWIjp7IlhTIjpbXX0sIms1Ijp7IlhT
-IjpbXX0sIktZIjp7IlhTIjpbXX0sImMiOnsiWFMiOltdfSwiS04iOnsiRksiOltdfSwiek0iOnsiY1gi
-OlsiMSJdfSwiaWIiOnsiT2QiOltdfSwieHUiOnsiY1giOlsiMSJdfSwicVUiOnsidlgiOltdfSwiUm4i
-OnsiQkwiOltdfSwiRG4iOnsiaUQiOltdfSwiVWYiOnsiaUQiOltdfSwicWUiOnsiaUQiOltdfSwicUUi
-OnsiY3YiOltdLCJ1SCI6W10sIkQwIjpbXX0sIkdoIjp7ImN2IjpbXSwidUgiOltdLCJEMCI6W119LCJm
-WSI6eyJjdiI6W10sInVIIjpbXSwiRDAiOltdfSwibkIiOnsiY3YiOltdLCJ1SCI6W10sIkQwIjpbXX0s
-IlFQIjp7ImN2IjpbXSwidUgiOltdLCJEMCI6W119LCJueCI6eyJ1SCI6W10sIkQwIjpbXX0sIlFGIjp7
-InVIIjpbXSwiRDAiOltdfSwiSUIiOnsidG4iOlsiRksiXX0sInd6Ijp7ImxEIjpbIjEiXSwiek0iOlsi
-MSJdLCJjWCI6WyIxIl0sImxELkUiOiIxIn0sImN2Ijp7InVIIjpbXSwiRDAiOltdfSwiVDUiOnsiQXoi
-OltdfSwiaDQiOnsiY3YiOltdLCJ1SCI6W10sIkQwIjpbXX0sIlZiIjp7InVIIjpbXSwiRDAiOltdfSwi
-TzciOnsiRDAiOltdfSwid2EiOnsiRDAiOltdfSwiQWoiOnsiZWEiOltdfSwiZTciOnsibEQiOlsidUgi
-XSwiek0iOlsidUgiXSwiY1giOlsidUgiXSwibEQuRSI6InVIIn0sInVIIjp7IkQwIjpbXX0sIkJIIjp7
-IkdtIjpbInVIIl0sImxEIjpbInVIIl0sInpNIjpbInVIIl0sIlhqIjpbInVIIl0sImNYIjpbInVIIl0s
-ImxELkUiOiJ1SCIsIkdtLkUiOiJ1SCJ9LCJTTiI6eyJjdiI6W10sInVIIjpbXSwiRDAiOltdfSwiZXci
-OnsiZWEiOltdfSwibHAiOnsiY3YiOltdLCJ1SCI6W10sIkQwIjpbXX0sIlRiIjp7ImN2IjpbXSwidUgi
-OltdLCJEMCI6W119LCJJdiI6eyJjdiI6W10sInVIIjpbXSwiRDAiOltdfSwiQlQiOnsiY3YiOltdLCJ1
-SCI6W10sIkQwIjpbXX0sInlZIjp7ImN2IjpbXSwidUgiOltdLCJEMCI6W119LCJ3NiI6eyJlYSI6W119
-LCJLNSI6eyJ2NiI6W10sIkQwIjpbXX0sIkNtIjp7IkQwIjpbXX0sIkNRIjp7InVIIjpbXSwiRDAiOltd
-fSwidzQiOnsidG4iOlsiRksiXX0sInJoIjp7IkdtIjpbInVIIl0sImxEIjpbInVIIl0sInpNIjpbInVI
-Il0sIlhqIjpbInVIIl0sImNYIjpbInVIIl0sImxELkUiOiJ1SCIsIkdtLkUiOiJ1SCJ9LCJEOSI6eyJZ
-ayI6WyJxVSIsInFVIl0sIlowIjpbInFVIiwicVUiXX0sImk3Ijp7IllrIjpbInFVIiwicVUiXSwiWjAi
-OlsicVUiLCJxVSJdLCJZay5LIjoicVUiLCJZay5WIjoicVUifSwiU3kiOnsiWWsiOlsicVUiLCJxVSJd
-LCJaMCI6WyJxVSIsInFVIl0sIllrLksiOiJxVSIsIllrLlYiOiJxVSJ9LCJJNCI6eyJsZiI6WyJxVSJd
-LCJ4dSI6WyJxVSJdLCJjWCI6WyJxVSJdfSwiUk8iOnsicWgiOlsiMSJdfSwiQ3EiOnsiUk8iOlsiMSJd
-LCJxaCI6WyIxIl19LCJ4QyI6eyJNTyI6WyIxIl19LCJKUSI6eyJrRiI6W119LCJ2RCI6eyJrRiI6W119
-LCJtNiI6eyJrRiI6W119LCJjdCI6eyJrRiI6W119LCJPdyI6eyJrRiI6W119LCJXOSI6eyJBbiI6WyIx
-Il19LCJkVyI6eyJ2NiI6W10sIkQwIjpbXX0sIm1rIjp7InkwIjpbXX0sIktvIjp7Im9uIjpbXX0sIkFz
-Ijp7ImxmIjpbInFVIl0sInh1IjpbInFVIl0sImNYIjpbInFVIl19LCJyNyI6eyJFNCI6W119LCJUeiI6
-eyJsRCI6WyIxIl0sInpNIjpbIjEiXSwiRTQiOltdLCJjWCI6WyIxIl0sImxELkUiOiIxIn0sIm5kIjp7
-ImQ1IjpbXSwiY3YiOltdLCJ1SCI6W10sIkQwIjpbXX0sIktlIjp7ImxmIjpbInFVIl0sInh1IjpbInFV
-Il0sImNYIjpbInFVIl19LCJkNSI6eyJjdiI6W10sInVIIjpbXSwiRDAiOltdfSwibjYiOnsiek0iOlsi
-S04iXSwiQVMiOltdLCJjWCI6WyJLTiJdfSwiWEEiOnsia0YiOltdfSwiT0YiOnsiTHUiOltdfSwicnUi
-OnsiTHUiOltdfSwiSVYiOnsiTHUiOltdfX0nKSkKSC5GRih2LnR5cGVVbml2ZXJzZSxKU09OLnBhcnNl
-KCd7ImJRIjoxLCJYQyI6MSwiTU8iOjEsImtUIjoyLCJtVyI6MSwiTFUiOjEsImlsIjoyLCJWaiI6MSwi
-blkiOjEsIldZIjoxLCJjbyI6MX0nKSkKdmFyIHU9KGZ1bmN0aW9uIHJ0aWkoKXt2YXIgdD1ILk4wCnJl
-dHVybntpOnQoIkdoIiksbjp0KCJDdyIpLGNSOnQoIm5CIiksZDp0KCJBeiIpLFk6dCgiUVAiKSxnRjp0
-KCJQRDxHRCxAPiIpLGg6dCgiY3YiKSxiVTp0KCJYUyIpLEI6dCgiZWEiKSxhUzp0KCJEMCIpLGM4OnQo
-IlQ1IiksWjp0KCJFSCIpLGM6dCgiYjg8QD4iKSxyOnQoIk83IiksSTp0KCJTZyIpLG86dCgidlEiKSxl
-aDp0KCJjWDx1SD4iKSxYOnQoImNYPHFVPiIpLFI6dCgiY1g8QD4iKSxmQTp0KCJqZDxTZT4iKSx1OnQo
-ImpkPGo4PiIpLGJQOnQoImpkPHVGPiIpLGZoOnQoImpkPFpaPiIpLGs6dCgiamQ8a0Y+Iiksczp0KCJq
-ZDxxVT4iKSxoaDp0KCJqZDx5RD4iKSxhSjp0KCJqZDx3Yj4iKSxtOnQoImpkPEA+IiksdDp0KCJqZDxL
-Tj4iKSxlSDp0KCJ2bSIpLGc6dCgiYzUiKSxhVTp0KCJYajxAPiIpLGFtOnQoIlR6PEA+IiksZW86dCgi
-TjU8R0QsQD4iKSx2OnQoIkU0IiksZHo6dCgiaEYiKSxhOnQoInpNPHFVPiIpLGo6dCgiek08QD4iKSxM
-OnQoInpNPEtOPiIpLEY6dCgidTgiKSxmOnQoIlowPHFVLHFVPiIpLGI6dCgiWjA8cVUsQD4iKSxHOnQo
-IlowPEAsQD4iKSxkdjp0KCJBODxxVSxxVT4iKSxkbzp0KCJBODxxVSxAPiIpLFY6dCgiQWoiKSxkRDp0
-KCJFVCIpLGJtOnQoIlY2IiksQTp0KCJ1SCIpLGU6dCgia0YiKSxQOnQoImM4IiksSzp0KCJrIikscDp0
-KCJldyIpLHE6dCgidG48Rks+IiksZnY6dCgid0wiKSxldzp0KCJuZCIpLEM6dCgieHU8cVU+IiksbDp0
-KCJHeiIpLE46dCgicVUiKSxkRzp0KCJxVShxVSkiKSxnNzp0KCJkNSIpLGZvOnQoIkdEIiksYVc6dCgi
-eVkiKSx3OnQoIkFTIiksZ2M6dCgibjYiKSxhazp0KCJrZCIpLFQ6dCgiR2o8cVUscVU+IiksRDp0KCJp
-RCIpLGNjOnQoIlU1PHFVPiIpLGc0OnQoIks1IiksY2k6dCgidjYiKSxnMjp0KCJDbSIpLGJqOnQoIlpm
-PE83PiIpLGg5OnQoIkNRIiksYWM6dCgiZTciKSxROnQoIkNxPEFqPiIpLFM6dCgid3o8Y3Y+IikseDp0
-KCJGZTxALEA+IiksYW86dCgidnM8Tzc+IiksXzp0KCJ2czxAPiIpLGZKOnQoInZzPEtOPiIpLE86dCgi
-SlEiKSxKOnQoImJuIiksY0o6dCgiYTIiKSxhbDp0KCJhMihrKSIpLGJCOnQoImEyKHFVKSIpLGJmOnQo
-ImEyKEApIiksejp0KCJAIiksZk86dCgiQCgpIiksVTp0KCJAKGVhKSIpLHk6dCgiQChrKSIpLGVwOnQo
-IkAoayxrKSIpLFc6dCgiQChrLEd6KSIpLGNoOnQoIkAoeHU8cVU+KSIpLGRPOnQoIkAocVUpIiksYjg6
-dCgiQChALEApIiksZWc6dCgiS04iKSxIOnQoIn4iKSxNOnQoIn4oKSIpLGFuOnQoIn4oZXcpIiksRTp0
-KCJ+KHFVLHFVKSIpLGNBOnQoIn4ocVUsQCkiKX19KSgpOyhmdW5jdGlvbiBjb25zdGFudHMoKXt2YXIg
-dD1odW5rSGVscGVycy5tYWtlQ29uc3RMaXN0CkMuUlk9Vy5RUC5wcm90b3R5cGUKQy5CWj1XLlZiLnBy
-b3RvdHlwZQpDLkR0PVcuTzcucHJvdG90eXBlCkMuT2s9Si52Qi5wcm90b3R5cGUKQy5ObT1KLmpkLnBy
-b3RvdHlwZQpDLmpuPUoudXIucHJvdG90eXBlCkMuak49Si5ZRS5wcm90b3R5cGUKQy5DRD1KLnFJLnBy
-b3RvdHlwZQpDLnhCPUouRHIucHJvdG90eXBlCkMuREc9Si5jNS5wcm90b3R5cGUKQy5FeD1XLnU4LnBy
-b3RvdHlwZQpDLkx0PVcuU04ucHJvdG90eXBlCkMuWlE9Si5pQy5wcm90b3R5cGUKQy5JZT1XLlRiLnBy
-b3RvdHlwZQpDLnZCPUoua2QucHJvdG90eXBlCkMub2w9Vy5LNS5wcm90b3R5cGUKQy55OD1uZXcgUC5V
-OCgpCkMuaDk9bmV3IFAuQ1YoKQpDLk80PWZ1bmN0aW9uIGdldFRhZ0ZhbGxiYWNrKG8pIHsKICB2YXIg
-cyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvKTsKICByZXR1cm4gcy5zdWJzdHJpbmco
-OCwgcy5sZW5ndGggLSAxKTsKfQpDLllxPWZ1bmN0aW9uKCkgewogIHZhciB0b1N0cmluZ0Z1bmN0aW9u
-ID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZzsKICBmdW5jdGlvbiBnZXRUYWcobykgewogICAgdmFy
-IHMgPSB0b1N0cmluZ0Z1bmN0aW9uLmNhbGwobyk7CiAgICByZXR1cm4gcy5zdWJzdHJpbmcoOCwgcy5s
-ZW5ndGggLSAxKTsKICB9CiAgZnVuY3Rpb24gZ2V0VW5rbm93blRhZyhvYmplY3QsIHRhZykgewogICAg
-aWYgKC9eSFRNTFtBLVpdLipFbGVtZW50JC8udGVzdCh0YWcpKSB7CiAgICAgIHZhciBuYW1lID0gdG9T
-dHJpbmdGdW5jdGlvbi5jYWxsKG9iamVjdCk7CiAgICAgIGlmIChuYW1lID09ICJbb2JqZWN0IE9iamVj
-dF0iKSByZXR1cm4gbnVsbDsKICAgICAgcmV0dXJuICJIVE1MRWxlbWVudCI7CiAgICB9CiAgfQogIGZ1
-bmN0aW9uIGdldFVua25vd25UYWdHZW5lcmljQnJvd3NlcihvYmplY3QsIHRhZykgewogICAgaWYgKHNl
-bGYuSFRNTEVsZW1lbnQgJiYgb2JqZWN0IGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHJldHVybiAiSFRN
-TEVsZW1lbnQiOwogICAgcmV0dXJuIGdldFVua25vd25UYWcob2JqZWN0LCB0YWcpOwogIH0KICBmdW5j
-dGlvbiBwcm90b3R5cGVGb3JUYWcodGFnKSB7CiAgICBpZiAodHlwZW9mIHdpbmRvdyA9PSAidW5kZWZp
-bmVkIikgcmV0dXJuIG51bGw7CiAgICBpZiAodHlwZW9mIHdpbmRvd1t0YWddID09ICJ1bmRlZmluZWQi
-KSByZXR1cm4gbnVsbDsKICAgIHZhciBjb25zdHJ1Y3RvciA9IHdpbmRvd1t0YWddOwogICAgaWYgKHR5
-cGVvZiBjb25zdHJ1Y3RvciAhPSAiZnVuY3Rpb24iKSByZXR1cm4gbnVsbDsKICAgIHJldHVybiBjb25z
-dHJ1Y3Rvci5wcm90b3R5cGU7CiAgfQogIGZ1bmN0aW9uIGRpc2NyaW1pbmF0b3IodGFnKSB7IHJldHVy
-biBudWxsOyB9CiAgdmFyIGlzQnJvd3NlciA9IHR5cGVvZiBuYXZpZ2F0b3IgPT0gIm9iamVjdCI7CiAg
-cmV0dXJuIHsKICAgIGdldFRhZzogZ2V0VGFnLAogICAgZ2V0VW5rbm93blRhZzogaXNCcm93c2VyID8g
-Z2V0VW5rbm93blRhZ0dlbmVyaWNCcm93c2VyIDogZ2V0VW5rbm93blRhZywKICAgIHByb3RvdHlwZUZv
-clRhZzogcHJvdG90eXBlRm9yVGFnLAogICAgZGlzY3JpbWluYXRvcjogZGlzY3JpbWluYXRvciB9Owp9
-CkMud2I9ZnVuY3Rpb24oZ2V0VGFnRmFsbGJhY2spIHsKICByZXR1cm4gZnVuY3Rpb24oaG9va3MpIHsK
-ICAgIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9ICJvYmplY3QiKSByZXR1cm4gaG9va3M7CiAgICB2YXIg
-dWEgPSBuYXZpZ2F0b3IudXNlckFnZW50OwogICAgaWYgKHVhLmluZGV4T2YoIkR1bXBSZW5kZXJUcmVl
-IikgPj0gMCkgcmV0dXJuIGhvb2tzOwogICAgaWYgKHVhLmluZGV4T2YoIkNocm9tZSIpID49IDApIHsK
-ICAgICAgZnVuY3Rpb24gY29uZmlybShwKSB7CiAgICAgICAgcmV0dXJuIHR5cGVvZiB3aW5kb3cgPT0g
-Im9iamVjdCIgJiYgd2luZG93W3BdICYmIHdpbmRvd1twXS5uYW1lID09IHA7CiAgICAgIH0KICAgICAg
-aWYgKGNvbmZpcm0oIldpbmRvdyIpICYmIGNvbmZpcm0oIkhUTUxFbGVtZW50IikpIHJldHVybiBob29r
-czsKICAgIH0KICAgIGhvb2tzLmdldFRhZyA9IGdldFRhZ0ZhbGxiYWNrOwogIH07Cn0KQy5LVT1mdW5j
-dGlvbihob29rcykgewogIGlmICh0eXBlb2YgZGFydEV4cGVyaW1lbnRhbEZpeHVwR2V0VGFnICE9ICJm
-dW5jdGlvbiIpIHJldHVybiBob29rczsKICBob29rcy5nZXRUYWcgPSBkYXJ0RXhwZXJpbWVudGFsRml4
-dXBHZXRUYWcoaG9va3MuZ2V0VGFnKTsKfQpDLmZRPWZ1bmN0aW9uKGhvb2tzKSB7CiAgdmFyIGdldFRh
-ZyA9IGhvb2tzLmdldFRhZzsKICB2YXIgcHJvdG90eXBlRm9yVGFnID0gaG9va3MucHJvdG90eXBlRm9y
-VGFnOwogIGZ1bmN0aW9uIGdldFRhZ0ZpeGVkKG8pIHsKICAgIHZhciB0YWcgPSBnZXRUYWcobyk7CiAg
-ICBpZiAodGFnID09ICJEb2N1bWVudCIpIHsKICAgICAgaWYgKCEhby54bWxWZXJzaW9uKSByZXR1cm4g
-IiFEb2N1bWVudCI7CiAgICAgIHJldHVybiAiIUhUTUxEb2N1bWVudCI7CiAgICB9CiAgICByZXR1cm4g
-dGFnOwogIH0KICBmdW5jdGlvbiBwcm90b3R5cGVGb3JUYWdGaXhlZCh0YWcpIHsKICAgIGlmICh0YWcg
-PT0gIkRvY3VtZW50IikgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gcHJvdG90eXBlRm9yVGFnKHRhZyk7
-CiAgfQogIGhvb2tzLmdldFRhZyA9IGdldFRhZ0ZpeGVkOwogIGhvb2tzLnByb3RvdHlwZUZvclRhZyA9
-IHByb3RvdHlwZUZvclRhZ0ZpeGVkOwp9CkMuZGs9ZnVuY3Rpb24oaG9va3MpIHsKICB2YXIgdXNlckFn
-ZW50ID0gdHlwZW9mIG5hdmlnYXRvciA9PSAib2JqZWN0IiA/IG5hdmlnYXRvci51c2VyQWdlbnQgOiAi
-IjsKICBpZiAodXNlckFnZW50LmluZGV4T2YoIkZpcmVmb3giKSA9PSAtMSkgcmV0dXJuIGhvb2tzOwog
-IHZhciBnZXRUYWcgPSBob29rcy5nZXRUYWc7CiAgdmFyIHF1aWNrTWFwID0gewogICAgIkJlZm9yZVVu
-bG9hZEV2ZW50IjogIkV2ZW50IiwKICAgICJEYXRhVHJhbnNmZXIiOiAiQ2xpcGJvYXJkIiwKICAgICJH
-ZW9HZW9sb2NhdGlvbiI6ICJHZW9sb2NhdGlvbiIsCiAgICAiTG9jYXRpb24iOiAiIUxvY2F0aW9uIiwK
-ICAgICJXb3JrZXJNZXNzYWdlRXZlbnQiOiAiTWVzc2FnZUV2ZW50IiwKICAgICJYTUxEb2N1bWVudCI6
-ICIhRG9jdW1lbnQifTsKICBmdW5jdGlvbiBnZXRUYWdGaXJlZm94KG8pIHsKICAgIHZhciB0YWcgPSBn
-ZXRUYWcobyk7CiAgICByZXR1cm4gcXVpY2tNYXBbdGFnXSB8fCB0YWc7CiAgfQogIGhvb2tzLmdldFRh
-ZyA9IGdldFRhZ0ZpcmVmb3g7Cn0KQy54aT1mdW5jdGlvbihob29rcykgewogIHZhciB1c2VyQWdlbnQg
-PSB0eXBlb2YgbmF2aWdhdG9yID09ICJvYmplY3QiID8gbmF2aWdhdG9yLnVzZXJBZ2VudCA6ICIiOwog
-IGlmICh1c2VyQWdlbnQuaW5kZXhPZigiVHJpZGVudC8iKSA9PSAtMSkgcmV0dXJuIGhvb2tzOwogIHZh
-ciBnZXRUYWcgPSBob29rcy5nZXRUYWc7CiAgdmFyIHF1aWNrTWFwID0gewogICAgIkJlZm9yZVVubG9h
-ZEV2ZW50IjogIkV2ZW50IiwKICAgICJEYXRhVHJhbnNmZXIiOiAiQ2xpcGJvYXJkIiwKICAgICJIVE1M
-RERFbGVtZW50IjogIkhUTUxFbGVtZW50IiwKICAgICJIVE1MRFRFbGVtZW50IjogIkhUTUxFbGVtZW50
-IiwKICAgICJIVE1MUGhyYXNlRWxlbWVudCI6ICJIVE1MRWxlbWVudCIsCiAgICAiUG9zaXRpb24iOiAi
-R2VvcG9zaXRpb24iCiAgfTsKICBmdW5jdGlvbiBnZXRUYWdJRShvKSB7CiAgICB2YXIgdGFnID0gZ2V0
-VGFnKG8pOwogICAgdmFyIG5ld1RhZyA9IHF1aWNrTWFwW3RhZ107CiAgICBpZiAobmV3VGFnKSByZXR1
-cm4gbmV3VGFnOwogICAgaWYgKHRhZyA9PSAiT2JqZWN0IikgewogICAgICBpZiAod2luZG93LkRhdGFW
-aWV3ICYmIChvIGluc3RhbmNlb2Ygd2luZG93LkRhdGFWaWV3KSkgcmV0dXJuICJEYXRhVmlldyI7CiAg
-ICB9CiAgICByZXR1cm4gdGFnOwogIH0KICBmdW5jdGlvbiBwcm90b3R5cGVGb3JUYWdJRSh0YWcpIHsK
-ICAgIHZhciBjb25zdHJ1Y3RvciA9IHdpbmRvd1t0YWddOwogICAgaWYgKGNvbnN0cnVjdG9yID09IG51
-bGwpIHJldHVybiBudWxsOwogICAgcmV0dXJuIGNvbnN0cnVjdG9yLnByb3RvdHlwZTsKICB9CiAgaG9v
-a3MuZ2V0VGFnID0gZ2V0VGFnSUU7CiAgaG9va3MucHJvdG90eXBlRm9yVGFnID0gcHJvdG90eXBlRm9y
-VGFnSUU7Cn0KQy5pNz1mdW5jdGlvbihob29rcykgeyByZXR1cm4gaG9va3M7IH0KCkMuQ3Q9bmV3IFAu
-YnkoKQpDLkVxPW5ldyBQLms1KCkKQy54TT1uZXcgUC51NSgpCkMuUWs9bmV3IFAuRTMoKQpDLk5VPW5l
-dyBQLkppKCkKQy5BMz1uZXcgUC5NeChudWxsKQpDLkdiPUguVk0odChbMTI3LDIwNDcsNjU1MzUsMTEx
-NDExMV0pLHUudCkKQy5haz1ILlZNKHQoWzAsMCwzMjc3NiwzMzc5MiwxLDEwMjQwLDAsMF0pLHUudCkK
-Qy5jbT1ILlZNKHQoWyIqOjpjbGFzcyIsIio6OmRpciIsIio6OmRyYWdnYWJsZSIsIio6OmhpZGRlbiIs
-Iio6OmlkIiwiKjo6aW5lcnQiLCIqOjppdGVtcHJvcCIsIio6Oml0ZW1yZWYiLCIqOjppdGVtc2NvcGUi
-LCIqOjpsYW5nIiwiKjo6c3BlbGxjaGVjayIsIio6OnRpdGxlIiwiKjo6dHJhbnNsYXRlIiwiQTo6YWNj
-ZXNza2V5IiwiQTo6Y29vcmRzIiwiQTo6aHJlZmxhbmciLCJBOjpuYW1lIiwiQTo6c2hhcGUiLCJBOjp0
-YWJpbmRleCIsIkE6OnRhcmdldCIsIkE6OnR5cGUiLCJBUkVBOjphY2Nlc3NrZXkiLCJBUkVBOjphbHQi
-LCJBUkVBOjpjb29yZHMiLCJBUkVBOjpub2hyZWYiLCJBUkVBOjpzaGFwZSIsIkFSRUE6OnRhYmluZGV4
-IiwiQVJFQTo6dGFyZ2V0IiwiQVVESU86OmNvbnRyb2xzIiwiQVVESU86Omxvb3AiLCJBVURJTzo6bWVk
-aWFncm91cCIsIkFVRElPOjptdXRlZCIsIkFVRElPOjpwcmVsb2FkIiwiQkRPOjpkaXIiLCJCT0RZOjph
-bGluayIsIkJPRFk6OmJnY29sb3IiLCJCT0RZOjpsaW5rIiwiQk9EWTo6dGV4dCIsIkJPRFk6OnZsaW5r
-IiwiQlI6OmNsZWFyIiwiQlVUVE9OOjphY2Nlc3NrZXkiLCJCVVRUT046OmRpc2FibGVkIiwiQlVUVE9O
-OjpuYW1lIiwiQlVUVE9OOjp0YWJpbmRleCIsIkJVVFRPTjo6dHlwZSIsIkJVVFRPTjo6dmFsdWUiLCJD
-QU5WQVM6OmhlaWdodCIsIkNBTlZBUzo6d2lkdGgiLCJDQVBUSU9OOjphbGlnbiIsIkNPTDo6YWxpZ24i
-LCJDT0w6OmNoYXIiLCJDT0w6OmNoYXJvZmYiLCJDT0w6OnNwYW4iLCJDT0w6OnZhbGlnbiIsIkNPTDo6
-d2lkdGgiLCJDT0xHUk9VUDo6YWxpZ24iLCJDT0xHUk9VUDo6Y2hhciIsIkNPTEdST1VQOjpjaGFyb2Zm
-IiwiQ09MR1JPVVA6OnNwYW4iLCJDT0xHUk9VUDo6dmFsaWduIiwiQ09MR1JPVVA6OndpZHRoIiwiQ09N
-TUFORDo6Y2hlY2tlZCIsIkNPTU1BTkQ6OmNvbW1hbmQiLCJDT01NQU5EOjpkaXNhYmxlZCIsIkNPTU1B
-TkQ6OmxhYmVsIiwiQ09NTUFORDo6cmFkaW9ncm91cCIsIkNPTU1BTkQ6OnR5cGUiLCJEQVRBOjp2YWx1
-ZSIsIkRFTDo6ZGF0ZXRpbWUiLCJERVRBSUxTOjpvcGVuIiwiRElSOjpjb21wYWN0IiwiRElWOjphbGln
-biIsIkRMOjpjb21wYWN0IiwiRklFTERTRVQ6OmRpc2FibGVkIiwiRk9OVDo6Y29sb3IiLCJGT05UOjpm
-YWNlIiwiRk9OVDo6c2l6ZSIsIkZPUk06OmFjY2VwdCIsIkZPUk06OmF1dG9jb21wbGV0ZSIsIkZPUk06
-OmVuY3R5cGUiLCJGT1JNOjptZXRob2QiLCJGT1JNOjpuYW1lIiwiRk9STTo6bm92YWxpZGF0ZSIsIkZP
-Uk06OnRhcmdldCIsIkZSQU1FOjpuYW1lIiwiSDE6OmFsaWduIiwiSDI6OmFsaWduIiwiSDM6OmFsaWdu
-IiwiSDQ6OmFsaWduIiwiSDU6OmFsaWduIiwiSDY6OmFsaWduIiwiSFI6OmFsaWduIiwiSFI6Om5vc2hh
-ZGUiLCJIUjo6c2l6ZSIsIkhSOjp3aWR0aCIsIkhUTUw6OnZlcnNpb24iLCJJRlJBTUU6OmFsaWduIiwi
-SUZSQU1FOjpmcmFtZWJvcmRlciIsIklGUkFNRTo6aGVpZ2h0IiwiSUZSQU1FOjptYXJnaW5oZWlnaHQi
-LCJJRlJBTUU6Om1hcmdpbndpZHRoIiwiSUZSQU1FOjp3aWR0aCIsIklNRzo6YWxpZ24iLCJJTUc6OmFs
-dCIsIklNRzo6Ym9yZGVyIiwiSU1HOjpoZWlnaHQiLCJJTUc6OmhzcGFjZSIsIklNRzo6aXNtYXAiLCJJ
-TUc6Om5hbWUiLCJJTUc6OnVzZW1hcCIsIklNRzo6dnNwYWNlIiwiSU1HOjp3aWR0aCIsIklOUFVUOjph
-Y2NlcHQiLCJJTlBVVDo6YWNjZXNza2V5IiwiSU5QVVQ6OmFsaWduIiwiSU5QVVQ6OmFsdCIsIklOUFVU
-OjphdXRvY29tcGxldGUiLCJJTlBVVDo6YXV0b2ZvY3VzIiwiSU5QVVQ6OmNoZWNrZWQiLCJJTlBVVDo6
-ZGlzYWJsZWQiLCJJTlBVVDo6aW5wdXRtb2RlIiwiSU5QVVQ6OmlzbWFwIiwiSU5QVVQ6Omxpc3QiLCJJ
-TlBVVDo6bWF4IiwiSU5QVVQ6Om1heGxlbmd0aCIsIklOUFVUOjptaW4iLCJJTlBVVDo6bXVsdGlwbGUi
-LCJJTlBVVDo6bmFtZSIsIklOUFVUOjpwbGFjZWhvbGRlciIsIklOUFVUOjpyZWFkb25seSIsIklOUFVU
-OjpyZXF1aXJlZCIsIklOUFVUOjpzaXplIiwiSU5QVVQ6OnN0ZXAiLCJJTlBVVDo6dGFiaW5kZXgiLCJJ
-TlBVVDo6dHlwZSIsIklOUFVUOjp1c2VtYXAiLCJJTlBVVDo6dmFsdWUiLCJJTlM6OmRhdGV0aW1lIiwi
-S0VZR0VOOjpkaXNhYmxlZCIsIktFWUdFTjo6a2V5dHlwZSIsIktFWUdFTjo6bmFtZSIsIkxBQkVMOjph
-Y2Nlc3NrZXkiLCJMQUJFTDo6Zm9yIiwiTEVHRU5EOjphY2Nlc3NrZXkiLCJMRUdFTkQ6OmFsaWduIiwi
-TEk6OnR5cGUiLCJMSTo6dmFsdWUiLCJMSU5LOjpzaXplcyIsIk1BUDo6bmFtZSIsIk1FTlU6OmNvbXBh
-Y3QiLCJNRU5VOjpsYWJlbCIsIk1FTlU6OnR5cGUiLCJNRVRFUjo6aGlnaCIsIk1FVEVSOjpsb3ciLCJN
-RVRFUjo6bWF4IiwiTUVURVI6Om1pbiIsIk1FVEVSOjp2YWx1ZSIsIk9CSkVDVDo6dHlwZW11c3RtYXRj
-aCIsIk9MOjpjb21wYWN0IiwiT0w6OnJldmVyc2VkIiwiT0w6OnN0YXJ0IiwiT0w6OnR5cGUiLCJPUFRH
-Uk9VUDo6ZGlzYWJsZWQiLCJPUFRHUk9VUDo6bGFiZWwiLCJPUFRJT046OmRpc2FibGVkIiwiT1BUSU9O
-OjpsYWJlbCIsIk9QVElPTjo6c2VsZWN0ZWQiLCJPUFRJT046OnZhbHVlIiwiT1VUUFVUOjpmb3IiLCJP
-VVRQVVQ6Om5hbWUiLCJQOjphbGlnbiIsIlBSRTo6d2lkdGgiLCJQUk9HUkVTUzo6bWF4IiwiUFJPR1JF
-U1M6Om1pbiIsIlBST0dSRVNTOjp2YWx1ZSIsIlNFTEVDVDo6YXV0b2NvbXBsZXRlIiwiU0VMRUNUOjpk
-aXNhYmxlZCIsIlNFTEVDVDo6bXVsdGlwbGUiLCJTRUxFQ1Q6Om5hbWUiLCJTRUxFQ1Q6OnJlcXVpcmVk
-IiwiU0VMRUNUOjpzaXplIiwiU0VMRUNUOjp0YWJpbmRleCIsIlNPVVJDRTo6dHlwZSIsIlRBQkxFOjph
-bGlnbiIsIlRBQkxFOjpiZ2NvbG9yIiwiVEFCTEU6OmJvcmRlciIsIlRBQkxFOjpjZWxscGFkZGluZyIs
-IlRBQkxFOjpjZWxsc3BhY2luZyIsIlRBQkxFOjpmcmFtZSIsIlRBQkxFOjpydWxlcyIsIlRBQkxFOjpz
-dW1tYXJ5IiwiVEFCTEU6OndpZHRoIiwiVEJPRFk6OmFsaWduIiwiVEJPRFk6OmNoYXIiLCJUQk9EWTo6
-Y2hhcm9mZiIsIlRCT0RZOjp2YWxpZ24iLCJURDo6YWJiciIsIlREOjphbGlnbiIsIlREOjpheGlzIiwi
-VEQ6OmJnY29sb3IiLCJURDo6Y2hhciIsIlREOjpjaGFyb2ZmIiwiVEQ6OmNvbHNwYW4iLCJURDo6aGVh
-ZGVycyIsIlREOjpoZWlnaHQiLCJURDo6bm93cmFwIiwiVEQ6OnJvd3NwYW4iLCJURDo6c2NvcGUiLCJU
-RDo6dmFsaWduIiwiVEQ6OndpZHRoIiwiVEVYVEFSRUE6OmFjY2Vzc2tleSIsIlRFWFRBUkVBOjphdXRv
-Y29tcGxldGUiLCJURVhUQVJFQTo6Y29scyIsIlRFWFRBUkVBOjpkaXNhYmxlZCIsIlRFWFRBUkVBOjpp
-bnB1dG1vZGUiLCJURVhUQVJFQTo6bmFtZSIsIlRFWFRBUkVBOjpwbGFjZWhvbGRlciIsIlRFWFRBUkVB
-OjpyZWFkb25seSIsIlRFWFRBUkVBOjpyZXF1aXJlZCIsIlRFWFRBUkVBOjpyb3dzIiwiVEVYVEFSRUE6
-OnRhYmluZGV4IiwiVEVYVEFSRUE6OndyYXAiLCJURk9PVDo6YWxpZ24iLCJURk9PVDo6Y2hhciIsIlRG
-T09UOjpjaGFyb2ZmIiwiVEZPT1Q6OnZhbGlnbiIsIlRIOjphYmJyIiwiVEg6OmFsaWduIiwiVEg6OmF4
-aXMiLCJUSDo6Ymdjb2xvciIsIlRIOjpjaGFyIiwiVEg6OmNoYXJvZmYiLCJUSDo6Y29sc3BhbiIsIlRI
-OjpoZWFkZXJzIiwiVEg6OmhlaWdodCIsIlRIOjpub3dyYXAiLCJUSDo6cm93c3BhbiIsIlRIOjpzY29w
-ZSIsIlRIOjp2YWxpZ24iLCJUSDo6d2lkdGgiLCJUSEVBRDo6YWxpZ24iLCJUSEVBRDo6Y2hhciIsIlRI
-RUFEOjpjaGFyb2ZmIiwiVEhFQUQ6OnZhbGlnbiIsIlRSOjphbGlnbiIsIlRSOjpiZ2NvbG9yIiwiVFI6
-OmNoYXIiLCJUUjo6Y2hhcm9mZiIsIlRSOjp2YWxpZ24iLCJUUkFDSzo6ZGVmYXVsdCIsIlRSQUNLOjpr
-aW5kIiwiVFJBQ0s6OmxhYmVsIiwiVFJBQ0s6OnNyY2xhbmciLCJVTDo6Y29tcGFjdCIsIlVMOjp0eXBl
-IiwiVklERU86OmNvbnRyb2xzIiwiVklERU86OmhlaWdodCIsIlZJREVPOjpsb29wIiwiVklERU86Om1l
-ZGlhZ3JvdXAiLCJWSURFTzo6bXV0ZWQiLCJWSURFTzo6cHJlbG9hZCIsIlZJREVPOjp3aWR0aCJdKSx1
-LnMpCkMuVkM9SC5WTSh0KFswLDAsNjU0OTAsNDUwNTUsNjU1MzUsMzQ4MTUsNjU1MzQsMTg0MzFdKSx1
-LnQpCkMubUs9SC5WTSh0KFswLDAsMjY2MjQsMTAyMyw2NTUzNCwyMDQ3LDY1NTM0LDIwNDddKSx1LnQp
-CkMuU3E9SC5WTSh0KFsiSEVBRCIsIkFSRUEiLCJCQVNFIiwiQkFTRUZPTlQiLCJCUiIsIkNPTCIsIkNP
-TEdST1VQIiwiRU1CRUQiLCJGUkFNRSIsIkZSQU1FU0VUIiwiSFIiLCJJTUFHRSIsIklNRyIsIklOUFVU
-IiwiSVNJTkRFWCIsIkxJTksiLCJNRVRBIiwiUEFSQU0iLCJTT1VSQ0UiLCJTVFlMRSIsIlRJVExFIiwi
-V0JSIl0pLHUucykKQy54RD1ILlZNKHQoW10pLHUudSkKQy5kbj1ILlZNKHQoW10pLHUucykKQy5oVT1I
-LlZNKHQoW10pLHUubSkKQy50bz1ILlZNKHQoWzAsMCwzMjcyMiwxMjI4Nyw2NTUzNCwzNDgxNSw2NTUz
-NCwxODQzMV0pLHUudCkKQy5GMz1ILlZNKHQoWzAsMCwyNDU3NiwxMDIzLDY1NTM0LDM0ODE1LDY1NTM0
-LDE4NDMxXSksdS50KQpDLmVhPUguVk0odChbMCwwLDMyNzU0LDExMjYzLDY1NTM0LDM0ODE1LDY1NTM0
-LDE4NDMxXSksdS50KQpDLlpKPUguVk0odChbMCwwLDMyNzIyLDEyMjg3LDY1NTM1LDM0ODE1LDY1NTM0
-LDE4NDMxXSksdS50KQpDLldkPUguVk0odChbMCwwLDY1NDkwLDEyMjg3LDY1NTM1LDM0ODE1LDY1NTM0
-LDE4NDMxXSksdS50KQpDLlF4PUguVk0odChbImJpbmQiLCJpZiIsInJlZiIsInJlcGVhdCIsInN5bnRh
-eCJdKSx1LnMpCkMuQkk9SC5WTSh0KFsiQTo6aHJlZiIsIkFSRUE6OmhyZWYiLCJCTE9DS1FVT1RFOjpj
-aXRlIiwiQk9EWTo6YmFja2dyb3VuZCIsIkNPTU1BTkQ6Omljb24iLCJERUw6OmNpdGUiLCJGT1JNOjph
-Y3Rpb24iLCJJTUc6OnNyYyIsIklOUFVUOjpzcmMiLCJJTlM6OmNpdGUiLCJROjpjaXRlIiwiVklERU86
-OnBvc3RlciJdKSx1LnMpCkMuV089bmV3IEguTFAoMCx7fSxDLmRuLEguTjAoIkxQPHFVLHFVPiIpKQpD
-LmlIPUguVk0odChbXSksSC5OMCgiamQ8R0Q+IikpCkMuQ009bmV3IEguTFAoMCx7fSxDLmlILEguTjAo
-IkxQPEdELEA+IikpCkMuWTI9bmV3IEwueTgoIk5hdmlnYXRpb25UcmVlTm9kZVR5cGUuZGlyZWN0b3J5
-IikKQy5yZj1uZXcgTC55OCgiTmF2aWdhdGlvblRyZWVOb2RlVHlwZS5maWxlIikKQy5UZT1uZXcgSC53
-digiY2FsbCIpfSkoKTsoZnVuY3Rpb24gc3RhdGljRmllbGRzKCl7JC55aj0wCiQubUo9bnVsbAokLlA0
-PW51bGwKJC5ORj1udWxsCiQuVFg9bnVsbAokLng3PW51bGwKJC5udz1udWxsCiQudnY9bnVsbAokLkJ2
-PW51bGwKJC5TNj1udWxsCiQuazg9bnVsbAokLm1nPW51bGwKJC5VRD0hMQokLlgzPUMuTlUKJC54Zz1b
-XQokLnhvPW51bGwKJC5CTz1udWxsCiQubHQ9bnVsbAokLkVVPW51bGwKJC5vcj1QLkZsKHUuTix1Llop
-CiQuSTY9bnVsbAokLkZmPW51bGx9KSgpOyhmdW5jdGlvbiBsYXp5SW5pdGlhbGl6ZXJzKCl7dmFyIHQ9
-aHVua0hlbHBlcnMubGF6eQp0KCQsImZhIiwidyIsZnVuY3Rpb24oKXtyZXR1cm4gSC5ZZygiXyRkYXJ0
-X2RhcnRDbG9zdXJlIil9KQp0KCQsIlkyIiwiVU4iLGZ1bmN0aW9uKCl7cmV0dXJuIEguWWcoIl8kZGFy
-dF9qcyIpfSkKdCgkLCJVMiIsIlNuIixmdW5jdGlvbigpe3JldHVybiBILmNNKEguUzcoewp0b1N0cmlu
-ZzpmdW5jdGlvbigpe3JldHVybiIkcmVjZWl2ZXIkIn19KSl9KQp0KCQsInhxIiwibHEiLGZ1bmN0aW9u
-KCl7cmV0dXJuIEguY00oSC5TNyh7JG1ldGhvZCQ6bnVsbCwKdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1
-cm4iJHJlY2VpdmVyJCJ9fSkpfSkKdCgkLCJSMSIsIk45IixmdW5jdGlvbigpe3JldHVybiBILmNNKEgu
-UzcobnVsbCkpfSkKdCgkLCJmTiIsImlJIixmdW5jdGlvbigpe3JldHVybiBILmNNKGZ1bmN0aW9uKCl7
-dmFyICRhcmd1bWVudHNFeHByJD0nJGFyZ3VtZW50cyQnCnRyeXtudWxsLiRtZXRob2QkKCRhcmd1bWVu
-dHNFeHByJCl9Y2F0Y2gocyl7cmV0dXJuIHMubWVzc2FnZX19KCkpfSkKdCgkLCJxaSIsIktmIixmdW5j
-dGlvbigpe3JldHVybiBILmNNKEguUzcodm9pZCAwKSl9KQp0KCQsInJaIiwiWmgiLGZ1bmN0aW9uKCl7
-cmV0dXJuIEguY00oZnVuY3Rpb24oKXt2YXIgJGFyZ3VtZW50c0V4cHIkPSckYXJndW1lbnRzJCcKdHJ5
-eyh2b2lkIDApLiRtZXRob2QkKCRhcmd1bWVudHNFeHByJCl9Y2F0Y2gocyl7cmV0dXJuIHMubWVzc2Fn
-ZX19KCkpfSkKdCgkLCJrcSIsImNQIixmdW5jdGlvbigpe3JldHVybiBILmNNKEguTWoobnVsbCkpfSkK
-dCgkLCJ0dCIsImMzIixmdW5jdGlvbigpe3JldHVybiBILmNNKGZ1bmN0aW9uKCl7dHJ5e251bGwuJG1l
-dGhvZCR9Y2F0Y2gocyl7cmV0dXJuIHMubWVzc2FnZX19KCkpfSkKdCgkLCJkdCIsIkhLIixmdW5jdGlv
-bigpe3JldHVybiBILmNNKEguTWoodm9pZCAwKSl9KQp0KCQsIkE3IiwicjEiLGZ1bmN0aW9uKCl7cmV0
-dXJuIEguY00oZnVuY3Rpb24oKXt0cnl7KHZvaWQgMCkuJG1ldGhvZCR9Y2F0Y2gocyl7cmV0dXJuIHMu
-bWVzc2FnZX19KCkpfSkKdCgkLCJXYyIsInV0IixmdW5jdGlvbigpe3JldHVybiBQLk9qKCl9KQp0KCQs
-ImtoIiwicmYiLGZ1bmN0aW9uKCl7cmV0dXJuIFAuV0koKX0pCnQoJCwiYnQiLCJWNyIsZnVuY3Rpb24o
-KXtyZXR1cm4gSC5EUShILlhGKEguVk0oWy0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0y
-LC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0yLC0y
-LC0yLC0yLC0yLC0yLC0yLC0xLC0yLC0yLC0yLC0yLC0yLDYyLC0yLDYyLC0yLDYzLDUyLDUzLDU0LDU1
-LDU2LDU3LDU4LDU5LDYwLDYxLC0yLC0yLC0yLC0xLC0yLC0yLC0yLDAsMSwyLDMsNCw1LDYsNyw4LDks
-MTAsMTEsMTIsMTMsMTQsMTUsMTYsMTcsMTgsMTksMjAsMjEsMjIsMjMsMjQsMjUsLTIsLTIsLTIsLTIs
-NjMsLTIsMjYsMjcsMjgsMjksMzAsMzEsMzIsMzMsMzQsMzUsMzYsMzcsMzgsMzksNDAsNDEsNDIsNDMs
-NDQsNDUsNDYsNDcsNDgsNDksNTAsNTEsLTIsLTIsLTIsLTIsLTJdLHUudCkpKX0pCnQoJCwiTTUiLCJ3
-USIsZnVuY3Rpb24oKXtyZXR1cm4gdHlwZW9mIHByb2Nlc3MhPSJ1bmRlZmluZWQiJiZPYmplY3QucHJv
-dG90eXBlLnRvU3RyaW5nLmNhbGwocHJvY2Vzcyk9PSJbb2JqZWN0IHByb2Nlc3NdIiYmcHJvY2Vzcy5w
-bGF0Zm9ybT09IndpbjMyIn0pCnQoJCwibWYiLCJ6NCIsZnVuY3Rpb24oKXtyZXR1cm4gUC5udSgiXltc
-XC1cXC4wLTlBLVpfYS16fl0qJCIpfSkKdCgkLCJKRyIsInZaIixmdW5jdGlvbigpe3JldHVybiBQLnV4
-KCl9KQp0KCQsIlNDIiwiQU4iLGZ1bmN0aW9uKCl7cmV0dXJuIFAudE0oWyJBIiwiQUJCUiIsIkFDUk9O
-WU0iLCJBRERSRVNTIiwiQVJFQSIsIkFSVElDTEUiLCJBU0lERSIsIkFVRElPIiwiQiIsIkJESSIsIkJE
-TyIsIkJJRyIsIkJMT0NLUVVPVEUiLCJCUiIsIkJVVFRPTiIsIkNBTlZBUyIsIkNBUFRJT04iLCJDRU5U
-RVIiLCJDSVRFIiwiQ09ERSIsIkNPTCIsIkNPTEdST1VQIiwiQ09NTUFORCIsIkRBVEEiLCJEQVRBTElT
-VCIsIkREIiwiREVMIiwiREVUQUlMUyIsIkRGTiIsIkRJUiIsIkRJViIsIkRMIiwiRFQiLCJFTSIsIkZJ
-RUxEU0VUIiwiRklHQ0FQVElPTiIsIkZJR1VSRSIsIkZPTlQiLCJGT09URVIiLCJGT1JNIiwiSDEiLCJI
-MiIsIkgzIiwiSDQiLCJINSIsIkg2IiwiSEVBREVSIiwiSEdST1VQIiwiSFIiLCJJIiwiSUZSQU1FIiwi
-SU1HIiwiSU5QVVQiLCJJTlMiLCJLQkQiLCJMQUJFTCIsIkxFR0VORCIsIkxJIiwiTUFQIiwiTUFSSyIs
-Ik1FTlUiLCJNRVRFUiIsIk5BViIsIk5PQlIiLCJPTCIsIk9QVEdST1VQIiwiT1BUSU9OIiwiT1VUUFVU
-IiwiUCIsIlBSRSIsIlBST0dSRVNTIiwiUSIsIlMiLCJTQU1QIiwiU0VDVElPTiIsIlNFTEVDVCIsIlNN
-QUxMIiwiU09VUkNFIiwiU1BBTiIsIlNUUklLRSIsIlNUUk9ORyIsIlNVQiIsIlNVTU1BUlkiLCJTVVAi
-LCJUQUJMRSIsIlRCT0RZIiwiVEQiLCJURVhUQVJFQSIsIlRGT09UIiwiVEgiLCJUSEVBRCIsIlRJTUUi
-LCJUUiIsIlRSQUNLIiwiVFQiLCJVIiwiVUwiLCJWQVIiLCJWSURFTyIsIldCUiJdLHUuTil9KQp0KCQs
-Ilg0IiwiaEciLGZ1bmN0aW9uKCl7cmV0dXJuIFAubnUoIl5cXFMrJCIpfSkKdCgkLCJ3TyIsIm93Iixm
-dW5jdGlvbigpe3JldHVybiB1LnYuYihQLk5EKHNlbGYpKX0pCnQoJCwia3QiLCJSOCIsZnVuY3Rpb24o
-KXtyZXR1cm4gSC5ZZygiXyRkYXJ0X2RhcnRPYmplY3QiKX0pCnQoJCwiZksiLCJrSSIsZnVuY3Rpb24o
-KXtyZXR1cm4gZnVuY3Rpb24gRGFydE9iamVjdChhKXt0aGlzLm89YX19KQp0KCQsInF0IiwiekIiLGZ1
-bmN0aW9uKCl7cmV0dXJuIG5ldyBULkdWKCl9KQp0KCQsImZlIiwiS0ciLGZ1bmN0aW9uKCl7cmV0dXJu
-IG5ldyBMLlhBKCl9KQp0KCQsIm1NIiwiblUiLGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBNLmxJKCQuSGso
-KSl9KQp0KCQsInlyIiwiYkQiLGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBFLk9GKFAubnUoIi8iKSxQLm51
-KCJbXi9dJCIpLFAubnUoIl4vIikpfSkKdCgkLCJNayIsIktrIixmdW5jdGlvbigpe3JldHVybiBuZXcg
-TC5JVihQLm51KCJbL1xcXFxdIiksUC5udSgiW14vXFxcXF0kIiksUC5udSgiXihcXFxcXFxcXFteXFxc
-XF0rXFxcXFteXFxcXC9dK3xbYS16QS1aXTpbL1xcXFxdKSIpLFAubnUoIl5bL1xcXFxdKD8hWy9cXFxc
-XSkiKSl9KQp0KCQsImFrIiwiRWIiLGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBGLnJ1KFAubnUoIi8iKSxQ
-Lm51KCIoXlthLXpBLVpdWy0rLmEtekEtWlxcZF0qOi8vfFteL10pJCIpLFAubnUoIlthLXpBLVpdWy0r
-LmEtekEtWlxcZF0qOi8vW14vXSoiKSxQLm51KCJeLyIpKX0pCnQoJCwibHMiLCJIayIsZnVuY3Rpb24o
-KXtyZXR1cm4gTy5SaCgpfSl9KSgpOyhmdW5jdGlvbiBuYXRpdmVTdXBwb3J0KCl7IWZ1bmN0aW9uKCl7
-dmFyIHQ9ZnVuY3Rpb24oYSl7dmFyIG49e30KblthXT0xCnJldHVybiBPYmplY3Qua2V5cyhodW5rSGVs
-cGVycy5jb252ZXJ0VG9GYXN0T2JqZWN0KG4pKVswXX0Kdi5nZXRJc29sYXRlVGFnPWZ1bmN0aW9uKGEp
-e3JldHVybiB0KCJfX19kYXJ0XyIrYSt2Lmlzb2xhdGVUYWcpfQp2YXIgcz0iX19fZGFydF9pc29sYXRl
-X3RhZ3NfIgp2YXIgcj1PYmplY3Rbc118fChPYmplY3Rbc109T2JqZWN0LmNyZWF0ZShudWxsKSkKdmFy
-IHE9Il9aeFl4WCIKZm9yKHZhciBwPTA7O3ArKyl7dmFyIG89dChxKyJfIitwKyJfIikKaWYoIShvIGlu
-IHIpKXtyW29dPTEKdi5pc29sYXRlVGFnPW8KYnJlYWt9fXYuZGlzcGF0Y2hQcm9wZXJ0eU5hbWU9di5n
-ZXRJc29sYXRlVGFnKCJkaXNwYXRjaF9yZWNvcmQiKX0oKQpodW5rSGVscGVycy5zZXRPclVwZGF0ZUlu
-dGVyY2VwdG9yc0J5VGFnKHtET01FcnJvcjpKLnZCLERPTUltcGxlbWVudGF0aW9uOkoudkIsTWVkaWFF
-cnJvcjpKLnZCLE5hdmlnYXRvcjpKLnZCLE5hdmlnYXRvckNvbmN1cnJlbnRIYXJkd2FyZTpKLnZCLE5h
-dmlnYXRvclVzZXJNZWRpYUVycm9yOkoudkIsT3ZlcmNvbnN0cmFpbmVkRXJyb3I6Si52QixQb3NpdGlv
-bkVycm9yOkoudkIsUmFuZ2U6Si52QixTUUxFcnJvcjpKLnZCLERhdGFWaWV3OkguRVQsQXJyYXlCdWZm
-ZXJWaWV3OkguRVQsRmxvYXQzMkFycmF5OkguRGcsRmxvYXQ2NEFycmF5OkguRGcsSW50MTZBcnJheTpI
-LnhqLEludDMyQXJyYXk6SC5kRSxJbnQ4QXJyYXk6SC5aQSxVaW50MTZBcnJheTpILndmLFVpbnQzMkFy
-cmF5OkguUHEsVWludDhDbGFtcGVkQXJyYXk6SC5lRSxDYW52YXNQaXhlbEFycmF5OkguZUUsVWludDhB
-cnJheTpILlY2LEhUTUxBdWRpb0VsZW1lbnQ6Vy5xRSxIVE1MQlJFbGVtZW50OlcucUUsSFRNTEJ1dHRv
-bkVsZW1lbnQ6Vy5xRSxIVE1MQ2FudmFzRWxlbWVudDpXLnFFLEhUTUxDb250ZW50RWxlbWVudDpXLnFF
-LEhUTUxETGlzdEVsZW1lbnQ6Vy5xRSxIVE1MRGF0YUVsZW1lbnQ6Vy5xRSxIVE1MRGF0YUxpc3RFbGVt
-ZW50OlcucUUsSFRNTERldGFpbHNFbGVtZW50OlcucUUsSFRNTERpYWxvZ0VsZW1lbnQ6Vy5xRSxIVE1M
-RGl2RWxlbWVudDpXLnFFLEhUTUxFbWJlZEVsZW1lbnQ6Vy5xRSxIVE1MRmllbGRTZXRFbGVtZW50Olcu
-cUUsSFRNTEhSRWxlbWVudDpXLnFFLEhUTUxIZWFkRWxlbWVudDpXLnFFLEhUTUxIZWFkaW5nRWxlbWVu
-dDpXLnFFLEhUTUxIdG1sRWxlbWVudDpXLnFFLEhUTUxJRnJhbWVFbGVtZW50OlcucUUsSFRNTEltYWdl
-RWxlbWVudDpXLnFFLEhUTUxJbnB1dEVsZW1lbnQ6Vy5xRSxIVE1MTElFbGVtZW50OlcucUUsSFRNTExh
-YmVsRWxlbWVudDpXLnFFLEhUTUxMZWdlbmRFbGVtZW50OlcucUUsSFRNTExpbmtFbGVtZW50OlcucUUs
-SFRNTE1hcEVsZW1lbnQ6Vy5xRSxIVE1MTWVkaWFFbGVtZW50OlcucUUsSFRNTE1lbnVFbGVtZW50Olcu
-cUUsSFRNTE1ldGFFbGVtZW50OlcucUUsSFRNTE1ldGVyRWxlbWVudDpXLnFFLEhUTUxNb2RFbGVtZW50
-OlcucUUsSFRNTE9MaXN0RWxlbWVudDpXLnFFLEhUTUxPYmplY3RFbGVtZW50OlcucUUsSFRNTE9wdEdy
-b3VwRWxlbWVudDpXLnFFLEhUTUxPcHRpb25FbGVtZW50OlcucUUsSFRNTE91dHB1dEVsZW1lbnQ6Vy5x
-RSxIVE1MUGFyYW1FbGVtZW50OlcucUUsSFRNTFBpY3R1cmVFbGVtZW50OlcucUUsSFRNTFByZUVsZW1l
-bnQ6Vy5xRSxIVE1MUHJvZ3Jlc3NFbGVtZW50OlcucUUsSFRNTFF1b3RlRWxlbWVudDpXLnFFLEhUTUxT
-Y3JpcHRFbGVtZW50OlcucUUsSFRNTFNoYWRvd0VsZW1lbnQ6Vy5xRSxIVE1MU2xvdEVsZW1lbnQ6Vy5x
-RSxIVE1MU291cmNlRWxlbWVudDpXLnFFLEhUTUxTcGFuRWxlbWVudDpXLnFFLEhUTUxTdHlsZUVsZW1l
-bnQ6Vy5xRSxIVE1MVGFibGVDYXB0aW9uRWxlbWVudDpXLnFFLEhUTUxUYWJsZUNlbGxFbGVtZW50Olcu
-cUUsSFRNTFRhYmxlRGF0YUNlbGxFbGVtZW50OlcucUUsSFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQ6
-Vy5xRSxIVE1MVGFibGVDb2xFbGVtZW50OlcucUUsSFRNTFRleHRBcmVhRWxlbWVudDpXLnFFLEhUTUxU
-aW1lRWxlbWVudDpXLnFFLEhUTUxUaXRsZUVsZW1lbnQ6Vy5xRSxIVE1MVHJhY2tFbGVtZW50OlcucUUs
-SFRNTFVMaXN0RWxlbWVudDpXLnFFLEhUTUxVbmtub3duRWxlbWVudDpXLnFFLEhUTUxWaWRlb0VsZW1l
-bnQ6Vy5xRSxIVE1MRGlyZWN0b3J5RWxlbWVudDpXLnFFLEhUTUxGb250RWxlbWVudDpXLnFFLEhUTUxG
-cmFtZUVsZW1lbnQ6Vy5xRSxIVE1MRnJhbWVTZXRFbGVtZW50OlcucUUsSFRNTE1hcnF1ZWVFbGVtZW50
-OlcucUUsSFRNTEVsZW1lbnQ6Vy5xRSxIVE1MQW5jaG9yRWxlbWVudDpXLkdoLEhUTUxBcmVhRWxlbWVu
-dDpXLmZZLEhUTUxCYXNlRWxlbWVudDpXLm5CLEJsb2I6Vy5BeixIVE1MQm9keUVsZW1lbnQ6Vy5RUCxD
-REFUQVNlY3Rpb246Vy5ueCxDaGFyYWN0ZXJEYXRhOlcubngsQ29tbWVudDpXLm54LFByb2Nlc3NpbmdJ
-bnN0cnVjdGlvbjpXLm54LFRleHQ6Vy5ueCxDU1NTdHlsZURlY2xhcmF0aW9uOlcub0osTVNTdHlsZUNT
-U1Byb3BlcnRpZXM6Vy5vSixDU1MyUHJvcGVydGllczpXLm9KLFhNTERvY3VtZW50OlcuUUYsRG9jdW1l
-bnQ6Vy5RRixET01FeGNlcHRpb246Vy5OaCxET01SZWN0UmVhZE9ubHk6Vy5JQixET01Ub2tlbkxpc3Q6
-Vy5uNyxFbGVtZW50OlcuY3YsQWJvcnRQYXltZW50RXZlbnQ6Vy5lYSxBbmltYXRpb25FdmVudDpXLmVh
-LEFuaW1hdGlvblBsYXliYWNrRXZlbnQ6Vy5lYSxBcHBsaWNhdGlvbkNhY2hlRXJyb3JFdmVudDpXLmVh
-LEJhY2tncm91bmRGZXRjaENsaWNrRXZlbnQ6Vy5lYSxCYWNrZ3JvdW5kRmV0Y2hFdmVudDpXLmVhLEJh
-Y2tncm91bmRGZXRjaEZhaWxFdmVudDpXLmVhLEJhY2tncm91bmRGZXRjaGVkRXZlbnQ6Vy5lYSxCZWZv
-cmVJbnN0YWxsUHJvbXB0RXZlbnQ6Vy5lYSxCZWZvcmVVbmxvYWRFdmVudDpXLmVhLEJsb2JFdmVudDpX
-LmVhLENhbk1ha2VQYXltZW50RXZlbnQ6Vy5lYSxDbGlwYm9hcmRFdmVudDpXLmVhLENsb3NlRXZlbnQ6
-Vy5lYSxDdXN0b21FdmVudDpXLmVhLERldmljZU1vdGlvbkV2ZW50OlcuZWEsRGV2aWNlT3JpZW50YXRp
-b25FdmVudDpXLmVhLEVycm9yRXZlbnQ6Vy5lYSxFeHRlbmRhYmxlRXZlbnQ6Vy5lYSxFeHRlbmRhYmxl
-TWVzc2FnZUV2ZW50OlcuZWEsRmV0Y2hFdmVudDpXLmVhLEZvbnRGYWNlU2V0TG9hZEV2ZW50OlcuZWEs
-Rm9yZWlnbkZldGNoRXZlbnQ6Vy5lYSxHYW1lcGFkRXZlbnQ6Vy5lYSxIYXNoQ2hhbmdlRXZlbnQ6Vy5l
-YSxJbnN0YWxsRXZlbnQ6Vy5lYSxNZWRpYUVuY3J5cHRlZEV2ZW50OlcuZWEsTWVkaWFLZXlNZXNzYWdl
-RXZlbnQ6Vy5lYSxNZWRpYVF1ZXJ5TGlzdEV2ZW50OlcuZWEsTWVkaWFTdHJlYW1FdmVudDpXLmVhLE1l
-ZGlhU3RyZWFtVHJhY2tFdmVudDpXLmVhLE1lc3NhZ2VFdmVudDpXLmVhLE1JRElDb25uZWN0aW9uRXZl
-bnQ6Vy5lYSxNSURJTWVzc2FnZUV2ZW50OlcuZWEsTXV0YXRpb25FdmVudDpXLmVhLE5vdGlmaWNhdGlv
-bkV2ZW50OlcuZWEsUGFnZVRyYW5zaXRpb25FdmVudDpXLmVhLFBheW1lbnRSZXF1ZXN0RXZlbnQ6Vy5l
-YSxQYXltZW50UmVxdWVzdFVwZGF0ZUV2ZW50OlcuZWEsUG9wU3RhdGVFdmVudDpXLmVhLFByZXNlbnRh
-dGlvbkNvbm5lY3Rpb25BdmFpbGFibGVFdmVudDpXLmVhLFByZXNlbnRhdGlvbkNvbm5lY3Rpb25DbG9z
-ZUV2ZW50OlcuZWEsUHJvbWlzZVJlamVjdGlvbkV2ZW50OlcuZWEsUHVzaEV2ZW50OlcuZWEsUlRDRGF0
-YUNoYW5uZWxFdmVudDpXLmVhLFJUQ0RUTUZUb25lQ2hhbmdlRXZlbnQ6Vy5lYSxSVENQZWVyQ29ubmVj
-dGlvbkljZUV2ZW50OlcuZWEsUlRDVHJhY2tFdmVudDpXLmVhLFNlY3VyaXR5UG9saWN5VmlvbGF0aW9u
-RXZlbnQ6Vy5lYSxTZW5zb3JFcnJvckV2ZW50OlcuZWEsU3BlZWNoUmVjb2duaXRpb25FcnJvcjpXLmVh
-LFNwZWVjaFJlY29nbml0aW9uRXZlbnQ6Vy5lYSxTcGVlY2hTeW50aGVzaXNFdmVudDpXLmVhLFN0b3Jh
-Z2VFdmVudDpXLmVhLFN5bmNFdmVudDpXLmVhLFRyYWNrRXZlbnQ6Vy5lYSxUcmFuc2l0aW9uRXZlbnQ6
-Vy5lYSxXZWJLaXRUcmFuc2l0aW9uRXZlbnQ6Vy5lYSxWUkRldmljZUV2ZW50OlcuZWEsVlJEaXNwbGF5
-RXZlbnQ6Vy5lYSxWUlNlc3Npb25FdmVudDpXLmVhLE1vam9JbnRlcmZhY2VSZXF1ZXN0RXZlbnQ6Vy5l
-YSxVU0JDb25uZWN0aW9uRXZlbnQ6Vy5lYSxJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6Vy5lYSxBdWRpb1By
-b2Nlc3NpbmdFdmVudDpXLmVhLE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudDpXLmVhLFdlYkdMQ29u
-dGV4dEV2ZW50OlcuZWEsRXZlbnQ6Vy5lYSxJbnB1dEV2ZW50OlcuZWEsRXZlbnRUYXJnZXQ6Vy5EMCxG
-aWxlOlcuVDUsSFRNTEZvcm1FbGVtZW50OlcuaDQsSGlzdG9yeTpXLmJyLEhUTUxEb2N1bWVudDpXLlZi
-LFhNTEh0dHBSZXF1ZXN0OlcuTzcsWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDpXLndhLEltYWdlRGF0
-YTpXLlNnLExvY2F0aW9uOlcudTgsTW91c2VFdmVudDpXLkFqLERyYWdFdmVudDpXLkFqLFBvaW50ZXJF
-dmVudDpXLkFqLFdoZWVsRXZlbnQ6Vy5BaixEb2N1bWVudEZyYWdtZW50OlcudUgsU2hhZG93Um9vdDpX
-LnVILERvY3VtZW50VHlwZTpXLnVILE5vZGU6Vy51SCxOb2RlTGlzdDpXLkJILFJhZGlvTm9kZUxpc3Q6
-Vy5CSCxIVE1MUGFyYWdyYXBoRWxlbWVudDpXLlNOLFByb2dyZXNzRXZlbnQ6Vy5ldyxSZXNvdXJjZVBy
-b2dyZXNzRXZlbnQ6Vy5ldyxIVE1MU2VsZWN0RWxlbWVudDpXLmxwLEhUTUxUYWJsZUVsZW1lbnQ6Vy5U
-YixIVE1MVGFibGVSb3dFbGVtZW50OlcuSXYsSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6Vy5CVCxIVE1M
-VGVtcGxhdGVFbGVtZW50OlcueVksQ29tcG9zaXRpb25FdmVudDpXLnc2LEZvY3VzRXZlbnQ6Vy53NixL
-ZXlib2FyZEV2ZW50OlcudzYsVGV4dEV2ZW50OlcudzYsVG91Y2hFdmVudDpXLnc2LFVJRXZlbnQ6Vy53
-NixXaW5kb3c6Vy5LNSxET01XaW5kb3c6Vy5LNSxEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTpXLkNt
-LFNlcnZpY2VXb3JrZXJHbG9iYWxTY29wZTpXLkNtLFNoYXJlZFdvcmtlckdsb2JhbFNjb3BlOlcuQ20s
-V29ya2VyR2xvYmFsU2NvcGU6Vy5DbSxBdHRyOlcuQ1EsQ2xpZW50UmVjdDpXLnc0LERPTVJlY3Q6Vy53
-NCxOYW1lZE5vZGVNYXA6Vy5yaCxNb3pOYW1lZEF0dHJNYXA6Vy5yaCxJREJLZXlSYW5nZTpQLmhGLFNW
-R1NjcmlwdEVsZW1lbnQ6UC5uZCxTVkdBRWxlbWVudDpQLmQ1LFNWR0FuaW1hdGVFbGVtZW50OlAuZDUs
-U1ZHQW5pbWF0ZU1vdGlvbkVsZW1lbnQ6UC5kNSxTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDpQLmQ1
-LFNWR0FuaW1hdGlvbkVsZW1lbnQ6UC5kNSxTVkdDaXJjbGVFbGVtZW50OlAuZDUsU1ZHQ2xpcFBhdGhF
-bGVtZW50OlAuZDUsU1ZHRGVmc0VsZW1lbnQ6UC5kNSxTVkdEZXNjRWxlbWVudDpQLmQ1LFNWR0Rpc2Nh
-cmRFbGVtZW50OlAuZDUsU1ZHRWxsaXBzZUVsZW1lbnQ6UC5kNSxTVkdGRUJsZW5kRWxlbWVudDpQLmQ1
-LFNWR0ZFQ29sb3JNYXRyaXhFbGVtZW50OlAuZDUsU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6
-UC5kNSxTVkdGRUNvbXBvc2l0ZUVsZW1lbnQ6UC5kNSxTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDpQ
-LmQ1LFNWR0ZFRGlmZnVzZUxpZ2h0aW5nRWxlbWVudDpQLmQ1LFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxl
-bWVudDpQLmQ1LFNWR0ZFRGlzdGFudExpZ2h0RWxlbWVudDpQLmQ1LFNWR0ZFRmxvb2RFbGVtZW50OlAu
-ZDUsU1ZHRkVGdW5jQUVsZW1lbnQ6UC5kNSxTVkdGRUZ1bmNCRWxlbWVudDpQLmQ1LFNWR0ZFRnVuY0dF
-bGVtZW50OlAuZDUsU1ZHRkVGdW5jUkVsZW1lbnQ6UC5kNSxTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6
-UC5kNSxTVkdGRUltYWdlRWxlbWVudDpQLmQ1LFNWR0ZFTWVyZ2VFbGVtZW50OlAuZDUsU1ZHRkVNZXJn
-ZU5vZGVFbGVtZW50OlAuZDUsU1ZHRkVNb3JwaG9sb2d5RWxlbWVudDpQLmQ1LFNWR0ZFT2Zmc2V0RWxl
-bWVudDpQLmQ1LFNWR0ZFUG9pbnRMaWdodEVsZW1lbnQ6UC5kNSxTVkdGRVNwZWN1bGFyTGlnaHRpbmdF
-bGVtZW50OlAuZDUsU1ZHRkVTcG90TGlnaHRFbGVtZW50OlAuZDUsU1ZHRkVUaWxlRWxlbWVudDpQLmQ1
-LFNWR0ZFVHVyYnVsZW5jZUVsZW1lbnQ6UC5kNSxTVkdGaWx0ZXJFbGVtZW50OlAuZDUsU1ZHRm9yZWln
-bk9iamVjdEVsZW1lbnQ6UC5kNSxTVkdHRWxlbWVudDpQLmQ1LFNWR0dlb21ldHJ5RWxlbWVudDpQLmQ1
-LFNWR0dyYXBoaWNzRWxlbWVudDpQLmQ1LFNWR0ltYWdlRWxlbWVudDpQLmQ1LFNWR0xpbmVFbGVtZW50
-OlAuZDUsU1ZHTGluZWFyR3JhZGllbnRFbGVtZW50OlAuZDUsU1ZHTWFya2VyRWxlbWVudDpQLmQ1LFNW
-R01hc2tFbGVtZW50OlAuZDUsU1ZHTWV0YWRhdGFFbGVtZW50OlAuZDUsU1ZHUGF0aEVsZW1lbnQ6UC5k
-NSxTVkdQYXR0ZXJuRWxlbWVudDpQLmQ1LFNWR1BvbHlnb25FbGVtZW50OlAuZDUsU1ZHUG9seWxpbmVF
-bGVtZW50OlAuZDUsU1ZHUmFkaWFsR3JhZGllbnRFbGVtZW50OlAuZDUsU1ZHUmVjdEVsZW1lbnQ6UC5k
-NSxTVkdTZXRFbGVtZW50OlAuZDUsU1ZHU3RvcEVsZW1lbnQ6UC5kNSxTVkdTdHlsZUVsZW1lbnQ6UC5k
-NSxTVkdTVkdFbGVtZW50OlAuZDUsU1ZHU3dpdGNoRWxlbWVudDpQLmQ1LFNWR1N5bWJvbEVsZW1lbnQ6
-UC5kNSxTVkdUU3BhbkVsZW1lbnQ6UC5kNSxTVkdUZXh0Q29udGVudEVsZW1lbnQ6UC5kNSxTVkdUZXh0
-RWxlbWVudDpQLmQ1LFNWR1RleHRQYXRoRWxlbWVudDpQLmQ1LFNWR1RleHRQb3NpdGlvbmluZ0VsZW1l
-bnQ6UC5kNSxTVkdUaXRsZUVsZW1lbnQ6UC5kNSxTVkdVc2VFbGVtZW50OlAuZDUsU1ZHVmlld0VsZW1l
-bnQ6UC5kNSxTVkdHcmFkaWVudEVsZW1lbnQ6UC5kNSxTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9u
-RWxlbWVudDpQLmQ1LFNWR0ZFRHJvcFNoYWRvd0VsZW1lbnQ6UC5kNSxTVkdNUGF0aEVsZW1lbnQ6UC5k
-NSxTVkdFbGVtZW50OlAuZDV9KQpodW5rSGVscGVycy5zZXRPclVwZGF0ZUxlYWZUYWdzKHtET01FcnJv
-cjp0cnVlLERPTUltcGxlbWVudGF0aW9uOnRydWUsTWVkaWFFcnJvcjp0cnVlLE5hdmlnYXRvcjp0cnVl
-LE5hdmlnYXRvckNvbmN1cnJlbnRIYXJkd2FyZTp0cnVlLE5hdmlnYXRvclVzZXJNZWRpYUVycm9yOnRy
-dWUsT3ZlcmNvbnN0cmFpbmVkRXJyb3I6dHJ1ZSxQb3NpdGlvbkVycm9yOnRydWUsUmFuZ2U6dHJ1ZSxT
-UUxFcnJvcjp0cnVlLERhdGFWaWV3OnRydWUsQXJyYXlCdWZmZXJWaWV3OmZhbHNlLEZsb2F0MzJBcnJh
-eTp0cnVlLEZsb2F0NjRBcnJheTp0cnVlLEludDE2QXJyYXk6dHJ1ZSxJbnQzMkFycmF5OnRydWUsSW50
-OEFycmF5OnRydWUsVWludDE2QXJyYXk6dHJ1ZSxVaW50MzJBcnJheTp0cnVlLFVpbnQ4Q2xhbXBlZEFy
-cmF5OnRydWUsQ2FudmFzUGl4ZWxBcnJheTp0cnVlLFVpbnQ4QXJyYXk6ZmFsc2UsSFRNTEF1ZGlvRWxl
-bWVudDp0cnVlLEhUTUxCUkVsZW1lbnQ6dHJ1ZSxIVE1MQnV0dG9uRWxlbWVudDp0cnVlLEhUTUxDYW52
-YXNFbGVtZW50OnRydWUsSFRNTENvbnRlbnRFbGVtZW50OnRydWUsSFRNTERMaXN0RWxlbWVudDp0cnVl
-LEhUTUxEYXRhRWxlbWVudDp0cnVlLEhUTUxEYXRhTGlzdEVsZW1lbnQ6dHJ1ZSxIVE1MRGV0YWlsc0Vs
-ZW1lbnQ6dHJ1ZSxIVE1MRGlhbG9nRWxlbWVudDp0cnVlLEhUTUxEaXZFbGVtZW50OnRydWUsSFRNTEVt
-YmVkRWxlbWVudDp0cnVlLEhUTUxGaWVsZFNldEVsZW1lbnQ6dHJ1ZSxIVE1MSFJFbGVtZW50OnRydWUs
-SFRNTEhlYWRFbGVtZW50OnRydWUsSFRNTEhlYWRpbmdFbGVtZW50OnRydWUsSFRNTEh0bWxFbGVtZW50
-OnRydWUsSFRNTElGcmFtZUVsZW1lbnQ6dHJ1ZSxIVE1MSW1hZ2VFbGVtZW50OnRydWUsSFRNTElucHV0
-RWxlbWVudDp0cnVlLEhUTUxMSUVsZW1lbnQ6dHJ1ZSxIVE1MTGFiZWxFbGVtZW50OnRydWUsSFRNTExl
-Z2VuZEVsZW1lbnQ6dHJ1ZSxIVE1MTGlua0VsZW1lbnQ6dHJ1ZSxIVE1MTWFwRWxlbWVudDp0cnVlLEhU
-TUxNZWRpYUVsZW1lbnQ6dHJ1ZSxIVE1MTWVudUVsZW1lbnQ6dHJ1ZSxIVE1MTWV0YUVsZW1lbnQ6dHJ1
-ZSxIVE1MTWV0ZXJFbGVtZW50OnRydWUsSFRNTE1vZEVsZW1lbnQ6dHJ1ZSxIVE1MT0xpc3RFbGVtZW50
-OnRydWUsSFRNTE9iamVjdEVsZW1lbnQ6dHJ1ZSxIVE1MT3B0R3JvdXBFbGVtZW50OnRydWUsSFRNTE9w
-dGlvbkVsZW1lbnQ6dHJ1ZSxIVE1MT3V0cHV0RWxlbWVudDp0cnVlLEhUTUxQYXJhbUVsZW1lbnQ6dHJ1
-ZSxIVE1MUGljdHVyZUVsZW1lbnQ6dHJ1ZSxIVE1MUHJlRWxlbWVudDp0cnVlLEhUTUxQcm9ncmVzc0Vs
-ZW1lbnQ6dHJ1ZSxIVE1MUXVvdGVFbGVtZW50OnRydWUsSFRNTFNjcmlwdEVsZW1lbnQ6dHJ1ZSxIVE1M
-U2hhZG93RWxlbWVudDp0cnVlLEhUTUxTbG90RWxlbWVudDp0cnVlLEhUTUxTb3VyY2VFbGVtZW50OnRy
-dWUsSFRNTFNwYW5FbGVtZW50OnRydWUsSFRNTFN0eWxlRWxlbWVudDp0cnVlLEhUTUxUYWJsZUNhcHRp
-b25FbGVtZW50OnRydWUsSFRNTFRhYmxlQ2VsbEVsZW1lbnQ6dHJ1ZSxIVE1MVGFibGVEYXRhQ2VsbEVs
-ZW1lbnQ6dHJ1ZSxIVE1MVGFibGVIZWFkZXJDZWxsRWxlbWVudDp0cnVlLEhUTUxUYWJsZUNvbEVsZW1l
-bnQ6dHJ1ZSxIVE1MVGV4dEFyZWFFbGVtZW50OnRydWUsSFRNTFRpbWVFbGVtZW50OnRydWUsSFRNTFRp
-dGxlRWxlbWVudDp0cnVlLEhUTUxUcmFja0VsZW1lbnQ6dHJ1ZSxIVE1MVUxpc3RFbGVtZW50OnRydWUs
-SFRNTFVua25vd25FbGVtZW50OnRydWUsSFRNTFZpZGVvRWxlbWVudDp0cnVlLEhUTUxEaXJlY3RvcnlF
-bGVtZW50OnRydWUsSFRNTEZvbnRFbGVtZW50OnRydWUsSFRNTEZyYW1lRWxlbWVudDp0cnVlLEhUTUxG
-cmFtZVNldEVsZW1lbnQ6dHJ1ZSxIVE1MTWFycXVlZUVsZW1lbnQ6dHJ1ZSxIVE1MRWxlbWVudDpmYWxz
-ZSxIVE1MQW5jaG9yRWxlbWVudDp0cnVlLEhUTUxBcmVhRWxlbWVudDp0cnVlLEhUTUxCYXNlRWxlbWVu
-dDp0cnVlLEJsb2I6ZmFsc2UsSFRNTEJvZHlFbGVtZW50OnRydWUsQ0RBVEFTZWN0aW9uOnRydWUsQ2hh
-cmFjdGVyRGF0YTp0cnVlLENvbW1lbnQ6dHJ1ZSxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246dHJ1ZSxUZXh0
-OnRydWUsQ1NTU3R5bGVEZWNsYXJhdGlvbjp0cnVlLE1TU3R5bGVDU1NQcm9wZXJ0aWVzOnRydWUsQ1NT
-MlByb3BlcnRpZXM6dHJ1ZSxYTUxEb2N1bWVudDp0cnVlLERvY3VtZW50OmZhbHNlLERPTUV4Y2VwdGlv
-bjp0cnVlLERPTVJlY3RSZWFkT25seTpmYWxzZSxET01Ub2tlbkxpc3Q6dHJ1ZSxFbGVtZW50OmZhbHNl
-LEFib3J0UGF5bWVudEV2ZW50OnRydWUsQW5pbWF0aW9uRXZlbnQ6dHJ1ZSxBbmltYXRpb25QbGF5YmFj
-a0V2ZW50OnRydWUsQXBwbGljYXRpb25DYWNoZUVycm9yRXZlbnQ6dHJ1ZSxCYWNrZ3JvdW5kRmV0Y2hD
-bGlja0V2ZW50OnRydWUsQmFja2dyb3VuZEZldGNoRXZlbnQ6dHJ1ZSxCYWNrZ3JvdW5kRmV0Y2hGYWls
-RXZlbnQ6dHJ1ZSxCYWNrZ3JvdW5kRmV0Y2hlZEV2ZW50OnRydWUsQmVmb3JlSW5zdGFsbFByb21wdEV2
-ZW50OnRydWUsQmVmb3JlVW5sb2FkRXZlbnQ6dHJ1ZSxCbG9iRXZlbnQ6dHJ1ZSxDYW5NYWtlUGF5bWVu
-dEV2ZW50OnRydWUsQ2xpcGJvYXJkRXZlbnQ6dHJ1ZSxDbG9zZUV2ZW50OnRydWUsQ3VzdG9tRXZlbnQ6
-dHJ1ZSxEZXZpY2VNb3Rpb25FdmVudDp0cnVlLERldmljZU9yaWVudGF0aW9uRXZlbnQ6dHJ1ZSxFcnJv
-ckV2ZW50OnRydWUsRXh0ZW5kYWJsZUV2ZW50OnRydWUsRXh0ZW5kYWJsZU1lc3NhZ2VFdmVudDp0cnVl
-LEZldGNoRXZlbnQ6dHJ1ZSxGb250RmFjZVNldExvYWRFdmVudDp0cnVlLEZvcmVpZ25GZXRjaEV2ZW50
-OnRydWUsR2FtZXBhZEV2ZW50OnRydWUsSGFzaENoYW5nZUV2ZW50OnRydWUsSW5zdGFsbEV2ZW50OnRy
-dWUsTWVkaWFFbmNyeXB0ZWRFdmVudDp0cnVlLE1lZGlhS2V5TWVzc2FnZUV2ZW50OnRydWUsTWVkaWFR
-dWVyeUxpc3RFdmVudDp0cnVlLE1lZGlhU3RyZWFtRXZlbnQ6dHJ1ZSxNZWRpYVN0cmVhbVRyYWNrRXZl
-bnQ6dHJ1ZSxNZXNzYWdlRXZlbnQ6dHJ1ZSxNSURJQ29ubmVjdGlvbkV2ZW50OnRydWUsTUlESU1lc3Nh
-Z2VFdmVudDp0cnVlLE11dGF0aW9uRXZlbnQ6dHJ1ZSxOb3RpZmljYXRpb25FdmVudDp0cnVlLFBhZ2VU
-cmFuc2l0aW9uRXZlbnQ6dHJ1ZSxQYXltZW50UmVxdWVzdEV2ZW50OnRydWUsUGF5bWVudFJlcXVlc3RV
-cGRhdGVFdmVudDp0cnVlLFBvcFN0YXRlRXZlbnQ6dHJ1ZSxQcmVzZW50YXRpb25Db25uZWN0aW9uQXZh
-aWxhYmxlRXZlbnQ6dHJ1ZSxQcmVzZW50YXRpb25Db25uZWN0aW9uQ2xvc2VFdmVudDp0cnVlLFByb21p
-c2VSZWplY3Rpb25FdmVudDp0cnVlLFB1c2hFdmVudDp0cnVlLFJUQ0RhdGFDaGFubmVsRXZlbnQ6dHJ1
-ZSxSVENEVE1GVG9uZUNoYW5nZUV2ZW50OnRydWUsUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudDp0cnVl
-LFJUQ1RyYWNrRXZlbnQ6dHJ1ZSxTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50OnRydWUsU2Vuc29y
-RXJyb3JFdmVudDp0cnVlLFNwZWVjaFJlY29nbml0aW9uRXJyb3I6dHJ1ZSxTcGVlY2hSZWNvZ25pdGlv
-bkV2ZW50OnRydWUsU3BlZWNoU3ludGhlc2lzRXZlbnQ6dHJ1ZSxTdG9yYWdlRXZlbnQ6dHJ1ZSxTeW5j
-RXZlbnQ6dHJ1ZSxUcmFja0V2ZW50OnRydWUsVHJhbnNpdGlvbkV2ZW50OnRydWUsV2ViS2l0VHJhbnNp
-dGlvbkV2ZW50OnRydWUsVlJEZXZpY2VFdmVudDp0cnVlLFZSRGlzcGxheUV2ZW50OnRydWUsVlJTZXNz
-aW9uRXZlbnQ6dHJ1ZSxNb2pvSW50ZXJmYWNlUmVxdWVzdEV2ZW50OnRydWUsVVNCQ29ubmVjdGlvbkV2
-ZW50OnRydWUsSURCVmVyc2lvbkNoYW5nZUV2ZW50OnRydWUsQXVkaW9Qcm9jZXNzaW5nRXZlbnQ6dHJ1
-ZSxPZmZsaW5lQXVkaW9Db21wbGV0aW9uRXZlbnQ6dHJ1ZSxXZWJHTENvbnRleHRFdmVudDp0cnVlLEV2
-ZW50OmZhbHNlLElucHV0RXZlbnQ6ZmFsc2UsRXZlbnRUYXJnZXQ6ZmFsc2UsRmlsZTp0cnVlLEhUTUxG
-b3JtRWxlbWVudDp0cnVlLEhpc3Rvcnk6dHJ1ZSxIVE1MRG9jdW1lbnQ6dHJ1ZSxYTUxIdHRwUmVxdWVz
-dDp0cnVlLFhNTEh0dHBSZXF1ZXN0RXZlbnRUYXJnZXQ6ZmFsc2UsSW1hZ2VEYXRhOnRydWUsTG9jYXRp
-b246dHJ1ZSxNb3VzZUV2ZW50OnRydWUsRHJhZ0V2ZW50OnRydWUsUG9pbnRlckV2ZW50OnRydWUsV2hl
-ZWxFdmVudDp0cnVlLERvY3VtZW50RnJhZ21lbnQ6dHJ1ZSxTaGFkb3dSb290OnRydWUsRG9jdW1lbnRU
-eXBlOnRydWUsTm9kZTpmYWxzZSxOb2RlTGlzdDp0cnVlLFJhZGlvTm9kZUxpc3Q6dHJ1ZSxIVE1MUGFy
-YWdyYXBoRWxlbWVudDp0cnVlLFByb2dyZXNzRXZlbnQ6dHJ1ZSxSZXNvdXJjZVByb2dyZXNzRXZlbnQ6
-dHJ1ZSxIVE1MU2VsZWN0RWxlbWVudDp0cnVlLEhUTUxUYWJsZUVsZW1lbnQ6dHJ1ZSxIVE1MVGFibGVS
-b3dFbGVtZW50OnRydWUsSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6dHJ1ZSxIVE1MVGVtcGxhdGVFbGVt
-ZW50OnRydWUsQ29tcG9zaXRpb25FdmVudDp0cnVlLEZvY3VzRXZlbnQ6dHJ1ZSxLZXlib2FyZEV2ZW50
-OnRydWUsVGV4dEV2ZW50OnRydWUsVG91Y2hFdmVudDp0cnVlLFVJRXZlbnQ6ZmFsc2UsV2luZG93OnRy
-dWUsRE9NV2luZG93OnRydWUsRGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU6dHJ1ZSxTZXJ2aWNlV29y
-a2VyR2xvYmFsU2NvcGU6dHJ1ZSxTaGFyZWRXb3JrZXJHbG9iYWxTY29wZTp0cnVlLFdvcmtlckdsb2Jh
-bFNjb3BlOnRydWUsQXR0cjp0cnVlLENsaWVudFJlY3Q6dHJ1ZSxET01SZWN0OnRydWUsTmFtZWROb2Rl
-TWFwOnRydWUsTW96TmFtZWRBdHRyTWFwOnRydWUsSURCS2V5UmFuZ2U6dHJ1ZSxTVkdTY3JpcHRFbGVt
-ZW50OnRydWUsU1ZHQUVsZW1lbnQ6dHJ1ZSxTVkdBbmltYXRlRWxlbWVudDp0cnVlLFNWR0FuaW1hdGVN
-b3Rpb25FbGVtZW50OnRydWUsU1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6dHJ1ZSxTVkdBbmltYXRp
-b25FbGVtZW50OnRydWUsU1ZHQ2lyY2xlRWxlbWVudDp0cnVlLFNWR0NsaXBQYXRoRWxlbWVudDp0cnVl
-LFNWR0RlZnNFbGVtZW50OnRydWUsU1ZHRGVzY0VsZW1lbnQ6dHJ1ZSxTVkdEaXNjYXJkRWxlbWVudDp0
-cnVlLFNWR0VsbGlwc2VFbGVtZW50OnRydWUsU1ZHRkVCbGVuZEVsZW1lbnQ6dHJ1ZSxTVkdGRUNvbG9y
-TWF0cml4RWxlbWVudDp0cnVlLFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OnRydWUsU1ZHRkVD
-b21wb3NpdGVFbGVtZW50OnRydWUsU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6dHJ1ZSxTVkdGRURp
-ZmZ1c2VMaWdodGluZ0VsZW1lbnQ6dHJ1ZSxTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6dHJ1ZSxT
-VkdGRURpc3RhbnRMaWdodEVsZW1lbnQ6dHJ1ZSxTVkdGRUZsb29kRWxlbWVudDp0cnVlLFNWR0ZFRnVu
-Y0FFbGVtZW50OnRydWUsU1ZHRkVGdW5jQkVsZW1lbnQ6dHJ1ZSxTVkdGRUZ1bmNHRWxlbWVudDp0cnVl
-LFNWR0ZFRnVuY1JFbGVtZW50OnRydWUsU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OnRydWUsU1ZHRkVJ
-bWFnZUVsZW1lbnQ6dHJ1ZSxTVkdGRU1lcmdlRWxlbWVudDp0cnVlLFNWR0ZFTWVyZ2VOb2RlRWxlbWVu
-dDp0cnVlLFNWR0ZFTW9ycGhvbG9neUVsZW1lbnQ6dHJ1ZSxTVkdGRU9mZnNldEVsZW1lbnQ6dHJ1ZSxT
-VkdGRVBvaW50TGlnaHRFbGVtZW50OnRydWUsU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDp0cnVl
-LFNWR0ZFU3BvdExpZ2h0RWxlbWVudDp0cnVlLFNWR0ZFVGlsZUVsZW1lbnQ6dHJ1ZSxTVkdGRVR1cmJ1
-bGVuY2VFbGVtZW50OnRydWUsU1ZHRmlsdGVyRWxlbWVudDp0cnVlLFNWR0ZvcmVpZ25PYmplY3RFbGVt
-ZW50OnRydWUsU1ZHR0VsZW1lbnQ6dHJ1ZSxTVkdHZW9tZXRyeUVsZW1lbnQ6dHJ1ZSxTVkdHcmFwaGlj
-c0VsZW1lbnQ6dHJ1ZSxTVkdJbWFnZUVsZW1lbnQ6dHJ1ZSxTVkdMaW5lRWxlbWVudDp0cnVlLFNWR0xp
-bmVhckdyYWRpZW50RWxlbWVudDp0cnVlLFNWR01hcmtlckVsZW1lbnQ6dHJ1ZSxTVkdNYXNrRWxlbWVu
-dDp0cnVlLFNWR01ldGFkYXRhRWxlbWVudDp0cnVlLFNWR1BhdGhFbGVtZW50OnRydWUsU1ZHUGF0dGVy
-bkVsZW1lbnQ6dHJ1ZSxTVkdQb2x5Z29uRWxlbWVudDp0cnVlLFNWR1BvbHlsaW5lRWxlbWVudDp0cnVl
-LFNWR1JhZGlhbEdyYWRpZW50RWxlbWVudDp0cnVlLFNWR1JlY3RFbGVtZW50OnRydWUsU1ZHU2V0RWxl
-bWVudDp0cnVlLFNWR1N0b3BFbGVtZW50OnRydWUsU1ZHU3R5bGVFbGVtZW50OnRydWUsU1ZHU1ZHRWxl
-bWVudDp0cnVlLFNWR1N3aXRjaEVsZW1lbnQ6dHJ1ZSxTVkdTeW1ib2xFbGVtZW50OnRydWUsU1ZHVFNw
-YW5FbGVtZW50OnRydWUsU1ZHVGV4dENvbnRlbnRFbGVtZW50OnRydWUsU1ZHVGV4dEVsZW1lbnQ6dHJ1
-ZSxTVkdUZXh0UGF0aEVsZW1lbnQ6dHJ1ZSxTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OnRydWUsU1ZH
-VGl0bGVFbGVtZW50OnRydWUsU1ZHVXNlRWxlbWVudDp0cnVlLFNWR1ZpZXdFbGVtZW50OnRydWUsU1ZH
-R3JhZGllbnRFbGVtZW50OnRydWUsU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6dHJ1
-ZSxTVkdGRURyb3BTaGFkb3dFbGVtZW50OnRydWUsU1ZHTVBhdGhFbGVtZW50OnRydWUsU1ZHRWxlbWVu
-dDpmYWxzZX0pCkguYjAuJG5hdGl2ZVN1cGVyY2xhc3NUYWc9IkFycmF5QnVmZmVyVmlldyIKSC5SRy4k
-bmF0aXZlU3VwZXJjbGFzc1RhZz0iQXJyYXlCdWZmZXJWaWV3IgpILlZQLiRuYXRpdmVTdXBlcmNsYXNz
-VGFnPSJBcnJheUJ1ZmZlclZpZXciCkguRGcuJG5hdGl2ZVN1cGVyY2xhc3NUYWc9IkFycmF5QnVmZmVy
-VmlldyIKSC5XQi4kbmF0aXZlU3VwZXJjbGFzc1RhZz0iQXJyYXlCdWZmZXJWaWV3IgpILlpHLiRuYXRp
-dmVTdXBlcmNsYXNzVGFnPSJBcnJheUJ1ZmZlclZpZXciCkguUGcuJG5hdGl2ZVN1cGVyY2xhc3NUYWc9
-IkFycmF5QnVmZmVyVmlldyJ9KSgpCmNvbnZlcnRBbGxUb0Zhc3RPYmplY3QodykKY29udmVydFRvRmFz
-dE9iamVjdCgkKTsoZnVuY3Rpb24oYSl7aWYodHlwZW9mIGRvY3VtZW50PT09InVuZGVmaW5lZCIpe2Eo
-bnVsbCkKcmV0dXJufWlmKHR5cGVvZiBkb2N1bWVudC5jdXJyZW50U2NyaXB0IT0ndW5kZWZpbmVkJyl7
-YShkb2N1bWVudC5jdXJyZW50U2NyaXB0KQpyZXR1cm59dmFyIHQ9ZG9jdW1lbnQuc2NyaXB0cwpmdW5j
-dGlvbiBvbkxvYWQoYil7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpdFtyXS5yZW1vdmVFdmVudExp
-c3RlbmVyKCJsb2FkIixvbkxvYWQsZmFsc2UpCmEoYi50YXJnZXQpfWZvcih2YXIgcz0wO3M8dC5sZW5n
-dGg7KytzKXRbc10uYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsb25Mb2FkLGZhbHNlKX0pKGZ1bmN0aW9u
-KGEpe3YuY3VycmVudFNjcmlwdD1hCmlmKHR5cGVvZiBkYXJ0TWFpblJ1bm5lcj09PSJmdW5jdGlvbiIp
-ZGFydE1haW5SdW5uZXIoTC5JcSxbXSkKZWxzZSBMLklxKFtdKX0pfSkoKQovLyMgc291cmNlTWFwcGlu
-Z1VSTD1taWdyYXRpb24uanMubWFwCg==
+Yl19fQpILmVFLnByb3RvdHlwZT17CmdBOmZ1bmN0aW9uKGEpe3JldHVybiBhLmxlbmd0aH0sCnE6ZnVu
+Y3Rpb24oYSxiKXtILlNjKGIpCkgub2QoYixhLGEubGVuZ3RoKQpyZXR1cm4gYVtiXX19CkguVjYucHJv
+dG90eXBlPXsKZ0E6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVuZ3RofSwKcTpmdW5jdGlvbihhLGIpe0gu
+U2MoYikKSC5vZChiLGEsYS5sZW5ndGgpCnJldHVybiBhW2JdfSwKJGlWNjoxLAokaW42OjF9CkguUkcu
+cHJvdG90eXBlPXt9CkguVlAucHJvdG90eXBlPXt9CkguV0IucHJvdG90eXBlPXt9CkguWkcucHJvdG90
+eXBlPXt9CkguSmMucHJvdG90eXBlPXsKQzpmdW5jdGlvbihhKXtyZXR1cm4gSC5jRSh2LnR5cGVVbml2
+ZXJzZSx0aGlzLGEpfSwKS3E6ZnVuY3Rpb24oYSl7cmV0dXJuIEgudjUodi50eXBlVW5pdmVyc2UsdGhp
+cyxhKX19CkguRy5wcm90b3R5cGU9e30KSC51OS5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3JldHVy
+biB0aGlzLmF9fQpILmh6LnByb3RvdHlwZT17fQpILmlNLnByb3RvdHlwZT17fQpQLnRoLnByb3RvdHlw
+ZT17CiQxOmZ1bmN0aW9uKGEpe3ZhciB0PXRoaXMuYSxzPXQuYQp0LmE9bnVsbApzLiQwKCl9LAokUzox
+OH0KUC5oYS5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXt2YXIgdCxzCnRoaXMuYS5hPXUuTS5iKGEp
+CnQ9dGhpcy5iCnM9dGhpcy5jCnQuZmlyc3RDaGlsZD90LnJlbW92ZUNoaWxkKHMpOnQuYXBwZW5kQ2hp
+bGQocyl9LAokUzoyMX0KUC5Wcy5wcm90b3R5cGU9ewokMDpmdW5jdGlvbigpe3RoaXMuYS4kMCgpfSwK
+JEM6IiQwIiwKJFI6MCwKJFM6MH0KUC5GdC5wcm90b3R5cGU9ewokMDpmdW5jdGlvbigpe3RoaXMuYS4k
+MCgpfSwKJEM6IiQwIiwKJFI6MCwKJFM6MH0KUC5XMy5wcm90b3R5cGU9ewpDWTpmdW5jdGlvbihhLGIp
+e2lmKHNlbGYuc2V0VGltZW91dCE9bnVsbClzZWxmLnNldFRpbWVvdXQoSC50UihuZXcgUC55SCh0aGlz
+LGIpLDApLGEpCmVsc2UgdGhyb3cgSC5iKFAuTDQoImBzZXRUaW1lb3V0KClgIG5vdCBmb3VuZC4iKSl9
+fQpQLnlILnByb3RvdHlwZT17CiQwOmZ1bmN0aW9uKCl7dGhpcy5iLiQwKCl9LAokQzoiJDAiLAokUjow
+LAokUzoyfQpQLmloLnByb3RvdHlwZT17CmFNOmZ1bmN0aW9uKGEsYil7dmFyIHQscyxyPXRoaXMuJHRp
+CnIuQygiMS8iKS5iKGIpCnQ9IXRoaXMuYnx8ci5DKCJiODwxPiIpLmMoYikKcz10aGlzLmEKaWYodClz
+LlhmKGIpCmVsc2Ugcy5YMihyLmQuYihiKSl9LAp3MDpmdW5jdGlvbihhLGIpe3ZhciB0PXRoaXMuYQpp
+Zih0aGlzLmIpdC5aTChhLGIpCmVsc2UgdC5OayhhLGIpfX0KUC5XTS5wcm90b3R5cGU9ewokMTpmdW5j
+dGlvbihhKXtyZXR1cm4gdGhpcy5hLiQyKDAsYSl9LAokUzoyMH0KUC5TWC5wcm90b3R5cGU9ewokMjpm
+dW5jdGlvbihhLGIpe3RoaXMuYS4kMigxLG5ldyBILmJxKGEsdS5sLmIoYikpKX0sCiRDOiIkMiIsCiRS
+OjIsCiRTOjMzfQpQLkdzLnByb3RvdHlwZT17CiQyOmZ1bmN0aW9uKGEsYil7dGhpcy5hKEguU2MoYSks
+Yil9LAokUzoyM30KUC5QZi5wcm90b3R5cGU9ewp3MDpmdW5jdGlvbihhLGIpe3ZhciB0CmlmKGE9PW51
+bGwpYT1uZXcgUC5uKCkKdD10aGlzLmEKaWYodC5hIT09MCl0aHJvdyBILmIoUC5QVigiRnV0dXJlIGFs
+cmVhZHkgY29tcGxldGVkIikpCnQuTmsoYSxiKX0sCnBtOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLncw
+KGEsbnVsbCl9fQpQLlpmLnByb3RvdHlwZT17CmFNOmZ1bmN0aW9uKGEsYil7dmFyIHQKdGhpcy4kdGku
+QygiMS8iKS5iKGIpCnQ9dGhpcy5hCmlmKHQuYSE9PTApdGhyb3cgSC5iKFAuUFYoIkZ1dHVyZSBhbHJl
+YWR5IGNvbXBsZXRlZCIpKQp0LlhmKGIpfX0KUC5GZS5wcm90b3R5cGU9ewpIUjpmdW5jdGlvbihhKXtp
+ZigodGhpcy5jJjE1KSE9PTYpcmV0dXJuITAKcmV0dXJuIHRoaXMuYi5iLmJ2KHUuYWwuYih0aGlzLmQp
+LGEuYSx1LmNKLHUuSyl9LApLdzpmdW5jdGlvbihhKXt2YXIgdD10aGlzLmUscz11Lnoscj11LksscT10
+aGlzLiR0aS5DKCIyLyIpLHA9dGhpcy5iLmIKaWYodS5XLmModCkpcmV0dXJuIHEuYihwLnJwKHQsYS5h
+LGEuYixzLHIsdS5sKSkKZWxzZSByZXR1cm4gcS5iKHAuYnYodS55LmIodCksYS5hLHMscikpfX0KUC52
+cy5wcm90b3R5cGU9ewpTcTpmdW5jdGlvbihhLGIsYyl7dmFyIHQscyxyLHE9dGhpcy4kdGkKcS5LcShj
+KS5DKCIxLygyKSIpLmIoYSkKdD0kLlgzCmlmKHQhPT1DLk5VKXtjLkMoIkA8MC8+IikuS3EocS5kKS5D
+KCIxKDIpIikuYihhKQppZihiIT1udWxsKWI9UC5WSChiLHQpfXM9bmV3IFAudnMoJC5YMyxjLkMoInZz
+PDA+IikpCnI9Yj09bnVsbD8xOjMKdGhpcy54ZihuZXcgUC5GZShzLHIsYSxiLHEuQygiQDwxPiIpLktx
+KGMpLkMoIkZlPDEsMj4iKSkpCnJldHVybiBzfSwKVzc6ZnVuY3Rpb24oYSxiKXtyZXR1cm4gdGhpcy5T
+cShhLG51bGwsYil9LApRZDpmdW5jdGlvbihhLGIsYyl7dmFyIHQscz10aGlzLiR0aQpzLktxKGMpLkMo
+IjEvKDIpIikuYihhKQp0PW5ldyBQLnZzKCQuWDMsYy5DKCJ2czwwPiIpKQp0aGlzLnhmKG5ldyBQLkZl
+KHQsKGI9PW51bGw/MTozKXwxNixhLGIscy5DKCJAPDE+IikuS3EoYykuQygiRmU8MSwyPiIpKSkKcmV0
+dXJuIHR9LApPQTpmdW5jdGlvbihhKXt2YXIgdCxzLHIKdS5iZi5iKG51bGwpCnQ9dGhpcy4kdGkKcz0k
+LlgzCnI9bmV3IFAudnMocyx0KQppZihzIT09Qy5OVSlhPVAuVkgoYSxzKQp0aGlzLnhmKG5ldyBQLkZl
+KHIsMixudWxsLGEsdC5DKCJAPDE+IikuS3EodC5kKS5DKCJGZTwxLDI+IikpKQpyZXR1cm4gcn0sCnhm
+OmZ1bmN0aW9uKGEpe3ZhciB0LHM9dGhpcyxyPXMuYQppZihyPD0xKXthLmE9dS54LmIocy5jKQpzLmM9
+YX1lbHNle2lmKHI9PT0yKXt0PXUuXy5iKHMuYykKcj10LmEKaWYocjw0KXt0LnhmKGEpCnJldHVybn1z
+LmE9cgpzLmM9dC5jfVAuVGsobnVsbCxudWxsLHMuYix1Lk0uYihuZXcgUC5kYShzLGEpKSl9fSwKalE6
+ZnVuY3Rpb24oYSl7dmFyIHQscyxyLHEscCxvPXRoaXMsbj17fQpuLmE9YQppZihhPT1udWxsKXJldHVy
+bgp0PW8uYQppZih0PD0xKXtzPXUueC5iKG8uYykKcj1vLmM9YQppZihzIT1udWxsKXtmb3IoO3E9ci5h
+LHEhPW51bGw7cj1xKTtyLmE9c319ZWxzZXtpZih0PT09Mil7cD11Ll8uYihvLmMpCnQ9cC5hCmlmKHQ8
+NCl7cC5qUShhKQpyZXR1cm59by5hPXQKby5jPXAuY31uLmE9by5OOChhKQpQLlRrKG51bGwsbnVsbCxv
+LmIsdS5NLmIobmV3IFAub1EobixvKSkpfX0sCmFoOmZ1bmN0aW9uKCl7dmFyIHQ9dS54LmIodGhpcy5j
+KQp0aGlzLmM9bnVsbApyZXR1cm4gdGhpcy5OOCh0KX0sCk44OmZ1bmN0aW9uKGEpe3ZhciB0LHMscgpm
+b3IodD1hLHM9bnVsbDt0IT1udWxsO3M9dCx0PXIpe3I9dC5hCnQuYT1zfXJldHVybiBzfSwKSEg6ZnVu
+Y3Rpb24oYSl7dmFyIHQscz10aGlzLHI9cy4kdGkKci5DKCIxLyIpLmIoYSkKaWYoci5DKCJiODwxPiIp
+LmMoYSkpaWYoci5jKGEpKVAuQTkoYSxzKQplbHNlIFAuazMoYSxzKQplbHNle3Q9cy5haCgpCnIuZC5i
+KGEpCnMuYT00CnMuYz1hClAuSFoocyx0KX19LApYMjpmdW5jdGlvbihhKXt2YXIgdCxzPXRoaXMKcy4k
+dGkuZC5iKGEpCnQ9cy5haCgpCnMuYT00CnMuYz1hClAuSFoocyx0KX0sClpMOmZ1bmN0aW9uKGEsYil7
+dmFyIHQscz10aGlzCnUubC5iKGIpCnQ9cy5haCgpCnMuYT04CnMuYz1uZXcgUC5DdyhhLGIpClAuSFoo
+cyx0KX0sClhmOmZ1bmN0aW9uKGEpe3ZhciB0PXRoaXMscz10LiR0aQpzLkMoIjEvIikuYihhKQppZihz
+LkMoImI4PDE+IikuYyhhKSl7dC5jVShhKQpyZXR1cm59dC5hPTEKUC5UayhudWxsLG51bGwsdC5iLHUu
+TS5iKG5ldyBQLnJIKHQsYSkpKX0sCmNVOmZ1bmN0aW9uKGEpe3ZhciB0PXRoaXMscz10LiR0aQpzLkMo
+ImI4PDE+IikuYihhKQppZihzLmMoYSkpe2lmKGEuYT09PTgpe3QuYT0xClAuVGsobnVsbCxudWxsLHQu
+Yix1Lk0uYihuZXcgUC5LRih0LGEpKSl9ZWxzZSBQLkE5KGEsdCkKcmV0dXJufVAuazMoYSx0KX0sCk5r
+OmZ1bmN0aW9uKGEsYil7dGhpcy5hPTEKUC5UayhudWxsLG51bGwsdGhpcy5iLHUuTS5iKG5ldyBQLlpM
+KHRoaXMsYSxiKSkpfSwKJGliODoxfQpQLmRhLnByb3RvdHlwZT17CiQwOmZ1bmN0aW9uKCl7UC5IWih0
+aGlzLmEsdGhpcy5iKX0sCiRTOjB9ClAub1EucHJvdG90eXBlPXsKJDA6ZnVuY3Rpb24oKXtQLkhaKHRo
+aXMuYix0aGlzLmEuYSl9LAokUzowfQpQLnBWLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3ZhciB0
+PXRoaXMuYQp0LmE9MAp0LkhIKGEpfSwKJFM6MTh9ClAuVTcucHJvdG90eXBlPXsKJDI6ZnVuY3Rpb24o
+YSxiKXt1LmwuYihiKQp0aGlzLmEuWkwoYSxiKX0sCiQxOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLiQy
+KGEsbnVsbCl9LAokQzoiJDIiLAokRDpmdW5jdGlvbigpe3JldHVybltudWxsXX0sCiRTOjQyfQpQLnZy
+LnByb3RvdHlwZT17CiQwOmZ1bmN0aW9uKCl7dGhpcy5hLlpMKHRoaXMuYix0aGlzLmMpfSwKJFM6MH0K
+UC5ySC5wcm90b3R5cGU9ewokMDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuYQp0LlgyKHQuJHRpLmQuYih0
+aGlzLmIpKX0sCiRTOjB9ClAuS0YucHJvdG90eXBlPXsKJDA6ZnVuY3Rpb24oKXtQLkE5KHRoaXMuYix0
+aGlzLmEpfSwKJFM6MH0KUC5aTC5wcm90b3R5cGU9ewokMDpmdW5jdGlvbigpe3RoaXMuYS5aTCh0aGlz
+LmIsdGhpcy5jKX0sCiRTOjB9ClAuUlQucHJvdG90eXBlPXsKJDA6ZnVuY3Rpb24oKXt2YXIgdCxzLHIs
+cSxwLG8sbj10aGlzLG09bnVsbAp0cnl7cj1uLmMKbT1yLmIuYi56eih1LmZPLmIoci5kKSx1LnopfWNh
+dGNoKHEpe3Q9SC5SdShxKQpzPUgudHMocSkKaWYobi5kKXtyPXUubi5iKG4uYS5hLmMpLmEKcD10CnA9
+cj09bnVsbD9wPT1udWxsOnI9PT1wCnI9cH1lbHNlIHI9ITEKcD1uLmIKaWYocilwLmI9dS5uLmIobi5h
+LmEuYykKZWxzZSBwLmI9bmV3IFAuQ3codCxzKQpwLmE9ITAKcmV0dXJufWlmKHUuYy5jKG0pKXtpZiht
+IGluc3RhbmNlb2YgUC52cyYmbS5hPj00KXtpZihtLmE9PT04KXtyPW4uYgpyLmI9dS5uLmIobS5jKQpy
+LmE9ITB9cmV0dXJufW89bi5hLmEKcj1uLmIKci5iPW0uVzcobmV3IFAualoobyksdS56KQpyLmE9ITF9
+fSwKJFM6Mn0KUC5qWi5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hfSwKJFM6
+Mzd9ClAucnEucHJvdG90eXBlPXsKJDA6ZnVuY3Rpb24oKXt2YXIgdCxzLHIscSxwLG8sbixtPXRoaXMK
+dHJ5e3I9bS5iCnE9ci4kdGkKcD1xLmQKbz1wLmIobS5jKQptLmEuYj1yLmIuYi5idihxLkMoIjIvKDEp
+IikuYihyLmQpLG8scS5DKCIyLyIpLHApfWNhdGNoKG4pe3Q9SC5SdShuKQpzPUgudHMobikKcj1tLmEK
+ci5iPW5ldyBQLkN3KHQscykKci5hPSEwfX0sCiRTOjJ9ClAuUlcucHJvdG90eXBlPXsKJDA6ZnVuY3Rp
+b24oKXt2YXIgdCxzLHIscSxwLG8sbixtLGw9dGhpcwp0cnl7dD11Lm4uYihsLmEuYS5jKQpxPWwuYwpp
+ZihILm9UKHEuSFIodCkpJiZxLmUhPW51bGwpe3A9bC5iCnAuYj1xLkt3KHQpCnAuYT0hMX19Y2F0Y2go
+byl7cz1ILlJ1KG8pCnI9SC50cyhvKQpxPXUubi5iKGwuYS5hLmMpCnA9cS5hCm49cwptPWwuYgppZihw
+PT1udWxsP249PW51bGw6cD09PW4pbS5iPXEKZWxzZSBtLmI9bmV3IFAuQ3cocyxyKQptLmE9ITB9fSwK
+JFM6Mn0KUC5PTS5wcm90b3R5cGU9e30KUC5xaC5wcm90b3R5cGU9ewpnQTpmdW5jdGlvbihhKXt2YXIg
+dCxzLHI9dGhpcyxxPXt9LHA9bmV3IFAudnMoJC5YMyx1LmZKKQpxLmE9MAp0PUguTGgocikKcz10LkMo
+In4oMSkiKS5iKG5ldyBQLkI1KHEscikpCnUuTS5iKG5ldyBQLlBJKHEscCkpClcuSkUoci5hLHIuYixz
+LCExLHQuZCkKcmV0dXJuIHB9fQpQLkI1LnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe0guTGgodGhp
+cy5iKS5kLmIoYSk7Kyt0aGlzLmEuYX0sCiRTOmZ1bmN0aW9uKCl7cmV0dXJuIEguTGgodGhpcy5iKS5D
+KCJjOCgxKSIpfX0KUC5QSS5wcm90b3R5cGU9ewokMDpmdW5jdGlvbigpe3RoaXMuYi5ISCh0aGlzLmEu
+YSl9LAokUzowfQpQLk1PLnByb3RvdHlwZT17fQpQLmtULnByb3RvdHlwZT17fQpQLnhJLnByb3RvdHlw
+ZT17fQpQLkN3LnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7cmV0dXJuIEguZCh0aGlzLmEpfSwKJGlY
+UzoxfQpQLm0wLnByb3RvdHlwZT17JGlKQjoxfQpQLnBLLnByb3RvdHlwZT17CiQwOmZ1bmN0aW9uKCl7
+dmFyIHQscz10aGlzLmEscj1zLmEKcz1yPT1udWxsP3MuYT1uZXcgUC5uKCk6cgpyPXRoaXMuYgppZihy
+PT1udWxsKXRocm93IEguYihzKQp0PUguYihzKQp0LnN0YWNrPXIudygwKQp0aHJvdyB0fSwKJFM6MH0K
+UC5KaS5wcm90b3R5cGU9ewpiSDpmdW5jdGlvbihhKXt2YXIgdCxzLHIscT1udWxsCnUuTS5iKGEpCnRy
+eXtpZihDLk5VPT09JC5YMyl7YS4kMCgpCnJldHVybn1QLlQ4KHEscSx0aGlzLGEsdS5IKX1jYXRjaChy
+KXt0PUguUnUocikKcz1ILnRzKHIpClAuTDIocSxxLHRoaXMsdCx1LmwuYihzKSl9fSwKRGw6ZnVuY3Rp
+b24oYSxiLGMpe3ZhciB0LHMscixxPW51bGwKYy5DKCJ+KDApIikuYihhKQpjLmIoYikKdHJ5e2lmKEMu
+TlU9PT0kLlgzKXthLiQxKGIpCnJldHVybn1QLnl2KHEscSx0aGlzLGEsYix1LkgsYyl9Y2F0Y2gocil7
+dD1ILlJ1KHIpCnM9SC50cyhyKQpQLkwyKHEscSx0aGlzLHQsdS5sLmIocykpfX0sClJUOmZ1bmN0aW9u
+KGEsYil7cmV0dXJuIG5ldyBQLmhqKHRoaXMsYi5DKCIwKCkiKS5iKGEpLGIpfSwKR1k6ZnVuY3Rpb24o
+YSl7cmV0dXJuIG5ldyBQLlZwKHRoaXMsdS5NLmIoYSkpfSwKUHk6ZnVuY3Rpb24oYSxiKXtyZXR1cm4g
+bmV3IFAuT1IodGhpcyxiLkMoIn4oMCkiKS5iKGEpLGIpfSwKcTpmdW5jdGlvbihhLGIpe3JldHVybiBu
+dWxsfSwKeno6ZnVuY3Rpb24oYSxiKXtiLkMoIjAoKSIpLmIoYSkKaWYoJC5YMz09PUMuTlUpcmV0dXJu
+IGEuJDAoKQpyZXR1cm4gUC5UOChudWxsLG51bGwsdGhpcyxhLGIpfSwKYnY6ZnVuY3Rpb24oYSxiLGMs
+ZCl7Yy5DKCJAPDA+IikuS3EoZCkuQygiMSgyKSIpLmIoYSkKZC5iKGIpCmlmKCQuWDM9PT1DLk5VKXJl
+dHVybiBhLiQxKGIpCnJldHVybiBQLnl2KG51bGwsbnVsbCx0aGlzLGEsYixjLGQpfSwKcnA6ZnVuY3Rp
+b24oYSxiLGMsZCxlLGYpe2QuQygiQDwwPiIpLktxKGUpLktxKGYpLkMoIjEoMiwzKSIpLmIoYSkKZS5i
+KGIpCmYuYihjKQppZigkLlgzPT09Qy5OVSlyZXR1cm4gYS4kMihiLGMpCnJldHVybiBQLlF4KG51bGws
+bnVsbCx0aGlzLGEsYixjLGQsZSxmKX0sCkxqOmZ1bmN0aW9uKGEsYixjLGQpe3JldHVybiBiLkMoIkA8
+MD4iKS5LcShjKS5LcShkKS5DKCIxKDIsMykiKS5iKGEpfX0KUC5oai5wcm90b3R5cGU9ewokMDpmdW5j
+dGlvbigpe3JldHVybiB0aGlzLmEuenoodGhpcy5iLHRoaXMuYyl9LAokUzpmdW5jdGlvbigpe3JldHVy
+biB0aGlzLmMuQygiMCgpIil9fQpQLlZwLnByb3RvdHlwZT17CiQwOmZ1bmN0aW9uKCl7cmV0dXJuIHRo
+aXMuYS5iSCh0aGlzLmIpfSwKJFM6Mn0KUC5PUi5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXt2YXIg
+dD10aGlzLmMKcmV0dXJuIHRoaXMuYS5EbCh0aGlzLmIsdC5iKGEpLHQpfSwKJFM6ZnVuY3Rpb24oKXty
+ZXR1cm4gdGhpcy5jLkMoIn4oMCkiKX19ClAuYjYucHJvdG90eXBlPXsKZ2t6OmZ1bmN0aW9uKGEpe3Zh
+ciB0PXRoaXMscz1uZXcgUC5sbSh0LHQucixILkxoKHQpLkMoImxtPDE+IikpCnMuYz10LmUKcmV0dXJu
+IHN9LApnQTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5hfSwKdGc6ZnVuY3Rpb24oYSxiKXt2YXIgdCxz
+CmlmKHR5cGVvZiBiPT0ic3RyaW5nIiYmYiE9PSJfX3Byb3RvX18iKXt0PXRoaXMuYgppZih0PT1udWxs
+KXJldHVybiExCnJldHVybiB1LkouYih0W2JdKSE9bnVsbH1lbHNle3M9dGhpcy5QUihiKQpyZXR1cm4g
+c319LApQUjpmdW5jdGlvbihhKXt2YXIgdD10aGlzLmQKaWYodD09bnVsbClyZXR1cm4hMQpyZXR1cm4g
+dGhpcy5ERih0W3RoaXMuTihhKV0sYSk+PTB9LAppOmZ1bmN0aW9uKGEsYil7dmFyIHQscyxyPXRoaXMK
+SC5MaChyKS5kLmIoYikKaWYodHlwZW9mIGI9PSJzdHJpbmciJiZiIT09Il9fcHJvdG9fXyIpe3Q9ci5i
+CnJldHVybiByLmJRKHQ9PW51bGw/ci5iPVAuVDIoKTp0LGIpfWVsc2UgaWYodHlwZW9mIGI9PSJudW1i
+ZXIiJiYoYiYxMDczNzQxODIzKT09PWIpe3M9ci5jCnJldHVybiByLmJRKHM9PW51bGw/ci5jPVAuVDIo
+KTpzLGIpfWVsc2UgcmV0dXJuIHIuQjcoYil9LApCNzpmdW5jdGlvbihhKXt2YXIgdCxzLHIscT10aGlz
+CkguTGgocSkuZC5iKGEpCnQ9cS5kCmlmKHQ9PW51bGwpdD1xLmQ9UC5UMigpCnM9cS5OKGEpCnI9dFtz
+XQppZihyPT1udWxsKXRbc109W3EueW8oYSldCmVsc2V7aWYocS5ERihyLGEpPj0wKXJldHVybiExCnIu
+cHVzaChxLnlvKGEpKX1yZXR1cm4hMH0sClI6ZnVuY3Rpb24oYSxiKXt2YXIgdD10aGlzCmlmKHR5cGVv
+ZiBiPT0ic3RyaW5nIiYmYiE9PSJfX3Byb3RvX18iKXJldHVybiB0LkwodC5iLGIpCmVsc2UgaWYodHlw
+ZW9mIGI9PSJudW1iZXIiJiYoYiYxMDczNzQxODIzKT09PWIpcmV0dXJuIHQuTCh0LmMsYikKZWxzZSBy
+ZXR1cm4gdC5xZyhiKX0sCnFnOmZ1bmN0aW9uKGEpe3ZhciB0LHMscixxLHA9dGhpcyxvPXAuZAppZihv
+PT1udWxsKXJldHVybiExCnQ9cC5OKGEpCnM9b1t0XQpyPXAuREYocyxhKQppZihyPDApcmV0dXJuITEK
+cT1zLnNwbGljZShyLDEpWzBdCmlmKDA9PT1zLmxlbmd0aClkZWxldGUgb1t0XQpwLkdTKHEpCnJldHVy
+biEwfSwKYlE6ZnVuY3Rpb24oYSxiKXtILkxoKHRoaXMpLmQuYihiKQppZih1LkouYihhW2JdKSE9bnVs
+bClyZXR1cm4hMQphW2JdPXRoaXMueW8oYikKcmV0dXJuITB9LApMOmZ1bmN0aW9uKGEsYil7dmFyIHQK
+aWYoYT09bnVsbClyZXR1cm4hMQp0PXUuSi5iKGFbYl0pCmlmKHQ9PW51bGwpcmV0dXJuITEKdGhpcy5H
+Uyh0KQpkZWxldGUgYVtiXQpyZXR1cm4hMH0sClM6ZnVuY3Rpb24oKXt0aGlzLnI9MTA3Mzc0MTgyMyZ0
+aGlzLnIrMX0sCnlvOmZ1bmN0aW9uKGEpe3ZhciB0LHM9dGhpcyxyPW5ldyBQLmJuKEguTGgocykuZC5i
+KGEpKQppZihzLmU9PW51bGwpcy5lPXMuZj1yCmVsc2V7dD1zLmYKci5jPXQKcy5mPXQuYj1yfSsrcy5h
+CnMuUygpCnJldHVybiByfSwKR1M6ZnVuY3Rpb24oYSl7dmFyIHQ9dGhpcyxzPWEuYyxyPWEuYgppZihz
+PT1udWxsKXQuZT1yCmVsc2Ugcy5iPXIKaWYocj09bnVsbCl0LmY9cwplbHNlIHIuYz1zOy0tdC5hCnQu
+UygpfSwKTjpmdW5jdGlvbihhKXtyZXR1cm4gSi5oZihhKSYxMDczNzQxODIzfSwKREY6ZnVuY3Rpb24o
+YSxiKXt2YXIgdCxzCmlmKGE9PW51bGwpcmV0dXJuLTEKdD1hLmxlbmd0aApmb3Iocz0wO3M8dDsrK3Mp
+aWYoSi5STShhW3NdLmEsYikpcmV0dXJuIHMKcmV0dXJuLTF9fQpQLmJuLnByb3RvdHlwZT17fQpQLmxt
+LnByb3RvdHlwZT17CmdsOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZH0sCkY6ZnVuY3Rpb24oKXt2YXIg
+dD10aGlzLHM9dC5hCmlmKHQuYiE9PXMucil0aHJvdyBILmIoUC5hNChzKSkKZWxzZXtzPXQuYwppZihz
+PT1udWxsKXt0LnNqKG51bGwpCnJldHVybiExfWVsc2V7dC5zaih0LiR0aS5kLmIocy5hKSkKdC5jPXQu
+Yy5iCnJldHVybiEwfX19LApzajpmdW5jdGlvbihhKXt0aGlzLmQ9dGhpcy4kdGkuZC5iKGEpfSwKJGlB
+bjoxfQpQLm1XLnByb3RvdHlwZT17fQpQLkxVLnByb3RvdHlwZT17JGljWDoxLCRpek06MX0KUC5sRC5w
+cm90b3R5cGU9ewpna3o6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBILmE3KGEsdGhpcy5nQShhKSxILnpL
+KGEpLkMoImE3PGxELkU+IikpfSwKRTpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLnEoYSxiKX0sCks6
+ZnVuY3Rpb24oYSxiKXt2YXIgdCxzCkgueksoYSkuQygifihsRC5FKSIpLmIoYikKdD10aGlzLmdBKGEp
+CmZvcihzPTA7czx0Oysrcyl7Yi4kMSh0aGlzLnEoYSxzKSkKaWYodCE9PXRoaXMuZ0EoYSkpdGhyb3cg
+SC5iKFAuYTQoYSkpfX0sCkUyOmZ1bmN0aW9uKGEsYixjKXt2YXIgdD1ILnpLKGEpCnJldHVybiBuZXcg
+SC5BOChhLHQuS3EoYykuQygiMShsRC5FKSIpLmIoYiksdC5DKCJAPGxELkU+IikuS3EoYykuQygiQTg8
+MSwyPiIpKX0sCmR1OmZ1bmN0aW9uKGEsYixjLGQpe3ZhciB0CkgueksoYSkuQygibEQuRSIpLmIoZCkK
+UC5qQihiLGMsdGhpcy5nQShhKSkKZm9yKHQ9Yjt0PGM7Kyt0KXRoaXMuWShhLHQsZCl9LAp3OmZ1bmN0
+aW9uKGEpe3JldHVybiBQLldFKGEsIlsiLCJdIil9fQpQLmlsLnByb3RvdHlwZT17fQpQLnJhLnByb3Rv
+dHlwZT17CiQyOmZ1bmN0aW9uKGEsYil7dmFyIHQscz10aGlzLmEKaWYoIXMuYSl0aGlzLmIuYSs9Iiwg
+IgpzLmE9ITEKcz10aGlzLmIKdD1zLmErPUguZChhKQpzLmE9dCsiOiAiCnMuYSs9SC5kKGIpfSwKJFM6
+MX0KUC5Zay5wcm90b3R5cGU9ewpLOmZ1bmN0aW9uKGEsYil7dmFyIHQscwpILkxoKHRoaXMpLkMoIn4o
+WWsuSyxZay5WKSIpLmIoYikKZm9yKHQ9Si5JVCh0aGlzLmdWKCkpO3QuRigpOyl7cz10LmdsKCkKYi4k
+MihzLHRoaXMucSgwLHMpKX19LApnQTpmdW5jdGlvbihhKXtyZXR1cm4gSi5IbSh0aGlzLmdWKCkpfSwK
+dzpmdW5jdGlvbihhKXtyZXR1cm4gUC5uTyh0aGlzKX0sCiRpWjA6MX0KUC5LUC5wcm90b3R5cGU9ewpZ
+OmZ1bmN0aW9uKGEsYixjKXt2YXIgdD1ILkxoKHRoaXMpCnQuZC5iKGIpCnQuY2hbMV0uYihjKQp0aHJv
+dyBILmIoUC5MNCgiQ2Fubm90IG1vZGlmeSB1bm1vZGlmaWFibGUgbWFwIikpfX0KUC5Qbi5wcm90b3R5
+cGU9ewpxOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXMuYS5xKDAsYil9LApZOmZ1bmN0aW9uKGEsYixj
+KXt2YXIgdD1ILkxoKHRoaXMpCnRoaXMuYS5ZKDAsdC5kLmIoYiksdC5jaFsxXS5iKGMpKX0sCks6ZnVu
+Y3Rpb24oYSxiKXt0aGlzLmEuSygwLEguTGgodGhpcykuQygifigxLDIpIikuYihiKSl9LApnQTpmdW5j
+dGlvbihhKXt2YXIgdD10aGlzLmEKcmV0dXJuIHQuZ0EodCl9LAp3OmZ1bmN0aW9uKGEpe3JldHVybiBK
+LmoodGhpcy5hKX0sCiRpWjA6MX0KUC5Hai5wcm90b3R5cGU9e30KUC5sZi5wcm90b3R5cGU9ewp3OmZ1
+bmN0aW9uKGEpe3JldHVybiBQLldFKHRoaXMsInsiLCJ9Iil9fQpQLlZqLnByb3RvdHlwZT17JGljWDox
+LCRpeHU6MX0KUC5Ydi5wcm90b3R5cGU9ewpGVjpmdW5jdGlvbihhLGIpe3ZhciB0CmZvcih0PUouSVQo
+SC5MaCh0aGlzKS5DKCJjWDwxPiIpLmIoYikpO3QuRigpOyl0aGlzLmkoMCx0LmdsKCkpfSwKdzpmdW5j
+dGlvbihhKXtyZXR1cm4gUC5XRSh0aGlzLCJ7IiwifSIpfSwKSDpmdW5jdGlvbihhLGIpe3ZhciB0LHM9
+UC5yaih0aGlzLHRoaXMucixILkxoKHRoaXMpLmQpCmlmKCFzLkYoKSlyZXR1cm4iIgppZihiPT09IiIp
+e3Q9IiIKZG8gdCs9SC5kKHMuZCkKd2hpbGUocy5GKCkpfWVsc2V7dD1ILmQocy5kKQpmb3IoO3MuRigp
+Oyl0PXQrYitILmQocy5kKX1yZXR1cm4gdC5jaGFyQ29kZUF0KDApPT0wP3Q6dH0sCiRpY1g6MSwKJGl4
+dToxfQpQLm5ZLnByb3RvdHlwZT17fQpQLldZLnByb3RvdHlwZT17fQpQLlJVLnByb3RvdHlwZT17fQpQ
+LnV3LnByb3RvdHlwZT17CnE6ZnVuY3Rpb24oYSxiKXt2YXIgdCxzPXRoaXMuYgppZihzPT1udWxsKXJl
+dHVybiB0aGlzLmMucSgwLGIpCmVsc2UgaWYodHlwZW9mIGIhPSJzdHJpbmciKXJldHVybiBudWxsCmVs
+c2V7dD1zW2JdCnJldHVybiB0eXBlb2YgdD09InVuZGVmaW5lZCI/dGhpcy5mYihiKTp0fX0sCmdBOmZ1
+bmN0aW9uKGEpe3JldHVybiB0aGlzLmI9PW51bGw/dGhpcy5jLmE6dGhpcy5DZigpLmxlbmd0aH0sCmdW
+OmZ1bmN0aW9uKCl7aWYodGhpcy5iPT1udWxsKXt2YXIgdD10aGlzLmMKcmV0dXJuIG5ldyBILmk1KHQs
+SC5MaCh0KS5DKCJpNTwxPiIpKX1yZXR1cm4gbmV3IFAuaTgodGhpcyl9LApZOmZ1bmN0aW9uKGEsYixj
+KXt2YXIgdCxzLHI9dGhpcwppZihyLmI9PW51bGwpci5jLlkoMCxiLGMpCmVsc2UgaWYoci54NChiKSl7
+dD1yLmIKdFtiXT1jCnM9ci5hCmlmKHM9PW51bGw/dCE9bnVsbDpzIT09dClzW2JdPW51bGx9ZWxzZSBy
+LlhLKCkuWSgwLGIsYyl9LAp4NDpmdW5jdGlvbihhKXtpZih0aGlzLmI9PW51bGwpcmV0dXJuIHRoaXMu
+Yy54NChhKQpyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYSxh
+KX0sCks6ZnVuY3Rpb24oYSxiKXt2YXIgdCxzLHIscSxwPXRoaXMKdS5jQS5iKGIpCmlmKHAuYj09bnVs
+bClyZXR1cm4gcC5jLksoMCxiKQp0PXAuQ2YoKQpmb3Iocz0wO3M8dC5sZW5ndGg7KytzKXtyPXRbc10K
+cT1wLmJbcl0KaWYodHlwZW9mIHE9PSJ1bmRlZmluZWQiKXtxPVAuUWUocC5hW3JdKQpwLmJbcl09cX1i
+LiQyKHIscSkKaWYodCE9PXAuYyl0aHJvdyBILmIoUC5hNChwKSl9fSwKQ2Y6ZnVuY3Rpb24oKXt2YXIg
+dD11LmouYih0aGlzLmMpCmlmKHQ9PW51bGwpdD10aGlzLmM9SC5WTShPYmplY3Qua2V5cyh0aGlzLmEp
+LHUucykKcmV0dXJuIHR9LApYSzpmdW5jdGlvbigpe3ZhciB0LHMscixxLHAsbz10aGlzCmlmKG8uYj09
+bnVsbClyZXR1cm4gby5jCnQ9UC5GbCh1Lk4sdS56KQpzPW8uQ2YoKQpmb3Iocj0wO3E9cy5sZW5ndGgs
+cjxxOysrcil7cD1zW3JdCnQuWSgwLHAsby5xKDAscCkpfWlmKHE9PT0wKUMuTm0uaShzLG51bGwpCmVs
+c2UgQy5ObS5zQShzLDApCm8uYT1vLmI9bnVsbApyZXR1cm4gby5jPXR9LApmYjpmdW5jdGlvbihhKXt2
+YXIgdAppZighT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMuYSxhKSlyZXR1
+cm4gbnVsbAp0PVAuUWUodGhpcy5hW2FdKQpyZXR1cm4gdGhpcy5iW2FdPXR9fQpQLmk4LnByb3RvdHlw
+ZT17CmdBOmZ1bmN0aW9uKGEpe3ZhciB0PXRoaXMuYQpyZXR1cm4gdC5nQSh0KX0sCkU6ZnVuY3Rpb24o
+YSxiKXt2YXIgdD10aGlzLmEKaWYodC5iPT1udWxsKXQ9dC5nVigpLkUoMCxiKQplbHNle3Q9dC5DZigp
+CmlmKGI8MHx8Yj49dC5sZW5ndGgpcmV0dXJuIEguT0godCxiKQp0PXRbYl19cmV0dXJuIHR9LApna3o6
+ZnVuY3Rpb24oYSl7dmFyIHQ9dGhpcy5hCmlmKHQuYj09bnVsbCl7dD10LmdWKCkKdD10Lmdreih0KX1l
+bHNle3Q9dC5DZigpCnQ9bmV3IEoubTEodCx0Lmxlbmd0aCxILnQ2KHQpLkMoIm0xPDE+IikpfXJldHVy
+biB0fX0KUC5DVi5wcm90b3R5cGU9ewp5cjpmdW5jdGlvbihhLGEwLGExKXt2YXIgdCxzLHIscSxwLG8s
+bixtLGwsayxqLGksaCxnLGYsZSxkLGMsYj0iSW52YWxpZCBiYXNlNjQgZW5jb2RpbmcgbGVuZ3RoICIK
+YTE9UC5qQihhMCxhMSxhLmxlbmd0aCkKdD0kLlY3KCkKZm9yKHM9YTAscj1zLHE9bnVsbCxwPS0xLG89
+LTEsbj0wO3M8YTE7cz1tKXttPXMrMQpsPUMueEIuVyhhLHMpCmlmKGw9PT0zNyl7az1tKzIKaWYoazw9
+YTEpe2o9SC5vbyhDLnhCLlcoYSxtKSkKaT1ILm9vKEMueEIuVyhhLG0rMSkpCmg9aioxNitpLShpJjI1
+NikKaWYoaD09PTM3KWg9LTEKbT1rfWVsc2UgaD0tMX1lbHNlIGg9bAppZigwPD1oJiZoPD0xMjcpe2lm
+KGg8MHx8aD49dC5sZW5ndGgpcmV0dXJuIEguT0godCxoKQpnPXRbaF0KaWYoZz49MCl7aD1DLnhCLm0o
+IkFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2
+Nzg5Ky8iLGcpCmlmKGg9PT1sKWNvbnRpbnVlCmw9aH1lbHNle2lmKGc9PT0tMSl7aWYocDwwKXtmPXE9
+PW51bGw/bnVsbDpxLmEubGVuZ3RoCmlmKGY9PW51bGwpZj0wCnA9Zisocy1yKQpvPXN9KytuCmlmKGw9
+PT02MSljb250aW51ZX1sPWh9aWYoZyE9PS0yKXtpZihxPT1udWxsKXE9bmV3IFAuUm4oIiIpCnEuYSs9
+Qy54Qi5OaihhLHIscykKcS5hKz1ILkx3KGwpCnI9bQpjb250aW51ZX19dGhyb3cgSC5iKFAucnIoIklu
+dmFsaWQgYmFzZTY0IGRhdGEiLGEscykpfWlmKHEhPW51bGwpe2Y9cS5hKz1DLnhCLk5qKGEscixhMSkK
+ZT1mLmxlbmd0aAppZihwPj0wKVAueE0oYSxvLGExLHAsbixlKQplbHNle2Q9Qy5qbi56WShlLTEsNCkr
+MQppZihkPT09MSl0aHJvdyBILmIoUC5ycihiLGEsYTEpKQpmb3IoO2Q8NDspe2YrPSI9IgpxLmE9Zjsr
+K2R9fWY9cS5hCnJldHVybiBDLnhCLmk3KGEsYTAsYTEsZi5jaGFyQ29kZUF0KDApPT0wP2Y6Zil9Yz1h
+MS1hMAppZihwPj0wKVAueE0oYSxvLGExLHAsbixjKQplbHNle2Q9Qy5qbi56WShjLDQpCmlmKGQ9PT0x
+KXRocm93IEguYihQLnJyKGIsYSxhMSkpCmlmKGQ+MSlhPUMueEIuaTcoYSxhMSxhMSxkPT09Mj8iPT0i
+OiI9Iil9cmV0dXJuIGF9fQpQLlU4LnByb3RvdHlwZT17fQpQLlVrLnByb3RvdHlwZT17fQpQLndJLnBy
+b3RvdHlwZT17fQpQLlppLnByb3RvdHlwZT17fQpQLmJ5LnByb3RvdHlwZT17CnBXOmZ1bmN0aW9uKGEs
+YixjKXt2YXIgdAp1LmVwLmIoYykKdD1QLkJTKGIsdGhpcy5nSGUoKS5hKQpyZXR1cm4gdH0sCmdIZTpm
+dW5jdGlvbigpe3JldHVybiBDLkEzfX0KUC5NeC5wcm90b3R5cGU9e30KUC51NS5wcm90b3R5cGU9ewpn
+WkU6ZnVuY3Rpb24oKXtyZXR1cm4gQy5Ra319ClAuRTMucHJvdG90eXBlPXsKV0o6ZnVuY3Rpb24oYSl7
+dmFyIHQscyxyPVAuakIoMCxudWxsLGEubGVuZ3RoKSxxPXItMAppZihxPT09MClyZXR1cm4gbmV3IFVp
+bnQ4QXJyYXkoMCkKdD1uZXcgVWludDhBcnJheShxKjMpCnM9bmV3IFAuUncodCkKaWYocy5HeChhLDAs
+cikhPT1yKXMuTzYoSi5hNihhLHItMSksMCkKcmV0dXJuIG5ldyBVaW50OEFycmF5KHQuc3ViYXJyYXko
+MCxILnJNKDAscy5iLHQubGVuZ3RoKSkpfX0KUC5Sdy5wcm90b3R5cGU9ewpPNjpmdW5jdGlvbihhLGIp
+e3ZhciB0LHM9dGhpcyxyPXMuYyxxPXMuYixwPXErMSxvPXIubGVuZ3RoCmlmKChiJjY0NTEyKT09PTU2
+MzIwKXt0PTY1NTM2KygoYSYxMDIzKTw8MTApfGImMTAyMwpzLmI9cAppZihxPj1vKXJldHVybiBILk9I
+KHIscSkKcltxXT0yNDB8dD4+PjE4CnE9cy5iPXArMQppZihwPj1vKXJldHVybiBILk9IKHIscCkKcltw
+XT0xMjh8dD4+PjEyJjYzCnA9cy5iPXErMQppZihxPj1vKXJldHVybiBILk9IKHIscSkKcltxXT0xMjh8
+dD4+PjYmNjMKcy5iPXArMQppZihwPj1vKXJldHVybiBILk9IKHIscCkKcltwXT0xMjh8dCY2MwpyZXR1
+cm4hMH1lbHNle3MuYj1wCmlmKHE+PW8pcmV0dXJuIEguT0gocixxKQpyW3FdPTIyNHxhPj4+MTIKcT1z
+LmI9cCsxCmlmKHA+PW8pcmV0dXJuIEguT0gocixwKQpyW3BdPTEyOHxhPj4+NiY2MwpzLmI9cSsxCmlm
+KHE+PW8pcmV0dXJuIEguT0gocixxKQpyW3FdPTEyOHxhJjYzCnJldHVybiExfX0sCkd4OmZ1bmN0aW9u
+KGEsYixjKXt2YXIgdCxzLHIscSxwLG8sbixtPXRoaXMKaWYoYiE9PWMmJihDLnhCLm0oYSxjLTEpJjY0
+NTEyKT09PTU1Mjk2KS0tYwpmb3IodD1tLmMscz10Lmxlbmd0aCxyPWI7cjxjOysrcil7cT1DLnhCLlco
+YSxyKQppZihxPD0xMjcpe3A9bS5iCmlmKHA+PXMpYnJlYWsKbS5iPXArMQp0W3BdPXF9ZWxzZSBpZigo
+cSY2NDUxMik9PT01NTI5Nil7aWYobS5iKzM+PXMpYnJlYWsKbz1yKzEKaWYobS5PNihxLEMueEIuVyhh
+LG8pKSlyPW99ZWxzZSBpZihxPD0yMDQ3KXtwPW0uYgpuPXArMQppZihuPj1zKWJyZWFrCm0uYj1uCmlm
+KHA+PXMpcmV0dXJuIEguT0godCxwKQp0W3BdPTE5MnxxPj4+NgptLmI9bisxCnRbbl09MTI4fHEmNjN9
+ZWxzZXtwPW0uYgppZihwKzI+PXMpYnJlYWsKbj1tLmI9cCsxCmlmKHA+PXMpcmV0dXJuIEguT0godCxw
+KQp0W3BdPTIyNHxxPj4+MTIKcD1tLmI9bisxCmlmKG4+PXMpcmV0dXJuIEguT0godCxuKQp0W25dPTEy
+OHxxPj4+NiY2MwptLmI9cCsxCmlmKHA+PXMpcmV0dXJuIEguT0godCxwKQp0W3BdPTEyOHxxJjYzfX1y
+ZXR1cm4gcn19ClAuR1kucHJvdG90eXBlPXsKV0o6ZnVuY3Rpb24oYSl7dmFyIHQscyxyLHEscCxvLG4s
+bSxsCnUuTC5iKGEpCnQ9UC5reSghMSxhLDAsbnVsbCkKaWYodCE9bnVsbClyZXR1cm4gdApzPVAuakIo
+MCxudWxsLEouSG0oYSkpCnI9UC5jUChhLDAscykKaWYocj4wKXtxPVAuSE0oYSwwLHIpCmlmKHI9PT1z
+KXJldHVybiBxCnA9bmV3IFAuUm4ocSkKbz1yCm49ITF9ZWxzZXtvPTAKcD1udWxsCm49ITB9aWYocD09
+bnVsbClwPW5ldyBQLlJuKCIiKQptPW5ldyBQLmJ6KCExLHApCm0uYz1uCm0uTUUoYSxvLHMpCmlmKG0u
+ZT4wKXtILnZoKFAucnIoIlVuZmluaXNoZWQgVVRGLTggb2N0ZXQgc2VxdWVuY2UiLGEscykpCnAuYSs9
+SC5Mdyg2NTUzMykKbS5mPW0uZT1tLmQ9MH1sPXAuYQpyZXR1cm4gbC5jaGFyQ29kZUF0KDApPT0wP2w6
+bH19ClAuYnoucHJvdG90eXBlPXsKTUU6ZnVuY3Rpb24oYSxiLGMpe3ZhciB0LHMscixxLHAsbyxuLG0s
+bCxrLGosaSxoPXRoaXMsZz0iQmFkIFVURi04IGVuY29kaW5nIDB4Igp1LkwuYihhKQp0PWguZApzPWgu
+ZQpyPWguZgpoLmY9aC5lPWguZD0wCiRsYWJlbDAkMDpmb3IocT1KLlU2KGEpLHA9aC5iLG89YjshMDtv
+PWopeyRsYWJlbDEkMTppZihzPjApe2Rve2lmKG89PT1jKWJyZWFrICRsYWJlbDAkMApuPXEucShhLG8p
+CmlmKHR5cGVvZiBuIT09Im51bWJlciIpcmV0dXJuIG4uek0oKQppZigobiYxOTIpIT09MTI4KXttPVAu
+cnIoZytDLmpuLldaKG4sMTYpLGEsbykKdGhyb3cgSC5iKG0pfWVsc2V7dD0odDw8NnxuJjYzKT4+PjA7
+LS1zOysrb319d2hpbGUocz4wKQptPXItMQppZihtPDB8fG0+PTQpcmV0dXJuIEguT0goQy5HYixtKQpp
+Zih0PD1DLkdiW21dKXttPVAucnIoIk92ZXJsb25nIGVuY29kaW5nIG9mIDB4IitDLmpuLldaKHQsMTYp
+LGEsby1yLTEpCnRocm93IEguYihtKX1pZih0PjExMTQxMTEpe209UC5ycigiQ2hhcmFjdGVyIG91dHNp
+ZGUgdmFsaWQgVW5pY29kZSByYW5nZTogMHgiK0Muam4uV1oodCwxNiksYSxvLXItMSkKdGhyb3cgSC5i
+KG0pfWlmKCFoLmN8fHQhPT02NTI3OSlwLmErPUguTHcodCkKaC5jPSExfWZvcihtPW88YzttOyl7bD1Q
+LmNQKGEsbyxjKQppZihsPjApe2guYz0hMQprPW8rbApwLmErPVAuSE0oYSxvLGspCmlmKGs9PT1jKWJy
+ZWFrfWVsc2Ugaz1vCmo9aysxCm49cS5xKGEsaykKaWYodHlwZW9mIG4hPT0ibnVtYmVyIilyZXR1cm4g
+bi5KKCkKaWYobjwwKXtpPVAucnIoIk5lZ2F0aXZlIFVURi04IGNvZGUgdW5pdDogLTB4IitDLmpuLlda
+KC1uLDE2KSxhLGotMSkKdGhyb3cgSC5iKGkpfWVsc2V7aWYoKG4mMjI0KT09PTE5Mil7dD1uJjMxCnM9
+MQpyPTEKY29udGludWUgJGxhYmVsMCQwfWlmKChuJjI0MCk9PT0yMjQpe3Q9biYxNQpzPTIKcj0yCmNv
+bnRpbnVlICRsYWJlbDAkMH1pZigobiYyNDgpPT09MjQwJiZuPDI0NSl7dD1uJjcKcz0zCnI9Mwpjb250
+aW51ZSAkbGFiZWwwJDB9aT1QLnJyKGcrQy5qbi5XWihuLDE2KSxhLGotMSkKdGhyb3cgSC5iKGkpfX1i
+cmVhayAkbGFiZWwwJDB9aWYocz4wKXtoLmQ9dApoLmU9cwpoLmY9cn19fQpQLldGLnByb3RvdHlwZT17
+CiQyOmZ1bmN0aW9uKGEsYil7dmFyIHQscyxyCnUuZm8uYihhKQp0PXRoaXMuYgpzPXRoaXMuYQp0LmEr
+PXMuYQpyPXQuYSs9SC5kKGEuYSkKdC5hPXIrIjogIgp0LmErPVAucChiKQpzLmE9IiwgIn0sCiRTOjMy
+fQpQLmEyLnByb3RvdHlwZT17fQpQLmlQLnByb3RvdHlwZT17CkROOmZ1bmN0aW9uKGEsYil7aWYoYj09
+bnVsbClyZXR1cm4hMQpyZXR1cm4gYiBpbnN0YW5jZW9mIFAuaVAmJnRoaXMuYT09PWIuYSYmITB9LApn
+aU86ZnVuY3Rpb24oYSl7dmFyIHQ9dGhpcy5hCnJldHVybih0XkMuam4ud0codCwzMCkpJjEwNzM3NDE4
+MjN9LAp3OmZ1bmN0aW9uKGEpe3ZhciB0PXRoaXMscz1QLkdxKEgudEoodCkpLHI9UC5oMChILk5TKHQp
+KSxxPVAuaDAoSC5qQSh0KSkscD1QLmgwKEguS0wodCkpLG89UC5oMChILmNoKHQpKSxuPVAuaDAoSC5K
+ZCh0KSksbT1QLlZ4KEgubzEodCkpLGw9cysiLSIrcisiLSIrcSsiICIrcCsiOiIrbysiOiIrbisiLiIr
+bQpyZXR1cm4gbH19ClAuQ1AucHJvdG90eXBlPXt9ClAuWFMucHJvdG90eXBlPXt9ClAuQzYucHJvdG90
+eXBlPXsKdzpmdW5jdGlvbihhKXt2YXIgdD10aGlzLmEKaWYodCE9bnVsbClyZXR1cm4iQXNzZXJ0aW9u
+IGZhaWxlZDogIitQLnAodCkKcmV0dXJuIkFzc2VydGlvbiBmYWlsZWQifX0KUC5uLnByb3RvdHlwZT17
+Cnc6ZnVuY3Rpb24oYSl7cmV0dXJuIlRocm93IG9mIG51bGwuIn19ClAudS5wcm90b3R5cGU9ewpnWjpm
+dW5jdGlvbigpe3JldHVybiJJbnZhbGlkIGFyZ3VtZW50IisoIXRoaXMuYT8iKHMpIjoiIil9LApndTpm
+dW5jdGlvbigpe3JldHVybiIifSwKdzpmdW5jdGlvbihhKXt2YXIgdCxzLHIscSxwPXRoaXMsbz1wLmMs
+bj1vIT1udWxsPyIgKCIrbysiKSI6IiIKbz1wLmQKdD1vPT1udWxsPyIiOiI6ICIrSC5kKG8pCnM9cC5n
+WigpK24rdAppZighcC5hKXJldHVybiBzCnI9cC5ndSgpCnE9UC5wKHAuYikKcmV0dXJuIHMrcisiOiAi
+K3F9fQpQLmJKLnByb3RvdHlwZT17CmdaOmZ1bmN0aW9uKCl7cmV0dXJuIlJhbmdlRXJyb3IifSwKZ3U6
+ZnVuY3Rpb24oKXt2YXIgdCxzLHI9dGhpcy5lCmlmKHI9PW51bGwpe3I9dGhpcy5mCnQ9ciE9bnVsbD8i
+OiBOb3QgbGVzcyB0aGFuIG9yIGVxdWFsIHRvICIrSC5kKHIpOiIifWVsc2V7cz10aGlzLmYKaWYocz09
+bnVsbCl0PSI6IE5vdCBncmVhdGVyIHRoYW4gb3IgZXF1YWwgdG8gIitILmQocikKZWxzZSBpZihzPnIp
+dD0iOiBOb3QgaW4gcmFuZ2UgIitILmQocikrIi4uIitILmQocykrIiwgaW5jbHVzaXZlIgplbHNlIHQ9
+czxyPyI6IFZhbGlkIHZhbHVlIHJhbmdlIGlzIGVtcHR5IjoiOiBPbmx5IHZhbGlkIHZhbHVlIGlzICIr
+SC5kKHIpfXJldHVybiB0fX0KUC5lWS5wcm90b3R5cGU9ewpnWjpmdW5jdGlvbigpe3JldHVybiJSYW5n
+ZUVycm9yIn0sCmd1OmZ1bmN0aW9uKCl7dmFyIHQscz1ILlNjKHRoaXMuYikKaWYodHlwZW9mIHMhPT0i
+bnVtYmVyIilyZXR1cm4gcy5KKCkKaWYoczwwKXJldHVybiI6IGluZGV4IG11c3Qgbm90IGJlIG5lZ2F0
+aXZlIgp0PXRoaXMuZgppZih0PT09MClyZXR1cm4iOiBubyBpbmRpY2VzIGFyZSB2YWxpZCIKcmV0dXJu
+IjogaW5kZXggc2hvdWxkIGJlIGxlc3MgdGhhbiAiK0guZCh0KX0sCmdBOmZ1bmN0aW9uKGEpe3JldHVy
+biB0aGlzLmZ9fQpQLm1wLnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7dmFyIHQscyxyLHEscCxvLG4s
+bSxsPXRoaXMsaz17fSxqPW5ldyBQLlJuKCIiKQprLmE9IiIKZm9yKHQ9bC5jLHM9dC5sZW5ndGgscj0w
+LHE9IiIscD0iIjtyPHM7KytyLHA9IiwgIil7bz10W3JdCmouYT1xK3AKcT1qLmErPVAucChvKQprLmE9
+IiwgIn1sLmQuSygwLG5ldyBQLldGKGssaikpCm49UC5wKGwuYSkKbT1qLncoMCkKdD0iTm9TdWNoTWV0
+aG9kRXJyb3I6IG1ldGhvZCBub3QgZm91bmQ6ICciK0guZChsLmIuYSkrIidcblJlY2VpdmVyOiAiK24r
+IlxuQXJndW1lbnRzOiBbIittKyJdIgpyZXR1cm4gdH19ClAudWIucHJvdG90eXBlPXsKdzpmdW5jdGlv
+bihhKXtyZXR1cm4iVW5zdXBwb3J0ZWQgb3BlcmF0aW9uOiAiK3RoaXMuYX19ClAuZHMucHJvdG90eXBl
+PXsKdzpmdW5jdGlvbihhKXt2YXIgdD10aGlzLmEKcmV0dXJuIHQhPW51bGw/IlVuaW1wbGVtZW50ZWRF
+cnJvcjogIit0OiJVbmltcGxlbWVudGVkRXJyb3IifX0KUC5sai5wcm90b3R5cGU9ewp3OmZ1bmN0aW9u
+KGEpe3JldHVybiJCYWQgc3RhdGU6ICIrdGhpcy5hfX0KUC5VVi5wcm90b3R5cGU9ewp3OmZ1bmN0aW9u
+KGEpe3ZhciB0PXRoaXMuYQppZih0PT1udWxsKXJldHVybiJDb25jdXJyZW50IG1vZGlmaWNhdGlvbiBk
+dXJpbmcgaXRlcmF0aW9uLiIKcmV0dXJuIkNvbmN1cnJlbnQgbW9kaWZpY2F0aW9uIGR1cmluZyBpdGVy
+YXRpb246ICIrUC5wKHQpKyIuIn19ClAuazUucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXtyZXR1cm4i
+T3V0IG9mIE1lbW9yeSJ9LAokaVhTOjF9ClAuS1kucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXtyZXR1
+cm4iU3RhY2sgT3ZlcmZsb3cifSwKJGlYUzoxfQpQLmMucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXt2
+YXIgdD10aGlzLmEKcmV0dXJuIHQ9PW51bGw/IlJlYWRpbmcgc3RhdGljIHZhcmlhYmxlIGR1cmluZyBp
+dHMgaW5pdGlhbGl6YXRpb24iOiJSZWFkaW5nIHN0YXRpYyB2YXJpYWJsZSAnIit0KyInIGR1cmluZyBp
+dHMgaW5pdGlhbGl6YXRpb24ifX0KUC5DRC5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3JldHVybiJF
+eGNlcHRpb246ICIrdGhpcy5hfX0KUC5hRS5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3ZhciB0LHMs
+cixxLHAsbyxuLG0sbCxrLGosaSxoPXRoaXMuYSxnPWghPW51bGwmJiIiIT09aD8iRm9ybWF0RXhjZXB0
+aW9uOiAiK0guZChoKToiRm9ybWF0RXhjZXB0aW9uIixmPXRoaXMuYyxlPXRoaXMuYgppZih0eXBlb2Yg
+ZT09InN0cmluZyIpe2lmKGYhPW51bGwpaD1mPDB8fGY+ZS5sZW5ndGgKZWxzZSBoPSExCmlmKGgpZj1u
+dWxsCmlmKGY9PW51bGwpe3Q9ZS5sZW5ndGg+Nzg/Qy54Qi5OaihlLDAsNzUpKyIuLi4iOmUKcmV0dXJu
+IGcrIlxuIit0fWZvcihzPTEscj0wLHE9ITEscD0wO3A8ZjsrK3Ape289Qy54Qi5XKGUscCkKaWYobz09
+PTEwKXtpZihyIT09cHx8IXEpKytzCnI9cCsxCnE9ITF9ZWxzZSBpZihvPT09MTMpeysrcwpyPXArMQpx
+PSEwfX1nPXM+MT9nKygiIChhdCBsaW5lICIrcysiLCBjaGFyYWN0ZXIgIisoZi1yKzEpKyIpXG4iKTpn
+KygiIChhdCBjaGFyYWN0ZXIgIisoZisxKSsiKVxuIikKbj1lLmxlbmd0aApmb3IocD1mO3A8bjsrK3Ap
+e289Qy54Qi5tKGUscCkKaWYobz09PTEwfHxvPT09MTMpe249cApicmVha319aWYobi1yPjc4KWlmKGYt
+cjw3NSl7bT1yKzc1Cmw9cgprPSIiCmo9Ii4uLiJ9ZWxzZXtpZihuLWY8NzUpe2w9bi03NQptPW4Kaj0i
+In1lbHNle2w9Zi0zNgptPWYrMzYKaj0iLi4uIn1rPSIuLi4ifWVsc2V7bT1uCmw9cgprPSIiCmo9IiJ9
+aT1DLnhCLk5qKGUsbCxtKQpyZXR1cm4gZytrK2kraisiXG4iK0MueEIuSXgoIiAiLGYtbCtrLmxlbmd0
+aCkrIl5cbiJ9ZWxzZSByZXR1cm4gZiE9bnVsbD9nKygiIChhdCBvZmZzZXQgIitILmQoZikrIikiKTpn
+fX0KUC5FSC5wcm90b3R5cGU9e30KUC5LTi5wcm90b3R5cGU9e30KUC5jWC5wcm90b3R5cGU9ewpldjpm
+dW5jdGlvbihhLGIpe3ZhciB0PUguTGgodGhpcykKcmV0dXJuIG5ldyBILlU1KHRoaXMsdC5DKCJhMihj
+WC5FKSIpLmIoYiksdC5DKCJVNTxjWC5FPiIpKX0sCmdBOmZ1bmN0aW9uKGEpe3ZhciB0LHM9dGhpcy5n
+a3oodGhpcykKZm9yKHQ9MDtzLkYoKTspKyt0CnJldHVybiB0fSwKZ2wwOmZ1bmN0aW9uKGEpe3JldHVy
+biF0aGlzLmdreih0aGlzKS5GKCl9LApncjg6ZnVuY3Rpb24oYSl7dmFyIHQscz10aGlzLmdreih0aGlz
+KQppZighcy5GKCkpdGhyb3cgSC5iKEguV3AoKSkKdD1zLmdsKCkKaWYocy5GKCkpdGhyb3cgSC5iKEgu
+ZFUoKSkKcmV0dXJuIHR9LApFOmZ1bmN0aW9uKGEsYil7dmFyIHQscyxyClAuazEoYiwiaW5kZXgiKQpm
+b3IodD10aGlzLmdreih0aGlzKSxzPTA7dC5GKCk7KXtyPXQuZ2woKQppZihiPT09cylyZXR1cm4gcjsr
+K3N9dGhyb3cgSC5iKFAuQ2YoYix0aGlzLCJpbmRleCIsbnVsbCxzKSl9LAp3OmZ1bmN0aW9uKGEpe3Jl
+dHVybiBQLkVQKHRoaXMsIigiLCIpIil9fQpQLkFuLnByb3RvdHlwZT17fQpQLnpNLnByb3RvdHlwZT17
+JGljWDoxfQpQLlowLnByb3RvdHlwZT17fQpQLmM4LnByb3RvdHlwZT17CmdpTzpmdW5jdGlvbihhKXty
+ZXR1cm4gUC5rLnByb3RvdHlwZS5naU8uY2FsbCh0aGlzLHRoaXMpfSwKdzpmdW5jdGlvbihhKXtyZXR1
+cm4ibnVsbCJ9fQpQLkZLLnByb3RvdHlwZT17fQpQLmsucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpQLmss
+JGlrOjEsCkROOmZ1bmN0aW9uKGEsYil7cmV0dXJuIHRoaXM9PT1ifSwKZ2lPOmZ1bmN0aW9uKGEpe3Jl
+dHVybiBILmVRKHRoaXMpfSwKdzpmdW5jdGlvbihhKXtyZXR1cm4iSW5zdGFuY2Ugb2YgJyIrSC5kKEgu
+TSh0aGlzKSkrIicifSwKZTc6ZnVuY3Rpb24oYSxiKXt1Lm8uYihiKQp0aHJvdyBILmIoUC5scih0aGlz
+LGIuZ1dhKCksYi5nbmQoKSxiLmdWbSgpKSl9LAp0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlz
+LncodGhpcyl9fQpQLk9kLnByb3RvdHlwZT17fQpQLmliLnByb3RvdHlwZT17JGlPZDoxfQpQLnh1LnBy
+b3RvdHlwZT17fQpQLkd6LnByb3RvdHlwZT17fQpQLnFVLnByb3RvdHlwZT17JGl2WDoxfQpQLlJuLnBy
+b3RvdHlwZT17CmdBOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmEubGVuZ3RofSwKdzpmdW5jdGlvbihh
+KXt2YXIgdD10aGlzLmEKcmV0dXJuIHQuY2hhckNvZGVBdCgwKT09MD90OnR9LAokaUJMOjF9ClAuR0Qu
+cHJvdG90eXBlPXt9ClAubjEucHJvdG90eXBlPXsKJDI6ZnVuY3Rpb24oYSxiKXt2YXIgdCxzLHIscQp1
+LmYuYihhKQpILnkoYikKdD1KLnJZKGIpLk9ZKGIsIj0iKQppZih0PT09LTEpe2lmKGIhPT0iIilhLlko
+MCxQLmt1KGIsMCxiLmxlbmd0aCx0aGlzLmEsITApLCIiKX1lbHNlIGlmKHQhPT0wKXtzPUMueEIuTmoo
+YiwwLHQpCnI9Qy54Qi5HKGIsdCsxKQpxPXRoaXMuYQphLlkoMCxQLmt1KHMsMCxzLmxlbmd0aCxxLCEw
+KSxQLmt1KHIsMCxyLmxlbmd0aCxxLCEwKSl9cmV0dXJuIGF9LAokUzozOX0KUC5jUy5wcm90b3R5cGU9
+ewokMjpmdW5jdGlvbihhLGIpe3Rocm93IEguYihQLnJyKCJJbGxlZ2FsIElQdjQgYWRkcmVzcywgIith
+LHRoaXMuYSxiKSl9LAokUzoyOX0KUC5WQy5wcm90b3R5cGU9ewokMjpmdW5jdGlvbihhLGIpe3Rocm93
+IEguYihQLnJyKCJJbGxlZ2FsIElQdjYgYWRkcmVzcywgIithLHRoaXMuYSxiKSl9LAokMTpmdW5jdGlv
+bihhKXtyZXR1cm4gdGhpcy4kMihhLG51bGwpfSwKJFM6MjZ9ClAudHAucHJvdG90eXBlPXsKJDI6ZnVu
+Y3Rpb24oYSxiKXt2YXIgdAppZihiLWE+NCl0aGlzLmEuJDIoImFuIElQdjYgcGFydCBjYW4gb25seSBj
+b250YWluIGEgbWF4aW11bSBvZiA0IGhleCBkaWdpdHMiLGEpCnQ9UC5RQShDLnhCLk5qKHRoaXMuYixh
+LGIpLG51bGwsMTYpCmlmKHR5cGVvZiB0IT09Im51bWJlciIpcmV0dXJuIHQuSigpCmlmKHQ8MHx8dD42
+NTUzNSl0aGlzLmEuJDIoImVhY2ggcGFydCBtdXN0IGJlIGluIHRoZSByYW5nZSBvZiBgMHgwLi4weEZG
+RkZgIixhKQpyZXR1cm4gdH0sCiRTOjE5fQpQLkRuLnByb3RvdHlwZT17CmdrdTpmdW5jdGlvbigpe3Jl
+dHVybiB0aGlzLmJ9LApnSmY6ZnVuY3Rpb24oYSl7dmFyIHQ9dGhpcy5jCmlmKHQ9PW51bGwpcmV0dXJu
+IiIKaWYoQy54Qi5uKHQsIlsiKSlyZXR1cm4gQy54Qi5Oaih0LDEsdC5sZW5ndGgtMSkKcmV0dXJuIHR9
+LApndHA6ZnVuY3Rpb24oYSl7dmFyIHQ9dGhpcy5kCmlmKHQ9PW51bGwpcmV0dXJuIFAud0sodGhpcy5h
+KQpyZXR1cm4gdH0sCmd0UDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuZgpyZXR1cm4gdD09bnVsbD8iIjp0
+fSwKZ0thOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5yCnJldHVybiB0PT1udWxsPyIiOnR9LApubTpmdW5j
+dGlvbihhLGIpe3ZhciB0LHMscixxLHAsbyxuLG0sbD10aGlzCnUuWC5iKG51bGwpCnUuYi5iKGIpCnQ9
+bC5hCnM9dD09PSJmaWxlIgpyPWwuYgpxPWwuZApwPWwuYwppZighKHAhPW51bGwpKXA9ci5sZW5ndGgh
+PT0wfHxxIT1udWxsfHxzPyIiOm51bGwKbz1sLmUKaWYoIXMpbj1wIT1udWxsJiZvLmxlbmd0aCE9PTAK
+ZWxzZSBuPSEwCmlmKG4mJiFDLnhCLm4obywiLyIpKW89Ii8iK28KaWYoYiE9bnVsbCltPVAubGUobnVs
+bCwwLDAsYikKZWxzZSBtPWwuZgpyZXR1cm4gbmV3IFAuRG4odCxyLHAscSxvLG0sbC5yKX0sCmdGajpm
+dW5jdGlvbigpe3ZhciB0LHM9dGhpcy54CmlmKHMhPW51bGwpcmV0dXJuIHMKdD10aGlzLmUKaWYodC5s
+ZW5ndGghPT0wJiZDLnhCLlcodCwwKT09PTQ3KXQ9Qy54Qi5HKHQsMSkKcz10PT09IiI/Qy5kbjpQLkFG
+KG5ldyBILkE4KEguVk0odC5zcGxpdCgiLyIpLHUucyksdS5kTy5iKFAuUEgoKSksdS5kbyksdS5OKQp0
+aGlzLnNvNihzKQpyZXR1cm4gc30sCmdoWTpmdW5jdGlvbigpe3ZhciB0LHM9dGhpcwppZihzLlE9PW51
+bGwpe3Q9cy5mCnMuc1JIKG5ldyBQLkdqKFAuV1godD09bnVsbD8iIjp0KSx1LlQpKX1yZXR1cm4gcy5R
+fSwKSmg6ZnVuY3Rpb24oYSxiKXt2YXIgdCxzLHIscSxwLG8KZm9yKHQ9MCxzPTA7Qy54Qi5RaShiLCIu
+Li8iLHMpOyl7cys9MzsrK3R9cj1DLnhCLmNuKGEsIi8iKQp3aGlsZSghMCl7aWYoIShyPjAmJnQ+MCkp
+YnJlYWsKcT1DLnhCLlBrKGEsIi8iLHItMSkKaWYocTwwKWJyZWFrCnA9ci1xCm89cCE9PTIKaWYoIW98
+fHA9PT0zKWlmKEMueEIubShhLHErMSk9PT00NilvPSFvfHxDLnhCLm0oYSxxKzIpPT09NDYKZWxzZSBv
+PSExCmVsc2Ugbz0hMQppZihvKWJyZWFrOy0tdApyPXF9cmV0dXJuIEMueEIuaTcoYSxyKzEsbnVsbCxD
+LnhCLkcoYixzLTMqdCkpfSwKWkk6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMubVMoUC5oSyhhKSl9LApt
+UzpmdW5jdGlvbihhKXt2YXIgdCxzLHIscSxwLG8sbixtLGwsaz10aGlzLGo9bnVsbAppZihhLmdGaSgp
+Lmxlbmd0aCE9PTApe3Q9YS5nRmkoKQppZihhLmdjaigpKXtzPWEuZ2t1KCkKcj1hLmdKZihhKQpxPWEu
+Z3hBKCk/YS5ndHAoYSk6an1lbHNle3E9agpyPXEKcz0iIn1wPVAueGUoYS5nSWkoYSkpCm89YS5nUUQo
+KT9hLmd0UCgpOmp9ZWxzZXt0PWsuYQppZihhLmdjaigpKXtzPWEuZ2t1KCkKcj1hLmdKZihhKQpxPVAu
+d0IoYS5neEEoKT9hLmd0cChhKTpqLHQpCnA9UC54ZShhLmdJaShhKSkKbz1hLmdRRCgpP2EuZ3RQKCk6
+an1lbHNle3M9ay5iCnI9ay5jCnE9ay5kCmlmKGEuZ0lpKGEpPT09IiIpe3A9ay5lCm89YS5nUUQoKT9h
+Lmd0UCgpOmsuZn1lbHNle2lmKGEuZ3RUKCkpcD1QLnhlKGEuZ0lpKGEpKQplbHNle249ay5lCmlmKG4u
+bGVuZ3RoPT09MClpZihyPT1udWxsKXA9dC5sZW5ndGg9PT0wP2EuZ0lpKGEpOlAueGUoYS5nSWkoYSkp
+CmVsc2UgcD1QLnhlKCIvIithLmdJaShhKSkKZWxzZXttPWsuSmgobixhLmdJaShhKSkKbD10Lmxlbmd0
+aD09PTAKaWYoIWx8fHIhPW51bGx8fEMueEIubihuLCIvIikpcD1QLnhlKG0pCmVsc2UgcD1QLndGKG0s
+IWx8fHIhPW51bGwpfX1vPWEuZ1FEKCk/YS5ndFAoKTpqfX19cmV0dXJuIG5ldyBQLkRuKHQscyxyLHEs
+cCxvLGEuZ1o4KCk/YS5nS2EoKTpqKX0sCmdjajpmdW5jdGlvbigpe3JldHVybiB0aGlzLmMhPW51bGx9
+LApneEE6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kIT1udWxsfSwKZ1FEOmZ1bmN0aW9uKCl7cmV0dXJu
+IHRoaXMuZiE9bnVsbH0sCmdaODpmdW5jdGlvbigpe3JldHVybiB0aGlzLnIhPW51bGx9LApndFQ6ZnVu
+Y3Rpb24oKXtyZXR1cm4gQy54Qi5uKHRoaXMuZSwiLyIpfSwKdDQ6ZnVuY3Rpb24oKXt2YXIgdCxzLHI9
+dGhpcyxxPXIuYQppZihxIT09IiImJnEhPT0iZmlsZSIpdGhyb3cgSC5iKFAuTDQoIkNhbm5vdCBleHRy
+YWN0IGEgZmlsZSBwYXRoIGZyb20gYSAiK0guZChxKSsiIFVSSSIpKQpxPXIuZgppZigocT09bnVsbD8i
+IjpxKSE9PSIiKXRocm93IEguYihQLkw0KCJDYW5ub3QgZXh0cmFjdCBhIGZpbGUgcGF0aCBmcm9tIGEg
+VVJJIHdpdGggYSBxdWVyeSBjb21wb25lbnQiKSkKcT1yLnIKaWYoKHE9PW51bGw/IiI6cSkhPT0iIil0
+aHJvdyBILmIoUC5MNCgiQ2Fubm90IGV4dHJhY3QgYSBmaWxlIHBhdGggZnJvbSBhIFVSSSB3aXRoIGEg
+ZnJhZ21lbnQgY29tcG9uZW50IikpCnQ9JC53USgpCmlmKEgub1QodCkpcT1QLm1uKHIpCmVsc2V7aWYo
+ci5jIT1udWxsJiZyLmdKZihyKSE9PSIiKUgudmgoUC5MNCgiQ2Fubm90IGV4dHJhY3QgYSBub24tV2lu
+ZG93cyBmaWxlIHBhdGggZnJvbSBhIGZpbGUgVVJJIHdpdGggYW4gYXV0aG9yaXR5IikpCnM9ci5nRmoo
+KQpQLmtFKHMsITEpCnE9UC52ZyhDLnhCLm4oci5lLCIvIik/Ii8iOiIiLHMsIi8iKQpxPXEuY2hhckNv
+ZGVBdCgwKT09MD9xOnF9cmV0dXJuIHF9LAp3OmZ1bmN0aW9uKGEpe3ZhciB0LHMscixxPXRoaXMscD1x
+LnkKaWYocD09bnVsbCl7cD1xLmEKdD1wLmxlbmd0aCE9PTA/cCsiOiI6IiIKcz1xLmMKcj1zPT1udWxs
+CmlmKCFyfHxwPT09ImZpbGUiKXtwPXQrIi8vIgp0PXEuYgppZih0Lmxlbmd0aCE9PTApcD1wK3QrIkAi
+CmlmKCFyKXArPXMKdD1xLmQKaWYodCE9bnVsbClwPXArIjoiK0guZCh0KX1lbHNlIHA9dApwKz1xLmUK
+dD1xLmYKaWYodCE9bnVsbClwPXArIj8iK3QKdD1xLnIKaWYodCE9bnVsbClwPXArIiMiK3QKcD1xLnk9
+cC5jaGFyQ29kZUF0KDApPT0wP3A6cH1yZXR1cm4gcH0sCkROOmZ1bmN0aW9uKGEsYil7dmFyIHQscyxy
+PXRoaXMKaWYoYj09bnVsbClyZXR1cm4hMQppZihyPT09YilyZXR1cm4hMAppZih1LkQuYyhiKSlpZihy
+LmE9PWIuZ0ZpKCkpaWYoci5jIT1udWxsPT09Yi5nY2ooKSlpZihyLmI9PWIuZ2t1KCkpaWYoci5nSmYo
+cik9PWIuZ0pmKGIpKWlmKHIuZ3RwKHIpPT1iLmd0cChiKSlpZihyLmU9PT1iLmdJaShiKSl7dD1yLmYK
+cz10PT1udWxsCmlmKCFzPT09Yi5nUUQoKSl7aWYocyl0PSIiCmlmKHQ9PT1iLmd0UCgpKXt0PXIucgpz
+PXQ9PW51bGwKaWYoIXM9PT1iLmdaOCgpKXtpZihzKXQ9IiIKdD10PT09Yi5nS2EoKX1lbHNlIHQ9ITF9
+ZWxzZSB0PSExfWVsc2UgdD0hMX1lbHNlIHQ9ITEKZWxzZSB0PSExCmVsc2UgdD0hMQplbHNlIHQ9ITEK
+ZWxzZSB0PSExCmVsc2UgdD0hMQplbHNlIHQ9ITEKcmV0dXJuIHR9LApnaU86ZnVuY3Rpb24oYSl7dmFy
+IHQ9dGhpcy56CnJldHVybiB0PT1udWxsP3RoaXMuej1DLnhCLmdpTyh0aGlzLncoMCkpOnR9LApzbzY6
+ZnVuY3Rpb24oYSl7dGhpcy54PXUuYS5iKGEpfSwKc1JIOmZ1bmN0aW9uKGEpe3RoaXMuUT11LmYuYihh
+KX0sCiRpaUQ6MSwKZ0ZpOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYX0sCmdJaTpmdW5jdGlvbihhKXty
+ZXR1cm4gdGhpcy5lfX0KUC5lMS5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXt0aHJvdyBILmIoUC5y
+cigiSW52YWxpZCBwb3J0Iix0aGlzLmEsdGhpcy5iKzEpKX0sCiRTOjExfQpQLk5ZLnByb3RvdHlwZT17
+CiQxOmZ1bmN0aW9uKGEpe3ZhciB0PSJJbGxlZ2FsIHBhdGggY2hhcmFjdGVyICIKSC55KGEpCmlmKEou
+emwoYSwiLyIpKWlmKHRoaXMuYSl0aHJvdyBILmIoUC54WSh0K2EpKQplbHNlIHRocm93IEguYihQLkw0
+KHQrYSkpfSwKJFM6MTF9ClAuUloucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7cmV0dXJuIFAuZVAo
+Qy5aSixhLEMueE0sITEpfSwKJFM6NX0KUC5NRS5wcm90b3R5cGU9ewokMjpmdW5jdGlvbihhLGIpe3Zh
+ciB0PXRoaXMuYixzPXRoaXMuYQp0LmErPXMuYQpzLmE9IiYiCnM9dC5hKz1ILmQoUC5lUChDLkYzLGEs
+Qy54TSwhMCkpCmlmKGIhPW51bGwmJmIubGVuZ3RoIT09MCl7dC5hPXMrIj0iCnQuYSs9SC5kKFAuZVAo
+Qy5GMyxiLEMueE0sITApKX19LAokUzoyMn0KUC55NS5wcm90b3R5cGU9ewokMjpmdW5jdGlvbihhLGIp
+e3ZhciB0LHMKSC55KGEpCmlmKGI9PW51bGx8fHR5cGVvZiBiPT0ic3RyaW5nIil0aGlzLmEuJDIoYSxI
+LnkoYikpCmVsc2UgZm9yKHQ9Si5JVCh1LlIuYihiKSkscz10aGlzLmE7dC5GKCk7KXMuJDIoYSxILnko
+dC5nbCgpKSl9LAokUzoxMn0KUC5QRS5wcm90b3R5cGU9ewpnbFI6ZnVuY3Rpb24oKXt2YXIgdCxzLHIs
+cSxwPXRoaXMsbz1udWxsLG49cC5jCmlmKG4hPW51bGwpcmV0dXJuIG4Kbj1wLmIKaWYoMD49bi5sZW5n
+dGgpcmV0dXJuIEguT0gobiwwKQp0PXAuYQpuPW5bMF0rMQpzPUMueEIuWFUodCwiPyIsbikKcj10Lmxl
+bmd0aAppZihzPj0wKXtxPVAudU8odCxzKzEscixDLlZDLCExKQpyPXN9ZWxzZSBxPW8KcmV0dXJuIHAu
+Yz1uZXcgUC5xZSgiZGF0YSIsbyxvLG8sUC51Tyh0LG4scixDLldkLCExKSxxLG8pfSwKdzpmdW5jdGlv
+bihhKXt2YXIgdCxzPXRoaXMuYgppZigwPj1zLmxlbmd0aClyZXR1cm4gSC5PSChzLDApCnQ9dGhpcy5h
+CnJldHVybiBzWzBdPT09LTE/ImRhdGE6Iit0OnR9fQpQLnEzLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9u
+KGEpe3JldHVybiBuZXcgVWludDhBcnJheSg5Nil9LAokUzo0Nn0KUC55SS5wcm90b3R5cGU9ewokMjpm
+dW5jdGlvbihhLGIpe3ZhciB0PXRoaXMuYQppZihhPj10Lmxlbmd0aClyZXR1cm4gSC5PSCh0LGEpCnQ9
+dFthXQpKLkNNKHQsMCw5NixiKQpyZXR1cm4gdH0sCiRTOjI0fQpQLmM2LnByb3RvdHlwZT17CiQzOmZ1
+bmN0aW9uKGEsYixjKXt2YXIgdCxzLHIscQpmb3IodD1iLmxlbmd0aCxzPWEubGVuZ3RoLHI9MDtyPHQ7
+KytyKXtxPUMueEIuVyhiLHIpXjk2CmlmKHE+PXMpcmV0dXJuIEguT0goYSxxKQphW3FdPWN9fX0KUC5x
+ZC5wcm90b3R5cGU9ewokMzpmdW5jdGlvbihhLGIsYyl7dmFyIHQscyxyLHEKZm9yKHQ9Qy54Qi5XKGIs
+MCkscz1DLnhCLlcoYiwxKSxyPWEubGVuZ3RoO3Q8PXM7Kyt0KXtxPSh0Xjk2KT4+PjAKaWYocT49cily
+ZXR1cm4gSC5PSChhLHEpCmFbcV09Y319fQpQLlVmLnByb3RvdHlwZT17CmdjajpmdW5jdGlvbigpe3Jl
+dHVybiB0aGlzLmM+MH0sCmd4QTpmdW5jdGlvbigpe3ZhciB0LHMKaWYodGhpcy5jPjApe3Q9dGhpcy5k
+CmlmKHR5cGVvZiB0IT09Im51bWJlciIpcmV0dXJuIHQuaCgpCnM9dGhpcy5lCmlmKHR5cGVvZiBzIT09
+Im51bWJlciIpcmV0dXJuIEgucFkocykKcz10KzE8cwp0PXN9ZWxzZSB0PSExCnJldHVybiB0fSwKZ1FE
+OmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5mCmlmKHR5cGVvZiB0IT09Im51bWJlciIpcmV0dXJuIHQuSigp
+CnJldHVybiB0PHRoaXMucn0sCmdaODpmdW5jdGlvbigpe3JldHVybiB0aGlzLnI8dGhpcy5hLmxlbmd0
+aH0sCmdOdzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmI9PT00JiZDLnhCLm4odGhpcy5hLCJmaWxlIil9
+LApndmg6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iPT09NCYmQy54Qi5uKHRoaXMuYSwiaHR0cCIpfSwK
+Z3FCOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuYj09PTUmJkMueEIubih0aGlzLmEsImh0dHBzIil9LApn
+dFQ6ZnVuY3Rpb24oKXtyZXR1cm4gQy54Qi5RaSh0aGlzLmEsIi8iLHRoaXMuZSl9LApnRmk6ZnVuY3Rp
+b24oKXt2YXIgdCxzPXRoaXMscj0icGFja2FnZSIscT1zLmIKaWYocTw9MClyZXR1cm4iIgp0PXMueApp
+Zih0IT1udWxsKXJldHVybiB0CmlmKHMuZ3ZoKCkpcT1zLng9Imh0dHAiCmVsc2UgaWYocy5ncUIoKSl7
+cy54PSJodHRwcyIKcT0iaHR0cHMifWVsc2UgaWYocy5nTncoKSl7cy54PSJmaWxlIgpxPSJmaWxlIn1l
+bHNlIGlmKHE9PT03JiZDLnhCLm4ocy5hLHIpKXtzLng9cgpxPXJ9ZWxzZXtxPUMueEIuTmoocy5hLDAs
+cSkKcy54PXF9cmV0dXJuIHF9LApna3U6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmMscz10aGlzLmIrMwpy
+ZXR1cm4gdD5zP0MueEIuTmoodGhpcy5hLHMsdC0xKToiIn0sCmdKZjpmdW5jdGlvbihhKXt2YXIgdD10
+aGlzLmMKcmV0dXJuIHQ+MD9DLnhCLk5qKHRoaXMuYSx0LHRoaXMuZCk6IiJ9LApndHA6ZnVuY3Rpb24o
+YSl7dmFyIHQscz10aGlzCmlmKHMuZ3hBKCkpe3Q9cy5kCmlmKHR5cGVvZiB0IT09Im51bWJlciIpcmV0
+dXJuIHQuaCgpCnJldHVybiBQLlFBKEMueEIuTmoocy5hLHQrMSxzLmUpLG51bGwsbnVsbCl9aWYocy5n
+dmgoKSlyZXR1cm4gODAKaWYocy5ncUIoKSlyZXR1cm4gNDQzCnJldHVybiAwfSwKZ0lpOmZ1bmN0aW9u
+KGEpe3JldHVybiBDLnhCLk5qKHRoaXMuYSx0aGlzLmUsdGhpcy5mKX0sCmd0UDpmdW5jdGlvbigpe3Zh
+ciB0PXRoaXMuZixzPXRoaXMucgppZih0eXBlb2YgdCE9PSJudW1iZXIiKXJldHVybiB0LkooKQpyZXR1
+cm4gdDxzP0MueEIuTmoodGhpcy5hLHQrMSxzKToiIn0sCmdLYTpmdW5jdGlvbigpe3ZhciB0PXRoaXMu
+cixzPXRoaXMuYQpyZXR1cm4gdDxzLmxlbmd0aD9DLnhCLkcocyx0KzEpOiIifSwKZ0ZqOmZ1bmN0aW9u
+KCl7dmFyIHQscyxyPXRoaXMuZSxxPXRoaXMuZixwPXRoaXMuYQppZihDLnhCLlFpKHAsIi8iLHIpKXtp
+Zih0eXBlb2YgciE9PSJudW1iZXIiKXJldHVybiByLmgoKTsrK3J9aWYocj09cSlyZXR1cm4gQy5kbgp0
+PUguVk0oW10sdS5zKQpzPXIKd2hpbGUoITApe2lmKHR5cGVvZiBzIT09Im51bWJlciIpcmV0dXJuIHMu
+SigpCmlmKHR5cGVvZiBxIT09Im51bWJlciIpcmV0dXJuIEgucFkocSkKaWYoIShzPHEpKWJyZWFrCmlm
+KEMueEIubShwLHMpPT09NDcpe0MuTm0uaSh0LEMueEIuTmoocCxyLHMpKQpyPXMrMX0rK3N9Qy5ObS5p
+KHQsQy54Qi5OaihwLHIscSkpCnJldHVybiBQLkFGKHQsdS5OKX0sCmdoWTpmdW5jdGlvbigpe3ZhciB0
+PXRoaXMuZgppZih0eXBlb2YgdCE9PSJudW1iZXIiKXJldHVybiB0LkooKQppZih0Pj10aGlzLnIpcmV0
+dXJuIEMuV08KcmV0dXJuIG5ldyBQLkdqKFAuV1godGhpcy5ndFAoKSksdS5UKX0sCmtYOmZ1bmN0aW9u
+KGEpe3ZhciB0LHM9dGhpcy5kCmlmKHR5cGVvZiBzIT09Im51bWJlciIpcmV0dXJuIHMuaCgpCnQ9cysx
+CnJldHVybiB0K2EubGVuZ3RoPT09dGhpcy5lJiZDLnhCLlFpKHRoaXMuYSxhLHQpfSwKTjk6ZnVuY3Rp
+b24oKXt2YXIgdD10aGlzLHM9dC5yLHI9dC5hCmlmKHM+PXIubGVuZ3RoKXJldHVybiB0CnJldHVybiBu
+ZXcgUC5VZihDLnhCLk5qKHIsMCxzKSx0LmIsdC5jLHQuZCx0LmUsdC5mLHMsdC54KX0sCm5tOmZ1bmN0
+aW9uKGEsYil7dmFyIHQscyxyLHEscCxvLG4sbSxsLGssaixpPXRoaXMsaD1udWxsCnUuWC5iKG51bGwp
+CnUuYi5iKGIpCnQ9aS5nRmkoKQpzPXQ9PT0iZmlsZSIKcj1pLmMKcT1yPjA/Qy54Qi5OaihpLmEsaS5i
+KzMscik6IiIKcD1pLmd4QSgpP2kuZ3RwKGkpOmgKcj1pLmMKaWYocj4wKW89Qy54Qi5OaihpLmEscixp
+LmQpCmVsc2Ugbz1xLmxlbmd0aCE9PTB8fHAhPW51bGx8fHM/IiI6aApyPWkuYQpuPWkuZgptPUMueEIu
+TmoocixpLmUsbikKaWYoIXMpbD1vIT1udWxsJiZtLmxlbmd0aCE9PTAKZWxzZSBsPSEwCmlmKGwmJiFD
+LnhCLm4obSwiLyIpKW09Ii8iK20KaWYoYiE9bnVsbClrPVAubGUoaCwwLDAsYikKZWxzZXtsPWkucgpp
+Zih0eXBlb2YgbiE9PSJudW1iZXIiKXJldHVybiBuLkooKQprPW48bD9DLnhCLk5qKHIsbisxLGwpOmh9
+bj1pLnIKaj1uPHIubGVuZ3RoP0MueEIuRyhyLG4rMSk6aApyZXR1cm4gbmV3IFAuRG4odCxxLG8scCxt
+LGssail9LApaSTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5tUyhQLmhLKGEpKX0sCm1TOmZ1bmN0aW9u
+KGEpe2lmKGEgaW5zdGFuY2VvZiBQLlVmKXJldHVybiB0aGlzLnUxKHRoaXMsYSkKcmV0dXJuIHRoaXMu
+UmUoKS5tUyhhKX0sCnUxOmZ1bmN0aW9uKGEsYil7dmFyIHQscyxyLHEscCxvLG4sbSxsLGssaixpLGgs
+ZyxmLGU9Yi5iCmlmKGU+MClyZXR1cm4gYgp0PWIuYwppZih0PjApe3M9YS5iCmlmKHM8PTApcmV0dXJu
+IGIKaWYoYS5nTncoKSlyPWIuZSE9Yi5mCmVsc2UgaWYoYS5ndmgoKSlyPSFiLmtYKCI4MCIpCmVsc2Ug
+cj0hYS5ncUIoKXx8IWIua1goIjQ0MyIpCmlmKHIpe3E9cysxCnA9Qy54Qi5OaihhLmEsMCxxKStDLnhC
+LkcoYi5hLGUrMSkKZT1iLmQKaWYodHlwZW9mIGUhPT0ibnVtYmVyIilyZXR1cm4gZS5oKCkKbz1iLmUK
+aWYodHlwZW9mIG8hPT0ibnVtYmVyIilyZXR1cm4gby5oKCkKbj1iLmYKaWYodHlwZW9mIG4hPT0ibnVt
+YmVyIilyZXR1cm4gbi5oKCkKcmV0dXJuIG5ldyBQLlVmKHAscyx0K3EsZStxLG8rcSxuK3EsYi5yK3Es
+YS54KX1lbHNlIHJldHVybiB0aGlzLlJlKCkubVMoYil9bT1iLmUKZT1iLmYKaWYobT09ZSl7dD1iLnIK
+aWYodHlwZW9mIGUhPT0ibnVtYmVyIilyZXR1cm4gZS5KKCkKaWYoZTx0KXtzPWEuZgppZih0eXBlb2Yg
+cyE9PSJudW1iZXIiKXJldHVybiBzLkhOKCkKcT1zLWUKcmV0dXJuIG5ldyBQLlVmKEMueEIuTmooYS5h
+LDAscykrQy54Qi5HKGIuYSxlKSxhLmIsYS5jLGEuZCxhLmUsZStxLHQrcSxhLngpfWU9Yi5hCmlmKHQ8
+ZS5sZW5ndGgpe3M9YS5yCnJldHVybiBuZXcgUC5VZihDLnhCLk5qKGEuYSwwLHMpK0MueEIuRyhlLHQp
+LGEuYixhLmMsYS5kLGEuZSxhLmYsdCsocy10KSxhLngpfXJldHVybiBhLk45KCl9dD1iLmEKaWYoQy54
+Qi5RaSh0LCIvIixtKSl7cz1hLmUKaWYodHlwZW9mIHMhPT0ibnVtYmVyIilyZXR1cm4gcy5ITigpCmlm
+KHR5cGVvZiBtIT09Im51bWJlciIpcmV0dXJuIEgucFkobSkKcT1zLW0KcD1DLnhCLk5qKGEuYSwwLHMp
+K0MueEIuRyh0LG0pCmlmKHR5cGVvZiBlIT09Im51bWJlciIpcmV0dXJuIGUuaCgpCnJldHVybiBuZXcg
+UC5VZihwLGEuYixhLmMsYS5kLHMsZStxLGIucitxLGEueCl9bD1hLmUKaz1hLmYKaWYobD09ayYmYS5j
+PjApe2Zvcig7Qy54Qi5RaSh0LCIuLi8iLG0pOyl7aWYodHlwZW9mIG0hPT0ibnVtYmVyIilyZXR1cm4g
+bS5oKCkKbSs9M31pZih0eXBlb2YgbCE9PSJudW1iZXIiKXJldHVybiBsLkhOKCkKaWYodHlwZW9mIG0h
+PT0ibnVtYmVyIilyZXR1cm4gSC5wWShtKQpxPWwtbSsxCnA9Qy54Qi5OaihhLmEsMCxsKSsiLyIrQy54
+Qi5HKHQsbSkKaWYodHlwZW9mIGUhPT0ibnVtYmVyIilyZXR1cm4gZS5oKCkKcmV0dXJuIG5ldyBQLlVm
+KHAsYS5iLGEuYyxhLmQsbCxlK3EsYi5yK3EsYS54KX1qPWEuYQpmb3IoaT1sO0MueEIuUWkoaiwiLi4v
+IixpKTspe2lmKHR5cGVvZiBpIT09Im51bWJlciIpcmV0dXJuIGkuaCgpCmkrPTN9aD0wCndoaWxlKCEw
+KXtpZih0eXBlb2YgbSE9PSJudW1iZXIiKXJldHVybiBtLmgoKQpnPW0rMwppZih0eXBlb2YgZSE9PSJu
+dW1iZXIiKXJldHVybiBILnBZKGUpCmlmKCEoZzw9ZSYmQy54Qi5RaSh0LCIuLi8iLG0pKSlicmVhazsr
+K2gKbT1nfWY9IiIKd2hpbGUoITApe2lmKHR5cGVvZiBrIT09Im51bWJlciIpcmV0dXJuIGsub3MoKQpp
+Zih0eXBlb2YgaSE9PSJudW1iZXIiKXJldHVybiBILnBZKGkpCmlmKCEoaz5pKSlicmVhazstLWsKaWYo
+Qy54Qi5tKGosayk9PT00Nyl7aWYoaD09PTApe2Y9Ii8iCmJyZWFrfS0taApmPSIvIn19aWYoaz09PWkm
+JmEuYjw9MCYmIUMueEIuUWkoaiwiLyIsbCkpe20tPWgqMwpmPSIifXE9ay1tK2YubGVuZ3RoCnJldHVy
+biBuZXcgUC5VZihDLnhCLk5qKGosMCxrKStmK0MueEIuRyh0LG0pLGEuYixhLmMsYS5kLGwsZStxLGIu
+citxLGEueCl9LAp0NDpmdW5jdGlvbigpe3ZhciB0LHMscixxLHA9dGhpcwppZihwLmI+PTAmJiFwLmdO
+dygpKXRocm93IEguYihQLkw0KCJDYW5ub3QgZXh0cmFjdCBhIGZpbGUgcGF0aCBmcm9tIGEgIitILmQo
+cC5nRmkoKSkrIiBVUkkiKSkKdD1wLmYKcz1wLmEKaWYodHlwZW9mIHQhPT0ibnVtYmVyIilyZXR1cm4g
+dC5KKCkKaWYodDxzLmxlbmd0aCl7aWYodDxwLnIpdGhyb3cgSC5iKFAuTDQoIkNhbm5vdCBleHRyYWN0
+IGEgZmlsZSBwYXRoIGZyb20gYSBVUkkgd2l0aCBhIHF1ZXJ5IGNvbXBvbmVudCIpKQp0aHJvdyBILmIo
+UC5MNCgiQ2Fubm90IGV4dHJhY3QgYSBmaWxlIHBhdGggZnJvbSBhIFVSSSB3aXRoIGEgZnJhZ21lbnQg
+Y29tcG9uZW50IikpfXI9JC53USgpCmlmKEgub1QocikpdD1QLm1uKHApCmVsc2V7cT1wLmQKaWYodHlw
+ZW9mIHEhPT0ibnVtYmVyIilyZXR1cm4gSC5wWShxKQppZihwLmM8cSlILnZoKFAuTDQoIkNhbm5vdCBl
+eHRyYWN0IGEgbm9uLVdpbmRvd3MgZmlsZSBwYXRoIGZyb20gYSBmaWxlIFVSSSB3aXRoIGFuIGF1dGhv
+cml0eSIpKQp0PUMueEIuTmoocyxwLmUsdCl9cmV0dXJuIHR9LApnaU86ZnVuY3Rpb24oYSl7dmFyIHQ9
+dGhpcy55CnJldHVybiB0PT1udWxsP3RoaXMueT1DLnhCLmdpTyh0aGlzLmEpOnR9LApETjpmdW5jdGlv
+bihhLGIpe2lmKGI9PW51bGwpcmV0dXJuITEKaWYodGhpcz09PWIpcmV0dXJuITAKcmV0dXJuIHUuRC5j
+KGIpJiZ0aGlzLmE9PT1iLncoMCl9LApSZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMscz1udWxsLHI9dC5n
+RmkoKSxxPXQuZ2t1KCkscD10LmM+MD90LmdKZih0KTpzLG89dC5neEEoKT90Lmd0cCh0KTpzLG49dC5h
+LG09dC5mLGw9Qy54Qi5OaihuLHQuZSxtKSxrPXQucgppZih0eXBlb2YgbSE9PSJudW1iZXIiKXJldHVy
+biBtLkooKQptPW08az90Lmd0UCgpOnMKcmV0dXJuIG5ldyBQLkRuKHIscSxwLG8sbCxtLGs8bi5sZW5n
+dGg/dC5nS2EoKTpzKX0sCnc6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYX0sCiRpaUQ6MX0KUC5xZS5w
+cm90b3R5cGU9e30KVy5xRS5wcm90b3R5cGU9e30KVy5HaC5wcm90b3R5cGU9ewp3OmZ1bmN0aW9uKGEp
+e3JldHVybiBTdHJpbmcoYSl9LAokaUdoOjF9ClcuZlkucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXty
+ZXR1cm4gU3RyaW5nKGEpfX0KVy5uQi5wcm90b3R5cGU9eyRpbkI6MX0KVy5Bei5wcm90b3R5cGU9eyRp
+QXo6MX0KVy5RUC5wcm90b3R5cGU9eyRpUVA6MX0KVy5ueC5wcm90b3R5cGU9ewpnQTpmdW5jdGlvbihh
+KXtyZXR1cm4gYS5sZW5ndGh9fQpXLm9KLnByb3RvdHlwZT17CmdBOmZ1bmN0aW9uKGEpe3JldHVybiBh
+Lmxlbmd0aH19ClcuaWQucHJvdG90eXBlPXt9ClcuUUYucHJvdG90eXBlPXt9ClcuTmgucHJvdG90eXBl
+PXsKdzpmdW5jdGlvbihhKXtyZXR1cm4gU3RyaW5nKGEpfX0KVy5JQi5wcm90b3R5cGU9ewp3OmZ1bmN0
+aW9uKGEpe3JldHVybiJSZWN0YW5nbGUgKCIrSC5kKGEubGVmdCkrIiwgIitILmQoYS50b3ApKyIpICIr
+SC5kKGEud2lkdGgpKyIgeCAiK0guZChhLmhlaWdodCl9LApETjpmdW5jdGlvbihhLGIpe2lmKGI9PW51
+bGwpcmV0dXJuITEKcmV0dXJuIHUucS5jKGIpJiZhLmxlZnQ9PT1iLmxlZnQmJmEudG9wPT09Yi50b3Am
+JmEud2lkdGg9PT1iLndpZHRoJiZhLmhlaWdodD09PWIuaGVpZ2h0fSwKZ2lPOmZ1bmN0aW9uKGEpe3Jl
+dHVybiBXLnJFKEMuQ0QuZ2lPKGEubGVmdCksQy5DRC5naU8oYS50b3ApLEMuQ0QuZ2lPKGEud2lkdGgp
+LEMuQ0QuZ2lPKGEuaGVpZ2h0KSl9LAokaXRuOjF9ClcubjcucHJvdG90eXBlPXsKZ0E6ZnVuY3Rpb24o
+YSl7cmV0dXJuIGEubGVuZ3RofX0KVy53ei5wcm90b3R5cGU9ewpnQTpmdW5jdGlvbihhKXtyZXR1cm4g
+dGhpcy5hLmxlbmd0aH0sCnE6ZnVuY3Rpb24oYSxiKXt2YXIgdApILlNjKGIpCnQ9dGhpcy5hCmlmKGI8
+MHx8Yj49dC5sZW5ndGgpcmV0dXJuIEguT0godCxiKQpyZXR1cm4gdGhpcy4kdGkuZC5iKHRbYl0pfSwK
+WTpmdW5jdGlvbihhLGIsYyl7dGhpcy4kdGkuZC5iKGMpCnRocm93IEguYihQLkw0KCJDYW5ub3QgbW9k
+aWZ5IGxpc3QiKSl9fQpXLmN2LnByb3RvdHlwZT17CmdRZzpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IFcu
+aTcoYSl9LApnRDpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IFcuSTQoYSl9LApzRDpmdW5jdGlvbihhLGIp
+e3ZhciB0CnUuWC5iKGIpCnQ9dGhpcy5nRChhKQp0LlYxKDApCnQuRlYoMCxiKX0sCnc6ZnVuY3Rpb24o
+YSl7cmV0dXJuIGEubG9jYWxOYW1lfSwKdG46ZnVuY3Rpb24oYSl7dmFyIHQ9ISFhLnNjcm9sbEludG9W
+aWV3SWZOZWVkZWQKaWYodClhLnNjcm9sbEludG9WaWV3SWZOZWVkZWQoKQplbHNlIGEuc2Nyb2xsSW50
+b1ZpZXcoKX0sCnI2OmZ1bmN0aW9uKGEsYixjLGQpe3ZhciB0LHMscixxCmlmKGM9PW51bGwpe2lmKGQ9
+PW51bGwpe3Q9JC5sdAppZih0PT1udWxsKXt0PUguVk0oW10sdS5rKQpzPW5ldyBXLnZEKHQpCkMuTm0u
+aSh0LFcuVHcobnVsbCkpCkMuTm0uaSh0LFcuQmwoKSkKJC5sdD1zCmQ9c31lbHNlIGQ9dH10PSQuRVUK
+aWYodD09bnVsbCl7dD1uZXcgVy5LbyhkKQokLkVVPXQKYz10fWVsc2V7dC5hPWQKYz10fX1lbHNlIGlm
+KGQhPW51bGwpdGhyb3cgSC5iKFAueFkoInZhbGlkYXRvciBjYW4gb25seSBiZSBwYXNzZWQgaWYgdHJl
+ZVNhbml0aXplciBpcyBudWxsIikpCmlmKCQueG89PW51bGwpe3Q9ZG9jdW1lbnQKcz10LmltcGxlbWVu
+dGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiIikKJC54bz1zCiQuQk89cy5jcmVhdGVSYW5nZSgpCnM9
+JC54by5jcmVhdGVFbGVtZW50KCJiYXNlIikKdS5jUi5iKHMpCnMuaHJlZj10LmJhc2VVUkkKJC54by5o
+ZWFkLmFwcGVuZENoaWxkKHMpfXQ9JC54bwppZih0LmJvZHk9PW51bGwpe3M9dC5jcmVhdGVFbGVtZW50
+KCJib2R5IikKdC5ib2R5PXUuWS5iKHMpfXQ9JC54bwppZih1LlkuYyhhKSlyPXQuYm9keQplbHNle3I9
+dC5jcmVhdGVFbGVtZW50KGEudGFnTmFtZSkKJC54by5ib2R5LmFwcGVuZENoaWxkKHIpfWlmKCJjcmVh
+dGVDb250ZXh0dWFsRnJhZ21lbnQiIGluIHdpbmRvdy5SYW5nZS5wcm90b3R5cGUmJiFDLk5tLnRnKEMu
+U3EsYS50YWdOYW1lKSl7JC5CTy5zZWxlY3ROb2RlQ29udGVudHMocikKcT0kLkJPLmNyZWF0ZUNvbnRl
+eHR1YWxGcmFnbWVudChiKX1lbHNle3IuaW5uZXJIVE1MPWIKcT0kLnhvLmNyZWF0ZURvY3VtZW50RnJh
+Z21lbnQoKQpmb3IoO3Q9ci5maXJzdENoaWxkLHQhPW51bGw7KXEuYXBwZW5kQ2hpbGQodCl9dD0kLnhv
+LmJvZHkKaWYocj09bnVsbD90IT1udWxsOnIhPT10KUouTHQocikKYy5QbihxKQpkb2N1bWVudC5hZG9w
+dE5vZGUocSkKcmV0dXJuIHF9LApBSDpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIHRoaXMucjYoYSxiLGMs
+bnVsbCl9LApzaGY6ZnVuY3Rpb24oYSxiKXt0aGlzLllDKGEsYil9LApwazpmdW5jdGlvbihhLGIsYyl7
+YS50ZXh0Q29udGVudD1udWxsCmEuYXBwZW5kQ2hpbGQodGhpcy5yNihhLGIsbnVsbCxjKSl9LApZQzpm
+dW5jdGlvbihhLGIpe3JldHVybiB0aGlzLnBrKGEsYixudWxsKX0sCmdWbDpmdW5jdGlvbihhKXtyZXR1
+cm4gbmV3IFcuQ3EoYSwiY2xpY2siLCExLHUuUSl9LAokaWN2OjEsCmduczpmdW5jdGlvbihhKXtyZXR1
+cm4gYS50YWdOYW1lfX0KVy5Ddi5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXtyZXR1cm4gdS5oLmMo
+dS5BLmIoYSkpfSwKJFM6MjV9ClcuZWEucHJvdG90eXBlPXskaWVhOjF9ClcuRDAucHJvdG90eXBlPXsK
+T246ZnVuY3Rpb24oYSxiLGMsZCl7dS5VLmIoYykKaWYoYyE9bnVsbCl0aGlzLnYoYSxiLGMsZCl9LApC
+OmZ1bmN0aW9uKGEsYixjKXtyZXR1cm4gdGhpcy5PbihhLGIsYyxudWxsKX0sCnY6ZnVuY3Rpb24oYSxi
+LGMsZCl7cmV0dXJuIGEuYWRkRXZlbnRMaXN0ZW5lcihiLEgudFIodS5VLmIoYyksMSksZCl9LAokaUQw
+OjF9ClcuVDUucHJvdG90eXBlPXskaVQ1OjF9ClcuaDQucHJvdG90eXBlPXsKZ0E6ZnVuY3Rpb24oYSl7
+cmV0dXJuIGEubGVuZ3RofX0KVy5ici5wcm90b3R5cGU9ewpnQTpmdW5jdGlvbihhKXtyZXR1cm4gYS5s
+ZW5ndGh9fQpXLlZiLnByb3RvdHlwZT17fQpXLk83LnByb3RvdHlwZT17CmVvOmZ1bmN0aW9uKGEsYixj
+LGQpe3JldHVybiBhLm9wZW4oYixjLCEwKX0sCiRpTzc6MX0KVy5iVS5wcm90b3R5cGU9ewokMjpmdW5j
+dGlvbihhLGIpe3RoaXMuYS5zZXRSZXF1ZXN0SGVhZGVyKEgueShhKSxILnkoYikpfSwKJFM6MTB9Clcu
+aEgucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dmFyIHQscyxyLHEscAp1LnAuYihhKQp0PXRoaXMu
+YQpzPXQuc3RhdHVzCmlmKHR5cGVvZiBzIT09Im51bWJlciIpcmV0dXJuIHMudEIoKQpyPXM+PTIwMCYm
+czwzMDAKcT1zPjMwNyYmczw0MDAKcz1yfHxzPT09MHx8cz09PTMwNHx8cQpwPXRoaXMuYgppZihzKXAu
+YU0oMCx0KQplbHNlIHAucG0oYSl9LAokUzoyN30KVy53YS5wcm90b3R5cGU9e30KVy5TZy5wcm90b3R5
+cGU9eyRpU2c6MX0KVy51OC5wcm90b3R5cGU9ewpnRHI6ZnVuY3Rpb24oYSl7aWYoIm9yaWdpbiIgaW4g
+YSlyZXR1cm4gYS5vcmlnaW4KcmV0dXJuIEguZChhLnByb3RvY29sKSsiLy8iK0guZChhLmhvc3QpfSwK
+dzpmdW5jdGlvbihhKXtyZXR1cm4gU3RyaW5nKGEpfSwKJGl1ODoxfQpXLkFqLnByb3RvdHlwZT17JGlB
+ajoxfQpXLmU3LnByb3RvdHlwZT17CmdyODpmdW5jdGlvbihhKXt2YXIgdD10aGlzLmEscz10LmNoaWxk
+Tm9kZXMubGVuZ3RoCmlmKHM9PT0wKXRocm93IEguYihQLlBWKCJObyBlbGVtZW50cyIpKQppZihzPjEp
+dGhyb3cgSC5iKFAuUFYoIk1vcmUgdGhhbiBvbmUgZWxlbWVudCIpKQpyZXR1cm4gdC5maXJzdENoaWxk
+fSwKRlY6ZnVuY3Rpb24oYSxiKXt2YXIgdCxzLHIscQp1LmVoLmIoYikKdD1iLmEKcz10aGlzLmEKaWYo
+dCE9PXMpZm9yKHI9dC5jaGlsZE5vZGVzLmxlbmd0aCxxPTA7cTxyOysrcSlzLmFwcGVuZENoaWxkKHQu
+Zmlyc3RDaGlsZCkKcmV0dXJufSwKWTpmdW5jdGlvbihhLGIsYyl7dmFyIHQscwp1LkEuYihjKQp0PXRo
+aXMuYQpzPXQuY2hpbGROb2RlcwppZihiPDB8fGI+PXMubGVuZ3RoKXJldHVybiBILk9IKHMsYikKdC5y
+ZXBsYWNlQ2hpbGQoYyxzW2JdKX0sCmdrejpmdW5jdGlvbihhKXt2YXIgdD10aGlzLmEuY2hpbGROb2Rl
+cwpyZXR1cm4gbmV3IFcuVzkodCx0Lmxlbmd0aCxILnpLKHQpLkMoIlc5PEdtLkU+IikpfSwKZ0E6ZnVu
+Y3Rpb24oYSl7cmV0dXJuIHRoaXMuYS5jaGlsZE5vZGVzLmxlbmd0aH0sCnE6ZnVuY3Rpb24oYSxiKXt2
+YXIgdApILlNjKGIpCnQ9dGhpcy5hLmNoaWxkTm9kZXMKaWYoYjwwfHxiPj10Lmxlbmd0aClyZXR1cm4g
+SC5PSCh0LGIpCnJldHVybiB0W2JdfX0KVy51SC5wcm90b3R5cGU9ewp3ZzpmdW5jdGlvbihhKXt2YXIg
+dD1hLnBhcmVudE5vZGUKaWYodCE9bnVsbCl0LnJlbW92ZUNoaWxkKGEpfSwKRDQ6ZnVuY3Rpb24oYSl7
+dmFyIHQKZm9yKDt0PWEuZmlyc3RDaGlsZCx0IT1udWxsOylhLnJlbW92ZUNoaWxkKHQpfSwKdzpmdW5j
+dGlvbihhKXt2YXIgdD1hLm5vZGVWYWx1ZQpyZXR1cm4gdD09bnVsbD90aGlzLlUoYSk6dH0sCiRpdUg6
+MX0KVy5CSC5wcm90b3R5cGU9ewpnQTpmdW5jdGlvbihhKXtyZXR1cm4gYS5sZW5ndGh9LApxOmZ1bmN0
+aW9uKGEsYil7SC5TYyhiKQppZihiPj4+MCE9PWJ8fGI+PWEubGVuZ3RoKXRocm93IEguYihQLkNmKGIs
+YSxudWxsLG51bGwsbnVsbCkpCnJldHVybiBhW2JdfSwKWTpmdW5jdGlvbihhLGIsYyl7dS5BLmIoYykK
+dGhyb3cgSC5iKFAuTDQoIkNhbm5vdCBhc3NpZ24gZWxlbWVudCBvZiBpbW11dGFibGUgTGlzdC4iKSl9
+LApFOmZ1bmN0aW9uKGEsYil7aWYoYjwwfHxiPj1hLmxlbmd0aClyZXR1cm4gSC5PSChhLGIpCnJldHVy
+biBhW2JdfSwKJGlYajoxLAokaWNYOjEsCiRpek06MX0KVy5TTi5wcm90b3R5cGU9e30KVy5ldy5wcm90
+b3R5cGU9eyRpZXc6MX0KVy5scC5wcm90b3R5cGU9ewpnQTpmdW5jdGlvbihhKXtyZXR1cm4gYS5sZW5n
+dGh9fQpXLlRiLnByb3RvdHlwZT17CnI2OmZ1bmN0aW9uKGEsYixjLGQpe3ZhciB0LHMKaWYoImNyZWF0
+ZUNvbnRleHR1YWxGcmFnbWVudCIgaW4gd2luZG93LlJhbmdlLnByb3RvdHlwZSlyZXR1cm4gdGhpcy5E
+VyhhLGIsYyxkKQp0PVcuVTkoIjx0YWJsZT4iK0guZChiKSsiPC90YWJsZT4iLGMsZCkKcz1kb2N1bWVu
+dC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkKcy50b1N0cmluZwp0LnRvU3RyaW5nCm5ldyBXLmU3KHMp
+LkZWKDAsbmV3IFcuZTcodCkpCnJldHVybiBzfX0KVy5Jdi5wcm90b3R5cGU9ewpyNjpmdW5jdGlvbihh
+LGIsYyxkKXt2YXIgdCxzLHIscQppZigiY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50IiBpbiB3aW5kb3cu
+UmFuZ2UucHJvdG90eXBlKXJldHVybiB0aGlzLkRXKGEsYixjLGQpCnQ9ZG9jdW1lbnQKcz10LmNyZWF0
+ZURvY3VtZW50RnJhZ21lbnQoKQp0PUMuSWUucjYodC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpLGIsYyxk
+KQp0LnRvU3RyaW5nCnQ9bmV3IFcuZTcodCkKcj10LmdyOCh0KQpyLnRvU3RyaW5nCnQ9bmV3IFcuZTco
+cikKcT10LmdyOCh0KQpzLnRvU3RyaW5nCnEudG9TdHJpbmcKbmV3IFcuZTcocykuRlYoMCxuZXcgVy5l
+NyhxKSkKcmV0dXJuIHN9fQpXLkJULnByb3RvdHlwZT17CnI2OmZ1bmN0aW9uKGEsYixjLGQpe3ZhciB0
+LHMscgppZigiY3JlYXRlQ29udGV4dHVhbEZyYWdtZW50IiBpbiB3aW5kb3cuUmFuZ2UucHJvdG90eXBl
+KXJldHVybiB0aGlzLkRXKGEsYixjLGQpCnQ9ZG9jdW1lbnQKcz10LmNyZWF0ZURvY3VtZW50RnJhZ21l
+bnQoKQp0PUMuSWUucjYodC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpLGIsYyxkKQp0LnRvU3RyaW5nCnQ9
+bmV3IFcuZTcodCkKcj10LmdyOCh0KQpzLnRvU3RyaW5nCnIudG9TdHJpbmcKbmV3IFcuZTcocykuRlYo
+MCxuZXcgVy5lNyhyKSkKcmV0dXJuIHN9fQpXLnlZLnByb3RvdHlwZT17CnBrOmZ1bmN0aW9uKGEsYixj
+KXt2YXIgdCxzCmEudGV4dENvbnRlbnQ9bnVsbAp0PWEuY29udGVudAp0LnRvU3RyaW5nCkouYlQodCkK
+cz10aGlzLnI2KGEsYixudWxsLGMpCmEuY29udGVudC5hcHBlbmRDaGlsZChzKX0sCllDOmZ1bmN0aW9u
+KGEsYil7cmV0dXJuIHRoaXMucGsoYSxiLG51bGwpfSwKJGl5WToxfQpXLnc2LnByb3RvdHlwZT17fQpX
+Lks1LnByb3RvdHlwZT17CmdtVzpmdW5jdGlvbihhKXtyZXR1cm4gYS5sb2NhdGlvbn0sCiRpSzU6MSwK
+JGl2NjoxfQpXLkNtLnByb3RvdHlwZT17JGlDbToxfQpXLkNRLnByb3RvdHlwZT17JGlDUToxfQpXLnc0
+LnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7cmV0dXJuIlJlY3RhbmdsZSAoIitILmQoYS5sZWZ0KSsi
+LCAiK0guZChhLnRvcCkrIikgIitILmQoYS53aWR0aCkrIiB4ICIrSC5kKGEuaGVpZ2h0KX0sCkROOmZ1
+bmN0aW9uKGEsYil7aWYoYj09bnVsbClyZXR1cm4hMQpyZXR1cm4gdS5xLmMoYikmJmEubGVmdD09PWIu
+bGVmdCYmYS50b3A9PT1iLnRvcCYmYS53aWR0aD09PWIud2lkdGgmJmEuaGVpZ2h0PT09Yi5oZWlnaHR9
+LApnaU86ZnVuY3Rpb24oYSl7cmV0dXJuIFcuckUoQy5DRC5naU8oYS5sZWZ0KSxDLkNELmdpTyhhLnRv
+cCksQy5DRC5naU8oYS53aWR0aCksQy5DRC5naU8oYS5oZWlnaHQpKX19ClcucmgucHJvdG90eXBlPXsK
+Z0E6ZnVuY3Rpb24oYSl7cmV0dXJuIGEubGVuZ3RofSwKcTpmdW5jdGlvbihhLGIpe0guU2MoYikKaWYo
+Yj4+PjAhPT1ifHxiPj1hLmxlbmd0aCl0aHJvdyBILmIoUC5DZihiLGEsbnVsbCxudWxsLG51bGwpKQpy
+ZXR1cm4gYVtiXX0sClk6ZnVuY3Rpb24oYSxiLGMpe3UuQS5iKGMpCnRocm93IEguYihQLkw0KCJDYW5u
+b3QgYXNzaWduIGVsZW1lbnQgb2YgaW1tdXRhYmxlIExpc3QuIikpfSwKRTpmdW5jdGlvbihhLGIpe2lm
+KGI8MHx8Yj49YS5sZW5ndGgpcmV0dXJuIEguT0goYSxiKQpyZXR1cm4gYVtiXX0sCiRpWGo6MSwKJGlj
+WDoxLAokaXpNOjF9ClcuY2YucHJvdG90eXBlPXsKSzpmdW5jdGlvbihhLGIpe3ZhciB0LHMscixxLHAK
+dS5FLmIoYikKZm9yKHQ9dGhpcy5nVigpLHM9dC5sZW5ndGgscj10aGlzLmEscT0wO3E8dC5sZW5ndGg7
+dC5sZW5ndGg9PT1zfHwoMCxILmxrKSh0KSwrK3Epe3A9dFtxXQpiLiQyKHAsci5nZXRBdHRyaWJ1dGUo
+cCkpfX0sCmdWOmZ1bmN0aW9uKCl7dmFyIHQscyxyLHEscD10aGlzLmEuYXR0cmlidXRlcyxvPUguVk0o
+W10sdS5zKQpmb3IodD1wLmxlbmd0aCxzPXUuaDkscj0wO3I8dDsrK3Ipe2lmKHI+PXAubGVuZ3RoKXJl
+dHVybiBILk9IKHAscikKcT1zLmIocFtyXSkKaWYocS5uYW1lc3BhY2VVUkk9PW51bGwpQy5ObS5pKG8s
+cS5uYW1lKX1yZXR1cm4gb319ClcuaTcucHJvdG90eXBlPXsKcTpmdW5jdGlvbihhLGIpe3JldHVybiB0
+aGlzLmEuZ2V0QXR0cmlidXRlKEgueShiKSl9LApZOmZ1bmN0aW9uKGEsYixjKXt0aGlzLmEuc2V0QXR0
+cmlidXRlKGIsYyl9LApnQTpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5nVigpLmxlbmd0aH19ClcuU3ku
+cHJvdG90eXBlPXsKcTpmdW5jdGlvbihhLGIpe3JldHVybiB0aGlzLmEuYS5nZXRBdHRyaWJ1dGUoImRh
+dGEtIit0aGlzLk8oSC55KGIpKSl9LApZOmZ1bmN0aW9uKGEsYixjKXt0aGlzLmEuYS5zZXRBdHRyaWJ1
+dGUoImRhdGEtIit0aGlzLk8oYiksYyl9LApLOmZ1bmN0aW9uKGEsYil7dGhpcy5hLksoMCxuZXcgVy5L
+Uyh0aGlzLHUuRS5iKGIpKSl9LApnVjpmdW5jdGlvbigpe3ZhciB0PUguVk0oW10sdS5zKQp0aGlzLmEu
+SygwLG5ldyBXLkEzKHRoaXMsdCkpCnJldHVybiB0fSwKZ0E6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMu
+Z1YoKS5sZW5ndGh9LAprOmZ1bmN0aW9uKGEpe3ZhciB0LHMscj1ILlZNKGEuc3BsaXQoIi0iKSx1LnMp
+CmZvcih0PTE7dDxyLmxlbmd0aDsrK3Qpe3M9clt0XQppZihzLmxlbmd0aD4wKUMuTm0uWShyLHQsc1sw
+XS50b1VwcGVyQ2FzZSgpK0ouS1YocywxKSl9cmV0dXJuIEMuTm0uSChyLCIiKX0sCk86ZnVuY3Rpb24o
+YSl7dmFyIHQscyxyLHEscApmb3IodD1hLmxlbmd0aCxzPTAscj0iIjtzPHQ7KytzKXtxPWFbc10KcD1x
+LnRvTG93ZXJDYXNlKCkKcj0ocSE9PXAmJnM+MD9yKyItIjpyKStwfXJldHVybiByLmNoYXJDb2RlQXQo
+MCk9PTA/cjpyfX0KVy5LUy5wcm90b3R5cGU9ewokMjpmdW5jdGlvbihhLGIpe2lmKEouclkoYSkubihh
+LCJkYXRhLSIpKXRoaXMuYi4kMih0aGlzLmEuayhDLnhCLkcoYSw1KSksYil9LAokUzoxMH0KVy5BMy5w
+cm90b3R5cGU9ewokMjpmdW5jdGlvbihhLGIpe2lmKEouclkoYSkubihhLCJkYXRhLSIpKUMuTm0uaSh0
+aGlzLmIsdGhpcy5hLmsoQy54Qi5HKGEsNSkpKX0sCiRTOjEwfQpXLkk0LnByb3RvdHlwZT17ClA6ZnVu
+Y3Rpb24oKXt2YXIgdCxzLHIscSxwPVAuTHModS5OKQpmb3IodD10aGlzLmEuY2xhc3NOYW1lLnNwbGl0
+KCIgIikscz10Lmxlbmd0aCxyPTA7cjxzOysrcil7cT1KLlQwKHRbcl0pCmlmKHEubGVuZ3RoIT09MClw
+LmkoMCxxKX1yZXR1cm4gcH0sClg6ZnVuY3Rpb24oYSl7dGhpcy5hLmNsYXNzTmFtZT11LkMuYihhKS5I
+KDAsIiAiKX0sCmdBOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmEuY2xhc3NMaXN0Lmxlbmd0aH0sClYx
+OmZ1bmN0aW9uKGEpe3RoaXMuYS5jbGFzc05hbWU9IiJ9LAp0ZzpmdW5jdGlvbihhLGIpe3ZhciB0PXRo
+aXMuYS5jbGFzc0xpc3QuY29udGFpbnMoYikKcmV0dXJuIHR9LAppOmZ1bmN0aW9uKGEsYil7dmFyIHQ9
+dGhpcy5hLmNsYXNzTGlzdCxzPXQuY29udGFpbnMoYikKdC5hZGQoYikKcmV0dXJuIXN9LApSOmZ1bmN0
+aW9uKGEsYil7dmFyIHQ9dGhpcy5hLmNsYXNzTGlzdCxzPXQuY29udGFpbnMoYikKdC5yZW1vdmUoYikK
+cmV0dXJuIHN9LApGVjpmdW5jdGlvbihhLGIpe1cuVE4odGhpcy5hLHUuWC5iKGIpKX19ClcuRmsucHJv
+dG90eXBlPXt9ClcuUk8ucHJvdG90eXBlPXt9ClcuQ3EucHJvdG90eXBlPXt9ClcueEMucHJvdG90eXBl
+PXt9Clcudk4ucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuYS4kMSh1LkIuYihh
+KSl9LAokUzoyOH0KVy5KUS5wcm90b3R5cGU9ewpDWTpmdW5jdGlvbihhKXt2YXIgdAppZigkLm9yLmE9
+PT0wKXtmb3IodD0wO3Q8MjYyOysrdCkkLm9yLlkoMCxDLmNtW3RdLFcucFMoKSkKZm9yKHQ9MDt0PDEy
+OysrdCkkLm9yLlkoMCxDLkJJW3RdLFcuVjQoKSl9fSwKaTA6ZnVuY3Rpb24oYSl7cmV0dXJuICQuQU4o
+KS50ZygwLFcuclMoYSkpfSwKRWI6ZnVuY3Rpb24oYSxiLGMpe3ZhciB0PSQub3IucSgwLEguZChXLnJT
+KGEpKSsiOjoiK2IpCmlmKHQ9PW51bGwpdD0kLm9yLnEoMCwiKjo6IitiKQppZih0PT1udWxsKXJldHVy
+biExCnJldHVybiBILnhkKHQuJDQoYSxiLGMsdGhpcykpfSwKJGlrRjoxfQpXLkdtLnByb3RvdHlwZT17
+CmdrejpmdW5jdGlvbihhKXtyZXR1cm4gbmV3IFcuVzkoYSx0aGlzLmdBKGEpLEgueksoYSkuQygiVzk8
+R20uRT4iKSl9fQpXLnZELnByb3RvdHlwZT17CmkwOmZ1bmN0aW9uKGEpe3JldHVybiBDLk5tLlZyKHRo
+aXMuYSxuZXcgVy5VdihhKSl9LApFYjpmdW5jdGlvbihhLGIsYyl7cmV0dXJuIEMuTm0uVnIodGhpcy5h
+LG5ldyBXLkVnKGEsYixjKSl9LAokaWtGOjF9ClcuVXYucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7
+cmV0dXJuIHUuZS5iKGEpLmkwKHRoaXMuYSl9LAokUzoxN30KVy5FZy5wcm90b3R5cGU9ewokMTpmdW5j
+dGlvbihhKXtyZXR1cm4gdS5lLmIoYSkuRWIodGhpcy5hLHRoaXMuYix0aGlzLmMpfSwKJFM6MTd9Clcu
+bTYucHJvdG90eXBlPXsKQ1k6ZnVuY3Rpb24oYSxiLGMsZCl7dmFyIHQscyxyCnRoaXMuYS5GVigwLGMp
+CnQ9Yi5ldigwLG5ldyBXLkVvKCkpCnM9Yi5ldigwLG5ldyBXLldrKCkpCnRoaXMuYi5GVigwLHQpCnI9
+dGhpcy5jCnIuRlYoMCxDLmRuKQpyLkZWKDAscyl9LAppMDpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5h
+LnRnKDAsVy5yUyhhKSl9LApFYjpmdW5jdGlvbihhLGIsYyl7dmFyIHQ9dGhpcyxzPVcuclMoYSkscj10
+LmMKaWYoci50ZygwLEguZChzKSsiOjoiK2IpKXJldHVybiB0LmQuRHQoYykKZWxzZSBpZihyLnRnKDAs
+Iio6OiIrYikpcmV0dXJuIHQuZC5EdChjKQplbHNle3I9dC5iCmlmKHIudGcoMCxILmQocykrIjo6Iiti
+KSlyZXR1cm4hMAplbHNlIGlmKHIudGcoMCwiKjo6IitiKSlyZXR1cm4hMAplbHNlIGlmKHIudGcoMCxI
+LmQocykrIjo6KiIpKXJldHVybiEwCmVsc2UgaWYoci50ZygwLCIqOjoqIikpcmV0dXJuITB9cmV0dXJu
+ITF9LAokaWtGOjF9ClcuRW8ucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7cmV0dXJuIUMuTm0udGco
+Qy5CSSxILnkoYSkpfSwKJFM6OH0KVy5Xay5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXtyZXR1cm4g
+Qy5ObS50ZyhDLkJJLEgueShhKSl9LAokUzo4fQpXLmN0LnByb3RvdHlwZT17CkViOmZ1bmN0aW9uKGEs
+YixjKXtpZih0aGlzLmpGKGEsYixjKSlyZXR1cm4hMAppZihiPT09InRlbXBsYXRlIiYmYz09PSIiKXJl
+dHVybiEwCmlmKGEuZ2V0QXR0cmlidXRlKCJ0ZW1wbGF0ZSIpPT09IiIpcmV0dXJuIHRoaXMuZS50Zygw
+LGIpCnJldHVybiExfX0KVy5JQS5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXtyZXR1cm4iVEVNUExB
+VEU6OiIrSC5kKEgueShhKSl9LAokUzo1fQpXLk93LnByb3RvdHlwZT17CmkwOmZ1bmN0aW9uKGEpe3Zh
+ciB0CmlmKHUuZXcuYyhhKSlyZXR1cm4hMQp0PXUuZzcuYyhhKQppZih0JiZXLnJTKGEpPT09ImZvcmVp
+Z25PYmplY3QiKXJldHVybiExCmlmKHQpcmV0dXJuITAKcmV0dXJuITF9LApFYjpmdW5jdGlvbihhLGIs
+Yyl7aWYoYj09PSJpcyJ8fEMueEIubihiLCJvbiIpKXJldHVybiExCnJldHVybiB0aGlzLmkwKGEpfSwK
+JGlrRjoxfQpXLlc5LnByb3RvdHlwZT17CkY6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLHM9dC5jKzEscj10
+LmIKaWYoczxyKXt0LnNwKEoudzIodC5hLHMpKQp0LmM9cwpyZXR1cm4hMH10LnNwKG51bGwpCnQuYz1y
+CnJldHVybiExfSwKZ2w6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kfSwKc3A6ZnVuY3Rpb24oYSl7dGhp
+cy5kPXRoaXMuJHRpLmQuYihhKX0sCiRpQW46MX0KVy5kVy5wcm90b3R5cGU9ewpnbVc6ZnVuY3Rpb24o
+YSl7cmV0dXJuIFcuelgodGhpcy5hLmxvY2F0aW9uKX0sCiRpRDA6MSwKJGl2NjoxfQpXLkZiLnByb3Rv
+dHlwZT17fQpXLmtGLnByb3RvdHlwZT17fQpXLm1rLnByb3RvdHlwZT17JGl5MDoxfQpXLktvLnByb3Rv
+dHlwZT17ClBuOmZ1bmN0aW9uKGEpe25ldyBXLmZtKHRoaXMpLiQyKGEsbnVsbCl9LApFUDpmdW5jdGlv
+bihhLGIpe2lmKGI9PW51bGwpSi5MdChhKQplbHNlIGIucmVtb3ZlQ2hpbGQoYSl9LApJNDpmdW5jdGlv
+bihhLGIpe3ZhciB0LHMscixxLHAsbz0hMCxuPW51bGwsbT1udWxsCnRyeXtuPUouaWcoYSkKbT1uLmEu
+Z2V0QXR0cmlidXRlKCJpcyIpCnUuaC5iKGEpCnQ9ZnVuY3Rpb24oYyl7aWYoIShjLmF0dHJpYnV0ZXMg
+aW5zdGFuY2VvZiBOYW1lZE5vZGVNYXApKXJldHVybiB0cnVlCnZhciBsPWMuY2hpbGROb2RlcwppZihj
+Lmxhc3RDaGlsZCYmYy5sYXN0Q2hpbGQhPT1sW2wubGVuZ3RoLTFdKXJldHVybiB0cnVlCmlmKGMuY2hp
+bGRyZW4paWYoIShjLmNoaWxkcmVuIGluc3RhbmNlb2YgSFRNTENvbGxlY3Rpb258fGMuY2hpbGRyZW4g
+aW5zdGFuY2VvZiBOb2RlTGlzdCkpcmV0dXJuIHRydWUKdmFyIGs9MAppZihjLmNoaWxkcmVuKWs9Yy5j
+aGlsZHJlbi5sZW5ndGgKZm9yKHZhciBqPTA7ajxrO2orKyl7dmFyIGk9Yy5jaGlsZHJlbltqXQppZihp
+LmlkPT0nYXR0cmlidXRlcyd8fGkubmFtZT09J2F0dHJpYnV0ZXMnfHxpLmlkPT0nbGFzdENoaWxkJ3x8
+aS5uYW1lPT0nbGFzdENoaWxkJ3x8aS5pZD09J2NoaWxkcmVuJ3x8aS5uYW1lPT0nY2hpbGRyZW4nKXJl
+dHVybiB0cnVlfXJldHVybiBmYWxzZX0oYSkKbz1ILm9UKHQpPyEwOiEoYS5hdHRyaWJ1dGVzIGluc3Rh
+bmNlb2YgTmFtZWROb2RlTWFwKX1jYXRjaChxKXtILlJ1KHEpfXM9ImVsZW1lbnQgdW5wcmludGFibGUi
+CnRyeXtzPUouaihhKX1jYXRjaChxKXtILlJ1KHEpfXRyeXtyPVcuclMoYSkKdGhpcy5rUih1LmguYihh
+KSxiLG8scyxyLHUuRy5iKG4pLEgueShtKSl9Y2F0Y2gocSl7aWYoSC5SdShxKSBpbnN0YW5jZW9mIFAu
+dSl0aHJvdyBxCmVsc2V7dGhpcy5FUChhLGIpCndpbmRvdwpwPSJSZW1vdmluZyBjb3JydXB0ZWQgZWxl
+bWVudCAiK0guZChzKQppZih0eXBlb2YgY29uc29sZSE9InVuZGVmaW5lZCIpd2luZG93LmNvbnNvbGUu
+d2FybihwKX19fSwKa1I6ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyl7dmFyIHQscyxyLHEscCxvLG49dGhp
+cwppZihjKXtuLkVQKGEsYikKd2luZG93CnQ9IlJlbW92aW5nIGVsZW1lbnQgZHVlIHRvIGNvcnJ1cHRl
+ZCBhdHRyaWJ1dGVzIG9uIDwiK2QrIj4iCmlmKHR5cGVvZiBjb25zb2xlIT0idW5kZWZpbmVkIil3aW5k
+b3cuY29uc29sZS53YXJuKHQpCnJldHVybn1pZighbi5hLmkwKGEpKXtuLkVQKGEsYikKd2luZG93CnQ9
+IlJlbW92aW5nIGRpc2FsbG93ZWQgZWxlbWVudCA8IitILmQoZSkrIj4gZnJvbSAiK0guZChiKQppZih0
+eXBlb2YgY29uc29sZSE9InVuZGVmaW5lZCIpd2luZG93LmNvbnNvbGUud2Fybih0KQpyZXR1cm59aWYo
+ZyE9bnVsbClpZighbi5hLkViKGEsImlzIixnKSl7bi5FUChhLGIpCndpbmRvdwp0PSJSZW1vdmluZyBk
+aXNhbGxvd2VkIHR5cGUgZXh0ZW5zaW9uIDwiK0guZChlKSsnIGlzPSInK2crJyI+JwppZih0eXBlb2Yg
+Y29uc29sZSE9InVuZGVmaW5lZCIpd2luZG93LmNvbnNvbGUud2Fybih0KQpyZXR1cm59dD1mLmdWKCkK
+cz1ILlZNKHQuc2xpY2UoMCksSC50Nih0KS5DKCJqZDwxPiIpKQpmb3Iocj1mLmdWKCkubGVuZ3RoLTEs
+dD1mLmE7cj49MDstLXIpe2lmKHI+PXMubGVuZ3RoKXJldHVybiBILk9IKHMscikKcT1zW3JdCnA9bi5h
+Cm89Si5jSChxKQpILnkocSkKaWYoIXAuRWIoYSxvLHQuZ2V0QXR0cmlidXRlKHEpKSl7d2luZG93CnA9
+IlJlbW92aW5nIGRpc2FsbG93ZWQgYXR0cmlidXRlIDwiK0guZChlKSsiICIrcSsnPSInK0guZCh0Lmdl
+dEF0dHJpYnV0ZShxKSkrJyI+JwppZih0eXBlb2YgY29uc29sZSE9InVuZGVmaW5lZCIpd2luZG93LmNv
+bnNvbGUud2FybihwKQp0LnJlbW92ZUF0dHJpYnV0ZShxKX19aWYodS5hVy5jKGEpKW4uUG4oYS5jb250
+ZW50KX0sCiRpb246MX0KVy5mbS5wcm90b3R5cGU9ewokMjpmdW5jdGlvbihhLGIpe3ZhciB0LHMscixx
+LHA9dGhpcy5hCnN3aXRjaChhLm5vZGVUeXBlKXtjYXNlIDE6cC5JNChhLGIpCmJyZWFrCmNhc2UgODpj
+YXNlIDExOmNhc2UgMzpjYXNlIDQ6YnJlYWsKZGVmYXVsdDpwLkVQKGEsYil9dD1hLmxhc3RDaGlsZApm
+b3IocD11LkE7bnVsbCE9dDspe3M9bnVsbAp0cnl7cz10LnByZXZpb3VzU2libGluZ31jYXRjaChyKXtI
+LlJ1KHIpCnE9cC5iKHQpCmEucmVtb3ZlQ2hpbGQocSkKdD1udWxsCnM9YS5sYXN0Q2hpbGR9aWYodCE9
+bnVsbCl0aGlzLiQyKHQsYSkKdD1wLmIocyl9fSwKJFM6MzF9ClcuTGUucHJvdG90eXBlPXt9ClcuSzcu
+cHJvdG90eXBlPXt9ClcuckIucHJvdG90eXBlPXt9ClcuWFcucHJvdG90eXBlPXt9Clcub2EucHJvdG90
+eXBlPXt9ClAuaUoucHJvdG90eXBlPXsKVkg6ZnVuY3Rpb24oYSl7dmFyIHQscz10aGlzLmEscj1zLmxl
+bmd0aApmb3IodD0wO3Q8cjsrK3QpaWYoc1t0XT09PWEpcmV0dXJuIHQKQy5ObS5pKHMsYSkKQy5ObS5p
+KHRoaXMuYixudWxsKQpyZXR1cm4gcn0sClB2OmZ1bmN0aW9uKGEpe3ZhciB0LHMscixxPXRoaXMscD17
+fQppZihhPT1udWxsKXJldHVybiBhCmlmKEgubChhKSlyZXR1cm4gYQppZih0eXBlb2YgYT09Im51bWJl
+ciIpcmV0dXJuIGEKaWYodHlwZW9mIGE9PSJzdHJpbmciKXJldHVybiBhCmlmKGEgaW5zdGFuY2VvZiBQ
+LmlQKXJldHVybiBuZXcgRGF0ZShhLmEpCmlmKHUuZnYuYyhhKSl0aHJvdyBILmIoUC5TWSgic3RydWN0
+dXJlZCBjbG9uZSBvZiBSZWdFeHAiKSkKaWYodS5jOC5jKGEpKXJldHVybiBhCmlmKHUuZC5jKGEpKXJl
+dHVybiBhCmlmKHUuSS5jKGEpKXJldHVybiBhCnQ9dS5kRC5jKGEpfHwhMQppZih0KXJldHVybiBhCmlm
+KHUuRy5jKGEpKXtzPXEuVkgoYSkKdD1xLmIKaWYocz49dC5sZW5ndGgpcmV0dXJuIEguT0godCxzKQpy
+PXAuYT10W3NdCmlmKHIhPW51bGwpcmV0dXJuIHIKcj17fQpwLmE9cgpDLk5tLlkodCxzLHIpCmEuSygw
+LG5ldyBQLmxSKHAscSkpCnJldHVybiBwLmF9aWYodS5qLmMoYSkpe3M9cS5WSChhKQpwPXEuYgppZihz
+Pj1wLmxlbmd0aClyZXR1cm4gSC5PSChwLHMpCnI9cFtzXQppZihyIT1udWxsKXJldHVybiByCnJldHVy
+biBxLmVrKGEscyl9aWYodS5lSC5jKGEpKXtzPXEuVkgoYSkKdD1xLmIKaWYocz49dC5sZW5ndGgpcmV0
+dXJuIEguT0godCxzKQpyPXAuYj10W3NdCmlmKHIhPW51bGwpcmV0dXJuIHIKcj17fQpwLmI9cgpDLk5t
+LlkodCxzLHIpCnEuaW0oYSxuZXcgUC5qZyhwLHEpKQpyZXR1cm4gcC5ifXRocm93IEguYihQLlNZKCJz
+dHJ1Y3R1cmVkIGNsb25lIG9mIG90aGVyIHR5cGUiKSl9LAplazpmdW5jdGlvbihhLGIpe3ZhciB0LHM9
+Si5VNihhKSxyPXMuZ0EoYSkscT1uZXcgQXJyYXkocikKQy5ObS5ZKHRoaXMuYixiLHEpCmZvcih0PTA7
+dDxyOysrdClDLk5tLlkocSx0LHRoaXMuUHYocy5xKGEsdCkpKQpyZXR1cm4gcX19ClAubFIucHJvdG90
+eXBlPXsKJDI6ZnVuY3Rpb24oYSxiKXt0aGlzLmEuYVthXT10aGlzLmIuUHYoYil9LAokUzoxfQpQLmpn
+LnByb3RvdHlwZT17CiQyOmZ1bmN0aW9uKGEsYil7dGhpcy5hLmJbYV09dGhpcy5iLlB2KGIpfSwKJFM6
+MX0KUC5CZi5wcm90b3R5cGU9ewppbTpmdW5jdGlvbihhLGIpe3ZhciB0LHMscixxCnUuYjguYihiKQpm
+b3IodD1PYmplY3Qua2V5cyhhKSxzPXQubGVuZ3RoLHI9MDtyPHM7KytyKXtxPXRbcl0KYi4kMihxLGFb
+cV0pfX19ClAuQXMucHJvdG90eXBlPXsKVDpmdW5jdGlvbihhKXt2YXIgdApILnkoYSkKdD0kLmhHKCku
+YgppZih0eXBlb2YgYSE9InN0cmluZyIpSC52aChILnRMKGEpKQppZih0LnRlc3QoYSkpcmV0dXJuIGEK
+dGhyb3cgSC5iKFAuTDMoYSwidmFsdWUiLCJOb3QgYSB2YWxpZCBjbGFzcyB0b2tlbiIpKX0sCnc6ZnVu
+Y3Rpb24oYSl7cmV0dXJuIHRoaXMuUCgpLkgoMCwiICIpfSwKZ2t6OmZ1bmN0aW9uKGEpe3ZhciB0PXRo
+aXMuUCgpCnJldHVybiBQLnJqKHQsdC5yLEguTGgodCkuZCl9LApnQTpmdW5jdGlvbihhKXtyZXR1cm4g
+dGhpcy5QKCkuYX0sCnRnOmZ1bmN0aW9uKGEsYil7dGhpcy5UKGIpCnJldHVybiB0aGlzLlAoKS50Zygw
+LGIpfSwKaTpmdW5jdGlvbihhLGIpe3RoaXMuVChiKQpyZXR1cm4gSC54ZCh0aGlzLk9TKG5ldyBQLkdF
+KGIpKSl9LApSOmZ1bmN0aW9uKGEsYil7dmFyIHQscwp0aGlzLlQoYikKdD10aGlzLlAoKQpzPXQuUigw
+LGIpCnRoaXMuWCh0KQpyZXR1cm4gc30sCkZWOmZ1bmN0aW9uKGEsYil7dGhpcy5PUyhuZXcgUC5ONyh0
+aGlzLHUuWC5iKGIpKSl9LApWMTpmdW5jdGlvbihhKXt0aGlzLk9TKG5ldyBQLnVRKCkpfSwKT1M6ZnVu
+Y3Rpb24oYSl7dmFyIHQscwp1LmNoLmIoYSkKdD10aGlzLlAoKQpzPWEuJDEodCkKdGhpcy5YKHQpCnJl
+dHVybiBzfX0KUC5HRS5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXtyZXR1cm4gdS5DLmIoYSkuaSgw
+LHRoaXMuYSl9LAokUzo0NX0KUC5ONy5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXt2YXIgdD10aGlz
+LmIscz1ILnQ2KHQpCnJldHVybiB1LkMuYihhKS5GVigwLG5ldyBILkE4KHQscy5DKCJxVSgxKSIpLmIo
+dGhpcy5hLmd1TSgpKSxzLkMoIkE4PDEscVU+IikpKX0sCiRTOjE0fQpQLnVRLnByb3RvdHlwZT17CiQx
+OmZ1bmN0aW9uKGEpe3UuQy5iKGEpCmlmKGEuYT4wKXthLmI9YS5jPWEuZD1hLmU9YS5mPW51bGwKYS5h
+PTAKYS5TKCl9cmV0dXJuIG51bGx9LAokUzoxNH0KUC5oRi5wcm90b3R5cGU9eyRpaEY6MX0KUC5QQy5w
+cm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXt2YXIgdAp1LlouYihhKQp0PWZ1bmN0aW9uKGIsYyxkKXty
+ZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gYihjLGQsdGhpcyxBcnJheS5wcm90b3R5cGUuc2xpY2UuYXBw
+bHkoYXJndW1lbnRzKSl9fShQLlI0LGEsITEpClAuRG0odCwkLncoKSxhKQpyZXR1cm4gdH0sCiRTOjR9
+ClAuWW0ucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyB0aGlzLmEoYSl9LAokUzo0
+fQpQLk56LnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgUC5yNyhhKX0sCiRTOjM0
+fQpQLm5wLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgUC5UeihhLHUuYW0pfSwK
+JFM6MzV9ClAuVXQucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBQLkU0KGEpfSwK
+JFM6MzZ9ClAuRTQucHJvdG90eXBlPXsKcTpmdW5jdGlvbihhLGIpe2lmKHR5cGVvZiBiIT0ic3RyaW5n
+IiYmdHlwZW9mIGIhPSJudW1iZXIiKXRocm93IEguYihQLnhZKCJwcm9wZXJ0eSBpcyBub3QgYSBTdHJp
+bmcgb3IgbnVtIikpCnJldHVybiBQLkw3KHRoaXMuYVtiXSl9LApZOmZ1bmN0aW9uKGEsYixjKXtpZih0
+eXBlb2YgYiE9InN0cmluZyImJnR5cGVvZiBiIT0ibnVtYmVyIil0aHJvdyBILmIoUC54WSgicHJvcGVy
+dHkgaXMgbm90IGEgU3RyaW5nIG9yIG51bSIpKQp0aGlzLmFbYl09UC53WShjKX0sCkROOmZ1bmN0aW9u
+KGEsYil7aWYoYj09bnVsbClyZXR1cm4hMQpyZXR1cm4gYiBpbnN0YW5jZW9mIFAuRTQmJnRoaXMuYT09
+PWIuYX0sCnc6ZnVuY3Rpb24oYSl7dmFyIHQscwp0cnl7dD1TdHJpbmcodGhpcy5hKQpyZXR1cm4gdH1j
+YXRjaChzKXtILlJ1KHMpCnQ9dGhpcy54YigwKQpyZXR1cm4gdH19LApWNzpmdW5jdGlvbihhLGIpe3Zh
+ciB0LHM9dGhpcy5hCmlmKGI9PW51bGwpdD1udWxsCmVsc2V7dD1ILnQ2KGIpCnQ9UC5DSChuZXcgSC5B
+OChiLHQuQygiQCgxKSIpLmIoUC5pRygpKSx0LkMoIkE4PDEsQD4iKSksITAsdS56KX1yZXR1cm4gUC5M
+NyhzW2FdLmFwcGx5KHMsdCkpfSwKZ2lPOmZ1bmN0aW9uKGEpe3JldHVybiAwfX0KUC5yNy5wcm90b3R5
+cGU9e30KUC5Uei5wcm90b3R5cGU9ewpjUDpmdW5jdGlvbihhKXt2YXIgdD10aGlzLHM9YTwwfHxhPj10
+LmdBKHQpCmlmKHMpdGhyb3cgSC5iKFAuVEUoYSwwLHQuZ0EodCksbnVsbCxudWxsKSl9LApxOmZ1bmN0
+aW9uKGEsYil7aWYodHlwZW9mIGI9PSJudW1iZXIiJiZiPT09Qy5qbi55dShiKSl0aGlzLmNQKEguU2Mo
+YikpCnJldHVybiB0aGlzLiR0aS5kLmIodGhpcy5VcigwLGIpKX0sClk6ZnVuY3Rpb24oYSxiLGMpe3Zh
+ciB0CnRoaXMuJHRpLmQuYihjKQp0PUMuam4ueXUoYikKaWYoYj09PXQpdGhpcy5jUChiKQp0aGlzLmU0
+KDAsYixjKX0sCmdBOmZ1bmN0aW9uKGEpe3ZhciB0PXRoaXMuYS5sZW5ndGgKaWYodHlwZW9mIHQ9PT0i
+bnVtYmVyIiYmdD4+PjA9PT10KXJldHVybiB0CnRocm93IEguYihQLlBWKCJCYWQgSnNBcnJheSBsZW5n
+dGgiKSl9LAokaWNYOjEsCiRpek06MX0KUC5jby5wcm90b3R5cGU9e30KUC5uZC5wcm90b3R5cGU9eyRp
+bmQ6MX0KUC5LZS5wcm90b3R5cGU9ewpQOmZ1bmN0aW9uKCl7dmFyIHQscyxyLHEscD10aGlzLmEuZ2V0
+QXR0cmlidXRlKCJjbGFzcyIpLG89UC5Mcyh1Lk4pCmlmKHA9PW51bGwpcmV0dXJuIG8KZm9yKHQ9cC5z
+cGxpdCgiICIpLHM9dC5sZW5ndGgscj0wO3I8czsrK3Ipe3E9Si5UMCh0W3JdKQppZihxLmxlbmd0aCE9
+PTApby5pKDAscSl9cmV0dXJuIG99LApYOmZ1bmN0aW9uKGEpe3RoaXMuYS5zZXRBdHRyaWJ1dGUoImNs
+YXNzIixhLkgoMCwiICIpKX19ClAuZDUucHJvdG90eXBlPXsKZ0Q6ZnVuY3Rpb24oYSl7cmV0dXJuIG5l
+dyBQLktlKGEpfSwKc2hmOmZ1bmN0aW9uKGEsYil7dGhpcy5ZQyhhLGIpfSwKcjY6ZnVuY3Rpb24oYSxi
+LGMsZCl7dmFyIHQscyxyLHEscCxvCmlmKGQ9PW51bGwpe3Q9SC5WTShbXSx1LmspCmQ9bmV3IFcudkQo
+dCkKQy5ObS5pKHQsVy5UdyhudWxsKSkKQy5ObS5pKHQsVy5CbCgpKQpDLk5tLmkodCxuZXcgVy5Pdygp
+KX1jPW5ldyBXLktvKGQpCnM9JzxzdmcgdmVyc2lvbj0iMS4xIj4nK0guZChiKSsiPC9zdmc+Igp0PWRv
+Y3VtZW50CnI9dC5ib2R5CnE9KHImJkMuUlkpLkFIKHIscyxjKQpwPXQuY3JlYXRlRG9jdW1lbnRGcmFn
+bWVudCgpCnEudG9TdHJpbmcKdD1uZXcgVy5lNyhxKQpvPXQuZ3I4KHQpCmZvcig7dD1vLmZpcnN0Q2hp
+bGQsdCE9bnVsbDspcC5hcHBlbmRDaGlsZCh0KQpyZXR1cm4gcH0sCmdWbDpmdW5jdGlvbihhKXtyZXR1
+cm4gbmV3IFcuQ3EoYSwiY2xpY2siLCExLHUuUSl9LAokaWQ1OjF9ClAubjYucHJvdG90eXBlPXskaWNY
+OjEsJGl6TToxLCRpQVM6MX0KVS5kMi5wcm90b3R5cGU9e30KVS5TZS5wcm90b3R5cGU9e30KVS51Ri5w
+cm90b3R5cGU9e30KVS5NbC5wcm90b3R5cGU9e30KVS55RC5wcm90b3R5cGU9e30KVS53Yi5wcm90b3R5
+cGU9e30KQi5qOC5wcm90b3R5cGU9e30KQi5xcC5wcm90b3R5cGU9e30KVC5HVi5wcm90b3R5cGU9e30K
+TC5lLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3ZhciB0LHMscixxLHAsbwp1LkIuYihhKQp0PXdp
+bmRvdy5sb2NhdGlvbi5wYXRobmFtZQpzPUwuRzYod2luZG93LmxvY2F0aW9uLmhyZWYpCnI9TC5hSyh3
+aW5kb3cubG9jYXRpb24uaHJlZikKTC5HZSgpCmlmKHQhPT0iLyImJnQhPT1KLlQwKGRvY3VtZW50LnF1
+ZXJ5U2VsZWN0b3IoIi5yb290IikudGV4dENvbnRlbnQpKUwuRzcodCxzLHIsITAsbmV3IEwuVlcodCxz
+LHIpKQpxPUoucUYoZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiLmFwcGx5LW1pZ3JhdGlvbiIpKQpwPXEu
+JHRpCm89cC5DKCJ+KDEpIikuYihuZXcgTC5vWigpKQp1Lk0uYihudWxsKQpXLkpFKHEuYSxxLmIsbywh
+MSxwLmQpfSwKJFM6MTN9CkwuVlcucHJvdG90eXBlPXsKJDA6ZnVuY3Rpb24oKXtMLkZyKHRoaXMuYSx0
+aGlzLmIsdGhpcy5jKX0sCiRTOjB9Ckwub1oucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dS5WLmIo
+YSkKTC50eSgiL2FwcGx5LW1pZ3JhdGlvbiIpLlc3KG5ldyBMLmpyKCksdS5QKS5PQShuZXcgTC5xbCgp
+KX0sCiRTOjZ9CkwuanIucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dmFyIHQKdS5yLmIoYSkKdD1k
+b2N1bWVudC5ib2R5CnQuY2xhc3NMaXN0LnJlbW92ZSgicHJvcG9zZWQiKQp0LmNsYXNzTGlzdC5hZGQo
+ImFwcGxpZWQiKX0sCiRTOjd9CkwucWwucHJvdG90eXBlPXsKJDI6ZnVuY3Rpb24oYSxiKXtMLnFKKCJh
+cHBseSBtaWdyYXRpb24gZXJyb3I6ICIrSC5kKGEpLGIpCndpbmRvdy5hbGVydCgiQ291bGQgbm90IGFw
+cGx5IG1pZ3JhdGlvbiAoIitILmQoYSkrIikuIil9LAokQzoiJDIiLAokUjoyLAokUzoxfQpMLkwucHJv
+dG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dmFyIHQscyxyCnUuQi5iKGEpCnQ9d2luZG93LmxvY2F0aW9u
+LnBhdGhuYW1lCnM9TC5HNih3aW5kb3cubG9jYXRpb24uaHJlZikKcj1MLmFLKHdpbmRvdy5sb2NhdGlv
+bi5ocmVmKQppZih0Lmxlbmd0aD4xKUwuRzcodCxzLHIsITEsbnVsbCkKZWxzZXtMLkJFKHQsbmV3IEIu
+cXAoIiIsIiIsIiIsQy54RCksITApCkwuQlgoIiZuYnNwOyIsbnVsbCl9fSwKJFM6MTN9CkwuV3gucHJv
+dG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dmFyIHQscyxyLHE9ImNvbGxhcHNlZCIKdS5WLmIoYSkKdD10
+aGlzLmEKcz1KLlJFKHQpCnI9dGhpcy5iCmlmKCFzLmdEKHQpLnRnKDAscSkpe3MuZ0QodCkuaSgwLHEp
+CkouZFIocikuaSgwLHEpfWVsc2V7cy5nRCh0KS5SKDAscSkKSi5kUihyKS5SKDAscSl9fSwKJFM6Nn0K
+TC5BTy5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXt2YXIgdD1KLnFGKHUuaC5iKGEpKSxzPXQuJHRp
+LHI9cy5DKCJ+KDEpIikuYihuZXcgTC5kTih0aGlzLmEpKQp1Lk0uYihudWxsKQpXLkpFKHQuYSx0LmIs
+ciwhMSxzLmQpfSwKJFM6M30KTC5kTi5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXt2YXIgdAp1LlYu
+YihhKQp0PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInRhYmxlW2RhdGEtcGF0aF0iKQp0LnRvU3RyaW5n
+CkwudDIoYSx0aGlzLmEsdC5nZXRBdHRyaWJ1dGUoImRhdGEtIituZXcgVy5TeShuZXcgVy5pNyh0KSku
+TygicGF0aCIpKSl9LAokUzo2fQpMLkhvLnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3ZhciB0LHMs
+cgp1LmguYihhKQp0PUoucUYoYSkKcz10LiR0aQpyPXMuQygifigxKSIpLmIobmV3IEwueHooYSx0aGlz
+LmEpKQp1Lk0uYihudWxsKQpXLkpFKHQuYSx0LmIsciwhMSxzLmQpfSwKJFM6M30KTC54ei5wcm90b3R5
+cGU9ewokMTpmdW5jdGlvbihhKXt2YXIgdAp1LlYuYihhKQp0PXRoaXMuYQpMLmhYKHRoaXMuYixQLlFB
+KHQuZ2V0QXR0cmlidXRlKCJkYXRhLSIrbmV3IFcuU3kobmV3IFcuaTcodCkpLk8oIm9mZnNldCIpKSxu
+dWxsLG51bGwpKX0sCiRTOjZ9CkwuSUMucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dmFyIHQ9Si5x
+Rih1LmguYihhKSkscz10LiR0aQpzLkMoIn4oMSkiKS5iKEwuSDAoKSkKdS5NLmIobnVsbCkKVy5KRSh0
+LmEsdC5iLEwuSDAoKSwhMSxzLmQpfSwKJFM6M30KTC5MMS5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihh
+KXt2YXIgdAp1LnIuYihhKQp0PWEuc3RhdHVzCmlmKHQ9PT0yMDApcmV0dXJuIGEKZWxzZSB0aHJvdyBI
+LmIoIlJlcXVlc3QgZmFpbGVkOyBzdGF0dXMgb2YgIitILmQodCkpfSwKJFM6NDF9CkwublQucHJvdG90
+eXBlPXsKJDA6ZnVuY3Rpb24oKXtMLkZyKHRoaXMuYS5hLHRoaXMuYix0aGlzLmMpfSwKJFM6MH0KTC5C
+Wi5wcm90b3R5cGU9ewokMDpmdW5jdGlvbigpe0wuRnIodGhpcy5hLmEsbnVsbCxudWxsKX0sCiRTOjB9
+CkwuR0gucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dS5oLmIoYSkKJC56QigpLnRvU3RyaW5nCnUu
+di5iKCQub3coKS5xKDAsImhsanMiKSkuVjcoImhpZ2hsaWdodEJsb2NrIixbYV0pfSwKJFM6M30KTC5E
+VC5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXt2YXIgdAp1LnIuYihhKQp0PWEuc3RhdHVzCmlmKHQ9
+PT0yMDApe0wuVDEoVS55dShDLkN0LnBXKDAsYS5yZXNwb25zZVRleHQsbnVsbCkpKQpMLnlYKCIuZWRp
+dC1wYW5lbCAucGFuZWwtY29udGVudCIsITEpfWVsc2Ugd2luZG93LmFsZXJ0KCJSZXF1ZXN0IGZhaWxl
+ZDsgc3RhdHVzIG9mICIrSC5kKHQpKX0sCiRTOjd9CkwuZUgucHJvdG90eXBlPXsKJDI6ZnVuY3Rpb24o
+YSxiKXtMLnFKKCJsb2FkUmVnaW9uRXhwbGFuYXRpb246ICIrSC5kKGEpLGIpCndpbmRvdy5hbGVydCgi
+Q291bGQgbm90IGxvYWQgIitILmQodGhpcy5hKSsiICgiK0guZChhKSsiKS4iKX0sCiRDOiIkMiIsCiRS
+OjIsCiRTOjF9CkwuekQucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7dmFyIHQscyxyPXRoaXMKdS5y
+LmIoYSkKdD1hLnN0YXR1cwppZih0PT09MjAwKXtzPXIuYQpMLkJFKHMsQi5ZZih1LmIuYihDLkN0LnBX
+KDAsYS5yZXNwb25zZVRleHQsbnVsbCkpKSxyLmIpCnQ9ci5jCkwuZkcodCxyLmQpCkwuQlgoQy54Qi50
+ZyhzLCI/Iik/Qy54Qi5OaihzLDAsQy54Qi5PWShzLCI/IikpOnMsdCkKdD1yLmUKaWYodCE9bnVsbCl0
+LiQwKCl9ZWxzZSB3aW5kb3cuYWxlcnQoIlJlcXVlc3QgZmFpbGVkOyBzdGF0dXMgb2YgIitILmQodCkp
+fSwKJFM6N30KTC5PRS5wcm90b3R5cGU9ewokMjpmdW5jdGlvbihhLGIpe0wucUooImxvYWRGaWxlOiAi
+K0guZChhKSxiKQp3aW5kb3cuYWxlcnQoIkNvdWxkIG5vdCBsb2FkICIrdGhpcy5hKyIgKCIrSC5kKGEp
+KyIpLiIpfSwKJEM6IiQyIiwKJFI6MiwKJFM6MX0KTC5UVy5wcm90b3R5cGU9ewokMTpmdW5jdGlvbihh
+KXt2YXIgdCxzLHIKdS5yLmIoYSkKdD1hLnN0YXR1cwppZih0PT09MjAwKXtzPUMuQ3QucFcoMCxhLnJl
+c3BvbnNlVGV4dCxudWxsKQpyPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIi5uYXYtdHJlZSIpCkoubDUo
+ciwiIikKTC50WChyLEwubUsocykpfWVsc2Ugd2luZG93LmFsZXJ0KCJSZXF1ZXN0IGZhaWxlZDsgc3Rh
+dHVzIG9mICIrSC5kKHQpKX0sCiRTOjd9CkwueHIucHJvdG90eXBlPXsKJDI6ZnVuY3Rpb24oYSxiKXtM
+LnFKKCJsb2FkTmF2aWdhdGlvblRyZWU6ICIrSC5kKGEpLGIpCndpbmRvdy5hbGVydCgiQ291bGQgbm90
+IGxvYWQgIit0aGlzLmErIiAoIitILmQoYSkrIikuIil9LAokQzoiJDIiLAokUjoyLAokUzoxfQpMLkVF
+LnByb3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe3ZhciB0LHMKdS5WLmIoYSkKdD10aGlzLmEKcz10aGlz
+LmIKTC5hZih3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUsdCxzLCEwLG5ldyBMLlFMKHQscykpCkwuaFgo
+dGhpcy5jLHQpfSwKJFM6Nn0KTC5RTC5wcm90b3R5cGU9ewokMDpmdW5jdGlvbigpe0wuRnIod2luZG93
+LmxvY2F0aW9uLnBhdGhuYW1lLHRoaXMuYSx0aGlzLmIpfSwKJFM6MH0KTC5WUy5wcm90b3R5cGU9ewok
+MTpmdW5jdGlvbihhKXt2YXIgdCxzPSJzZWxlY3RlZC1maWxlIgp1LmguYihhKQphLnRvU3RyaW5nCnQ9
+Si5SRShhKQppZihhLmdldEF0dHJpYnV0ZSgiZGF0YS0iK25ldyBXLlN5KG5ldyBXLmk3KGEpKS5PKCJu
+YW1lIikpPT09dGhpcy5hLmEpdC5nRChhKS5pKDAscykKZWxzZSB0LmdEKGEpLlIoMCxzKX0sCiRTOjN9
+CkwuVEQucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7cmV0dXJuIEwudDIodS5WLmIoYSksITAsbnVs
+bCl9LAokUzoxNn0KTC5YQS5wcm90b3R5cGU9ewpFYjpmdW5jdGlvbihhLGIsYyl7cmV0dXJuITB9LApp
+MDpmdW5jdGlvbihhKXtyZXR1cm4hMH0sCiRpa0Y6MX0KTC5aWi5wcm90b3R5cGU9e30KTC55OC5wcm90
+b3R5cGU9ewp3OmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmJ9fQpNLmxJLnByb3RvdHlwZT17CldPOmZ1
+bmN0aW9uKGEsYil7dmFyIHQscz1udWxsCk0uWUYoImFic29sdXRlIixILlZNKFtiLG51bGwsbnVsbCxu
+dWxsLG51bGwsbnVsbCxudWxsXSx1LnMpKQp0PXRoaXMuYQp0PXQuWXIoYik+MCYmIXQuaEsoYikKaWYo
+dClyZXR1cm4gYgp0PUQuUlgoKQpyZXR1cm4gdGhpcy5xNygwLHQsYixzLHMscyxzLHMscyl9LAp0TTpm
+dW5jdGlvbihhKXt2YXIgdCxzLHI9WC5DTChhLHRoaXMuYSkKci5JVigpCnQ9ci5kCnM9dC5sZW5ndGgK
+aWYocz09PTApe3Q9ci5iCnJldHVybiB0PT1udWxsPyIuIjp0fWlmKHM9PT0xKXt0PXIuYgpyZXR1cm4g
+dD09bnVsbD8iLiI6dH1pZigwPj1zKXJldHVybiBILk9IKHQsLTEpCnQucG9wKCkKQy5ObS5tdihyLmUp
+CnIuSVYoKQpyZXR1cm4gci53KDApfSwKcTc6ZnVuY3Rpb24oYSxiLGMsZCxlLGYsZyxoLGkpe3ZhciB0
+PUguVk0oW2IsYyxkLGUsZixnLGgsaV0sdS5zKQpNLllGKCJqb2luIix0KQpyZXR1cm4gdGhpcy5JUChu
+ZXcgSC5VNSh0LHUuYkIuYihuZXcgTS5NaSgpKSx1LmNjKSl9LApJUDpmdW5jdGlvbihhKXt2YXIgdCxz
+LHIscSxwLG8sbixtLGwKdS5YLmIoYSkKZm9yKHQ9YS4kdGkscz10LkMoImEyKGNYLkUpIikuYihuZXcg
+TS5xNygpKSxyPWEuZ2t6KGEpLHQ9bmV3IEguU08ocixzLHQuQygiU088Y1guRT4iKSkscz10aGlzLmEs
+cT0hMSxwPSExLG89IiI7dC5GKCk7KXtuPXIuZ2woKQppZihzLmhLKG4pJiZwKXttPVguQ0wobixzKQps
+PW8uY2hhckNvZGVBdCgwKT09MD9vOm8Kbz1DLnhCLk5qKGwsMCxzLlNwKGwsITApKQptLmI9bwppZihz
+LmRzKG8pKUMuTm0uWShtLmUsMCxzLmdtSSgpKQpvPW0udygwKX1lbHNlIGlmKHMuWXIobik+MCl7cD0h
+cy5oSyhuKQpvPUguZChuKX1lbHNle2lmKCEobi5sZW5ndGg+MCYmcy5VZChuWzBdKSkpaWYocSlvKz1z
+LmdtSSgpCm8rPUguZChuKX1xPXMuZHMobil9cmV0dXJuIG8uY2hhckNvZGVBdCgwKT09MD9vOm99LApv
+NTpmdW5jdGlvbihhKXt2YXIgdAppZighdGhpcy55MyhhKSlyZXR1cm4gYQp0PVguQ0woYSx0aGlzLmEp
+CnQuclIoKQpyZXR1cm4gdC53KDApfSwKeTM6ZnVuY3Rpb24oYSl7dmFyIHQscyxyLHEscCxvLG4sbSxs
+LGsKYS50b1N0cmluZwp0PXRoaXMuYQpzPXQuWXIoYSkKaWYocyE9PTApe2lmKHQ9PT0kLktrKCkpZm9y
+KHI9MDtyPHM7KytyKWlmKEMueEIuVyhhLHIpPT09NDcpcmV0dXJuITAKcT1zCnA9NDd9ZWxzZXtxPTAK
+cD1udWxsfWZvcihvPW5ldyBILnFqKGEpLmEsbj1vLmxlbmd0aCxyPXEsbT1udWxsO3I8bjsrK3IsbT1w
+LHA9bCl7bD1DLnhCLm0obyxyKQppZih0LnI0KGwpKXtpZih0PT09JC5LaygpJiZsPT09NDcpcmV0dXJu
+ITAKaWYocCE9bnVsbCYmdC5yNChwKSlyZXR1cm4hMAppZihwPT09NDYpaz1tPT1udWxsfHxtPT09NDZ8
+fHQucjQobSkKZWxzZSBrPSExCmlmKGspcmV0dXJuITB9fWlmKHA9PW51bGwpcmV0dXJuITAKaWYodC5y
+NChwKSlyZXR1cm4hMAppZihwPT09NDYpdD1tPT1udWxsfHx0LnI0KG0pfHxtPT09NDYKZWxzZSB0PSEx
+CmlmKHQpcmV0dXJuITAKcmV0dXJuITF9LApIUDpmdW5jdGlvbihhLGIpe3ZhciB0LHMscixxLHAsbz10
+aGlzLG49J1VuYWJsZSB0byBmaW5kIGEgcGF0aCB0byAiJwpiPW8uV08oMCxiKQp0PW8uYQppZih0Llly
+KGIpPD0wJiZ0LllyKGEpPjApcmV0dXJuIG8ubzUoYSkKaWYodC5ZcihhKTw9MHx8dC5oSyhhKSlhPW8u
+V08oMCxhKQppZih0LllyKGEpPD0wJiZ0LllyKGIpPjApdGhyb3cgSC5iKFguSlQobitILmQoYSkrJyIg
+ZnJvbSAiJytILmQoYikrJyIuJykpCnM9WC5DTChiLHQpCnMuclIoKQpyPVguQ0woYSx0KQpyLnJSKCkK
+cT1zLmQKaWYocS5sZW5ndGg+MCYmSi5STShxWzBdLCIuIikpcmV0dXJuIHIudygwKQpxPXMuYgpwPXIu
+YgppZihxIT1wKXE9cT09bnVsbHx8cD09bnVsbHx8IXQuTmMocSxwKQplbHNlIHE9ITEKaWYocSlyZXR1
+cm4gci53KDApCndoaWxlKCEwKXtxPXMuZAppZihxLmxlbmd0aD4wKXtwPXIuZApxPXAubGVuZ3RoPjAm
+JnQuTmMocVswXSxwWzBdKX1lbHNlIHE9ITEKaWYoIXEpYnJlYWsKQy5ObS5XNChzLmQsMCkKQy5ObS5X
+NChzLmUsMSkKQy5ObS5XNChyLmQsMCkKQy5ObS5XNChyLmUsMSl9cT1zLmQKaWYocS5sZW5ndGg+MCYm
+Si5STShxWzBdLCIuLiIpKXRocm93IEguYihYLkpUKG4rSC5kKGEpKyciIGZyb20gIicrSC5kKGIpKyci
+LicpKQpxPXUuTgpDLk5tLlVHKHIuZCwwLFAuTzgocy5kLmxlbmd0aCwiLi4iLHEpKQpDLk5tLlkoci5l
+LDAsIiIpCkMuTm0uVUcoci5lLDEsUC5POChzLmQubGVuZ3RoLHQuZ21JKCkscSkpCnQ9ci5kCnE9dC5s
+ZW5ndGgKaWYocT09PTApcmV0dXJuIi4iCmlmKHE+MSYmSi5STShDLk5tLmdyWih0KSwiLiIpKXt0PXIu
+ZAppZigwPj10Lmxlbmd0aClyZXR1cm4gSC5PSCh0LC0xKQp0LnBvcCgpCnQ9ci5lCkMuTm0ubXYodCkK
+Qy5ObS5tdih0KQpDLk5tLmkodCwiIil9ci5iPSIiCnIuSVYoKQpyZXR1cm4gci53KDApfX0KTS5NaS5w
+cm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXtyZXR1cm4gSC55KGEpIT1udWxsfSwKJFM6OH0KTS5xNy5w
+cm90b3R5cGU9ewokMTpmdW5jdGlvbihhKXtyZXR1cm4gSC55KGEpIT09IiJ9LAokUzo4fQpNLk5vLnBy
+b3RvdHlwZT17CiQxOmZ1bmN0aW9uKGEpe0gueShhKQpyZXR1cm4gYT09bnVsbD8ibnVsbCI6JyInK2Er
+JyInfSwKJFM6NX0KQi5MdS5wcm90b3R5cGU9ewp4WjpmdW5jdGlvbihhKXt2YXIgdCxzPXRoaXMuWXIo
+YSkKaWYocz4wKXJldHVybiBKLmxkKGEsMCxzKQppZih0aGlzLmhLKGEpKXtpZigwPj1hLmxlbmd0aCly
+ZXR1cm4gSC5PSChhLDApCnQ9YVswXX1lbHNlIHQ9bnVsbApyZXR1cm4gdH0sCk5jOmZ1bmN0aW9uKGEs
+Yil7cmV0dXJuIGE9PWJ9fQpYLldELnByb3RvdHlwZT17CklWOmZ1bmN0aW9uKCl7dmFyIHQscyxyPXRo
+aXMKd2hpbGUoITApe3Q9ci5kCmlmKCEodC5sZW5ndGghPT0wJiZKLlJNKEMuTm0uZ3JaKHQpLCIiKSkp
+YnJlYWsKdD1yLmQKaWYoMD49dC5sZW5ndGgpcmV0dXJuIEguT0godCwtMSkKdC5wb3AoKQpDLk5tLm12
+KHIuZSl9dD1yLmUKcz10Lmxlbmd0aAppZihzPjApQy5ObS5ZKHQscy0xLCIiKX0sCnJSOmZ1bmN0aW9u
+KCl7dmFyIHQscyxyLHEscCxvLG4sbT10aGlzLGw9SC5WTShbXSx1LnMpCmZvcih0PW0uZCxzPXQubGVu
+Z3RoLHI9MCxxPTA7cTx0Lmxlbmd0aDt0Lmxlbmd0aD09PXN8fCgwLEgubGspKHQpLCsrcSl7cD10W3Fd
+Cm89Si5pYShwKQppZighKG8uRE4ocCwiLiIpfHxvLkROKHAsIiIpKSlpZihvLkROKHAsIi4uIikpaWYo
+bC5sZW5ndGg+MClsLnBvcCgpCmVsc2UgKytyCmVsc2UgQy5ObS5pKGwscCl9aWYobS5iPT1udWxsKUMu
+Tm0uVUcobCwwLFAuTzgociwiLi4iLHUuTikpCmlmKGwubGVuZ3RoPT09MCYmbS5iPT1udWxsKUMuTm0u
+aShsLCIuIikKbj1QLmRIKGwubGVuZ3RoLG5ldyBYLnFSKG0pLCEwLHUuTikKdD1tLmIKdD10IT1udWxs
+JiZsLmxlbmd0aD4wJiZtLmEuZHModCk/bS5hLmdtSSgpOiIiCkgudDYobikuZC5iKHQpCmlmKCEhbi5m
+aXhlZCRsZW5ndGgpSC52aChQLkw0KCJpbnNlcnQiKSkKbi5zcGxpY2UoMCwwLHQpCm0uc25KKGwpCm0u
+c1BoKG4pCnQ9bS5iCmlmKHQhPW51bGwmJm0uYT09PSQuS2soKSl7dC50b1N0cmluZwptLmI9SC55cyh0
+LCIvIiwiXFwiKX1tLklWKCl9LAp3OmZ1bmN0aW9uKGEpe3ZhciB0LHMscj10aGlzLHE9ci5iCnE9cSE9
+bnVsbD9xOiIiCmZvcih0PTA7dDxyLmQubGVuZ3RoOysrdCl7cz1yLmUKaWYodD49cy5sZW5ndGgpcmV0
+dXJuIEguT0gocyx0KQpzPXErSC5kKHNbdF0pCnE9ci5kCmlmKHQ+PXEubGVuZ3RoKXJldHVybiBILk9I
+KHEsdCkKcT1zK0guZChxW3RdKX1xKz1ILmQoQy5ObS5nclooci5lKSkKcmV0dXJuIHEuY2hhckNvZGVB
+dCgwKT09MD9xOnF9LApzbko6ZnVuY3Rpb24oYSl7dGhpcy5kPXUuYS5iKGEpfSwKc1BoOmZ1bmN0aW9u
+KGEpe3RoaXMuZT11LmEuYihhKX19ClgucVIucHJvdG90eXBlPXsKJDE6ZnVuY3Rpb24oYSl7cmV0dXJu
+IHRoaXMuYS5hLmdtSSgpfSwKJFM6NDN9ClguZHYucHJvdG90eXBlPXsKdzpmdW5jdGlvbihhKXtyZXR1
+cm4iUGF0aEV4Y2VwdGlvbjogIit0aGlzLmF9fQpPLnpMLnByb3RvdHlwZT17Cnc6ZnVuY3Rpb24oYSl7
+cmV0dXJuIHRoaXMuZ29jKHRoaXMpfX0KRS5PRi5wcm90b3R5cGU9ewpVZDpmdW5jdGlvbihhKXtyZXR1
+cm4gQy54Qi50ZyhhLCIvIil9LApyNDpmdW5jdGlvbihhKXtyZXR1cm4gYT09PTQ3fSwKZHM6ZnVuY3Rp
+b24oYSl7dmFyIHQ9YS5sZW5ndGgKcmV0dXJuIHQhPT0wJiZDLnhCLm0oYSx0LTEpIT09NDd9LApTcDpm
+dW5jdGlvbihhLGIpe2lmKGEubGVuZ3RoIT09MCYmQy54Qi5XKGEsMCk9PT00NylyZXR1cm4gMQpyZXR1
+cm4gMH0sCllyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLlNwKGEsITEpfSwKaEs6ZnVuY3Rpb24oYSl7
+cmV0dXJuITF9LApnb2M6ZnVuY3Rpb24oKXtyZXR1cm4icG9zaXgifSwKZ21JOmZ1bmN0aW9uKCl7cmV0
+dXJuIi8ifX0KRi5ydS5wcm90b3R5cGU9ewpVZDpmdW5jdGlvbihhKXtyZXR1cm4gQy54Qi50ZyhhLCIv
+Iil9LApyNDpmdW5jdGlvbihhKXtyZXR1cm4gYT09PTQ3fSwKZHM6ZnVuY3Rpb24oYSl7dmFyIHQ9YS5s
+ZW5ndGgKaWYodD09PTApcmV0dXJuITEKaWYoQy54Qi5tKGEsdC0xKSE9PTQ3KXJldHVybiEwCnJldHVy
+biBDLnhCLlRjKGEsIjovLyIpJiZ0aGlzLllyKGEpPT09dH0sClNwOmZ1bmN0aW9uKGEsYil7dmFyIHQs
+cyxyLHEscD1hLmxlbmd0aAppZihwPT09MClyZXR1cm4gMAppZihDLnhCLlcoYSwwKT09PTQ3KXJldHVy
+biAxCmZvcih0PTA7dDxwOysrdCl7cz1DLnhCLlcoYSx0KQppZihzPT09NDcpcmV0dXJuIDAKaWYocz09
+PTU4KXtpZih0PT09MClyZXR1cm4gMApyPUMueEIuWFUoYSwiLyIsQy54Qi5RaShhLCIvLyIsdCsxKT90
+KzM6dCkKaWYocjw9MClyZXR1cm4gcAppZighYnx8cDxyKzMpcmV0dXJuIHIKaWYoIUMueEIubihhLCJm
+aWxlOi8vIikpcmV0dXJuIHIKaWYoIUIuWXUoYSxyKzEpKXJldHVybiByCnE9ciszCnJldHVybiBwPT09
+cT9xOnIrNH19cmV0dXJuIDB9LApZcjpmdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5TcChhLCExKX0sCmhL
+OmZ1bmN0aW9uKGEpe3JldHVybiBhLmxlbmd0aCE9PTAmJkMueEIuVyhhLDApPT09NDd9LApnb2M6ZnVu
+Y3Rpb24oKXtyZXR1cm4idXJsIn0sCmdtSTpmdW5jdGlvbigpe3JldHVybiIvIn19CkwuSVYucHJvdG90
+eXBlPXsKVWQ6ZnVuY3Rpb24oYSl7cmV0dXJuIEMueEIudGcoYSwiLyIpfSwKcjQ6ZnVuY3Rpb24oYSl7
+cmV0dXJuIGE9PT00N3x8YT09PTkyfSwKZHM6ZnVuY3Rpb24oYSl7dmFyIHQ9YS5sZW5ndGgKaWYodD09
+PTApcmV0dXJuITEKdD1DLnhCLm0oYSx0LTEpCnJldHVybiEodD09PTQ3fHx0PT09OTIpfSwKU3A6ZnVu
+Y3Rpb24oYSxiKXt2YXIgdCxzLHI9YS5sZW5ndGgKaWYocj09PTApcmV0dXJuIDAKdD1DLnhCLlcoYSww
+KQppZih0PT09NDcpcmV0dXJuIDEKaWYodD09PTkyKXtpZihyPDJ8fEMueEIuVyhhLDEpIT09OTIpcmV0
+dXJuIDEKcz1DLnhCLlhVKGEsIlxcIiwyKQppZihzPjApe3M9Qy54Qi5YVShhLCJcXCIscysxKQppZihz
+PjApcmV0dXJuIHN9cmV0dXJuIHJ9aWYocjwzKXJldHVybiAwCmlmKCFCLk9TKHQpKXJldHVybiAwCmlm
+KEMueEIuVyhhLDEpIT09NTgpcmV0dXJuIDAKcj1DLnhCLlcoYSwyKQppZighKHI9PT00N3x8cj09PTky
+KSlyZXR1cm4gMApyZXR1cm4gM30sCllyOmZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLlNwKGEsITEpfSwK
+aEs6ZnVuY3Rpb24oYSl7cmV0dXJuIHRoaXMuWXIoYSk9PT0xfSwKT3Q6ZnVuY3Rpb24oYSxiKXt2YXIg
+dAppZihhPT09YilyZXR1cm4hMAppZihhPT09NDcpcmV0dXJuIGI9PT05MgppZihhPT09OTIpcmV0dXJu
+IGI9PT00NwppZigoYV5iKSE9PTMyKXJldHVybiExCnQ9YXwzMgpyZXR1cm4gdD49OTcmJnQ8PTEyMn0s
+Ck5jOmZ1bmN0aW9uKGEsYil7dmFyIHQscyxyCmlmKGE9PWIpcmV0dXJuITAKdD1hLmxlbmd0aAppZih0
+IT09Yi5sZW5ndGgpcmV0dXJuITEKZm9yKHM9Si5yWShiKSxyPTA7cjx0OysrcilpZighdGhpcy5PdChD
+LnhCLlcoYSxyKSxzLlcoYixyKSkpcmV0dXJuITEKcmV0dXJuITB9LApnb2M6ZnVuY3Rpb24oKXtyZXR1
+cm4id2luZG93cyJ9LApnbUk6ZnVuY3Rpb24oKXtyZXR1cm4iXFwifX07KGZ1bmN0aW9uIGFsaWFzZXMo
+KXt2YXIgdD1KLnZCLnByb3RvdHlwZQp0LlU9dC53CnQuU2o9dC5lNwp0PUouTUYucHJvdG90eXBlCnQu
+dD10LncKdD1QLmNYLnByb3RvdHlwZQp0LkdHPXQuZXYKdD1QLmsucHJvdG90eXBlCnQueGI9dC53CnQ9
+Vy5jdi5wcm90b3R5cGUKdC5EVz10LnI2CnQ9Vy5tNi5wcm90b3R5cGUKdC5qRj10LkViCnQ9UC5FNC5w
+cm90b3R5cGUKdC5Vcj10LnEKdC5lND10Lll9KSgpOyhmdW5jdGlvbiBpbnN0YWxsVGVhck9mZnMoKXt2
+YXIgdD1odW5rSGVscGVycy5fc3RhdGljXzEscz1odW5rSGVscGVycy5fc3RhdGljXzAscj1odW5rSGVs
+cGVycy5pbnN0YWxsSW5zdGFuY2VUZWFyT2ZmLHE9aHVua0hlbHBlcnMuaW5zdGFsbFN0YXRpY1RlYXJP
+ZmYscD1odW5rSGVscGVycy5faW5zdGFuY2VfMXUKdChQLCJFWCIsIlpWIiw5KQp0KFAsInl0Iiwib0Ei
+LDkpCnQoUCwicVciLCJCeiIsOSkKcyhQLCJVSSIsImVOIiwyKQpyKFAuUGYucHJvdG90eXBlLCJnWUoi
+LDAsMSxudWxsLFsiJDIiLCIkMSJdLFsidzAiLCJwbSJdLDQ0LDApCnQoUCwiUEgiLCJNdCIsNSkKcShX
+LCJwUyIsNCxudWxsLFsiJDQiXSxbInlXIl0sMTUsMCkKcShXLCJWNCIsNCxudWxsLFsiJDQiXSxbIlFX
+Il0sMTUsMCkKcChQLkFzLnByb3RvdHlwZSwiZ3VNIiwiVCIsNSkKdChQLCJpRyIsIndZIiw0KQp0KFAs
+IncwIiwiTDciLDMwKQp0KEwsIkgwIiwidW0iLDE2KX0pKCk7KGZ1bmN0aW9uIGluaGVyaXRhbmNlKCl7
+dmFyIHQ9aHVua0hlbHBlcnMubWl4aW4scz1odW5rSGVscGVycy5pbmhlcml0LHI9aHVua0hlbHBlcnMu
+aW5oZXJpdE1hbnkKcyhQLmssbnVsbCkKcihQLmssW0guZW8sSi52QixKLm0xLFAublksUC5jWCxILmE3
+LFAuQW4sSC5TVSxILlJlLEgud3YsUC5QbixILldVLEguTEksSC5UcCxILmY5LFAuWFMsSC5icSxILlhP
+LFAuWWssSC5kYixILk42LEguVlIsSC5FSyxILlBiLEgudFEsSC5TZCxILkpjLEguRyxQLlczLFAuaWgs
+UC5QZixQLkZlLFAudnMsUC5PTSxQLnFoLFAuTU8sUC5rVCxQLnhJLFAuQ3csUC5tMCxQLlh2LFAuYm4s
+UC5sbSxQLmxELFAuS1AsUC5sZixQLldZLFAuVWssUC5SdyxQLmJ6LFAuYTIsUC5pUCxQLkZLLFAuazUs
+UC5LWSxQLkNELFAuYUUsUC5FSCxQLnpNLFAuWjAsUC5jOCxQLk9kLFAuaWIsUC5HeixQLnFVLFAuUm4s
+UC5HRCxQLkRuLFAuUEUsUC5VZixXLmlkLFcuRmssVy5KUSxXLkdtLFcudkQsVy5tNixXLk93LFcuVzks
+Vy5kVyxXLkZiLFcua0YsVy5tayxXLktvLFAuaUosUC5FNCxQLm42LFUuZDIsVS5TZSxVLnVGLFUuTWws
+VS55RCxVLndiLEIuajgsQi5xcCxULkdWLEwuWEEsTC5aWixMLnk4LE0ubEksTy56TCxYLldELFguZHZd
+KQpyKEoudkIsW0oueUUsSi5ZRSxKLk1GLEouamQsSi5xSSxKLkRyLEguRVQsVy5EMCxXLkF6LFcuTGUs
+Vy5OaCxXLklCLFcubjcsVy5lYSxXLmJyLFcuU2csVy51OCxXLks3LFcuWFcsUC5oRl0pCnIoSi5NRixb
+Si5pQyxKLmtkLEouYzVdKQpzKEouUG8sSi5qZCkKcihKLnFJLFtKLnVyLEouVkFdKQpzKFAuTFUsUC5u
+WSkKcihQLkxVLFtILlhDLFcud3osVy5lN10pCnMoSC5xaixILlhDKQpyKFAuY1gsW0guYlEsSC5VNSxQ
+Lm1XLEgudW5dKQpyKEguYlEsW0guYUwsSC5pNSxQLnh1XSkKcihILmFMLFtILm5ILEguQTgsUC5pOF0p
+CnMoSC5TTyxQLkFuKQpzKFAuUlUsUC5QbikKcyhQLkdqLFAuUlUpCnMoSC5QRCxQLkdqKQpzKEguTFAs
+SC5XVSkKcihILlRwLFtILkNqLEguQW0sSC5sYyxILmRDLEgud04sSC5WWCxQLnRoLFAuaGEsUC5WcyxQ
+LkZ0LFAueUgsUC5XTSxQLlNYLFAuR3MsUC5kYSxQLm9RLFAucFYsUC5VNyxQLnZyLFAuckgsUC5LRixQ
+LlpMLFAuUlQsUC5qWixQLnJxLFAuUlcsUC5CNSxQLlBJLFAucEssUC5oaixQLlZwLFAuT1IsUC5yYSxQ
+LldGLFAubjEsUC5jUyxQLlZDLFAudHAsUC5lMSxQLk5ZLFAuUlosUC5NRSxQLnk1LFAucTMsUC55SSxQ
+LmM2LFAucWQsVy5DdixXLmJVLFcuaEgsVy5LUyxXLkEzLFcudk4sVy5VdixXLkVnLFcuRW8sVy5XayxX
+LklBLFcuZm0sUC5sUixQLmpnLFAuR0UsUC5ONyxQLnVRLFAuUEMsUC5ZbSxQLk56LFAubnAsUC5VdCxM
+LmUsTC5WVyxMLm9aLEwuanIsTC5xbCxMLkwsTC5XeCxMLkFPLEwuZE4sTC5IbyxMLnh6LEwuSUMsTC5M
+MSxMLm5ULEwuQlosTC5HSCxMLkRULEwuZUgsTC56RCxMLk9FLEwuVFcsTC54cixMLkVFLEwuUUwsTC5W
+UyxMLlRELE0uTWksTS5xNyxNLk5vLFgucVJdKQpyKFAuWFMsW0guVzAsSC5heixILnZWLEguRXEsUC5D
+NixILnU5LFAubixQLnUsUC5tcCxQLnViLFAuZHMsUC5saixQLlVWLFAuY10pCnIoSC5sYyxbSC56eCxI
+LnJUXSkKcyhILmtZLFAuQzYpCnMoUC5pbCxQLllrKQpyKFAuaWwsW0guTjUsUC51dyxXLmNmLFcuU3ld
+KQpzKEguS1csUC5tVykKcyhILmIwLEguRVQpCnIoSC5iMCxbSC5SRyxILldCXSkKcyhILlZQLEguUkcp
+CnMoSC5EZyxILlZQKQpzKEguWkcsSC5XQikKcyhILlBnLEguWkcpCnIoSC5QZyxbSC54aixILmRFLEgu
+WkEsSC53ZixILlBxLEguZUUsSC5WNl0pCnIoSC51OSxbSC5oeixILmlNXSkKcyhQLlpmLFAuUGYpCnMo
+UC5KaSxQLm0wKQpzKFAuYjYsUC5YdikKcyhQLlZqLFAuV1kpCnIoUC5VayxbUC5DVixQLlppLFAuYnld
+KQpzKFAud0ksUC5rVCkKcihQLndJLFtQLlU4LFAuTXgsUC5FMyxQLkdZXSkKcyhQLnU1LFAuWmkpCnIo
+UC5GSyxbUC5DUCxQLktOXSkKcihQLnUsW1AuYkosUC5lWV0pCnMoUC5xZSxQLkRuKQpyKFcuRDAsW1cu
+dUgsVy53YSxXLks1LFcuQ21dKQpyKFcudUgsW1cuY3YsVy5ueCxXLlFGLFcuQ1FdKQpyKFcuY3YsW1cu
+cUUsUC5kNV0pCnIoVy5xRSxbVy5HaCxXLmZZLFcubkIsVy5RUCxXLmg0LFcuU04sVy5scCxXLlRiLFcu
+SXYsVy5CVCxXLnlZXSkKcyhXLm9KLFcuTGUpCnMoVy5UNSxXLkF6KQpzKFcuVmIsVy5RRikKcyhXLk83
+LFcud2EpCnIoVy5lYSxbVy53NixXLmV3XSkKcyhXLkFqLFcudzYpCnMoVy5yQixXLks3KQpzKFcuQkgs
+Vy5yQikKcyhXLnc0LFcuSUIpCnMoVy5vYSxXLlhXKQpzKFcucmgsVy5vYSkKcyhXLmk3LFcuY2YpCnMo
+UC5BcyxQLlZqKQpyKFAuQXMsW1cuSTQsUC5LZV0pCnMoVy5STyxQLnFoKQpzKFcuQ3EsVy5STykKcyhX
+LnhDLFAuTU8pCnMoVy5jdCxXLm02KQpzKFAuQmYsUC5pSikKcihQLkU0LFtQLnI3LFAuY29dKQpzKFAu
+VHosUC5jbykKcyhQLm5kLFAuZDUpCnMoQi5MdSxPLnpMKQpyKEIuTHUsW0UuT0YsRi5ydSxMLklWXSkK
+dChILlhDLEguUmUpCnQoSC5SRyxQLmxEKQp0KEguVlAsSC5TVSkKdChILldCLFAubEQpCnQoSC5aRyxI
+LlNVKQp0KFAublksUC5sRCkKdChQLldZLFAubGYpCnQoUC5SVSxQLktQKQp0KFcuTGUsVy5pZCkKdChX
+Lks3LFAubEQpCnQoVy5yQixXLkdtKQp0KFcuWFcsUC5sRCkKdChXLm9hLFcuR20pCnQoUC5jbyxQLmxE
+KX0pKCkKdmFyIHY9e3R5cGVVbml2ZXJzZTp7ZUM6bmV3IE1hcCgpLHRSOnt9LGVUOnt9LHRQVjp7fSxz
+RUE6W119LG1hbmdsZWRHbG9iYWxOYW1lczp7S046ImludCIsQ1A6ImRvdWJsZSIsRks6Im51bSIscVU6
+IlN0cmluZyIsYTI6ImJvb2wiLGM4OiJOdWxsIix6TToiTGlzdCJ9LG1hbmdsZWROYW1lczp7fSxnZXRU
+eXBlRnJvbU5hbWU6Z2V0R2xvYmFsRnJvbU5hbWUsbWV0YWRhdGE6W10sdHlwZXM6WyJjOCgpIiwiYzgo
+QCxAKSIsIn4oKSIsImM4KGN2KSIsIkAoQCkiLCJxVShxVSkiLCJjOChBaikiLCJjOChPNykiLCJhMihx
+VSkiLCJ+KH4oKSkiLCJjOChxVSxxVSkiLCJjOChxVSkiLCJjOChxVSxAKSIsImM4KGVhKSIsIn4oeHU8
+cVU+KSIsImEyKGN2LHFVLHFVLEpRKSIsIn4oQWopIiwiYTIoa0YpIiwiYzgoQCkiLCJLTihLTixLTiki
+LCJ+KEApIiwiYzgofigpKSIsIn4ocVUscVUpIiwiYzgoS04sQCkiLCJuNihALEApIiwiYTIodUgpIiwi
+fihxVVtAXSkiLCJjOChldykiLCJAKGVhKSIsIn4ocVUsS04pIiwiayhAKSIsIn4odUgsdUgpIiwiYzgo
+R0QsQCkiLCJjOChALEd6KSIsInI3KEApIiwiVHo8QD4oQCkiLCJFNChAKSIsInZzPEA+KEApIiwiQChA
+LHFVKSIsIlowPHFVLHFVPihaMDxxVSxxVT4scVUpIiwiQChxVSkiLCJPNyhPNykiLCJjOChAW0d6XSki
+LCJxVShLTikiLCJ+KGtbR3pdKSIsImEyKHh1PHFVPikiLCJuNihLTikiXSxpbnRlcmNlcHRvcnNCeVRh
+ZzpudWxsLGxlYWZUYWdzOm51bGx9CkgueGIodi50eXBlVW5pdmVyc2UsSlNPTi5wYXJzZSgneyJjNSI6
+Ik1GIiwiaUMiOiJNRiIsImtkIjoiTUYiLCJyeCI6ImVhIiwiZTUiOiJlYSIsIlkwIjoiZDUiLCJXdCI6
+ImQ1IiwidjAiOiJldyIsIk1yIjoicUUiLCJlTCI6InFFIiwiSTAiOiJ1SCIsImhzIjoidUgiLCJYZyI6
+IlFGIiwieWMiOiJBaiIsInk0IjoidzYiLCJhUCI6IkNtIiwieGMiOiJueCIsImtKIjoibngiLCJ6VSI6
+IkRnIiwiZGYiOiJFVCIsInlFIjp7ImEyIjpbXX0sIllFIjp7ImM4IjpbXX0sIk1GIjp7InZtIjpbXSwi
+RUgiOltdfSwiamQiOnsiek0iOlsiMSJdLCJjWCI6WyIxIl19LCJQbyI6eyJqZCI6WyIxIl0sInpNIjpb
+IjEiXSwiY1giOlsiMSJdfSwibTEiOnsiQW4iOlsiMSJdfSwicUkiOnsiQ1AiOltdLCJGSyI6W119LCJ1
+ciI6eyJLTiI6W10sIkNQIjpbXSwiRksiOltdfSwiVkEiOnsiQ1AiOltdLCJGSyI6W119LCJEciI6eyJx
+VSI6W10sInZYIjpbXX0sInFqIjp7IlJlIjpbIktOIl0sImxEIjpbIktOIl0sInpNIjpbIktOIl0sImNY
+IjpbIktOIl0sImxELkUiOiJLTiIsIlJlLkUiOiJLTiJ9LCJiUSI6eyJjWCI6WyIxIl19LCJhTCI6eyJj
+WCI6WyIxIl19LCJuSCI6eyJhTCI6WyIxIl0sImNYIjpbIjEiXSwiYUwuRSI6IjEiLCJjWC5FIjoiMSJ9
+LCJhNyI6eyJBbiI6WyIxIl19LCJBOCI6eyJhTCI6WyIyIl0sImNYIjpbIjIiXSwiYUwuRSI6IjIiLCJj
+WC5FIjoiMiJ9LCJVNSI6eyJjWCI6WyIxIl0sImNYLkUiOiIxIn0sIlNPIjp7IkFuIjpbIjEiXX0sIlhD
+Ijp7IlJlIjpbIjEiXSwibEQiOlsiMSJdLCJ6TSI6WyIxIl0sImNYIjpbIjEiXX0sInd2Ijp7IkdEIjpb
+XX0sIlBEIjp7IkdqIjpbIjEiLCIyIl0sIlJVIjpbIjEiLCIyIl0sIlBuIjpbIjEiLCIyIl0sIktQIjpb
+IjEiLCIyIl0sIlowIjpbIjEiLCIyIl19LCJXVSI6eyJaMCI6WyIxIiwiMiJdfSwiTFAiOnsiV1UiOlsi
+MSIsIjIiXSwiWjAiOlsiMSIsIjIiXX0sIkxJIjp7InZRIjpbXX0sIlcwIjp7IlhTIjpbXX0sImF6Ijp7
+IlhTIjpbXX0sInZWIjp7IlhTIjpbXX0sIlhPIjp7Ikd6IjpbXX0sIlRwIjp7IkVIIjpbXX0sImxjIjp7
+IkVIIjpbXX0sInp4Ijp7IkVIIjpbXX0sInJUIjp7IkVIIjpbXX0sIkVxIjp7IlhTIjpbXX0sImtZIjp7
+IlhTIjpbXX0sIk41Ijp7IkZvIjpbIjEiLCIyIl0sIllrIjpbIjEiLCIyIl0sIlowIjpbIjEiLCIyIl0s
+IllrLksiOiIxIiwiWWsuViI6IjIifSwiaTUiOnsiY1giOlsiMSJdLCJjWC5FIjoiMSJ9LCJONiI6eyJB
+biI6WyIxIl19LCJWUiI6eyJ3TCI6W10sInZYIjpbXX0sIkVLIjp7ImliIjpbXSwiT2QiOltdfSwiS1ci
+OnsiY1giOlsiaWIiXSwiY1guRSI6ImliIn0sIlBiIjp7IkFuIjpbImliIl19LCJ0USI6eyJPZCI6W119
+LCJ1biI6eyJjWCI6WyJPZCJdLCJjWC5FIjoiT2QifSwiU2QiOnsiQW4iOlsiT2QiXX0sIkVUIjp7IkFT
+IjpbXX0sImIwIjp7IlhqIjpbIkAiXSwiRVQiOltdLCJBUyI6W119LCJEZyI6eyJsRCI6WyJDUCJdLCJY
+aiI6WyJAIl0sInpNIjpbIkNQIl0sIkVUIjpbXSwiU1UiOlsiQ1AiXSwiQVMiOltdLCJjWCI6WyJDUCJd
+LCJsRC5FIjoiQ1AifSwiUGciOnsibEQiOlsiS04iXSwiek0iOlsiS04iXSwiWGoiOlsiQCJdLCJFVCI6
+W10sIlNVIjpbIktOIl0sIkFTIjpbXSwiY1giOlsiS04iXX0sInhqIjp7ImxEIjpbIktOIl0sInpNIjpb
+IktOIl0sIlhqIjpbIkAiXSwiRVQiOltdLCJTVSI6WyJLTiJdLCJBUyI6W10sImNYIjpbIktOIl0sImxE
+LkUiOiJLTiJ9LCJkRSI6eyJsRCI6WyJLTiJdLCJ6TSI6WyJLTiJdLCJYaiI6WyJAIl0sIkVUIjpbXSwi
+U1UiOlsiS04iXSwiQVMiOltdLCJjWCI6WyJLTiJdLCJsRC5FIjoiS04ifSwiWkEiOnsibEQiOlsiS04i
+XSwiek0iOlsiS04iXSwiWGoiOlsiQCJdLCJFVCI6W10sIlNVIjpbIktOIl0sIkFTIjpbXSwiY1giOlsi
+S04iXSwibEQuRSI6IktOIn0sIndmIjp7ImxEIjpbIktOIl0sInpNIjpbIktOIl0sIlhqIjpbIkAiXSwi
+RVQiOltdLCJTVSI6WyJLTiJdLCJBUyI6W10sImNYIjpbIktOIl0sImxELkUiOiJLTiJ9LCJQcSI6eyJs
+RCI6WyJLTiJdLCJ6TSI6WyJLTiJdLCJYaiI6WyJAIl0sIkVUIjpbXSwiU1UiOlsiS04iXSwiQVMiOltd
+LCJjWCI6WyJLTiJdLCJsRC5FIjoiS04ifSwiZUUiOnsibEQiOlsiS04iXSwiek0iOlsiS04iXSwiWGoi
+OlsiQCJdLCJFVCI6W10sIlNVIjpbIktOIl0sIkFTIjpbXSwiY1giOlsiS04iXSwibEQuRSI6IktOIn0s
+IlY2Ijp7Im42IjpbXSwibEQiOlsiS04iXSwiek0iOlsiS04iXSwiWGoiOlsiQCJdLCJFVCI6W10sIlNV
+IjpbIktOIl0sIkFTIjpbXSwiY1giOlsiS04iXSwibEQuRSI6IktOIn0sInU5Ijp7IlhTIjpbXX0sImh6
+Ijp7IlhTIjpbXX0sImlNIjp7IlhTIjpbXX0sIlpmIjp7IlBmIjpbIjEiXX0sInZzIjp7ImI4IjpbIjEi
+XX0sIkN3Ijp7IlhTIjpbXX0sIm0wIjp7IkpCIjpbXX0sIkppIjp7IkpCIjpbXX0sImI2Ijp7Ilh2Ijpb
+IjEiXSwieHUiOlsiMSJdLCJjWCI6WyIxIl19LCJsbSI6eyJBbiI6WyIxIl19LCJtVyI6eyJjWCI6WyIx
+Il19LCJMVSI6eyJsRCI6WyIxIl0sInpNIjpbIjEiXSwiY1giOlsiMSJdfSwiaWwiOnsiWWsiOlsiMSIs
+IjIiXSwiWjAiOlsiMSIsIjIiXX0sIllrIjp7IlowIjpbIjEiLCIyIl19LCJQbiI6eyJaMCI6WyIxIiwi
+MiJdfSwiR2oiOnsiUlUiOlsiMSIsIjIiXSwiUG4iOlsiMSIsIjIiXSwiS1AiOlsiMSIsIjIiXSwiWjAi
+OlsiMSIsIjIiXX0sIlZqIjp7ImxmIjpbIjEiXSwieHUiOlsiMSJdLCJjWCI6WyIxIl19LCJYdiI6eyJ4
+dSI6WyIxIl0sImNYIjpbIjEiXX0sInV3Ijp7IllrIjpbInFVIiwiQCJdLCJaMCI6WyJxVSIsIkAiXSwi
+WWsuSyI6InFVIiwiWWsuViI6IkAifSwiaTgiOnsiYUwiOlsicVUiXSwiY1giOlsicVUiXSwiYUwuRSI6
+InFVIiwiY1guRSI6InFVIn0sIkNWIjp7IlVrIjpbInpNPEtOPiIsInFVIl0sIlVrLlMiOiJ6TTxLTj4i
+fSwiVTgiOnsid0kiOlsiek08S04+IiwicVUiXX0sIlppIjp7IlVrIjpbInFVIiwiek08S04+Il19LCJi
+eSI6eyJVayI6WyJrIiwicVUiXSwiVWsuUyI6ImsifSwiTXgiOnsid0kiOlsicVUiLCJrIl19LCJ1NSI6
+eyJVayI6WyJxVSIsInpNPEtOPiJdLCJVay5TIjoicVUifSwiRTMiOnsid0kiOlsicVUiLCJ6TTxLTj4i
+XX0sIkdZIjp7IndJIjpbInpNPEtOPiIsInFVIl19LCJDUCI6eyJGSyI6W119LCJDNiI6eyJYUyI6W119
+LCJuIjp7IlhTIjpbXX0sInUiOnsiWFMiOltdfSwiYkoiOnsiWFMiOltdfSwiZVkiOnsiWFMiOltdfSwi
+bXAiOnsiWFMiOltdfSwidWIiOnsiWFMiOltdfSwiZHMiOnsiWFMiOltdfSwibGoiOnsiWFMiOltdfSwi
+VVYiOnsiWFMiOltdfSwiazUiOnsiWFMiOltdfSwiS1kiOnsiWFMiOltdfSwiYyI6eyJYUyI6W119LCJL
+TiI6eyJGSyI6W119LCJ6TSI6eyJjWCI6WyIxIl19LCJpYiI6eyJPZCI6W119LCJ4dSI6eyJjWCI6WyIx
+Il19LCJxVSI6eyJ2WCI6W119LCJSbiI6eyJCTCI6W119LCJEbiI6eyJpRCI6W119LCJVZiI6eyJpRCI6
+W119LCJxZSI6eyJpRCI6W119LCJxRSI6eyJjdiI6W10sInVIIjpbXSwiRDAiOltdfSwiR2giOnsiY3Yi
+OltdLCJ1SCI6W10sIkQwIjpbXX0sImZZIjp7ImN2IjpbXSwidUgiOltdLCJEMCI6W119LCJuQiI6eyJj
+diI6W10sInVIIjpbXSwiRDAiOltdfSwiUVAiOnsiY3YiOltdLCJ1SCI6W10sIkQwIjpbXX0sIm54Ijp7
+InVIIjpbXSwiRDAiOltdfSwiUUYiOnsidUgiOltdLCJEMCI6W119LCJJQiI6eyJ0biI6WyJGSyJdfSwi
+d3oiOnsibEQiOlsiMSJdLCJ6TSI6WyIxIl0sImNYIjpbIjEiXSwibEQuRSI6IjEifSwiY3YiOnsidUgi
+OltdLCJEMCI6W119LCJUNSI6eyJBeiI6W119LCJoNCI6eyJjdiI6W10sInVIIjpbXSwiRDAiOltdfSwi
+VmIiOnsidUgiOltdLCJEMCI6W119LCJPNyI6eyJEMCI6W119LCJ3YSI6eyJEMCI6W119LCJBaiI6eyJl
+YSI6W119LCJlNyI6eyJsRCI6WyJ1SCJdLCJ6TSI6WyJ1SCJdLCJjWCI6WyJ1SCJdLCJsRC5FIjoidUgi
+fSwidUgiOnsiRDAiOltdfSwiQkgiOnsiR20iOlsidUgiXSwibEQiOlsidUgiXSwiek0iOlsidUgiXSwi
+WGoiOlsidUgiXSwiY1giOlsidUgiXSwibEQuRSI6InVIIiwiR20uRSI6InVIIn0sIlNOIjp7ImN2Ijpb
+XSwidUgiOltdLCJEMCI6W119LCJldyI6eyJlYSI6W119LCJscCI6eyJjdiI6W10sInVIIjpbXSwiRDAi
+OltdfSwiVGIiOnsiY3YiOltdLCJ1SCI6W10sIkQwIjpbXX0sIkl2Ijp7ImN2IjpbXSwidUgiOltdLCJE
+MCI6W119LCJCVCI6eyJjdiI6W10sInVIIjpbXSwiRDAiOltdfSwieVkiOnsiY3YiOltdLCJ1SCI6W10s
+IkQwIjpbXX0sInc2Ijp7ImVhIjpbXX0sIks1Ijp7InY2IjpbXSwiRDAiOltdfSwiQ20iOnsiRDAiOltd
+fSwiQ1EiOnsidUgiOltdLCJEMCI6W119LCJ3NCI6eyJ0biI6WyJGSyJdfSwicmgiOnsiR20iOlsidUgi
+XSwibEQiOlsidUgiXSwiek0iOlsidUgiXSwiWGoiOlsidUgiXSwiY1giOlsidUgiXSwibEQuRSI6InVI
+IiwiR20uRSI6InVIIn0sImNmIjp7IllrIjpbInFVIiwicVUiXSwiWjAiOlsicVUiLCJxVSJdfSwiaTci
+OnsiWWsiOlsicVUiLCJxVSJdLCJaMCI6WyJxVSIsInFVIl0sIllrLksiOiJxVSIsIllrLlYiOiJxVSJ9
+LCJTeSI6eyJZayI6WyJxVSIsInFVIl0sIlowIjpbInFVIiwicVUiXSwiWWsuSyI6InFVIiwiWWsuViI6
+InFVIn0sIkk0Ijp7ImxmIjpbInFVIl0sInh1IjpbInFVIl0sImNYIjpbInFVIl19LCJSTyI6eyJxaCI6
+WyIxIl19LCJDcSI6eyJSTyI6WyIxIl0sInFoIjpbIjEiXX0sInhDIjp7Ik1PIjpbIjEiXX0sIkpRIjp7
+ImtGIjpbXX0sInZEIjp7ImtGIjpbXX0sIm02Ijp7ImtGIjpbXX0sImN0Ijp7ImtGIjpbXX0sIk93Ijp7
+ImtGIjpbXX0sIlc5Ijp7IkFuIjpbIjEiXX0sImRXIjp7InY2IjpbXSwiRDAiOltdfSwibWsiOnsieTAi
+OltdfSwiS28iOnsib24iOltdfSwiQXMiOnsibGYiOlsicVUiXSwieHUiOlsicVUiXSwiY1giOlsicVUi
+XX0sInI3Ijp7IkU0IjpbXX0sIlR6Ijp7ImxEIjpbIjEiXSwiek0iOlsiMSJdLCJFNCI6W10sImNYIjpb
+IjEiXSwibEQuRSI6IjEifSwibmQiOnsiZDUiOltdLCJjdiI6W10sInVIIjpbXSwiRDAiOltdfSwiS2Ui
+OnsibGYiOlsicVUiXSwieHUiOlsicVUiXSwiY1giOlsicVUiXX0sImQ1Ijp7ImN2IjpbXSwidUgiOltd
+LCJEMCI6W119LCJuNiI6eyJ6TSI6WyJLTiJdLCJBUyI6W10sImNYIjpbIktOIl19LCJYQSI6eyJrRiI6
+W119LCJPRiI6eyJMdSI6W119LCJydSI6eyJMdSI6W119LCJJViI6eyJMdSI6W119fScpKQpILkZGKHYu
+dHlwZVVuaXZlcnNlLEpTT04ucGFyc2UoJ3siYlEiOjEsIlhDIjoxLCJNTyI6MSwia1QiOjIsIm1XIjox
+LCJMVSI6MSwiaWwiOjIsIlZqIjoxLCJuWSI6MSwiV1kiOjEsImNvIjoxfScpKQp2YXIgdT0oZnVuY3Rp
+b24gcnRpaSgpe3ZhciB0PUguTjAKcmV0dXJue2k6dCgiR2giKSxuOnQoIkN3IiksY1I6dCgibkIiKSxk
+OnQoIkF6IiksWTp0KCJRUCIpLGdGOnQoIlBEPEdELEA+IiksaDp0KCJjdiIpLGJVOnQoIlhTIiksQjp0
+KCJlYSIpLGFTOnQoIkQwIiksYzg6dCgiVDUiKSxaOnQoIkVIIiksYzp0KCJiODxAPiIpLHI6dCgiTzci
+KSxJOnQoIlNnIiksbzp0KCJ2USIpLGVoOnQoImNYPHVIPiIpLFg6dCgiY1g8cVU+IiksUjp0KCJjWDxA
+PiIpLGZBOnQoImpkPFNlPiIpLHU6dCgiamQ8ajg+IiksYlA6dCgiamQ8dUY+IiksZmg6dCgiamQ8Wlo+
+Iiksazp0KCJqZDxrRj4iKSxzOnQoImpkPHFVPiIpLGhoOnQoImpkPHlEPiIpLGFKOnQoImpkPHdiPiIp
+LG06dCgiamQ8QD4iKSx0OnQoImpkPEtOPiIpLGVIOnQoInZtIiksZzp0KCJjNSIpLGFVOnQoIlhqPEA+
+IiksYW06dCgiVHo8QD4iKSxlbzp0KCJONTxHRCxAPiIpLHY6dCgiRTQiKSxkejp0KCJoRiIpLGE6dCgi
+ek08cVU+Iiksajp0KCJ6TTxAPiIpLEw6dCgiek08S04+IiksRjp0KCJ1OCIpLGY6dCgiWjA8cVUscVU+
+IiksYjp0KCJaMDxxVSxAPiIpLEc6dCgiWjA8QCxAPiIpLGR2OnQoIkE4PHFVLHFVPiIpLGRvOnQoIkE4
+PHFVLEA+IiksVjp0KCJBaiIpLGREOnQoIkVUIiksYm06dCgiVjYiKSxBOnQoInVIIiksZTp0KCJrRiIp
+LFA6dCgiYzgiKSxLOnQoImsiKSxwOnQoImV3IikscTp0KCJ0bjxGSz4iKSxmdjp0KCJ3TCIpLGF2OnQo
+IkpjIiksZXc6dCgibmQiKSxDOnQoInh1PHFVPiIpLGw6dCgiR3oiKSxOOnQoInFVIiksZEc6dCgicVUo
+cVUpIiksZzc6dCgiZDUiKSxmbzp0KCJHRCIpLGFXOnQoInlZIiksdzp0KCJBUyIpLGdjOnQoIm42Iiks
+YWs6dCgia2QiKSxUOnQoIkdqPHFVLHFVPiIpLEQ6dCgiaUQiKSxjYzp0KCJVNTxxVT4iKSxnNDp0KCJL
+NSIpLGNpOnQoInY2IiksZzI6dCgiQ20iKSxiajp0KCJaZjxPNz4iKSxoOTp0KCJDUSIpLGFjOnQoImU3
+IiksUTp0KCJDcTxBaj4iKSxTOnQoInd6PGN2PiIpLHg6dCgiRmU8QCxAPiIpLGFvOnQoInZzPE83PiIp
+LF86dCgidnM8QD4iKSxmSjp0KCJ2czxLTj4iKSxPOnQoIkpRIiksSjp0KCJibiIpLGNKOnQoImEyIiks
+YWw6dCgiYTIoaykiKSxiQjp0KCJhMihxVSkiKSxiZjp0KCJhMihAKSIpLHo6dCgiQCIpLGZPOnQoIkAo
+KSIpLFU6dCgiQChlYSkiKSx5OnQoIkAoaykiKSxlcDp0KCJAKGssaykiKSxXOnQoIkAoayxHeikiKSxj
+aDp0KCJAKHh1PHFVPikiKSxkTzp0KCJAKHFVKSIpLGI4OnQoIkAoQCxAKSIpLGVnOnQoIktOIiksSDp0
+KCJ+IiksTTp0KCJ+KCkiKSxhbjp0KCJ+KGV3KSIpLEU6dCgifihxVSxxVSkiKSxjQTp0KCJ+KHFVLEAp
+Iil9fSkoKTsoZnVuY3Rpb24gY29uc3RhbnRzKCl7dmFyIHQ9aHVua0hlbHBlcnMubWFrZUNvbnN0TGlz
+dApDLlJZPVcuUVAucHJvdG90eXBlCkMuQlo9Vy5WYi5wcm90b3R5cGUKQy5EdD1XLk83LnByb3RvdHlw
+ZQpDLk9rPUoudkIucHJvdG90eXBlCkMuTm09Si5qZC5wcm90b3R5cGUKQy5qbj1KLnVyLnByb3RvdHlw
+ZQpDLmpOPUouWUUucHJvdG90eXBlCkMuQ0Q9Si5xSS5wcm90b3R5cGUKQy54Qj1KLkRyLnByb3RvdHlw
+ZQpDLkRHPUouYzUucHJvdG90eXBlCkMuRXg9Vy51OC5wcm90b3R5cGUKQy5MdD1XLlNOLnByb3RvdHlw
+ZQpDLlpRPUouaUMucHJvdG90eXBlCkMuSWU9Vy5UYi5wcm90b3R5cGUKQy52Qj1KLmtkLnByb3RvdHlw
+ZQpDLm9sPVcuSzUucHJvdG90eXBlCkMueTg9bmV3IFAuVTgoKQpDLmg5PW5ldyBQLkNWKCkKQy5PND1m
+dW5jdGlvbiBnZXRUYWdGYWxsYmFjayhvKSB7CiAgdmFyIHMgPSBPYmplY3QucHJvdG90eXBlLnRvU3Ry
+aW5nLmNhbGwobyk7CiAgcmV0dXJuIHMuc3Vic3RyaW5nKDgsIHMubGVuZ3RoIC0gMSk7Cn0KQy5ZcT1m
+dW5jdGlvbigpIHsKICB2YXIgdG9TdHJpbmdGdW5jdGlvbiA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJp
+bmc7CiAgZnVuY3Rpb24gZ2V0VGFnKG8pIHsKICAgIHZhciBzID0gdG9TdHJpbmdGdW5jdGlvbi5jYWxs
+KG8pOwogICAgcmV0dXJuIHMuc3Vic3RyaW5nKDgsIHMubGVuZ3RoIC0gMSk7CiAgfQogIGZ1bmN0aW9u
+IGdldFVua25vd25UYWcob2JqZWN0LCB0YWcpIHsKICAgIGlmICgvXkhUTUxbQS1aXS4qRWxlbWVudCQv
+LnRlc3QodGFnKSkgewogICAgICB2YXIgbmFtZSA9IHRvU3RyaW5nRnVuY3Rpb24uY2FsbChvYmplY3Qp
+OwogICAgICBpZiAobmFtZSA9PSAiW29iamVjdCBPYmplY3RdIikgcmV0dXJuIG51bGw7CiAgICAgIHJl
+dHVybiAiSFRNTEVsZW1lbnQiOwogICAgfQogIH0KICBmdW5jdGlvbiBnZXRVbmtub3duVGFnR2VuZXJp
+Y0Jyb3dzZXIob2JqZWN0LCB0YWcpIHsKICAgIGlmIChzZWxmLkhUTUxFbGVtZW50ICYmIG9iamVjdCBp
+bnN0YW5jZW9mIEhUTUxFbGVtZW50KSByZXR1cm4gIkhUTUxFbGVtZW50IjsKICAgIHJldHVybiBnZXRV
+bmtub3duVGFnKG9iamVjdCwgdGFnKTsKICB9CiAgZnVuY3Rpb24gcHJvdG90eXBlRm9yVGFnKHRhZykg
+ewogICAgaWYgKHR5cGVvZiB3aW5kb3cgPT0gInVuZGVmaW5lZCIpIHJldHVybiBudWxsOwogICAgaWYg
+KHR5cGVvZiB3aW5kb3dbdGFnXSA9PSAidW5kZWZpbmVkIikgcmV0dXJuIG51bGw7CiAgICB2YXIgY29u
+c3RydWN0b3IgPSB3aW5kb3dbdGFnXTsKICAgIGlmICh0eXBlb2YgY29uc3RydWN0b3IgIT0gImZ1bmN0
+aW9uIikgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gY29uc3RydWN0b3IucHJvdG90eXBlOwogIH0KICBm
+dW5jdGlvbiBkaXNjcmltaW5hdG9yKHRhZykgeyByZXR1cm4gbnVsbDsgfQogIHZhciBpc0Jyb3dzZXIg
+PSB0eXBlb2YgbmF2aWdhdG9yID09ICJvYmplY3QiOwogIHJldHVybiB7CiAgICBnZXRUYWc6IGdldFRh
+ZywKICAgIGdldFVua25vd25UYWc6IGlzQnJvd3NlciA/IGdldFVua25vd25UYWdHZW5lcmljQnJvd3Nl
+ciA6IGdldFVua25vd25UYWcsCiAgICBwcm90b3R5cGVGb3JUYWc6IHByb3RvdHlwZUZvclRhZywKICAg
+IGRpc2NyaW1pbmF0b3I6IGRpc2NyaW1pbmF0b3IgfTsKfQpDLndiPWZ1bmN0aW9uKGdldFRhZ0ZhbGxi
+YWNrKSB7CiAgcmV0dXJuIGZ1bmN0aW9uKGhvb2tzKSB7CiAgICBpZiAodHlwZW9mIG5hdmlnYXRvciAh
+PSAib2JqZWN0IikgcmV0dXJuIGhvb2tzOwogICAgdmFyIHVhID0gbmF2aWdhdG9yLnVzZXJBZ2VudDsK
+ICAgIGlmICh1YS5pbmRleE9mKCJEdW1wUmVuZGVyVHJlZSIpID49IDApIHJldHVybiBob29rczsKICAg
+IGlmICh1YS5pbmRleE9mKCJDaHJvbWUiKSA+PSAwKSB7CiAgICAgIGZ1bmN0aW9uIGNvbmZpcm0ocCkg
+ewogICAgICAgIHJldHVybiB0eXBlb2Ygd2luZG93ID09ICJvYmplY3QiICYmIHdpbmRvd1twXSAmJiB3
+aW5kb3dbcF0ubmFtZSA9PSBwOwogICAgICB9CiAgICAgIGlmIChjb25maXJtKCJXaW5kb3ciKSAmJiBj
+b25maXJtKCJIVE1MRWxlbWVudCIpKSByZXR1cm4gaG9va3M7CiAgICB9CiAgICBob29rcy5nZXRUYWcg
+PSBnZXRUYWdGYWxsYmFjazsKICB9Owp9CkMuS1U9ZnVuY3Rpb24oaG9va3MpIHsKICBpZiAodHlwZW9m
+IGRhcnRFeHBlcmltZW50YWxGaXh1cEdldFRhZyAhPSAiZnVuY3Rpb24iKSByZXR1cm4gaG9va3M7CiAg
+aG9va3MuZ2V0VGFnID0gZGFydEV4cGVyaW1lbnRhbEZpeHVwR2V0VGFnKGhvb2tzLmdldFRhZyk7Cn0K
+Qy5mUT1mdW5jdGlvbihob29rcykgewogIHZhciBnZXRUYWcgPSBob29rcy5nZXRUYWc7CiAgdmFyIHBy
+b3RvdHlwZUZvclRhZyA9IGhvb2tzLnByb3RvdHlwZUZvclRhZzsKICBmdW5jdGlvbiBnZXRUYWdGaXhl
+ZChvKSB7CiAgICB2YXIgdGFnID0gZ2V0VGFnKG8pOwogICAgaWYgKHRhZyA9PSAiRG9jdW1lbnQiKSB7
+CiAgICAgIGlmICghIW8ueG1sVmVyc2lvbikgcmV0dXJuICIhRG9jdW1lbnQiOwogICAgICByZXR1cm4g
+IiFIVE1MRG9jdW1lbnQiOwogICAgfQogICAgcmV0dXJuIHRhZzsKICB9CiAgZnVuY3Rpb24gcHJvdG90
+eXBlRm9yVGFnRml4ZWQodGFnKSB7CiAgICBpZiAodGFnID09ICJEb2N1bWVudCIpIHJldHVybiBudWxs
+OwogICAgcmV0dXJuIHByb3RvdHlwZUZvclRhZyh0YWcpOwogIH0KICBob29rcy5nZXRUYWcgPSBnZXRU
+YWdGaXhlZDsKICBob29rcy5wcm90b3R5cGVGb3JUYWcgPSBwcm90b3R5cGVGb3JUYWdGaXhlZDsKfQpD
+LmRrPWZ1bmN0aW9uKGhvb2tzKSB7CiAgdmFyIHVzZXJBZ2VudCA9IHR5cGVvZiBuYXZpZ2F0b3IgPT0g
+Im9iamVjdCIgPyBuYXZpZ2F0b3IudXNlckFnZW50IDogIiI7CiAgaWYgKHVzZXJBZ2VudC5pbmRleE9m
+KCJGaXJlZm94IikgPT0gLTEpIHJldHVybiBob29rczsKICB2YXIgZ2V0VGFnID0gaG9va3MuZ2V0VGFn
+OwogIHZhciBxdWlja01hcCA9IHsKICAgICJCZWZvcmVVbmxvYWRFdmVudCI6ICJFdmVudCIsCiAgICAi
+RGF0YVRyYW5zZmVyIjogIkNsaXBib2FyZCIsCiAgICAiR2VvR2VvbG9jYXRpb24iOiAiR2VvbG9jYXRp
+b24iLAogICAgIkxvY2F0aW9uIjogIiFMb2NhdGlvbiIsCiAgICAiV29ya2VyTWVzc2FnZUV2ZW50Ijog
+Ik1lc3NhZ2VFdmVudCIsCiAgICAiWE1MRG9jdW1lbnQiOiAiIURvY3VtZW50In07CiAgZnVuY3Rpb24g
+Z2V0VGFnRmlyZWZveChvKSB7CiAgICB2YXIgdGFnID0gZ2V0VGFnKG8pOwogICAgcmV0dXJuIHF1aWNr
+TWFwW3RhZ10gfHwgdGFnOwogIH0KICBob29rcy5nZXRUYWcgPSBnZXRUYWdGaXJlZm94Owp9CkMueGk9
+ZnVuY3Rpb24oaG9va3MpIHsKICB2YXIgdXNlckFnZW50ID0gdHlwZW9mIG5hdmlnYXRvciA9PSAib2Jq
+ZWN0IiA/IG5hdmlnYXRvci51c2VyQWdlbnQgOiAiIjsKICBpZiAodXNlckFnZW50LmluZGV4T2YoIlRy
+aWRlbnQvIikgPT0gLTEpIHJldHVybiBob29rczsKICB2YXIgZ2V0VGFnID0gaG9va3MuZ2V0VGFnOwog
+IHZhciBxdWlja01hcCA9IHsKICAgICJCZWZvcmVVbmxvYWRFdmVudCI6ICJFdmVudCIsCiAgICAiRGF0
+YVRyYW5zZmVyIjogIkNsaXBib2FyZCIsCiAgICAiSFRNTERERWxlbWVudCI6ICJIVE1MRWxlbWVudCIs
+CiAgICAiSFRNTERURWxlbWVudCI6ICJIVE1MRWxlbWVudCIsCiAgICAiSFRNTFBocmFzZUVsZW1lbnQi
+OiAiSFRNTEVsZW1lbnQiLAogICAgIlBvc2l0aW9uIjogIkdlb3Bvc2l0aW9uIgogIH07CiAgZnVuY3Rp
+b24gZ2V0VGFnSUUobykgewogICAgdmFyIHRhZyA9IGdldFRhZyhvKTsKICAgIHZhciBuZXdUYWcgPSBx
+dWlja01hcFt0YWddOwogICAgaWYgKG5ld1RhZykgcmV0dXJuIG5ld1RhZzsKICAgIGlmICh0YWcgPT0g
+Ik9iamVjdCIpIHsKICAgICAgaWYgKHdpbmRvdy5EYXRhVmlldyAmJiAobyBpbnN0YW5jZW9mIHdpbmRv
+dy5EYXRhVmlldykpIHJldHVybiAiRGF0YVZpZXciOwogICAgfQogICAgcmV0dXJuIHRhZzsKICB9CiAg
+ZnVuY3Rpb24gcHJvdG90eXBlRm9yVGFnSUUodGFnKSB7CiAgICB2YXIgY29uc3RydWN0b3IgPSB3aW5k
+b3dbdGFnXTsKICAgIGlmIChjb25zdHJ1Y3RvciA9PSBudWxsKSByZXR1cm4gbnVsbDsKICAgIHJldHVy
+biBjb25zdHJ1Y3Rvci5wcm90b3R5cGU7CiAgfQogIGhvb2tzLmdldFRhZyA9IGdldFRhZ0lFOwogIGhv
+b2tzLnByb3RvdHlwZUZvclRhZyA9IHByb3RvdHlwZUZvclRhZ0lFOwp9CkMuaTc9ZnVuY3Rpb24oaG9v
+a3MpIHsgcmV0dXJuIGhvb2tzOyB9CgpDLkN0PW5ldyBQLmJ5KCkKQy5FcT1uZXcgUC5rNSgpCkMueE09
+bmV3IFAudTUoKQpDLlFrPW5ldyBQLkUzKCkKQy5OVT1uZXcgUC5KaSgpCkMuQTM9bmV3IFAuTXgobnVs
+bCkKQy5HYj1ILlZNKHQoWzEyNywyMDQ3LDY1NTM1LDExMTQxMTFdKSx1LnQpCkMuYWs9SC5WTSh0KFsw
+LDAsMzI3NzYsMzM3OTIsMSwxMDI0MCwwLDBdKSx1LnQpCkMuY209SC5WTSh0KFsiKjo6Y2xhc3MiLCIq
+OjpkaXIiLCIqOjpkcmFnZ2FibGUiLCIqOjpoaWRkZW4iLCIqOjppZCIsIio6OmluZXJ0IiwiKjo6aXRl
+bXByb3AiLCIqOjppdGVtcmVmIiwiKjo6aXRlbXNjb3BlIiwiKjo6bGFuZyIsIio6OnNwZWxsY2hlY2si
+LCIqOjp0aXRsZSIsIio6OnRyYW5zbGF0ZSIsIkE6OmFjY2Vzc2tleSIsIkE6OmNvb3JkcyIsIkE6Omhy
+ZWZsYW5nIiwiQTo6bmFtZSIsIkE6OnNoYXBlIiwiQTo6dGFiaW5kZXgiLCJBOjp0YXJnZXQiLCJBOjp0
+eXBlIiwiQVJFQTo6YWNjZXNza2V5IiwiQVJFQTo6YWx0IiwiQVJFQTo6Y29vcmRzIiwiQVJFQTo6bm9o
+cmVmIiwiQVJFQTo6c2hhcGUiLCJBUkVBOjp0YWJpbmRleCIsIkFSRUE6OnRhcmdldCIsIkFVRElPOjpj
+b250cm9scyIsIkFVRElPOjpsb29wIiwiQVVESU86Om1lZGlhZ3JvdXAiLCJBVURJTzo6bXV0ZWQiLCJB
+VURJTzo6cHJlbG9hZCIsIkJETzo6ZGlyIiwiQk9EWTo6YWxpbmsiLCJCT0RZOjpiZ2NvbG9yIiwiQk9E
+WTo6bGluayIsIkJPRFk6OnRleHQiLCJCT0RZOjp2bGluayIsIkJSOjpjbGVhciIsIkJVVFRPTjo6YWNj
+ZXNza2V5IiwiQlVUVE9OOjpkaXNhYmxlZCIsIkJVVFRPTjo6bmFtZSIsIkJVVFRPTjo6dGFiaW5kZXgi
+LCJCVVRUT046OnR5cGUiLCJCVVRUT046OnZhbHVlIiwiQ0FOVkFTOjpoZWlnaHQiLCJDQU5WQVM6Ondp
+ZHRoIiwiQ0FQVElPTjo6YWxpZ24iLCJDT0w6OmFsaWduIiwiQ09MOjpjaGFyIiwiQ09MOjpjaGFyb2Zm
+IiwiQ09MOjpzcGFuIiwiQ09MOjp2YWxpZ24iLCJDT0w6OndpZHRoIiwiQ09MR1JPVVA6OmFsaWduIiwi
+Q09MR1JPVVA6OmNoYXIiLCJDT0xHUk9VUDo6Y2hhcm9mZiIsIkNPTEdST1VQOjpzcGFuIiwiQ09MR1JP
+VVA6OnZhbGlnbiIsIkNPTEdST1VQOjp3aWR0aCIsIkNPTU1BTkQ6OmNoZWNrZWQiLCJDT01NQU5EOjpj
+b21tYW5kIiwiQ09NTUFORDo6ZGlzYWJsZWQiLCJDT01NQU5EOjpsYWJlbCIsIkNPTU1BTkQ6OnJhZGlv
+Z3JvdXAiLCJDT01NQU5EOjp0eXBlIiwiREFUQTo6dmFsdWUiLCJERUw6OmRhdGV0aW1lIiwiREVUQUlM
+Uzo6b3BlbiIsIkRJUjo6Y29tcGFjdCIsIkRJVjo6YWxpZ24iLCJETDo6Y29tcGFjdCIsIkZJRUxEU0VU
+OjpkaXNhYmxlZCIsIkZPTlQ6OmNvbG9yIiwiRk9OVDo6ZmFjZSIsIkZPTlQ6OnNpemUiLCJGT1JNOjph
+Y2NlcHQiLCJGT1JNOjphdXRvY29tcGxldGUiLCJGT1JNOjplbmN0eXBlIiwiRk9STTo6bWV0aG9kIiwi
+Rk9STTo6bmFtZSIsIkZPUk06Om5vdmFsaWRhdGUiLCJGT1JNOjp0YXJnZXQiLCJGUkFNRTo6bmFtZSIs
+IkgxOjphbGlnbiIsIkgyOjphbGlnbiIsIkgzOjphbGlnbiIsIkg0OjphbGlnbiIsIkg1OjphbGlnbiIs
+Ikg2OjphbGlnbiIsIkhSOjphbGlnbiIsIkhSOjpub3NoYWRlIiwiSFI6OnNpemUiLCJIUjo6d2lkdGgi
+LCJIVE1MOjp2ZXJzaW9uIiwiSUZSQU1FOjphbGlnbiIsIklGUkFNRTo6ZnJhbWVib3JkZXIiLCJJRlJB
+TUU6OmhlaWdodCIsIklGUkFNRTo6bWFyZ2luaGVpZ2h0IiwiSUZSQU1FOjptYXJnaW53aWR0aCIsIklG
+UkFNRTo6d2lkdGgiLCJJTUc6OmFsaWduIiwiSU1HOjphbHQiLCJJTUc6OmJvcmRlciIsIklNRzo6aGVp
+Z2h0IiwiSU1HOjpoc3BhY2UiLCJJTUc6OmlzbWFwIiwiSU1HOjpuYW1lIiwiSU1HOjp1c2VtYXAiLCJJ
+TUc6OnZzcGFjZSIsIklNRzo6d2lkdGgiLCJJTlBVVDo6YWNjZXB0IiwiSU5QVVQ6OmFjY2Vzc2tleSIs
+IklOUFVUOjphbGlnbiIsIklOUFVUOjphbHQiLCJJTlBVVDo6YXV0b2NvbXBsZXRlIiwiSU5QVVQ6OmF1
+dG9mb2N1cyIsIklOUFVUOjpjaGVja2VkIiwiSU5QVVQ6OmRpc2FibGVkIiwiSU5QVVQ6OmlucHV0bW9k
+ZSIsIklOUFVUOjppc21hcCIsIklOUFVUOjpsaXN0IiwiSU5QVVQ6Om1heCIsIklOUFVUOjptYXhsZW5n
+dGgiLCJJTlBVVDo6bWluIiwiSU5QVVQ6Om11bHRpcGxlIiwiSU5QVVQ6Om5hbWUiLCJJTlBVVDo6cGxh
+Y2Vob2xkZXIiLCJJTlBVVDo6cmVhZG9ubHkiLCJJTlBVVDo6cmVxdWlyZWQiLCJJTlBVVDo6c2l6ZSIs
+IklOUFVUOjpzdGVwIiwiSU5QVVQ6OnRhYmluZGV4IiwiSU5QVVQ6OnR5cGUiLCJJTlBVVDo6dXNlbWFw
+IiwiSU5QVVQ6OnZhbHVlIiwiSU5TOjpkYXRldGltZSIsIktFWUdFTjo6ZGlzYWJsZWQiLCJLRVlHRU46
+OmtleXR5cGUiLCJLRVlHRU46Om5hbWUiLCJMQUJFTDo6YWNjZXNza2V5IiwiTEFCRUw6OmZvciIsIkxF
+R0VORDo6YWNjZXNza2V5IiwiTEVHRU5EOjphbGlnbiIsIkxJOjp0eXBlIiwiTEk6OnZhbHVlIiwiTElO
+Szo6c2l6ZXMiLCJNQVA6Om5hbWUiLCJNRU5VOjpjb21wYWN0IiwiTUVOVTo6bGFiZWwiLCJNRU5VOjp0
+eXBlIiwiTUVURVI6OmhpZ2giLCJNRVRFUjo6bG93IiwiTUVURVI6Om1heCIsIk1FVEVSOjptaW4iLCJN
+RVRFUjo6dmFsdWUiLCJPQkpFQ1Q6OnR5cGVtdXN0bWF0Y2giLCJPTDo6Y29tcGFjdCIsIk9MOjpyZXZl
+cnNlZCIsIk9MOjpzdGFydCIsIk9MOjp0eXBlIiwiT1BUR1JPVVA6OmRpc2FibGVkIiwiT1BUR1JPVVA6
+OmxhYmVsIiwiT1BUSU9OOjpkaXNhYmxlZCIsIk9QVElPTjo6bGFiZWwiLCJPUFRJT046OnNlbGVjdGVk
+IiwiT1BUSU9OOjp2YWx1ZSIsIk9VVFBVVDo6Zm9yIiwiT1VUUFVUOjpuYW1lIiwiUDo6YWxpZ24iLCJQ
+UkU6OndpZHRoIiwiUFJPR1JFU1M6Om1heCIsIlBST0dSRVNTOjptaW4iLCJQUk9HUkVTUzo6dmFsdWUi
+LCJTRUxFQ1Q6OmF1dG9jb21wbGV0ZSIsIlNFTEVDVDo6ZGlzYWJsZWQiLCJTRUxFQ1Q6Om11bHRpcGxl
+IiwiU0VMRUNUOjpuYW1lIiwiU0VMRUNUOjpyZXF1aXJlZCIsIlNFTEVDVDo6c2l6ZSIsIlNFTEVDVDo6
+dGFiaW5kZXgiLCJTT1VSQ0U6OnR5cGUiLCJUQUJMRTo6YWxpZ24iLCJUQUJMRTo6Ymdjb2xvciIsIlRB
+QkxFOjpib3JkZXIiLCJUQUJMRTo6Y2VsbHBhZGRpbmciLCJUQUJMRTo6Y2VsbHNwYWNpbmciLCJUQUJM
+RTo6ZnJhbWUiLCJUQUJMRTo6cnVsZXMiLCJUQUJMRTo6c3VtbWFyeSIsIlRBQkxFOjp3aWR0aCIsIlRC
+T0RZOjphbGlnbiIsIlRCT0RZOjpjaGFyIiwiVEJPRFk6OmNoYXJvZmYiLCJUQk9EWTo6dmFsaWduIiwi
+VEQ6OmFiYnIiLCJURDo6YWxpZ24iLCJURDo6YXhpcyIsIlREOjpiZ2NvbG9yIiwiVEQ6OmNoYXIiLCJU
+RDo6Y2hhcm9mZiIsIlREOjpjb2xzcGFuIiwiVEQ6OmhlYWRlcnMiLCJURDo6aGVpZ2h0IiwiVEQ6Om5v
+d3JhcCIsIlREOjpyb3dzcGFuIiwiVEQ6OnNjb3BlIiwiVEQ6OnZhbGlnbiIsIlREOjp3aWR0aCIsIlRF
+WFRBUkVBOjphY2Nlc3NrZXkiLCJURVhUQVJFQTo6YXV0b2NvbXBsZXRlIiwiVEVYVEFSRUE6OmNvbHMi
+LCJURVhUQVJFQTo6ZGlzYWJsZWQiLCJURVhUQVJFQTo6aW5wdXRtb2RlIiwiVEVYVEFSRUE6Om5hbWUi
+LCJURVhUQVJFQTo6cGxhY2Vob2xkZXIiLCJURVhUQVJFQTo6cmVhZG9ubHkiLCJURVhUQVJFQTo6cmVx
+dWlyZWQiLCJURVhUQVJFQTo6cm93cyIsIlRFWFRBUkVBOjp0YWJpbmRleCIsIlRFWFRBUkVBOjp3cmFw
+IiwiVEZPT1Q6OmFsaWduIiwiVEZPT1Q6OmNoYXIiLCJURk9PVDo6Y2hhcm9mZiIsIlRGT09UOjp2YWxp
+Z24iLCJUSDo6YWJiciIsIlRIOjphbGlnbiIsIlRIOjpheGlzIiwiVEg6OmJnY29sb3IiLCJUSDo6Y2hh
+ciIsIlRIOjpjaGFyb2ZmIiwiVEg6OmNvbHNwYW4iLCJUSDo6aGVhZGVycyIsIlRIOjpoZWlnaHQiLCJU
+SDo6bm93cmFwIiwiVEg6OnJvd3NwYW4iLCJUSDo6c2NvcGUiLCJUSDo6dmFsaWduIiwiVEg6OndpZHRo
+IiwiVEhFQUQ6OmFsaWduIiwiVEhFQUQ6OmNoYXIiLCJUSEVBRDo6Y2hhcm9mZiIsIlRIRUFEOjp2YWxp
+Z24iLCJUUjo6YWxpZ24iLCJUUjo6Ymdjb2xvciIsIlRSOjpjaGFyIiwiVFI6OmNoYXJvZmYiLCJUUjo6
+dmFsaWduIiwiVFJBQ0s6OmRlZmF1bHQiLCJUUkFDSzo6a2luZCIsIlRSQUNLOjpsYWJlbCIsIlRSQUNL
+OjpzcmNsYW5nIiwiVUw6OmNvbXBhY3QiLCJVTDo6dHlwZSIsIlZJREVPOjpjb250cm9scyIsIlZJREVP
+OjpoZWlnaHQiLCJWSURFTzo6bG9vcCIsIlZJREVPOjptZWRpYWdyb3VwIiwiVklERU86Om11dGVkIiwi
+VklERU86OnByZWxvYWQiLCJWSURFTzo6d2lkdGgiXSksdS5zKQpDLlZDPUguVk0odChbMCwwLDY1NDkw
+LDQ1MDU1LDY1NTM1LDM0ODE1LDY1NTM0LDE4NDMxXSksdS50KQpDLm1LPUguVk0odChbMCwwLDI2NjI0
+LDEwMjMsNjU1MzQsMjA0Nyw2NTUzNCwyMDQ3XSksdS50KQpDLlNxPUguVk0odChbIkhFQUQiLCJBUkVB
+IiwiQkFTRSIsIkJBU0VGT05UIiwiQlIiLCJDT0wiLCJDT0xHUk9VUCIsIkVNQkVEIiwiRlJBTUUiLCJG
+UkFNRVNFVCIsIkhSIiwiSU1BR0UiLCJJTUciLCJJTlBVVCIsIklTSU5ERVgiLCJMSU5LIiwiTUVUQSIs
+IlBBUkFNIiwiU09VUkNFIiwiU1RZTEUiLCJUSVRMRSIsIldCUiJdKSx1LnMpCkMueEQ9SC5WTSh0KFtd
+KSx1LnUpCkMuZG49SC5WTSh0KFtdKSx1LnMpCkMuaFU9SC5WTSh0KFtdKSx1Lm0pCkMudG89SC5WTSh0
+KFswLDAsMzI3MjIsMTIyODcsNjU1MzQsMzQ4MTUsNjU1MzQsMTg0MzFdKSx1LnQpCkMuRjM9SC5WTSh0
+KFswLDAsMjQ1NzYsMTAyMyw2NTUzNCwzNDgxNSw2NTUzNCwxODQzMV0pLHUudCkKQy5lYT1ILlZNKHQo
+WzAsMCwzMjc1NCwxMTI2Myw2NTUzNCwzNDgxNSw2NTUzNCwxODQzMV0pLHUudCkKQy5aSj1ILlZNKHQo
+WzAsMCwzMjcyMiwxMjI4Nyw2NTUzNSwzNDgxNSw2NTUzNCwxODQzMV0pLHUudCkKQy5XZD1ILlZNKHQo
+WzAsMCw2NTQ5MCwxMjI4Nyw2NTUzNSwzNDgxNSw2NTUzNCwxODQzMV0pLHUudCkKQy5ReD1ILlZNKHQo
+WyJiaW5kIiwiaWYiLCJyZWYiLCJyZXBlYXQiLCJzeW50YXgiXSksdS5zKQpDLkJJPUguVk0odChbIkE6
+OmhyZWYiLCJBUkVBOjpocmVmIiwiQkxPQ0tRVU9URTo6Y2l0ZSIsIkJPRFk6OmJhY2tncm91bmQiLCJD
+T01NQU5EOjppY29uIiwiREVMOjpjaXRlIiwiRk9STTo6YWN0aW9uIiwiSU1HOjpzcmMiLCJJTlBVVDo6
+c3JjIiwiSU5TOjpjaXRlIiwiUTo6Y2l0ZSIsIlZJREVPOjpwb3N0ZXIiXSksdS5zKQpDLldPPW5ldyBI
+LkxQKDAse30sQy5kbixILk4wKCJMUDxxVSxxVT4iKSkKQy5pSD1ILlZNKHQoW10pLEguTjAoImpkPEdE
+PiIpKQpDLkNNPW5ldyBILkxQKDAse30sQy5pSCxILk4wKCJMUDxHRCxAPiIpKQpDLlkyPW5ldyBMLnk4
+KCJOYXZpZ2F0aW9uVHJlZU5vZGVUeXBlLmRpcmVjdG9yeSIpCkMucmY9bmV3IEwueTgoIk5hdmlnYXRp
+b25UcmVlTm9kZVR5cGUuZmlsZSIpCkMuVGU9bmV3IEgud3YoImNhbGwiKX0pKCk7KGZ1bmN0aW9uIHN0
+YXRpY0ZpZWxkcygpeyQueWo9MAokLm1KPW51bGwKJC5QND1udWxsCiQuTkY9bnVsbAokLlRYPW51bGwK
+JC54Nz1udWxsCiQubnc9bnVsbAokLnZ2PW51bGwKJC5Cdj1udWxsCiQuUzY9bnVsbAokLms4PW51bGwK
+JC5tZz1udWxsCiQuVUQ9ITEKJC5YMz1DLk5VCiQueGc9W10KJC54bz1udWxsCiQuQk89bnVsbAokLmx0
+PW51bGwKJC5FVT1udWxsCiQub3I9UC5GbCh1Lk4sdS5aKQokLkk2PW51bGwKJC5GZj1udWxsfSkoKTso
+ZnVuY3Rpb24gbGF6eUluaXRpYWxpemVycygpe3ZhciB0PWh1bmtIZWxwZXJzLmxhenkKdCgkLCJmYSIs
+InciLGZ1bmN0aW9uKCl7cmV0dXJuIEguWWcoIl8kZGFydF9kYXJ0Q2xvc3VyZSIpfSkKdCgkLCJZMiIs
+IlVOIixmdW5jdGlvbigpe3JldHVybiBILllnKCJfJGRhcnRfanMiKX0pCnQoJCwiVTIiLCJTbiIsZnVu
+Y3Rpb24oKXtyZXR1cm4gSC5jTShILlM3KHsKdG9TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4iJHJlY2Vp
+dmVyJCJ9fSkpfSkKdCgkLCJ4cSIsImxxIixmdW5jdGlvbigpe3JldHVybiBILmNNKEguUzcoeyRtZXRo
+b2QkOm51bGwsCnRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIiRyZWNlaXZlciQifX0pKX0pCnQoJCwi
+UjEiLCJOOSIsZnVuY3Rpb24oKXtyZXR1cm4gSC5jTShILlM3KG51bGwpKX0pCnQoJCwiZk4iLCJpSSIs
+ZnVuY3Rpb24oKXtyZXR1cm4gSC5jTShmdW5jdGlvbigpe3ZhciAkYXJndW1lbnRzRXhwciQ9JyRhcmd1
+bWVudHMkJwp0cnl7bnVsbC4kbWV0aG9kJCgkYXJndW1lbnRzRXhwciQpfWNhdGNoKHMpe3JldHVybiBz
+Lm1lc3NhZ2V9fSgpKX0pCnQoJCwicWkiLCJLZiIsZnVuY3Rpb24oKXtyZXR1cm4gSC5jTShILlM3KHZv
+aWQgMCkpfSkKdCgkLCJyWiIsIlpoIixmdW5jdGlvbigpe3JldHVybiBILmNNKGZ1bmN0aW9uKCl7dmFy
+ICRhcmd1bWVudHNFeHByJD0nJGFyZ3VtZW50cyQnCnRyeXsodm9pZCAwKS4kbWV0aG9kJCgkYXJndW1l
+bnRzRXhwciQpfWNhdGNoKHMpe3JldHVybiBzLm1lc3NhZ2V9fSgpKX0pCnQoJCwia3EiLCJyTiIsZnVu
+Y3Rpb24oKXtyZXR1cm4gSC5jTShILk1qKG51bGwpKX0pCnQoJCwidHQiLCJjMyIsZnVuY3Rpb24oKXty
+ZXR1cm4gSC5jTShmdW5jdGlvbigpe3RyeXtudWxsLiRtZXRob2QkfWNhdGNoKHMpe3JldHVybiBzLm1l
+c3NhZ2V9fSgpKX0pCnQoJCwiZHQiLCJISyIsZnVuY3Rpb24oKXtyZXR1cm4gSC5jTShILk1qKHZvaWQg
+MCkpfSkKdCgkLCJBNyIsInIxIixmdW5jdGlvbigpe3JldHVybiBILmNNKGZ1bmN0aW9uKCl7dHJ5eyh2
+b2lkIDApLiRtZXRob2QkfWNhdGNoKHMpe3JldHVybiBzLm1lc3NhZ2V9fSgpKX0pCnQoJCwiV2MiLCJ1
+dCIsZnVuY3Rpb24oKXtyZXR1cm4gUC5PaigpfSkKdCgkLCJraCIsInJmIixmdW5jdGlvbigpe3JldHVy
+biBQLldJKCl9KQp0KCQsImJ0IiwiVjciLGZ1bmN0aW9uKCl7cmV0dXJuIEguRFEoSC5YRihILlZNKFst
+MiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwt
+MiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMiwtMSwtMiwtMiwt
+MiwtMiwtMiw2MiwtMiw2MiwtMiw2Myw1Miw1Myw1NCw1NSw1Niw1Nyw1OCw1OSw2MCw2MSwtMiwtMiwt
+MiwtMSwtMiwtMiwtMiwwLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDE2LDE3LDE4
+LDE5LDIwLDIxLDIyLDIzLDI0LDI1LC0yLC0yLC0yLC0yLDYzLC0yLDI2LDI3LDI4LDI5LDMwLDMxLDMy
+LDMzLDM0LDM1LDM2LDM3LDM4LDM5LDQwLDQxLDQyLDQzLDQ0LDQ1LDQ2LDQ3LDQ4LDQ5LDUwLDUxLC0y
+LC0yLC0yLC0yLC0yXSx1LnQpKSl9KQp0KCQsIk01Iiwid1EiLGZ1bmN0aW9uKCl7cmV0dXJuIHR5cGVv
+ZiBwcm9jZXNzIT0idW5kZWZpbmVkIiYmT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHByb2Nl
+c3MpPT0iW29iamVjdCBwcm9jZXNzXSImJnByb2Nlc3MucGxhdGZvcm09PSJ3aW4zMiJ9KQp0KCQsIm1m
+IiwiejQiLGZ1bmN0aW9uKCl7cmV0dXJuIFAubnUoIl5bXFwtXFwuMC05QS1aX2Eten5dKiQiKX0pCnQo
+JCwiSkciLCJ2WiIsZnVuY3Rpb24oKXtyZXR1cm4gUC51eCgpfSkKdCgkLCJTQyIsIkFOIixmdW5jdGlv
+bigpe3JldHVybiBQLnRNKFsiQSIsIkFCQlIiLCJBQ1JPTllNIiwiQUREUkVTUyIsIkFSRUEiLCJBUlRJ
+Q0xFIiwiQVNJREUiLCJBVURJTyIsIkIiLCJCREkiLCJCRE8iLCJCSUciLCJCTE9DS1FVT1RFIiwiQlIi
+LCJCVVRUT04iLCJDQU5WQVMiLCJDQVBUSU9OIiwiQ0VOVEVSIiwiQ0lURSIsIkNPREUiLCJDT0wiLCJD
+T0xHUk9VUCIsIkNPTU1BTkQiLCJEQVRBIiwiREFUQUxJU1QiLCJERCIsIkRFTCIsIkRFVEFJTFMiLCJE
+Rk4iLCJESVIiLCJESVYiLCJETCIsIkRUIiwiRU0iLCJGSUVMRFNFVCIsIkZJR0NBUFRJT04iLCJGSUdV
+UkUiLCJGT05UIiwiRk9PVEVSIiwiRk9STSIsIkgxIiwiSDIiLCJIMyIsIkg0IiwiSDUiLCJINiIsIkhF
+QURFUiIsIkhHUk9VUCIsIkhSIiwiSSIsIklGUkFNRSIsIklNRyIsIklOUFVUIiwiSU5TIiwiS0JEIiwi
+TEFCRUwiLCJMRUdFTkQiLCJMSSIsIk1BUCIsIk1BUksiLCJNRU5VIiwiTUVURVIiLCJOQVYiLCJOT0JS
+IiwiT0wiLCJPUFRHUk9VUCIsIk9QVElPTiIsIk9VVFBVVCIsIlAiLCJQUkUiLCJQUk9HUkVTUyIsIlEi
+LCJTIiwiU0FNUCIsIlNFQ1RJT04iLCJTRUxFQ1QiLCJTTUFMTCIsIlNPVVJDRSIsIlNQQU4iLCJTVFJJ
+S0UiLCJTVFJPTkciLCJTVUIiLCJTVU1NQVJZIiwiU1VQIiwiVEFCTEUiLCJUQk9EWSIsIlREIiwiVEVY
+VEFSRUEiLCJURk9PVCIsIlRIIiwiVEhFQUQiLCJUSU1FIiwiVFIiLCJUUkFDSyIsIlRUIiwiVSIsIlVM
+IiwiVkFSIiwiVklERU8iLCJXQlIiXSx1Lk4pfSkKdCgkLCJYNCIsImhHIixmdW5jdGlvbigpe3JldHVy
+biBQLm51KCJeXFxTKyQiKX0pCnQoJCwid08iLCJvdyIsZnVuY3Rpb24oKXtyZXR1cm4gdS52LmIoUC5O
+RChzZWxmKSl9KQp0KCQsImt0IiwiUjgiLGZ1bmN0aW9uKCl7cmV0dXJuIEguWWcoIl8kZGFydF9kYXJ0
+T2JqZWN0Iil9KQp0KCQsImZLIiwia0kiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIERhcnRPYmpl
+Y3QoYSl7dGhpcy5vPWF9fSkKdCgkLCJxdCIsInpCIixmdW5jdGlvbigpe3JldHVybiBuZXcgVC5HVigp
+fSkKdCgkLCJFWSIsImZpIixmdW5jdGlvbigpe3JldHVybiBXLlpyKCkucXVlcnlTZWxlY3RvcigiaGVh
+ZGVyIil9KQp0KCQsIlRSIiwiRFciLGZ1bmN0aW9uKCl7cmV0dXJuIFcuWnIoKS5xdWVyeVNlbGVjdG9y
+KCJmb290ZXIiKX0pCnQoJCwiVzYiLCJoTCIsZnVuY3Rpb24oKXtyZXR1cm4gVy5acigpLnF1ZXJ5U2Vs
+ZWN0b3IoIi5lZGl0LXBhbmVsIC5wYW5lbC1jb250ZW50Iil9KQp0KCQsImhUIiwibVEiLGZ1bmN0aW9u
+KCl7cmV0dXJuIFcuWnIoKS5xdWVyeVNlbGVjdG9yKCIuZWRpdC1saXN0IC5wYW5lbC1jb250ZW50Iil9
+KQp0KCQsImF2IiwiRDkiLGZ1bmN0aW9uKCl7cmV0dXJuIFcuWnIoKS5xdWVyeVNlbGVjdG9yKCIjdW5p
+dC1uYW1lIil9KQp0KCQsImZlIiwiS0ciLGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBMLlhBKCl9KQp0KCQs
+Im1NIiwiblUiLGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBNLmxJKCQuSGsoKSl9KQp0KCQsInlyIiwiYkQi
+LGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBFLk9GKFAubnUoIi8iKSxQLm51KCJbXi9dJCIpLFAubnUoIl4v
+IikpfSkKdCgkLCJNayIsIktrIixmdW5jdGlvbigpe3JldHVybiBuZXcgTC5JVihQLm51KCJbL1xcXFxd
+IiksUC5udSgiW14vXFxcXF0kIiksUC5udSgiXihcXFxcXFxcXFteXFxcXF0rXFxcXFteXFxcXC9dK3xb
+YS16QS1aXTpbL1xcXFxdKSIpLFAubnUoIl5bL1xcXFxdKD8hWy9cXFxcXSkiKSl9KQp0KCQsImFrIiwi
+RWIiLGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBGLnJ1KFAubnUoIi8iKSxQLm51KCIoXlthLXpBLVpdWy0r
+LmEtekEtWlxcZF0qOi8vfFteL10pJCIpLFAubnUoIlthLXpBLVpdWy0rLmEtekEtWlxcZF0qOi8vW14v
+XSoiKSxQLm51KCJeLyIpKX0pCnQoJCwibHMiLCJIayIsZnVuY3Rpb24oKXtyZXR1cm4gTy5SaCgpfSl9
+KSgpOyhmdW5jdGlvbiBuYXRpdmVTdXBwb3J0KCl7IWZ1bmN0aW9uKCl7dmFyIHQ9ZnVuY3Rpb24oYSl7
+dmFyIG49e30KblthXT0xCnJldHVybiBPYmplY3Qua2V5cyhodW5rSGVscGVycy5jb252ZXJ0VG9GYXN0
+T2JqZWN0KG4pKVswXX0Kdi5nZXRJc29sYXRlVGFnPWZ1bmN0aW9uKGEpe3JldHVybiB0KCJfX19kYXJ0
+XyIrYSt2Lmlzb2xhdGVUYWcpfQp2YXIgcz0iX19fZGFydF9pc29sYXRlX3RhZ3NfIgp2YXIgcj1PYmpl
+Y3Rbc118fChPYmplY3Rbc109T2JqZWN0LmNyZWF0ZShudWxsKSkKdmFyIHE9Il9aeFl4WCIKZm9yKHZh
+ciBwPTA7O3ArKyl7dmFyIG89dChxKyJfIitwKyJfIikKaWYoIShvIGluIHIpKXtyW29dPTEKdi5pc29s
+YXRlVGFnPW8KYnJlYWt9fXYuZGlzcGF0Y2hQcm9wZXJ0eU5hbWU9di5nZXRJc29sYXRlVGFnKCJkaXNw
+YXRjaF9yZWNvcmQiKX0oKQpodW5rSGVscGVycy5zZXRPclVwZGF0ZUludGVyY2VwdG9yc0J5VGFnKHtE
+T01FcnJvcjpKLnZCLERPTUltcGxlbWVudGF0aW9uOkoudkIsTWVkaWFFcnJvcjpKLnZCLE5hdmlnYXRv
+cjpKLnZCLE5hdmlnYXRvckNvbmN1cnJlbnRIYXJkd2FyZTpKLnZCLE5hdmlnYXRvclVzZXJNZWRpYUVy
+cm9yOkoudkIsT3ZlcmNvbnN0cmFpbmVkRXJyb3I6Si52QixQb3NpdGlvbkVycm9yOkoudkIsUmFuZ2U6
+Si52QixTUUxFcnJvcjpKLnZCLERhdGFWaWV3OkguRVQsQXJyYXlCdWZmZXJWaWV3OkguRVQsRmxvYXQz
+MkFycmF5OkguRGcsRmxvYXQ2NEFycmF5OkguRGcsSW50MTZBcnJheTpILnhqLEludDMyQXJyYXk6SC5k
+RSxJbnQ4QXJyYXk6SC5aQSxVaW50MTZBcnJheTpILndmLFVpbnQzMkFycmF5OkguUHEsVWludDhDbGFt
+cGVkQXJyYXk6SC5lRSxDYW52YXNQaXhlbEFycmF5OkguZUUsVWludDhBcnJheTpILlY2LEhUTUxBdWRp
+b0VsZW1lbnQ6Vy5xRSxIVE1MQlJFbGVtZW50OlcucUUsSFRNTEJ1dHRvbkVsZW1lbnQ6Vy5xRSxIVE1M
+Q2FudmFzRWxlbWVudDpXLnFFLEhUTUxDb250ZW50RWxlbWVudDpXLnFFLEhUTUxETGlzdEVsZW1lbnQ6
+Vy5xRSxIVE1MRGF0YUVsZW1lbnQ6Vy5xRSxIVE1MRGF0YUxpc3RFbGVtZW50OlcucUUsSFRNTERldGFp
+bHNFbGVtZW50OlcucUUsSFRNTERpYWxvZ0VsZW1lbnQ6Vy5xRSxIVE1MRGl2RWxlbWVudDpXLnFFLEhU
+TUxFbWJlZEVsZW1lbnQ6Vy5xRSxIVE1MRmllbGRTZXRFbGVtZW50OlcucUUsSFRNTEhSRWxlbWVudDpX
+LnFFLEhUTUxIZWFkRWxlbWVudDpXLnFFLEhUTUxIZWFkaW5nRWxlbWVudDpXLnFFLEhUTUxIdG1sRWxl
+bWVudDpXLnFFLEhUTUxJRnJhbWVFbGVtZW50OlcucUUsSFRNTEltYWdlRWxlbWVudDpXLnFFLEhUTUxJ
+bnB1dEVsZW1lbnQ6Vy5xRSxIVE1MTElFbGVtZW50OlcucUUsSFRNTExhYmVsRWxlbWVudDpXLnFFLEhU
+TUxMZWdlbmRFbGVtZW50OlcucUUsSFRNTExpbmtFbGVtZW50OlcucUUsSFRNTE1hcEVsZW1lbnQ6Vy5x
+RSxIVE1MTWVkaWFFbGVtZW50OlcucUUsSFRNTE1lbnVFbGVtZW50OlcucUUsSFRNTE1ldGFFbGVtZW50
+OlcucUUsSFRNTE1ldGVyRWxlbWVudDpXLnFFLEhUTUxNb2RFbGVtZW50OlcucUUsSFRNTE9MaXN0RWxl
+bWVudDpXLnFFLEhUTUxPYmplY3RFbGVtZW50OlcucUUsSFRNTE9wdEdyb3VwRWxlbWVudDpXLnFFLEhU
+TUxPcHRpb25FbGVtZW50OlcucUUsSFRNTE91dHB1dEVsZW1lbnQ6Vy5xRSxIVE1MUGFyYW1FbGVtZW50
+OlcucUUsSFRNTFBpY3R1cmVFbGVtZW50OlcucUUsSFRNTFByZUVsZW1lbnQ6Vy5xRSxIVE1MUHJvZ3Jl
+c3NFbGVtZW50OlcucUUsSFRNTFF1b3RlRWxlbWVudDpXLnFFLEhUTUxTY3JpcHRFbGVtZW50OlcucUUs
+SFRNTFNoYWRvd0VsZW1lbnQ6Vy5xRSxIVE1MU2xvdEVsZW1lbnQ6Vy5xRSxIVE1MU291cmNlRWxlbWVu
+dDpXLnFFLEhUTUxTcGFuRWxlbWVudDpXLnFFLEhUTUxTdHlsZUVsZW1lbnQ6Vy5xRSxIVE1MVGFibGVD
+YXB0aW9uRWxlbWVudDpXLnFFLEhUTUxUYWJsZUNlbGxFbGVtZW50OlcucUUsSFRNTFRhYmxlRGF0YUNl
+bGxFbGVtZW50OlcucUUsSFRNTFRhYmxlSGVhZGVyQ2VsbEVsZW1lbnQ6Vy5xRSxIVE1MVGFibGVDb2xF
+bGVtZW50OlcucUUsSFRNTFRleHRBcmVhRWxlbWVudDpXLnFFLEhUTUxUaW1lRWxlbWVudDpXLnFFLEhU
+TUxUaXRsZUVsZW1lbnQ6Vy5xRSxIVE1MVHJhY2tFbGVtZW50OlcucUUsSFRNTFVMaXN0RWxlbWVudDpX
+LnFFLEhUTUxVbmtub3duRWxlbWVudDpXLnFFLEhUTUxWaWRlb0VsZW1lbnQ6Vy5xRSxIVE1MRGlyZWN0
+b3J5RWxlbWVudDpXLnFFLEhUTUxGb250RWxlbWVudDpXLnFFLEhUTUxGcmFtZUVsZW1lbnQ6Vy5xRSxI
+VE1MRnJhbWVTZXRFbGVtZW50OlcucUUsSFRNTE1hcnF1ZWVFbGVtZW50OlcucUUsSFRNTEVsZW1lbnQ6
+Vy5xRSxIVE1MQW5jaG9yRWxlbWVudDpXLkdoLEhUTUxBcmVhRWxlbWVudDpXLmZZLEhUTUxCYXNlRWxl
+bWVudDpXLm5CLEJsb2I6Vy5BeixIVE1MQm9keUVsZW1lbnQ6Vy5RUCxDREFUQVNlY3Rpb246Vy5ueCxD
+aGFyYWN0ZXJEYXRhOlcubngsQ29tbWVudDpXLm54LFByb2Nlc3NpbmdJbnN0cnVjdGlvbjpXLm54LFRl
+eHQ6Vy5ueCxDU1NTdHlsZURlY2xhcmF0aW9uOlcub0osTVNTdHlsZUNTU1Byb3BlcnRpZXM6Vy5vSixD
+U1MyUHJvcGVydGllczpXLm9KLFhNTERvY3VtZW50OlcuUUYsRG9jdW1lbnQ6Vy5RRixET01FeGNlcHRp
+b246Vy5OaCxET01SZWN0UmVhZE9ubHk6Vy5JQixET01Ub2tlbkxpc3Q6Vy5uNyxFbGVtZW50OlcuY3Ys
+QWJvcnRQYXltZW50RXZlbnQ6Vy5lYSxBbmltYXRpb25FdmVudDpXLmVhLEFuaW1hdGlvblBsYXliYWNr
+RXZlbnQ6Vy5lYSxBcHBsaWNhdGlvbkNhY2hlRXJyb3JFdmVudDpXLmVhLEJhY2tncm91bmRGZXRjaENs
+aWNrRXZlbnQ6Vy5lYSxCYWNrZ3JvdW5kRmV0Y2hFdmVudDpXLmVhLEJhY2tncm91bmRGZXRjaEZhaWxF
+dmVudDpXLmVhLEJhY2tncm91bmRGZXRjaGVkRXZlbnQ6Vy5lYSxCZWZvcmVJbnN0YWxsUHJvbXB0RXZl
+bnQ6Vy5lYSxCZWZvcmVVbmxvYWRFdmVudDpXLmVhLEJsb2JFdmVudDpXLmVhLENhbk1ha2VQYXltZW50
+RXZlbnQ6Vy5lYSxDbGlwYm9hcmRFdmVudDpXLmVhLENsb3NlRXZlbnQ6Vy5lYSxDdXN0b21FdmVudDpX
+LmVhLERldmljZU1vdGlvbkV2ZW50OlcuZWEsRGV2aWNlT3JpZW50YXRpb25FdmVudDpXLmVhLEVycm9y
+RXZlbnQ6Vy5lYSxFeHRlbmRhYmxlRXZlbnQ6Vy5lYSxFeHRlbmRhYmxlTWVzc2FnZUV2ZW50OlcuZWEs
+RmV0Y2hFdmVudDpXLmVhLEZvbnRGYWNlU2V0TG9hZEV2ZW50OlcuZWEsRm9yZWlnbkZldGNoRXZlbnQ6
+Vy5lYSxHYW1lcGFkRXZlbnQ6Vy5lYSxIYXNoQ2hhbmdlRXZlbnQ6Vy5lYSxJbnN0YWxsRXZlbnQ6Vy5l
+YSxNZWRpYUVuY3J5cHRlZEV2ZW50OlcuZWEsTWVkaWFLZXlNZXNzYWdlRXZlbnQ6Vy5lYSxNZWRpYVF1
+ZXJ5TGlzdEV2ZW50OlcuZWEsTWVkaWFTdHJlYW1FdmVudDpXLmVhLE1lZGlhU3RyZWFtVHJhY2tFdmVu
+dDpXLmVhLE1lc3NhZ2VFdmVudDpXLmVhLE1JRElDb25uZWN0aW9uRXZlbnQ6Vy5lYSxNSURJTWVzc2Fn
+ZUV2ZW50OlcuZWEsTXV0YXRpb25FdmVudDpXLmVhLE5vdGlmaWNhdGlvbkV2ZW50OlcuZWEsUGFnZVRy
+YW5zaXRpb25FdmVudDpXLmVhLFBheW1lbnRSZXF1ZXN0RXZlbnQ6Vy5lYSxQYXltZW50UmVxdWVzdFVw
+ZGF0ZUV2ZW50OlcuZWEsUG9wU3RhdGVFdmVudDpXLmVhLFByZXNlbnRhdGlvbkNvbm5lY3Rpb25BdmFp
+bGFibGVFdmVudDpXLmVhLFByZXNlbnRhdGlvbkNvbm5lY3Rpb25DbG9zZUV2ZW50OlcuZWEsUHJvbWlz
+ZVJlamVjdGlvbkV2ZW50OlcuZWEsUHVzaEV2ZW50OlcuZWEsUlRDRGF0YUNoYW5uZWxFdmVudDpXLmVh
+LFJUQ0RUTUZUb25lQ2hhbmdlRXZlbnQ6Vy5lYSxSVENQZWVyQ29ubmVjdGlvbkljZUV2ZW50OlcuZWEs
+UlRDVHJhY2tFdmVudDpXLmVhLFNlY3VyaXR5UG9saWN5VmlvbGF0aW9uRXZlbnQ6Vy5lYSxTZW5zb3JF
+cnJvckV2ZW50OlcuZWEsU3BlZWNoUmVjb2duaXRpb25FcnJvcjpXLmVhLFNwZWVjaFJlY29nbml0aW9u
+RXZlbnQ6Vy5lYSxTcGVlY2hTeW50aGVzaXNFdmVudDpXLmVhLFN0b3JhZ2VFdmVudDpXLmVhLFN5bmNF
+dmVudDpXLmVhLFRyYWNrRXZlbnQ6Vy5lYSxUcmFuc2l0aW9uRXZlbnQ6Vy5lYSxXZWJLaXRUcmFuc2l0
+aW9uRXZlbnQ6Vy5lYSxWUkRldmljZUV2ZW50OlcuZWEsVlJEaXNwbGF5RXZlbnQ6Vy5lYSxWUlNlc3Np
+b25FdmVudDpXLmVhLE1vam9JbnRlcmZhY2VSZXF1ZXN0RXZlbnQ6Vy5lYSxVU0JDb25uZWN0aW9uRXZl
+bnQ6Vy5lYSxJREJWZXJzaW9uQ2hhbmdlRXZlbnQ6Vy5lYSxBdWRpb1Byb2Nlc3NpbmdFdmVudDpXLmVh
+LE9mZmxpbmVBdWRpb0NvbXBsZXRpb25FdmVudDpXLmVhLFdlYkdMQ29udGV4dEV2ZW50OlcuZWEsRXZl
+bnQ6Vy5lYSxJbnB1dEV2ZW50OlcuZWEsRXZlbnRUYXJnZXQ6Vy5EMCxGaWxlOlcuVDUsSFRNTEZvcm1F
+bGVtZW50OlcuaDQsSGlzdG9yeTpXLmJyLEhUTUxEb2N1bWVudDpXLlZiLFhNTEh0dHBSZXF1ZXN0Olcu
+TzcsWE1MSHR0cFJlcXVlc3RFdmVudFRhcmdldDpXLndhLEltYWdlRGF0YTpXLlNnLExvY2F0aW9uOlcu
+dTgsTW91c2VFdmVudDpXLkFqLERyYWdFdmVudDpXLkFqLFBvaW50ZXJFdmVudDpXLkFqLFdoZWVsRXZl
+bnQ6Vy5BaixEb2N1bWVudEZyYWdtZW50OlcudUgsU2hhZG93Um9vdDpXLnVILERvY3VtZW50VHlwZTpX
+LnVILE5vZGU6Vy51SCxOb2RlTGlzdDpXLkJILFJhZGlvTm9kZUxpc3Q6Vy5CSCxIVE1MUGFyYWdyYXBo
+RWxlbWVudDpXLlNOLFByb2dyZXNzRXZlbnQ6Vy5ldyxSZXNvdXJjZVByb2dyZXNzRXZlbnQ6Vy5ldyxI
+VE1MU2VsZWN0RWxlbWVudDpXLmxwLEhUTUxUYWJsZUVsZW1lbnQ6Vy5UYixIVE1MVGFibGVSb3dFbGVt
+ZW50OlcuSXYsSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQ6Vy5CVCxIVE1MVGVtcGxhdGVFbGVtZW50Olcu
+eVksQ29tcG9zaXRpb25FdmVudDpXLnc2LEZvY3VzRXZlbnQ6Vy53NixLZXlib2FyZEV2ZW50OlcudzYs
+VGV4dEV2ZW50OlcudzYsVG91Y2hFdmVudDpXLnc2LFVJRXZlbnQ6Vy53NixXaW5kb3c6Vy5LNSxET01X
+aW5kb3c6Vy5LNSxEZWRpY2F0ZWRXb3JrZXJHbG9iYWxTY29wZTpXLkNtLFNlcnZpY2VXb3JrZXJHbG9i
+YWxTY29wZTpXLkNtLFNoYXJlZFdvcmtlckdsb2JhbFNjb3BlOlcuQ20sV29ya2VyR2xvYmFsU2NvcGU6
+Vy5DbSxBdHRyOlcuQ1EsQ2xpZW50UmVjdDpXLnc0LERPTVJlY3Q6Vy53NCxOYW1lZE5vZGVNYXA6Vy5y
+aCxNb3pOYW1lZEF0dHJNYXA6Vy5yaCxJREJLZXlSYW5nZTpQLmhGLFNWR1NjcmlwdEVsZW1lbnQ6UC5u
+ZCxTVkdBRWxlbWVudDpQLmQ1LFNWR0FuaW1hdGVFbGVtZW50OlAuZDUsU1ZHQW5pbWF0ZU1vdGlvbkVs
+ZW1lbnQ6UC5kNSxTVkdBbmltYXRlVHJhbnNmb3JtRWxlbWVudDpQLmQ1LFNWR0FuaW1hdGlvbkVsZW1l
+bnQ6UC5kNSxTVkdDaXJjbGVFbGVtZW50OlAuZDUsU1ZHQ2xpcFBhdGhFbGVtZW50OlAuZDUsU1ZHRGVm
+c0VsZW1lbnQ6UC5kNSxTVkdEZXNjRWxlbWVudDpQLmQ1LFNWR0Rpc2NhcmRFbGVtZW50OlAuZDUsU1ZH
+RWxsaXBzZUVsZW1lbnQ6UC5kNSxTVkdGRUJsZW5kRWxlbWVudDpQLmQ1LFNWR0ZFQ29sb3JNYXRyaXhF
+bGVtZW50OlAuZDUsU1ZHRkVDb21wb25lbnRUcmFuc2ZlckVsZW1lbnQ6UC5kNSxTVkdGRUNvbXBvc2l0
+ZUVsZW1lbnQ6UC5kNSxTVkdGRUNvbnZvbHZlTWF0cml4RWxlbWVudDpQLmQ1LFNWR0ZFRGlmZnVzZUxp
+Z2h0aW5nRWxlbWVudDpQLmQ1LFNWR0ZFRGlzcGxhY2VtZW50TWFwRWxlbWVudDpQLmQ1LFNWR0ZFRGlz
+dGFudExpZ2h0RWxlbWVudDpQLmQ1LFNWR0ZFRmxvb2RFbGVtZW50OlAuZDUsU1ZHRkVGdW5jQUVsZW1l
+bnQ6UC5kNSxTVkdGRUZ1bmNCRWxlbWVudDpQLmQ1LFNWR0ZFRnVuY0dFbGVtZW50OlAuZDUsU1ZHRkVG
+dW5jUkVsZW1lbnQ6UC5kNSxTVkdGRUdhdXNzaWFuQmx1ckVsZW1lbnQ6UC5kNSxTVkdGRUltYWdlRWxl
+bWVudDpQLmQ1LFNWR0ZFTWVyZ2VFbGVtZW50OlAuZDUsU1ZHRkVNZXJnZU5vZGVFbGVtZW50OlAuZDUs
+U1ZHRkVNb3JwaG9sb2d5RWxlbWVudDpQLmQ1LFNWR0ZFT2Zmc2V0RWxlbWVudDpQLmQ1LFNWR0ZFUG9p
+bnRMaWdodEVsZW1lbnQ6UC5kNSxTVkdGRVNwZWN1bGFyTGlnaHRpbmdFbGVtZW50OlAuZDUsU1ZHRkVT
+cG90TGlnaHRFbGVtZW50OlAuZDUsU1ZHRkVUaWxlRWxlbWVudDpQLmQ1LFNWR0ZFVHVyYnVsZW5jZUVs
+ZW1lbnQ6UC5kNSxTVkdGaWx0ZXJFbGVtZW50OlAuZDUsU1ZHRm9yZWlnbk9iamVjdEVsZW1lbnQ6UC5k
+NSxTVkdHRWxlbWVudDpQLmQ1LFNWR0dlb21ldHJ5RWxlbWVudDpQLmQ1LFNWR0dyYXBoaWNzRWxlbWVu
+dDpQLmQ1LFNWR0ltYWdlRWxlbWVudDpQLmQ1LFNWR0xpbmVFbGVtZW50OlAuZDUsU1ZHTGluZWFyR3Jh
+ZGllbnRFbGVtZW50OlAuZDUsU1ZHTWFya2VyRWxlbWVudDpQLmQ1LFNWR01hc2tFbGVtZW50OlAuZDUs
+U1ZHTWV0YWRhdGFFbGVtZW50OlAuZDUsU1ZHUGF0aEVsZW1lbnQ6UC5kNSxTVkdQYXR0ZXJuRWxlbWVu
+dDpQLmQ1LFNWR1BvbHlnb25FbGVtZW50OlAuZDUsU1ZHUG9seWxpbmVFbGVtZW50OlAuZDUsU1ZHUmFk
+aWFsR3JhZGllbnRFbGVtZW50OlAuZDUsU1ZHUmVjdEVsZW1lbnQ6UC5kNSxTVkdTZXRFbGVtZW50OlAu
+ZDUsU1ZHU3RvcEVsZW1lbnQ6UC5kNSxTVkdTdHlsZUVsZW1lbnQ6UC5kNSxTVkdTVkdFbGVtZW50OlAu
+ZDUsU1ZHU3dpdGNoRWxlbWVudDpQLmQ1LFNWR1N5bWJvbEVsZW1lbnQ6UC5kNSxTVkdUU3BhbkVsZW1l
+bnQ6UC5kNSxTVkdUZXh0Q29udGVudEVsZW1lbnQ6UC5kNSxTVkdUZXh0RWxlbWVudDpQLmQ1LFNWR1Rl
+eHRQYXRoRWxlbWVudDpQLmQ1LFNWR1RleHRQb3NpdGlvbmluZ0VsZW1lbnQ6UC5kNSxTVkdUaXRsZUVs
+ZW1lbnQ6UC5kNSxTVkdVc2VFbGVtZW50OlAuZDUsU1ZHVmlld0VsZW1lbnQ6UC5kNSxTVkdHcmFkaWVu
+dEVsZW1lbnQ6UC5kNSxTVkdDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uRWxlbWVudDpQLmQ1LFNWR0ZF
+RHJvcFNoYWRvd0VsZW1lbnQ6UC5kNSxTVkdNUGF0aEVsZW1lbnQ6UC5kNSxTVkdFbGVtZW50OlAuZDV9
+KQpodW5rSGVscGVycy5zZXRPclVwZGF0ZUxlYWZUYWdzKHtET01FcnJvcjp0cnVlLERPTUltcGxlbWVu
+dGF0aW9uOnRydWUsTWVkaWFFcnJvcjp0cnVlLE5hdmlnYXRvcjp0cnVlLE5hdmlnYXRvckNvbmN1cnJl
+bnRIYXJkd2FyZTp0cnVlLE5hdmlnYXRvclVzZXJNZWRpYUVycm9yOnRydWUsT3ZlcmNvbnN0cmFpbmVk
+RXJyb3I6dHJ1ZSxQb3NpdGlvbkVycm9yOnRydWUsUmFuZ2U6dHJ1ZSxTUUxFcnJvcjp0cnVlLERhdGFW
+aWV3OnRydWUsQXJyYXlCdWZmZXJWaWV3OmZhbHNlLEZsb2F0MzJBcnJheTp0cnVlLEZsb2F0NjRBcnJh
+eTp0cnVlLEludDE2QXJyYXk6dHJ1ZSxJbnQzMkFycmF5OnRydWUsSW50OEFycmF5OnRydWUsVWludDE2
+QXJyYXk6dHJ1ZSxVaW50MzJBcnJheTp0cnVlLFVpbnQ4Q2xhbXBlZEFycmF5OnRydWUsQ2FudmFzUGl4
+ZWxBcnJheTp0cnVlLFVpbnQ4QXJyYXk6ZmFsc2UsSFRNTEF1ZGlvRWxlbWVudDp0cnVlLEhUTUxCUkVs
+ZW1lbnQ6dHJ1ZSxIVE1MQnV0dG9uRWxlbWVudDp0cnVlLEhUTUxDYW52YXNFbGVtZW50OnRydWUsSFRN
+TENvbnRlbnRFbGVtZW50OnRydWUsSFRNTERMaXN0RWxlbWVudDp0cnVlLEhUTUxEYXRhRWxlbWVudDp0
+cnVlLEhUTUxEYXRhTGlzdEVsZW1lbnQ6dHJ1ZSxIVE1MRGV0YWlsc0VsZW1lbnQ6dHJ1ZSxIVE1MRGlh
+bG9nRWxlbWVudDp0cnVlLEhUTUxEaXZFbGVtZW50OnRydWUsSFRNTEVtYmVkRWxlbWVudDp0cnVlLEhU
+TUxGaWVsZFNldEVsZW1lbnQ6dHJ1ZSxIVE1MSFJFbGVtZW50OnRydWUsSFRNTEhlYWRFbGVtZW50OnRy
+dWUsSFRNTEhlYWRpbmdFbGVtZW50OnRydWUsSFRNTEh0bWxFbGVtZW50OnRydWUsSFRNTElGcmFtZUVs
+ZW1lbnQ6dHJ1ZSxIVE1MSW1hZ2VFbGVtZW50OnRydWUsSFRNTElucHV0RWxlbWVudDp0cnVlLEhUTUxM
+SUVsZW1lbnQ6dHJ1ZSxIVE1MTGFiZWxFbGVtZW50OnRydWUsSFRNTExlZ2VuZEVsZW1lbnQ6dHJ1ZSxI
+VE1MTGlua0VsZW1lbnQ6dHJ1ZSxIVE1MTWFwRWxlbWVudDp0cnVlLEhUTUxNZWRpYUVsZW1lbnQ6dHJ1
+ZSxIVE1MTWVudUVsZW1lbnQ6dHJ1ZSxIVE1MTWV0YUVsZW1lbnQ6dHJ1ZSxIVE1MTWV0ZXJFbGVtZW50
+OnRydWUsSFRNTE1vZEVsZW1lbnQ6dHJ1ZSxIVE1MT0xpc3RFbGVtZW50OnRydWUsSFRNTE9iamVjdEVs
+ZW1lbnQ6dHJ1ZSxIVE1MT3B0R3JvdXBFbGVtZW50OnRydWUsSFRNTE9wdGlvbkVsZW1lbnQ6dHJ1ZSxI
+VE1MT3V0cHV0RWxlbWVudDp0cnVlLEhUTUxQYXJhbUVsZW1lbnQ6dHJ1ZSxIVE1MUGljdHVyZUVsZW1l
+bnQ6dHJ1ZSxIVE1MUHJlRWxlbWVudDp0cnVlLEhUTUxQcm9ncmVzc0VsZW1lbnQ6dHJ1ZSxIVE1MUXVv
+dGVFbGVtZW50OnRydWUsSFRNTFNjcmlwdEVsZW1lbnQ6dHJ1ZSxIVE1MU2hhZG93RWxlbWVudDp0cnVl
+LEhUTUxTbG90RWxlbWVudDp0cnVlLEhUTUxTb3VyY2VFbGVtZW50OnRydWUsSFRNTFNwYW5FbGVtZW50
+OnRydWUsSFRNTFN0eWxlRWxlbWVudDp0cnVlLEhUTUxUYWJsZUNhcHRpb25FbGVtZW50OnRydWUsSFRN
+TFRhYmxlQ2VsbEVsZW1lbnQ6dHJ1ZSxIVE1MVGFibGVEYXRhQ2VsbEVsZW1lbnQ6dHJ1ZSxIVE1MVGFi
+bGVIZWFkZXJDZWxsRWxlbWVudDp0cnVlLEhUTUxUYWJsZUNvbEVsZW1lbnQ6dHJ1ZSxIVE1MVGV4dEFy
+ZWFFbGVtZW50OnRydWUsSFRNTFRpbWVFbGVtZW50OnRydWUsSFRNTFRpdGxlRWxlbWVudDp0cnVlLEhU
+TUxUcmFja0VsZW1lbnQ6dHJ1ZSxIVE1MVUxpc3RFbGVtZW50OnRydWUsSFRNTFVua25vd25FbGVtZW50
+OnRydWUsSFRNTFZpZGVvRWxlbWVudDp0cnVlLEhUTUxEaXJlY3RvcnlFbGVtZW50OnRydWUsSFRNTEZv
+bnRFbGVtZW50OnRydWUsSFRNTEZyYW1lRWxlbWVudDp0cnVlLEhUTUxGcmFtZVNldEVsZW1lbnQ6dHJ1
+ZSxIVE1MTWFycXVlZUVsZW1lbnQ6dHJ1ZSxIVE1MRWxlbWVudDpmYWxzZSxIVE1MQW5jaG9yRWxlbWVu
+dDp0cnVlLEhUTUxBcmVhRWxlbWVudDp0cnVlLEhUTUxCYXNlRWxlbWVudDp0cnVlLEJsb2I6ZmFsc2Us
+SFRNTEJvZHlFbGVtZW50OnRydWUsQ0RBVEFTZWN0aW9uOnRydWUsQ2hhcmFjdGVyRGF0YTp0cnVlLENv
+bW1lbnQ6dHJ1ZSxQcm9jZXNzaW5nSW5zdHJ1Y3Rpb246dHJ1ZSxUZXh0OnRydWUsQ1NTU3R5bGVEZWNs
+YXJhdGlvbjp0cnVlLE1TU3R5bGVDU1NQcm9wZXJ0aWVzOnRydWUsQ1NTMlByb3BlcnRpZXM6dHJ1ZSxY
+TUxEb2N1bWVudDp0cnVlLERvY3VtZW50OmZhbHNlLERPTUV4Y2VwdGlvbjp0cnVlLERPTVJlY3RSZWFk
+T25seTpmYWxzZSxET01Ub2tlbkxpc3Q6dHJ1ZSxFbGVtZW50OmZhbHNlLEFib3J0UGF5bWVudEV2ZW50
+OnRydWUsQW5pbWF0aW9uRXZlbnQ6dHJ1ZSxBbmltYXRpb25QbGF5YmFja0V2ZW50OnRydWUsQXBwbGlj
+YXRpb25DYWNoZUVycm9yRXZlbnQ6dHJ1ZSxCYWNrZ3JvdW5kRmV0Y2hDbGlja0V2ZW50OnRydWUsQmFj
+a2dyb3VuZEZldGNoRXZlbnQ6dHJ1ZSxCYWNrZ3JvdW5kRmV0Y2hGYWlsRXZlbnQ6dHJ1ZSxCYWNrZ3Jv
+dW5kRmV0Y2hlZEV2ZW50OnRydWUsQmVmb3JlSW5zdGFsbFByb21wdEV2ZW50OnRydWUsQmVmb3JlVW5s
+b2FkRXZlbnQ6dHJ1ZSxCbG9iRXZlbnQ6dHJ1ZSxDYW5NYWtlUGF5bWVudEV2ZW50OnRydWUsQ2xpcGJv
+YXJkRXZlbnQ6dHJ1ZSxDbG9zZUV2ZW50OnRydWUsQ3VzdG9tRXZlbnQ6dHJ1ZSxEZXZpY2VNb3Rpb25F
+dmVudDp0cnVlLERldmljZU9yaWVudGF0aW9uRXZlbnQ6dHJ1ZSxFcnJvckV2ZW50OnRydWUsRXh0ZW5k
+YWJsZUV2ZW50OnRydWUsRXh0ZW5kYWJsZU1lc3NhZ2VFdmVudDp0cnVlLEZldGNoRXZlbnQ6dHJ1ZSxG
+b250RmFjZVNldExvYWRFdmVudDp0cnVlLEZvcmVpZ25GZXRjaEV2ZW50OnRydWUsR2FtZXBhZEV2ZW50
+OnRydWUsSGFzaENoYW5nZUV2ZW50OnRydWUsSW5zdGFsbEV2ZW50OnRydWUsTWVkaWFFbmNyeXB0ZWRF
+dmVudDp0cnVlLE1lZGlhS2V5TWVzc2FnZUV2ZW50OnRydWUsTWVkaWFRdWVyeUxpc3RFdmVudDp0cnVl
+LE1lZGlhU3RyZWFtRXZlbnQ6dHJ1ZSxNZWRpYVN0cmVhbVRyYWNrRXZlbnQ6dHJ1ZSxNZXNzYWdlRXZl
+bnQ6dHJ1ZSxNSURJQ29ubmVjdGlvbkV2ZW50OnRydWUsTUlESU1lc3NhZ2VFdmVudDp0cnVlLE11dGF0
+aW9uRXZlbnQ6dHJ1ZSxOb3RpZmljYXRpb25FdmVudDp0cnVlLFBhZ2VUcmFuc2l0aW9uRXZlbnQ6dHJ1
+ZSxQYXltZW50UmVxdWVzdEV2ZW50OnRydWUsUGF5bWVudFJlcXVlc3RVcGRhdGVFdmVudDp0cnVlLFBv
+cFN0YXRlRXZlbnQ6dHJ1ZSxQcmVzZW50YXRpb25Db25uZWN0aW9uQXZhaWxhYmxlRXZlbnQ6dHJ1ZSxQ
+cmVzZW50YXRpb25Db25uZWN0aW9uQ2xvc2VFdmVudDp0cnVlLFByb21pc2VSZWplY3Rpb25FdmVudDp0
+cnVlLFB1c2hFdmVudDp0cnVlLFJUQ0RhdGFDaGFubmVsRXZlbnQ6dHJ1ZSxSVENEVE1GVG9uZUNoYW5n
+ZUV2ZW50OnRydWUsUlRDUGVlckNvbm5lY3Rpb25JY2VFdmVudDp0cnVlLFJUQ1RyYWNrRXZlbnQ6dHJ1
+ZSxTZWN1cml0eVBvbGljeVZpb2xhdGlvbkV2ZW50OnRydWUsU2Vuc29yRXJyb3JFdmVudDp0cnVlLFNw
+ZWVjaFJlY29nbml0aW9uRXJyb3I6dHJ1ZSxTcGVlY2hSZWNvZ25pdGlvbkV2ZW50OnRydWUsU3BlZWNo
+U3ludGhlc2lzRXZlbnQ6dHJ1ZSxTdG9yYWdlRXZlbnQ6dHJ1ZSxTeW5jRXZlbnQ6dHJ1ZSxUcmFja0V2
+ZW50OnRydWUsVHJhbnNpdGlvbkV2ZW50OnRydWUsV2ViS2l0VHJhbnNpdGlvbkV2ZW50OnRydWUsVlJE
+ZXZpY2VFdmVudDp0cnVlLFZSRGlzcGxheUV2ZW50OnRydWUsVlJTZXNzaW9uRXZlbnQ6dHJ1ZSxNb2pv
+SW50ZXJmYWNlUmVxdWVzdEV2ZW50OnRydWUsVVNCQ29ubmVjdGlvbkV2ZW50OnRydWUsSURCVmVyc2lv
+bkNoYW5nZUV2ZW50OnRydWUsQXVkaW9Qcm9jZXNzaW5nRXZlbnQ6dHJ1ZSxPZmZsaW5lQXVkaW9Db21w
+bGV0aW9uRXZlbnQ6dHJ1ZSxXZWJHTENvbnRleHRFdmVudDp0cnVlLEV2ZW50OmZhbHNlLElucHV0RXZl
+bnQ6ZmFsc2UsRXZlbnRUYXJnZXQ6ZmFsc2UsRmlsZTp0cnVlLEhUTUxGb3JtRWxlbWVudDp0cnVlLEhp
+c3Rvcnk6dHJ1ZSxIVE1MRG9jdW1lbnQ6dHJ1ZSxYTUxIdHRwUmVxdWVzdDp0cnVlLFhNTEh0dHBSZXF1
+ZXN0RXZlbnRUYXJnZXQ6ZmFsc2UsSW1hZ2VEYXRhOnRydWUsTG9jYXRpb246dHJ1ZSxNb3VzZUV2ZW50
+OnRydWUsRHJhZ0V2ZW50OnRydWUsUG9pbnRlckV2ZW50OnRydWUsV2hlZWxFdmVudDp0cnVlLERvY3Vt
+ZW50RnJhZ21lbnQ6dHJ1ZSxTaGFkb3dSb290OnRydWUsRG9jdW1lbnRUeXBlOnRydWUsTm9kZTpmYWxz
+ZSxOb2RlTGlzdDp0cnVlLFJhZGlvTm9kZUxpc3Q6dHJ1ZSxIVE1MUGFyYWdyYXBoRWxlbWVudDp0cnVl
+LFByb2dyZXNzRXZlbnQ6dHJ1ZSxSZXNvdXJjZVByb2dyZXNzRXZlbnQ6dHJ1ZSxIVE1MU2VsZWN0RWxl
+bWVudDp0cnVlLEhUTUxUYWJsZUVsZW1lbnQ6dHJ1ZSxIVE1MVGFibGVSb3dFbGVtZW50OnRydWUsSFRN
+TFRhYmxlU2VjdGlvbkVsZW1lbnQ6dHJ1ZSxIVE1MVGVtcGxhdGVFbGVtZW50OnRydWUsQ29tcG9zaXRp
+b25FdmVudDp0cnVlLEZvY3VzRXZlbnQ6dHJ1ZSxLZXlib2FyZEV2ZW50OnRydWUsVGV4dEV2ZW50OnRy
+dWUsVG91Y2hFdmVudDp0cnVlLFVJRXZlbnQ6ZmFsc2UsV2luZG93OnRydWUsRE9NV2luZG93OnRydWUs
+RGVkaWNhdGVkV29ya2VyR2xvYmFsU2NvcGU6dHJ1ZSxTZXJ2aWNlV29ya2VyR2xvYmFsU2NvcGU6dHJ1
+ZSxTaGFyZWRXb3JrZXJHbG9iYWxTY29wZTp0cnVlLFdvcmtlckdsb2JhbFNjb3BlOnRydWUsQXR0cjp0
+cnVlLENsaWVudFJlY3Q6dHJ1ZSxET01SZWN0OnRydWUsTmFtZWROb2RlTWFwOnRydWUsTW96TmFtZWRB
+dHRyTWFwOnRydWUsSURCS2V5UmFuZ2U6dHJ1ZSxTVkdTY3JpcHRFbGVtZW50OnRydWUsU1ZHQUVsZW1l
+bnQ6dHJ1ZSxTVkdBbmltYXRlRWxlbWVudDp0cnVlLFNWR0FuaW1hdGVNb3Rpb25FbGVtZW50OnRydWUs
+U1ZHQW5pbWF0ZVRyYW5zZm9ybUVsZW1lbnQ6dHJ1ZSxTVkdBbmltYXRpb25FbGVtZW50OnRydWUsU1ZH
+Q2lyY2xlRWxlbWVudDp0cnVlLFNWR0NsaXBQYXRoRWxlbWVudDp0cnVlLFNWR0RlZnNFbGVtZW50OnRy
+dWUsU1ZHRGVzY0VsZW1lbnQ6dHJ1ZSxTVkdEaXNjYXJkRWxlbWVudDp0cnVlLFNWR0VsbGlwc2VFbGVt
+ZW50OnRydWUsU1ZHRkVCbGVuZEVsZW1lbnQ6dHJ1ZSxTVkdGRUNvbG9yTWF0cml4RWxlbWVudDp0cnVl
+LFNWR0ZFQ29tcG9uZW50VHJhbnNmZXJFbGVtZW50OnRydWUsU1ZHRkVDb21wb3NpdGVFbGVtZW50OnRy
+dWUsU1ZHRkVDb252b2x2ZU1hdHJpeEVsZW1lbnQ6dHJ1ZSxTVkdGRURpZmZ1c2VMaWdodGluZ0VsZW1l
+bnQ6dHJ1ZSxTVkdGRURpc3BsYWNlbWVudE1hcEVsZW1lbnQ6dHJ1ZSxTVkdGRURpc3RhbnRMaWdodEVs
+ZW1lbnQ6dHJ1ZSxTVkdGRUZsb29kRWxlbWVudDp0cnVlLFNWR0ZFRnVuY0FFbGVtZW50OnRydWUsU1ZH
+RkVGdW5jQkVsZW1lbnQ6dHJ1ZSxTVkdGRUZ1bmNHRWxlbWVudDp0cnVlLFNWR0ZFRnVuY1JFbGVtZW50
+OnRydWUsU1ZHRkVHYXVzc2lhbkJsdXJFbGVtZW50OnRydWUsU1ZHRkVJbWFnZUVsZW1lbnQ6dHJ1ZSxT
+VkdGRU1lcmdlRWxlbWVudDp0cnVlLFNWR0ZFTWVyZ2VOb2RlRWxlbWVudDp0cnVlLFNWR0ZFTW9ycGhv
+bG9neUVsZW1lbnQ6dHJ1ZSxTVkdGRU9mZnNldEVsZW1lbnQ6dHJ1ZSxTVkdGRVBvaW50TGlnaHRFbGVt
+ZW50OnRydWUsU1ZHRkVTcGVjdWxhckxpZ2h0aW5nRWxlbWVudDp0cnVlLFNWR0ZFU3BvdExpZ2h0RWxl
+bWVudDp0cnVlLFNWR0ZFVGlsZUVsZW1lbnQ6dHJ1ZSxTVkdGRVR1cmJ1bGVuY2VFbGVtZW50OnRydWUs
+U1ZHRmlsdGVyRWxlbWVudDp0cnVlLFNWR0ZvcmVpZ25PYmplY3RFbGVtZW50OnRydWUsU1ZHR0VsZW1l
+bnQ6dHJ1ZSxTVkdHZW9tZXRyeUVsZW1lbnQ6dHJ1ZSxTVkdHcmFwaGljc0VsZW1lbnQ6dHJ1ZSxTVkdJ
+bWFnZUVsZW1lbnQ6dHJ1ZSxTVkdMaW5lRWxlbWVudDp0cnVlLFNWR0xpbmVhckdyYWRpZW50RWxlbWVu
+dDp0cnVlLFNWR01hcmtlckVsZW1lbnQ6dHJ1ZSxTVkdNYXNrRWxlbWVudDp0cnVlLFNWR01ldGFkYXRh
+RWxlbWVudDp0cnVlLFNWR1BhdGhFbGVtZW50OnRydWUsU1ZHUGF0dGVybkVsZW1lbnQ6dHJ1ZSxTVkdQ
+b2x5Z29uRWxlbWVudDp0cnVlLFNWR1BvbHlsaW5lRWxlbWVudDp0cnVlLFNWR1JhZGlhbEdyYWRpZW50
+RWxlbWVudDp0cnVlLFNWR1JlY3RFbGVtZW50OnRydWUsU1ZHU2V0RWxlbWVudDp0cnVlLFNWR1N0b3BF
+bGVtZW50OnRydWUsU1ZHU3R5bGVFbGVtZW50OnRydWUsU1ZHU1ZHRWxlbWVudDp0cnVlLFNWR1N3aXRj
+aEVsZW1lbnQ6dHJ1ZSxTVkdTeW1ib2xFbGVtZW50OnRydWUsU1ZHVFNwYW5FbGVtZW50OnRydWUsU1ZH
+VGV4dENvbnRlbnRFbGVtZW50OnRydWUsU1ZHVGV4dEVsZW1lbnQ6dHJ1ZSxTVkdUZXh0UGF0aEVsZW1l
+bnQ6dHJ1ZSxTVkdUZXh0UG9zaXRpb25pbmdFbGVtZW50OnRydWUsU1ZHVGl0bGVFbGVtZW50OnRydWUs
+U1ZHVXNlRWxlbWVudDp0cnVlLFNWR1ZpZXdFbGVtZW50OnRydWUsU1ZHR3JhZGllbnRFbGVtZW50OnRy
+dWUsU1ZHQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbkVsZW1lbnQ6dHJ1ZSxTVkdGRURyb3BTaGFkb3dF
+bGVtZW50OnRydWUsU1ZHTVBhdGhFbGVtZW50OnRydWUsU1ZHRWxlbWVudDpmYWxzZX0pCkguYjAuJG5h
+dGl2ZVN1cGVyY2xhc3NUYWc9IkFycmF5QnVmZmVyVmlldyIKSC5SRy4kbmF0aXZlU3VwZXJjbGFzc1Rh
+Zz0iQXJyYXlCdWZmZXJWaWV3IgpILlZQLiRuYXRpdmVTdXBlcmNsYXNzVGFnPSJBcnJheUJ1ZmZlclZp
+ZXciCkguRGcuJG5hdGl2ZVN1cGVyY2xhc3NUYWc9IkFycmF5QnVmZmVyVmlldyIKSC5XQi4kbmF0aXZl
+U3VwZXJjbGFzc1RhZz0iQXJyYXlCdWZmZXJWaWV3IgpILlpHLiRuYXRpdmVTdXBlcmNsYXNzVGFnPSJB
+cnJheUJ1ZmZlclZpZXciCkguUGcuJG5hdGl2ZVN1cGVyY2xhc3NUYWc9IkFycmF5QnVmZmVyVmlldyJ9
+KSgpCmNvbnZlcnRBbGxUb0Zhc3RPYmplY3QodykKY29udmVydFRvRmFzdE9iamVjdCgkKTsoZnVuY3Rp
+b24oYSl7aWYodHlwZW9mIGRvY3VtZW50PT09InVuZGVmaW5lZCIpe2EobnVsbCkKcmV0dXJufWlmKHR5
+cGVvZiBkb2N1bWVudC5jdXJyZW50U2NyaXB0IT0ndW5kZWZpbmVkJyl7YShkb2N1bWVudC5jdXJyZW50
+U2NyaXB0KQpyZXR1cm59dmFyIHQ9ZG9jdW1lbnQuc2NyaXB0cwpmdW5jdGlvbiBvbkxvYWQoYil7Zm9y
+KHZhciByPTA7cjx0Lmxlbmd0aDsrK3IpdFtyXS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixvbkxv
+YWQsZmFsc2UpCmEoYi50YXJnZXQpfWZvcih2YXIgcz0wO3M8dC5sZW5ndGg7KytzKXRbc10uYWRkRXZl
+bnRMaXN0ZW5lcigibG9hZCIsb25Mb2FkLGZhbHNlKX0pKGZ1bmN0aW9uKGEpe3YuY3VycmVudFNjcmlw
+dD1hCmlmKHR5cGVvZiBkYXJ0TWFpblJ1bm5lcj09PSJmdW5jdGlvbiIpZGFydE1haW5SdW5uZXIoTC5J
+cSxbXSkKZWxzZSBMLklxKFtdKX0pfSkoKQovLyMgc291cmNlTWFwcGluZ1VSTD1taWdyYXRpb24uanMu
+bWFwCg==
 ''';
diff --git a/pkg/analysis_server/lib/src/edit/nnbd_migration/unit_renderer.dart b/pkg/analysis_server/lib/src/edit/nnbd_migration/unit_renderer.dart
index 29267f3d..5817faa 100644
--- a/pkg/analysis_server/lib/src/edit/nnbd_migration/unit_renderer.dart
+++ b/pkg/analysis_server/lib/src/edit/nnbd_migration/unit_renderer.dart
@@ -174,11 +174,10 @@
           return 'added-region';
         case RegionType.remove:
           return 'removed-region';
-        case RegionType.unchanged:
-          return 'unchanged-region';
-        default:
-          return null;
+        case RegionType.informative:
+          return 'informative-region';
       }
+      throw StateError('Unexpected RegionType $type');
     }
 
     int previousOffset = 0;
diff --git a/pkg/analysis_server/lib/src/edit/nnbd_migration/web/migration.dart b/pkg/analysis_server/lib/src/edit/nnbd_migration/web/migration.dart
index e72631a..53b9557 100644
--- a/pkg/analysis_server/lib/src/edit/nnbd_migration/web/migration.dart
+++ b/pkg/analysis_server/lib/src/edit/nnbd_migration/web/migration.dart
@@ -25,7 +25,7 @@
     loadNavigationTree();
     if (path != '/' && path != rootPath) {
       // TODO(srawlins): replaceState?
-      loadFile(path, offset, lineNumber, callback: () {
+      loadFile(path, offset, lineNumber, true, callback: () {
         pushState(path, offset, lineNumber);
       });
     }
@@ -49,10 +49,10 @@
     int offset = getOffset(window.location.href);
     int lineNumber = getLine(window.location.href);
     if (path.length > 1) {
-      loadFile(path, offset, lineNumber);
+      loadFile(path, offset, lineNumber, false);
     } else {
       // Blank out the page, for the index screen.
-      writeCodeAndRegions(path, FileDetails.empty());
+      writeCodeAndRegions(path, FileDetails.empty(), true);
       updatePage('&nbsp;', null);
     }
   });
@@ -79,7 +79,7 @@
   });
 }
 
-void addClickHandlers(String selector) {
+void addClickHandlers(String selector, bool clearEditDetails) {
   Element parentElement = document.querySelector(selector);
 
   // Add navigation handlers for navigation links in the source code.
@@ -88,7 +88,7 @@
     link.onClick.listen((event) {
       Element tableElement = document.querySelector('table[data-path]');
       String parentPath = tableElement.dataset['path'];
-      handleNavLinkClick(event, relativeTo: parentPath);
+      handleNavLinkClick(event, clearEditDetails, relativeTo: parentPath);
     });
   });
 
@@ -134,7 +134,8 @@
 }
 
 void handleNavLinkClick(
-  MouseEvent event, {
+  MouseEvent event,
+  bool clearEditDetails, {
   String relativeTo,
 }) {
   Element target = event.currentTarget;
@@ -153,11 +154,11 @@
   int lineNumber = getLine(location);
 
   if (offset != null) {
-    navigate(path, offset, lineNumber, callback: () {
+    navigate(path, offset, lineNumber, clearEditDetails, callback: () {
       pushState(path, offset, lineNumber);
     });
   } else {
-    navigate(path, null, null, callback: () {
+    navigate(path, null, null, clearEditDetails, callback: () {
       pushState(path, null, null);
     });
   }
@@ -202,7 +203,7 @@
     if (xhr.status == 200) {
       var response = EditDetails.fromJson(jsonDecode(xhr.responseText));
       populateEditDetails(response);
-      addClickHandlers('.edit-panel .panel-content');
+      addClickHandlers('.edit-panel .panel-content', false);
     } else {
       window.alert('Request failed; status of ${xhr.status}');
     }
@@ -218,12 +219,13 @@
 void loadFile(
   String path,
   int offset,
-  int line, {
+  int line,
+  bool clearEditDetails, {
   VoidCallback callback,
 }) {
   // Handle the case where we're requesting a directory.
   if (!path.endsWith('.dart')) {
-    writeCodeAndRegions(path, FileDetails.empty());
+    writeCodeAndRegions(path, FileDetails.empty(), clearEditDetails);
     updatePage(path);
     if (callback != null) {
       callback();
@@ -239,7 +241,8 @@
   ).then((HttpRequest xhr) {
     if (xhr.status == 200) {
       Map<String, dynamic> response = jsonDecode(xhr.responseText);
-      writeCodeAndRegions(path, FileDetails.fromJson(response));
+      writeCodeAndRegions(
+          path, FileDetails.fromJson(response), clearEditDetails);
       maybeScrollToAndHighlight(offset, line);
       String filePathPart =
           path.contains('?') ? path.substring(0, path.indexOf('?')) : path;
@@ -287,11 +290,22 @@
   window.console.error('$st');
 }
 
+final Element headerPanel = document.querySelector('header');
+final Element footerPanel = document.querySelector('footer');
+
+/// Scroll an element into view if it is not visible.
 void maybeScrollIntoView(Element element) {
   Rectangle rect = element.getBoundingClientRect();
-  if (rect.bottom > window.innerHeight) {
+  // A line of text in the code view is 14px high. Including it here means we
+  // only choose to _not_ scroll a line of code into view if the entire line is
+  // visible.
+  var lineHeight = 14;
+  var visibleCeiling = headerPanel.offsetHeight + lineHeight;
+  var visibleFloor =
+      window.innerHeight - (footerPanel.offsetHeight + lineHeight);
+  if (rect.bottom > visibleFloor) {
     element.scrollIntoView();
-  } else if (rect.top < 0) {
+  } else if (rect.top < visibleCeiling) {
     element.scrollIntoView();
   }
 }
@@ -324,8 +338,7 @@
   } else {
     // If no offset is given, this is likely a navigation link, and we need to
     // scroll back to the top of the page.
-    target = document.getElementById('unit-name');
-    maybeScrollIntoView(target);
+    maybeScrollIntoView(unitName);
   }
 }
 
@@ -336,7 +349,8 @@
 void navigate(
   String path,
   int offset,
-  int lineNumber, {
+  int lineNumber,
+  bool clearEditDetails, {
   VoidCallback callback,
 }) {
   int currentOffset = getOffset(window.location.href);
@@ -349,7 +363,7 @@
       callback();
     }
   } else {
-    loadFile(path, offset, lineNumber, callback: callback);
+    loadFile(path, offset, lineNumber, clearEditDetails, callback: callback);
   }
 }
 
@@ -357,8 +371,9 @@
   return count == 1 ? single : (multiple ?? '${single}s');
 }
 
+final Element editPanel = document.querySelector('.edit-panel .panel-content');
+
 void populateEditDetails([EditDetails response]) {
-  var editPanel = document.querySelector('.edit-panel .panel-content');
   editPanel.innerHtml = '';
 
   if (response == null) {
@@ -378,65 +393,17 @@
   int line = response.line;
   Element explanation = editPanel.append(document.createElement('p'));
   explanation.append(Text('$explanationMessage at $relPath:$line.'));
-  int detailCount = response.details.length;
-  if (detailCount == 0) {
-    // Having 0 details is not necessarily an expected possibility, but handling
-    // the possibility prevents awkward text, "for 0 reasons:".
-  } else {
-    editPanel.append(ParagraphElement()..text = 'Edit rationale:');
-
-    Element detailList = editPanel.append(document.createElement('ul'));
-    for (var detail in response.details) {
-      var detailItem = detailList.append(document.createElement('li'));
-      detailItem.append(Text(detail.description));
-      var link = detail.link;
-      if (link != null) {
-        detailItem.append(Text(' ('));
-        detailItem.append(_aElementForLink(link, parentDirectory));
-        detailItem.append(Text(')'));
-      }
-    }
-  }
-
-  if (response.edits != null) {
-    for (var edit in response.edits) {
-      Element editParagraph = editPanel.append(document.createElement('p'));
-      Element a = editParagraph.append(document.createElement('a'));
-      a.append(Text(edit.description));
-      a.setAttribute('href', edit.href);
-      a.classes = ['post-link', 'before-apply'];
-    }
-  }
-
-  for (var trace in response.traces) {
-    var traceParagraph =
-        editPanel.append(document.createElement('p')..classes = ['trace']);
-    traceParagraph.append(Text('Nullability trace for: '));
-    traceParagraph.append(document.createElement('span')
-      ..classes = ['type-description']
-      ..append(Text(trace.description)));
-    var ul = traceParagraph
-        .append(document.createElement('ul')..classes = ['trace']);
-    for (var entry in trace.entries) {
-      var li = ul.append(document.createElement('li')..innerHtml = '&#x274F; ');
-      li.append(document.createElement('span')
-        ..classes = ['function']
-        ..append(Text(entry.function ?? 'unknown')));
-      var link = entry.link;
-      if (link != null) {
-        li.append(Text(' ('));
-        li.append(_aElementForLink(link, parentDirectory));
-        li.append(Text(')'));
-      }
-      li.append(Text(': '));
-      li.append(Text(entry.description));
-    }
-  }
+  _populateEditTraces(response, editPanel, parentDirectory);
+  _populateEditLinks(response, editPanel);
+  _populateEditRationale(response, editPanel, parentDirectory);
 }
 
+final Element editListElement =
+    document.querySelector('.edit-list .panel-content');
+
 /// Write the contents of the Edit List, from JSON data [editListData].
-void populateProposedEdits(String path, List<EditListItem> edits) {
-  Element editListElement = document.querySelector('.edit-list .panel-content');
+void populateProposedEdits(
+    String path, List<EditListItem> edits, bool clearEditDetails) {
   editListElement.innerHtml = '';
 
   Element p = editListElement.append(document.createElement('p'));
@@ -459,7 +426,7 @@
     anchor.dataset['line'] = '$line';
     anchor.append(Text('line $line'));
     anchor.onClick.listen((MouseEvent event) {
-      navigate(window.location.pathname, offset, line, callback: () {
+      navigate(window.location.pathname, offset, line, true, callback: () {
         pushState(window.location.pathname, offset, line);
       });
       loadAndPopulateEditDetails(path, offset);
@@ -467,8 +434,9 @@
     item.append(Text(': ${edit.explanation}'));
   }
 
-  // Clear out any existing edit details.
-  populateEditDetails();
+  if (clearEditDetails) {
+    populateEditDetails();
+  }
 }
 
 void pushState(String path, int offset, int line) {
@@ -509,13 +477,14 @@
   }
 }
 
+final Element unitName = document.querySelector('#unit-name');
+
 /// Update the heading and navigation links.
 ///
 /// Call this after updating page content on a navigation.
 void updatePage(String path, [int offset]) {
   path = relativePath(path);
   // Update page heading.
-  Element unitName = document.querySelector('#unit-name');
   unitName.text = path;
   // Update navigation styles.
   document.querySelectorAll('.nav-panel .nav-link').forEach((Element link) {
@@ -529,17 +498,17 @@
 }
 
 /// Load data from [data] into the .code and the .regions divs.
-void writeCodeAndRegions(String path, FileDetails data) {
+void writeCodeAndRegions(String path, FileDetails data, bool clearEditDetails) {
   Element regionsElement = document.querySelector('.regions');
   Element codeElement = document.querySelector('.code');
 
   _PermissiveNodeValidator.setInnerHtml(regionsElement, data.regions);
   _PermissiveNodeValidator.setInnerHtml(codeElement, data.navigationContent);
-  populateProposedEdits(path, data.edits);
+  populateProposedEdits(path, data.edits, clearEditDetails);
 
   highlightAllCode();
-  addClickHandlers('.code');
-  addClickHandlers('.regions');
+  addClickHandlers('.code', true);
+  addClickHandlers('.regions', true);
 }
 
 void writeNavigationSubtree(
@@ -564,7 +533,7 @@
       a.dataset['name'] = entity.path;
       a.setAttribute('href', entity.href);
       a.append(Text(entity.name));
-      a.onClick.listen(handleNavLinkClick);
+      a.onClick.listen((MouseEvent event) => handleNavLinkClick(event, true));
       int editCount = entity.editCount;
       if (editCount > 0) {
         Element editsBadge = li.append(document.createElement('span'));
@@ -590,6 +559,70 @@
   return a;
 }
 
+void _populateEditLinks(EditDetails response, Element editPanel) {
+  if (response.edits != null) {
+    for (var edit in response.edits) {
+      Element editParagraph = editPanel.append(document.createElement('p'));
+      Element a = editParagraph.append(document.createElement('a'));
+      a.append(Text(edit.description));
+      a.setAttribute('href', edit.href);
+      a.classes = ['post-link', 'before-apply'];
+    }
+  }
+}
+
+void _populateEditRationale(
+    EditDetails response, Element editPanel, String parentDirectory) {
+  int detailCount = response.details.length;
+  if (detailCount == 0) {
+    // Having 0 details is not necessarily an expected possibility, but handling
+    // the possibility prevents awkward text, "for 0 reasons:".
+  } else {
+    editPanel
+        .append(ParagraphElement()..text = 'Edit rationale (experimental):');
+
+    Element detailList = editPanel.append(document.createElement('ul'));
+    for (var detail in response.details) {
+      var detailItem = detailList.append(document.createElement('li'));
+      detailItem.append(Text(detail.description));
+      var link = detail.link;
+      if (link != null) {
+        detailItem.append(Text(' ('));
+        detailItem.append(_aElementForLink(link, parentDirectory));
+        detailItem.append(Text(')'));
+      }
+    }
+  }
+}
+
+void _populateEditTraces(
+    EditDetails response, Element editPanel, String parentDirectory) {
+  for (var trace in response.traces) {
+    var traceParagraph =
+        editPanel.append(document.createElement('p')..classes = ['trace']);
+    traceParagraph.append(document.createElement('span')
+      ..classes = ['type-description']
+      ..append(Text(trace.description)));
+    traceParagraph.append(Text(':'));
+    var ul = traceParagraph
+        .append(document.createElement('ul')..classes = ['trace']);
+    for (var entry in trace.entries) {
+      var li = ul.append(document.createElement('li')..innerHtml = '&#x274F; ');
+      li.append(document.createElement('span')
+        ..classes = ['function']
+        ..append(Text(entry.function ?? 'unknown')));
+      var link = entry.link;
+      if (link != null) {
+        li.append(Text(' ('));
+        li.append(_aElementForLink(link, parentDirectory));
+        li.append(Text(')'));
+      }
+      li.append(Text(': '));
+      li.append(Text(entry.description));
+    }
+  }
+}
+
 class _PermissiveNodeValidator implements NodeValidator {
   static _PermissiveNodeValidator instance = _PermissiveNodeValidator();
 
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/extension_member_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/extension_member_contributor.dart
index 98ce643..edb8e87 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/extension_member_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/extension_member_contributor.dart
@@ -4,6 +4,8 @@
 
 import 'dart:async';
 
+import 'package:analysis_server/src/protocol_server.dart'
+    show CompletionSuggestion;
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
 import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:analyzer/dart/ast/ast.dart';
@@ -16,10 +18,8 @@
     show GenericInferrer, LibraryScope;
 import 'package:analyzer/src/generated/type_system.dart' show GenericInferrer;
 
-import '../../../protocol_server.dart' show CompletionSuggestion;
-
-/// A contributor for calculating suggestions based on the members of
-/// extensions.
+/// A contributor that produces suggestions based on the members of an
+/// extension.
 class ExtensionMemberContributor extends DartCompletionContributor {
   MemberSuggestionBuilder builder;
 
@@ -27,15 +27,15 @@
   Future<List<CompletionSuggestion>> computeSuggestions(
       DartCompletionRequest request) async {
     LibraryElement containingLibrary = request.libraryElement;
-    // Gracefully degrade if the library element is not resolved
-    // e.g. detached part file or source change
+    // Gracefully degrade if the library could not be determined, such as with a
+    // detached part file or source change.
     if (containingLibrary == null) {
       return const <CompletionSuggestion>[];
     }
 
-    builder = MemberSuggestionBuilder(containingLibrary);
+    builder = MemberSuggestionBuilder(request);
 
-    // Recompute the target since resolution may have changed it.
+    // Recompute the target because resolution might have changed it.
     Expression expression = request.dotTarget;
 
     if (expression == null) {
@@ -48,12 +48,18 @@
         var extension = request.target.containingNode
             .thisOrAncestorOfType<ExtensionDeclaration>();
         if (extension != null) {
-          var type = extension.extendedType.type;
-          if (type is InterfaceType) {
+          var extendedType = extension.extendedType.type;
+          if (extendedType is InterfaceType) {
             var types = <InterfaceType>[];
-            ClassElementImpl.collectAllSupertypes(types, type, null);
+            ClassElementImpl.collectAllSupertypes(types, extendedType, null);
             for (var type in types) {
-              _addTypeMembers(type);
+              double inheritanceDistance;
+              if (request.useNewRelevance) {
+                inheritanceDistance = builder.request.featureComputer
+                    .inheritanceDistanceFeature(
+                        extendedType.element, type.element);
+              }
+              _addTypeMembers(type, inheritanceDistance);
             }
           }
         }
@@ -68,28 +74,27 @@
     if (expression is Identifier) {
       Element elem = expression.staticElement;
       if (elem is ClassElement) {
-        // Suggestions provided by StaticMemberContributor
+        // Suggestions provided by StaticMemberContributor.
         return const <CompletionSuggestion>[];
       } else if (elem is ExtensionElement) {
-        // Suggestions provided by StaticMemberContributor
+        // Suggestions provided by StaticMemberContributor.
         return const <CompletionSuggestion>[];
       } else if (elem is PrefixElement) {
-        // Suggestions provided by LibraryMemberContributor
+        // Suggestions provided by LibraryMemberContributor.
         return const <CompletionSuggestion>[];
       }
     }
     if (expression is ExtensionOverride) {
-      _addInstanceMembers(expression.staticElement);
+      _addInstanceMembers(expression.staticElement, -1.0);
     } else {
       var type = expression.staticType;
       if (type == null) {
-        // Without a type we cannot find the extensions that apply.
-        // We shouldn't get to this point, but there's an NPE if we invoke
+        // Without a type we can't find the extensions that apply. We shouldn't
+        // get to this point, but there's an NPE if we invoke
         // `_resolveExtendedType` when `type` is `null`, so we guard against it
         // to ensure that we can return the suggestions from other providers.
         return const <CompletionSuggestion>[];
       }
-
       _addExtensionMembers(containingLibrary, type);
       expression.staticType;
     }
@@ -103,42 +108,42 @@
       var extendedType =
           _resolveExtendedType(containingLibrary, extension, type);
       if (extendedType != null && typeSystem.isSubtypeOf(type, extendedType)) {
+        double inheritanceDistance;
+        if (builder.request.useNewRelevance) {
+          inheritanceDistance = builder.request.featureComputer
+              .inheritanceDistanceFeature(type.element, extendedType.element);
+        }
         // TODO(brianwilkerson) We might want to apply the substitution to the
         //  members of the extension for display purposes.
-        _addInstanceMembers(extension);
+        _addInstanceMembers(extension, inheritanceDistance);
       }
     }
   }
 
-  void _addInstanceMembers(ExtensionElement extension) {
-    for (MethodElement method in extension.methods) {
+  void _addInstanceMembers(
+      ExtensionElement extension, double inheritanceDistance) {
+    for (var method in extension.methods) {
       if (!method.isStatic) {
-        builder.addSuggestion(method);
+        builder.addSuggestionForMethod(
+            method: method, inheritanceDistance: inheritanceDistance);
       }
     }
-    for (PropertyAccessorElement accessor in extension.accessors) {
+    for (var accessor in extension.accessors) {
       if (!accessor.isStatic) {
-        builder.addSuggestion(accessor);
+        builder.addSuggestionForAccessor(
+            accessor: accessor, inheritanceDistance: inheritanceDistance);
       }
     }
   }
 
-  void _addTypeMembers(InterfaceType type) {
-    for (var elem in type.methods) {
-      builder.addSuggestion(elem);
+  void _addTypeMembers(InterfaceType type, double inheritanceDistance) {
+    for (var method in type.methods) {
+      builder.addSuggestionForMethod(
+          method: method, inheritanceDistance: inheritanceDistance);
     }
-    var variables = <Element>{};
-    for (var elem in type.accessors) {
-      if (elem.isSynthetic) {
-        var variable = elem.variable;
-        // Ensure we don't have duplicate suggestions for accessors of non-final
-        // fields (which have a getter and setter).
-        if (variables.add(variable)) {
-          builder.addSuggestion(elem.variable);
-        }
-      } else {
-        builder.addSuggestion(elem);
-      }
+    for (var accessor in type.accessors) {
+      builder.addSuggestionForAccessor(
+          accessor: accessor, inheritanceDistance: inheritanceDistance);
     }
   }
 
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart b/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart
index 93f984f..d4f91c3 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/feature_computer.dart
@@ -7,7 +7,7 @@
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
 import 'package:analyzer/dart/element/element.dart'
-    show ClassElement, FieldElement;
+    show ClassElement, Element, FieldElement;
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/dart/element/type_provider.dart';
 import 'package:analyzer/dart/element/type_system.dart';
@@ -89,6 +89,11 @@
     }
   }
 
+  /// Return the value of the _has deprecated_ feature for the given [element].
+  double hasDeprecatedFeature(Element element) {
+    return element.hasDeprecated ? 0.0 : 1.0;
+  }
+
   /// Return the inheritance distance between the [subclass] and the
   /// [superclass]. We define the inheritance distance between two types to be
   /// zero if the two types are the same and the minimum number of edges that
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/inherited_reference_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/inherited_reference_contributor.dart
index 0267de3..c632403 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/inherited_reference_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/inherited_reference_contributor.dart
@@ -4,6 +4,8 @@
 
 import 'dart:async';
 
+import 'package:analysis_server/src/protocol_server.dart'
+    show CompletionSuggestion, CompletionSuggestionKind;
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
 import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:analysis_server/src/services/completion/dart/utilities.dart';
@@ -12,107 +14,117 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer_plugin/src/utilities/completion/completion_target.dart';
-import 'package:analyzer_plugin/src/utilities/completion/optype.dart';
 
-import '../../../protocol_server.dart'
-    show CompletionSuggestion, CompletionSuggestionKind;
+/// A contributor that produces suggestions based on the instance members from
+/// the supertypes of a given type. More concretely, this class produces
+/// suggestions for places where an inherited instance member might be invoked
+/// via an implicit target of `this`.
+class InheritedReferenceContributor extends DartCompletionContributor {
+  /// The builder used to build the suggestions.
+  MemberSuggestionBuilder builder;
 
-/// Return the class containing the target
-/// or `null` if the target is in a static method or field
-/// or not in a class.
-ClassOrMixinDeclaration _enclosingClass(CompletionTarget target) {
-  AstNode node = target.containingNode;
-  while (node != null) {
-    if (node is ClassOrMixinDeclaration) {
-      return node;
-    } else if (node is MethodDeclaration) {
-      if (node.isStatic) {
-        return null;
-      }
-    } else if (node is FieldDeclaration) {
-      if (node.isStatic) {
-        return null;
-      }
-    }
-    node = node.parent;
-  }
-  return null;
-}
-
-/// A contributor for calculating suggestions for inherited references.
-class InheritedReferenceContributor extends DartCompletionContributor
-    with ElementSuggestionBuilder {
-  @override
-  LibraryElement containingLibrary;
-
-  @override
+  /// The kind of suggestion to make.
   CompletionSuggestionKind kind;
 
   @override
   Future<List<CompletionSuggestion>> computeSuggestions(
       DartCompletionRequest request) async {
-    // TODO(brianwilkerson) Determine whether this await is necessary.
-    await null;
     if (!request.includeIdentifiers) {
       return const <CompletionSuggestion>[];
     }
 
-    ClassOrMixinDeclaration classDecl = _enclosingClass(request.target);
-    if (classDecl == null || classDecl.declaredElement == null) {
+    var member = _enclosingMember(request.target);
+    if (member == null) {
       return const <CompletionSuggestion>[];
     }
-    containingLibrary = request.libraryElement;
-    if (classDecl is ClassDeclaration) {
-      return _computeSuggestionsForClass2(classDecl.declaredElement, request);
-    } else if (classDecl is MixinDeclaration) {
-      return _computeSuggestionsForClass2(classDecl.declaredElement, request);
+    var classOrMixin = member.parent;
+    if (classOrMixin is ClassOrMixinDeclaration &&
+        classOrMixin.declaredElement != null) {
+      builder = MemberSuggestionBuilder(request);
+      return _computeSuggestionsForClass(classOrMixin.declaredElement, request);
     }
     return const <CompletionSuggestion>[];
   }
 
   void _addSuggestionsForType(InterfaceType type, DartCompletionRequest request,
+      double inheritanceDistance,
       {bool isFunctionalArgument = false}) {
-    OpType opType = request.opType;
+    var opType = request.opType;
     if (!isFunctionalArgument) {
-      for (PropertyAccessorElement elem in type.accessors) {
-        if (elem.isGetter) {
+      for (var accessor in type.accessors) {
+        if (accessor.isGetter) {
           if (opType.includeReturnValueSuggestions) {
-            addSuggestion(elem);
+            builder.addSuggestionForAccessor(
+                accessor: accessor, inheritanceDistance: inheritanceDistance);
           }
         } else {
           if (opType.includeVoidReturnSuggestions) {
-            addSuggestion(elem);
+            builder.addSuggestionForAccessor(
+                accessor: accessor, inheritanceDistance: inheritanceDistance);
           }
         }
       }
     }
-    for (MethodElement elem in type.methods) {
-      if (elem.returnType == null) {
-        addSuggestion(elem);
-      } else if (!elem.returnType.isVoid) {
+    for (var method in type.methods) {
+      if (method.returnType == null) {
+        builder.addSuggestionForMethod(
+            method: method,
+            inheritanceDistance: inheritanceDistance,
+            kind: kind);
+      } else if (!method.returnType.isVoid) {
         if (opType.includeReturnValueSuggestions) {
-          addSuggestion(elem);
+          builder.addSuggestionForMethod(
+              method: method,
+              inheritanceDistance: inheritanceDistance,
+              kind: kind);
         }
       } else {
         if (opType.includeVoidReturnSuggestions) {
-          CompletionSuggestion suggestion = addSuggestion(elem);
-          _updateFlutterSuggestions(request, elem, suggestion);
+          var suggestion = builder.addSuggestionForMethod(
+              method: method,
+              inheritanceDistance: inheritanceDistance,
+              kind: kind);
+          _updateFlutterSuggestions(request, method, suggestion);
         }
       }
     }
   }
 
-  List<CompletionSuggestion> _computeSuggestionsForClass2(
+  List<CompletionSuggestion> _computeSuggestionsForClass(
       ClassElement classElement, DartCompletionRequest request) {
-    bool isFunctionalArgument = request.target.isFunctionalArgument();
+    var isFunctionalArgument = request.target.isFunctionalArgument();
     kind = isFunctionalArgument
         ? CompletionSuggestionKind.IDENTIFIER
         : CompletionSuggestionKind.INVOCATION;
-    for (InterfaceType type in classElement.allSupertypes) {
-      _addSuggestionsForType(type, request,
+    for (var type in classElement.allSupertypes) {
+      double inheritanceDistance;
+      if (request.useNewRelevance) {
+        inheritanceDistance = request.featureComputer
+            .inheritanceDistanceFeature(classElement, type.element);
+      }
+      _addSuggestionsForType(type, request, inheritanceDistance,
           isFunctionalArgument: isFunctionalArgument);
     }
-    return suggestions;
+    return builder.suggestions.toList();
+  }
+
+  /// Return the class member containing the target or `null` if the target is
+  /// in a static method or static field or not in a class member.
+  ClassMember _enclosingMember(CompletionTarget target) {
+    AstNode node = target.containingNode;
+    while (node != null) {
+      if (node is MethodDeclaration) {
+        if (!node.isStatic) {
+          return node;
+        }
+      } else if (node is FieldDeclaration) {
+        if (!node.isStatic) {
+          return node;
+        }
+      }
+      node = node.parent;
+    }
+    return null;
   }
 
   void _updateFlutterSuggestions(DartCompletionRequest request, Element element,
@@ -124,7 +136,7 @@
         element.name == 'setState' &&
         Flutter.of(request.result).isExactState(element.enclosingElement)) {
       // Find the line indentation.
-      String indent = getRequestLineIndent(request);
+      var indent = getRequestLineIndent(request);
 
       // Let the user know that we are going to insert a complete statement.
       suggestion.displayText = 'setState(() {});';
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
index d08d787..baff745 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/keyword_contributor.dart
@@ -71,10 +71,10 @@
     if (entity == node.rightParenthesis) {
       _addExpressionKeywords(node);
       Token previous = node.findPrevious(entity as Token);
-      if (previous.isSynthetic) {
+      if (previous != null && previous.isSynthetic) {
         previous = node.findPrevious(previous);
       }
-      if (previous.lexeme == ')') {
+      if (previous != null && previous.lexeme == ')') {
         _addSuggestion(Keyword.ASYNC);
         _addSuggestion2(ASYNC_STAR);
         _addSuggestion2(SYNC_STAR);
@@ -128,14 +128,15 @@
       if (expression is SimpleIdentifier) {
         Token token = expression.token;
         Token previous = node.findPrevious(token);
-        if (previous.isSynthetic) {
+        if (previous != null && previous.isSynthetic) {
           previous = node.findPrevious(previous);
         }
         Token next = token.next;
         if (next.isSynthetic) {
           next = next.next;
         }
-        if (previous.type == TokenType.CLOSE_PAREN &&
+        if (previous != null &&
+            previous.type == TokenType.CLOSE_PAREN &&
             next.type == TokenType.OPEN_CURLY_BRACKET) {
           _addSuggestion(Keyword.ASYNC);
           _addSuggestion2(ASYNC_STAR);
@@ -511,6 +512,11 @@
         }
       }
     }
+    if (entity == node.returnType || entity == node.name) {
+      // If the cursor is at the beginning of the declaration, include the class
+      // body keywords.  See dartbug.com/41039.
+      _addClassBodyKeywords();
+    }
   }
 
   @override
@@ -938,7 +944,9 @@
     if (entity is AstNode) {
       Token token = entity.beginToken;
       Token previousToken = entity.findPrevious(token);
-      return previousToken.isSynthetic && previousToken.type == type;
+      return previousToken != null &&
+          previousToken.isSynthetic &&
+          previousToken.type == type;
     }
     return false;
   }
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/override_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/override_contributor.dart
index 0386f36..5c11d07 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/override_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/override_contributor.dart
@@ -26,8 +26,6 @@
   @override
   Future<List<CompletionSuggestion>> computeSuggestions(
       DartCompletionRequest request) async {
-    // TODO(brianwilkerson) Determine whether this await is necessary.
-    await null;
     SimpleIdentifier targetId = _getTargetId(request.target);
     if (targetId == null) {
       return const <CompletionSuggestion>[];
@@ -109,7 +107,7 @@
         displayTextBuffer.isNotEmpty ? displayTextBuffer.toString() : null;
     CompletionSuggestion suggestion = CompletionSuggestion(
         CompletionSuggestionKind.OVERRIDE,
-        DART_RELEVANCE_HIGH,
+        request.useNewRelevance ? Relevance.override : DART_RELEVANCE_HIGH,
         completion,
         selectionRange.offset - offsetDelta,
         selectionRange.length,
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/static_member_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/static_member_contributor.dart
index f88d1ae7..988a547 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/static_member_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/static_member_contributor.dart
@@ -13,6 +13,7 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/dart/element/visitor.dart';
+import 'package:meta/meta.dart';
 
 /// A contributor that produces suggestions based on the static members of a
 /// given class, enum, or extension. More concretely, this class produces
@@ -107,18 +108,39 @@
       return;
     }
     var relevance = DART_RELEVANCE_DEFAULT;
-    if (request.useNewRelevance) {
+    var useNewRelevance = request.useNewRelevance;
+    if (useNewRelevance) {
       var contextType = request.featureComputer
           .contextTypeFeature(request.contextType, elementType);
-      relevance = toRelevance(contextType, 500);
+      var hasDeprecated = request.featureComputer.hasDeprecatedFeature(element);
+      relevance = _computeRelevance(
+          contextType: contextType, hasDeprecated: hasDeprecated);
     }
-    CompletionSuggestion suggestion =
-        createSuggestion(element, completion: completion, relevance: relevance);
+    CompletionSuggestion suggestion = createSuggestion(element,
+        completion: completion,
+        relevance: relevance,
+        useNewRelevance: useNewRelevance);
     if (suggestion != null) {
       suggestions.add(suggestion);
     }
   }
 
+  /// Compute a relevance value from the given feature scores:
+  /// - [contextType] is higher if the type of the element matches the context
+  ///   type,
+  /// - [hasDeprecated] is higher if the element is not deprecated,
+  /// - [inheritanceDistance] is higher if the element is defined closer to the
+  ///   target type,
+  /// - [startsWithDollar] is higher if the element's name doe _not_ start with
+  ///   a dollar sign, and
+  /// - [superMatches] is higher if the element is being invoked through `super`
+  ///   and the element's name matches the name of the enclosing method.
+  int _computeRelevance(
+      {@required double contextType, @required double hasDeprecated}) {
+    var score = weightedAverage([contextType, hasDeprecated], [1.0, 0.5]);
+    return toRelevance(score, Relevance.member);
+  }
+
   /// Determine whether the [element] is one of the synthetic enum accessors
   /// for which we should generate a suggestion.
   bool _isSpecialEnumField(FieldElement element) {
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart b/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
index d551db7..cda9b55 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/suggestion_builder.dart
@@ -7,21 +7,24 @@
 import 'package:analysis_server/src/protocol_server.dart' as protocol;
 import 'package:analysis_server/src/protocol_server.dart'
     hide Element, ElementKind;
+import 'package:analysis_server/src/protocol_server.dart'
+    show CompletionSuggestion;
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
+import 'package:analysis_server/src/services/completion/dart/feature_computer.dart';
 import 'package:analysis_server/src/services/completion/dart/utilities.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/dart/element/visitor.dart';
 import 'package:analyzer/src/util/comment.dart';
-
-import '../../../protocol_server.dart' show CompletionSuggestion;
+import 'package:meta/meta.dart';
 
 /// Return a suggestion based upon the given element or `null` if a suggestion
 /// is not appropriate for the given element.
 CompletionSuggestion createSuggestion(Element element,
     {String completion,
-    CompletionSuggestionKind kind = CompletionSuggestionKind.INVOCATION,
-    int relevance = DART_RELEVANCE_DEFAULT}) {
+    CompletionSuggestionKind kind,
+    int relevance = DART_RELEVANCE_DEFAULT,
+    bool useNewRelevance = false}) {
   if (element == null) {
     return null;
   }
@@ -30,15 +33,13 @@
     return null;
   }
   completion ??= element.displayName;
+  kind ??= CompletionSuggestionKind.INVOCATION;
   bool isDeprecated = element.hasDeprecated;
+  if (!useNewRelevance && isDeprecated) {
+    relevance = DART_RELEVANCE_LOW;
+  }
   CompletionSuggestion suggestion = CompletionSuggestion(
-      kind,
-      isDeprecated ? DART_RELEVANCE_LOW : relevance,
-      completion,
-      completion.length,
-      0,
-      isDeprecated,
-      false);
+      kind, relevance, completion, completion.length, 0, isDeprecated, false);
 
   // Attach docs.
   String doc = getDartDocPlainText(element.documentationComment);
@@ -100,6 +101,7 @@
   CompletionSuggestion addSuggestion(Element element,
       {String prefix,
       int relevance = DART_RELEVANCE_DEFAULT,
+      bool useNewRelevance = false,
       String elementCompletion}) {
     if (element.isPrivate) {
       if (element.library != containingLibrary) {
@@ -118,7 +120,10 @@
       return null;
     }
     CompletionSuggestion suggestion = createSuggestion(element,
-        completion: completion, kind: kind, relevance: relevance);
+        completion: completion,
+        kind: kind,
+        relevance: relevance,
+        useNewRelevance: useNewRelevance);
     if (suggestion != null) {
       if (element.isSynthetic && element is PropertyAccessorElement) {
         String cacheKey;
@@ -253,8 +258,8 @@
   /// field, a method, or a getter/setter pair.
   static const int _COMPLETION_TYPE_FIELD_OR_METHOD_OR_GETSET = 3;
 
-  /// The library containing the unit in which the completion is requested.
-  final LibraryElement containingLibrary;
+  /// The request for which suggestions are being built.
+  final DartCompletionRequest request;
 
   /// Map indicating, for each possible completion identifier, whether we have
   /// already generated completions for a getter, setter, or both.  The "both"
@@ -265,11 +270,11 @@
   /// compared.
   final Map<String, int> _completionTypesGenerated = HashMap<String, int>();
 
-  /// Map from completion identifier to completion suggestion
+  /// A map from a completion identifier to a completion suggestion.
   final Map<String, CompletionSuggestion> _suggestionMap =
       <String, CompletionSuggestion>{};
 
-  MemberSuggestionBuilder(this.containingLibrary);
+  MemberSuggestionBuilder(this.request);
 
   Iterable<CompletionSuggestion> get suggestions => _suggestionMap.values;
 
@@ -278,37 +283,147 @@
     _suggestionMap[suggestion.completion] = suggestion;
   }
 
-  /// Add a suggestion based upon the given element, provided that it is not
-  /// shadowed by a previously added suggestion.
-  void addSuggestion(Element element,
-      {int relevance, bool useNewRelevance = false}) {
-    if (element.isPrivate) {
-      if (element.library != containingLibrary) {
-        // Do not suggest private members for imported libraries
-        return;
+  /// Add a suggestion for the given [method].
+  CompletionSuggestion addSuggestionForAccessor(
+      {@required PropertyAccessorElement accessor,
+      String containingMethodName,
+      @required double inheritanceDistance}) {
+    int oldRelevance() {
+      if (accessor.hasDeprecated) {
+        return DART_RELEVANCE_LOW;
       }
-    }
-    String identifier = element.displayName;
-
-    if (useNewRelevance) {
-      assert(relevance != null);
-    } else {
-      relevance ??= DART_RELEVANCE_DEFAULT;
-      if (relevance == DART_RELEVANCE_DEFAULT && identifier != null) {
+      String identifier = accessor.displayName;
+      if (identifier != null && identifier.startsWith(r'$')) {
         // Decrease relevance of suggestions starting with $
         // https://github.com/dart-lang/sdk/issues/27303
-        if (identifier.startsWith(r'$')) {
-          relevance = DART_RELEVANCE_LOW;
-        }
+        return DART_RELEVANCE_LOW;
       }
+      return DART_RELEVANCE_DEFAULT;
     }
 
+    if (!accessor.isAccessibleIn(request.libraryElement)) {
+      // Don't suggest private members from imported libraries.
+      return null;
+    }
+    if (accessor.isSynthetic) {
+      // Avoid visiting a field twice. All fields induce a getter, but only
+      // non-final fields induce a setter, so we don't add a suggestion for a
+      // synthetic setter.
+      if (accessor.isGetter) {
+        var variable = accessor.variable;
+        int relevance;
+        var useNewRelevance = request.useNewRelevance;
+        if (useNewRelevance) {
+          var featureComputer = request.featureComputer;
+          var contextType = featureComputer.contextTypeFeature(
+              request.contextType, variable.type);
+          var hasDeprecated = featureComputer.hasDeprecatedFeature(accessor);
+          var startsWithDollar =
+              featureComputer.startsWithDollarFeature(accessor.name);
+          var superMatches = featureComputer.superMatchesFeature(
+              containingMethodName, accessor.name);
+          relevance = _computeRelevance(
+              contextType: contextType,
+              hasDeprecated: hasDeprecated,
+              inheritanceDistance: inheritanceDistance,
+              startsWithDollar: startsWithDollar,
+              superMatches: superMatches);
+        } else {
+          relevance = oldRelevance();
+        }
+        return _addSuggestion(variable, relevance, useNewRelevance);
+      }
+    } else {
+      var type =
+          accessor.isGetter ? accessor.returnType : accessor.parameters[0].type;
+      int relevance;
+      var useNewRelevance = request.useNewRelevance;
+      if (useNewRelevance) {
+        var featureComputer = request.featureComputer;
+        var contextType =
+            featureComputer.contextTypeFeature(request.contextType, type);
+        var hasDeprecated = featureComputer.hasDeprecatedFeature(accessor);
+        var startsWithDollar =
+            featureComputer.startsWithDollarFeature(accessor.name);
+        var superMatches = featureComputer.superMatchesFeature(
+            containingMethodName, accessor.name);
+        relevance = _computeRelevance(
+            contextType: contextType,
+            hasDeprecated: hasDeprecated,
+            inheritanceDistance: inheritanceDistance,
+            startsWithDollar: startsWithDollar,
+            superMatches: superMatches);
+      } else {
+        relevance = oldRelevance();
+      }
+      return _addSuggestion(accessor, relevance, useNewRelevance);
+    }
+    return null;
+  }
+
+  /// Add a suggestion for the given [method].
+  CompletionSuggestion addSuggestionForMethod(
+      {@required MethodElement method,
+      String containingMethodName,
+      CompletionSuggestionKind kind,
+      @required double inheritanceDistance}) {
+    int oldRelevance() {
+      if (method.hasDeprecated) {
+        return DART_RELEVANCE_LOW;
+      } else if (method.name == containingMethodName) {
+        // Boost the relevance of a super expression calling a method of the
+        // same name as the containing method.
+        return DART_RELEVANCE_HIGH;
+      }
+      String identifier = method.displayName;
+      if (identifier != null && identifier.startsWith(r'$')) {
+        // Decrease relevance of suggestions starting with $
+        // https://github.com/dart-lang/sdk/issues/27303
+        return DART_RELEVANCE_LOW;
+      }
+      return DART_RELEVANCE_DEFAULT;
+    }
+
+    if (!method.isAccessibleIn(request.libraryElement)) {
+      // Don't suggest private members from imported libraries.
+      return null;
+    }
+    int relevance;
+    var useNewRelevance = request.useNewRelevance;
+    if (useNewRelevance) {
+      var featureComputer = request.featureComputer;
+      var contextType = featureComputer.contextTypeFeature(
+          request.contextType, method.returnType);
+      var hasDeprecated = featureComputer.hasDeprecatedFeature(method);
+      var startsWithDollar =
+          featureComputer.startsWithDollarFeature(method.name);
+      var superMatches = featureComputer.superMatchesFeature(
+          containingMethodName, method.name);
+      relevance = _computeRelevance(
+          contextType: contextType,
+          hasDeprecated: hasDeprecated,
+          inheritanceDistance: inheritanceDistance,
+          startsWithDollar: startsWithDollar,
+          superMatches: superMatches);
+    } else {
+      relevance = oldRelevance();
+    }
+    return _addSuggestion(method, relevance, useNewRelevance, kind: kind);
+  }
+
+  /// Add a suggestion for the given [element] with the given [relevance],
+  /// provided that it is not shadowed by a previously added suggestion.
+  CompletionSuggestion _addSuggestion(
+      Element element, int relevance, bool useNewRelevance,
+      {CompletionSuggestionKind kind}) {
+    String identifier = element.displayName;
+
     int alreadyGenerated = _completionTypesGenerated.putIfAbsent(
         identifier, () => _COMPLETION_TYPE_NONE);
     if (element is MethodElement) {
       // Anything shadows a method.
       if (alreadyGenerated != _COMPLETION_TYPE_NONE) {
-        return;
+        return null;
       }
       _completionTypesGenerated[identifier] =
           _COMPLETION_TYPE_FIELD_OR_METHOD_OR_GETSET;
@@ -316,13 +431,13 @@
       if (element.isGetter) {
         // Getters, fields, and methods shadow a getter.
         if ((alreadyGenerated & _COMPLETION_TYPE_GETTER) != 0) {
-          return;
+          return null;
         }
         _completionTypesGenerated[identifier] |= _COMPLETION_TYPE_GETTER;
       } else {
         // Setters, fields, and methods shadow a setter.
         if ((alreadyGenerated & _COMPLETION_TYPE_SETTER) != 0) {
-          return;
+          return null;
         }
         _completionTypesGenerated[identifier] |= _COMPLETION_TYPE_SETTER;
       }
@@ -330,19 +445,52 @@
       // Fields and methods shadow a field.  A getter/setter pair shadows a
       // field, but a getter or setter by itself doesn't.
       if (alreadyGenerated == _COMPLETION_TYPE_FIELD_OR_METHOD_OR_GETSET) {
-        return;
+        return null;
       }
       _completionTypesGenerated[identifier] =
           _COMPLETION_TYPE_FIELD_OR_METHOD_OR_GETSET;
     } else {
       // Unexpected element type; skip it.
       assert(false);
-      return;
+      return null;
     }
-    CompletionSuggestion suggestion =
-        createSuggestion(element, relevance: relevance);
+    CompletionSuggestion suggestion = createSuggestion(element,
+        kind: kind, relevance: relevance, useNewRelevance: useNewRelevance);
     if (suggestion != null) {
       addCompletionSuggestion(suggestion);
     }
+    return suggestion;
+  }
+
+  /// Compute a relevance value from the given feature scores:
+  /// - [contextType] is higher if the type of the element matches the context
+  ///   type,
+  /// - [hasDeprecated] is higher if the element is not deprecated,
+  /// - [inheritanceDistance] is higher if the element is defined closer to the
+  ///   target type,
+  /// - [startsWithDollar] is higher if the element's name doe _not_ start with
+  ///   a dollar sign, and
+  /// - [superMatches] is higher if the element is being invoked through `super`
+  ///   and the element's name matches the name of the enclosing method.
+  int _computeRelevance(
+      {@required double contextType,
+      @required double hasDeprecated,
+      @required double inheritanceDistance,
+      @required double startsWithDollar,
+      @required double superMatches}) {
+    var score = weightedAverage([
+      contextType,
+      hasDeprecated,
+      inheritanceDistance,
+      startsWithDollar,
+      superMatches
+    ], [
+      1.0,
+      0.5,
+      1.0,
+      0.5,
+      1.0
+    ]);
+    return toRelevance(score, Relevance.member);
   }
 }
diff --git a/pkg/analysis_server/lib/src/services/completion/dart/type_member_contributor.dart b/pkg/analysis_server/lib/src/services/completion/dart/type_member_contributor.dart
index 096051b..f65db45 100644
--- a/pkg/analysis_server/lib/src/services/completion/dart/type_member_contributor.dart
+++ b/pkg/analysis_server/lib/src/services/completion/dart/type_member_contributor.dart
@@ -8,14 +8,12 @@
 import 'package:analysis_server/src/protocol_server.dart'
     show CompletionSuggestion, CompletionSuggestionKind;
 import 'package:analysis_server/src/provisional/completion/dart/completion_dart.dart';
-import 'package:analysis_server/src/services/completion/dart/feature_computer.dart';
 import 'package:analysis_server/src/services/completion/dart/suggestion_builder.dart';
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer_plugin/protocol/protocol_common.dart' as protocol;
 import 'package:analyzer_plugin/src/utilities/visitors/local_declaration_visitor.dart';
-import 'package:meta/meta.dart';
 
 /// A contributor that produces suggestions based on the instance members of a
 /// given type, whether declared by that type directly or inherited from a
@@ -27,13 +25,13 @@
   Future<List<CompletionSuggestion>> computeSuggestions(
       DartCompletionRequest request) async {
     LibraryElement containingLibrary = request.libraryElement;
-    // Gracefully degrade if the library element is not resolved
-    // e.g. detached part file or source change
+    // Gracefully degrade if the library could not be determined, such as with a
+    // detached part file or source change.
     if (containingLibrary == null) {
       return const <CompletionSuggestion>[];
     }
 
-    // Recompute the target since resolution may have changed it
+    // Recompute the target because resolution might have changed it.
     Expression expression = request.dotTarget;
     if (expression == null ||
         expression.isSynthetic ||
@@ -43,20 +41,20 @@
     if (expression is Identifier) {
       Element elem = expression.staticElement;
       if (elem is ClassElement) {
-        // Suggestions provided by StaticMemberContributor
+        // Suggestions provided by StaticMemberContributor.
         return const <CompletionSuggestion>[];
       }
       if (elem is PrefixElement) {
-        // Suggestions provided by LibraryMemberContributor
+        // Suggestions provided by LibraryMemberContributor.
         return const <CompletionSuggestion>[];
       }
     }
 
-    // Determine the target expression's type
+    // Determine the target expression's type.
     DartType type = expression.staticType;
     if (type == null || type.isDynamic) {
-      // If the expression does not provide a good type
-      // then attempt to get a better type from the element
+      // If the expression does not provide a good type, then attempt to get a
+      // better type from the element.
       if (expression is Identifier) {
         Element elem = expression.staticElement;
         if (elem is FunctionTypedElement) {
@@ -68,8 +66,8 @@
         }
         if ((type == null || type.isDynamic) &&
             expression is SimpleIdentifier) {
-          // If the element does not provide a good type
-          // then attempt to get a better type from a local declaration
+          // If the element does not provide a good type, then attempt to get a
+          // better type from a local declaration.
           _LocalBestTypeVisitor visitor =
               _LocalBestTypeVisitor(expression.name, request.offset);
           if (visitor.visit(expression) && visitor.typeFound != null) {
@@ -82,12 +80,12 @@
     List<InterfaceType> mixins;
     List<InterfaceType> superclassConstraints;
     if (expression is SuperExpression && type is InterfaceType) {
-      // Suggest members from superclass if target is "super"
+      // Suggest members from superclass if target is "super".
       mixins = (type as InterfaceType).mixins;
       superclassConstraints = (type as InterfaceType).superclassConstraints;
       type = (type as InterfaceType).superclass;
-      // Determine the name of the containing method because
-      // the most likely completion is a super expression with same name
+      // Determine the name of the containing method because the most likely
+      // completion is a super expression with same name.
       MethodDeclaration containingMethod =
           expression.thisOrAncestorOfType<MethodDeclaration>();
       if (containingMethod != null) {
@@ -98,11 +96,11 @@
       }
     }
     if (type == null || type.isDynamic) {
-      // Suggest members from object if target is "dynamic"
+      // Suggest members from object if target is "dynamic".
       type = request.objectType;
     }
 
-    // Build the suggestions
+    // Build the suggestions.
     if (type is InterfaceType) {
       _SuggestionBuilder builder = _SuggestionBuilder(request);
       builder.buildSuggestions(type, containingMethodName,
@@ -110,24 +108,25 @@
       return builder.suggestions.toList();
     }
     if (type is FunctionType) {
-      return [_SuggestionBuilder._createFunctionCallSuggestion()];
+      _SuggestionBuilder builder = _SuggestionBuilder(request);
+      return [builder._createFunctionCallSuggestion()];
     }
 
     return const <CompletionSuggestion>[];
   }
 }
 
-/// An [AstVisitor] which looks for a declaration with the given name
-/// and if found, tries to determine a type for that declaration.
+/// An [AstVisitor] which looks for a declaration with the given name and if
+/// found, tries to determine a type for that declaration.
 class _LocalBestTypeVisitor extends LocalDeclarationVisitor {
   /// The name for the declaration to be found.
   final String targetName;
 
-  /// The best type for the found declaration,
-  /// or `null` if no declaration found or failed to determine a type.
+  /// The best type for the found declaration, or `null` if no declaration found
+  /// or failed to determine a type.
   DartType typeFound;
 
-  /// Construct a new instance to search for a declaration
+  /// Construct a new instance to search for a declaration.
   _LocalBestTypeVisitor(this.targetName, int offset) : super(offset);
 
   @override
@@ -221,7 +220,7 @@
   @override
   void declaredParam(SimpleIdentifier name, TypeAnnotation type) {
     if (name.name == targetName) {
-      // Type provided by the element in computeFull above
+      // Type provided by the element in computeFull above.
       finished();
     }
   }
@@ -230,7 +229,7 @@
   void declaredTopLevelVar(
       VariableDeclarationList varList, VariableDeclaration varDecl) {
     if (varDecl.name.name == targetName) {
-      // Type provided by the element in computeFull above
+      // Type provided by the element in computeFull above.
       finished();
     }
   }
@@ -239,9 +238,8 @@
 /// This class provides suggestions based upon the visible instance members in
 /// an interface type.
 class _SuggestionBuilder extends MemberSuggestionBuilder {
-  final DartCompletionRequest request;
-
-  _SuggestionBuilder(this.request) : super(request.libraryElement);
+  /// Initialize a newly created suggestion builder.
+  _SuggestionBuilder(DartCompletionRequest request) : super(request);
 
   /// Return completion suggestions for 'dot' completions on the given [type].
   /// If the 'dot' completion is a super expression, then [containingMethodName]
@@ -259,78 +257,27 @@
     if (superclassConstraints != null) {
       types.addAll(superclassConstraints);
     }
-    var featureComputer = request.featureComputer;
-    for (InterfaceType targetType in types) {
-      var inheritanceDistance = featureComputer.inheritanceDistanceFeature(
-          type.element, targetType.element);
-      for (MethodElement method in targetType.methods) {
-        // Exclude static methods when completion on an instance
+    for (var targetType in types) {
+      double inheritanceDistance;
+      if (request.useNewRelevance) {
+        inheritanceDistance = request.featureComputer
+            .inheritanceDistanceFeature(type.element, targetType.element);
+      }
+      for (var method in targetType.methods) {
+        // Exclude static methods when completion on an instance.
         if (!method.isStatic) {
-          // Boost the relevance of a super expression
-          // calling a method of the same name as the containing method
-          int relevance;
-          if (request.useNewRelevance) {
-            var contextType = featureComputer.contextTypeFeature(
-                request.contextType, method.returnType);
-            var startsWithDollar =
-                featureComputer.startsWithDollarFeature(method.name);
-            var superMatches = featureComputer.superMatchesFeature(
-                containingMethodName, method.name);
-            relevance = _computeRelevance(
-                contextType: contextType,
-                inheritanceDistance: inheritanceDistance,
-                startsWithDollar: startsWithDollar,
-                superMatches: superMatches);
-          } else {
-            relevance = method.name == containingMethodName
-                ? DART_RELEVANCE_HIGH
-                : DART_RELEVANCE_DEFAULT;
-          }
-          addSuggestion(method, relevance: relevance);
+          addSuggestionForMethod(
+              method: method,
+              containingMethodName: containingMethodName,
+              inheritanceDistance: inheritanceDistance);
         }
       }
-      for (PropertyAccessorElement propertyAccessor in targetType.accessors) {
-        if (!propertyAccessor.isStatic) {
-          if (propertyAccessor.isSynthetic) {
-            // Avoid visiting a field twice
-            if (propertyAccessor.isGetter) {
-              var variable = propertyAccessor.variable;
-              int relevance;
-              if (request.useNewRelevance) {
-                var contextType = featureComputer.contextTypeFeature(
-                    request.contextType, variable.type);
-                var startsWithDollar = featureComputer
-                    .startsWithDollarFeature(propertyAccessor.name);
-                var superMatches = featureComputer.superMatchesFeature(
-                    containingMethodName, propertyAccessor.name);
-                relevance = _computeRelevance(
-                    contextType: contextType,
-                    inheritanceDistance: inheritanceDistance,
-                    startsWithDollar: startsWithDollar,
-                    superMatches: superMatches);
-              }
-              addSuggestion(variable, relevance: relevance);
-            }
-          } else {
-            var type = propertyAccessor.isGetter
-                ? propertyAccessor.returnType
-                : propertyAccessor.parameters[0].type;
-            int relevance;
-            if (request.useNewRelevance) {
-              var contextType =
-                  featureComputer.contextTypeFeature(request.contextType, type);
-              var startsWithDollar = featureComputer
-                  .startsWithDollarFeature(propertyAccessor.name);
-              var superMatches = featureComputer.superMatchesFeature(
-                  containingMethodName, propertyAccessor.name);
-              relevance = _computeRelevance(
-                  contextType: contextType,
-                  inheritanceDistance: inheritanceDistance,
-                  startsWithDollar: startsWithDollar,
-                  superMatches: superMatches);
-            }
-            addSuggestion(propertyAccessor, relevance: relevance);
-          }
+      for (var accessor in targetType.accessors) {
+        if (!accessor.isStatic) {
+          addSuggestionForAccessor(
+              accessor: accessor,
+              containingMethodName: containingMethodName,
+              inheritanceDistance: inheritanceDistance);
         }
       }
       if (targetType.isDartCoreFunction) {
@@ -339,24 +286,26 @@
     }
   }
 
-  /// Compute a relevance value from the given feature scores:
-  /// - [contextType] is higher if the type of the element matches the context
-  ///   type,
-  /// - [inheritanceDistance] is higher if the element is defined closer to the
-  ///   target type,
-  /// - [startsWithDollar] is higher if the element's name doe _not_ start with
-  ///   a dollar sign, and
-  /// - [superMatches] is higher if the element is being invoked through `super`
-  ///   and the element's name matches the name of the enclosing method.
-  int _computeRelevance(
-      {@required double contextType,
-      @required double inheritanceDistance,
-      @required double startsWithDollar,
-      @required double superMatches}) {
-    var score = weightedAverage(
-        [contextType, inheritanceDistance, startsWithDollar, superMatches],
-        [1.0, 1.0, 0.5, 1.0]);
-    return toRelevance(score, 500);
+  CompletionSuggestion _createFunctionCallSuggestion() {
+    const callString = 'call()';
+    final element = protocol.Element(
+        protocol.ElementKind.METHOD, callString, protocol.Element.makeFlags(),
+        location: null,
+        typeParameters: null,
+        parameters: null,
+        returnType: 'void');
+    return CompletionSuggestion(
+      CompletionSuggestionKind.INVOCATION,
+      request.useNewRelevance ? Relevance.callFunction : DART_RELEVANCE_HIGH,
+      callString,
+      callString.length,
+      0,
+      false,
+      false,
+      displayText: callString,
+      element: element,
+      returnType: 'void',
+    );
   }
 
   /// Get a list of [InterfaceType]s that should be searched to find the
@@ -394,26 +343,4 @@
     }
     return result;
   }
-
-  static CompletionSuggestion _createFunctionCallSuggestion() {
-    const callString = 'call()';
-    final element = protocol.Element(
-        protocol.ElementKind.METHOD, callString, protocol.Element.makeFlags(),
-        location: null,
-        typeParameters: null,
-        parameters: null,
-        returnType: 'void');
-    return CompletionSuggestion(
-      CompletionSuggestionKind.INVOCATION,
-      DART_RELEVANCE_HIGH,
-      callString,
-      callString.length,
-      0,
-      false,
-      false,
-      displayText: callString,
-      element: element,
-      returnType: 'void',
-    );
-  }
 }
diff --git a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
index 785aec6..c4c3ff7 100644
--- a/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/assist_internal.dart
@@ -1985,7 +1985,10 @@
     _SimpleIdentifierRecursiveAstVisitor visitor =
         _SimpleIdentifierRecursiveAstVisitor((SimpleIdentifier node) {
       Element element = node.staticElement;
-      if (element != null && namespace[node.name] == element) {
+      if (element != null &&
+          (namespace[node.name] == element ||
+              (node.name != element.name &&
+                  namespace[element.name] == element))) {
         referencedNames.add(element.displayName);
       }
     });
diff --git a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
index 906e521..cc2d77c 100644
--- a/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
+++ b/pkg/analysis_server/lib/src/services/correction/fix_internal.dart
@@ -706,6 +706,9 @@
         await _addFix_addConst();
         await _addFix_replaceNewWithConst();
       }
+      if (errorCode.name == LintNames.prefer_const_constructors_in_immutables) {
+        await _addFix_addConstToConstructor();
+      }
       if (errorCode.name == LintNames.prefer_if_null_operators) {
         await _addFix_convertToIfNullOperator();
       }
@@ -804,6 +807,23 @@
     }
   }
 
+  Future<void> _addFix_addConstToConstructor() async {
+    var node = coveredNode;
+    if (node is SimpleIdentifier) {
+      node = node.parent;
+    }
+    if (node is ConstructorDeclaration) {
+      final changeBuilder = _newDartChangeBuilder();
+      await changeBuilder.addFileEdit(file, (DartFileEditBuilder builder) {
+        final offset = (node as ConstructorDeclaration)
+            .firstTokenAfterCommentAndMetadata
+            .offset;
+        builder.addSimpleInsertion(offset, 'const ');
+      });
+      _addFixFromBuilder(changeBuilder, DartFixKind.ADD_CONST);
+    }
+  }
+
   Future<void> _addFix_addCurlyBraces() async {
     final changeBuilder = await createBuilder_useCurlyBraces();
     _addFixFromBuilder(changeBuilder, DartFixKind.ADD_CURLY_BRACES);
@@ -3519,7 +3539,10 @@
         if (combinators.length == 1) {
           Token previousToken =
               combinator.parent.findPrevious(combinator.beginToken);
-          return range.endEnd(previousToken, combinator);
+          if (previousToken != null) {
+            return range.endEnd(previousToken, combinator);
+          }
+          return null;
         }
         int index = combinators.indexOf(combinator);
         if (index < 0) {
diff --git a/pkg/analysis_server/lib/src/services/linter/lint_names.dart b/pkg/analysis_server/lib/src/services/linter/lint_names.dart
index 549d182..6a91795 100644
--- a/pkg/analysis_server/lib/src/services/linter/lint_names.dart
+++ b/pkg/analysis_server/lib/src/services/linter/lint_names.dart
@@ -45,6 +45,8 @@
   static const String prefer_conditional_assignment =
       'prefer_conditional_assignment';
   static const String prefer_const_constructors = 'prefer_const_constructors';
+  static const String prefer_const_constructors_in_immutables =
+      'prefer_const_constructors_in_immutables';
   static const String prefer_const_declarations = 'prefer_const_declarations';
   static const String prefer_contains = 'prefer_contains';
   static const String prefer_equal_for_default_values =
diff --git a/pkg/analysis_server/test/client/relevance/test_all.dart b/pkg/analysis_server/test/client/relevance/test_all.dart
deleted file mode 100644
index 26af7cd..0000000
--- a/pkg/analysis_server/test/client/relevance/test_all.dart
+++ /dev/null
@@ -1,13 +0,0 @@
-// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-import 'package:test_reflective_loader/test_reflective_loader.dart';
-
-import 'type_member_relevance_test.dart' as type_member_relevance_test;
-
-void main() {
-  defineReflectiveSuite(() {
-    type_member_relevance_test.main();
-  });
-}
diff --git a/pkg/analysis_server/test/client/test_all.dart b/pkg/analysis_server/test/client/test_all.dart
index 1d2a312..417c4d3 100644
--- a/pkg/analysis_server/test/client/test_all.dart
+++ b/pkg/analysis_server/test/client/test_all.dart
@@ -5,11 +5,9 @@
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
 import 'completion_driver_test.dart' as completion_driver;
-import 'relevance/test_all.dart' as relevance_tests;
 
 void main() {
   defineReflectiveSuite(() {
     completion_driver.main();
-    relevance_tests.main();
   });
 }
diff --git a/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart
index 14b27ab..1827123 100644
--- a/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/keyword_contributor_test.dart
@@ -859,6 +859,27 @@
     assertSuggestKeywords(classBodyKeywords);
   }
 
+  Future<void> test_class_body_return_no_whitespace() async {
+    addTestSource('class A { ^foo() {}}');
+    await computeSuggestions();
+    expect(suggestions, isNotEmpty);
+    assertSuggestKeywords(classBodyKeywords);
+  }
+
+  Future<void> test_class_body_return_prefix() async {
+    addTestSource('class A { d^ foo() {}}');
+    await computeSuggestions();
+    expect(suggestions, isNotEmpty);
+    assertSuggestKeywords(classBodyKeywords);
+  }
+
+  Future<void> test_class_body_return_whitespace() async {
+    addTestSource('class A { ^ foo() {}}');
+    await computeSuggestions();
+    expect(suggestions, isNotEmpty);
+    assertSuggestKeywords(classBodyKeywords);
+  }
+
   Future<void> test_class_extends() async {
     addTestSource('class A extends foo ^');
     await computeSuggestions();
@@ -1891,6 +1912,20 @@
     assertSuggestKeywords(EXPRESSION_START_INSTANCE);
   }
 
+  Future<void> test_method_body_return_with_header() async {
+    addTestSource('class A { @override ^ foo() {}}');
+    await computeSuggestions();
+    expect(suggestions, isNotEmpty);
+    assertSuggestKeywords(classBodyKeywords);
+  }
+
+  Future<void> test_method_body_return_with_header_prefix() async {
+    addTestSource('class A { @override d^ foo() {}}');
+    await computeSuggestions();
+    expect(suggestions, isNotEmpty);
+    assertSuggestKeywords(classBodyKeywords);
+  }
+
   Future<void> test_method_invocation() async {
     addTestSource('class A { foo() {bar.^}}');
     await computeSuggestions();
@@ -1939,7 +1974,7 @@
   }
 
   Future<void> test_method_param_prefix() async {
-    addTestSource('class A { foo(t^) {});}');
+    addTestSource('class A { foo(t^) {}}');
     await computeSuggestions();
     expect(suggestions, isNotEmpty);
     assertSuggestKeywords(methodParameter);
diff --git a/pkg/analysis_server/test/services/completion/dart/relevance/completion_relevance.dart b/pkg/analysis_server/test/services/completion/dart/relevance/completion_relevance.dart
new file mode 100644
index 0000000..79a5bbf
--- /dev/null
+++ b/pkg/analysis_server/test/services/completion/dart/relevance/completion_relevance.dart
@@ -0,0 +1,34 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analysis_server/src/analysis_server.dart';
+import 'package:analyzer_plugin/protocol/protocol_common.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../../../client/completion_driver_test.dart';
+
+@reflectiveTest
+class CompletionRelevanceTest extends AbstractCompletionDriverTest {
+  @override
+  AnalysisServerOptions get serverOptions =>
+      AnalysisServerOptions()..useNewRelevance = true;
+
+  @override
+  bool get supportsAvailableSuggestions => true;
+
+  /// Assert that all of the given completions were produced and that the
+  /// suggestions are ordered in decreasing order based on relevance scores.
+  void assertOrder(List<CompletionSuggestion> suggestions) {
+    var length = suggestions.length;
+    expect(length, greaterThan(1),
+        reason: 'Test must specify more than one suggestion');
+    var previous = suggestions[0];
+    for (int i = 1; i < length; i++) {
+      var current = suggestions[i];
+      expect(current.relevance, lessThan(previous.relevance));
+      previous = current;
+    }
+  }
+}
diff --git a/pkg/analysis_server/test/client/relevance/type_member_relevance_test.dart b/pkg/analysis_server/test/services/completion/dart/relevance/instance_member_relevance_test.dart
similarity index 84%
rename from pkg/analysis_server/test/client/relevance/type_member_relevance_test.dart
rename to pkg/analysis_server/test/services/completion/dart/relevance/instance_member_relevance_test.dart
index 7d1c53e..9558d8d 100644
--- a/pkg/analysis_server/test/client/relevance/type_member_relevance_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/relevance/instance_member_relevance_test.dart
@@ -7,16 +7,16 @@
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
-import '../completion_driver_test.dart';
+import '../../../../client/completion_driver_test.dart';
 
 void main() {
   defineReflectiveSuite(() {
-    defineReflectiveTests(TypeMemberRelevanceTest);
+    defineReflectiveTests(InstanceMemberRelevanceTest);
   });
 }
 
 @reflectiveTest
-class TypeMemberRelevanceTest extends AbstractCompletionDriverTest {
+class InstanceMemberRelevanceTest extends AbstractCompletionDriverTest {
   @override
   AnalysisServerOptions get serverOptions =>
       AnalysisServerOptions()..useNewRelevance = true;
@@ -65,6 +65,24 @@
     ]);
   }
 
+  Future<void> test_hasDeprecated() async {
+    await addTestFile('''
+class C {
+  void a() {}
+  @deprecated
+  void b() {}
+}
+
+void f(C c) {
+  c.^
+}
+''');
+    assertOrder([
+      suggestionWith(completion: 'a'),
+      suggestionWith(completion: 'b'),
+    ]);
+  }
+
   Future<void> test_inheritanceDepth() async {
     await addTestFile('''
 class A {
diff --git a/pkg/analysis_server/test/services/completion/dart/relevance/static_member_relevance_test.dart b/pkg/analysis_server/test/services/completion/dart/relevance/static_member_relevance_test.dart
new file mode 100644
index 0000000..e16d539
--- /dev/null
+++ b/pkg/analysis_server/test/services/completion/dart/relevance/static_member_relevance_test.dart
@@ -0,0 +1,61 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'completion_relevance.dart';
+
+void main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(StaticMemberRelevanceTest);
+  });
+}
+
+@reflectiveTest
+class StaticMemberRelevanceTest extends CompletionRelevanceTest {
+  Future<void> test_contextType() async {
+    await addTestFile(r'''
+class A {}
+class B extends A {}
+class C extends B {}
+class D {}
+
+class E {
+  static A a() {}
+  static B b() {}
+  static C c() {}
+  static D d() {}
+}
+
+void f(B b) {}
+void g() {
+  f(E.^);
+}
+''');
+    assertOrder([
+      suggestionWith(completion: 'b'), // same
+      suggestionWith(completion: 'c'), // subtype
+      suggestionWith(completion: 'd'), // unrelated
+      suggestionWith(completion: 'a'), // supertype
+    ]);
+  }
+
+  Future<void> test_hasDeprecated() async {
+    await addTestFile('''
+class C {
+  static void a() {}
+  @deprecated
+  static void b() {}
+}
+
+void f() {
+  C.^
+}
+''');
+    assertOrder([
+      suggestionWith(completion: 'a'),
+      suggestionWith(completion: 'b'),
+    ]);
+  }
+}
diff --git a/pkg/analysis_server/test/services/completion/dart/relevance/test_all.dart b/pkg/analysis_server/test/services/completion/dart/relevance/test_all.dart
index c0f3240..c0235e1 100644
--- a/pkg/analysis_server/test/services/completion/dart/relevance/test_all.dart
+++ b/pkg/analysis_server/test/services/completion/dart/relevance/test_all.dart
@@ -7,11 +7,15 @@
 import 'arglist_parameter_relevance_test.dart' as arglist_parameters;
 import 'bool_assignment_relevance_test.dart' as bool_assignments;
 import 'deprecated_member_relevance_test.dart' as deprecated_members;
+import 'instance_member_relevance_test.dart' as instance_member_relevance;
+import 'static_member_relevance_test.dart' as static_member_relevance;
 
 void main() {
   defineReflectiveSuite(() {
     arglist_parameters.main();
     bool_assignments.main();
     deprecated_members.main();
+    instance_member_relevance.main();
+    static_member_relevance.main();
   });
 }
diff --git a/pkg/analysis_server/test/services/completion/dart/type_member_contributor_test.dart b/pkg/analysis_server/test/services/completion/dart/type_member_contributor_test.dart
index b75fd7e..7dd7a0d 100644
--- a/pkg/analysis_server/test/services/completion/dart/type_member_contributor_test.dart
+++ b/pkg/analysis_server/test/services/completion/dart/type_member_contributor_test.dart
@@ -2271,12 +2271,7 @@
 ''');
 
     await computeSuggestions();
-    assertSuggest(
-      'call()',
-      selectionOffset: 6,
-      elemKind: ElementKind.METHOD,
-      isSynthetic: true,
-    );
+    assertNotSuggested('call');
   }
 
   Future<void> test_InterfaceType_Function_implemented_call() async {
@@ -2289,12 +2284,7 @@
 ''');
 
     await computeSuggestions();
-    assertSuggest(
-      'call()',
-      selectionOffset: 6,
-      elemKind: ElementKind.METHOD,
-      isSynthetic: true,
-    );
+    assertNotSuggested('call');
   }
 
   Future<void> test_InterpolationExpression() async {
diff --git a/pkg/analysis_server/test/src/edit/nnbd_migration/info_builder_test.dart b/pkg/analysis_server/test/src/edit/nnbd_migration/info_builder_test.dart
index 544d429..af7a168 100644
--- a/pkg/analysis_server/test/src/edit/nnbd_migration/info_builder_test.dart
+++ b/pkg/analysis_server/test/src/edit/nnbd_migration/info_builder_test.dart
@@ -292,6 +292,7 @@
 
   void assertTraceEntry(
       UnitInfo unit, TraceEntryInfo entryInfo, String function, int offset) {
+    assert(offset >= 0);
     var lineInfo = LineInfo.fromContent(unit.content);
     var expectedLocation = lineInfo.getLocation(offset);
     expect(entryInfo.target.filePath, unit.path);
@@ -398,7 +399,7 @@
 }
 ''', migratedContent: '''
 class C<T extends Object?> {
-  C(T/*!*/ t);
+  C(T /*!*/ t);
 }
 
 void main() {
@@ -442,7 +443,7 @@
   f(null);
 }
 ''', migratedContent: '''
-f<T extends Object?>(T/*!*/ t) {}
+f<T extends Object?>(T /*!*/ t) {}
 
 void main() {
   f(null);
@@ -462,15 +463,15 @@
   if (i != null) print('NULL');
 }
 ''', migratedContent: '''
-void g(int i) {
+void g(int  i) {
   print(i.isEven);
   /* if (i != null) */ print('NULL');
 }
 ''');
     List<RegionInfo> regions = unit.fixRegions;
     expect(regions, hasLength(2));
-    assertRegion(region: regions[0], offset: 37, length: 3);
-    assertRegion(region: regions[1], offset: 55, length: 3);
+    assertRegion(region: regions[0], offset: 38, length: 3);
+    assertRegion(region: regions[1], offset: 56, length: 3);
   }
 
   Future<void> test_discardElse() async {
@@ -481,7 +482,7 @@
   else print('NOT NULL');
 }
 ''', migratedContent: '''
-void g(int i) {
+void g(int  i) {
   print(i.isEven);
   /* if (i != null) */ print('NULL'); /*
   else print('NOT NULL'); */
@@ -489,10 +490,10 @@
 ''');
     List<RegionInfo> regions = unit.fixRegions;
     expect(regions, hasLength(4));
-    assertRegion(region: regions[0], offset: 37, length: 3);
-    assertRegion(region: regions[1], offset: 55, length: 3);
-    assertRegion(region: regions[2], offset: 72, length: 3);
-    assertRegion(region: regions[3], offset: 101, length: 3);
+    assertRegion(region: regions[0], offset: 38, length: 3);
+    assertRegion(region: regions[1], offset: 56, length: 3);
+    assertRegion(region: regions[2], offset: 73, length: 3);
+    assertRegion(region: regions[3], offset: 102, length: 3);
   }
 
   Future<void> test_dynamicValueIsUsed() async {
@@ -506,7 +507,7 @@
   f(i);
 }
 ''', migratedContent: '''
-bool f(int? i) {
+bool  f(int? i) {
   if (i == null) return true;
   else return false;
 }
@@ -515,11 +516,11 @@
   f(i);
 }
 ''');
-    List<RegionInfo> regions = unit.regions;
+    List<RegionInfo> regions = unit.fixRegions;
     expect(regions, hasLength(1));
     var region = regions[0];
     var edits = region.edits;
-    assertRegion(region: region, offset: 10, details: [
+    assertRegion(region: region, offset: 11, details: [
       'A dynamic value, which is nullable is passed as an argument'
     ]);
     assertDetail(detail: region.details[0], offset: 104, length: 1);
@@ -537,7 +538,7 @@
   f(<int>[]);
 }
 ''', migratedContent: '''
-void f(List<int?> list) {
+void f(List<int?>  list) {
   list[0] = null;
 }
 
@@ -547,13 +548,13 @@
 ''');
     List<RegionInfo> regions = unit.regions;
     expect(regions, hasLength(3));
-    // regions[0] is the hard edge that f's parameter is non-nullable.
-    assertRegion(region: regions[1], offset: 15, details: [
+    assertRegion(region: regions[0], offset: 15, details: [
       "An explicit 'null' is assigned in the function 'f'",
     ]);
+    // regions[1] is the hard edge that f's parameter is non-nullable.
     assertRegion(
         region: regions[2],
-        offset: 66,
+        offset: 67,
         details: ['This is later required to accept null.']);
   }
 
@@ -729,8 +730,8 @@
 }
 ''', migratedContent: '''
 class C {
-  f(void Function(int)? cb1) {}
-  g(void Function(int) cb2) {
+  f(void Function(int )? cb1) {}
+  g(void Function(int )  cb2) {
     f(cb2);
   }
   h() => f(null);
@@ -740,7 +741,7 @@
     expect(regions, hasLength(1));
     assertRegion(
         region: regions[0],
-        offset: 32,
+        offset: 33,
         details: ["An explicit 'null' is passed as an argument"]);
     assertDetail(detail: regions[0].details[0], offset: 98, length: 4);
   }
@@ -757,10 +758,10 @@
 }
 ''', migratedContent: '''
 class C {
-  f(void Function(int?) cb1) {
+  f(void Function(int?)  cb1) {
     cb1(null);
   }
-  g(void Function(int?) cb2) {
+  g(void Function(int?)  cb2) {
     f(cb2);
   }
 }
@@ -771,7 +772,7 @@
         region: regions[0],
         offset: 31,
         details: ["An explicit 'null' is passed as an argument"]);
-    assertRegion(region: regions[1], offset: 81, details: [
+    assertRegion(region: regions[1], offset: 82, details: [
       'The function-typed element in which this parameter is declared is '
           'assigned to a function whose matching parameter is nullable'
     ]);
@@ -789,8 +790,8 @@
 }
 ''', migratedContent: '''
 class C {
-  void Function(int?) _cb = (x) {};
-  f(void Function(int?) cb) {
+  void Function(int?)  _cb = (x) {};
+  f(void Function(int?)  cb) {
     _cb = cb;
   }
   g() => _cb(null);
@@ -799,7 +800,7 @@
     List<RegionInfo> regions = unit.fixRegions;
     expect(regions, hasLength(2));
     // regions[0] is `void Function(int?) _cb`.
-    assertRegion(region: regions[1], offset: 67, details: [
+    assertRegion(region: regions[1], offset: 68, details: [
       'The function-typed element in which this parameter is declared is '
           'assigned to a function whose matching parameter is nullable'
     ]);
@@ -815,8 +816,8 @@
 }
 ''', migratedContent: '''
 class C {
-  void Function(int?) _cb;
-  C(void Function(int?) cb): _cb = cb;
+  void Function(int?)  _cb;
+  C(void Function(int?)  cb): _cb = cb;
   f() => _cb(null);
 }
 ''');
@@ -826,7 +827,7 @@
         region: regions[0],
         offset: 29,
         details: ["An explicit 'null' is passed as an argument"]);
-    assertRegion(region: regions[1], offset: 58, details: [
+    assertRegion(region: regions[1], offset: 59, details: [
       'The function-typed element in which this parameter is declared is '
           'assigned to a function whose matching parameter is nullable'
     ]);
@@ -873,8 +874,8 @@
 }
 ''', migratedContent: '''
 class C {
-  int? Function() _cb = () => 7;
-  f(int? Function() cb) {
+  int? Function()  _cb = () => 7;
+  f(int? Function()  cb) {
     _cb = cb;
   }
   g() {
@@ -899,8 +900,8 @@
 }
 ''', migratedContent: '''
 class C {
-  int level;
-  int level2;
+  int  level;
+  int  level2;
   C({required this.level}) : this.level2 = level + 1;
 }
 ''');
@@ -908,7 +909,7 @@
     expect(regions, hasLength(1));
     var region = regions[0];
     var edits = region.edits;
-    assertRegion(region: region, offset: 42, length: 9, details: [
+    assertRegion(region: region, offset: 44, length: 9, details: [
       'This parameter is non-nullable, so cannot have an implicit default '
           "value of 'null'"
     ]);
@@ -924,15 +925,15 @@
 }
 ''', migratedContent: '''
 class C {
-  int level = 0;
-  bool f({required int lvl}) => lvl >= level;
+  int  level = 0;
+  bool  f({required int  lvl}) => lvl >= level;
 }
 ''');
     List<RegionInfo> regions = unit.fixRegions;
     expect(regions, hasLength(1));
     var region = regions[0];
     var edits = region.edits;
-    assertRegion(region: region, offset: 37, length: 9, details: [
+    assertRegion(region: region, offset: 39, length: 9, details: [
       'This parameter is non-nullable, so cannot have an implicit default '
           "value of 'null'"
     ]);
@@ -949,9 +950,9 @@
 ''';
     var migratedContent = '''
 class C {
-  C? operator+(C c) => null;
+  C? operator+(C  c) => null;
 }
-C/*!*/ _f(C c) => (c + c)!;
+C /*!*/ _f(C  c) => (c + c)!;
 ''';
     UnitInfo unit = await buildInfoForSingleTestFile(originalContent,
         migratedContent: migratedContent);
@@ -1005,13 +1006,13 @@
 }
 ''', migratedContent: '''
 void f() {
-  List<int?> list = List<int?>(10);
+  List<int?>  list = List<int?>(10);
 }
 ''');
-    List<RegionInfo> regions = unit.regions;
+    List<RegionInfo> regions = unit.fixRegions;
     expect(regions, hasLength(2));
     // regions[0] is `num? a`.
-    assertRegion(region: regions[1], offset: 39, details: [
+    assertRegion(region: regions[1], offset: 40, details: [
       'A length is specified in the "List()" constructor and the list items '
           'are initialized to null'
     ]);
@@ -1099,8 +1100,8 @@
 ''', migratedContent: '''
 void f() {
   String? s = null;
-  var x = <String?, bool>{"hello": false, s: true};
-  var y = <bool, String?>{false: "hello", true: s};
+  var x = <String?, bool >{"hello": false, s: true};
+  var y = <bool , String?>{false: "hello", true: s};
 }
 ''');
     List<RegionInfo> regions = unit.fixRegions;
@@ -1113,7 +1114,7 @@
     assertDetail(detail: regions[1].details[0], offset: 71, length: 1);
     assertRegion(
         region: regions[2],
-        offset: 106,
+        offset: 108,
         details: ['This map is initialized with a nullable value on line 4']);
     assertDetail(detail: regions[2].details[0], offset: 128, length: 1);
   }
@@ -1136,7 +1137,7 @@
 class B extends A {
   void m({num? p = 0}) {}
 }
-void f(A a) {
+void f(A  a) {
   a.m(p: null);
 }
 ''');
@@ -1155,30 +1156,24 @@
   assert(s != null);
 }
 ''', migratedContent: '''
-void f(String s) {
+void f(String  s) {
   assert(s != null);
 }
 ''');
-    List<RegionInfo> regions = unit.nonNullableTypeRegions;
+    List<RegionInfo> regions = unit.informativeRegions;
     expect(regions, hasLength(1));
-    assertRegion(
-        region: regions[0],
-        offset: 7,
-        length: 6,
-        details: ['This value is asserted to be non-null']);
+    assertRegion(region: regions[0], offset: 13, length: 1, details: []);
   }
 
   Future<void> test_nonNullableType_exclamationComment() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 void f(String /*!*/ s) {}
 ''', migratedContent: '''
-void f(String /*!*/ s) {}
+void f(String  /*!*/ s) {}
 ''');
-    List<RegionInfo> regions = unit.nonNullableTypeRegions;
+    List<RegionInfo> regions = unit.informativeRegions;
     expect(regions, hasLength(1));
-    assertRegion(region: regions[0], offset: 7, length: 6, details: [
-      'This type is annotated with a non-nullability comment ("/*!*/")'
-    ]);
+    assertRegion(region: regions[0], offset: 13, length: 1, details: []);
   }
 
   Future<void> test_nonNullableType_unconditionalFieldAccess() async {
@@ -1187,15 +1182,13 @@
   print(s.length);
 }
 ''', migratedContent: '''
-void f(String s) {
+void f(String  s) {
   print(s.length);
 }
 ''');
-    List<RegionInfo> regions = unit.nonNullableTypeRegions;
+    List<RegionInfo> regions = unit.informativeRegions;
     expect(regions, hasLength(1));
-    assertRegion(region: regions[0], offset: 7, length: 6, details: [
-      'This value is unconditionally used in a non-nullable context'
-    ]);
+    assertRegion(region: regions[0], offset: 13, length: 1, details: []);
   }
 
   Future<void> test_nullCheck_onMemberAccess() async {
@@ -1318,7 +1311,7 @@
 class C extends B {
   void m(Object? p) {}
 }
-void f(A a) {
+void f(A  a) {
   a.m(null);
 }
 ''');
@@ -1359,7 +1352,7 @@
 class C extends B {
   void m(Object? p) {}
 }
-void f(A a) {
+void f(A  a) {
   a.m(null);
 }
 ''');
@@ -1371,8 +1364,7 @@
     ]);
   }
 
-  @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/39378')
-  Future<void> test_parameter_fromOverridden_implicit() async {
+  Future<void> test_parameter_fromOverridden_implicitDynamic() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 class A {
   void m(p) {}
@@ -1385,17 +1377,12 @@
   void m(p) {}
 }
 class B extends A {
-  void m(Object? p) {}
+  void m(Object  p) {}
 }
 ''');
-    List<RegionInfo> regions = unit.fixRegions;
+    List<RegionInfo> regions = unit.informativeRegions;
     expect(regions, hasLength(1));
-    // TODO(brianwilkerson) The detail should read something like
-    //  "The overridden method accepts a nullable type"
-    assertRegion(
-        region: regions[0],
-        offset: 62,
-        details: ['A nullable value is assigned']);
+    assertRegion(region: regions[0], offset: 62, details: []);
   }
 
   Future<void> test_parameter_fromOverriddenField_explicit() async {
@@ -1414,7 +1401,7 @@
 class B extends A {
   void set m(Object? p) {}
 }
-void f(A a) => a.m = null;
+void f(A  a) => a.m = null;
 ''');
     List<RegionInfo> regions = unit.fixRegions;
     expect(regions, hasLength(2));
@@ -1428,6 +1415,15 @@
     ]);
     assertDetail(detail: regions[0].details[1], offset: 90, length: 4);
     assertDetail(detail: regions[1].details[0], offset: 12, length: 3);
+
+    expect(regions[0].traces, hasLength(1));
+    var trace = regions[0].traces.single;
+    expect(trace.description, 'Nullability reason');
+    var entries = trace.entries;
+    expect(entries, hasLength(1));
+    // Entry 0 is the nullability of the type of A.m.
+    // TODO(srawlins): "A" is probably incorrect here. Should be "A.m".
+    assertTraceEntry(unit, entries[0], 'A', unit.content.indexOf('int?'));
   }
 
   Future<void> test_parameter_named_omittedInCall() async {
@@ -1457,15 +1453,15 @@
 }
 void h(int x) {}
 ''', migratedContent: '''
-int f({int? compare}) => 7
+int  f({int? compare}) => 7
 void g() {
   h(f());
 }
-void h(int x) {}
+void h(int  x) {}
 ''');
     List<RegionInfo> regions = unit.fixRegions;
     expect(regions, hasLength(1));
-    assertRegion(region: regions[0], offset: 10, details: [
+    assertRegion(region: regions[0], offset: 11, details: [
       "This parameter has an implicit default value of 'null'",
       'This named parameter is omitted in a call to this function'
     ]);
@@ -1540,15 +1536,15 @@
     // Note: even though `as int` is removed, it still shows up in the
     // preview, since we show deleted text.
     var migratedContent = '''
-void f(num n, int?/*?*/ i) {
-  if (n is! int) return;
+void f(num  n, int?/*?*/ i) {
+  if (n is! int ) return;
   print((n as int).isEven);
   print(i! + 1);
 }
 ''';
     UnitInfo unit = await buildInfoForSingleTestFile(originalContent,
         migratedContent: migratedContent, removeViaComments: false);
-    List<RegionInfo> regions = unit.regions;
+    List<RegionInfo> regions = unit.fixRegions;
     expect(regions, hasLength(3));
     // regions[0] is the addition of `?` to the type of `i`.
     assertRegion(
@@ -1596,7 +1592,7 @@
 }
 ''', migratedContent: '''
 String? g() {
-  int x = 1;
+  int  x = 1;
   if (x == 2) return x == 3 ? "Hello" : null;
   return "Hello";
 }
@@ -1733,7 +1729,7 @@
 ''', migratedContent: '''
 void f() {
   String? s = null;
-  var x = <List<String?>>{
+  var x = <List<String?> >{
     ["hello"],
     if (1 == 2) [s]
   };
@@ -1777,7 +1773,7 @@
   if (i == null) return;
 }
 ''', migratedContent: '''
-void f(int/*!*/ i) {
+void f(int /*!*/ i) {
   /* if (i == null) return; */
 }
 ''');
@@ -1785,9 +1781,15 @@
         .where(
             (regionInfo) => regionInfo.offset == unit.content.indexOf('/* if'))
         .single;
-    // The reason data associated with dead code removal is a non-nullable node,
-    // and we don't currently generate a trace for non-nullable nodes.
-    expect(region.traces, isEmpty);
+    expect(region.traces, hasLength(1));
+    var trace = region.traces.single;
+    expect(trace.description, 'Non-nullability reason');
+    var entries = trace.entries;
+    expect(entries, hasLength(2));
+    // Entry 0 is the nullability of f's argument
+    assertTraceEntry(unit, entries[0], 'f', unit.content.indexOf('int'));
+    // Entry 1 is the edge from f's argument to never, due to the `/*!*/` hint.
+    assertTraceEntry(unit, entries[1], 'f', unit.content.indexOf('int'));
   }
 
   Future<void> test_trace_nullableType() async {
@@ -1816,7 +1818,7 @@
     var trace = region.traces.single;
     expect(trace.description, 'Nullability reason');
     var entries = trace.entries;
-    expect(entries, hasLength(6));
+    expect(entries, hasLength(5));
     // Entry 0 is the nullability of f's argument
     assertTraceEntry(
         unit, entries[0], 'f', unit.content.indexOf('int? i) {} // f'));
@@ -1830,16 +1832,12 @@
     assertTraceEntry(unit, entries[3], 'h', unit.content.indexOf('null'));
     // Entry 4 is the nullability of the null literal.
     assertTraceEntry(unit, entries[4], 'h', unit.content.indexOf('null'));
-    // Entry 5 is the edge from always to null.
-    // TODO(paulberry): this edge provides no additional useful information and
-    // shouldn't be included in the trace.
-    assertTraceEntry(unit, entries[5], 'h', unit.content.indexOf('null'));
   }
 
   Future<void> test_trace_nullCheck() async {
     UnitInfo unit = await buildInfoForSingleTestFile(
         'int f(int/*?*/ i) => i + 1;',
-        migratedContent: 'int f(int?/*?*/ i) => i! + 1;');
+        migratedContent: 'int  f(int?/*?*/ i) => i! + 1;');
     var region = unit.regions
         .where((regionInfo) => regionInfo.offset == unit.content.indexOf('! +'))
         .single;
@@ -1847,13 +1845,11 @@
     var trace = region.traces.single;
     expect(trace.description, 'Nullability reason');
     var entries = trace.entries;
-    expect(entries, hasLength(2));
+    expect(entries, hasLength(1));
     // Entry 0 is the nullability of the type of i.
-    assertTraceEntry(unit, entries[0], 'f', unit.content.indexOf('int?'));
+    // TODO(paulberry): -1 is a bug.
+    assertTraceEntry(unit, entries[0], 'f', unit.content.indexOf('int?') - 1);
     // Entry 1 is the edge from always to the type of i.
-    // TODO(paulberry): this edge provides no additional useful information and
-    // shouldn't be included in the trace.
-    assertTraceEntry(unit, entries[1], 'f', unit.content.indexOf('int?'));
   }
 
   Future<void> test_trace_nullCheck_notNullableReason() async {
@@ -1868,10 +1864,10 @@
   g(i);
 }
 ''', migratedContent: '''
-void f(int i) { // f
+void f(int  i) { // f
   assert(i != null);
 }
-void g(int i) { // g
+void g(int  i) { // g
   f(i); // call f
 }
 void h(int?/*?*/ i) {
@@ -1887,25 +1883,19 @@
     var trace = region.traces[1];
     expect(trace.description, 'Non-nullability reason');
     var entries = trace.entries;
-    expect(entries, hasLength(5));
+    expect(entries, hasLength(4));
     // Entry 0 is the nullability of g's argument
     assertTraceEntry(
-        unit, entries[0], 'g', unit.content.indexOf('int i) { // g'));
+        unit, entries[0], 'g', unit.content.indexOf('int  i) { // g'));
     // Entry 1 is the edge from g's argument to f's argument, due to g's call to
     // f.
     assertTraceEntry(
         unit, entries[1], 'g', unit.content.indexOf('i); // call f'));
     // Entry 2 is the nullability of f's argument
     assertTraceEntry(
-        unit, entries[2], 'f', unit.content.indexOf('int i) { // f'));
+        unit, entries[2], 'f', unit.content.indexOf('int  i) { // f'));
     // Entry 3 is the edge f's argument to never, due to the assert.
     assertTraceEntry(unit, entries[3], 'f', unit.content.indexOf('assert'));
-    // Entry 4 is the "never" node.
-    // TODO(paulberry): this node provides no additional useful information and
-    // shouldn't be included in the trace.
-    expect(entries[4].description, 'never');
-    expect(entries[4].function, null);
-    expect(entries[4].target, null);
   }
 
   Future<void> test_trace_substitutionNode() async {
@@ -1917,12 +1907,12 @@
 Map<int, String> x = {};
 String/*!*/ y = x[0];
 ''', migratedContent: '''
-class C<T extends Object/*!*/> {}
+class C<T extends Object /*!*/> {}
 
 C<int? /*?*/ >? c;
 
-Map<int, String> x = {};
-String/*!*/ y = x[0]!;
+Map<int , String >  x = {};
+String /*!*/ y = x[0]!;
 ''');
     var region = unit.regions
         .where((regionInfo) => regionInfo.offset == unit.content.indexOf('!;'))
@@ -1935,6 +1925,21 @@
     expect(region.traces[0].description, 'Non-nullability reason');
   }
 
+  Future<void> test_type_not_made_nullable() async {
+    UnitInfo unit = await buildInfoForSingleTestFile('int i = 0;',
+        migratedContent: 'int  i = 0;');
+    var region = unit.regions
+        .where((regionInfo) => regionInfo.offset == unit.content.indexOf('  i'))
+        .single;
+    expect(region.length, 1);
+    expect(region.lineNumber, 1);
+    expect(region.explanation, "Type 'int' was not made nullable");
+    expect(region.details, isEmpty);
+    expect(region.edits.map((edit) => edit.description).toSet(),
+        {'Force type to be non-nullable.', 'Force type to be nullable.'});
+    expect(region.traces, isEmpty);
+  }
+
   Future<void> test_uninitializedField() async {
     UnitInfo unit = await buildInfoForSingleTestFile('''
 class C {
@@ -2006,7 +2011,7 @@
   if (1 == 2) v1 = 7;
   g(v1!);
 }
-void g(int i) => print(i.isEven);
+void g(int  i) => print(i.isEven);
 ''');
     List<RegionInfo> regions = unit.fixRegions;
     expect(regions, hasLength(2));
diff --git a/pkg/analysis_server/test/src/edit/nnbd_migration/nnbd_migration_test_base.dart b/pkg/analysis_server/test/src/edit/nnbd_migration/nnbd_migration_test_base.dart
index 0412601..427e00e 100644
--- a/pkg/analysis_server/test/src/edit/nnbd_migration/nnbd_migration_test_base.dart
+++ b/pkg/analysis_server/test/src/edit/nnbd_migration/nnbd_migration_test_base.dart
@@ -101,8 +101,7 @@
     // Build the migration info.
     InstrumentationInformation info = instrumentationListener.data;
     InfoBuilder builder = InfoBuilder(
-        resourceProvider, includedRoot, info, listener, adapter, migration,
-        explainNonNullableTypes: true);
+        resourceProvider, includedRoot, info, listener, adapter, migration);
     infos = await builder.explainMigration();
   }
 }
diff --git a/pkg/analysis_server/test/src/edit/nnbd_migration/region_renderer_test.dart b/pkg/analysis_server/test/src/edit/nnbd_migration/region_renderer_test.dart
index c004b7e..3f1d5ea 100644
--- a/pkg/analysis_server/test/src/edit/nnbd_migration/region_renderer_test.dart
+++ b/pkg/analysis_server/test/src/edit/nnbd_migration/region_renderer_test.dart
@@ -59,34 +59,34 @@
     expect(response.line, equals(1));
   }
 
+  @FailingTest(reason: "Unmodified output reason doesn't contain detail")
   Future<void> test_unmodifiedOutput_containsDetail() async {
     await buildInfoForSingleTestFile('f(int a) => a.isEven;',
-        migratedContent: 'f(int a) => a.isEven;');
-    var response = renderRegion(2);
-    expect(response.details, hasLength(1));
-    var detail = response.details.single;
-    expect(
-        detail.description,
-        equals('This value is unconditionally used in a '
-            'non-nullable context'));
-    expect(detail.link.path, equals('test.dart'));
-    expect(detail.link.href, equals('test.dart?offset=12&line=1'));
+        migratedContent: 'f(int  a) => a.isEven;');
+    var response = renderRegion(5);
+    expect(response.details, isNotEmpty);
+    // TODO(paulberry): fix and re-enable.
+//    expect(response.details, hasLength(1));
+//    var detail = response.details.single;
+//    expect(
+//        detail.description,
+//        equals('This value is unconditionally used in a '
+//            'non-nullable context'));
+//    expect(detail.link.path, equals('test.dart'));
+//    expect(detail.link.href, equals('test.dart?offset=12&line=1'));
   }
 
   Future<void> test_unmodifiedOutput_containsExplanation() async {
     await buildInfoForSingleTestFile('f(int a) => a.isEven;',
-        migratedContent: 'f(int a) => a.isEven;');
-    var response = renderRegion(2);
-    expect(
-        response.explanation,
-        equals(
-            'This type is not changed; it is determined to be non-nullable'));
+        migratedContent: 'f(int  a) => a.isEven;');
+    var response = renderRegion(5);
+    expect(response.explanation, equals("Type 'int' was not made nullable"));
   }
 
   Future<void> test_unmodifiedOutput_containsPath() async {
     await buildInfoForSingleTestFile('f(int a) => a.isEven;',
-        migratedContent: 'f(int a) => a.isEven;');
-    var response = renderRegion(2);
+        migratedContent: 'f(int  a) => a.isEven;');
+    var response = renderRegion(5);
     expect(response.path, equals(convertPath('/project/bin/test.dart')));
     expect(response.line, equals(1));
   }
diff --git a/pkg/analysis_server/test/src/edit/nnbd_migration/unit_renderer_test.dart b/pkg/analysis_server/test/src/edit/nnbd_migration/unit_renderer_test.dart
index b719f79..c0ac125 100644
--- a/pkg/analysis_server/test/src/edit/nnbd_migration/unit_renderer_test.dart
+++ b/pkg/analysis_server/test/src/edit/nnbd_migration/unit_renderer_test.dart
@@ -41,7 +41,7 @@
 bool b = a.isEven;
 ''', migratedContent: '''
 int? a = null;
-bool b = a!.isEven;
+bool  b = a!.isEven;
 ''');
     var output = renderUnits()[0];
     var editList = output.edits;
@@ -54,7 +54,7 @@
 bool b = a.isEven;
 ''', migratedContent: '''
 int? a = null;
-bool b = a!.isEven;
+bool  b = a!.isEven;
 ''');
     var output = renderUnits()[0];
     expect(output.edits, hasLength(2));
@@ -63,7 +63,7 @@
     expect(output.edits[0].explanation,
         equals("Changed type 'int' to be nullable"));
     expect(output.edits[1].line, equals(2));
-    expect(output.edits[1].offset, equals(25));
+    expect(output.edits[1].offset, equals(26));
     expect(output.edits[1].explanation,
         equals('Added a non-null assertion to nullable expression'));
   }
@@ -82,7 +82,7 @@
 List<int> x = [null];
 ''', migratedContent: '''
 class C {
-  int hash(Iterable<int> elements) {
+  int  hash(Iterable<int >  elements) {
     if (elements == null) {
       return null.hashCode;
     }
@@ -90,7 +90,7 @@
   }
 }
 
-List<int?> x = [null];
+List<int?>  x = [null];
 ''', removeViaComments: false);
     renderUnits();
     // No assertions necessary; we are checking to make sure there is no crash.
@@ -110,7 +110,7 @@
 List<int> x = [null];
 ''', migratedContent: '''
 class C {
-  int hash(Iterable<int> elements) {
+  int  hash(Iterable<int >  elements) {
     if (elements == null) {
       return null.hashCode;
     }
@@ -118,7 +118,7 @@
   }
 }
 
-List<int?> x = [null];
+List<int?>  x = [null];
 ''', removeViaComments: false);
     var output = renderUnits()[0];
     // Strip out URLs and span IDs; they're not being tested here.
@@ -127,7 +127,7 @@
         .replaceAll(RegExp('id="[^"]*"'), 'id="..."');
     expect(navContent, '''
 class <span id="...">C</span> {
-  <a href="..." class="nav-link">int</a> <span id="...">hash</span>(<a href="..." class="nav-link">Iterable</a>&lt;<a href="..." class="nav-link">int</a>&gt; <span id="...">elements</span>) {
+  <a href="..." class="nav-link">int</a>  <span id="...">hash</span>(<a href="..." class="nav-link">Iterable</a>&lt;<a href="..." class="nav-link">int</a> &gt;  <span id="...">elements</span>) {
     if (<a href="..." class="nav-link">elements</a> <a href="..." class="nav-link">==</a> null) {
       return null.<a href="..." class="nav-link">hashCode</a>;
     }
@@ -135,13 +135,13 @@
   }
 }
 
-<a href="..." class="nav-link">List</a>&lt;<a href="..." class="nav-link">int</a>?&gt; <span id="...">x</span> = <span id="...">[null]</span>;
+<a href="..." class="nav-link">List</a>&lt;<a href="..." class="nav-link">int</a>?&gt;  <span id="...">x</span> = <span id="...">[null]</span>;
 ''');
   }
 
   Future<void> test_navContentContainsEscapedHtml() async {
     await buildInfoForSingleTestFile('List<String> a = null;',
-        migratedContent: 'List<String>? a = null;');
+        migratedContent: 'List<String >? a = null;');
     var output = renderUnits()[0];
     // Strip out URLs which will change; not being tested here.
     var navContent =
@@ -149,7 +149,7 @@
     expect(
         navContent,
         contains(r'<a href="..." class="nav-link">List</a>'
-            r'&lt;<a href="..." class="nav-link">String</a>&gt;? '
+            r'&lt;<a href="..." class="nav-link">String</a> &gt;? '
             r'<span id="o13">a</span> = <span id="o17">null</span>;'));
   }
 
@@ -193,7 +193,7 @@
 }
 ''', migratedContent: '''
 import 'dart:async';
-Future<int> f(Future<int> x) {
+Future<int >  f(Future<int >  x) {
   return x.whenComplete(() {});
 }
 ''');
@@ -203,31 +203,36 @@
 
   Future<void> test_regionsContainsEscapedHtml_ampersand() async {
     await buildInfoForSingleTestFile('bool a = true && false;',
-        migratedContent: 'bool a = true && false;');
+        migratedContent: 'bool  a = true && false;');
     var output = renderUnits()[0];
-    expect(output.regions, contains('bool a = true &amp;&amp; false;'));
+    expect(
+        output.regions,
+        contains('bool<span class="region informative-region" data-offset="4" '
+            'data-line="1"> </span> a = true &amp;&amp; false;'));
   }
 
   Future<void> test_regionsContainsEscapedHtml_betweenRegions() async {
     await buildInfoForSingleTestFile('List<String> a = null;',
-        migratedContent: 'List<String>? a = null;');
-    var output = renderUnits()[0];
-    var regions = _stripDataAttributes(output.regions);
-    expect(
-        regions,
-        contains('List&lt;String&gt;'
-            '<span class="region added-region">?</span> a = null;'));
-  }
-
-  Future<void> test_regionsContainsEscapedHtml_region() async {
-    await buildInfoForSingleTestFile('f(List<String> a) => a.join(",");',
-        migratedContent: 'f(List<String> a) => a.join(",");');
+        migratedContent: 'List<String >? a = null;');
     var output = renderUnits()[0];
     var regions = _stripDataAttributes(output.regions);
     expect(
         regions,
         contains(
-            '<span class="region unchanged-region">List&lt;String&gt;</span>'));
+            'List&lt;String<span class="region informative-region"> </span>&gt;'
+            '<span class="region added-region">?</span> a = null;'));
+  }
+
+  Future<void> test_regionsContainsEscapedHtml_region() async {
+    await buildInfoForSingleTestFile('f(List<String> a) => a.join(",");',
+        migratedContent: 'f(List<String >  a) => a.join(",");');
+    var output = renderUnits()[0];
+    var regions = _stripDataAttributes(output.regions);
+    expect(
+        regions,
+        contains(
+            'List&lt;String<span class="region informative-region"> </span>'
+            '&gt;<span class="region informative-region"> </span>'));
   }
 
   UnitInfo unit(String path, String content, {List<RegionInfo> regions}) {
diff --git a/pkg/analysis_server/test/src/services/correction/assist/import_add_show_test.dart b/pkg/analysis_server/test/src/services/correction/assist/import_add_show_test.dart
index 13c325b..b315f25 100644
--- a/pkg/analysis_server/test/src/services/correction/assist/import_add_show_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/assist/import_add_show_test.dart
@@ -65,6 +65,26 @@
 ''');
   }
 
+  Future<void> test_setterOnDirective() async {
+    addSource('/home/test/lib/a.dart', r'''
+void set setter(int i) {}
+''');
+    await resolveTestUnit('''
+import 'a.dart';
+
+main() {
+  setter = 42;
+}
+''');
+    await assertHasAssistAt('import ', '''
+import 'a.dart' show setter;
+
+main() {
+  setter = 42;
+}
+''');
+  }
+
   Future<void> test_onUri() async {
     await resolveTestUnit('''
 import 'dart:math';
diff --git a/pkg/analysis_server/test/src/services/correction/fix/add_const_test.dart b/pkg/analysis_server/test/src/services/correction/fix/add_const_test.dart
index f384b72..99c530f 100644
--- a/pkg/analysis_server/test/src/services/correction/fix/add_const_test.dart
+++ b/pkg/analysis_server/test/src/services/correction/fix/add_const_test.dart
@@ -12,6 +12,7 @@
 void main() {
   defineReflectiveSuite(() {
     defineReflectiveTests(AddConstTest);
+    defineReflectiveTests(AddConstToImmutableConstructorTest);
   });
 }
 
@@ -58,3 +59,54 @@
 ''');
   }
 }
+
+@reflectiveTest
+class AddConstToImmutableConstructorTest extends FixProcessorLintTest {
+  @override
+  FixKind get kind => DartFixKind.ADD_CONST;
+
+  @override
+  String get lintCode => LintNames.prefer_const_constructors_in_immutables;
+
+  Future<void> test_constConstructor() async {
+    addMetaPackage();
+    await resolveTestUnit('''
+import 'package:meta/meta.dart';
+
+@immutable
+class A {
+  A();
+}
+''');
+    await assertHasFix('''
+import 'package:meta/meta.dart';
+
+@immutable
+class A {
+  const A();
+}
+''');
+  }
+
+  Future<void> test_constConstructorWithComment() async {
+    addMetaPackage();
+    await resolveTestUnit('''
+import 'package:meta/meta.dart';
+
+@immutable
+class A {
+  /// Comment.
+  A();
+}
+''');
+    await assertHasFix('''
+import 'package:meta/meta.dart';
+
+@immutable
+class A {
+  /// Comment.
+  const A();
+}
+''');
+  }
+}
diff --git a/pkg/analysis_server/test/tool/completion_metrics/metrics_util_test.dart b/pkg/analysis_server/test/tool/completion_metrics/metrics_util_test.dart
index fb4c0c5..2826928 100644
--- a/pkg/analysis_server/test/tool/completion_metrics/metrics_util_test.dart
+++ b/pkg/analysis_server/test/tool/completion_metrics/metrics_util_test.dart
@@ -79,20 +79,21 @@
   group('MeanReciprocalRankComputer', () {
     test('empty', () {
       var mrrc = MeanReciprocalRankComputer('');
-      expect(mrrc.rankCount, equals(0));
-      expect(mrrc.ranks, isEmpty);
-      expect(mrrc.getMRR(), equals(0));
+      expect(mrrc.count, equals(0));
+      expect(mrrc.mrr, equals(0));
     });
 
     test('clear', () {
       var mrrc = MeanReciprocalRankComputer('');
       mrrc.addRank(2);
-      expect(mrrc.rankCount, equals(1));
-      expect(mrrc.ranks, isNotEmpty);
+      expect(mrrc.count, equals(1));
+      expect(mrrc.mrr, equals(1 / 2));
+      expect(mrrc.mrr_5, equals(1 / 2));
 
       mrrc.clear();
-      expect(mrrc.rankCount, equals(0));
-      expect(mrrc.ranks, isEmpty);
+      expect(mrrc.count, equals(0));
+      expect(mrrc.mrr, equals(0));
+      expect(mrrc.mrr_5, equals(0));
     });
 
     test('mmr- single value', () {
@@ -102,9 +103,9 @@
       mrrc.addRank(3);
       mrrc.addRank(3);
       mrrc.addRank(3);
-      expect(mrrc.rankCount, equals(5));
-      expect(mrrc.ranks, equals([3, 3, 3, 3, 3]));
-      expect(mrrc.getMRR(), doubleEquals(1 / 3));
+      expect(mrrc.count, equals(5));
+      expect(mrrc.mrr, doubleEquals(1 / 3));
+      expect(mrrc.mrr_5, doubleEquals(1 / 3));
     });
 
     test('mmr- example', () {
@@ -112,19 +113,21 @@
       mrrc.addRank(3);
       mrrc.addRank(2);
       mrrc.addRank(1);
-      expect(mrrc.rankCount, equals(3));
-      expect(mrrc.ranks, equals([3, 2, 1]));
-      expect(mrrc.getMRR(), doubleEquals(11 / 18));
+      expect(mrrc.count, equals(3));
+      expect(mrrc.mrr, doubleEquals(11 / 18));
+      expect(mrrc.mrr_5, doubleEquals(11 / 18));
     });
 
     test('mmr- max rank', () {
       var mrrc = MeanReciprocalRankComputer('');
+      mrrc.addRank(6);
+      mrrc.addRank(5);
+      mrrc.addRank(4);
       mrrc.addRank(3);
       mrrc.addRank(2);
       mrrc.addRank(1);
-      expect(mrrc.rankCount, equals(3));
-      expect(mrrc.ranks, equals([3, 2, 1]));
-      expect(mrrc.getMRR(2), doubleEquals(1 / 2));
+      expect(mrrc.count, equals(6));
+      expect(mrrc.mrr, greaterThan(mrrc.mrr_5));
     });
   });
 
diff --git a/pkg/analysis_server/test/utils/package_root.dart b/pkg/analysis_server/test/utils/package_root.dart
index 1957a61..ab5cdac 100644
--- a/pkg/analysis_server/test/utils/package_root.dart
+++ b/pkg/analysis_server/test/utils/package_root.dart
@@ -11,7 +11,8 @@
 String get packageRoot {
   // If the package root directory is specified on the command line using
   // -DpkgRoot=..., use it.
-  String pkgRootVar = const String.fromEnvironment('pkgRoot');
+  const String pkgRootVar =
+      bool.hasEnvironment('pkgRoot') ? String.fromEnvironment('pkgRoot') : null;
   if (pkgRootVar != null) {
     String path = pathos.join(Directory.current.path, pkgRootVar);
     if (!path.endsWith(pathos.separator)) path += pathos.separator;
diff --git a/pkg/analysis_server/tool/completion_metrics/metrics_util.dart b/pkg/analysis_server/tool/completion_metrics/metrics_util.dart
index 2a75fee..b9bca81 100644
--- a/pkg/analysis_server/tool/completion_metrics/metrics_util.dart
+++ b/pkg/analysis_server/tool/completion_metrics/metrics_util.dart
@@ -84,49 +84,59 @@
   }
 }
 
-/// A computer for the mean reciprocal rank,
+/// A computer for the mean reciprocal rank. The MRR as well as the MRR only
+/// if the item was in the top 5 in the list see [MAX_RANK], is computed.
 /// https://en.wikipedia.org/wiki/Mean_reciprocal_rank.
 class MeanReciprocalRankComputer {
+  static final int MAX_RANK = 5;
   final String name;
-  final List<int> ranks = [];
-  MeanReciprocalRankComputer(this.name);
+  double _sum = 0;
+  double _sum_5 = 0;
+  int _count = 0;
 
-  int get rankCount => ranks.length;
+  MeanReciprocalRankComputer(
+    this.name,
+  );
+
+  int get count => _count;
 
   void addRank(int rank) {
-    ranks.add(rank);
+    if (rank != 0) {
+      _sum += 1 / rank;
+      if (rank <= MAX_RANK) {
+        _sum_5 += 1 / rank;
+      }
+    }
+    _count++;
   }
 
-  void clear() => ranks.clear();
+  void clear() {
+    _sum = 0;
+    _sum_5 = 0;
+    _count = 0;
+  }
 
-  double getMRR([int maxRank = 0]) {
-    if (ranks.isEmpty || maxRank < 0) {
+  double get mrr {
+    if (count == 0) {
       return 0;
     }
-    double sum = 0;
-    ranks.forEach((rank) {
-      if (maxRank == 0) {
-        if (rank != 0) {
-          sum += 1 / rank;
-        }
-      } else {
-        if (rank != 0 && rank <= maxRank) {
-          sum += 1 / rank;
-        }
-      }
-    });
-    return sum / rankCount;
+    return _sum / count;
+  }
+
+  double get mrr_5 {
+    if (count == 0) {
+      return 0;
+    }
+    return _sum_5 / count;
   }
 
   void printMean() {
-    var mrrVal = getMRR();
-    print('Mean Reciprocal Rank \'$name\' (total = $rankCount)');
-    print('mmr   = ${mrrVal.toStringAsFixed(6)} '
-        '(inverse = ${(1 / mrrVal).toStringAsFixed(3)})');
+    print('Mean Reciprocal Rank \'$name\' (total = $count)');
+    print('mmr   = ${mrr.toStringAsFixed(6)} '
+        '(inverse = ${(1 / mrr).toStringAsFixed(3)})');
 
-    var mrrVal5 = getMRR(5);
-    print('mmr_5 = ${mrrVal5.toStringAsFixed(6)} '
-        '(inverse = ${(1 / mrrVal5).toStringAsFixed(3)})');
+    print('mmr_5 = ${mrr_5.toStringAsFixed(6)} '
+        '(inverse = ${(1 / mrr_5).toStringAsFixed(3)})');
   }
 }
 
diff --git a/pkg/analysis_server_client/lib/server.dart b/pkg/analysis_server_client/lib/server.dart
index 7dde935..f02c204 100644
--- a/pkg/analysis_server_client/lib/server.dart
+++ b/pkg/analysis_server_client/lib/server.dart
@@ -6,39 +6,22 @@
 import 'dart:convert';
 import 'dart:io';
 
+import 'package:analysis_server_client/src/server_base.dart';
 import 'package:analysis_server_client/listener/server_listener.dart';
 import 'package:analysis_server_client/protocol.dart';
 import 'package:path/path.dart';
-
-/// Type of callbacks used to process notifications.
-typedef NotificationProcessor = void Function(Notification notification);
+export 'package:analysis_server_client/src/server_base.dart'
+    show NotificationProcessor;
 
 /// Instances of the class [Server] manage a server process,
 /// and facilitate communication to and from the server.
 ///
 /// Clients may not extend, implement or mix-in this class.
-class Server {
-  /// If not `null`, [_listener] will be sent information
-  /// about interactions with the server.
-  final ServerListener _listener;
-
+class Server extends ServerBase {
   /// Server process object, or `null` if server hasn't been started yet
   /// or if the server has already been stopped.
   Process _process;
 
-  /// Replicate all stdout/stderr data from the server process to stdout/stderr,
-  /// when true.
-  final bool _stdioPassthrough;
-
-  /// Commands that have been sent to the server but not yet acknowledged,
-  /// and the [Completer] objects which should be completed
-  /// when acknowledgement is received.
-  final _pendingCommands = <String, Completer<Map<String, dynamic>>>{};
-
-  /// Number which should be used to compute the 'id'
-  /// to send in the next command sent to the server.
-  int _nextId = 0;
-
   /// The stderr subscription or `null` if either
   /// [listenToOutput] has not been called or [stop] has been called.
   StreamSubscription<String> _stderrSubscription;
@@ -49,13 +32,13 @@
 
   Server(
       {ServerListener listener, Process process, bool stdioPassthrough = false})
-      : _listener = listener,
-        _process = process,
-        _stdioPassthrough = stdioPassthrough;
+      : _process = process,
+        super(listener: listener, stdioPassthrough: stdioPassthrough);
 
   /// Force kill the server. Returns exit code future.
+  @override
   Future<int> kill({String reason = 'none'}) {
-    _listener?.killingServerProcess(reason);
+    listener?.killingServerProcess(reason);
     final process = _process;
     _process = null;
     process.kill();
@@ -64,69 +47,16 @@
 
   /// Start listening to output from the server,
   /// and deliver notifications to [notificationProcessor].
+  @override
   void listenToOutput({NotificationProcessor notificationProcessor}) {
     _stdoutSubscription = _process.stdout
         .transform(utf8.decoder)
         .transform(LineSplitter())
-        .listen((String line) {
-      if (_stdioPassthrough) stdout.writeln(line);
-      String trimmedLine = line.trim();
-
-      // Guard against lines like:
-      //   {"event":"server.connected","params":{...}}Observatory listening on ...
-      const observatoryMessage = 'Observatory listening on ';
-      if (trimmedLine.contains(observatoryMessage)) {
-        trimmedLine = trimmedLine
-            .substring(0, trimmedLine.indexOf(observatoryMessage))
-            .trim();
-      }
-      if (trimmedLine.isEmpty) {
-        return;
-      }
-
-      _listener?.messageReceived(trimmedLine);
-      Map<String, dynamic> message;
-      try {
-        message = json.decoder.convert(trimmedLine);
-      } catch (exception) {
-        _listener?.badMessage(trimmedLine, exception);
-        return;
-      }
-
-      final id = message[Response.ID];
-      if (id != null) {
-        // Handle response
-        final completer = _pendingCommands.remove(id);
-        if (completer == null) {
-          _listener?.unexpectedResponse(message, id);
-        }
-        if (message.containsKey(Response.ERROR)) {
-          completer.completeError(RequestError.fromJson(
-              ResponseDecoder(null), '.error', message[Response.ERROR]));
-        } else {
-          completer.complete(message[Response.RESULT]);
-        }
-      } else {
-        // Handle notification
-        final String event = message[Notification.EVENT];
-        if (event != null) {
-          if (notificationProcessor != null) {
-            notificationProcessor(
-                Notification(event, message[Notification.PARAMS]));
-          }
-        } else {
-          _listener?.unexpectedMessage(message);
-        }
-      }
-    });
+        .listen((line) => outputProcessor(line, notificationProcessor));
     _stderrSubscription = _process.stderr
         .transform(utf8.decoder)
         .transform(LineSplitter())
-        .listen((String line) {
-      if (_stdioPassthrough) stderr.writeln(line);
-      String trimmedLine = line.trim();
-      _listener?.errorMessage(trimmedLine);
-    });
+        .listen((line) => errorProcessor(line, notificationProcessor));
   }
 
   /// Send a command to the server. An 'id' will be automatically assigned.
@@ -136,23 +66,10 @@
   /// the future will be completed with the 'result' field from the response.
   /// If the server acknowledges the command with an error response,
   /// the future will be completed with an error.
+  @override
   Future<Map<String, dynamic>> send(
-      String method, Map<String, dynamic> params) {
-    String id = '${_nextId++}';
-    Map<String, dynamic> command = <String, dynamic>{
-      Request.ID: id,
-      Request.METHOD: method
-    };
-    if (params != null) {
-      command[Request.PARAMS] = params;
-    }
-    final completer = Completer<Map<String, dynamic>>();
-    _pendingCommands[id] = completer;
-    String line = json.encode(command);
-    _listener?.requestSent(line);
-    _process.stdin.add(utf8.encoder.convert('$line\n'));
-    return completer.future;
-  }
+          String method, Map<String, dynamic> params) =>
+      sendCommandWith(method, params, _process.stdin.add);
 
   /// Start the server.
   ///
@@ -166,6 +83,7 @@
   /// If [enableAsserts] is specified, then asserts will be enabled in the new
   /// dart process for that server. This is typically just useful to enable
   /// locally for debugging.
+  @override
   Future start({
     String clientId,
     String clientVersion,
@@ -222,48 +140,30 @@
     // Add the server executable.
     //
     arguments.add(serverPath);
-    //
-    // Add server arguments.
-    //
-    // TODO(danrubel): Consider moving all cmdline argument consts
-    // out of analysis_server and into analysis_server_client
-    if (clientId != null) {
-      arguments.add('--client-id');
-      arguments.add(clientId);
-    }
-    if (clientVersion != null) {
-      arguments.add('--client-version');
-      arguments.add(clientVersion);
-    }
-    if (suppressAnalytics) {
-      arguments.add('--suppress-analytics');
-    }
-    if (diagnosticPort != null) {
-      arguments.add('--port');
-      arguments.add(diagnosticPort.toString());
-    }
-    if (instrumentationLogFile != null) {
-      arguments.add('--instrumentation-log-file=$instrumentationLogFile');
-    }
-    if (sdkPath != null) {
-      arguments.add('--sdk=$sdkPath');
-    }
-    if (useAnalysisHighlight2) {
-      arguments.add('--useAnalysisHighlight2');
-    }
-    _listener?.startingServer(dartBinary, arguments);
+
+    arguments.addAll(getServerArguments(
+        clientId: clientId,
+        clientVersion: clientVersion,
+        suppressAnalytics: suppressAnalytics,
+        diagnosticPort: diagnosticPort,
+        instrumentationLogFile: instrumentationLogFile,
+        sdkPath: sdkPath,
+        useAnalysisHighlight2: useAnalysisHighlight2));
+
+    listener?.startingServer(dartBinary, arguments);
     _process = await Process.start(dartBinary, arguments);
     // ignore: unawaited_futures
     _process.exitCode.then((int code) {
       if (code != 0 && _process != null) {
         // Report an error if server abruptly terminated
-        _listener?.unexpectedStop(code);
+        listener?.unexpectedStop(code);
       }
     });
   }
 
   /// Attempt to gracefully shutdown the server.
   /// If that fails, then kill the process.
+  @override
   Future<int> stop({Duration timeLimit}) async {
     timeLimit ??= const Duration(seconds: 5);
     if (_process == null) {
@@ -286,7 +186,7 @@
     return process.exitCode.timeout(
       timeLimit,
       onTimeout: () {
-        _listener?.killingServerProcess('server failed to exit');
+        listener?.killingServerProcess('server failed to exit');
         process.kill();
         return process.exitCode;
       },
diff --git a/pkg/analysis_server_client/lib/src/server_base.dart b/pkg/analysis_server_client/lib/src/server_base.dart
new file mode 100644
index 0000000..bb1e02e
--- /dev/null
+++ b/pkg/analysis_server_client/lib/src/server_base.dart
@@ -0,0 +1,207 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:analysis_server_client/listener/server_listener.dart';
+import 'package:analysis_server_client/protocol.dart';
+
+/// Type of callbacks used to process notifications.
+typedef NotificationProcessor = void Function(Notification notification);
+
+/// A function via which data can be sent to a started server.
+typedef CommandSender = void Function(List<int> utf8bytes);
+
+///
+/// Add server arguments.
+///
+/// TODO(danrubel): Consider moving all cmdline argument consts
+/// out of analysis_server and into analysis_server_client.
+List<String> getServerArguments({
+  String clientId,
+  String clientVersion,
+  int diagnosticPort,
+  String instrumentationLogFile,
+  String sdkPath,
+  bool suppressAnalytics,
+  bool useAnalysisHighlight2 = false,
+}) {
+  List<String> arguments = [];
+
+  if (clientId != null) {
+    arguments.add('--client-id');
+    arguments.add(clientId);
+  }
+  if (clientVersion != null) {
+    arguments.add('--client-version');
+    arguments.add(clientVersion);
+  }
+  if (suppressAnalytics) {
+    arguments.add('--suppress-analytics');
+  }
+  if (diagnosticPort != null) {
+    arguments.add('--port');
+    arguments.add(diagnosticPort.toString());
+  }
+  if (instrumentationLogFile != null) {
+    arguments.add('--instrumentation-log-file=$instrumentationLogFile');
+  }
+  if (sdkPath != null) {
+    arguments.add('--sdk=$sdkPath');
+  }
+  if (useAnalysisHighlight2) {
+    arguments.add('--useAnalysisHighlight2');
+  }
+  return arguments;
+}
+
+/// Implementations of the class [ServerBase] manage an analysis server,
+/// and facilitate communication to and from the server.
+///
+/// Clients outside of this package may not extend or implement this class.
+abstract class ServerBase {
+  /// Replicate all data from the server process to stdout/stderr, when true.
+  final bool _stdioPassthrough;
+
+  /// Number which should be used to compute the 'id'
+  /// to send in the next command sent to the server.
+  int _nextId = 0;
+
+  /// If not `null`, [_listener] will be sent information
+  /// about interactions with the server.
+  final ServerListener _listener;
+
+  ServerListener get listener => _listener;
+
+  ServerBase({ServerListener listener, bool stdioPassthrough = false})
+      : _listener = listener,
+        _stdioPassthrough = stdioPassthrough;
+
+  /// Commands that have been sent to the server but not yet acknowledged,
+  /// and the [Completer] objects which should be completed
+  /// when acknowledgement is received.
+  final _pendingCommands = <String, Completer<Map<String, dynamic>>>{};
+
+  /// Force kill the server. Returns a future that completes when the server
+  /// stops.
+  Future kill({String reason = 'none'});
+
+  /// Start listening to output from the server,
+  /// and deliver notifications to [notificationProcessor].
+  void listenToOutput({NotificationProcessor notificationProcessor});
+
+  /// Send a command to the server. An 'id' will be automatically assigned.
+  /// The returned [Future] will be completed when the server acknowledges
+  /// the command with a response.
+  /// If the server acknowledges the command with a normal (non-error) response,
+  /// the future will be completed with the 'result' field from the response.
+  /// If the server acknowledges the command with an error response,
+  /// the future will be completed with an error.
+  Future<Map<String, dynamic>> send(String method, Map<String, dynamic> params);
+
+  /// Encodes a request for transmission and sends it as a utf8 encoded byte
+  /// string with [sendWith].
+  Future<Map<String, dynamic>> sendCommandWith(
+      String method, Map<String, dynamic> params, CommandSender sendWith) {
+    String id = '${_nextId++}';
+    Map<String, dynamic> command = <String, dynamic>{
+      Request.ID: id,
+      Request.METHOD: method
+    };
+    if (params != null) {
+      command[Request.PARAMS] = params;
+    }
+    final completer = Completer<Map<String, dynamic>>();
+    _pendingCommands[id] = completer;
+    String line = json.encode(command);
+    listener?.requestSent(line);
+    sendWith(utf8.encoder.convert('$line\n'));
+    return completer.future;
+  }
+
+  /// If the implementation of [ServerBase] captures an error stream,
+  /// it can use this to forward the errors to [listener] and [stderr] if
+  /// appropriate.
+  void errorProcessor(
+      String line, NotificationProcessor notificationProcessor) {
+    if (_stdioPassthrough) stderr.writeln(line);
+    String trimmedLine = line.trim();
+    listener?.errorMessage(trimmedLine);
+  }
+
+  /// Handle a (possibly) json encoded object, completing the [Completer] in
+  /// [_pendingCommands] corresponding to the response.  Reports problems in
+  /// decoding or message synchronization using [listener], and replicates
+  /// raw data to [stdout] as appropriate.
+  void outputProcessor(
+      String line, NotificationProcessor notificationProcessor) {
+    if (_stdioPassthrough) stdout.writeln(line);
+    String trimmedLine = line.trim();
+
+    // Guard against lines like:
+    //   {"event":"server.connected","params":{...}}Observatory listening on ...
+    const observatoryMessage = 'Observatory listening on ';
+    if (trimmedLine.contains(observatoryMessage)) {
+      trimmedLine = trimmedLine
+          .substring(0, trimmedLine.indexOf(observatoryMessage))
+          .trim();
+    }
+    if (trimmedLine.isEmpty) {
+      return;
+    }
+
+    listener?.messageReceived(trimmedLine);
+    Map<String, dynamic> message;
+    try {
+      message = json.decoder.convert(trimmedLine);
+    } catch (exception) {
+      listener?.badMessage(trimmedLine, exception);
+      return;
+    }
+
+    final id = message[Response.ID];
+    if (id != null) {
+      // Handle response
+      final completer = _pendingCommands.remove(id);
+      if (completer == null) {
+        listener?.unexpectedResponse(message, id);
+      }
+      if (message.containsKey(Response.ERROR)) {
+        completer.completeError(RequestError.fromJson(
+            ResponseDecoder(null), '.error', message[Response.ERROR]));
+      } else {
+        completer.complete(message[Response.RESULT]);
+      }
+    } else {
+      // Handle notification
+      final String event = message[Notification.EVENT];
+      if (event != null) {
+        if (notificationProcessor != null) {
+          notificationProcessor(
+              Notification(event, message[Notification.PARAMS]));
+        }
+      } else {
+        listener?.unexpectedMessage(message);
+      }
+    }
+  }
+
+  /// Start the server.  The returned future completes when the server
+  /// is started and it is valid to call [listenToOutput].
+  Future start({
+    String clientId,
+    String clientVersion,
+    int diagnosticPort,
+    String instrumentationLogFile,
+    String sdkPath,
+    bool suppressAnalytics,
+    bool useAnalysisHighlight2,
+  });
+
+  /// Attempt to gracefully shutdown the server.
+  /// If that fails, then force it to shut down.
+  Future stop({Duration timeLimit});
+}
diff --git a/pkg/analyzer/lib/error/error.dart b/pkg/analyzer/lib/error/error.dart
index bb65367..47f3f08 100644
--- a/pkg/analyzer/lib/error/error.dart
+++ b/pkg/analyzer/lib/error/error.dart
@@ -126,7 +126,7 @@
   CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR,
   CompileTimeErrorCode.CONST_WITH_UNDEFINED_CONSTRUCTOR_DEFAULT,
   CompileTimeErrorCode.CONTINUE_LABEL_ON_SWITCH,
-  CompileTimeErrorCode.DEFAULT_LIST_CONSTRUCTOR_MISMATCH,
+  CompileTimeErrorCode.DEFAULT_LIST_CONSTRUCTOR,
   CompileTimeErrorCode.DEFAULT_VALUE_IN_FUNCTION_TYPED_PARAMETER,
   CompileTimeErrorCode.DEFAULT_VALUE_IN_REDIRECTING_FACTORY_CONSTRUCTOR,
   CompileTimeErrorCode.DEFAULT_VALUE_ON_REQUIRED_PARAMETER,
diff --git a/pkg/analyzer/lib/src/dart/analysis/driver.dart b/pkg/analyzer/lib/src/dart/analysis/driver.dart
index 6376a63..5a3f02a 100644
--- a/pkg/analyzer/lib/src/dart/analysis/driver.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/driver.dart
@@ -91,7 +91,7 @@
 /// TODO(scheglov) Clean up the list of implicitly analyzed files.
 class AnalysisDriver implements AnalysisDriverGeneric {
   /// The version of data format, should be incremented on every format change.
-  static const int DATA_VERSION = 98;
+  static const int DATA_VERSION = 99;
 
   /// The length of the list returned by [_computeDeclaredVariablesSignature].
   static const int _declaredVariablesSignatureLength = 4;
diff --git a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
index 7c6cc1c..4ab24f0 100644
--- a/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/library_analyzer.dart
@@ -89,13 +89,6 @@
   final List<UsedImportedElements> _usedImportedElementsList = [];
   final List<UsedLocalElements> _usedLocalElementsList = [];
 
-  /**
-   * Constants in the current library.
-   *
-   * TODO(scheglov) Remove after https://github.com/dart-lang/sdk/issues/31925
-   */
-  final Set<ConstantEvaluationTarget> _libraryConstants = {};
-
   final Set<ConstantEvaluationTarget> _constants = {};
 
   LibraryAnalyzer(
@@ -158,7 +151,6 @@
 
     timerLibraryAnalyzerConst.start();
     units.values.forEach(_findConstants);
-    _clearConstantEvaluationResults();
     _computeConstants();
     timerLibraryAnalyzerConst.stop();
 
@@ -215,24 +207,6 @@
     return results;
   }
 
-  /**
-   * Clear evaluation results for all constants before computing them again.
-   * The reason is described in https://github.com/dart-lang/sdk/issues/35940
-   *
-   * Otherwise, we reuse results, including errors are recorded only when
-   * we evaluate constants resynthesized from summaries.
-   *
-   * TODO(scheglov) Remove after https://github.com/dart-lang/sdk/issues/31925
-   */
-  void _clearConstantEvaluationResults() {
-    for (var constant in _libraryConstants) {
-      if (constant is ConstFieldElementImpl_ofEnum) continue;
-      if (constant is ConstVariableElement) {
-        constant.evaluationResult = null;
-      }
-    }
-  }
-
   void _computeConstantErrors(
       ErrorReporter errorReporter, CompilationUnit unit) {
     ConstantVerifier constantVerifier = ConstantVerifier(
@@ -450,7 +424,6 @@
   void _findConstants(CompilationUnit unit) {
     ConstantFinder constantFinder = ConstantFinder();
     unit.accept(constantFinder);
-    _libraryConstants.addAll(constantFinder.constantsToCompute);
     _constants.addAll(constantFinder.constantsToCompute);
 
     var dependenciesFinder = ConstantExpressionsDependenciesFinder();
diff --git a/pkg/analyzer/lib/src/dart/analysis/session.dart b/pkg/analyzer/lib/src/dart/analysis/session.dart
index 47f0cde..148a0ab 100644
--- a/pkg/analyzer/lib/src/dart/analysis/session.dart
+++ b/pkg/analyzer/lib/src/dart/analysis/session.dart
@@ -14,6 +14,7 @@
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/src/dart/analysis/driver.dart' as driver;
 import 'package:analyzer/src/dart/analysis/uri_converter.dart';
+import 'package:analyzer/src/dart/element/class_hierarchy.dart';
 import 'package:analyzer/src/dart/element/inheritance_manager3.dart';
 import 'package:analyzer/src/dart/element/type_provider.dart';
 import 'package:analyzer/src/generated/engine.dart' show AnalysisOptionsImpl;
@@ -38,6 +39,7 @@
   /// The cache of libraries for URIs.
   final Map<String, LibraryElement> _uriToLibraryCache = {};
 
+  final ClassHierarchy classHierarchy = ClassHierarchy();
   final InheritanceManager3 inheritanceManager = InheritanceManager3();
 
   /// Initialize a newly created analysis session.
diff --git a/pkg/analyzer/lib/src/dart/element/class_hierarchy.dart b/pkg/analyzer/lib/src/dart/element/class_hierarchy.dart
new file mode 100644
index 0000000..a02599d
--- /dev/null
+++ b/pkg/analyzer/lib/src/dart/element/class_hierarchy.dart
@@ -0,0 +1,110 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/src/dart/element/element.dart';
+import 'package:analyzer/src/dart/element/type_algebra.dart';
+import 'package:analyzer/src/generated/resolver.dart';
+
+class ClassHierarchy {
+  final Map<ClassElement, _Hierarchy> _map = {};
+
+  List<InterfaceType> implementedInterfaces(ClassElement element) {
+    var hierarchy = _map[element];
+
+    if (hierarchy != null) {
+      return hierarchy.interfaces;
+    }
+
+    hierarchy = _Hierarchy(
+      interfaces: const <InterfaceType>[],
+    );
+    _map[element] = hierarchy;
+
+    var library = element.library as LibraryElementImpl;
+    var typeSystem = library.typeSystem;
+    var map = <ClassElement, _ClassInterfaceType>{};
+
+    void appendOne(InterfaceType type) {
+      var element = type.element;
+      if (library.isNonNullableByDefault) {
+        var classResult = map[element];
+        if (classResult == null) {
+          classResult = _ClassInterfaceType(typeSystem);
+          map[element] = classResult;
+        }
+        classResult.update(type);
+      } else {
+        map[element] ??= _ClassInterfaceType(typeSystem)..update(type);
+      }
+    }
+
+    void append(InterfaceType type) {
+      if (type == null) {
+        return;
+      }
+
+      appendOne(type);
+
+      var substitution = Substitution.fromInterfaceType(type);
+      var rawInterfaces = implementedInterfaces(type.element);
+      for (var rawInterface in rawInterfaces) {
+        var newInterface = substitution.substituteType(rawInterface);
+        newInterface = library.toLegacyTypeIfOptOut(newInterface);
+        appendOne(newInterface);
+      }
+    }
+
+    append(element.supertype);
+    for (var type in element.superclassConstraints) {
+      append(type);
+    }
+    for (var type in element.interfaces) {
+      append(type);
+    }
+    for (var type in element.mixins) {
+      append(type);
+    }
+
+    var result = map.values.map((e) => e.type).toList(growable: false);
+    hierarchy.interfaces = result;
+    return result;
+  }
+}
+
+class _ClassInterfaceType {
+  final TypeSystemImpl _typeSystem;
+
+  InterfaceType _notNormalized;
+  InterfaceType _currentMerge;
+
+  _ClassInterfaceType(this._typeSystem);
+
+  InterfaceType get type => _currentMerge ?? _notNormalized;
+
+  void update(InterfaceType type) {
+    if (_currentMerge == null) {
+      if (_notNormalized == null) {
+        _notNormalized = type;
+        return;
+      } else {
+        _currentMerge = _typeSystem.normalize(_notNormalized);
+      }
+    }
+
+    var normType = _typeSystem.normalize(type);
+    try {
+      _currentMerge = _typeSystem.topMerge(_currentMerge, normType);
+    } catch (e) {
+      // ignored
+    }
+  }
+}
+
+class _Hierarchy {
+  List<InterfaceType> interfaces;
+
+  _Hierarchy({this.interfaces});
+}
diff --git a/pkg/analyzer/lib/src/dart/element/element.dart b/pkg/analyzer/lib/src/dart/element/element.dart
index ff2cdda..332fbe9 100644
--- a/pkg/analyzer/lib/src/dart/element/element.dart
+++ b/pkg/analyzer/lib/src/dart/element/element.dart
@@ -12,6 +12,7 @@
 import 'package:analyzer/dart/element/nullability_suffix.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/error/error.dart';
+import 'package:analyzer/src/dart/analysis/session.dart';
 import 'package:analyzer/src/dart/constant/compute.dart';
 import 'package:analyzer/src/dart/constant/evaluation.dart';
 import 'package:analyzer/src/dart/constant/value.dart';
@@ -519,9 +520,8 @@
 
   @override
   List<InterfaceType> get allSupertypes {
-    List<InterfaceType> list = <InterfaceType>[];
-    collectAllSupertypes(list, thisType, thisType);
-    return list;
+    var sessionImpl = library.session as AnalysisSessionImpl;
+    return sessionImpl.classHierarchy.implementedInterfaces(this);
   }
 
   @override
@@ -1164,7 +1164,13 @@
   bool _isInterfaceTypeClass(DartType type) {
     if (type is InterfaceType) {
       var element = type.element;
-      return !element.isEnum && !element.isMixin;
+      if (element.isEnum || element.isMixin) {
+        return false;
+      }
+      if (type.isDartCoreFunction) {
+        return false;
+      }
+      return true;
     }
     return false;
   }
@@ -1172,7 +1178,9 @@
   /// Return `true` if the given [type] is an [InterfaceType] that can be used
   /// as an interface or a mixin.
   bool _isInterfaceTypeInterface(DartType type) {
-    return type is InterfaceType && !type.element.isEnum;
+    return type is InterfaceType &&
+        !type.element.isEnum &&
+        !type.isDartCoreFunction;
   }
 
   bool _safeIsOrInheritsProxy(
diff --git a/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart b/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
index 6736d8d..9c45ee3 100644
--- a/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
+++ b/pkg/analyzer/lib/src/dart/resolver/method_invocation_resolver.dart
@@ -85,13 +85,6 @@
     String name = nameNode.name;
     _currentName = Name(_definingLibraryUri, name);
 
-    //
-    // Synthetic identifiers have been already reported during parsing.
-    //
-    if (nameNode.isSynthetic) {
-      return;
-    }
-
     Expression receiver = node.realTarget;
 
     if (receiver == null) {
@@ -670,11 +663,14 @@
     } else if (receiverType is FunctionType) {
       receiverClassName = 'Function';
     }
-    _resolver.errorReporter.reportErrorForNode(
-      StaticTypeWarningCode.UNDEFINED_METHOD,
-      nameNode,
-      [name, receiverClassName],
-    );
+
+    if (!nameNode.isSynthetic) {
+      _resolver.errorReporter.reportErrorForNode(
+        StaticTypeWarningCode.UNDEFINED_METHOD,
+        nameNode,
+        [name, receiverClassName],
+      );
+    }
   }
 
   void _resolveReceiverTypeLiteral(MethodInvocation node, ClassElement receiver,
diff --git a/pkg/analyzer/lib/src/error/codes.dart b/pkg/analyzer/lib/src/error/codes.dart
index 6ec81e3..b857c95 100644
--- a/pkg/analyzer/lib/src/error/codes.dart
+++ b/pkg/analyzer/lib/src/error/codes.dart
@@ -1348,15 +1348,12 @@
           "A continue label resolves to switch, must be loop or switch member");
 
   /**
-   * It is an error to call the default List constructor with a length argument
-   * and a type argument which is potentially non-nullable.
+   * It is an error to call the default `List` constructor.
    */
-  static const CompileTimeErrorCode DEFAULT_LIST_CONSTRUCTOR_MISMATCH =
-      CompileTimeErrorCode(
-          'DEFAULT_LIST_CONSTRUCTOR_MISMATCH',
-          "A list whose values can't be 'null' can't be given an initial "
-              "length because the initial values would all be 'null'.",
-          correction: "Try removing the argument or using 'List.filled'.");
+  static const CompileTimeErrorCode DEFAULT_LIST_CONSTRUCTOR =
+      CompileTimeErrorCode('DEFAULT_LIST_CONSTRUCTOR',
+          "It is an error to call the default List constructor.",
+          correction: "Try using 'List.filled' or 'List.generate'.");
 
   /**
    * 6.2.1 Required Formals: By means of a function signature that names the
diff --git a/pkg/analyzer/lib/src/generated/error_verifier.dart b/pkg/analyzer/lib/src/generated/error_verifier.dart
index 3242a16..a67b61e 100644
--- a/pkg/analyzer/lib/src/generated/error_verifier.dart
+++ b/pkg/analyzer/lib/src/generated/error_verifier.dart
@@ -1789,9 +1789,8 @@
     }
 
     if (extendsClause != null) {
-      InterfaceType superclassType = _enclosingClass.supertype;
-      ClassElement superclassElement = superclassType?.element;
-      if (superclassElement != null && superclassElement.name == "Function") {
+      Element superElement = extendsClause.superclass.name.staticElement;
+      if (superElement != null && superElement.name == "Function") {
         _errorReporter.reportErrorForNode(
             HintCode.DEPRECATED_EXTENDS_FUNCTION, extendsClause.superclass);
       }
@@ -3300,13 +3299,11 @@
       InstanceCreationExpression node, InterfaceType type) {
     if (!_isNonNullableByDefault) return;
 
-    if (node.constructorName.name == null &&
-        node.argumentList.arguments.length == 1 &&
-        type.isDartCoreList &&
-        _typeSystem.isPotentiallyNonNullable(type.typeArguments[0])) {
+    if (node.constructorName.name == null && type.isDartCoreList) {
       _errorReporter.reportErrorForNode(
-          CompileTimeErrorCode.DEFAULT_LIST_CONSTRUCTOR_MISMATCH,
-          node.constructorName);
+        CompileTimeErrorCode.DEFAULT_LIST_CONSTRUCTOR,
+        node.constructorName,
+      );
     }
   }
 
diff --git a/pkg/analyzer/lib/src/generated/type_system.dart b/pkg/analyzer/lib/src/generated/type_system.dart
index 60443f8..3a57819 100644
--- a/pkg/analyzer/lib/src/generated/type_system.dart
+++ b/pkg/analyzer/lib/src/generated/type_system.dart
@@ -1285,7 +1285,19 @@
   TypeProvider get typeProvider;
 
   @override
-  DartType flatten(DartType type) {
+  TypeImpl flatten(DartType type) {
+    if (identical(type, UnknownInferredType.instance)) {
+      return type;
+    }
+
+    // if T is S? then flatten(T) = flatten(S)?
+    // if T is S* then flatten(T) = flatten(S)*
+    NullabilitySuffix nullabilitySuffix = type.nullabilitySuffix;
+    if (nullabilitySuffix != NullabilitySuffix.none) {
+      var S = (type as TypeImpl).withNullability(NullabilitySuffix.none);
+      return flatten(S).withNullability(nullabilitySuffix);
+    }
+
     if (type is InterfaceType) {
       // Implement the cases:
       //  - "If T = FutureOr<S> then flatten(T) = S."
@@ -2970,12 +2982,14 @@
     var T0 = _T0 as TypeImpl;
     var T1 = _T1 as TypeImpl;
 
+    var T1_nullability = T1.nullabilitySuffix;
+    var T0_nullability = T0.nullabilitySuffix;
+
     // Right Top: if `T1` is a top type (i.e. `dynamic`, or `void`, or
     // `Object?`) then `T0 <: T1`.
     if (identical(T1, DynamicTypeImpl.instance) ||
         identical(T1, VoidTypeImpl.instance) ||
-        T1.nullabilitySuffix == NullabilitySuffix.question &&
-            T1.isDartCoreObject) {
+        T1_nullability == NullabilitySuffix.question && T1.isDartCoreObject) {
       return true;
     }
 
@@ -2994,9 +3008,7 @@
     }
 
     // Right Object: if `T1` is `Object` then:
-    var T1_nullability = T1.nullabilitySuffix;
     if (T1_nullability == NullabilitySuffix.none && T1.isDartCoreObject) {
-      var T0_nullability = T0.nullabilitySuffix;
       // * if `T0` is an unpromoted type variable with bound `B`,
       //   then `T0 <: T1` iff `B <: Object`.
       // * if `T0` is a promoted type variable `X & S`,
@@ -3039,7 +3051,6 @@
     }
 
     // Left Null: if `T0` is `Null` then:
-    var T0_nullability = T0.nullabilitySuffix;
     if (T0_nullability == NullabilitySuffix.none && T0.isDartCoreNull) {
       // * If `T1` is `FutureOr<S>` for some `S`, then the query is true iff
       // `Null <: S`.
@@ -3073,6 +3084,9 @@
     // Right Legacy `T1` is `S1*` then:
     //   * `T0 <: T1` iff `T0 <: S1?`.
     if (T1_nullability == NullabilitySuffix.star) {
+      if (T1 is FunctionType && _isFunctionTypeWithNamedRequired(T0)) {
+        T1 = _functionTypeWithNamedRequired(T1 as FunctionType);
+      }
       var S1 = T1.withNullability(NullabilitySuffix.question);
       return isSubtypeOf2(T0, S1);
     }
@@ -3737,7 +3751,9 @@
         if (gParameter.isNamed) {
           var compareNames = fParameter.name.compareTo(gParameter.name);
           if (compareNames == 0) {
-            if (fParameter.isRequiredNamed && !gParameter.isRequiredNamed) {
+            var gIsRequiredOrLegacy = gParameter.isRequiredNamed ||
+                g.nullabilitySuffix == NullabilitySuffix.star;
+            if (fParameter.isRequiredNamed && !gIsRequiredOrLegacy) {
               return false;
             } else if (isSubtypeOf2(gParameter.type, fParameter.type)) {
               fIndex++;
@@ -3876,6 +3892,32 @@
     return Substitution.fromMap({element: typeProvider.objectType})
         .substituteType(type);
   }
+
+  static FunctionTypeImpl _functionTypeWithNamedRequired(FunctionType type) {
+    return FunctionTypeImpl(
+      typeFormals: type.typeFormals,
+      parameters: type.parameters.map((e) {
+        if (e.isNamed) {
+          return ParameterElementImpl.synthetic(
+            e.name,
+            e.type,
+            ParameterKind.NAMED_REQUIRED,
+          );
+        } else {
+          return e;
+        }
+      }).toList(growable: false),
+      returnType: type.returnType,
+      nullabilitySuffix: type.nullabilitySuffix,
+    );
+  }
+
+  static bool _isFunctionTypeWithNamedRequired(DartType type) {
+    if (type is FunctionType) {
+      return type.parameters.any((e) => e.isRequiredNamed);
+    }
+    return false;
+  }
 }
 
 /// A type that is being inferred but is not currently known.
diff --git a/pkg/analyzer/lib/src/test_utilities/find_node.dart b/pkg/analyzer/lib/src/test_utilities/find_node.dart
index c53961a..1b70ef0 100644
--- a/pkg/analyzer/lib/src/test_utilities/find_node.dart
+++ b/pkg/analyzer/lib/src/test_utilities/find_node.dart
@@ -31,6 +31,10 @@
     return _node(search, (n) => n is AssignmentExpression);
   }
 
+  AwaitExpression awaitExpression(String search) {
+    return _node(search, (n) => n is AwaitExpression);
+  }
+
   BinaryExpression binary(String search) {
     return _node(search, (n) => n is BinaryExpression);
   }
diff --git a/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart b/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart
index 9d1f9f9..4566120 100644
--- a/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart
+++ b/pkg/analyzer/lib/src/test_utilities/mock_sdk.dart
@@ -222,6 +222,8 @@
 
 abstract class Converter<S, T> implements StreamTransformer {}
 
+abstract class Encoding {}
+
 class JsonDecoder extends Converter<String, Object> {}
 ''',
     )
@@ -840,6 +842,8 @@
       '''
 library dart.io;
 
+import 'dart:convert';
+
 abstract class Directory implements FileSystemEntity {
   factory Directory(String path) {
     throw 0;
@@ -882,11 +886,68 @@
   static FileSystemEntityType typeSync(
     String path, {bool followLinks: true}) => throw 0;
 }
+
+enum ProcessStartMode {
+  normal,
+}
+
+abstract class Process {
+  external static Future<Process> start(
+    String executable,
+    List<String> arguments, {
+    String? workingDirectory,
+    Map<String, String>? environment,
+    bool includeParentEnvironment: true,
+    bool runInShell: false,
+    ProcessStartMode mode: ProcessStartMode.normal,
+  });
+
+  external static Future<ProcessResult> run(
+    String executable,
+    List<String> arguments, {
+    String? workingDirectory,
+    Map<String, String>? environment,
+    bool includeParentEnvironment: true,
+    bool runInShell: false,
+    Encoding? stdoutEncoding,
+    Encoding? stderrEncoding,
+  });
+}
 ''',
     )
   ],
 );
 
+final MockSdkLibrary _LIB_ISOLATE = MockSdkLibrary([
+  MockSdkLibraryUnit(
+    'dart:isolate',
+    '$sdkRoot/lib/isolate/isolate.dart',
+    '''
+library dart.isolate;
+
+abstract class SendPort {}
+
+class Isolate {
+  external static Future<Isolate> spawnUri(
+    Uri uri,
+    List<String> args,
+    var message, {
+    bool paused = false,
+    SendPort? onExit,
+    SendPort? onError,
+    bool errorsAreFatal = true,
+    bool? checked,
+    Map<String, String>? environment,
+    @deprecated Uri? packageRoot,
+    Uri? packageConfig,
+    bool automaticPackageResolution = false,
+    String? debugName,
+  });
+}
+''',
+  )
+]);
+
 final MockSdkLibrary _LIB_MATH = MockSdkLibrary(
   [
     MockSdkLibraryUnit(
@@ -927,6 +988,7 @@
   _LIB_CONVERT,
   _LIB_FFI,
   _LIB_IO,
+  _LIB_ISOLATE,
   _LIB_MATH,
   _LIB_HTML_DART2JS,
   _LIB_INTERCEPTORS,
@@ -941,6 +1003,7 @@
   'ffi': 'const LibraryInfo("ffi/ffi.dart")',
   'html': 'const LibraryInfo("html/dart2js/html_dart2js.dart")',
   'io': 'const LibraryInfo("io/io.dart")',
+  'isolate': 'const LibraryInfo("io/isolate.dart")',
   'math': 'const LibraryInfo("math/math.dart")',
 };
 
diff --git a/pkg/analyzer/test/src/dart/element/element_test.dart b/pkg/analyzer/test/src/dart/element/element_test.dart
index 3486a85..2e0b1b2 100644
--- a/pkg/analyzer/test/src/dart/element/element_test.dart
+++ b/pkg/analyzer/test/src/dart/element/element_test.dart
@@ -52,53 +52,6 @@
 
 @reflectiveTest
 class ClassElementImplTest extends AbstractTypeTest {
-  void test_getAllSupertypes_interface() {
-    ClassElement classA = class_(name: 'A');
-    ClassElement classB =
-        ElementFactory.classElement("B", interfaceTypeStar(classA));
-    ClassElementImpl elementC = ElementFactory.classElement2("C");
-    InterfaceType typeObject = classA.supertype;
-    InterfaceType typeA = interfaceTypeStar(classA);
-    InterfaceType typeB = interfaceTypeStar(classB);
-    InterfaceType typeC = interfaceTypeStar(elementC);
-    elementC.interfaces = <InterfaceType>[typeB];
-    List<InterfaceType> supers = elementC.allSupertypes;
-    List<InterfaceType> types = <InterfaceType>[];
-    types.addAll(supers);
-    expect(types.contains(typeA), isTrue);
-    expect(types.contains(typeB), isTrue);
-    expect(types.contains(typeObject), isTrue);
-    expect(types.contains(typeC), isFalse);
-  }
-
-  void test_getAllSupertypes_mixins() {
-    ClassElement classA = class_(name: 'A');
-    ClassElement classB =
-        ElementFactory.classElement("B", interfaceTypeStar(classA));
-    var classC = ElementFactory.classElement2("C");
-    InterfaceType typeObject = classA.supertype;
-    InterfaceType typeA = interfaceTypeStar(classA);
-    InterfaceType typeB = interfaceTypeStar(classB);
-    InterfaceType typeC = interfaceTypeStar(classC);
-    classC.mixins = <InterfaceType>[typeB];
-    List<InterfaceType> supers = classC.allSupertypes;
-    List<InterfaceType> types = <InterfaceType>[];
-    types.addAll(supers);
-    expect(types.contains(typeA), isTrue);
-    expect(types.contains(typeB), isTrue);
-    expect(types.contains(typeObject), isTrue);
-    expect(types.contains(typeC), isFalse);
-  }
-
-  void test_getAllSupertypes_recursive() {
-    var classA = class_(name: 'A');
-    ClassElementImpl classB =
-        ElementFactory.classElement("B", interfaceTypeStar(classA));
-    classA.supertype = interfaceTypeStar(classB);
-    List<InterfaceType> supers = classB.allSupertypes;
-    expect(supers, hasLength(1));
-  }
-
   void test_getField() {
     var classA = class_(name: 'A');
     String fieldName = "f";
diff --git a/pkg/analyzer/test/src/dart/element/flatten_type_test.dart b/pkg/analyzer/test/src/dart/element/flatten_type_test.dart
new file mode 100644
index 0000000..a27da75
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/element/flatten_type_test.dart
@@ -0,0 +1,98 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/dart/analysis/features.dart';
+import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/dart/element/type_provider.dart';
+import 'package:analyzer/src/generated/resolver.dart' show TypeSystemImpl;
+import 'package:analyzer/src/generated/type_system.dart';
+import 'package:test/test.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import '../../../generated/elements_types_mixin.dart';
+import '../../../generated/test_analysis_context.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(FlattenTypeTest);
+  });
+}
+
+@reflectiveTest
+class FlattenTypeTest with ElementsTypesMixin {
+  @override
+  TypeProvider typeProvider;
+
+  TypeSystemImpl typeSystem;
+
+  FeatureSet get testFeatureSet {
+    return FeatureSet.forTesting(
+      additionalFeatures: [Feature.non_nullable],
+    );
+  }
+
+  void setUp() {
+    var analysisContext = TestAnalysisContext(
+      featureSet: testFeatureSet,
+    );
+    typeProvider = analysisContext.typeProviderNonNullableByDefault;
+    typeSystem = analysisContext.typeSystemNonNullableByDefault;
+  }
+
+  test_dynamic() {
+    _check(dynamicNone, 'dynamic');
+  }
+
+  test_interfaceType_none() {
+    _check(futureNone(intNone), 'int');
+    _check(futureNone(intQuestion), 'int?');
+    _check(futureNone(intStar), 'int*');
+
+    // otherwise if T is FutureOr<S> then flatten(T) = S
+    _check(futureOrNone(intNone), 'int');
+    _check(futureOrNone(intQuestion), 'int?');
+    _check(futureOrNone(intStar), 'int*');
+  }
+
+  test_interfaceType_question() {
+    _check(futureQuestion(intNone), 'int?');
+    _check(futureQuestion(intQuestion), 'int?');
+    _check(futureQuestion(intStar), 'int?');
+
+    _check(futureQuestion(listNone(intNone)), 'List<int>?');
+    _check(futureQuestion(listQuestion(intNone)), 'List<int>?');
+    _check(futureQuestion(listStar(intNone)), 'List<int>?');
+
+    _check(futureOrQuestion(intNone), 'int?');
+    _check(futureOrQuestion(intQuestion), 'int?');
+    _check(futureOrQuestion(intStar), 'int?');
+  }
+
+  test_interfaceType_star() {
+    _check(futureStar(intNone), 'int*');
+    _check(futureStar(intQuestion), 'int*');
+    _check(futureStar(intStar), 'int*');
+
+    _check(futureStar(listNone(intNone)), 'List<int>*');
+    _check(futureStar(listQuestion(intNone)), 'List<int>*');
+    _check(futureStar(listStar(intNone)), 'List<int>*');
+
+    _check(futureOrStar(intNone), 'int*');
+    _check(futureOrStar(intQuestion), 'int*');
+    _check(futureOrStar(intStar), 'int*');
+  }
+
+  test_unknownInferredType() {
+    var type = UnknownInferredType.instance;
+    expect(typeSystem.flatten(type), same(type));
+  }
+
+  void _check(DartType T, String expected) {
+    var result = typeSystem.flatten(T);
+    expect(
+      result.getDisplayString(withNullability: true),
+      expected,
+    );
+  }
+}
diff --git a/pkg/analyzer/test/src/dart/element/subtype_test.dart b/pkg/analyzer/test/src/dart/element/subtype_test.dart
index 21a9c25..66d8fb5 100644
--- a/pkg/analyzer/test/src/dart/element/subtype_test.dart
+++ b/pkg/analyzer/test/src/dart/element/subtype_test.dart
@@ -2220,6 +2220,36 @@
     );
   }
 
+  test_functionType_requiredNamedParameter_03() {
+    var F0 = functionTypeStar(
+      returnType: voidNone,
+      parameters: [
+        namedParameter(name: 'a', type: intStar),
+      ],
+    );
+
+    var F1 = functionTypeNone(
+      returnType: voidNone,
+      parameters: [
+        namedRequiredParameter(name: 'a', type: intNone),
+      ],
+    );
+
+    isSubtype(
+      F0,
+      F1,
+      strT0: 'void Function({int* a})*',
+      strT1: 'void Function({required int a})',
+    );
+
+    isSubtype(
+      F1,
+      F0,
+      strT0: 'void Function({required int a})',
+      strT1: 'void Function({int* a})*',
+    );
+  }
+
   test_futureOr_01() {
     isSubtype(
       intStar,
diff --git a/pkg/analyzer/test/src/dart/element/test_all.dart b/pkg/analyzer/test/src/dart/element/test_all.dart
index 8a98bd6..43eab7c 100644
--- a/pkg/analyzer/test/src/dart/element/test_all.dart
+++ b/pkg/analyzer/test/src/dart/element/test_all.dart
@@ -6,6 +6,7 @@
 
 import 'element_test.dart' as element;
 import 'factor_type_test.dart' as factor_type;
+import 'flatten_type_test.dart' as flatten_type;
 import 'function_type_test.dart' as function_type;
 import 'inheritance_manager3_test.dart' as inheritance_manager3;
 import 'least_upper_bound_helper_test.dart' as least_upper_bound_helper;
@@ -25,6 +26,7 @@
   defineReflectiveSuite(() {
     element.main();
     factor_type.main();
+    flatten_type.main();
     function_type.main();
     inheritance_manager3.main();
     least_upper_bound_helper.main();
diff --git a/pkg/analyzer/test/src/dart/resolution/await_expression_test.dart b/pkg/analyzer/test/src/dart/resolution/await_expression_test.dart
new file mode 100644
index 0000000..74b5b02
--- /dev/null
+++ b/pkg/analyzer/test/src/dart/resolution/await_expression_test.dart
@@ -0,0 +1,80 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:analyzer/dart/analysis/features.dart';
+import 'package:analyzer/src/dart/analysis/experiments.dart';
+import 'package:analyzer/src/generated/engine.dart';
+import 'package:test_reflective_loader/test_reflective_loader.dart';
+
+import 'driver_resolution.dart';
+
+main() {
+  defineReflectiveSuite(() {
+    defineReflectiveTests(AwaitExpressionResolutionTest);
+    defineReflectiveTests(AwaitExpressionResolutionWithNullSafetyTest);
+  });
+}
+
+@reflectiveTest
+class AwaitExpressionResolutionTest extends DriverResolutionTest {
+  test_future() async {
+    await assertNoErrorsInCode(r'''
+import 'dart:async';
+
+f(Future<int> a) async {
+  await a;
+}
+''');
+
+    assertType(findNode.awaitExpression('await a'), 'int');
+  }
+
+  test_futureOr() async {
+    await assertNoErrorsInCode(r'''
+import 'dart:async';
+
+f(FutureOr<int> a) async {
+  await a;
+}
+''');
+
+    assertType(findNode.awaitExpression('await a'), 'int');
+  }
+}
+
+@reflectiveTest
+class AwaitExpressionResolutionWithNullSafetyTest extends DriverResolutionTest {
+  @override
+  AnalysisOptionsImpl get analysisOptions => AnalysisOptionsImpl()
+    ..contextFeatures = FeatureSet.fromEnableFlags(
+      [EnableString.non_nullable],
+    );
+
+  @override
+  bool get typeToStringWithNullability => true;
+
+  test_futureOrQ() async {
+    await assertNoErrorsInCode(r'''
+import 'dart:async';
+
+f(FutureOr<int>? a) async {
+  await a;
+}
+''');
+
+    assertType(findNode.awaitExpression('await a'), 'int?');
+  }
+
+  test_futureQ() async {
+    await assertNoErrorsInCode(r'''
+import 'dart:async';
+
+f(Future<int>? a) async {
+  await a;
+}
+''');
+
+    assertType(findNode.awaitExpression('await a'), 'int?');
+  }
+}
diff --git a/pkg/analyzer/test/src/dart/resolution/class_alias_test.dart b/pkg/analyzer/test/src/dart/resolution/class_alias_test.dart
index b077ff5..da98f88 100644
--- a/pkg/analyzer/test/src/dart/resolution/class_alias_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/class_alias_test.dart
@@ -4,6 +4,7 @@
 
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
+import '../../../generated/elements_types_mixin.dart';
 import 'driver_resolution.dart';
 
 main() {
@@ -13,7 +14,8 @@
 }
 
 @reflectiveTest
-class ClassAliasDriverResolutionTest extends DriverResolutionTest {
+class ClassAliasDriverResolutionTest extends DriverResolutionTest
+    with ElementsTypesMixin {
   test_defaultConstructor() async {
     await assertNoErrorsInCode(r'''
 class A {}
@@ -43,6 +45,51 @@
     assertElementTypeStrings(x.interfaces, ['C']);
   }
 
+  test_element_typeFunction_extends() async {
+    await assertNoErrorsInCode(r'''
+class A {}
+class X = Function with A;
+''');
+    var x = findElement.class_('X');
+    assertType(x.supertype, 'Object');
+  }
+
+  test_element_typeFunction_implements() async {
+    await assertNoErrorsInCode(r'''
+class A {}
+class B {}
+class X = Object with A implements A, Function, B;
+''');
+    var a = findElement.class_('A');
+    var b = findElement.class_('B');
+    var x = findElement.class_('X');
+    assertElementTypes(
+      x.interfaces,
+      [
+        interfaceTypeStar(a),
+        interfaceTypeStar(b),
+      ],
+    );
+  }
+
+  test_element_typeFunction_with() async {
+    await assertNoErrorsInCode(r'''
+class A {}
+class B {}
+class X = Object with A, Function, B;
+''');
+    var a = findElement.class_('A');
+    var b = findElement.class_('B');
+    var x = findElement.class_('X');
+    assertElementTypes(
+      x.mixins,
+      [
+        interfaceTypeStar(a),
+        interfaceTypeStar(b),
+      ],
+    );
+  }
+
   @failingTest
   test_implicitConstructors_const() async {
     await assertNoErrorsInCode(r'''
diff --git a/pkg/analyzer/test/src/dart/resolution/class_test.dart b/pkg/analyzer/test/src/dart/resolution/class_test.dart
index 953b08a..9d2f341 100644
--- a/pkg/analyzer/test/src/dart/resolution/class_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/class_test.dart
@@ -130,6 +130,54 @@
     );
   }
 
+  test_element_typeFunction_extends() async {
+    await assertErrorsInCode(r'''
+class A extends Function {}
+''', [
+      error(HintCode.DEPRECATED_EXTENDS_FUNCTION, 16, 8),
+    ]);
+    var a = findElement.class_('A');
+    assertType(a.supertype, 'Object');
+  }
+
+  test_element_typeFunction_implements() async {
+    await assertNoErrorsInCode(r'''
+class A {}
+class B {}
+class C implements A, Function, B {}
+''');
+    var a = findElement.class_('A');
+    var b = findElement.class_('B');
+    var c = findElement.class_('C');
+    assertElementTypes(
+      c.interfaces,
+      [
+        interfaceTypeStar(a),
+        interfaceTypeStar(b),
+      ],
+    );
+  }
+
+  test_element_typeFunction_with() async {
+    await assertErrorsInCode(r'''
+class A {}
+class B {}
+class C extends Object with A, Function, B {}
+''', [
+      error(HintCode.DEPRECATED_MIXIN_FUNCTION, 53, 8),
+    ]);
+    var a = findElement.class_('A');
+    var b = findElement.class_('B');
+    var c = findElement.class_('C');
+    assertElementTypes(
+      c.mixins,
+      [
+        interfaceTypeStar(a),
+        interfaceTypeStar(b),
+      ],
+    );
+  }
+
   test_error_conflictingConstructorAndStaticField_field() async {
     await assertErrorsInCode(r'''
 class C {
diff --git a/pkg/analyzer/test/src/dart/resolution/constant_test.dart b/pkg/analyzer/test/src/dart/resolution/constant_test.dart
index ecd3b1d..2ad2114 100644
--- a/pkg/analyzer/test/src/dart/resolution/constant_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/constant_test.dart
@@ -6,9 +6,11 @@
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:analyzer/src/dart/analysis/experiments.dart';
+import 'package:analyzer/src/dart/constant/value.dart';
 import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/generated/engine.dart';
+import 'package:analyzer/src/test_utilities/find_element.dart';
 import 'package:test/test.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
 
@@ -191,6 +193,37 @@
     expect(a.computeConstantValue().toIntValue(), 42);
   }
 
+  test_imported_super_defaultFieldFormalParameter() async {
+    newFile('/test/lib/a.dart', content: r'''
+import 'test.dart';
+
+class A {
+  static const B b = const B();
+
+  final bool f1;
+  final bool f2;
+
+  const A({this.f1: false}) : this.f2 = f1 && true;
+}
+''');
+
+    await assertNoErrorsInCode(r'''
+import 'a.dart';
+
+class B extends A {
+  const B() : super();
+}
+''');
+
+    result = await resolveFile(convertPath('/test/lib/a.dart'));
+    assertErrorsInResolvedUnit(result, []);
+
+    var bElement = FindElement(result.unit).field('b') as ConstVariableElement;
+    var bValue = bElement.evaluationResult.value;
+    var superFields = bValue.getField(GenericState.SUPERCLASS_FIELD);
+    expect(superFields.getField('f1').toBoolValue(), false);
+  }
+
   test_local_prefixedIdentifier_staticField_extension() async {
     await assertNoErrorsInCode(r'''
 const a = E.f;
diff --git a/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart b/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
index 9e13317..c6ce42f 100644
--- a/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
+++ b/pkg/analyzer/test/src/dart/resolution/method_invocation_test.dart
@@ -6,6 +6,7 @@
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/element.dart';
 import 'package:analyzer/src/dart/analysis/experiments.dart';
+import 'package:analyzer/src/dart/error/syntactic_errors.dart';
 import 'package:analyzer/src/error/codes.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:test_reflective_loader/test_reflective_loader.dart';
@@ -1580,6 +1581,31 @@
     );
   }
 
+  test_syntheticName() async {
+    // This code is invalid, and the constructor initializer has a method
+    // invocation with a synthetic name. But we should still resolve the
+    // invocation, and resolve all its arguments.
+    await assertErrorsInCode(r'''
+class A {
+  A() : B(1 + 2, [0]);
+}
+''', [
+      error(ParserErrorCode.MISSING_ASSIGNMENT_IN_INITIALIZER, 18, 1),
+      error(CompileTimeErrorCode.INITIALIZER_FOR_NON_EXISTENT_FIELD, 18, 13),
+    ]);
+
+    assertMethodInvocation2(
+      findNode.methodInvocation(');'),
+      element: null,
+      typeArgumentTypes: [],
+      invokeType: 'dynamic',
+      type: 'dynamic',
+    );
+
+    assertType(findNode.binary('1 + 2'), 'int');
+    assertType(findNode.listLiteral('[0]'), 'List<int>');
+  }
+
   test_typeArgumentTypes_generic_inferred() async {
     await assertErrorsInCode(r'''
 U foo<T, U>(T a) => null;
@@ -1794,66 +1820,6 @@
     );
   }
 
-  test_nullShorting_cascade_firstMethodInvocation() async {
-    await assertNoErrorsInCode(r'''
-class A {
-  int foo() => 0;
-  int bar() => 0;
-}
-
-main(A? a) {
-  a?..foo()..bar();
-}
-''');
-
-    assertMethodInvocation2(
-      findNode.methodInvocation('..foo()'),
-      element: findElement.method('foo'),
-      typeArgumentTypes: [],
-      invokeType: 'int Function()',
-      type: 'int',
-    );
-
-    assertMethodInvocation2(
-      findNode.methodInvocation('..bar()'),
-      element: findElement.method('bar'),
-      typeArgumentTypes: [],
-      invokeType: 'int Function()',
-      type: 'int',
-    );
-
-    assertType(findNode.cascade('a?'), 'A?');
-  }
-
-  test_nullShorting_cascade_firstPropertyAccess() async {
-    await assertNoErrorsInCode(r'''
-class A {
-  int get foo => 0;
-  int bar() => 0;
-}
-
-main(A? a) {
-  a?..foo..bar();
-}
-''');
-
-    assertPropertyAccess2(
-      findNode.propertyAccess('..foo'),
-      element: findElement.getter('foo'),
-      type: 'int',
-    );
-
-    assertMethodInvocation2(
-      findNode.methodInvocation('..bar()'),
-      element: findElement.method('bar'),
-      typeArgumentTypes: [],
-      invokeType: 'int Function()',
-      type: 'int',
-    );
-
-    assertType(findNode.cascade('a?'), 'A?');
-  }
-
   test_hasReceiver_interfaceTypeQ_defined() async {
     await assertErrorsInCode(r'''
 class A {
@@ -2016,4 +1982,64 @@
       type: 'void',
     );
   }
+
+  test_nullShorting_cascade_firstMethodInvocation() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  int foo() => 0;
+  int bar() => 0;
+}
+
+main(A? a) {
+  a?..foo()..bar();
+}
+''');
+
+    assertMethodInvocation2(
+      findNode.methodInvocation('..foo()'),
+      element: findElement.method('foo'),
+      typeArgumentTypes: [],
+      invokeType: 'int Function()',
+      type: 'int',
+    );
+
+    assertMethodInvocation2(
+      findNode.methodInvocation('..bar()'),
+      element: findElement.method('bar'),
+      typeArgumentTypes: [],
+      invokeType: 'int Function()',
+      type: 'int',
+    );
+
+    assertType(findNode.cascade('a?'), 'A?');
+  }
+
+  test_nullShorting_cascade_firstPropertyAccess() async {
+    await assertNoErrorsInCode(r'''
+class A {
+  int get foo => 0;
+  int bar() => 0;
+}
+
+main(A? a) {
+  a?..foo..bar();
+}
+''');
+
+    assertPropertyAccess2(
+      findNode.propertyAccess('..foo'),
+      element: findElement.getter('foo'),
+      type: 'int',
+    );
+
+    assertMethodInvocation2(
+      findNode.methodInvocation('..bar()'),
+      element: findElement.method('bar'),
+      typeArgumentTypes: [],
+      invokeType: 'int Function()',
+      type: 'int',
+    );
+
+    assertType(findNode.cascade('a?'), 'A?');
+  }
 }
diff --git a/pkg/analyzer/test/src/dart/resolution/test_all.dart b/pkg/analyzer/test/src/dart/resolution/test_all.dart
index 91f8c97..cc7c7b9 100644
--- a/pkg/analyzer/test/src/dart/resolution/test_all.dart
+++ b/pkg/analyzer/test/src/dart/resolution/test_all.dart
@@ -6,6 +6,7 @@
 
 import 'assignment_test.dart' as assignment;
 import 'ast_rewrite_test.dart' as ast_rewrite;
+import 'await_expression_test.dart' as await_expression;
 import 'binary_expression_test.dart' as binary_expression;
 import 'class_alias_test.dart' as class_alias;
 import 'class_test.dart' as class_resolution;
@@ -56,6 +57,7 @@
   defineReflectiveSuite(() {
     assignment.main();
     ast_rewrite.main();
+    await_expression.main();
     binary_expression.main();
     class_alias.main();
     class_resolution.main();
diff --git a/pkg/analyzer/test/src/diagnostics/default_list_constructor_mismatch_test.dart b/pkg/analyzer/test/src/diagnostics/default_list_constructor_test.dart
similarity index 79%
rename from pkg/analyzer/test/src/diagnostics/default_list_constructor_mismatch_test.dart
rename to pkg/analyzer/test/src/diagnostics/default_list_constructor_test.dart
index 64b11f1..5609204d 100644
--- a/pkg/analyzer/test/src/diagnostics/default_list_constructor_mismatch_test.dart
+++ b/pkg/analyzer/test/src/diagnostics/default_list_constructor_test.dart
@@ -24,10 +24,9 @@
 
   test_inferredType() async {
     await assertErrorsInCode('''
-class C {}
-List<C> v = List(5);
+List<int> v = List(5);
 ''', [
-      error(CompileTimeErrorCode.DEFAULT_LIST_CONSTRUCTOR_MISMATCH, 23, 4),
+      error(CompileTimeErrorCode.DEFAULT_LIST_CONSTRUCTOR, 14, 4),
     ]);
   }
 
@@ -35,7 +34,7 @@
     await assertErrorsInCode('''
 var l = new List<int>(3);
 ''', [
-      error(CompileTimeErrorCode.DEFAULT_LIST_CONSTRUCTOR_MISMATCH, 12, 9),
+      error(CompileTimeErrorCode.DEFAULT_LIST_CONSTRUCTOR, 12, 9),
     ]);
   }
 
@@ -46,9 +45,11 @@
   }
 
   test_nullableType() async {
-    await assertNoErrorsInCode('''
-var l = new List<String?>(3);
-''');
+    await assertErrorsInCode('''
+var l = new List<int?>(3);
+''', [
+      error(CompileTimeErrorCode.DEFAULT_LIST_CONSTRUCTOR, 12, 10),
+    ]);
   }
 
   test_optOut() async {
@@ -64,7 +65,7 @@
   var l = new List<T>(3);
 }
 ''', [
-      error(CompileTimeErrorCode.DEFAULT_LIST_CONSTRUCTOR_MISMATCH, 27, 7),
+      error(CompileTimeErrorCode.DEFAULT_LIST_CONSTRUCTOR, 27, 7),
     ]);
   }
 }
diff --git a/pkg/analyzer/test/src/diagnostics/test_all.dart b/pkg/analyzer/test/src/diagnostics/test_all.dart
index 523f762..67486e1 100644
--- a/pkg/analyzer/test/src/diagnostics/test_all.dart
+++ b/pkg/analyzer/test/src/diagnostics/test_all.dart
@@ -58,8 +58,7 @@
 import 'const_spread_expected_map_test.dart' as const_spread_expected_map;
 import 'dead_code_test.dart' as dead_code;
 import 'dead_null_aware_expression_test.dart' as dead_null_aware_expression;
-import 'default_list_constructor_mismatch_test.dart'
-    as default_list_constructor_mismatch;
+import 'default_list_constructor_test.dart' as default_list_constructor;
 import 'default_value_in_function_type_test.dart'
     as default_value_in_function_type;
 import 'default_value_in_function_typed_parameter_test.dart'
@@ -543,7 +542,7 @@
     const_spread_expected_map.main();
     dead_code.main();
     dead_null_aware_expression.main();
-    default_list_constructor_mismatch.main();
+    default_list_constructor.main();
     default_value_in_function_type.main();
     default_value_in_function_typed_parameter.main();
     default_value_in_redirecting_factory_constructor.main();
diff --git a/pkg/analyzer/test/utils/package_root.dart b/pkg/analyzer/test/utils/package_root.dart
index 1957a61..8055970 100644
--- a/pkg/analyzer/test/utils/package_root.dart
+++ b/pkg/analyzer/test/utils/package_root.dart
@@ -11,7 +11,9 @@
 String get packageRoot {
   // If the package root directory is specified on the command line using
   // -DpkgRoot=..., use it.
-  String pkgRootVar = const String.fromEnvironment('pkgRoot');
+  String pkgRootVar = const bool.hasEnvironment('pkgRoot')
+      ? const String.fromEnvironment('pkgRoot')
+      : null;
   if (pkgRootVar != null) {
     String path = pathos.join(Directory.current.path, pkgRootVar);
     if (!path.endsWith(pathos.separator)) path += pathos.separator;
diff --git a/pkg/analyzer_cli/analysis_options.yaml b/pkg/analyzer_cli/analysis_options.yaml
index 7a3c1f2..ff9fb29 100644
--- a/pkg/analyzer_cli/analysis_options.yaml
+++ b/pkg/analyzer_cli/analysis_options.yaml
@@ -31,7 +31,7 @@
     - library_prefixes
     - no_duplicate_case_values
     - null_closures
-    #- omit_local_variable_types # 273
+    - omit_local_variable_types
     - prefer_adjacent_string_concatenation
     - prefer_collection_literals
     - prefer_conditional_assignment
diff --git a/pkg/analyzer_cli/bin/analyzer.dart b/pkg/analyzer_cli/bin/analyzer.dart
index 3568e65..4381de7 100644
--- a/pkg/analyzer_cli/bin/analyzer.dart
+++ b/pkg/analyzer_cli/bin/analyzer.dart
@@ -12,7 +12,7 @@
 /// [sendPort] may be passed in when started in an isolate. If provided, it is
 /// used for bazel worker communication instead of stdin/stdout.
 void main(List<String> args, [SendPort sendPort]) async {
-  CommandLineStarter starter = CommandLineStarter();
+  var starter = CommandLineStarter();
 
   // Wait for the starter to complete.
   await starter.start(args, sendPort: sendPort);
diff --git a/pkg/analyzer_cli/lib/src/analyzer_impl.dart b/pkg/analyzer_cli/lib/src/analyzer_impl.dart
index 0f45e9f..7bb46af 100644
--- a/pkg/analyzer_cli/lib/src/analyzer_impl.dart
+++ b/pkg/analyzer_cli/lib/src/analyzer_impl.dart
@@ -63,7 +63,7 @@
     if (unit == null || !units.add(unit)) {
       return;
     }
-    Source source = unit.source;
+    var source = unit.source;
     if (source != null) {
       files.add(source.fullName);
     }
@@ -80,14 +80,14 @@
     }
     // Add compilation units.
     addCompilationUnitSource(library.definingCompilationUnit, units);
-    for (CompilationUnitElement child in library.parts) {
+    for (var child in library.parts) {
       addCompilationUnitSource(child, units);
     }
     // Add referenced libraries.
-    for (LibraryElement child in library.importedLibraries) {
+    for (var child in library.importedLibraries) {
       addLibrarySources(child, libraries, units);
     }
-    for (LibraryElement child in library.exportedLibraries) {
+    for (var child in library.exportedLibraries) {
       addLibrarySources(child, libraries, units);
     }
   }
@@ -107,9 +107,9 @@
 
   /// Returns the maximal [ErrorSeverity] of the recorded errors.
   ErrorSeverity computeMaxErrorSeverity() {
-    ErrorSeverity status = ErrorSeverity.NONE;
-    for (ErrorsResult result in errorsResults) {
-      for (AnalysisError error in result.errors) {
+    var status = ErrorSeverity.NONE;
+    for (var result in errorsResults) {
+      for (var error in result.errors) {
         if (_defaultSeverityProcessor(error) == null) {
           continue;
         }
@@ -123,10 +123,10 @@
   Future<void> prepareErrors() async {
     // TODO(brianwilkerson) Determine whether this await is necessary.
     await null;
-    PerformanceTag previous = _prepareErrorsTag.makeCurrent();
+    var previous = _prepareErrorsTag.makeCurrent();
     try {
-      for (String path in files) {
-        ErrorsResult errorsResult = await analysisDriver.getErrors(path);
+      for (var path in files) {
+        var errorsResult = await analysisDriver.getErrors(path);
         errorsResults.add(errorsResult);
       }
     } finally {
@@ -145,7 +145,7 @@
   void setupForAnalysis() {
     files.clear();
     errorsResults.clear();
-    Uri libraryUri = libraryFile.uri;
+    var libraryUri = libraryFile.uri;
     if (libraryUri.scheme == 'package' && libraryUri.pathSegments.isNotEmpty) {
       _selfPackageName = libraryUri.pathSegments[0];
     }
@@ -157,13 +157,13 @@
     await null;
     // Don't try to analyze parts.
     if (libraryFile.isPart) {
-      String libraryPath = libraryFile.path;
+      var libraryPath = libraryFile.path;
       stderr.writeln('Only libraries can be analyzed.');
       stderr.writeln('$libraryPath is a part and cannot be analyzed.');
       return ErrorSeverity.ERROR;
     }
 
-    LibraryElement libraryElement = await _resolveLibrary();
+    var libraryElement = await _resolveLibrary();
     prepareSources(libraryElement);
     await prepareErrors();
 
@@ -183,7 +183,7 @@
 
   /// Returns true if we want to report diagnostics for this library.
   bool _isAnalyzedLibrary(LibraryElement library) {
-    Source source = library.source;
+    var source = library.source;
     switch (source.uriKind) {
       case UriKind.DART_URI:
         return options.showSdkWarnings;
@@ -202,7 +202,7 @@
     if (uri.scheme != 'package' || uri.pathSegments.isEmpty) {
       return false;
     }
-    String packageName = uri.pathSegments.first;
+    var packageName = uri.pathSegments.first;
     if (packageName == _selfPackageName) {
       return true;
     } else if (!options.showPackageWarnings) {
@@ -217,11 +217,11 @@
   // TODO(devoncarew): This is never called.
   void _printColdPerf() {
     // Print cold VM performance numbers.
-    int totalTime = currentTimeMillis - startTime;
-    int otherTime = totalTime;
-    for (PerformanceTag tag in PerformanceTag.all) {
+    var totalTime = currentTimeMillis - startTime;
+    var otherTime = totalTime;
+    for (var tag in PerformanceTag.all) {
       if (tag != PerformanceTag.unknown) {
-        int tagTime = tag.elapsedMs;
+        var tagTime = tag.elapsedMs;
         outSink.writeln('${tag.label}-cold:$tagTime');
         otherTime -= tagTime;
       }
@@ -233,12 +233,11 @@
   Future<LibraryElement> _resolveLibrary() async {
     // TODO(brianwilkerson) Determine whether this await is necessary.
     await null;
-    PerformanceTag previous = _resolveLibraryTag.makeCurrent();
+    var previous = _resolveLibraryTag.makeCurrent();
     try {
-      String libraryPath = libraryFile.path;
+      var libraryPath = libraryFile.path;
       analysisDriver.priorityFiles = [libraryPath];
-      UnitElementResult elementResult =
-          await analysisDriver.getUnitElement(libraryPath);
+      var elementResult = await analysisDriver.getUnitElement(libraryPath);
       return elementResult.element.library;
     } finally {
       previous.makeCurrent();
@@ -247,11 +246,11 @@
 
   /// Return `true` if the given [pathName] is in the Pub cache.
   static bool _isPathInPubCache(String pathName) {
-    List<String> parts = path.split(pathName);
+    var parts = path.split(pathName);
     if (parts.contains('.pub-cache')) {
       return true;
     }
-    for (int i = 0; i < parts.length - 2; i++) {
+    for (var i = 0; i < parts.length - 2; i++) {
       if (parts[i] == 'Pub' && parts[i + 1] == 'Cache') {
         return true;
       }
diff --git a/pkg/analyzer_cli/lib/src/batch_mode.dart b/pkg/analyzer_cli/lib/src/batch_mode.dart
index e0c8731..f147d64 100644
--- a/pkg/analyzer_cli/lib/src/batch_mode.dart
+++ b/pkg/analyzer_cli/lib/src/batch_mode.dart
@@ -23,14 +23,13 @@
   /// use in unit testing.
   void runAsBatch(List<String> sharedArgs, BatchRunnerHandler handler) {
     outSink.writeln('>>> BATCH START');
-    Stopwatch stopwatch = Stopwatch();
+    var stopwatch = Stopwatch();
     stopwatch.start();
-    int testsFailed = 0;
-    int totalTests = 0;
-    ErrorSeverity batchResult = ErrorSeverity.NONE;
+    var testsFailed = 0;
+    var totalTests = 0;
+    var batchResult = ErrorSeverity.NONE;
     // Read line from stdin.
-    Stream<String> cmdLine =
-        stdin.transform(utf8.decoder).transform(LineSplitter());
+    var cmdLine = stdin.transform(utf8.decoder).transform(LineSplitter());
     cmdLine.listen((String line) async {
       // TODO(brianwilkerson) Determine whether this await is necessary.
       await null;
@@ -51,15 +50,15 @@
       // Analyze single set of arguments.
       try {
         totalTests++;
-        ErrorSeverity result = await handler(args);
-        bool resultPass = result != ErrorSeverity.ERROR;
+        var result = await handler(args);
+        var resultPass = result != ErrorSeverity.ERROR;
         if (!resultPass) {
           testsFailed++;
         }
         batchResult = batchResult.max(result);
         // Write stderr end token and flush.
         errorSink.writeln('>>> EOF STDERR');
-        String resultPassString = resultPass ? 'PASS' : 'FAIL';
+        var resultPassString = resultPass ? 'PASS' : 'FAIL';
         outSink.writeln(
             '>>> TEST $resultPassString ${stopwatch.elapsedMilliseconds}ms');
       } catch (e, stackTrace) {
diff --git a/pkg/analyzer_cli/lib/src/build_mode.dart b/pkg/analyzer_cli/lib/src/build_mode.dart
index 6ad947b..58e8c1a 100644
--- a/pkg/analyzer_cli/lib/src/build_mode.dart
+++ b/pkg/analyzer_cli/lib/src/build_mode.dart
@@ -26,7 +26,6 @@
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer/src/generated/source_io.dart';
 import 'package:analyzer/src/source/source_resource.dart';
-import 'package:analyzer/src/summary/format.dart';
 import 'package:analyzer/src/summary/idl.dart';
 import 'package:analyzer/src/summary/package_bundle_reader.dart';
 import 'package:analyzer/src/summary/summarize_elements.dart';
@@ -98,7 +97,7 @@
       outBuffer.clear();
       try {
         // Prepare inputs with their digests.
-        Map<String, WorkerInput> inputs = {};
+        var inputs = <String, WorkerInput>{};
         for (var input in request.inputs) {
           inputs[input.path] = WorkerInput(input.path, input.digest);
         }
@@ -112,19 +111,19 @@
         }
 
         // Prepare options.
-        CommandLineOptions options =
+        var options =
             CommandLineOptions.parse(arguments, printAndFail: (String msg) {
           throw ArgumentError(msg);
         });
 
         // Analyze and respond.
         await analyze(options, inputs);
-        String msg = _getErrorOutputBuffersText();
+        var msg = _getErrorOutputBuffersText();
         return WorkResponse()
           ..exitCode = EXIT_CODE_OK
           ..output = msg;
       } catch (e, st) {
-        String msg = _getErrorOutputBuffersText();
+        var msg = _getErrorOutputBuffersText();
         msg += '$e\n$st';
         return WorkResponse()
           ..exitCode = EXIT_CODE_ERROR
@@ -145,7 +144,7 @@
   }
 
   String _getErrorOutputBuffersText() {
-    String msg = '';
+    var msg = '';
     if (errorBuffer.isNotEmpty) {
       msg += errorBuffer.toString() + '\n';
     }
@@ -235,8 +234,8 @@
       }
 
       // Add sources.
-      for (Uri uri in uriToFileMap.keys) {
-        File file = uriToFileMap[uri];
+      for (var uri in uriToFileMap.keys) {
+        var file = uriToFileMap[uri];
         if (!file.exists) {
           errorSink.writeln('File not found: ${file.path}');
           io.exitCode = ErrorSeverity.ERROR.ordinal;
@@ -261,15 +260,15 @@
           _computeLinkedLibraries2();
 
           // Write the whole package bundle.
-          PackageBundleBuilder bundle = assembler.assemble();
+          var bundle = assembler.assemble();
           if (options.buildSummaryOutput != null) {
-            io.File file = io.File(options.buildSummaryOutput);
+            var file = io.File(options.buildSummaryOutput);
             file.writeAsBytesSync(bundle.toBuffer(),
                 mode: io.FileMode.writeOnly);
           }
           if (options.buildSummaryOutputSemantic != null) {
             bundle.flushInformative();
-            io.File file = io.File(options.buildSummaryOutputSemantic);
+            var file = io.File(options.buildSummaryOutputSemantic);
             file.writeAsBytesSync(bundle.toBuffer(),
                 mode: io.FileMode.writeOnly);
           }
@@ -291,7 +290,7 @@
       }
 
       if (dependencyTracker != null) {
-        io.File file = io.File(dependencyTracker.outputPath);
+        var file = io.File(dependencyTracker.outputPath);
         file.writeAsStringSync(dependencyTracker.dependencies.join('\n'));
       }
 
@@ -365,12 +364,12 @@
   }
 
   Future<ErrorSeverity> _computeMaxSeverity() async {
-    ErrorSeverity maxSeverity = ErrorSeverity.NONE;
+    var maxSeverity = ErrorSeverity.NONE;
     if (!options.buildSuppressExitCode) {
-      for (Source source in explicitSources) {
-        ErrorsResult result = await analysisDriver.getErrors(source.fullName);
-        for (AnalysisError error in result.errors) {
-          ErrorSeverity processedSeverity = determineProcessedSeverity(
+      for (var source in explicitSources) {
+        var result = await analysisDriver.getErrors(source.fullName);
+        for (var error in result.errors) {
+          var processedSeverity = determineProcessedSeverity(
               error, options, analysisDriver.analysisOptions);
           if (processedSeverity != null) {
             maxSeverity = maxSeverity.max(processedSeverity);
@@ -387,30 +386,29 @@
 
     // Adds a bundle at `path` to `summaryDataStore`.
     PackageBundle addBundle(String path) {
-      PackageBundle bundle = packageBundleProvider.get(path);
+      var bundle = packageBundleProvider.get(path);
       summaryDataStore.addBundle(path, bundle);
       return bundle;
     }
 
-    int numInputs = options.buildSummaryInputs.length;
+    var numInputs = options.buildSummaryInputs.length;
     logger.run('Add $numInputs input summaries', () {
       for (var path in options.buildSummaryInputs) {
         addBundle(path);
       }
     });
 
-    String rootPath =
+    var rootPath =
         options.sourceFiles.isEmpty ? null : options.sourceFiles.first;
     DartSdk sdk;
     logger.run('Add SDK bundle', () {
       PackageBundle sdkBundle;
       if (options.dartSdkSummaryPath != null) {
-        SummaryBasedDartSdk summarySdk =
-            SummaryBasedDartSdk(options.dartSdkSummaryPath, true);
+        var summarySdk = SummaryBasedDartSdk(options.dartSdkSummaryPath, true);
         sdk = summarySdk;
         sdkBundle = summarySdk.bundle;
       } else {
-        FolderBasedDartSdk dartSdk = FolderBasedDartSdk(
+        var dartSdk = FolderBasedDartSdk(
             resourceProvider, resourceProvider.getFolder(options.dartSdkPath));
         dartSdk.analysisOptions =
             createAnalysisOptionsForCommandLineOptions(options, rootPath);
@@ -436,7 +434,7 @@
     analysisOptions =
         createAnalysisOptionsForCommandLineOptions(options, rootPath);
 
-    AnalysisDriverScheduler scheduler = AnalysisDriverScheduler(logger);
+    var scheduler = AnalysisDriverScheduler(logger);
     analysisDriver = AnalysisDriver(
       scheduler,
       logger,
@@ -481,17 +479,17 @@
   /// "$uri|$path") to a map from URI to path. If an error occurs, report the
   /// error and return null.
   Map<Uri, File> _createUriToFileMap(List<String> sourceEntities) {
-    Map<Uri, File> uriToFileMap = <Uri, File>{};
-    for (String sourceFile in sourceEntities) {
-      int pipeIndex = sourceFile.indexOf('|');
+    var uriToFileMap = <Uri, File>{};
+    for (var sourceFile in sourceEntities) {
+      var pipeIndex = sourceFile.indexOf('|');
       if (pipeIndex == -1) {
         // TODO(paulberry): add the ability to guess the URI from the path.
         errorSink.writeln(
             'Illegal input file (must be "\$uri|\$path"): $sourceFile');
         return null;
       }
-      Uri uri = Uri.parse(sourceFile.substring(0, pipeIndex));
-      String path = sourceFile.substring(pipeIndex + 1);
+      var uri = Uri.parse(sourceFile.substring(0, pipeIndex));
+      var path = sourceFile.substring(pipeIndex + 1);
       path = resourceProvider.pathContext.absolute(path);
       path = resourceProvider.pathContext.normalize(path);
       uriToFileMap[uri] = resourceProvider.getFile(path);
@@ -512,8 +510,8 @@
   /// If the unit is in the input [summaryDataStore], do nothing.
   Future<void> _prepareUnit(String absoluteUri) async {
     // Parse the source and serialize its AST.
-    Uri uri = Uri.parse(absoluteUri);
-    Source source = sourceFactory.forUri2(uri);
+    var uri = Uri.parse(absoluteUri);
+    var source = sourceFactory.forUri2(uri);
     if (!source.exists()) {
       // TODO(paulberry): we should report a warning/error because DDC
       // compilations are unlikely to work.
@@ -527,15 +525,15 @@
   /// is sent to a new file at that path.
   Future<void> _printErrors({String outputPath}) async {
     await logger.runAsync('Compute and print analysis errors', () async {
-      StringBuffer buffer = StringBuffer();
+      var buffer = StringBuffer();
       var severityProcessor = (AnalysisError error) =>
           determineProcessedSeverity(error, options, analysisOptions);
-      ErrorFormatter formatter = options.machineFormat
+      var formatter = options.machineFormat
           ? MachineErrorFormatter(buffer, options, stats,
               severityProcessor: severityProcessor)
           : HumanErrorFormatter(buffer, options, stats,
               severityProcessor: severityProcessor);
-      for (Source source in explicitSources) {
+      for (var source in explicitSources) {
         var result = await analysisDriver.getErrors(source.fullName);
         formatter.formatErrors([result]);
       }
@@ -544,7 +542,7 @@
         stats.print(buffer);
       }
       if (outputPath == null) {
-        StringSink sink = options.machineFormat ? errorSink : outSink;
+        var sink = options.machineFormat ? errorSink : outSink;
         sink.write(buffer);
       } else {
         io.File(outputPath).writeAsStringSync(buffer.toString());
@@ -593,7 +591,7 @@
 
   @override
   Source resolveAbsolute(Uri uri, [Uri actualUri]) {
-    File file = uriToFileMap[uri];
+    var file = uriToFileMap[uri];
     actualUri ??= uri;
     if (file == null) {
       return null;
@@ -609,7 +607,7 @@
 
   /// Build the inverse mapping of [uriToSourceMap].
   static Map<String, Uri> _computePathToUriMap(Map<Uri, File> uriToSourceMap) {
-    Map<String, Uri> pathToUriMap = <String, Uri>{};
+    var pathToUriMap = <String, Uri>{};
     uriToSourceMap.forEach((Uri uri, File file) {
       pathToUriMap[file.path] = uri;
     });
@@ -695,7 +693,7 @@
   /// Get the [PackageBundle] from the file with the given [path] in the context
   /// of the given worker [inputs].
   PackageBundle get(Map<String, WorkerInput> inputs, String path) {
-    WorkerInput input = inputs[path];
+    var input = inputs[path];
 
     // The input must be not null, otherwise we're not expected to read
     // this file, but we check anyway to be safe.
diff --git a/pkg/analyzer_cli/lib/src/context_cache.dart b/pkg/analyzer_cli/lib/src/context_cache.dart
index ffe7752..b3af37d 100644
--- a/pkg/analyzer_cli/lib/src/context_cache.dart
+++ b/pkg/analyzer_cli/lib/src/context_cache.dart
@@ -102,8 +102,7 @@
   /// This should not be used except behind the getter which caches this result
   /// automatically.
   AnalysisOptionsImpl _getAnalysisOptions() {
-    AnalysisOptionsImpl contextOptions = builder.getAnalysisOptions(
-            requestedSourceDirectory,
+    var contextOptions = builder.getAnalysisOptions(requestedSourceDirectory,
             verbosePrint: clOptions.verbose ? verbosePrint : null)
         as AnalysisOptionsImpl;
 
diff --git a/pkg/analyzer_cli/lib/src/driver.dart b/pkg/analyzer_cli/lib/src/driver.dart
index e97abae..42342cf 100644
--- a/pkg/analyzer_cli/lib/src/driver.dart
+++ b/pkg/analyzer_cli/lib/src/driver.dart
@@ -31,7 +31,6 @@
 import 'package:analyzer/src/pubspec/pubspec_validator.dart';
 import 'package:analyzer/src/source/package_map_resolver.dart';
 import 'package:analyzer/src/source/path_filter.dart';
-import 'package:analyzer/src/summary/idl.dart';
 import 'package:analyzer/src/summary/package_bundle_reader.dart';
 import 'package:analyzer/src/summary/summary_file_builder.dart';
 import 'package:analyzer/src/summary/summary_sdk.dart' show SummaryBasedDartSdk;
@@ -62,7 +61,7 @@
 
 /// Test this option map to see if it specifies lint rules.
 bool containsLintRuleEntry(YamlMap options) {
-  YamlNode linterNode = getValue(options, 'linter');
+  var linterNode = getValue(options, 'linter');
   return linterNode is YamlMap && getValue(linterNode, 'rules') != null;
 }
 
@@ -118,32 +117,32 @@
     if (analysisDriver != null) {
       throw StateError('start() can only be called once');
     }
-    int startTime = DateTime.now().millisecondsSinceEpoch;
+    var startTime = DateTime.now().millisecondsSinceEpoch;
 
     StringUtilities.INTERNER = MappedInterner();
 
     linter.registerLintRules();
 
     // Parse commandline options.
-    CommandLineOptions options = CommandLineOptions.parse(args);
+    var options = CommandLineOptions.parse(args);
 
     // Do analysis.
     if (options.buildMode) {
-      ErrorSeverity severity = await _buildModeAnalyze(options, sendPort);
+      var severity = await _buildModeAnalyze(options, sendPort);
       // Propagate issues to the exit code.
       if (_shouldBeFatal(severity, options)) {
         io.exitCode = severity.ordinal;
       }
     } else if (options.batchMode) {
-      BatchRunner batchRunner = BatchRunner(outSink, errorSink);
+      var batchRunner = BatchRunner(outSink, errorSink);
       batchRunner.runAsBatch(args, (List<String> args) async {
         // TODO(brianwilkerson) Determine whether this await is necessary.
         await null;
-        CommandLineOptions options = CommandLineOptions.parse(args);
+        var options = CommandLineOptions.parse(args);
         return await _analyzeAll(options);
       });
     } else {
-      ErrorSeverity severity = await _analyzeAll(options);
+      var severity = await _analyzeAll(options);
       // Propagate issues to the exit code.
       if (_shouldBeFatal(severity, options)) {
         io.exitCode = severity.ordinal;
@@ -157,7 +156,7 @@
       // representative of what we see internally; call into _buildModeAnalyze()
       // with some appropriate options.
       print('\nGenerating strong mode summary...');
-      final Stopwatch stopwatch = Stopwatch()..start();
+      final stopwatch = Stopwatch()..start();
 
       for (var i = 0; i < 3; i++) {
         var featureSet = FeatureSet.fromEnableFlags([]);
@@ -174,7 +173,7 @@
     }
 
     if (options.perfReport != null) {
-      String json = makePerfReport(
+      var json = makePerfReport(
           startTime, currentTimeMillis, options, _analyzedFileCount, stats);
       io.File(options.perfReport).writeAsStringSync(json);
     }
@@ -183,7 +182,7 @@
   Future<ErrorSeverity> _analyzeAll(CommandLineOptions options) async {
     // TODO(brianwilkerson) Determine whether this await is necessary.
     await null;
-    PerformanceTag previous = _analyzeAllTag.makeCurrent();
+    var previous = _analyzeAllTag.makeCurrent();
     try {
       return await _analyzeAllImpl(options);
     } finally {
@@ -196,7 +195,7 @@
     // TODO(brianwilkerson) Determine whether this await is necessary.
     await null;
     if (!options.machineFormat) {
-      List<String> fileNames = options.sourceFiles.map((String file) {
+      var fileNames = options.sourceFiles.map((String file) {
         file = path.normalize(file);
         if (file == '.') {
           file = path.basename(path.current);
@@ -210,13 +209,13 @@
     }
 
     // These are used to do part file analysis across sources.
-    Set<String> dartFiles = <String>{};
-    Set<FileState> libraryFiles = <FileState>{};
-    Set<FileState> danglingParts = <FileState>{};
+    var dartFiles = <String>{};
+    var libraryFiles = <FileState>{};
+    var danglingParts = <FileState>{};
 
     // Note: This references analysisDriver via closure, so it will change over
     // time during the following analysis.
-    SeverityProcessor defaultSeverityProcessor = (AnalysisError error) {
+    var defaultSeverityProcessor = (AnalysisError error) {
       return determineProcessedSeverity(
           error, options, analysisDriver.analysisOptions);
     };
@@ -236,7 +235,7 @@
           severityProcessor: defaultSeverityProcessor);
     }
 
-    ErrorSeverity allResult = ErrorSeverity.NONE;
+    var allResult = ErrorSeverity.NONE;
 
     void reportPartError(String partPath) {
       errorSink.writeln('$partPath is a part and cannot be analyzed.');
@@ -245,7 +244,7 @@
       allResult = allResult.max(ErrorSeverity.ERROR);
     }
 
-    for (String sourcePath in options.sourceFiles) {
+    for (var sourcePath in options.sourceFiles) {
       sourcePath = normalizePath(sourcePath);
 
       // Create a context, or re-use the previous one.
@@ -259,39 +258,38 @@
       // Add all the files to be analyzed en masse to the context. Skip any
       // files that were added earlier (whether explicitly or implicitly) to
       // avoid causing those files to be unnecessarily re-read.
-      Set<String> filesToAnalyze = <String>{};
+      var filesToAnalyze = <String>{};
 
       // Collect files for analysis.
       // Note that these files will all be analyzed in the same context.
       // This should be updated when the ContextManager re-work is complete
       // (See: https://github.com/dart-lang/sdk/issues/24133)
-      Iterable<io.File> files =
-          _collectFiles(sourcePath, analysisDriver.analysisOptions);
+      var files = _collectFiles(sourcePath, analysisDriver.analysisOptions);
       if (files.isEmpty) {
         errorSink.writeln('No dart files found at: $sourcePath');
         io.exitCode = ErrorSeverity.ERROR.ordinal;
         return ErrorSeverity.ERROR;
       }
 
-      for (io.File file in files) {
+      for (var file in files) {
         filesToAnalyze.add(file.absolute.path);
       }
 
       // Analyze the libraries.
-      for (String path in filesToAnalyze) {
+      for (var path in filesToAnalyze) {
         var shortName = resourceProvider.pathContext.basename(path);
         if (shortName == AnalysisEngine.ANALYSIS_OPTIONS_YAML_FILE) {
-          File file = resourceProvider.getFile(path);
-          String content = file.readAsStringSync();
-          LineInfo lineInfo = LineInfo.fromContent(content);
-          List<AnalysisError> errors = analyzeAnalysisOptions(
+          var file = resourceProvider.getFile(path);
+          var content = file.readAsStringSync();
+          var lineInfo = LineInfo.fromContent(content);
+          var errors = analyzeAnalysisOptions(
               file.createSource(), content, analysisDriver.sourceFactory);
           formatter.formatErrors([
             ErrorsResultImpl(analysisDriver.currentSession, path, null,
                 lineInfo, false, errors)
           ]);
-          for (AnalysisError error in errors) {
-            ErrorSeverity severity = determineProcessedSeverity(
+          for (var error in errors) {
+            var severity = determineProcessedSeverity(
                 error, options, analysisDriver.analysisOptions);
             if (severity != null) {
               allResult = allResult.max(severity);
@@ -299,20 +297,20 @@
           }
         } else if (shortName == AnalysisEngine.PUBSPEC_YAML_FILE) {
           try {
-            File file = resourceProvider.getFile(path);
-            String content = file.readAsStringSync();
-            YamlNode node = loadYamlNode(content);
+            var file = resourceProvider.getFile(path);
+            var content = file.readAsStringSync();
+            var node = loadYamlNode(content);
             if (node is YamlMap) {
-              PubspecValidator validator =
+              var validator =
                   PubspecValidator(resourceProvider, file.createSource());
-              LineInfo lineInfo = LineInfo.fromContent(content);
-              List<AnalysisError> errors = validator.validate(node.nodes);
+              var lineInfo = LineInfo.fromContent(content);
+              var errors = validator.validate(node.nodes);
               formatter.formatErrors([
                 ErrorsResultImpl(analysisDriver.currentSession, path, null,
                     lineInfo, false, errors)
               ]);
-              for (AnalysisError error in errors) {
-                ErrorSeverity severity = determineProcessedSeverity(
+              for (var error in errors) {
+                var severity = determineProcessedSeverity(
                     error, options, analysisDriver.analysisOptions);
                 allResult = allResult.max(severity);
               }
@@ -322,19 +320,18 @@
           }
         } else if (shortName == AnalysisEngine.ANDROID_MANIFEST_FILE) {
           try {
-            File file = resourceProvider.getFile(path);
-            String content = file.readAsStringSync();
-            ManifestValidator validator =
-                ManifestValidator(file.createSource());
-            LineInfo lineInfo = LineInfo.fromContent(content);
-            List<AnalysisError> errors = validator.validate(
+            var file = resourceProvider.getFile(path);
+            var content = file.readAsStringSync();
+            var validator = ManifestValidator(file.createSource());
+            var lineInfo = LineInfo.fromContent(content);
+            var errors = validator.validate(
                 content, analysisDriver.analysisOptions.chromeOsManifestChecks);
             formatter.formatErrors([
               ErrorsResultImpl(analysisDriver.currentSession, path, null,
                   lineInfo, false, errors)
             ]);
-            for (AnalysisError error in errors) {
-              ErrorSeverity severity = determineProcessedSeverity(
+            for (var error in errors) {
+              var severity = determineProcessedSeverity(
                   error, options, analysisDriver.analysisOptions);
               allResult = allResult.max(severity);
             }
@@ -353,11 +350,11 @@
           }
           libraryFiles.add(file);
 
-          ErrorSeverity status = await _runAnalyzer(file, options, formatter);
+          var status = await _runAnalyzer(file, options, formatter);
           allResult = allResult.max(status);
 
           // Mark previously dangling parts as no longer dangling.
-          for (FileState part in file.partedFiles) {
+          for (var part in file.partedFiles) {
             danglingParts.remove(part);
           }
         }
@@ -372,7 +369,7 @@
     }
 
     // Any dangling parts still in this list were definitely dangling.
-    for (FileState partFile in danglingParts) {
+    for (var partFile in danglingParts) {
       reportPartError(partFile.path);
     }
 
@@ -393,7 +390,7 @@
       CommandLineOptions options, SendPort sendPort) async {
     // TODO(brianwilkerson) Determine whether this await is necessary.
     await null;
-    PerformanceTag previous = _analyzeAllTag.makeCurrent();
+    var previous = _analyzeAllTag.makeCurrent();
     try {
       if (options.buildModePersistentWorker) {
         var workerLoop = sendPort == null
@@ -436,13 +433,13 @@
     }
 
     // Now, build our resolver list.
-    List<UriResolver> resolvers = [];
+    var resolvers = <UriResolver>[];
 
     // 'dart:' URIs come first.
 
     // Setup embedding.
     if (includeSdkResolver) {
-      EmbedderSdk embedderSdk = EmbedderSdk(resourceProvider, embedderMap);
+      var embedderSdk = EmbedderSdk(resourceProvider, embedderMap);
       if (embedderSdk.libraryMap.size() == 0) {
         // The embedder uri resolver has no mappings. Use the default Dart SDK
         // uri resolver.
@@ -472,16 +469,16 @@
   /// Collect all analyzable files at [filePath], recursively if it's a
   /// directory, ignoring links.
   Iterable<io.File> _collectFiles(String filePath, AnalysisOptions options) {
-    List<io.File> files = <io.File>[];
-    io.File file = io.File(filePath);
+    var files = <io.File>[];
+    var file = io.File(filePath);
     if (file.existsSync() && !pathFilter.ignored(filePath)) {
       files.add(file);
     } else {
-      io.Directory directory = io.Directory(filePath);
+      var directory = io.Directory(filePath);
       if (directory.existsSync()) {
-        for (io.FileSystemEntity entry
+        for (var entry
             in directory.listSync(recursive: true, followLinks: false)) {
-          String relative = path.relative(entry.path, from: directory.path);
+          var relative = path.relative(entry.path, from: directory.path);
           if ((AnalysisEngine.isDartFileName(entry.path) ||
                   AnalysisEngine.isManifestFileName(entry.path)) &&
               entry is io.File &&
@@ -505,7 +502,7 @@
       analysisDriver = null;
     }
 
-    AnalysisOptionsImpl analysisOptions =
+    var analysisOptions =
         createAnalysisOptionsForCommandLineOptions(options, source);
 
     // Store the [PathFilter] for this context to properly exclude files
@@ -532,45 +529,44 @@
     }
 
     // Find package info.
-    _PackageInfo packageInfo = _findPackages(options);
+    var packageInfo = _findPackages(options);
 
     // Process embedders.
-    Map<Folder, YamlMap> embedderMap = {};
+    var embedderMap = <Folder, YamlMap>{};
     if (packageInfo.packageMap != null) {
       var libFolder = packageInfo.packageMap['sky_engine']?.first;
       if (libFolder != null) {
-        EmbedderYamlLocator locator =
-            EmbedderYamlLocator.forLibFolder(libFolder);
+        var locator = EmbedderYamlLocator.forLibFolder(libFolder);
         embedderMap = locator.embedderYamls;
       }
     }
 
     // No summaries in the presence of embedders.
-    bool useSummaries = embedderMap.isEmpty;
+    var useSummaries = embedderMap.isEmpty;
 
     if (!useSummaries && options.buildSummaryInputs.isNotEmpty) {
       throw _DriverError('Summaries are not yet supported when using Flutter.');
     }
 
     // Read any input summaries.
-    SummaryDataStore summaryDataStore = SummaryDataStore(
+    var summaryDataStore = SummaryDataStore(
         useSummaries ? options.buildSummaryInputs : <String>[]);
 
     // Once options and embedders are processed, setup the SDK.
     _setupSdk(options, useSummaries, analysisOptions);
 
-    PackageBundle sdkBundle = sdk.getLinkedBundle();
+    var sdkBundle = sdk.getLinkedBundle();
     if (sdkBundle != null) {
       summaryDataStore.addBundle(null, sdkBundle);
     }
 
     // Choose a package resolution policy and a diet parsing policy based on
     // the command-line options.
-    SourceFactory sourceFactory = _chooseUriResolutionPolicy(options,
-        embedderMap, packageInfo, summaryDataStore, true, analysisOptions);
+    var sourceFactory = _chooseUriResolutionPolicy(options, embedderMap,
+        packageInfo, summaryDataStore, true, analysisOptions);
 
-    PerformanceLog log = PerformanceLog(null);
-    AnalysisDriverScheduler scheduler = AnalysisDriverScheduler(log);
+    var log = PerformanceLog(null);
+    var scheduler = AnalysisDriverScheduler(log);
 
     analysisDriver = AnalysisDriver(
         scheduler,
@@ -592,7 +588,7 @@
     Map<String, List<Folder>> packageMap;
 
     if (options.packageConfigPath != null) {
-      String path = normalizePath(options.packageConfigPath);
+      var path = normalizePath(options.packageConfigPath);
       try {
         packages = parsePackagesFile(
           resourceProvider,
@@ -606,7 +602,7 @@
       var path = normalizePath(options.packageRootPath);
       packageMap = _PackageRootPackageMapBuilder.buildPackageMap(path);
     } else {
-      Resource cwd = resourceProvider.getResource(path.current);
+      var cwd = resourceProvider.getResource(path.current);
       // Look for .packages.
       packages = findPackagesFrom(resourceProvider, cwd);
       packageMap = _getPackageMap(packages);
@@ -634,9 +630,9 @@
   /// Analyze a single source.
   Future<ErrorSeverity> _runAnalyzer(
       FileState file, CommandLineOptions options, ErrorFormatter formatter) {
-    int startTime = currentTimeMillis;
-    AnalyzerImpl analyzer = AnalyzerImpl(analysisDriver.analysisOptions,
-        analysisDriver, file, options, stats, startTime);
+    var startTime = currentTimeMillis;
+    var analyzer = AnalyzerImpl(analysisDriver.analysisOptions, analysisDriver,
+        file, options, stats, startTime);
     return analyzer.analyze(formatter);
   }
 
@@ -646,8 +642,8 @@
       if (options.dartSdkSummaryPath != null) {
         sdk = SummaryBasedDartSdk(options.dartSdkSummaryPath, true);
       } else {
-        String dartSdkPath = options.dartSdkPath;
-        FolderBasedDartSdk dartSdk = FolderBasedDartSdk(
+        var dartSdkPath = options.dartSdkPath;
+        var dartSdk = FolderBasedDartSdk(
             resourceProvider, resourceProvider.getFolder(dartSdkPath));
         dartSdk.useSummary = useSummaries &&
             options.sourceFiles.every((String sourcePath) {
@@ -705,7 +701,7 @@
     if (l1.length != l2.length) {
       return false;
     }
-    for (int i = 0; i < l1.length; i++) {
+    for (var i = 0; i < l1.length; i++) {
       if (l1[i] != l2[i]) {
         return false;
       }
@@ -718,7 +714,7 @@
     if (m1.length != m2.length) {
       return false;
     }
-    for (String key in m1.keys) {
+    for (var key in m1.keys) {
       if (!m2.containsKey(key) || m1[key] != m2[key]) {
         return false;
       }
diff --git a/pkg/analyzer_cli/lib/src/error_formatter.dart b/pkg/analyzer_cli/lib/src/error_formatter.dart
index 84e09b2..e7a39af 100644
--- a/pkg/analyzer_cli/lib/src/error_formatter.dart
+++ b/pkg/analyzer_cli/lib/src/error_formatter.dart
@@ -4,7 +4,6 @@
 
 import 'package:analyzer/dart/analysis/results.dart';
 import 'package:analyzer/error/error.dart';
-import 'package:analyzer/source/line_info.dart';
 import 'package:analyzer/src/dart/analysis/driver_based_analysis_context.dart';
 import 'package:analyzer/src/generated/source.dart';
 import 'package:analyzer_cli/src/ansi.dart';
@@ -52,11 +51,11 @@
 
   /// Print statistics to [out].
   void print(StringSink out) {
-    bool hasErrors = errorCount != 0;
-    bool hasWarns = warnCount != 0;
-    bool hasHints = hintCount != 0;
-    bool hasLints = lintCount != 0;
-    bool hasContent = false;
+    var hasErrors = errorCount != 0;
+    var hasWarns = warnCount != 0;
+    var hasHints = hintCount != 0;
+    var hasLints = lintCount != 0;
+    var hasContent = false;
     if (hasErrors) {
       out.write(errorCount);
       out.write(' ');
@@ -150,7 +149,7 @@
   @override
   int compareTo(CLIError other) {
     // severity
-    int compare = _severityCompare[other.severity] - _severityCompare[severity];
+    var compare = _severityCompare[other.severity] - _severityCompare[severity];
     if (compare != 0) return compare;
 
     // path
@@ -195,10 +194,10 @@
   void formatErrors(List<ErrorsResult> results) {
     stats.unfilteredCount += results.length;
 
-    List<AnalysisError> errors = <AnalysisError>[];
-    Map<AnalysisError, ErrorsResult> errorToLine = {};
-    for (ErrorsResult result in results) {
-      for (AnalysisError error in result.errors) {
+    var errors = <AnalysisError>[];
+    var errorToLine = <AnalysisError, ErrorsResult>{};
+    for (var result in results) {
+      for (var error in result.errors) {
         if (_computeSeverity(error) != null) {
           errors.add(error);
           errorToLine[error] = result;
@@ -206,7 +205,7 @@
       }
     }
 
-    for (AnalysisError error in errors) {
+    for (var error in errors) {
       formatError(errorToLine, error);
     }
   }
@@ -233,10 +232,10 @@
   @override
   void flush() {
     // sort
-    List<CLIError> sortedErrors = batchedErrors.toList()..sort();
+    var sortedErrors = batchedErrors.toList()..sort();
 
     // print
-    for (CLIError error in sortedErrors) {
+    for (var error in sortedErrors) {
       if (error.isError) {
         stats.errorCount++;
       } else if (error.isWarning) {
@@ -248,7 +247,7 @@
       }
 
       // warning • 'foo' is not a bar. • lib/foo.dart:1:2 • foo_warning
-      String issueColor = (error.isError || error.isWarning) ? ansi.red : '';
+      var issueColor = (error.isError || error.isWarning) ? ansi.red : '';
       out.write('  $issueColor${error.severity}${ansi.none} '
           '${ansi.bullet} ${ansi.bold}${error.message}${ansi.none} ');
       out.write('${ansi.bullet} ${error.sourcePath}');
@@ -258,7 +257,7 @@
 
       // If verbose, also print any associated correction and URL.
       if (options.verbose) {
-        String padding = ' '.padLeft(error.severity.length + 2);
+        var padding = ' '.padLeft(error.severity.length + 2);
         for (var message in error.contextMessages) {
           out.write('$padding${message.message} ');
           out.write('at ${message.filePath}');
@@ -280,14 +279,14 @@
   @override
   void formatError(
       Map<AnalysisError, ErrorsResult> errorToLine, AnalysisError error) {
-    Source source = error.source;
+    var source = error.source;
     var result = errorToLine[error];
     var location = result.lineInfo.getLocation(error.offset);
 
-    ErrorSeverity severity = _severityProcessor(error);
+    var severity = _severityProcessor(error);
 
     // Get display name; translate INFOs into LINTS and HINTS.
-    String errorType = severity.displayName;
+    var errorType = severity.displayName;
     if (severity == ErrorSeverity.INFO) {
       if (error.errorCode.type == ErrorType.HINT ||
           error.errorCode.type == ErrorType.LINT) {
@@ -308,12 +307,11 @@
     } else {
       sourcePath = _relative(source.fullName);
     }
-    List<ContextMessage> contextMessages = [];
+    var contextMessages = <ContextMessage>[];
     for (var message in error.contextMessages) {
       var session = result.session.analysisContext;
       if (session is DriverBasedAnalysisContext) {
-        LineInfo lineInfo =
-            session.driver.getFileSync(message.filePath)?.lineInfo;
+        var lineInfo = session.driver.getFileSync(message.filePath)?.lineInfo;
         var location = lineInfo.getLocation(message.offset);
         contextMessages.add(ContextMessage(message.filePath, message.message,
             location.lineNumber, location.columnNumber));
@@ -357,11 +355,11 @@
     if (!_seenErrors.add(error)) {
       return;
     }
-    Source source = error.source;
+    var source = error.source;
     var location = errorToLine[error].lineInfo.getLocation(error.offset);
-    int length = error.length;
+    var length = error.length;
 
-    ErrorSeverity severity = _severityProcessor(error);
+    var severity = _severityProcessor(error);
 
     if (severity == ErrorSeverity.ERROR) {
       stats.errorCount++;
@@ -392,8 +390,8 @@
   }
 
   static String _escapeForMachineMode(String input) {
-    StringBuffer result = StringBuffer();
-    for (int c in input.codeUnits) {
+    var result = StringBuffer();
+    for (var c in input.codeUnits) {
       if (c == _newline) {
         result.write(r'\n');
       } else if (c == _return) {
diff --git a/pkg/analyzer_cli/lib/src/error_severity.dart b/pkg/analyzer_cli/lib/src/error_severity.dart
index 198ff9a..dc7e4ec 100644
--- a/pkg/analyzer_cli/lib/src/error_severity.dart
+++ b/pkg/analyzer_cli/lib/src/error_severity.dart
@@ -18,8 +18,7 @@
   AnalysisOptions analysisOptions,
 ) {
   if (analysisOptions != null) {
-    ErrorProcessor processor =
-        ErrorProcessor.getProcessor(analysisOptions, error);
+    var processor = ErrorProcessor.getProcessor(analysisOptions, error);
     // If there is a processor for this error, defer to it.
     if (processor != null) {
       return processor.severity;
@@ -37,8 +36,7 @@
 /// [error] (or `null` if it's to be suppressed).
 ErrorSeverity determineProcessedSeverity(AnalysisError error,
     CommandLineOptions commandLineOptions, AnalysisOptions analysisOptions) {
-  ErrorSeverity severity =
-      computeSeverity(error, commandLineOptions, analysisOptions);
+  var severity = computeSeverity(error, commandLineOptions, analysisOptions);
   // Skip TODOs categorically unless escalated to ERROR or HINT (#26215).
   if (error.errorCode.type == ErrorType.TODO &&
       severity == ErrorSeverity.INFO) {
diff --git a/pkg/analyzer_cli/lib/src/has_context_mixin.dart b/pkg/analyzer_cli/lib/src/has_context_mixin.dart
index 1159f56..554deca 100644
--- a/pkg/analyzer_cli/lib/src/has_context_mixin.dart
+++ b/pkg/analyzer_cli/lib/src/has_context_mixin.dart
@@ -3,7 +3,6 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:analyzer/error/error.dart';
-import 'package:analyzer/file_system/file_system.dart' as file_system;
 import 'package:analyzer/file_system/file_system.dart';
 import 'package:analyzer/src/generated/engine.dart';
 import 'package:analyzer_cli/src/context_cache.dart';
@@ -18,8 +17,7 @@
   AnalysisOptionsImpl createAnalysisOptionsForCommandLineOptions(
       CommandLineOptions options, String source) {
     if (options.analysisOptionsFile != null) {
-      file_system.File file =
-          resourceProvider.getFile(options.analysisOptionsFile);
+      var file = resourceProvider.getFile(options.analysisOptionsFile);
       if (!file.exists) {
         printAndFail('Options file not found: ${options.analysisOptionsFile}',
             exitCode: ErrorSeverity.ERROR.ordinal);
diff --git a/pkg/analyzer_cli/lib/src/options.dart b/pkg/analyzer_cli/lib/src/options.dart
index fee0614..27bf56d 100644
--- a/pkg/analyzer_cli/lib/src/options.dart
+++ b/pkg/analyzer_cli/lib/src/options.dart
@@ -220,7 +220,7 @@
   /// by default prints an error message to stderr and exits.
   static CommandLineOptions parse(List<String> args,
       {Function(String msg) printAndFail = printAndFail}) {
-    CommandLineOptions options = _parse(args);
+    var options = _parse(args);
 
     /// Only happens in testing.
     if (options == null) {
@@ -232,7 +232,7 @@
       // Infer if unspecified.
       options.dartSdkPath ??= getSdkPath(args);
 
-      String sdkPath = options.dartSdkPath;
+      var sdkPath = options.dartSdkPath;
 
       // Check that SDK is specified.
       if (sdkPath == null) {
@@ -268,9 +268,8 @@
   static String _getVersion() {
     try {
       // This is relative to bin/snapshot, so ../..
-      String versionPath =
-          Platform.script.resolve('../../version').toFilePath();
-      File versionFile = File(versionPath);
+      var versionPath = Platform.script.resolve('../../version').toFilePath();
+      var versionFile = File(versionPath);
       return versionFile.readAsStringSync().trim();
     } catch (_) {
       // This happens when the script is not running in the context of an SDK.
@@ -281,10 +280,10 @@
   static CommandLineOptions _parse(List<String> args) {
     args = preprocessArgs(PhysicalResourceProvider.INSTANCE, args);
 
-    bool verbose = args.contains('-v') || args.contains('--verbose');
-    bool hide = !verbose;
+    var verbose = args.contains('-v') || args.contains('--verbose');
+    var hide = !verbose;
 
-    ArgParser parser = ArgParser(allowTrailingOptions: true);
+    var parser = ArgParser(allowTrailingOptions: true);
 
     if (!hide) {
       parser.addSeparator('General options:');
@@ -488,12 +487,12 @@
       if (args.contains('--$ignoreUnrecognizedFlagsFlag')) {
         args = filterUnknownArguments(args, parser);
       }
-      ArgResults results = parser.parse(args);
+      var results = parser.parse(args);
 
       // Persistent worker.
       if (args.contains('--persistent_worker')) {
-        bool hasBuildMode = args.contains('--build-mode');
-        bool onlyDartSdkArg = args.length == 2 ||
+        var hasBuildMode = args.contains('--build-mode');
+        var onlyDartSdkArg = args.length == 2 ||
             (args.length == 3 && args.any((a) => a.startsWith('--dart-sdk'))) ||
             (args.length == 4 && args.contains('--dart-sdk'));
         if (!(hasBuildMode && onlyDartSdkArg)) {
@@ -546,9 +545,9 @@
             'future release.\n');
       }
       if (results.wasParsed('enable-experiment')) {
-        List<String> names =
+        var names =
             (results['enable-experiment'] as List).cast<String>().toList();
-        bool errorFound = false;
+        var errorFound = false;
         for (var validationResult in validateFlags(names)) {
           if (validationResult.isError) {
             errorFound = true;
diff --git a/pkg/analyzer_cli/lib/src/perf_report.dart b/pkg/analyzer_cli/lib/src/perf_report.dart
index 287f68a..4c6aa87 100644
--- a/pkg/analyzer_cli/lib/src/perf_report.dart
+++ b/pkg/analyzer_cli/lib/src/perf_report.dart
@@ -28,8 +28,8 @@
 
 String makePerfReport(int startTime, int endTime, CommandLineOptions options,
     int analyzedFileCount, AnalysisStats stats) {
-  int totalTime = endTime - startTime;
-  int otherTime = totalTime;
+  var totalTime = endTime - startTime;
+  var otherTime = totalTime;
 
   var platformJson = <String, dynamic>{
     'osType': _osType,
@@ -50,9 +50,9 @@
 
   // Convert performance tags to JSON representation.
   var perfTagsJson = <String, dynamic>{};
-  for (PerformanceTag tag in PerformanceTag.all) {
+  for (var tag in PerformanceTag.all) {
     if (tag != PerformanceTag.unknown) {
-      int tagTime = tag.elapsedMs;
+      var tagTime = tag.elapsedMs;
       perfTagsJson[tag.label] = tagTime;
       otherTime -= tagTime;
     }
diff --git a/pkg/analyzer_cli/test/all.dart b/pkg/analyzer_cli/test/all.dart
index 329bd32..7ea963e 100644
--- a/pkg/analyzer_cli/test/all.dart
+++ b/pkg/analyzer_cli/test/all.dart
@@ -2,28 +2,30 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import 'analysis_options_test.dart' as analysis_options_test;
-import 'build_mode_test.dart' as build_mode_test;
-import 'driver_test.dart' as driver_test;
-import 'embedder_test.dart' as embedder_test;
-import 'errors_reported_once_test.dart' as errors_reported_once_test;
-import 'errors_upgrade_fails_cli_test.dart' as errors_upgrade_fails_cli_test;
-import 'options_test.dart' as options_test;
-import 'package_prefix_test.dart' as package_prefix_test;
-import 'perf_report_test.dart' as perf_report_test;
-import 'reporter_test.dart' as reporter_test;
-import 'strong_mode_test.dart' as strong_mode_test;
+import 'analysis_options_test.dart' as analysis_options;
+import 'build_mode_test.dart' as build_mode;
+import 'driver_test.dart' as driver;
+import 'embedder_test.dart' as embedder;
+import 'errors_reported_once_test.dart' as errors_reported_once;
+import 'errors_upgrade_fails_cli_test.dart' as errors_upgrade_fails_cli;
+import 'options_test.dart' as options;
+import 'package_prefix_test.dart' as package_prefix;
+import 'perf_report_test.dart' as perf_report;
+import 'reporter_test.dart' as reporter;
+import 'strong_mode_test.dart' as strong_mode;
+import 'verify_sorted_test.dart' as verify_sorted;
 
 void main() {
-  analysis_options_test.main();
-  build_mode_test.main();
-  driver_test.main();
-  embedder_test.main();
-  errors_reported_once_test.main();
-  errors_upgrade_fails_cli_test.main();
-  options_test.main();
-  package_prefix_test.main();
-  perf_report_test.main();
-  reporter_test.main();
-  strong_mode_test.main();
+  analysis_options.main();
+  build_mode.main();
+  driver.main();
+  embedder.main();
+  errors_reported_once.main();
+  errors_upgrade_fails_cli.main();
+  options.main();
+  package_prefix.main();
+  perf_report.main();
+  reporter.main();
+  strong_mode.main();
+  verify_sorted.main();
 }
diff --git a/pkg/analyzer_cli/test/build_mode_test.dart b/pkg/analyzer_cli/test/build_mode_test.dart
index fece8a0..c2db753 100644
--- a/pkg/analyzer_cli/test/build_mode_test.dart
+++ b/pkg/analyzer_cli/test/build_mode_test.dart
@@ -132,7 +132,7 @@
     var writer = CodedBufferWriter();
     writer.writeInt32NoTag(buffer.length);
 
-    List<int> result = [];
+    var result = <int>[];
     result.addAll(writer.toBuffer());
     result.addAll(buffer);
     return result;
diff --git a/pkg/analyzer_cli/test/driver_test.dart b/pkg/analyzer_cli/test/driver_test.dart
index 805f5d9..43e9d62 100644
--- a/pkg/analyzer_cli/test/driver_test.dart
+++ b/pkg/analyzer_cli/test/driver_test.dart
@@ -47,12 +47,12 @@
     var optionsFileName = AnalysisEngine.ANALYSIS_OPTIONS_YAML_FILE;
     var options = _p('data/options_tests_project/' + optionsFileName);
 
-    List<String> args = <String>[];
+    var args = <String>[];
     if (dartSdkSummaryPath != null) {
       args.add('--dart-sdk-summary');
       args.add(dartSdkSummaryPath);
     } else {
-      String sdkPath = _findSdkDirForSummaries();
+      var sdkPath = _findSdkDirForSummaries();
       args.add('--dart-sdk');
       args.add(sdkPath);
     }
@@ -61,7 +61,7 @@
     args.addAll(additionalArgs);
 
     uri ??= 'file:///test_file.dart';
-    String source = '$uri|$path';
+    var source = '$uri|$path';
 
     await drive(source, args: args, options: options);
   }
@@ -69,7 +69,7 @@
   /// Try to find a appropriate directory to pass to "--dart-sdk" that will
   /// allow summaries to be found.
   String _findSdkDirForSummaries() {
-    Set<String> triedDirectories = <String>{};
+    var triedDirectories = <String>{};
     bool isSuitable(String sdkDir) {
       triedDirectories.add(sdkDir);
       return File(path.join(sdkDir, 'lib', '_internal', 'strong.sum'))
@@ -84,8 +84,8 @@
 
     // Usually the sdk directory is the parent of the parent of the "dart"
     // executable.
-    Directory executableParent = File(Platform.executable).parent;
-    Directory executableGrandparent = executableParent.parent;
+    var executableParent = File(Platform.executable).parent;
+    var executableGrandparent = executableParent.parent;
     if (isSuitable(executableGrandparent.path)) {
       return makeAbsoluteAndNormalized(executableGrandparent.path);
     }
@@ -97,14 +97,14 @@
     // If neither of those are suitable, assume we are running locally within the
     // SDK project (e.g. within an IDE). Find the build output directory and
     // search all built configurations.
-    Directory sdkRootDir =
+    var sdkRootDir =
         File(Platform.script.toFilePath()).parent.parent.parent.parent;
-    for (String outDirName in ['out', 'xcodebuild']) {
-      Directory outDir = Directory(path.join(sdkRootDir.path, outDirName));
+    for (var outDirName in ['out', 'xcodebuild']) {
+      var outDir = Directory(path.join(sdkRootDir.path, outDirName));
       if (outDir.existsSync()) {
-        for (FileSystemEntity subdir in outDir.listSync()) {
+        for (var subdir in outDir.listSync()) {
           if (subdir is Directory) {
-            String candidateSdkDir = path.join(subdir.path, 'dart-sdk');
+            var candidateSdkDir = path.join(subdir.path, 'dart-sdk');
             if (isSuitable(candidateSdkDir)) {
               return makeAbsoluteAndNormalized(candidateSdkDir);
             }
@@ -191,9 +191,9 @@
   /// Convert a file specification from a relative path to an absolute path.
   /// Handles the case where the file specification is of the form "$uri|$path".
   String _adjustFileSpec(String fileSpec) {
-    int uriPrefixLength = fileSpec.indexOf('|') + 1;
-    String uriPrefix = fileSpec.substring(0, uriPrefixLength);
-    String relativePath = fileSpec.substring(uriPrefixLength);
+    var uriPrefixLength = fileSpec.indexOf('|') + 1;
+    var uriPrefix = fileSpec.substring(0, uriPrefixLength);
+    var relativePath = fileSpec.substring(uriPrefixLength);
     return '$uriPrefix${path.join(testDirectory, relativePath)}';
   }
 
@@ -483,8 +483,7 @@
       ]);
       var output = File(outputPath);
       expect(output.existsSync(), isTrue);
-      PackageBundle bundle =
-          PackageBundle.fromBuffer(await output.readAsBytes());
+      var bundle = PackageBundle.fromBuffer(await output.readAsBytes());
       var testFileUri = 'file:///test_file.dart';
 
       var bundle2 = bundle.bundle2;
@@ -602,8 +601,8 @@
 
   Future<void> test_dartSdkSummaryPath_strong() async {
     await withTempDirAsync((tempDir) async {
-      String sdkPath = _findSdkDirForSummaries();
-      String strongSummaryPath =
+      var sdkPath = _findSdkDirForSummaries();
+      var strongSummaryPath =
           path.join(sdkPath, 'lib', '_internal', 'strong.sum');
 
       var testDart = path.join(tempDir, 'test.dart');
@@ -694,13 +693,13 @@
     // Copy to temp dir so that existing analysis options
     // in the test directory hierarchy do not interfere
     await withTempDirAsync((String tempDirPath) async {
-      String dartSdkPath = path.absolute(getSdkPath());
+      var dartSdkPath = path.absolute(getSdkPath());
       await recursiveCopy(
           Directory(path.join(testDirectory, 'data', 'bazel')), tempDirPath);
-      Directory origWorkingDir = Directory.current;
+      var origWorkingDir = Directory.current;
       try {
         Directory.current = path.join(tempDirPath, 'proj');
-        Driver driver = Driver(isTesting: true);
+        var driver = Driver(isTesting: true);
         try {
           await driver.start([
             path.join('lib', 'file.dart'),
@@ -776,7 +775,7 @@
   }
 
   Future<void> test_partFile_reversed() async {
-    Driver driver = Driver(isTesting: true);
+    var driver = Driver(isTesting: true);
     await driver.start([
       path.join(testDirectory, 'data/library_and_parts/part1.dart'),
       path.join(testDirectory, 'data/library_and_parts/lib.dart')
@@ -796,7 +795,7 @@
   String get optionsFileName => AnalysisEngine.ANALYSIS_OPTIONS_YAML_FILE;
 
   Future<void> test_containsLintRuleEntry() async {
-    YamlMap options = _parseOptions('''
+    var options = _parseOptions('''
 linter:
   rules:
     - foo
@@ -897,7 +896,7 @@
 class NonDartFilesTest extends BaseTest {
   Future<void> test_analysisOptionsYaml() async {
     await withTempDirAsync((tempDir) async {
-      String filePath =
+      var filePath =
           path.join(tempDir, AnalysisEngine.ANALYSIS_OPTIONS_YAML_FILE);
       File(filePath).writeAsStringSync('''
 analyzer:
@@ -914,14 +913,14 @@
 
   Future<void> test_manifestFileChecks() async {
     await withTempDirAsync((tempDir) async {
-      String filePath =
+      var filePath =
           path.join(tempDir, AnalysisEngine.ANALYSIS_OPTIONS_YAML_FILE);
       File(filePath).writeAsStringSync('''
 analyzer:
   optional-checks:
     chrome-os-manifest-checks: true
 ''');
-      String manifestPath =
+      var manifestPath =
           path.join(tempDir, AnalysisEngine.ANDROID_MANIFEST_FILE);
       File(manifestPath).writeAsStringSync('''
 <manifest
@@ -941,7 +940,7 @@
 
   Future<void> test_pubspecYaml() async {
     await withTempDirAsync((tempDir) async {
-      String filePath = path.join(tempDir, AnalysisEngine.PUBSPEC_YAML_FILE);
+      var filePath = path.join(tempDir, AnalysisEngine.PUBSPEC_YAML_FILE);
       File(filePath).writeAsStringSync('''
 name: foo
 flutter:
@@ -1029,7 +1028,7 @@
   }
 
   Future<void> test_includeDirective() async {
-    String testDir = path.join(
+    var testDir = path.join(
         testDirectory, 'data', 'options_include_directive_tests_project');
     await drive(
       path.join(testDir, 'lib', 'test_file.dart'),
diff --git a/pkg/analyzer_cli/test/embedder_test.dart b/pkg/analyzer_cli/test/embedder_test.dart
index a088c8e..c855d21 100644
--- a/pkg/analyzer_cli/test/embedder_test.dart
+++ b/pkg/analyzer_cli/test/embedder_test.dart
@@ -5,7 +5,6 @@
 import 'dart:io';
 
 import 'package:analyzer/src/dart/sdk/sdk.dart';
-import 'package:analyzer/src/generated/sdk.dart';
 import 'package:analyzer_cli/src/driver.dart' show Driver, errorSink, outSink;
 import 'package:path/path.dart' as path;
 import 'package:test/test.dart';
@@ -45,14 +44,14 @@
 
     test('sdk setup', wrap(() async {
       var testDir = path.join(testDirectory, 'data', 'embedder_client');
-      Driver driver = Driver(isTesting: true);
+      var driver = Driver(isTesting: true);
       await driver.start([
         '--packages',
         path.join(testDir, '_packages'),
         path.join(testDir, 'embedder_yaml_user.dart')
       ]);
 
-      DartSdk sdk = driver.sdk;
+      var sdk = driver.sdk;
       expect(sdk, const TypeMatcher<FolderBasedDartSdk>());
       expect((sdk as FolderBasedDartSdk).useSummary, isFalse);
     }));
diff --git a/pkg/analyzer_cli/test/errors_reported_once_test.dart b/pkg/analyzer_cli/test/errors_reported_once_test.dart
index d110077..cb5ba53 100644
--- a/pkg/analyzer_cli/test/errors_reported_once_test.dart
+++ b/pkg/analyzer_cli/test/errors_reported_once_test.dart
@@ -40,23 +40,23 @@
   }
 
   Future<void> test_once() async {
-    String testDir = path.join(testDirectory, 'data', 'errors_reported_once');
-    Driver driver = Driver(isTesting: true);
+    var testDir = path.join(testDirectory, 'data', 'errors_reported_once');
+    var driver = Driver(isTesting: true);
     await driver.start(
         [path.join(testDir, 'foo.dart'), path.join(testDir, 'bar.dart')]);
 
     expect(exitCode, 0);
 
     // Ensure that we only have one copy of the error.
-    final String unusedWarning = 'Unused import';
-    String output = outSink.toString();
+    final unusedWarning = 'Unused import';
+    var output = outSink.toString();
     expect(output, contains(unusedWarning));
     expect(unusedWarning.allMatches(output).toList(), hasLength(1));
   }
 
   Future<void> test_once_machine() async {
-    String testDir = path.join(testDirectory, 'data', 'errors_reported_once');
-    Driver driver = Driver(isTesting: true);
+    var testDir = path.join(testDirectory, 'data', 'errors_reported_once');
+    var driver = Driver(isTesting: true);
     await driver.start([
       '--format',
       'machine',
@@ -67,8 +67,8 @@
     expect(exitCode, 0);
 
     // Ensure that we only have one copy of the error.
-    final String unusedWarning = 'Unused import';
-    String output = errorSink.toString();
+    final unusedWarning = 'Unused import';
+    var output = errorSink.toString();
     expect(output, contains(unusedWarning));
     expect(unusedWarning.allMatches(output).toList(), hasLength(1));
   }
diff --git a/pkg/analyzer_cli/test/errors_upgrade_fails_cli_test.dart b/pkg/analyzer_cli/test/errors_upgrade_fails_cli_test.dart
index 1be1384..81e671d 100644
--- a/pkg/analyzer_cli/test/errors_upgrade_fails_cli_test.dart
+++ b/pkg/analyzer_cli/test/errors_upgrade_fails_cli_test.dart
@@ -40,9 +40,8 @@
   }
 
   Future<void> test_once() async {
-    String testDir =
-        path.join(testDirectory, 'data', 'error_upgrade_fails_cli');
-    Driver driver = Driver(isTesting: true);
+    var testDir = path.join(testDirectory, 'data', 'error_upgrade_fails_cli');
+    var driver = Driver(isTesting: true);
     await driver.start([path.join(testDir, 'foo.dart')]);
 
     expect(exitCode, 3);
diff --git a/pkg/analyzer_cli/test/options_test.dart b/pkg/analyzer_cli/test/options_test.dart
index 807b70f..8e5ce94 100644
--- a/pkg/analyzer_cli/test/options_test.dart
+++ b/pkg/analyzer_cli/test/options_test.dart
@@ -15,8 +15,8 @@
 void main() {
   group('CommandLineOptions', () {
     group('parse', () {
-      StringBuffer outStringBuffer = StringBuffer();
-      StringBuffer errorStringBuffer = StringBuffer();
+      var outStringBuffer = StringBuffer();
+      var errorStringBuffer = StringBuffer();
 
       StringSink savedOutSink, savedErrorSink;
       int savedExitCode;
@@ -40,8 +40,7 @@
       });
 
       test('defaults', () {
-        CommandLineOptions options =
-            CommandLineOptions.parse(['--dart-sdk', '.', 'foo.dart']);
+        var options = CommandLineOptions.parse(['--dart-sdk', '.', 'foo.dart']);
         expect(options, isNotNull);
         expect(options.buildMode, isFalse);
         expect(options.buildAnalysisOutput, isNull);
@@ -72,20 +71,19 @@
       });
 
       test('batch', () {
-        CommandLineOptions options =
-            CommandLineOptions.parse(['--dart-sdk', '.', '--batch']);
+        var options = CommandLineOptions.parse(['--dart-sdk', '.', '--batch']);
         expect(options.batchMode, isTrue);
       });
 
       test('defined variables', () {
-        CommandLineOptions options = CommandLineOptions.parse(
+        var options = CommandLineOptions.parse(
             ['--dart-sdk', '.', '-Dfoo=bar', 'foo.dart']);
         expect(options.definedVariables['foo'], equals('bar'));
         expect(options.definedVariables['bar'], isNull);
       });
 
       test('disable cache flushing', () {
-        CommandLineOptions options = CommandLineOptions.parse(
+        var options = CommandLineOptions.parse(
             ['--dart-sdk', '.', '--disable-cache-flushing', 'foo.dart']);
         expect(options.disableCacheFlushing, isTrue);
       });
@@ -98,13 +96,13 @@
         };
 
         test('no values', () {
-          CommandLineOptions options = overrideKnownFeatures(
+          var options = overrideKnownFeatures(
               knownFeatures, () => CommandLineOptions.parse(['foo.dart']));
           expect(options.enabledExperiments, isEmpty);
         });
 
         test('single value', () {
-          CommandLineOptions options = overrideKnownFeatures(
+          var options = overrideKnownFeatures(
               knownFeatures,
               () => CommandLineOptions.parse(
                   ['--enable-experiment', 'a', 'foo.dart']));
@@ -113,7 +111,7 @@
 
         group('multiple values', () {
           test('single flag', () {
-            CommandLineOptions options = overrideKnownFeatures(
+            var options = overrideKnownFeatures(
                 knownFeatures,
                 () => CommandLineOptions.parse(
                     ['--enable-experiment', 'a,b', 'foo.dart']));
@@ -121,7 +119,7 @@
           });
 
           test('mixed single and multiple flags', () {
-            CommandLineOptions options = overrideKnownFeatures(
+            var options = overrideKnownFeatures(
                 knownFeatures,
                 () => CommandLineOptions.parse([
                       '--enable-experiment',
@@ -134,7 +132,7 @@
           });
 
           test('multiple flags', () {
-            CommandLineOptions options = overrideKnownFeatures(
+            var options = overrideKnownFeatures(
                 knownFeatures,
                 () => CommandLineOptions.parse([
                       '--enable-experiment',
@@ -149,80 +147,80 @@
       });
 
       test('hintsAreFatal', () {
-        CommandLineOptions options = CommandLineOptions.parse(
+        var options = CommandLineOptions.parse(
             ['--dart-sdk', '.', '--fatal-hints', 'foo.dart']);
         expect(options.infosAreFatal, isTrue);
       });
 
       test('infosAreFatal', () {
-        CommandLineOptions options = CommandLineOptions.parse(
+        var options = CommandLineOptions.parse(
             ['--dart-sdk', '.', '--fatal-infos', 'foo.dart']);
         expect(options.infosAreFatal, isTrue);
       });
 
       test('log', () {
-        CommandLineOptions options =
+        var options =
             CommandLineOptions.parse(['--dart-sdk', '.', '--log', 'foo.dart']);
         expect(options.log, isTrue);
       });
 
       test('machine format', () {
-        CommandLineOptions options = CommandLineOptions.parse(
+        var options = CommandLineOptions.parse(
             ['--dart-sdk', '.', '--format=machine', 'foo.dart']);
         expect(options.machineFormat, isTrue);
       });
 
       test('no-hints', () {
-        CommandLineOptions options = CommandLineOptions.parse(
+        var options = CommandLineOptions.parse(
             ['--dart-sdk', '.', '--no-hints', 'foo.dart']);
         expect(options.disableHints, isTrue);
       });
 
       test('options', () {
-        CommandLineOptions options = CommandLineOptions.parse(
+        var options = CommandLineOptions.parse(
             ['--dart-sdk', '.', '--options', 'options.yaml', 'foo.dart']);
         expect(options.analysisOptionsFile, equals('options.yaml'));
       });
 
       test('lints', () {
-        CommandLineOptions options = CommandLineOptions.parse(
+        var options = CommandLineOptions.parse(
             ['--dart-sdk', '.', '--lints', 'foo.dart']);
         expect(options.lints, isTrue);
       });
 
       test('package root', () {
-        CommandLineOptions options = CommandLineOptions.parse(
+        var options = CommandLineOptions.parse(
             ['--dart-sdk', '.', '--package-root', 'bar', 'foo.dart']);
         expect(options.packageRootPath, equals('bar'));
       });
 
       test('package warnings', () {
-        CommandLineOptions options = CommandLineOptions.parse(
+        var options = CommandLineOptions.parse(
             ['--dart-sdk', '.', '--package-warnings', 'foo.dart']);
         expect(options.showPackageWarnings, isTrue);
       });
 
       test('sdk warnings', () {
-        CommandLineOptions options = CommandLineOptions.parse(
+        var options = CommandLineOptions.parse(
             ['--dart-sdk', '.', '--sdk-warnings', 'foo.dart']);
         expect(options.showSdkWarnings, isTrue);
       });
 
       test('sourceFiles', () {
-        CommandLineOptions options = CommandLineOptions.parse(
+        var options = CommandLineOptions.parse(
             ['--dart-sdk', '.', '--log', 'foo.dart', 'foo2.dart', 'foo3.dart']);
         expect(options.sourceFiles,
             equals(['foo.dart', 'foo2.dart', 'foo3.dart']));
       });
 
       test('warningsAreFatal', () {
-        CommandLineOptions options = CommandLineOptions.parse(
+        var options = CommandLineOptions.parse(
             ['--dart-sdk', '.', '--fatal-warnings', 'foo.dart']);
         expect(options.warningsAreFatal, isTrue);
       });
 
       test('ignore unrecognized flags', () {
-        CommandLineOptions options = CommandLineOptions.parse([
+        var options = CommandLineOptions.parse([
           '--ignore-unrecognized-flags',
           '--bar',
           '--baz',
@@ -235,7 +233,7 @@
       });
 
       test('hintsAreFatal', () {
-        CommandLineOptions options = CommandLineOptions.parse(
+        var options = CommandLineOptions.parse(
             ['--dart-sdk', '.', '--fatal-lints', 'foo.dart']);
         expect(options.lintsAreFatal, isTrue);
       });
@@ -257,13 +255,13 @@
       });
 
       test('--use-fasta-parser', () {
-        CommandLineOptions options =
+        var options =
             CommandLineOptions.parse(['--use-fasta-parser', 'foo.dart']);
         expect(options.useFastaParser, isTrue);
       });
 
       test('--train-snapshot', () {
-        CommandLineOptions options =
+        var options =
             CommandLineOptions.parse(['--train-snapshot', 'foo.dart']);
         expect(options.trainSnapshot, isTrue);
       });
diff --git a/pkg/analyzer_cli/test/reporter_test.dart b/pkg/analyzer_cli/test/reporter_test.dart
index 6976b5f..de8e15c 100644
--- a/pkg/analyzer_cli/test/reporter_test.dart
+++ b/pkg/analyzer_cli/test/reporter_test.dart
@@ -39,8 +39,7 @@
     });
 
     test('error', () {
-      ErrorsResultImpl error =
-          mockResult(ErrorType.SYNTACTIC_ERROR, ErrorSeverity.ERROR);
+      var error = mockResult(ErrorType.SYNTACTIC_ERROR, ErrorSeverity.ERROR);
       reporter.formatErrors([error]);
       reporter.flush();
 
@@ -49,7 +48,7 @@
     });
 
     test('hint', () {
-      ErrorsResultImpl error = mockResult(ErrorType.HINT, ErrorSeverity.INFO);
+      var error = mockResult(ErrorType.HINT, ErrorSeverity.INFO);
       reporter.formatErrors([error]);
       reporter.flush();
 
@@ -58,7 +57,7 @@
     });
 
     test('stats', () {
-      ErrorsResultImpl error = mockResult(ErrorType.HINT, ErrorSeverity.INFO);
+      var error = mockResult(ErrorType.HINT, ErrorSeverity.INFO);
       reporter.formatErrors([error]);
       reporter.flush();
       stats.print(out);
diff --git a/pkg/analyzer_cli/test/utils.dart b/pkg/analyzer_cli/test/utils.dart
index 08ad8bd..778e42f 100644
--- a/pkg/analyzer_cli/test/utils.dart
+++ b/pkg/analyzer_cli/test/utils.dart
@@ -13,12 +13,33 @@
 final String testDirectory = pathos.dirname(
     pathos.fromUri((reflectClass(_TestUtils).owner as LibraryMirror).uri));
 
+/// Returns a path to the directory containing source code for packages such as
+/// kernel, front_end, and analyzer.
+String get packageRoot {
+  // If the package root directory is specified on the command line using
+  // -DpkgRoot=..., use it.
+  var pkgRootVar = const String.fromEnvironment('pkgRoot');
+  if (pkgRootVar != null) {
+    var path = pathos.join(Directory.current.path, pkgRootVar);
+    if (!path.endsWith(pathos.separator)) path += pathos.separator;
+    return path;
+  }
+  // Otherwise try to guess based on the script path.
+  var scriptPath = pathos.fromUri(Platform.script);
+  var parts = pathos.split(scriptPath);
+  var pkgIndex = parts.indexOf('pkg');
+  if (pkgIndex != -1) {
+    return pathos.joinAll(parts.sublist(0, pkgIndex + 1)) + pathos.separator;
+  }
+  throw StateError('Unable to find sdk/pkg/ in $scriptPath');
+}
+
 /// Recursively copy the specified [src] directory (or file)
 /// to the specified destination path.
 Future<void> recursiveCopy(FileSystemEntity src, String dstPath) async {
   if (src is Directory) {
     await (Directory(dstPath)).create(recursive: true);
-    for (FileSystemEntity entity in src.listSync()) {
+    for (var entity in src.listSync()) {
       await recursiveCopy(
           entity, pathos.join(dstPath, pathos.basename(entity.path)));
     }
diff --git a/pkg/analyzer_cli/test/verify_sorted_test.dart b/pkg/analyzer_cli/test/verify_sorted_test.dart
new file mode 100644
index 0000000..57030b6
--- /dev/null
+++ b/pkg/analyzer_cli/test/verify_sorted_test.dart
@@ -0,0 +1,68 @@
+// Copyright (c) 2019, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:io';
+
+import 'package:analysis_server/src/services/correction/sort_members.dart';
+import 'package:analyzer/dart/analysis/analysis_context_collection.dart';
+import 'package:analyzer/dart/analysis/results.dart';
+import 'package:analyzer/dart/analysis/session.dart';
+import 'package:analyzer/file_system/file_system.dart';
+import 'package:analyzer/file_system/physical_file_system.dart';
+import 'package:test/test.dart';
+
+import 'utils.dart';
+
+void main() {
+  var provider = PhysicalResourceProvider.INSTANCE;
+  var normalizedRoot = provider.pathContext.normalize(packageRoot);
+  var packagePath = provider.pathContext.join(normalizedRoot, 'analyzer_cli');
+  var testDataPath = provider.pathContext.join(packagePath, 'test', 'data');
+
+  var collection = AnalysisContextCollection(
+      includedPaths: <String>[packagePath],
+      excludedPaths: [testDataPath],
+      resourceProvider: provider);
+  var contexts = collection.contexts;
+  if (contexts.length != 1) {
+    fail('The directory $packagePath contains multiple analysis contexts.');
+  }
+
+  buildTestsIn(contexts[0].currentSession, packagePath, testDataPath,
+      provider.getFolder(packagePath));
+}
+
+void buildTestsIn(AnalysisSession session, String testDirPath,
+    String testDataPath, Folder directory) {
+  var pathContext = session.resourceProvider.pathContext;
+  var children = directory.getChildren();
+  children.sort((first, second) => first.shortName.compareTo(second.shortName));
+  for (var child in children) {
+    if (child is Folder) {
+      if (child.path != testDataPath) {
+        buildTestsIn(session, testDirPath, testDataPath, child);
+      }
+    } else if (child is File && child.shortName.endsWith('.dart')) {
+      var path = child.path;
+      var relativePath = pathContext.relative(path, from: testDirPath);
+      test(relativePath, () {
+        var result = session.getParsedUnit(path);
+        if (result.state != ResultState.VALID) {
+          fail('Could not parse $path');
+        }
+        var code = result.content;
+        var unit = result.unit;
+        var errors = result.errors;
+        if (errors.isNotEmpty) {
+          fail('Errors found when parsing $path');
+        }
+        var sorter = MemberSorter(code, unit);
+        var edits = sorter.sort();
+        if (edits.isNotEmpty) {
+          fail('Unsorted file $path');
+        }
+      });
+    }
+  }
+}
diff --git a/pkg/analyzer_cli/tool/perf.dart b/pkg/analyzer_cli/tool/perf.dart
index a480e85..5685be8 100644
--- a/pkg/analyzer_cli/tool/perf.dart
+++ b/pkg/analyzer_cli/tool/perf.dart
@@ -38,15 +38,15 @@
   await setup(args[1]);
 
   if (bench == 'scan') {
-    Set<Source> files = scanReachableFiles(entryUri);
+    var files = scanReachableFiles(entryUri);
     // TODO(sigmund): consider replacing the warmup with instrumented snapshots.
-    for (int i = 0; i < 10; i++) {
+    for (var i = 0; i < 10; i++) {
       scanFiles(files);
     }
   } else if (bench == 'parse') {
-    Set<Source> files = scanReachableFiles(entryUri);
+    var files = scanReachableFiles(entryUri);
     // TODO(sigmund): consider replacing the warmup with instrumented snapshots.
-    for (int i = 0; i < 10; i++) {
+    for (var i = 0; i < 10; i++) {
       parseFiles(files);
     }
   } else {
diff --git a/pkg/analyzer_plugin/lib/utilities/completion/relevance.dart b/pkg/analyzer_plugin/lib/utilities/completion/relevance.dart
index eca6b97..0c585f9 100644
--- a/pkg/analyzer_plugin/lib/utilities/completion/relevance.dart
+++ b/pkg/analyzer_plugin/lib/utilities/completion/relevance.dart
@@ -35,3 +35,18 @@
 const int DART_RELEVANCE_NAMED_PARAMETER_REQUIRED = 1065;
 const int DART_RELEVANCE_PARAMETER = 1059;
 const int DART_RELEVANCE_TYPE_PARAMETER = 1058;
+
+/// A name scope for constants that are related to the relevance of completion
+/// suggestions. The values are required to be in the range [0, 1000].
+abstract class Relevance {
+  /// The relevance used when suggesting a `call` method that is implied by a
+  /// type but isn't explicitly implemented in the type hierarchy.
+  static const int callFunction = 200;
+
+  /// The relevance used when suggesting a member of a class or extension and
+  /// there are no features that can be used to provide a relevance score.
+  static const int member = 500;
+
+  /// The relevance used when suggesting an override of an inherited member.
+  static const int override = 750;
+}
diff --git a/pkg/analyzer_plugin/test/utils/package_root.dart b/pkg/analyzer_plugin/test/utils/package_root.dart
index 47d0e31..98c24ba 100644
--- a/pkg/analyzer_plugin/test/utils/package_root.dart
+++ b/pkg/analyzer_plugin/test/utils/package_root.dart
@@ -11,7 +11,9 @@
 String get packageRoot {
   // If the package root directory is specified on the command line using
   // -DpkgRoot=..., use it.
-  String pkgRootVar = const String.fromEnvironment('pkgRoot');
+  String pkgRootVar = bool.hasEnvironment('pkgRoot')
+      ? const String.fromEnvironment('pkgRoot')
+      : null;
   if (pkgRootVar != null) {
     String path = pathos.join(Directory.current.path, pkgRootVar);
     if (!path.endsWith(pathos.separator)) path += pathos.separator;
diff --git a/pkg/compiler/lib/src/commandline_options.dart b/pkg/compiler/lib/src/commandline_options.dart
index 8d56df5..80362a4 100644
--- a/pkg/compiler/lib/src/commandline_options.dart
+++ b/pkg/compiler/lib/src/commandline_options.dart
@@ -55,6 +55,8 @@
   static const String omitImplicitChecks = '--omit-implicit-checks';
   static const String omitAsCasts = '--omit-as-casts';
   static const String laxRuntimeTypeToString = '--lax-runtime-type-to-string';
+  static const String legacyJavaScript = '--legacy-javascript';
+  static const String noLegacyJavaScript = '--no-legacy-javascript';
 
   static const String platformBinaries = '--platform-binaries=.+';
 
diff --git a/pkg/compiler/lib/src/common_elements.dart b/pkg/compiler/lib/src/common_elements.dart
index 65ac11c..980e484 100644
--- a/pkg/compiler/lib/src/common_elements.dart
+++ b/pkg/compiler/lib/src/common_elements.dart
@@ -499,7 +499,6 @@
   FunctionEntity get typeLiteralMaker;
   FunctionEntity get checkTypeBound;
   FieldEntity get rtiAsField;
-  FieldEntity get rtiCheckField;
   FieldEntity get rtiIsField;
   FieldEntity get rtiRestField;
   FieldEntity get rtiPrecomputed1Field;
@@ -511,27 +510,20 @@
 
   FunctionEntity get generalIsTestImplementation;
   FunctionEntity get generalAsCheckImplementation;
-  FunctionEntity get generalTypeCheckImplementation;
 
   FunctionEntity get specializedIsObject;
   FunctionEntity get specializedAsObject;
-  FunctionEntity get specializedCheckObject;
   FunctionEntity get specializedIsTop;
   FunctionEntity get specializedAsTop;
   FunctionEntity get specializedIsBool;
   FunctionEntity get specializedAsBoolNullable;
-  FunctionEntity get specializedCheckBoolNullable;
   FunctionEntity get specializedAsDoubleNullable;
-  FunctionEntity get specializedCheckDoubleNullable;
   FunctionEntity get specializedIsInt;
   FunctionEntity get specializedAsIntNullable;
-  FunctionEntity get specializedCheckIntNullable;
   FunctionEntity get specializedIsNum;
   FunctionEntity get specializedAsNumNullable;
-  FunctionEntity get specializedCheckNumNullable;
   FunctionEntity get specializedIsString;
   FunctionEntity get specializedAsStringNullable;
-  FunctionEntity get specializedCheckStringNullable;
 
   FunctionEntity get instantiatedGenericFunctionTypeNewRti;
   FunctionEntity get closureFunctionType;
@@ -1921,11 +1913,6 @@
   @override
   FieldEntity get rtiIsField => _rtiIsField ??= _findRtiClassField('_is');
 
-  FieldEntity _rtiCheckField;
-  @override
-  FieldEntity get rtiCheckField =>
-      _rtiCheckField ??= _findRtiClassField('_check');
-
   FieldEntity _rtiRestField;
   @override
   FieldEntity get rtiRestField => _rtiRestField ??= _findRtiClassField('_rest');
@@ -1973,12 +1960,6 @@
       _generalAsCheckImplementation ??=
           _findRtiFunction('_generalAsCheckImplementation');
 
-  FunctionEntity _generalTypeCheckImplementation;
-  @override
-  FunctionEntity get generalTypeCheckImplementation =>
-      _generalTypeCheckImplementation ??=
-          _findRtiFunction('_generalTypeCheckImplementation');
-
   FunctionEntity _specializedIsObject;
   @override
   FunctionEntity get specializedIsObject =>
@@ -1989,11 +1970,6 @@
   FunctionEntity get specializedAsObject =>
       _specializedAsObject ??= _findRtiFunction('_asObject');
 
-  FunctionEntity _specializedCheckObject;
-  @override
-  FunctionEntity get specializedCheckObject =>
-      _specializedCheckObject ??= _findRtiFunction('_checkObject');
-
   @override
   FunctionEntity get specializedIsTop => _findRtiFunction('_isTop');
 
@@ -2008,18 +1984,10 @@
       _findRtiFunction('_asBoolNullable');
 
   @override
-  FunctionEntity get specializedCheckBoolNullable =>
-      _findRtiFunction('_checkBoolNullable');
-
-  @override
   FunctionEntity get specializedAsDoubleNullable =>
       _findRtiFunction('_asDoubleNullable');
 
   @override
-  FunctionEntity get specializedCheckDoubleNullable =>
-      _findRtiFunction('_checkDoubleNullable');
-
-  @override
   FunctionEntity get specializedIsInt => _findRtiFunction('_isInt');
 
   @override
@@ -2027,10 +1995,6 @@
       _findRtiFunction('_asIntNullable');
 
   @override
-  FunctionEntity get specializedCheckIntNullable =>
-      _findRtiFunction('_checkIntNullable');
-
-  @override
   FunctionEntity get specializedIsNum => _findRtiFunction('_isNum');
 
   @override
@@ -2038,10 +2002,6 @@
       _findRtiFunction('_asNumNullable');
 
   @override
-  FunctionEntity get specializedCheckNumNullable =>
-      _findRtiFunction('_checkNumNullable');
-
-  @override
   FunctionEntity get specializedIsString => _findRtiFunction('_isString');
 
   @override
@@ -2049,10 +2009,6 @@
       _findRtiFunction('_asStringNullable');
 
   @override
-  FunctionEntity get specializedCheckStringNullable =>
-      _findRtiFunction('_checkStringNullable');
-
-  @override
   FunctionEntity get instantiatedGenericFunctionTypeNewRti =>
       _findRtiFunction('instantiatedGenericFunctionType');
 
diff --git a/pkg/compiler/lib/src/dart2js.dart b/pkg/compiler/lib/src/dart2js.dart
index 0fab620..e4953b3 100644
--- a/pkg/compiler/lib/src/dart2js.dart
+++ b/pkg/compiler/lib/src/dart2js.dart
@@ -463,6 +463,8 @@
     new OptionHandler(Flags.omitImplicitChecks, passThrough),
     new OptionHandler(Flags.omitAsCasts, passThrough),
     new OptionHandler(Flags.laxRuntimeTypeToString, passThrough),
+    new OptionHandler(Flags.legacyJavaScript, passThrough),
+    new OptionHandler(Flags.noLegacyJavaScript, passThrough),
     new OptionHandler(Flags.benchmarkingProduction, passThrough),
     new OptionHandler(Flags.benchmarkingExperiment, passThrough),
     new OptionHandler(Flags.nullSafety, setNullSafetyMode),
diff --git a/pkg/compiler/lib/src/elements/types.dart b/pkg/compiler/lib/src/elements/types.dart
index 6e0ebab..9cf992b 100644
--- a/pkg/compiler/lib/src/elements/types.dart
+++ b/pkg/compiler/lib/src/elements/types.dart
@@ -5,7 +5,7 @@
 import '../common/names.dart';
 import '../common_elements.dart';
 import '../serialization/serialization.dart';
-import '../util/util.dart' show equalElements;
+import '../util/util.dart' show equalElements, identicalElements;
 import 'entities.dart';
 
 /// Hierarchy to describe types in Dart.
@@ -987,6 +987,115 @@
       visitType(type, argument);
 }
 
+class _LegacyErasureVisitor extends DartTypeVisitor<DartType, Null> {
+  final DartTypes _dartTypes;
+
+  _LegacyErasureVisitor(this._dartTypes);
+
+  DartType erase(DartType type) => visit(type, null);
+
+  List<DartType> eraseList(List<DartType> types) {
+    List<DartType> erasedTypes = types.map(erase).toList();
+    return identicalElements(erasedTypes, types) ? types : erasedTypes;
+  }
+
+  @override
+  DartType visit(DartType type, Null _) => type.accept(this, _);
+
+  @override
+  DartType visitLegacyType(LegacyType type, Null _) => erase(type.baseType);
+
+  @override
+  DartType visitNullableType(NullableType type, Null _) {
+    var baseType = erase(type.baseType);
+    if (identical(baseType, type.baseType)) return type;
+    return _dartTypes.nullableType(baseType);
+  }
+
+  @override
+  NeverType visitNeverType(NeverType type, Null _) => type;
+
+  @override
+  VoidType visitVoidType(VoidType type, Null _) => type;
+
+  @override
+  TypeVariableType visitTypeVariableType(TypeVariableType type, Null _) => type;
+
+  @override
+  FunctionTypeVariable visitFunctionTypeVariable(
+          FunctionTypeVariable type, Null _) =>
+      type;
+
+  @override
+  FunctionType visitFunctionType(FunctionType type, Null _) {
+    var returnType = erase(type.returnType);
+    var parameterTypes = eraseList(type.parameterTypes);
+    var optionalParameterTypes = eraseList(type.optionalParameterTypes);
+    var namedParameterTypes = eraseList(type.namedParameterTypes);
+
+    var oldTypeVariables = type.typeVariables;
+    var length = oldTypeVariables.length;
+
+    List<FunctionTypeVariable> typeVariables =
+        List<FunctionTypeVariable>(length);
+    List<FunctionTypeVariable> erasableTypeVariables = [];
+    List<FunctionTypeVariable> erasedTypeVariables = [];
+    for (int i = 0; i < length; i++) {
+      var oldTypeVariable = oldTypeVariables[i];
+      var oldBound = oldTypeVariable.bound;
+      var bound = erase(oldBound);
+      if (identical(bound, oldBound)) {
+        typeVariables[i] = oldTypeVariable;
+      } else {
+        var typeVariable = _dartTypes.functionTypeVariable(i)..bound = bound;
+        typeVariables[i] = typeVariable;
+        erasableTypeVariables.add(oldTypeVariable);
+        erasedTypeVariables.add(typeVariable);
+      }
+    }
+
+    if (identical(returnType, type.returnType) &&
+        identical(parameterTypes, type.parameterTypes) &&
+        identical(optionalParameterTypes, type.optionalParameterTypes) &&
+        identical(namedParameterTypes, type.namedParameterTypes) &&
+        erasableTypeVariables.isEmpty) return type;
+
+    return _dartTypes.subst(
+        erasedTypeVariables,
+        erasableTypeVariables,
+        _dartTypes.functionType(
+            returnType,
+            parameterTypes,
+            optionalParameterTypes,
+            type.namedParameters,
+            namedParameterTypes,
+            typeVariables));
+  }
+
+  @override
+  InterfaceType visitInterfaceType(InterfaceType type, Null _) {
+    var typeArguments = eraseList(type.typeArguments);
+    if (identical(typeArguments, type.typeArguments)) return type;
+    return _dartTypes.interfaceType(type.element, typeArguments);
+  }
+
+  @override
+  DynamicType visitDynamicType(DynamicType type, Null _) => type;
+
+  @override
+  ErasedType visitErasedType(ErasedType type, Null _) => type;
+
+  @override
+  AnyType visitAnyType(AnyType type, Null _) => type;
+
+  @override
+  DartType visitFutureOrType(FutureOrType type, Null _) {
+    var typeArgument = erase(type.typeArgument);
+    if (identical(typeArgument, type.typeArgument)) return type;
+    return _dartTypes.futureOrType(typeArgument);
+  }
+}
+
 abstract class DartTypeSubstitutionVisitor<A>
     extends DartTypeVisitor<DartType, A> {
   DartTypes get dartTypes;
@@ -1649,10 +1758,10 @@
         t is NullableType ||
         t is LegacyType && _isNullable(t.baseType) ||
         t is FutureOrType && _isNullable(t.typeArgument) ||
-        _isStrongTopType(t);
+        isStrongTopType(t);
 
     DartType result;
-    if (_isStrongTopType(baseType) ||
+    if (isStrongTopType(baseType) ||
         baseType.isNull ||
         baseType is NullableType ||
         baseType is FutureOrType && _isNullable(baseType.typeArgument)) {
@@ -1665,7 +1774,7 @@
         result = commonElements.nullType;
       } else if (legacyBaseType is FutureOrType &&
           _isNullable(legacyBaseType.typeArgument)) {
-        result = legacyBaseType.typeArgument;
+        result = legacyBaseType;
       } else {
         result = nullableType(legacyBaseType);
       }
@@ -1675,7 +1784,8 @@
     return result;
   }
 
-  DartType interfaceType(ClassEntity element, List<DartType> typeArguments) =>
+  InterfaceType interfaceType(
+          ClassEntity element, List<DartType> typeArguments) =>
       InterfaceType._(element, typeArguments);
 
   // TODO(fishythefish): Normalize `T extends Never` to `Never`.
@@ -1683,9 +1793,10 @@
       TypeVariableType._(element);
 
   // See [functionType] for normalization.
-  DartType functionTypeVariable(int index) => FunctionTypeVariable._(index);
+  FunctionTypeVariable functionTypeVariable(int index) =>
+      FunctionTypeVariable._(index);
 
-  DartType neverType() => const NeverType._();
+  NeverType neverType() => const NeverType._();
 
   VoidType voidType() => const VoidType._();
 
@@ -1736,6 +1847,9 @@
     return result;
   }
 
+  DartType eraseLegacy(DartType type) =>
+      _LegacyErasureVisitor(this).erase(type);
+
   /// Performs the substitution `[arguments[i]/parameters[i]]t`.
   ///
   /// The notation is known from this lambda calculus rule:
@@ -1775,7 +1889,7 @@
   /// Returns `true` if [t] is a top type, that is, a supertype of every type.
   bool isTopType(DartType t) => t._isTop(useNullSafety);
 
-  bool _isStrongTopType(DartType t) => t._isStrongTop(useNullSafety);
+  bool isStrongTopType(DartType t) => t._isStrongTop(useNullSafety);
 
   /// Returns `true` if [s] is a subtype of [t].
   bool isSubtype(DartType s, DartType t) => _subtypeHelper(s, t);
@@ -1818,7 +1932,7 @@
       if (isTopType(t)) return true;
 
       // Left Top:
-      if (_isStrongTopType(s)) return false;
+      if (isStrongTopType(s)) return false;
 
       // Left Bottom:
       if (useLegacySubtyping) {
diff --git a/pkg/compiler/lib/src/inferrer/typemasks/masks.dart b/pkg/compiler/lib/src/inferrer/typemasks/masks.dart
index fdfb99e..c3683c5 100644
--- a/pkg/compiler/lib/src/inferrer/typemasks/masks.dart
+++ b/pkg/compiler/lib/src/inferrer/typemasks/masks.dart
@@ -273,6 +273,13 @@
           nullable ? value : value.nonNullable(), isPrecise);
     }
 
+    if (type is NullableType) {
+      return createFromStaticType(type.baseType,
+          classRelation: classRelation, nullable: true);
+    }
+
+    // TODO(sra): Handle LegacyType more precisely.
+
     bool isPrecise = true;
     while (type is TypeVariableType) {
       TypeVariableType typeVariable = type;
diff --git a/pkg/compiler/lib/src/ir/static_type.dart b/pkg/compiler/lib/src/ir/static_type.dart
index dbe085e..75ec907 100644
--- a/pkg/compiler/lib/src/ir/static_type.dart
+++ b/pkg/compiler/lib/src/ir/static_type.dart
@@ -184,8 +184,7 @@
   /// If this is not the case the raw type of [superclass] is returned.
   ///
   /// This method is derived from `ir.Expression.getStaticTypeAsInstanceOf`.
-  ir.InterfaceType getTypeAsInstanceOf(
-      ir.DartType type, ir.Class superclass, ir.Library clientLibrary) {
+  ir.InterfaceType getTypeAsInstanceOf(ir.DartType type, ir.Class superclass) {
     // This method assumes the program is correctly typed, so if the superclass
     // is not generic, we can just return its raw type without computing the
     // type of this expression.  It also ensures that all types are considered
@@ -193,25 +192,26 @@
     // considered subtypes of Function.
     if (superclass.typeParameters.isEmpty) {
       return typeEnvironment.coreTypes
-          .rawType(superclass, ir.Nullability.legacy);
+          .rawType(superclass, currentLibrary.nonNullable);
     }
     while (type is ir.TypeParameterType) {
       type = (type as ir.TypeParameterType).parameter.bound;
     }
     if (type == typeEnvironment.nullType) {
       return typeEnvironment.coreTypes
-          .bottomInterfaceType(superclass, clientLibrary.nullable);
+          .bottomInterfaceType(superclass, currentLibrary.nullable);
     }
     if (type is ir.InterfaceType) {
       ir.InterfaceType upcastType = typeEnvironment.getTypeAsInstanceOf(
-          type, superclass, clientLibrary, typeEnvironment.coreTypes);
+          type, superclass, currentLibrary, typeEnvironment.coreTypes);
       if (upcastType != null) return upcastType;
     } else if (type is ir.BottomType) {
       return typeEnvironment.coreTypes
-          .bottomInterfaceType(superclass, clientLibrary.nonNullable);
+          .bottomInterfaceType(superclass, currentLibrary.nonNullable);
     }
     // TODO(johnniwinther): Should we assert that this doesn't happen?
-    return typeEnvironment.coreTypes.rawType(superclass, type.nullability);
+    return typeEnvironment.coreTypes
+        .rawType(superclass, currentLibrary.nonNullable);
   }
 
   /// Computes the result type of the property access [node] on a receiver of
@@ -228,8 +228,7 @@
     }
     if (interfaceTarget != null) {
       ir.Class superclass = interfaceTarget.enclosingClass;
-      receiverType =
-          getTypeAsInstanceOf(receiverType, superclass, currentLibrary);
+      receiverType = getTypeAsInstanceOf(receiverType, superclass);
       return ir.Substitution.fromInterfaceType(receiverType)
           .substituteType(interfaceTarget.getterType);
     }
@@ -299,7 +298,7 @@
         ir.Class superclass = interfaceTarget.enclosingClass;
         ir.Substitution receiverSubstitution =
             ir.Substitution.fromInterfaceType(
-                getTypeAsInstanceOf(receiverType, superclass, currentLibrary));
+                getTypeAsInstanceOf(receiverType, superclass));
         ir.DartType setterType =
             receiverSubstitution.substituteType(interfaceTarget.setterType);
         if (!typeEnvironment.isSubtypeOf(
@@ -332,8 +331,7 @@
   ir.DartType visitDirectPropertyGet(ir.DirectPropertyGet node) {
     ir.DartType receiverType = visitNode(node.receiver);
     ir.Class superclass = node.target.enclosingClass;
-    receiverType =
-        getTypeAsInstanceOf(receiverType, superclass, currentLibrary);
+    receiverType = getTypeAsInstanceOf(receiverType, superclass);
     ir.DartType resultType = ir.Substitution.fromInterfaceType(receiverType)
         .substituteType(node.target.getterType);
     _expressionTypeCache[node] = resultType;
@@ -358,8 +356,7 @@
           receiverType, argumentType);
     } else {
       ir.Class superclass = node.target.enclosingClass;
-      receiverType =
-          getTypeAsInstanceOf(receiverType, superclass, currentLibrary);
+      receiverType = getTypeAsInstanceOf(receiverType, superclass);
       ir.DartType returnType = ir.Substitution.fromInterfaceType(receiverType)
           .substituteType(node.target.function.returnType);
       returnType = ir.Substitution.fromPairs(
@@ -618,7 +615,7 @@
     if (interfaceTarget != null) {
       ir.Class superclass = interfaceTarget.enclosingClass;
       ir.Substitution receiverSubstitution = ir.Substitution.fromInterfaceType(
-          getTypeAsInstanceOf(receiverType, superclass, currentLibrary));
+          getTypeAsInstanceOf(receiverType, superclass));
       ir.DartType getterType =
           receiverSubstitution.substituteType(interfaceTarget.getterType);
       if (getterType is ir.FunctionType) {
diff --git a/pkg/compiler/lib/src/ir/visitors.dart b/pkg/compiler/lib/src/ir/visitors.dart
index c3afdfa..cd46b51 100644
--- a/pkg/compiler/lib/src/ir/visitors.dart
+++ b/pkg/compiler/lib/src/ir/visitors.dart
@@ -186,6 +186,8 @@
 
   ConstantValuefier(this.elementMap);
 
+  DartTypes get _dartTypes => elementMap.commonElements.dartTypes;
+
   @override
   ConstantValue defaultConstant(ir.Constant node) {
     throw new UnsupportedError(
@@ -199,7 +201,7 @@
 
   @override
   ConstantValue visitTypeLiteralConstant(ir.TypeLiteralConstant node) {
-    DartType type = elementMap.getDartType(node.type);
+    DartType type = _dartTypes.eraseLegacy(elementMap.getDartType(node.type));
     return constant_system.createType(elementMap.commonElements, type);
   }
 
diff --git a/pkg/compiler/lib/src/js_backend/backend_impact.dart b/pkg/compiler/lib/src/js_backend/backend_impact.dart
index 42fea65..ffa56a2 100644
--- a/pkg/compiler/lib/src/js_backend/backend_impact.dart
+++ b/pkg/compiler/lib/src/js_backend/backend_impact.dart
@@ -812,29 +812,21 @@
           _commonElements.rtiBindMethod,
           _commonElements.generalIsTestImplementation,
           _commonElements.generalAsCheckImplementation,
-          _commonElements.generalTypeCheckImplementation,
           // Specialized checks.
           _commonElements.specializedIsBool,
           _commonElements.specializedAsBoolNullable,
-          _commonElements.specializedCheckBoolNullable,
           // no specializedIsDouble.
           _commonElements.specializedAsDoubleNullable,
-          _commonElements.specializedCheckDoubleNullable,
           _commonElements.specializedIsInt,
           _commonElements.specializedAsIntNullable,
-          _commonElements.specializedCheckIntNullable,
           _commonElements.specializedIsNum,
           _commonElements.specializedAsNumNullable,
-          _commonElements.specializedCheckNumNullable,
           _commonElements.specializedIsString,
           _commonElements.specializedAsStringNullable,
-          _commonElements.specializedCheckStringNullable,
           _commonElements.specializedIsTop,
           _commonElements.specializedAsTop,
-          // no specializedCheckTop
           _commonElements.specializedIsObject,
           _commonElements.specializedAsObject,
-          _commonElements.specializedCheckObject,
         ], globalClasses: [
           _commonElements.closureClass, // instanceOrFunctionType uses this.
         ])
diff --git a/pkg/compiler/lib/src/js_backend/specialized_checks.dart b/pkg/compiler/lib/src/js_backend/specialized_checks.dart
index afb4661..9df9562 100644
--- a/pkg/compiler/lib/src/js_backend/specialized_checks.dart
+++ b/pkg/compiler/lib/src/js_backend/specialized_checks.dart
@@ -85,24 +85,21 @@
   }
 
   static MemberEntity findAsCheck(
-      DartType dartType, bool isTypeError, JCommonElements commonElements) {
+      DartType dartType, JCommonElements commonElements) {
     if (dartType is InterfaceType) {
       if (dartType.typeArguments.isNotEmpty) return null;
-      return _findAsCheck(dartType.element, commonElements,
-          isTypeError: isTypeError, isNullable: true);
+      return _findAsCheck(dartType.element, commonElements, isNullable: true);
     }
     return null;
   }
 
   static MemberEntity _findAsCheck(
       ClassEntity element, JCommonElements commonElements,
-      {bool isTypeError, bool isNullable}) {
+      {bool isNullable}) {
     if (element == commonElements.jsStringClass ||
         element == commonElements.stringClass) {
       if (isNullable) {
-        return isTypeError
-            ? commonElements.specializedCheckStringNullable
-            : commonElements.specializedAsStringNullable;
+        return commonElements.specializedAsStringNullable;
       }
       return null;
     }
@@ -110,9 +107,7 @@
     if (element == commonElements.jsBoolClass ||
         element == commonElements.boolClass) {
       if (isNullable) {
-        return isTypeError
-            ? commonElements.specializedCheckBoolNullable
-            : commonElements.specializedAsBoolNullable;
+        return commonElements.specializedAsBoolNullable;
       }
       return null;
     }
@@ -120,9 +115,7 @@
     if (element == commonElements.jsDoubleClass ||
         element == commonElements.doubleClass) {
       if (isNullable) {
-        return isTypeError
-            ? commonElements.specializedCheckDoubleNullable
-            : commonElements.specializedAsDoubleNullable;
+        return commonElements.specializedAsDoubleNullable;
       }
       return null;
     }
@@ -130,9 +123,7 @@
     if (element == commonElements.jsNumberClass ||
         element == commonElements.numClass) {
       if (isNullable) {
-        return isTypeError
-            ? commonElements.specializedCheckNumNullable
-            : commonElements.specializedAsNumNullable;
+        return commonElements.specializedAsNumNullable;
       }
       return null;
     }
@@ -143,9 +134,7 @@
         element == commonElements.jsUInt31Class ||
         element == commonElements.jsPositiveIntClass) {
       if (isNullable) {
-        return isTypeError
-            ? commonElements.specializedCheckIntNullable
-            : commonElements.specializedAsIntNullable;
+        return commonElements.specializedAsIntNullable;
       }
       return null;
     }
diff --git a/pkg/compiler/lib/src/js_backend/type_reference.dart b/pkg/compiler/lib/src/js_backend/type_reference.dart
index ac15b8e..e6b39a4 100644
--- a/pkg/compiler/lib/src/js_backend/type_reference.dart
+++ b/pkg/compiler/lib/src/js_backend/type_reference.dart
@@ -744,7 +744,7 @@
     if (arguments.isEmpty) return;
     if (arguments.length == 1) {
       // e.g. "List_of_int_Function"
-      if (arguments.first is FunctionType) {
+      if (arguments.first.withoutNullability is FunctionType) {
         _add('of');
       }
       // e.g. "List_int"
diff --git a/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart b/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
index c0c4dff..b8767b2 100644
--- a/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
+++ b/pkg/compiler/lib/src/js_emitter/startup_emitter/fragment_emitter.dart
@@ -1944,9 +1944,12 @@
 
     globals.add(js.Property(
         js.string(ARRAY_RTI_PROPERTY),
-        js.js(r'typeof Symbol == "function" && typeof Symbol() == "symbol"'
-            r'    ? Symbol("$ti")'
-            r'    : "$ti"')));
+        _options.legacyJavaScript
+            ? js.js(
+                r'typeof Symbol == "function" && typeof Symbol() == "symbol"'
+                r'    ? Symbol("$ti")'
+                r'    : "$ti"')
+            : js.js(r'Symbol("$ti")')));
 
     js.ObjectInitializer globalsObject = js.ObjectInitializer(globals);
 
diff --git a/pkg/compiler/lib/src/js_model/element_map_impl.dart b/pkg/compiler/lib/src/js_model/element_map_impl.dart
index 5e5fdd6..78e93d5 100644
--- a/pkg/compiler/lib/src/js_model/element_map_impl.dart
+++ b/pkg/compiler/lib/src/js_model/element_map_impl.dart
@@ -682,7 +682,9 @@
         data.instantiationToBounds = data.thisType;
       } else {
         data.instantiationToBounds = getInterfaceType(ir.instantiateToBounds(
-            coreTypes.legacyRawType(node), coreTypes.objectClass));
+            coreTypes.legacyRawType(node),
+            coreTypes.objectClass,
+            node.enclosingLibrary));
       }
     }
   }
diff --git a/pkg/compiler/lib/src/kernel/element_map_impl.dart b/pkg/compiler/lib/src/kernel/element_map_impl.dart
index ce1b97f..b0c227b 100644
--- a/pkg/compiler/lib/src/kernel/element_map_impl.dart
+++ b/pkg/compiler/lib/src/kernel/element_map_impl.dart
@@ -302,7 +302,9 @@
         data.instantiationToBounds = data.thisType;
       } else {
         data.instantiationToBounds = getInterfaceType(ir.instantiateToBounds(
-            coreTypes.legacyRawType(node), coreTypes.objectClass));
+            coreTypes.legacyRawType(node),
+            coreTypes.objectClass,
+            node.enclosingLibrary));
       }
     }
   }
diff --git a/pkg/compiler/lib/src/options.dart b/pkg/compiler/lib/src/options.dart
index 7355060..aa2af76 100644
--- a/pkg/compiler/lib/src/options.dart
+++ b/pkg/compiler/lib/src/options.dart
@@ -264,6 +264,14 @@
   /// `Object.runtimeType`.
   bool laxRuntimeTypeToString = false;
 
+  /// Whether to restrict the generated JavaScript to features that work on the
+  /// oldest supported versions of JavaScript. This currently means IE11. If
+  /// `true`, the generated code runs on the legacy JavaScript platform. If
+  /// `false`, the code will fail on the legacy JavaScript platform.
+  bool legacyJavaScript = true; // default value.
+  bool _legacyJavaScript = false;
+  bool _noLegacyJavaScript = false;
+
   /// What should the compiler do with parameter type assertions.
   ///
   /// This is an internal configuration option derived from other flags.
@@ -446,6 +454,8 @@
       ..omitAsCasts = _hasOption(options, Flags.omitAsCasts)
       ..laxRuntimeTypeToString =
           _hasOption(options, Flags.laxRuntimeTypeToString)
+      .._legacyJavaScript = _hasOption(options, Flags.legacyJavaScript)
+      .._noLegacyJavaScript = _hasOption(options, Flags.noLegacyJavaScript)
       ..testMode = _hasOption(options, Flags.testMode)
       ..trustJSInteropTypeAnnotations =
           _hasOption(options, Flags.trustJSInteropTypeAnnotations)
@@ -493,6 +503,10 @@
         equalMaps(languageExperiments, fe.defaultExperimentalFlags)) {
       throw new ArgumentError("Missing required ${Flags.platformBinaries}");
     }
+    if (_legacyJavaScript && _noLegacyJavaScript) {
+      throw ArgumentError("'${Flags.legacyJavaScript}' incompatible with "
+          "'${Flags.noLegacyJavaScript}'");
+    }
   }
 
   void deriveOptions() {
@@ -508,6 +522,9 @@
       useNewRti = false;
     }
 
+    if (_noLegacyJavaScript) legacyJavaScript = false;
+    if (_legacyJavaScript) legacyJavaScript = true;
+
     if (optimizationLevel != null) {
       if (optimizationLevel == 0) {
         disableInlining = true;
diff --git a/pkg/compiler/lib/src/ssa/builder_kernel.dart b/pkg/compiler/lib/src/ssa/builder_kernel.dart
index f3c8578..ffc588d 100644
--- a/pkg/compiler/lib/src/ssa/builder_kernel.dart
+++ b/pkg/compiler/lib/src/ssa/builder_kernel.dart
@@ -391,6 +391,8 @@
         return options.useNullSafety;
       case 'LEGACY':
         return options.useLegacySubtyping;
+      case 'LEGACY_JAVASCRIPT':
+        return options.legacyJavaScript;
       case 'PRINT_LEGACY_STARS':
         return options.printLegacyStars;
       default:
@@ -3104,14 +3106,14 @@
   /// Set the runtime type information if necessary.
   HInstruction _setListRuntimeTypeInfoIfNeeded(HInstruction object,
       InterfaceType type, SourceInformation sourceInformation) {
+    // [type] could be `List<T>`, so ensure it is `JSArray<T>`.
+    InterfaceType arrayType = dartTypes.interfaceType(
+        _commonElements.jsArrayClass, type.typeArguments);
     if (!_rtiNeed.classNeedsTypeArguments(type.element) ||
-        dartTypes.treatAsRawType(type)) {
+        _equivalentToMissingRti(arrayType)) {
       return object;
     }
     if (options.useNewRti) {
-      // [type] could be `List<T>`, so ensure it is `JSArray<T>`.
-      InterfaceType arrayType = dartTypes.interfaceType(
-          _commonElements.jsArrayClass, type.typeArguments);
       HInstruction rti =
           _typeBuilder.analyzeTypeArgumentNewRti(arrayType, sourceElement);
 
@@ -4729,6 +4731,15 @@
     push(rti);
   }
 
+  bool _equivalentToMissingRti(InterfaceType type) {
+    assert(type.element == _commonElements.jsArrayClass);
+    if (dartTypes.useNullSafety) {
+      return dartTypes.isStrongTopType(type.typeArguments.single);
+    } else {
+      return dartTypes.treatAsRawType(type);
+    }
+  }
+
   void _handleForeignJs(ir.StaticInvocation invocation) {
     if (_unexpectedForeignArguments(invocation,
         minPositional: 2, maxPositional: null, typeArgumentCount: 1)) {
diff --git a/pkg/compiler/lib/src/ssa/codegen.dart b/pkg/compiler/lib/src/ssa/codegen.dart
index 6727238..b5848269 100644
--- a/pkg/compiler/lib/src/ssa/codegen.dart
+++ b/pkg/compiler/lib/src/ssa/codegen.dart
@@ -3535,9 +3535,7 @@
 
     _registry.registerTypeUse(TypeUse.isCheck(node.checkedTypeExpression));
 
-    FieldEntity field = node.isTypeError
-        ? _commonElements.rtiCheckField
-        : _commonElements.rtiAsField;
+    FieldEntity field = _commonElements.rtiAsField;
     js.Name name = _namer.instanceFieldPropertyName(field);
 
     push(js.js('#.#(#)', [first, name, second]).withSourceInformation(
diff --git a/pkg/compiler/lib/src/ssa/optimize.dart b/pkg/compiler/lib/src/ssa/optimize.dart
index 5c12d0b..4f2dfa8 100644
--- a/pkg/compiler/lib/src/ssa/optimize.dart
+++ b/pkg/compiler/lib/src/ssa/optimize.dart
@@ -2133,8 +2133,8 @@
     if (typeInput is HLoadType) {
       TypeExpressionRecipe recipe = typeInput.typeExpression;
       DartType dartType = recipe.type;
-      MemberEntity specializedCheck = SpecializedChecks.findAsCheck(
-          dartType, node.isTypeError, _closedWorld.commonElements);
+      MemberEntity specializedCheck =
+          SpecializedChecks.findAsCheck(dartType, _closedWorld.commonElements);
       if (specializedCheck != null) {
         AbstractValueWithPrecision checkedType =
             _abstractValueDomain.createFromStaticType(dartType, nullable: true);
diff --git a/pkg/compiler/lib/src/tracer.dart b/pkg/compiler/lib/src/tracer.dart
index e42352b..66564af 100644
--- a/pkg/compiler/lib/src/tracer.dart
+++ b/pkg/compiler/lib/src/tracer.dart
@@ -17,8 +17,7 @@
     : TRACE_FILTER_PATTERN_FOR_TEST;
 
 const String TRACE_FILTER_PATTERN_FROM_ENVIRONMENT =
-    // TODO(sigmund): remove `?? ''` once #40678 is backported.
-    const String.fromEnvironment("DUMP_IR") ?? '';
+    String.fromEnvironment("DUMP_IR", defaultValue: "");
 String TRACE_FILTER_PATTERN_FOR_TEST;
 
 /// Dumps the intermediate representation after each phase in a format
diff --git a/pkg/compiler/lib/src/util/util.dart b/pkg/compiler/lib/src/util/util.dart
index 1174c10..a4e0f16 100644
--- a/pkg/compiler/lib/src/util/util.dart
+++ b/pkg/compiler/lib/src/util/util.dart
@@ -103,6 +103,18 @@
   }
 }
 
+bool identicalElements<E>(List<E> a, List<E> b) {
+  if (identical(a, b)) return true;
+  if (a == null || b == null) return false;
+  if (a.length != b.length) return false;
+  for (int index = 0; index < a.length; index++) {
+    if (!identical(a[index], b[index])) {
+      return false;
+    }
+  }
+  return true;
+}
+
 bool equalElements<E>(List<E> a, List<E> b) {
   if (identical(a, b)) return true;
   if (a == null || b == null) return false;
diff --git a/pkg/dartdev/lib/src/commands/pub.dart b/pkg/dartdev/lib/src/commands/pub.dart
index acc8e39..1b24c65 100644
--- a/pkg/dartdev/lib/src/commands/pub.dart
+++ b/pkg/dartdev/lib/src/commands/pub.dart
@@ -15,6 +15,25 @@
 
   final ArgParser argParser = ArgParser.allowAnything();
 
+  /// Override [printUsage] for invocations of 'dart help pub' which won't
+  /// execute [run] below.  Without this, the 'dart help pub' reports the
+  /// command pub with no commands or flags.
+  @override
+  void printUsage() {
+    final command = sdk.pub;
+    final args = ['help'];
+
+    log.trace('$command ${args.first}');
+
+    // Call 'pub help'
+    // Process.runSync(..) is used since [printUsage] is not an async method,
+    // and we want to guarantee that the result (the help text for the console)
+    // is printed before command exits.
+    final result = Process.runSync(command, args);
+    stderr.write(result.stderr);
+    stdout.write(result.stdout);
+  }
+
   @override
   FutureOr<int> run() async {
     final command = sdk.pub;
diff --git a/pkg/dartdev/test/commands/help_test.dart b/pkg/dartdev/test/commands/help_test.dart
new file mode 100644
index 0000000..cfc6e77
--- /dev/null
+++ b/pkg/dartdev/test/commands/help_test.dart
@@ -0,0 +1,58 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'package:args/command_runner.dart';
+import 'package:dartdev/dartdev.dart';
+import 'package:test/test.dart';
+
+import '../utils.dart';
+
+void main() {
+  group('help', help);
+}
+
+void help() {
+  TestProject p;
+
+  tearDown(() => p?.dispose());
+
+  /// Commands not tested by the following loop.
+  List<String> _commandsNotTested = <String>[
+    'help', // `dart help help` is redundant
+    'test' // TODO(jwren) not yet implemented, dartbug.com/41041
+  ];
+  DartdevRunner([]).commands.forEach((String commandKey, Command command) {
+    if (!_commandsNotTested.contains(commandKey)) {
+      test('(help $commandKey == $commandKey --help)', () {
+        p = project();
+        var result = p.runSync('help', [commandKey]);
+
+        var verbHelpResult = p.runSync(commandKey, ['--help']);
+        expect(result.stdout, contains(verbHelpResult.stdout));
+        expect(result.stderr, contains(verbHelpResult.stderr));
+      });
+    }
+  });
+
+  test('(help pub == pub help)', () {
+    p = project();
+    var result = p.runSync('help', ['pub']);
+
+    var pubHelpResult = p.runSync('pub', ['help']);
+    expect(result.stdout, contains(pubHelpResult.stdout));
+    expect(result.stderr, contains(pubHelpResult.stderr));
+  });
+
+  test('(--help flags also have -h abbr)', () {
+    DartdevRunner([]).commands.forEach((String commandKey, Command command) {
+      var helpOption = command.argParser.options['help'];
+      // Some commands (like pub which use
+      // "argParser = ArgParser.allowAnything()") may not have the help Option
+      // accessible with the API used above:
+      if (helpOption != null) {
+        expect(helpOption.abbr, 'h', reason: '');
+      }
+    });
+  });
+}
diff --git a/pkg/dartdev/test/test_all.dart b/pkg/dartdev/test/test_all.dart
index 552691c..4b9ccaa 100644
--- a/pkg/dartdev/test/test_all.dart
+++ b/pkg/dartdev/test/test_all.dart
@@ -8,6 +8,7 @@
 import 'commands/create_test.dart' as create;
 import 'commands/flag_test.dart' as flag;
 import 'commands/format_test.dart' as format;
+import 'commands/help_test.dart' as help;
 import 'commands/migrate_test.dart' as migrate;
 import 'commands/pub_test.dart' as pub;
 import 'commands/test_test.dart' as test;
@@ -16,11 +17,12 @@
 import 'utils_test.dart' as utils;
 
 main() {
-  group('dartdev', () {
+  group('dart', () {
     analyze.main();
     create.main();
     flag.main();
     format.main();
+    help.main();
     migrate.main();
     pub.main();
     test.main();
diff --git a/pkg/dds/.gitignore b/pkg/dds/.gitignore
new file mode 100644
index 0000000..e308da7
--- /dev/null
+++ b/pkg/dds/.gitignore
@@ -0,0 +1,5 @@
+# See https://dart.dev/guides/libraries/private-files
+.dart_tool/
+.packages
+build/
+pubspec.lock
diff --git a/pkg/dds/CHANGELOG.md b/pkg/dds/CHANGELOG.md
new file mode 100644
index 0000000..1f3d60f
--- /dev/null
+++ b/pkg/dds/CHANGELOG.md
@@ -0,0 +1,3 @@
+# 0.1.0-dev
+
+- Initial release.
diff --git a/pkg/dds/LICENSE b/pkg/dds/LICENSE
new file mode 100644
index 0000000..18daf2b
--- /dev/null
+++ b/pkg/dds/LICENSE
@@ -0,0 +1,26 @@
+Copyright 2020, the Dart project authors. All rights reserved.
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+    * Redistributions of source code must retain the above copyright
+      notice, this list of conditions and the following disclaimer.
+    * Redistributions in binary form must reproduce the above
+      copyright notice, this list of conditions and the following
+      disclaimer in the documentation and/or other materials provided
+      with the distribution.
+    * Neither the name of Google Inc. nor the names of its
+      contributors may be used to endorse or promote products derived
+      from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
diff --git a/pkg/dds/README.md b/pkg/dds/README.md
new file mode 100644
index 0000000..ab9067c
--- /dev/null
+++ b/pkg/dds/README.md
@@ -0,0 +1,10 @@
+_This package is a work in-progress and the API may not be stable. Stay tuned for updates._
+
+A package used to spawn the Dart Developer Service (DDS), which is used to communicate with a Dart VM Service instance and provide extended functionality to the core VM Service Protocol.
+
+# Functionality
+
+Existing VM Service clients can issue both HTTP and websocket requests to a running DDS instance as if it were an instance of the VM Service itself. If a request corresponds to an RPC defined in the [VM Service Protocol][service-protocol], DDS will forward the request and return the response from the VM Service. Requests corresponding to an RPC defined in the [DDS Protocol][dds-protocol] will be handled directly by the DDS instance.
+
+[dds-protocol]: dds_protocol.md
+[service-protocol]: https://github.com/dart-lang/sdk/blob/master/runtime/vm/service/service.md
diff --git a/pkg/dds/analysis_options.yaml b/pkg/dds/analysis_options.yaml
new file mode 100644
index 0000000..b5e3320
--- /dev/null
+++ b/pkg/dds/analysis_options.yaml
@@ -0,0 +1,6 @@
+include: package:pedantic/analysis_options.1.7.0.yaml
+
+linter:
+  rules:
+    - directives_ordering
+    - prefer_generic_function_type_aliases
diff --git a/pkg/dds/dds_protocol.md b/pkg/dds/dds_protocol.md
new file mode 100644
index 0000000..fb6fd82
--- /dev/null
+++ b/pkg/dds/dds_protocol.md
@@ -0,0 +1,56 @@
+# Dart Development Service Protocol 0.x
+
+This document describes _version 0.x_ of the Dart Development Service Protocol.
+This protocol is an extension of the Dart VM Service Protocol and implements it
+in it's entirety. For details on the VM Service Protocol, see the [Dart VM Service Protocol Specification][service-protocol].
+
+The Service Protocol uses [JSON-RPC 2.0][].
+
+[JSON-RPC 2.0]: http://www.jsonrpc.org/specification
+
+
+**Table of Contents**
+
+- [RPCs, Requests, and Responses](#rpcs-requests-and-responses)
+- [Events](#events)
+- [Types](#types)
+- [IDs and Names](#ids-and-names)
+- [Revision History](#revision-history)
+
+## RPCs, Requests, and Responses
+
+See the corresponding section in the VM Service protocol [here][service-protocol-rpcs-requests-and-responses].
+
+## Events
+
+See the corresponding section in the VM Service protocol [here][service-protocol-events].
+
+## Binary Events
+
+See the corresponding section in the VM Service protocol [here][service-protocol-binary-events].
+
+## Types
+
+See the corresponding section in the VM Service protocol [here][service-protocol-types].
+
+## IDs and Names
+
+See the corresponding section in the VM Service protocol [here][service-protocol-ids-and-names].
+
+## Public RPCs
+
+The DDS Protocol supports all [public RPCs defined in the VM Service protocol][service-protocol-public-rpcs].
+
+## Revision History
+
+version | comments
+------- | --------
+0.x | Initial revision
+
+[service-protocol]: https://github.com/dart-lang/sdk/blob/master/runtime/vm/service/service.md
+[service-protocol-rpcs-requests-and-responses]: https://github.com/dart-lang/sdk/blob/master/runtime/vm/service/service.md#rpcs-requests-and-responses
+[service-protocol-events]: https://github.com/dart-lang/sdk/blob/master/runtime/vm/service/service.md#events
+[service-protocol-binary-events]: https://github.com/dart-lang/sdk/blob/master/runtime/vm/service/service.md#binary-events
+[service-protocol-types]: https://github.com/dart-lang/sdk/blob/master/runtime/vm/service/service.md#types
+[service-protocol-ids-and-names]: https://github.com/dart-lang/sdk/blob/master/runtime/vm/service/service.md#ids-and-names
+[service-protocol-public-rpcs]: https://github.com/dart-lang/sdk/blob/master/runtime/vm/service/service.md#public-rpcs
\ No newline at end of file
diff --git a/pkg/dds/lib/dds.dart b/pkg/dds/lib/dds.dart
new file mode 100644
index 0000000..d2bb5ea
--- /dev/null
+++ b/pkg/dds/lib/dds.dart
@@ -0,0 +1,87 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+/// A library used to spawn the Dart Developer Service, used to communicate
+/// with a Dart VM Service instance.
+library dds;
+
+import 'dart:async';
+import 'dart:io';
+
+import 'package:shelf/shelf.dart';
+import 'package:shelf/shelf_io.dart' as io;
+import 'package:shelf_proxy/shelf_proxy.dart';
+import 'package:shelf_web_socket/shelf_web_socket.dart';
+import 'package:web_socket_channel/web_socket_channel.dart';
+
+part 'src/dds_impl.dart';
+
+/// An intermediary between a Dart VM service and its clients that offers
+/// additional functionality on top of the standard VM service protocol.
+///
+/// See the [Dart Development Service Protocol](https://github.com/dart-lang/sdk/blob/master/pkg/dds/dds_protocol.md)
+/// for details.
+abstract class DartDevelopmentService {
+  /// Creates a [DartDevelopmentService] instance which will communicate with a
+  /// VM service.
+  ///
+  /// [remoteVmServiceUri] is the address of the VM service that this
+  /// development service will communicate with.
+  ///
+  /// If provided, [serviceUri] will determine the address and port of the
+  /// spawned Dart Development Service.
+  static Future<DartDevelopmentService> startDartDevelopmentService(
+    Uri remoteVmServiceUri, {
+    Uri serviceUri,
+  }) async {
+    if (remoteVmServiceUri == null) {
+      throw ArgumentError.notNull('remoteVmServiceUri');
+    }
+    if (remoteVmServiceUri.scheme != 'http') {
+      throw ArgumentError(
+        'remoteVmServiceUri must have an HTTP scheme. Actual: ${remoteVmServiceUri.scheme}',
+      );
+    }
+    if (serviceUri != null && serviceUri.scheme != 'http') {
+      throw ArgumentError(
+        'serviceUri must have an HTTP scheme. Actual: ${serviceUri.scheme}',
+      );
+    }
+
+    final service = _DartDevelopmentService(remoteVmServiceUri, serviceUri);
+    await service.startService();
+    return service;
+  }
+
+  DartDevelopmentService._();
+
+  /// Stop accepting requests after gracefully handling existing requests.
+  Future<void> shutdown();
+
+  /// The HTTP [Uri] of the remote VM service instance that this service will
+  /// forward requests to.
+  Uri get remoteVmServiceUri;
+
+  /// The web socket [Uri] of the remote VM service instance that this service
+  /// will forward requests to.
+  ///
+  /// Can be used with [WebSocket] to communicate directly with the VM service.
+  Uri get remoteVmServiceWsUri;
+
+  /// The [Uri] VM service clients can use to communicate with this
+  /// [DartDevelopmentService] via HTTP.
+  ///
+  /// Returns `null` if the service is not running.
+  Uri get uri;
+
+  /// The [Uri] VM service clients can use to communicate with this
+  /// [DartDevelopmentService] via a [WebSocket].
+  ///
+  /// Returns `null` if the service is not running.
+  Uri get wsUri;
+
+  /// Set to `true` if this instance of [DartDevelopmentService] is accepting
+  /// requests.
+  bool get isRunning;
+}
diff --git a/pkg/dds/lib/src/dds_impl.dart b/pkg/dds/lib/src/dds_impl.dart
new file mode 100644
index 0000000..37f019a
--- /dev/null
+++ b/pkg/dds/lib/src/dds_impl.dart
@@ -0,0 +1,85 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+part of dds;
+
+class _DartDevelopmentService implements DartDevelopmentService {
+  _DartDevelopmentService(this._remoteVmServiceUri, this._uri);
+
+  Future<void> startService() async {
+    // Establish the connection to the VM service.
+    _vmServiceSocket = await WebSocket.connect(remoteVmServiceWsUri.toString());
+    _vmServiceStream = _vmServiceSocket.asBroadcastStream();
+    // Once we have a connection to the VM service, we're ready to spawn the intermediary.
+    await _startDDSServer();
+  }
+
+  Future<void> _startDDSServer() async {
+    // No provided address, bind to an available port on localhost.
+    // TODO(bkonyi): handle case where there's no IPv4 loopback.
+    final host = uri?.host ?? InternetAddress.loopbackIPv4.host;
+    final port = uri?.port ?? 0;
+
+    // Start the DDS server.
+    _server = await io.serve(_handlers().handler, host, port);
+    _uri = Uri(scheme: 'http', host: host, port: _server.port);
+  }
+
+  /// Stop accepting requests after gracefully handling existing requests.
+  Future<void> shutdown() async {
+    await _server.close();
+    await _vmServiceSocket.close();
+  }
+
+  // Attempt to upgrade HTTP requests to a websocket before processing them as
+  // standard HTTP requests. The websocket handler will fail quickly if the
+  // request doesn't appear to be a websocket upgrade request.
+  Cascade _handlers() => Cascade().add(_webSocketHandler()).add(_httpHandler());
+
+  Handler _webSocketHandler() => webSocketHandler((WebSocketChannel ws) {
+        // TODO(bkonyi): actually process requests instead of blindly forwarding them.
+        _vmServiceStream.listen(
+          (event) => ws.sink.add(event),
+          onDone: () => ws.sink.close(),
+        );
+        ws.stream.listen((event) => _vmServiceSocket.add(event));
+      });
+
+  Handler _httpHandler() {
+    // TODO(bkonyi): actually process requests instead of blindly forwarding them.
+    final cascade = Cascade().add(proxyHandler(remoteVmServiceUri));
+    return cascade.handler;
+  }
+
+  Uri _toWebSocket(Uri uri) {
+    if (uri == null) {
+      return null;
+    }
+    final pathSegments = <String>[];
+    if (uri.pathSegments.isNotEmpty) {
+      pathSegments.addAll(uri.pathSegments.where(
+        // Strip out the empty string that appears at the end of path segments.
+        // Empty string elements will result in an extra '/' being added to the
+        // URI.
+        (s) => s.isNotEmpty,
+      ));
+    }
+    pathSegments.add('ws');
+    return uri.replace(scheme: 'ws', pathSegments: pathSegments);
+  }
+
+  Uri get remoteVmServiceUri => _remoteVmServiceUri;
+  Uri get remoteVmServiceWsUri => _toWebSocket(_remoteVmServiceUri);
+  Uri _remoteVmServiceUri;
+
+  Uri get uri => _uri;
+  Uri get wsUri => _toWebSocket(_uri);
+  Uri _uri;
+
+  bool get isRunning => _uri != null;
+
+  WebSocket _vmServiceSocket;
+  Stream _vmServiceStream;
+  HttpServer _server;
+}
diff --git a/pkg/dds/pubspec.yaml b/pkg/dds/pubspec.yaml
new file mode 100644
index 0000000..8734df5
--- /dev/null
+++ b/pkg/dds/pubspec.yaml
@@ -0,0 +1,23 @@
+name: dds
+description: >-
+  A library used to spawn the Dart Developer Service, used to communicate with
+  a Dart VM Service instance.
+
+version: 0.1.0-dev
+
+homepage: https://github.com/dart-lang/sdk/tree/master/pkg/dds
+
+environment:
+  sdk: '>=2.6.0 <3.0.0'
+
+dependencies:
+  json_rpc_2: ^2.1.0
+  shelf: ^0.7.5
+  shelf_proxy: ^0.1.0+7
+  shelf_web_socket: ^0.2.3
+  web_socket_channel: ^1.1.0
+
+dev_dependencies:
+  pedantic: ^1.7.0
+  test: ^1.0.0
+  vm_service: ^4.0.0
diff --git a/pkg/dds/test/smoke.dart b/pkg/dds/test/smoke.dart
new file mode 100644
index 0000000..f4c4774
--- /dev/null
+++ b/pkg/dds/test/smoke.dart
@@ -0,0 +1,3 @@
+void main() {
+  print('Hello world!');
+}
diff --git a/pkg/dds/test/smoke_test.dart b/pkg/dds/test/smoke_test.dart
new file mode 100644
index 0000000..cc266fc
--- /dev/null
+++ b/pkg/dds/test/smoke_test.dart
@@ -0,0 +1,90 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:convert';
+import 'dart:io';
+
+import 'package:dds/dds.dart';
+import 'package:test/test.dart';
+import 'package:vm_service/vm_service_io.dart';
+
+Uri remoteVmServiceUri;
+
+Future<Process> spawnDartProcess(String script) async {
+  final executable = Platform.executable;
+  final tmpDir = await Directory.systemTemp.createTemp('dart_service');
+  final serviceInfoUri = tmpDir.uri.resolve('service_info.json');
+  final serviceInfoFile = await File.fromUri(serviceInfoUri).create();
+
+  final arguments = [
+    '--observe=0',
+    '--pause-isolates-on-start',
+    '--write-service-info=$serviceInfoUri',
+    script,
+  ];
+  final process = await Process.start(executable, arguments);
+  while ((await serviceInfoFile.length()) <= 5) {
+    await Future.delayed(const Duration(milliseconds: 50));
+  }
+  final content = await serviceInfoFile.readAsString();
+  final infoJson = json.decode(content);
+  remoteVmServiceUri = Uri.parse(infoJson['uri']);
+  return process;
+}
+
+void main() {
+  test('DDS Smoke Test', () async {
+    final process = await spawnDartProcess('smoke.dart');
+    final dds = await DartDevelopmentService.startDartDevelopmentService(
+      remoteVmServiceUri,
+    );
+    expect(dds.isRunning, true);
+
+    // Ensure basic websocket requests are forwarded correctly to the VM service.
+    final service = await vmServiceConnectUri(dds.wsUri.toString());
+    final version = await service.getVersion();
+    expect(version.major > 0, true);
+    expect(version.minor > 0, true);
+
+    // Ensure we can still make requests of the VM service via HTTP.
+    HttpClient client = HttpClient();
+    final request = await client.getUrl(remoteVmServiceUri.replace(
+      pathSegments: [
+        remoteVmServiceUri.pathSegments.first,
+        'getVersion',
+      ],
+    ));
+    final response = await request.close();
+    final Map<String, dynamic> jsonResponse =
+        (await response.transform(utf8.decoder).transform(json.decoder).single);
+    expect(jsonResponse['result']['type'], 'Version');
+    expect(jsonResponse['result']['major'] > 0, true);
+    expect(jsonResponse['result']['minor'] > 0, true);
+    await dds.shutdown();
+    process.kill();
+  });
+
+  test('Invalid args test', () async {
+    // null VM Service URI
+    expect(
+        () async =>
+            await DartDevelopmentService.startDartDevelopmentService(null),
+        throwsA(TypeMatcher<ArgumentError>()));
+
+    // Non-HTTP VM Service URI scheme
+    expect(
+        () async => await DartDevelopmentService.startDartDevelopmentService(
+              Uri.parse('dart-lang://localhost:1234'),
+            ),
+        throwsA(TypeMatcher<ArgumentError>()));
+
+    // Non-HTTP VM Service URI scheme
+    expect(
+        () async => await DartDevelopmentService.startDartDevelopmentService(
+              Uri.parse('http://localhost:1234'),
+              serviceUri: Uri.parse('dart-lang://localhost:2345'),
+            ),
+        throwsA(TypeMatcher<ArgumentError>()));
+  });
+}
diff --git a/pkg/dev_compiler/lib/src/compiler/module_builder.dart b/pkg/dev_compiler/lib/src/compiler/module_builder.dart
index 41c74b3..842287d 100644
--- a/pkg/dev_compiler/lib/src/compiler/module_builder.dart
+++ b/pkg/dev_compiler/lib/src/compiler/module_builder.dart
@@ -3,6 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:args/args.dart' show ArgParser, ArgResults;
+import 'package:dev_compiler/src/compiler/shared_compiler.dart';
 import 'package:path/path.dart' as p;
 
 import '../js_ast/js_ast.dart';
@@ -71,6 +72,7 @@
 Program transformModuleFormat(ModuleFormat format, Program module) {
   switch (format) {
     case ModuleFormat.ddc:
+      // Legacy format always generates output compatible with single file mode.
       return DdcModuleBuilder().build(module);
     case ModuleFormat.common:
       return CommonJSModuleBuilder().build(module);
@@ -185,12 +187,13 @@
         js.fun("function(#) { 'use strict'; #; }", [parameters, statements]),
         true);
 
-    var moduleDef = js.statement('dart_library.library(#, #, #, #)', [
+    var moduleDef = js.statement('dart_library.library(#, #, #, #, #)', [
       js.string(module.name, "'"),
       LiteralNull(),
       js.commentExpression(
           'Imports', ArrayInitializer(importNames, multiline: true)),
-      resultModule
+      resultModule,
+      SharedCompiler.metricsLocationID
     ]);
     return Program(<ModuleItem>[moduleDef]);
   }
diff --git a/pkg/dev_compiler/lib/src/compiler/shared_compiler.dart b/pkg/dev_compiler/lib/src/compiler/shared_compiler.dart
index b0f5da7..542552a 100644
--- a/pkg/dev_compiler/lib/src/compiler/shared_compiler.dart
+++ b/pkg/dev_compiler/lib/src/compiler/shared_compiler.dart
@@ -594,13 +594,17 @@
   @protected
   js_ast.LiteralString propertyName(String name) => js.string(name, "'");
 
-  /// Unique identifier indicating the location to inline the source map.
+  /// Unique identifiers indicating the locations to inline the corresponding
+  /// information.
   ///
   /// We cannot generate the source map before the script it is for is
   /// generated so we have generate the script including this identifier in the
-  /// JS AST, and then replace it once the source map is generated.
+  /// JS AST, and then replace it once the source map is generated.  Similarly,
+  /// metrics include the size of the source map.
   static const String sourceMapLocationID =
       'SourceMap3G5a8h6JVhHfdGuDxZr1EF9GQC8y0e6u';
+  static const String metricsLocationID =
+      'MetricsJ7xFWBfSv6ZjrW9yLb21GNzisZr3anSf5h';
 }
 
 /// Whether a variable with [name] is referenced in the [node].
diff --git a/pkg/dev_compiler/lib/src/kernel/command.dart b/pkg/dev_compiler/lib/src/kernel/command.dart
index 04b3e86..fd7c675 100644
--- a/pkg/dev_compiler/lib/src/kernel/command.dart
+++ b/pkg/dev_compiler/lib/src/kernel/command.dart
@@ -415,7 +415,8 @@
         jsUrl: p.toUri(output).toString(),
         mapUrl: p.toUri(output + '.map').toString(),
         customScheme: multiRootScheme,
-        multiRootOutputPath: multiRootOutputPath);
+        multiRootOutputPath: multiRootOutputPath,
+        component: compiledLibraries);
 
     outFiles.add(file.writeAsString(jsCode.code));
     if (jsCode.sourceMap != null) {
@@ -514,7 +515,8 @@
         jsUrl: p.toUri(output).toString(),
         mapUrl: p.toUri(output + '.map').toString(),
         customScheme: multiRootScheme,
-        multiRootOutputPath: multiRootOutputPath);
+        multiRootOutputPath: multiRootOutputPath,
+        component: component);
 
     outFiles.add(file.writeAsString(jsCode.code));
     if (jsCode.sourceMap != null) {
@@ -525,6 +527,33 @@
   return CompilerResult(0);
 }
 
+// Compute code size to embed in the generated JavaScript
+// for this module.  Return `null` to indicate when size could not be properly
+// computed for this module.
+int _computeDartSize(Component component) {
+  var dartSize = 0;
+  var uriToSource = component.uriToSource;
+  for (var lib in component.libraries) {
+    var libUri = lib.fileUri;
+    var importUri = lib.importUri;
+    var source = uriToSource[libUri];
+    if (source == null) return null;
+    dartSize += source.source.length;
+    for (var part in lib.parts) {
+      var partUri = part.partUri;
+      if (partUri.startsWith(importUri.scheme)) {
+        // Convert to a relative-to-library uri in order to compute a file uri.
+        partUri = p.relative(partUri, from: p.dirname('${lib.importUri}'));
+      }
+      var fileUri = libUri.resolve(partUri);
+      var partSource = uriToSource[fileUri];
+      if (partSource == null) return null;
+      dartSize += partSource.source.length;
+    }
+  }
+  return dartSize;
+}
+
 /// The output of compiling a JavaScript module in a particular format.
 /// This was copied from module_compiler.dart class "JSModuleCode".
 class JSCode {
@@ -554,7 +583,8 @@
     String mapUrl,
     String sourceMapBase,
     String customScheme,
-    String multiRootOutputPath}) {
+    String multiRootOutputPath,
+    Component component}) {
   var opts = js_ast.JavaScriptPrintingOptions(
       allowKeywordsInProperties: true, allowSingleLineIfStatements: true);
   js_ast.SimpleJavaScriptPrintingContext printer;
@@ -585,11 +615,28 @@
   }
 
   var text = printer.getText();
-  var rawSourceMap = inlineSourceMap
-      ? js.escapedString(json.encode(builtMap), "'").value
-      : 'null';
+  var encodedMap = json.encode(builtMap);
+  var rawSourceMap =
+      inlineSourceMap ? js.escapedString(encodedMap, "'").value : 'null';
   text = text.replaceFirst(SharedCompiler.sourceMapLocationID, rawSourceMap);
 
+  // This is intended to be used by our build/debug tools to gather metrics.
+  // See pkg/dev_compiler/lib/js/legacy/dart_library.js for runtime code that
+  // reads this.
+  //
+  // These keys (see corresponding logic in dart_library.js) include:
+  // - dartSize: <size of Dart input code in bytes>
+  // - sourceMapSize: <size of JS source map in bytes>
+  //
+  // TODO(vsm): Ideally, this information is never sent to the browser.  I.e.,
+  // our runtime metrics gathering would obtain this information from the
+  // compilation server, not the browser.  We don't yet have the infra for that.
+  var compileTimeStatistics = {
+    'dartSize': component != null ? _computeDartSize(component) : null,
+    'sourceMapSize': encodedMap.length
+  };
+  text = text.replaceFirst(
+      SharedCompiler.metricsLocationID, '$compileTimeStatistics');
   return JSCode(text, builtMap);
 }
 
diff --git a/pkg/dev_compiler/lib/src/kernel/compiler.dart b/pkg/dev_compiler/lib/src/kernel/compiler.dart
index 7317c59..99d4bc6 100644
--- a/pkg/dev_compiler/lib/src/kernel/compiler.dart
+++ b/pkg/dev_compiler/lib/src/kernel/compiler.dart
@@ -1055,13 +1055,7 @@
         body.add(js.statement('''
             #.as = function as_FutureOr(o) {
               if (#.is(o) || #.is(o)) return o;
-              return #.as(o, this, false);
-            }
-            ''', [className, typeT, futureOfT, runtimeModule]));
-        body.add(js.statement('''
-            #._check = function check_FutureOr(o) {
-              if (#.is(o) || #.is(o)) return o;
-              return #.as(o, this, true);
+              return #.as(o, this);
             }
             ''', [className, typeT, futureOfT, runtimeModule]));
         return null;
@@ -1079,13 +1073,7 @@
         body.add(js.statement('''
             #.as = function as_FutureOr(o) {
               if (o == null || #.is(o) || #.is(o)) return o;
-              #.castError(o, this, false);
-            }
-            ''', [className, typeT, futureOfT, runtimeModule]));
-        body.add(js.statement('''
-            #._check = function check_FutureOr(o) {
-              if (o == null || #.is(o) || #.is(o)) return o;
-              #.castError(o, this, true);
+              #.castError(o, this);
             }
             ''', [className, typeT, futureOfT, runtimeModule]));
         return null;
@@ -2296,8 +2284,6 @@
     switch (name) {
       // Reserved for the compiler to do `x as T`.
       case 'as':
-      // Reserved for the compiler to do implicit cast `T x = y`.
-      case '_check':
       // Reserved for the SDK to compute `Type.toString()`.
       case 'name':
       // Reserved by JS, not a valid static member name.
@@ -5258,8 +5244,7 @@
         from.withNullability(Nullability.nonNullable) == to &&
         _mustBeNonNullable(to)) {
       // If the underlying type is the same, we only need a null check.
-      return runtimeCall('nullCast(#, #, #)',
-          [jsFrom, _emitType(to), js.boolean(isTypeError)]);
+      return runtimeCall('nullCast(#, #)', [jsFrom, _emitType(to)]);
     }
 
     // All Dart number types map to a JS double.  We can specialize these
@@ -5278,8 +5263,7 @@
         if (from.nullability == Nullability.nonNullable) {
           return jsFrom;
         }
-        return runtimeCall('nullCast(#, #, #)',
-            [jsFrom, _emitType(to), js.boolean(isTypeError)]);
+        return runtimeCall('nullCast(#, #)', [jsFrom, _emitType(to)]);
       }
 
       // * -> int : asInt check
@@ -5294,16 +5278,11 @@
       }
     }
 
-    return _emitCast(jsFrom, to, implicit: isTypeError);
+    return _emitCast(jsFrom, to);
   }
 
-  js_ast.Expression _emitCast(js_ast.Expression expr, DartType type,
-      {bool implicit = true}) {
-    if (_types.isTop(type)) return expr;
-
-    var code = implicit ? '#._check(#)' : '#.as(#)';
-    return js.call(code, [_emitType(type), expr]);
-  }
+  js_ast.Expression _emitCast(js_ast.Expression expr, DartType type) =>
+      _types.isTop(type) ? expr : js.call('#.as(#)', [_emitType(type), expr]);
 
   @override
   js_ast.Expression visitSymbolLiteral(SymbolLiteral node) =>
diff --git a/pkg/dev_compiler/test/nullable_inference_test.dart b/pkg/dev_compiler/test/nullable_inference_test.dart
index 683a872..67f259f 100644
--- a/pkg/dev_compiler/test/nullable_inference_test.dart
+++ b/pkg/dev_compiler/test/nullable_inference_test.dart
@@ -507,7 +507,7 @@
           }
           return c.toString();
         }
-        return e.toString();
+        return e.leakingDebugToString();
       })
       // Filter out our own NotNull annotations.  The library prefix changes
       // per test, so just filter on the suffix.
diff --git a/pkg/dev_compiler/tool/dart2js_nnbd_sdk_error_golden.txt b/pkg/dev_compiler/tool/dart2js_nnbd_sdk_error_golden.txt
index 1a63f96..93731df 100644
--- a/pkg/dev_compiler/tool/dart2js_nnbd_sdk_error_golden.txt
+++ b/pkg/dev_compiler/tool/dart2js_nnbd_sdk_error_golden.txt
@@ -1,19 +1,8 @@
-ERROR|COMPILE_TIME_ERROR|BODY_MIGHT_COMPLETE_NORMALLY|lib/_internal/js_runtime/lib/js_helper.dart|2689|17|17|The body might complete normally, which would cause 'null' to be returned, but the return type is a potentially non-nullable type.
-ERROR|COMPILE_TIME_ERROR|BODY_MIGHT_COMPLETE_NORMALLY|lib/_internal/js_runtime/lib/js_helper.dart|3629|5|11|The body might complete normally, which would cause 'null' to be returned, but the return type is a potentially non-nullable type.
-ERROR|COMPILE_TIME_ERROR|BODY_MIGHT_COMPLETE_NORMALLY|lib/_internal/js_runtime/lib/js_helper.dart|3657|5|6|The body might complete normally, which would cause 'null' to be returned, but the return type is a potentially non-nullable type.
 ERROR|COMPILE_TIME_ERROR|INCONSISTENT_INHERITANCE|lib/_internal/js_runtime/lib/interceptors.dart|1637|7|5|Superinterfaces don't have a valid override for '&': int.& (int Function(int)), JSNumber.& (num Function(num)).
 ERROR|COMPILE_TIME_ERROR|INCONSISTENT_INHERITANCE|lib/_internal/js_runtime/lib/interceptors.dart|1637|7|5|Superinterfaces don't have a valid override for '<<': int.<< (int Function(int)), JSNumber.<< (num Function(num)).
 ERROR|COMPILE_TIME_ERROR|INCONSISTENT_INHERITANCE|lib/_internal/js_runtime/lib/interceptors.dart|1637|7|5|Superinterfaces don't have a valid override for '>>': int.>> (int Function(int)), JSNumber.>> (num Function(num)).
 ERROR|COMPILE_TIME_ERROR|INCONSISTENT_INHERITANCE|lib/_internal/js_runtime/lib/interceptors.dart|1637|7|5|Superinterfaces don't have a valid override for '\|': int.\| (int Function(int)), JSNumber.\| (num Function(num)).
 ERROR|COMPILE_TIME_ERROR|INCONSISTENT_INHERITANCE|lib/_internal/js_runtime/lib/interceptors.dart|1637|7|5|Superinterfaces don't have a valid override for '^': int.^ (int Function(int)), JSNumber.^ (num Function(num)).
-ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/_http/http.dart|1004|10|5|Non-nullable instance field 'value' must be initialized.
-ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/_http/http.dart|1030|8|6|Non-nullable instance field 'secure' must be initialized.
-ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/_http/http.dart|1036|8|8|Non-nullable instance field 'httpOnly' must be initialized.
-ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/_http/http.dart|1493|12|11|Non-nullable instance field 'idleTimeout' must be initialized.
-ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/_http/http.dart|1543|8|14|Non-nullable instance field 'autoUncompress' must be initialized.
-ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/_http/http.dart|172|8|12|Non-nullable instance field 'autoCompress' must be initialized.
-ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/_http/http.dart|991|10|4|Non-nullable instance field 'name' must be initialized.
-ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/io/io.dart|5589|12|8|Non-nullable instance field 'encoding' must be initialized.
 ERROR|STATIC_TYPE_WARNING|UNDEFINED_OPERATOR|lib/_internal/js_runtime/lib/interceptors.dart|1654|28|1|The operator '&' isn't defined for the type 'JSInt'.
 ERROR|STATIC_TYPE_WARNING|UNDEFINED_OPERATOR|lib/_internal/js_runtime/lib/interceptors.dart|1656|27|1|The operator '&' isn't defined for the type 'JSInt'.
 ERROR|STATIC_TYPE_WARNING|UNDEFINED_OPERATOR|lib/_internal/js_runtime/lib/interceptors.dart|1659|17|1|The operator '&' isn't defined for the type 'JSInt'.
diff --git a/pkg/dev_compiler/tool/dartdevc_nnbd_sdk_error_golden.txt b/pkg/dev_compiler/tool/dartdevc_nnbd_sdk_error_golden.txt
index 6dad26d..8b13789 100644
--- a/pkg/dev_compiler/tool/dartdevc_nnbd_sdk_error_golden.txt
+++ b/pkg/dev_compiler/tool/dartdevc_nnbd_sdk_error_golden.txt
@@ -1,25 +1 @@
-ERROR|COMPILE_TIME_ERROR|BODY_MIGHT_COMPLETE_NORMALLY|lib/_internal/js_dev_runtime/private/foreign_helper.dart|109|3|2|The body might complete normally, which would cause 'null' to be returned, but the return type is a potentially non-nullable type.
-ERROR|COMPILE_TIME_ERROR|BODY_MIGHT_COMPLETE_NORMALLY|lib/_internal/js_dev_runtime/private/foreign_helper.dart|162|8|21|The body might complete normally, which would cause 'null' to be returned, but the return type is a potentially non-nullable type.
-ERROR|COMPILE_TIME_ERROR|BODY_MIGHT_COMPLETE_NORMALLY|lib/_internal/js_dev_runtime/private/foreign_helper.dart|167|8|21|The body might complete normally, which would cause 'null' to be returned, but the return type is a potentially non-nullable type.
-ERROR|COMPILE_TIME_ERROR|BODY_MIGHT_COMPLETE_NORMALLY|lib/_internal/js_dev_runtime/private/foreign_helper.dart|170|8|20|The body might complete normally, which would cause 'null' to be returned, but the return type is a potentially non-nullable type.
-ERROR|COMPILE_TIME_ERROR|BODY_MIGHT_COMPLETE_NORMALLY|lib/_internal/js_dev_runtime/private/foreign_helper.dart|173|8|18|The body might complete normally, which would cause 'null' to be returned, but the return type is a potentially non-nullable type.
-ERROR|COMPILE_TIME_ERROR|BODY_MIGHT_COMPLETE_NORMALLY|lib/_internal/js_dev_runtime/private/foreign_helper.dart|176|8|22|The body might complete normally, which would cause 'null' to be returned, but the return type is a potentially non-nullable type.
-ERROR|COMPILE_TIME_ERROR|BODY_MIGHT_COMPLETE_NORMALLY|lib/_internal/js_dev_runtime/private/foreign_helper.dart|182|8|26|The body might complete normally, which would cause 'null' to be returned, but the return type is a potentially non-nullable type.
-ERROR|COMPILE_TIME_ERROR|BODY_MIGHT_COMPLETE_NORMALLY|lib/_internal/js_dev_runtime/private/foreign_helper.dart|185|8|17|The body might complete normally, which would cause 'null' to be returned, but the return type is a potentially non-nullable type.
-ERROR|COMPILE_TIME_ERROR|BODY_MIGHT_COMPLETE_NORMALLY|lib/_internal/js_dev_runtime/private/foreign_helper.dart|188|8|14|The body might complete normally, which would cause 'null' to be returned, but the return type is a potentially non-nullable type.
-ERROR|COMPILE_TIME_ERROR|BODY_MIGHT_COMPLETE_NORMALLY|lib/_internal/js_dev_runtime/private/foreign_helper.dart|191|8|20|The body might complete normally, which would cause 'null' to be returned, but the return type is a potentially non-nullable type.
-ERROR|COMPILE_TIME_ERROR|BODY_MIGHT_COMPLETE_NORMALLY|lib/_internal/js_dev_runtime/private/foreign_helper.dart|197|8|32|The body might complete normally, which would cause 'null' to be returned, but the return type is a potentially non-nullable type.
-ERROR|COMPILE_TIME_ERROR|BODY_MIGHT_COMPLETE_NORMALLY|lib/_internal/js_dev_runtime/private/foreign_helper.dart|203|8|32|The body might complete normally, which would cause 'null' to be returned, but the return type is a potentially non-nullable type.
-ERROR|COMPILE_TIME_ERROR|BODY_MIGHT_COMPLETE_NORMALLY|lib/_internal/js_dev_runtime/private/foreign_helper.dart|209|8|40|The body might complete normally, which would cause 'null' to be returned, but the return type is a potentially non-nullable type.
-ERROR|COMPILE_TIME_ERROR|BODY_MIGHT_COMPLETE_NORMALLY|lib/_internal/js_dev_runtime/private/foreign_helper.dart|215|8|40|The body might complete normally, which would cause 'null' to be returned, but the return type is a potentially non-nullable type.
-ERROR|COMPILE_TIME_ERROR|BODY_MIGHT_COMPLETE_NORMALLY|lib/_internal/js_dev_runtime/private/foreign_helper.dart|221|8|37|The body might complete normally, which would cause 'null' to be returned, but the return type is a potentially non-nullable type.
-ERROR|COMPILE_TIME_ERROR|BODY_MIGHT_COMPLETE_NORMALLY|lib/_internal/js_dev_runtime/private/foreign_helper.dart|224|8|11|The body might complete normally, which would cause 'null' to be returned, but the return type is a potentially non-nullable type.
-ERROR|COMPILE_TIME_ERROR|BODY_MIGHT_COMPLETE_NORMALLY|lib/_internal/js_dev_runtime/private/foreign_helper.dart|228|6|11|The body might complete normally, which would cause 'null' to be returned, but the return type is a potentially non-nullable type.
-ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/_http/http.dart|1004|10|5|Non-nullable instance field 'value' must be initialized.
-ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/_http/http.dart|1030|8|6|Non-nullable instance field 'secure' must be initialized.
-ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/_http/http.dart|1036|8|8|Non-nullable instance field 'httpOnly' must be initialized.
-ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/_http/http.dart|1493|12|11|Non-nullable instance field 'idleTimeout' must be initialized.
-ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/_http/http.dart|1543|8|14|Non-nullable instance field 'autoUncompress' must be initialized.
-ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/_http/http.dart|172|8|12|Non-nullable instance field 'autoCompress' must be initialized.
-ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/_http/http.dart|991|10|4|Non-nullable instance field 'name' must be initialized.
-ERROR|COMPILE_TIME_ERROR|NOT_INITIALIZED_NON_NULLABLE_INSTANCE_FIELD|lib/io/io.dart|5589|12|8|Non-nullable instance field 'encoding' must be initialized.
+
diff --git a/pkg/dev_compiler/tool/kernel_sdk.dart b/pkg/dev_compiler/tool/kernel_sdk.dart
index 3708675..dda7022 100755
--- a/pkg/dev_compiler/tool/kernel_sdk.dart
+++ b/pkg/dev_compiler/tool/kernel_sdk.dart
@@ -116,7 +116,8 @@
         jsUrl: jsPath,
         mapUrl: mapPath,
         buildSourceMap: true,
-        customScheme: customScheme);
+        customScheme: customScheme,
+        component: component);
     await File(jsPath).writeAsString(jsCode.code);
     await File(mapPath).writeAsString(json.encode(jsCode.sourceMap));
   }
diff --git a/pkg/front_end/lib/src/base/instrumentation.dart b/pkg/front_end/lib/src/base/instrumentation.dart
index 7846749..a1e2443 100644
--- a/pkg/front_end/lib/src/base/instrumentation.dart
+++ b/pkg/front_end/lib/src/base/instrumentation.dart
@@ -52,7 +52,8 @@
   InstrumentationValueForType(this.type);
 
   @override
-  String toString() => _shortenInstrumentationString(type.toString());
+  String toString() =>
+      _shortenInstrumentationString(type.leakingDebugToString());
 }
 
 /// Instance of [InstrumentationValue] describing a list of [DartType]s.
diff --git a/pkg/front_end/lib/src/fasta/builder/class_builder.dart b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
index 263bfc1..f591155 100644
--- a/pkg/front_end/lib/src/fasta/builder/class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/class_builder.dart
@@ -21,6 +21,7 @@
         Member,
         MethodInvocation,
         Name,
+        NeverType,
         Nullability,
         Procedure,
         ProcedureKind,
@@ -55,8 +56,6 @@
 import 'package:kernel/type_environment.dart'
     show SubtypeCheckMode, TypeEnvironment;
 
-import '../../base/nnbd_mode.dart';
-
 import '../dill/dill_member_builder.dart' show DillMemberBuilder;
 
 import '../fasta_codes.dart';
@@ -110,10 +109,10 @@
   ///
   /// Currently this also holds the synthesized super class for a mixin
   /// declaration.
-  TypeBuilder supertype;
+  TypeBuilder supertypeBuilder;
 
   /// The type in the `implements` clause of a class or mixin declaration.
-  List<TypeBuilder> interfaces;
+  List<TypeBuilder> interfaceBuilders;
 
   /// The types in the `on` clause of an extension or mixin declaration.
   List<TypeBuilder> onTypes;
@@ -138,9 +137,9 @@
 
   bool get isAnonymousMixinApplication;
 
-  TypeBuilder get mixedInType;
+  TypeBuilder get mixedInTypeBuilder;
 
-  void set mixedInType(TypeBuilder mixin);
+  void set mixedInTypeBuilder(TypeBuilder mixin);
 
   List<ConstructorReferenceBuilder> get constructorReferences;
 
@@ -307,10 +306,10 @@
   List<TypeVariableBuilder> typeVariables;
 
   @override
-  TypeBuilder supertype;
+  TypeBuilder supertypeBuilder;
 
   @override
-  List<TypeBuilder> interfaces;
+  List<TypeBuilder> interfaceBuilders;
 
   @override
   List<TypeBuilder> onTypes;
@@ -344,8 +343,8 @@
       int modifiers,
       String name,
       this.typeVariables,
-      this.supertype,
-      this.interfaces,
+      this.supertypeBuilder,
+      this.interfaceBuilders,
       this.onTypes,
       Scope scope,
       this.constructors,
@@ -363,7 +362,7 @@
   bool get isMixin => (modifiers & mixinDeclarationMask) != 0;
 
   @override
-  bool get isMixinApplication => mixedInType != null;
+  bool get isMixinApplication => mixedInTypeBuilder != null;
 
   @override
   bool get isNamedMixinApplication {
@@ -675,7 +674,7 @@
 
     // Extract and check superclass (if it exists).
     ClassBuilder superClass;
-    TypeBuilder superClassType = supertype;
+    TypeBuilder superClassType = supertypeBuilder;
     if (superClassType is NamedTypeBuilder) {
       TypeDeclarationBuilder decl = superClassType.declaration;
       if (decl is TypeAliasBuilder) {
@@ -695,13 +694,13 @@
         superClass = decl;
       }
     }
-    if (interfaces == null) return;
+    if (interfaceBuilders == null) return;
 
     // Validate interfaces.
     Map<ClassBuilder, int> problems;
     Map<ClassBuilder, int> problemsOffsets;
     Set<ClassBuilder> implemented = new Set<ClassBuilder>();
-    for (TypeBuilder type in interfaces) {
+    for (TypeBuilder type in interfaceBuilders) {
       if (type is NamedTypeBuilder) {
         int charOffset = -1; // TODO(ahe): Get offset from type.
         TypeDeclarationBuilder typeDeclaration = type.declaration;
@@ -753,88 +752,72 @@
   void checkBoundsInSupertype(
       Supertype supertype, TypeEnvironment typeEnvironment) {
     SourceLibraryBuilder library = this.library;
+    final DartType bottomType = library.isNonNullableByDefault
+        ? const NeverType(Nullability.nonNullable)
+        : typeEnvironment.nullType;
 
-    Set<TypeArgumentIssue> legacyIssues = findTypeArgumentIssues(
+    Set<TypeArgumentIssue> issues = {};
+    issues.addAll(findTypeArgumentIssues(
             new InterfaceType(supertype.classNode, library.nonNullable,
                 supertype.typeArguments),
             typeEnvironment,
             SubtypeCheckMode.ignoringNullabilities,
-            allowSuperBounded: false)
-        ?.toSet();
-    Set<TypeArgumentIssue> nnbdIssues = library.isNonNullableByDefault
-        ? findTypeArgumentIssues(
-                new InterfaceType(supertype.classNode, library.nonNullable,
-                    supertype.typeArguments),
-                typeEnvironment,
-                SubtypeCheckMode.withNullabilities,
-                allowSuperBounded: false)
-            ?.toSet()
-        : null;
-    if (legacyIssues != null || nnbdIssues != null) {
-      Set<TypeArgumentIssue> mergedIssues = legacyIssues ?? {};
-      if (nnbdIssues != null) {
-        nnbdIssues = nnbdIssues
-            .where((issue) =>
-                legacyIssues == null || !legacyIssues.contains(issue))
-            .toSet();
-        mergedIssues.addAll(nnbdIssues);
-      }
-      for (TypeArgumentIssue issue in mergedIssues) {
-        DartType argument = issue.argument;
-        TypeParameter typeParameter = issue.typeParameter;
-        bool inferred = library.inferredTypes.contains(argument);
-        if (argument is FunctionType && argument.typeParameters.length > 0) {
-          if (inferred) {
-            library.reportTypeArgumentIssue(
-                templateGenericFunctionTypeInferredAsActualTypeArgument
-                    .withArguments(argument, library.isNonNullableByDefault),
-                fileUri,
-                charOffset,
-                null);
-          } else {
-            library.reportTypeArgumentIssue(
-                messageGenericFunctionTypeUsedAsActualTypeArgument,
-                fileUri,
-                charOffset,
-                null);
-          }
+            bottomType,
+            allowSuperBounded: false) ??
+        const []);
+    if (library.isNonNullableByDefault) {
+      issues.addAll(findTypeArgumentIssues(
+              new InterfaceType(supertype.classNode, library.nonNullable,
+                  supertype.typeArguments),
+              typeEnvironment,
+              SubtypeCheckMode.withNullabilities,
+              bottomType,
+              allowSuperBounded: false) ??
+          const []);
+    }
+    for (TypeArgumentIssue issue in issues) {
+      DartType argument = issue.argument;
+      TypeParameter typeParameter = issue.typeParameter;
+      bool inferred = library.inferredTypes.contains(argument);
+      if (argument is FunctionType && argument.typeParameters.length > 0) {
+        if (inferred) {
+          library.reportTypeArgumentIssue(
+              templateGenericFunctionTypeInferredAsActualTypeArgument
+                  .withArguments(argument, library.isNonNullableByDefault),
+              fileUri,
+              charOffset,
+              null);
         } else {
-          void reportProblem(
-              Template<
-                      Message Function(DartType, DartType, String, String,
-                          String, String, bool)>
-                  template) {
-            library.reportTypeArgumentIssue(
-                template.withArguments(
-                    argument,
-                    typeParameter.bound,
-                    typeParameter.name,
-                    getGenericTypeName(issue.enclosingType),
-                    supertype.classNode.name,
-                    name,
-                    library.isNonNullableByDefault),
-                fileUri,
-                charOffset,
-                typeParameter);
-          }
+          library.reportTypeArgumentIssue(
+              messageGenericFunctionTypeUsedAsActualTypeArgument,
+              fileUri,
+              charOffset,
+              null);
+        }
+      } else {
+        void reportProblem(
+            Template<
+                    Message Function(DartType, DartType, String, String, String,
+                        String, bool)>
+                template) {
+          library.reportTypeArgumentIssue(
+              template.withArguments(
+                  argument,
+                  typeParameter.bound,
+                  typeParameter.name,
+                  getGenericTypeName(issue.enclosingType),
+                  supertype.classNode.name,
+                  name,
+                  library.isNonNullableByDefault),
+              fileUri,
+              charOffset,
+              typeParameter);
+        }
 
-          nnbdIssues ??= const {};
-          if (inferred) {
-            if (nnbdIssues.contains(issue) &&
-                library.loader.nnbdMode == NnbdMode.Weak) {
-              reportProblem(
-                  templateIncorrectTypeArgumentInSupertypeInferredWarning);
-            } else {
-              reportProblem(templateIncorrectTypeArgumentInSupertypeInferred);
-            }
-          } else {
-            if (nnbdIssues.contains(issue) &&
-                library.loader.nnbdMode == NnbdMode.Weak) {
-              reportProblem(templateIncorrectTypeArgumentInSupertypeWarning);
-            } else {
-              reportProblem(templateIncorrectTypeArgumentInSupertype);
-            }
-          }
+        if (inferred) {
+          reportProblem(templateIncorrectTypeArgumentInSupertypeInferred);
+        } else {
+          reportProblem(templateIncorrectTypeArgumentInSupertype);
         }
       }
     }
@@ -843,74 +826,52 @@
   @override
   void checkTypesInOutline(TypeEnvironment typeEnvironment) {
     SourceLibraryBuilder library = this.library;
+    final DartType bottomType = library.isNonNullableByDefault
+        ? const NeverType(Nullability.nonNullable)
+        : typeEnvironment.nullType;
 
     // Check in bounds of own type variables.
     for (TypeParameter parameter in cls.typeParameters) {
-      Set<TypeArgumentIssue> legacyIssues = findTypeArgumentIssues(
-              parameter.bound,
-              typeEnvironment,
-              SubtypeCheckMode.ignoringNullabilities,
-              allowSuperBounded: true)
-          ?.toSet();
-      Set<TypeArgumentIssue> nnbdIssues = library.isNonNullableByDefault
-          ? findTypeArgumentIssues(parameter.bound, typeEnvironment,
-                  SubtypeCheckMode.withNullabilities,
-                  allowSuperBounded: true)
-              ?.toSet()
-          : null;
-      if (legacyIssues != null || nnbdIssues != null) {
-        Set<TypeArgumentIssue> mergedIssues = legacyIssues ?? {};
-        if (nnbdIssues != null) {
-          nnbdIssues = nnbdIssues
-              .where((issue) =>
-                  legacyIssues == null || !legacyIssues.contains(issue))
-              .toSet();
-          mergedIssues.addAll(nnbdIssues);
+      Set<TypeArgumentIssue> issues = {};
+      issues.addAll(findTypeArgumentIssues(parameter.bound, typeEnvironment,
+              SubtypeCheckMode.ignoringNullabilities, bottomType,
+              allowSuperBounded: true) ??
+          const []);
+      if (library.isNonNullableByDefault) {
+        issues.addAll(findTypeArgumentIssues(parameter.bound, typeEnvironment,
+                SubtypeCheckMode.withNullabilities, bottomType,
+                allowSuperBounded: true) ??
+            const []);
+      }
+      for (TypeArgumentIssue issue in issues) {
+        DartType argument = issue.argument;
+        TypeParameter typeParameter = issue.typeParameter;
+        if (library.inferredTypes.contains(argument)) {
+          // Inference in type expressions in the supertypes boils down to
+          // instantiate-to-bound which shouldn't produce anything that breaks
+          // the bounds after the non-simplicity checks are done.  So, any
+          // violation here is the result of non-simple bounds, and the error
+          // is reported elsewhere.
+          continue;
         }
-        for (TypeArgumentIssue issue in mergedIssues) {
-          DartType argument = issue.argument;
-          TypeParameter typeParameter = issue.typeParameter;
-          if (library.inferredTypes.contains(argument)) {
-            // Inference in type expressions in the supertypes boils down to
-            // instantiate-to-bound which shouldn't produce anything that breaks
-            // the bounds after the non-simplicity checks are done.  So, any
-            // violation here is the result of non-simple bounds, and the error
-            // is reported elsewhere.
-            continue;
-          }
 
-          if (argument is FunctionType && argument.typeParameters.length > 0) {
-            library.reportTypeArgumentIssue(
-                messageGenericFunctionTypeUsedAsActualTypeArgument,
-                fileUri,
-                parameter.fileOffset,
-                null);
-          } else {
-            void reportProblem(
-                Template<
-                        Message Function(
-                            DartType, DartType, String, String, bool)>
-                    template) {
-              library.reportTypeArgumentIssue(
-                  template.withArguments(
-                      argument,
-                      typeParameter.bound,
-                      typeParameter.name,
-                      getGenericTypeName(issue.enclosingType),
-                      library.isNonNullableByDefault),
-                  fileUri,
-                  parameter.fileOffset,
-                  typeParameter);
-            }
-
-            nnbdIssues ??= const {};
-            if (nnbdIssues.contains(issue) &&
-                library.loader.nnbdMode == NnbdMode.Weak) {
-              reportProblem(templateIncorrectTypeArgumentWarning);
-            } else {
-              reportProblem(templateIncorrectTypeArgument);
-            }
-          }
+        if (argument is FunctionType && argument.typeParameters.length > 0) {
+          library.reportTypeArgumentIssue(
+              messageGenericFunctionTypeUsedAsActualTypeArgument,
+              fileUri,
+              parameter.fileOffset,
+              null);
+        } else {
+          library.reportTypeArgumentIssue(
+              templateIncorrectTypeArgument.withArguments(
+                  argument,
+                  typeParameter.bound,
+                  typeParameter.name,
+                  getGenericTypeName(issue.enclosingType),
+                  library.isNonNullableByDefault),
+              fileUri,
+              parameter.fileOffset,
+              typeParameter);
         }
       }
     }
@@ -1333,16 +1294,7 @@
           (!isCovariant ||
               !types.isSubtypeOfKernel(
                   supertype, subtype, SubtypeCheckMode.ignoringNullabilities));
-      Loader loader = library.loader;
-      bool nnbdWeakMode =
-          loader is SourceLoader && loader.nnbdMode == NnbdMode.Weak;
-      bool isError = isErrorInNnbdOptedOutMode || !nnbdWeakMode;
-      bool isWarning = !isErrorInNnbdOptedOutMode && nnbdWeakMode;
-      assert(
-          !isError || !isWarning,
-          "A compile-time problem can't be an error and a warning "
-          "at the same time.");
-      if (isError || isWarning) {
+      if (isErrorInNnbdOptedOutMode || library.isNonNullableByDefault) {
         String declaredMemberName = '${declaredMember.enclosingClass.name}'
             '.${declaredMember.name.name}';
         String interfaceMemberName = '${interfaceMember.enclosingClass.name}'
@@ -1352,22 +1304,14 @@
         if (declaredParameter == null) {
           if (asIfDeclaredParameter) {
             // Setter overridden by field
-            Template<Message Function(String, DartType, DartType, String, bool)>
-                template = isError
-                    ? templateOverrideTypeMismatchSetter
-                    : templateOverrideTypeMismatchSetterWarning;
-            message = template.withArguments(
+            message = templateOverrideTypeMismatchSetter.withArguments(
                 declaredMemberName,
                 declaredType,
                 interfaceType,
                 interfaceMemberName,
                 library.isNonNullableByDefault);
           } else {
-            Template<Message Function(String, DartType, DartType, String, bool)>
-                template = isError
-                    ? templateOverrideTypeMismatchReturnType
-                    : templateOverrideTypeMismatchReturnTypeWarning;
-            message = template.withArguments(
+            message = templateOverrideTypeMismatchReturnType.withArguments(
                 declaredMemberName,
                 declaredType,
                 interfaceType,
@@ -1376,13 +1320,7 @@
           }
           fileOffset = declaredMember.fileOffset;
         } else {
-          Template<
-                  Message Function(
-                      String, String, DartType, DartType, String, bool)>
-              template = isError
-                  ? templateOverrideTypeMismatchParameter
-                  : templateOverrideTypeMismatchParameterWarning;
-          message = template.withArguments(
+          message = templateOverrideTypeMismatchParameter.withArguments(
               declaredParameter.name,
               declaredMemberName,
               declaredType,
@@ -1568,6 +1506,26 @@
           declaredParameter.isCovariant,
           declaredParameter,
           isInterfaceCheck);
+      if (declaredParameter.isRequired &&
+          !interfaceNamedParameters.current.isRequired) {
+        reportInvalidOverride(
+            isInterfaceCheck,
+            declaredMember,
+            templateOverrideMismatchRequiredNamedParameter.withArguments(
+                declaredParameter.name,
+                "${declaredMember.enclosingClass.name}."
+                    "${declaredMember.name.name}",
+                "${interfaceMember.enclosingClass.name}."
+                    "${interfaceMember.name.name}"),
+            declaredParameter.fileOffset,
+            noLength,
+            context: [
+              templateOverriddenMethodCause
+                  .withArguments(interfaceMember.name.name)
+                  .withLocation(_getMemberUri(interfaceMember),
+                      interfaceMember.fileOffset, noLength)
+            ]);
+      }
       if (declaredParameter.isCovariant) seenCovariant = true;
     }
     return seenCovariant;
@@ -1679,7 +1637,8 @@
   @override
   String get fullNameForErrors {
     return isMixinApplication && !isNamedMixinApplication
-        ? "${supertype.fullNameForErrors} with ${mixedInType.fullNameForErrors}"
+        ? "${supertypeBuilder.fullNameForErrors} with "
+            "${mixedInTypeBuilder.fullNameForErrors}"
         : name;
   }
 
@@ -1832,23 +1791,13 @@
         } else if (library.isNonNullableByDefault && loader is SourceLoader) {
           if (!typeEnvironment.isSubtypeOf(typeArgument, typeParameterBound,
               SubtypeCheckMode.withNullabilities)) {
-            if (loader.nnbdMode == NnbdMode.Weak) {
-              addProblem(
-                  templateRedirectingFactoryIncompatibleTypeArgumentWarning
-                      .withArguments(typeArgument, typeParameterBound,
-                          library.isNonNullableByDefault),
-                  redirectionTarget.charOffset,
-                  noLength);
-              hasProblem = false;
-            } else {
-              addProblem(
-                  templateRedirectingFactoryIncompatibleTypeArgument
-                      .withArguments(typeArgument, typeParameterBound,
-                          library.isNonNullableByDefault),
-                  redirectionTarget.charOffset,
-                  noLength);
-              hasProblem = true;
-            }
+            addProblem(
+                templateRedirectingFactoryIncompatibleTypeArgument
+                    .withArguments(typeArgument, typeParameterBound,
+                        library.isNonNullableByDefault),
+                redirectionTarget.charOffset,
+                noLength);
+            hasProblem = true;
           }
         }
       }
@@ -1915,19 +1864,11 @@
     } else if (library.isNonNullableByDefault && loader is SourceLoader) {
       if (!typeEnvironment.isSubtypeOf(
           redirecteeType, factoryType, SubtypeCheckMode.withNullabilities)) {
-        if (loader.nnbdMode == NnbdMode.Weak) {
-          addProblem(
-              templateIncompatibleRedirecteeFunctionTypeWarning.withArguments(
-                  redirecteeType, factoryType, library.isNonNullableByDefault),
-              factory.redirectionTarget.charOffset,
-              noLength);
-        } else {
-          addProblem(
-              templateIncompatibleRedirecteeFunctionType.withArguments(
-                  redirecteeType, factoryType, library.isNonNullableByDefault),
-              factory.redirectionTarget.charOffset,
-              noLength);
-        }
+        addProblem(
+            templateIncompatibleRedirecteeFunctionType.withArguments(
+                redirecteeType, factoryType, library.isNonNullableByDefault),
+            factory.redirectionTarget.charOffset,
+            noLength);
       }
     }
   }
@@ -2042,7 +1983,7 @@
       ClassBuilder getSuperclass(ClassBuilder builder) {
         // This way of computing the superclass is slower than using the kernel
         // objects directly.
-        Object supertype = builder.supertype;
+        Object supertype = builder.supertypeBuilder;
         if (supertype is NamedTypeBuilder) {
           Object builder = supertype.declaration;
           if (builder is ClassBuilder) return builder;
diff --git a/pkg/front_end/lib/src/fasta/builder/enum_builder.dart b/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
index ae18cd7..bc32b18d 100644
--- a/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/enum_builder.dart
@@ -334,7 +334,7 @@
     return enumBuilder;
   }
 
-  TypeBuilder get mixedInType => null;
+  TypeBuilder get mixedInTypeBuilder => null;
 
   InterfaceType buildType(LibraryBuilder library,
       NullabilityBuilder nullabilityBuilder, List<TypeBuilder> arguments,
diff --git a/pkg/front_end/lib/src/fasta/builder/field_builder.dart b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
index 7211b30..9a69677 100644
--- a/pkg/front_end/lib/src/fasta/builder/field_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/field_builder.dart
@@ -49,8 +49,6 @@
 
   Token get constInitializerToken;
 
-  bool hadTypesInferred;
-
   bool get isCovariant;
 
   bool get isLate;
@@ -645,20 +643,6 @@
 
   @override
   bool get isFunction => false;
-
-  TypeBuilder get type => memberBuilder.type;
-
-  bool get hadTypesInferred => memberBuilder.hadTypesInferred;
-
-  void set hadTypesInferred(bool value) {
-    memberBuilder.hadTypesInferred = value;
-  }
-
-  DartType get fieldType => memberBuilder.fieldType;
-
-  void set fieldType(DartType value) {
-    memberBuilder.fieldType = value;
-  }
 }
 
 abstract class AbstractLateFieldEncoding implements FieldEncoding {
@@ -1221,19 +1205,6 @@
   bool get isAbstract => _member.isAbstract;
 
   @override
-  bool get hasExplicitReturnType {
-    // The return type of the getter is explicit if the field type is explicit.
-    return fieldBuilder.type != null;
-  }
-
-  @override
-  bool hasExplicitlyTypedFormalParameter(int index) {
-    // The type of the setter parameter is explicit if the field type is
-    // explicit.
-    return fieldBuilder.type != null;
-  }
-
-  @override
   bool get needsComputation => false;
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/builder/function_builder.dart b/pkg/front_end/lib/src/fasta/builder/function_builder.dart
index ece6278..9aed09d 100644
--- a/pkg/front_end/lib/src/fasta/builder/function_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/function_builder.dart
@@ -11,8 +11,6 @@
 
 import 'package:kernel/type_algebra.dart' show containsTypeVariable, substitute;
 
-import '../../base/nnbd_mode.dart';
-
 import '../identifiers.dart';
 import '../scope.dart';
 
@@ -28,8 +26,7 @@
         messagePatchDeclarationOrigin,
         messagePatchNonExternal,
         noLength,
-        templateRequiredNamedParameterHasDefaultValueError,
-        templateRequiredNamedParameterHasDefaultValueWarning;
+        templateRequiredNamedParameterHasDefaultValueError;
 
 import '../modifier.dart';
 
@@ -393,21 +390,12 @@
         if (library.isNonNullableByDefault) {
           // Required named parameters can't have default values.
           if (formal.isNamedRequired && formal.initializerToken != null) {
-            if (library.loader.nnbdMode == NnbdMode.Weak) {
-              library.addProblem(
-                  templateRequiredNamedParameterHasDefaultValueWarning
-                      .withArguments(formal.name),
-                  formal.charOffset,
-                  formal.name.length,
-                  formal.fileUri);
-            } else {
-              library.addProblem(
-                  templateRequiredNamedParameterHasDefaultValueError
-                      .withArguments(formal.name),
-                  formal.charOffset,
-                  formal.name.length,
-                  formal.fileUri);
-            }
+            library.addProblem(
+                templateRequiredNamedParameterHasDefaultValueError
+                    .withArguments(formal.name),
+                formal.charOffset,
+                formal.name.length,
+                formal.fileUri);
           }
         }
       }
diff --git a/pkg/front_end/lib/src/fasta/builder/library_builder.dart b/pkg/front_end/lib/src/fasta/builder/library_builder.dart
index 995d801..a9c325a 100644
--- a/pkg/front_end/lib/src/fasta/builder/library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/library_builder.dart
@@ -148,8 +148,8 @@
   /// where they were omitted by the programmer and not provided by the type
   /// inference.  The method returns the number of distinct type variables
   /// that were instantiated in this library.
-  int computeDefaultTypes(TypeBuilder dynamicType, TypeBuilder bottomType,
-      ClassBuilder objectClass);
+  int computeDefaultTypes(TypeBuilder dynamicType, TypeBuilder nullType,
+      TypeBuilder bottomType, ClassBuilder objectClass);
 
   void becomeCoreLibrary();
 
@@ -368,8 +368,8 @@
   int computeVariances() => 0;
 
   @override
-  int computeDefaultTypes(TypeBuilder dynamicType, TypeBuilder bottomType,
-      ClassBuilder objectClass) {
+  int computeDefaultTypes(TypeBuilder dynamicType, TypeBuilder nullType,
+      TypeBuilder bottomType, ClassBuilder objectClass) {
     return 0;
   }
 
diff --git a/pkg/front_end/lib/src/fasta/builder/member_builder.dart b/pkg/front_end/lib/src/fasta/builder/member_builder.dart
index 6761a6d..edeb46b 100644
--- a/pkg/front_end/lib/src/fasta/builder/member_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/member_builder.dart
@@ -243,17 +243,6 @@
   bool get isAbstract => memberBuilder.member.isAbstract;
 
   @override
-  bool get hasExplicitReturnType {
-    throw new UnsupportedError("${runtimeType}.hasExplicitReturnType");
-  }
-
-  @override
-  bool hasExplicitlyTypedFormalParameter(int index) {
-    throw new UnsupportedError(
-        "${runtimeType}.hasExplicitlyTypedFormalParameter");
-  }
-
-  @override
   bool get needsComputation => false;
 
   @override
diff --git a/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart b/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart
index f2ad0cd..765aebb 100644
--- a/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart
+++ b/pkg/front_end/lib/src/fasta/builder/procedure_builder.dart
@@ -565,23 +565,6 @@
   List<ClassMember> get localSetters => isSetter
       ? <ClassMember>[new SourceProcedureMember(this)]
       : const <ClassMember>[];
-
-  static const int inferredTypesFromMethod = 3;
-  static const int inferredTypesFromField = 3;
-  static const int inferredTypesFromGetter = 1;
-  static const int inferredTypesFromSetter = 2;
-
-  /// Bit mask showing where types have been inferred from.
-  ///
-  /// The mask uses the values [inferredTypesFromMethod],
-  /// [inferredTypesFromField], [inferredTypesFromGetter],
-  /// [inferredTypesFromSetter].
-  ///
-  /// It is used to detect whether types have already been inferred and in
-  /// getter type inference to favor types from getters over types from
-  /// setters, and in setter type inference to favor types from setters over
-  /// types from getters.
-  int hadTypesInferredFrom = 0;
 }
 
 class SourceProcedureMember extends BuilderClassMember {
@@ -593,12 +576,6 @@
   @override
   bool get isSourceDeclaration => true;
 
-  int get hadTypesInferredFrom => memberBuilder.hadTypesInferredFrom;
-
-  void set hadTypesInferredFrom(int value) {
-    memberBuilder.hadTypesInferredFrom = value;
-  }
-
   @override
   void inferType(ClassHierarchyBuilder hierarchy) {
     memberBuilder._ensureTypes(hierarchy);
@@ -625,20 +602,6 @@
 
   @override
   bool get isFunction => !isProperty;
-
-  List<FormalParameterBuilder> get formals => memberBuilder.formals;
-
-  TypeBuilder get returnType => memberBuilder.returnType;
-
-  @override
-  bool get hasExplicitReturnType {
-    return memberBuilder.returnType != null;
-  }
-
-  @override
-  bool hasExplicitlyTypedFormalParameter(int index) {
-    return memberBuilder.formals[index].type != null;
-  }
 }
 
 class RedirectingFactoryBuilder extends ProcedureBuilderImpl {
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart
index 23ca352..73003a2 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_class_builder.dart
@@ -57,12 +57,12 @@
 
   Uri get fileUri => cls.fileUri;
 
-  TypeBuilder get supertype {
-    TypeBuilder supertype = super.supertype;
+  TypeBuilder get supertypeBuilder {
+    TypeBuilder supertype = super.supertypeBuilder;
     if (supertype == null) {
       Supertype targetSupertype = cls.supertype;
       if (targetSupertype == null) return null;
-      super.supertype =
+      super.supertypeBuilder =
           supertype = computeTypeBuilder(library, targetSupertype);
     }
     return supertype;
@@ -119,30 +119,30 @@
   @override
   bool get declaresConstConstructor => cls.hasConstConstructor;
 
-  TypeBuilder get mixedInType {
+  TypeBuilder get mixedInTypeBuilder {
     return computeTypeBuilder(library, cls.mixedInType);
   }
 
-  List<TypeBuilder> get interfaces {
+  List<TypeBuilder> get interfaceBuilders {
     if (cls.implementedTypes.isEmpty) return null;
-    if (super.interfaces == null) {
+    if (super.interfaceBuilders == null) {
       List<TypeBuilder> result =
           new List<TypeBuilder>(cls.implementedTypes.length);
       for (int i = 0; i < result.length; i++) {
         result[i] = computeTypeBuilder(library, cls.implementedTypes[i]);
       }
-      super.interfaces = result;
+      super.interfaceBuilders = result;
     }
-    return super.interfaces;
+    return super.interfaceBuilders;
   }
 
-  void set mixedInType(TypeBuilder mixin) {
+  void set mixedInTypeBuilder(TypeBuilder mixin) {
     unimplemented("mixedInType=", -1, null);
   }
 
   void clearCachedValues() {
-    supertype = null;
-    interfaces = null;
+    supertypeBuilder = null;
+    interfaceBuilders = null;
   }
 }
 
diff --git a/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart b/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart
index bd23030..8afca33 100644
--- a/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart
+++ b/pkg/front_end/lib/src/fasta/dill/dill_member_builder.dart
@@ -165,12 +165,6 @@
   bool get isFunction => !isProperty;
 
   @override
-  bool get hasExplicitReturnType => true;
-
-  @override
-  bool hasExplicitlyTypedFormalParameter(int index) => true;
-
-  @override
   void inferType(ClassHierarchyBuilder hierarchy) {
     // Do nothing; this is only for source members.
   }
diff --git a/pkg/front_end/lib/src/fasta/fasta_codes_cfe_generated.dart b/pkg/front_end/lib/src/fasta/fasta_codes_cfe_generated.dart
index 9e88644..b4d3941 100644
--- a/pkg/front_end/lib/src/fasta/fasta_codes_cfe_generated.dart
+++ b/pkg/front_end/lib/src/fasta/fasta_codes_cfe_generated.dart
@@ -13,6 +13,126 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
+    Message Function(
+        String name,
+        DartType _type,
+        bool
+            isNonNullableByDefault)> templateAmbiguousExtensionMethod = const Template<
+        Message Function(
+            String name, DartType _type, bool isNonNullableByDefault)>(
+    messageTemplate:
+        r"""The method '#name' is defined in multiple extensions for '#type' and neither is more specific.""",
+    tipTemplate:
+        r"""Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.""",
+    withArguments: _withArgumentsAmbiguousExtensionMethod);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<
+    Message Function(String name, DartType _type,
+        bool isNonNullableByDefault)> codeAmbiguousExtensionMethod = const Code<
+    Message Function(String name, DartType _type, bool isNonNullableByDefault)>(
+  "AmbiguousExtensionMethod",
+  templateAmbiguousExtensionMethod,
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsAmbiguousExtensionMethod(
+    String name, DartType _type, bool isNonNullableByDefault) {
+  if (name.isEmpty) throw 'No name provided';
+  name = demangleMixinApplicationName(name);
+  TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
+  List<Object> typeParts = labeler.labelType(_type);
+  String type = typeParts.join();
+  return new Message(codeAmbiguousExtensionMethod,
+      message:
+          """The method '${name}' is defined in multiple extensions for '${type}' and neither is more specific.""" +
+              labeler.originMessages,
+      tip: """Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.""",
+      arguments: {'name': name, 'type': _type});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
+        Message Function(
+            String name, DartType _type, bool isNonNullableByDefault)>
+    templateAmbiguousExtensionOperator = const Template<
+            Message Function(
+                String name, DartType _type, bool isNonNullableByDefault)>(
+        messageTemplate:
+            r"""The operator '#name' is defined in multiple extensions for '#type' and neither is more specific.""",
+        tipTemplate:
+            r"""Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.""",
+        withArguments: _withArgumentsAmbiguousExtensionOperator);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<
+        Message Function(
+            String name, DartType _type, bool isNonNullableByDefault)>
+    codeAmbiguousExtensionOperator = const Code<
+        Message Function(
+            String name, DartType _type, bool isNonNullableByDefault)>(
+  "AmbiguousExtensionOperator",
+  templateAmbiguousExtensionOperator,
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsAmbiguousExtensionOperator(
+    String name, DartType _type, bool isNonNullableByDefault) {
+  if (name.isEmpty) throw 'No name provided';
+  name = demangleMixinApplicationName(name);
+  TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
+  List<Object> typeParts = labeler.labelType(_type);
+  String type = typeParts.join();
+  return new Message(codeAmbiguousExtensionOperator,
+      message:
+          """The operator '${name}' is defined in multiple extensions for '${type}' and neither is more specific.""" +
+              labeler.originMessages,
+      tip: """Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.""",
+      arguments: {'name': name, 'type': _type});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
+        Message Function(
+            String name, DartType _type, bool isNonNullableByDefault)>
+    templateAmbiguousExtensionProperty = const Template<
+            Message Function(
+                String name, DartType _type, bool isNonNullableByDefault)>(
+        messageTemplate:
+            r"""The property '#name' is defined in multiple extensions for '#type' and neither is more specific.""",
+        tipTemplate:
+            r"""Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.""",
+        withArguments: _withArgumentsAmbiguousExtensionProperty);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<
+        Message Function(
+            String name, DartType _type, bool isNonNullableByDefault)>
+    codeAmbiguousExtensionProperty = const Code<
+        Message Function(
+            String name, DartType _type, bool isNonNullableByDefault)>(
+  "AmbiguousExtensionProperty",
+  templateAmbiguousExtensionProperty,
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsAmbiguousExtensionProperty(
+    String name, DartType _type, bool isNonNullableByDefault) {
+  if (name.isEmpty) throw 'No name provided';
+  name = demangleMixinApplicationName(name);
+  TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
+  List<Object> typeParts = labeler.labelType(_type);
+  String type = typeParts.join();
+  return new Message(codeAmbiguousExtensionProperty,
+      message:
+          """The property '${name}' is defined in multiple extensions for '${type}' and neither is more specific.""" +
+              labeler.originMessages,
+      tip: """Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.""",
+      arguments: {'name': name, 'type': _type});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
         Message Function(String name, DartType _type, DartType _type2,
             bool isNonNullableByDefault)> templateAmbiguousSupertypes =
     const Template<
@@ -771,44 +891,6 @@
 const Template<
         Message Function(
             String name, DartType _type, bool isNonNullableByDefault)>
-    templateFieldNonNullableNotInitializedByConstructorWarning = const Template<
-            Message Function(
-                String name, DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
-            r"""This constructor doesn't initialize field '#name' and its type '#type' doesn't allow null.""",
-        withArguments:
-            _withArgumentsFieldNonNullableNotInitializedByConstructorWarning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<
-        Message Function(
-            String name, DartType _type, bool isNonNullableByDefault)>
-    codeFieldNonNullableNotInitializedByConstructorWarning = const Code<
-            Message Function(
-                String name, DartType _type, bool isNonNullableByDefault)>(
-        "FieldNonNullableNotInitializedByConstructorWarning",
-        templateFieldNonNullableNotInitializedByConstructorWarning,
-        severity: Severity.warning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsFieldNonNullableNotInitializedByConstructorWarning(
-    String name, DartType _type, bool isNonNullableByDefault) {
-  if (name.isEmpty) throw 'No name provided';
-  name = demangleMixinApplicationName(name);
-  TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
-  List<Object> typeParts = labeler.labelType(_type);
-  String type = typeParts.join();
-  return new Message(codeFieldNonNullableNotInitializedByConstructorWarning,
-      message:
-          """This constructor doesn't initialize field '${name}' and its type '${type}' doesn't allow null.""" +
-              labeler.originMessages,
-      arguments: {'name': name, 'type': _type});
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<
-        Message Function(
-            String name, DartType _type, bool isNonNullableByDefault)>
     templateFieldNonNullableWithoutInitializerError = const Template<
             Message Function(
                 String name, DartType _type, bool isNonNullableByDefault)>(
@@ -845,43 +927,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
         Message Function(
-            String name, DartType _type, bool isNonNullableByDefault)>
-    templateFieldNonNullableWithoutInitializerWarning = const Template<
-            Message Function(
-                String name, DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
-            r"""Field '#name' isn't initialized and its type '#type' doesn't allow null.""",
-        withArguments: _withArgumentsFieldNonNullableWithoutInitializerWarning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<
-        Message Function(
-            String name, DartType _type, bool isNonNullableByDefault)>
-    codeFieldNonNullableWithoutInitializerWarning = const Code<
-            Message Function(
-                String name, DartType _type, bool isNonNullableByDefault)>(
-        "FieldNonNullableWithoutInitializerWarning",
-        templateFieldNonNullableWithoutInitializerWarning,
-        severity: Severity.warning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsFieldNonNullableWithoutInitializerWarning(
-    String name, DartType _type, bool isNonNullableByDefault) {
-  if (name.isEmpty) throw 'No name provided';
-  name = demangleMixinApplicationName(name);
-  TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
-  List<Object> typeParts = labeler.labelType(_type);
-  String type = typeParts.join();
-  return new Message(codeFieldNonNullableWithoutInitializerWarning,
-      message:
-          """Field '${name}' isn't initialized and its type '${type}' doesn't allow null.""" +
-              labeler.originMessages,
-      arguments: {'name': name, 'type': _type});
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<
-        Message Function(
             DartType _type, DartType _type2, bool isNonNullableByDefault)>
     templateForInLoopElementTypeNotAssignable = const Template<
             Message Function(
@@ -1046,6 +1091,38 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
+    Message Function(
+        DartType _type,
+        bool
+            isNonNullableByDefault)> templateImplicitReturnNull = const Template<
+        Message Function(DartType _type, bool isNonNullableByDefault)>(
+    messageTemplate:
+        r"""A non-null value must be returned since the return type '#type' doesn't allow null.""",
+    withArguments: _withArgumentsImplicitReturnNull);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<Message Function(DartType _type, bool isNonNullableByDefault)>
+    codeImplicitReturnNull =
+    const Code<Message Function(DartType _type, bool isNonNullableByDefault)>(
+  "ImplicitReturnNull",
+  templateImplicitReturnNull,
+);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsImplicitReturnNull(
+    DartType _type, bool isNonNullableByDefault) {
+  TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
+  List<Object> typeParts = labeler.labelType(_type);
+  String type = typeParts.join();
+  return new Message(codeImplicitReturnNull,
+      message:
+          """A non-null value must be returned since the return type '${type}' doesn't allow null.""" +
+              labeler.originMessages,
+      arguments: {'type': _type});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
         Message Function(
             DartType _type, DartType _type2, bool isNonNullableByDefault)>
     templateIncompatibleRedirecteeFunctionType = const Template<
@@ -1083,44 +1160,6 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
-        Message Function(
-            DartType _type, DartType _type2, bool isNonNullableByDefault)>
-    templateIncompatibleRedirecteeFunctionTypeWarning = const Template<
-            Message Function(
-                DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-        messageTemplate:
-            r"""The constructor function type '#type' isn't a subtype of '#type2'.""",
-        withArguments: _withArgumentsIncompatibleRedirecteeFunctionTypeWarning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<
-        Message Function(
-            DartType _type, DartType _type2, bool isNonNullableByDefault)>
-    codeIncompatibleRedirecteeFunctionTypeWarning = const Code<
-            Message Function(
-                DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-        "IncompatibleRedirecteeFunctionTypeWarning",
-        templateIncompatibleRedirecteeFunctionTypeWarning,
-        analyzerCodes: <String>["REDIRECT_TO_INVALID_TYPE"],
-        severity: Severity.warning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsIncompatibleRedirecteeFunctionTypeWarning(
-    DartType _type, DartType _type2, bool isNonNullableByDefault) {
-  TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
-  List<Object> typeParts = labeler.labelType(_type);
-  List<Object> type2Parts = labeler.labelType(_type2);
-  String type = typeParts.join();
-  String type2 = type2Parts.join();
-  return new Message(codeIncompatibleRedirecteeFunctionTypeWarning,
-      message:
-          """The constructor function type '${type}' isn't a subtype of '${type2}'.""" +
-              labeler.originMessages,
-      arguments: {'type': _type, 'type2': _type2});
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<
         Message Function(DartType _type, DartType _type2, String name,
             String name2, bool isNonNullableByDefault)>
     templateIncorrectTypeArgument = const Template<
@@ -1218,56 +1257,6 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
-        Message Function(DartType _type, DartType _type2, String name,
-            String name2, bool isNonNullableByDefault)>
-    templateIncorrectTypeArgumentInReturnTypeWarning = const Template<
-            Message Function(DartType _type, DartType _type2, String name,
-                String name2, bool isNonNullableByDefault)>(
-        messageTemplate:
-            r"""Type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2' in the return type.""",
-        tipTemplate:
-            r"""Try changing type arguments so that they conform to the bounds.""",
-        withArguments: _withArgumentsIncorrectTypeArgumentInReturnTypeWarning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<
-        Message Function(DartType _type, DartType _type2, String name,
-            String name2, bool isNonNullableByDefault)>
-    codeIncorrectTypeArgumentInReturnTypeWarning = const Code<
-            Message Function(DartType _type, DartType _type2, String name,
-                String name2, bool isNonNullableByDefault)>(
-        "IncorrectTypeArgumentInReturnTypeWarning",
-        templateIncorrectTypeArgumentInReturnTypeWarning,
-        analyzerCodes: <String>["TYPE_ARGUMENT_NOT_MATCHING_BOUNDS"],
-        severity: Severity.warning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsIncorrectTypeArgumentInReturnTypeWarning(DartType _type,
-    DartType _type2, String name, String name2, bool isNonNullableByDefault) {
-  TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
-  List<Object> typeParts = labeler.labelType(_type);
-  List<Object> type2Parts = labeler.labelType(_type2);
-  if (name.isEmpty) throw 'No name provided';
-  name = demangleMixinApplicationName(name);
-  if (name2.isEmpty) throw 'No name provided';
-  name2 = demangleMixinApplicationName(name2);
-  String type = typeParts.join();
-  String type2 = type2Parts.join();
-  return new Message(codeIncorrectTypeArgumentInReturnTypeWarning,
-      message:
-          """Type argument '${type}' doesn't conform to the bound '${type2}' of the type variable '${name}' on '${name2}' in the return type.""" +
-              labeler.originMessages,
-      tip: """Try changing type arguments so that they conform to the bounds.""",
-      arguments: {
-        'type': _type,
-        'type2': _type2,
-        'name': name,
-        'name2': name2
-      });
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<
         Message Function(
             DartType _type,
             DartType _type2,
@@ -1438,181 +1427,6 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
-        Message Function(
-            DartType _type,
-            DartType _type2,
-            String name,
-            String name2,
-            String name3,
-            String name4,
-            bool isNonNullableByDefault)>
-    templateIncorrectTypeArgumentInSupertypeInferredWarning = const Template<
-            Message Function(
-                DartType _type,
-                DartType _type2,
-                String name,
-                String name2,
-                String name3,
-                String name4,
-                bool isNonNullableByDefault)>(
-        messageTemplate:
-            r"""Inferred type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2' in the supertype '#name3' of class '#name4'.""",
-        tipTemplate:
-            r"""Try specifying type arguments explicitly so that they conform to the bounds.""",
-        withArguments:
-            _withArgumentsIncorrectTypeArgumentInSupertypeInferredWarning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<
-        Message Function(
-            DartType _type,
-            DartType _type2,
-            String name,
-            String name2,
-            String name3,
-            String name4,
-            bool isNonNullableByDefault)>
-    codeIncorrectTypeArgumentInSupertypeInferredWarning = const Code<
-            Message Function(
-                DartType _type,
-                DartType _type2,
-                String name,
-                String name2,
-                String name3,
-                String name4,
-                bool isNonNullableByDefault)>(
-        "IncorrectTypeArgumentInSupertypeInferredWarning",
-        templateIncorrectTypeArgumentInSupertypeInferredWarning,
-        analyzerCodes: <String>["TYPE_ARGUMENT_NOT_MATCHING_BOUNDS"],
-        severity: Severity.warning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsIncorrectTypeArgumentInSupertypeInferredWarning(
-    DartType _type,
-    DartType _type2,
-    String name,
-    String name2,
-    String name3,
-    String name4,
-    bool isNonNullableByDefault) {
-  TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
-  List<Object> typeParts = labeler.labelType(_type);
-  List<Object> type2Parts = labeler.labelType(_type2);
-  if (name.isEmpty) throw 'No name provided';
-  name = demangleMixinApplicationName(name);
-  if (name2.isEmpty) throw 'No name provided';
-  name2 = demangleMixinApplicationName(name2);
-  if (name3.isEmpty) throw 'No name provided';
-  name3 = demangleMixinApplicationName(name3);
-  if (name4.isEmpty) throw 'No name provided';
-  name4 = demangleMixinApplicationName(name4);
-  String type = typeParts.join();
-  String type2 = type2Parts.join();
-  return new Message(codeIncorrectTypeArgumentInSupertypeInferredWarning,
-      message:
-          """Inferred type argument '${type}' doesn't conform to the bound '${type2}' of the type variable '${name}' on '${name2}' in the supertype '${name3}' of class '${name4}'.""" +
-              labeler.originMessages,
-      tip:
-          """Try specifying type arguments explicitly so that they conform to the bounds.""",
-      arguments: {
-        'type': _type,
-        'type2': _type2,
-        'name': name,
-        'name2': name2,
-        'name3': name3,
-        'name4': name4
-      });
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<
-        Message Function(
-            DartType _type,
-            DartType _type2,
-            String name,
-            String name2,
-            String name3,
-            String name4,
-            bool isNonNullableByDefault)>
-    templateIncorrectTypeArgumentInSupertypeWarning = const Template<
-            Message Function(
-                DartType _type,
-                DartType _type2,
-                String name,
-                String name2,
-                String name3,
-                String name4,
-                bool isNonNullableByDefault)>(
-        messageTemplate:
-            r"""Type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2' in the supertype '#name3' of class '#name4'.""",
-        tipTemplate:
-            r"""Try changing type arguments so that they conform to the bounds.""",
-        withArguments: _withArgumentsIncorrectTypeArgumentInSupertypeWarning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<
-        Message Function(
-            DartType _type,
-            DartType _type2,
-            String name,
-            String name2,
-            String name3,
-            String name4,
-            bool isNonNullableByDefault)>
-    codeIncorrectTypeArgumentInSupertypeWarning = const Code<
-            Message Function(
-                DartType _type,
-                DartType _type2,
-                String name,
-                String name2,
-                String name3,
-                String name4,
-                bool isNonNullableByDefault)>(
-        "IncorrectTypeArgumentInSupertypeWarning",
-        templateIncorrectTypeArgumentInSupertypeWarning,
-        analyzerCodes: <String>["TYPE_ARGUMENT_NOT_MATCHING_BOUNDS"],
-        severity: Severity.warning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsIncorrectTypeArgumentInSupertypeWarning(
-    DartType _type,
-    DartType _type2,
-    String name,
-    String name2,
-    String name3,
-    String name4,
-    bool isNonNullableByDefault) {
-  TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
-  List<Object> typeParts = labeler.labelType(_type);
-  List<Object> type2Parts = labeler.labelType(_type2);
-  if (name.isEmpty) throw 'No name provided';
-  name = demangleMixinApplicationName(name);
-  if (name2.isEmpty) throw 'No name provided';
-  name2 = demangleMixinApplicationName(name2);
-  if (name3.isEmpty) throw 'No name provided';
-  name3 = demangleMixinApplicationName(name3);
-  if (name4.isEmpty) throw 'No name provided';
-  name4 = demangleMixinApplicationName(name4);
-  String type = typeParts.join();
-  String type2 = type2Parts.join();
-  return new Message(codeIncorrectTypeArgumentInSupertypeWarning,
-      message:
-          """Type argument '${type}' doesn't conform to the bound '${type2}' of the type variable '${name}' on '${name2}' in the supertype '${name3}' of class '${name4}'.""" +
-              labeler.originMessages,
-      tip:
-          """Try changing type arguments so that they conform to the bounds.""",
-      arguments: {
-        'type': _type,
-        'type2': _type2,
-        'name': name,
-        'name2': name2,
-        'name3': name3,
-        'name4': name4
-      });
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<
         Message Function(DartType _type, DartType _type2, String name,
             String name2, bool isNonNullableByDefault)>
     templateIncorrectTypeArgumentInferred = const Template<
@@ -1662,56 +1476,6 @@
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
         Message Function(DartType _type, DartType _type2, String name,
-            String name2, bool isNonNullableByDefault)>
-    templateIncorrectTypeArgumentInferredWarning = const Template<
-            Message Function(DartType _type, DartType _type2, String name,
-                String name2, bool isNonNullableByDefault)>(
-        messageTemplate:
-            r"""Inferred type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2'.""",
-        tipTemplate:
-            r"""Try specifying type arguments explicitly so that they conform to the bounds.""",
-        withArguments: _withArgumentsIncorrectTypeArgumentInferredWarning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<
-        Message Function(DartType _type, DartType _type2, String name,
-            String name2, bool isNonNullableByDefault)>
-    codeIncorrectTypeArgumentInferredWarning = const Code<
-            Message Function(DartType _type, DartType _type2, String name,
-                String name2, bool isNonNullableByDefault)>(
-        "IncorrectTypeArgumentInferredWarning",
-        templateIncorrectTypeArgumentInferredWarning,
-        analyzerCodes: <String>["TYPE_ARGUMENT_NOT_MATCHING_BOUNDS"],
-        severity: Severity.warning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsIncorrectTypeArgumentInferredWarning(DartType _type,
-    DartType _type2, String name, String name2, bool isNonNullableByDefault) {
-  TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
-  List<Object> typeParts = labeler.labelType(_type);
-  List<Object> type2Parts = labeler.labelType(_type2);
-  if (name.isEmpty) throw 'No name provided';
-  name = demangleMixinApplicationName(name);
-  if (name2.isEmpty) throw 'No name provided';
-  name2 = demangleMixinApplicationName(name2);
-  String type = typeParts.join();
-  String type2 = type2Parts.join();
-  return new Message(codeIncorrectTypeArgumentInferredWarning,
-      message:
-          """Inferred type argument '${type}' doesn't conform to the bound '${type2}' of the type variable '${name}' on '${name2}'.""" +
-              labeler.originMessages,
-      tip: """Try specifying type arguments explicitly so that they conform to the bounds.""",
-      arguments: {
-        'type': _type,
-        'type2': _type2,
-        'name': name,
-        'name2': name2
-      });
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<
-        Message Function(DartType _type, DartType _type2, String name,
             DartType _type3, String name2, bool isNonNullableByDefault)>
     templateIncorrectTypeArgumentQualified = const Template<
             Message Function(DartType _type, DartType _type2, String name,
@@ -1824,172 +1588,6 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
-        Message Function(DartType _type, DartType _type2, String name,
-            DartType _type3, String name2, bool isNonNullableByDefault)>
-    templateIncorrectTypeArgumentQualifiedInferredWarning = const Template<
-            Message Function(DartType _type, DartType _type2, String name,
-                DartType _type3, String name2, bool isNonNullableByDefault)>(
-        messageTemplate:
-            r"""Inferred type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#type3.#name2'.""",
-        tipTemplate:
-            r"""Try specifying type arguments explicitly so that they conform to the bounds.""",
-        withArguments:
-            _withArgumentsIncorrectTypeArgumentQualifiedInferredWarning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<
-        Message Function(DartType _type, DartType _type2, String name,
-            DartType _type3, String name2, bool isNonNullableByDefault)>
-    codeIncorrectTypeArgumentQualifiedInferredWarning = const Code<
-            Message Function(DartType _type, DartType _type2, String name,
-                DartType _type3, String name2, bool isNonNullableByDefault)>(
-        "IncorrectTypeArgumentQualifiedInferredWarning",
-        templateIncorrectTypeArgumentQualifiedInferredWarning,
-        analyzerCodes: <String>["TYPE_ARGUMENT_NOT_MATCHING_BOUNDS"],
-        severity: Severity.warning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsIncorrectTypeArgumentQualifiedInferredWarning(
-    DartType _type,
-    DartType _type2,
-    String name,
-    DartType _type3,
-    String name2,
-    bool isNonNullableByDefault) {
-  TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
-  List<Object> typeParts = labeler.labelType(_type);
-  List<Object> type2Parts = labeler.labelType(_type2);
-  if (name.isEmpty) throw 'No name provided';
-  name = demangleMixinApplicationName(name);
-  List<Object> type3Parts = labeler.labelType(_type3);
-  if (name2.isEmpty) throw 'No name provided';
-  name2 = demangleMixinApplicationName(name2);
-  String type = typeParts.join();
-  String type2 = type2Parts.join();
-  String type3 = type3Parts.join();
-  return new Message(codeIncorrectTypeArgumentQualifiedInferredWarning,
-      message:
-          """Inferred type argument '${type}' doesn't conform to the bound '${type2}' of the type variable '${name}' on '${type3}.${name2}'.""" +
-              labeler.originMessages,
-      tip: """Try specifying type arguments explicitly so that they conform to the bounds.""",
-      arguments: {
-        'type': _type,
-        'type2': _type2,
-        'name': name,
-        'type3': _type3,
-        'name2': name2
-      });
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<
-        Message Function(DartType _type, DartType _type2, String name,
-            DartType _type3, String name2, bool isNonNullableByDefault)>
-    templateIncorrectTypeArgumentQualifiedWarning = const Template<
-            Message Function(DartType _type, DartType _type2, String name,
-                DartType _type3, String name2, bool isNonNullableByDefault)>(
-        messageTemplate:
-            r"""Type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#type3.#name2'.""",
-        tipTemplate:
-            r"""Try changing type arguments so that they conform to the bounds.""",
-        withArguments: _withArgumentsIncorrectTypeArgumentQualifiedWarning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<
-        Message Function(DartType _type, DartType _type2, String name,
-            DartType _type3, String name2, bool isNonNullableByDefault)>
-    codeIncorrectTypeArgumentQualifiedWarning = const Code<
-            Message Function(DartType _type, DartType _type2, String name,
-                DartType _type3, String name2, bool isNonNullableByDefault)>(
-        "IncorrectTypeArgumentQualifiedWarning",
-        templateIncorrectTypeArgumentQualifiedWarning,
-        analyzerCodes: <String>["TYPE_ARGUMENT_NOT_MATCHING_BOUNDS"],
-        severity: Severity.warning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsIncorrectTypeArgumentQualifiedWarning(
-    DartType _type,
-    DartType _type2,
-    String name,
-    DartType _type3,
-    String name2,
-    bool isNonNullableByDefault) {
-  TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
-  List<Object> typeParts = labeler.labelType(_type);
-  List<Object> type2Parts = labeler.labelType(_type2);
-  if (name.isEmpty) throw 'No name provided';
-  name = demangleMixinApplicationName(name);
-  List<Object> type3Parts = labeler.labelType(_type3);
-  if (name2.isEmpty) throw 'No name provided';
-  name2 = demangleMixinApplicationName(name2);
-  String type = typeParts.join();
-  String type2 = type2Parts.join();
-  String type3 = type3Parts.join();
-  return new Message(codeIncorrectTypeArgumentQualifiedWarning,
-      message:
-          """Type argument '${type}' doesn't conform to the bound '${type2}' of the type variable '${name}' on '${type3}.${name2}'.""" +
-              labeler.originMessages,
-      tip: """Try changing type arguments so that they conform to the bounds.""",
-      arguments: {
-        'type': _type,
-        'type2': _type2,
-        'name': name,
-        'type3': _type3,
-        'name2': name2
-      });
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<
-        Message Function(DartType _type, DartType _type2, String name,
-            String name2, bool isNonNullableByDefault)>
-    templateIncorrectTypeArgumentWarning = const Template<
-            Message Function(DartType _type, DartType _type2, String name,
-                String name2, bool isNonNullableByDefault)>(
-        messageTemplate:
-            r"""Type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2'.""",
-        tipTemplate:
-            r"""Try changing type arguments so that they conform to the bounds.""",
-        withArguments: _withArgumentsIncorrectTypeArgumentWarning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<
-        Message Function(DartType _type, DartType _type2, String name,
-            String name2, bool isNonNullableByDefault)>
-    codeIncorrectTypeArgumentWarning = const Code<
-            Message Function(DartType _type, DartType _type2, String name,
-                String name2, bool isNonNullableByDefault)>(
-        "IncorrectTypeArgumentWarning", templateIncorrectTypeArgumentWarning,
-        analyzerCodes: <String>["TYPE_ARGUMENT_NOT_MATCHING_BOUNDS"],
-        severity: Severity.warning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsIncorrectTypeArgumentWarning(DartType _type,
-    DartType _type2, String name, String name2, bool isNonNullableByDefault) {
-  TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
-  List<Object> typeParts = labeler.labelType(_type);
-  List<Object> type2Parts = labeler.labelType(_type2);
-  if (name.isEmpty) throw 'No name provided';
-  name = demangleMixinApplicationName(name);
-  if (name2.isEmpty) throw 'No name provided';
-  name2 = demangleMixinApplicationName(name2);
-  String type = typeParts.join();
-  String type2 = type2Parts.join();
-  return new Message(codeIncorrectTypeArgumentWarning,
-      message:
-          """Type argument '${type}' doesn't conform to the bound '${type2}' of the type variable '${name}' on '${name2}'.""" +
-              labeler.originMessages,
-      tip: """Try changing type arguments so that they conform to the bounds.""",
-      arguments: {
-        'type': _type,
-        'type2': _type2,
-        'name': name,
-        'name2': name2
-      });
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<
         Message Function(String name, DartType _type, DartType _type2,
             bool isNonNullableByDefault)>
     templateInitializingFormalTypeMismatch = const Template<
@@ -2103,42 +1701,6 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
-        Message Function(
-            DartType _type, DartType _type2, bool isNonNullableByDefault)>
-    templateInvalidAssignmentWarning = const Template<
-            Message Function(
-                DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-        messageTemplate:
-            r"""Assigning value of type '#type' to a variable of type '#type2'.""",
-        withArguments: _withArgumentsInvalidAssignmentWarning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<
-        Message Function(
-            DartType _type, DartType _type2, bool isNonNullableByDefault)>
-    codeInvalidAssignmentWarning = const Code<
-            Message Function(
-                DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-        "InvalidAssignmentWarning", templateInvalidAssignmentWarning,
-        severity: Severity.warning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsInvalidAssignmentWarning(
-    DartType _type, DartType _type2, bool isNonNullableByDefault) {
-  TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
-  List<Object> typeParts = labeler.labelType(_type);
-  List<Object> type2Parts = labeler.labelType(_type2);
-  String type = typeParts.join();
-  String type2 = type2Parts.join();
-  return new Message(codeInvalidAssignmentWarning,
-      message:
-          """Assigning value of type '${type}' to a variable of type '${type2}'.""" +
-              labeler.originMessages,
-      arguments: {'type': _type, 'type2': _type2});
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<
     Message Function(
         DartType _type,
         DartType _type2,
@@ -2624,36 +2186,6 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<Message Function(DartType _type, bool isNonNullableByDefault)>
-    templateNullableExpressionCallWarning = const Template<
-            Message Function(DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
-            r"""Expression of type '#type' is used as a function, but it's potentially null.""",
-        tipTemplate: r"""Try calling using ?.call instead.""",
-        withArguments: _withArgumentsNullableExpressionCallWarning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Message Function(DartType _type, bool isNonNullableByDefault)>
-    codeNullableExpressionCallWarning =
-    const Code<Message Function(DartType _type, bool isNonNullableByDefault)>(
-        "NullableExpressionCallWarning", templateNullableExpressionCallWarning,
-        severity: Severity.warning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsNullableExpressionCallWarning(
-    DartType _type, bool isNonNullableByDefault) {
-  TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
-  List<Object> typeParts = labeler.labelType(_type);
-  String type = typeParts.join();
-  return new Message(codeNullableExpressionCallWarning,
-      message:
-          """Expression of type '${type}' is used as a function, but it's potentially null.""" +
-              labeler.originMessages,
-      tip: """Try calling using ?.call instead.""",
-      arguments: {'type': _type});
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
         Message Function(
             String name, DartType _type, bool isNonNullableByDefault)>
@@ -2694,44 +2226,6 @@
 const Template<
         Message Function(
             String name, DartType _type, bool isNonNullableByDefault)>
-    templateNullableMethodCallWarning = const Template<
-            Message Function(
-                String name, DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
-            r"""Method '#name' is called on '#type' which is potentially null.""",
-        tipTemplate: r"""Try calling using ?. instead.""",
-        withArguments: _withArgumentsNullableMethodCallWarning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<
-        Message Function(
-            String name, DartType _type, bool isNonNullableByDefault)>
-    codeNullableMethodCallWarning = const Code<
-            Message Function(
-                String name, DartType _type, bool isNonNullableByDefault)>(
-        "NullableMethodCallWarning", templateNullableMethodCallWarning,
-        severity: Severity.warning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsNullableMethodCallWarning(
-    String name, DartType _type, bool isNonNullableByDefault) {
-  if (name.isEmpty) throw 'No name provided';
-  name = demangleMixinApplicationName(name);
-  TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
-  List<Object> typeParts = labeler.labelType(_type);
-  String type = typeParts.join();
-  return new Message(codeNullableMethodCallWarning,
-      message:
-          """Method '${name}' is called on '${type}' which is potentially null.""" +
-              labeler.originMessages,
-      tip: """Try calling using ?. instead.""",
-      arguments: {'name': name, 'type': _type});
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<
-        Message Function(
-            String name, DartType _type, bool isNonNullableByDefault)>
     templateNullableOperatorCallError = const Template<
             Message Function(
                 String name, DartType _type, bool isNonNullableByDefault)>(
@@ -2769,42 +2263,6 @@
 const Template<
         Message Function(
             String name, DartType _type, bool isNonNullableByDefault)>
-    templateNullableOperatorCallWarning = const Template<
-            Message Function(
-                String name, DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
-            r"""Operator '#name' is called on '#type' which is potentially null.""",
-        withArguments: _withArgumentsNullableOperatorCallWarning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<
-        Message Function(
-            String name, DartType _type, bool isNonNullableByDefault)>
-    codeNullableOperatorCallWarning = const Code<
-            Message Function(
-                String name, DartType _type, bool isNonNullableByDefault)>(
-        "NullableOperatorCallWarning", templateNullableOperatorCallWarning,
-        severity: Severity.warning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsNullableOperatorCallWarning(
-    String name, DartType _type, bool isNonNullableByDefault) {
-  if (name.isEmpty) throw 'No name provided';
-  name = demangleMixinApplicationName(name);
-  TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
-  List<Object> typeParts = labeler.labelType(_type);
-  String type = typeParts.join();
-  return new Message(codeNullableOperatorCallWarning,
-      message:
-          """Operator '${name}' is called on '${type}' which is potentially null.""" +
-              labeler.originMessages,
-      arguments: {'name': name, 'type': _type});
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<
-        Message Function(
-            String name, DartType _type, bool isNonNullableByDefault)>
     templateNullablePropertyAccessError = const Template<
             Message Function(
                 String name, DartType _type, bool isNonNullableByDefault)>(
@@ -2844,44 +2302,6 @@
 const Template<
         Message Function(
             String name, DartType _type, bool isNonNullableByDefault)>
-    templateNullablePropertyAccessWarning = const Template<
-            Message Function(
-                String name, DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
-            r"""Property '#name' is accessed on '#type' which is potentially null.""",
-        tipTemplate: r"""Try accessing using ?. instead.""",
-        withArguments: _withArgumentsNullablePropertyAccessWarning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<
-        Message Function(
-            String name, DartType _type, bool isNonNullableByDefault)>
-    codeNullablePropertyAccessWarning = const Code<
-            Message Function(
-                String name, DartType _type, bool isNonNullableByDefault)>(
-        "NullablePropertyAccessWarning", templateNullablePropertyAccessWarning,
-        severity: Severity.warning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsNullablePropertyAccessWarning(
-    String name, DartType _type, bool isNonNullableByDefault) {
-  if (name.isEmpty) throw 'No name provided';
-  name = demangleMixinApplicationName(name);
-  TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
-  List<Object> typeParts = labeler.labelType(_type);
-  String type = typeParts.join();
-  return new Message(codeNullablePropertyAccessWarning,
-      message:
-          """Property '${name}' is accessed on '${type}' which is potentially null.""" +
-              labeler.originMessages,
-      tip: """Try accessing using ?. instead.""",
-      arguments: {'name': name, 'type': _type});
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<
-        Message Function(
-            String name, DartType _type, bool isNonNullableByDefault)>
     templateOptionalNonNullableWithoutInitializerError = const Template<
             Message Function(
                 String name, DartType _type, bool isNonNullableByDefault)>(
@@ -2918,44 +2338,6 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
-        Message Function(
-            String name, DartType _type, bool isNonNullableByDefault)>
-    templateOptionalNonNullableWithoutInitializerWarning = const Template<
-            Message Function(
-                String name, DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
-            r"""Optional parameter '#name' doesn't have a default value and its type '#type' doesn't allow null.""",
-        withArguments:
-            _withArgumentsOptionalNonNullableWithoutInitializerWarning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<
-        Message Function(
-            String name, DartType _type, bool isNonNullableByDefault)>
-    codeOptionalNonNullableWithoutInitializerWarning = const Code<
-            Message Function(
-                String name, DartType _type, bool isNonNullableByDefault)>(
-        "OptionalNonNullableWithoutInitializerWarning",
-        templateOptionalNonNullableWithoutInitializerWarning,
-        severity: Severity.warning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsOptionalNonNullableWithoutInitializerWarning(
-    String name, DartType _type, bool isNonNullableByDefault) {
-  if (name.isEmpty) throw 'No name provided';
-  name = demangleMixinApplicationName(name);
-  TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
-  List<Object> typeParts = labeler.labelType(_type);
-  String type = typeParts.join();
-  return new Message(codeOptionalNonNullableWithoutInitializerWarning,
-      message:
-          """Optional parameter '${name}' doesn't have a default value and its type '${type}' doesn't allow null.""" +
-              labeler.originMessages,
-      arguments: {'name': name, 'type': _type});
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<
         Message Function(String name, String name2, DartType _type,
             DartType _type2, String name3, bool isNonNullableByDefault)>
     templateOverrideTypeMismatchParameter = const Template<
@@ -3012,64 +2394,6 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
-        Message Function(String name, String name2, DartType _type,
-            DartType _type2, String name3, bool isNonNullableByDefault)>
-    templateOverrideTypeMismatchParameterWarning = const Template<
-            Message Function(String name, String name2, DartType _type,
-                DartType _type2, String name3, bool isNonNullableByDefault)>(
-        messageTemplate:
-            r"""The parameter '#name' of the method '#name2' has type '#type', which does not match the corresponding type, '#type2', in the overridden method, '#name3'.""",
-        tipTemplate:
-            r"""Change to a supertype of '#type2', or, for a covariant parameter, a subtype.""",
-        withArguments: _withArgumentsOverrideTypeMismatchParameterWarning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<
-        Message Function(String name, String name2, DartType _type,
-            DartType _type2, String name3, bool isNonNullableByDefault)>
-    codeOverrideTypeMismatchParameterWarning = const Code<
-            Message Function(String name, String name2, DartType _type,
-                DartType _type2, String name3, bool isNonNullableByDefault)>(
-        "OverrideTypeMismatchParameterWarning",
-        templateOverrideTypeMismatchParameterWarning,
-        analyzerCodes: <String>["INVALID_METHOD_OVERRIDE"],
-        severity: Severity.warning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsOverrideTypeMismatchParameterWarning(
-    String name,
-    String name2,
-    DartType _type,
-    DartType _type2,
-    String name3,
-    bool isNonNullableByDefault) {
-  if (name.isEmpty) throw 'No name provided';
-  name = demangleMixinApplicationName(name);
-  if (name2.isEmpty) throw 'No name provided';
-  name2 = demangleMixinApplicationName(name2);
-  TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
-  List<Object> typeParts = labeler.labelType(_type);
-  List<Object> type2Parts = labeler.labelType(_type2);
-  if (name3.isEmpty) throw 'No name provided';
-  name3 = demangleMixinApplicationName(name3);
-  String type = typeParts.join();
-  String type2 = type2Parts.join();
-  return new Message(codeOverrideTypeMismatchParameterWarning,
-      message:
-          """The parameter '${name}' of the method '${name2}' has type '${type}', which does not match the corresponding type, '${type2}', in the overridden method, '${name3}'.""" +
-              labeler.originMessages,
-      tip: """Change to a supertype of '${type2}', or, for a covariant parameter, a subtype.""",
-      arguments: {
-        'name': name,
-        'name2': name2,
-        'type': _type,
-        'type2': _type2,
-        'name3': name3
-      });
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<
         Message Function(String name, DartType _type, DartType _type2,
             String name2, bool isNonNullableByDefault)>
     templateOverrideTypeMismatchReturnType = const Template<
@@ -3124,59 +2448,6 @@
 const Template<
         Message Function(String name, DartType _type, DartType _type2,
             String name2, bool isNonNullableByDefault)>
-    templateOverrideTypeMismatchReturnTypeWarning = const Template<
-            Message Function(String name, DartType _type, DartType _type2,
-                String name2, bool isNonNullableByDefault)>(
-        messageTemplate:
-            r"""The return type of the method '#name' is '#type', which does not match the return type, '#type2', of the overridden method, '#name2'.""",
-        tipTemplate: r"""Change to a subtype of '#type2'.""",
-        withArguments: _withArgumentsOverrideTypeMismatchReturnTypeWarning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<
-        Message Function(String name, DartType _type, DartType _type2,
-            String name2, bool isNonNullableByDefault)>
-    codeOverrideTypeMismatchReturnTypeWarning = const Code<
-            Message Function(String name, DartType _type, DartType _type2,
-                String name2, bool isNonNullableByDefault)>(
-        "OverrideTypeMismatchReturnTypeWarning",
-        templateOverrideTypeMismatchReturnTypeWarning,
-        analyzerCodes: <String>["INVALID_METHOD_OVERRIDE"],
-        severity: Severity.warning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsOverrideTypeMismatchReturnTypeWarning(
-    String name,
-    DartType _type,
-    DartType _type2,
-    String name2,
-    bool isNonNullableByDefault) {
-  if (name.isEmpty) throw 'No name provided';
-  name = demangleMixinApplicationName(name);
-  TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
-  List<Object> typeParts = labeler.labelType(_type);
-  List<Object> type2Parts = labeler.labelType(_type2);
-  if (name2.isEmpty) throw 'No name provided';
-  name2 = demangleMixinApplicationName(name2);
-  String type = typeParts.join();
-  String type2 = type2Parts.join();
-  return new Message(codeOverrideTypeMismatchReturnTypeWarning,
-      message:
-          """The return type of the method '${name}' is '${type}', which does not match the return type, '${type2}', of the overridden method, '${name2}'.""" +
-              labeler.originMessages,
-      tip: """Change to a subtype of '${type2}'.""",
-      arguments: {
-        'name': name,
-        'type': _type,
-        'type2': _type2,
-        'name2': name2
-      });
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<
-        Message Function(String name, DartType _type, DartType _type2,
-            String name2, bool isNonNullableByDefault)>
     templateOverrideTypeMismatchSetter = const Template<
             Message Function(String name, DartType _type, DartType _type2,
                 String name2, bool isNonNullableByDefault)>(
@@ -3220,57 +2491,6 @@
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
-        Message Function(String name, DartType _type, DartType _type2,
-            String name2, bool isNonNullableByDefault)>
-    templateOverrideTypeMismatchSetterWarning = const Template<
-            Message Function(String name, DartType _type, DartType _type2,
-                String name2, bool isNonNullableByDefault)>(
-        messageTemplate:
-            r"""The field '#name' has type '#type', which does not match the corresponding type, '#type2', in the overridden setter, '#name2'.""",
-        withArguments: _withArgumentsOverrideTypeMismatchSetterWarning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<
-        Message Function(String name, DartType _type, DartType _type2,
-            String name2, bool isNonNullableByDefault)>
-    codeOverrideTypeMismatchSetterWarning = const Code<
-            Message Function(String name, DartType _type, DartType _type2,
-                String name2, bool isNonNullableByDefault)>(
-        "OverrideTypeMismatchSetterWarning",
-        templateOverrideTypeMismatchSetterWarning,
-        analyzerCodes: <String>["INVALID_METHOD_OVERRIDE"],
-        severity: Severity.warning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsOverrideTypeMismatchSetterWarning(
-    String name,
-    DartType _type,
-    DartType _type2,
-    String name2,
-    bool isNonNullableByDefault) {
-  if (name.isEmpty) throw 'No name provided';
-  name = demangleMixinApplicationName(name);
-  TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
-  List<Object> typeParts = labeler.labelType(_type);
-  List<Object> type2Parts = labeler.labelType(_type2);
-  if (name2.isEmpty) throw 'No name provided';
-  name2 = demangleMixinApplicationName(name2);
-  String type = typeParts.join();
-  String type2 = type2Parts.join();
-  return new Message(codeOverrideTypeMismatchSetterWarning,
-      message:
-          """The field '${name}' has type '${type}', which does not match the corresponding type, '${type2}', in the overridden setter, '${name2}'.""" +
-              labeler.originMessages,
-      arguments: {
-        'name': name,
-        'type': _type,
-        'type2': _type2,
-        'name2': name2
-      });
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<
         Message Function(DartType _type, String name, String name2,
             DartType _type2, String name3, bool isNonNullableByDefault)>
     templateOverrideTypeVariablesBoundMismatch = const Template<
@@ -3365,45 +2585,6 @@
 const Template<
         Message Function(
             DartType _type, DartType _type2, bool isNonNullableByDefault)>
-    templateRedirectingFactoryIncompatibleTypeArgumentWarning = const Template<
-            Message Function(
-                DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-        messageTemplate: r"""The type '#type' doesn't extend '#type2'.""",
-        tipTemplate: r"""Try using a different type as argument.""",
-        withArguments:
-            _withArgumentsRedirectingFactoryIncompatibleTypeArgumentWarning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<
-        Message Function(
-            DartType _type, DartType _type2, bool isNonNullableByDefault)>
-    codeRedirectingFactoryIncompatibleTypeArgumentWarning = const Code<
-            Message Function(
-                DartType _type, DartType _type2, bool isNonNullableByDefault)>(
-        "RedirectingFactoryIncompatibleTypeArgumentWarning",
-        templateRedirectingFactoryIncompatibleTypeArgumentWarning,
-        analyzerCodes: <String>["TYPE_ARGUMENT_NOT_MATCHING_BOUNDS"],
-        severity: Severity.warning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsRedirectingFactoryIncompatibleTypeArgumentWarning(
-    DartType _type, DartType _type2, bool isNonNullableByDefault) {
-  TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
-  List<Object> typeParts = labeler.labelType(_type);
-  List<Object> type2Parts = labeler.labelType(_type2);
-  String type = typeParts.join();
-  String type2 = type2Parts.join();
-  return new Message(codeRedirectingFactoryIncompatibleTypeArgumentWarning,
-      message: """The type '${type}' doesn't extend '${type2}'.""" +
-          labeler.originMessages,
-      tip: """Try using a different type as argument.""",
-      arguments: {'type': _type, 'type2': _type2});
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<
-        Message Function(
-            DartType _type, DartType _type2, bool isNonNullableByDefault)>
     templateSpreadElementTypeMismatch = const Template<
             Message Function(
                 DartType _type, DartType _type2, bool isNonNullableByDefault)>(
@@ -3674,35 +2855,6 @@
 }
 
 // DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Template<Message Function(DartType _type, bool isNonNullableByDefault)>
-    templateThrowingNotAssignableToObjectWarning = const Template<
-            Message Function(DartType _type, bool isNonNullableByDefault)>(
-        messageTemplate:
-            r"""Throwing a value of '#type' that is neither dynamic nor non-nullable.""",
-        withArguments: _withArgumentsThrowingNotAssignableToObjectWarning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-const Code<Message Function(DartType _type, bool isNonNullableByDefault)>
-    codeThrowingNotAssignableToObjectWarning =
-    const Code<Message Function(DartType _type, bool isNonNullableByDefault)>(
-        "ThrowingNotAssignableToObjectWarning",
-        templateThrowingNotAssignableToObjectWarning,
-        severity: Severity.warning);
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
-Message _withArgumentsThrowingNotAssignableToObjectWarning(
-    DartType _type, bool isNonNullableByDefault) {
-  TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
-  List<Object> typeParts = labeler.labelType(_type);
-  String type = typeParts.join();
-  return new Message(codeThrowingNotAssignableToObjectWarning,
-      message:
-          """Throwing a value of '${type}' that is neither dynamic nor non-nullable.""" +
-              labeler.originMessages,
-      arguments: {'type': _type});
-}
-
-// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
 const Template<
     Message Function(
         String name,
@@ -3792,6 +2944,48 @@
         String name,
         DartType _type,
         bool
+            isNonNullableByDefault)> templateUndefinedOperator = const Template<
+        Message Function(String name, DartType _type,
+            bool isNonNullableByDefault)>(
+    messageTemplate:
+        r"""The operator '#name' isn't defined for the class '#type'.""",
+    tipTemplate:
+        r"""Try correcting the operator to an existing operator, or defining a '#name' operator.""",
+    withArguments: _withArgumentsUndefinedOperator);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Code<
+        Message Function(
+            String name, DartType _type, bool isNonNullableByDefault)>
+    codeUndefinedOperator = const Code<
+            Message Function(
+                String name, DartType _type, bool isNonNullableByDefault)>(
+        "UndefinedOperator", templateUndefinedOperator,
+        analyzerCodes: <String>["UNDEFINED_METHOD"]);
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+Message _withArgumentsUndefinedOperator(
+    String name, DartType _type, bool isNonNullableByDefault) {
+  if (name.isEmpty) throw 'No name provided';
+  name = demangleMixinApplicationName(name);
+  TypeLabeler labeler = new TypeLabeler(isNonNullableByDefault);
+  List<Object> typeParts = labeler.labelType(_type);
+  String type = typeParts.join();
+  return new Message(codeUndefinedOperator,
+      message:
+          """The operator '${name}' isn't defined for the class '${type}'.""" +
+              labeler.originMessages,
+      tip:
+          """Try correcting the operator to an existing operator, or defining a '${name}' operator.""",
+      arguments: {'name': name, 'type': _type});
+}
+
+// DO NOT EDIT. THIS FILE IS GENERATED. SEE TOP OF FILE.
+const Template<
+    Message Function(
+        String name,
+        DartType _type,
+        bool
             isNonNullableByDefault)> templateUndefinedSetter = const Template<
         Message Function(
             String name, DartType _type, bool isNonNullableByDefault)>(
diff --git a/pkg/front_end/lib/src/fasta/incremental_compiler.dart b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
index 074cc5b..e0a4b57 100644
--- a/pkg/front_end/lib/src/fasta/incremental_compiler.dart
+++ b/pkg/front_end/lib/src/fasta/incremental_compiler.dart
@@ -640,10 +640,10 @@
           while (iterator.moveNext()) {
             Builder childBuilder = iterator.current;
             if (childBuilder is SourceClassBuilder) {
-              TypeBuilder typeBuilder = childBuilder.supertype;
+              TypeBuilder typeBuilder = childBuilder.supertypeBuilder;
               replaceTypeBuilder(
                   replacementMap, replacementSettersMap, typeBuilder);
-              typeBuilder = childBuilder.mixedInType;
+              typeBuilder = childBuilder.mixedInTypeBuilder;
               replaceTypeBuilder(
                   replacementMap, replacementSettersMap, typeBuilder);
               if (childBuilder.onTypes != null) {
@@ -652,8 +652,8 @@
                       replacementMap, replacementSettersMap, typeBuilder);
                 }
               }
-              if (childBuilder.interfaces != null) {
-                for (typeBuilder in childBuilder.interfaces) {
+              if (childBuilder.interfaceBuilders != null) {
+                for (typeBuilder in childBuilder.interfaceBuilders) {
                   replaceTypeBuilder(
                       replacementMap, replacementSettersMap, typeBuilder);
                 }
diff --git a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
index ec3c6e9..580753b 100644
--- a/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/body_builder.dart
@@ -43,8 +43,6 @@
 import 'package:kernel/ast.dart';
 import 'package:kernel/type_environment.dart';
 
-import '../../base/nnbd_mode.dart';
-
 import '../builder/builder.dart';
 import '../builder/class_builder.dart';
 import '../builder/constructor_builder.dart';
@@ -955,8 +953,8 @@
     }
 
     if (body != null) {
-      body = typeInferrer?.inferFunctionBody(
-          this, _computeReturnTypeContext(member), asyncModifier, body);
+      body = typeInferrer?.inferFunctionBody(this, member.charOffset,
+          _computeReturnTypeContext(member), asyncModifier, body);
       libraryBuilder.loader.transformPostInference(body, transformSetLiterals,
           transformCollections, libraryBuilder.library);
     }
@@ -1290,6 +1288,7 @@
   @override
   Expression parseSingleExpression(
       Parser parser, Token token, FunctionNode parameters) {
+    int fileOffset = offsetForToken(token);
     List<TypeVariableBuilder> typeParameterBuilders;
     for (TypeParameter typeParameter in parameters.typeParameters) {
       typeParameterBuilders ??= <TypeVariableBuilder>[];
@@ -1311,7 +1310,7 @@
     }
     enterLocalScope(
         null,
-        new FormalParameters(formals, offsetForToken(token), noLength, uri)
+        new FormalParameters(formals, fileOffset, noLength, uri)
             .computeFormalParameterScope(scope, member, this));
 
     token = parser.parseExpression(parser.syntheticPreviousToken(token));
@@ -1329,7 +1328,7 @@
     ReturnStatementImpl fakeReturn = new ReturnStatementImpl(true, expression);
 
     typeInferrer?.inferFunctionBody(
-        this, const DynamicType(), AsyncMarker.Sync, fakeReturn);
+        this, fileOffset, const DynamicType(), AsyncMarker.Sync, fakeReturn);
 
     return fakeReturn.expression;
   }
@@ -1402,7 +1401,7 @@
           checkArgumentsForFunction(superTarget.function, arguments,
                   builder.charOffset, const <TypeParameter>[]) !=
               null) {
-        String superclass = classBuilder.supertype.fullNameForErrors;
+        String superclass = classBuilder.supertypeBuilder.fullNameForErrors;
         int length = constructor.name.name.length;
         if (length == 0) {
           length = (constructor.parent as Class).name.length;
@@ -2820,7 +2819,8 @@
         typeArgument = const InvalidType();
       } else {
         typeArgument = buildDartType(typeArguments.single);
-        typeArgument = instantiateToBounds(typeArgument, coreTypes.objectClass);
+        typeArgument = instantiateToBounds(
+            typeArgument, coreTypes.objectClass, libraryBuilder.library);
       }
     } else {
       typeArgument = implicitTypeArgument;
@@ -2843,7 +2843,8 @@
     DartType typeArgument;
     if (typeArguments != null) {
       typeArgument = buildDartType(typeArguments.single);
-      typeArgument = instantiateToBounds(typeArgument, coreTypes.objectClass);
+      typeArgument = instantiateToBounds(
+          typeArgument, coreTypes.objectClass, libraryBuilder.library);
     } else {
       typeArgument = implicitTypeArgument;
     }
@@ -2978,8 +2979,10 @@
       } else {
         keyType = buildDartType(typeArguments[0]);
         valueType = buildDartType(typeArguments[1]);
-        keyType = instantiateToBounds(keyType, coreTypes.objectClass);
-        valueType = instantiateToBounds(valueType, coreTypes.objectClass);
+        keyType = instantiateToBounds(
+            keyType, coreTypes.objectClass, libraryBuilder.library);
+        valueType = instantiateToBounds(
+            valueType, coreTypes.objectClass, libraryBuilder.library);
       }
     } else {
       DartType implicitTypeArgument = this.implicitTypeArgument;
@@ -3924,17 +3927,9 @@
         Set<String> argumentNames = new Set.from(named.map((a) => a.name));
         for (VariableDeclaration parameter in function.namedParameters) {
           if (parameter.isRequired && !argumentNames.contains(parameter.name)) {
-            if (libraryBuilder.loader.nnbdMode == NnbdMode.Weak) {
-              addProblem(
-                  fasta.templateValueForRequiredParameterNotProvidedWarning
-                      .withArguments(parameter.name),
-                  arguments.fileOffset,
-                  fasta.noLength);
-            } else {
-              return fasta.templateValueForRequiredParameterNotProvidedError
-                  .withArguments(parameter.name)
-                  .withLocation(uri, arguments.fileOffset, fasta.noLength);
-            }
+            return fasta.templateValueForRequiredParameterNotProvidedError
+                .withArguments(parameter.name)
+                .withLocation(uri, arguments.fileOffset, fasta.noLength);
           }
         }
       }
@@ -3991,17 +3986,9 @@
         Set<String> argumentNames = new Set.from(named.map((a) => a.name));
         for (NamedType parameter in function.namedParameters) {
           if (parameter.isRequired && !argumentNames.contains(parameter.name)) {
-            if (libraryBuilder.loader.nnbdMode == NnbdMode.Weak) {
-              addProblem(
-                  fasta.templateValueForRequiredParameterNotProvidedWarning
-                      .withArguments(parameter.name),
-                  arguments.fileOffset,
-                  fasta.noLength);
-            } else {
-              return fasta.templateValueForRequiredParameterNotProvidedError
-                  .withArguments(parameter.name)
-                  .withLocation(uri, arguments.fileOffset, fasta.noLength);
-            }
+            return fasta.templateValueForRequiredParameterNotProvidedError
+                .withArguments(parameter.name)
+                .withLocation(uri, arguments.fileOffset, fasta.noLength);
           }
         }
       }
@@ -5369,7 +5356,7 @@
     List<TypeBuilder> calculatedBounds = calculateBounds(
         typeVariables,
         libraryBuilder.loader.target.dynamicType,
-        libraryBuilder.loader.target.bottomType,
+        libraryBuilder.loader.target.nullType,
         libraryBuilder.loader.target.objectClassBuilder);
     for (int i = 0; i < typeVariables.length; ++i) {
       typeVariables[i].defaultType = calculatedBounds[i];
diff --git a/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart b/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
index 773fff0..a3df7ab 100644
--- a/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/class_hierarchy_builder.dart
@@ -41,6 +41,7 @@
         Message,
         messageDeclaredMemberConflictsWithInheritedMember,
         messageDeclaredMemberConflictsWithInheritedMemberCause,
+        messageDeclaredMemberConflictsWithInheritedMembersCause,
         messageInheritedMembersConflict,
         messageInheritedMembersConflictCause1,
         messageInheritedMembersConflictCause2,
@@ -218,8 +219,6 @@
   Uri get fileUri;
   int get charOffset;
   bool get isAbstract;
-  bool get hasExplicitReturnType;
-  bool hasExplicitlyTypedFormalParameter(int index);
 
   bool get needsComputation;
   bool get isSynthesized;
@@ -671,61 +670,68 @@
       SourceProcedureBuilder declaredMember,
       Iterable<ClassMember> overriddenMembers) {
     assert(!declaredMember.isGetter && !declaredMember.isSetter);
-    Procedure declaredProcedure = declaredMember.member;
-    FunctionNode declaredFunction = declaredProcedure.function;
-    List<TypeParameter> declaredTypeParameters =
-        declaredFunction.typeParameters;
-    List<VariableDeclaration> declaredPositional =
-        declaredFunction.positionalParameters;
-    List<VariableDeclaration> declaredNamed = declaredFunction.namedParameters;
     if (declaredMember.classBuilder == classBuilder &&
         (declaredMember.returnType == null ||
             declaredMember.formals != null &&
                 declaredMember.formals
                     .any((parameter) => parameter.type == null))) {
-      for (ClassMember overriddenMember
+      Procedure declaredProcedure = declaredMember.member;
+      FunctionNode declaredFunction = declaredProcedure.function;
+      List<TypeParameter> declaredTypeParameters =
+          declaredFunction.typeParameters;
+      List<VariableDeclaration> declaredPositional =
+          declaredFunction.positionalParameters;
+      List<VariableDeclaration> declaredNamed =
+          declaredFunction.namedParameters;
+      declaredNamed = declaredNamed.toList()..sort(compareNamedParameters);
+
+      DartType inferredReturnType;
+      Map<FormalParameterBuilder, DartType> inferredParameterTypes = {};
+
+      for (ClassMember classMember
           in toSet(declaredMember.classBuilder, overriddenMembers)) {
-        assert(useConsolidated || !overriddenMember.hasDeclarations);
-        int hadTypesInferredFrom = declaredMember.hadTypesInferredFrom;
-        Member bMember = overriddenMember.getMember(hierarchy);
-        Substitution bSubstitution;
-        if (classBuilder.cls != bMember.enclosingClass) {
+        assert(useConsolidated || !classMember.hasDeclarations);
+        Member overriddenMember = classMember.getMember(hierarchy);
+        Substitution classSubstitution;
+        if (classBuilder.cls != overriddenMember.enclosingClass) {
           assert(
-              substitutions.containsKey(bMember.enclosingClass),
+              substitutions.containsKey(overriddenMember.enclosingClass),
               "No substitution found for '${classBuilder.fullNameForErrors}' "
-              "as instance of '${bMember.enclosingClass.name}'. Substitutions "
-              "available for: ${substitutions.keys}");
-          bSubstitution = substitutions[bMember.enclosingClass];
+              "as instance of '${overriddenMember.enclosingClass.name}'. "
+              "Substitutions available for: ${substitutions.keys}");
+          classSubstitution = substitutions[overriddenMember.enclosingClass];
           debug?.log("${classBuilder.fullNameForErrors} -> "
-              "${bMember.enclosingClass.name} $bSubstitution");
+              "${overriddenMember.enclosingClass.name} $classSubstitution");
         }
-        if (bMember is! Procedure) {
+        if (overriddenMember is! Procedure) {
           debug?.log("Giving up 1");
           continue;
         }
-        Procedure bProcedure = bMember;
-        FunctionNode bFunction = bProcedure.function;
+        Procedure overriddenProcedure = overriddenMember;
+        FunctionNode overriddenFunction = overriddenProcedure.function;
 
-        List<TypeParameter> bTypeParameters = bFunction.typeParameters;
+        List<TypeParameter> overriddenTypeParameters =
+            overriddenFunction.typeParameters;
         int typeParameterCount = declaredTypeParameters.length;
-        if (typeParameterCount != bTypeParameters.length) {
+        if (typeParameterCount != overriddenTypeParameters.length) {
           debug?.log("Giving up 2");
           continue;
         }
-        Substitution substitution;
+        Substitution methodSubstitution;
         if (typeParameterCount != 0) {
           List<DartType> types = new List<DartType>(typeParameterCount);
           for (int i = 0; i < typeParameterCount; i++) {
             types[i] = new TypeParameterType.forAlphaRenaming(
-                bTypeParameters[i], declaredTypeParameters[i]);
+                overriddenTypeParameters[i], declaredTypeParameters[i]);
           }
-          substitution = Substitution.fromPairs(bTypeParameters, types);
+          methodSubstitution =
+              Substitution.fromPairs(overriddenTypeParameters, types);
           for (int i = 0; i < typeParameterCount; i++) {
-            DartType aBound = declaredTypeParameters[i].bound;
-            DartType bBound =
-                substitution.substituteType(bTypeParameters[i].bound);
+            DartType declaredBound = declaredTypeParameters[i].bound;
+            DartType overriddenBound = methodSubstitution
+                .substituteType(overriddenTypeParameters[i].bound);
             if (!hierarchy.types
-                .isSameTypeKernel(aBound, bBound)
+                .isSameTypeKernel(declaredBound, overriddenBound)
                 .isSubtypeWhenUsingNullabilities()) {
               debug?.log("Giving up 3");
               continue;
@@ -733,126 +739,149 @@
           }
         }
 
-        DartType bReturnType = bFunction.returnType;
-        if (bSubstitution != null) {
-          bReturnType = bSubstitution.substituteType(bReturnType);
+        DartType inheritedReturnType = overriddenFunction.returnType;
+        if (classSubstitution != null) {
+          inheritedReturnType =
+              classSubstitution.substituteType(inheritedReturnType);
         }
-        if (substitution != null) {
-          bReturnType = substitution.substituteType(bReturnType);
+        if (methodSubstitution != null) {
+          inheritedReturnType =
+              methodSubstitution.substituteType(inheritedReturnType);
+        }
+        if (declaredMember.returnType == null &&
+            inferredReturnType is! InvalidType) {
+          inferredReturnType = mergeTypeInLibrary(
+              hierarchy, classBuilder, inferredReturnType, inheritedReturnType);
+          if (inferredReturnType == null) {
+            // A different type has already been inferred.
+            inferredReturnType = const InvalidType();
+            reportCantInferReturnType(
+                classBuilder, declaredMember, hierarchy, overriddenMembers);
+          }
         }
         if (declaredFunction.requiredParameterCount >
-            bFunction.requiredParameterCount) {
+            overriddenFunction.requiredParameterCount) {
           debug?.log("Giving up 4");
           continue;
         }
-        List<VariableDeclaration> bPositional = bFunction.positionalParameters;
-        if (declaredPositional.length < bPositional.length) {
+        List<VariableDeclaration> overriddenPositional =
+            overriddenFunction.positionalParameters;
+        if (declaredPositional.length < overriddenPositional.length) {
           debug?.log("Giving up 5");
           continue;
         }
 
-        if (declaredMember.classBuilder == classBuilder &&
-            declaredMember.returnType == null) {
-          inferReturnType(
-              classBuilder,
-              declaredMember,
-              declaredMember.member.function,
-              bReturnType,
-              hadTypesInferredFrom,
-              SourceProcedureBuilder.inferredTypesFromMethod,
-              hierarchy);
-        } else {
-          debug?.log("Giving up 6");
-        }
+        for (int i = 0; i < overriddenPositional.length; i++) {
+          FormalParameterBuilder declaredParameter = declaredMember.formals[i];
+          if (declaredParameter.type != null) continue;
 
-        for (int i = 0; i < bPositional.length; i++) {
-          VariableDeclaration bParameter = bPositional[i];
-          if (declaredMember.classBuilder == classBuilder &&
-              declaredMember.formals[i].type == null) {
-            DartType bType = bParameter.type;
-            if (bSubstitution != null) {
-              bType = bSubstitution.substituteType(bType);
-            }
-            if (substitution != null) {
-              bType = substitution.substituteType(bType);
-            }
-            if (hierarchy.coreTypes.objectClass.enclosingLibrary
-                    .isNonNullableByDefault &&
-                !declaredMember.classBuilder.library.isNonNullableByDefault &&
-                bProcedure == hierarchy.coreTypes.objectEquals) {
-              // In legacy code we special case `Object.==` to infer `dynamic`
-              // instead `Object!`.
-              bType = const DynamicType();
-            }
-            inferParameterType(
-                classBuilder,
-                declaredMember,
-                declaredMember.formals[i],
-                bType,
-                hadTypesInferredFrom,
-                SourceProcedureBuilder.inferredTypesFromMethod,
-                hierarchy);
-          } else {
-            debug?.log("Giving up 8");
+          VariableDeclaration overriddenParameter = overriddenPositional[i];
+          DartType inheritedParameterType = overriddenParameter.type;
+          if (classSubstitution != null) {
+            inheritedParameterType =
+                classSubstitution.substituteType(inheritedParameterType);
           }
+          if (methodSubstitution != null) {
+            inheritedParameterType =
+                methodSubstitution.substituteType(inheritedParameterType);
+          }
+          if (hierarchy.coreTypes.objectClass.enclosingLibrary
+                  .isNonNullableByDefault &&
+              !declaredMember.classBuilder.library.isNonNullableByDefault &&
+              overriddenProcedure == hierarchy.coreTypes.objectEquals) {
+            // In legacy code we special case `Object.==` to infer `dynamic`
+            // instead `Object!`.
+            inheritedParameterType = const DynamicType();
+          }
+          DartType inferredParameterType =
+              inferredParameterTypes[declaredParameter];
+          inferredParameterType = mergeTypeInLibrary(hierarchy, classBuilder,
+              inferredParameterType, inheritedParameterType);
+          if (inferredParameterType == null) {
+            // A different type has already been inferred.
+            inferredParameterType = const InvalidType();
+            reportCantInferParameterType(
+                classBuilder, declaredParameter, hierarchy, overriddenMembers);
+          }
+          inferredParameterTypes[declaredParameter] = inferredParameterType;
         }
 
-        List<VariableDeclaration> bNamed = bFunction.namedParameters;
+        List<VariableDeclaration> overriddenNamed =
+            overriddenFunction.namedParameters;
         named:
-        if (declaredNamed.isNotEmpty || bNamed.isNotEmpty) {
-          if (declaredPositional.length != bPositional.length) {
+        if (declaredNamed.isNotEmpty || overriddenNamed.isNotEmpty) {
+          if (declaredPositional.length != overriddenPositional.length) {
             debug?.log("Giving up 9");
             break named;
           }
           if (declaredFunction.requiredParameterCount !=
-              bFunction.requiredParameterCount) {
+              overriddenFunction.requiredParameterCount) {
             debug?.log("Giving up 10");
             break named;
           }
 
-          declaredNamed = declaredNamed.toList()..sort(compareNamedParameters);
-          bNamed = bNamed.toList()..sort(compareNamedParameters);
-          int aCount = 0;
-          for (int bCount = 0; bCount < bNamed.length; bCount++) {
-            String name = bNamed[bCount].name;
-            for (; aCount < declaredNamed.length; aCount++) {
-              if (declaredNamed[aCount].name == name) break;
+          overriddenNamed = overriddenNamed.toList()
+            ..sort(compareNamedParameters);
+          int declaredIndex = 0;
+          for (int overriddenIndex = 0;
+              overriddenIndex < overriddenNamed.length;
+              overriddenIndex++) {
+            String name = overriddenNamed[overriddenIndex].name;
+            for (; declaredIndex < declaredNamed.length; declaredIndex++) {
+              if (declaredNamed[declaredIndex].name == name) break;
             }
-            if (aCount == declaredNamed.length) {
+            if (declaredIndex == declaredNamed.length) {
               debug?.log("Giving up 11");
               break named;
             }
-            FormalParameterBuilder parameter;
+            FormalParameterBuilder declaredParameter;
             for (int i = declaredPositional.length;
                 i < declaredMember.formals.length;
                 ++i) {
               if (declaredMember.formals[i].name == name) {
-                parameter = declaredMember.formals[i];
+                declaredParameter = declaredMember.formals[i];
                 break;
               }
             }
-            VariableDeclaration bParameter = bNamed[bCount];
+            if (declaredParameter.type != null) continue;
+            VariableDeclaration overriddenParameter =
+                overriddenNamed[overriddenIndex];
 
-            if (declaredMember.classBuilder == classBuilder &&
-                parameter.type == null) {
-              DartType bType = bParameter.type;
-              if (bSubstitution != null) {
-                bType = bSubstitution.substituteType(bType);
-              }
-              if (substitution != null) {
-                bType = substitution.substituteType(bType);
-              }
-              inferParameterType(
-                  classBuilder,
-                  declaredMember,
-                  parameter,
-                  bType,
-                  hadTypesInferredFrom,
-                  SourceProcedureBuilder.inferredTypesFromMethod,
-                  hierarchy);
-            } else {
-              debug?.log("Giving up 12");
+            DartType inheritedParameterType = overriddenParameter.type;
+            if (classSubstitution != null) {
+              inheritedParameterType =
+                  classSubstitution.substituteType(inheritedParameterType);
             }
+            if (methodSubstitution != null) {
+              inheritedParameterType =
+                  methodSubstitution.substituteType(inheritedParameterType);
+            }
+            DartType inferredParameterType =
+                inferredParameterTypes[declaredParameter];
+            inferredParameterType = mergeTypeInLibrary(hierarchy, classBuilder,
+                inferredParameterType, inheritedParameterType);
+            if (inferredParameterType == null) {
+              // A different type has already been inferred.
+              inferredParameterType = const InvalidType();
+              reportCantInferParameterType(classBuilder, declaredParameter,
+                  hierarchy, overriddenMembers);
+            }
+            inferredParameterTypes[declaredParameter] = inferredParameterType;
+          }
+        }
+      }
+      if (declaredMember.returnType == null) {
+        inferredReturnType ??= const DynamicType();
+        declaredFunction.returnType = inferredReturnType;
+      }
+      if (declaredMember.formals != null) {
+        for (FormalParameterBuilder declaredParameter
+            in declaredMember.formals) {
+          if (declaredParameter.type == null) {
+            DartType inferredParameterType =
+                inferredParameterTypes[declaredParameter] ??
+                    const DynamicType();
+            declaredParameter.variable.type = inferredParameterType;
           }
         }
       }
@@ -995,54 +1024,74 @@
     assert(declaredMember.isGetter);
     if (declaredMember.classBuilder == classBuilder &&
         declaredMember.returnType == null) {
-      for (ClassMember overriddenMember
-          in toSet(declaredMember.classBuilder, overriddenMembers)) {
-        int hadTypesInferredFrom = declaredMember.hadTypesInferredFrom;
-        Member bTarget = overriddenMember.getMember(hierarchy);
-        Substitution bSubstitution;
-        if (classBuilder.cls != bTarget.enclosingClass) {
+      DartType inferredType;
+
+      void inferFrom(ClassMember classMember) {
+        if (inferredType is InvalidType) return;
+
+        Member overriddenMember = classMember.getMember(hierarchy);
+        Substitution substitution;
+        if (classBuilder.cls != overriddenMember.enclosingClass) {
           assert(
-              substitutions.containsKey(bTarget.enclosingClass),
+              substitutions.containsKey(overriddenMember.enclosingClass),
               "No substitution found for '${classBuilder.fullNameForErrors}' "
-              "as instance of '${bTarget.enclosingClass.name}'. Substitutions "
-              "available for: ${substitutions.keys}");
-          bSubstitution = substitutions[bTarget.enclosingClass];
+              "as instance of '${overriddenMember.enclosingClass.name}'. "
+              "Substitutions available for: ${substitutions.keys}");
+          substitution = substitutions[overriddenMember.enclosingClass];
         }
-        DartType bType;
-        int inferTypesFrom;
-        if (bTarget is Field) {
-          bType = bTarget.type;
-          assert(bType is! ImplicitFieldType);
-          inferTypesFrom = SourceProcedureBuilder.inferredTypesFromField;
-        } else if (bTarget is Procedure) {
-          if (bTarget.kind == ProcedureKind.Setter) {
+        DartType inheritedType;
+        if (overriddenMember is Field) {
+          inheritedType = overriddenMember.type;
+          assert(inheritedType is! ImplicitFieldType);
+        } else if (overriddenMember is Procedure) {
+          if (overriddenMember.kind == ProcedureKind.Setter) {
             VariableDeclaration bParameter =
-                bTarget.function.positionalParameters.single;
-            bType = bParameter.type;
-            inferTypesFrom = SourceProcedureBuilder.inferredTypesFromSetter;
-          } else if (bTarget.kind == ProcedureKind.Getter) {
-            bType = bTarget.function.returnType;
-            inferTypesFrom = SourceProcedureBuilder.inferredTypesFromGetter;
+                overriddenMember.function.positionalParameters.single;
+            inheritedType = bParameter.type;
+          } else if (overriddenMember.kind == ProcedureKind.Getter) {
+            inheritedType = overriddenMember.function.returnType;
           } else {
-            debug?.log("Giving up (not accessor: ${bTarget.kind})");
-            continue;
+            debug?.log("Giving up (not accessor: ${overriddenMember.kind})");
+            return;
           }
         } else {
-          debug?.log("Giving up (not field/procedure: ${bTarget.runtimeType})");
-          continue;
+          debug?.log(
+              "Giving up (not field/procedure: ${overriddenMember.runtimeType})");
+          return;
         }
-        if (bSubstitution != null) {
-          bType = bSubstitution.substituteType(bType);
+        if (substitution != null) {
+          inheritedType = substitution.substituteType(inheritedType);
         }
-        inferReturnType(
-            classBuilder,
-            declaredMember,
-            declaredMember.member.function,
-            bType,
-            hadTypesInferredFrom,
-            inferTypesFrom,
-            hierarchy);
+        inferredType = mergeTypeInLibrary(
+            hierarchy, classBuilder, inferredType, inheritedType);
+
+        if (inferredType == null) {
+          // A different type has already been inferred.
+          inferredType = const InvalidType();
+          reportCantInferReturnType(
+              classBuilder, declaredMember, hierarchy, overriddenMembers);
+        }
       }
+
+      overriddenMembers = toSet(classBuilder, overriddenMembers);
+      // The getter type must be inferred from getters first.
+      for (ClassMember overriddenMember in overriddenMembers) {
+        if (!overriddenMember.forSetter) {
+          inferFrom(overriddenMember);
+        }
+      }
+      if (inferredType == null) {
+        // The getter type must be inferred from setters if no type was
+        // inferred from getters.
+        for (ClassMember overriddenMember in overriddenMembers) {
+          if (overriddenMember.forSetter) {
+            inferFrom(overriddenMember);
+          }
+        }
+      }
+
+      inferredType ??= const DynamicType();
+      declaredMember.procedure.function.returnType = inferredType;
     }
   }
 
@@ -1055,47 +1104,110 @@
     assert(declaredMember.isSetter);
     FormalParameterBuilder parameter = declaredMember.formals.first;
     if (declaredMember.classBuilder == classBuilder && parameter.type == null) {
-      for (ClassMember overriddenMember
-          in toSet(declaredMember.classBuilder, overriddenMembers)) {
-        int hadTypesInferredFrom = declaredMember.hadTypesInferredFrom;
-        Member bTarget = overriddenMember.getMember(hierarchy);
-        Substitution bSubstitution;
-        if (classBuilder.cls != bTarget.enclosingClass) {
+      DartType inferredType;
+
+      void inferFrom(ClassMember classMember) {
+        if (inferredType is InvalidType) return;
+
+        Member overriddenMember = classMember.getMember(hierarchy);
+        Substitution substitution;
+        if (classBuilder.cls != overriddenMember.enclosingClass) {
           assert(
-              substitutions.containsKey(bTarget.enclosingClass),
+              substitutions.containsKey(overriddenMember.enclosingClass),
               "No substitution found for '${classBuilder.fullNameForErrors}' "
-              "as instance of '${bTarget.enclosingClass.name}'. Substitutions "
-              "available for: ${substitutions.keys}");
-          bSubstitution = substitutions[bTarget.enclosingClass];
+              "as instance of '${overriddenMember.enclosingClass.name}'. "
+              "Substitutions available for: ${substitutions.keys}");
+          substitution = substitutions[overriddenMember.enclosingClass];
         }
-        DartType bType;
-        int inferTypesFrom;
-        if (bTarget is Field) {
-          bType = bTarget.type;
-          assert(bType is! ImplicitFieldType);
-          inferTypesFrom = SourceProcedureBuilder.inferredTypesFromField;
-        } else if (bTarget is Procedure) {
-          if (overriddenMember.isSetter) {
+        DartType inheritedType;
+        if (overriddenMember is Field) {
+          inheritedType = overriddenMember.type;
+          assert(inheritedType is! ImplicitFieldType);
+        } else if (overriddenMember is Procedure) {
+          if (classMember.isSetter) {
             VariableDeclaration bParameter =
-                bTarget.function.positionalParameters.single;
-            bType = bParameter.type;
-            inferTypesFrom = SourceProcedureBuilder.inferredTypesFromSetter;
-          } else if (overriddenMember.isGetter) {
-            bType = bTarget.function.returnType;
-            inferTypesFrom = SourceProcedureBuilder.inferredTypesFromGetter;
+                overriddenMember.function.positionalParameters.single;
+            inheritedType = bParameter.type;
+          } else if (classMember.isGetter) {
+            inheritedType = overriddenMember.function.returnType;
           } else {
-            debug?.log("Giving up (not accessor: ${bTarget.kind})");
-            continue;
+            debug?.log("Giving up (not accessor: ${overriddenMember.kind})");
+            return;
           }
         } else {
-          debug?.log("Giving up (not field/procedure: ${bTarget.runtimeType})");
-          continue;
+          debug?.log(
+              "Giving up (not field/procedure: ${overriddenMember.runtimeType})");
+          return;
         }
-        if (bSubstitution != null) {
-          bType = bSubstitution.substituteType(bType);
+        if (substitution != null) {
+          inheritedType = substitution.substituteType(inheritedType);
         }
-        inferParameterType(classBuilder, declaredMember, parameter, bType,
-            hadTypesInferredFrom, inferTypesFrom, hierarchy);
+        inferredType = mergeTypeInLibrary(
+            hierarchy, classBuilder, inferredType, inheritedType);
+        if (inferredType == null) {
+          // A different type has already been inferred.
+          inferredType = const InvalidType();
+          reportCantInferParameterType(
+              classBuilder, parameter, hierarchy, overriddenMembers);
+        }
+      }
+
+      overriddenMembers = toSet(classBuilder, overriddenMembers);
+      // The setter type must be inferred from setters first.
+      for (ClassMember overriddenMember in overriddenMembers) {
+        if (overriddenMember.forSetter) {
+          inferFrom(overriddenMember);
+        }
+      }
+      if (inferredType == null) {
+        // The setter type must be inferred from getters if no type was
+        // inferred from setters.
+        for (ClassMember overriddenMember in overriddenMembers) {
+          if (!overriddenMember.forSetter) {
+            inferFrom(overriddenMember);
+          }
+        }
+      }
+
+      inferredType ??= const DynamicType();
+      parameter.variable.type = inferredType;
+    }
+  }
+
+  /// Merge the [inheritedType] with the currently [inferredType] using
+  /// nnbd-top-merge or legacy-top-merge depending on whether [classBuilder] is
+  /// defined in an opt-in or opt-out library. If the types could not be merged
+  /// `null` is returned and an error should be reported by the caller.
+  static DartType mergeTypeInLibrary(
+      ClassHierarchyBuilder hierarchy,
+      ClassBuilder classBuilder,
+      DartType inferredType,
+      DartType inheritedType) {
+    if (classBuilder.library.isNonNullableByDefault) {
+      if (inferredType == null) {
+        return inheritedType;
+      } else {
+        return nnbdTopMerge(
+            hierarchy.coreTypes,
+            norm(hierarchy.coreTypes, inferredType),
+            norm(hierarchy.coreTypes, inheritedType));
+      }
+    } else {
+      inheritedType = legacyErasure(hierarchy.coreTypes, inheritedType);
+      if (inferredType == null) {
+        return inheritedType;
+      } else {
+        if (inferredType is DynamicType &&
+            inheritedType == hierarchy.coreTypes.objectLegacyRawType) {
+          return inferredType;
+        } else if (inheritedType is DynamicType &&
+            inferredType == hierarchy.coreTypes.objectLegacyRawType) {
+          return inheritedType;
+        }
+        if (inferredType != inheritedType) {
+          return null;
+        }
+        return inferredType;
       }
     }
   }
@@ -1111,62 +1223,49 @@
         fieldBuilder.type == null) {
       DartType inferredType;
 
-      void inferFrom(ClassMember overriddenMember) {
+      void inferFrom(ClassMember classMember) {
         if (inferredType is InvalidType) return;
 
-        assert(useConsolidated || !overriddenMember.hasDeclarations);
-        Member bTarget = overriddenMember.getMember(hierarchy);
+        assert(useConsolidated || !classMember.hasDeclarations);
+        Member overriddenMember = classMember.getMember(hierarchy);
         DartType inheritedType;
-        if (bTarget is Procedure) {
-          if (bTarget.isSetter) {
+        if (overriddenMember is Procedure) {
+          if (overriddenMember.isSetter) {
             VariableDeclaration parameter =
-                bTarget.function.positionalParameters.single;
+                overriddenMember.function.positionalParameters.single;
             inheritedType = parameter.type;
-          } else if (bTarget.isGetter) {
-            inheritedType = bTarget.function.returnType;
+          } else if (overriddenMember.isGetter) {
+            inheritedType = overriddenMember.function.returnType;
           }
-        } else if (bTarget is Field) {
-          inheritedType = bTarget.type;
+        } else if (overriddenMember is Field) {
+          inheritedType = overriddenMember.type;
         }
         if (inheritedType == null) {
           debug
               ?.log("Giving up (inheritedType == null)\n${StackTrace.current}");
           return;
         }
-        Substitution bSubstitution;
-        if (classBuilder.cls != bTarget.enclosingClass) {
+        Substitution substitution;
+        if (classBuilder.cls != overriddenMember.enclosingClass) {
           assert(
-              substitutions.containsKey(bTarget.enclosingClass),
+              substitutions.containsKey(overriddenMember.enclosingClass),
               "${classBuilder.fullNameForErrors} "
-              "${bTarget.enclosingClass.name}");
-          bSubstitution = substitutions[bTarget.enclosingClass];
+              "${overriddenMember.enclosingClass.name}");
+          substitution = substitutions[overriddenMember.enclosingClass];
           debug?.log("${classBuilder.fullNameForErrors} -> "
-              "${bTarget.enclosingClass.name} $bSubstitution");
+              "${overriddenMember.enclosingClass.name} $substitution");
         }
         assert(inheritedType is! ImplicitFieldType);
-        if (bSubstitution != null) {
-          inheritedType = bSubstitution.substituteType(inheritedType);
+        if (substitution != null) {
+          inheritedType = substitution.substituteType(inheritedType);
         }
-        if (!classBuilder.library.isNonNullableByDefault) {
-          inheritedType = legacyErasure(hierarchy.coreTypes, inheritedType);
-        }
-
+        inferredType = mergeTypeInLibrary(
+            hierarchy, classBuilder, inferredType, inheritedType);
         if (inferredType == null) {
-          inferredType = inheritedType;
-        } else {
-          if (classBuilder.library.isNonNullableByDefault) {
-            DartType topMerge =
-                nnbdTopMerge(hierarchy.coreTypes, inferredType, inheritedType);
-            if (topMerge != null) {
-              inferredType = topMerge;
-              return;
-            }
-          }
-          if (inferredType != inheritedType) {
-            inferredType = const InvalidType();
-            // A different type has already been inferred.
-            reportCantInferFieldType(classBuilder, fieldBuilder);
-          }
+          // A different type has already been inferred.
+          inferredType = const InvalidType();
+          reportCantInferFieldType(
+              classBuilder, fieldBuilder, overriddenMembers);
         }
       }
 
@@ -1353,7 +1452,8 @@
     assert(!classBuilder.isPatch);
     ClassHierarchyNode supernode;
     if (objectClass != classBuilder.origin) {
-      supernode = hierarchy.getNodeFromTypeBuilder(classBuilder.supertype);
+      supernode =
+          hierarchy.getNodeFromTypeBuilder(classBuilder.supertypeBuilder);
       if (supernode == null) {
         supernode = hierarchy.getNodeFromClassBuilder(objectClass);
       }
@@ -1362,13 +1462,12 @@
 
     Scope scope = classBuilder.scope;
     if (classBuilder.isMixinApplication) {
-      TypeDeclarationBuilder mixin = classBuilder.mixedInType.declaration;
+      TypeDeclarationBuilder mixin =
+          classBuilder.mixedInTypeBuilder.declaration;
       inferMixinApplication();
-      // recordSupertype(cls.mixedInType);
       while (mixin.isNamedMixinApplication) {
         ClassBuilder named = mixin;
-        // recordSupertype(named.mixedInType);
-        mixin = named.mixedInType.declaration;
+        mixin = named.mixedInTypeBuilder.declaration;
       }
       if (mixin is TypeAliasBuilder) {
         TypeAliasBuilder aliasBuilder = mixin;
@@ -1481,7 +1580,7 @@
       maxInheritancePath = supernode.maxInheritancePath + 1;
 
       superclasses = new List<Supertype>(supernode.superclasses.length + 1);
-      Supertype supertype = classBuilder.supertype.buildSupertype(
+      Supertype supertype = classBuilder.supertypeBuilder.buildSupertype(
           classBuilder.library, classBuilder.charOffset, classBuilder.fileUri);
       if (supertype == null) {
         // If the superclass is not an interface type we use Object instead.
@@ -1491,27 +1590,29 @@
       }
       superclasses.setRange(0, superclasses.length - 1,
           substSupertypes(supertype, supernode.superclasses));
-      superclasses[superclasses.length - 1] = recordSupertype(supertype);
+      superclasses[superclasses.length - 1] = supertype;
+      if (!classBuilder.library.isNonNullableByDefault &&
+          supernode.classBuilder.library.isNonNullableByDefault) {
+        for (int i = 0; i < superclasses.length; i++) {
+          superclasses[i] =
+              legacyErasureSupertype(hierarchy.coreTypes, superclasses[i]);
+        }
+      }
 
       List<TypeBuilder> directInterfaceBuilders =
-          ignoreFunction(classBuilder.interfaces);
+          ignoreFunction(classBuilder.interfaceBuilders);
       if (classBuilder.isMixinApplication) {
         if (directInterfaceBuilders == null) {
-          directInterfaceBuilders = <TypeBuilder>[classBuilder.mixedInType];
+          directInterfaceBuilders = <TypeBuilder>[
+            classBuilder.mixedInTypeBuilder
+          ];
         } else {
-          directInterfaceBuilders = <TypeBuilder>[classBuilder.mixedInType]
-            ..addAll(directInterfaceBuilders);
+          directInterfaceBuilders = <TypeBuilder>[
+            classBuilder.mixedInTypeBuilder
+          ]..addAll(directInterfaceBuilders);
         }
       }
-      if (directInterfaceBuilders != null) {
-        for (int i = 0; i < directInterfaceBuilders.length; i++) {
-          Supertype interface = directInterfaceBuilders[i].buildSupertype(
-              classBuilder.library,
-              classBuilder.charOffset,
-              classBuilder.fileUri);
-          if (interface != null) recordSupertype(interface);
-        }
-      }
+
       List<Supertype> superclassInterfaces = supernode.interfaces;
       if (superclassInterfaces != null) {
         superclassInterfaces = substSupertypes(supertype, superclassInterfaces);
@@ -1578,11 +1679,27 @@
             }
           }
         }
+      } else if (superclassInterfaces != null &&
+          !classBuilder.library.isNonNullableByDefault &&
+          supernode.classBuilder.library.isNonNullableByDefault) {
+        interfaces = <Supertype>[];
+        for (int i = 0; i < superclassInterfaces.length; i++) {
+          addInterface(interfaces, superclasses, superclassInterfaces[i]);
+        }
       } else {
         interfaces = superclassInterfaces;
       }
     }
 
+    for (Supertype superclass in superclasses) {
+      recordSupertype(superclass);
+    }
+    if (interfaces != null) {
+      for (Supertype superinterface in interfaces) {
+        recordSupertype(superinterface);
+      }
+    }
+
     /// Members (excluding setters) declared in [cls] or its superclasses. This
     /// includes static methods of [cls], but not its superclasses.
     Map<Name, ClassMember> classMemberMap = {};
@@ -1967,20 +2084,16 @@
     debug?.log("In ${this.classBuilder.fullNameForErrors} "
         "recordSupertype(${supertype})");
     Class cls = supertype.classNode;
-    if (cls.isMixinApplication) {
-      recordSupertype(cls.mixedInType);
-    }
-    List<TypeParameter> typeVariableBuilders = cls.typeParameters;
-    if (typeVariableBuilders == null) {
+    List<TypeParameter> supertypeTypeParameters = cls.typeParameters;
+    if (supertypeTypeParameters.isEmpty) {
       substitutions[cls] = Substitution.empty;
-      assert(cls.typeParameters.isEmpty);
     } else {
       List<DartType> arguments = supertype.typeArguments;
       List<DartType> typeArguments = new List<DartType>(arguments.length);
       List<TypeParameter> typeParameters =
           new List<TypeParameter>(arguments.length);
       for (int i = 0; i < arguments.length; i++) {
-        typeParameters[i] = typeVariableBuilders[i];
+        typeParameters[i] = supertypeTypeParameters[i];
         typeArguments[i] = arguments[i];
       }
       substitutions[cls] =
@@ -1995,9 +2108,6 @@
     if (typeVariables.isEmpty) {
       debug?.log("In ${this.classBuilder.fullNameForErrors} "
           "$supertypes aren't substed");
-      for (int i = 0; i < supertypes.length; i++) {
-        recordSupertype(supertypes[i]);
-      }
       return supertypes;
     }
     Map<TypeParameter, DartType> map = <TypeParameter, DartType>{};
@@ -2009,8 +2119,7 @@
     List<Supertype> result;
     for (int i = 0; i < supertypes.length; i++) {
       Supertype supertype = supertypes[i];
-      Supertype substituted =
-          recordSupertype(substitution.substituteSupertype(supertype));
+      Supertype substituted = substitution.substituteSupertype(supertype);
       if (supertype != substituted) {
         debug?.log("In ${this.classBuilder.fullNameForErrors} $supertype"
             " -> $substituted");
@@ -2045,8 +2154,8 @@
     }
   }
 
-  Supertype addInterface(List<Supertype> interfaces,
-      List<Supertype> superclasses, Supertype type) {
+  void addInterface(List<Supertype> interfaces, List<Supertype> superclasses,
+      Supertype type) {
     if (type == null) return null;
     if (!classBuilder.library.isNonNullableByDefault) {
       type = legacyErasureSupertype(hierarchy.coreTypes, type);
@@ -2072,7 +2181,7 @@
           superclasses[depth] = superclass;
         }
       }
-      return superclass;
+      return;
     } else {
       for (int i = 0; i < interfaces.length; i++) {
         // This is a quadratic algorithm, but normally, the number of
@@ -2094,12 +2203,11 @@
               interfaces[i] = interface;
             }
           }
-          return interface;
+          return;
         }
       }
     }
     interfaces.add(type);
-    return null;
   }
 
   void reportMissingMembers() {
@@ -2153,7 +2261,7 @@
       inferredArguments[i] =
           hierarchy.loader.computeTypeBuilder(typeArguments[i]);
     }
-    NamedTypeBuilder mixedInTypeBuilder = classBuilder.mixedInType;
+    NamedTypeBuilder mixedInTypeBuilder = classBuilder.mixedInTypeBuilder;
     mixedInTypeBuilder.arguments = inferredArguments;
   }
 
@@ -2473,10 +2581,11 @@
 
 class DelayedOverrideCheck {
   final ClassBuilder classBuilder;
-  final ClassMember a;
-  final ClassMember b;
+  final ClassMember declaredMember;
+  final ClassMember overriddenMember;
 
-  const DelayedOverrideCheck(this.classBuilder, this.a, this.b);
+  const DelayedOverrideCheck(
+      this.classBuilder, this.declaredMember, this.overriddenMember);
 
   void check(ClassHierarchyBuilder hierarchy) {
     void callback(
@@ -2486,75 +2595,10 @@
           isInterfaceCheck: !classBuilder.isMixinApplication);
     }
 
-    ClassMember a = this.a;
-    debug?.log("Delayed override check of ${a.fullName} "
-        "${b.fullName} wrt. ${classBuilder.fullNameForErrors}");
-    Member bMember = b.getMember(hierarchy);
-    if (classBuilder == a.classBuilder) {
-      if (a is SourceProcedureMember) {
-        if (a.isGetter && !a.hasExplicitReturnType) {
-          int inferTypesFrom;
-          DartType type;
-          if (bMember is Field) {
-            type = bMember.type;
-            inferTypesFrom = SourceProcedureBuilder.inferredTypesFromField;
-          } else if (bMember is Procedure) {
-            if (bMember.kind == ProcedureKind.Getter) {
-              type = bMember.function.returnType;
-              inferTypesFrom = SourceProcedureBuilder.inferredTypesFromGetter;
-            } else if (bMember.kind == ProcedureKind.Setter) {
-              type = bMember.function.positionalParameters.single.type;
-              inferTypesFrom = SourceProcedureBuilder.inferredTypesFromSetter;
-            }
-          }
-          if (type != null) {
-            type = Substitution.fromInterfaceType(
-                    hierarchy.getKernelTypeAsInstanceOf(
-                        hierarchy.coreTypes.thisInterfaceType(
-                            classBuilder.cls, classBuilder.library.nonNullable),
-                        bMember.enclosingClass,
-                        classBuilder.library.library))
-                .substituteType(type);
-            inferReturnType(
-                classBuilder,
-                a.memberBuilder,
-                a.memberBuilder.member.function,
-                type,
-                a.hadTypesInferredFrom,
-                inferTypesFrom,
-                hierarchy);
-          }
-        } else if (a.isSetter && !a.hasExplicitlyTypedFormalParameter(0)) {
-          int inferTypesFrom;
-          DartType type;
-          if (bMember is Field) {
-            type = bMember.type;
-            inferTypesFrom = SourceProcedureBuilder.inferredTypesFromField;
-          } else if (bMember is Procedure) {
-            if (bMember.kind == ProcedureKind.Getter) {
-              type = bMember.function.returnType;
-              inferTypesFrom = SourceProcedureBuilder.inferredTypesFromGetter;
-            } else if (bMember.kind == ProcedureKind.Setter) {
-              type = bMember.function.positionalParameters.single.type;
-              inferTypesFrom = SourceProcedureBuilder.inferredTypesFromSetter;
-            }
-          }
-          if (type != null) {
-            type = Substitution.fromInterfaceType(
-                    hierarchy.getKernelTypeAsInstanceOf(
-                        hierarchy.coreTypes.thisInterfaceType(
-                            classBuilder.cls, classBuilder.library.nonNullable),
-                        bMember.enclosingClass,
-                        classBuilder.library.library))
-                .substituteType(type);
-            inferParameterType(classBuilder, a.memberBuilder, a.formals.single,
-                type, a.hadTypesInferredFrom, inferTypesFrom, hierarchy);
-          }
-        }
-      }
-    }
-
-    callback(a.getMember(hierarchy), bMember, a.isSetter);
+    debug?.log("Delayed override check of ${declaredMember.fullName} "
+        "${overriddenMember.fullName} wrt. ${classBuilder.fullNameForErrors}");
+    callback(declaredMember.getMember(hierarchy),
+        overriddenMember.getMember(hierarchy), declaredMember.isSetter);
   }
 }
 
@@ -2667,16 +2711,6 @@
   }
 
   @override
-  bool get hasExplicitReturnType {
-    return true;
-  }
-
-  @override
-  bool hasExplicitlyTypedFormalParameter(int index) {
-    return true;
-  }
-
-  @override
   void inferType(ClassHierarchyBuilder hierarchy) {
     // Do nothing; this is only for declared members.
   }
@@ -3000,7 +3034,7 @@
       String name = classBuilder.fullNameForErrors;
       int length = classBuilder.isAnonymousMixinApplication ? 1 : name.length;
       List<LocatedMessage> context = declarations.map((ClassMember d) {
-        return messageDeclaredMemberConflictsWithInheritedMemberCause
+        return messageDeclaredMemberConflictsWithInheritedMembersCause
             .withLocation(d.fileUri, d.charOffset, d.fullNameForErrors.length);
       }).toList();
 
@@ -3209,135 +3243,43 @@
   return a.name.compareTo(b.name);
 }
 
-bool inferParameterType(
-    ClassBuilder classBuilder,
-    SourceProcedureBuilder memberBuilder,
-    FormalParameterBuilder parameterBuilder,
-    DartType type,
-    int hadTypesInferredFrom,
-    int inferTypesFrom,
-    ClassHierarchyBuilder hierarchy) {
-  if ((hadTypesInferredFrom & SourceProcedureBuilder.inferredTypesFromSetter) !=
-          0 &&
-      (inferTypesFrom & SourceProcedureBuilder.inferredTypesFromSetter) == 0) {
-    // Parameter type already inferred from setter; disregard getters.
-    return false;
-  }
-
-  debug?.log("Inferred type ${type} for ${parameterBuilder}");
-
-  if (classBuilder.library.isNonNullableByDefault) {
-    if ((hadTypesInferredFrom & inferTypesFrom) != 0) {
-      type = nnbdTopMerge(
-          hierarchy.coreTypes,
-          norm(hierarchy.coreTypes, parameterBuilder.variable.type),
-          norm(hierarchy.coreTypes, type));
-      if (type != null) {
-        // The nnbd top merge exists so [type] is the inferred type.
-        parameterBuilder.variable.type = type;
-        return false;
-      }
-      // The nnbd top merge doesn't exist. An error will be reported below.
-    }
-  } else {
-    type = legacyErasure(hierarchy.coreTypes, type);
-    if ((hadTypesInferredFrom & inferTypesFrom) != 0) {
-      if (parameterBuilder.variable.type is DynamicType &&
-          type == hierarchy.coreTypes.objectLegacyRawType) {
-        return false;
-      } else if (type is DynamicType &&
-          parameterBuilder.variable.type ==
-              hierarchy.coreTypes.objectLegacyRawType) {
-        parameterBuilder.variable.type = const DynamicType();
-        return false;
-      }
-    }
-  }
-
-  if ((hadTypesInferredFrom & inferTypesFrom) != 0) {
-    if (type == parameterBuilder.variable.type) {
-      return true;
-    }
-    reportCantInferParameterType(classBuilder, parameterBuilder, hierarchy);
-    parameterBuilder.variable.type = const InvalidType();
-    return false;
-  } else {
-    parameterBuilder.variable.type = type;
-    memberBuilder.hadTypesInferredFrom |= inferTypesFrom;
-    return true;
-  }
-}
-
-void reportCantInferParameterType(ClassBuilder cls,
-    FormalParameterBuilder parameter, ClassHierarchyBuilder hierarchy) {
+void reportCantInferParameterType(
+    ClassBuilder cls,
+    FormalParameterBuilder parameter,
+    ClassHierarchyBuilder hierarchy,
+    Iterable<ClassMember> overriddenMembers) {
   String name = parameter.name;
+  List<LocatedMessage> context = overriddenMembers
+      .map((ClassMember overriddenMember) {
+        return messageDeclaredMemberConflictsWithInheritedMembersCause
+            .withLocation(overriddenMember.fileUri, overriddenMember.charOffset,
+                overriddenMember.fullNameForErrors.length);
+      })
+      // Call toSet to avoid duplicate context for instance of fields that are
+      // overridden both as getters and setters.
+      .toSet()
+      .toList();
   cls.addProblem(
       templateCantInferTypeDueToInconsistentOverrides.withArguments(name),
       parameter.charOffset,
       name.length,
-      wasHandled: true);
-}
-
-bool inferReturnType(
-    ClassBuilder classBuilder,
-    SourceProcedureBuilder procedureBuilder,
-    FunctionNode function,
-    DartType type,
-    int hadTypesInferredFrom,
-    int inferTypesFrom,
-    ClassHierarchyBuilder hierarchy) {
-  if ((hadTypesInferredFrom & SourceProcedureBuilder.inferredTypesFromGetter) !=
-          0 &&
-      (inferTypesFrom & SourceProcedureBuilder.inferredTypesFromGetter) == 0) {
-    // Return type already inferred from getter; disregard setters.
-    return false;
-  }
-
-  if (classBuilder.library.isNonNullableByDefault) {
-    if ((hadTypesInferredFrom & inferTypesFrom) != 0) {
-      type = nnbdTopMerge(
-          hierarchy.coreTypes,
-          norm(hierarchy.coreTypes, function.returnType),
-          norm(hierarchy.coreTypes, type));
-      if (type != null) {
-        // The nnbd top merge exists so [type] is the inferred type.
-        function.returnType = type;
-        return false;
-      }
-      // The nnbd top merge doesn't exist. An error will be reported below.
-    }
-  } else {
-    type = legacyErasure(hierarchy.coreTypes, type);
-    if ((hadTypesInferredFrom & inferTypesFrom) != 0) {
-      if (function.returnType is DynamicType &&
-          type == hierarchy.coreTypes.objectLegacyRawType) {
-        return false;
-      } else if (type is DynamicType &&
-          function.returnType == hierarchy.coreTypes.objectLegacyRawType) {
-        function.returnType = const DynamicType();
-        return false;
-      }
-    }
-  }
-
-  if ((hadTypesInferredFrom & inferTypesFrom) != 0) {
-    if (type == function.returnType) {
-      return true;
-    }
-    reportCantInferReturnType(classBuilder, procedureBuilder, hierarchy);
-    function.returnType = const InvalidType();
-    return false;
-  } else {
-    procedureBuilder.hadTypesInferredFrom |= inferTypesFrom;
-    function.returnType = type;
-    return true;
-  }
+      wasHandled: true,
+      context: context);
 }
 
 void reportCantInferReturnType(ClassBuilder cls, SourceProcedureBuilder member,
-    ClassHierarchyBuilder hierarchy) {
+    ClassHierarchyBuilder hierarchy, Iterable<ClassMember> overriddenMembers) {
   String name = member.fullNameForErrors;
-  List<LocatedMessage> context;
+  List<LocatedMessage> context = overriddenMembers
+      .map((ClassMember overriddenMember) {
+        return messageDeclaredMemberConflictsWithInheritedMembersCause
+            .withLocation(overriddenMember.fileUri, overriddenMember.charOffset,
+                overriddenMember.fullNameForErrors.length);
+      })
+      // Call toSet to avoid duplicate context for instance of fields that are
+      // overridden both as getters and setters.
+      .toSet()
+      .toList();
   // // TODO(ahe): The following is for debugging, but could be cleaned up and
   // // used to improve this error message in general.
   //
@@ -3393,13 +3335,25 @@
       context: context);
 }
 
-void reportCantInferFieldType(ClassBuilder cls, SourceFieldBuilder member) {
+void reportCantInferFieldType(ClassBuilder cls, SourceFieldBuilder member,
+    Iterable<ClassMember> overriddenMembers) {
+  List<LocatedMessage> context = overriddenMembers
+      .map((ClassMember overriddenMember) {
+        return messageDeclaredMemberConflictsWithInheritedMembersCause
+            .withLocation(overriddenMember.fileUri, overriddenMember.charOffset,
+                overriddenMember.fullNameForErrors.length);
+      })
+      // Call toSet to avoid duplicate context for instance of fields that are
+      // overridden both as getters and setters.
+      .toSet()
+      .toList();
   String name = member.fullNameForErrors;
   cls.addProblem(
       templateCantInferTypeDueToInconsistentOverrides.withArguments(name),
       member.charOffset,
       name.length,
-      wasHandled: true);
+      wasHandled: true,
+      context: context);
 }
 
 ClassBuilder getClass(TypeBuilder type) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/collections.dart b/pkg/front_end/lib/src/fasta/kernel/collections.dart
index 6c4f9ca..5f142ad 100644
--- a/pkg/front_end/lib/src/fasta/kernel/collections.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/collections.dart
@@ -99,6 +99,11 @@
       void onConvertForElement(TreeNode from, TreeNode to)) {
     return new SpreadMapEntry(expression, isNullAware)..fileOffset = fileOffset;
   }
+
+  @override
+  String toString() {
+    return "SpreadElement()";
+  }
 }
 
 /// An 'if' element in a list or set literal.
@@ -155,6 +160,11 @@
     return new IfMapEntry(condition, thenEntry, otherwiseEntry)
       ..fileOffset = fileOffset;
   }
+
+  @override
+  String toString() {
+    return "IfElement()";
+  }
 }
 
 /// A 'for' element in a list or set literal.
@@ -207,6 +217,11 @@
     onConvertForElement(this, result);
     return result;
   }
+
+  @override
+  String toString() {
+    return "ForElement()";
+  }
 }
 
 /// A 'for-in' element in a list or set literal.
@@ -286,6 +301,11 @@
     onConvertForElement(this, result);
     return result;
   }
+
+  @override
+  String toString() {
+    return "ForInElement()";
+  }
 }
 
 mixin ControlFlowMapEntry implements MapEntry {
@@ -340,6 +360,11 @@
       expression?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "SpreadMapEntry()";
+  }
 }
 
 /// An 'if' element in a map literal.
@@ -376,6 +401,11 @@
       otherwise?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "IfMapEntry()";
+  }
 }
 
 /// A 'for' element in a map literal.
@@ -413,6 +443,11 @@
       body?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "ForMapEntry()";
+  }
 }
 
 /// A 'for-in' element in a map literal.
@@ -477,6 +512,11 @@
       problem?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "ForInMapEntry()";
+  }
 }
 
 /// Convert [entry] to an [Expression], if possible. If [entry] cannot be
diff --git a/pkg/front_end/lib/src/fasta/kernel/forest.dart b/pkg/front_end/lib/src/fasta/kernel/forest.dart
index c1104f7..51a5f21 100644
--- a/pkg/front_end/lib/src/fasta/kernel/forest.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/forest.dart
@@ -754,4 +754,9 @@
   transformChildren(v) {
     throw unsupported("transformChildren", fileOffset, uri);
   }
+
+  @override
+  String toString() {
+    return "_VariablesDeclaration()";
+  }
 }
diff --git a/pkg/front_end/lib/src/fasta/kernel/implicit_type_argument.dart b/pkg/front_end/lib/src/fasta/kernel/implicit_type_argument.dart
index 36edb1b..1f0d6cc 100644
--- a/pkg/front_end/lib/src/fasta/kernel/implicit_type_argument.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/implicit_type_argument.dart
@@ -43,4 +43,9 @@
 
   @override
   bool equals(Object other, Assumptions assumptions) => this == other;
+
+  @override
+  String toString() {
+    return "ImplicitTypeArgument()";
+  }
 }
diff --git a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
index 5082f41..b053237 100644
--- a/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/inference_visitor.dart
@@ -20,8 +20,6 @@
         InstrumentationValueForType,
         InstrumentationValueForTypeArgs;
 
-import '../../base/nnbd_mode.dart';
-
 import '../fasta_codes.dart';
 
 import '../names.dart';
@@ -734,13 +732,8 @@
             node, inferrer.typeSchemaEnvironment, inferrer.helper.uri,
             inferred: true);
       }
-    }
-    if (inferrer.isNonNullableByDefault) {
-      if (node.target == inferrer.coreTypes.listDefaultConstructor) {
-        if (inferrer.nnbdMode == NnbdMode.Weak) {
-          inferrer.library.addProblem(messageDefaultListConstructorWarning,
-              node.fileOffset, noLength, inferrer.helper.uri);
-        } else {
+      if (inferrer.isNonNullableByDefault) {
+        if (node.target == inferrer.coreTypes.listDefaultConstructor) {
           resultNode = inferrer.helper.wrapInProblem(node,
               messageDefaultListConstructorError, node.fileOffset, noLength);
         }
@@ -2317,7 +2310,7 @@
     }
     return inferrer.inferMethodInvocation(node.fileOffset, nullAwareGuards,
         receiver, receiverType, node.name, node.arguments, typeContext,
-        isExpressionInvocation: false);
+        isExpressionInvocation: false, isImplicitCall: false);
   }
 
   ExpressionInferenceResult visitExpressionInvocation(
@@ -2335,39 +2328,9 @@
       receiver = result.expression;
       receiverType = result.inferredType;
     }
-    ExpressionInferenceResult invocationResult = inferrer.inferMethodInvocation(
-        node.fileOffset,
-        nullAwareGuards,
-        receiver,
-        receiverType,
-        callName,
-        node.arguments,
-        typeContext,
-        isExpressionInvocation: true);
-    if (inferrer.isNonNullableByDefault) {
-      if (receiverType is! DynamicType &&
-          receiverType is! InvalidType &&
-          isPotentiallyNullable(
-              receiverType, inferrer.coreTypes.futureOrClass)) {
-        if (inferrer.nnbdMode == NnbdMode.Weak) {
-          inferrer.helper.addProblem(
-              templateNullableExpressionCallWarning.withArguments(
-                  receiverType, inferrer.isNonNullableByDefault),
-              node.fileOffset,
-              noLength);
-        } else {
-          return new ExpressionInferenceResult(
-              invocationResult.inferredType,
-              inferrer.helper.wrapInProblem(
-                  invocationResult.expression..fileOffset = node.fileOffset,
-                  templateNullableExpressionCallError.withArguments(
-                      receiverType, inferrer.isNonNullableByDefault),
-                  node.fileOffset,
-                  noLength));
-        }
-      }
-    }
-    return invocationResult;
+    return inferrer.inferMethodInvocation(node.fileOffset, nullAwareGuards,
+        receiver, receiverType, callName, node.arguments, typeContext,
+        isExpressionInvocation: true, isImplicitCall: true);
   }
 
   ExpressionInferenceResult visitNamedFunctionExpressionJudgment(
@@ -3539,76 +3502,82 @@
     }
 
     Expression binary;
-    if (binaryTarget.isMissing) {
-      binary = inferrer.createMissingBinary(
-          fileOffset, left, leftType, binaryName, right);
-    } else if (binaryTarget.isExtensionMember) {
-      assert(binaryTarget.extensionMethodKind != ProcedureKind.Setter);
-      binary = new StaticInvocation(
-          binaryTarget.member,
-          new Arguments(<Expression>[
-            left,
-            right,
-          ], types: binaryTarget.inferredExtensionTypeArguments)
-            ..fileOffset = fileOffset)
-        ..fileOffset = fileOffset;
-    } else {
-      if (binaryTarget.isInstanceMember &&
-          inferrer.instrumentation != null &&
-          leftType == const DynamicType()) {
-        inferrer.instrumentation.record(
-            inferrer.uriForInstrumentation,
-            fileOffset,
-            'target',
-            new InstrumentationValueForMember(binaryTarget.member));
-      }
-
-      binary = new MethodInvocation(
-          left,
-          binaryName,
-          new Arguments(<Expression>[
-            right,
-          ])
-            ..fileOffset = fileOffset,
-          binaryTarget.member)
-        ..fileOffset = fileOffset;
-
-      if (binaryCheckKind == MethodContravarianceCheckKind.checkMethodReturn) {
-        if (inferrer.instrumentation != null) {
+    switch (binaryTarget.kind) {
+      case ObjectAccessTargetKind.missing:
+        binary = inferrer.createMissingBinary(
+            fileOffset, left, leftType, binaryName, right);
+        break;
+      case ObjectAccessTargetKind.ambiguous:
+        binary = inferrer.createMissingBinary(
+            fileOffset, left, leftType, binaryName, right,
+            extensionAccessCandidates: binaryTarget.candidates);
+        break;
+      case ObjectAccessTargetKind.extensionMember:
+        assert(binaryTarget.extensionMethodKind != ProcedureKind.Setter);
+        binary = new StaticInvocation(
+            binaryTarget.member,
+            new Arguments(<Expression>[
+              left,
+              right,
+            ], types: binaryTarget.inferredExtensionTypeArguments)
+              ..fileOffset = fileOffset)
+          ..fileOffset = fileOffset;
+        break;
+      case ObjectAccessTargetKind.instanceMember:
+      case ObjectAccessTargetKind.invalid:
+      case ObjectAccessTargetKind.unresolved:
+      case ObjectAccessTargetKind.callFunction:
+      case ObjectAccessTargetKind.dynamic:
+      case ObjectAccessTargetKind.never:
+        if (binaryTarget.isInstanceMember &&
+            inferrer.instrumentation != null &&
+            leftType == const DynamicType()) {
           inferrer.instrumentation.record(
               inferrer.uriForInstrumentation,
               fileOffset,
-              'checkReturn',
-              new InstrumentationValueForType(binaryType));
+              'target',
+              new InstrumentationValueForMember(binaryTarget.member));
         }
-        binary = new AsExpression(binary, binaryType)
-          ..isTypeError = true
-          ..isCovarianceCheck = true
-          ..isForNonNullableByDefault = inferrer.isNonNullableByDefault
+
+        binary = new MethodInvocation(
+            left,
+            binaryName,
+            new Arguments(<Expression>[
+              right,
+            ])
+              ..fileOffset = fileOffset,
+            binaryTarget.member)
           ..fileOffset = fileOffset;
-      }
-    }
-    if (inferrer.isNonNullableByDefault) {
-      if (leftType is! DynamicType &&
-          isPotentiallyNullable(leftType, inferrer.coreTypes.futureOrClass)) {
-        if (inferrer.nnbdMode == NnbdMode.Weak) {
-          inferrer.helper.addProblem(
-              templateNullableOperatorCallWarning.withArguments(
-                  binaryName.name, leftType, inferrer.isNonNullableByDefault),
-              binary.fileOffset,
-              binaryName.name.length);
-        } else {
-          return new ExpressionInferenceResult(
-              binaryType,
-              inferrer.helper.wrapInProblem(
-                  binary,
-                  templateNullableOperatorCallError.withArguments(
-                      binaryName.name,
-                      leftType,
-                      inferrer.isNonNullableByDefault),
-                  binary.fileOffset,
-                  binaryName.name.length));
+
+        if (binaryCheckKind ==
+            MethodContravarianceCheckKind.checkMethodReturn) {
+          if (inferrer.instrumentation != null) {
+            inferrer.instrumentation.record(
+                inferrer.uriForInstrumentation,
+                fileOffset,
+                'checkReturn',
+                new InstrumentationValueForType(binaryType));
+          }
+          binary = new AsExpression(binary, binaryType)
+            ..isTypeError = true
+            ..isCovarianceCheck = true
+            ..isForNonNullableByDefault = inferrer.isNonNullableByDefault
+            ..fileOffset = fileOffset;
         }
+        break;
+    }
+    if (!inferrer.isTopLevel && inferrer.isNonNullableByDefault) {
+      if (leftType is! InvalidType &&
+          leftType is! DynamicType &&
+          isPotentiallyNullable(leftType, inferrer.coreTypes.futureOrClass)) {
+        return new ExpressionInferenceResult(
+            binaryType,
+            inferrer.helper.wrapInProblem(
+                binary,
+                templateNullableOperatorCallError.withArguments(
+                    binaryName.name, leftType, inferrer.isNonNullableByDefault),
+                binary.fileOffset,
+                binaryName.name.length));
       }
     }
     return new ExpressionInferenceResult(binaryType, binary);
@@ -3632,75 +3601,80 @@
     DartType unaryType = inferrer.getReturnType(unaryTarget, expressionType);
 
     Expression unary;
-    if (unaryTarget.isMissing) {
-      unary = inferrer.createMissingUnary(
-          fileOffset, expression, expressionType, unaryName);
-    } else if (unaryTarget.isExtensionMember) {
-      assert(unaryTarget.extensionMethodKind != ProcedureKind.Setter);
-      unary = new StaticInvocation(
-          unaryTarget.member,
-          new Arguments(<Expression>[
-            expression,
-          ], types: unaryTarget.inferredExtensionTypeArguments)
-            ..fileOffset = fileOffset)
-        ..fileOffset = fileOffset;
-    } else {
-      if (unaryTarget.isInstanceMember &&
-          inferrer.instrumentation != null &&
-          expressionType == const DynamicType()) {
-        inferrer.instrumentation.record(
-            inferrer.uriForInstrumentation,
-            fileOffset,
-            'target',
-            new InstrumentationValueForMember(unaryTarget.member));
-      }
-
-      unary = new MethodInvocation(
-          expression,
-          unaryName,
-          new Arguments(<Expression>[])..fileOffset = fileOffset,
-          unaryTarget.member)
-        ..fileOffset = fileOffset;
-
-      if (unaryCheckKind == MethodContravarianceCheckKind.checkMethodReturn) {
-        if (inferrer.instrumentation != null) {
+    switch (unaryTarget.kind) {
+      case ObjectAccessTargetKind.missing:
+        unary = inferrer.createMissingUnary(
+            fileOffset, expression, expressionType, unaryName);
+        break;
+      case ObjectAccessTargetKind.ambiguous:
+        unary = inferrer.createMissingUnary(
+            fileOffset, expression, expressionType, unaryName,
+            extensionAccessCandidates: unaryTarget.candidates);
+        break;
+      case ObjectAccessTargetKind.extensionMember:
+        assert(unaryTarget.extensionMethodKind != ProcedureKind.Setter);
+        unary = new StaticInvocation(
+            unaryTarget.member,
+            new Arguments(<Expression>[
+              expression,
+            ], types: unaryTarget.inferredExtensionTypeArguments)
+              ..fileOffset = fileOffset)
+          ..fileOffset = fileOffset;
+        break;
+      case ObjectAccessTargetKind.instanceMember:
+      case ObjectAccessTargetKind.invalid:
+      case ObjectAccessTargetKind.unresolved:
+      case ObjectAccessTargetKind.callFunction:
+      case ObjectAccessTargetKind.dynamic:
+      case ObjectAccessTargetKind.never:
+        if (unaryTarget.isInstanceMember &&
+            inferrer.instrumentation != null &&
+            expressionType == const DynamicType()) {
           inferrer.instrumentation.record(
               inferrer.uriForInstrumentation,
               fileOffset,
-              'checkReturn',
-              new InstrumentationValueForType(expressionType));
+              'target',
+              new InstrumentationValueForMember(unaryTarget.member));
         }
-        unary = new AsExpression(unary, unaryType)
-          ..isTypeError = true
-          ..isCovarianceCheck = true
-          ..isForNonNullableByDefault = inferrer.isNonNullableByDefault
+
+        unary = new MethodInvocation(
+            expression,
+            unaryName,
+            new Arguments(<Expression>[])..fileOffset = fileOffset,
+            unaryTarget.member)
           ..fileOffset = fileOffset;
-      }
+
+        if (unaryCheckKind == MethodContravarianceCheckKind.checkMethodReturn) {
+          if (inferrer.instrumentation != null) {
+            inferrer.instrumentation.record(
+                inferrer.uriForInstrumentation,
+                fileOffset,
+                'checkReturn',
+                new InstrumentationValueForType(expressionType));
+          }
+          unary = new AsExpression(unary, unaryType)
+            ..isTypeError = true
+            ..isCovarianceCheck = true
+            ..isForNonNullableByDefault = inferrer.isNonNullableByDefault
+            ..fileOffset = fileOffset;
+        }
+        break;
     }
-    if (inferrer.isNonNullableByDefault) {
-      if (expressionType is! DynamicType &&
+    if (!inferrer.isTopLevel && inferrer.isNonNullableByDefault) {
+      if (expressionType is! InvalidType &&
+          expressionType is! DynamicType &&
           isPotentiallyNullable(
               expressionType, inferrer.coreTypes.futureOrClass)) {
         // TODO(johnniwinther): Special case 'unary-' in messages. It should
         // probably be referred to as "Unary operator '-' ...".
-        if (inferrer.nnbdMode == NnbdMode.Weak) {
-          inferrer.helper.addProblem(
-              templateNullableOperatorCallWarning.withArguments(unaryName.name,
-                  expressionType, inferrer.isNonNullableByDefault),
-              unary.fileOffset,
-              unaryName == unaryMinusName ? 1 : unaryName.name.length);
-        } else {
-          return new ExpressionInferenceResult(
-              unaryType,
-              inferrer.helper.wrapInProblem(
-                  unary,
-                  templateNullableOperatorCallError.withArguments(
-                      unaryName.name,
-                      expressionType,
-                      inferrer.isNonNullableByDefault),
-                  unary.fileOffset,
-                  unaryName == unaryMinusName ? 1 : unaryName.name.length));
-        }
+        return new ExpressionInferenceResult(
+            unaryType,
+            inferrer.helper.wrapInProblem(
+                unary,
+                templateNullableOperatorCallError.withArguments(unaryName.name,
+                    expressionType, inferrer.isNonNullableByDefault),
+                unary.fileOffset,
+                unaryName == unaryMinusName ? 1 : unaryName.name.length));
       }
     }
     return new ExpressionInferenceResult(unaryType, unary);
@@ -3721,68 +3695,72 @@
       MethodContravarianceCheckKind readCheckKind) {
     Expression read;
     DartType readType = inferrer.getReturnType(readTarget, receiverType);
-    if (readTarget.isMissing) {
-      read = inferrer.createMissingIndexGet(
-          fileOffset, readReceiver, receiverType, readIndex);
-    } else if (readTarget.isExtensionMember) {
-      read = new StaticInvocation(
-          readTarget.member,
-          new Arguments(<Expression>[
-            readReceiver,
-            readIndex,
-          ], types: readTarget.inferredExtensionTypeArguments)
-            ..fileOffset = fileOffset)
-        ..fileOffset = fileOffset;
-    } else {
-      read = new MethodInvocation(
-          readReceiver,
-          indexGetName,
-          new Arguments(<Expression>[
-            readIndex,
-          ])
-            ..fileOffset = fileOffset,
-          readTarget.member)
-        ..fileOffset = fileOffset;
-      if (readCheckKind == MethodContravarianceCheckKind.checkMethodReturn) {
-        if (inferrer.instrumentation != null) {
-          inferrer.instrumentation.record(
-              inferrer.uriForInstrumentation,
-              fileOffset,
-              'checkReturn',
-              new InstrumentationValueForType(readType));
-        }
-        read = new AsExpression(read, readType)
-          ..isTypeError = true
-          ..isCovarianceCheck = true
-          ..isForNonNullableByDefault = inferrer.isNonNullableByDefault
+    switch (readTarget.kind) {
+      case ObjectAccessTargetKind.missing:
+        read = inferrer.createMissingIndexGet(
+            fileOffset, readReceiver, receiverType, readIndex);
+        break;
+      case ObjectAccessTargetKind.ambiguous:
+        read = inferrer.createMissingIndexGet(
+            fileOffset, readReceiver, receiverType, readIndex,
+            extensionAccessCandidates: readTarget.candidates);
+        break;
+      case ObjectAccessTargetKind.extensionMember:
+        read = new StaticInvocation(
+            readTarget.member,
+            new Arguments(<Expression>[
+              readReceiver,
+              readIndex,
+            ], types: readTarget.inferredExtensionTypeArguments)
+              ..fileOffset = fileOffset)
           ..fileOffset = fileOffset;
-      }
+        break;
+      case ObjectAccessTargetKind.instanceMember:
+      case ObjectAccessTargetKind.invalid:
+      case ObjectAccessTargetKind.unresolved:
+      case ObjectAccessTargetKind.callFunction:
+      case ObjectAccessTargetKind.dynamic:
+      case ObjectAccessTargetKind.never:
+        read = new MethodInvocation(
+            readReceiver,
+            indexGetName,
+            new Arguments(<Expression>[
+              readIndex,
+            ])
+              ..fileOffset = fileOffset,
+            readTarget.member)
+          ..fileOffset = fileOffset;
+        if (readCheckKind == MethodContravarianceCheckKind.checkMethodReturn) {
+          if (inferrer.instrumentation != null) {
+            inferrer.instrumentation.record(
+                inferrer.uriForInstrumentation,
+                fileOffset,
+                'checkReturn',
+                new InstrumentationValueForType(readType));
+          }
+          read = new AsExpression(read, readType)
+            ..isTypeError = true
+            ..isCovarianceCheck = true
+            ..isForNonNullableByDefault = inferrer.isNonNullableByDefault
+            ..fileOffset = fileOffset;
+        }
+        break;
     }
-    if (inferrer.isNonNullableByDefault) {
+    if (!inferrer.isTopLevel && inferrer.isNonNullableByDefault) {
       if (receiverType is! DynamicType &&
           receiverType is! InvalidType &&
           isPotentiallyNullable(
               receiverType, inferrer.coreTypes.futureOrClass)) {
-        if (inferrer.nnbdMode == NnbdMode.Weak) {
-          inferrer.helper.addProblem(
-              templateNullableOperatorCallWarning.withArguments(
-                  indexGetName.name,
-                  receiverType,
-                  inferrer.isNonNullableByDefault),
-              read.fileOffset,
-              noLength);
-        } else {
-          return new ExpressionInferenceResult(
-              readType,
-              inferrer.helper.wrapInProblem(
-                  read,
-                  templateNullableOperatorCallError.withArguments(
-                      indexGetName.name,
-                      receiverType,
-                      inferrer.isNonNullableByDefault),
-                  read.fileOffset,
-                  noLength));
-        }
+        return new ExpressionInferenceResult(
+            readType,
+            inferrer.helper.wrapInProblem(
+                read,
+                templateNullableOperatorCallError.withArguments(
+                    indexGetName.name,
+                    receiverType,
+                    inferrer.isNonNullableByDefault),
+                read.fileOffset,
+                noLength));
       }
     }
     return new ExpressionInferenceResult(readType, read);
@@ -3802,46 +3780,53 @@
       Expression index,
       Expression value) {
     Expression write;
-    if (writeTarget.isMissing) {
-      write = inferrer.createMissingIndexSet(
-          fileOffset, receiver, receiverType, index, value,
-          forEffect: true, readOnlyReceiver: true);
-    } else if (writeTarget.isExtensionMember) {
-      assert(writeTarget.extensionMethodKind != ProcedureKind.Setter);
-      write = new StaticInvocation(
-          writeTarget.member,
-          new Arguments(<Expression>[receiver, index, value],
-              types: writeTarget.inferredExtensionTypeArguments)
-            ..fileOffset = fileOffset)
-        ..fileOffset = fileOffset;
-    } else {
-      write = new MethodInvocation(
-          receiver,
-          indexSetName,
-          new Arguments(<Expression>[index, value])..fileOffset = fileOffset,
-          writeTarget.member)
-        ..fileOffset = fileOffset;
+    switch (writeTarget.kind) {
+      case ObjectAccessTargetKind.missing:
+        write = inferrer.createMissingIndexSet(
+            fileOffset, receiver, receiverType, index, value,
+            forEffect: true, readOnlyReceiver: true);
+        break;
+      case ObjectAccessTargetKind.ambiguous:
+        write = inferrer.createMissingIndexSet(
+            fileOffset, receiver, receiverType, index, value,
+            forEffect: true,
+            readOnlyReceiver: true,
+            extensionAccessCandidates: writeTarget.candidates);
+        break;
+      case ObjectAccessTargetKind.extensionMember:
+        assert(writeTarget.extensionMethodKind != ProcedureKind.Setter);
+        write = new StaticInvocation(
+            writeTarget.member,
+            new Arguments(<Expression>[receiver, index, value],
+                types: writeTarget.inferredExtensionTypeArguments)
+              ..fileOffset = fileOffset)
+          ..fileOffset = fileOffset;
+        break;
+      case ObjectAccessTargetKind.instanceMember:
+      case ObjectAccessTargetKind.invalid:
+      case ObjectAccessTargetKind.unresolved:
+      case ObjectAccessTargetKind.callFunction:
+      case ObjectAccessTargetKind.dynamic:
+      case ObjectAccessTargetKind.never:
+        write = new MethodInvocation(
+            receiver,
+            indexSetName,
+            new Arguments(<Expression>[index, value])..fileOffset = fileOffset,
+            writeTarget.member)
+          ..fileOffset = fileOffset;
+        break;
     }
-    if (inferrer.isNonNullableByDefault) {
-      if (receiverType is! DynamicType &&
+    if (!inferrer.isTopLevel && inferrer.isNonNullableByDefault) {
+      if (receiverType is! InvalidType &&
+          receiverType is! DynamicType &&
           isPotentiallyNullable(
               receiverType, inferrer.coreTypes.futureOrClass)) {
-        if (inferrer.nnbdMode == NnbdMode.Weak) {
-          inferrer.helper.addProblem(
-              templateNullableOperatorCallWarning.withArguments(
-                  indexSetName.name,
-                  receiverType,
-                  inferrer.isNonNullableByDefault),
-              write.fileOffset,
-              noLength);
-        } else {
-          return inferrer.helper.wrapInProblem(
-              write,
-              templateNullableOperatorCallError.withArguments(indexSetName.name,
-                  receiverType, inferrer.isNonNullableByDefault),
-              write.fileOffset,
-              noLength);
-        }
+        return inferrer.helper.wrapInProblem(
+            write,
+            templateNullableOperatorCallError.withArguments(indexSetName.name,
+                receiverType, inferrer.isNonNullableByDefault),
+            write.fileOffset,
+            noLength);
       }
     }
     return write;
@@ -3871,107 +3856,111 @@
     DartType readType = inferrer.getGetterType(readTarget, receiverType);
 
     Expression read;
-    if (readTarget.isMissing) {
-      read = inferrer.createMissingPropertyGet(
-          fileOffset, receiver, receiverType, propertyName);
-    } else if (readTarget.isExtensionMember) {
-      switch (readTarget.extensionMethodKind) {
-        case ProcedureKind.Getter:
-          read = new StaticInvocation(
-              readTarget.member,
-              new Arguments(<Expression>[
-                receiver,
-              ], types: readTarget.inferredExtensionTypeArguments)
-                ..fileOffset = fileOffset)
-            ..fileOffset = fileOffset;
-          break;
-        case ProcedureKind.Method:
-          read = new StaticInvocation(
-              readTarget.tearoffTarget,
-              new Arguments(<Expression>[
-                receiver,
-              ], types: readTarget.inferredExtensionTypeArguments)
-                ..fileOffset = fileOffset)
-            ..fileOffset = fileOffset;
-          return inferrer.instantiateTearOff(readType, typeContext, read);
-        case ProcedureKind.Setter:
-        case ProcedureKind.Factory:
-        case ProcedureKind.Operator:
-          unhandled('$readTarget', "inferPropertyGet", null, null);
-          break;
-      }
-    } else {
-      if (readTarget.isInstanceMember &&
-          inferrer.instrumentation != null &&
-          receiverType == const DynamicType()) {
-        inferrer.instrumentation.record(
-            inferrer.uriForInstrumentation,
-            fileOffset,
-            'target',
-            new InstrumentationValueForMember(readTarget.member));
-      }
-      read = new PropertyGet(receiver, propertyName, readTarget.member)
-        ..fileOffset = fileOffset;
-      bool checkReturn = false;
-      if (readTarget.isInstanceMember && !isThisReceiver) {
-        Member interfaceMember = readTarget.member;
-        if (interfaceMember is Procedure) {
-          checkReturn =
-              TypeInferrerImpl.returnedTypeParametersOccurNonCovariantly(
-                  interfaceMember.enclosingClass,
-                  interfaceMember.function.returnType);
-        } else if (interfaceMember is Field) {
-          checkReturn =
-              TypeInferrerImpl.returnedTypeParametersOccurNonCovariantly(
-                  interfaceMember.enclosingClass, interfaceMember.type);
+    switch (readTarget.kind) {
+      case ObjectAccessTargetKind.missing:
+        read = inferrer.createMissingPropertyGet(
+            fileOffset, receiver, receiverType, propertyName);
+        break;
+      case ObjectAccessTargetKind.ambiguous:
+        read = inferrer.createMissingPropertyGet(
+            fileOffset, receiver, receiverType, propertyName,
+            extensionAccessCandidates: readTarget.candidates);
+        break;
+      case ObjectAccessTargetKind.extensionMember:
+        switch (readTarget.extensionMethodKind) {
+          case ProcedureKind.Getter:
+            read = new StaticInvocation(
+                readTarget.member,
+                new Arguments(<Expression>[
+                  receiver,
+                ], types: readTarget.inferredExtensionTypeArguments)
+                  ..fileOffset = fileOffset)
+              ..fileOffset = fileOffset;
+            break;
+          case ProcedureKind.Method:
+            read = new StaticInvocation(
+                readTarget.tearoffTarget,
+                new Arguments(<Expression>[
+                  receiver,
+                ], types: readTarget.inferredExtensionTypeArguments)
+                  ..fileOffset = fileOffset)
+              ..fileOffset = fileOffset;
+            return inferrer.instantiateTearOff(readType, typeContext, read);
+          case ProcedureKind.Setter:
+          case ProcedureKind.Factory:
+          case ProcedureKind.Operator:
+            unhandled('$readTarget', "inferPropertyGet", null, null);
+            break;
         }
-      }
-      if (checkReturn) {
-        if (inferrer.instrumentation != null) {
+        break;
+      case ObjectAccessTargetKind.instanceMember:
+      case ObjectAccessTargetKind.invalid:
+      case ObjectAccessTargetKind.unresolved:
+      case ObjectAccessTargetKind.callFunction:
+      case ObjectAccessTargetKind.dynamic:
+      case ObjectAccessTargetKind.never:
+        if (readTarget.isInstanceMember &&
+            inferrer.instrumentation != null &&
+            receiverType == const DynamicType()) {
           inferrer.instrumentation.record(
               inferrer.uriForInstrumentation,
               fileOffset,
-              'checkReturn',
-              new InstrumentationValueForType(readType));
+              'target',
+              new InstrumentationValueForMember(readTarget.member));
         }
-        read = new AsExpression(read, readType)
-          ..isTypeError = true
-          ..isCovarianceCheck = true
-          ..isForNonNullableByDefault = inferrer.isNonNullableByDefault
+        read = new PropertyGet(receiver, propertyName, readTarget.member)
           ..fileOffset = fileOffset;
-      }
-      Member member = readTarget.member;
-      if (member is Procedure && member.kind == ProcedureKind.Method) {
-        return inferrer.instantiateTearOff(readType, typeContext, read);
-      }
+        bool checkReturn = false;
+        if (readTarget.isInstanceMember && !isThisReceiver) {
+          Member interfaceMember = readTarget.member;
+          if (interfaceMember is Procedure) {
+            checkReturn =
+                TypeInferrerImpl.returnedTypeParametersOccurNonCovariantly(
+                    interfaceMember.enclosingClass,
+                    interfaceMember.function.returnType);
+          } else if (interfaceMember is Field) {
+            checkReturn =
+                TypeInferrerImpl.returnedTypeParametersOccurNonCovariantly(
+                    interfaceMember.enclosingClass, interfaceMember.type);
+          }
+        }
+        if (checkReturn) {
+          if (inferrer.instrumentation != null) {
+            inferrer.instrumentation.record(
+                inferrer.uriForInstrumentation,
+                fileOffset,
+                'checkReturn',
+                new InstrumentationValueForType(readType));
+          }
+          read = new AsExpression(read, readType)
+            ..isTypeError = true
+            ..isCovarianceCheck = true
+            ..isForNonNullableByDefault = inferrer.isNonNullableByDefault
+            ..fileOffset = fileOffset;
+        }
+        Member member = readTarget.member;
+        if (member is Procedure && member.kind == ProcedureKind.Method) {
+          return inferrer.instantiateTearOff(readType, typeContext, read);
+        }
+        break;
     }
-    if (inferrer.isNonNullableByDefault) {
+    if (!inferrer.isTopLevel && inferrer.isNonNullableByDefault) {
       if (receiverType is! DynamicType &&
           receiverType is! InvalidType &&
           isPotentiallyNullable(
               receiverType, inferrer.coreTypes.futureOrClass) &&
           !inferrer.matchesObjectMemberCall(
               propertyName, const [], const [], const [])) {
-        if (inferrer.nnbdMode == NnbdMode.Weak) {
-          inferrer.helper.addProblem(
-              templateNullablePropertyAccessWarning.withArguments(
-                  propertyName.name,
-                  receiverType,
-                  inferrer.isNonNullableByDefault),
-              read.fileOffset,
-              propertyName.name.length);
-        } else {
-          return new ExpressionInferenceResult(
-              readType,
-              inferrer.helper.wrapInProblem(
-                  read,
-                  templateNullablePropertyAccessError.withArguments(
-                      propertyName.name,
-                      receiverType,
-                      inferrer.isNonNullableByDefault),
-                  read.fileOffset,
-                  propertyName.name.length));
-        }
+        return new ExpressionInferenceResult(
+            readType,
+            inferrer.helper.wrapInProblem(
+                read,
+                templateNullablePropertyAccessError.withArguments(
+                    propertyName.name,
+                    receiverType,
+                    inferrer.isNonNullableByDefault),
+                read.fileOffset,
+                propertyName.name.length));
       }
     }
     return new ExpressionInferenceResult(readType, read);
@@ -4001,59 +3990,63 @@
     assert(forEffect || valueType != null,
         "No value type provided for property set needed for value.");
     Expression write;
-    if (writeTarget.isMissing) {
-      write = inferrer.createMissingPropertySet(
-          fileOffset, receiver, receiverType, propertyName, value,
-          forEffect: forEffect);
-    } else if (writeTarget.isExtensionMember) {
-      if (forEffect) {
-        write = new StaticInvocation(
-            writeTarget.member,
-            new Arguments(<Expression>[receiver, value],
-                types: writeTarget.inferredExtensionTypeArguments)
-              ..fileOffset = fileOffset)
-          ..fileOffset = fileOffset;
-      } else {
-        VariableDeclaration valueVariable = createVariable(value, valueType);
-        VariableDeclaration assignmentVariable = createVariable(
-            new StaticInvocation(
-                writeTarget.member,
-                new Arguments(
-                    <Expression>[receiver, createVariableGet(valueVariable)],
-                    types: writeTarget.inferredExtensionTypeArguments)
-                  ..fileOffset = fileOffset)
-              ..fileOffset = fileOffset,
-            const VoidType());
-        write = createLet(valueVariable,
-            createLet(assignmentVariable, createVariableGet(valueVariable)))
-          ..fileOffset = fileOffset;
-      }
-    } else {
-      write = new PropertySet(receiver, propertyName, value, writeTarget.member)
-        ..fileOffset = fileOffset;
+    switch (writeTarget.kind) {
+      case ObjectAccessTargetKind.missing:
+        write = inferrer.createMissingPropertySet(
+            fileOffset, receiver, receiverType, propertyName, value,
+            forEffect: forEffect);
+        break;
+      case ObjectAccessTargetKind.ambiguous:
+        write = inferrer.createMissingPropertySet(
+            fileOffset, receiver, receiverType, propertyName, value,
+            forEffect: forEffect,
+            extensionAccessCandidates: writeTarget.candidates);
+        break;
+      case ObjectAccessTargetKind.extensionMember:
+        if (forEffect) {
+          write = new StaticInvocation(
+              writeTarget.member,
+              new Arguments(<Expression>[receiver, value],
+                  types: writeTarget.inferredExtensionTypeArguments)
+                ..fileOffset = fileOffset)
+            ..fileOffset = fileOffset;
+        } else {
+          VariableDeclaration valueVariable = createVariable(value, valueType);
+          VariableDeclaration assignmentVariable = createVariable(
+              new StaticInvocation(
+                  writeTarget.member,
+                  new Arguments(
+                      <Expression>[receiver, createVariableGet(valueVariable)],
+                      types: writeTarget.inferredExtensionTypeArguments)
+                    ..fileOffset = fileOffset)
+                ..fileOffset = fileOffset,
+              const VoidType());
+          write = createLet(valueVariable,
+              createLet(assignmentVariable, createVariableGet(valueVariable)))
+            ..fileOffset = fileOffset;
+        }
+        break;
+      case ObjectAccessTargetKind.instanceMember:
+      case ObjectAccessTargetKind.invalid:
+      case ObjectAccessTargetKind.unresolved:
+      case ObjectAccessTargetKind.callFunction:
+      case ObjectAccessTargetKind.dynamic:
+      case ObjectAccessTargetKind.never:
+        write =
+            new PropertySet(receiver, propertyName, value, writeTarget.member)
+              ..fileOffset = fileOffset;
+        break;
     }
-    if (inferrer.isNonNullableByDefault) {
+    if (!inferrer.isTopLevel && inferrer.isNonNullableByDefault) {
       if (receiverType is! DynamicType &&
           isPotentiallyNullable(
               receiverType, inferrer.coreTypes.futureOrClass)) {
-        if (inferrer.nnbdMode == NnbdMode.Weak) {
-          inferrer.helper.addProblem(
-              templateNullablePropertyAccessWarning.withArguments(
-                  propertyName.name,
-                  receiverType,
-                  inferrer.isNonNullableByDefault),
-              write.fileOffset,
-              propertyName.name.length);
-        } else {
-          return inferrer.helper.wrapInProblem(
-              write,
-              templateNullablePropertyAccessError.withArguments(
-                  propertyName.name,
-                  receiverType,
-                  inferrer.isNonNullableByDefault),
-              write.fileOffset,
-              propertyName.name.length);
-        }
+        return inferrer.helper.wrapInProblem(
+            write,
+            templateNullablePropertyAccessError.withArguments(propertyName.name,
+                receiverType, inferrer.isNonNullableByDefault),
+            write.fileOffset,
+            propertyName.name.length);
       }
     }
 
@@ -4430,7 +4423,6 @@
     }
 
     Expression write;
-
     if (writeTarget.isMissing) {
       write = inferrer.createMissingSuperIndexSet(
           node.writeOffset, writeIndex, valueExpression);
@@ -4572,7 +4564,7 @@
         : const ObjectAccessTarget.missing();
 
     DartType writeIndexType =
-        inferrer.getIndexSetValueType(writeTarget, receiverType);
+        inferrer.getIndexKeyType(writeTarget, receiverType);
     Expression writeIndex = createVariableGet(indexVariable);
     writeIndex = inferrer.ensureAssignable(
         writeIndexType, indexResult.inferredType, writeIndex);
@@ -5159,6 +5151,14 @@
         isVoidAllowed: false);
     node.expression = expressionResult.expression..parent = node;
     DartType expressionType = expressionResult.inferredType;
+
+    Set<Field> enumFields;
+    if (expressionType is InterfaceType && expressionType.classNode.isEnum) {
+      enumFields = expressionType.classNode.fields
+          .where((Field field) => field.isConst && field.type == expressionType)
+          .toSet();
+    }
+
     inferrer.flowAnalysis.switchStatement_expressionEnd(node);
 
     bool hasDefault = false;
@@ -5175,41 +5175,46 @@
         Expression caseExpression = caseExpressionResult.expression;
         switchCase.expressions[index] = caseExpression..parent = switchCase;
         DartType caseExpressionType = caseExpressionResult.inferredType;
+        if (enumFields != null && caseExpression is StaticGet) {
+          enumFields.remove(caseExpression.target);
+        }
 
-        if (inferrer.library.isNonNullableByDefault) {
-          if (!inferrer.typeSchemaEnvironment.isSubtypeOf(caseExpressionType,
-              expressionType, SubtypeCheckMode.withNullabilities)) {
-            inferrer.helper.addProblem(
-                templateSwitchExpressionNotSubtype.withArguments(
-                    caseExpressionType,
-                    expressionType,
-                    inferrer.isNonNullableByDefault),
-                caseExpression.fileOffset,
-                noLength,
-                context: [
-                  messageSwitchExpressionNotAssignableCause.withLocation(
-                      inferrer.uriForInstrumentation,
-                      node.expression.fileOffset,
-                      noLength)
-                ]);
-          }
-        } else {
-          // Check whether the expression type is assignable to the case
-          // expression type.
-          if (!inferrer.isAssignable(expressionType, caseExpressionType)) {
-            inferrer.helper.addProblem(
-                templateSwitchExpressionNotAssignable.withArguments(
-                    expressionType,
-                    caseExpressionType,
-                    inferrer.isNonNullableByDefault),
-                caseExpression.fileOffset,
-                noLength,
-                context: [
-                  messageSwitchExpressionNotAssignableCause.withLocation(
-                      inferrer.uriForInstrumentation,
-                      node.expression.fileOffset,
-                      noLength)
-                ]);
+        if (!inferrer.isTopLevel) {
+          if (inferrer.library.isNonNullableByDefault) {
+            if (!inferrer.typeSchemaEnvironment.isSubtypeOf(caseExpressionType,
+                expressionType, SubtypeCheckMode.withNullabilities)) {
+              inferrer.helper.addProblem(
+                  templateSwitchExpressionNotSubtype.withArguments(
+                      caseExpressionType,
+                      expressionType,
+                      inferrer.isNonNullableByDefault),
+                  caseExpression.fileOffset,
+                  noLength,
+                  context: [
+                    messageSwitchExpressionNotAssignableCause.withLocation(
+                        inferrer.uriForInstrumentation,
+                        node.expression.fileOffset,
+                        noLength)
+                  ]);
+            }
+          } else {
+            // Check whether the expression type is assignable to the case
+            // expression type.
+            if (!inferrer.isAssignable(expressionType, caseExpressionType)) {
+              inferrer.helper.addProblem(
+                  templateSwitchExpressionNotAssignable.withArguments(
+                      expressionType,
+                      caseExpressionType,
+                      inferrer.isNonNullableByDefault),
+                  caseExpression.fileOffset,
+                  noLength,
+                  context: [
+                    messageSwitchExpressionNotAssignableCause.withLocation(
+                        inferrer.uriForInstrumentation,
+                        node.expression.fileOffset,
+                        noLength)
+                  ]);
+            }
           }
         }
       }
@@ -5219,7 +5224,7 @@
         switchCase.body = bodyResult.statement..parent = switchCase;
       }
 
-      if (inferrer.isNonNullableByDefault) {
+      if (!inferrer.isTopLevel && inferrer.isNonNullableByDefault) {
         // The last case block is allowed to complete normally.
         if (caseIndex < node.cases.length - 1 &&
             inferrer.flowAnalysis.isReachable) {
@@ -5228,7 +5233,9 @@
         }
       }
     }
-    inferrer.flowAnalysis.switchStatement_end(hasDefault);
+    bool isExhaustive =
+        hasDefault || (enumFields != null && enumFields.isEmpty);
+    inferrer.flowAnalysis.switchStatement_end(isExhaustive);
     return const StatementInferenceResult();
   }
 
@@ -5252,26 +5259,18 @@
         isVoidAllowed: false);
     node.expression = expressionResult.expression..parent = node;
     inferrer.flowAnalysis.handleExit();
-    if (inferrer.isNonNullableByDefault) {
+    if (!inferrer.isTopLevel && inferrer.isNonNullableByDefault) {
       if (!inferrer.isAssignable(
           inferrer.typeSchemaEnvironment.objectNonNullableRawType,
           expressionResult.inferredType,
           isStrongNullabilityMode: true)) {
-        if (inferrer.nnbdMode == NnbdMode.Weak) {
-          inferrer.helper.addProblem(
-              templateThrowingNotAssignableToObjectWarning.withArguments(
-                  expressionResult.inferredType, true),
-              node.expression.fileOffset,
-              noLength);
-        } else {
-          return new ExpressionInferenceResult(
-              const DynamicType(),
-              inferrer.helper.buildProblem(
-                  templateThrowingNotAssignableToObjectError.withArguments(
-                      expressionResult.inferredType, true),
-                  node.expression.fileOffset,
-                  noLength));
-        }
+        return new ExpressionInferenceResult(
+            const DynamicType(),
+            inferrer.helper.buildProblem(
+                templateThrowingNotAssignableToObjectError.withArguments(
+                    expressionResult.inferredType, true),
+                node.expression.fileOffset,
+                noLength));
       }
     }
     // Return BottomType in legacy mode for compatibility.
@@ -5352,26 +5351,54 @@
   ExpressionInferenceResult visitVariableSet(
       VariableSet node, DartType typeContext) {
     VariableDeclarationImpl variable = node.variable;
-    DartType writeContext = variable.type;
+    bool isDefinitelyAssigned = false;
+    if (inferrer.isNonNullableByDefault) {
+      isDefinitelyAssigned = inferrer.flowAnalysis.isAssigned(variable);
+    }
+    DartType declaredOrInferredType = variable.lateType ?? variable.type;
+    DartType writeContext = declaredOrInferredType;
     ExpressionInferenceResult rhsResult = inferrer.inferExpression(
         node.value, writeContext ?? const UnknownType(), true,
         isVoidAllowed: true);
     Expression rhs = inferrer.ensureAssignableResult(writeContext, rhsResult,
         fileOffset: node.fileOffset, isVoidAllowed: writeContext is VoidType);
     inferrer.flowAnalysis.write(variable, rhsResult.inferredType);
+    DartType resultType = rhsResult.inferredType;
+    Expression resultExpression;
     if (variable.lateSetter != null) {
-      return new ExpressionInferenceResult(
-          rhsResult.inferredType,
-          new MethodInvocation(
-              new VariableGet(variable.lateSetter)
-                ..fileOffset = node.fileOffset,
-              callName,
-              new Arguments(<Expression>[rhs])..fileOffset = node.fileOffset)
-            ..fileOffset = node.fileOffset);
+      resultExpression = new MethodInvocation(
+          new VariableGet(variable.lateSetter)..fileOffset = node.fileOffset,
+          callName,
+          new Arguments(<Expression>[rhs])..fileOffset = node.fileOffset)
+        ..fileOffset = node.fileOffset;
     } else {
       node.value = rhs..parent = node;
-      return new ExpressionInferenceResult(rhsResult.inferredType, node);
+      resultExpression = node;
     }
+    if (!inferrer.isTopLevel && inferrer.isNonNullableByDefault) {
+      // Synthetic variables, local functions, and variables with
+      // invalid types aren't checked.
+      if (variable.name != null &&
+          !variable.isLocalFunction &&
+          declaredOrInferredType is! InvalidType) {
+        if ((variable.isLate && variable.isFinal) ||
+            variable.isLateFinalWithoutInitializer) {
+          if (isDefinitelyAssigned &&
+              isPotentiallyNonNullable(
+                  declaredOrInferredType, inferrer.coreTypes.futureOrClass)) {
+            return new ExpressionInferenceResult(
+                resultType,
+                inferrer.helper.wrapInProblem(
+                    resultExpression,
+                    templateNonNullableLateDefinitelyAssignedError
+                        .withArguments(node.variable.name),
+                    node.fileOffset,
+                    node.variable.name.length));
+          }
+        }
+      }
+    }
+    return new ExpressionInferenceResult(resultType, resultExpression);
   }
 
   @override
@@ -5477,6 +5504,8 @@
       result.add(getter);
 
       if (!node.isFinal || node.initializer == null) {
+        node.isLateFinalWithoutInitializer =
+            node.isFinal && node.initializer == null;
         VariableDeclaration setVariable =
             new VariableDeclaration('#${node.name}#set')
               ..fileOffset = fileOffset;
@@ -5530,46 +5559,6 @@
   ExpressionInferenceResult visitVariableGet(
       covariant VariableGetImpl node, DartType typeContext) {
     VariableDeclarationImpl variable = node.variable;
-    bool isUnassigned = !inferrer.flowAnalysis.isAssigned(variable);
-    if (isUnassigned) {
-      inferrer.dataForTesting?.flowAnalysisResult?.unassignedNodes?.add(node);
-      if (inferrer.isNonNullableByDefault) {
-        // Synthetic variables, local functions, and variables with
-        // invalid types aren't checked.
-        // TODO(dmitryas): Report errors on definitely unassigned late
-        // local variables with potentially non-nullable types.
-        if (variable.name != null &&
-            !variable.isLocalFunction &&
-            variable.type is! InvalidType &&
-            isPotentiallyNonNullable(
-                variable.type, inferrer.coreTypes.futureOrClass) &&
-            !variable.isLate) {
-          if (inferrer.nnbdMode == NnbdMode.Weak) {
-            inferrer.library.addProblem(
-                templateNonNullableNotAssignedWarning
-                    .withArguments(node.variable.name),
-                node.fileOffset,
-                node.variable.name.length,
-                inferrer.helper.uri);
-          } else {
-            return new ExpressionInferenceResult(
-                new InvalidType(),
-                inferrer.helper.wrapInProblem(
-                    node,
-                    templateNonNullableNotAssignedError
-                        .withArguments(node.variable.name),
-                    node.fileOffset,
-                    node.variable.name.length));
-          }
-        }
-      }
-    }
-
-    if (inferrer.flowAnalysis.isUnassigned(variable)) {
-      inferrer.dataForTesting?.flowAnalysisResult?.definitelyUnassignedNodes
-          ?.add(node);
-    }
-
     DartType promotedType;
     DartType declaredOrInferredType = variable.lateType ?? variable.type;
     if (inferrer.isNonNullableByDefault) {
@@ -5595,21 +5584,67 @@
           new InstrumentationValueForType(promotedType));
     }
     node.promotedType = promotedType;
-    DartType type = promotedType ?? declaredOrInferredType;
+    DartType resultType = promotedType ?? declaredOrInferredType;
+    Expression resultExpression;
     if (variable.isLocalFunction) {
-      return inferrer.instantiateTearOff(type, typeContext, node);
+      return inferrer.instantiateTearOff(resultType, typeContext, node);
     } else if (variable.lateGetter != null) {
-      return new ExpressionInferenceResult(
-          type,
-          new MethodInvocation(
-              new VariableGet(variable.lateGetter)
-                ..fileOffset = node.fileOffset,
-              callName,
-              new Arguments(<Expression>[])..fileOffset = node.fileOffset)
-            ..fileOffset = node.fileOffset);
+      resultExpression = new MethodInvocation(
+          new VariableGet(variable.lateGetter)..fileOffset = node.fileOffset,
+          callName,
+          new Arguments(<Expression>[])..fileOffset = node.fileOffset)
+        ..fileOffset = node.fileOffset;
     } else {
-      return new ExpressionInferenceResult(type, node);
+      resultExpression = node;
     }
+    if (!inferrer.isTopLevel) {
+      bool isUnassigned = !inferrer.flowAnalysis.isAssigned(variable);
+      if (isUnassigned) {
+        inferrer.dataForTesting?.flowAnalysisResult?.unassignedNodes?.add(node);
+      }
+      bool isDefinitelyUnassigned =
+          inferrer.flowAnalysis.isUnassigned(variable);
+      if (isDefinitelyUnassigned) {
+        inferrer.dataForTesting?.flowAnalysisResult?.definitelyUnassignedNodes
+            ?.add(node);
+      }
+      if (inferrer.isNonNullableByDefault) {
+        // Synthetic variables, local functions, and variables with
+        // invalid types aren't checked.
+        if (variable.name != null &&
+            !variable.isLocalFunction &&
+            declaredOrInferredType is! InvalidType) {
+          if (variable.isLate || variable.lateGetter != null) {
+            if (isDefinitelyUnassigned &&
+                isPotentiallyNonNullable(
+                    declaredOrInferredType, inferrer.coreTypes.futureOrClass)) {
+              return new ExpressionInferenceResult(
+                  resultType,
+                  inferrer.helper.wrapInProblem(
+                      resultExpression,
+                      templateNonNullableLateDefinitelyUnassignedError
+                          .withArguments(node.variable.name),
+                      node.fileOffset,
+                      node.variable.name.length));
+            }
+          } else {
+            if (isUnassigned &&
+                isPotentiallyNonNullable(
+                    declaredOrInferredType, inferrer.coreTypes.futureOrClass)) {
+              return new ExpressionInferenceResult(
+                  resultType,
+                  inferrer.helper.wrapInProblem(
+                      resultExpression,
+                      templateNonNullableNotAssignedError
+                          .withArguments(node.variable.name),
+                      node.fileOffset,
+                      node.variable.name.length));
+            }
+          }
+        }
+      }
+    }
+    return new ExpressionInferenceResult(resultType, resultExpression);
   }
 
   @override
@@ -5662,7 +5697,7 @@
   ExpressionInferenceResult visitLoadLibrary(
       covariant LoadLibraryImpl node, DartType typeContext) {
     DartType inferredType = inferrer.typeSchemaEnvironment
-        .futureType(const DynamicType(), inferrer.library.nullable);
+        .futureType(const DynamicType(), inferrer.library.nonNullable);
     if (node.arguments != null) {
       FunctionType calleeType =
           new FunctionType([], inferredType, inferrer.library.nonNullable);
@@ -5677,7 +5712,7 @@
     DartType inferredType = new FunctionType(
         [],
         inferrer.typeSchemaEnvironment
-            .futureType(const DynamicType(), inferrer.library.nullable),
+            .futureType(const DynamicType(), inferrer.library.nonNullable),
         inferrer.library.nonNullable);
     Expression replacement = new StaticGet(node.target)
       ..fileOffset = node.fileOffset;
@@ -5794,7 +5829,7 @@
 
   void reportNonNullableInNullAwareWarningIfNeeded(
       DartType operandType, String operationName, int offset) {
-    if (inferrer.isNonNullableByDefault) {
+    if (!inferrer.isTopLevel && inferrer.isNonNullableByDefault) {
       if (operandType is! InvalidType &&
           !isPotentiallyNullable(
               operandType, inferrer.coreTypes.futureOrClass)) {
diff --git a/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart b/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
index 2272377..f74b9ed 100644
--- a/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/internal_ast.dart
@@ -21,7 +21,7 @@
 import 'dart:core' hide MapEntry;
 
 import 'package:kernel/ast.dart';
-import 'package:kernel/text/ast_to_text.dart';
+import 'package:kernel/text/ast_to_text.dart' show Precedence, Printer;
 import 'package:kernel/core_types.dart';
 
 import '../fasta_codes.dart'
@@ -272,6 +272,11 @@
       body?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "ForInStatementWithSynthesizedVariable()";
+  }
 }
 
 class TryStatement extends InternalStatement {
@@ -309,6 +314,11 @@
       finallyBlock?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "TryStatement()";
+  }
 }
 
 class SwitchCaseImpl extends SwitchCase {
@@ -319,6 +329,11 @@
       {bool isDefault: false, this.hasLabel})
       : assert(hasLabel != null),
         super(expressions, expressionOffsets, body, isDefault: isDefault);
+
+  @override
+  String toString() {
+    return "SwitchCaseImpl()";
+  }
 }
 
 class BreakStatementImpl extends BreakStatement {
@@ -328,6 +343,11 @@
   BreakStatementImpl({this.isContinue})
       : assert(isContinue != null),
         super(null);
+
+  @override
+  String toString() {
+    return "BreakStatementImpl()";
+  }
 }
 
 enum InternalExpressionKind {
@@ -455,6 +475,11 @@
     arguments.types.clear();
     arguments._explicitTypeArgumentCount = 0;
   }
+
+  @override
+  String toString() {
+    return "ArgumentsImpl()";
+  }
 }
 
 /// Internal expression representing a cascade expression.
@@ -517,6 +542,11 @@
     }
     transformList(expressions, v, this);
   }
+
+  @override
+  String toString() {
+    return "Cascade()";
+  }
 }
 
 /// Internal expression representing a deferred check.
@@ -556,6 +586,11 @@
       expression?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "DeferredCheck()";
+  }
 }
 
 /// Common base class for shadow objects representing expressions in kernel
@@ -583,6 +618,11 @@
       InferenceVisitor visitor, DartType typeContext) {
     return visitor.visitFactoryConstructorInvocationJudgment(this, typeContext);
   }
+
+  @override
+  String toString() {
+    return "FactoryConstructorInvocationJudgment()";
+  }
 }
 
 /// Front end specific implementation of [FunctionDeclaration].
@@ -597,6 +637,11 @@
       FunctionDeclarationImpl declaration, bool hasImplicitReturnType) {
     declaration.hasImplicitReturnType = hasImplicitReturnType;
   }
+
+  @override
+  String toString() {
+    return "FunctionDeclarationImpl()";
+  }
 }
 
 /// Concrete shadow object representing a super initializer in kernel form.
@@ -613,6 +658,11 @@
   void acceptInference(InferenceVisitor visitor) {
     return visitor.visitInvalidSuperInitializerJudgment(this);
   }
+
+  @override
+  String toString() {
+    return "InvalidSuperInitializerJudgment()";
+  }
 }
 
 /// Internal expression representing an if-null expression.
@@ -656,6 +706,11 @@
       right?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "IfNullExpression()";
+  }
 }
 
 /// Common base class for shadow objects representing initializers in kernel
@@ -704,6 +759,11 @@
       InferenceVisitor visitor, DartType typeContext) {
     return visitor.visitIntJudgment(this, typeContext);
   }
+
+  @override
+  String toString() {
+    return "IntJudgment()";
+  }
 }
 
 class ShadowLargeIntLiteral extends IntLiteral implements ExpressionJudgment {
@@ -733,6 +793,11 @@
       InferenceVisitor visitor, DartType typeContext) {
     return visitor.visitShadowLargeIntLiteral(this, typeContext);
   }
+
+  @override
+  String toString() {
+    return "ShadowLargeIntLiteral()";
+  }
 }
 
 /// Concrete shadow object representing an invalid initializer in kernel form.
@@ -744,6 +809,11 @@
   void acceptInference(InferenceVisitor visitor) {
     return visitor.visitShadowInvalidInitializer(this);
   }
+
+  @override
+  String toString() {
+    return "ShadowInvalidInitializer()";
+  }
 }
 
 /// Concrete shadow object representing an invalid initializer in kernel form.
@@ -762,6 +832,11 @@
   void acceptInference(InferenceVisitor visitor) {
     return visitor.visitShadowInvalidFieldInitializer(this);
   }
+
+  @override
+  String toString() {
+    return "ShadowInvalidFieldInitializer()";
+  }
 }
 
 class ExpressionInvocation extends InternalExpression {
@@ -800,6 +875,11 @@
       arguments?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "ExpressionInvocation()";
+  }
 }
 
 /// Concrete shadow object representing a named function expression.
@@ -821,6 +901,11 @@
       InferenceVisitor visitor, DartType typeContext) {
     return visitor.visitNamedFunctionExpressionJudgment(this, typeContext);
   }
+
+  @override
+  String toString() {
+    return "NamedFunctionExpressionJudgment()";
+  }
 }
 
 /// Internal expression representing a null-aware method invocation.
@@ -868,6 +953,11 @@
       invocation?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "NullAwareMethodInvocation()";
+  }
 }
 
 /// Internal expression representing a null-aware read from a property.
@@ -915,6 +1005,11 @@
       read?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "NullAwarePropertyGet()";
+  }
 }
 
 /// Internal expression representing a null-aware read from a property.
@@ -962,6 +1057,11 @@
       write?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "NullAwarePropertySet()";
+  }
 }
 
 /// Front end specific implementation of [ReturnStatement].
@@ -970,6 +1070,11 @@
 
   ReturnStatementImpl(this.isArrow, [Expression expression])
       : super(expression);
+
+  @override
+  String toString() {
+    return "ReturnStatementImpl()";
+  }
 }
 
 /// Concrete implementation of [TypePromoter] specialized to work with kernel
@@ -1129,6 +1234,12 @@
   // lowering is enabled.
   VariableDeclaration lateSetter;
 
+  // Is `true` if this a lowered late final variable without an initializer.
+  //
+  // This is set in `InferenceVisitor.visitVariableDeclaration` when late
+  // lowering is enabled.
+  bool isLateFinalWithoutInitializer = false;
+
   // The original type (declared or inferred) of a lowered late variable.
   //
   // This is set in `InferenceVisitor.visitVariableDeclaration` when late
@@ -1150,6 +1261,11 @@
       {this.forNullGuardedAccess})
       : assert(forNullGuardedAccess != null),
         super(variable);
+
+  @override
+  String toString() {
+    return "VariableGetImpl()";
+  }
 }
 
 /// Front end specific implementation of [LoadLibrary].
@@ -1157,6 +1273,11 @@
   final Arguments arguments;
 
   LoadLibraryImpl(LibraryDependency import, this.arguments) : super(import);
+
+  @override
+  String toString() {
+    return "LoadLibraryImpl()";
+  }
 }
 
 /// Internal expression representing a tear-off of a `loadLibrary` function.
@@ -1190,6 +1311,11 @@
       target = target.accept<TreeNode>(v);
     }
   }
+
+  @override
+  String toString() {
+    return "LoadLibraryTearOff()";
+  }
 }
 
 /// Internal expression representing an if-null property set.
@@ -1254,6 +1380,11 @@
       write?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "IfNullPropertySet()";
+  }
 }
 
 /// Internal expression representing an if-null assignment.
@@ -1309,6 +1440,11 @@
       write?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "IfNullSet()";
+  }
 }
 
 /// Internal expression representing an compound extension assignment.
@@ -1426,6 +1562,11 @@
       rhs?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "CompoundExtensionSet()";
+  }
 }
 
 /// Internal expression representing an compound property assignment.
@@ -1510,6 +1651,11 @@
       rhs?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "CompoundPropertySet()";
+  }
 }
 
 /// Internal expression representing an compound property assignment.
@@ -1570,6 +1716,11 @@
       write?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "PropertyPostIncDec()";
+  }
 }
 
 /// Internal expression representing an local variable post inc/dec expression.
@@ -1618,6 +1769,11 @@
       write?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "LocalPostIncDec()";
+  }
 }
 
 /// Internal expression representing an static member post inc/dec expression.
@@ -1666,6 +1822,11 @@
       write?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "StaticPostIncDec()";
+  }
 }
 
 /// Internal expression representing an static member post inc/dec expression.
@@ -1714,6 +1875,11 @@
       write?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "SuperPostIncDec()";
+  }
 }
 
 /// Internal expression representing an index get expression.
@@ -1755,6 +1921,11 @@
       index?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "IndexGet()";
+  }
 }
 
 /// Internal expression representing an index set expression.
@@ -1824,6 +1995,11 @@
       value?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "IndexSet()";
+  }
 }
 
 /// Internal expression representing a  super index set expression.
@@ -1880,6 +2056,11 @@
       value?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "SuperIndexSet()";
+  }
 }
 
 /// Internal expression representing an extension index set expression.
@@ -1960,6 +2141,11 @@
       value?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "ExtensionIndexSet()";
+  }
 }
 
 /// Internal expression representing an if-null index assignment.
@@ -2057,6 +2243,11 @@
       value?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "IfNullIndexSet()";
+  }
 }
 
 /// Internal expression representing an if-null super index set expression.
@@ -2139,6 +2330,11 @@
       value?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "IfNullSuperIndexSet()";
+  }
 }
 
 /// Internal expression representing an if-null super index set expression.
@@ -2247,6 +2443,11 @@
       value?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "IfNullExtensionIndexSet()";
+  }
 }
 
 /// Internal expression representing a compound index assignment.
@@ -2340,6 +2541,11 @@
       rhs?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "CompoundIndexSet()";
+  }
 }
 
 /// Internal expression representing a null-aware compound assignment.
@@ -2447,6 +2653,11 @@
       rhs?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "NullAwareCompoundSet()";
+  }
 }
 
 /// Internal expression representing an null-aware if-null property set.
@@ -2529,6 +2740,11 @@
       value?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "NullAwareIfNullSet()";
+  }
 }
 
 /// Internal expression representing a compound super index assignment.
@@ -2615,6 +2831,11 @@
       rhs?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "CompoundSuperIndexSet()";
+  }
 }
 
 /// Internal expression representing a compound extension index assignment.
@@ -2738,6 +2959,11 @@
       rhs?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "CompoundExtensionIndexSet()";
+  }
 }
 
 /// Internal expression representing an assignment to an extension setter.
@@ -2820,6 +3046,11 @@
       value?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "ExtensionSet()";
+  }
 }
 
 /// Internal expression representing an null-aware extension expression.
@@ -2866,6 +3097,11 @@
       expression?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "NullAwareExtension()";
+  }
 }
 
 /// Front end specific implementation of [PropertySet].
@@ -2881,6 +3117,11 @@
       {Member interfaceTarget, this.forEffect, this.readOnlyReceiver})
       : assert(forEffect != null),
         super(receiver, name, value, interfaceTarget);
+
+  @override
+  String toString() {
+    return "PropertySetImpl()";
+  }
 }
 
 /// Internal representation of a read of an extension instance member.
@@ -2927,6 +3168,11 @@
       arguments?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "ExtensionTearOff()";
+  }
 }
 
 /// Internal expression for an equals or not-equals expression.
@@ -2967,6 +3213,11 @@
       right?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "EqualsExpression()";
+  }
 }
 
 /// Internal expression for a binary expression.
@@ -3006,6 +3257,11 @@
       right?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "BinaryExpression()";
+  }
 }
 
 /// Internal expression for a unary expression.
@@ -3038,6 +3294,11 @@
       expression?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "UnaryExpression()";
+  }
 }
 
 /// Internal expression for a parenthesized expression.
@@ -3069,6 +3330,11 @@
       expression?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "ParenthesizedExpression()";
+  }
 }
 
 /// Creates a [Let] of [variable] with the given [body] using
diff --git a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
index b8f1156..4544f76 100644
--- a/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/kernel_target.dart
@@ -92,15 +92,12 @@
         FormattedMessage,
         messageConstConstructorLateFinalFieldCause,
         messageConstConstructorLateFinalFieldError,
-        messageConstConstructorLateFinalFieldWarning,
         messageConstConstructorNonFinalField,
         messageConstConstructorNonFinalFieldCause,
         messageConstConstructorRedirectionToNonConst,
         noLength,
         templateFieldNonNullableNotInitializedByConstructorError,
-        templateFieldNonNullableNotInitializedByConstructorWarning,
         templateFieldNonNullableWithoutInitializerError,
-        templateFieldNonNullableWithoutInitializerWarning,
         templateFinalFieldNotInitialized,
         templateFinalFieldNotInitializedByConstructor,
         templateInferredPackageUri,
@@ -154,9 +151,12 @@
       new NamedTypeBuilder("Object", const NullabilityBuilder.omitted(), null);
 
   // Null is always nullable.
-  final TypeBuilder bottomType =
+  final TypeBuilder nullType =
       new NamedTypeBuilder("Null", const NullabilityBuilder.nullable(), null);
 
+  final TypeBuilder bottomType =
+      new NamedTypeBuilder("Never", const NullabilityBuilder.omitted(), null);
+
   final bool excludeSource = !CompilerContext.current.options.embedSourceText;
 
   final Map<String, String> environmentDefines =
@@ -278,11 +278,11 @@
     cls.implementedTypes.clear();
     cls.supertype = null;
     cls.mixedInType = null;
-    builder.supertype =
+    builder.supertypeBuilder =
         new NamedTypeBuilder("Object", const NullabilityBuilder.omitted(), null)
           ..bind(objectClassBuilder);
-    builder.interfaces = null;
-    builder.mixedInType = null;
+    builder.interfaceBuilders = null;
+    builder.mixedInTypeBuilder = null;
   }
 
   @override
@@ -294,12 +294,15 @@
       loader.coreLibrary.becomeCoreLibrary();
       dynamicType.bind(
           loader.coreLibrary.lookupLocalMember("dynamic", required: true));
+      bottomType
+          .bind(loader.coreLibrary.lookupLocalMember("Never", required: true));
       loader.resolveParts();
       loader.computeLibraryScopes();
       setupTopAndBottomTypes();
       loader.resolveTypes();
       loader.computeVariances();
-      loader.computeDefaultTypes(dynamicType, bottomType, objectClassBuilder);
+      loader.computeDefaultTypes(
+          dynamicType, nullType, bottomType, objectClassBuilder);
       List<SourceClassBuilder> myClasses =
           loader.checkSemantics(objectClassBuilder);
       loader.finishTypeVariables(objectClassBuilder, dynamicType);
@@ -420,12 +423,12 @@
             Class cls = declaration.cls;
             if (cls != objectClass) {
               cls.supertype ??= objectClass.asRawSupertype;
-              declaration.supertype ??= new NamedTypeBuilder(
+              declaration.supertypeBuilder ??= new NamedTypeBuilder(
                   "Object", const NullabilityBuilder.omitted(), null)
                 ..bind(objectClassBuilder);
             }
             if (declaration.isMixinApplication) {
-              cls.mixedInType = declaration.mixedInType.buildMixedInType(
+              cls.mixedInType = declaration.mixedInTypeBuilder.buildMixedInType(
                   library, declaration.charOffset, declaration.fileUri);
             }
           }
@@ -514,7 +517,7 @@
     /// >that is accessible to LM , C has an implicitly declared constructor
     /// >named q'i = [C/S]qi of the form q'i(ai1,...,aiki) :
     /// >super(ai1,...,aiki);.
-    TypeBuilder type = builder.supertype;
+    TypeBuilder type = builder.supertypeBuilder;
     TypeDeclarationBuilder supertype;
     if (type is NamedTypeBuilder) {
       supertype = type.declaration;
@@ -671,7 +674,7 @@
     ClassBuilder nullClassBuilder =
         loader.coreLibrary.lookupLocalMember("Null", required: true);
     nullClassBuilder.isNullClass = true;
-    bottomType.bind(nullClassBuilder);
+    nullType.bind(nullClassBuilder);
   }
 
   void computeCoreTypes() {
@@ -864,23 +867,13 @@
         SourceLibraryBuilder library = builder.library;
         if (library.isNonNullableByDefault) {
           if (constructor.isConst && lateFinalFields.isNotEmpty) {
-            if (library.loader.nnbdMode == NnbdMode.Weak) {
-              builder.addProblem(messageConstConstructorLateFinalFieldWarning,
-                  constructor.fileOffset, noLength,
-                  context: lateFinalFields
-                      .map((field) => messageConstConstructorLateFinalFieldCause
-                          .withLocation(
-                              field.fileUri, field.charOffset, noLength))
-                      .toList());
-            } else {
-              builder.addProblem(messageConstConstructorLateFinalFieldError,
-                  constructor.fileOffset, noLength,
-                  context: lateFinalFields
-                      .map((field) => messageConstConstructorLateFinalFieldCause
-                          .withLocation(
-                              field.fileUri, field.charOffset, noLength))
-                      .toList());
-            }
+            builder.addProblem(messageConstConstructorLateFinalFieldError,
+                constructor.fileOffset, noLength,
+                context: lateFinalFields
+                    .map((field) =>
+                        messageConstConstructorLateFinalFieldCause.withLocation(
+                            field.fileUri, field.charOffset, noLength))
+                    .toList());
             lateFinalFields.clear();
           }
         }
@@ -950,27 +943,14 @@
               (cls.constructors.isNotEmpty || cls.isMixinDeclaration)) {
             SourceLibraryBuilder library = builder.library;
             if (library.isNonNullableByDefault) {
-              if (library.loader.nnbdMode == NnbdMode.Weak) {
-                library.addProblem(
-                    templateFieldNonNullableWithoutInitializerWarning
-                        .withArguments(
-                            fieldBuilder.name,
-                            fieldBuilder.field.type,
-                            library.isNonNullableByDefault),
-                    fieldBuilder.charOffset,
-                    fieldBuilder.name.length,
-                    fieldBuilder.fileUri);
-              } else {
-                library.addProblem(
-                    templateFieldNonNullableWithoutInitializerError
-                        .withArguments(
-                            fieldBuilder.name,
-                            fieldBuilder.field.type,
-                            library.isNonNullableByDefault),
-                    fieldBuilder.charOffset,
-                    fieldBuilder.name.length,
-                    fieldBuilder.fileUri);
-              }
+              library.addProblem(
+                  templateFieldNonNullableWithoutInitializerError.withArguments(
+                      fieldBuilder.name,
+                      fieldBuilder.field.type,
+                      library.isNonNullableByDefault),
+                  fieldBuilder.charOffset,
+                  fieldBuilder.name.length,
+                  fieldBuilder.fileUri);
             }
           }
         }
@@ -1008,27 +988,13 @@
                   fieldBuilder.field.type, loader.coreTypes.futureOrClass)) {
             SourceLibraryBuilder library = builder.library;
             if (library.isNonNullableByDefault) {
-              if (library.loader.nnbdMode == NnbdMode.Weak) {
-                library.addProblem(
-                    templateFieldNonNullableNotInitializedByConstructorWarning
-                        .withArguments(
-                            fieldBuilder.name,
-                            fieldBuilder.field.type,
-                            library.isNonNullableByDefault),
-                    fieldBuilder.charOffset,
-                    fieldBuilder.name.length,
-                    fieldBuilder.fileUri);
-              } else {
-                library.addProblem(
-                    templateFieldNonNullableNotInitializedByConstructorError
-                        .withArguments(
-                            fieldBuilder.name,
-                            fieldBuilder.field.type,
-                            library.isNonNullableByDefault),
-                    fieldBuilder.charOffset,
-                    fieldBuilder.name.length,
-                    fieldBuilder.fileUri);
-              }
+              library.addProblem(
+                  templateFieldNonNullableNotInitializedByConstructorError
+                      .withArguments(fieldBuilder.name, fieldBuilder.field.type,
+                          library.isNonNullableByDefault),
+                  fieldBuilder.charOffset,
+                  fieldBuilder.name.length,
+                  fieldBuilder.fileUri);
             }
           }
         }
diff --git a/pkg/front_end/lib/src/fasta/kernel/redirecting_factory_body.dart b/pkg/front_end/lib/src/fasta/kernel/redirecting_factory_body.dart
index 6b88bcd..ed0ca4a9 100644
--- a/pkg/front_end/lib/src/fasta/kernel/redirecting_factory_body.dart
+++ b/pkg/front_end/lib/src/fasta/kernel/redirecting_factory_body.dart
@@ -129,6 +129,11 @@
     }
     return result;
   }
+
+  @override
+  String toString() {
+    return "RedirectingFactoryBody()";
+  }
 }
 
 bool isRedirectingFactory(Member member, {EnsureLoaded helper}) {
diff --git a/pkg/front_end/lib/src/fasta/source/outline_builder.dart b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
index 43d78d8..90341d9 100644
--- a/pkg/front_end/lib/src/fasta/source/outline_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/outline_builder.dart
@@ -26,8 +26,6 @@
 import 'package:kernel/ast.dart'
     show InvalidType, Nullability, ProcedureKind, Variance;
 
-import '../../base/nnbd_mode.dart';
-
 import '../builder/constructor_reference_builder.dart';
 import '../builder/enum_builder.dart';
 import '../builder/fixed_type_builder.dart';
@@ -585,42 +583,24 @@
       if (supertypeForErrors != null) {
         if (supertypeForErrors.nullabilityBuilder.build(libraryBuilder) ==
             Nullability.nullable) {
-          if (libraryBuilder.loader.nnbdMode == NnbdMode.Weak) {
-            libraryBuilder.addProblem(
-                templateNullableSuperclassWarning
-                    .withArguments(supertypeForErrors.fullNameForErrors),
-                nameOffset,
-                classNameForErrors.length,
-                uri);
-          } else {
-            libraryBuilder.addProblem(
-                templateNullableSuperclassError
-                    .withArguments(supertypeForErrors.fullNameForErrors),
-                nameOffset,
-                classNameForErrors.length,
-                uri);
-          }
+          libraryBuilder.addProblem(
+              templateNullableSuperclassError
+                  .withArguments(supertypeForErrors.fullNameForErrors),
+              nameOffset,
+              classNameForErrors.length,
+              uri);
         }
       }
       if (mixins != null) {
         for (TypeBuilder mixin in mixins) {
           if (mixin.nullabilityBuilder.build(libraryBuilder) ==
               Nullability.nullable) {
-            if (libraryBuilder.loader.nnbdMode == NnbdMode.Weak) {
-              libraryBuilder.addProblem(
-                  templateNullableMixinWarning
-                      .withArguments(mixin.fullNameForErrors),
-                  nameOffset,
-                  classNameForErrors.length,
-                  uri);
-            } else {
-              libraryBuilder.addProblem(
-                  templateNullableMixinError
-                      .withArguments(mixin.fullNameForErrors),
-                  nameOffset,
-                  classNameForErrors.length,
-                  uri);
-            }
+            libraryBuilder.addProblem(
+                templateNullableMixinError
+                    .withArguments(mixin.fullNameForErrors),
+                nameOffset,
+                classNameForErrors.length,
+                uri);
           }
         }
       }
@@ -628,21 +608,12 @@
         for (TypeBuilder interface in interfaces) {
           if (interface.nullabilityBuilder.build(libraryBuilder) ==
               Nullability.nullable) {
-            if (libraryBuilder.loader.nnbdMode == NnbdMode.Weak) {
-              libraryBuilder.addProblem(
-                  templateNullableInterfaceWarning
-                      .withArguments(interface.fullNameForErrors),
-                  nameOffset,
-                  classNameForErrors.length,
-                  uri);
-            } else {
-              libraryBuilder.addProblem(
-                  templateNullableInterfaceError
-                      .withArguments(interface.fullNameForErrors),
-                  nameOffset,
-                  classNameForErrors.length,
-                  uri);
-            }
+            libraryBuilder.addProblem(
+                templateNullableInterfaceError
+                    .withArguments(interface.fullNameForErrors),
+                nameOffset,
+                classNameForErrors.length,
+                uri);
           }
         }
       }
@@ -702,21 +673,12 @@
         for (TypeBuilder supertype in supertypeConstraints) {
           if (supertype.nullabilityBuilder.build(libraryBuilder) ==
               Nullability.nullable) {
-            if (libraryBuilder.loader.nnbdMode == NnbdMode.Weak) {
-              libraryBuilder.addProblem(
-                  templateNullableSuperclassWarning
-                      .withArguments(supertype.fullNameForErrors),
-                  nameOffset,
-                  classNameForErrors.length,
-                  uri);
-            } else {
-              libraryBuilder.addProblem(
-                  templateNullableSuperclassError
-                      .withArguments(supertype.fullNameForErrors),
-                  nameOffset,
-                  classNameForErrors.length,
-                  uri);
-            }
+            libraryBuilder.addProblem(
+                templateNullableSuperclassError
+                    .withArguments(supertype.fullNameForErrors),
+                nameOffset,
+                classNameForErrors.length,
+                uri);
           }
         }
       }
@@ -724,21 +686,12 @@
         for (TypeBuilder interface in interfaces) {
           if (interface.nullabilityBuilder.build(libraryBuilder) ==
               Nullability.nullable) {
-            if (libraryBuilder.loader.nnbdMode == NnbdMode.Weak) {
-              libraryBuilder.addProblem(
-                  templateNullableInterfaceWarning
-                      .withArguments(interface.fullNameForErrors),
-                  nameOffset,
-                  classNameForErrors.length,
-                  uri);
-            } else {
-              libraryBuilder.addProblem(
-                  templateNullableInterfaceError
-                      .withArguments(interface.fullNameForErrors),
-                  nameOffset,
-                  classNameForErrors.length,
-                  uri);
-            }
+            libraryBuilder.addProblem(
+                templateNullableInterfaceError
+                    .withArguments(interface.fullNameForErrors),
+                nameOffset,
+                classNameForErrors.length,
+                uri);
           }
         }
       }
@@ -1241,62 +1194,34 @@
       if (supertype != null && supertype is! MixinApplicationBuilder) {
         if (supertype.nullabilityBuilder.build(libraryBuilder) ==
             Nullability.nullable) {
-          if (libraryBuilder.loader.nnbdMode == NnbdMode.Weak) {
-            libraryBuilder.addProblem(
-                templateNullableSuperclassWarning
-                    .withArguments(supertype.fullNameForErrors),
-                charOffset,
-                classNameForErrors.length,
-                uri);
-          } else {
-            libraryBuilder.addProblem(
-                templateNullableSuperclassError
-                    .withArguments(supertype.fullNameForErrors),
-                charOffset,
-                classNameForErrors.length,
-                uri);
-          }
+          libraryBuilder.addProblem(
+              templateNullableSuperclassError
+                  .withArguments(supertype.fullNameForErrors),
+              charOffset,
+              classNameForErrors.length,
+              uri);
         }
       }
       for (TypeBuilder mixin in mixins) {
         if (mixin.nullabilityBuilder.build(libraryBuilder) ==
             Nullability.nullable) {
-          if (libraryBuilder.loader.nnbdMode == NnbdMode.Weak) {
-            libraryBuilder.addProblem(
-                templateNullableMixinWarning
-                    .withArguments(mixin.fullNameForErrors),
-                charOffset,
-                classNameForErrors.length,
-                uri);
-          } else {
-            libraryBuilder.addProblem(
-                templateNullableMixinError
-                    .withArguments(mixin.fullNameForErrors),
-                charOffset,
-                classNameForErrors.length,
-                uri);
-          }
+          libraryBuilder.addProblem(
+              templateNullableMixinError.withArguments(mixin.fullNameForErrors),
+              charOffset,
+              classNameForErrors.length,
+              uri);
         }
       }
       if (interfaces != null) {
         for (TypeBuilder interface in interfaces) {
           if (interface.nullabilityBuilder.build(libraryBuilder) ==
               Nullability.nullable) {
-            if (libraryBuilder.loader.nnbdMode == NnbdMode.Weak) {
-              libraryBuilder.addProblem(
-                  templateNullableInterfaceWarning
-                      .withArguments(interface.fullNameForErrors),
-                  charOffset,
-                  classNameForErrors.length,
-                  uri);
-            } else {
-              libraryBuilder.addProblem(
-                  templateNullableInterfaceError
-                      .withArguments(interface.fullNameForErrors),
-                  charOffset,
-                  classNameForErrors.length,
-                  uri);
-            }
+            libraryBuilder.addProblem(
+                templateNullableInterfaceError
+                    .withArguments(interface.fullNameForErrors),
+                charOffset,
+                classNameForErrors.length,
+                uri);
           }
         }
       }
@@ -1675,13 +1600,24 @@
             TypeParameterScopeKind.functionType, "<syntax-error>");
         return;
       }
-      if (type is FunctionTypeBuilder) {
-        // TODO(ahe): We need to start a nested declaration when parsing the
-        // formals and return type so we can correctly bind
-        // `type.typeVariables`. A typedef can have type variables, and a new
-        // function type can also have type variables (representing the type of
-        // a generic function).
-        aliasedType = type;
+      if (type is FunctionTypeBuilder &&
+          !libraryBuilder.loader.target.enableNonfunctionTypeAliases) {
+        if (type.nullabilityBuilder.build(libraryBuilder) ==
+                Nullability.nullable &&
+            libraryBuilder.loader.target.enableNonNullable) {
+          // The error is reported when the non-nullable experiment is enabled.
+          // Otherwise, the attempt to use a nullable type will be reported
+          // elsewhere.
+          addProblem(
+              messageTypedefNullableType, equals.charOffset, equals.length);
+        } else {
+          // TODO(ahe): We need to start a nested declaration when parsing the
+          // formals and return type so we can correctly bind
+          // `type.typeVariables`. A typedef can have type variables, and a new
+          // function type can also have type variables (representing the type
+          // of a generic function).
+          aliasedType = type;
+        }
       } else if (libraryBuilder.loader.target.enableNonfunctionTypeAliases) {
         if (type is TypeBuilder) {
           aliasedType = type;
diff --git a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
index a3b5e82..a2f46e2 100644
--- a/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_class_builder.dart
@@ -75,6 +75,9 @@
     show
         Message,
         noLength,
+        messageExtendFunction,
+        messageImplementFunction,
+        messageMixinFunction,
         templateConflictsWithConstructor,
         templateConflictsWithFactory,
         templateConflictsWithMember,
@@ -138,7 +141,7 @@
 
   final List<ConstructorReferenceBuilder> constructorReferences;
 
-  TypeBuilder mixedInType;
+  TypeBuilder mixedInTypeBuilder;
 
   bool isMixinDeclaration;
 
@@ -163,7 +166,7 @@
     Class referencesFrom,
     IndexedClass referencesFromIndexed, {
     Class cls,
-    this.mixedInType,
+    this.mixedInTypeBuilder,
     this.isMixinDeclaration = false,
   })  : actualCls = initializeClass(cls, typeVariables, name, parent,
             startCharOffset, nameOffset, charEndOffset, referencesFrom),
@@ -210,9 +213,19 @@
 
     scope.forEach(buildBuilders);
     constructors.forEach(buildBuilders);
-    supertype = checkSupertype(supertype);
-    actualCls.supertype =
-        supertype?.buildSupertype(library, charOffset, fileUri);
+    supertypeBuilder = checkSupertype(supertypeBuilder);
+    Supertype supertype =
+        supertypeBuilder?.buildSupertype(library, charOffset, fileUri);
+    if (supertype != null) {
+      Class superclass = supertype.classNode;
+      if (superclass.name == 'Function' &&
+          superclass.enclosingLibrary == coreLibrary.library) {
+        library.addProblem(
+            messageExtendFunction, charOffset, noLength, fileUri);
+        supertype = null;
+        supertypeBuilder = null;
+      }
+    }
     if (!isMixinDeclaration &&
         actualCls.supertype != null &&
         actualCls.superclass.isMixinDeclaration) {
@@ -225,27 +238,49 @@
           charOffset,
           noLength,
           fileUri);
-      actualCls.supertype = null;
-    }
-    if (actualCls.supertype == null && supertype is! NamedTypeBuilder) {
       supertype = null;
     }
-    mixedInType = checkSupertype(mixedInType);
-    actualCls.mixedInType =
-        mixedInType?.buildMixedInType(library, charOffset, fileUri);
-    if (actualCls.mixedInType == null && mixedInType is! NamedTypeBuilder) {
-      mixedInType = null;
+    if (supertype == null && supertypeBuilder is! NamedTypeBuilder) {
+      supertypeBuilder = null;
+    }
+    actualCls.supertype = supertype;
+
+    mixedInTypeBuilder = checkSupertype(mixedInTypeBuilder);
+    Supertype mixedInType =
+        mixedInTypeBuilder?.buildMixedInType(library, charOffset, fileUri);
+    if (mixedInType != null) {
+      Class superclass = mixedInType.classNode;
+      if (superclass.name == 'Function' &&
+          superclass.enclosingLibrary == coreLibrary.library) {
+        library.addProblem(messageMixinFunction, charOffset, noLength, fileUri);
+        mixedInType = null;
+        mixedInTypeBuilder = null;
+        actualCls.isAnonymousMixin = false;
+        isMixinDeclaration = false;
+      }
+    }
+    if (mixedInType == null && mixedInTypeBuilder is! NamedTypeBuilder) {
+      mixedInTypeBuilder = null;
     }
     actualCls.isMixinDeclaration = isMixinDeclaration;
+    actualCls.mixedInType = mixedInType;
+
     // TODO(ahe): If `cls.supertype` is null, and this isn't Object, report a
     // compile-time error.
     cls.isAbstract = isAbstract;
-    if (interfaces != null) {
-      for (int i = 0; i < interfaces.length; ++i) {
-        interfaces[i] = checkSupertype(interfaces[i]);
+    if (interfaceBuilders != null) {
+      for (int i = 0; i < interfaceBuilders.length; ++i) {
+        interfaceBuilders[i] = checkSupertype(interfaceBuilders[i]);
         Supertype supertype =
-            interfaces[i].buildSupertype(library, charOffset, fileUri);
+            interfaceBuilders[i].buildSupertype(library, charOffset, fileUri);
         if (supertype != null) {
+          Class superclass = supertype.classNode;
+          if (superclass.name == 'Function' &&
+              superclass.enclosingLibrary == coreLibrary.library) {
+            library.addProblem(
+                messageImplementFunction, charOffset, noLength, fileUri);
+            continue;
+          }
           // TODO(ahe): Report an error if supertype is null.
           actualCls.implementedTypes.add(supertype);
         }
@@ -364,7 +399,7 @@
 
   List<Builder> computeDirectSupertypes(ClassBuilder objectClass) {
     final List<Builder> result = <Builder>[];
-    final TypeBuilder supertype = this.supertype;
+    final TypeBuilder supertype = this.supertypeBuilder;
     if (supertype != null) {
       TypeDeclarationBuilder declarationBuilder = supertype.declaration;
       if (declarationBuilder is TypeAliasBuilder) {
@@ -375,7 +410,7 @@
     } else if (objectClass != this) {
       result.add(objectClass);
     }
-    final List<TypeBuilder> interfaces = this.interfaces;
+    final List<TypeBuilder> interfaces = this.interfaceBuilders;
     if (interfaces != null) {
       for (int i = 0; i < interfaces.length; i++) {
         TypeBuilder interface = interfaces[i];
@@ -387,7 +422,7 @@
         result.add(declarationBuilder);
       }
     }
-    final TypeBuilder mixedInType = this.mixedInType;
+    final TypeBuilder mixedInType = this.mixedInTypeBuilder;
     if (mixedInType != null) {
       TypeDeclarationBuilder declarationBuilder = mixedInType.declaration;
       if (declarationBuilder is TypeAliasBuilder) {
diff --git a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
index d355d3e..78381f8 100644
--- a/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_library_builder.dart
@@ -394,25 +394,23 @@
     for (String testDir in ['/tests/', '/generated_tests/']) {
       int start = path.indexOf(testDir);
       if (start == -1) continue;
-      int end = path.indexOf('/', start + testDir.length + 1);
-      if (end == -1) continue;
-      return optOutTestPaths.contains(path.substring(start, end));
+      String rest = path.substring(start + testDir.length);
+      return optOutTestPaths.any(rest.startsWith);
     }
     return false;
   }
 
-  static final Set<String> optOutTestPaths = {
-    '/tests/co19_2',
-    '/tests/corelib_2',
-    '/tests/language_2',
-    '/tests/lib_2',
-    '/tests/standalone_2',
-    '/generated_tests/co19_2',
-    '/generated_tests/corelib_2',
-    '/generated_tests/language_2',
-    '/generated_tests/lib_2',
-    '/generated_tests/standalone_2',
-  };
+  static const List<String> optOutTestPaths = [
+    'co19_2/',
+    'compiler/dart2js/',
+    'compiler/dart2js_extra/',
+    'compiler/dart2js_native/',
+    'corelib_2/',
+    'ffi_2',
+    'language_2/',
+    'lib_2/',
+    'standalone_2/',
+  ];
 
   LanguageVersion get languageVersion => _languageVersion;
 
@@ -1827,7 +1825,7 @@
           charEndOffset,
           referencesFromClass,
           referencesFromIndexedClass,
-          mixedInType: isMixinDeclaration ? null : mixin,
+          mixedInTypeBuilder: isMixinDeclaration ? null : mixin,
         );
         if (isNamedMixinApplication) {
           loader.target.metadataCollector
@@ -2729,8 +2727,8 @@
     return count;
   }
 
-  int computeDefaultTypes(TypeBuilder dynamicType, TypeBuilder bottomType,
-      ClassBuilder objectClass) {
+  int computeDefaultTypes(TypeBuilder dynamicType, TypeBuilder nullType,
+      TypeBuilder bottomType, ClassBuilder objectClass) {
     int count = 0;
 
     int computeDefaultTypesForVariables(List<TypeVariableBuilder> variables,
@@ -2752,8 +2750,11 @@
         }
 
         if (!haveErroneousBounds) {
-          List<TypeBuilder> calculatedBounds =
-              calculateBounds(variables, dynamicType, bottomType, objectClass);
+          List<TypeBuilder> calculatedBounds = calculateBounds(
+              variables,
+              dynamicType,
+              isNonNullableByDefault ? bottomType : nullType,
+              objectClass);
           for (int i = 0; i < variables.length; ++i) {
             variables[i].defaultType = calculatedBounds[i];
           }
@@ -2926,8 +2927,7 @@
       {bool inferred,
       TypeArgumentsInfo typeArgumentsInfo,
       DartType targetReceiver,
-      String targetName,
-      bool areWarnings = false}) {
+      String targetName}) {
     for (TypeArgumentIssue issue in issues) {
       DartType argument = issue.argument;
       TypeParameter typeParameter = issue.typeParameter;
@@ -2949,27 +2949,16 @@
       } else {
         if (issue.enclosingType == null && targetReceiver != null) {
           if (issueInferred) {
-            Template<
-                    Message Function(
-                        DartType, DartType, String, DartType, String, bool)>
-                template = areWarnings
-                    ? templateIncorrectTypeArgumentQualifiedInferredWarning
-                    : templateIncorrectTypeArgumentQualifiedInferred;
-            message = template.withArguments(
-                argument,
-                typeParameter.bound,
-                typeParameter.name,
-                targetReceiver,
-                targetName,
-                isNonNullableByDefault);
+            message =
+                templateIncorrectTypeArgumentQualifiedInferred.withArguments(
+                    argument,
+                    typeParameter.bound,
+                    typeParameter.name,
+                    targetReceiver,
+                    targetName,
+                    isNonNullableByDefault);
           } else {
-            Template<
-                    Message Function(
-                        DartType, DartType, String, DartType, String, bool)>
-                template = areWarnings
-                    ? templateIncorrectTypeArgumentQualifiedWarning
-                    : templateIncorrectTypeArgumentQualified;
-            message = template.withArguments(
+            message = templateIncorrectTypeArgumentQualified.withArguments(
                 argument,
                 typeParameter.bound,
                 typeParameter.name,
@@ -2983,19 +2972,19 @@
               : getGenericTypeName(issue.enclosingType);
           assert(enclosingName != null);
           if (issueInferred) {
-            Template<Message Function(DartType, DartType, String, String, bool)>
-                template = areWarnings
-                    ? templateIncorrectTypeArgumentInferredWarning
-                    : templateIncorrectTypeArgumentInferred;
-            message = template.withArguments(argument, typeParameter.bound,
-                typeParameter.name, enclosingName, isNonNullableByDefault);
+            message = templateIncorrectTypeArgumentInferred.withArguments(
+                argument,
+                typeParameter.bound,
+                typeParameter.name,
+                enclosingName,
+                isNonNullableByDefault);
           } else {
-            Template<Message Function(DartType, DartType, String, String, bool)>
-                template = areWarnings
-                    ? templateIncorrectTypeArgumentWarning
-                    : templateIncorrectTypeArgument;
-            message = template.withArguments(argument, typeParameter.bound,
-                typeParameter.name, enclosingName, isNonNullableByDefault);
+            message = templateIncorrectTypeArgument.withArguments(
+                argument,
+                typeParameter.bound,
+                typeParameter.name,
+                enclosingName,
+                isNonNullableByDefault);
           }
         }
       }
@@ -3036,25 +3025,14 @@
           fieldType is! InvalidType &&
           isPotentiallyNonNullable(fieldType, typeEnvironment.futureOrClass) &&
           !fieldBuilder.hasInitializer) {
-        if (loader.nnbdMode == NnbdMode.Weak) {
-          addProblem(
-              templateFieldNonNullableWithoutInitializerWarning.withArguments(
-                  fieldBuilder.name,
-                  fieldBuilder.field.type,
-                  isNonNullableByDefault),
-              fieldBuilder.charOffset,
-              fieldBuilder.name.length,
-              fileUri);
-        } else {
-          addProblem(
-              templateFieldNonNullableWithoutInitializerError.withArguments(
-                  fieldBuilder.name,
-                  fieldBuilder.field.type,
-                  isNonNullableByDefault),
-              fieldBuilder.charOffset,
-              fieldBuilder.name.length,
-              fileUri);
-        }
+        addProblem(
+            templateFieldNonNullableWithoutInitializerError.withArguments(
+                fieldBuilder.name,
+                fieldBuilder.field.type,
+                isNonNullableByDefault),
+            fieldBuilder.charOffset,
+            fieldBuilder.name.length,
+            fileUri);
       }
     }
   }
@@ -3071,22 +3049,12 @@
           isPotentiallyNonNullable(
               formal.variable.type, typeEnvironment.futureOrClass) &&
           !formal.hasDeclaredInitializer) {
-        if (loader.nnbdMode == NnbdMode.Weak) {
-          addProblem(
-              templateOptionalNonNullableWithoutInitializerWarning
-                  .withArguments(formal.name, formal.variable.type,
-                      isNonNullableByDefault),
-              formal.charOffset,
-              formal.name.length,
-              formal.fileUri);
-        } else {
-          addProblem(
-              templateOptionalNonNullableWithoutInitializerError.withArguments(
-                  formal.name, formal.variable.type, isNonNullableByDefault),
-              formal.charOffset,
-              formal.name.length,
-              formal.fileUri);
-        }
+        addProblem(
+            templateOptionalNonNullableWithoutInitializerError.withArguments(
+                formal.name, formal.variable.type, isNonNullableByDefault),
+            formal.charOffset,
+            formal.name.length,
+            formal.fileUri);
       }
     }
   }
@@ -3122,64 +3090,44 @@
       }
     }
     if (returnType != null) {
-      Set<TypeArgumentIssue> legacyIssues = findTypeArgumentIssues(returnType,
-              typeEnvironment, SubtypeCheckMode.ignoringNullabilities,
-              allowSuperBounded: true)
-          ?.toSet();
-      Set<TypeArgumentIssue> nnbdIssues = isNonNullableByDefault
-          ? findTypeArgumentIssues(returnType, typeEnvironment,
-                  SubtypeCheckMode.withNullabilities)
-              ?.toSet()
-          : null;
-      if (legacyIssues != null || nnbdIssues != null) {
-        Set<TypeArgumentIssue> mergedIssues = legacyIssues ?? {};
-        if (nnbdIssues != null) {
-          nnbdIssues = nnbdIssues
-              .where((issue) =>
-                  legacyIssues == null || !legacyIssues.contains(issue))
-              .toSet();
-          mergedIssues.addAll(nnbdIssues);
-        }
-        int offset = fileOffset;
-        for (TypeArgumentIssue issue in mergedIssues) {
-          DartType argument = issue.argument;
-          TypeParameter typeParameter = issue.typeParameter;
+      final DartType bottomType = isNonNullableByDefault
+          ? const NeverType(Nullability.nonNullable)
+          : typeEnvironment.nullType;
+      Set<TypeArgumentIssue> issues = {};
+      issues.addAll(findTypeArgumentIssues(returnType, typeEnvironment,
+              SubtypeCheckMode.ignoringNullabilities, bottomType,
+              allowSuperBounded: true) ??
+          const []);
+      if (isNonNullableByDefault) {
+        issues.addAll(findTypeArgumentIssues(returnType, typeEnvironment,
+                SubtypeCheckMode.withNullabilities, bottomType,
+                allowSuperBounded: true) ??
+            const []);
+      }
+      for (TypeArgumentIssue issue in issues) {
+        DartType argument = issue.argument;
+        TypeParameter typeParameter = issue.typeParameter;
 
-          // We don't need to check if [argument] was inferred or specified
-          // here, because inference in return types boils down to instantiate-
-          // -to-bound, and it can't provide a type that violates the bound.
-          if (argument is FunctionType && argument.typeParameters.length > 0) {
-            reportTypeArgumentIssue(
-                messageGenericFunctionTypeUsedAsActualTypeArgument,
-                fileUri,
-                offset,
-                null);
-          } else {
-            void reportProblem(
-                Template<
-                        Message Function(
-                            DartType, DartType, String, String, bool)>
-                    template) {
-              reportTypeArgumentIssue(
-                  template.withArguments(
-                      argument,
-                      typeParameter.bound,
-                      typeParameter.name,
-                      getGenericTypeName(issue.enclosingType),
-                      isNonNullableByDefault),
-                  fileUri,
-                  offset,
-                  typeParameter);
-            }
-
-            nnbdIssues ??= const {};
-            if (nnbdIssues.contains(issue) &&
-                loader.nnbdMode == NnbdMode.Weak) {
-              reportProblem(templateIncorrectTypeArgumentInReturnTypeWarning);
-            } else {
-              reportProblem(templateIncorrectTypeArgumentInReturnType);
-            }
-          }
+        // We don't need to check if [argument] was inferred or specified
+        // here, because inference in return types boils down to instantiate-
+        // -to-bound, and it can't provide a type that violates the bound.
+        if (argument is FunctionType && argument.typeParameters.length > 0) {
+          reportTypeArgumentIssue(
+              messageGenericFunctionTypeUsedAsActualTypeArgument,
+              fileUri,
+              fileOffset,
+              null);
+        } else {
+          reportTypeArgumentIssue(
+              templateIncorrectTypeArgumentInReturnType.withArguments(
+                  argument,
+                  typeParameter.bound,
+                  typeParameter.name,
+                  getGenericTypeName(issue.enclosingType),
+                  isNonNullableByDefault),
+              fileUri,
+              fileOffset,
+              typeParameter);
         }
       }
     }
@@ -3224,28 +3172,21 @@
   void checkBoundsInType(
       DartType type, TypeEnvironment typeEnvironment, Uri fileUri, int offset,
       {bool inferred, bool allowSuperBounded = true}) {
-    Set<TypeArgumentIssue> legacyIssues = findTypeArgumentIssues(
-            type, typeEnvironment, SubtypeCheckMode.ignoringNullabilities,
-            allowSuperBounded: allowSuperBounded)
-        ?.toSet();
-    Set<TypeArgumentIssue> nnbdIssues = isNonNullableByDefault
-        ? findTypeArgumentIssues(
-                type, typeEnvironment, SubtypeCheckMode.withNullabilities,
-                allowSuperBounded: allowSuperBounded)
-            ?.toSet()
-        : null;
-    if (legacyIssues != null) {
-      reportTypeArgumentIssues(legacyIssues, fileUri, offset,
-          inferred: inferred);
+    final DartType bottomType = isNonNullableByDefault
+        ? const NeverType(Nullability.nonNullable)
+        : typeEnvironment.nullType;
+    Set<TypeArgumentIssue> issues = {};
+    issues.addAll(findTypeArgumentIssues(type, typeEnvironment,
+            SubtypeCheckMode.ignoringNullabilities, bottomType,
+            allowSuperBounded: allowSuperBounded) ??
+        const []);
+    if (isNonNullableByDefault) {
+      issues.addAll(findTypeArgumentIssues(type, typeEnvironment,
+              SubtypeCheckMode.withNullabilities, bottomType,
+              allowSuperBounded: allowSuperBounded) ??
+          const []);
     }
-    if (nnbdIssues != null) {
-      if (legacyIssues != null) {
-        nnbdIssues =
-            nnbdIssues.where((issue) => !legacyIssues.contains(issue)).toSet();
-      }
-      reportTypeArgumentIssues(nnbdIssues, fileUri, offset,
-          inferred: inferred, areWarnings: loader.nnbdMode == NnbdMode.Weak);
-    }
+    reportTypeArgumentIssues(issues, fileUri, offset, inferred: inferred);
   }
 
   void checkBoundsInVariableDeclaration(
@@ -3297,46 +3238,39 @@
     List<DartType> arguments = node.arguments.types;
     // The following error is to be reported elsewhere.
     if (parameters.length != arguments.length) return;
-    Set<TypeArgumentIssue> legacyIssues = findTypeArgumentIssuesForInvocation(
+
+    final DartType bottomType = isNonNullableByDefault
+        ? const NeverType(Nullability.nonNullable)
+        : typeEnvironment.nullType;
+    Set<TypeArgumentIssue> issues = {};
+    issues.addAll(findTypeArgumentIssuesForInvocation(
             parameters,
             arguments,
             typeEnvironment,
-            SubtypeCheckMode.ignoringNullabilities)
-        ?.toSet();
-    Set<TypeArgumentIssue> nnbdIssues = isNonNullableByDefault
-        ? findTypeArgumentIssuesForInvocation(parameters, arguments,
-                typeEnvironment, SubtypeCheckMode.withNullabilities)
-            ?.toSet()
-        : null;
-    if (legacyIssues != null) {
+            SubtypeCheckMode.ignoringNullabilities,
+            bottomType) ??
+        const []);
+    if (isNonNullableByDefault) {
+      issues.addAll(findTypeArgumentIssuesForInvocation(
+              parameters,
+              arguments,
+              typeEnvironment,
+              SubtypeCheckMode.withNullabilities,
+              bottomType) ??
+          const []);
+    }
+    if (issues.isNotEmpty) {
       DartType targetReceiver;
       if (klass != null) {
         targetReceiver =
             new InterfaceType(klass, klass.enclosingLibrary.nonNullable);
       }
       String targetName = node.target.name.name;
-      reportTypeArgumentIssues(legacyIssues, fileUri, node.fileOffset,
+      reportTypeArgumentIssues(issues, fileUri, node.fileOffset,
           typeArgumentsInfo: typeArgumentsInfo,
           targetReceiver: targetReceiver,
           targetName: targetName);
     }
-    if (nnbdIssues != null) {
-      DartType targetReceiver;
-      if (klass != null) {
-        targetReceiver =
-            new InterfaceType(klass, klass.enclosingLibrary.nonNullable);
-      }
-      String targetName = node.target.name.name;
-      if (legacyIssues != null) {
-        nnbdIssues =
-            nnbdIssues.where((issue) => !legacyIssues.contains(issue)).toSet();
-      }
-      reportTypeArgumentIssues(nnbdIssues, fileUri, node.fileOffset,
-          typeArgumentsInfo: typeArgumentsInfo,
-          targetReceiver: targetReceiver,
-          targetName: targetName,
-          areWarnings: loader.nnbdMode == NnbdMode.Weak);
-    }
   }
 
   void checkBoundsInMethodInvocation(
@@ -3389,37 +3323,31 @@
       instantiatedMethodParameters[i].bound =
           substitute(methodParameters[i].bound, substitutionMap);
     }
-    Set<TypeArgumentIssue> legacyIssues = findTypeArgumentIssuesForInvocation(
+
+    final DartType bottomType = isNonNullableByDefault
+        ? const NeverType(Nullability.nonNullable)
+        : typeEnvironment.nullType;
+    Set<TypeArgumentIssue> issues = {};
+    issues.addAll(findTypeArgumentIssuesForInvocation(
             instantiatedMethodParameters,
             arguments.types,
             typeEnvironment,
-            SubtypeCheckMode.ignoringNullabilities)
-        ?.toSet();
-    Set<TypeArgumentIssue> nnbdIssues = isNonNullableByDefault
-        ? findTypeArgumentIssuesForInvocation(
-                instantiatedMethodParameters,
-                arguments.types,
-                typeEnvironment,
-                SubtypeCheckMode.withNullabilities)
-            ?.toSet()
-        : null;
-    if (legacyIssues != null) {
-      reportTypeArgumentIssues(legacyIssues, fileUri, offset,
-          typeArgumentsInfo: getTypeArgumentsInfo(arguments),
-          targetReceiver: receiverType,
-          targetName: name.name);
+            SubtypeCheckMode.ignoringNullabilities,
+            bottomType) ??
+        const []);
+    if (isNonNullableByDefault) {
+      issues.addAll(findTypeArgumentIssuesForInvocation(
+              instantiatedMethodParameters,
+              arguments.types,
+              typeEnvironment,
+              SubtypeCheckMode.withNullabilities,
+              bottomType) ??
+          const []);
     }
-    if (nnbdIssues != null) {
-      if (legacyIssues != null) {
-        nnbdIssues =
-            nnbdIssues.where((issue) => !legacyIssues.contains(issue)).toSet();
-      }
-      reportTypeArgumentIssues(nnbdIssues, fileUri, offset,
-          typeArgumentsInfo: getTypeArgumentsInfo(arguments),
-          targetReceiver: receiverType,
-          targetName: name.name,
-          areWarnings: loader.nnbdMode == NnbdMode.Weak);
-    }
+    reportTypeArgumentIssues(issues, fileUri, offset,
+        typeArgumentsInfo: getTypeArgumentsInfo(arguments),
+        targetReceiver: receiverType,
+        targetName: name.name);
   }
 
   void checkTypesInOutline(TypeEnvironment typeEnvironment) {
diff --git a/pkg/front_end/lib/src/fasta/source/source_loader.dart b/pkg/front_end/lib/src/fasta/source/source_loader.dart
index de1fdb5..3c85eb6 100644
--- a/pkg/front_end/lib/src/fasta/source/source_loader.dart
+++ b/pkg/front_end/lib/src/fasta/source/source_loader.dart
@@ -585,13 +585,13 @@
     ticker.logMs("Computed variances of $count type variables");
   }
 
-  void computeDefaultTypes(TypeBuilder dynamicType, TypeBuilder bottomType,
-      ClassBuilder objectClass) {
+  void computeDefaultTypes(TypeBuilder dynamicType, TypeBuilder nullType,
+      TypeBuilder bottomType, ClassBuilder objectClass) {
     int count = 0;
     builders.forEach((Uri uri, LibraryBuilder library) {
       if (library.loader == this) {
-        count +=
-            library.computeDefaultTypes(dynamicType, bottomType, objectClass);
+        count += library.computeDefaultTypes(
+            dynamicType, nullType, bottomType, objectClass);
       }
     });
     ticker.logMs("Computed default types for $count type variables");
@@ -622,20 +622,20 @@
   void checkObjectClassHierarchy(ClassBuilder objectClass) {
     if (objectClass is SourceClassBuilder &&
         objectClass.library.loader == this) {
-      if (objectClass.supertype != null) {
-        objectClass.supertype = null;
+      if (objectClass.supertypeBuilder != null) {
+        objectClass.supertypeBuilder = null;
         objectClass.addProblem(
             messageObjectExtends, objectClass.charOffset, noLength);
       }
-      if (objectClass.interfaces != null) {
+      if (objectClass.interfaceBuilders != null) {
         objectClass.addProblem(
             messageObjectImplements, objectClass.charOffset, noLength);
-        objectClass.interfaces = null;
+        objectClass.interfaceBuilders = null;
       }
-      if (objectClass.mixedInType != null) {
+      if (objectClass.mixedInTypeBuilder != null) {
         objectClass.addProblem(
             messageObjectMixesIn, objectClass.charOffset, noLength);
-        objectClass.mixedInType = null;
+        objectClass.mixedInTypeBuilder = null;
       }
     }
   }
@@ -763,7 +763,7 @@
     }
 
     // Check that the mixed-in type can be used as a mixin.
-    final TypeBuilder mixedInType = cls.mixedInType;
+    final TypeBuilder mixedInType = cls.mixedInTypeBuilder;
     if (mixedInType != null) {
       bool isClassBuilder = false;
       if (mixedInType is NamedTypeBuilder) {
diff --git a/pkg/front_end/lib/src/fasta/type_inference/standard_bounds.dart b/pkg/front_end/lib/src/fasta/type_inference/standard_bounds.dart
index bb85651..8a94bac 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/standard_bounds.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/standard_bounds.dart
@@ -271,6 +271,9 @@
   /// additionally handles the unknown type that appears during type inference.
   DartType getStandardLowerBound(
       DartType type1, DartType type2, Library clientLibrary) {
+    if (type1 is InvalidType || type2 is InvalidType) {
+      return const InvalidType();
+    }
     if (clientLibrary.isNonNullableByDefault) {
       return _getNullabilityAwareStandardLowerBound(
           type1, type2, clientLibrary);
@@ -555,6 +558,9 @@
   /// additionally handles the unknown type that appears during type inference.
   DartType getStandardUpperBound(
       DartType type1, DartType type2, Library clientLibrary) {
+    if (type1 is InvalidType || type2 is InvalidType) {
+      return const InvalidType();
+    }
     if (clientLibrary.isNonNullableByDefault) {
       return _getNullabilityAwareStandardUpperBound(
           type1, type2, clientLibrary);
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
index b0271ce..2970f25 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_inferrer.dart
@@ -125,6 +125,8 @@
 
   final bool _needToInferReturnType;
 
+  DartType _inferredReturnType;
+
   /// The type that actually appeared as the subexpression of `return` or
   /// `yield` statements inside the function.
   ///
@@ -364,7 +366,56 @@
           returnExpressionTypes[i]);
     }
 
-    return demoteTypeInLibrary(inferredType, inferrer.library.library);
+    return _inferredReturnType =
+        demoteTypeInLibrary(inferredType, inferrer.library.library);
+  }
+
+  StatementInferenceResult handleImplicitReturn(
+      TypeInferrerImpl inferrer,
+      Statement body,
+      StatementInferenceResult inferenceResult,
+      int fileOffset) {
+    if (isGenerator) {
+      // There is no implicit return.
+      return inferenceResult;
+    }
+
+    DartType returnType;
+    if (_needToInferReturnType) {
+      assert(_inferredReturnType != null,
+          "Return type has not yet been inferred.");
+      returnType = _inferredReturnType;
+    } else {
+      returnType = declaredReturnType;
+    }
+    if (isAsync) {
+      returnType = inferrer.typeSchemaEnvironment.unfutureType(returnType);
+    }
+    if (inferrer.library.isNonNullableByDefault &&
+        isPotentiallyNonNullable(
+            returnType, inferrer.coreTypes.futureOrClass) &&
+        inferrer.flowAnalysis.isReachable) {
+      Statement resultStatement =
+          inferenceResult.hasChanged ? inferenceResult.statement : body;
+      // Create a synthetic return statement with the error.
+      Statement returnStatement = new ReturnStatement(inferrer.helper
+          .wrapInProblem(
+              new NullLiteral()..fileOffset = fileOffset,
+              templateImplicitReturnNull.withArguments(
+                  returnType, inferrer.library.isNonNullableByDefault),
+              fileOffset,
+              noLength))
+        ..fileOffset = fileOffset;
+      if (resultStatement is Block) {
+        resultStatement.statements.add(returnStatement);
+      } else {
+        resultStatement =
+            new Block(<Statement>[resultStatement, returnStatement])
+              ..fileOffset = fileOffset;
+      }
+      return new StatementInferenceResult.single(resultStatement);
+    }
+    return inferenceResult;
   }
 
   DartType _wrapAsyncOrGenerator(
@@ -429,8 +480,8 @@
       InferenceHelper helper, DartType declaredType, Expression initializer);
 
   /// Performs type inference on the given function body.
-  Statement inferFunctionBody(InferenceHelper helper, DartType returnType,
-      AsyncMarker asyncMarker, Statement body);
+  Statement inferFunctionBody(InferenceHelper helper, int fileOffset,
+      DartType returnType, AsyncMarker asyncMarker, Statement body);
 
   /// Performs type inference on the given constructor initializer.
   void inferInitializer(InferenceHelper helper, Initializer initializer);
@@ -663,8 +714,7 @@
       {int fileOffset,
       bool isReturnFromAsync: false,
       bool isVoidAllowed: false,
-      Template<Message Function(DartType, DartType, bool)> errorTemplate,
-      Template<Message Function(DartType, DartType, bool)> warningTemplate}) {
+      Template<Message Function(DartType, DartType, bool)> errorTemplate}) {
     assert(contextType != null);
 
     // We don't need to insert assignability checks when doing top level type
@@ -696,8 +746,7 @@
         preciseTypeErrorTemplate = _getPreciseTypeErrorTemplate(expression);
     AssignabilityKind kind = _computeAssignabilityKind(
         contextType, expressionType,
-        isStrongNullabilityMode:
-            isNonNullableByDefault && nnbdMode != NnbdMode.Weak,
+        isNonNullableByDefault: isNonNullableByDefault,
         isVoidAllowed: isVoidAllowed,
         isExpressionTypePrecise: preciseTypeErrorTemplate != null);
 
@@ -752,12 +801,6 @@
             typedTearoff.tearoffType, contextType, errorTemplate);
         break;
       case AssignabilityKind.unassignableCantTearoff:
-        // The first call to _computeAssignabilityKind is done for the purpose
-        // of code generation, and the inability to tear off from a
-        // potentially nullable receiver shouldn't arise as an issue in any
-        // mode other than the strong mode.
-        assert(isNonNullableByDefault && nnbdMode != NnbdMode.Weak);
-
         result = _wrapTearoffErrorExpression(
             expression, contextType, templateNullableTearoffError);
         break;
@@ -765,84 +808,6 @@
         return unhandled("${kind}", "ensureAssignable", fileOffset, helper.uri);
     }
 
-    // Report warnings in weak mode.
-    if (isNonNullableByDefault && nnbdMode == NnbdMode.Weak) {
-      AssignabilityKind weakKind = _computeAssignabilityKind(
-          contextType, expressionType,
-          isStrongNullabilityMode: true,
-          isVoidAllowed: isVoidAllowed,
-          isExpressionTypePrecise: preciseTypeErrorTemplate != null);
-      switch (weakKind) {
-        case AssignabilityKind.assignable:
-          // Do nothing if an error wouldn't be reported in the strong mode.
-          break;
-        case AssignabilityKind.assignableCast:
-          // Do nothing if an error wouldn't be reported in the strong mode.
-          break;
-        case AssignabilityKind.assignableTearoff:
-          // Do nothing if an error wouldn't be reported in the strong mode.
-          break;
-        case AssignabilityKind.assignableTearoffCast:
-          // Do nothing if an error wouldn't be reported in the strong mode.
-          break;
-        case AssignabilityKind.unassignable:
-          // Don't report the same problem twice.
-          if (kind == AssignabilityKind.unassignable) break;
-          if (contextType is! InvalidType && expressionType is! InvalidType) {
-            helper.addProblem(
-                (warningTemplate ?? templateInvalidAssignmentWarning)
-                    .withArguments(
-                        expressionType, contextType, isNonNullableByDefault),
-                fileOffset,
-                noLength);
-          }
-          break;
-        case AssignabilityKind.unassignableVoid:
-          // The NNBD feature can't cause this case..
-          return unhandled(
-              "${kind}", "ensureAssignable:weak", fileOffset, helper.uri);
-        case AssignabilityKind.unassignablePrecise:
-          // The NNBD feature can't cause this case..
-          return unhandled(
-              "${kind}", "ensureAssignable:weak", fileOffset, helper.uri);
-        case AssignabilityKind.unassignableTearoff:
-          // Don't report the same problem twice.
-          if (kind == AssignabilityKind.unassignableTearoff) break;
-
-          // The first handling of the error should have happened in the strong
-          // mode.
-          assert(nnbdMode == NnbdMode.Weak);
-
-          if (contextType is! InvalidType && expressionType is! InvalidType) {
-            TypedTearoff typedTearoff =
-                _tearOffCall(expression, expressionType, fileOffset);
-            helper.addProblem(
-                (warningTemplate ?? templateInvalidAssignmentWarning)
-                    .withArguments(typedTearoff.tearoffType, contextType,
-                        isNonNullableByDefault),
-                fileOffset,
-                noLength);
-          }
-          break;
-        case AssignabilityKind.unassignableCantTearoff:
-          // Don't report the same problem twice.
-          if (kind == AssignabilityKind.unassignableCantTearoff) break;
-
-          // The first handling of the error should have happened in the strong
-          // mode.
-          assert(nnbdMode == NnbdMode.Weak);
-
-          if (isNonNullableByDefault) {
-            result = _wrapTearoffErrorExpression(
-                expression, contextType, templateNullableTearoffWarning);
-          }
-          break;
-        default:
-          return unhandled(
-              "${kind}", "ensureAssignable:weak", fileOffset, helper.uri);
-      }
-    }
-
     return result;
   }
 
@@ -925,10 +890,10 @@
   /// The computation is side-effect free.
   AssignabilityKind _computeAssignabilityKind(
       DartType contextType, DartType expressionType,
-      {bool isStrongNullabilityMode,
+      {bool isNonNullableByDefault,
       bool isVoidAllowed,
       bool isExpressionTypePrecise}) {
-    assert(isStrongNullabilityMode != null);
+    assert(isNonNullableByDefault != null);
     assert(isVoidAllowed != null);
     assert(isExpressionTypePrecise != null);
 
@@ -943,7 +908,7 @@
       if (callMember is Procedure && callMember.kind == ProcedureKind.Method) {
         if (_shouldTearOffCall(contextType, expressionType)) {
           needsTearoff = true;
-          if (isStrongNullabilityMode &&
+          if (isNonNullableByDefault &&
               isPotentiallyNullable(expressionType, coreTypes.futureOrClass)) {
             return AssignabilityKind.unassignableCantTearoff;
           }
@@ -961,7 +926,7 @@
     {
       IsSubtypeOf result = typeSchemaEnvironment
           .performNullabilityAwareSubtypeCheck(expressionType, contextType);
-      bool isDirectlyAssignable = isStrongNullabilityMode
+      bool isDirectlyAssignable = isNonNullableByDefault
           ? result.isSubtypeWhenUsingNullabilities()
           : result.isSubtypeWhenIgnoringNullabilities();
       if (isDirectlyAssignable) {
@@ -971,7 +936,7 @@
       }
     }
 
-    bool isIndirectlyAssignable = isStrongNullabilityMode
+    bool isIndirectlyAssignable = isNonNullableByDefault
         ? expressionType is DynamicType
         : typeSchemaEnvironment
             .performNullabilityAwareSubtypeCheck(contextType, expressionType)
@@ -1156,8 +1121,8 @@
             }
             onType = inferredSubstitution
                 .substituteType(extensionBuilder.extension.onType);
-            List<DartType> instantiateToBoundTypeArguments =
-                calculateBounds(typeParameters, coreTypes.objectClass);
+            List<DartType> instantiateToBoundTypeArguments = calculateBounds(
+                typeParameters, coreTypes.objectClass, library.library);
             Substitution instantiateToBoundsSubstitution =
                 Substitution.fromPairs(
                     typeParameters, instantiateToBoundTypeArguments);
@@ -1168,6 +1133,7 @@
           if (typeSchemaEnvironment.isSubtypeOf(
               receiverType, onType, SubtypeCheckMode.ignoringNullabilities)) {
             ExtensionAccessCandidate candidate = new ExtensionAccessCandidate(
+                thisBuilder ?? otherBuilder,
                 onType,
                 onTypeInstantiateToBounds,
                 thisBuilder != null &&
@@ -1218,8 +1184,9 @@
       if (bestSoFar != null) {
         target = bestSoFar.target;
       } else {
-        // TODO(johnniwinther): Report a better error message when more than
-        // one potential targets were found.
+        if (noneMoreSpecific.isNotEmpty) {
+          target = new AmbiguousExtensionAccessTarget(noneMoreSpecific);
+        }
       }
     }
     return target;
@@ -1378,10 +1345,12 @@
     switch (target.kind) {
       case ObjectAccessTargetKind.callFunction:
         return receiverType;
+      case ObjectAccessTargetKind.invalid:
+        return const InvalidType();
       case ObjectAccessTargetKind.unresolved:
       case ObjectAccessTargetKind.dynamic:
-      case ObjectAccessTargetKind.invalid:
       case ObjectAccessTargetKind.missing:
+      case ObjectAccessTargetKind.ambiguous:
         return const DynamicType();
       case ObjectAccessTargetKind.never:
         return const NeverType(Nullability.nonNullable);
@@ -1488,6 +1457,7 @@
       case ObjectAccessTargetKind.never:
       case ObjectAccessTargetKind.invalid:
       case ObjectAccessTargetKind.missing:
+      case ObjectAccessTargetKind.ambiguous:
         return unknownFunction;
       case ObjectAccessTargetKind.instanceMember:
         return _getFunctionType(
@@ -1551,11 +1521,13 @@
         break;
       case ObjectAccessTargetKind.never:
         return const NeverType(Nullability.nonNullable);
+      case ObjectAccessTargetKind.invalid:
+        return const InvalidType();
       case ObjectAccessTargetKind.callFunction:
       case ObjectAccessTargetKind.unresolved:
       case ObjectAccessTargetKind.dynamic:
-      case ObjectAccessTargetKind.invalid:
       case ObjectAccessTargetKind.missing:
+      case ObjectAccessTargetKind.ambiguous:
         break;
     }
     return const DynamicType();
@@ -1585,12 +1557,14 @@
           return keyType;
         }
         break;
+      case ObjectAccessTargetKind.invalid:
+        return const InvalidType();
       case ObjectAccessTargetKind.callFunction:
       case ObjectAccessTargetKind.unresolved:
       case ObjectAccessTargetKind.dynamic:
       case ObjectAccessTargetKind.never:
-      case ObjectAccessTargetKind.invalid:
       case ObjectAccessTargetKind.missing:
+      case ObjectAccessTargetKind.ambiguous:
         break;
     }
     return const DynamicType();
@@ -1644,12 +1618,14 @@
             throw unhandled('$target', 'getFunctionType', null, null);
         }
         break;
+      case ObjectAccessTargetKind.invalid:
+        return const InvalidType();
       case ObjectAccessTargetKind.callFunction:
       case ObjectAccessTargetKind.unresolved:
       case ObjectAccessTargetKind.dynamic:
       case ObjectAccessTargetKind.never:
-      case ObjectAccessTargetKind.invalid:
       case ObjectAccessTargetKind.missing:
+      case ObjectAccessTargetKind.ambiguous:
         break;
     }
     return const DynamicType();
@@ -1700,12 +1676,14 @@
             throw unhandled('$target', 'getFunctionType', null, null);
         }
         break;
+      case ObjectAccessTargetKind.invalid:
+        return const InvalidType();
       case ObjectAccessTargetKind.callFunction:
       case ObjectAccessTargetKind.unresolved:
       case ObjectAccessTargetKind.dynamic:
       case ObjectAccessTargetKind.never:
-      case ObjectAccessTargetKind.invalid:
       case ObjectAccessTargetKind.missing:
+      case ObjectAccessTargetKind.ambiguous:
         break;
     }
     return const DynamicType();
@@ -1759,9 +1737,11 @@
       case ObjectAccessTargetKind.unresolved:
       case ObjectAccessTargetKind.dynamic:
       case ObjectAccessTargetKind.never:
-      case ObjectAccessTargetKind.invalid:
       case ObjectAccessTargetKind.missing:
+      case ObjectAccessTargetKind.ambiguous:
         return const DynamicType();
+      case ObjectAccessTargetKind.invalid:
+        return const InvalidType();
       case ObjectAccessTargetKind.instanceMember:
         Member interfaceMember = target.member;
         Class memberClass = interfaceMember.enclosingClass;
@@ -1825,61 +1805,6 @@
     }
   }
 
-  /// Adds an "as" check to a [MethodInvocation] if necessary due to
-  /// contravariance.
-  ///
-  /// The returned expression is the [AsExpression], if one was added; otherwise
-  /// it is the [MethodInvocation].
-  Expression handleInvocationContravariance(
-      MethodContravarianceCheckKind checkKind,
-      MethodInvocation desugaredInvocation,
-      Arguments arguments,
-      Expression expression,
-      DartType inferredType,
-      FunctionType functionType,
-      int fileOffset) {
-    switch (checkKind) {
-      case MethodContravarianceCheckKind.checkMethodReturn:
-        AsExpression replacement = new AsExpression(expression, inferredType)
-          ..isTypeError = true
-          ..isCovarianceCheck = true
-          ..isForNonNullableByDefault = isNonNullableByDefault
-          ..fileOffset = fileOffset;
-        if (instrumentation != null) {
-          int offset = arguments.fileOffset == -1
-              ? expression.fileOffset
-              : arguments.fileOffset;
-          instrumentation.record(uriForInstrumentation, offset, 'checkReturn',
-              new InstrumentationValueForType(inferredType));
-        }
-        return replacement;
-      case MethodContravarianceCheckKind.checkGetterReturn:
-        PropertyGet propertyGet = new PropertyGet(desugaredInvocation.receiver,
-            desugaredInvocation.name, desugaredInvocation.interfaceTarget);
-        AsExpression asExpression = new AsExpression(propertyGet, functionType)
-          ..isTypeError = true
-          ..isCovarianceCheck = true
-          ..isForNonNullableByDefault = isNonNullableByDefault
-          ..fileOffset = fileOffset;
-        MethodInvocation replacement = new MethodInvocation(
-            asExpression, callName, desugaredInvocation.arguments);
-        if (instrumentation != null) {
-          int offset = arguments.fileOffset == -1
-              ? expression.fileOffset
-              : arguments.fileOffset;
-          instrumentation.record(
-              uriForInstrumentation,
-              offset,
-              'checkGetterReturn',
-              new InstrumentationValueForType(functionType));
-        }
-        return replacement;
-      case MethodContravarianceCheckKind.none:
-        break;
-    }
-    return expression;
-  }
-
   /// Modifies a type as appropriate when inferring a declared variable's type.
   DartType inferDeclarationType(DartType initializerType,
       {bool forSyntheticVariable: false}) {
@@ -2033,21 +1958,23 @@
   }
 
   @override
-  Statement inferFunctionBody(InferenceHelper helper, DartType returnType,
-      AsyncMarker asyncMarker, Statement body) {
+  Statement inferFunctionBody(InferenceHelper helper, int fileOffset,
+      DartType returnType, AsyncMarker asyncMarker, Statement body) {
     assert(body != null);
     assert(closureContext == null);
     this.helper = helper;
     closureContext = new ClosureContext(this, asyncMarker, returnType, false);
     StatementInferenceResult result = inferStatement(body);
-    closureContext = null;
-    this.helper = null;
     if (dataForTesting != null) {
       if (!flowAnalysis.isReachable) {
         dataForTesting.flowAnalysisResult.functionBodiesThatDontComplete
             .add(body);
       }
     }
+    result =
+        closureContext.handleImplicitReturn(this, body, result, fileOffset);
+    closureContext = null;
+    this.helper = null;
     flowAnalysis.finish();
     return result.hasChanged ? result.statement : body;
   }
@@ -2060,7 +1987,8 @@
       DartType receiverType,
       bool skipTypeArgumentInference: false,
       bool isConst: false,
-      bool isImplicitExtensionMember: false}) {
+      bool isImplicitExtensionMember: false,
+      bool isImplicitCall: false}) {
     assert(
         returnType == null || !containsFreeFunctionTypeVariables(returnType),
         "Return type $returnType contains free variables."
@@ -2090,7 +2018,8 @@
         returnType: returnType,
         skipTypeArgumentInference: skipTypeArgumentInference,
         isConst: isConst,
-        isImplicitExtensionMember: isImplicitExtensionMember);
+        isImplicitExtensionMember: isImplicitExtensionMember,
+        isImplicitCall: isImplicitCall);
   }
 
   InvocationInferenceResult _inferGenericExtensionMethodInvocation(
@@ -2099,13 +2028,14 @@
       int offset,
       FunctionType calleeType,
       Arguments arguments,
-      Node targetName,
+      Name targetName,
       List<VariableDeclaration> hoistedExpressions,
       {bool isOverloadedArithmeticOperator: false,
       DartType receiverType,
       bool skipTypeArgumentInference: false,
       bool isConst: false,
-      bool isImplicitExtensionMember: false}) {
+      bool isImplicitExtensionMember: false,
+      bool isImplicitCall: false}) {
     FunctionType extensionFunctionType = new FunctionType(
         [calleeType.positionalParameters.first],
         const DynamicType(),
@@ -2121,7 +2051,8 @@
         extensionArguments, targetName, hoistedExpressions,
         skipTypeArgumentInference: skipTypeArgumentInference,
         receiverType: receiverType,
-        isImplicitExtensionMember: isImplicitExtensionMember);
+        isImplicitExtensionMember: isImplicitExtensionMember,
+        isImplicitCall: isImplicitCall);
     Substitution extensionSubstitution = Substitution.fromPairs(
         extensionFunctionType.typeParameters, extensionArguments.types);
 
@@ -2146,7 +2077,8 @@
         targetFunctionType, targetArguments, targetName, hoistedExpressions,
         isOverloadedArithmeticOperator: isOverloadedArithmeticOperator,
         skipTypeArgumentInference: skipTypeArgumentInference,
-        isConst: isConst);
+        isConst: isConst,
+        isImplicitCall: isImplicitCall);
     arguments.positional.clear();
     arguments.positional.addAll(extensionArguments.positional);
     arguments.positional.addAll(targetArguments.positional);
@@ -2175,7 +2107,8 @@
       DartType returnType,
       bool skipTypeArgumentInference: false,
       bool isConst: false,
-      bool isImplicitExtensionMember: false}) {
+      bool isImplicitExtensionMember: false,
+      bool isImplicitCall}) {
     assert(
         returnType == null || !containsFreeFunctionTypeVariables(returnType),
         "Return type $returnType contains free variables."
@@ -2424,28 +2357,27 @@
         "Inferred return type $inferredType contains free variables."
         "Inferred function type: $calleeType.");
 
-    if (isNonNullableByDefault) {
+    if (!isTopLevel && isNonNullableByDefault) {
       if (receiverType != null &&
           receiverType is! DynamicType &&
           isPotentiallyNullable(receiverType, coreTypes.futureOrClass) &&
           !matchesObjectMemberCall(targetName, inferredTypes,
               positionalArgumentTypes, namedArgumentTypes)) {
-        // Use length 1 for .call -- in most cases its name is skipped.
-        int errorSpanLength =
-            targetName == callName ? noLength : targetName.name.length;
-        if (nnbdMode == NnbdMode.Weak) {
-          helper.addProblem(
-              templateNullableMethodCallWarning.withArguments(
-                  targetName.name, receiverType, isNonNullableByDefault),
+        if (isImplicitCall) {
+          return new WrapInProblemInferenceResult(
+              inferredType,
+              templateNullableExpressionCallError.withArguments(
+                  receiverType, isNonNullableByDefault),
               offset,
-              errorSpanLength);
+              noLength,
+              helper);
         } else {
           return new WrapInProblemInferenceResult(
               inferredType,
               templateNullableMethodCallError.withArguments(
                   targetName.name, receiverType, isNonNullableByDefault),
               offset,
-              errorSpanLength,
+              targetName.name.length,
               helper);
         }
       }
@@ -2571,23 +2503,12 @@
         if ((isOptionalPositional || isOptionalNamed) &&
             isPotentiallyNonNullable(formal.type, coreTypes.futureOrClass) &&
             !formal.hasDeclaredInitializer) {
-          if (nnbdMode == NnbdMode.Weak) {
-            library.addProblem(
-                templateOptionalNonNullableWithoutInitializerWarning
-                    .withArguments(
-                        formal.name, formal.type, isNonNullableByDefault),
-                formal.fileOffset,
-                formal.name.length,
-                library.importUri);
-          } else {
-            library.addProblem(
-                templateOptionalNonNullableWithoutInitializerError
-                    .withArguments(
-                        formal.name, formal.type, isNonNullableByDefault),
-                formal.fileOffset,
-                formal.name.length,
-                library.importUri);
-          }
+          library.addProblem(
+              templateOptionalNonNullableWithoutInitializerError.withArguments(
+                  formal.name, formal.type, isNonNullableByDefault),
+              formal.fileOffset,
+              formal.name.length,
+              library.importUri);
         }
       }
     }
@@ -2596,21 +2517,12 @@
       for (VariableDeclarationImpl formal in function.namedParameters) {
         // Required named parameters shouldn't have initializers.
         if (formal.isRequired && formal.hasDeclaredInitializer) {
-          if (nnbdMode == NnbdMode.Weak) {
-            library.addProblem(
-                templateRequiredNamedParameterHasDefaultValueWarning
-                    .withArguments(formal.name),
-                formal.fileOffset,
-                formal.name.length,
-                library.importUri);
-          } else {
-            library.addProblem(
-                templateRequiredNamedParameterHasDefaultValueError
-                    .withArguments(formal.name),
-                formal.fileOffset,
-                formal.name.length,
-                library.importUri);
-          }
+          library.addProblem(
+              templateRequiredNamedParameterHasDefaultValueError
+                  .withArguments(formal.name),
+              formal.fileOffset,
+              formal.name.length,
+              library.importUri);
         }
       }
     }
@@ -2630,9 +2542,6 @@
         this, function.asyncMarker, returnContext, needToSetReturnType);
     this.closureContext = closureContext;
     StatementInferenceResult bodyResult = inferStatement(function.body);
-    if (bodyResult.hasChanged) {
-      function.body = bodyResult.statement..parent = function;
-    }
 
     // If the closure is declared with `async*` or `sync*`, let `M` be the
     // least upper bound of the types of the `yield` expressions in `B’`, or
@@ -2652,6 +2561,12 @@
           new InstrumentationValueForType(inferredReturnType));
       function.returnType = inferredReturnType;
     }
+    bodyResult = closureContext.handleImplicitReturn(
+        this, function.body, bodyResult, fileOffset);
+
+    if (bodyResult.hasChanged) {
+      function.body = bodyResult.statement..parent = function;
+    }
     this.closureContext = oldClosureContext;
     return function.computeFunctionType(library.nonNullable);
   }
@@ -2704,11 +2619,14 @@
       Name name,
       Arguments arguments,
       DartType typeContext,
-      List<VariableDeclaration> hoistedExpressions) {
+      List<VariableDeclaration> hoistedExpressions,
+      {bool isImplicitCall}) {
+    assert(isImplicitCall != null);
     InvocationInferenceResult result = inferInvocation(
         typeContext, fileOffset, unknownFunction, arguments, name,
         hoistedExpressions: hoistedExpressions,
-        receiverType: const DynamicType());
+        receiverType: const DynamicType(),
+        isImplicitCall: isImplicitCall);
     assert(name != equalsName);
     return createNullAwareExpressionInferenceResult(
         result.inferredType,
@@ -2725,10 +2643,14 @@
       Name name,
       Arguments arguments,
       DartType typeContext,
-      List<VariableDeclaration> hoistedExpressions) {
+      List<VariableDeclaration> hoistedExpressions,
+      {bool isImplicitCall}) {
+    assert(isImplicitCall != null);
     InvocationInferenceResult result = inferInvocation(
         typeContext, fileOffset, unknownFunction, arguments, name,
-        hoistedExpressions: hoistedExpressions, receiverType: receiverType);
+        hoistedExpressions: hoistedExpressions,
+        receiverType: receiverType,
+        isImplicitCall: isImplicitCall);
     assert(name != equalsName);
     return createNullAwareExpressionInferenceResult(
         result.inferredType,
@@ -2748,14 +2670,21 @@
       DartType typeContext,
       List<VariableDeclaration> hoistedExpressions,
       {bool isExpressionInvocation,
+      bool isImplicitCall,
       Name implicitInvocationPropertyName}) {
+    assert(target.isMissing || target.isAmbiguous);
     assert(isExpressionInvocation != null);
+    assert(isImplicitCall != null);
     Expression error = createMissingMethodInvocation(
         fileOffset, receiver, receiverType, name, arguments,
         isExpressionInvocation: isExpressionInvocation,
-        implicitInvocationPropertyName: implicitInvocationPropertyName);
+        implicitInvocationPropertyName: implicitInvocationPropertyName,
+        extensionAccessCandidates:
+            target.isAmbiguous ? target.candidates : null);
     inferInvocation(typeContext, fileOffset, unknownFunction, arguments, name,
-        hoistedExpressions: hoistedExpressions, receiverType: receiverType);
+        hoistedExpressions: hoistedExpressions,
+        receiverType: receiverType,
+        isImplicitCall: isExpressionInvocation || isImplicitCall);
     assert(name != equalsName);
     // TODO(johnniwinther): Use InvalidType instead.
     return createNullAwareExpressionInferenceResult(
@@ -2771,7 +2700,9 @@
       Name name,
       Arguments arguments,
       DartType typeContext,
-      List<VariableDeclaration> hoistedExpressions) {
+      List<VariableDeclaration> hoistedExpressions,
+      {bool isImplicitCall}) {
+    assert(isImplicitCall != null);
     assert(target.isExtensionMember);
     DartType calleeType = getGetterType(target, receiverType);
     FunctionType functionType = getFunctionType(target, receiverType);
@@ -2783,6 +2714,7 @@
           staticInvocation, calleeType, callName, arguments, typeContext,
           hoistedExpressions: hoistedExpressions,
           isExpressionInvocation: false,
+          isImplicitCall: true,
           implicitInvocationPropertyName: name);
     } else {
       StaticInvocation staticInvocation = transformExtensionMethodInvocation(
@@ -2791,7 +2723,8 @@
           fileOffset, functionType, staticInvocation.arguments, name,
           hoistedExpressions: hoistedExpressions,
           receiverType: receiverType,
-          isImplicitExtensionMember: true);
+          isImplicitExtensionMember: true,
+          isImplicitCall: isImplicitCall);
       if (!isTopLevel) {
         library.checkBoundsInStaticInvocation(staticInvocation,
             typeSchemaEnvironment, helper.uri, getTypeArgumentsInfo(arguments));
@@ -2809,12 +2742,16 @@
       ObjectAccessTarget target,
       Arguments arguments,
       DartType typeContext,
-      List<VariableDeclaration> hoistedExpressions) {
+      List<VariableDeclaration> hoistedExpressions,
+      {bool isImplicitCall}) {
+    assert(isImplicitCall != null);
     assert(target.isCallFunction);
     FunctionType functionType = getFunctionType(target, receiverType);
     InvocationInferenceResult result = inferInvocation(
         typeContext, fileOffset, functionType, arguments, callName,
-        hoistedExpressions: hoistedExpressions, receiverType: receiverType);
+        hoistedExpressions: hoistedExpressions,
+        receiverType: receiverType,
+        isImplicitCall: isImplicitCall);
     // TODO(johnniwinther): Check that type arguments against the bounds.
     return createNullAwareExpressionInferenceResult(
         result.inferredType,
@@ -2831,7 +2768,9 @@
       ObjectAccessTarget target,
       Arguments arguments,
       DartType typeContext,
-      List<VariableDeclaration> hoistedExpressions) {
+      List<VariableDeclaration> hoistedExpressions,
+      {bool isImplicitCall}) {
+    assert(isImplicitCall != null);
     assert(target.isInstanceMember);
     Procedure method = target.member;
     assert(method.kind == ProcedureKind.Method,
@@ -2870,7 +2809,9 @@
     }
     InvocationInferenceResult result = inferInvocation(
         typeContext, fileOffset, functionType, arguments, target.member?.name,
-        hoistedExpressions: hoistedExpressions, receiverType: receiverType);
+        hoistedExpressions: hoistedExpressions,
+        receiverType: receiverType,
+        isImplicitCall: isImplicitCall);
 
     Expression replacement;
     if (contravariantCheck) {
@@ -2968,7 +2909,7 @@
       }
     }
     ExpressionInferenceResult invocationResult = inferMethodInvocation(
-        fileOffset,
+        arguments.fileOffset,
         const Link<NullAwareGuard>(),
         propertyGet,
         calleeType,
@@ -2977,6 +2918,7 @@
         typeContext,
         hoistedExpressions: hoistedExpressions,
         isExpressionInvocation: false,
+        isImplicitCall: true,
         implicitInvocationPropertyName: getter.name);
 
     if (isExpressionInvocation) {
@@ -3081,7 +3023,7 @@
     }
 
     ExpressionInferenceResult invocationResult = inferMethodInvocation(
-        fileOffset,
+        arguments.fileOffset,
         const Link<NullAwareGuard>(),
         propertyGet,
         calleeType,
@@ -3089,6 +3031,7 @@
         arguments,
         typeContext,
         isExpressionInvocation: false,
+        isImplicitCall: true,
         hoistedExpressions: hoistedExpressions,
         implicitInvocationPropertyName: field.name);
 
@@ -3134,9 +3077,11 @@
       Arguments arguments,
       DartType typeContext,
       {bool isExpressionInvocation,
+      bool isImplicitCall,
       Name implicitInvocationPropertyName,
       List<VariableDeclaration> hoistedExpressions}) {
     assert(isExpressionInvocation != null);
+    assert(isImplicitCall != null);
     ObjectAccessTarget target = findInterfaceMember(
         receiverType, name, fileOffset,
         instrumented: true, includeExtensionMethods: true);
@@ -3164,7 +3109,8 @@
                 target,
                 arguments,
                 typeContext,
-                hoistedExpressions);
+                hoistedExpressions,
+                isImplicitCall: isImplicitCall);
           }
         } else {
           return _inferInstanceFieldInvocation(
@@ -3181,7 +3127,8 @@
         break;
       case ObjectAccessTargetKind.callFunction:
         return _inferFunctionInvocation(fileOffset, nullAwareGuards, receiver,
-            receiverType, target, arguments, typeContext, hoistedExpressions);
+            receiverType, target, arguments, typeContext, hoistedExpressions,
+            isImplicitCall: isImplicitCall);
       case ObjectAccessTargetKind.extensionMember:
         return _inferExtensionInvocation(
             fileOffset,
@@ -3192,7 +3139,9 @@
             name,
             arguments,
             typeContext,
-            hoistedExpressions);
+            hoistedExpressions,
+            isImplicitCall: isImplicitCall);
+      case ObjectAccessTargetKind.ambiguous:
       case ObjectAccessTargetKind.missing:
         return _inferMissingInvocation(
             fileOffset,
@@ -3205,15 +3154,18 @@
             typeContext,
             hoistedExpressions,
             isExpressionInvocation: isExpressionInvocation,
+            isImplicitCall: isImplicitCall,
             implicitInvocationPropertyName: implicitInvocationPropertyName);
       case ObjectAccessTargetKind.dynamic:
       case ObjectAccessTargetKind.invalid:
       case ObjectAccessTargetKind.unresolved:
         return _inferDynamicInvocation(fileOffset, nullAwareGuards, receiver,
-            name, arguments, typeContext, hoistedExpressions);
+            name, arguments, typeContext, hoistedExpressions,
+            isImplicitCall: isExpressionInvocation || isImplicitCall);
       case ObjectAccessTargetKind.never:
         return _inferNeverInvocation(fileOffset, nullAwareGuards, receiver,
-            receiverType, name, arguments, typeContext, hoistedExpressions);
+            receiverType, name, arguments, typeContext, hoistedExpressions,
+            isImplicitCall: isImplicitCall);
     }
     return unhandled(
         '$target', 'inferMethodInvocation', fileOffset, uriForInstrumentation);
@@ -3604,115 +3556,175 @@
     }
   }
 
+  Expression _reportMissingOrAmbiguousMember(
+      int fileOffset,
+      int length,
+      DartType receiverType,
+      Name name,
+      List<ExtensionAccessCandidate> extensionAccessCandidates,
+      Template<Message Function(String, DartType, bool)> missingTemplate,
+      Template<Message Function(String, DartType, bool)> ambiguousTemplate) {
+    List<LocatedMessage> context;
+    Template<Message Function(String, DartType, bool)> template =
+        missingTemplate;
+    if (extensionAccessCandidates != null) {
+      context = extensionAccessCandidates
+          .map((ExtensionAccessCandidate c) =>
+              messageAmbiguousExtensionCause.withLocation(
+                  c.memberBuilder.fileUri,
+                  c.memberBuilder.charOffset,
+                  name == unaryMinusName ? 1 : c.memberBuilder.name.length))
+          .toList();
+      template = ambiguousTemplate;
+    }
+    return helper.buildProblem(
+        template.withArguments(name.name, resolveTypeParameter(receiverType),
+            isNonNullableByDefault),
+        fileOffset,
+        length,
+        context: context);
+  }
+
   Expression createMissingMethodInvocation(int fileOffset, Expression receiver,
       DartType receiverType, Name name, Arguments arguments,
-      {bool isExpressionInvocation, Name implicitInvocationPropertyName}) {
+      {bool isExpressionInvocation,
+      Name implicitInvocationPropertyName,
+      List<ExtensionAccessCandidate> extensionAccessCandidates}) {
     assert(isExpressionInvocation != null);
     if (isTopLevel) {
       return engine.forest
           .createMethodInvocation(fileOffset, receiver, name, arguments);
     } else if (implicitInvocationPropertyName != null) {
+      assert(extensionAccessCandidates == null);
       return helper.buildProblem(
           templateInvokeNonFunction
               .withArguments(implicitInvocationPropertyName.name),
           fileOffset,
           implicitInvocationPropertyName.name.length);
     } else {
-      return helper.buildProblem(
-          templateUndefinedMethod.withArguments(name.name,
-              resolveTypeParameter(receiverType), isNonNullableByDefault),
+      return _reportMissingOrAmbiguousMember(
           fileOffset,
-          isExpressionInvocation ? noLength : name.name.length);
+          isExpressionInvocation ? noLength : name.name.length,
+          receiverType,
+          name,
+          extensionAccessCandidates,
+          templateUndefinedMethod,
+          templateAmbiguousExtensionMethod);
     }
   }
 
   Expression createMissingPropertyGet(int fileOffset, Expression receiver,
-      DartType receiverType, Name propertyName) {
+      DartType receiverType, Name propertyName,
+      {List<ExtensionAccessCandidate> extensionAccessCandidates}) {
     if (isTopLevel) {
       return engine.forest
           .createPropertyGet(fileOffset, receiver, propertyName);
     } else {
-      return helper.buildProblem(
-          templateUndefinedGetter.withArguments(propertyName.name,
-              resolveTypeParameter(receiverType), isNonNullableByDefault),
+      return _reportMissingOrAmbiguousMember(
           fileOffset,
-          propertyName.name.length);
+          propertyName.name.length,
+          receiverType,
+          propertyName,
+          extensionAccessCandidates,
+          templateUndefinedGetter,
+          templateAmbiguousExtensionProperty);
     }
   }
 
   Expression createMissingPropertySet(int fileOffset, Expression receiver,
       DartType receiverType, Name propertyName, Expression value,
-      {bool forEffect}) {
+      {bool forEffect,
+      List<ExtensionAccessCandidate> extensionAccessCandidates}) {
     assert(forEffect != null);
     if (isTopLevel) {
       return engine.forest.createPropertySet(
           fileOffset, receiver, propertyName, value,
           forEffect: forEffect);
     } else {
-      return helper.buildProblem(
-          templateUndefinedSetter.withArguments(propertyName.name,
-              resolveTypeParameter(receiverType), isNonNullableByDefault),
+      return _reportMissingOrAmbiguousMember(
           fileOffset,
-          propertyName.name.length);
+          propertyName.name.length,
+          receiverType,
+          propertyName,
+          extensionAccessCandidates,
+          templateUndefinedSetter,
+          templateAmbiguousExtensionProperty);
     }
   }
 
   Expression createMissingIndexGet(int fileOffset, Expression receiver,
-      DartType receiverType, Expression index) {
+      DartType receiverType, Expression index,
+      {List<ExtensionAccessCandidate> extensionAccessCandidates}) {
     if (isTopLevel) {
       return engine.forest.createIndexGet(fileOffset, receiver, index);
     } else {
-      return helper.buildProblem(
-          templateUndefinedMethod.withArguments(indexGetName.name,
-              resolveTypeParameter(receiverType), isNonNullableByDefault),
+      return _reportMissingOrAmbiguousMember(
           fileOffset,
-          noLength);
+          noLength,
+          receiverType,
+          indexGetName,
+          extensionAccessCandidates,
+          templateUndefinedOperator,
+          templateAmbiguousExtensionOperator);
     }
   }
 
   Expression createMissingIndexSet(int fileOffset, Expression receiver,
       DartType receiverType, Expression index, Expression value,
-      {bool forEffect, bool readOnlyReceiver}) {
+      {bool forEffect,
+      bool readOnlyReceiver,
+      List<ExtensionAccessCandidate> extensionAccessCandidates}) {
     assert(forEffect != null);
     assert(readOnlyReceiver != null);
     if (isTopLevel) {
       return engine.forest.createIndexSet(fileOffset, receiver, index, value,
           forEffect: forEffect, readOnlyReceiver: readOnlyReceiver);
     } else {
-      return helper.buildProblem(
-          templateUndefinedMethod.withArguments(indexSetName.name,
-              resolveTypeParameter(receiverType), isNonNullableByDefault),
+      return _reportMissingOrAmbiguousMember(
           fileOffset,
-          noLength);
+          noLength,
+          receiverType,
+          indexSetName,
+          extensionAccessCandidates,
+          templateUndefinedOperator,
+          templateAmbiguousExtensionOperator);
     }
   }
 
   Expression createMissingBinary(int fileOffset, Expression left,
-      DartType leftType, Name binaryName, Expression right) {
+      DartType leftType, Name binaryName, Expression right,
+      {List<ExtensionAccessCandidate> extensionAccessCandidates}) {
     assert(binaryName != equalsName);
     if (isTopLevel) {
       return engine.forest.createMethodInvocation(fileOffset, left, binaryName,
           engine.forest.createArguments(fileOffset, <Expression>[right]));
     } else {
-      return helper.buildProblem(
-          templateUndefinedMethod.withArguments(binaryName.name,
-              resolveTypeParameter(leftType), isNonNullableByDefault),
+      return _reportMissingOrAmbiguousMember(
           fileOffset,
-          binaryName.name.length);
+          binaryName.name.length,
+          leftType,
+          binaryName,
+          extensionAccessCandidates,
+          templateUndefinedOperator,
+          templateAmbiguousExtensionOperator);
     }
   }
 
   Expression createMissingUnary(int fileOffset, Expression expression,
-      DartType expressionType, Name unaryName) {
+      DartType expressionType, Name unaryName,
+      {List<ExtensionAccessCandidate> extensionAccessCandidates}) {
     if (isTopLevel) {
       return new UnaryExpression(unaryName, expression)
         ..fileOffset = fileOffset;
     } else {
-      return helper.buildProblem(
-          templateUndefinedMethod.withArguments(unaryName.name,
-              resolveTypeParameter(expressionType), isNonNullableByDefault),
+      return _reportMissingOrAmbiguousMember(
           fileOffset,
-          unaryName == unaryMinusName ? 1 : unaryName.name.length);
+          unaryName == unaryMinusName ? 1 : unaryName.name.length,
+          expressionType,
+          unaryName,
+          extensionAccessCandidates,
+          templateUndefinedOperator,
+          templateAmbiguousExtensionOperator);
     }
   }
 }
@@ -3863,7 +3875,8 @@
       p.bound = substitution.substituteType(p.bound);
     }
     // Use instantiate to bounds.
-    List<DartType> bounds = calculateBounds(parameters, coreTypes.objectClass);
+    List<DartType> bounds = calculateBounds(
+        parameters, coreTypes.objectClass, classNode.enclosingLibrary);
     for (int i = 0; i < mixedInType.typeArguments.length; ++i) {
       mixedInType.typeArguments[i] = bounds[i];
     }
@@ -4101,6 +4114,7 @@
   never,
   invalid,
   missing,
+  ambiguous,
   // TODO(johnniwinther): Remove this.
   unresolved,
 }
@@ -4181,6 +4195,14 @@
   /// Returns `true` if this is an access with no target.
   bool get isMissing => kind == ObjectAccessTargetKind.missing;
 
+  /// Returns `true` if this is an access with no unambiguous target. This
+  /// occurs when an implicit extension access is ambiguous.
+  bool get isAmbiguous => kind == ObjectAccessTargetKind.ambiguous;
+
+  /// Returns the candidates for an ambiguous extension access.
+  List<ExtensionAccessCandidate> get candidates =>
+      throw new UnsupportedError('ObjectAccessTarget.candidates');
+
   /// Returns the original procedure kind, if this is an extension method
   /// target.
   ///
@@ -4223,14 +4245,26 @@
       '$inferredExtensionTypeArguments)';
 }
 
+class AmbiguousExtensionAccessTarget extends ObjectAccessTarget {
+  @override
+  final List<ExtensionAccessCandidate> candidates;
+
+  AmbiguousExtensionAccessTarget(this.candidates)
+      : super.internal(ObjectAccessTargetKind.ambiguous, null);
+
+  @override
+  String toString() => 'AmbiguousExtensionAccessTarget($kind,$candidates)';
+}
+
 class ExtensionAccessCandidate {
+  final MemberBuilder memberBuilder;
   final bool isPlatform;
   final DartType onType;
   final DartType onTypeInstantiateToBounds;
   final ObjectAccessTarget target;
 
-  ExtensionAccessCandidate(
-      this.onType, this.onTypeInstantiateToBounds, this.target,
+  ExtensionAccessCandidate(this.memberBuilder, this.onType,
+      this.onTypeInstantiateToBounds, this.target,
       {this.isPlatform})
       : assert(isPlatform != null);
 
diff --git a/pkg/front_end/lib/src/fasta/type_inference/type_schema.dart b/pkg/front_end/lib/src/fasta/type_inference/type_schema.dart
index a632f1a..48410b5 100644
--- a/pkg/front_end/lib/src/fasta/type_inference/type_schema.dart
+++ b/pkg/front_end/lib/src/fasta/type_inference/type_schema.dart
@@ -86,6 +86,11 @@
 
   @override
   UnknownType withNullability(Nullability nullability) => this;
+
+  @override
+  String toString() {
+    return "UnknownType()";
+  }
 }
 
 /// Visitor that computes [isKnown].
diff --git a/pkg/front_end/messages.status b/pkg/front_end/messages.status
index adb3a6e..c88c6a6 100644
--- a/pkg/front_end/messages.status
+++ b/pkg/front_end/messages.status
@@ -14,6 +14,9 @@
 AbstractRedirectedClassInstantiation/example: Fail
 AccessError/analyzerCode: Fail
 AccessError/example: Fail
+AmbiguousExtensionMethod/analyzerCode: Fail
+AmbiguousExtensionOperator/analyzerCode: Fail
+AmbiguousExtensionProperty/analyzerCode: Fail
 AmbiguousSupertypes/example: Fail
 AnnotationOnEnumConstant/example: Fail
 AnnotationOnFunctionTypeTypeVariable/analyzerCode: Fail
@@ -223,6 +226,8 @@
 ExportOptOutFromOptIn/part_wrapped_script: Fail
 ExpressionNotMetadata/analyzerCode: Fail
 ExpressionNotMetadata/example: Fail
+ExtendFunction/part_wrapped_script: Fail
+ExtendFunction/script: Fail # TODO(johnniwinther): This message is currently ignored.
 ExtendingEnum/example: Fail
 ExtendingRestricted/example: Fail
 ExtendsDynamic/analyzerCode: Fail # Feature not yet in analyzer.
@@ -340,6 +345,8 @@
 IllegalRecursiveType/part_wrapped_script: Fail
 IllegalRecursiveType/script: Fail
 IllegalSyncGeneratorVoidReturnType/analyzerCode: Fail # The analyzer doesn't report this error.
+ImplementFunction/part_wrapped_script: Fail
+ImplementFunction/script: Fail # TODO(johnniwinther): This message is currently ignored.
 ImplementsBeforeExtends/part_wrapped_script: Fail
 ImplementsBeforeExtends/script: Fail
 ImplementsBeforeOn/part_wrapped_script: Fail
@@ -360,6 +367,7 @@
 ImplicitCallOfNonMethod/example: Fail
 ImplicitMixinOverride/analyzerCode: Fail
 ImplicitMixinOverride/example: Fail
+ImplicitReturnNull/analyzerCode: Fail
 ImportAfterPart/part_wrapped_script1: Fail
 ImportAfterPart/script1: Fail
 IncompatibleRedirecteeFunctionType/part_wrapped_script6: Fail
@@ -451,6 +459,8 @@
 MissingPartOf/part_wrapped_script: Fail # Using 'part' in the (now) part.
 MissingPrefixInDeferredImport/example: Fail
 MixinDeclaresConstructor/example: Fail
+MixinFunction/part_wrapped_script: Fail
+MixinFunction/script: Fail # TODO(johnniwinther): This message is currently ignored.
 MixinInferenceNoMatchingClass/example: Fail
 ModifierOutOfOrder/part_wrapped_script1: Fail
 ModifierOutOfOrder/script1: Fail
@@ -482,8 +492,9 @@
 NonNullAwareSpreadIsNull/analyzerCode: Fail # There's no analyzer code for that error yet.
 NonNullableInNullAware/analyzerCode: Fail
 NonNullableInNullAware/example: Fail
+NonNullableLateDefinitelyAssignedError/analyzerCode: Fail
+NonNullableLateDefinitelyUnassignedError/analyzerCode: Fail
 NonNullableNotAssignedError/analyzerCode: Fail
-NonNullableNotAssignedError/example: Fail
 NonNullableNotAssignedWarning/analyzerCode: Fail
 NonNullableNotAssignedWarning/example: Fail
 NonNullableOptOut/analyzerCode: Fail
@@ -540,6 +551,7 @@
 OverrideFewerNamedArguments/example: Fail
 OverrideFewerPositionalArguments/example: Fail
 OverrideMismatchNamedParameter/example: Fail
+OverrideMismatchRequiredNamedParameter/analyzerCode: Fail
 OverrideMoreRequiredArguments/example: Fail
 OverrideTypeMismatchParameter/example: Fail
 OverrideTypeMismatchParameterWarning/example: Fail
@@ -651,6 +663,7 @@
 TypeVariableSameNameAsEnclosing/example: Fail
 TypedefNotFunction/example: Fail
 TypedefNotType/example: Fail # Feature not yet enabled by default.
+TypedefNullableType/analyzerCode: Fail
 UnexpectedToken/part_wrapped_script1: Fail
 UnexpectedToken/script1: Fail
 UnmatchedToken/part_wrapped_script1: Fail
diff --git a/pkg/front_end/messages.yaml b/pkg/front_end/messages.yaml
index 12dc0e6..a2740b1 100644
--- a/pkg/front_end/messages.yaml
+++ b/pkg/front_end/messages.yaml
@@ -2007,6 +2007,10 @@
   template: "This is the inherited member."
   severity: CONTEXT
 
+DeclaredMemberConflictsWithInheritedMembersCause:
+  template: "This is one of the inherited members."
+  severity: CONTEXT
+
 InheritedMembersConflict:
   template: "Can't inherit members that conflict with each other."
   analyzerCode: CONFLICTS_WITH_INHERITED_MEMBER
@@ -2080,31 +2084,25 @@
   tip: "Change to a supertype of '#type2', or, for a covariant parameter, a subtype."
   analyzerCode: INVALID_METHOD_OVERRIDE
 
-OverrideTypeMismatchParameterWarning:
-  template: "The parameter '#name' of the method '#name2' has type '#type', which does not match the corresponding type, '#type2', in the overridden method, '#name3'."
-  tip: "Change to a supertype of '#type2', or, for a covariant parameter, a subtype."
-  severity: WARNING
-  analyzerCode: INVALID_METHOD_OVERRIDE
-
 OverrideTypeMismatchReturnType:
   template: "The return type of the method '#name' is '#type', which does not match the return type, '#type2', of the overridden method, '#name2'."
   tip: "Change to a subtype of '#type2'."
   analyzerCode: INVALID_METHOD_OVERRIDE
 
-OverrideTypeMismatchReturnTypeWarning:
-  template: "The return type of the method '#name' is '#type', which does not match the return type, '#type2', of the overridden method, '#name2'."
-  tip: "Change to a subtype of '#type2'."
-  severity: WARNING
-  analyzerCode: INVALID_METHOD_OVERRIDE
-
 OverrideTypeMismatchSetter:
   template: "The field '#name' has type '#type', which does not match the corresponding type, '#type2', in the overridden setter, '#name2'."
   analyzerCode: INVALID_METHOD_OVERRIDE
 
-OverrideTypeMismatchSetterWarning:
-  template: "The field '#name' has type '#type', which does not match the corresponding type, '#type2', in the overridden setter, '#name2'."
-  severity: WARNING
-  analyzerCode: INVALID_METHOD_OVERRIDE
+OverrideMismatchRequiredNamedParameter:
+  template: "The required named parameter '#name' in method '#name2' is not required in overridden method '#name3'."
+  configuration: nnbd-strong
+  script: |
+    abstract class A {
+      method({int? a});
+    }
+    abstract class B implements A {
+      method({required int? a});
+    }
 
 PartOfSelf:
   template: "A file can't be a part of itself."
@@ -2198,6 +2196,11 @@
   template: "Can't create typedef from non-type."
   analyzerCode: INVALID_TYPE_IN_TYPEDEF
 
+TypedefNullableType:
+  template: "Can't create typedef from nullable type."
+  configuration: nnbd-strong
+  script: typedef F = void Function()?;
+
 LibraryDirectiveNotFirst:
   index: 37
   template: "The library directive must appear before all other directives."
@@ -2781,10 +2784,6 @@
 ConstConstructorLateFinalFieldError:
   template: "Constructor is marked 'const' so fields can't be late."
 
-ConstConstructorLateFinalFieldWarning:
-  template: "Constructor is marked 'const' and some fields are late."
-  severity: WARNING
-
 ConstConstructorLateFinalFieldCause:
   template: "Field is late, but constructor is 'const'."
   severity: CONTEXT
@@ -2923,10 +2922,6 @@
       i = 1.5;
     }
 
-InvalidAssignmentWarning:
-  template: "Assigning value of type '#type' to a variable of type '#type2'."
-  severity: WARNING
-
 PatchClassTypeVariablesMismatch:
   template: "A patch class must have the same number of type variables as its origin class."
 
@@ -3031,6 +3026,57 @@
       c.foo();
     }
 
+UndefinedOperator:
+  template: "The operator '#name' isn't defined for the class '#type'."
+  tip: "Try correcting the operator to an existing operator, or defining a '#name' operator."
+  analyzerCode: UNDEFINED_METHOD
+  script: >
+    class C {}
+    main() {
+      C c;
+      c + 0;
+    }
+
+AmbiguousExtensionMethod:
+  template: "The method '#name' is defined in multiple extensions for '#type' and neither is more specific."
+  tip: "Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope."
+  script: |
+    class C {}
+    extension A on C { method() {} }
+    extension B on C { method() {} }
+    main() {
+      C c = new C();
+      c.method();
+    }
+
+AmbiguousExtensionProperty:
+  template: "The property '#name' is defined in multiple extensions for '#type' and neither is more specific."
+  tip: "Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope."
+  script: |
+    class C {}
+    extension A on C { get property => null; }
+    extension B on C { set property(_) {} }
+    main() {
+      C c = new C();
+      c.property;
+    }
+
+AmbiguousExtensionOperator:
+  template: "The operator '#name' is defined in multiple extensions for '#type' and neither is more specific."
+  tip: "Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope."
+  script: |
+    class C {}
+    extension A on C { operator +(int i) {} }
+    extension B on C { operator +(int i) {}  }
+    main() {
+      C c = new C();
+      c + 0;
+    }
+
+AmbiguousExtensionCause:
+  template: "This is one of the extension members."
+  severity: CONTEXT
+
 SourceOutlineSummary:
   template: |
     Built outlines for #count compilation units (#count2 bytes) in #num1%.3ms, that is,
@@ -3301,6 +3347,12 @@
   analyzerCode: RETURN_WITHOUT_VALUE
   declaration: "int foo() { return; }"
 
+ImplicitReturnNull:
+  template: "A non-null value must be returned since the return type '#type' doesn't allow null."
+  configuration: nnbd-strong
+  script: |
+    String method() {}
+
 RethrowNotCatch:
   template: "'rethrow' can only be used in catch clauses."
   analyzerCode: RETHROW_OUTSIDE_CATCH
@@ -3395,11 +3447,6 @@
       }
       class B<T extends int, S extends String> implements A<T> {}
 
-IncompatibleRedirecteeFunctionTypeWarning:
-  template: "The constructor function type '#type' isn't a subtype of '#type2'."
-  severity: WARNING
-  analyzerCode: REDIRECT_TO_INVALID_TYPE
-
 RedirectingFactoryIncompatibleTypeArgument:
   template: "The type '#type' doesn't extend '#type2'."
   tip: "Try using a different type as argument."
@@ -3411,12 +3458,6 @@
       }
       class B<T extends int, S extends String> implements A<T> {}
 
-RedirectingFactoryIncompatibleTypeArgumentWarning:
-  template: "The type '#type' doesn't extend '#type2'."
-  tip: "Try using a different type as argument."
-  severity: WARNING
-  analyzerCode: TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
-
 SyntheticToken:
   template: "This couldn't be parsed."
   frontendInternal: true
@@ -3429,12 +3470,6 @@
     class C<T extends num> {}
     main() { new C<String>(); }
 
-IncorrectTypeArgumentWarning:
-  template: "Type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2'."
-  tip: "Try changing type arguments so that they conform to the bounds."
-  severity: WARNING
-  analyzerCode: TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
-
 IncorrectTypeArgumentQualified:
   template: "Type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#type3.#name2'."
   tip: "Try changing type arguments so that they conform to the bounds."
@@ -3443,12 +3478,6 @@
     class C<T> { foo<U extends num>() {} }
     main() { new C<String>().foo<String>(); }
 
-IncorrectTypeArgumentQualifiedWarning:
-  template: "Type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#type3.#name2'."
-  tip: "Try changing type arguments so that they conform to the bounds."
-  severity: WARNING
-  analyzerCode: TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
-
 IncorrectTypeArgumentInSupertype:
   template: "Type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2' in the supertype '#name3' of class '#name4'."
   tip: "Try changing type arguments so that they conform to the bounds."
@@ -3457,12 +3486,6 @@
     class A<T extends num> {}
     class B extends A<String> {}
 
-IncorrectTypeArgumentInSupertypeWarning:
-  template: "Type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2' in the supertype '#name3' of class '#name4'."
-  tip: "Try changing type arguments so that they conform to the bounds."
-  severity: WARNING
-  analyzerCode: TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
-
 IncorrectTypeArgumentInReturnType:
   template: "Type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2' in the return type."
   tip: "Try changing type arguments so that they conform to the bounds."
@@ -3471,12 +3494,6 @@
     class A<T extends num> {}
     A<String> foo() => null;
 
-IncorrectTypeArgumentInReturnTypeWarning:
-  template: "Type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2' in the return type."
-  tip: "Try changing type arguments so that they conform to the bounds."
-  severity: WARNING
-  analyzerCode: TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
-
 IncorrectTypeArgumentInferred:
   template: "Inferred type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2'."
   tip: "Try specifying type arguments explicitly so that they conform to the bounds."
@@ -3485,12 +3502,6 @@
     void foo<T extends num>(T t) {}
     main() { foo("bar"); }
 
-IncorrectTypeArgumentInferredWarning:
-  template: "Inferred type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2'."
-  tip: "Try specifying type arguments explicitly so that they conform to the bounds."
-  severity: WARNING
-  analyzerCode: TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
-
 IncorrectTypeArgumentQualifiedInferred:
   template: "Inferred type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#type3.#name2'."
   tip: "Try specifying type arguments explicitly so that they conform to the bounds."
@@ -3499,12 +3510,6 @@
     class C<T> { foo<U extends num>(U u) {} }
     main() { new C<String>().foo(""); }
 
-IncorrectTypeArgumentQualifiedInferredWarning:
-  template: "Inferred type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#type3.#name2'."
-  tip: "Try specifying type arguments explicitly so that they conform to the bounds."
-  severity: WARNING
-  analyzerCode: TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
-
 IncorrectTypeArgumentInSupertypeInferred:
   template: "Inferred type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2' in the supertype '#name3' of class '#name4'."
   tip: "Try specifying type arguments explicitly so that they conform to the bounds."
@@ -3513,12 +3518,6 @@
     class A<T extends A<T>> {}
     class B extends A {}
 
-IncorrectTypeArgumentInSupertypeInferredWarning:
-  template: "Inferred type argument '#type' doesn't conform to the bound '#type2' of the type variable '#name' on '#name2' in the supertype '#name3' of class '#name4'."
-  tip: "Try specifying type arguments explicitly so that they conform to the bounds."
-  severity: WARNING
-  analyzerCode: TYPE_ARGUMENT_NOT_MATCHING_BOUNDS
-
 IncorrectTypeArgumentVariable:
   template: "This is the type variable whose bound isn't conformed to."
   severity: CONTEXT
@@ -3894,64 +3893,29 @@
   template: "Property '#name' cannot be accessed on '#type' because it is potentially null."
   tip: "Try accessing using ?. instead."
 
-NullablePropertyAccessWarning:
-  template: "Property '#name' is accessed on '#type' which is potentially null."
-  tip: "Try accessing using ?. instead."
-  severity: WARNING
-
 NullableMethodCallError:
   template: "Method '#name' cannot be called on '#type' because it is potentially null."
   tip: "Try calling using ?. instead."
 
-NullableMethodCallWarning:
-  template: "Method '#name' is called on '#type' which is potentially null."
-  tip: "Try calling using ?. instead."
-  severity: WARNING
-
 NullableExpressionCallError:
   template: "Can't use an expression of type '#type' as a function because it's potentially null."
   tip: "Try calling using ?.call instead."
 
-NullableExpressionCallWarning:
-  template: "Expression of type '#type' is used as a function, but it's potentially null."
-  tip: "Try calling using ?.call instead."
-  severity: WARNING
-
 NullableOperatorCallError:
   template: "Operator '#name' cannot be called on '#type' because it is potentially null."
 
-NullableOperatorCallWarning:
-  template: "Operator '#name' is called on '#type' which is potentially null."
-  severity: WARNING
-
 NullableTearoffError:
   template: "Can't tear off method '#name' from a potentially null value."
 
-NullableTearoffWarning:
-  template: "Tearing off method '#name' from a potentially null value."
-  severity: WARNING
-
 ThrowingNotAssignableToObjectError:
   template: "Can't throw a value of '#type' since it is neither dynamic nor non-nullable."
 
-ThrowingNotAssignableToObjectWarning:
-  template: "Throwing a value of '#type' that is neither dynamic nor non-nullable."
-  severity: WARNING
-
 RequiredNamedParameterHasDefaultValueError:
   template: "Named parameter '#name' is required and can't have a default value."
 
-RequiredNamedParameterHasDefaultValueWarning:
-  template: "Named parameter '#name' is required and has a default value."
-  severity: WARNING
-
 ValueForRequiredParameterNotProvidedError:
   template: "Required named parameter '#name' must be provided."
 
-ValueForRequiredParameterNotProvidedWarning:
-  template: "Missing required named parameter '#name'."
-  severity: WARNING
-
 OptionalNonNullableWithoutInitializerError:
   template: "Optional parameter '#name' should have a default value because its type '#type' doesn't allow null."
   configuration: nnbd-strong
@@ -3959,28 +3923,12 @@
     - method1({int a}) {}
     - method2([int a]) {}
 
-OptionalNonNullableWithoutInitializerWarning:
-  template: "Optional parameter '#name' doesn't have a default value and its type '#type' doesn't allow null."
-  configuration: nnbd-weak
-  severity: WARNING
-  script:
-    - method1({int a}) {}
-    - method2([int a]) {}
-
 FieldNonNullableWithoutInitializerError:
   template: "Field '#name' should be initialized because its type '#type' doesn't allow null."
 
-FieldNonNullableWithoutInitializerWarning:
-  template: "Field '#name' isn't initialized and its type '#type' doesn't allow null."
-  severity: WARNING
-
 FieldNonNullableNotInitializedByConstructorError:
   template: "This constructor should initialize field '#name' because its type '#type' doesn't allow null."
 
-FieldNonNullableNotInitializedByConstructorWarning:
-  template: "This constructor doesn't initialize field '#name' and its type '#type' doesn't allow null."
-  severity: WARNING
-
 NonNullableOptOut:
   template: "Null safety features are disabled for this library."
   # Used to be this:
@@ -3998,24 +3946,12 @@
 NullableSuperclassError:
   template: "Can't extend '#name' because it's marked with '?'."
 
-NullableSuperclassWarning:
-  template: "Extending '#name' marked with '?'."
-  severity: WARNING
-
 NullableInterfaceError:
   template: "Can't implement '#name' because it's marked with '?'."
 
-NullableInterfaceWarning:
-  template: "Implementing '#name' marked with '?'."
-  severity: WARNING
-
 NullableMixinError:
   template: "Can't mix '#name' in because it's marked with '?'."
 
-NullableMixinWarning:
-  template: "Mixing in '#name' marked with '?'."
-  severity: WARNING
-
 JsInteropIndexNotSupported:
   template: "JS interop classes do not support [] and []= operator methods."
   tip: "Try replacing with a normal method."
@@ -4028,21 +3964,35 @@
   template: "Can't use the default List constructor."
   tip: "Try using List.filled instead."
 
-DefaultListConstructorWarning:
-  template: "Using the default List constructor."
-  tip: "Try using List.filled instead."
-  severity: WARNING
-
 NonNullableInNullAware:
   template: "Operand of null-aware operation '#name' has type '#type' which excludes null."
   severity: WARNING
 
 NonNullableNotAssignedError:
   template: "Non-nullable variable '#name' must be assigned before it can be used."
+  configuration: nnbd-strong
+  script: |
+    method<T>() {
+      T t; t;
+    }
 
-NonNullableNotAssignedWarning:
-  template: "Non-nullable variable '#name' is used before it's assigned."
-  severity: WARNING
+NonNullableLateDefinitelyUnassignedError:
+  template: "Non-nullable late variable '#name' without initializer is definitely unassigned."
+  configuration: nnbd-strong
+  script: |
+    method<T>() {
+      late T t; t;
+    }
+
+NonNullableLateDefinitelyAssignedError:
+  template: "Non-nullable late final variable '#name' definitely assigned."
+  configuration: nnbd-strong
+  script: |
+    method() {
+      late final int t;
+      t = 0;
+      t = 0;
+    }
 
 NonAgnosticConstant:
   template: "Constant value is not strong/weak mode agnostic."
@@ -4056,3 +4006,25 @@
     lib.dart: |
       // @dart=2.5
       class A {}
+
+ExtendFunction:
+  template: "Extending 'Function' is deprecated."
+  tip: "Try removing 'Function' from the 'extends' clause."
+  severity: IGNORED
+  script: |
+    class A extends Function {}
+
+ImplementFunction:
+  template: "Implementing 'Function' is deprecated."
+  tip: "Try removing 'Function' from the 'implements' clause."
+  severity: IGNORED
+  script: |
+    class A implements Function {}
+
+MixinFunction:
+  template: "Mixing in 'Function' is deprecated."
+  tip: "Try removing 'Function' from the 'with' clause."
+  severity: IGNORED
+  script: |
+    class A extends Object with Function {}
+
diff --git a/pkg/front_end/test/extensions/extensions_test.dart b/pkg/front_end/test/extensions/extensions_test.dart
index 27e21fc..fdb1fc7 100644
--- a/pkg/front_end/test/extensions/extensions_test.dart
+++ b/pkg/front_end/test/extensions/extensions_test.dart
@@ -168,9 +168,9 @@
       }
     }
 
-    features[Tags.builderSupertype] = clsBuilder.supertype?.name;
-    if (clsBuilder.interfaces != null) {
-      for (TypeBuilder superinterface in clsBuilder.interfaces) {
+    features[Tags.builderSupertype] = clsBuilder.supertypeBuilder?.name;
+    if (clsBuilder.interfaceBuilders != null) {
+      for (TypeBuilder superinterface in clsBuilder.interfaceBuilders) {
         features.addElement(Tags.builderInterfaces, superinterface.name);
       }
     }
diff --git a/pkg/front_end/test/fasta/type_inference/type_schema_elimination_test.dart b/pkg/front_end/test/fasta/type_inference/type_schema_elimination_test.dart
index 11792bc..d08c6e5 100644
--- a/pkg/front_end/test/fasta/type_inference/type_schema_elimination_test.dart
+++ b/pkg/front_end/test/fasta/type_inference/type_schema_elimination_test.dart
@@ -38,11 +38,12 @@
     expect(
         greatestClosure(new FunctionType(
                 [unknownType], dynamicType, Nullability.legacy))
-            .toString(),
+            .leakingDebugToString(),
         '(dart.core::Null?) →* dynamic');
     expect(
         greatestClosure(new FunctionType([], dynamicType, Nullability.legacy,
-            namedParameters: [new NamedType('foo', unknownType)])).toString(),
+                namedParameters: [new NamedType('foo', unknownType)]))
+            .leakingDebugToString(),
         '({foo: dart.core::Null?}) →* dynamic');
   }
 
@@ -51,18 +52,19 @@
         greatestClosure(new FunctionType([
           new FunctionType([unknownType], dynamicType, Nullability.legacy)
         ], dynamicType, Nullability.legacy))
-            .toString(),
+            .leakingDebugToString(),
         '((dynamic) →* dynamic) →* dynamic');
   }
 
   void test_greatestClosure_covariant() {
     expect(
         greatestClosure(new FunctionType([], unknownType, Nullability.legacy))
-            .toString(),
+            .leakingDebugToString(),
         '() →* dynamic');
     expect(
         greatestClosure(new InterfaceType(
-            coreTypes.listClass, Nullability.legacy, [unknownType])).toString(),
+                coreTypes.listClass, Nullability.legacy, [unknownType]))
+            .leakingDebugToString(),
         'dart.core::List<dynamic>*');
   }
 
@@ -73,24 +75,25 @@
             namedParameters: [
               new NamedType('a', unknownType),
               new NamedType('b', unknownType)
-            ])).toString(),
+            ])).leakingDebugToString(),
         '(dart.core::Null?, dart.core::Null?, {a: dart.core::Null?, '
         'b: dart.core::Null?}) →* dynamic');
   }
 
   void test_greatestClosure_simple() {
-    expect(greatestClosure(unknownType).toString(), 'dynamic');
+    expect(greatestClosure(unknownType).leakingDebugToString(), 'dynamic');
   }
 
   void test_leastClosure_contravariant() {
     expect(
         leastClosure(new FunctionType(
                 [unknownType], dynamicType, Nullability.legacy))
-            .toString(),
+            .leakingDebugToString(),
         '(dynamic) →* dynamic');
     expect(
         leastClosure(new FunctionType([], dynamicType, Nullability.legacy,
-            namedParameters: [new NamedType('foo', unknownType)])).toString(),
+                namedParameters: [new NamedType('foo', unknownType)]))
+            .leakingDebugToString(),
         '({foo: dynamic}) →* dynamic');
   }
 
@@ -99,18 +102,19 @@
         leastClosure(new FunctionType([
           new FunctionType([unknownType], dynamicType, Nullability.legacy)
         ], dynamicType, Nullability.legacy))
-            .toString(),
+            .leakingDebugToString(),
         '((dart.core::Null?) →* dynamic) →* dynamic');
   }
 
   void test_leastClosure_covariant() {
     expect(
         leastClosure(new FunctionType([], unknownType, Nullability.legacy))
-            .toString(),
+            .leakingDebugToString(),
         '() →* dart.core::Null?');
     expect(
         leastClosure(new InterfaceType(
-            coreTypes.listClass, Nullability.legacy, [unknownType])).toString(),
+                coreTypes.listClass, Nullability.legacy, [unknownType]))
+            .leakingDebugToString(),
         'dart.core::List<dart.core::Null?>*');
   }
 
@@ -121,12 +125,13 @@
             namedParameters: [
               new NamedType('a', unknownType),
               new NamedType('b', unknownType)
-            ])).toString(),
+            ])).leakingDebugToString(),
         '(dynamic, dynamic, {a: dynamic, b: dynamic}) →* dart.core::Null?');
   }
 
   void test_leastClosure_simple() {
-    expect(leastClosure(unknownType).toString(), 'dart.core::Null?');
+    expect(
+        leastClosure(unknownType).leakingDebugToString(), 'dart.core::Null?');
   }
 }
 
diff --git a/pkg/front_end/test/fasta/types/kernel_type_parser_test.dart b/pkg/front_end/test/fasta/types/kernel_type_parser_test.dart
index 997eb27..fef974e 100644
--- a/pkg/front_end/test/fasta/types/kernel_type_parser_test.dart
+++ b/pkg/front_end/test/fasta/types/kernel_type_parser_test.dart
@@ -40,7 +40,7 @@
 
 typedef Typedef<T extends self::Object? = dynamic> = <S extends self::Object? = dynamic>(T%) → S%;
 typedef VoidFunction = () → void;
-typedef TestDefaultTypes = () → self::DefaultTypes<dynamic, self::Object, self::List<dynamic>, self::List<self::Object>, self::Comparable<dynamic>, (<BottomType>) → void, () → self::Comparable<dynamic>>;
+typedef TestDefaultTypes = () → self::DefaultTypes<dynamic, self::Object, self::List<dynamic>, self::List<self::Object>, self::Comparable<dynamic>, (Never) → void, () → self::Comparable<dynamic>>;
 typedef Id<T extends self::Object? = dynamic> = T%;
 typedef TestSorting = ({a: self::int, b: self::int, c: self::int}) → void;
 class Object {
@@ -69,7 +69,7 @@
 }
 class bool extends self::Object {
 }
-class DefaultTypes<S extends self::Object? = dynamic, T extends self::Object = self::Object, U extends self::List<self::DefaultTypes::S%> = self::List<dynamic>, V extends self::List<self::DefaultTypes::T> = self::List<self::Object>, W extends self::Comparable<self::DefaultTypes::W> = self::Comparable<dynamic>, X extends (self::DefaultTypes::W) → void = (<BottomType>) → void, Y extends () → self::DefaultTypes::W = () → self::Comparable<dynamic>> extends self::Object {
+class DefaultTypes<S extends self::Object? = dynamic, T extends self::Object = self::Object, U extends self::List<self::DefaultTypes::S%> = self::List<dynamic>, V extends self::List<self::DefaultTypes::T> = self::List<self::Object>, W extends self::Comparable<self::DefaultTypes::W> = self::Comparable<dynamic>, X extends (self::DefaultTypes::W) → void = (Never) → void, Y extends () → self::DefaultTypes::W = () → self::Comparable<dynamic>> extends self::Object {
 }
 class Super extends self::Object implements self::Comparable<self::Sub> {
 }
diff --git a/pkg/front_end/test/id_tests/definite_assignment_test.dart b/pkg/front_end/test/id_tests/definite_assignment_test.dart
index 02067af..cb48f84 100644
--- a/pkg/front_end/test/id_tests/definite_assignment_test.dart
+++ b/pkg/front_end/test/id_tests/definite_assignment_test.dart
@@ -46,6 +46,11 @@
     member.accept(new DefiniteAssignmentDataExtractor(compilerResult, actualMap,
         memberBuilder.dataForTesting.inferenceData.flowAnalysisResult));
   }
+
+  /// Errors are supported for testing erroneous code. The reported errors are
+  /// not tested.
+  @override
+  bool get supportsErrors => true;
 }
 
 class DefiniteAssignmentDataExtractor extends CfeDataExtractor<String> {
diff --git a/pkg/front_end/test/id_tests/definite_unassignment_test.dart b/pkg/front_end/test/id_tests/definite_unassignment_test.dart
index 06b8c7e..b22affb 100644
--- a/pkg/front_end/test/id_tests/definite_unassignment_test.dart
+++ b/pkg/front_end/test/id_tests/definite_unassignment_test.dart
@@ -48,6 +48,11 @@
         actualMap,
         memberBuilder.dataForTesting.inferenceData.flowAnalysisResult));
   }
+
+  /// Errors are supported for testing erroneous code. The reported errors are
+  /// not tested.
+  @override
+  bool get supportsErrors => true;
 }
 
 class DefiniteUnassignmentDataExtractor extends CfeDataExtractor<String> {
diff --git a/pkg/front_end/test/id_tests/reachability_test.dart b/pkg/front_end/test/id_tests/reachability_test.dart
index 6c469fa..e0cb2cd 100644
--- a/pkg/front_end/test/id_tests/reachability_test.dart
+++ b/pkg/front_end/test/id_tests/reachability_test.dart
@@ -47,6 +47,11 @@
     member.accept(new ReachabilityDataExtractor(compilerResult, actualMap,
         memberBuilder.dataForTesting.inferenceData.flowAnalysisResult));
   }
+
+  /// Errors are supported for testing erroneous code. The reported errors are
+  /// not tested.
+  @override
+  bool get supportsErrors => true;
 }
 
 class ReachabilityDataExtractor
diff --git a/pkg/front_end/test/spell_checking_list_code.txt b/pkg/front_end/test/spell_checking_list_code.txt
index d83c19d..a604ce3 100644
--- a/pkg/front_end/test/spell_checking_list_code.txt
+++ b/pkg/front_end/test/spell_checking_list_code.txt
@@ -109,8 +109,10 @@
 body's
 bof
 bom
+bones
 boolean
 bother
+boundness
 breadcrumbs
 brianwilkerson
 bs
diff --git a/pkg/front_end/test/spell_checking_list_common.txt b/pkg/front_end/test/spell_checking_list_common.txt
index 00036f4..2e71a8a 100644
--- a/pkg/front_end/test/spell_checking_list_common.txt
+++ b/pkg/front_end/test/spell_checking_list_common.txt
@@ -564,6 +564,7 @@
 conflicts
 conform
 conformed
+confuse
 confused
 connect
 connected
@@ -1112,6 +1113,7 @@
 fall
 fallback
 falls
+fallthrough
 false
 far
 fashion
@@ -1327,6 +1329,7 @@
 hidden
 hide
 hides
+hiding
 hierarchies
 hierarchy
 high
@@ -3025,6 +3028,7 @@
 unambiguous
 unary
 unassignable
+unassigned
 unbalanced
 unbind
 uncertain
@@ -3095,6 +3099,7 @@
 untranslatable
 untyped
 unused
+unwanted
 unwrap
 unwrapped
 up
@@ -3175,6 +3180,7 @@
 walk
 walked
 want
+wanted
 warn
 warning
 warnings
diff --git a/pkg/front_end/test/spell_checking_list_tests.txt b/pkg/front_end/test/spell_checking_list_tests.txt
index 46fbd01..1f0db0c 100644
--- a/pkg/front_end/test/spell_checking_list_tests.txt
+++ b/pkg/front_end/test/spell_checking_list_tests.txt
@@ -197,6 +197,7 @@
 finder
 fisk
 five
+flagged
 floor
 fluctuate
 foo1
@@ -345,6 +346,7 @@
 newest
 newworld
 ninja
+nondefault
 nonexisting
 noo
 numerator
diff --git a/pkg/front_end/test/static_types/data/class_call.dart b/pkg/front_end/test/static_types/data/class_call.dart
index 134c441..6575688 100644
--- a/pkg/front_end/test/static_types/data/class_call.dart
+++ b/pkg/front_end/test/static_types/data/class_call.dart
@@ -11,14 +11,17 @@
 }
 
 class Class {
-  ClassWithCall classWithCall;
+  ClassWithCall get classWithCall =>
+      /*cfe.<bottom>*/ /*cfe:nnbd.Never*/
+      throw /*cfe.int*/ /*cfe:nnbd.int!*/ 42;
 
   int method() =>
-      /*cfe.invoke: ClassWithCall*/
-      /*cfe:nnbd.invoke: ClassWithCall!*/
       /*cfe.ClassWithCall*/
       /*cfe:nnbd.ClassWithCall!*/
-      classWithCall()
+      classWithCall
+              /*cfe.invoke: ClassWithCall*/
+              /*cfe:nnbd.invoke: ClassWithCall!*/
+              ()
           . /*cfe.invoke: int*/
           /*cfe:nnbd.invoke: int!*/
           method();
@@ -30,14 +33,15 @@
 }
 
 class GenericClass<S, T extends GenericClassWithCall<S>> {
-  GenericClassWithCall<T> classWithCall;
+  GenericClassWithCall<T> get classWithCall =>
+      /*cfe.<bottom>*/ /*cfe:nnbd.Never*/
+      throw /*cfe.int*/ /*cfe:nnbd.int!*/ 42;
 
   S method() =>
-      /*cfe.invoke: T*/
-      /*cfe:nnbd.invoke: T!*/
       /*cfe.GenericClassWithCall<T>*/
       /*cfe:nnbd.GenericClassWithCall<T!>!*/
-      classWithCall(). /*cfe.invoke: S*/ /*cfe:nnbd.invoke: S%*/ method();
+      classWithCall /*cfe.invoke: T*/ /*cfe:nnbd.invoke: T!*/ ()
+          . /*cfe.invoke: S*/ /*cfe:nnbd.invoke: S%*/ method();
 }
 
 main() {
@@ -46,10 +50,11 @@
       GenericClass<String, GenericClassWithCall<String>>
           /*cfe.<String,GenericClassWithCall<String>>*/
           /*cfe:nnbd.<String!,GenericClassWithCall<String!>!>*/ ()
-      . /*cfe.invoke: GenericClassWithCall<String>*/
-      /*cfe:nnbd.invoke: GenericClassWithCall<String!>!*/
-      /*cfe.GenericClassWithCall<GenericClassWithCall<String>>*/
+      . /*cfe.GenericClassWithCall<GenericClassWithCall<String>>*/
       /*cfe:nnbd.GenericClassWithCall<GenericClassWithCall<String!>!>!*/
-      classWithCall()
+      classWithCall
+      /*cfe.invoke: GenericClassWithCall<String>*/
+      /*cfe:nnbd.invoke: GenericClassWithCall<String!>!*/
+      ()
       . /*cfe.invoke: String*/ /*cfe:nnbd.invoke: String!*/ method();
 }
diff --git a/pkg/front_end/test/static_types/data/constraint_gatherer_for_future_or.dart b/pkg/front_end/test/static_types/data/constraint_gatherer_for_future_or.dart
index 3eb10fc..32a491a 100644
--- a/pkg/front_end/test/static_types/data/constraint_gatherer_for_future_or.dart
+++ b/pkg/front_end/test/static_types/data/constraint_gatherer_for_future_or.dart
@@ -21,11 +21,13 @@
 
 // -----------------------------------------------------------------------------
 
-// Gathering constraints for S from comparison Null <: Future<S>.
+// Gathering constraints for S from comparison bot <: Future<S>.
 void func2() {
   void foo<S>(Future<S> bar) {}
 
-  /*invoke: void*/ foo/*<dynamic>*/(/*Null*/ null);
+  /*invoke: void*/ foo/*<dynamic>*/(
+      /*cfe.<bottom>*/ /*cfe:nnbd.Never*/
+      throw /*cfe.int*/ /*cfe:nnbd.int!*/ 42);
 }
 
 // -----------------------------------------------------------------------------
diff --git a/pkg/front_end/test/static_types/data/greatest_lower_bound_for_future_or.dart b/pkg/front_end/test/static_types/data/greatest_lower_bound_for_future_or.dart
index ccbc88b..28d998d 100644
--- a/pkg/front_end/test/static_types/data/greatest_lower_bound_for_future_or.dart
+++ b/pkg/front_end/test/static_types/data/greatest_lower_bound_for_future_or.dart
@@ -22,7 +22,9 @@
   // inserted as both the type argument and the return type of 'expr' by the
   // type inference.
   void context(FutureOr<T> x) {}
-  S expr<S extends Foo>() => /*Null*/ null;
+  S expr<S extends Foo>() =>
+      /*cfe.<bottom>*/ /*cfe:nnbd.Never*/
+      throw /*cfe.int*/ /*cfe:nnbd.int!*/ 42;
 
   // Type of the expression is GLB(FutureOr<T>, Foo) = T.
   /*invoke: void*/ context(
@@ -36,7 +38,9 @@
 // Tests rule GLB(FutureOr<A>, Future<B>) == Future<GLB(A, B)>.
 void func2<T extends Foo>() {
   void context(FutureOr<T> x) {}
-  S expr<S extends Future<Foo>>() => /*Null*/ null;
+  S expr<S extends Future<Foo>>() =>
+      /*cfe.<bottom>*/ /*cfe:nnbd.Never*/
+      throw /*cfe.int*/ /*cfe:nnbd.int!*/ 42;
 
   // Type of the expression is GLB(FutureOr<T>, Future<Foo>) = Future<T>.
   /*invoke: void*/ context(
@@ -51,7 +55,9 @@
 // Tests rule GLB(A, FutureOr<B>) == GLB(B, A).
 void func3<T extends Foo>() {
   void context(T x) {}
-  S expr<S extends FutureOr<Foo>>() => /*Null*/ null;
+  S expr<S extends FutureOr<Foo>>() =>
+      /*cfe.<bottom>*/ /*cfe:nnbd.Never*/
+      throw /*cfe.int*/ /*cfe:nnbd.int!*/ 42;
 
   // Type of the expression is GLB(T, FutureOr<Foo>) = T.
   /*invoke: void*/ context(
@@ -65,7 +71,9 @@
 // Tests rule GLB(Future<A>, FutureOr<B>) == Future<GLB(B, A)>.
 void func4<T extends Foo>() {
   void context(Future<T> x) {}
-  S expr<S extends FutureOr<Foo>>() => /*Null*/ null;
+  S expr<S extends FutureOr<Foo>>() =>
+      /*cfe.<bottom>*/ /*cfe:nnbd.Never*/
+      throw /*cfe.int*/ /*cfe:nnbd.int!*/ 42;
 
   // Type of the expression is GLB(Future<T>, FutureOr<Foo>) = Future<T>.
   /*invoke: void*/ context(
@@ -81,7 +89,9 @@
 // non-trivial case when neither A <: B, nor B <: A.
 void func5<T extends Foo>() {
   void context(FutureOr<FutureOr<T>> x) {}
-  S expr<S extends FutureOr<Future<Foo>>>() => /*Null*/ null;
+  S expr<S extends FutureOr<Future<Foo>>>() =>
+      /*cfe.<bottom>*/ /*cfe:nnbd.Never*/
+      throw /*cfe.int*/ /*cfe:nnbd.int!*/ 42;
 
   // Type of the expression is GLB(FutureOr<FutureOr<T>>, FutureOr<Future<Foo>>)
   // = FutureOr<Future<T>>.
diff --git a/pkg/front_end/testcases/extensions/ambiguous.dart b/pkg/front_end/testcases/extensions/ambiguous.dart
new file mode 100644
index 0000000..df66ba8
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/ambiguous.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+extension A on C {
+  void method() {}
+  int get getter => 42;
+  void set setter(int value) {}
+  int get property => 42;
+  int operator +(int i) => i;
+  int operator -() => 0;
+  int operator [](int i) => i;
+}
+
+extension B on C {
+  void method() {}
+  int get getter => 42;
+  void set setter(int value) {}
+  void set property(int value) {}
+  int operator +(int i) => i;
+  int operator -() => 0;
+  void operator []=(int i, int j) {}
+}
+
+class C {}
+
+errors(C c) {
+  c.method();
+  c.method;
+  c.getter;
+  c.setter;
+  c.getter = 42;
+  c.setter = 42;
+  c.property;
+  c.property = 42;
+  c + 0;
+  -c;
+  c[42];
+  c[42] = 0;
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/extensions/ambiguous.dart.outline.expect b/pkg/front_end/testcases/extensions/ambiguous.dart.outline.expect
new file mode 100644
index 0000000..ecc48e2
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/ambiguous.dart.outline.expect
@@ -0,0 +1,64 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    ;
+}
+extension A on self::C* {
+  method method = self::A|method;
+  tearoff method = self::A|get#method;
+  get getter = self::A|get#getter;
+  get property = self::A|get#property;
+  operator + = self::A|+;
+  operator unary- = self::A|unary-;
+  operator [] = self::A|[];
+  set setter = self::A|set#setter;
+}
+extension B on self::C* {
+  method method = self::B|method;
+  tearoff method = self::B|get#method;
+  get getter = self::B|get#getter;
+  operator + = self::B|+;
+  operator unary- = self::B|unary-;
+  operator []= = self::B|[]=;
+  set setter = self::B|set#setter;
+  set property = self::B|set#property;
+}
+static method A|method(final self::C* #this) → void
+  ;
+static method A|get#method(final self::C* #this) → () →* void
+  return () → void => self::A|method(#this);
+static method A|get#getter(final self::C* #this) → core::int*
+  ;
+static method A|set#setter(final self::C* #this, core::int* value) → void
+  ;
+static method A|get#property(final self::C* #this) → core::int*
+  ;
+static method A|+(final self::C* #this, core::int* i) → core::int*
+  ;
+static method A|unary-(final self::C* #this) → core::int*
+  ;
+static method A|[](final self::C* #this, core::int* i) → core::int*
+  ;
+static method B|method(final self::C* #this) → void
+  ;
+static method B|get#method(final self::C* #this) → () →* void
+  return () → void => self::B|method(#this);
+static method B|get#getter(final self::C* #this) → core::int*
+  ;
+static method B|set#setter(final self::C* #this, core::int* value) → void
+  ;
+static method B|set#property(final self::C* #this, core::int* value) → void
+  ;
+static method B|+(final self::C* #this, core::int* i) → core::int*
+  ;
+static method B|unary-(final self::C* #this) → core::int*
+  ;
+static method B|[]=(final self::C* #this, core::int* i, core::int* j) → void
+  ;
+static method errors(self::C* c) → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/extensions/ambiguous.dart.strong.expect b/pkg/front_end/testcases/extensions/ambiguous.dart.strong.expect
new file mode 100644
index 0000000..8573677
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/ambiguous.dart.strong.expect
@@ -0,0 +1,265 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:28:5: Error: The method 'method' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c.method();
+//     ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:6:8: Context: This is one of the extension members.
+//   void method() {}
+//        ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:16:8: Context: This is one of the extension members.
+//   void method() {}
+//        ^^^^^^
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:29:5: Error: The property 'method' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c.method;
+//     ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:6:8: Context: This is one of the extension members.
+//   void method() {}
+//        ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:16:8: Context: This is one of the extension members.
+//   void method() {}
+//        ^^^^^^
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:30:5: Error: The property 'getter' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c.getter;
+//     ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:7:11: Context: This is one of the extension members.
+//   int get getter => 42;
+//           ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:17:11: Context: This is one of the extension members.
+//   int get getter => 42;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:31:5: Error: The property 'setter' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c.setter;
+//     ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:8:12: Context: This is one of the extension members.
+//   void set setter(int value) {}
+//            ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:18:12: Context: This is one of the extension members.
+//   void set setter(int value) {}
+//            ^^^^^^
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:32:5: Error: The property 'getter' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c.getter = 42;
+//     ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:7:11: Context: This is one of the extension members.
+//   int get getter => 42;
+//           ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:17:11: Context: This is one of the extension members.
+//   int get getter => 42;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:33:5: Error: The property 'setter' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c.setter = 42;
+//     ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:8:12: Context: This is one of the extension members.
+//   void set setter(int value) {}
+//            ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:18:12: Context: This is one of the extension members.
+//   void set setter(int value) {}
+//            ^^^^^^
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:34:5: Error: The property 'property' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c.property;
+//     ^^^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:9:11: Context: This is one of the extension members.
+//   int get property => 42;
+//           ^^^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:19:12: Context: This is one of the extension members.
+//   void set property(int value) {}
+//            ^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:35:5: Error: The property 'property' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c.property = 42;
+//     ^^^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:9:11: Context: This is one of the extension members.
+//   int get property => 42;
+//           ^^^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:19:12: Context: This is one of the extension members.
+//   void set property(int value) {}
+//            ^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:36:5: Error: The operator '+' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c + 0;
+//     ^
+// pkg/front_end/testcases/extensions/ambiguous.dart:10:16: Context: This is one of the extension members.
+//   int operator +(int i) => i;
+//                ^
+// pkg/front_end/testcases/extensions/ambiguous.dart:20:16: Context: This is one of the extension members.
+//   int operator +(int i) => i;
+//                ^
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:37:3: Error: The operator 'unary-' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   -c;
+//   ^
+// pkg/front_end/testcases/extensions/ambiguous.dart:11:16: Context: This is one of the extension members.
+//   int operator -() => 0;
+//                ^
+// pkg/front_end/testcases/extensions/ambiguous.dart:21:16: Context: This is one of the extension members.
+//   int operator -() => 0;
+//                ^
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:38:4: Error: The operator '[]' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c[42];
+//    ^
+// pkg/front_end/testcases/extensions/ambiguous.dart:12:16: Context: This is one of the extension members.
+//   int operator [](int i) => i;
+//                ^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:22:17: Context: This is one of the extension members.
+//   void operator []=(int i, int j) {}
+//                 ^^^
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:39:4: Error: The operator '[]=' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c[42] = 0;
+//    ^
+// pkg/front_end/testcases/extensions/ambiguous.dart:12:16: Context: This is one of the extension members.
+//   int operator [](int i) => i;
+//                ^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:22:17: Context: This is one of the extension members.
+//   void operator []=(int i, int j) {}
+//                 ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+}
+extension A on self::C* {
+  method method = self::A|method;
+  tearoff method = self::A|get#method;
+  get getter = self::A|get#getter;
+  get property = self::A|get#property;
+  operator + = self::A|+;
+  operator unary- = self::A|unary-;
+  operator [] = self::A|[];
+  set setter = self::A|set#setter;
+}
+extension B on self::C* {
+  method method = self::B|method;
+  tearoff method = self::B|get#method;
+  get getter = self::B|get#getter;
+  operator + = self::B|+;
+  operator unary- = self::B|unary-;
+  operator []= = self::B|[]=;
+  set setter = self::B|set#setter;
+  set property = self::B|set#property;
+}
+static method A|method(final self::C* #this) → void {}
+static method A|get#method(final self::C* #this) → () →* void
+  return () → void => self::A|method(#this);
+static method A|get#getter(final self::C* #this) → core::int*
+  return 42;
+static method A|set#setter(final self::C* #this, core::int* value) → void {}
+static method A|get#property(final self::C* #this) → core::int*
+  return 42;
+static method A|+(final self::C* #this, core::int* i) → core::int*
+  return i;
+static method A|unary-(final self::C* #this) → core::int*
+  return 0;
+static method A|[](final self::C* #this, core::int* i) → core::int*
+  return i;
+static method B|method(final self::C* #this) → void {}
+static method B|get#method(final self::C* #this) → () →* void
+  return () → void => self::B|method(#this);
+static method B|get#getter(final self::C* #this) → core::int*
+  return 42;
+static method B|set#setter(final self::C* #this, core::int* value) → void {}
+static method B|set#property(final self::C* #this, core::int* value) → void {}
+static method B|+(final self::C* #this, core::int* i) → core::int*
+  return i;
+static method B|unary-(final self::C* #this) → core::int*
+  return 0;
+static method B|[]=(final self::C* #this, core::int* i, core::int* j) → void {}
+static method errors(self::C* c) → dynamic {
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:28:5: Error: The method 'method' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c.method();
+    ^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:29:5: Error: The property 'method' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c.method;
+    ^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:30:5: Error: The property 'getter' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c.getter;
+    ^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:31:5: Error: The property 'setter' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c.setter;
+    ^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:32:5: Error: The property 'getter' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c.getter = 42;
+    ^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:33:5: Error: The property 'setter' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c.setter = 42;
+    ^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:34:5: Error: The property 'property' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c.property;
+    ^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:35:5: Error: The property 'property' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c.property = 42;
+    ^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:36:5: Error: The operator '+' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c + 0;
+    ^";
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:37:3: Error: The operator 'unary-' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  -c;
+  ^";
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:38:4: Error: The operator '[]' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c[42];
+   ^";
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:39:4: Error: The operator '[]=' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c[42] = 0;
+   ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/ambiguous.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/ambiguous.dart.strong.transformed.expect
new file mode 100644
index 0000000..8573677
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/ambiguous.dart.strong.transformed.expect
@@ -0,0 +1,265 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:28:5: Error: The method 'method' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c.method();
+//     ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:6:8: Context: This is one of the extension members.
+//   void method() {}
+//        ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:16:8: Context: This is one of the extension members.
+//   void method() {}
+//        ^^^^^^
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:29:5: Error: The property 'method' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c.method;
+//     ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:6:8: Context: This is one of the extension members.
+//   void method() {}
+//        ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:16:8: Context: This is one of the extension members.
+//   void method() {}
+//        ^^^^^^
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:30:5: Error: The property 'getter' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c.getter;
+//     ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:7:11: Context: This is one of the extension members.
+//   int get getter => 42;
+//           ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:17:11: Context: This is one of the extension members.
+//   int get getter => 42;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:31:5: Error: The property 'setter' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c.setter;
+//     ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:8:12: Context: This is one of the extension members.
+//   void set setter(int value) {}
+//            ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:18:12: Context: This is one of the extension members.
+//   void set setter(int value) {}
+//            ^^^^^^
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:32:5: Error: The property 'getter' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c.getter = 42;
+//     ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:7:11: Context: This is one of the extension members.
+//   int get getter => 42;
+//           ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:17:11: Context: This is one of the extension members.
+//   int get getter => 42;
+//           ^^^^^^
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:33:5: Error: The property 'setter' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c.setter = 42;
+//     ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:8:12: Context: This is one of the extension members.
+//   void set setter(int value) {}
+//            ^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:18:12: Context: This is one of the extension members.
+//   void set setter(int value) {}
+//            ^^^^^^
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:34:5: Error: The property 'property' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c.property;
+//     ^^^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:9:11: Context: This is one of the extension members.
+//   int get property => 42;
+//           ^^^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:19:12: Context: This is one of the extension members.
+//   void set property(int value) {}
+//            ^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:35:5: Error: The property 'property' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c.property = 42;
+//     ^^^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:9:11: Context: This is one of the extension members.
+//   int get property => 42;
+//           ^^^^^^^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:19:12: Context: This is one of the extension members.
+//   void set property(int value) {}
+//            ^^^^^^^^
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:36:5: Error: The operator '+' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c + 0;
+//     ^
+// pkg/front_end/testcases/extensions/ambiguous.dart:10:16: Context: This is one of the extension members.
+//   int operator +(int i) => i;
+//                ^
+// pkg/front_end/testcases/extensions/ambiguous.dart:20:16: Context: This is one of the extension members.
+//   int operator +(int i) => i;
+//                ^
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:37:3: Error: The operator 'unary-' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   -c;
+//   ^
+// pkg/front_end/testcases/extensions/ambiguous.dart:11:16: Context: This is one of the extension members.
+//   int operator -() => 0;
+//                ^
+// pkg/front_end/testcases/extensions/ambiguous.dart:21:16: Context: This is one of the extension members.
+//   int operator -() => 0;
+//                ^
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:38:4: Error: The operator '[]' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c[42];
+//    ^
+// pkg/front_end/testcases/extensions/ambiguous.dart:12:16: Context: This is one of the extension members.
+//   int operator [](int i) => i;
+//                ^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:22:17: Context: This is one of the extension members.
+//   void operator []=(int i, int j) {}
+//                 ^^^
+//
+// pkg/front_end/testcases/extensions/ambiguous.dart:39:4: Error: The operator '[]=' is defined in multiple extensions for 'C' and neither is more specific.
+//  - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+//   c[42] = 0;
+//    ^
+// pkg/front_end/testcases/extensions/ambiguous.dart:12:16: Context: This is one of the extension members.
+//   int operator [](int i) => i;
+//                ^^
+// pkg/front_end/testcases/extensions/ambiguous.dart:22:17: Context: This is one of the extension members.
+//   void operator []=(int i, int j) {}
+//                 ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+}
+extension A on self::C* {
+  method method = self::A|method;
+  tearoff method = self::A|get#method;
+  get getter = self::A|get#getter;
+  get property = self::A|get#property;
+  operator + = self::A|+;
+  operator unary- = self::A|unary-;
+  operator [] = self::A|[];
+  set setter = self::A|set#setter;
+}
+extension B on self::C* {
+  method method = self::B|method;
+  tearoff method = self::B|get#method;
+  get getter = self::B|get#getter;
+  operator + = self::B|+;
+  operator unary- = self::B|unary-;
+  operator []= = self::B|[]=;
+  set setter = self::B|set#setter;
+  set property = self::B|set#property;
+}
+static method A|method(final self::C* #this) → void {}
+static method A|get#method(final self::C* #this) → () →* void
+  return () → void => self::A|method(#this);
+static method A|get#getter(final self::C* #this) → core::int*
+  return 42;
+static method A|set#setter(final self::C* #this, core::int* value) → void {}
+static method A|get#property(final self::C* #this) → core::int*
+  return 42;
+static method A|+(final self::C* #this, core::int* i) → core::int*
+  return i;
+static method A|unary-(final self::C* #this) → core::int*
+  return 0;
+static method A|[](final self::C* #this, core::int* i) → core::int*
+  return i;
+static method B|method(final self::C* #this) → void {}
+static method B|get#method(final self::C* #this) → () →* void
+  return () → void => self::B|method(#this);
+static method B|get#getter(final self::C* #this) → core::int*
+  return 42;
+static method B|set#setter(final self::C* #this, core::int* value) → void {}
+static method B|set#property(final self::C* #this, core::int* value) → void {}
+static method B|+(final self::C* #this, core::int* i) → core::int*
+  return i;
+static method B|unary-(final self::C* #this) → core::int*
+  return 0;
+static method B|[]=(final self::C* #this, core::int* i, core::int* j) → void {}
+static method errors(self::C* c) → dynamic {
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:28:5: Error: The method 'method' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c.method();
+    ^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:29:5: Error: The property 'method' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c.method;
+    ^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:30:5: Error: The property 'getter' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c.getter;
+    ^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:31:5: Error: The property 'setter' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c.setter;
+    ^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:32:5: Error: The property 'getter' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c.getter = 42;
+    ^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:33:5: Error: The property 'setter' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c.setter = 42;
+    ^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:34:5: Error: The property 'property' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c.property;
+    ^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:35:5: Error: The property 'property' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c.property = 42;
+    ^^^^^^^^";
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:36:5: Error: The operator '+' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c + 0;
+    ^";
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:37:3: Error: The operator 'unary-' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  -c;
+  ^";
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:38:4: Error: The operator '[]' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c[42];
+   ^";
+  invalid-expression "pkg/front_end/testcases/extensions/ambiguous.dart:39:4: Error: The operator '[]=' is defined in multiple extensions for 'C' and neither is more specific.
+ - 'C' is from 'pkg/front_end/testcases/extensions/ambiguous.dart'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
+  c[42] = 0;
+   ^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.strong.expect b/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.strong.expect
index f432ee9..f5de7af 100644
--- a/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.strong.expect
+++ b/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.strong.expect
@@ -14,29 +14,53 @@
 //   c.m1 = 2;
 //     ^^
 //
-// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:32:5: Error: The getter 'm3' isn't defined for the class 'Class'.
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:32:5: Error: The property 'm3' is defined in multiple extensions for 'Class' and neither is more specific.
 //  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
-// Try correcting the name to the name of an existing getter, or defining a getter or field named 'm3'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
 //   c.m3;
 //     ^^
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:13:12: Context: This is one of the extension members.
+//   void set m3(int x) {}
+//            ^^
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:18:11: Context: This is one of the extension members.
+//   int get m3 => 0;
+//           ^^
 //
-// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:33:5: Error: The setter 'm3' isn't defined for the class 'Class'.
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:33:5: Error: The property 'm3' is defined in multiple extensions for 'Class' and neither is more specific.
 //  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
-// Try correcting the name to the name of an existing setter, or defining a setter or field named 'm3'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
 //   c.m3 = 2;
 //     ^^
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:13:12: Context: This is one of the extension members.
+//   void set m3(int x) {}
+//            ^^
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:18:11: Context: This is one of the extension members.
+//   int get m3 => 0;
+//           ^^
 //
-// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:34:5: Error: The getter 'm4' isn't defined for the class 'Class'.
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:34:5: Error: The property 'm4' is defined in multiple extensions for 'Class' and neither is more specific.
 //  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
-// Try correcting the name to the name of an existing getter, or defining a getter or field named 'm4'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
 //   c.m4;
 //     ^^
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:14:11: Context: This is one of the extension members.
+//   int get m4 => 0;
+//           ^^
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:19:12: Context: This is one of the extension members.
+//   void set m4(int x) {}
+//            ^^
 //
-// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:35:5: Error: The setter 'm4' isn't defined for the class 'Class'.
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:35:5: Error: The property 'm4' is defined in multiple extensions for 'Class' and neither is more specific.
 //  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
-// Try correcting the name to the name of an existing setter, or defining a setter or field named 'm4'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
 //   c.m4 = 2;
 //     ^^
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:14:11: Context: This is one of the extension members.
+//   int get m4 => 0;
+//           ^^
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:19:12: Context: This is one of the extension members.
+//   void set m4(int x) {}
+//            ^^
 //
 import self as self;
 import "dart:core" as core;
@@ -85,24 +109,24 @@
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'm1'.
   c.m1 = 2;
     ^^";
-  invalid-expression "pkg/front_end/testcases/extensions/getter_setter_conflict.dart:32:5: Error: The getter 'm3' isn't defined for the class 'Class'.
+  invalid-expression "pkg/front_end/testcases/extensions/getter_setter_conflict.dart:32:5: Error: The property 'm3' is defined in multiple extensions for 'Class' and neither is more specific.
  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
-Try correcting the name to the name of an existing getter, or defining a getter or field named 'm3'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c.m3;
     ^^";
-  invalid-expression "pkg/front_end/testcases/extensions/getter_setter_conflict.dart:33:5: Error: The setter 'm3' isn't defined for the class 'Class'.
+  invalid-expression "pkg/front_end/testcases/extensions/getter_setter_conflict.dart:33:5: Error: The property 'm3' is defined in multiple extensions for 'Class' and neither is more specific.
  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
-Try correcting the name to the name of an existing setter, or defining a setter or field named 'm3'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c.m3 = 2;
     ^^";
-  invalid-expression "pkg/front_end/testcases/extensions/getter_setter_conflict.dart:34:5: Error: The getter 'm4' isn't defined for the class 'Class'.
+  invalid-expression "pkg/front_end/testcases/extensions/getter_setter_conflict.dart:34:5: Error: The property 'm4' is defined in multiple extensions for 'Class' and neither is more specific.
  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
-Try correcting the name to the name of an existing getter, or defining a getter or field named 'm4'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c.m4;
     ^^";
-  invalid-expression "pkg/front_end/testcases/extensions/getter_setter_conflict.dart:35:5: Error: The setter 'm4' isn't defined for the class 'Class'.
+  invalid-expression "pkg/front_end/testcases/extensions/getter_setter_conflict.dart:35:5: Error: The property 'm4' is defined in multiple extensions for 'Class' and neither is more specific.
  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
-Try correcting the name to the name of an existing setter, or defining a setter or field named 'm4'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c.m4 = 2;
     ^^";
 }
diff --git a/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.strong.transformed.expect
index f432ee9..f5de7af 100644
--- a/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/extensions/getter_setter_conflict.dart.strong.transformed.expect
@@ -14,29 +14,53 @@
 //   c.m1 = 2;
 //     ^^
 //
-// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:32:5: Error: The getter 'm3' isn't defined for the class 'Class'.
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:32:5: Error: The property 'm3' is defined in multiple extensions for 'Class' and neither is more specific.
 //  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
-// Try correcting the name to the name of an existing getter, or defining a getter or field named 'm3'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
 //   c.m3;
 //     ^^
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:13:12: Context: This is one of the extension members.
+//   void set m3(int x) {}
+//            ^^
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:18:11: Context: This is one of the extension members.
+//   int get m3 => 0;
+//           ^^
 //
-// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:33:5: Error: The setter 'm3' isn't defined for the class 'Class'.
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:33:5: Error: The property 'm3' is defined in multiple extensions for 'Class' and neither is more specific.
 //  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
-// Try correcting the name to the name of an existing setter, or defining a setter or field named 'm3'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
 //   c.m3 = 2;
 //     ^^
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:13:12: Context: This is one of the extension members.
+//   void set m3(int x) {}
+//            ^^
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:18:11: Context: This is one of the extension members.
+//   int get m3 => 0;
+//           ^^
 //
-// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:34:5: Error: The getter 'm4' isn't defined for the class 'Class'.
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:34:5: Error: The property 'm4' is defined in multiple extensions for 'Class' and neither is more specific.
 //  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
-// Try correcting the name to the name of an existing getter, or defining a getter or field named 'm4'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
 //   c.m4;
 //     ^^
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:14:11: Context: This is one of the extension members.
+//   int get m4 => 0;
+//           ^^
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:19:12: Context: This is one of the extension members.
+//   void set m4(int x) {}
+//            ^^
 //
-// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:35:5: Error: The setter 'm4' isn't defined for the class 'Class'.
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:35:5: Error: The property 'm4' is defined in multiple extensions for 'Class' and neither is more specific.
 //  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
-// Try correcting the name to the name of an existing setter, or defining a setter or field named 'm4'.
+// Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
 //   c.m4 = 2;
 //     ^^
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:14:11: Context: This is one of the extension members.
+//   int get m4 => 0;
+//           ^^
+// pkg/front_end/testcases/extensions/getter_setter_conflict.dart:19:12: Context: This is one of the extension members.
+//   void set m4(int x) {}
+//            ^^
 //
 import self as self;
 import "dart:core" as core;
@@ -85,24 +109,24 @@
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'm1'.
   c.m1 = 2;
     ^^";
-  invalid-expression "pkg/front_end/testcases/extensions/getter_setter_conflict.dart:32:5: Error: The getter 'm3' isn't defined for the class 'Class'.
+  invalid-expression "pkg/front_end/testcases/extensions/getter_setter_conflict.dart:32:5: Error: The property 'm3' is defined in multiple extensions for 'Class' and neither is more specific.
  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
-Try correcting the name to the name of an existing getter, or defining a getter or field named 'm3'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c.m3;
     ^^";
-  invalid-expression "pkg/front_end/testcases/extensions/getter_setter_conflict.dart:33:5: Error: The setter 'm3' isn't defined for the class 'Class'.
+  invalid-expression "pkg/front_end/testcases/extensions/getter_setter_conflict.dart:33:5: Error: The property 'm3' is defined in multiple extensions for 'Class' and neither is more specific.
  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
-Try correcting the name to the name of an existing setter, or defining a setter or field named 'm3'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c.m3 = 2;
     ^^";
-  invalid-expression "pkg/front_end/testcases/extensions/getter_setter_conflict.dart:34:5: Error: The getter 'm4' isn't defined for the class 'Class'.
+  invalid-expression "pkg/front_end/testcases/extensions/getter_setter_conflict.dart:34:5: Error: The property 'm4' is defined in multiple extensions for 'Class' and neither is more specific.
  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
-Try correcting the name to the name of an existing getter, or defining a getter or field named 'm4'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c.m4;
     ^^";
-  invalid-expression "pkg/front_end/testcases/extensions/getter_setter_conflict.dart:35:5: Error: The setter 'm4' isn't defined for the class 'Class'.
+  invalid-expression "pkg/front_end/testcases/extensions/getter_setter_conflict.dart:35:5: Error: The property 'm4' is defined in multiple extensions for 'Class' and neither is more specific.
  - 'Class' is from 'pkg/front_end/testcases/extensions/getter_setter_conflict.dart'.
-Try correcting the name to the name of an existing setter, or defining a setter or field named 'm4'.
+Try using an explicit extension application of the wanted extension or hiding unwanted extensions from scope.
   c.m4 = 2;
     ^^";
 }
diff --git a/pkg/front_end/testcases/extensions/issue39527.dart b/pkg/front_end/testcases/extensions/issue39527.dart
new file mode 100644
index 0000000..7990741
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/issue39527.dart
@@ -0,0 +1,26 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class C {
+  int value = 0;
+}
+
+extension Extension1 on C {
+  C operator [](int index) => this..value += index + 1;
+  void operator []=(int index, C other) =>
+      this.value += other.value + index + 1;
+  C operator -(int val) => this;
+}
+
+main() {
+  C c = C();
+  // Original term that produces an unexpected error.
+  --Extension1(c)[42];
+
+  // The pre-decrement desugars as follows, which is also flagged as an error.
+  Extension1(c)[42] -= 1;
+
+  // The compound assignment desugars as follows, which is accepted.
+  Extension1(c)[42] = Extension1(c)[42] - 1;
+}
diff --git a/pkg/front_end/testcases/extensions/issue39527.dart.outline.expect b/pkg/front_end/testcases/extensions/issue39527.dart.outline.expect
new file mode 100644
index 0000000..a9e1f18
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/issue39527.dart.outline.expect
@@ -0,0 +1,22 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::int* value;
+  synthetic constructor •() → self::C*
+    ;
+}
+extension Extension1 on self::C* {
+  operator [] = self::Extension1|[];
+  operator []= = self::Extension1|[]=;
+  operator - = self::Extension1|-;
+}
+static method Extension1|[](final self::C* #this, core::int* index) → self::C*
+  ;
+static method Extension1|[]=(final self::C* #this, core::int* index, self::C* other) → void
+  ;
+static method Extension1|-(final self::C* #this, core::int* val) → self::C*
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/extensions/issue39527.dart.strong.expect b/pkg/front_end/testcases/extensions/issue39527.dart.strong.expect
new file mode 100644
index 0000000..56f3831
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/issue39527.dart.strong.expect
@@ -0,0 +1,27 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::int* value = 0;
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+}
+extension Extension1 on self::C* {
+  operator [] = self::Extension1|[];
+  operator []= = self::Extension1|[]=;
+  operator - = self::Extension1|-;
+}
+static method Extension1|[](final self::C* #this, core::int* index) → self::C*
+  return let final self::C* #t1 = #this in let final void #t2 = let final self::C* #t3 = #t1 in #t3.{self::C::value} = #t3.{self::C::value}.{core::num::+}(index.{core::num::+}(1)) in #t1;
+static method Extension1|[]=(final self::C* #this, core::int* index, self::C* other) → void
+  return let final self::C* #t4 = #this in #t4.{self::C::value} = #t4.{self::C::value}.{core::num::+}(other.{self::C::value}.{core::num::+}(index).{core::num::+}(1));
+static method Extension1|-(final self::C* #this, core::int* val) → self::C*
+  return #this;
+static method main() → dynamic {
+  self::C* c = new self::C::•();
+  let final self::C* #t5 = c in let final core::int* #t6 = 42 in let final self::C* #t7 = self::Extension1|-(self::Extension1|[](#t5, #t6), 1) in let final void #t8 = self::Extension1|[]=(#t5, #t6, #t7) in #t7;
+  let final self::C* #t9 = c in let final core::int* #t10 = 42 in self::Extension1|[]=(#t9, #t10, self::Extension1|-(self::Extension1|[](#t9, #t10), 1));
+  self::Extension1|[]=(c, 42, self::Extension1|-(self::Extension1|[](c, 42), 1));
+}
diff --git a/pkg/front_end/testcases/extensions/issue39527.dart.strong.transformed.expect b/pkg/front_end/testcases/extensions/issue39527.dart.strong.transformed.expect
new file mode 100644
index 0000000..56f3831
--- /dev/null
+++ b/pkg/front_end/testcases/extensions/issue39527.dart.strong.transformed.expect
@@ -0,0 +1,27 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  field core::int* value = 0;
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+}
+extension Extension1 on self::C* {
+  operator [] = self::Extension1|[];
+  operator []= = self::Extension1|[]=;
+  operator - = self::Extension1|-;
+}
+static method Extension1|[](final self::C* #this, core::int* index) → self::C*
+  return let final self::C* #t1 = #this in let final void #t2 = let final self::C* #t3 = #t1 in #t3.{self::C::value} = #t3.{self::C::value}.{core::num::+}(index.{core::num::+}(1)) in #t1;
+static method Extension1|[]=(final self::C* #this, core::int* index, self::C* other) → void
+  return let final self::C* #t4 = #this in #t4.{self::C::value} = #t4.{self::C::value}.{core::num::+}(other.{self::C::value}.{core::num::+}(index).{core::num::+}(1));
+static method Extension1|-(final self::C* #this, core::int* val) → self::C*
+  return #this;
+static method main() → dynamic {
+  self::C* c = new self::C::•();
+  let final self::C* #t5 = c in let final core::int* #t6 = 42 in let final self::C* #t7 = self::Extension1|-(self::Extension1|[](#t5, #t6), 1) in let final void #t8 = self::Extension1|[]=(#t5, #t6, #t7) in #t7;
+  let final self::C* #t9 = c in let final core::int* #t10 = 42 in self::Extension1|[]=(#t9, #t10, self::Extension1|-(self::Extension1|[](#t9, #t10), 1));
+  self::Extension1|[]=(c, 42, self::Extension1|-(self::Extension1|[](c, 42), 1));
+}
diff --git a/pkg/front_end/testcases/general/cascade.dart.strong.expect b/pkg/front_end/testcases/general/cascade.dart.strong.expect
index ed144d6..70120f9 100644
--- a/pkg/front_end/testcases/general/cascade.dart.strong.expect
+++ b/pkg/front_end/testcases/general/cascade.dart.strong.expect
@@ -12,8 +12,8 @@
 //     ..first.last.toString()
 //             ^^^^
 //
-// pkg/front_end/testcases/general/cascade.dart:29:12: Error: The method '[]' isn't defined for the class 'int'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]'.
+// pkg/front_end/testcases/general/cascade.dart:29:12: Error: The operator '[]' isn't defined for the class 'int'.
+// Try correcting the operator to an existing operator, or defining a '[]' operator.
 //     ..first[0].toString()
 //            ^
 //
@@ -38,8 +38,8 @@
     ^" in <core::int*>[1] as{TypeError} core::int*] in let final void #t15 = invalid-expression "pkg/front_end/testcases/general/cascade.dart:28:13: Error: The getter 'last' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'last'.
     ..first.last.toString()
-            ^^^^".{core::Object::toString}() in let final void #t16 = invalid-expression "pkg/front_end/testcases/general/cascade.dart:29:12: Error: The method '[]' isn't defined for the class 'int'.
-Try correcting the name to the name of an existing method, or defining a method named '[]'.
+            ^^^^".{core::Object::toString}() in let final void #t16 = invalid-expression "pkg/front_end/testcases/general/cascade.dart:29:12: Error: The operator '[]' isn't defined for the class 'int'.
+Try correcting the operator to an existing operator, or defining a '[]' operator.
     ..first[0].toString()
            ^".{core::Object::toString}() in let final void #t17 = invalid-expression "pkg/front_end/testcases/general/cascade.dart:30:11: Error: The getter 'last' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'last'.
diff --git a/pkg/front_end/testcases/general/cascade.dart.strong.transformed.expect b/pkg/front_end/testcases/general/cascade.dart.strong.transformed.expect
index ed144d6..70120f9 100644
--- a/pkg/front_end/testcases/general/cascade.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/cascade.dart.strong.transformed.expect
@@ -12,8 +12,8 @@
 //     ..first.last.toString()
 //             ^^^^
 //
-// pkg/front_end/testcases/general/cascade.dart:29:12: Error: The method '[]' isn't defined for the class 'int'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]'.
+// pkg/front_end/testcases/general/cascade.dart:29:12: Error: The operator '[]' isn't defined for the class 'int'.
+// Try correcting the operator to an existing operator, or defining a '[]' operator.
 //     ..first[0].toString()
 //            ^
 //
@@ -38,8 +38,8 @@
     ^" in <core::int*>[1] as{TypeError} core::int*] in let final void #t15 = invalid-expression "pkg/front_end/testcases/general/cascade.dart:28:13: Error: The getter 'last' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'last'.
     ..first.last.toString()
-            ^^^^".{core::Object::toString}() in let final void #t16 = invalid-expression "pkg/front_end/testcases/general/cascade.dart:29:12: Error: The method '[]' isn't defined for the class 'int'.
-Try correcting the name to the name of an existing method, or defining a method named '[]'.
+            ^^^^".{core::Object::toString}() in let final void #t16 = invalid-expression "pkg/front_end/testcases/general/cascade.dart:29:12: Error: The operator '[]' isn't defined for the class 'int'.
+Try correcting the operator to an existing operator, or defining a '[]' operator.
     ..first[0].toString()
            ^".{core::Object::toString}() in let final void #t17 = invalid-expression "pkg/front_end/testcases/general/cascade.dart:30:11: Error: The getter 'last' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'last'.
diff --git a/pkg/front_end/testcases/general/ignore_function.dart.outline.expect b/pkg/front_end/testcases/general/ignore_function.dart.outline.expect
index 777f40b..6172453 100644
--- a/pkg/front_end/testcases/general/ignore_function.dart.outline.expect
+++ b/pkg/front_end/testcases/general/ignore_function.dart.outline.expect
@@ -4,7 +4,7 @@
 
 import "dart:core" as core;
 
-class A extends core::Object implements core::Function {
+class A extends core::Object {
   synthetic constructor •() → self::A*
     ;
   operator ==(dynamic other) → core::bool*
diff --git a/pkg/front_end/testcases/general/ignore_function.dart.strong.expect b/pkg/front_end/testcases/general/ignore_function.dart.strong.expect
index 8006a4c..b28a177 100644
--- a/pkg/front_end/testcases/general/ignore_function.dart.strong.expect
+++ b/pkg/front_end/testcases/general/ignore_function.dart.strong.expect
@@ -4,7 +4,7 @@
 
 import "dart:core" as core;
 
-class A extends core::Object implements core::Function {
+class A extends core::Object {
   synthetic constructor •() → self::A*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/ignore_function.dart.strong.transformed.expect b/pkg/front_end/testcases/general/ignore_function.dart.strong.transformed.expect
index 8006a4c..b28a177 100644
--- a/pkg/front_end/testcases/general/ignore_function.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/ignore_function.dart.strong.transformed.expect
@@ -4,7 +4,7 @@
 
 import "dart:core" as core;
 
-class A extends core::Object implements core::Function {
+class A extends core::Object {
   synthetic constructor •() → self::A*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general/infer_field_from_multiple.dart.outline.expect b/pkg/front_end/testcases/general/infer_field_from_multiple.dart.outline.expect
index 71c3fc8..8738863 100644
--- a/pkg/front_end/testcases/general/infer_field_from_multiple.dart.outline.expect
+++ b/pkg/front_end/testcases/general/infer_field_from_multiple.dart.outline.expect
@@ -6,66 +6,144 @@
 // Try adding an explicit type.
 //   var field2; // error
 //       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:7:7: Context: This is one of the inherited members.
+//   var field2 = 0;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:28:7: Context: This is one of the inherited members.
+//   var field2 = '';
+//       ^^^^^^
 //
 // pkg/front_end/testcases/general/infer_field_from_multiple.dart:51:7: Error: Can't infer a type for 'field4' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   var field4 = 0; // error
 //       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:9:7: Context: This is one of the inherited members.
+//   var field4 = 0;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:30:7: Context: This is one of the inherited members.
+//   var field4 = '';
+//       ^^^^^^
 //
 // pkg/front_end/testcases/general/infer_field_from_multiple.dart:53:7: Error: Can't infer a type for 'field6' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   var field6; // error
 //       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:11:7: Context: This is one of the inherited members.
+//   int field6;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:32:10: Context: This is one of the inherited members.
+//   String field6;
+//          ^^^^^^
 //
 // pkg/front_end/testcases/general/infer_field_from_multiple.dart:55:7: Error: Can't infer a type for 'field8' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   var field8 = 0; // error
 //       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:13:7: Context: This is one of the inherited members.
+//   int field8;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:34:10: Context: This is one of the inherited members.
+//   String field8;
+//          ^^^^^^
 //
 // pkg/front_end/testcases/general/infer_field_from_multiple.dart:58:7: Error: Can't infer a type for 'field11' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   var field11; // error
 //       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:16:5: Context: This is one of the inherited members.
+//   T field11;
+//     ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:37:5: Context: This is one of the inherited members.
+//   S field11;
+//     ^^^^^^^
 //
 // pkg/front_end/testcases/general/infer_field_from_multiple.dart:64:7: Error: Can't infer a type for 'field17' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   var field17; // error
 //       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:22:7: Context: This is one of the inherited members.
+//   var field17 = 0;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:43:10: Context: This is one of the inherited members.
+//   String field17;
+//          ^^^^^^^
 //
 // pkg/front_end/testcases/general/infer_field_from_multiple.dart:65:7: Error: Can't infer a type for 'field18' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   var field18; // error
 //       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:23:7: Context: This is one of the inherited members.
+//   int field18;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:44:7: Context: This is one of the inherited members.
+//   var field18 = '';
+//       ^^^^^^^
 //
 // pkg/front_end/testcases/general/infer_field_from_multiple.dart:90:7: Error: Can't infer a type for 'field2' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   var field2; // error
 //       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:7:7: Context: This is one of the inherited members.
+//   var field2 = 0;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:28:7: Context: This is one of the inherited members.
+//   var field2 = '';
+//       ^^^^^^
 //
 // pkg/front_end/testcases/general/infer_field_from_multiple.dart:92:7: Error: Can't infer a type for 'field4' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   var field4 = 0; // error
 //       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:9:7: Context: This is one of the inherited members.
+//   var field4 = 0;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:30:7: Context: This is one of the inherited members.
+//   var field4 = '';
+//       ^^^^^^
 //
 // pkg/front_end/testcases/general/infer_field_from_multiple.dart:94:7: Error: Can't infer a type for 'field6' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   var field6; // error
 //       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:11:7: Context: This is one of the inherited members.
+//   int field6;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:32:10: Context: This is one of the inherited members.
+//   String field6;
+//          ^^^^^^
 //
 // pkg/front_end/testcases/general/infer_field_from_multiple.dart:96:7: Error: Can't infer a type for 'field8' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   var field8 = 0; // error
 //       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:13:7: Context: This is one of the inherited members.
+//   int field8;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:34:10: Context: This is one of the inherited members.
+//   String field8;
+//          ^^^^^^
 //
 // pkg/front_end/testcases/general/infer_field_from_multiple.dart:105:7: Error: Can't infer a type for 'field17' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   var field17; // error
 //       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:22:7: Context: This is one of the inherited members.
+//   var field17 = 0;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:43:10: Context: This is one of the inherited members.
+//   String field17;
+//          ^^^^^^^
 //
 // pkg/front_end/testcases/general/infer_field_from_multiple.dart:106:7: Error: Can't infer a type for 'field18' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   var field18; // error
 //       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:23:7: Context: This is one of the inherited members.
+//   int field18;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:44:7: Context: This is one of the inherited members.
+//   var field18 = '';
+//       ^^^^^^^
 //
 // pkg/front_end/testcases/general/infer_field_from_multiple.dart:61:7: Error: The return type of the method 'C.field14' is 'int', which does not match the return type, 'String', of the overridden method, 'B.field14'.
 // Change to a subtype of 'String'.
diff --git a/pkg/front_end/testcases/general/infer_field_from_multiple.dart.strong.expect b/pkg/front_end/testcases/general/infer_field_from_multiple.dart.strong.expect
index 811dec5..4b93926 100644
--- a/pkg/front_end/testcases/general/infer_field_from_multiple.dart.strong.expect
+++ b/pkg/front_end/testcases/general/infer_field_from_multiple.dart.strong.expect
@@ -6,66 +6,144 @@
 // Try adding an explicit type.
 //   var field2; // error
 //       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:7:7: Context: This is one of the inherited members.
+//   var field2 = 0;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:28:7: Context: This is one of the inherited members.
+//   var field2 = '';
+//       ^^^^^^
 //
 // pkg/front_end/testcases/general/infer_field_from_multiple.dart:51:7: Error: Can't infer a type for 'field4' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   var field4 = 0; // error
 //       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:9:7: Context: This is one of the inherited members.
+//   var field4 = 0;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:30:7: Context: This is one of the inherited members.
+//   var field4 = '';
+//       ^^^^^^
 //
 // pkg/front_end/testcases/general/infer_field_from_multiple.dart:53:7: Error: Can't infer a type for 'field6' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   var field6; // error
 //       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:11:7: Context: This is one of the inherited members.
+//   int field6;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:32:10: Context: This is one of the inherited members.
+//   String field6;
+//          ^^^^^^
 //
 // pkg/front_end/testcases/general/infer_field_from_multiple.dart:55:7: Error: Can't infer a type for 'field8' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   var field8 = 0; // error
 //       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:13:7: Context: This is one of the inherited members.
+//   int field8;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:34:10: Context: This is one of the inherited members.
+//   String field8;
+//          ^^^^^^
 //
 // pkg/front_end/testcases/general/infer_field_from_multiple.dart:58:7: Error: Can't infer a type for 'field11' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   var field11; // error
 //       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:16:5: Context: This is one of the inherited members.
+//   T field11;
+//     ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:37:5: Context: This is one of the inherited members.
+//   S field11;
+//     ^^^^^^^
 //
 // pkg/front_end/testcases/general/infer_field_from_multiple.dart:64:7: Error: Can't infer a type for 'field17' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   var field17; // error
 //       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:22:7: Context: This is one of the inherited members.
+//   var field17 = 0;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:43:10: Context: This is one of the inherited members.
+//   String field17;
+//          ^^^^^^^
 //
 // pkg/front_end/testcases/general/infer_field_from_multiple.dart:65:7: Error: Can't infer a type for 'field18' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   var field18; // error
 //       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:23:7: Context: This is one of the inherited members.
+//   int field18;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:44:7: Context: This is one of the inherited members.
+//   var field18 = '';
+//       ^^^^^^^
 //
 // pkg/front_end/testcases/general/infer_field_from_multiple.dart:90:7: Error: Can't infer a type for 'field2' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   var field2; // error
 //       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:7:7: Context: This is one of the inherited members.
+//   var field2 = 0;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:28:7: Context: This is one of the inherited members.
+//   var field2 = '';
+//       ^^^^^^
 //
 // pkg/front_end/testcases/general/infer_field_from_multiple.dart:92:7: Error: Can't infer a type for 'field4' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   var field4 = 0; // error
 //       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:9:7: Context: This is one of the inherited members.
+//   var field4 = 0;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:30:7: Context: This is one of the inherited members.
+//   var field4 = '';
+//       ^^^^^^
 //
 // pkg/front_end/testcases/general/infer_field_from_multiple.dart:94:7: Error: Can't infer a type for 'field6' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   var field6; // error
 //       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:11:7: Context: This is one of the inherited members.
+//   int field6;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:32:10: Context: This is one of the inherited members.
+//   String field6;
+//          ^^^^^^
 //
 // pkg/front_end/testcases/general/infer_field_from_multiple.dart:96:7: Error: Can't infer a type for 'field8' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   var field8 = 0; // error
 //       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:13:7: Context: This is one of the inherited members.
+//   int field8;
+//       ^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:34:10: Context: This is one of the inherited members.
+//   String field8;
+//          ^^^^^^
 //
 // pkg/front_end/testcases/general/infer_field_from_multiple.dart:105:7: Error: Can't infer a type for 'field17' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   var field17; // error
 //       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:22:7: Context: This is one of the inherited members.
+//   var field17 = 0;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:43:10: Context: This is one of the inherited members.
+//   String field17;
+//          ^^^^^^^
 //
 // pkg/front_end/testcases/general/infer_field_from_multiple.dart:106:7: Error: Can't infer a type for 'field18' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   var field18; // error
 //       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:23:7: Context: This is one of the inherited members.
+//   int field18;
+//       ^^^^^^^
+// pkg/front_end/testcases/general/infer_field_from_multiple.dart:44:7: Context: This is one of the inherited members.
+//   var field18 = '';
+//       ^^^^^^^
 //
 // pkg/front_end/testcases/general/infer_field_from_multiple.dart:61:7: Error: The return type of the method 'C.field14' is 'int', which does not match the return type, 'String', of the overridden method, 'B.field14'.
 // Change to a subtype of 'String'.
diff --git a/pkg/front_end/testcases/general/inherit_function.dart b/pkg/front_end/testcases/general/inherit_function.dart
new file mode 100644
index 0000000..c670d37
--- /dev/null
+++ b/pkg/front_end/testcases/general/inherit_function.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class A implements Function {}
+
+class B extends Function {}
+
+class C extends Object with Function {}
+
+class D = Object with Function;
+
+main() {}
diff --git a/pkg/front_end/testcases/general/inherit_function.dart.outline.expect b/pkg/front_end/testcases/general/inherit_function.dart.outline.expect
new file mode 100644
index 0000000..76b247c
--- /dev/null
+++ b/pkg/front_end/testcases/general/inherit_function.dart.outline.expect
@@ -0,0 +1,26 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    ;
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    ;
+}
+abstract class _C&Object&Function extends core::Object {
+  synthetic constructor •() → self::_C&Object&Function*
+    ;
+}
+class C extends self::_C&Object&Function {
+  synthetic constructor •() → self::C*
+    ;
+}
+class D extends core::Object {
+  synthetic constructor •() → self::D*
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/general/inherit_function.dart.strong.expect b/pkg/front_end/testcases/general/inherit_function.dart.strong.expect
new file mode 100644
index 0000000..3167f12
--- /dev/null
+++ b/pkg/front_end/testcases/general/inherit_function.dart.strong.expect
@@ -0,0 +1,30 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+}
+abstract class _C&Object&Function extends core::Object {
+  synthetic constructor •() → self::_C&Object&Function*
+    : super core::Object::•()
+    ;
+}
+class C extends self::_C&Object&Function {
+  synthetic constructor •() → self::C*
+    : super self::_C&Object&Function::•()
+    ;
+}
+class D extends core::Object {
+  synthetic constructor •() → self::D*
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/inherit_function.dart.strong.transformed.expect b/pkg/front_end/testcases/general/inherit_function.dart.strong.transformed.expect
new file mode 100644
index 0000000..3167f12
--- /dev/null
+++ b/pkg/front_end/testcases/general/inherit_function.dart.strong.transformed.expect
@@ -0,0 +1,30 @@
+library;
+import self as self;
+import "dart:core" as core;
+
+class A extends core::Object {
+  synthetic constructor •() → self::A*
+    : super core::Object::•()
+    ;
+}
+class B extends core::Object {
+  synthetic constructor •() → self::B*
+    : super core::Object::•()
+    ;
+}
+abstract class _C&Object&Function extends core::Object {
+  synthetic constructor •() → self::_C&Object&Function*
+    : super core::Object::•()
+    ;
+}
+class C extends self::_C&Object&Function {
+  synthetic constructor •() → self::C*
+    : super self::_C&Object&Function::•()
+    ;
+}
+class D extends core::Object {
+  synthetic constructor •() → self::D*
+    : super core::Object::•()
+    ;
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/interface_conflict.dart.outline.expect b/pkg/front_end/testcases/general/interface_conflict.dart.outline.expect
index 3ccf348..4c1f615 100644
--- a/pkg/front_end/testcases/general/interface_conflict.dart.outline.expect
+++ b/pkg/front_end/testcases/general/interface_conflict.dart.outline.expect
@@ -6,10 +6,10 @@
 // Try adding a declaration of 'n' to 'C'.
 // abstract class C implements A, B {}
 //                ^
-// pkg/front_end/testcases/general/interface_conflict.dart:6:11: Context: This is the inherited member.
+// pkg/front_end/testcases/general/interface_conflict.dart:6:11: Context: This is one of the inherited members.
 //   int get n => 1;
 //           ^
-// pkg/front_end/testcases/general/interface_conflict.dart:10:14: Context: This is the inherited member.
+// pkg/front_end/testcases/general/interface_conflict.dart:10:14: Context: This is one of the inherited members.
 //   double get n => 2.0;
 //              ^
 //
diff --git a/pkg/front_end/testcases/general/interface_conflict.dart.strong.expect b/pkg/front_end/testcases/general/interface_conflict.dart.strong.expect
index af83801..12165b4 100644
--- a/pkg/front_end/testcases/general/interface_conflict.dart.strong.expect
+++ b/pkg/front_end/testcases/general/interface_conflict.dart.strong.expect
@@ -6,10 +6,10 @@
 // Try adding a declaration of 'n' to 'C'.
 // abstract class C implements A, B {}
 //                ^
-// pkg/front_end/testcases/general/interface_conflict.dart:6:11: Context: This is the inherited member.
+// pkg/front_end/testcases/general/interface_conflict.dart:6:11: Context: This is one of the inherited members.
 //   int get n => 1;
 //           ^
-// pkg/front_end/testcases/general/interface_conflict.dart:10:14: Context: This is the inherited member.
+// pkg/front_end/testcases/general/interface_conflict.dart:10:14: Context: This is one of the inherited members.
 //   double get n => 2.0;
 //              ^
 //
diff --git a/pkg/front_end/testcases/general/interface_conflict.dart.strong.transformed.expect b/pkg/front_end/testcases/general/interface_conflict.dart.strong.transformed.expect
index af83801..12165b4 100644
--- a/pkg/front_end/testcases/general/interface_conflict.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/interface_conflict.dart.strong.transformed.expect
@@ -6,10 +6,10 @@
 // Try adding a declaration of 'n' to 'C'.
 // abstract class C implements A, B {}
 //                ^
-// pkg/front_end/testcases/general/interface_conflict.dart:6:11: Context: This is the inherited member.
+// pkg/front_end/testcases/general/interface_conflict.dart:6:11: Context: This is one of the inherited members.
 //   int get n => 1;
 //           ^
-// pkg/front_end/testcases/general/interface_conflict.dart:10:14: Context: This is the inherited member.
+// pkg/front_end/testcases/general/interface_conflict.dart:10:14: Context: This is one of the inherited members.
 //   double get n => 2.0;
 //              ^
 //
diff --git a/pkg/front_end/testcases/general/invalid_operator.dart.outline.expect b/pkg/front_end/testcases/general/invalid_operator.dart.outline.expect
index fc36801..eeef39a 100644
--- a/pkg/front_end/testcases/general/invalid_operator.dart.outline.expect
+++ b/pkg/front_end/testcases/general/invalid_operator.dart.outline.expect
@@ -566,7 +566,7 @@
 class Operators1 extends core::Object {
   synthetic constructor •() → self::Operators1*
     ;
-  operator ==() → dynamic
+  operator ==() → core::bool*
     ;
   operator <() → dynamic
     ;
@@ -606,7 +606,7 @@
 class Operators2 extends core::Object {
   synthetic constructor •() → self::Operators2*
     ;
-  operator ==(dynamic a, dynamic b) → dynamic
+  operator ==(dynamic a, dynamic b) → core::bool*
     ;
   operator <(dynamic a, dynamic b) → dynamic
     ;
@@ -690,7 +690,7 @@
 class Operators4 extends core::Object {
   synthetic constructor •() → self::Operators4*
     ;
-  operator ==({dynamic a}) → dynamic
+  operator ==({dynamic a}) → core::bool*
     ;
   operator <({dynamic a}) → dynamic
     ;
diff --git a/pkg/front_end/testcases/general/invalid_operator.dart.strong.expect b/pkg/front_end/testcases/general/invalid_operator.dart.strong.expect
index e36b062..9580fe8 100644
--- a/pkg/front_end/testcases/general/invalid_operator.dart.strong.expect
+++ b/pkg/front_end/testcases/general/invalid_operator.dart.strong.expect
@@ -567,7 +567,7 @@
   synthetic constructor •() → self::Operators1*
     : super core::Object::•()
     ;
-  operator ==() → dynamic
+  operator ==() → core::bool*
     return true;
   operator <() → dynamic
     return true;
@@ -608,7 +608,7 @@
   synthetic constructor •() → self::Operators2*
     : super core::Object::•()
     ;
-  operator ==(dynamic a, dynamic b) → dynamic
+  operator ==(dynamic a, dynamic b) → core::bool*
     return true;
   operator <(dynamic a, dynamic b) → dynamic
     return true;
@@ -694,7 +694,7 @@
   synthetic constructor •() → self::Operators4*
     : super core::Object::•()
     ;
-  operator ==({dynamic a = #C1}) → dynamic
+  operator ==({dynamic a = #C1}) → core::bool*
     return true;
   operator <({dynamic a = #C1}) → dynamic
     return true;
diff --git a/pkg/front_end/testcases/general/invalid_type.dart.strong.transformed.expect b/pkg/front_end/testcases/general/invalid_type.dart.strong.transformed.expect
new file mode 100644
index 0000000..b405807
--- /dev/null
+++ b/pkg/front_end/testcases/general/invalid_type.dart.strong.transformed.expect
@@ -0,0 +1,38 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general/invalid_type.dart:7:5: Error: Expected identifier, but got 'this'.
+//     this.bar();
+//     ^^^^
+//
+// pkg/front_end/testcases/general/invalid_type.dart:12:12: Error: 'Missing' isn't a type.
+//   (null as Missing).bar();
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/general/invalid_type.dart:13:8: Error: The method 'bar' isn't defined for the class 'Null'.
+// Try correcting the name to the name of an existing method, or defining a method named 'bar'.
+//   null.bar();
+//        ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  static method foo() → dynamic {
+    invalid-expression "pkg/front_end/testcases/general/invalid_type.dart:7:5: Error: Expected identifier, but got 'this'.
+    this.bar();
+    ^^^^".bar();
+  }
+}
+static method test() → dynamic {
+  (null as invalid-type).bar();
+  invalid-expression "pkg/front_end/testcases/general/invalid_type.dart:13:8: Error: The method 'bar' isn't defined for the class 'Null'.
+Try correcting the name to the name of an existing method, or defining a method named 'bar'.
+  null.bar();
+       ^^^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general/missing_toplevel.dart.strong.expect b/pkg/front_end/testcases/general/missing_toplevel.dart.strong.expect
index 51f556d..921e9cd 100644
--- a/pkg/front_end/testcases/general/missing_toplevel.dart.strong.expect
+++ b/pkg/front_end/testcases/general/missing_toplevel.dart.strong.expect
@@ -2,21 +2,21 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/missing_toplevel.dart:27:48: Error: The method '+' isn't defined for the class 'EmptyClass'.
+// pkg/front_end/testcases/general/missing_toplevel.dart:27:48: Error: The operator '+' isn't defined for the class 'EmptyClass'.
 //  - 'EmptyClass' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '+'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
 // var missingBinary = classWithProperty.property += 2;
 //                                                ^
 //
-// pkg/front_end/testcases/general/missing_toplevel.dart:28:40: Error: The method '[]' isn't defined for the class 'ClassWithIndexSet'.
+// pkg/front_end/testcases/general/missing_toplevel.dart:28:40: Error: The operator '[]' isn't defined for the class 'ClassWithIndexSet'.
 //  - 'ClassWithIndexSet' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]'.
+// Try correcting the operator to an existing operator, or defining a '[]' operator.
 // var missingIndexGet = classWithIndexSet[0] ??= 2;
 //                                        ^
 //
-// pkg/front_end/testcases/general/missing_toplevel.dart:29:40: Error: The method '[]=' isn't defined for the class 'ClassWithIndexGet'.
+// pkg/front_end/testcases/general/missing_toplevel.dart:29:40: Error: The operator '[]=' isn't defined for the class 'ClassWithIndexGet'.
 //  - 'ClassWithIndexGet' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]='.
+// Try correcting the operator to an existing operator, or defining a '[]=' operator.
 // var missingIndexSet = classWithIndexGet[0] ??= 2;
 //                                        ^
 //
@@ -63,19 +63,19 @@
 static field self::ClassWithProperty* classWithProperty = new self::ClassWithProperty::•();
 static field self::ClassWithIndexSet* classWithIndexSet = new self::ClassWithIndexSet::•();
 static field self::ClassWithIndexGet* classWithIndexGet = new self::ClassWithIndexGet::•();
-static field dynamic missingBinary = let final self::ClassWithProperty* #t1 = self::classWithProperty in #t1.{self::ClassWithProperty::property} = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:27:48: Error: The method '+' isn't defined for the class 'EmptyClass'.
+static field dynamic missingBinary = let final self::ClassWithProperty* #t1 = self::classWithProperty in #t1.{self::ClassWithProperty::property} = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:27:48: Error: The operator '+' isn't defined for the class 'EmptyClass'.
  - 'EmptyClass' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '+'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
 var missingBinary = classWithProperty.property += 2;
                                                ^" as{TypeError,ForDynamic} self::EmptyClass*;
-static field dynamic missingIndexGet = let final self::ClassWithIndexSet* #t2 = self::classWithIndexSet in let final core::int* #t3 = 0 in let final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:28:40: Error: The method '[]' isn't defined for the class 'ClassWithIndexSet'.
+static field dynamic missingIndexGet = let final self::ClassWithIndexSet* #t2 = self::classWithIndexSet in let final core::int* #t3 = 0 in let final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:28:40: Error: The operator '[]' isn't defined for the class 'ClassWithIndexSet'.
  - 'ClassWithIndexSet' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '[]'.
+Try correcting the operator to an existing operator, or defining a '[]' operator.
 var missingIndexGet = classWithIndexSet[0] ??= 2;
                                        ^" in #t4.{core::Object::==}(null) ?{dynamic} let final core::int* #t5 = 2 in let final void #t6 = #t2.{self::ClassWithIndexSet::[]=}(#t3, #t5) in #t5 : #t4;
-static field core::int* missingIndexSet = let final self::ClassWithIndexGet* #t7 = self::classWithIndexGet in let final core::int* #t8 = 0 in let final core::int* #t9 = #t7.{self::ClassWithIndexGet::[]}(#t8) in #t9.{core::num::==}(null) ?{core::int*} let final core::int* #t10 = 2 in let final void #t11 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:29:40: Error: The method '[]=' isn't defined for the class 'ClassWithIndexGet'.
+static field core::int* missingIndexSet = let final self::ClassWithIndexGet* #t7 = self::classWithIndexGet in let final core::int* #t8 = 0 in let final core::int* #t9 = #t7.{self::ClassWithIndexGet::[]}(#t8) in #t9.{core::num::==}(null) ?{core::int*} let final core::int* #t10 = 2 in let final void #t11 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:29:40: Error: The operator '[]=' isn't defined for the class 'ClassWithIndexGet'.
  - 'ClassWithIndexGet' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '[]='.
+Try correcting the operator to an existing operator, or defining a '[]=' operator.
 var missingIndexSet = classWithIndexGet[0] ??= 2;
                                        ^" in #t10 : #t9;
 static field dynamic missingPropertyGet = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:30:37: Error: The getter 'property' isn't defined for the class 'EmptyClass'.
diff --git a/pkg/front_end/testcases/general/missing_toplevel.dart.strong.transformed.expect b/pkg/front_end/testcases/general/missing_toplevel.dart.strong.transformed.expect
index 51f556d..921e9cd 100644
--- a/pkg/front_end/testcases/general/missing_toplevel.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/missing_toplevel.dart.strong.transformed.expect
@@ -2,21 +2,21 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general/missing_toplevel.dart:27:48: Error: The method '+' isn't defined for the class 'EmptyClass'.
+// pkg/front_end/testcases/general/missing_toplevel.dart:27:48: Error: The operator '+' isn't defined for the class 'EmptyClass'.
 //  - 'EmptyClass' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '+'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
 // var missingBinary = classWithProperty.property += 2;
 //                                                ^
 //
-// pkg/front_end/testcases/general/missing_toplevel.dart:28:40: Error: The method '[]' isn't defined for the class 'ClassWithIndexSet'.
+// pkg/front_end/testcases/general/missing_toplevel.dart:28:40: Error: The operator '[]' isn't defined for the class 'ClassWithIndexSet'.
 //  - 'ClassWithIndexSet' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]'.
+// Try correcting the operator to an existing operator, or defining a '[]' operator.
 // var missingIndexGet = classWithIndexSet[0] ??= 2;
 //                                        ^
 //
-// pkg/front_end/testcases/general/missing_toplevel.dart:29:40: Error: The method '[]=' isn't defined for the class 'ClassWithIndexGet'.
+// pkg/front_end/testcases/general/missing_toplevel.dart:29:40: Error: The operator '[]=' isn't defined for the class 'ClassWithIndexGet'.
 //  - 'ClassWithIndexGet' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]='.
+// Try correcting the operator to an existing operator, or defining a '[]=' operator.
 // var missingIndexSet = classWithIndexGet[0] ??= 2;
 //                                        ^
 //
@@ -63,19 +63,19 @@
 static field self::ClassWithProperty* classWithProperty = new self::ClassWithProperty::•();
 static field self::ClassWithIndexSet* classWithIndexSet = new self::ClassWithIndexSet::•();
 static field self::ClassWithIndexGet* classWithIndexGet = new self::ClassWithIndexGet::•();
-static field dynamic missingBinary = let final self::ClassWithProperty* #t1 = self::classWithProperty in #t1.{self::ClassWithProperty::property} = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:27:48: Error: The method '+' isn't defined for the class 'EmptyClass'.
+static field dynamic missingBinary = let final self::ClassWithProperty* #t1 = self::classWithProperty in #t1.{self::ClassWithProperty::property} = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:27:48: Error: The operator '+' isn't defined for the class 'EmptyClass'.
  - 'EmptyClass' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '+'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
 var missingBinary = classWithProperty.property += 2;
                                                ^" as{TypeError,ForDynamic} self::EmptyClass*;
-static field dynamic missingIndexGet = let final self::ClassWithIndexSet* #t2 = self::classWithIndexSet in let final core::int* #t3 = 0 in let final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:28:40: Error: The method '[]' isn't defined for the class 'ClassWithIndexSet'.
+static field dynamic missingIndexGet = let final self::ClassWithIndexSet* #t2 = self::classWithIndexSet in let final core::int* #t3 = 0 in let final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:28:40: Error: The operator '[]' isn't defined for the class 'ClassWithIndexSet'.
  - 'ClassWithIndexSet' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '[]'.
+Try correcting the operator to an existing operator, or defining a '[]' operator.
 var missingIndexGet = classWithIndexSet[0] ??= 2;
                                        ^" in #t4.{core::Object::==}(null) ?{dynamic} let final core::int* #t5 = 2 in let final void #t6 = #t2.{self::ClassWithIndexSet::[]=}(#t3, #t5) in #t5 : #t4;
-static field core::int* missingIndexSet = let final self::ClassWithIndexGet* #t7 = self::classWithIndexGet in let final core::int* #t8 = 0 in let final core::int* #t9 = #t7.{self::ClassWithIndexGet::[]}(#t8) in #t9.{core::num::==}(null) ?{core::int*} let final core::int* #t10 = 2 in let final void #t11 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:29:40: Error: The method '[]=' isn't defined for the class 'ClassWithIndexGet'.
+static field core::int* missingIndexSet = let final self::ClassWithIndexGet* #t7 = self::classWithIndexGet in let final core::int* #t8 = 0 in let final core::int* #t9 = #t7.{self::ClassWithIndexGet::[]}(#t8) in #t9.{core::num::==}(null) ?{core::int*} let final core::int* #t10 = 2 in let final void #t11 = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:29:40: Error: The operator '[]=' isn't defined for the class 'ClassWithIndexGet'.
  - 'ClassWithIndexGet' is from 'pkg/front_end/testcases/general/missing_toplevel.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '[]='.
+Try correcting the operator to an existing operator, or defining a '[]=' operator.
 var missingIndexSet = classWithIndexGet[0] ??= 2;
                                        ^" in #t10 : #t9;
 static field dynamic missingPropertyGet = invalid-expression "pkg/front_end/testcases/general/missing_toplevel.dart:30:37: Error: The getter 'property' isn't defined for the class 'EmptyClass'.
diff --git a/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.strong.expect b/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.strong.expect
index 153bb13..483d84d 100644
--- a/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.strong.expect
+++ b/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.strong.expect
@@ -59,6 +59,6 @@
 
 constants  {
   #C1 = 0
-  #C2 = TypeLiteralConstant(dart.core::String*)
-  #C3 = TypeLiteralConstant(dart.core::int*)
+  #C2 = TypeLiteralConstant(core::String*)
+  #C3 = TypeLiteralConstant(core::int*)
 }
diff --git a/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.strong.transformed.expect b/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.strong.transformed.expect
index b2dbf88..fe66274 100644
--- a/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin_constructors_with_default_values.dart.strong.transformed.expect
@@ -59,6 +59,6 @@
 
 constants  {
   #C1 = 0
-  #C2 = TypeLiteralConstant(dart.core::String*)
-  #C3 = TypeLiteralConstant(dart.core::int*)
+  #C2 = TypeLiteralConstant(core::String*)
+  #C3 = TypeLiteralConstant(core::int*)
 }
diff --git a/pkg/front_end/testcases/general/mixin_interface_conflict.dart.outline.expect b/pkg/front_end/testcases/general/mixin_interface_conflict.dart.outline.expect
index 695123b..c48e36c 100644
--- a/pkg/front_end/testcases/general/mixin_interface_conflict.dart.outline.expect
+++ b/pkg/front_end/testcases/general/mixin_interface_conflict.dart.outline.expect
@@ -6,10 +6,10 @@
 // Try adding a declaration of 'n' to 'B with C'.
 // mixin M on B, C {}
 //       ^^^^^^
-// pkg/front_end/testcases/general/mixin_interface_conflict.dart:6:11: Context: This is the inherited member.
+// pkg/front_end/testcases/general/mixin_interface_conflict.dart:6:11: Context: This is one of the inherited members.
 //   int get n => 1;
 //           ^
-// pkg/front_end/testcases/general/mixin_interface_conflict.dart:10:14: Context: This is the inherited member.
+// pkg/front_end/testcases/general/mixin_interface_conflict.dart:10:14: Context: This is one of the inherited members.
 //   double get n => 2.0;
 //              ^
 //
diff --git a/pkg/front_end/testcases/general/mixin_interface_conflict.dart.strong.expect b/pkg/front_end/testcases/general/mixin_interface_conflict.dart.strong.expect
index a66d785..57da879 100644
--- a/pkg/front_end/testcases/general/mixin_interface_conflict.dart.strong.expect
+++ b/pkg/front_end/testcases/general/mixin_interface_conflict.dart.strong.expect
@@ -6,10 +6,10 @@
 // Try adding a declaration of 'n' to 'B with C'.
 // mixin M on B, C {}
 //       ^^^^^^
-// pkg/front_end/testcases/general/mixin_interface_conflict.dart:6:11: Context: This is the inherited member.
+// pkg/front_end/testcases/general/mixin_interface_conflict.dart:6:11: Context: This is one of the inherited members.
 //   int get n => 1;
 //           ^
-// pkg/front_end/testcases/general/mixin_interface_conflict.dart:10:14: Context: This is the inherited member.
+// pkg/front_end/testcases/general/mixin_interface_conflict.dart:10:14: Context: This is one of the inherited members.
 //   double get n => 2.0;
 //              ^
 //
diff --git a/pkg/front_end/testcases/general/mixin_interface_conflict.dart.strong.transformed.expect b/pkg/front_end/testcases/general/mixin_interface_conflict.dart.strong.transformed.expect
index a66d785..57da879 100644
--- a/pkg/front_end/testcases/general/mixin_interface_conflict.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/mixin_interface_conflict.dart.strong.transformed.expect
@@ -6,10 +6,10 @@
 // Try adding a declaration of 'n' to 'B with C'.
 // mixin M on B, C {}
 //       ^^^^^^
-// pkg/front_end/testcases/general/mixin_interface_conflict.dart:6:11: Context: This is the inherited member.
+// pkg/front_end/testcases/general/mixin_interface_conflict.dart:6:11: Context: This is one of the inherited members.
 //   int get n => 1;
 //           ^
-// pkg/front_end/testcases/general/mixin_interface_conflict.dart:10:14: Context: This is the inherited member.
+// pkg/front_end/testcases/general/mixin_interface_conflict.dart:10:14: Context: This is one of the inherited members.
 //   double get n => 2.0;
 //              ^
 //
diff --git a/pkg/front_end/testcases/general/operator_method_not_found.dart.strong.expect b/pkg/front_end/testcases/general/operator_method_not_found.dart.strong.expect
index 4bcc6e9..be431dd 100644
--- a/pkg/front_end/testcases/general/operator_method_not_found.dart.strong.expect
+++ b/pkg/front_end/testcases/general/operator_method_not_found.dart.strong.expect
@@ -75,117 +75,117 @@
 //   print(foo ~ 2);
 //             ^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:12:13: Error: The method '<' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:12:13: Error: The operator '<' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '<'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
 //   print(foo < 2);
 //             ^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:13:13: Error: The method '>' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:13:13: Error: The operator '>' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '>'.
+// Try correcting the operator to an existing operator, or defining a '>' operator.
 //   print(foo > 2);
 //             ^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:14:13: Error: The method '<=' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:14:13: Error: The operator '<=' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '<='.
+// Try correcting the operator to an existing operator, or defining a '<=' operator.
 //   print(foo <= 2);
 //             ^^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:15:13: Error: The method '>=' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:15:13: Error: The operator '>=' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '>='.
+// Try correcting the operator to an existing operator, or defining a '>=' operator.
 //   print(foo >= 2);
 //             ^^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:17:13: Error: The method '-' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:17:13: Error: The operator '-' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '-'.
+// Try correcting the operator to an existing operator, or defining a '-' operator.
 //   print(foo - 2);
 //             ^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:18:13: Error: The method '+' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:18:13: Error: The operator '+' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '+'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
 //   print(foo + 2);
 //             ^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:19:13: Error: The method '/' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:19:13: Error: The operator '/' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '/'.
+// Try correcting the operator to an existing operator, or defining a '/' operator.
 //   print(foo / 2);
 //             ^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:20:13: Error: The method '~/' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:20:13: Error: The operator '~/' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '~/'.
+// Try correcting the operator to an existing operator, or defining a '~/' operator.
 //   print(foo ~/ 2);
 //             ^^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:21:13: Error: The method '*' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:21:13: Error: The operator '*' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '*'.
+// Try correcting the operator to an existing operator, or defining a '*' operator.
 //   print(foo * 2);
 //             ^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:22:13: Error: The method '%' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:22:13: Error: The operator '%' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '%'.
+// Try correcting the operator to an existing operator, or defining a '%' operator.
 //   print(foo % 2);
 //             ^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:23:13: Error: The method '|' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:23:13: Error: The operator '|' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '|'.
+// Try correcting the operator to an existing operator, or defining a '|' operator.
 //   print(foo | 2);
 //             ^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:24:13: Error: The method '^' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:24:13: Error: The operator '^' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '^'.
+// Try correcting the operator to an existing operator, or defining a '^' operator.
 //   print(foo ^ 2);
 //             ^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:25:13: Error: The method '&' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:25:13: Error: The operator '&' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '&'.
+// Try correcting the operator to an existing operator, or defining a '&' operator.
 //   print(foo & 2);
 //             ^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:26:13: Error: The method '<<' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:26:13: Error: The operator '<<' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '<<'.
+// Try correcting the operator to an existing operator, or defining a '<<' operator.
 //   print(foo << 2);
 //             ^^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:27:13: Error: The method '>>' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:27:13: Error: The operator '>>' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '>>'.
+// Try correcting the operator to an existing operator, or defining a '>>' operator.
 //   print(foo >> 2);
 //             ^^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:29:12: Error: The method '[]=' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:29:12: Error: The operator '[]=' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]='.
+// Try correcting the operator to an existing operator, or defining a '[]=' operator.
 //   print(foo[2] = 2);
 //            ^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:30:12: Error: The method '[]' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:30:12: Error: The operator '[]' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]'.
+// Try correcting the operator to an existing operator, or defining a '[]' operator.
 //   print(foo[2]);
 //            ^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:31:9: Error: The method '~' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:31:9: Error: The operator '~' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '~'.
+// Try correcting the operator to an existing operator, or defining a '~' operator.
 //   print(~foo);
 //         ^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:32:9: Error: The method 'unary-' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:32:9: Error: The operator 'unary-' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named 'unary-'.
+// Try correcting the operator to an existing operator, or defining a 'unary-' operator.
 //   print(-foo);
 //         ^
 //
@@ -199,100 +199,100 @@
 }
 static method main() → dynamic {
   self::Foo* foo = new self::Foo::•();
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:12:13: Error: The method '<' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:12:13: Error: The operator '<' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '<'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
   print(foo < 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:13:13: Error: The method '>' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:13:13: Error: The operator '>' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '>'.
+Try correcting the operator to an existing operator, or defining a '>' operator.
   print(foo > 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:14:13: Error: The method '<=' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:14:13: Error: The operator '<=' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '<='.
+Try correcting the operator to an existing operator, or defining a '<=' operator.
   print(foo <= 2);
             ^^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:15:13: Error: The method '>=' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:15:13: Error: The operator '>=' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '>='.
+Try correcting the operator to an existing operator, or defining a '>=' operator.
   print(foo >= 2);
             ^^");
   core::print(foo.{core::Object::==}(2));
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:17:13: Error: The method '-' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:17:13: Error: The operator '-' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '-'.
+Try correcting the operator to an existing operator, or defining a '-' operator.
   print(foo - 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:18:13: Error: The method '+' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:18:13: Error: The operator '+' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '+'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
   print(foo + 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:19:13: Error: The method '/' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:19:13: Error: The operator '/' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '/'.
+Try correcting the operator to an existing operator, or defining a '/' operator.
   print(foo / 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:20:13: Error: The method '~/' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:20:13: Error: The operator '~/' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '~/'.
+Try correcting the operator to an existing operator, or defining a '~/' operator.
   print(foo ~/ 2);
             ^^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:21:13: Error: The method '*' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:21:13: Error: The operator '*' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '*'.
+Try correcting the operator to an existing operator, or defining a '*' operator.
   print(foo * 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:22:13: Error: The method '%' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:22:13: Error: The operator '%' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '%'.
+Try correcting the operator to an existing operator, or defining a '%' operator.
   print(foo % 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:23:13: Error: The method '|' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:23:13: Error: The operator '|' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '|'.
+Try correcting the operator to an existing operator, or defining a '|' operator.
   print(foo | 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:24:13: Error: The method '^' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:24:13: Error: The operator '^' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '^'.
+Try correcting the operator to an existing operator, or defining a '^' operator.
   print(foo ^ 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:25:13: Error: The method '&' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:25:13: Error: The operator '&' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '&'.
+Try correcting the operator to an existing operator, or defining a '&' operator.
   print(foo & 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:26:13: Error: The method '<<' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:26:13: Error: The operator '<<' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '<<'.
+Try correcting the operator to an existing operator, or defining a '<<' operator.
   print(foo << 2);
             ^^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:27:13: Error: The method '>>' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:27:13: Error: The operator '>>' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '>>'.
+Try correcting the operator to an existing operator, or defining a '>>' operator.
   print(foo >> 2);
             ^^");
-  core::print(let final self::Foo* #t1 = foo in let final core::int* #t2 = 2 in let final core::int* #t3 = 2 in let final void #t4 = invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:29:12: Error: The method '[]=' isn't defined for the class 'Foo'.
+  core::print(let final self::Foo* #t1 = foo in let final core::int* #t2 = 2 in let final core::int* #t3 = 2 in let final void #t4 = invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:29:12: Error: The operator '[]=' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '[]='.
+Try correcting the operator to an existing operator, or defining a '[]=' operator.
   print(foo[2] = 2);
            ^" in #t3);
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:30:12: Error: The method '[]' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:30:12: Error: The operator '[]' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '[]'.
+Try correcting the operator to an existing operator, or defining a '[]' operator.
   print(foo[2]);
            ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:31:9: Error: The method '~' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:31:9: Error: The operator '~' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '~'.
+Try correcting the operator to an existing operator, or defining a '~' operator.
   print(~foo);
         ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:32:9: Error: The method 'unary-' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:32:9: Error: The operator 'unary-' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named 'unary-'.
+Try correcting the operator to an existing operator, or defining a 'unary-' operator.
   print(-foo);
         ^");
   core::print(<invalid-type>[]);
diff --git a/pkg/front_end/testcases/general/operator_method_not_found.dart.strong.transformed.expect b/pkg/front_end/testcases/general/operator_method_not_found.dart.strong.transformed.expect
index 4bcc6e9..be431dd 100644
--- a/pkg/front_end/testcases/general/operator_method_not_found.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/operator_method_not_found.dart.strong.transformed.expect
@@ -75,117 +75,117 @@
 //   print(foo ~ 2);
 //             ^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:12:13: Error: The method '<' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:12:13: Error: The operator '<' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '<'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
 //   print(foo < 2);
 //             ^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:13:13: Error: The method '>' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:13:13: Error: The operator '>' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '>'.
+// Try correcting the operator to an existing operator, or defining a '>' operator.
 //   print(foo > 2);
 //             ^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:14:13: Error: The method '<=' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:14:13: Error: The operator '<=' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '<='.
+// Try correcting the operator to an existing operator, or defining a '<=' operator.
 //   print(foo <= 2);
 //             ^^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:15:13: Error: The method '>=' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:15:13: Error: The operator '>=' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '>='.
+// Try correcting the operator to an existing operator, or defining a '>=' operator.
 //   print(foo >= 2);
 //             ^^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:17:13: Error: The method '-' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:17:13: Error: The operator '-' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '-'.
+// Try correcting the operator to an existing operator, or defining a '-' operator.
 //   print(foo - 2);
 //             ^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:18:13: Error: The method '+' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:18:13: Error: The operator '+' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '+'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
 //   print(foo + 2);
 //             ^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:19:13: Error: The method '/' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:19:13: Error: The operator '/' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '/'.
+// Try correcting the operator to an existing operator, or defining a '/' operator.
 //   print(foo / 2);
 //             ^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:20:13: Error: The method '~/' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:20:13: Error: The operator '~/' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '~/'.
+// Try correcting the operator to an existing operator, or defining a '~/' operator.
 //   print(foo ~/ 2);
 //             ^^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:21:13: Error: The method '*' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:21:13: Error: The operator '*' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '*'.
+// Try correcting the operator to an existing operator, or defining a '*' operator.
 //   print(foo * 2);
 //             ^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:22:13: Error: The method '%' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:22:13: Error: The operator '%' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '%'.
+// Try correcting the operator to an existing operator, or defining a '%' operator.
 //   print(foo % 2);
 //             ^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:23:13: Error: The method '|' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:23:13: Error: The operator '|' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '|'.
+// Try correcting the operator to an existing operator, or defining a '|' operator.
 //   print(foo | 2);
 //             ^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:24:13: Error: The method '^' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:24:13: Error: The operator '^' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '^'.
+// Try correcting the operator to an existing operator, or defining a '^' operator.
 //   print(foo ^ 2);
 //             ^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:25:13: Error: The method '&' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:25:13: Error: The operator '&' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '&'.
+// Try correcting the operator to an existing operator, or defining a '&' operator.
 //   print(foo & 2);
 //             ^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:26:13: Error: The method '<<' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:26:13: Error: The operator '<<' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '<<'.
+// Try correcting the operator to an existing operator, or defining a '<<' operator.
 //   print(foo << 2);
 //             ^^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:27:13: Error: The method '>>' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:27:13: Error: The operator '>>' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '>>'.
+// Try correcting the operator to an existing operator, or defining a '>>' operator.
 //   print(foo >> 2);
 //             ^^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:29:12: Error: The method '[]=' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:29:12: Error: The operator '[]=' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]='.
+// Try correcting the operator to an existing operator, or defining a '[]=' operator.
 //   print(foo[2] = 2);
 //            ^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:30:12: Error: The method '[]' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:30:12: Error: The operator '[]' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]'.
+// Try correcting the operator to an existing operator, or defining a '[]' operator.
 //   print(foo[2]);
 //            ^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:31:9: Error: The method '~' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:31:9: Error: The operator '~' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '~'.
+// Try correcting the operator to an existing operator, or defining a '~' operator.
 //   print(~foo);
 //         ^
 //
-// pkg/front_end/testcases/general/operator_method_not_found.dart:32:9: Error: The method 'unary-' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general/operator_method_not_found.dart:32:9: Error: The operator 'unary-' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named 'unary-'.
+// Try correcting the operator to an existing operator, or defining a 'unary-' operator.
 //   print(-foo);
 //         ^
 //
@@ -199,100 +199,100 @@
 }
 static method main() → dynamic {
   self::Foo* foo = new self::Foo::•();
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:12:13: Error: The method '<' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:12:13: Error: The operator '<' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '<'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
   print(foo < 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:13:13: Error: The method '>' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:13:13: Error: The operator '>' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '>'.
+Try correcting the operator to an existing operator, or defining a '>' operator.
   print(foo > 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:14:13: Error: The method '<=' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:14:13: Error: The operator '<=' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '<='.
+Try correcting the operator to an existing operator, or defining a '<=' operator.
   print(foo <= 2);
             ^^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:15:13: Error: The method '>=' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:15:13: Error: The operator '>=' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '>='.
+Try correcting the operator to an existing operator, or defining a '>=' operator.
   print(foo >= 2);
             ^^");
   core::print(foo.{core::Object::==}(2));
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:17:13: Error: The method '-' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:17:13: Error: The operator '-' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '-'.
+Try correcting the operator to an existing operator, or defining a '-' operator.
   print(foo - 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:18:13: Error: The method '+' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:18:13: Error: The operator '+' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '+'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
   print(foo + 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:19:13: Error: The method '/' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:19:13: Error: The operator '/' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '/'.
+Try correcting the operator to an existing operator, or defining a '/' operator.
   print(foo / 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:20:13: Error: The method '~/' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:20:13: Error: The operator '~/' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '~/'.
+Try correcting the operator to an existing operator, or defining a '~/' operator.
   print(foo ~/ 2);
             ^^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:21:13: Error: The method '*' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:21:13: Error: The operator '*' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '*'.
+Try correcting the operator to an existing operator, or defining a '*' operator.
   print(foo * 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:22:13: Error: The method '%' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:22:13: Error: The operator '%' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '%'.
+Try correcting the operator to an existing operator, or defining a '%' operator.
   print(foo % 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:23:13: Error: The method '|' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:23:13: Error: The operator '|' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '|'.
+Try correcting the operator to an existing operator, or defining a '|' operator.
   print(foo | 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:24:13: Error: The method '^' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:24:13: Error: The operator '^' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '^'.
+Try correcting the operator to an existing operator, or defining a '^' operator.
   print(foo ^ 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:25:13: Error: The method '&' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:25:13: Error: The operator '&' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '&'.
+Try correcting the operator to an existing operator, or defining a '&' operator.
   print(foo & 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:26:13: Error: The method '<<' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:26:13: Error: The operator '<<' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '<<'.
+Try correcting the operator to an existing operator, or defining a '<<' operator.
   print(foo << 2);
             ^^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:27:13: Error: The method '>>' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:27:13: Error: The operator '>>' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '>>'.
+Try correcting the operator to an existing operator, or defining a '>>' operator.
   print(foo >> 2);
             ^^");
-  core::print(let final self::Foo* #t1 = foo in let final core::int* #t2 = 2 in let final core::int* #t3 = 2 in let final void #t4 = invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:29:12: Error: The method '[]=' isn't defined for the class 'Foo'.
+  core::print(let final self::Foo* #t1 = foo in let final core::int* #t2 = 2 in let final core::int* #t3 = 2 in let final void #t4 = invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:29:12: Error: The operator '[]=' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '[]='.
+Try correcting the operator to an existing operator, or defining a '[]=' operator.
   print(foo[2] = 2);
            ^" in #t3);
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:30:12: Error: The method '[]' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:30:12: Error: The operator '[]' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '[]'.
+Try correcting the operator to an existing operator, or defining a '[]' operator.
   print(foo[2]);
            ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:31:9: Error: The method '~' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:31:9: Error: The operator '~' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '~'.
+Try correcting the operator to an existing operator, or defining a '~' operator.
   print(~foo);
         ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:32:9: Error: The method 'unary-' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general/operator_method_not_found.dart:32:9: Error: The operator 'unary-' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named 'unary-'.
+Try correcting the operator to an existing operator, or defining a 'unary-' operator.
   print(-foo);
         ^");
   core::print(<invalid-type>[]);
diff --git a/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.outline.expect b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.outline.expect
index 7e0964d..e8ff6d1 100644
--- a/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.outline.expect
+++ b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.outline.expect
@@ -6,21 +6,45 @@
 // Try adding an explicit type.
 //   get getterFromGetter;
 //       ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:6:11: Context: This is one of the inherited members.
+//   num get getterFromGetter;
+//           ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:22:11: Context: This is one of the inherited members.
+//   int get getterFromGetter;
+//           ^^^^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:52:24: Error: Can't infer a type for 'value' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   set setterFromSetter(value);
 //                        ^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:8:7: Context: This is one of the inherited members.
+//   set setterFromSetter(num value);
+//       ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:24:7: Context: This is one of the inherited members.
+//   set setterFromSetter(int value);
+//       ^^^^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:80:7: Error: Can't infer a return type for 'getterFromGetter' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   get getterFromGetter;
 //       ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:6:11: Context: This is one of the inherited members.
+//   num get getterFromGetter;
+//           ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:22:11: Context: This is one of the inherited members.
+//   int get getterFromGetter;
+//           ^^^^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:82:24: Error: Can't infer a type for 'value' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   set setterFromSetter(value);
 //                        ^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:8:7: Context: This is one of the inherited members.
+//   set setterFromSetter(num value);
+//       ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:24:7: Context: This is one of the inherited members.
+//   set setterFromSetter(int value);
+//       ^^^^^^^^^^^^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.strong.expect b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.strong.expect
index b88ee41..4c57e56 100644
--- a/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.strong.expect
+++ b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.strong.expect
@@ -6,21 +6,45 @@
 // Try adding an explicit type.
 //   get getterFromGetter;
 //       ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:6:11: Context: This is one of the inherited members.
+//   num get getterFromGetter;
+//           ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:22:11: Context: This is one of the inherited members.
+//   int get getterFromGetter;
+//           ^^^^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:52:24: Error: Can't infer a type for 'value' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   set setterFromSetter(value);
 //                        ^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:8:7: Context: This is one of the inherited members.
+//   set setterFromSetter(num value);
+//       ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:24:7: Context: This is one of the inherited members.
+//   set setterFromSetter(int value);
+//       ^^^^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:80:7: Error: Can't infer a return type for 'getterFromGetter' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   get getterFromGetter;
 //       ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:6:11: Context: This is one of the inherited members.
+//   num get getterFromGetter;
+//           ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:22:11: Context: This is one of the inherited members.
+//   int get getterFromGetter;
+//           ^^^^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:82:24: Error: Can't infer a type for 'value' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   set setterFromSetter(value);
 //                        ^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:8:7: Context: This is one of the inherited members.
+//   set setterFromSetter(num value);
+//       ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:24:7: Context: This is one of the inherited members.
+//   set setterFromSetter(int value);
+//       ^^^^^^^^^^^^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.strong.transformed.expect b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.strong.transformed.expect
index b88ee41..4c57e56 100644
--- a/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart.strong.transformed.expect
@@ -6,21 +6,45 @@
 // Try adding an explicit type.
 //   get getterFromGetter;
 //       ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:6:11: Context: This is one of the inherited members.
+//   num get getterFromGetter;
+//           ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:22:11: Context: This is one of the inherited members.
+//   int get getterFromGetter;
+//           ^^^^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:52:24: Error: Can't infer a type for 'value' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   set setterFromSetter(value);
 //                        ^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:8:7: Context: This is one of the inherited members.
+//   set setterFromSetter(num value);
+//       ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:24:7: Context: This is one of the inherited members.
+//   set setterFromSetter(int value);
+//       ^^^^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:80:7: Error: Can't infer a return type for 'getterFromGetter' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   get getterFromGetter;
 //       ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:6:11: Context: This is one of the inherited members.
+//   num get getterFromGetter;
+//           ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:22:11: Context: This is one of the inherited members.
+//   int get getterFromGetter;
+//           ^^^^^^^^^^^^^^^^
 //
 // pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:82:24: Error: Can't infer a type for 'value' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   set setterFromSetter(value);
 //                        ^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:8:7: Context: This is one of the inherited members.
+//   set setterFromSetter(num value);
+//       ^^^^^^^^^^^^^^^^
+// pkg/front_end/testcases/general/override_inference_for_getters_and_setters.dart:24:7: Context: This is one of the inherited members.
+//   set setterFromSetter(int value);
+//       ^^^^^^^^^^^^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart.strong.expect
index 9051dbd..d0a33ce 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart.strong.expect
@@ -12,8 +12,8 @@
 //     ..first.last.toString()
 //             ^^^^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart:31:12: Error: The method '[]' isn't defined for the class 'int'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]'.
+// pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart:31:12: Error: The operator '[]' isn't defined for the class 'int'.
+// Try correcting the operator to an existing operator, or defining a '[]' operator.
 //     ..first[0].toString()
 //            ^
 //
@@ -38,8 +38,8 @@
     ^" in <core::int*>[1] as{TypeError} core::int*] in let final void #t15 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart:30:13: Error: The getter 'last' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'last'.
     ..first.last.toString()
-            ^^^^".{core::Object::toString}() in let final void #t16 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart:31:12: Error: The method '[]' isn't defined for the class 'int'.
-Try correcting the name to the name of an existing method, or defining a method named '[]'.
+            ^^^^".{core::Object::toString}() in let final void #t16 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart:31:12: Error: The operator '[]' isn't defined for the class 'int'.
+Try correcting the operator to an existing operator, or defining a '[]' operator.
     ..first[0].toString()
            ^".{core::Object::toString}() in let final void #t17 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart:32:11: Error: The getter 'last' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'last'.
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart.strong.transformed.expect
index 9051dbd..d0a33ce 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart.strong.transformed.expect
@@ -12,8 +12,8 @@
 //     ..first.last.toString()
 //             ^^^^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart:31:12: Error: The method '[]' isn't defined for the class 'int'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]'.
+// pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart:31:12: Error: The operator '[]' isn't defined for the class 'int'.
+// Try correcting the operator to an existing operator, or defining a '[]' operator.
 //     ..first[0].toString()
 //            ^
 //
@@ -38,8 +38,8 @@
     ^" in <core::int*>[1] as{TypeError} core::int*] in let final void #t15 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart:30:13: Error: The getter 'last' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'last'.
     ..first.last.toString()
-            ^^^^".{core::Object::toString}() in let final void #t16 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart:31:12: Error: The method '[]' isn't defined for the class 'int'.
-Try correcting the name to the name of an existing method, or defining a method named '[]'.
+            ^^^^".{core::Object::toString}() in let final void #t16 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart:31:12: Error: The operator '[]' isn't defined for the class 'int'.
+Try correcting the operator to an existing operator, or defining a '[]' operator.
     ..first[0].toString()
            ^".{core::Object::toString}() in let final void #t17 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart:32:11: Error: The getter 'last' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'last'.
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart.weak.expect
index 9051dbd..d0a33ce 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart.weak.expect
@@ -12,8 +12,8 @@
 //     ..first.last.toString()
 //             ^^^^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart:31:12: Error: The method '[]' isn't defined for the class 'int'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]'.
+// pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart:31:12: Error: The operator '[]' isn't defined for the class 'int'.
+// Try correcting the operator to an existing operator, or defining a '[]' operator.
 //     ..first[0].toString()
 //            ^
 //
@@ -38,8 +38,8 @@
     ^" in <core::int*>[1] as{TypeError} core::int*] in let final void #t15 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart:30:13: Error: The getter 'last' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'last'.
     ..first.last.toString()
-            ^^^^".{core::Object::toString}() in let final void #t16 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart:31:12: Error: The method '[]' isn't defined for the class 'int'.
-Try correcting the name to the name of an existing method, or defining a method named '[]'.
+            ^^^^".{core::Object::toString}() in let final void #t16 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart:31:12: Error: The operator '[]' isn't defined for the class 'int'.
+Try correcting the operator to an existing operator, or defining a '[]' operator.
     ..first[0].toString()
            ^".{core::Object::toString}() in let final void #t17 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart:32:11: Error: The getter 'last' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'last'.
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart.weak.transformed.expect
index 9051dbd..d0a33ce 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart.weak.transformed.expect
@@ -12,8 +12,8 @@
 //     ..first.last.toString()
 //             ^^^^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart:31:12: Error: The method '[]' isn't defined for the class 'int'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]'.
+// pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart:31:12: Error: The operator '[]' isn't defined for the class 'int'.
+// Try correcting the operator to an existing operator, or defining a '[]' operator.
 //     ..first[0].toString()
 //            ^
 //
@@ -38,8 +38,8 @@
     ^" in <core::int*>[1] as{TypeError} core::int*] in let final void #t15 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart:30:13: Error: The getter 'last' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'last'.
     ..first.last.toString()
-            ^^^^".{core::Object::toString}() in let final void #t16 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart:31:12: Error: The method '[]' isn't defined for the class 'int'.
-Try correcting the name to the name of an existing method, or defining a method named '[]'.
+            ^^^^".{core::Object::toString}() in let final void #t16 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart:31:12: Error: The operator '[]' isn't defined for the class 'int'.
+Try correcting the operator to an existing operator, or defining a '[]' operator.
     ..first[0].toString()
            ^".{core::Object::toString}() in let final void #t17 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/cascade.dart:32:11: Error: The getter 'last' isn't defined for the class 'int'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'last'.
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/ignore_function.dart.outline.expect b/pkg/front_end/testcases/general_nnbd_opt_out/ignore_function.dart.outline.expect
index 777f40b..6172453 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/ignore_function.dart.outline.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/ignore_function.dart.outline.expect
@@ -4,7 +4,7 @@
 
 import "dart:core" as core;
 
-class A extends core::Object implements core::Function {
+class A extends core::Object {
   synthetic constructor •() → self::A*
     ;
   operator ==(dynamic other) → core::bool*
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/ignore_function.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/ignore_function.dart.strong.expect
index 8006a4c..b28a177 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/ignore_function.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/ignore_function.dart.strong.expect
@@ -4,7 +4,7 @@
 
 import "dart:core" as core;
 
-class A extends core::Object implements core::Function {
+class A extends core::Object {
   synthetic constructor •() → self::A*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/ignore_function.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/ignore_function.dart.strong.transformed.expect
index 8006a4c..b28a177 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/ignore_function.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/ignore_function.dart.strong.transformed.expect
@@ -4,7 +4,7 @@
 
 import "dart:core" as core;
 
-class A extends core::Object implements core::Function {
+class A extends core::Object {
   synthetic constructor •() → self::A*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/ignore_function.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/ignore_function.dart.weak.expect
index 8006a4c..b28a177 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/ignore_function.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/ignore_function.dart.weak.expect
@@ -4,7 +4,7 @@
 
 import "dart:core" as core;
 
-class A extends core::Object implements core::Function {
+class A extends core::Object {
   synthetic constructor •() → self::A*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/ignore_function.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/ignore_function.dart.weak.transformed.expect
index 8006a4c..b28a177 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/ignore_function.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/ignore_function.dart.weak.transformed.expect
@@ -4,7 +4,7 @@
 
 import "dart:core" as core;
 
-class A extends core::Object implements core::Function {
+class A extends core::Object {
   synthetic constructor •() → self::A*
     : super core::Object::•()
     ;
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/invalid_type.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/invalid_type.dart.strong.transformed.expect
new file mode 100644
index 0000000..3be894f
--- /dev/null
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/invalid_type.dart.strong.transformed.expect
@@ -0,0 +1,38 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general_nnbd_opt_out/invalid_type.dart:9:5: Error: Expected identifier, but got 'this'.
+//     this.bar();
+//     ^^^^
+//
+// pkg/front_end/testcases/general_nnbd_opt_out/invalid_type.dart:14:12: Error: 'Missing' isn't a type.
+//   (null as Missing).bar();
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/general_nnbd_opt_out/invalid_type.dart:15:8: Error: The method 'bar' isn't defined for the class 'Null'.
+// Try correcting the name to the name of an existing method, or defining a method named 'bar'.
+//   null.bar();
+//        ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  static method foo() → dynamic {
+    invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invalid_type.dart:9:5: Error: Expected identifier, but got 'this'.
+    this.bar();
+    ^^^^".bar();
+  }
+}
+static method test() → dynamic {
+  (null as invalid-type).bar();
+  invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invalid_type.dart:15:8: Error: The method 'bar' isn't defined for the class 'Null'.
+Try correcting the name to the name of an existing method, or defining a method named 'bar'.
+  null.bar();
+       ^^^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/invalid_type.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/invalid_type.dart.weak.transformed.expect
new file mode 100644
index 0000000..3be894f
--- /dev/null
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/invalid_type.dart.weak.transformed.expect
@@ -0,0 +1,38 @@
+library;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/general_nnbd_opt_out/invalid_type.dart:9:5: Error: Expected identifier, but got 'this'.
+//     this.bar();
+//     ^^^^
+//
+// pkg/front_end/testcases/general_nnbd_opt_out/invalid_type.dart:14:12: Error: 'Missing' isn't a type.
+//   (null as Missing).bar();
+//            ^^^^^^^
+//
+// pkg/front_end/testcases/general_nnbd_opt_out/invalid_type.dart:15:8: Error: The method 'bar' isn't defined for the class 'Null'.
+// Try correcting the name to the name of an existing method, or defining a method named 'bar'.
+//   null.bar();
+//        ^^^
+//
+import self as self;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → self::C*
+    : super core::Object::•()
+    ;
+  static method foo() → dynamic {
+    invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invalid_type.dart:9:5: Error: Expected identifier, but got 'this'.
+    this.bar();
+    ^^^^".bar();
+  }
+}
+static method test() → dynamic {
+  (null as invalid-type).bar();
+  invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/invalid_type.dart:15:8: Error: The method 'bar' isn't defined for the class 'Null'.
+Try correcting the name to the name of an existing method, or defining a method named 'bar'.
+  null.bar();
+       ^^^";
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.strong.expect
index 98ba00e..fec45f5 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.strong.expect
@@ -2,21 +2,21 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:29:48: Error: The method '+' isn't defined for the class 'EmptyClass'.
+// pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:29:48: Error: The operator '+' isn't defined for the class 'EmptyClass'.
 //  - 'EmptyClass' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '+'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
 // var missingBinary = classWithProperty.property += 2;
 //                                                ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:30:40: Error: The method '[]' isn't defined for the class 'ClassWithIndexSet'.
+// pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:30:40: Error: The operator '[]' isn't defined for the class 'ClassWithIndexSet'.
 //  - 'ClassWithIndexSet' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]'.
+// Try correcting the operator to an existing operator, or defining a '[]' operator.
 // var missingIndexGet = classWithIndexSet[0] ??= 2;
 //                                        ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:31:40: Error: The method '[]=' isn't defined for the class 'ClassWithIndexGet'.
+// pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:31:40: Error: The operator '[]=' isn't defined for the class 'ClassWithIndexGet'.
 //  - 'ClassWithIndexGet' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]='.
+// Try correcting the operator to an existing operator, or defining a '[]=' operator.
 // var missingIndexSet = classWithIndexGet[0] ??= 2;
 //                                        ^
 //
@@ -63,19 +63,19 @@
 static field self::ClassWithProperty* classWithProperty = new self::ClassWithProperty::•();
 static field self::ClassWithIndexSet* classWithIndexSet = new self::ClassWithIndexSet::•();
 static field self::ClassWithIndexGet* classWithIndexGet = new self::ClassWithIndexGet::•();
-static field dynamic missingBinary = let final self::ClassWithProperty* #t1 = self::classWithProperty in #t1.{self::ClassWithProperty::property} = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:29:48: Error: The method '+' isn't defined for the class 'EmptyClass'.
+static field dynamic missingBinary = let final self::ClassWithProperty* #t1 = self::classWithProperty in #t1.{self::ClassWithProperty::property} = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:29:48: Error: The operator '+' isn't defined for the class 'EmptyClass'.
  - 'EmptyClass' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '+'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
 var missingBinary = classWithProperty.property += 2;
                                                ^" as{TypeError,ForDynamic} self::EmptyClass*;
-static field dynamic missingIndexGet = let final self::ClassWithIndexSet* #t2 = self::classWithIndexSet in let final core::int* #t3 = 0 in let final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:30:40: Error: The method '[]' isn't defined for the class 'ClassWithIndexSet'.
+static field dynamic missingIndexGet = let final self::ClassWithIndexSet* #t2 = self::classWithIndexSet in let final core::int* #t3 = 0 in let final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:30:40: Error: The operator '[]' isn't defined for the class 'ClassWithIndexSet'.
  - 'ClassWithIndexSet' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '[]'.
+Try correcting the operator to an existing operator, or defining a '[]' operator.
 var missingIndexGet = classWithIndexSet[0] ??= 2;
                                        ^" in #t4.{core::Object::==}(null) ?{dynamic} let final core::int* #t5 = 2 in let final void #t6 = #t2.{self::ClassWithIndexSet::[]=}(#t3, #t5) in #t5 : #t4;
-static field core::int* missingIndexSet = let final self::ClassWithIndexGet* #t7 = self::classWithIndexGet in let final core::int* #t8 = 0 in let final core::int* #t9 = #t7.{self::ClassWithIndexGet::[]}(#t8) in #t9.{core::num::==}(null) ?{core::int*} let final core::int* #t10 = 2 in let final void #t11 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:31:40: Error: The method '[]=' isn't defined for the class 'ClassWithIndexGet'.
+static field core::int* missingIndexSet = let final self::ClassWithIndexGet* #t7 = self::classWithIndexGet in let final core::int* #t8 = 0 in let final core::int* #t9 = #t7.{self::ClassWithIndexGet::[]}(#t8) in #t9.{core::num::==}(null) ?{core::int*} let final core::int* #t10 = 2 in let final void #t11 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:31:40: Error: The operator '[]=' isn't defined for the class 'ClassWithIndexGet'.
  - 'ClassWithIndexGet' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '[]='.
+Try correcting the operator to an existing operator, or defining a '[]=' operator.
 var missingIndexSet = classWithIndexGet[0] ??= 2;
                                        ^" in #t10 : #t9;
 static field dynamic missingPropertyGet = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:32:37: Error: The getter 'property' isn't defined for the class 'EmptyClass'.
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.strong.transformed.expect
index 98ba00e..fec45f5 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.strong.transformed.expect
@@ -2,21 +2,21 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:29:48: Error: The method '+' isn't defined for the class 'EmptyClass'.
+// pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:29:48: Error: The operator '+' isn't defined for the class 'EmptyClass'.
 //  - 'EmptyClass' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '+'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
 // var missingBinary = classWithProperty.property += 2;
 //                                                ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:30:40: Error: The method '[]' isn't defined for the class 'ClassWithIndexSet'.
+// pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:30:40: Error: The operator '[]' isn't defined for the class 'ClassWithIndexSet'.
 //  - 'ClassWithIndexSet' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]'.
+// Try correcting the operator to an existing operator, or defining a '[]' operator.
 // var missingIndexGet = classWithIndexSet[0] ??= 2;
 //                                        ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:31:40: Error: The method '[]=' isn't defined for the class 'ClassWithIndexGet'.
+// pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:31:40: Error: The operator '[]=' isn't defined for the class 'ClassWithIndexGet'.
 //  - 'ClassWithIndexGet' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]='.
+// Try correcting the operator to an existing operator, or defining a '[]=' operator.
 // var missingIndexSet = classWithIndexGet[0] ??= 2;
 //                                        ^
 //
@@ -63,19 +63,19 @@
 static field self::ClassWithProperty* classWithProperty = new self::ClassWithProperty::•();
 static field self::ClassWithIndexSet* classWithIndexSet = new self::ClassWithIndexSet::•();
 static field self::ClassWithIndexGet* classWithIndexGet = new self::ClassWithIndexGet::•();
-static field dynamic missingBinary = let final self::ClassWithProperty* #t1 = self::classWithProperty in #t1.{self::ClassWithProperty::property} = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:29:48: Error: The method '+' isn't defined for the class 'EmptyClass'.
+static field dynamic missingBinary = let final self::ClassWithProperty* #t1 = self::classWithProperty in #t1.{self::ClassWithProperty::property} = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:29:48: Error: The operator '+' isn't defined for the class 'EmptyClass'.
  - 'EmptyClass' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '+'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
 var missingBinary = classWithProperty.property += 2;
                                                ^" as{TypeError,ForDynamic} self::EmptyClass*;
-static field dynamic missingIndexGet = let final self::ClassWithIndexSet* #t2 = self::classWithIndexSet in let final core::int* #t3 = 0 in let final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:30:40: Error: The method '[]' isn't defined for the class 'ClassWithIndexSet'.
+static field dynamic missingIndexGet = let final self::ClassWithIndexSet* #t2 = self::classWithIndexSet in let final core::int* #t3 = 0 in let final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:30:40: Error: The operator '[]' isn't defined for the class 'ClassWithIndexSet'.
  - 'ClassWithIndexSet' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '[]'.
+Try correcting the operator to an existing operator, or defining a '[]' operator.
 var missingIndexGet = classWithIndexSet[0] ??= 2;
                                        ^" in #t4.{core::Object::==}(null) ?{dynamic} let final core::int* #t5 = 2 in let final void #t6 = #t2.{self::ClassWithIndexSet::[]=}(#t3, #t5) in #t5 : #t4;
-static field core::int* missingIndexSet = let final self::ClassWithIndexGet* #t7 = self::classWithIndexGet in let final core::int* #t8 = 0 in let final core::int* #t9 = #t7.{self::ClassWithIndexGet::[]}(#t8) in #t9.{core::num::==}(null) ?{core::int*} let final core::int* #t10 = 2 in let final void #t11 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:31:40: Error: The method '[]=' isn't defined for the class 'ClassWithIndexGet'.
+static field core::int* missingIndexSet = let final self::ClassWithIndexGet* #t7 = self::classWithIndexGet in let final core::int* #t8 = 0 in let final core::int* #t9 = #t7.{self::ClassWithIndexGet::[]}(#t8) in #t9.{core::num::==}(null) ?{core::int*} let final core::int* #t10 = 2 in let final void #t11 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:31:40: Error: The operator '[]=' isn't defined for the class 'ClassWithIndexGet'.
  - 'ClassWithIndexGet' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '[]='.
+Try correcting the operator to an existing operator, or defining a '[]=' operator.
 var missingIndexSet = classWithIndexGet[0] ??= 2;
                                        ^" in #t10 : #t9;
 static field dynamic missingPropertyGet = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:32:37: Error: The getter 'property' isn't defined for the class 'EmptyClass'.
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.weak.expect
index 98ba00e..fec45f5 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.weak.expect
@@ -2,21 +2,21 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:29:48: Error: The method '+' isn't defined for the class 'EmptyClass'.
+// pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:29:48: Error: The operator '+' isn't defined for the class 'EmptyClass'.
 //  - 'EmptyClass' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '+'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
 // var missingBinary = classWithProperty.property += 2;
 //                                                ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:30:40: Error: The method '[]' isn't defined for the class 'ClassWithIndexSet'.
+// pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:30:40: Error: The operator '[]' isn't defined for the class 'ClassWithIndexSet'.
 //  - 'ClassWithIndexSet' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]'.
+// Try correcting the operator to an existing operator, or defining a '[]' operator.
 // var missingIndexGet = classWithIndexSet[0] ??= 2;
 //                                        ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:31:40: Error: The method '[]=' isn't defined for the class 'ClassWithIndexGet'.
+// pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:31:40: Error: The operator '[]=' isn't defined for the class 'ClassWithIndexGet'.
 //  - 'ClassWithIndexGet' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]='.
+// Try correcting the operator to an existing operator, or defining a '[]=' operator.
 // var missingIndexSet = classWithIndexGet[0] ??= 2;
 //                                        ^
 //
@@ -63,19 +63,19 @@
 static field self::ClassWithProperty* classWithProperty = new self::ClassWithProperty::•();
 static field self::ClassWithIndexSet* classWithIndexSet = new self::ClassWithIndexSet::•();
 static field self::ClassWithIndexGet* classWithIndexGet = new self::ClassWithIndexGet::•();
-static field dynamic missingBinary = let final self::ClassWithProperty* #t1 = self::classWithProperty in #t1.{self::ClassWithProperty::property} = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:29:48: Error: The method '+' isn't defined for the class 'EmptyClass'.
+static field dynamic missingBinary = let final self::ClassWithProperty* #t1 = self::classWithProperty in #t1.{self::ClassWithProperty::property} = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:29:48: Error: The operator '+' isn't defined for the class 'EmptyClass'.
  - 'EmptyClass' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '+'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
 var missingBinary = classWithProperty.property += 2;
                                                ^" as{TypeError,ForDynamic} self::EmptyClass*;
-static field dynamic missingIndexGet = let final self::ClassWithIndexSet* #t2 = self::classWithIndexSet in let final core::int* #t3 = 0 in let final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:30:40: Error: The method '[]' isn't defined for the class 'ClassWithIndexSet'.
+static field dynamic missingIndexGet = let final self::ClassWithIndexSet* #t2 = self::classWithIndexSet in let final core::int* #t3 = 0 in let final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:30:40: Error: The operator '[]' isn't defined for the class 'ClassWithIndexSet'.
  - 'ClassWithIndexSet' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '[]'.
+Try correcting the operator to an existing operator, or defining a '[]' operator.
 var missingIndexGet = classWithIndexSet[0] ??= 2;
                                        ^" in #t4.{core::Object::==}(null) ?{dynamic} let final core::int* #t5 = 2 in let final void #t6 = #t2.{self::ClassWithIndexSet::[]=}(#t3, #t5) in #t5 : #t4;
-static field core::int* missingIndexSet = let final self::ClassWithIndexGet* #t7 = self::classWithIndexGet in let final core::int* #t8 = 0 in let final core::int* #t9 = #t7.{self::ClassWithIndexGet::[]}(#t8) in #t9.{core::num::==}(null) ?{core::int*} let final core::int* #t10 = 2 in let final void #t11 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:31:40: Error: The method '[]=' isn't defined for the class 'ClassWithIndexGet'.
+static field core::int* missingIndexSet = let final self::ClassWithIndexGet* #t7 = self::classWithIndexGet in let final core::int* #t8 = 0 in let final core::int* #t9 = #t7.{self::ClassWithIndexGet::[]}(#t8) in #t9.{core::num::==}(null) ?{core::int*} let final core::int* #t10 = 2 in let final void #t11 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:31:40: Error: The operator '[]=' isn't defined for the class 'ClassWithIndexGet'.
  - 'ClassWithIndexGet' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '[]='.
+Try correcting the operator to an existing operator, or defining a '[]=' operator.
 var missingIndexSet = classWithIndexGet[0] ??= 2;
                                        ^" in #t10 : #t9;
 static field dynamic missingPropertyGet = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:32:37: Error: The getter 'property' isn't defined for the class 'EmptyClass'.
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.weak.transformed.expect
index 98ba00e..fec45f5 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart.weak.transformed.expect
@@ -2,21 +2,21 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:29:48: Error: The method '+' isn't defined for the class 'EmptyClass'.
+// pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:29:48: Error: The operator '+' isn't defined for the class 'EmptyClass'.
 //  - 'EmptyClass' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '+'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
 // var missingBinary = classWithProperty.property += 2;
 //                                                ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:30:40: Error: The method '[]' isn't defined for the class 'ClassWithIndexSet'.
+// pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:30:40: Error: The operator '[]' isn't defined for the class 'ClassWithIndexSet'.
 //  - 'ClassWithIndexSet' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]'.
+// Try correcting the operator to an existing operator, or defining a '[]' operator.
 // var missingIndexGet = classWithIndexSet[0] ??= 2;
 //                                        ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:31:40: Error: The method '[]=' isn't defined for the class 'ClassWithIndexGet'.
+// pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:31:40: Error: The operator '[]=' isn't defined for the class 'ClassWithIndexGet'.
 //  - 'ClassWithIndexGet' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]='.
+// Try correcting the operator to an existing operator, or defining a '[]=' operator.
 // var missingIndexSet = classWithIndexGet[0] ??= 2;
 //                                        ^
 //
@@ -63,19 +63,19 @@
 static field self::ClassWithProperty* classWithProperty = new self::ClassWithProperty::•();
 static field self::ClassWithIndexSet* classWithIndexSet = new self::ClassWithIndexSet::•();
 static field self::ClassWithIndexGet* classWithIndexGet = new self::ClassWithIndexGet::•();
-static field dynamic missingBinary = let final self::ClassWithProperty* #t1 = self::classWithProperty in #t1.{self::ClassWithProperty::property} = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:29:48: Error: The method '+' isn't defined for the class 'EmptyClass'.
+static field dynamic missingBinary = let final self::ClassWithProperty* #t1 = self::classWithProperty in #t1.{self::ClassWithProperty::property} = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:29:48: Error: The operator '+' isn't defined for the class 'EmptyClass'.
  - 'EmptyClass' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '+'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
 var missingBinary = classWithProperty.property += 2;
                                                ^" as{TypeError,ForDynamic} self::EmptyClass*;
-static field dynamic missingIndexGet = let final self::ClassWithIndexSet* #t2 = self::classWithIndexSet in let final core::int* #t3 = 0 in let final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:30:40: Error: The method '[]' isn't defined for the class 'ClassWithIndexSet'.
+static field dynamic missingIndexGet = let final self::ClassWithIndexSet* #t2 = self::classWithIndexSet in let final core::int* #t3 = 0 in let final dynamic #t4 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:30:40: Error: The operator '[]' isn't defined for the class 'ClassWithIndexSet'.
  - 'ClassWithIndexSet' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '[]'.
+Try correcting the operator to an existing operator, or defining a '[]' operator.
 var missingIndexGet = classWithIndexSet[0] ??= 2;
                                        ^" in #t4.{core::Object::==}(null) ?{dynamic} let final core::int* #t5 = 2 in let final void #t6 = #t2.{self::ClassWithIndexSet::[]=}(#t3, #t5) in #t5 : #t4;
-static field core::int* missingIndexSet = let final self::ClassWithIndexGet* #t7 = self::classWithIndexGet in let final core::int* #t8 = 0 in let final core::int* #t9 = #t7.{self::ClassWithIndexGet::[]}(#t8) in #t9.{core::num::==}(null) ?{core::int*} let final core::int* #t10 = 2 in let final void #t11 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:31:40: Error: The method '[]=' isn't defined for the class 'ClassWithIndexGet'.
+static field core::int* missingIndexSet = let final self::ClassWithIndexGet* #t7 = self::classWithIndexGet in let final core::int* #t8 = 0 in let final core::int* #t9 = #t7.{self::ClassWithIndexGet::[]}(#t8) in #t9.{core::num::==}(null) ?{core::int*} let final core::int* #t10 = 2 in let final void #t11 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:31:40: Error: The operator '[]=' isn't defined for the class 'ClassWithIndexGet'.
  - 'ClassWithIndexGet' is from 'pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '[]='.
+Try correcting the operator to an existing operator, or defining a '[]=' operator.
 var missingIndexSet = classWithIndexGet[0] ??= 2;
                                        ^" in #t10 : #t9;
 static field dynamic missingPropertyGet = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/missing_toplevel.dart:32:37: Error: The getter 'property' isn't defined for the class 'EmptyClass'.
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/mixin_constructors_with_default_values.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/mixin_constructors_with_default_values.dart.strong.expect
index 500a9d3..37d2479 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/mixin_constructors_with_default_values.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/mixin_constructors_with_default_values.dart.strong.expect
@@ -59,6 +59,6 @@
 
 constants  {
   #C1 = 0
-  #C2 = TypeLiteralConstant(dart.core::String*)
-  #C3 = TypeLiteralConstant(dart.core::int*)
+  #C2 = TypeLiteralConstant(core::String*)
+  #C3 = TypeLiteralConstant(core::int*)
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/mixin_constructors_with_default_values.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/mixin_constructors_with_default_values.dart.strong.transformed.expect
index 9c19e86..a3cedca 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/mixin_constructors_with_default_values.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/mixin_constructors_with_default_values.dart.strong.transformed.expect
@@ -59,6 +59,6 @@
 
 constants  {
   #C1 = 0
-  #C2 = TypeLiteralConstant(dart.core::String*)
-  #C3 = TypeLiteralConstant(dart.core::int*)
+  #C2 = TypeLiteralConstant(core::String*)
+  #C3 = TypeLiteralConstant(core::int*)
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/mixin_constructors_with_default_values.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/mixin_constructors_with_default_values.dart.weak.expect
index 500a9d3..37d2479 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/mixin_constructors_with_default_values.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/mixin_constructors_with_default_values.dart.weak.expect
@@ -59,6 +59,6 @@
 
 constants  {
   #C1 = 0
-  #C2 = TypeLiteralConstant(dart.core::String*)
-  #C3 = TypeLiteralConstant(dart.core::int*)
+  #C2 = TypeLiteralConstant(core::String*)
+  #C3 = TypeLiteralConstant(core::int*)
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/mixin_constructors_with_default_values.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/mixin_constructors_with_default_values.dart.weak.transformed.expect
index 9c19e86..a3cedca 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/mixin_constructors_with_default_values.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/mixin_constructors_with_default_values.dart.weak.transformed.expect
@@ -59,6 +59,6 @@
 
 constants  {
   #C1 = 0
-  #C2 = TypeLiteralConstant(dart.core::String*)
-  #C3 = TypeLiteralConstant(dart.core::int*)
+  #C2 = TypeLiteralConstant(core::String*)
+  #C3 = TypeLiteralConstant(core::int*)
 }
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart.strong.expect b/pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart.strong.expect
index 21ad1af..e25cec2 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart.strong.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart.strong.expect
@@ -75,117 +75,117 @@
 //   print(foo ~ 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:14:13: Error: The method '<' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:14:13: Error: The operator '<' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '<'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
 //   print(foo < 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:15:13: Error: The method '>' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:15:13: Error: The operator '>' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '>'.
+// Try correcting the operator to an existing operator, or defining a '>' operator.
 //   print(foo > 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:16:13: Error: The method '<=' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:16:13: Error: The operator '<=' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '<='.
+// Try correcting the operator to an existing operator, or defining a '<=' operator.
 //   print(foo <= 2);
 //             ^^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:17:13: Error: The method '>=' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:17:13: Error: The operator '>=' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '>='.
+// Try correcting the operator to an existing operator, or defining a '>=' operator.
 //   print(foo >= 2);
 //             ^^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:19:13: Error: The method '-' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:19:13: Error: The operator '-' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '-'.
+// Try correcting the operator to an existing operator, or defining a '-' operator.
 //   print(foo - 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:20:13: Error: The method '+' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:20:13: Error: The operator '+' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '+'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
 //   print(foo + 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:21:13: Error: The method '/' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:21:13: Error: The operator '/' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '/'.
+// Try correcting the operator to an existing operator, or defining a '/' operator.
 //   print(foo / 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:22:13: Error: The method '~/' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:22:13: Error: The operator '~/' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '~/'.
+// Try correcting the operator to an existing operator, or defining a '~/' operator.
 //   print(foo ~/ 2);
 //             ^^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:23:13: Error: The method '*' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:23:13: Error: The operator '*' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '*'.
+// Try correcting the operator to an existing operator, or defining a '*' operator.
 //   print(foo * 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:24:13: Error: The method '%' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:24:13: Error: The operator '%' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '%'.
+// Try correcting the operator to an existing operator, or defining a '%' operator.
 //   print(foo % 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:25:13: Error: The method '|' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:25:13: Error: The operator '|' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '|'.
+// Try correcting the operator to an existing operator, or defining a '|' operator.
 //   print(foo | 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:26:13: Error: The method '^' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:26:13: Error: The operator '^' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '^'.
+// Try correcting the operator to an existing operator, or defining a '^' operator.
 //   print(foo ^ 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:27:13: Error: The method '&' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:27:13: Error: The operator '&' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '&'.
+// Try correcting the operator to an existing operator, or defining a '&' operator.
 //   print(foo & 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:28:13: Error: The method '<<' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:28:13: Error: The operator '<<' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '<<'.
+// Try correcting the operator to an existing operator, or defining a '<<' operator.
 //   print(foo << 2);
 //             ^^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:29:13: Error: The method '>>' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:29:13: Error: The operator '>>' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '>>'.
+// Try correcting the operator to an existing operator, or defining a '>>' operator.
 //   print(foo >> 2);
 //             ^^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:31:12: Error: The method '[]=' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:31:12: Error: The operator '[]=' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]='.
+// Try correcting the operator to an existing operator, or defining a '[]=' operator.
 //   print(foo[2] = 2);
 //            ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:32:12: Error: The method '[]' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:32:12: Error: The operator '[]' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]'.
+// Try correcting the operator to an existing operator, or defining a '[]' operator.
 //   print(foo[2]);
 //            ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:33:9: Error: The method '~' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:33:9: Error: The operator '~' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '~'.
+// Try correcting the operator to an existing operator, or defining a '~' operator.
 //   print(~foo);
 //         ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:34:9: Error: The method 'unary-' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:34:9: Error: The operator 'unary-' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named 'unary-'.
+// Try correcting the operator to an existing operator, or defining a 'unary-' operator.
 //   print(-foo);
 //         ^
 //
@@ -199,100 +199,100 @@
 }
 static method main() → dynamic {
   self::Foo* foo = new self::Foo::•();
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:14:13: Error: The method '<' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:14:13: Error: The operator '<' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '<'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
   print(foo < 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:15:13: Error: The method '>' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:15:13: Error: The operator '>' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '>'.
+Try correcting the operator to an existing operator, or defining a '>' operator.
   print(foo > 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:16:13: Error: The method '<=' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:16:13: Error: The operator '<=' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '<='.
+Try correcting the operator to an existing operator, or defining a '<=' operator.
   print(foo <= 2);
             ^^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:17:13: Error: The method '>=' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:17:13: Error: The operator '>=' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '>='.
+Try correcting the operator to an existing operator, or defining a '>=' operator.
   print(foo >= 2);
             ^^");
   core::print(foo.{core::Object::==}(2));
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:19:13: Error: The method '-' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:19:13: Error: The operator '-' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '-'.
+Try correcting the operator to an existing operator, or defining a '-' operator.
   print(foo - 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:20:13: Error: The method '+' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:20:13: Error: The operator '+' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '+'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
   print(foo + 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:21:13: Error: The method '/' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:21:13: Error: The operator '/' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '/'.
+Try correcting the operator to an existing operator, or defining a '/' operator.
   print(foo / 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:22:13: Error: The method '~/' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:22:13: Error: The operator '~/' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '~/'.
+Try correcting the operator to an existing operator, or defining a '~/' operator.
   print(foo ~/ 2);
             ^^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:23:13: Error: The method '*' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:23:13: Error: The operator '*' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '*'.
+Try correcting the operator to an existing operator, or defining a '*' operator.
   print(foo * 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:24:13: Error: The method '%' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:24:13: Error: The operator '%' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '%'.
+Try correcting the operator to an existing operator, or defining a '%' operator.
   print(foo % 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:25:13: Error: The method '|' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:25:13: Error: The operator '|' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '|'.
+Try correcting the operator to an existing operator, or defining a '|' operator.
   print(foo | 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:26:13: Error: The method '^' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:26:13: Error: The operator '^' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '^'.
+Try correcting the operator to an existing operator, or defining a '^' operator.
   print(foo ^ 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:27:13: Error: The method '&' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:27:13: Error: The operator '&' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '&'.
+Try correcting the operator to an existing operator, or defining a '&' operator.
   print(foo & 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:28:13: Error: The method '<<' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:28:13: Error: The operator '<<' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '<<'.
+Try correcting the operator to an existing operator, or defining a '<<' operator.
   print(foo << 2);
             ^^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:29:13: Error: The method '>>' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:29:13: Error: The operator '>>' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '>>'.
+Try correcting the operator to an existing operator, or defining a '>>' operator.
   print(foo >> 2);
             ^^");
-  core::print(let final self::Foo* #t1 = foo in let final core::int* #t2 = 2 in let final core::int* #t3 = 2 in let final void #t4 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:31:12: Error: The method '[]=' isn't defined for the class 'Foo'.
+  core::print(let final self::Foo* #t1 = foo in let final core::int* #t2 = 2 in let final core::int* #t3 = 2 in let final void #t4 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:31:12: Error: The operator '[]=' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '[]='.
+Try correcting the operator to an existing operator, or defining a '[]=' operator.
   print(foo[2] = 2);
            ^" in #t3);
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:32:12: Error: The method '[]' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:32:12: Error: The operator '[]' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '[]'.
+Try correcting the operator to an existing operator, or defining a '[]' operator.
   print(foo[2]);
            ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:33:9: Error: The method '~' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:33:9: Error: The operator '~' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '~'.
+Try correcting the operator to an existing operator, or defining a '~' operator.
   print(~foo);
         ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:34:9: Error: The method 'unary-' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:34:9: Error: The operator 'unary-' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named 'unary-'.
+Try correcting the operator to an existing operator, or defining a 'unary-' operator.
   print(-foo);
         ^");
   core::print(<invalid-type>[]);
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart.strong.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart.strong.transformed.expect
index 21ad1af..e25cec2 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart.strong.transformed.expect
@@ -75,117 +75,117 @@
 //   print(foo ~ 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:14:13: Error: The method '<' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:14:13: Error: The operator '<' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '<'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
 //   print(foo < 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:15:13: Error: The method '>' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:15:13: Error: The operator '>' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '>'.
+// Try correcting the operator to an existing operator, or defining a '>' operator.
 //   print(foo > 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:16:13: Error: The method '<=' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:16:13: Error: The operator '<=' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '<='.
+// Try correcting the operator to an existing operator, or defining a '<=' operator.
 //   print(foo <= 2);
 //             ^^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:17:13: Error: The method '>=' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:17:13: Error: The operator '>=' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '>='.
+// Try correcting the operator to an existing operator, or defining a '>=' operator.
 //   print(foo >= 2);
 //             ^^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:19:13: Error: The method '-' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:19:13: Error: The operator '-' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '-'.
+// Try correcting the operator to an existing operator, or defining a '-' operator.
 //   print(foo - 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:20:13: Error: The method '+' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:20:13: Error: The operator '+' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '+'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
 //   print(foo + 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:21:13: Error: The method '/' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:21:13: Error: The operator '/' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '/'.
+// Try correcting the operator to an existing operator, or defining a '/' operator.
 //   print(foo / 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:22:13: Error: The method '~/' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:22:13: Error: The operator '~/' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '~/'.
+// Try correcting the operator to an existing operator, or defining a '~/' operator.
 //   print(foo ~/ 2);
 //             ^^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:23:13: Error: The method '*' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:23:13: Error: The operator '*' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '*'.
+// Try correcting the operator to an existing operator, or defining a '*' operator.
 //   print(foo * 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:24:13: Error: The method '%' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:24:13: Error: The operator '%' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '%'.
+// Try correcting the operator to an existing operator, or defining a '%' operator.
 //   print(foo % 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:25:13: Error: The method '|' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:25:13: Error: The operator '|' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '|'.
+// Try correcting the operator to an existing operator, or defining a '|' operator.
 //   print(foo | 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:26:13: Error: The method '^' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:26:13: Error: The operator '^' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '^'.
+// Try correcting the operator to an existing operator, or defining a '^' operator.
 //   print(foo ^ 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:27:13: Error: The method '&' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:27:13: Error: The operator '&' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '&'.
+// Try correcting the operator to an existing operator, or defining a '&' operator.
 //   print(foo & 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:28:13: Error: The method '<<' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:28:13: Error: The operator '<<' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '<<'.
+// Try correcting the operator to an existing operator, or defining a '<<' operator.
 //   print(foo << 2);
 //             ^^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:29:13: Error: The method '>>' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:29:13: Error: The operator '>>' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '>>'.
+// Try correcting the operator to an existing operator, or defining a '>>' operator.
 //   print(foo >> 2);
 //             ^^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:31:12: Error: The method '[]=' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:31:12: Error: The operator '[]=' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]='.
+// Try correcting the operator to an existing operator, or defining a '[]=' operator.
 //   print(foo[2] = 2);
 //            ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:32:12: Error: The method '[]' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:32:12: Error: The operator '[]' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]'.
+// Try correcting the operator to an existing operator, or defining a '[]' operator.
 //   print(foo[2]);
 //            ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:33:9: Error: The method '~' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:33:9: Error: The operator '~' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '~'.
+// Try correcting the operator to an existing operator, or defining a '~' operator.
 //   print(~foo);
 //         ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:34:9: Error: The method 'unary-' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:34:9: Error: The operator 'unary-' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named 'unary-'.
+// Try correcting the operator to an existing operator, or defining a 'unary-' operator.
 //   print(-foo);
 //         ^
 //
@@ -199,100 +199,100 @@
 }
 static method main() → dynamic {
   self::Foo* foo = new self::Foo::•();
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:14:13: Error: The method '<' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:14:13: Error: The operator '<' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '<'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
   print(foo < 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:15:13: Error: The method '>' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:15:13: Error: The operator '>' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '>'.
+Try correcting the operator to an existing operator, or defining a '>' operator.
   print(foo > 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:16:13: Error: The method '<=' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:16:13: Error: The operator '<=' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '<='.
+Try correcting the operator to an existing operator, or defining a '<=' operator.
   print(foo <= 2);
             ^^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:17:13: Error: The method '>=' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:17:13: Error: The operator '>=' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '>='.
+Try correcting the operator to an existing operator, or defining a '>=' operator.
   print(foo >= 2);
             ^^");
   core::print(foo.{core::Object::==}(2));
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:19:13: Error: The method '-' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:19:13: Error: The operator '-' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '-'.
+Try correcting the operator to an existing operator, or defining a '-' operator.
   print(foo - 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:20:13: Error: The method '+' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:20:13: Error: The operator '+' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '+'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
   print(foo + 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:21:13: Error: The method '/' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:21:13: Error: The operator '/' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '/'.
+Try correcting the operator to an existing operator, or defining a '/' operator.
   print(foo / 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:22:13: Error: The method '~/' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:22:13: Error: The operator '~/' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '~/'.
+Try correcting the operator to an existing operator, or defining a '~/' operator.
   print(foo ~/ 2);
             ^^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:23:13: Error: The method '*' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:23:13: Error: The operator '*' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '*'.
+Try correcting the operator to an existing operator, or defining a '*' operator.
   print(foo * 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:24:13: Error: The method '%' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:24:13: Error: The operator '%' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '%'.
+Try correcting the operator to an existing operator, or defining a '%' operator.
   print(foo % 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:25:13: Error: The method '|' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:25:13: Error: The operator '|' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '|'.
+Try correcting the operator to an existing operator, or defining a '|' operator.
   print(foo | 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:26:13: Error: The method '^' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:26:13: Error: The operator '^' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '^'.
+Try correcting the operator to an existing operator, or defining a '^' operator.
   print(foo ^ 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:27:13: Error: The method '&' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:27:13: Error: The operator '&' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '&'.
+Try correcting the operator to an existing operator, or defining a '&' operator.
   print(foo & 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:28:13: Error: The method '<<' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:28:13: Error: The operator '<<' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '<<'.
+Try correcting the operator to an existing operator, or defining a '<<' operator.
   print(foo << 2);
             ^^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:29:13: Error: The method '>>' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:29:13: Error: The operator '>>' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '>>'.
+Try correcting the operator to an existing operator, or defining a '>>' operator.
   print(foo >> 2);
             ^^");
-  core::print(let final self::Foo* #t1 = foo in let final core::int* #t2 = 2 in let final core::int* #t3 = 2 in let final void #t4 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:31:12: Error: The method '[]=' isn't defined for the class 'Foo'.
+  core::print(let final self::Foo* #t1 = foo in let final core::int* #t2 = 2 in let final core::int* #t3 = 2 in let final void #t4 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:31:12: Error: The operator '[]=' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '[]='.
+Try correcting the operator to an existing operator, or defining a '[]=' operator.
   print(foo[2] = 2);
            ^" in #t3);
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:32:12: Error: The method '[]' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:32:12: Error: The operator '[]' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '[]'.
+Try correcting the operator to an existing operator, or defining a '[]' operator.
   print(foo[2]);
            ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:33:9: Error: The method '~' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:33:9: Error: The operator '~' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '~'.
+Try correcting the operator to an existing operator, or defining a '~' operator.
   print(~foo);
         ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:34:9: Error: The method 'unary-' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:34:9: Error: The operator 'unary-' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named 'unary-'.
+Try correcting the operator to an existing operator, or defining a 'unary-' operator.
   print(-foo);
         ^");
   core::print(<invalid-type>[]);
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart.weak.expect b/pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart.weak.expect
index 21ad1af..e25cec2 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart.weak.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart.weak.expect
@@ -75,117 +75,117 @@
 //   print(foo ~ 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:14:13: Error: The method '<' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:14:13: Error: The operator '<' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '<'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
 //   print(foo < 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:15:13: Error: The method '>' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:15:13: Error: The operator '>' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '>'.
+// Try correcting the operator to an existing operator, or defining a '>' operator.
 //   print(foo > 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:16:13: Error: The method '<=' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:16:13: Error: The operator '<=' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '<='.
+// Try correcting the operator to an existing operator, or defining a '<=' operator.
 //   print(foo <= 2);
 //             ^^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:17:13: Error: The method '>=' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:17:13: Error: The operator '>=' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '>='.
+// Try correcting the operator to an existing operator, or defining a '>=' operator.
 //   print(foo >= 2);
 //             ^^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:19:13: Error: The method '-' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:19:13: Error: The operator '-' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '-'.
+// Try correcting the operator to an existing operator, or defining a '-' operator.
 //   print(foo - 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:20:13: Error: The method '+' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:20:13: Error: The operator '+' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '+'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
 //   print(foo + 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:21:13: Error: The method '/' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:21:13: Error: The operator '/' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '/'.
+// Try correcting the operator to an existing operator, or defining a '/' operator.
 //   print(foo / 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:22:13: Error: The method '~/' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:22:13: Error: The operator '~/' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '~/'.
+// Try correcting the operator to an existing operator, or defining a '~/' operator.
 //   print(foo ~/ 2);
 //             ^^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:23:13: Error: The method '*' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:23:13: Error: The operator '*' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '*'.
+// Try correcting the operator to an existing operator, or defining a '*' operator.
 //   print(foo * 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:24:13: Error: The method '%' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:24:13: Error: The operator '%' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '%'.
+// Try correcting the operator to an existing operator, or defining a '%' operator.
 //   print(foo % 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:25:13: Error: The method '|' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:25:13: Error: The operator '|' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '|'.
+// Try correcting the operator to an existing operator, or defining a '|' operator.
 //   print(foo | 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:26:13: Error: The method '^' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:26:13: Error: The operator '^' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '^'.
+// Try correcting the operator to an existing operator, or defining a '^' operator.
 //   print(foo ^ 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:27:13: Error: The method '&' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:27:13: Error: The operator '&' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '&'.
+// Try correcting the operator to an existing operator, or defining a '&' operator.
 //   print(foo & 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:28:13: Error: The method '<<' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:28:13: Error: The operator '<<' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '<<'.
+// Try correcting the operator to an existing operator, or defining a '<<' operator.
 //   print(foo << 2);
 //             ^^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:29:13: Error: The method '>>' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:29:13: Error: The operator '>>' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '>>'.
+// Try correcting the operator to an existing operator, or defining a '>>' operator.
 //   print(foo >> 2);
 //             ^^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:31:12: Error: The method '[]=' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:31:12: Error: The operator '[]=' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]='.
+// Try correcting the operator to an existing operator, or defining a '[]=' operator.
 //   print(foo[2] = 2);
 //            ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:32:12: Error: The method '[]' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:32:12: Error: The operator '[]' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]'.
+// Try correcting the operator to an existing operator, or defining a '[]' operator.
 //   print(foo[2]);
 //            ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:33:9: Error: The method '~' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:33:9: Error: The operator '~' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '~'.
+// Try correcting the operator to an existing operator, or defining a '~' operator.
 //   print(~foo);
 //         ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:34:9: Error: The method 'unary-' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:34:9: Error: The operator 'unary-' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named 'unary-'.
+// Try correcting the operator to an existing operator, or defining a 'unary-' operator.
 //   print(-foo);
 //         ^
 //
@@ -199,100 +199,100 @@
 }
 static method main() → dynamic {
   self::Foo* foo = new self::Foo::•();
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:14:13: Error: The method '<' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:14:13: Error: The operator '<' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '<'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
   print(foo < 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:15:13: Error: The method '>' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:15:13: Error: The operator '>' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '>'.
+Try correcting the operator to an existing operator, or defining a '>' operator.
   print(foo > 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:16:13: Error: The method '<=' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:16:13: Error: The operator '<=' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '<='.
+Try correcting the operator to an existing operator, or defining a '<=' operator.
   print(foo <= 2);
             ^^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:17:13: Error: The method '>=' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:17:13: Error: The operator '>=' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '>='.
+Try correcting the operator to an existing operator, or defining a '>=' operator.
   print(foo >= 2);
             ^^");
   core::print(foo.{core::Object::==}(2));
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:19:13: Error: The method '-' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:19:13: Error: The operator '-' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '-'.
+Try correcting the operator to an existing operator, or defining a '-' operator.
   print(foo - 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:20:13: Error: The method '+' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:20:13: Error: The operator '+' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '+'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
   print(foo + 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:21:13: Error: The method '/' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:21:13: Error: The operator '/' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '/'.
+Try correcting the operator to an existing operator, or defining a '/' operator.
   print(foo / 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:22:13: Error: The method '~/' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:22:13: Error: The operator '~/' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '~/'.
+Try correcting the operator to an existing operator, or defining a '~/' operator.
   print(foo ~/ 2);
             ^^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:23:13: Error: The method '*' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:23:13: Error: The operator '*' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '*'.
+Try correcting the operator to an existing operator, or defining a '*' operator.
   print(foo * 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:24:13: Error: The method '%' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:24:13: Error: The operator '%' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '%'.
+Try correcting the operator to an existing operator, or defining a '%' operator.
   print(foo % 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:25:13: Error: The method '|' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:25:13: Error: The operator '|' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '|'.
+Try correcting the operator to an existing operator, or defining a '|' operator.
   print(foo | 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:26:13: Error: The method '^' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:26:13: Error: The operator '^' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '^'.
+Try correcting the operator to an existing operator, or defining a '^' operator.
   print(foo ^ 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:27:13: Error: The method '&' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:27:13: Error: The operator '&' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '&'.
+Try correcting the operator to an existing operator, or defining a '&' operator.
   print(foo & 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:28:13: Error: The method '<<' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:28:13: Error: The operator '<<' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '<<'.
+Try correcting the operator to an existing operator, or defining a '<<' operator.
   print(foo << 2);
             ^^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:29:13: Error: The method '>>' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:29:13: Error: The operator '>>' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '>>'.
+Try correcting the operator to an existing operator, or defining a '>>' operator.
   print(foo >> 2);
             ^^");
-  core::print(let final self::Foo* #t1 = foo in let final core::int* #t2 = 2 in let final core::int* #t3 = 2 in let final void #t4 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:31:12: Error: The method '[]=' isn't defined for the class 'Foo'.
+  core::print(let final self::Foo* #t1 = foo in let final core::int* #t2 = 2 in let final core::int* #t3 = 2 in let final void #t4 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:31:12: Error: The operator '[]=' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '[]='.
+Try correcting the operator to an existing operator, or defining a '[]=' operator.
   print(foo[2] = 2);
            ^" in #t3);
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:32:12: Error: The method '[]' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:32:12: Error: The operator '[]' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '[]'.
+Try correcting the operator to an existing operator, or defining a '[]' operator.
   print(foo[2]);
            ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:33:9: Error: The method '~' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:33:9: Error: The operator '~' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '~'.
+Try correcting the operator to an existing operator, or defining a '~' operator.
   print(~foo);
         ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:34:9: Error: The method 'unary-' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:34:9: Error: The operator 'unary-' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named 'unary-'.
+Try correcting the operator to an existing operator, or defining a 'unary-' operator.
   print(-foo);
         ^");
   core::print(<invalid-type>[]);
diff --git a/pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart.weak.transformed.expect b/pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart.weak.transformed.expect
index 21ad1af..e25cec2 100644
--- a/pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart.weak.transformed.expect
@@ -75,117 +75,117 @@
 //   print(foo ~ 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:14:13: Error: The method '<' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:14:13: Error: The operator '<' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '<'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
 //   print(foo < 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:15:13: Error: The method '>' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:15:13: Error: The operator '>' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '>'.
+// Try correcting the operator to an existing operator, or defining a '>' operator.
 //   print(foo > 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:16:13: Error: The method '<=' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:16:13: Error: The operator '<=' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '<='.
+// Try correcting the operator to an existing operator, or defining a '<=' operator.
 //   print(foo <= 2);
 //             ^^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:17:13: Error: The method '>=' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:17:13: Error: The operator '>=' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '>='.
+// Try correcting the operator to an existing operator, or defining a '>=' operator.
 //   print(foo >= 2);
 //             ^^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:19:13: Error: The method '-' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:19:13: Error: The operator '-' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '-'.
+// Try correcting the operator to an existing operator, or defining a '-' operator.
 //   print(foo - 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:20:13: Error: The method '+' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:20:13: Error: The operator '+' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '+'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
 //   print(foo + 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:21:13: Error: The method '/' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:21:13: Error: The operator '/' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '/'.
+// Try correcting the operator to an existing operator, or defining a '/' operator.
 //   print(foo / 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:22:13: Error: The method '~/' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:22:13: Error: The operator '~/' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '~/'.
+// Try correcting the operator to an existing operator, or defining a '~/' operator.
 //   print(foo ~/ 2);
 //             ^^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:23:13: Error: The method '*' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:23:13: Error: The operator '*' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '*'.
+// Try correcting the operator to an existing operator, or defining a '*' operator.
 //   print(foo * 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:24:13: Error: The method '%' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:24:13: Error: The operator '%' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '%'.
+// Try correcting the operator to an existing operator, or defining a '%' operator.
 //   print(foo % 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:25:13: Error: The method '|' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:25:13: Error: The operator '|' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '|'.
+// Try correcting the operator to an existing operator, or defining a '|' operator.
 //   print(foo | 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:26:13: Error: The method '^' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:26:13: Error: The operator '^' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '^'.
+// Try correcting the operator to an existing operator, or defining a '^' operator.
 //   print(foo ^ 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:27:13: Error: The method '&' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:27:13: Error: The operator '&' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '&'.
+// Try correcting the operator to an existing operator, or defining a '&' operator.
 //   print(foo & 2);
 //             ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:28:13: Error: The method '<<' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:28:13: Error: The operator '<<' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '<<'.
+// Try correcting the operator to an existing operator, or defining a '<<' operator.
 //   print(foo << 2);
 //             ^^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:29:13: Error: The method '>>' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:29:13: Error: The operator '>>' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '>>'.
+// Try correcting the operator to an existing operator, or defining a '>>' operator.
 //   print(foo >> 2);
 //             ^^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:31:12: Error: The method '[]=' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:31:12: Error: The operator '[]=' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]='.
+// Try correcting the operator to an existing operator, or defining a '[]=' operator.
 //   print(foo[2] = 2);
 //            ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:32:12: Error: The method '[]' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:32:12: Error: The operator '[]' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]'.
+// Try correcting the operator to an existing operator, or defining a '[]' operator.
 //   print(foo[2]);
 //            ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:33:9: Error: The method '~' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:33:9: Error: The operator '~' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named '~'.
+// Try correcting the operator to an existing operator, or defining a '~' operator.
 //   print(~foo);
 //         ^
 //
-// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:34:9: Error: The method 'unary-' isn't defined for the class 'Foo'.
+// pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:34:9: Error: The operator 'unary-' isn't defined for the class 'Foo'.
 //  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named 'unary-'.
+// Try correcting the operator to an existing operator, or defining a 'unary-' operator.
 //   print(-foo);
 //         ^
 //
@@ -199,100 +199,100 @@
 }
 static method main() → dynamic {
   self::Foo* foo = new self::Foo::•();
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:14:13: Error: The method '<' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:14:13: Error: The operator '<' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '<'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
   print(foo < 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:15:13: Error: The method '>' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:15:13: Error: The operator '>' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '>'.
+Try correcting the operator to an existing operator, or defining a '>' operator.
   print(foo > 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:16:13: Error: The method '<=' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:16:13: Error: The operator '<=' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '<='.
+Try correcting the operator to an existing operator, or defining a '<=' operator.
   print(foo <= 2);
             ^^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:17:13: Error: The method '>=' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:17:13: Error: The operator '>=' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '>='.
+Try correcting the operator to an existing operator, or defining a '>=' operator.
   print(foo >= 2);
             ^^");
   core::print(foo.{core::Object::==}(2));
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:19:13: Error: The method '-' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:19:13: Error: The operator '-' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '-'.
+Try correcting the operator to an existing operator, or defining a '-' operator.
   print(foo - 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:20:13: Error: The method '+' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:20:13: Error: The operator '+' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '+'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
   print(foo + 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:21:13: Error: The method '/' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:21:13: Error: The operator '/' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '/'.
+Try correcting the operator to an existing operator, or defining a '/' operator.
   print(foo / 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:22:13: Error: The method '~/' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:22:13: Error: The operator '~/' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '~/'.
+Try correcting the operator to an existing operator, or defining a '~/' operator.
   print(foo ~/ 2);
             ^^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:23:13: Error: The method '*' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:23:13: Error: The operator '*' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '*'.
+Try correcting the operator to an existing operator, or defining a '*' operator.
   print(foo * 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:24:13: Error: The method '%' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:24:13: Error: The operator '%' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '%'.
+Try correcting the operator to an existing operator, or defining a '%' operator.
   print(foo % 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:25:13: Error: The method '|' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:25:13: Error: The operator '|' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '|'.
+Try correcting the operator to an existing operator, or defining a '|' operator.
   print(foo | 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:26:13: Error: The method '^' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:26:13: Error: The operator '^' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '^'.
+Try correcting the operator to an existing operator, or defining a '^' operator.
   print(foo ^ 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:27:13: Error: The method '&' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:27:13: Error: The operator '&' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '&'.
+Try correcting the operator to an existing operator, or defining a '&' operator.
   print(foo & 2);
             ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:28:13: Error: The method '<<' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:28:13: Error: The operator '<<' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '<<'.
+Try correcting the operator to an existing operator, or defining a '<<' operator.
   print(foo << 2);
             ^^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:29:13: Error: The method '>>' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:29:13: Error: The operator '>>' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '>>'.
+Try correcting the operator to an existing operator, or defining a '>>' operator.
   print(foo >> 2);
             ^^");
-  core::print(let final self::Foo* #t1 = foo in let final core::int* #t2 = 2 in let final core::int* #t3 = 2 in let final void #t4 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:31:12: Error: The method '[]=' isn't defined for the class 'Foo'.
+  core::print(let final self::Foo* #t1 = foo in let final core::int* #t2 = 2 in let final core::int* #t3 = 2 in let final void #t4 = invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:31:12: Error: The operator '[]=' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '[]='.
+Try correcting the operator to an existing operator, or defining a '[]=' operator.
   print(foo[2] = 2);
            ^" in #t3);
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:32:12: Error: The method '[]' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:32:12: Error: The operator '[]' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '[]'.
+Try correcting the operator to an existing operator, or defining a '[]' operator.
   print(foo[2]);
            ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:33:9: Error: The method '~' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:33:9: Error: The operator '~' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named '~'.
+Try correcting the operator to an existing operator, or defining a '~' operator.
   print(~foo);
         ^");
-  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:34:9: Error: The method 'unary-' isn't defined for the class 'Foo'.
+  core::print(invalid-expression "pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart:34:9: Error: The operator 'unary-' isn't defined for the class 'Foo'.
  - 'Foo' is from 'pkg/front_end/testcases/general_nnbd_opt_out/operator_method_not_found.dart'.
-Try correcting the name to the name of an existing method, or defining a method named 'unary-'.
+Try correcting the operator to an existing operator, or defining a 'unary-' operator.
   print(-foo);
         ^");
   core::print(<invalid-type>[]);
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_22.yaml.world.1.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_22.yaml.world.1.expect
index a20d4ff..4a9ec12 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_22.yaml.world.1.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_22.yaml.world.1.expect
@@ -423,7 +423,7 @@
       return 1.{dart.core::int::unary-}();
     }
     method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ insert(dart.core::int* index, generic-covariant-impl dart.core::int* element) → void {
-      dart.core::ArgumentError::checkNotNull(index, "index");
+      dart.core::ArgumentError::checkNotNull<dart.core::int*>(index, "index");
       dart.core::RangeError::checkValueInInterval(index, 0, this.{dart.core::List::length}, "index");
       if(index.{dart.core::num::==}(this.{dart.core::List::length})) {
         this.{dart.collection::ListMixin::add}(element);
diff --git a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_22.yaml.world.2.expect b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_22.yaml.world.2.expect
index a20d4ff..4a9ec12 100644
--- a/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_22.yaml.world.2.expect
+++ b/pkg/front_end/testcases/incremental_initialize_from_dill/no_outline_change_22.yaml.world.2.expect
@@ -423,7 +423,7 @@
       return 1.{dart.core::int::unary-}();
     }
     method /* from org-dartlang-sdk:///sdk/lib/collection/list.dart */ insert(dart.core::int* index, generic-covariant-impl dart.core::int* element) → void {
-      dart.core::ArgumentError::checkNotNull(index, "index");
+      dart.core::ArgumentError::checkNotNull<dart.core::int*>(index, "index");
       dart.core::RangeError::checkValueInInterval(index, 0, this.{dart.core::List::length}, "index");
       if(index.{dart.core::num::==}(this.{dart.core::List::length})) {
         this.{dart.collection::ListMixin::add}(element);
diff --git a/pkg/front_end/testcases/inference/call_corner_cases.dart b/pkg/front_end/testcases/inference/call_corner_cases.dart
index 998d8a7..42ed206 100644
--- a/pkg/front_end/testcases/inference/call_corner_cases.dart
+++ b/pkg/front_end/testcases/inference/call_corner_cases.dart
@@ -23,13 +23,13 @@
 test() {
   var /*@ type=int* */ callA = new A() /*@target=A::call*/ ();
   var /*@ type=int* */ callFieldA =
-      new D(). /*@target=D::fieldA*/ /*@target=A::call*/ fieldA();
+      new D(). /*@target=D::fieldA*/ fieldA /*@target=A::call*/ ();
   var /*@ type=int* */ callGetA =
-      new D(). /*@target=D::getA*/ /*@target=A::call*/ getA();
+      new D(). /*@target=D::getA*/ getA /*@target=A::call*/ ();
   var /*@type=int**/ callFieldB = new D()
-      . /*@target=D::fieldB*/ /*@target=B::call*/ /*@target=A::call*/ fieldB();
+      . /*@target=D::fieldB*/ fieldB /*@target=B::call*/ /*@target=A::call*/ ();
   var /*@type=int**/ callGetB = new D()
-      . /*@target=D::getB*/ /*@target=B::call*/ /*@target=A::call*/ getB();
+      . /*@target=D::getB*/ getB /*@target=B::call*/ /*@target=A::call*/ ();
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/inference/callable_generic_class.dart b/pkg/front_end/testcases/inference/callable_generic_class.dart
index 57f1e5e..fd64d35 100644
--- a/pkg/front_end/testcases/inference/callable_generic_class.dart
+++ b/pkg/front_end/testcases/inference/callable_generic_class.dart
@@ -17,7 +17,7 @@
 
 void main() {
   new FooActions()
-      . /*@target=FooActions::foo*/ /*@target=ActionDispatcher::call*/ foo(
+      . /*@target=FooActions::foo*/ foo /*@target=ActionDispatcher::call*/ (
           new Bar());
   new FooActions()
       . /*@target=FooActions::foo*/ foo
diff --git a/pkg/front_end/testcases/inference/conflicting_fields.dart.outline.expect b/pkg/front_end/testcases/inference/conflicting_fields.dart.outline.expect
index 36d9d8f..ecc609d 100644
--- a/pkg/front_end/testcases/inference/conflicting_fields.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/conflicting_fields.dart.outline.expect
@@ -6,21 +6,45 @@
 // Try adding an explicit type.
 //   get field1 => null;
 //       ^^^^^^
+// pkg/front_end/testcases/inference/conflicting_fields.dart:8:11: Context: This is one of the inherited members.
+//   dynamic field1;
+//           ^^^^^^
+// pkg/front_end/testcases/inference/conflicting_fields.dart:13:7: Context: This is one of the inherited members.
+//   int field1;
+//       ^^^^^^
 //
 // pkg/front_end/testcases/inference/conflicting_fields.dart:20:14: Error: Can't infer a type for 'value' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   set field1(value) {}
 //              ^^^^^
+// pkg/front_end/testcases/inference/conflicting_fields.dart:8:11: Context: This is one of the inherited members.
+//   dynamic field1;
+//           ^^^^^^
+// pkg/front_end/testcases/inference/conflicting_fields.dart:13:7: Context: This is one of the inherited members.
+//   int field1;
+//       ^^^^^^
 //
 // pkg/front_end/testcases/inference/conflicting_fields.dart:19:7: Error: Can't infer a return type for 'field2' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   get field2 => null;
 //       ^^^^^^
+// pkg/front_end/testcases/inference/conflicting_fields.dart:9:7: Context: This is one of the inherited members.
+//   int field2;
+//       ^^^^^^
+// pkg/front_end/testcases/inference/conflicting_fields.dart:14:11: Context: This is one of the inherited members.
+//   dynamic field2;
+//           ^^^^^^
 //
 // pkg/front_end/testcases/inference/conflicting_fields.dart:21:14: Error: Can't infer a type for 'value' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   set field2(value) {}
 //              ^^^^^
+// pkg/front_end/testcases/inference/conflicting_fields.dart:9:7: Context: This is one of the inherited members.
+//   int field2;
+//       ^^^^^^
+// pkg/front_end/testcases/inference/conflicting_fields.dart:14:11: Context: This is one of the inherited members.
+//   dynamic field2;
+//           ^^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/conflicting_fields.dart.strong.expect b/pkg/front_end/testcases/inference/conflicting_fields.dart.strong.expect
index cdd0b47..c539ecb 100644
--- a/pkg/front_end/testcases/inference/conflicting_fields.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/conflicting_fields.dart.strong.expect
@@ -6,21 +6,45 @@
 // Try adding an explicit type.
 //   get field1 => null;
 //       ^^^^^^
+// pkg/front_end/testcases/inference/conflicting_fields.dart:8:11: Context: This is one of the inherited members.
+//   dynamic field1;
+//           ^^^^^^
+// pkg/front_end/testcases/inference/conflicting_fields.dart:13:7: Context: This is one of the inherited members.
+//   int field1;
+//       ^^^^^^
 //
 // pkg/front_end/testcases/inference/conflicting_fields.dart:20:14: Error: Can't infer a type for 'value' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   set field1(value) {}
 //              ^^^^^
+// pkg/front_end/testcases/inference/conflicting_fields.dart:8:11: Context: This is one of the inherited members.
+//   dynamic field1;
+//           ^^^^^^
+// pkg/front_end/testcases/inference/conflicting_fields.dart:13:7: Context: This is one of the inherited members.
+//   int field1;
+//       ^^^^^^
 //
 // pkg/front_end/testcases/inference/conflicting_fields.dart:19:7: Error: Can't infer a return type for 'field2' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   get field2 => null;
 //       ^^^^^^
+// pkg/front_end/testcases/inference/conflicting_fields.dart:9:7: Context: This is one of the inherited members.
+//   int field2;
+//       ^^^^^^
+// pkg/front_end/testcases/inference/conflicting_fields.dart:14:11: Context: This is one of the inherited members.
+//   dynamic field2;
+//           ^^^^^^
 //
 // pkg/front_end/testcases/inference/conflicting_fields.dart:21:14: Error: Can't infer a type for 'value' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   set field2(value) {}
 //              ^^^^^
+// pkg/front_end/testcases/inference/conflicting_fields.dart:9:7: Context: This is one of the inherited members.
+//   int field2;
+//       ^^^^^^
+// pkg/front_end/testcases/inference/conflicting_fields.dart:14:11: Context: This is one of the inherited members.
+//   dynamic field2;
+//           ^^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/conflicting_fields.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/conflicting_fields.dart.strong.transformed.expect
index cdd0b47..c539ecb 100644
--- a/pkg/front_end/testcases/inference/conflicting_fields.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/conflicting_fields.dart.strong.transformed.expect
@@ -6,21 +6,45 @@
 // Try adding an explicit type.
 //   get field1 => null;
 //       ^^^^^^
+// pkg/front_end/testcases/inference/conflicting_fields.dart:8:11: Context: This is one of the inherited members.
+//   dynamic field1;
+//           ^^^^^^
+// pkg/front_end/testcases/inference/conflicting_fields.dart:13:7: Context: This is one of the inherited members.
+//   int field1;
+//       ^^^^^^
 //
 // pkg/front_end/testcases/inference/conflicting_fields.dart:20:14: Error: Can't infer a type for 'value' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   set field1(value) {}
 //              ^^^^^
+// pkg/front_end/testcases/inference/conflicting_fields.dart:8:11: Context: This is one of the inherited members.
+//   dynamic field1;
+//           ^^^^^^
+// pkg/front_end/testcases/inference/conflicting_fields.dart:13:7: Context: This is one of the inherited members.
+//   int field1;
+//       ^^^^^^
 //
 // pkg/front_end/testcases/inference/conflicting_fields.dart:19:7: Error: Can't infer a return type for 'field2' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   get field2 => null;
 //       ^^^^^^
+// pkg/front_end/testcases/inference/conflicting_fields.dart:9:7: Context: This is one of the inherited members.
+//   int field2;
+//       ^^^^^^
+// pkg/front_end/testcases/inference/conflicting_fields.dart:14:11: Context: This is one of the inherited members.
+//   dynamic field2;
+//           ^^^^^^
 //
 // pkg/front_end/testcases/inference/conflicting_fields.dart:21:14: Error: Can't infer a type for 'value' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   set field2(value) {}
 //              ^^^^^
+// pkg/front_end/testcases/inference/conflicting_fields.dart:9:7: Context: This is one of the inherited members.
+//   int field2;
+//       ^^^^^^
+// pkg/front_end/testcases/inference/conflicting_fields.dart:14:11: Context: This is one of the inherited members.
+//   dynamic field2;
+//           ^^^^^^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.outline.expect b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.outline.expect
index 10031dd..94b60b3 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.outline.expect
@@ -6,11 +6,23 @@
 // Try adding an explicit type.
 //   get a => null;
 //       ^
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:17:12: Context: This is one of the inherited members.
+//   final I1 a = null;
+//            ^
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:21:12: Context: This is one of the inherited members.
+//   final I2 a = null;
+//            ^
 //
 // pkg/front_end/testcases/inference/conflicts_can_happen.dart:30:7: Error: Can't infer a return type for 'a' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   get a => null;
 //       ^
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:21:12: Context: This is one of the inherited members.
+//   final I2 a = null;
+//            ^
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:17:12: Context: This is one of the inherited members.
+//   final I1 a = null;
+//            ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.expect b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.expect
index f362386..2f9c0a9 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.expect
@@ -6,11 +6,23 @@
 // Try adding an explicit type.
 //   get a => null;
 //       ^
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:17:12: Context: This is one of the inherited members.
+//   final I1 a = null;
+//            ^
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:21:12: Context: This is one of the inherited members.
+//   final I2 a = null;
+//            ^
 //
 // pkg/front_end/testcases/inference/conflicts_can_happen.dart:30:7: Error: Can't infer a return type for 'a' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   get a => null;
 //       ^
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:21:12: Context: This is one of the inherited members.
+//   final I2 a = null;
+//            ^
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:17:12: Context: This is one of the inherited members.
+//   final I1 a = null;
+//            ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.transformed.expect
index f362386..2f9c0a9 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen.dart.strong.transformed.expect
@@ -6,11 +6,23 @@
 // Try adding an explicit type.
 //   get a => null;
 //       ^
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:17:12: Context: This is one of the inherited members.
+//   final I1 a = null;
+//            ^
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:21:12: Context: This is one of the inherited members.
+//   final I2 a = null;
+//            ^
 //
 // pkg/front_end/testcases/inference/conflicts_can_happen.dart:30:7: Error: Can't infer a return type for 'a' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   get a => null;
 //       ^
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:21:12: Context: This is one of the inherited members.
+//   final I2 a = null;
+//            ^
+// pkg/front_end/testcases/inference/conflicts_can_happen.dart:17:12: Context: This is one of the inherited members.
+//   final I1 a = null;
+//            ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.outline.expect b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.outline.expect
index f509791..6dec14e 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.outline.expect
@@ -6,6 +6,12 @@
 // Try adding an explicit type.
 //   get a => null;
 //       ^
+// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:22:12: Context: This is one of the inherited members.
+//   final I1 a = null;
+//            ^
+// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:26:12: Context: This is one of the inherited members.
+//   final I2 a = null;
+//            ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.expect b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.expect
index 5ca29a6..82780a7 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.expect
@@ -6,6 +6,12 @@
 // Try adding an explicit type.
 //   get a => null;
 //       ^
+// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:22:12: Context: This is one of the inherited members.
+//   final I1 a = null;
+//            ^
+// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:26:12: Context: This is one of the inherited members.
+//   final I2 a = null;
+//            ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.transformed.expect
index 5ca29a6..82780a7 100644
--- a/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/conflicts_can_happen2.dart.strong.transformed.expect
@@ -6,6 +6,12 @@
 // Try adding an explicit type.
 //   get a => null;
 //       ^
+// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:22:12: Context: This is one of the inherited members.
+//   final I1 a = null;
+//            ^
+// pkg/front_end/testcases/inference/conflicts_can_happen2.dart:26:12: Context: This is one of the inherited members.
+//   final I2 a = null;
+//            ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/dynamic_methods.dart.strong.expect b/pkg/front_end/testcases/inference/dynamic_methods.dart.strong.expect
index 1f6a002..bab54ce 100644
--- a/pkg/front_end/testcases/inference/dynamic_methods.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/dynamic_methods.dart.strong.expect
@@ -2,9 +2,9 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/dynamic_methods.dart:16:39: Error: 'hashCode' isn't a function or method and can't be invoked.
+// pkg/front_end/testcases/inference/dynamic_methods.dart:16:47: Error: 'hashCode' isn't a function or method and can't be invoked.
 //       d. /*@target=Object::hashCode*/ hashCode();
-//                                       ^^^^^^^^
+//                                               ^^^^...
 //
 import self as self;
 import "dart:core" as core;
@@ -19,9 +19,9 @@
 static method test() → dynamic {
   dynamic d = new self::Foo::•();
   core::int* get_hashCode = d.{core::Object::hashCode};
-  dynamic call_hashCode = invalid-expression "pkg/front_end/testcases/inference/dynamic_methods.dart:16:39: Error: 'hashCode' isn't a function or method and can't be invoked.
+  dynamic call_hashCode = invalid-expression "pkg/front_end/testcases/inference/dynamic_methods.dart:16:47: Error: 'hashCode' isn't a function or method and can't be invoked.
       d. /*@target=Object::hashCode*/ hashCode();
-                                      ^^^^^^^^";
+                                              ^^^^...";
   core::String* call_toString = d.{core::Object::toString}();
   dynamic call_toStringArg = d.toString(color: "pink");
   dynamic call_foo0 = d.foo();
diff --git a/pkg/front_end/testcases/inference/dynamic_methods.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/dynamic_methods.dart.strong.transformed.expect
index 1f6a002..bab54ce 100644
--- a/pkg/front_end/testcases/inference/dynamic_methods.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/dynamic_methods.dart.strong.transformed.expect
@@ -2,9 +2,9 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/dynamic_methods.dart:16:39: Error: 'hashCode' isn't a function or method and can't be invoked.
+// pkg/front_end/testcases/inference/dynamic_methods.dart:16:47: Error: 'hashCode' isn't a function or method and can't be invoked.
 //       d. /*@target=Object::hashCode*/ hashCode();
-//                                       ^^^^^^^^
+//                                               ^^^^...
 //
 import self as self;
 import "dart:core" as core;
@@ -19,9 +19,9 @@
 static method test() → dynamic {
   dynamic d = new self::Foo::•();
   core::int* get_hashCode = d.{core::Object::hashCode};
-  dynamic call_hashCode = invalid-expression "pkg/front_end/testcases/inference/dynamic_methods.dart:16:39: Error: 'hashCode' isn't a function or method and can't be invoked.
+  dynamic call_hashCode = invalid-expression "pkg/front_end/testcases/inference/dynamic_methods.dart:16:47: Error: 'hashCode' isn't a function or method and can't be invoked.
       d. /*@target=Object::hashCode*/ hashCode();
-                                      ^^^^^^^^";
+                                              ^^^^...";
   core::String* call_toString = d.{core::Object::toString}();
   dynamic call_toStringArg = d.toString(color: "pink");
   dynamic call_foo0 = d.foo();
diff --git a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.expect b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.expect
index 05abfab..66a26bf 100644
--- a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.expect
@@ -2,9 +2,9 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:23:123: Error: The method '+' isn't defined for the class 'FutureOr<String>'.
+// pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:23:123: Error: The operator '+' isn't defined for the class 'FutureOr<String>'.
 //  - 'FutureOr' is from 'dart:async'.
-// Try correcting the name to the name of an existing method, or defining a method named '+'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
 //                           /*@ type=int* */ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +
 //                                                                                                                           ^
 //
@@ -24,9 +24,9 @@
 static method test() → dynamic {
   core::Iterable<asy::Future<core::int*>*>* list = <core::int*>[1, 2, 3].{core::Iterable::map}<asy::Future<core::int*>*>(#C1);
   asy::Future<core::List<core::int*>*>* results = asy::Future::wait<core::int*>(list);
-  asy::Future<core::String*>* results2 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → asy::FutureOr<core::String*>* => list.{core::Iterable::fold}<asy::FutureOr<core::String*>*>("", (asy::FutureOr<core::String*>* x, core::int* y) → asy::FutureOr<core::String*>* => invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:23:123: Error: The method '+' isn't defined for the class 'FutureOr<String>'.
+  asy::Future<core::String*>* results2 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → asy::FutureOr<core::String*>* => list.{core::Iterable::fold}<asy::FutureOr<core::String*>*>("", (asy::FutureOr<core::String*>* x, core::int* y) → asy::FutureOr<core::String*>* => invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:23:123: Error: The operator '+' isn't defined for the class 'FutureOr<String>'.
  - 'FutureOr' is from 'dart:async'.
-Try correcting the name to the name of an existing method, or defining a method named '+'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
                           /*@ type=int* */ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +
                                                                                                                           ^" as{TypeError,ForDynamic} asy::FutureOr<core::String*>*));
   asy::Future<core::String*>* results3 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → asy::FutureOr<core::String*>* => list.{core::Iterable::fold}<asy::FutureOr<core::String*>*>("", let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:31:111: Error: The argument type 'String Function(String, int)' can't be assigned to the parameter type 'FutureOr<String> Function(FutureOr<String>, int)'.
diff --git a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.transformed.expect
index 05abfab..66a26bf 100644
--- a/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart.strong.transformed.expect
@@ -2,9 +2,9 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:23:123: Error: The method '+' isn't defined for the class 'FutureOr<String>'.
+// pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:23:123: Error: The operator '+' isn't defined for the class 'FutureOr<String>'.
 //  - 'FutureOr' is from 'dart:async'.
-// Try correcting the name to the name of an existing method, or defining a method named '+'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
 //                           /*@ type=int* */ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +
 //                                                                                                                           ^
 //
@@ -24,9 +24,9 @@
 static method test() → dynamic {
   core::Iterable<asy::Future<core::int*>*>* list = <core::int*>[1, 2, 3].{core::Iterable::map}<asy::Future<core::int*>*>(#C1);
   asy::Future<core::List<core::int*>*>* results = asy::Future::wait<core::int*>(list);
-  asy::Future<core::String*>* results2 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → asy::FutureOr<core::String*>* => list.{core::Iterable::fold}<asy::FutureOr<core::String*>*>("", (asy::FutureOr<core::String*>* x, core::int* y) → asy::FutureOr<core::String*>* => invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:23:123: Error: The method '+' isn't defined for the class 'FutureOr<String>'.
+  asy::Future<core::String*>* results2 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → asy::FutureOr<core::String*>* => list.{core::Iterable::fold}<asy::FutureOr<core::String*>*>("", (asy::FutureOr<core::String*>* x, core::int* y) → asy::FutureOr<core::String*>* => invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:23:123: Error: The operator '+' isn't defined for the class 'FutureOr<String>'.
  - 'FutureOr' is from 'dart:async'.
-Try correcting the name to the name of an existing method, or defining a method named '+'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
                           /*@ type=int* */ y) => /*info:DYNAMIC_CAST,info:DYNAMIC_INVOKE*/ x /*error:UNDEFINED_OPERATOR*/ +
                                                                                                                           ^" as{TypeError,ForDynamic} asy::FutureOr<core::String*>*));
   asy::Future<core::String*>* results3 = results.{asy::Future::then}<core::String*>((core::List<core::int*>* list) → asy::FutureOr<core::String*>* => list.{core::Iterable::fold}<asy::FutureOr<core::String*>*>("", let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/inference/generic_methods_iterable_and_future.dart:31:111: Error: The argument type 'String Function(String, int)' can't be assigned to the parameter type 'FutureOr<String> Function(FutureOr<String>, int)'.
diff --git a/pkg/front_end/testcases/inference/inconsistent_overrides.dart.outline.expect b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.outline.expect
index 4287368..eaaeebe 100644
--- a/pkg/front_end/testcases/inference/inconsistent_overrides.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.outline.expect
@@ -6,31 +6,67 @@
 // Try adding an explicit type.
 //   f(x, {y}) {}
 //   ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:10:5: Context: This is one of the inherited members.
+//   A f(A x, {A y}) {}
+//     ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:22:5: Context: This is one of the inherited members.
+//   I f(I x, {I y}) {}
+//     ^
 //
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:16:5: Error: Can't infer a type for 'x' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   f(x, {y}) {}
 //     ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:10:5: Context: This is one of the inherited members.
+//   A f(A x, {A y}) {}
+//     ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:22:5: Context: This is one of the inherited members.
+//   I f(I x, {I y}) {}
+//     ^
 //
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:16:9: Error: Can't infer a type for 'y' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   f(x, {y}) {}
 //         ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:10:5: Context: This is one of the inherited members.
+//   A f(A x, {A y}) {}
+//     ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:22:5: Context: This is one of the inherited members.
+//   I f(I x, {I y}) {}
+//     ^
 //
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:17:5: Error: Can't infer a type for 'x' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   g(x, {y}) {}
 //     ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:11:5: Context: This is one of the inherited members.
+//   A g(A x, {A y}) {}
+//     ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:23:5: Context: This is one of the inherited members.
+//   A g(I x, {I y}) {}
+//     ^
 //
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:17:9: Error: Can't infer a type for 'y' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   g(x, {y}) {}
 //         ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:11:5: Context: This is one of the inherited members.
+//   A g(A x, {A y}) {}
+//     ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:23:5: Context: This is one of the inherited members.
+//   A g(I x, {I y}) {}
+//     ^
 //
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:18:9: Error: Can't infer a type for 'y' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   h(x, {y}) {}
 //         ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:12:5: Context: This is one of the inherited members.
+//   A h(A x, {A y}) {}
+//     ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:24:5: Context: This is one of the inherited members.
+//   A h(A x, {I y}) {}
+//     ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/inconsistent_overrides.dart.strong.expect b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.strong.expect
index 490cc37..76b9569 100644
--- a/pkg/front_end/testcases/inference/inconsistent_overrides.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.strong.expect
@@ -6,31 +6,67 @@
 // Try adding an explicit type.
 //   f(x, {y}) {}
 //   ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:10:5: Context: This is one of the inherited members.
+//   A f(A x, {A y}) {}
+//     ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:22:5: Context: This is one of the inherited members.
+//   I f(I x, {I y}) {}
+//     ^
 //
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:16:5: Error: Can't infer a type for 'x' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   f(x, {y}) {}
 //     ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:10:5: Context: This is one of the inherited members.
+//   A f(A x, {A y}) {}
+//     ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:22:5: Context: This is one of the inherited members.
+//   I f(I x, {I y}) {}
+//     ^
 //
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:16:9: Error: Can't infer a type for 'y' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   f(x, {y}) {}
 //         ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:10:5: Context: This is one of the inherited members.
+//   A f(A x, {A y}) {}
+//     ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:22:5: Context: This is one of the inherited members.
+//   I f(I x, {I y}) {}
+//     ^
 //
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:17:5: Error: Can't infer a type for 'x' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   g(x, {y}) {}
 //     ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:11:5: Context: This is one of the inherited members.
+//   A g(A x, {A y}) {}
+//     ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:23:5: Context: This is one of the inherited members.
+//   A g(I x, {I y}) {}
+//     ^
 //
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:17:9: Error: Can't infer a type for 'y' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   g(x, {y}) {}
 //         ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:11:5: Context: This is one of the inherited members.
+//   A g(A x, {A y}) {}
+//     ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:23:5: Context: This is one of the inherited members.
+//   A g(I x, {I y}) {}
+//     ^
 //
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:18:9: Error: Can't infer a type for 'y' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   h(x, {y}) {}
 //         ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:12:5: Context: This is one of the inherited members.
+//   A h(A x, {A y}) {}
+//     ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:24:5: Context: This is one of the inherited members.
+//   A h(A x, {I y}) {}
+//     ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/inconsistent_overrides.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.strong.transformed.expect
index 490cc37..76b9569 100644
--- a/pkg/front_end/testcases/inference/inconsistent_overrides.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/inconsistent_overrides.dart.strong.transformed.expect
@@ -6,31 +6,67 @@
 // Try adding an explicit type.
 //   f(x, {y}) {}
 //   ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:10:5: Context: This is one of the inherited members.
+//   A f(A x, {A y}) {}
+//     ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:22:5: Context: This is one of the inherited members.
+//   I f(I x, {I y}) {}
+//     ^
 //
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:16:5: Error: Can't infer a type for 'x' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   f(x, {y}) {}
 //     ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:10:5: Context: This is one of the inherited members.
+//   A f(A x, {A y}) {}
+//     ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:22:5: Context: This is one of the inherited members.
+//   I f(I x, {I y}) {}
+//     ^
 //
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:16:9: Error: Can't infer a type for 'y' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   f(x, {y}) {}
 //         ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:10:5: Context: This is one of the inherited members.
+//   A f(A x, {A y}) {}
+//     ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:22:5: Context: This is one of the inherited members.
+//   I f(I x, {I y}) {}
+//     ^
 //
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:17:5: Error: Can't infer a type for 'x' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   g(x, {y}) {}
 //     ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:11:5: Context: This is one of the inherited members.
+//   A g(A x, {A y}) {}
+//     ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:23:5: Context: This is one of the inherited members.
+//   A g(I x, {I y}) {}
+//     ^
 //
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:17:9: Error: Can't infer a type for 'y' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   g(x, {y}) {}
 //         ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:11:5: Context: This is one of the inherited members.
+//   A g(A x, {A y}) {}
+//     ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:23:5: Context: This is one of the inherited members.
+//   A g(I x, {I y}) {}
+//     ^
 //
 // pkg/front_end/testcases/inference/inconsistent_overrides.dart:18:9: Error: Can't infer a type for 'y' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   h(x, {y}) {}
 //         ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:12:5: Context: This is one of the inherited members.
+//   A h(A x, {A y}) {}
+//     ^
+// pkg/front_end/testcases/inference/inconsistent_overrides.dart:24:5: Context: This is one of the inherited members.
+//   A h(A x, {I y}) {}
+//     ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.outline.expect b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.outline.expect
index d186b99..483a945 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.outline.expect
@@ -6,16 +6,34 @@
 // Try adding an explicit type.
 //   var x;
 //       ^
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:9:11: Context: This is one of the inherited members.
+//   int get x;
+//           ^
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:17:11: Context: This is one of the inherited members.
+//   num get x;
+//           ^
 //
 // pkg/front_end/testcases/inference/infer_field_override_multiple.dart:36:7: Error: Can't infer a type for 'x' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   var x;
 //       ^
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:9:11: Context: This is one of the inherited members.
+//   int get x;
+//           ^
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:21:14: Context: This is one of the inherited members.
+//   double get x;
+//              ^
 //
 // pkg/front_end/testcases/inference/infer_field_override_multiple.dart:40:7: Error: Can't infer a type for 'x' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   var x;
 //       ^
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:17:11: Context: This is one of the inherited members.
+//   num get x;
+//           ^
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:21:14: Context: This is one of the inherited members.
+//   double get x;
+//              ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.expect b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.expect
index 863160b..141243b 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.expect
@@ -6,16 +6,34 @@
 // Try adding an explicit type.
 //   var x;
 //       ^
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:9:11: Context: This is one of the inherited members.
+//   int get x;
+//           ^
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:17:11: Context: This is one of the inherited members.
+//   num get x;
+//           ^
 //
 // pkg/front_end/testcases/inference/infer_field_override_multiple.dart:36:7: Error: Can't infer a type for 'x' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   var x;
 //       ^
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:9:11: Context: This is one of the inherited members.
+//   int get x;
+//           ^
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:21:14: Context: This is one of the inherited members.
+//   double get x;
+//              ^
 //
 // pkg/front_end/testcases/inference/infer_field_override_multiple.dart:40:7: Error: Can't infer a type for 'x' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   var x;
 //       ^
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:17:11: Context: This is one of the inherited members.
+//   num get x;
+//           ^
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:21:14: Context: This is one of the inherited members.
+//   double get x;
+//              ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.transformed.expect
index 863160b..141243b 100644
--- a/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_field_override_multiple.dart.strong.transformed.expect
@@ -6,16 +6,34 @@
 // Try adding an explicit type.
 //   var x;
 //       ^
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:9:11: Context: This is one of the inherited members.
+//   int get x;
+//           ^
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:17:11: Context: This is one of the inherited members.
+//   num get x;
+//           ^
 //
 // pkg/front_end/testcases/inference/infer_field_override_multiple.dart:36:7: Error: Can't infer a type for 'x' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   var x;
 //       ^
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:9:11: Context: This is one of the inherited members.
+//   int get x;
+//           ^
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:21:14: Context: This is one of the inherited members.
+//   double get x;
+//              ^
 //
 // pkg/front_end/testcases/inference/infer_field_override_multiple.dart:40:7: Error: Can't infer a type for 'x' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   var x;
 //       ^
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:17:11: Context: This is one of the inherited members.
+//   num get x;
+//           ^
+// pkg/front_end/testcases/inference/infer_field_override_multiple.dart:21:14: Context: This is one of the inherited members.
+//   double get x;
+//              ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect
index 5aa60b1..3376c0d 100644
--- a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.expect
@@ -10,9 +10,9 @@
 //   /*error:UNDEFINED_IDENTIFIER*/ x
 //                                  ^
 //
-// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:32:58: Error: The method 'unary-' isn't defined for the class 'A'.
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:32:58: Error: The operator 'unary-' isn't defined for the class 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named 'unary-'.
+// Try correcting the operator to an existing operator, or defining a 'unary-' operator.
 // var i = /*error:UNDEFINED_OPERATOR,info:DYNAMIC_INVOKE*/ -new A();
 //                                                          ^
 //
@@ -103,9 +103,9 @@
 static field core::int* f = 2.{core::num::+}(3);
 static field core::int* g = 3.{core::int::unary-}();
 static field self::B* h = new self::A::•().{self::A::+}(3);
-static field dynamic i = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:32:58: Error: The method 'unary-' isn't defined for the class 'A'.
+static field dynamic i = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:32:58: Error: The operator 'unary-' isn't defined for the class 'A'.
  - 'A' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
-Try correcting the name to the name of an existing method, or defining a method named 'unary-'.
+Try correcting the operator to an existing operator, or defining a 'unary-' operator.
 var i = /*error:UNDEFINED_OPERATOR,info:DYNAMIC_INVOKE*/ -new A();
                                                          ^";
 static field self::B* j = null as self::B*;
diff --git a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.transformed.expect b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.transformed.expect
index 5aa60b1..3376c0d 100644
--- a/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart.strong.transformed.expect
@@ -10,9 +10,9 @@
 //   /*error:UNDEFINED_IDENTIFIER*/ x
 //                                  ^
 //
-// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:32:58: Error: The method 'unary-' isn't defined for the class 'A'.
+// pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:32:58: Error: The operator 'unary-' isn't defined for the class 'A'.
 //  - 'A' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
-// Try correcting the name to the name of an existing method, or defining a method named 'unary-'.
+// Try correcting the operator to an existing operator, or defining a 'unary-' operator.
 // var i = /*error:UNDEFINED_OPERATOR,info:DYNAMIC_INVOKE*/ -new A();
 //                                                          ^
 //
@@ -103,9 +103,9 @@
 static field core::int* f = 2.{core::num::+}(3);
 static field core::int* g = 3.{core::int::unary-}();
 static field self::B* h = new self::A::•().{self::A::+}(3);
-static field dynamic i = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:32:58: Error: The method 'unary-' isn't defined for the class 'A'.
+static field dynamic i = invalid-expression "pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart:32:58: Error: The operator 'unary-' isn't defined for the class 'A'.
  - 'A' is from 'pkg/front_end/testcases/inference/infer_from_complex_expressions_if_outer_most_value_is_precise.dart'.
-Try correcting the name to the name of an existing method, or defining a method named 'unary-'.
+Try correcting the operator to an existing operator, or defining a 'unary-' operator.
 var i = /*error:UNDEFINED_OPERATOR,info:DYNAMIC_INVOKE*/ -new A();
                                                          ^";
 static field self::B* j = null as self::B*;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.outline.expect
index 0c50386..b7726db 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.outline.expect
@@ -6,11 +6,6 @@
 // class A extends Object with M0, M1<int> {}
 //       ^
 //
-// pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart:13:7: Error: 'A' can't implement both 'I<dynamic>' and 'I<int>'
-//  - 'I' is from 'pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart'.
-// class A extends Object with M0, M1<int> {}
-//       ^
-//
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.strong.expect
index 440e0b2..e4415d8 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart.strong.expect
@@ -6,11 +6,6 @@
 // class A extends Object with M0, M1<int> {}
 //       ^
 //
-// pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart:13:7: Error: 'A' can't implement both 'I<dynamic>' and 'I<int>'
-//  - 'I' is from 'pkg/front_end/testcases/inference/mixin_inference_outwards_3.dart'.
-// class A extends Object with M0, M1<int> {}
-//       ^
-//
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.outline.expect
index b00323d..012864a 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.outline.expect
@@ -6,11 +6,6 @@
 // class A extends Object with M0, M1 {}
 //       ^
 //
-// pkg/front_end/testcases/inference/mixin_inference_unification_1.dart:13:7: Error: 'A' can't implement both 'I<dynamic, int>' and 'I<String, dynamic>'
-//  - 'I' is from 'pkg/front_end/testcases/inference/mixin_inference_unification_1.dart'.
-// class A extends Object with M0, M1 {}
-//       ^
-//
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.strong.expect
index 7d11e0c..4a017f6 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_1.dart.strong.expect
@@ -6,11 +6,6 @@
 // class A extends Object with M0, M1 {}
 //       ^
 //
-// pkg/front_end/testcases/inference/mixin_inference_unification_1.dart:13:7: Error: 'A' can't implement both 'I<dynamic, int>' and 'I<String, dynamic>'
-//  - 'I' is from 'pkg/front_end/testcases/inference/mixin_inference_unification_1.dart'.
-// class A extends Object with M0, M1 {}
-//       ^
-//
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.outline.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.outline.expect
index 73edc70..a0d028e 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.outline.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.outline.expect
@@ -7,12 +7,6 @@
 // class A extends Object with M0, M1 {}
 //       ^
 //
-// pkg/front_end/testcases/inference/mixin_inference_unification_2.dart:17:7: Error: 'A' can't implement both 'I<dynamic, List<dynamic>>' and 'I<List<dynamic>, dynamic>'
-//  - 'I' is from 'pkg/front_end/testcases/inference/mixin_inference_unification_2.dart'.
-//  - 'List' is from 'dart:core'.
-// class A extends Object with M0, M1 {}
-//       ^
-//
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.strong.expect b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.strong.expect
index af62b10..e061e87 100644
--- a/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.strong.expect
+++ b/pkg/front_end/testcases/inference/mixin_inference_unification_2.dart.strong.expect
@@ -7,12 +7,6 @@
 // class A extends Object with M0, M1 {}
 //       ^
 //
-// pkg/front_end/testcases/inference/mixin_inference_unification_2.dart:17:7: Error: 'A' can't implement both 'I<dynamic, List<dynamic>>' and 'I<List<dynamic>, dynamic>'
-//  - 'I' is from 'pkg/front_end/testcases/inference/mixin_inference_unification_2.dart'.
-//  - 'List' is from 'dart:core'.
-// class A extends Object with M0, M1 {}
-//       ^
-//
 library;
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.strong.transformed.expect
index 6d183c0c..2620e6d 100644
--- a/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart.strong.transformed.expect
@@ -2,34 +2,21 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:17:72: Error: Can't infer the type of 'b': circularity found during type inference.
+// pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:15:5: Error: Can't infer the type of 'a': circularity found during type inference.
 // Specify the type explicitly.
-// var  /*@error=CantInferTypeDueToCircularity*/ b = a/*@error=UndefinedMethod*/();
-//                                                                        ^
-//
-// pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:15:72: Error: Can't infer the type of 'a': circularity found during type inference.
-// Specify the type explicitly.
-// var  /*@error=CantInferTypeDueToCircularity*/ a = /*@returnType=num*/ () =>
-//                                                                        ^
-//
-// pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:17:77: Error: The method 'call' isn't defined for the class 'invalid-type'.
-// Try correcting the name to the name of an existing method, or defining a method named 'call'.
-// var  /*@error=CantInferTypeDueToCircularity*/ b = a/*@error=UndefinedMethod*/();
-//                                                                             ^
+// var a = /*@ returnType=num* */ () => intValue /*@target=num::+*/ + b;
+//     ^
 //
 import self as self;
 import "dart:core" as core;
 
-static field core::int intValue = 0;
-static field core::num numValue = 0;
-static field core::double doubleValue = 0.0;
-static field invalid-type a = (() → core::num => self::intValue.{core::num::+}(self::b as{TypeError} core::num)) as{TypeError} invalid-type;
-static field invalid-type b = invalid-expression "pkg/front_end/testcases/inference_new/dependency_only_if_overloaded.dart:17:77: Error: The method 'call' isn't defined for the class 'invalid-type'.
-Try correcting the name to the name of an existing method, or defining a method named 'call'.
-var  /*@error=CantInferTypeDueToCircularity*/ b = a/*@error=UndefinedMethod*/();
-                                                                            ^";
-static field () → core::num c = () → core::num => self::numValue.{core::num::+}(self::d);
-static field core::num d = self::c.call();
-static field () → core::double e = () → core::double => self::doubleValue.{core::double::+}(self::f);
-static field core::double f = self::e.call();
+static field core::int* intValue = 0;
+static field core::num* numValue = 0;
+static field core::double* doubleValue = 0.0;
+static field invalid-type a = (() → core::num* => self::intValue.{core::num::+}(self::b as{TypeError,ForDynamic} core::num*)) as{TypeError} invalid-type;
+static field dynamic b = self::a.call();
+static field () →* core::num* c = () → core::num* => self::numValue.{core::num::+}(self::d);
+static field core::num* d = self::c.call();
+static field () →* core::double* e = () → core::double* => self::doubleValue.{core::double::+}(self::f);
+static field core::double* f = self::e.call();
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.outline.expect
index 21e5e15..bbf0793 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.outline.expect
@@ -6,6 +6,12 @@
 // Try adding an explicit type.
 //   var x;
 //       ^
+// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:9:11: Context: This is one of the inherited members.
+//   int get x;
+//           ^
+// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:10:12: Context: This is one of the inherited members.
+//   void set x(double value);
+//            ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.strong.expect
index 4b59c09..3fa7212 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.strong.expect
@@ -6,6 +6,12 @@
 // Try adding an explicit type.
 //   var x;
 //       ^
+// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:9:11: Context: This is one of the inherited members.
+//   int get x;
+//           ^
+// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:10:12: Context: This is one of the inherited members.
+//   void set x(double value);
+//            ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.strong.transformed.expect
index 4b59c09..3fa7212 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart.strong.transformed.expect
@@ -6,6 +6,12 @@
 // Try adding an explicit type.
 //   var x;
 //       ^
+// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:9:11: Context: This is one of the inherited members.
+//   int get x;
+//           ^
+// pkg/front_end/testcases/inference_new/infer_field_getter_setter_mismatch.dart:10:12: Context: This is one of the inherited members.
+//   void set x(double value);
+//            ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.outline.expect
index f373c67..4f2a8df 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.outline.expect
@@ -6,11 +6,23 @@
 // Try adding an explicit type.
 //   var x;
 //       ^
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:6:9: Context: This is one of the inherited members.
+//   A get x;
+//         ^
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:7:12: Context: This is one of the inherited members.
+//   void set x(B value);
+//            ^
 //
 // pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:17:7: Error: Can't infer a type for 'y' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   var y;
 //       ^
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:9:9: Context: This is one of the inherited members.
+//   B get y;
+//         ^
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:10:12: Context: This is one of the inherited members.
+//   void set y(A value);
+//            ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.strong.expect
index b5ca7dd..66a001b 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.strong.expect
@@ -6,11 +6,23 @@
 // Try adding an explicit type.
 //   var x;
 //       ^
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:6:9: Context: This is one of the inherited members.
+//   A get x;
+//         ^
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:7:12: Context: This is one of the inherited members.
+//   void set x(B value);
+//            ^
 //
 // pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:17:7: Error: Can't infer a type for 'y' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   var y;
 //       ^
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:9:9: Context: This is one of the inherited members.
+//   B get y;
+//         ^
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:10:12: Context: This is one of the inherited members.
+//   void set y(A value);
+//            ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.strong.transformed.expect
index b5ca7dd..66a001b 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart.strong.transformed.expect
@@ -6,11 +6,23 @@
 // Try adding an explicit type.
 //   var x;
 //       ^
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:6:9: Context: This is one of the inherited members.
+//   A get x;
+//         ^
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:7:12: Context: This is one of the inherited members.
+//   void set x(B value);
+//            ^
 //
 // pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:17:7: Error: Can't infer a type for 'y' as some of the inherited members have different types.
 // Try adding an explicit type.
 //   var y;
 //       ^
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:9:9: Context: This is one of the inherited members.
+//   B get y;
+//         ^
+// pkg/front_end/testcases/inference_new/infer_field_override_accessors.dart:10:12: Context: This is one of the inherited members.
+//   void set y(A value);
+//            ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.outline.expect
index b8c0502..020678b 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.outline.expect
@@ -6,6 +6,12 @@
 // Try adding an explicit type.
 //   var x;
 //       ^
+// pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart:13:11: Context: This is one of the inherited members.
+//   int get x;
+//           ^
+// pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart:9:12: Context: This is one of the inherited members.
+//   void set x(num value);
+//            ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.strong.expect
index cbb9102..b69c292 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.strong.expect
@@ -6,6 +6,12 @@
 // Try adding an explicit type.
 //   var x;
 //       ^
+// pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart:13:11: Context: This is one of the inherited members.
+//   int get x;
+//           ^
+// pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart:9:12: Context: This is one of the inherited members.
+//   void set x(num value);
+//            ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.strong.transformed.expect
index cbb9102..b69c292 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart.strong.transformed.expect
@@ -6,6 +6,12 @@
 // Try adding an explicit type.
 //   var x;
 //       ^
+// pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart:13:11: Context: This is one of the inherited members.
+//   int get x;
+//           ^
+// pkg/front_end/testcases/inference_new/infer_field_override_getter_overrides_setter.dart:9:12: Context: This is one of the inherited members.
+//   void set x(num value);
+//            ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.outline.expect b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.outline.expect
index ac573d6..593040e 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.outline.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.outline.expect
@@ -6,6 +6,12 @@
 // Try adding an explicit type.
 //   var x;
 //       ^
+// pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart:9:11: Context: This is one of the inherited members.
+//   num get x;
+//           ^
+// pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart:13:12: Context: This is one of the inherited members.
+//   void set x(int value);
+//            ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.strong.expect b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.strong.expect
index 0d0b140..c02f37f1 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.strong.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.strong.expect
@@ -6,6 +6,12 @@
 // Try adding an explicit type.
 //   var x;
 //       ^
+// pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart:9:11: Context: This is one of the inherited members.
+//   num get x;
+//           ^
+// pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart:13:12: Context: This is one of the inherited members.
+//   void set x(int value);
+//            ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.strong.transformed.expect b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.strong.transformed.expect
index 0d0b140..c02f37f1 100644
--- a/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart.strong.transformed.expect
@@ -6,6 +6,12 @@
 // Try adding an explicit type.
 //   var x;
 //       ^
+// pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart:9:11: Context: This is one of the inherited members.
+//   num get x;
+//           ^
+// pkg/front_end/testcases/inference_new/infer_field_override_setter_overrides_getter.dart:13:12: Context: This is one of the inherited members.
+//   void set x(int value);
+//            ^
 //
 import self as self;
 import "dart:core" as core;
diff --git a/pkg/front_end/testcases/late_lowering/compound.dart b/pkg/front_end/testcases/late_lowering/compound.dart
new file mode 100644
index 0000000..1f29a5a
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/compound.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+main() {
+  late int local1;
+  local1 = 0;
+  expect(0, local1);
+  local1 += 2;
+  expect(2, local1);
+
+  late int local2 = 1;
+  expect(1, local2);
+  local2 += 2;
+  expect(3, local2);
+}
+
+error() {
+  late final int local;
+  local += 0;
+}
+
+expect(expected, actual) {
+  if (expected != actual) throw 'Expected $expected, actual $actual';
+}
diff --git a/pkg/front_end/testcases/late_lowering/compound.dart.outline.expect b/pkg/front_end/testcases/late_lowering/compound.dart.outline.expect
new file mode 100644
index 0000000..afd7d44
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/compound.dart.outline.expect
@@ -0,0 +1,9 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+static method main() → dynamic
+  ;
+static method error() → dynamic
+  ;
+static method expect(dynamic expected, dynamic actual) → dynamic
+  ;
diff --git a/pkg/front_end/testcases/late_lowering/compound.dart.strong.expect b/pkg/front_end/testcases/late_lowering/compound.dart.strong.expect
new file mode 100644
index 0000000..c4340c5
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/compound.dart.strong.expect
@@ -0,0 +1,48 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/late_lowering/compound.dart:20:3: Error: Non-nullable late variable 'local' without initializer is definitely unassigned.
+//   local += 0;
+//   ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+static method main() → dynamic {
+  core::int? local1;
+  function #local1#get() → core::int
+    return let final core::int? #t1 = local1 in #t1.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local1' has not been initialized.") : #t1{core::int};
+  function #local1#set(core::int #t2) → dynamic
+    return local1 = #t2;
+  #local1#set.call(0);
+  self::expect(0, #local1#get.call());
+  #local1#set.call(#local1#get.call().{core::num::+}(2));
+  self::expect(2, #local1#get.call());
+  core::int? local2;
+  function #local2#get() → core::int
+    return let final core::int? #t3 = local2 in #t3.==(null) ?{core::int} local2 = 1 : #t3{core::int};
+  function #local2#set(core::int #t4) → dynamic
+    return local2 = #t4;
+  self::expect(1, #local2#get.call());
+  #local2#set.call(#local2#get.call().{core::num::+}(2));
+  self::expect(3, #local2#get.call());
+}
+static method error() → dynamic {
+  final core::int? local;
+  function #local#get() → core::int
+    return let final core::int? #t5 = local in #t5.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local' has not been initialized.") : #t5{core::int};
+  function #local#set(core::int #t6) → dynamic
+    if(local.==(null))
+      return local = #t6;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local' has already been initialized.");
+  #local#set.call((let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/compound.dart:20:3: Error: Non-nullable late variable 'local' without initializer is definitely unassigned.
+  local += 0;
+  ^^^^^" in #local#get.call()).{core::num::+}(0));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!expected.{core::Object::==}(actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
diff --git a/pkg/front_end/testcases/late_lowering/compound.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/compound.dart.strong.transformed.expect
new file mode 100644
index 0000000..c4340c5
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/compound.dart.strong.transformed.expect
@@ -0,0 +1,48 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/late_lowering/compound.dart:20:3: Error: Non-nullable late variable 'local' without initializer is definitely unassigned.
+//   local += 0;
+//   ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+static method main() → dynamic {
+  core::int? local1;
+  function #local1#get() → core::int
+    return let final core::int? #t1 = local1 in #t1.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local1' has not been initialized.") : #t1{core::int};
+  function #local1#set(core::int #t2) → dynamic
+    return local1 = #t2;
+  #local1#set.call(0);
+  self::expect(0, #local1#get.call());
+  #local1#set.call(#local1#get.call().{core::num::+}(2));
+  self::expect(2, #local1#get.call());
+  core::int? local2;
+  function #local2#get() → core::int
+    return let final core::int? #t3 = local2 in #t3.==(null) ?{core::int} local2 = 1 : #t3{core::int};
+  function #local2#set(core::int #t4) → dynamic
+    return local2 = #t4;
+  self::expect(1, #local2#get.call());
+  #local2#set.call(#local2#get.call().{core::num::+}(2));
+  self::expect(3, #local2#get.call());
+}
+static method error() → dynamic {
+  final core::int? local;
+  function #local#get() → core::int
+    return let final core::int? #t5 = local in #t5.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local' has not been initialized.") : #t5{core::int};
+  function #local#set(core::int #t6) → dynamic
+    if(local.==(null))
+      return local = #t6;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local' has already been initialized.");
+  #local#set.call((let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/compound.dart:20:3: Error: Non-nullable late variable 'local' without initializer is definitely unassigned.
+  local += 0;
+  ^^^^^" in #local#get.call()).{core::num::+}(0));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!expected.{core::Object::==}(actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
diff --git a/pkg/front_end/testcases/late_lowering/compound.dart.weak.expect b/pkg/front_end/testcases/late_lowering/compound.dart.weak.expect
new file mode 100644
index 0000000..c4340c5
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/compound.dart.weak.expect
@@ -0,0 +1,48 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/late_lowering/compound.dart:20:3: Error: Non-nullable late variable 'local' without initializer is definitely unassigned.
+//   local += 0;
+//   ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+static method main() → dynamic {
+  core::int? local1;
+  function #local1#get() → core::int
+    return let final core::int? #t1 = local1 in #t1.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local1' has not been initialized.") : #t1{core::int};
+  function #local1#set(core::int #t2) → dynamic
+    return local1 = #t2;
+  #local1#set.call(0);
+  self::expect(0, #local1#get.call());
+  #local1#set.call(#local1#get.call().{core::num::+}(2));
+  self::expect(2, #local1#get.call());
+  core::int? local2;
+  function #local2#get() → core::int
+    return let final core::int? #t3 = local2 in #t3.==(null) ?{core::int} local2 = 1 : #t3{core::int};
+  function #local2#set(core::int #t4) → dynamic
+    return local2 = #t4;
+  self::expect(1, #local2#get.call());
+  #local2#set.call(#local2#get.call().{core::num::+}(2));
+  self::expect(3, #local2#get.call());
+}
+static method error() → dynamic {
+  final core::int? local;
+  function #local#get() → core::int
+    return let final core::int? #t5 = local in #t5.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local' has not been initialized.") : #t5{core::int};
+  function #local#set(core::int #t6) → dynamic
+    if(local.==(null))
+      return local = #t6;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local' has already been initialized.");
+  #local#set.call((let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/compound.dart:20:3: Error: Non-nullable late variable 'local' without initializer is definitely unassigned.
+  local += 0;
+  ^^^^^" in #local#get.call()).{core::num::+}(0));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!expected.{core::Object::==}(actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
diff --git a/pkg/front_end/testcases/late_lowering/compound.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/compound.dart.weak.transformed.expect
new file mode 100644
index 0000000..c4340c5
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/compound.dart.weak.transformed.expect
@@ -0,0 +1,48 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/late_lowering/compound.dart:20:3: Error: Non-nullable late variable 'local' without initializer is definitely unassigned.
+//   local += 0;
+//   ^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+static method main() → dynamic {
+  core::int? local1;
+  function #local1#get() → core::int
+    return let final core::int? #t1 = local1 in #t1.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local1' has not been initialized.") : #t1{core::int};
+  function #local1#set(core::int #t2) → dynamic
+    return local1 = #t2;
+  #local1#set.call(0);
+  self::expect(0, #local1#get.call());
+  #local1#set.call(#local1#get.call().{core::num::+}(2));
+  self::expect(2, #local1#get.call());
+  core::int? local2;
+  function #local2#get() → core::int
+    return let final core::int? #t3 = local2 in #t3.==(null) ?{core::int} local2 = 1 : #t3{core::int};
+  function #local2#set(core::int #t4) → dynamic
+    return local2 = #t4;
+  self::expect(1, #local2#get.call());
+  #local2#set.call(#local2#get.call().{core::num::+}(2));
+  self::expect(3, #local2#get.call());
+}
+static method error() → dynamic {
+  final core::int? local;
+  function #local#get() → core::int
+    return let final core::int? #t5 = local in #t5.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local' has not been initialized.") : #t5{core::int};
+  function #local#set(core::int #t6) → dynamic
+    if(local.==(null))
+      return local = #t6;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local' has already been initialized.");
+  #local#set.call((let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/compound.dart:20:3: Error: Non-nullable late variable 'local' without initializer is definitely unassigned.
+  local += 0;
+  ^^^^^" in #local#get.call()).{core::num::+}(0));
+}
+static method expect(dynamic expected, dynamic actual) → dynamic {
+  if(!expected.{core::Object::==}(actual))
+    throw "Expected ${expected}, actual ${actual}";
+}
diff --git a/pkg/front_end/testcases/late_lowering/definitely_assigned.dart b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart
new file mode 100644
index 0000000..12241c7
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart
@@ -0,0 +1,91 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+
+methodDirect<T>(T value) {
+  late final T local2;
+  late final int local4;
+  late final FutureOr<int> local6;
+
+  local2 = value; // ok
+  local4 = 0; // ok
+  local6 = 0; // ok
+
+  local2 = value; // error
+  local4 = 0; // error
+  local6 = 0; // error
+}
+
+var fieldDirect = <T>(T value) {
+  late final T local2;
+  late final int local4;
+  late final FutureOr<int> local6;
+
+  local2 = value; // ok
+  local4 = 0; // ok
+  local6 = 0; // ok
+
+  local2 = value; // error
+  local4 = 0; // error
+  local6 = 0; // error
+};
+
+methodConditional<T>(bool b, T value) {
+  late final T local2;
+  late final int local4;
+  late final FutureOr<int> local6;
+
+  if (b) {
+    local2 = value; // ok
+    local4 = 0; // ok
+    local6 = 0; // ok
+  }
+
+  local2 = value; // ok
+  local4 = 0; // ok
+  local6 = 0; // ok
+
+  local2 = value; // error
+  local4 = 0; // error
+  local6 = 0; // error
+}
+
+var fieldConditional = <T>(bool b, T value) {
+  late final T local2;
+  late final int local4;
+  late final FutureOr<int> local6;
+
+  if (b) {
+    local2 = value; // ok
+    local4 = 0; // ok
+    local6 = 0; // ok
+  }
+
+  local2 = value; // ok
+  local4 = 0; // ok
+  local6 = 0; // ok
+
+  local2 = value; // error
+  local4 = 0; // error
+  local6 = 0; // error
+};
+
+methodCompound() {
+  late final int local4;
+
+  local4 = 0; // ok
+
+  local4 += 0; // error
+}
+
+var fieldCompound = () {
+  late final int local4;
+
+  local4 = 0; // ok
+
+  local4 += 0; // error
+};
+
+main() {}
diff --git a/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.outline.expect b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.outline.expect
new file mode 100644
index 0000000..1a5e8e7
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.outline.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+static field <T extends core::Object? = dynamic>(T%) → core::Null? fieldDirect;
+static field <T extends core::Object? = dynamic>(core::bool, T%) → core::Null? fieldConditional;
+static field () → core::Null? fieldCompound;
+static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic
+  ;
+static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic
+  ;
+static method methodCompound() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.strong.expect b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.strong.expect
new file mode 100644
index 0000000..0f62abd
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.strong.expect
@@ -0,0 +1,270 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static field <T extends core::Object? = dynamic>(T%) → core::Null? fieldDirect = <T extends core::Object? = dynamic>(T% value) → core::Null? {
+  final T? local2;
+  core::bool #local2#isSet = false;
+  function #local2#get() → T%
+    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
+  function #local2#set(T% #t1) → dynamic
+    if(#local2#isSet)
+      throw new _in::LateInitializationErrorImpl::•("Local 'local2' has already been initialized.");
+    else {
+      #local2#isSet = true;
+      return local2 = #t1;
+    }
+  final core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t2 = local4 in #t2.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t2{core::int};
+  function #local4#set(core::int #t3) → dynamic
+    if(local4.==(null))
+      return local4 = #t3;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local4' has already been initialized.");
+  final asy::FutureOr<core::int>? local6;
+  function #local6#get() → asy::FutureOr<core::int>
+    return let final asy::FutureOr<core::int>? #t4 = local6 in #t4.==(null) ?{asy::FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t4{asy::FutureOr<core::int>};
+  function #local6#set(asy::FutureOr<core::int> #t5) → dynamic
+    if(local6.==(null))
+      return local6 = #t5;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local6' has already been initialized.");
+  #local2#set.call(value);
+  #local4#set.call(0);
+  #local6#set.call(0);
+  let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in #local2#set.call(value);
+  let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in #local4#set.call(0);
+  let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in #local6#set.call(0);
+};
+static field <T extends core::Object? = dynamic>(core::bool, T%) → core::Null? fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → core::Null? {
+  final T? local2;
+  core::bool #local2#isSet = false;
+  function #local2#get() → T%
+    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
+  function #local2#set(T% #t9) → dynamic
+    if(#local2#isSet)
+      throw new _in::LateInitializationErrorImpl::•("Local 'local2' has already been initialized.");
+    else {
+      #local2#isSet = true;
+      return local2 = #t9;
+    }
+  final core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t10 = local4 in #t10.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t10{core::int};
+  function #local4#set(core::int #t11) → dynamic
+    if(local4.==(null))
+      return local4 = #t11;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local4' has already been initialized.");
+  final asy::FutureOr<core::int>? local6;
+  function #local6#get() → asy::FutureOr<core::int>
+    return let final asy::FutureOr<core::int>? #t12 = local6 in #t12.==(null) ?{asy::FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t12{asy::FutureOr<core::int>};
+  function #local6#set(asy::FutureOr<core::int> #t13) → dynamic
+    if(local6.==(null))
+      return local6 = #t13;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local6' has already been initialized.");
+  if(b) {
+    #local2#set.call(value);
+    #local4#set.call(0);
+    #local6#set.call(0);
+  }
+  #local2#set.call(value);
+  #local4#set.call(0);
+  #local6#set.call(0);
+  let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in #local2#set.call(value);
+  let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in #local4#set.call(0);
+  let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in #local6#set.call(0);
+};
+static field () → core::Null? fieldCompound = () → core::Null? {
+  final core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t17 = local4 in #t17.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t17{core::int};
+  function #local4#set(core::int #t18) → dynamic
+    if(local4.==(null))
+      return local4 = #t18;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local4' has already been initialized.");
+  #local4#set.call(0);
+  let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 += 0; // error
+  ^^^^^^" in #local4#set.call(#local4#get.call().{core::num::+}(0));
+};
+static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
+  final self::methodDirect::T? local2;
+  core::bool #local2#isSet = false;
+  function #local2#get() → self::methodDirect::T%
+    return #local2#isSet ?{self::methodDirect::T%} local2{self::methodDirect::T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
+  function #local2#set(self::methodDirect::T% #t20) → dynamic
+    if(#local2#isSet)
+      throw new _in::LateInitializationErrorImpl::•("Local 'local2' has already been initialized.");
+    else {
+      #local2#isSet = true;
+      return local2 = #t20;
+    }
+  final core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t21 = local4 in #t21.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t21{core::int};
+  function #local4#set(core::int #t22) → dynamic
+    if(local4.==(null))
+      return local4 = #t22;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local4' has already been initialized.");
+  final asy::FutureOr<core::int>? local6;
+  function #local6#get() → asy::FutureOr<core::int>
+    return let final asy::FutureOr<core::int>? #t23 = local6 in #t23.==(null) ?{asy::FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t23{asy::FutureOr<core::int>};
+  function #local6#set(asy::FutureOr<core::int> #t24) → dynamic
+    if(local6.==(null))
+      return local6 = #t24;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local6' has already been initialized.");
+  #local2#set.call(value);
+  #local4#set.call(0);
+  #local6#set.call(0);
+  let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in #local2#set.call(value);
+  let final<BottomType> #t26 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in #local4#set.call(0);
+  let final<BottomType> #t27 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in #local6#set.call(0);
+}
+static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
+  final self::methodConditional::T? local2;
+  core::bool #local2#isSet = false;
+  function #local2#get() → self::methodConditional::T%
+    return #local2#isSet ?{self::methodConditional::T%} local2{self::methodConditional::T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
+  function #local2#set(self::methodConditional::T% #t28) → dynamic
+    if(#local2#isSet)
+      throw new _in::LateInitializationErrorImpl::•("Local 'local2' has already been initialized.");
+    else {
+      #local2#isSet = true;
+      return local2 = #t28;
+    }
+  final core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t29 = local4 in #t29.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t29{core::int};
+  function #local4#set(core::int #t30) → dynamic
+    if(local4.==(null))
+      return local4 = #t30;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local4' has already been initialized.");
+  final asy::FutureOr<core::int>? local6;
+  function #local6#get() → asy::FutureOr<core::int>
+    return let final asy::FutureOr<core::int>? #t31 = local6 in #t31.==(null) ?{asy::FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t31{asy::FutureOr<core::int>};
+  function #local6#set(asy::FutureOr<core::int> #t32) → dynamic
+    if(local6.==(null))
+      return local6 = #t32;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local6' has already been initialized.");
+  if(b) {
+    #local2#set.call(value);
+    #local4#set.call(0);
+    #local6#set.call(0);
+  }
+  #local2#set.call(value);
+  #local4#set.call(0);
+  #local6#set.call(0);
+  let final<BottomType> #t33 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in #local2#set.call(value);
+  let final<BottomType> #t34 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in #local4#set.call(0);
+  let final<BottomType> #t35 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in #local6#set.call(0);
+}
+static method methodCompound() → dynamic {
+  final core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t36 = local4 in #t36.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t36{core::int};
+  function #local4#set(core::int #t37) → dynamic
+    if(local4.==(null))
+      return local4 = #t37;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local4' has already been initialized.");
+  #local4#set.call(0);
+  let final<BottomType> #t38 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 += 0; // error
+  ^^^^^^" in #local4#set.call(#local4#get.call().{core::num::+}(0));
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.strong.transformed.expect
new file mode 100644
index 0000000..0f62abd
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.strong.transformed.expect
@@ -0,0 +1,270 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static field <T extends core::Object? = dynamic>(T%) → core::Null? fieldDirect = <T extends core::Object? = dynamic>(T% value) → core::Null? {
+  final T? local2;
+  core::bool #local2#isSet = false;
+  function #local2#get() → T%
+    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
+  function #local2#set(T% #t1) → dynamic
+    if(#local2#isSet)
+      throw new _in::LateInitializationErrorImpl::•("Local 'local2' has already been initialized.");
+    else {
+      #local2#isSet = true;
+      return local2 = #t1;
+    }
+  final core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t2 = local4 in #t2.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t2{core::int};
+  function #local4#set(core::int #t3) → dynamic
+    if(local4.==(null))
+      return local4 = #t3;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local4' has already been initialized.");
+  final asy::FutureOr<core::int>? local6;
+  function #local6#get() → asy::FutureOr<core::int>
+    return let final asy::FutureOr<core::int>? #t4 = local6 in #t4.==(null) ?{asy::FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t4{asy::FutureOr<core::int>};
+  function #local6#set(asy::FutureOr<core::int> #t5) → dynamic
+    if(local6.==(null))
+      return local6 = #t5;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local6' has already been initialized.");
+  #local2#set.call(value);
+  #local4#set.call(0);
+  #local6#set.call(0);
+  let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in #local2#set.call(value);
+  let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in #local4#set.call(0);
+  let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in #local6#set.call(0);
+};
+static field <T extends core::Object? = dynamic>(core::bool, T%) → core::Null? fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → core::Null? {
+  final T? local2;
+  core::bool #local2#isSet = false;
+  function #local2#get() → T%
+    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
+  function #local2#set(T% #t9) → dynamic
+    if(#local2#isSet)
+      throw new _in::LateInitializationErrorImpl::•("Local 'local2' has already been initialized.");
+    else {
+      #local2#isSet = true;
+      return local2 = #t9;
+    }
+  final core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t10 = local4 in #t10.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t10{core::int};
+  function #local4#set(core::int #t11) → dynamic
+    if(local4.==(null))
+      return local4 = #t11;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local4' has already been initialized.");
+  final asy::FutureOr<core::int>? local6;
+  function #local6#get() → asy::FutureOr<core::int>
+    return let final asy::FutureOr<core::int>? #t12 = local6 in #t12.==(null) ?{asy::FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t12{asy::FutureOr<core::int>};
+  function #local6#set(asy::FutureOr<core::int> #t13) → dynamic
+    if(local6.==(null))
+      return local6 = #t13;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local6' has already been initialized.");
+  if(b) {
+    #local2#set.call(value);
+    #local4#set.call(0);
+    #local6#set.call(0);
+  }
+  #local2#set.call(value);
+  #local4#set.call(0);
+  #local6#set.call(0);
+  let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in #local2#set.call(value);
+  let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in #local4#set.call(0);
+  let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in #local6#set.call(0);
+};
+static field () → core::Null? fieldCompound = () → core::Null? {
+  final core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t17 = local4 in #t17.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t17{core::int};
+  function #local4#set(core::int #t18) → dynamic
+    if(local4.==(null))
+      return local4 = #t18;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local4' has already been initialized.");
+  #local4#set.call(0);
+  let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 += 0; // error
+  ^^^^^^" in #local4#set.call(#local4#get.call().{core::num::+}(0));
+};
+static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
+  final self::methodDirect::T? local2;
+  core::bool #local2#isSet = false;
+  function #local2#get() → self::methodDirect::T%
+    return #local2#isSet ?{self::methodDirect::T%} local2{self::methodDirect::T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
+  function #local2#set(self::methodDirect::T% #t20) → dynamic
+    if(#local2#isSet)
+      throw new _in::LateInitializationErrorImpl::•("Local 'local2' has already been initialized.");
+    else {
+      #local2#isSet = true;
+      return local2 = #t20;
+    }
+  final core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t21 = local4 in #t21.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t21{core::int};
+  function #local4#set(core::int #t22) → dynamic
+    if(local4.==(null))
+      return local4 = #t22;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local4' has already been initialized.");
+  final asy::FutureOr<core::int>? local6;
+  function #local6#get() → asy::FutureOr<core::int>
+    return let final asy::FutureOr<core::int>? #t23 = local6 in #t23.==(null) ?{asy::FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t23{asy::FutureOr<core::int>};
+  function #local6#set(asy::FutureOr<core::int> #t24) → dynamic
+    if(local6.==(null))
+      return local6 = #t24;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local6' has already been initialized.");
+  #local2#set.call(value);
+  #local4#set.call(0);
+  #local6#set.call(0);
+  let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in #local2#set.call(value);
+  let final<BottomType> #t26 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in #local4#set.call(0);
+  let final<BottomType> #t27 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in #local6#set.call(0);
+}
+static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
+  final self::methodConditional::T? local2;
+  core::bool #local2#isSet = false;
+  function #local2#get() → self::methodConditional::T%
+    return #local2#isSet ?{self::methodConditional::T%} local2{self::methodConditional::T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
+  function #local2#set(self::methodConditional::T% #t28) → dynamic
+    if(#local2#isSet)
+      throw new _in::LateInitializationErrorImpl::•("Local 'local2' has already been initialized.");
+    else {
+      #local2#isSet = true;
+      return local2 = #t28;
+    }
+  final core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t29 = local4 in #t29.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t29{core::int};
+  function #local4#set(core::int #t30) → dynamic
+    if(local4.==(null))
+      return local4 = #t30;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local4' has already been initialized.");
+  final asy::FutureOr<core::int>? local6;
+  function #local6#get() → asy::FutureOr<core::int>
+    return let final asy::FutureOr<core::int>? #t31 = local6 in #t31.==(null) ?{asy::FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t31{asy::FutureOr<core::int>};
+  function #local6#set(asy::FutureOr<core::int> #t32) → dynamic
+    if(local6.==(null))
+      return local6 = #t32;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local6' has already been initialized.");
+  if(b) {
+    #local2#set.call(value);
+    #local4#set.call(0);
+    #local6#set.call(0);
+  }
+  #local2#set.call(value);
+  #local4#set.call(0);
+  #local6#set.call(0);
+  let final<BottomType> #t33 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in #local2#set.call(value);
+  let final<BottomType> #t34 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in #local4#set.call(0);
+  let final<BottomType> #t35 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in #local6#set.call(0);
+}
+static method methodCompound() → dynamic {
+  final core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t36 = local4 in #t36.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t36{core::int};
+  function #local4#set(core::int #t37) → dynamic
+    if(local4.==(null))
+      return local4 = #t37;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local4' has already been initialized.");
+  #local4#set.call(0);
+  let final<BottomType> #t38 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 += 0; // error
+  ^^^^^^" in #local4#set.call(#local4#get.call().{core::num::+}(0));
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.weak.expect b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.weak.expect
new file mode 100644
index 0000000..0f62abd
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.weak.expect
@@ -0,0 +1,270 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static field <T extends core::Object? = dynamic>(T%) → core::Null? fieldDirect = <T extends core::Object? = dynamic>(T% value) → core::Null? {
+  final T? local2;
+  core::bool #local2#isSet = false;
+  function #local2#get() → T%
+    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
+  function #local2#set(T% #t1) → dynamic
+    if(#local2#isSet)
+      throw new _in::LateInitializationErrorImpl::•("Local 'local2' has already been initialized.");
+    else {
+      #local2#isSet = true;
+      return local2 = #t1;
+    }
+  final core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t2 = local4 in #t2.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t2{core::int};
+  function #local4#set(core::int #t3) → dynamic
+    if(local4.==(null))
+      return local4 = #t3;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local4' has already been initialized.");
+  final asy::FutureOr<core::int>? local6;
+  function #local6#get() → asy::FutureOr<core::int>
+    return let final asy::FutureOr<core::int>? #t4 = local6 in #t4.==(null) ?{asy::FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t4{asy::FutureOr<core::int>};
+  function #local6#set(asy::FutureOr<core::int> #t5) → dynamic
+    if(local6.==(null))
+      return local6 = #t5;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local6' has already been initialized.");
+  #local2#set.call(value);
+  #local4#set.call(0);
+  #local6#set.call(0);
+  let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in #local2#set.call(value);
+  let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in #local4#set.call(0);
+  let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in #local6#set.call(0);
+};
+static field <T extends core::Object? = dynamic>(core::bool, T%) → core::Null? fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → core::Null? {
+  final T? local2;
+  core::bool #local2#isSet = false;
+  function #local2#get() → T%
+    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
+  function #local2#set(T% #t9) → dynamic
+    if(#local2#isSet)
+      throw new _in::LateInitializationErrorImpl::•("Local 'local2' has already been initialized.");
+    else {
+      #local2#isSet = true;
+      return local2 = #t9;
+    }
+  final core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t10 = local4 in #t10.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t10{core::int};
+  function #local4#set(core::int #t11) → dynamic
+    if(local4.==(null))
+      return local4 = #t11;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local4' has already been initialized.");
+  final asy::FutureOr<core::int>? local6;
+  function #local6#get() → asy::FutureOr<core::int>
+    return let final asy::FutureOr<core::int>? #t12 = local6 in #t12.==(null) ?{asy::FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t12{asy::FutureOr<core::int>};
+  function #local6#set(asy::FutureOr<core::int> #t13) → dynamic
+    if(local6.==(null))
+      return local6 = #t13;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local6' has already been initialized.");
+  if(b) {
+    #local2#set.call(value);
+    #local4#set.call(0);
+    #local6#set.call(0);
+  }
+  #local2#set.call(value);
+  #local4#set.call(0);
+  #local6#set.call(0);
+  let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in #local2#set.call(value);
+  let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in #local4#set.call(0);
+  let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in #local6#set.call(0);
+};
+static field () → core::Null? fieldCompound = () → core::Null? {
+  final core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t17 = local4 in #t17.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t17{core::int};
+  function #local4#set(core::int #t18) → dynamic
+    if(local4.==(null))
+      return local4 = #t18;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local4' has already been initialized.");
+  #local4#set.call(0);
+  let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 += 0; // error
+  ^^^^^^" in #local4#set.call(#local4#get.call().{core::num::+}(0));
+};
+static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
+  final self::methodDirect::T? local2;
+  core::bool #local2#isSet = false;
+  function #local2#get() → self::methodDirect::T%
+    return #local2#isSet ?{self::methodDirect::T%} local2{self::methodDirect::T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
+  function #local2#set(self::methodDirect::T% #t20) → dynamic
+    if(#local2#isSet)
+      throw new _in::LateInitializationErrorImpl::•("Local 'local2' has already been initialized.");
+    else {
+      #local2#isSet = true;
+      return local2 = #t20;
+    }
+  final core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t21 = local4 in #t21.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t21{core::int};
+  function #local4#set(core::int #t22) → dynamic
+    if(local4.==(null))
+      return local4 = #t22;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local4' has already been initialized.");
+  final asy::FutureOr<core::int>? local6;
+  function #local6#get() → asy::FutureOr<core::int>
+    return let final asy::FutureOr<core::int>? #t23 = local6 in #t23.==(null) ?{asy::FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t23{asy::FutureOr<core::int>};
+  function #local6#set(asy::FutureOr<core::int> #t24) → dynamic
+    if(local6.==(null))
+      return local6 = #t24;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local6' has already been initialized.");
+  #local2#set.call(value);
+  #local4#set.call(0);
+  #local6#set.call(0);
+  let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in #local2#set.call(value);
+  let final<BottomType> #t26 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in #local4#set.call(0);
+  let final<BottomType> #t27 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in #local6#set.call(0);
+}
+static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
+  final self::methodConditional::T? local2;
+  core::bool #local2#isSet = false;
+  function #local2#get() → self::methodConditional::T%
+    return #local2#isSet ?{self::methodConditional::T%} local2{self::methodConditional::T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
+  function #local2#set(self::methodConditional::T% #t28) → dynamic
+    if(#local2#isSet)
+      throw new _in::LateInitializationErrorImpl::•("Local 'local2' has already been initialized.");
+    else {
+      #local2#isSet = true;
+      return local2 = #t28;
+    }
+  final core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t29 = local4 in #t29.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t29{core::int};
+  function #local4#set(core::int #t30) → dynamic
+    if(local4.==(null))
+      return local4 = #t30;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local4' has already been initialized.");
+  final asy::FutureOr<core::int>? local6;
+  function #local6#get() → asy::FutureOr<core::int>
+    return let final asy::FutureOr<core::int>? #t31 = local6 in #t31.==(null) ?{asy::FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t31{asy::FutureOr<core::int>};
+  function #local6#set(asy::FutureOr<core::int> #t32) → dynamic
+    if(local6.==(null))
+      return local6 = #t32;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local6' has already been initialized.");
+  if(b) {
+    #local2#set.call(value);
+    #local4#set.call(0);
+    #local6#set.call(0);
+  }
+  #local2#set.call(value);
+  #local4#set.call(0);
+  #local6#set.call(0);
+  let final<BottomType> #t33 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in #local2#set.call(value);
+  let final<BottomType> #t34 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in #local4#set.call(0);
+  let final<BottomType> #t35 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in #local6#set.call(0);
+}
+static method methodCompound() → dynamic {
+  final core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t36 = local4 in #t36.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t36{core::int};
+  function #local4#set(core::int #t37) → dynamic
+    if(local4.==(null))
+      return local4 = #t37;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local4' has already been initialized.");
+  #local4#set.call(0);
+  let final<BottomType> #t38 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 += 0; // error
+  ^^^^^^" in #local4#set.call(#local4#get.call().{core::num::+}(0));
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.weak.transformed.expect
new file mode 100644
index 0000000..0f62abd
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/definitely_assigned.dart.weak.transformed.expect
@@ -0,0 +1,270 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static field <T extends core::Object? = dynamic>(T%) → core::Null? fieldDirect = <T extends core::Object? = dynamic>(T% value) → core::Null? {
+  final T? local2;
+  core::bool #local2#isSet = false;
+  function #local2#get() → T%
+    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
+  function #local2#set(T% #t1) → dynamic
+    if(#local2#isSet)
+      throw new _in::LateInitializationErrorImpl::•("Local 'local2' has already been initialized.");
+    else {
+      #local2#isSet = true;
+      return local2 = #t1;
+    }
+  final core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t2 = local4 in #t2.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t2{core::int};
+  function #local4#set(core::int #t3) → dynamic
+    if(local4.==(null))
+      return local4 = #t3;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local4' has already been initialized.");
+  final asy::FutureOr<core::int>? local6;
+  function #local6#get() → asy::FutureOr<core::int>
+    return let final asy::FutureOr<core::int>? #t4 = local6 in #t4.==(null) ?{asy::FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t4{asy::FutureOr<core::int>};
+  function #local6#set(asy::FutureOr<core::int> #t5) → dynamic
+    if(local6.==(null))
+      return local6 = #t5;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local6' has already been initialized.");
+  #local2#set.call(value);
+  #local4#set.call(0);
+  #local6#set.call(0);
+  let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:30:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in #local2#set.call(value);
+  let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:31:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in #local4#set.call(0);
+  let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:32:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in #local6#set.call(0);
+};
+static field <T extends core::Object? = dynamic>(core::bool, T%) → core::Null? fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → core::Null? {
+  final T? local2;
+  core::bool #local2#isSet = false;
+  function #local2#get() → T%
+    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
+  function #local2#set(T% #t9) → dynamic
+    if(#local2#isSet)
+      throw new _in::LateInitializationErrorImpl::•("Local 'local2' has already been initialized.");
+    else {
+      #local2#isSet = true;
+      return local2 = #t9;
+    }
+  final core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t10 = local4 in #t10.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t10{core::int};
+  function #local4#set(core::int #t11) → dynamic
+    if(local4.==(null))
+      return local4 = #t11;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local4' has already been initialized.");
+  final asy::FutureOr<core::int>? local6;
+  function #local6#get() → asy::FutureOr<core::int>
+    return let final asy::FutureOr<core::int>? #t12 = local6 in #t12.==(null) ?{asy::FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t12{asy::FutureOr<core::int>};
+  function #local6#set(asy::FutureOr<core::int> #t13) → dynamic
+    if(local6.==(null))
+      return local6 = #t13;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local6' has already been initialized.");
+  if(b) {
+    #local2#set.call(value);
+    #local4#set.call(0);
+    #local6#set.call(0);
+  }
+  #local2#set.call(value);
+  #local4#set.call(0);
+  #local6#set.call(0);
+  let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:70:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in #local2#set.call(value);
+  let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:71:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in #local4#set.call(0);
+  let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:72:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in #local6#set.call(0);
+};
+static field () → core::Null? fieldCompound = () → core::Null? {
+  final core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t17 = local4 in #t17.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t17{core::int};
+  function #local4#set(core::int #t18) → dynamic
+    if(local4.==(null))
+      return local4 = #t18;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local4' has already been initialized.");
+  #local4#set.call(0);
+  let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:88:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 += 0; // error
+  ^^^^^^" in #local4#set.call(#local4#get.call().{core::num::+}(0));
+};
+static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
+  final self::methodDirect::T? local2;
+  core::bool #local2#isSet = false;
+  function #local2#get() → self::methodDirect::T%
+    return #local2#isSet ?{self::methodDirect::T%} local2{self::methodDirect::T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
+  function #local2#set(self::methodDirect::T% #t20) → dynamic
+    if(#local2#isSet)
+      throw new _in::LateInitializationErrorImpl::•("Local 'local2' has already been initialized.");
+    else {
+      #local2#isSet = true;
+      return local2 = #t20;
+    }
+  final core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t21 = local4 in #t21.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t21{core::int};
+  function #local4#set(core::int #t22) → dynamic
+    if(local4.==(null))
+      return local4 = #t22;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local4' has already been initialized.");
+  final asy::FutureOr<core::int>? local6;
+  function #local6#get() → asy::FutureOr<core::int>
+    return let final asy::FutureOr<core::int>? #t23 = local6 in #t23.==(null) ?{asy::FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t23{asy::FutureOr<core::int>};
+  function #local6#set(asy::FutureOr<core::int> #t24) → dynamic
+    if(local6.==(null))
+      return local6 = #t24;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local6' has already been initialized.");
+  #local2#set.call(value);
+  #local4#set.call(0);
+  #local6#set.call(0);
+  let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:16:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in #local2#set.call(value);
+  let final<BottomType> #t26 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:17:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in #local4#set.call(0);
+  let final<BottomType> #t27 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:18:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in #local6#set.call(0);
+}
+static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
+  final self::methodConditional::T? local2;
+  core::bool #local2#isSet = false;
+  function #local2#get() → self::methodConditional::T%
+    return #local2#isSet ?{self::methodConditional::T%} local2{self::methodConditional::T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
+  function #local2#set(self::methodConditional::T% #t28) → dynamic
+    if(#local2#isSet)
+      throw new _in::LateInitializationErrorImpl::•("Local 'local2' has already been initialized.");
+    else {
+      #local2#isSet = true;
+      return local2 = #t28;
+    }
+  final core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t29 = local4 in #t29.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t29{core::int};
+  function #local4#set(core::int #t30) → dynamic
+    if(local4.==(null))
+      return local4 = #t30;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local4' has already been initialized.");
+  final asy::FutureOr<core::int>? local6;
+  function #local6#get() → asy::FutureOr<core::int>
+    return let final asy::FutureOr<core::int>? #t31 = local6 in #t31.==(null) ?{asy::FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t31{asy::FutureOr<core::int>};
+  function #local6#set(asy::FutureOr<core::int> #t32) → dynamic
+    if(local6.==(null))
+      return local6 = #t32;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local6' has already been initialized.");
+  if(b) {
+    #local2#set.call(value);
+    #local4#set.call(0);
+    #local6#set.call(0);
+  }
+  #local2#set.call(value);
+  #local4#set.call(0);
+  #local6#set.call(0);
+  let final<BottomType> #t33 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:50:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in #local2#set.call(value);
+  let final<BottomType> #t34 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:51:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in #local4#set.call(0);
+  let final<BottomType> #t35 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:52:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in #local6#set.call(0);
+}
+static method methodCompound() → dynamic {
+  final core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t36 = local4 in #t36.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t36{core::int};
+  function #local4#set(core::int #t37) → dynamic
+    if(local4.==(null))
+      return local4 = #t37;
+    else
+      throw new _in::LateInitializationErrorImpl::•("Local 'local4' has already been initialized.");
+  #local4#set.call(0);
+  let final<BottomType> #t38 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_assigned.dart:80:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 += 0; // error
+  ^^^^^^" in #local4#set.call(#local4#get.call().{core::num::+}(0));
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart
new file mode 100644
index 0000000..5843b75
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart
@@ -0,0 +1,115 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+
+methodDirect<T>(T value) {
+  T local1;
+  late T local2;
+  int local3;
+  late int local4;
+  FutureOr<int> local5;
+  late FutureOr<int> local6;
+  late T local7 = value;
+
+  local1; // error
+  local2; // error
+  local3; // error
+  local4; // error
+  local5; // error
+  local6; // error
+  local7; // ok
+}
+
+var fieldDirect = <T>(T value) {
+  T local1;
+  late T local2;
+  int local3;
+  late int local4;
+  FutureOr<int> local5;
+  late FutureOr<int> local6;
+  late T local7 = value;
+
+  local1; // error
+  local2; // error
+  local3; // error
+  local4; // error
+  local5; // error
+  local6; // error
+  local7; // ok
+};
+
+methodConditional<T>(bool b, T value) {
+  T local1;
+  late T local2;
+  int local3;
+  late int local4;
+  FutureOr<int> local5;
+  late FutureOr<int> local6;
+  late T local7 = value;
+
+  if (b) {
+    local1 = value;
+    local2 = value;
+    local3 = 0;
+    local4 = 0;
+    local5 = 0;
+    local6 = 0;
+    local7 = value;
+  }
+
+  local1; // error
+  local2; // ok
+  local3; // error
+  local4; // ok
+  local5; // error
+  local6; // ok
+  local7; // ok
+}
+
+var fieldConditional = <T>(bool b, T value) {
+  T local1;
+  late T local2;
+  int local3;
+  late int local4;
+  FutureOr<int> local5;
+  late FutureOr<int> local6;
+  late T local7 = value;
+
+  if (b) {
+    local1 = value;
+    local2 = value;
+    local3 = 0;
+    local4 = 0;
+    local5 = 0;
+    local6 = 0;
+    local7; // ok
+  }
+
+  local1; // error
+  local2; // ok
+  local3; // error
+  local4; // ok
+  local5; // error
+  local6; // ok
+  local7; // ok
+};
+
+methodCompound() {
+  int local3;
+  late int local4;
+
+  local3 += 0; // error
+  local4 += 0; // error
+}
+
+var fieldCompound = () {
+  int local3;
+  late int local4;
+
+  local3 += 0; // error
+  local4 += 0; // error
+};
+
+main() {}
diff --git a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.outline.expect b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.outline.expect
new file mode 100644
index 0000000..1a5e8e7
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.outline.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+static field <T extends core::Object? = dynamic>(T%) → core::Null? fieldDirect;
+static field <T extends core::Object? = dynamic>(core::bool, T%) → core::Null? fieldConditional;
+static field () → core::Null? fieldCompound;
+static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic
+  ;
+static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic
+  ;
+static method methodCompound() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.expect b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.expect
new file mode 100644
index 0000000..759a7c9
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.expect
@@ -0,0 +1,354 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:17:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
+//   local2; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:19:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+//   local4; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:21:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
+//   local6; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:35:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
+//   local2; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:37:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+//   local4; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:39:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
+//   local6; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:104:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:112:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static field <T extends core::Object? = dynamic>(T%) → core::Null? fieldDirect = <T extends core::Object? = dynamic>(T% value) → core::Null? {
+  T% local1;
+  T? local2;
+  core::bool #local2#isSet = false;
+  function #local2#get() → T%
+    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
+  function #local2#set(T% #t1) → dynamic {
+    #local2#isSet = true;
+    return local2 = #t1;
+  }
+  core::int local3;
+  core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t2 = local4 in #t2.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t2{core::int};
+  function #local4#set(core::int #t3) → dynamic
+    return local4 = #t3;
+  asy::FutureOr<core::int> local5;
+  asy::FutureOr<core::int>? local6;
+  function #local6#get() → asy::FutureOr<core::int>
+    return let final asy::FutureOr<core::int>? #t4 = local6 in #t4.==(null) ?{asy::FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t4{asy::FutureOr<core::int>};
+  function #local6#set(asy::FutureOr<core::int> #t5) → dynamic
+    return local6 = #t5;
+  T? local7;
+  core::bool #local7#isSet = false;
+  function #local7#get() → T% {
+    if(!#local7#isSet) {
+      #local7#isSet = true;
+      local7 = value;
+    }
+    return local7{T%};
+  }
+  function #local7#set(T% #t6) → dynamic {
+    #local7#isSet = true;
+    return local7 = #t6;
+  }
+  let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:35:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
+  local2; // error
+  ^^^^^^" in #local2#get.call();
+  let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:37:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+  local4; // error
+  ^^^^^^" in #local4#get.call();
+  let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:39:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
+  local6; // error
+  ^^^^^^" in #local6#get.call();
+  #local7#get.call();
+};
+static field <T extends core::Object? = dynamic>(core::bool, T%) → core::Null? fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → core::Null? {
+  T% local1;
+  T? local2;
+  core::bool #local2#isSet = false;
+  function #local2#get() → T%
+    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
+  function #local2#set(T% #t13) → dynamic {
+    #local2#isSet = true;
+    return local2 = #t13;
+  }
+  core::int local3;
+  core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t14 = local4 in #t14.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t14{core::int};
+  function #local4#set(core::int #t15) → dynamic
+    return local4 = #t15;
+  asy::FutureOr<core::int> local5;
+  asy::FutureOr<core::int>? local6;
+  function #local6#get() → asy::FutureOr<core::int>
+    return let final asy::FutureOr<core::int>? #t16 = local6 in #t16.==(null) ?{asy::FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t16{asy::FutureOr<core::int>};
+  function #local6#set(asy::FutureOr<core::int> #t17) → dynamic
+    return local6 = #t17;
+  T? local7;
+  core::bool #local7#isSet = false;
+  function #local7#get() → T% {
+    if(!#local7#isSet) {
+      #local7#isSet = true;
+      local7 = value;
+    }
+    return local7{T%};
+  }
+  function #local7#set(T% #t18) → dynamic {
+    #local7#isSet = true;
+    return local7 = #t18;
+  }
+  if(b) {
+    local1 = value;
+    #local2#set.call(value);
+    local3 = 0;
+    #local4#set.call(0);
+    local5 = 0;
+    #local6#set.call(0);
+    #local7#get.call();
+  }
+  let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  #local2#get.call();
+  let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  #local4#get.call();
+  let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  #local6#get.call();
+  #local7#get.call();
+};
+static field () → core::Null? fieldCompound = () → core::Null? {
+  core::int local3;
+  core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t22 = local4 in #t22.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t22{core::int};
+  function #local4#set(core::int #t23) → dynamic
+    return local4 = #t23;
+  local3 = (let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3 += 0; // error
+  ^^^^^^" in local3).{core::num::+}(0);
+  #local4#set.call((let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:112:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+  local4 += 0; // error
+  ^^^^^^" in #local4#get.call()).{core::num::+}(0));
+};
+static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
+  self::methodDirect::T% local1;
+  self::methodDirect::T? local2;
+  core::bool #local2#isSet = false;
+  function #local2#get() → self::methodDirect::T%
+    return #local2#isSet ?{self::methodDirect::T%} local2{self::methodDirect::T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
+  function #local2#set(self::methodDirect::T% #t26) → dynamic {
+    #local2#isSet = true;
+    return local2 = #t26;
+  }
+  core::int local3;
+  core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t27 = local4 in #t27.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t27{core::int};
+  function #local4#set(core::int #t28) → dynamic
+    return local4 = #t28;
+  asy::FutureOr<core::int> local5;
+  asy::FutureOr<core::int>? local6;
+  function #local6#get() → asy::FutureOr<core::int>
+    return let final asy::FutureOr<core::int>? #t29 = local6 in #t29.==(null) ?{asy::FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t29{asy::FutureOr<core::int>};
+  function #local6#set(asy::FutureOr<core::int> #t30) → dynamic
+    return local6 = #t30;
+  self::methodDirect::T? local7;
+  core::bool #local7#isSet = false;
+  function #local7#get() → self::methodDirect::T% {
+    if(!#local7#isSet) {
+      #local7#isSet = true;
+      local7 = value;
+    }
+    return local7{self::methodDirect::T%};
+  }
+  function #local7#set(self::methodDirect::T% #t31) → dynamic {
+    #local7#isSet = true;
+    return local7 = #t31;
+  }
+  let final<BottomType> #t32 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  let final<BottomType> #t33 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:17:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
+  local2; // error
+  ^^^^^^" in #local2#get.call();
+  let final<BottomType> #t34 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  let final<BottomType> #t35 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:19:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+  local4; // error
+  ^^^^^^" in #local4#get.call();
+  let final<BottomType> #t36 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  let final<BottomType> #t37 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:21:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
+  local6; // error
+  ^^^^^^" in #local6#get.call();
+  #local7#get.call();
+}
+static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
+  self::methodConditional::T% local1;
+  self::methodConditional::T? local2;
+  core::bool #local2#isSet = false;
+  function #local2#get() → self::methodConditional::T%
+    return #local2#isSet ?{self::methodConditional::T%} local2{self::methodConditional::T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
+  function #local2#set(self::methodConditional::T% #t38) → dynamic {
+    #local2#isSet = true;
+    return local2 = #t38;
+  }
+  core::int local3;
+  core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t39 = local4 in #t39.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t39{core::int};
+  function #local4#set(core::int #t40) → dynamic
+    return local4 = #t40;
+  asy::FutureOr<core::int> local5;
+  asy::FutureOr<core::int>? local6;
+  function #local6#get() → asy::FutureOr<core::int>
+    return let final asy::FutureOr<core::int>? #t41 = local6 in #t41.==(null) ?{asy::FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t41{asy::FutureOr<core::int>};
+  function #local6#set(asy::FutureOr<core::int> #t42) → dynamic
+    return local6 = #t42;
+  self::methodConditional::T? local7;
+  core::bool #local7#isSet = false;
+  function #local7#get() → self::methodConditional::T% {
+    if(!#local7#isSet) {
+      #local7#isSet = true;
+      local7 = value;
+    }
+    return local7{self::methodConditional::T%};
+  }
+  function #local7#set(self::methodConditional::T% #t43) → dynamic {
+    #local7#isSet = true;
+    return local7 = #t43;
+  }
+  if(b) {
+    local1 = value;
+    #local2#set.call(value);
+    local3 = 0;
+    #local4#set.call(0);
+    local5 = 0;
+    #local6#set.call(0);
+    #local7#set.call(value);
+  }
+  let final<BottomType> #t44 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  #local2#get.call();
+  let final<BottomType> #t45 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  #local4#get.call();
+  let final<BottomType> #t46 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  #local6#get.call();
+  #local7#get.call();
+}
+static method methodCompound() → dynamic {
+  core::int local3;
+  core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t47 = local4 in #t47.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t47{core::int};
+  function #local4#set(core::int #t48) → dynamic
+    return local4 = #t48;
+  local3 = (let final<BottomType> #t49 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3 += 0; // error
+  ^^^^^^" in local3).{core::num::+}(0);
+  #local4#set.call((let final<BottomType> #t50 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:104:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+  local4 += 0; // error
+  ^^^^^^" in #local4#get.call()).{core::num::+}(0));
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.transformed.expect
new file mode 100644
index 0000000..759a7c9
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.strong.transformed.expect
@@ -0,0 +1,354 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:17:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
+//   local2; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:19:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+//   local4; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:21:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
+//   local6; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:35:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
+//   local2; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:37:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+//   local4; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:39:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
+//   local6; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:104:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:112:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static field <T extends core::Object? = dynamic>(T%) → core::Null? fieldDirect = <T extends core::Object? = dynamic>(T% value) → core::Null? {
+  T% local1;
+  T? local2;
+  core::bool #local2#isSet = false;
+  function #local2#get() → T%
+    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
+  function #local2#set(T% #t1) → dynamic {
+    #local2#isSet = true;
+    return local2 = #t1;
+  }
+  core::int local3;
+  core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t2 = local4 in #t2.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t2{core::int};
+  function #local4#set(core::int #t3) → dynamic
+    return local4 = #t3;
+  asy::FutureOr<core::int> local5;
+  asy::FutureOr<core::int>? local6;
+  function #local6#get() → asy::FutureOr<core::int>
+    return let final asy::FutureOr<core::int>? #t4 = local6 in #t4.==(null) ?{asy::FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t4{asy::FutureOr<core::int>};
+  function #local6#set(asy::FutureOr<core::int> #t5) → dynamic
+    return local6 = #t5;
+  T? local7;
+  core::bool #local7#isSet = false;
+  function #local7#get() → T% {
+    if(!#local7#isSet) {
+      #local7#isSet = true;
+      local7 = value;
+    }
+    return local7{T%};
+  }
+  function #local7#set(T% #t6) → dynamic {
+    #local7#isSet = true;
+    return local7 = #t6;
+  }
+  let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:35:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
+  local2; // error
+  ^^^^^^" in #local2#get.call();
+  let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:37:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+  local4; // error
+  ^^^^^^" in #local4#get.call();
+  let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:39:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
+  local6; // error
+  ^^^^^^" in #local6#get.call();
+  #local7#get.call();
+};
+static field <T extends core::Object? = dynamic>(core::bool, T%) → core::Null? fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → core::Null? {
+  T% local1;
+  T? local2;
+  core::bool #local2#isSet = false;
+  function #local2#get() → T%
+    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
+  function #local2#set(T% #t13) → dynamic {
+    #local2#isSet = true;
+    return local2 = #t13;
+  }
+  core::int local3;
+  core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t14 = local4 in #t14.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t14{core::int};
+  function #local4#set(core::int #t15) → dynamic
+    return local4 = #t15;
+  asy::FutureOr<core::int> local5;
+  asy::FutureOr<core::int>? local6;
+  function #local6#get() → asy::FutureOr<core::int>
+    return let final asy::FutureOr<core::int>? #t16 = local6 in #t16.==(null) ?{asy::FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t16{asy::FutureOr<core::int>};
+  function #local6#set(asy::FutureOr<core::int> #t17) → dynamic
+    return local6 = #t17;
+  T? local7;
+  core::bool #local7#isSet = false;
+  function #local7#get() → T% {
+    if(!#local7#isSet) {
+      #local7#isSet = true;
+      local7 = value;
+    }
+    return local7{T%};
+  }
+  function #local7#set(T% #t18) → dynamic {
+    #local7#isSet = true;
+    return local7 = #t18;
+  }
+  if(b) {
+    local1 = value;
+    #local2#set.call(value);
+    local3 = 0;
+    #local4#set.call(0);
+    local5 = 0;
+    #local6#set.call(0);
+    #local7#get.call();
+  }
+  let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  #local2#get.call();
+  let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  #local4#get.call();
+  let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  #local6#get.call();
+  #local7#get.call();
+};
+static field () → core::Null? fieldCompound = () → core::Null? {
+  core::int local3;
+  core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t22 = local4 in #t22.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t22{core::int};
+  function #local4#set(core::int #t23) → dynamic
+    return local4 = #t23;
+  local3 = (let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3 += 0; // error
+  ^^^^^^" in local3).{core::num::+}(0);
+  #local4#set.call((let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:112:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+  local4 += 0; // error
+  ^^^^^^" in #local4#get.call()).{core::num::+}(0));
+};
+static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
+  self::methodDirect::T% local1;
+  self::methodDirect::T? local2;
+  core::bool #local2#isSet = false;
+  function #local2#get() → self::methodDirect::T%
+    return #local2#isSet ?{self::methodDirect::T%} local2{self::methodDirect::T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
+  function #local2#set(self::methodDirect::T% #t26) → dynamic {
+    #local2#isSet = true;
+    return local2 = #t26;
+  }
+  core::int local3;
+  core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t27 = local4 in #t27.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t27{core::int};
+  function #local4#set(core::int #t28) → dynamic
+    return local4 = #t28;
+  asy::FutureOr<core::int> local5;
+  asy::FutureOr<core::int>? local6;
+  function #local6#get() → asy::FutureOr<core::int>
+    return let final asy::FutureOr<core::int>? #t29 = local6 in #t29.==(null) ?{asy::FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t29{asy::FutureOr<core::int>};
+  function #local6#set(asy::FutureOr<core::int> #t30) → dynamic
+    return local6 = #t30;
+  self::methodDirect::T? local7;
+  core::bool #local7#isSet = false;
+  function #local7#get() → self::methodDirect::T% {
+    if(!#local7#isSet) {
+      #local7#isSet = true;
+      local7 = value;
+    }
+    return local7{self::methodDirect::T%};
+  }
+  function #local7#set(self::methodDirect::T% #t31) → dynamic {
+    #local7#isSet = true;
+    return local7 = #t31;
+  }
+  let final<BottomType> #t32 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  let final<BottomType> #t33 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:17:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
+  local2; // error
+  ^^^^^^" in #local2#get.call();
+  let final<BottomType> #t34 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  let final<BottomType> #t35 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:19:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+  local4; // error
+  ^^^^^^" in #local4#get.call();
+  let final<BottomType> #t36 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  let final<BottomType> #t37 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:21:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
+  local6; // error
+  ^^^^^^" in #local6#get.call();
+  #local7#get.call();
+}
+static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
+  self::methodConditional::T% local1;
+  self::methodConditional::T? local2;
+  core::bool #local2#isSet = false;
+  function #local2#get() → self::methodConditional::T%
+    return #local2#isSet ?{self::methodConditional::T%} local2{self::methodConditional::T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
+  function #local2#set(self::methodConditional::T% #t38) → dynamic {
+    #local2#isSet = true;
+    return local2 = #t38;
+  }
+  core::int local3;
+  core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t39 = local4 in #t39.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t39{core::int};
+  function #local4#set(core::int #t40) → dynamic
+    return local4 = #t40;
+  asy::FutureOr<core::int> local5;
+  asy::FutureOr<core::int>? local6;
+  function #local6#get() → asy::FutureOr<core::int>
+    return let final asy::FutureOr<core::int>? #t41 = local6 in #t41.==(null) ?{asy::FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t41{asy::FutureOr<core::int>};
+  function #local6#set(asy::FutureOr<core::int> #t42) → dynamic
+    return local6 = #t42;
+  self::methodConditional::T? local7;
+  core::bool #local7#isSet = false;
+  function #local7#get() → self::methodConditional::T% {
+    if(!#local7#isSet) {
+      #local7#isSet = true;
+      local7 = value;
+    }
+    return local7{self::methodConditional::T%};
+  }
+  function #local7#set(self::methodConditional::T% #t43) → dynamic {
+    #local7#isSet = true;
+    return local7 = #t43;
+  }
+  if(b) {
+    local1 = value;
+    #local2#set.call(value);
+    local3 = 0;
+    #local4#set.call(0);
+    local5 = 0;
+    #local6#set.call(0);
+    #local7#set.call(value);
+  }
+  let final<BottomType> #t44 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  #local2#get.call();
+  let final<BottomType> #t45 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  #local4#get.call();
+  let final<BottomType> #t46 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  #local6#get.call();
+  #local7#get.call();
+}
+static method methodCompound() → dynamic {
+  core::int local3;
+  core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t47 = local4 in #t47.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t47{core::int};
+  function #local4#set(core::int #t48) → dynamic
+    return local4 = #t48;
+  local3 = (let final<BottomType> #t49 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3 += 0; // error
+  ^^^^^^" in local3).{core::num::+}(0);
+  #local4#set.call((let final<BottomType> #t50 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:104:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+  local4 += 0; // error
+  ^^^^^^" in #local4#get.call()).{core::num::+}(0));
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.expect b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.expect
new file mode 100644
index 0000000..759a7c9
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.expect
@@ -0,0 +1,354 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:17:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
+//   local2; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:19:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+//   local4; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:21:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
+//   local6; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:35:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
+//   local2; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:37:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+//   local4; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:39:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
+//   local6; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:104:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:112:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static field <T extends core::Object? = dynamic>(T%) → core::Null? fieldDirect = <T extends core::Object? = dynamic>(T% value) → core::Null? {
+  T% local1;
+  T? local2;
+  core::bool #local2#isSet = false;
+  function #local2#get() → T%
+    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
+  function #local2#set(T% #t1) → dynamic {
+    #local2#isSet = true;
+    return local2 = #t1;
+  }
+  core::int local3;
+  core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t2 = local4 in #t2.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t2{core::int};
+  function #local4#set(core::int #t3) → dynamic
+    return local4 = #t3;
+  asy::FutureOr<core::int> local5;
+  asy::FutureOr<core::int>? local6;
+  function #local6#get() → asy::FutureOr<core::int>
+    return let final asy::FutureOr<core::int>? #t4 = local6 in #t4.==(null) ?{asy::FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t4{asy::FutureOr<core::int>};
+  function #local6#set(asy::FutureOr<core::int> #t5) → dynamic
+    return local6 = #t5;
+  T? local7;
+  core::bool #local7#isSet = false;
+  function #local7#get() → T% {
+    if(!#local7#isSet) {
+      #local7#isSet = true;
+      local7 = value;
+    }
+    return local7{T%};
+  }
+  function #local7#set(T% #t6) → dynamic {
+    #local7#isSet = true;
+    return local7 = #t6;
+  }
+  let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:35:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
+  local2; // error
+  ^^^^^^" in #local2#get.call();
+  let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:37:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+  local4; // error
+  ^^^^^^" in #local4#get.call();
+  let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:39:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
+  local6; // error
+  ^^^^^^" in #local6#get.call();
+  #local7#get.call();
+};
+static field <T extends core::Object? = dynamic>(core::bool, T%) → core::Null? fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → core::Null? {
+  T% local1;
+  T? local2;
+  core::bool #local2#isSet = false;
+  function #local2#get() → T%
+    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
+  function #local2#set(T% #t13) → dynamic {
+    #local2#isSet = true;
+    return local2 = #t13;
+  }
+  core::int local3;
+  core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t14 = local4 in #t14.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t14{core::int};
+  function #local4#set(core::int #t15) → dynamic
+    return local4 = #t15;
+  asy::FutureOr<core::int> local5;
+  asy::FutureOr<core::int>? local6;
+  function #local6#get() → asy::FutureOr<core::int>
+    return let final asy::FutureOr<core::int>? #t16 = local6 in #t16.==(null) ?{asy::FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t16{asy::FutureOr<core::int>};
+  function #local6#set(asy::FutureOr<core::int> #t17) → dynamic
+    return local6 = #t17;
+  T? local7;
+  core::bool #local7#isSet = false;
+  function #local7#get() → T% {
+    if(!#local7#isSet) {
+      #local7#isSet = true;
+      local7 = value;
+    }
+    return local7{T%};
+  }
+  function #local7#set(T% #t18) → dynamic {
+    #local7#isSet = true;
+    return local7 = #t18;
+  }
+  if(b) {
+    local1 = value;
+    #local2#set.call(value);
+    local3 = 0;
+    #local4#set.call(0);
+    local5 = 0;
+    #local6#set.call(0);
+    #local7#get.call();
+  }
+  let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  #local2#get.call();
+  let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  #local4#get.call();
+  let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  #local6#get.call();
+  #local7#get.call();
+};
+static field () → core::Null? fieldCompound = () → core::Null? {
+  core::int local3;
+  core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t22 = local4 in #t22.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t22{core::int};
+  function #local4#set(core::int #t23) → dynamic
+    return local4 = #t23;
+  local3 = (let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3 += 0; // error
+  ^^^^^^" in local3).{core::num::+}(0);
+  #local4#set.call((let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:112:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+  local4 += 0; // error
+  ^^^^^^" in #local4#get.call()).{core::num::+}(0));
+};
+static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
+  self::methodDirect::T% local1;
+  self::methodDirect::T? local2;
+  core::bool #local2#isSet = false;
+  function #local2#get() → self::methodDirect::T%
+    return #local2#isSet ?{self::methodDirect::T%} local2{self::methodDirect::T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
+  function #local2#set(self::methodDirect::T% #t26) → dynamic {
+    #local2#isSet = true;
+    return local2 = #t26;
+  }
+  core::int local3;
+  core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t27 = local4 in #t27.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t27{core::int};
+  function #local4#set(core::int #t28) → dynamic
+    return local4 = #t28;
+  asy::FutureOr<core::int> local5;
+  asy::FutureOr<core::int>? local6;
+  function #local6#get() → asy::FutureOr<core::int>
+    return let final asy::FutureOr<core::int>? #t29 = local6 in #t29.==(null) ?{asy::FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t29{asy::FutureOr<core::int>};
+  function #local6#set(asy::FutureOr<core::int> #t30) → dynamic
+    return local6 = #t30;
+  self::methodDirect::T? local7;
+  core::bool #local7#isSet = false;
+  function #local7#get() → self::methodDirect::T% {
+    if(!#local7#isSet) {
+      #local7#isSet = true;
+      local7 = value;
+    }
+    return local7{self::methodDirect::T%};
+  }
+  function #local7#set(self::methodDirect::T% #t31) → dynamic {
+    #local7#isSet = true;
+    return local7 = #t31;
+  }
+  let final<BottomType> #t32 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  let final<BottomType> #t33 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:17:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
+  local2; // error
+  ^^^^^^" in #local2#get.call();
+  let final<BottomType> #t34 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  let final<BottomType> #t35 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:19:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+  local4; // error
+  ^^^^^^" in #local4#get.call();
+  let final<BottomType> #t36 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  let final<BottomType> #t37 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:21:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
+  local6; // error
+  ^^^^^^" in #local6#get.call();
+  #local7#get.call();
+}
+static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
+  self::methodConditional::T% local1;
+  self::methodConditional::T? local2;
+  core::bool #local2#isSet = false;
+  function #local2#get() → self::methodConditional::T%
+    return #local2#isSet ?{self::methodConditional::T%} local2{self::methodConditional::T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
+  function #local2#set(self::methodConditional::T% #t38) → dynamic {
+    #local2#isSet = true;
+    return local2 = #t38;
+  }
+  core::int local3;
+  core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t39 = local4 in #t39.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t39{core::int};
+  function #local4#set(core::int #t40) → dynamic
+    return local4 = #t40;
+  asy::FutureOr<core::int> local5;
+  asy::FutureOr<core::int>? local6;
+  function #local6#get() → asy::FutureOr<core::int>
+    return let final asy::FutureOr<core::int>? #t41 = local6 in #t41.==(null) ?{asy::FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t41{asy::FutureOr<core::int>};
+  function #local6#set(asy::FutureOr<core::int> #t42) → dynamic
+    return local6 = #t42;
+  self::methodConditional::T? local7;
+  core::bool #local7#isSet = false;
+  function #local7#get() → self::methodConditional::T% {
+    if(!#local7#isSet) {
+      #local7#isSet = true;
+      local7 = value;
+    }
+    return local7{self::methodConditional::T%};
+  }
+  function #local7#set(self::methodConditional::T% #t43) → dynamic {
+    #local7#isSet = true;
+    return local7 = #t43;
+  }
+  if(b) {
+    local1 = value;
+    #local2#set.call(value);
+    local3 = 0;
+    #local4#set.call(0);
+    local5 = 0;
+    #local6#set.call(0);
+    #local7#set.call(value);
+  }
+  let final<BottomType> #t44 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  #local2#get.call();
+  let final<BottomType> #t45 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  #local4#get.call();
+  let final<BottomType> #t46 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  #local6#get.call();
+  #local7#get.call();
+}
+static method methodCompound() → dynamic {
+  core::int local3;
+  core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t47 = local4 in #t47.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t47{core::int};
+  function #local4#set(core::int #t48) → dynamic
+    return local4 = #t48;
+  local3 = (let final<BottomType> #t49 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3 += 0; // error
+  ^^^^^^" in local3).{core::num::+}(0);
+  #local4#set.call((let final<BottomType> #t50 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:104:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+  local4 += 0; // error
+  ^^^^^^" in #local4#get.call()).{core::num::+}(0));
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.transformed.expect
new file mode 100644
index 0000000..759a7c9
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/definitely_unassigned.dart.weak.transformed.expect
@@ -0,0 +1,354 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:17:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
+//   local2; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:19:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+//   local4; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:21:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
+//   local6; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:35:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
+//   local2; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:37:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+//   local4; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:39:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
+//   local6; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:104:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:112:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static field <T extends core::Object? = dynamic>(T%) → core::Null? fieldDirect = <T extends core::Object? = dynamic>(T% value) → core::Null? {
+  T% local1;
+  T? local2;
+  core::bool #local2#isSet = false;
+  function #local2#get() → T%
+    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
+  function #local2#set(T% #t1) → dynamic {
+    #local2#isSet = true;
+    return local2 = #t1;
+  }
+  core::int local3;
+  core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t2 = local4 in #t2.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t2{core::int};
+  function #local4#set(core::int #t3) → dynamic
+    return local4 = #t3;
+  asy::FutureOr<core::int> local5;
+  asy::FutureOr<core::int>? local6;
+  function #local6#get() → asy::FutureOr<core::int>
+    return let final asy::FutureOr<core::int>? #t4 = local6 in #t4.==(null) ?{asy::FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t4{asy::FutureOr<core::int>};
+  function #local6#set(asy::FutureOr<core::int> #t5) → dynamic
+    return local6 = #t5;
+  T? local7;
+  core::bool #local7#isSet = false;
+  function #local7#get() → T% {
+    if(!#local7#isSet) {
+      #local7#isSet = true;
+      local7 = value;
+    }
+    return local7{T%};
+  }
+  function #local7#set(T% #t6) → dynamic {
+    #local7#isSet = true;
+    return local7 = #t6;
+  }
+  let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:35:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
+  local2; // error
+  ^^^^^^" in #local2#get.call();
+  let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:37:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+  local4; // error
+  ^^^^^^" in #local4#get.call();
+  let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:39:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
+  local6; // error
+  ^^^^^^" in #local6#get.call();
+  #local7#get.call();
+};
+static field <T extends core::Object? = dynamic>(core::bool, T%) → core::Null? fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → core::Null? {
+  T% local1;
+  T? local2;
+  core::bool #local2#isSet = false;
+  function #local2#get() → T%
+    return #local2#isSet ?{T%} local2{T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
+  function #local2#set(T% #t13) → dynamic {
+    #local2#isSet = true;
+    return local2 = #t13;
+  }
+  core::int local3;
+  core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t14 = local4 in #t14.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t14{core::int};
+  function #local4#set(core::int #t15) → dynamic
+    return local4 = #t15;
+  asy::FutureOr<core::int> local5;
+  asy::FutureOr<core::int>? local6;
+  function #local6#get() → asy::FutureOr<core::int>
+    return let final asy::FutureOr<core::int>? #t16 = local6 in #t16.==(null) ?{asy::FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t16{asy::FutureOr<core::int>};
+  function #local6#set(asy::FutureOr<core::int> #t17) → dynamic
+    return local6 = #t17;
+  T? local7;
+  core::bool #local7#isSet = false;
+  function #local7#get() → T% {
+    if(!#local7#isSet) {
+      #local7#isSet = true;
+      local7 = value;
+    }
+    return local7{T%};
+  }
+  function #local7#set(T% #t18) → dynamic {
+    #local7#isSet = true;
+    return local7 = #t18;
+  }
+  if(b) {
+    local1 = value;
+    #local2#set.call(value);
+    local3 = 0;
+    #local4#set.call(0);
+    local5 = 0;
+    #local6#set.call(0);
+    #local7#get.call();
+  }
+  let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  #local2#get.call();
+  let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  #local4#get.call();
+  let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  #local6#get.call();
+  #local7#get.call();
+};
+static field () → core::Null? fieldCompound = () → core::Null? {
+  core::int local3;
+  core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t22 = local4 in #t22.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t22{core::int};
+  function #local4#set(core::int #t23) → dynamic
+    return local4 = #t23;
+  local3 = (let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3 += 0; // error
+  ^^^^^^" in local3).{core::num::+}(0);
+  #local4#set.call((let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:112:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+  local4 += 0; // error
+  ^^^^^^" in #local4#get.call()).{core::num::+}(0));
+};
+static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
+  self::methodDirect::T% local1;
+  self::methodDirect::T? local2;
+  core::bool #local2#isSet = false;
+  function #local2#get() → self::methodDirect::T%
+    return #local2#isSet ?{self::methodDirect::T%} local2{self::methodDirect::T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
+  function #local2#set(self::methodDirect::T% #t26) → dynamic {
+    #local2#isSet = true;
+    return local2 = #t26;
+  }
+  core::int local3;
+  core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t27 = local4 in #t27.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t27{core::int};
+  function #local4#set(core::int #t28) → dynamic
+    return local4 = #t28;
+  asy::FutureOr<core::int> local5;
+  asy::FutureOr<core::int>? local6;
+  function #local6#get() → asy::FutureOr<core::int>
+    return let final asy::FutureOr<core::int>? #t29 = local6 in #t29.==(null) ?{asy::FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t29{asy::FutureOr<core::int>};
+  function #local6#set(asy::FutureOr<core::int> #t30) → dynamic
+    return local6 = #t30;
+  self::methodDirect::T? local7;
+  core::bool #local7#isSet = false;
+  function #local7#get() → self::methodDirect::T% {
+    if(!#local7#isSet) {
+      #local7#isSet = true;
+      local7 = value;
+    }
+    return local7{self::methodDirect::T%};
+  }
+  function #local7#set(self::methodDirect::T% #t31) → dynamic {
+    #local7#isSet = true;
+    return local7 = #t31;
+  }
+  let final<BottomType> #t32 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  let final<BottomType> #t33 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:17:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
+  local2; // error
+  ^^^^^^" in #local2#get.call();
+  let final<BottomType> #t34 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  let final<BottomType> #t35 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:19:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+  local4; // error
+  ^^^^^^" in #local4#get.call();
+  let final<BottomType> #t36 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  let final<BottomType> #t37 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:21:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
+  local6; // error
+  ^^^^^^" in #local6#get.call();
+  #local7#get.call();
+}
+static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
+  self::methodConditional::T% local1;
+  self::methodConditional::T? local2;
+  core::bool #local2#isSet = false;
+  function #local2#get() → self::methodConditional::T%
+    return #local2#isSet ?{self::methodConditional::T%} local2{self::methodConditional::T%} : throw new _in::LateInitializationErrorImpl::•("Local 'local2' has not been initialized.");
+  function #local2#set(self::methodConditional::T% #t38) → dynamic {
+    #local2#isSet = true;
+    return local2 = #t38;
+  }
+  core::int local3;
+  core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t39 = local4 in #t39.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t39{core::int};
+  function #local4#set(core::int #t40) → dynamic
+    return local4 = #t40;
+  asy::FutureOr<core::int> local5;
+  asy::FutureOr<core::int>? local6;
+  function #local6#get() → asy::FutureOr<core::int>
+    return let final asy::FutureOr<core::int>? #t41 = local6 in #t41.==(null) ?{asy::FutureOr<core::int>} throw new _in::LateInitializationErrorImpl::•("Local 'local6' has not been initialized.") : #t41{asy::FutureOr<core::int>};
+  function #local6#set(asy::FutureOr<core::int> #t42) → dynamic
+    return local6 = #t42;
+  self::methodConditional::T? local7;
+  core::bool #local7#isSet = false;
+  function #local7#get() → self::methodConditional::T% {
+    if(!#local7#isSet) {
+      #local7#isSet = true;
+      local7 = value;
+    }
+    return local7{self::methodConditional::T%};
+  }
+  function #local7#set(self::methodConditional::T% #t43) → dynamic {
+    #local7#isSet = true;
+    return local7 = #t43;
+  }
+  if(b) {
+    local1 = value;
+    #local2#set.call(value);
+    local3 = 0;
+    #local4#set.call(0);
+    local5 = 0;
+    #local6#set.call(0);
+    #local7#set.call(value);
+  }
+  let final<BottomType> #t44 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  #local2#get.call();
+  let final<BottomType> #t45 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  #local4#get.call();
+  let final<BottomType> #t46 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  #local6#get.call();
+  #local7#get.call();
+}
+static method methodCompound() → dynamic {
+  core::int local3;
+  core::int? local4;
+  function #local4#get() → core::int
+    return let final core::int? #t47 = local4 in #t47.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local4' has not been initialized.") : #t47{core::int};
+  function #local4#set(core::int #t48) → dynamic
+    return local4 = #t48;
+  local3 = (let final<BottomType> #t49 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3 += 0; // error
+  ^^^^^^" in local3).{core::num::+}(0);
+  #local4#set.call((let final<BottomType> #t50 = invalid-expression "pkg/front_end/testcases/late_lowering/definitely_unassigned.dart:104:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+  local4 += 0; // error
+  ^^^^^^" in #local4#get.call()).{core::num::+}(0));
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart b/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart
new file mode 100644
index 0000000..99b6bc0
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart
@@ -0,0 +1,10 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+T f<T>(T t) => t;
+
+main() {
+  late int local;
+  local = f(0);
+}
diff --git a/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.outline.expect b/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.outline.expect
new file mode 100644
index 0000000..b6346e7
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.outline.expect
@@ -0,0 +1,8 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method f<T extends core::Object? = dynamic>(self::f::T% t) → self::f::T%
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.strong.expect b/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.strong.expect
new file mode 100644
index 0000000..4c0d317
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.strong.expect
@@ -0,0 +1,15 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+static method f<T extends core::Object? = dynamic>(self::f::T% t) → self::f::T%
+  return t;
+static method main() → dynamic {
+  core::int? local;
+  function #local#get() → core::int
+    return let final core::int? #t1 = local in #t1.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local' has not been initialized.") : #t1{core::int};
+  function #local#set(core::int #t2) → dynamic
+    return local = #t2;
+  #local#set.call(self::f<core::int>(0));
+}
diff --git a/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.strong.transformed.expect
new file mode 100644
index 0000000..4c0d317
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.strong.transformed.expect
@@ -0,0 +1,15 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+static method f<T extends core::Object? = dynamic>(self::f::T% t) → self::f::T%
+  return t;
+static method main() → dynamic {
+  core::int? local;
+  function #local#get() → core::int
+    return let final core::int? #t1 = local in #t1.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local' has not been initialized.") : #t1{core::int};
+  function #local#set(core::int #t2) → dynamic
+    return local = #t2;
+  #local#set.call(self::f<core::int>(0));
+}
diff --git a/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.weak.expect b/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.weak.expect
new file mode 100644
index 0000000..4c0d317
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.weak.expect
@@ -0,0 +1,15 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+static method f<T extends core::Object? = dynamic>(self::f::T% t) → self::f::T%
+  return t;
+static method main() → dynamic {
+  core::int? local;
+  function #local#get() → core::int
+    return let final core::int? #t1 = local in #t1.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local' has not been initialized.") : #t1{core::int};
+  function #local#set(core::int #t2) → dynamic
+    return local = #t2;
+  #local#set.call(self::f<core::int>(0));
+}
diff --git a/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.weak.transformed.expect
new file mode 100644
index 0000000..4c0d317
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/infer_from_late_variable.dart.weak.transformed.expect
@@ -0,0 +1,15 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+static method f<T extends core::Object? = dynamic>(self::f::T% t) → self::f::T%
+  return t;
+static method main() → dynamic {
+  core::int? local;
+  function #local#get() → core::int
+    return let final core::int? #t1 = local in #t1.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'local' has not been initialized.") : #t1{core::int};
+  function #local#set(core::int #t2) → dynamic
+    return local = #t2;
+  #local#set.call(self::f<core::int>(0));
+}
diff --git a/pkg/front_end/testcases/late_lowering/issue40601.dart b/pkg/front_end/testcases/late_lowering/issue40601.dart
new file mode 100644
index 0000000..56ae989
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/issue40601.dart
@@ -0,0 +1,18 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+abstract class A<T> {
+  T baz();
+  bar(T value) {}
+  foo() {
+    late T value;
+    var result = () => bar(value);
+    (() {
+      value = baz();
+    })();
+    return result;
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/late_lowering/issue40601.dart.outline.expect b/pkg/front_end/testcases/late_lowering/issue40601.dart.outline.expect
new file mode 100644
index 0000000..f2c5efd
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/issue40601.dart.outline.expect
@@ -0,0 +1,15 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
+    ;
+  abstract method baz() → self::A::T%;
+  method bar(generic-covariant-impl self::A::T% value) → dynamic
+    ;
+  method foo() → dynamic
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/late_lowering/issue40601.dart.strong.expect b/pkg/front_end/testcases/late_lowering/issue40601.dart.strong.expect
new file mode 100644
index 0000000..b339c0e
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/issue40601.dart.strong.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  abstract method baz() → self::A::T%;
+  method bar(generic-covariant-impl self::A::T% value) → dynamic {}
+  method foo() → dynamic {
+    self::A::T? value;
+    core::bool #value#isSet = false;
+    function #value#get() → self::A::T%
+      return #value#isSet ?{self::A::T%} value{self::A::T%} : throw new _in::LateInitializationErrorImpl::•("Local 'value' has not been initialized.");
+    function #value#set(self::A::T% #t1) → dynamic {
+      #value#isSet = true;
+      return value = #t1;
+    }
+    () → dynamic result = () → dynamic => this.{self::A::bar}(#value#get.call());
+    (() → core::Null? {
+      #value#set.call(this.{self::A::baz}());
+    }).call();
+    return result;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/issue40601.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/issue40601.dart.strong.transformed.expect
new file mode 100644
index 0000000..b339c0e
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/issue40601.dart.strong.transformed.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  abstract method baz() → self::A::T%;
+  method bar(generic-covariant-impl self::A::T% value) → dynamic {}
+  method foo() → dynamic {
+    self::A::T? value;
+    core::bool #value#isSet = false;
+    function #value#get() → self::A::T%
+      return #value#isSet ?{self::A::T%} value{self::A::T%} : throw new _in::LateInitializationErrorImpl::•("Local 'value' has not been initialized.");
+    function #value#set(self::A::T% #t1) → dynamic {
+      #value#isSet = true;
+      return value = #t1;
+    }
+    () → dynamic result = () → dynamic => this.{self::A::bar}(#value#get.call());
+    (() → core::Null? {
+      #value#set.call(this.{self::A::baz}());
+    }).call();
+    return result;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.expect b/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.expect
new file mode 100644
index 0000000..b339c0e
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  abstract method baz() → self::A::T%;
+  method bar(generic-covariant-impl self::A::T% value) → dynamic {}
+  method foo() → dynamic {
+    self::A::T? value;
+    core::bool #value#isSet = false;
+    function #value#get() → self::A::T%
+      return #value#isSet ?{self::A::T%} value{self::A::T%} : throw new _in::LateInitializationErrorImpl::•("Local 'value' has not been initialized.");
+    function #value#set(self::A::T% #t1) → dynamic {
+      #value#isSet = true;
+      return value = #t1;
+    }
+    () → dynamic result = () → dynamic => this.{self::A::bar}(#value#get.call());
+    (() → core::Null? {
+      #value#set.call(this.{self::A::baz}());
+    }).call();
+    return result;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.transformed.expect
new file mode 100644
index 0000000..b339c0e
--- /dev/null
+++ b/pkg/front_end/testcases/late_lowering/issue40601.dart.weak.transformed.expect
@@ -0,0 +1,28 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:_internal" as _in;
+
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  abstract method baz() → self::A::T%;
+  method bar(generic-covariant-impl self::A::T% value) → dynamic {}
+  method foo() → dynamic {
+    self::A::T? value;
+    core::bool #value#isSet = false;
+    function #value#get() → self::A::T%
+      return #value#isSet ?{self::A::T%} value{self::A::T%} : throw new _in::LateInitializationErrorImpl::•("Local 'value' has not been initialized.");
+    function #value#set(self::A::T% #t1) → dynamic {
+      #value#isSet = true;
+      return value = #t1;
+    }
+    () → dynamic result = () → dynamic => this.{self::A::bar}(#value#get.call());
+    (() → core::Null? {
+      #value#set.call(this.{self::A::baz}());
+    }).call();
+    return result;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart b/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart
index b06d748..31db7ec 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart
+++ b/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart
@@ -3,20 +3,36 @@
 // BSD-style license that can be found in the LICENSE file.
 
 main() {
+  bool b = false;
   late final int lateLocal;
 
+  if (b) {
+    // Pretend to assign to confuse flow analysis for the read below.
+    lateLocal = 123;
+  }
   throws(() => lateLocal, 'Read value from uninitialized lateLocal');
-  expect(123, lateLocal = 123);
-  expect(123, lateLocal);
+  if (!b) {
+    // Pretend to not assign to confuse flow analysis for the write below.
+    expect(123, lateLocal = 123);
+    expect(123, lateLocal);
+  }
   throws(() => lateLocal = 124, 'Write value to initialized lateLocal');
 
   local<T>(T value) {
     late final T lateGenericLocal;
 
+    if (b) {
+      // Pretend to assign to confuse flow analysis for the read below.
+      lateGenericLocal = value;
+    }
     throws(() => lateGenericLocal,
         'Read value from uninitialized lateGenericLocal');
-    expect(value, lateGenericLocal = value);
-    expect(value, lateGenericLocal);
+
+    if (!b) {
+      // Pretend to not assign to confuse flow analysis for the write below.
+      expect(value, lateGenericLocal = value);
+      expect(value, lateGenericLocal);
+    }
     throws(() => lateGenericLocal = value,
         'Write value to initialized lateGenericLocal');
   }
diff --git a/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.strong.expect b/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.strong.expect
index bb8676d..3476c20 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.strong.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.strong.expect
@@ -4,6 +4,7 @@
 import "dart:_internal" as _in;
 
 static method main() → dynamic {
+  core::bool b = false;
   final core::int? lateLocal;
   function #lateLocal#get() → core::int
     return let final core::int? #t1 = lateLocal in #t1.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'lateLocal' has not been initialized.") : #t1{core::int};
@@ -12,9 +13,14 @@
       return lateLocal = #t2;
     else
       throw new _in::LateInitializationErrorImpl::•("Local 'lateLocal' has already been initialized.");
+  if(b) {
+    #lateLocal#set.call(123);
+  }
   self::throws(() → core::int => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
-  self::expect(123, #lateLocal#set.call(123));
-  self::expect(123, #lateLocal#get.call());
+  if(!b) {
+    self::expect(123, #lateLocal#set.call(123));
+    self::expect(123, #lateLocal#get.call());
+  }
   self::throws(() → core::int => #lateLocal#set.call(124), "Write value to initialized lateLocal");
   function local<T extends core::Object? = dynamic>(T% value) → core::Null? {
     final T? lateGenericLocal;
@@ -28,9 +34,14 @@
         #lateGenericLocal#isSet = true;
         return lateGenericLocal = #t3;
       }
+    if(b) {
+      #lateGenericLocal#set.call(value);
+    }
     self::throws(() → T% => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
-    self::expect(value, #lateGenericLocal#set.call(value));
-    self::expect(value, #lateGenericLocal#get.call());
+    if(!b) {
+      self::expect(value, #lateGenericLocal#set.call(value));
+      self::expect(value, #lateGenericLocal#get.call());
+    }
     self::throws(() → T% => #lateGenericLocal#set.call(value), "Write value to initialized lateGenericLocal");
   }
   local.call<core::int?>(null);
diff --git a/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.strong.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.strong.transformed.expect
index bb8676d..3476c20 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.strong.transformed.expect
@@ -4,6 +4,7 @@
 import "dart:_internal" as _in;
 
 static method main() → dynamic {
+  core::bool b = false;
   final core::int? lateLocal;
   function #lateLocal#get() → core::int
     return let final core::int? #t1 = lateLocal in #t1.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'lateLocal' has not been initialized.") : #t1{core::int};
@@ -12,9 +13,14 @@
       return lateLocal = #t2;
     else
       throw new _in::LateInitializationErrorImpl::•("Local 'lateLocal' has already been initialized.");
+  if(b) {
+    #lateLocal#set.call(123);
+  }
   self::throws(() → core::int => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
-  self::expect(123, #lateLocal#set.call(123));
-  self::expect(123, #lateLocal#get.call());
+  if(!b) {
+    self::expect(123, #lateLocal#set.call(123));
+    self::expect(123, #lateLocal#get.call());
+  }
   self::throws(() → core::int => #lateLocal#set.call(124), "Write value to initialized lateLocal");
   function local<T extends core::Object? = dynamic>(T% value) → core::Null? {
     final T? lateGenericLocal;
@@ -28,9 +34,14 @@
         #lateGenericLocal#isSet = true;
         return lateGenericLocal = #t3;
       }
+    if(b) {
+      #lateGenericLocal#set.call(value);
+    }
     self::throws(() → T% => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
-    self::expect(value, #lateGenericLocal#set.call(value));
-    self::expect(value, #lateGenericLocal#get.call());
+    if(!b) {
+      self::expect(value, #lateGenericLocal#set.call(value));
+      self::expect(value, #lateGenericLocal#get.call());
+    }
     self::throws(() → T% => #lateGenericLocal#set.call(value), "Write value to initialized lateGenericLocal");
   }
   local.call<core::int?>(null);
diff --git a/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.weak.expect b/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.weak.expect
index bb8676d..3476c20 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.weak.expect
@@ -4,6 +4,7 @@
 import "dart:_internal" as _in;
 
 static method main() → dynamic {
+  core::bool b = false;
   final core::int? lateLocal;
   function #lateLocal#get() → core::int
     return let final core::int? #t1 = lateLocal in #t1.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'lateLocal' has not been initialized.") : #t1{core::int};
@@ -12,9 +13,14 @@
       return lateLocal = #t2;
     else
       throw new _in::LateInitializationErrorImpl::•("Local 'lateLocal' has already been initialized.");
+  if(b) {
+    #lateLocal#set.call(123);
+  }
   self::throws(() → core::int => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
-  self::expect(123, #lateLocal#set.call(123));
-  self::expect(123, #lateLocal#get.call());
+  if(!b) {
+    self::expect(123, #lateLocal#set.call(123));
+    self::expect(123, #lateLocal#get.call());
+  }
   self::throws(() → core::int => #lateLocal#set.call(124), "Write value to initialized lateLocal");
   function local<T extends core::Object? = dynamic>(T% value) → core::Null? {
     final T? lateGenericLocal;
@@ -28,9 +34,14 @@
         #lateGenericLocal#isSet = true;
         return lateGenericLocal = #t3;
       }
+    if(b) {
+      #lateGenericLocal#set.call(value);
+    }
     self::throws(() → T% => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
-    self::expect(value, #lateGenericLocal#set.call(value));
-    self::expect(value, #lateGenericLocal#get.call());
+    if(!b) {
+      self::expect(value, #lateGenericLocal#set.call(value));
+      self::expect(value, #lateGenericLocal#get.call());
+    }
     self::throws(() → T% => #lateGenericLocal#set.call(value), "Write value to initialized lateGenericLocal");
   }
   local.call<core::int?>(null);
diff --git a/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.weak.transformed.expect
index bb8676d..3476c20 100644
--- a/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/late_final_local_without_initializer.dart.weak.transformed.expect
@@ -4,6 +4,7 @@
 import "dart:_internal" as _in;
 
 static method main() → dynamic {
+  core::bool b = false;
   final core::int? lateLocal;
   function #lateLocal#get() → core::int
     return let final core::int? #t1 = lateLocal in #t1.==(null) ?{core::int} throw new _in::LateInitializationErrorImpl::•("Local 'lateLocal' has not been initialized.") : #t1{core::int};
@@ -12,9 +13,14 @@
       return lateLocal = #t2;
     else
       throw new _in::LateInitializationErrorImpl::•("Local 'lateLocal' has already been initialized.");
+  if(b) {
+    #lateLocal#set.call(123);
+  }
   self::throws(() → core::int => #lateLocal#get.call(), "Read value from uninitialized lateLocal");
-  self::expect(123, #lateLocal#set.call(123));
-  self::expect(123, #lateLocal#get.call());
+  if(!b) {
+    self::expect(123, #lateLocal#set.call(123));
+    self::expect(123, #lateLocal#get.call());
+  }
   self::throws(() → core::int => #lateLocal#set.call(124), "Write value to initialized lateLocal");
   function local<T extends core::Object? = dynamic>(T% value) → core::Null? {
     final T? lateGenericLocal;
@@ -28,9 +34,14 @@
         #lateGenericLocal#isSet = true;
         return lateGenericLocal = #t3;
       }
+    if(b) {
+      #lateGenericLocal#set.call(value);
+    }
     self::throws(() → T% => #lateGenericLocal#get.call(), "Read value from uninitialized lateGenericLocal");
-    self::expect(value, #lateGenericLocal#set.call(value));
-    self::expect(value, #lateGenericLocal#get.call());
+    if(!b) {
+      self::expect(value, #lateGenericLocal#set.call(value));
+      self::expect(value, #lateGenericLocal#get.call());
+    }
     self::throws(() → T% => #lateGenericLocal#set.call(value), "Write value to initialized lateGenericLocal");
   }
   local.call<core::int?>(null);
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.weak.expect b/pkg/front_end/testcases/late_lowering/later.dart.weak.expect
index c886bcf..4646abe 100644
--- a/pkg/front_end/testcases/late_lowering/later.dart.weak.expect
+++ b/pkg/front_end/testcases/late_lowering/later.dart.weak.expect
@@ -55,7 +55,7 @@
 //   late String s2 = '${fisk}${await hest()}${fisk}'; // Error.
 //                              ^^^^^
 //
-// pkg/front_end/testcases/late_lowering/later.dart:48:9: Warning: Constructor is marked 'const' and some fields are late.
+// pkg/front_end/testcases/late_lowering/later.dart:48:9: Error: Constructor is marked 'const' so fields can't be late.
 //   const B(); // Error: B has late final fields.
 //         ^
 // pkg/front_end/testcases/late_lowering/later.dart:46:18: Context: Field is late, but constructor is 'const'.
diff --git a/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect b/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect
index a7094a7..a0a1523 100644
--- a/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/late_lowering/later.dart.weak.transformed.expect
@@ -55,7 +55,7 @@
 //   late String s2 = '${fisk}${await hest()}${fisk}'; // Error.
 //                              ^^^^^
 //
-// pkg/front_end/testcases/late_lowering/later.dart:48:9: Warning: Constructor is marked 'const' and some fields are late.
+// pkg/front_end/testcases/late_lowering/later.dart:48:9: Error: Constructor is marked 'const' so fields can't be late.
 //   const B(); // Error: B has late final fields.
 //         ^
 // pkg/front_end/testcases/late_lowering/later.dart:46:18: Context: Field is late, but constructor is 'const'.
diff --git a/pkg/front_end/testcases/nnbd/assignability.dart.weak.expect b/pkg/front_end/testcases/nnbd/assignability.dart.weak.expect
index ddfc6a4..9c3d453 100644
--- a/pkg/front_end/testcases/nnbd/assignability.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/assignability.dart.weak.expect
@@ -2,94 +2,94 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:114:10: Warning: Assigning value of type 'Object?' to a variable of type 'Object'.
+// pkg/front_end/testcases/nnbd/assignability.dart:114:22: Error: A value of type 'Object?' can't be assigned to a variable of type 'Object'.
 //  - 'Object' is from 'dart:core'.
 //   Object objectVar = objectNullableArg;
-//          ^
+//                      ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:115:3: Warning: Assigning value of type 'num?' to a variable of type 'Object'.
+// pkg/front_end/testcases/nnbd/assignability.dart:115:15: Error: A value of type 'num?' can't be assigned to a variable of type 'Object'.
 //  - 'Object' is from 'dart:core'.
 //   objectVar = numNullableArg;
-//   ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:116:3: Warning: Assigning value of type 'int?' to a variable of type 'Object'.
+// pkg/front_end/testcases/nnbd/assignability.dart:116:15: Error: A value of type 'int?' can't be assigned to a variable of type 'Object'.
 //  - 'Object' is from 'dart:core'.
 //   objectVar = intNullableArg;
-//   ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:117:3: Warning: Assigning value of type 'double?' to a variable of type 'Object'.
+// pkg/front_end/testcases/nnbd/assignability.dart:117:15: Error: A value of type 'double?' can't be assigned to a variable of type 'Object'.
 //  - 'Object' is from 'dart:core'.
 //   objectVar = doubleNullableArg;
-//   ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:118:3: Warning: Assigning value of type 'Function?' to a variable of type 'Object'.
+// pkg/front_end/testcases/nnbd/assignability.dart:118:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'Object'.
 //  - 'Function' is from 'dart:core'.
 //  - 'Object' is from 'dart:core'.
 //   objectVar = functionNullableArg;
-//   ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:119:3: Warning: Assigning value of type 'void Function()?' to a variable of type 'Object'.
+// pkg/front_end/testcases/nnbd/assignability.dart:119:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Object'.
 //  - 'Object' is from 'dart:core'.
 //   objectVar = toVoidNullableArg;
-//   ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:120:3: Warning: Assigning value of type 'Tearoffable?' to a variable of type 'Object'.
+// pkg/front_end/testcases/nnbd/assignability.dart:120:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Object'.
 //  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
 //  - 'Object' is from 'dart:core'.
 //   objectVar = tearoffableNullableArg;
-//   ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:121:3: Warning: Assigning value of type 'XnonNull?' to a variable of type 'Object'.
+// pkg/front_end/testcases/nnbd/assignability.dart:121:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Object'.
 //  - 'Object' is from 'dart:core'.
 //   objectVar = xNonNullNullableArg;
-//   ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:122:3: Warning: Assigning value of type 'XpotentiallyNull' to a variable of type 'Object'.
+// pkg/front_end/testcases/nnbd/assignability.dart:122:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Object'.
 //  - 'Object' is from 'dart:core'.
 //   objectVar = xPotentiallyNullArg;
-//   ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:123:3: Warning: Assigning value of type 'XpotentiallyNull?' to a variable of type 'Object'.
+// pkg/front_end/testcases/nnbd/assignability.dart:123:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Object'.
 //  - 'Object' is from 'dart:core'.
 //   objectVar = xPotentiallyNullNullableArg;
-//   ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:124:3: Warning: Assigning value of type 'YnonNull?' to a variable of type 'Object'.
+// pkg/front_end/testcases/nnbd/assignability.dart:124:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Object'.
 //  - 'Object' is from 'dart:core'.
 //   objectVar = yNonNullNullableArg;
-//   ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:125:3: Warning: Assigning value of type 'YpotentiallyNull' to a variable of type 'Object'.
+// pkg/front_end/testcases/nnbd/assignability.dart:125:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Object'.
 //  - 'Object' is from 'dart:core'.
 //   objectVar = yPotentiallyNullArg;
-//   ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:126:3: Warning: Assigning value of type 'YpotentiallyNull?' to a variable of type 'Object'.
+// pkg/front_end/testcases/nnbd/assignability.dart:126:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Object'.
 //  - 'Object' is from 'dart:core'.
 //   objectVar = yPotentiallyNullNullableArg;
-//   ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:128:7: Warning: Assigning value of type 'Object' to a variable of type 'num'.
+// pkg/front_end/testcases/nnbd/assignability.dart:128:16: Error: A value of type 'Object' can't be assigned to a variable of type 'num'.
 //  - 'Object' is from 'dart:core'.
 //   num numVar = objectArg;
-//       ^
+//                ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:129:3: Warning: Assigning value of type 'Object?' to a variable of type 'num'.
+// pkg/front_end/testcases/nnbd/assignability.dart:129:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'num'.
 //  - 'Object' is from 'dart:core'.
 //   numVar = objectNullableArg;
-//   ^
+//            ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:130:3: Warning: Assigning value of type 'num?' to a variable of type 'num'.
+// pkg/front_end/testcases/nnbd/assignability.dart:130:12: Error: A value of type 'num?' can't be assigned to a variable of type 'num'.
 //   numVar = numNullableArg;
-//   ^
+//            ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:131:3: Warning: Assigning value of type 'int?' to a variable of type 'num'.
+// pkg/front_end/testcases/nnbd/assignability.dart:131:12: Error: A value of type 'int?' can't be assigned to a variable of type 'num'.
 //   numVar = intNullableArg;
-//   ^
+//            ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:132:3: Warning: Assigning value of type 'double?' to a variable of type 'num'.
+// pkg/front_end/testcases/nnbd/assignability.dart:132:12: Error: A value of type 'double?' can't be assigned to a variable of type 'num'.
 //   numVar = doubleNullableArg;
-//   ^
+//            ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:133:12: Error: A value of type 'Function' can't be assigned to a variable of type 'num'.
 //  - 'Function' is from 'dart:core'.
@@ -151,27 +151,27 @@
 //   numVar = yPotentiallyNullNullableArg;
 //            ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:148:7: Warning: Assigning value of type 'Object' to a variable of type 'int'.
+// pkg/front_end/testcases/nnbd/assignability.dart:148:16: Error: A value of type 'Object' can't be assigned to a variable of type 'int'.
 //  - 'Object' is from 'dart:core'.
 //   int intVar = objectArg;
-//       ^
+//                ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:149:3: Warning: Assigning value of type 'Object?' to a variable of type 'int'.
+// pkg/front_end/testcases/nnbd/assignability.dart:149:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'int'.
 //  - 'Object' is from 'dart:core'.
 //   intVar = objectNullableArg;
-//   ^
+//            ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:150:3: Warning: Assigning value of type 'num' to a variable of type 'int'.
+// pkg/front_end/testcases/nnbd/assignability.dart:150:12: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
 //   intVar = numArg;
-//   ^
+//            ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:151:3: Warning: Assigning value of type 'num?' to a variable of type 'int'.
+// pkg/front_end/testcases/nnbd/assignability.dart:151:12: Error: A value of type 'num?' can't be assigned to a variable of type 'int'.
 //   intVar = numNullableArg;
-//   ^
+//            ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:152:3: Warning: Assigning value of type 'int?' to a variable of type 'int'.
+// pkg/front_end/testcases/nnbd/assignability.dart:152:12: Error: A value of type 'int?' can't be assigned to a variable of type 'int'.
 //   intVar = intNullableArg;
-//   ^
+//            ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:153:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
 //   intVar = doubleArg;
@@ -241,23 +241,23 @@
 //   intVar = yPotentiallyNullNullableArg;
 //            ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:170:10: Warning: Assigning value of type 'Object' to a variable of type 'double'.
+// pkg/front_end/testcases/nnbd/assignability.dart:170:22: Error: A value of type 'Object' can't be assigned to a variable of type 'double'.
 //  - 'Object' is from 'dart:core'.
 //   double doubleVar = objectArg;
-//          ^
+//                      ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:171:3: Warning: Assigning value of type 'Object?' to a variable of type 'double'.
+// pkg/front_end/testcases/nnbd/assignability.dart:171:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'double'.
 //  - 'Object' is from 'dart:core'.
 //   doubleVar = objectNullableArg;
-//   ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:172:3: Warning: Assigning value of type 'num' to a variable of type 'double'.
+// pkg/front_end/testcases/nnbd/assignability.dart:172:15: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
 //   doubleVar = numArg;
-//   ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:173:3: Warning: Assigning value of type 'num?' to a variable of type 'double'.
+// pkg/front_end/testcases/nnbd/assignability.dart:173:15: Error: A value of type 'num?' can't be assigned to a variable of type 'double'.
 //   doubleVar = numNullableArg;
-//   ^
+//               ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:174:15: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
 //   doubleVar = intArg;
@@ -267,9 +267,9 @@
 //   doubleVar = intNullableArg;
 //               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:176:3: Warning: Assigning value of type 'double?' to a variable of type 'double'.
+// pkg/front_end/testcases/nnbd/assignability.dart:176:15: Error: A value of type 'double?' can't be assigned to a variable of type 'double'.
 //   doubleVar = doubleNullableArg;
-//   ^
+//               ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:177:15: Error: A value of type 'Function' can't be assigned to a variable of type 'double'.
 //  - 'Function' is from 'dart:core'.
@@ -331,17 +331,17 @@
 //   doubleVar = yPotentiallyNullNullableArg;
 //               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:192:12: Warning: Assigning value of type 'Object' to a variable of type 'Function'.
+// pkg/front_end/testcases/nnbd/assignability.dart:192:26: Error: A value of type 'Object' can't be assigned to a variable of type 'Function'.
 //  - 'Object' is from 'dart:core'.
 //  - 'Function' is from 'dart:core'.
 //   Function functionVar = objectArg;
-//            ^
+//                          ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:193:3: Warning: Assigning value of type 'Object?' to a variable of type 'Function'.
+// pkg/front_end/testcases/nnbd/assignability.dart:193:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'Function'.
 //  - 'Object' is from 'dart:core'.
 //  - 'Function' is from 'dart:core'.
 //   functionVar = objectNullableArg;
-//   ^
+//                 ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:194:17: Error: A value of type 'num' can't be assigned to a variable of type 'Function'.
 //  - 'Function' is from 'dart:core'.
@@ -373,17 +373,17 @@
 //   functionVar = doubleNullableArg;
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:200:3: Warning: Assigning value of type 'Function?' to a variable of type 'Function'.
+// pkg/front_end/testcases/nnbd/assignability.dart:200:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'Function'.
 //  - 'Function' is from 'dart:core'.
 //   functionVar = functionNullableArg;
-//   ^
+//                 ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:201:3: Warning: Assigning value of type 'void Function()?' to a variable of type 'Function'.
+// pkg/front_end/testcases/nnbd/assignability.dart:201:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Function'.
 //  - 'Function' is from 'dart:core'.
 //   functionVar = toVoidNullableArg;
-//   ^
+//                 ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:202:17: Warning: Tearing off method 'call' from a potentially null value.
+// pkg/front_end/testcases/nnbd/assignability.dart:202:17: Error: Can't tear off method 'call' from a potentially null value.
 //   functionVar = tearoffableNullableArg;
 //                 ^
 //
@@ -427,15 +427,15 @@
 //   functionVar = yPotentiallyNullNullableArg;
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:212:19: Warning: Assigning value of type 'Object' to a variable of type 'void Function()'.
+// pkg/front_end/testcases/nnbd/assignability.dart:212:31: Error: A value of type 'Object' can't be assigned to a variable of type 'void Function()'.
 //  - 'Object' is from 'dart:core'.
 //   void Function() toVoidVar = objectArg;
-//                   ^
+//                               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:213:3: Warning: Assigning value of type 'Object?' to a variable of type 'void Function()'.
+// pkg/front_end/testcases/nnbd/assignability.dart:213:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'void Function()'.
 //  - 'Object' is from 'dart:core'.
 //   toVoidVar = objectNullableArg;
-//   ^
+//               ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:214:15: Error: A value of type 'num' can't be assigned to a variable of type 'void Function()'.
 //   toVoidVar = numArg;
@@ -461,21 +461,21 @@
 //   toVoidVar = doubleNullableArg;
 //               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:220:3: Warning: Assigning value of type 'Function' to a variable of type 'void Function()'.
+// pkg/front_end/testcases/nnbd/assignability.dart:220:15: Error: A value of type 'Function' can't be assigned to a variable of type 'void Function()'.
 //  - 'Function' is from 'dart:core'.
 //   toVoidVar = functionArg;
-//   ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:221:3: Warning: Assigning value of type 'Function?' to a variable of type 'void Function()'.
+// pkg/front_end/testcases/nnbd/assignability.dart:221:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'void Function()'.
 //  - 'Function' is from 'dart:core'.
 //   toVoidVar = functionNullableArg;
-//   ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:222:3: Warning: Assigning value of type 'void Function()?' to a variable of type 'void Function()'.
+// pkg/front_end/testcases/nnbd/assignability.dart:222:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'void Function()'.
 //   toVoidVar = toVoidNullableArg;
-//   ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:223:15: Warning: Tearing off method 'call' from a potentially null value.
+// pkg/front_end/testcases/nnbd/assignability.dart:223:15: Error: Can't tear off method 'call' from a potentially null value.
 //   toVoidVar = tearoffableNullableArg;
 //               ^
 //
@@ -511,17 +511,17 @@
 //   toVoidVar = yPotentiallyNullNullableArg;
 //               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:233:15: Warning: Assigning value of type 'Object' to a variable of type 'Tearoffable'.
+// pkg/front_end/testcases/nnbd/assignability.dart:233:32: Error: A value of type 'Object' can't be assigned to a variable of type 'Tearoffable'.
 //  - 'Object' is from 'dart:core'.
 //  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
 //   Tearoffable tearoffableVar = objectArg;
-//               ^
+//                                ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:234:3: Warning: Assigning value of type 'Object?' to a variable of type 'Tearoffable'.
+// pkg/front_end/testcases/nnbd/assignability.dart:234:20: Error: A value of type 'Object?' can't be assigned to a variable of type 'Tearoffable'.
 //  - 'Object' is from 'dart:core'.
 //  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
 //   tearoffableVar = objectNullableArg;
-//   ^
+//                    ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:235:20: Error: A value of type 'num' can't be assigned to a variable of type 'Tearoffable'.
 //  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
@@ -575,10 +575,10 @@
 //   tearoffableVar = toVoidNullableArg;
 //                    ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:245:3: Warning: Assigning value of type 'Tearoffable?' to a variable of type 'Tearoffable'.
+// pkg/front_end/testcases/nnbd/assignability.dart:245:20: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Tearoffable'.
 //  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
 //   tearoffableVar = tearoffableNullableArg;
-//   ^
+//                    ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:246:20: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Tearoffable'.
 //  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
@@ -620,15 +620,15 @@
 //   tearoffableVar = yPotentiallyNullNullableArg;
 //                    ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:255:12: Warning: Assigning value of type 'Object' to a variable of type 'XnonNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:255:26: Error: A value of type 'Object' can't be assigned to a variable of type 'XnonNull'.
 //  - 'Object' is from 'dart:core'.
 //   XnonNull xNonNullVar = objectArg;
-//            ^
+//                          ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:256:3: Warning: Assigning value of type 'Object?' to a variable of type 'XnonNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:256:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'XnonNull'.
 //  - 'Object' is from 'dart:core'.
 //   xNonNullVar = objectNullableArg;
-//   ^
+//                 ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:257:17: Error: A value of type 'num' can't be assigned to a variable of type 'XnonNull'.
 //   xNonNullVar = numArg;
@@ -682,9 +682,9 @@
 //   xNonNullVar = tearoffableNullableArg;
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:269:3: Warning: Assigning value of type 'XnonNull?' to a variable of type 'XnonNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:269:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XnonNull'.
 //   xNonNullVar = xNonNullNullableArg;
-//   ^
+//                 ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:270:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
 //   xNonNullVar = xPotentiallyNullArg;
@@ -694,9 +694,9 @@
 //   xNonNullVar = xPotentiallyNullNullableArg;
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:272:3: Warning: Assigning value of type 'YnonNull?' to a variable of type 'XnonNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:272:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XnonNull'.
 //   xNonNullVar = yNonNullNullableArg;
-//   ^
+//                 ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:273:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
 //   xNonNullVar = yPotentiallyNullArg;
@@ -706,15 +706,15 @@
 //   xNonNullVar = yPotentiallyNullNullableArg;
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:276:20: Warning: Assigning value of type 'Object' to a variable of type 'XpotentiallyNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:276:42: Error: A value of type 'Object' can't be assigned to a variable of type 'XpotentiallyNull'.
 //  - 'Object' is from 'dart:core'.
 //   XpotentiallyNull xPotentiallyNullVar = objectArg;
-//                    ^
+//                                          ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:277:3: Warning: Assigning value of type 'Object?' to a variable of type 'XpotentiallyNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:277:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'XpotentiallyNull'.
 //  - 'Object' is from 'dart:core'.
 //   xPotentiallyNullVar = objectNullableArg;
-//   ^
+//                         ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:278:25: Error: A value of type 'num' can't be assigned to a variable of type 'XpotentiallyNull'.
 //   xPotentiallyNullVar = numArg;
@@ -776,9 +776,9 @@
 //   xPotentiallyNullVar = xNonNullNullableArg;
 //                         ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:292:3: Warning: Assigning value of type 'XpotentiallyNull?' to a variable of type 'XpotentiallyNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:292:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
 //   xPotentiallyNullVar = xPotentiallyNullNullableArg;
-//   ^
+//                         ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:293:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
 //   xPotentiallyNullVar = yNonNullArg;
@@ -788,19 +788,19 @@
 //   xPotentiallyNullVar = yNonNullNullableArg;
 //                         ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:295:3: Warning: Assigning value of type 'YpotentiallyNull?' to a variable of type 'XpotentiallyNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:295:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
 //   xPotentiallyNullVar = yPotentiallyNullNullableArg;
-//   ^
+//                         ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:297:12: Warning: Assigning value of type 'Object' to a variable of type 'YnonNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:297:26: Error: A value of type 'Object' can't be assigned to a variable of type 'YnonNull'.
 //  - 'Object' is from 'dart:core'.
 //   YnonNull yNonNullVar = objectArg;
-//            ^
+//                          ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:298:3: Warning: Assigning value of type 'Object?' to a variable of type 'YnonNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:298:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'YnonNull'.
 //  - 'Object' is from 'dart:core'.
 //   yNonNullVar = objectNullableArg;
-//   ^
+//                 ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:299:17: Error: A value of type 'num' can't be assigned to a variable of type 'YnonNull'.
 //   yNonNullVar = numArg;
@@ -854,13 +854,13 @@
 //   yNonNullVar = tearoffableNullableArg;
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:311:3: Warning: Assigning value of type 'XnonNull' to a variable of type 'YnonNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:311:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YnonNull'.
 //   yNonNullVar = xNonNullArg;
-//   ^
+//                 ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:312:3: Warning: Assigning value of type 'XnonNull?' to a variable of type 'YnonNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:312:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YnonNull'.
 //   yNonNullVar = xNonNullNullableArg;
-//   ^
+//                 ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:313:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
 //   yNonNullVar = xPotentiallyNullArg;
@@ -870,9 +870,9 @@
 //   yNonNullVar = xPotentiallyNullNullableArg;
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:315:3: Warning: Assigning value of type 'YnonNull?' to a variable of type 'YnonNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:315:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YnonNull'.
 //   yNonNullVar = yNonNullNullableArg;
-//   ^
+//                 ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:316:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
 //   yNonNullVar = yPotentiallyNullArg;
@@ -882,15 +882,15 @@
 //   yNonNullVar = yPotentiallyNullNullableArg;
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:319:20: Warning: Assigning value of type 'Object' to a variable of type 'YpotentiallyNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:319:42: Error: A value of type 'Object' can't be assigned to a variable of type 'YpotentiallyNull'.
 //  - 'Object' is from 'dart:core'.
 //   YpotentiallyNull yPotentiallyNullVar = objectArg;
-//                    ^
+//                                          ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:320:3: Warning: Assigning value of type 'Object?' to a variable of type 'YpotentiallyNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:320:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'YpotentiallyNull'.
 //  - 'Object' is from 'dart:core'.
 //   yPotentiallyNullVar = objectNullableArg;
-//   ^
+//                         ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:321:25: Error: A value of type 'num' can't be assigned to a variable of type 'YpotentiallyNull'.
 //   yPotentiallyNullVar = numArg;
@@ -952,13 +952,13 @@
 //   yPotentiallyNullVar = xNonNullNullableArg;
 //                         ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:335:3: Warning: Assigning value of type 'XpotentiallyNull' to a variable of type 'YpotentiallyNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:335:25: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YpotentiallyNull'.
 //   yPotentiallyNullVar = xPotentiallyNullArg;
-//   ^
+//                         ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:336:3: Warning: Assigning value of type 'XpotentiallyNull?' to a variable of type 'YpotentiallyNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:336:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
 //   yPotentiallyNullVar = xPotentiallyNullNullableArg;
-//   ^
+//                         ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:337:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
 //   yPotentiallyNullVar = yNonNullArg;
@@ -968,9 +968,9 @@
 //   yPotentiallyNullVar = yNonNullNullableArg;
 //                         ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:339:3: Warning: Assigning value of type 'YpotentiallyNull?' to a variable of type 'YpotentiallyNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:339:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
 //   yPotentiallyNullVar = yPotentiallyNullNullableArg;
-//   ^
+//                         ^
 //
 import self as self;
 import "dart:core" as core;
@@ -994,7 +994,7 @@
   dynamicVar = xPotentiallyNullArg;
   dynamicVar = yNonNullArg;
   dynamicVar = yPotentiallyNullArg;
-  core::Object objectVar = dynamicArg;
+  core::Object objectVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::Object;
   objectVar = objectArg;
   objectVar = numArg;
   objectVar = intArg;
@@ -1032,595 +1032,759 @@
   yPotentiallyNullVar = yPotentiallyNullArg;
 }
 static method error<XnonNull extends core::Object = core::Object, YnonNull extends self::error::XnonNull = core::Object, XpotentiallyNull extends core::Object? = core::Object?, YpotentiallyNull extends self::error::XpotentiallyNull% = core::Object?>(core::Object objectArg, core::Object? objectNullableArg, core::num numArg, core::num? numNullableArg, core::int intArg, core::int? intNullableArg, core::double doubleArg, core::double? doubleNullableArg, core::Function functionArg, core::Function? functionNullableArg, () → void toVoidArg, () →? void toVoidNullableArg, self::Tearoffable tearoffableArg, self::Tearoffable? tearoffableNullableArg, self::error::XnonNull xNonNullArg, self::error::XnonNull? xNonNullNullableArg, self::error::XpotentiallyNull% xPotentiallyNullArg, self::error::XpotentiallyNull? xPotentiallyNullNullableArg, self::error::YnonNull yNonNullArg, self::error::YnonNull? yNonNullNullableArg, self::error::YpotentiallyNull% yPotentiallyNullArg, self::error::YpotentiallyNull? yPotentiallyNullNullableArg) → dynamic {
-  core::Object objectVar = objectNullableArg;
+  core::Object objectVar = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:114:22: Error: A value of type 'Object?' can't be assigned to a variable of type 'Object'.
+ - 'Object' is from 'dart:core'.
+  Object objectVar = objectNullableArg;
+                     ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:115:15: Error: A value of type 'num?' can't be assigned to a variable of type 'Object'.
+ - 'Object' is from 'dart:core'.
   objectVar = numNullableArg;
+              ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:116:15: Error: A value of type 'int?' can't be assigned to a variable of type 'Object'.
+ - 'Object' is from 'dart:core'.
   objectVar = intNullableArg;
+              ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:117:15: Error: A value of type 'double?' can't be assigned to a variable of type 'Object'.
+ - 'Object' is from 'dart:core'.
   objectVar = doubleNullableArg;
+              ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:118:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'Object'.
+ - 'Function' is from 'dart:core'.
+ - 'Object' is from 'dart:core'.
   objectVar = functionNullableArg;
+              ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:119:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Object'.
+ - 'Object' is from 'dart:core'.
   objectVar = toVoidNullableArg;
+              ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:120:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Object'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+ - 'Object' is from 'dart:core'.
   objectVar = tearoffableNullableArg;
+              ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:121:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Object'.
+ - 'Object' is from 'dart:core'.
   objectVar = xNonNullNullableArg;
+              ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:122:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Object'.
+ - 'Object' is from 'dart:core'.
   objectVar = xPotentiallyNullArg;
+              ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:123:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Object'.
+ - 'Object' is from 'dart:core'.
   objectVar = xPotentiallyNullNullableArg;
+              ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:124:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Object'.
+ - 'Object' is from 'dart:core'.
   objectVar = yNonNullNullableArg;
+              ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:125:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Object'.
+ - 'Object' is from 'dart:core'.
   objectVar = yPotentiallyNullArg;
+              ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:126:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Object'.
+ - 'Object' is from 'dart:core'.
   objectVar = yPotentiallyNullNullableArg;
-  core::num numVar = objectArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = objectNullableArg as{TypeError,ForNonNullableByDefault} core::num;
+              ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
+  core::num numVar = let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:128:16: Error: A value of type 'Object' can't be assigned to a variable of type 'num'.
+ - 'Object' is from 'dart:core'.
+  num numVar = objectArg;
+               ^" in objectArg as{TypeError,ForNonNullableByDefault} core::num;
+  numVar = let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:129:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'num'.
+ - 'Object' is from 'dart:core'.
+  numVar = objectNullableArg;
+           ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::num;
+  numVar = let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:130:12: Error: A value of type 'num?' can't be assigned to a variable of type 'num'.
   numVar = numNullableArg;
+           ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::num;
+  numVar = let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:131:12: Error: A value of type 'int?' can't be assigned to a variable of type 'num'.
   numVar = intNullableArg;
+           ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::num;
+  numVar = let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:132:12: Error: A value of type 'double?' can't be assigned to a variable of type 'num'.
   numVar = doubleNullableArg;
-  numVar = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:133:12: Error: A value of type 'Function' can't be assigned to a variable of type 'num'.
+           ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::num;
+  numVar = let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:133:12: Error: A value of type 'Function' can't be assigned to a variable of type 'num'.
  - 'Function' is from 'dart:core'.
   numVar = functionArg;
            ^" in functionArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:134:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'num'.
+  numVar = let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:134:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'num'.
  - 'Function' is from 'dart:core'.
   numVar = functionNullableArg;
            ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:135:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'num'.
+  numVar = let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:135:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'num'.
   numVar = toVoidArg;
            ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:136:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'num'.
+  numVar = let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:136:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'num'.
   numVar = toVoidNullableArg;
            ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:137:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'num'.
+  numVar = let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:137:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'num'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   numVar = tearoffableArg;
            ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:138:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'num'.
+  numVar = let final<BottomType> #t26 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:138:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'num'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   numVar = tearoffableNullableArg;
            ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:139:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'num'.
+  numVar = let final<BottomType> #t27 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:139:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'num'.
   numVar = xNonNullArg;
            ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:140:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'num'.
+  numVar = let final<BottomType> #t28 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:140:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'num'.
   numVar = xNonNullNullableArg;
            ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:141:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'num'.
+  numVar = let final<BottomType> #t29 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:141:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'num'.
   numVar = xPotentiallyNullArg;
            ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:142:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'num'.
+  numVar = let final<BottomType> #t30 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:142:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'num'.
   numVar = xPotentiallyNullNullableArg;
            ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:143:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'num'.
+  numVar = let final<BottomType> #t31 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:143:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'num'.
   numVar = yNonNullArg;
            ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:144:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'num'.
+  numVar = let final<BottomType> #t32 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:144:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'num'.
   numVar = yNonNullNullableArg;
            ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:145:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'num'.
+  numVar = let final<BottomType> #t33 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:145:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'num'.
   numVar = yPotentiallyNullArg;
            ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:146:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'num'.
+  numVar = let final<BottomType> #t34 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:146:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'num'.
   numVar = yPotentiallyNullNullableArg;
            ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  core::int intVar = objectArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = objectNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = numArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = numNullableArg as{TypeError,ForNonNullableByDefault} core::int;
+  core::int intVar = let final<BottomType> #t35 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:148:16: Error: A value of type 'Object' can't be assigned to a variable of type 'int'.
+ - 'Object' is from 'dart:core'.
+  int intVar = objectArg;
+               ^" in objectArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = let final<BottomType> #t36 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:149:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'int'.
+ - 'Object' is from 'dart:core'.
+  intVar = objectNullableArg;
+           ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = let final<BottomType> #t37 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:150:12: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  intVar = numArg;
+           ^" in numArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = let final<BottomType> #t38 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:151:12: Error: A value of type 'num?' can't be assigned to a variable of type 'int'.
+  intVar = numNullableArg;
+           ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = let final<BottomType> #t39 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:152:12: Error: A value of type 'int?' can't be assigned to a variable of type 'int'.
   intVar = intNullableArg;
-  intVar = let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:153:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+           ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = let final<BottomType> #t40 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:153:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   intVar = doubleArg;
            ^" in doubleArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:154:12: Error: A value of type 'double?' can't be assigned to a variable of type 'int'.
+  intVar = let final<BottomType> #t41 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:154:12: Error: A value of type 'double?' can't be assigned to a variable of type 'int'.
   intVar = doubleNullableArg;
            ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:155:12: Error: A value of type 'Function' can't be assigned to a variable of type 'int'.
+  intVar = let final<BottomType> #t42 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:155:12: Error: A value of type 'Function' can't be assigned to a variable of type 'int'.
  - 'Function' is from 'dart:core'.
   intVar = functionArg;
            ^" in functionArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:156:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'int'.
+  intVar = let final<BottomType> #t43 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:156:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'int'.
  - 'Function' is from 'dart:core'.
   intVar = functionNullableArg;
            ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:157:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'int'.
+  intVar = let final<BottomType> #t44 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:157:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'int'.
   intVar = toVoidArg;
            ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:158:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'int'.
+  intVar = let final<BottomType> #t45 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:158:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'int'.
   intVar = toVoidNullableArg;
            ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:159:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'int'.
+  intVar = let final<BottomType> #t46 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:159:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'int'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   intVar = tearoffableArg;
            ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:160:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'int'.
+  intVar = let final<BottomType> #t47 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:160:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'int'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   intVar = tearoffableNullableArg;
            ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:161:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'int'.
+  intVar = let final<BottomType> #t48 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:161:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'int'.
   intVar = xNonNullArg;
            ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final<BottomType> #t26 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:162:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'int'.
+  intVar = let final<BottomType> #t49 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:162:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'int'.
   intVar = xNonNullNullableArg;
            ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final<BottomType> #t27 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:163:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'int'.
+  intVar = let final<BottomType> #t50 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:163:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'int'.
   intVar = xPotentiallyNullArg;
            ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final<BottomType> #t28 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:164:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'int'.
+  intVar = let final<BottomType> #t51 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:164:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'int'.
   intVar = xPotentiallyNullNullableArg;
            ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final<BottomType> #t29 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:165:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'int'.
+  intVar = let final<BottomType> #t52 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:165:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'int'.
   intVar = yNonNullArg;
            ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final<BottomType> #t30 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:166:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'int'.
+  intVar = let final<BottomType> #t53 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:166:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'int'.
   intVar = yNonNullNullableArg;
            ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final<BottomType> #t31 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:167:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'int'.
+  intVar = let final<BottomType> #t54 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:167:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'int'.
   intVar = yPotentiallyNullArg;
            ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final<BottomType> #t32 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:168:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'int'.
+  intVar = let final<BottomType> #t55 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:168:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'int'.
   intVar = yPotentiallyNullNullableArg;
            ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  core::double doubleVar = objectArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = objectNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = numArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = numNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final<BottomType> #t33 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:174:15: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+  core::double doubleVar = let final<BottomType> #t56 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:170:22: Error: A value of type 'Object' can't be assigned to a variable of type 'double'.
+ - 'Object' is from 'dart:core'.
+  double doubleVar = objectArg;
+                     ^" in objectArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = let final<BottomType> #t57 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:171:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'double'.
+ - 'Object' is from 'dart:core'.
+  doubleVar = objectNullableArg;
+              ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = let final<BottomType> #t58 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:172:15: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
+  doubleVar = numArg;
+              ^" in numArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = let final<BottomType> #t59 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:173:15: Error: A value of type 'num?' can't be assigned to a variable of type 'double'.
+  doubleVar = numNullableArg;
+              ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = let final<BottomType> #t60 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:174:15: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
   doubleVar = intArg;
               ^" in intArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final<BottomType> #t34 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:175:15: Error: A value of type 'int?' can't be assigned to a variable of type 'double'.
+  doubleVar = let final<BottomType> #t61 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:175:15: Error: A value of type 'int?' can't be assigned to a variable of type 'double'.
   doubleVar = intNullableArg;
               ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = let final<BottomType> #t62 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:176:15: Error: A value of type 'double?' can't be assigned to a variable of type 'double'.
   doubleVar = doubleNullableArg;
-  doubleVar = let final<BottomType> #t35 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:177:15: Error: A value of type 'Function' can't be assigned to a variable of type 'double'.
+              ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = let final<BottomType> #t63 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:177:15: Error: A value of type 'Function' can't be assigned to a variable of type 'double'.
  - 'Function' is from 'dart:core'.
   doubleVar = functionArg;
               ^" in functionArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final<BottomType> #t36 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:178:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'double'.
+  doubleVar = let final<BottomType> #t64 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:178:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'double'.
  - 'Function' is from 'dart:core'.
   doubleVar = functionNullableArg;
               ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final<BottomType> #t37 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:179:15: Error: A value of type 'void Function()' can't be assigned to a variable of type 'double'.
+  doubleVar = let final<BottomType> #t65 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:179:15: Error: A value of type 'void Function()' can't be assigned to a variable of type 'double'.
   doubleVar = toVoidArg;
               ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final<BottomType> #t38 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:180:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'double'.
+  doubleVar = let final<BottomType> #t66 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:180:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'double'.
   doubleVar = toVoidNullableArg;
               ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final<BottomType> #t39 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:181:15: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'double'.
+  doubleVar = let final<BottomType> #t67 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:181:15: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'double'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   doubleVar = tearoffableArg;
               ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final<BottomType> #t40 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:182:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'double'.
+  doubleVar = let final<BottomType> #t68 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:182:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'double'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   doubleVar = tearoffableNullableArg;
               ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final<BottomType> #t41 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:183:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'double'.
+  doubleVar = let final<BottomType> #t69 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:183:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'double'.
   doubleVar = xNonNullArg;
               ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final<BottomType> #t42 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:184:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'double'.
+  doubleVar = let final<BottomType> #t70 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:184:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'double'.
   doubleVar = xNonNullNullableArg;
               ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final<BottomType> #t43 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:185:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'double'.
+  doubleVar = let final<BottomType> #t71 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:185:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'double'.
   doubleVar = xPotentiallyNullArg;
               ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final<BottomType> #t44 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:186:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'double'.
+  doubleVar = let final<BottomType> #t72 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:186:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'double'.
   doubleVar = xPotentiallyNullNullableArg;
               ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final<BottomType> #t45 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:187:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'double'.
+  doubleVar = let final<BottomType> #t73 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:187:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'double'.
   doubleVar = yNonNullArg;
               ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final<BottomType> #t46 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:188:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'double'.
+  doubleVar = let final<BottomType> #t74 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:188:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'double'.
   doubleVar = yNonNullNullableArg;
               ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final<BottomType> #t47 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:189:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'double'.
+  doubleVar = let final<BottomType> #t75 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:189:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'double'.
   doubleVar = yPotentiallyNullArg;
               ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final<BottomType> #t48 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:190:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'double'.
+  doubleVar = let final<BottomType> #t76 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:190:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'double'.
   doubleVar = yPotentiallyNullNullableArg;
               ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  core::Function functionVar = objectArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = objectNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final<BottomType> #t49 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:194:17: Error: A value of type 'num' can't be assigned to a variable of type 'Function'.
+  core::Function functionVar = let final<BottomType> #t77 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:192:26: Error: A value of type 'Object' can't be assigned to a variable of type 'Function'.
+ - 'Object' is from 'dart:core'.
+ - 'Function' is from 'dart:core'.
+  Function functionVar = objectArg;
+                         ^" in objectArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t78 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:193:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'Function'.
+ - 'Object' is from 'dart:core'.
+ - 'Function' is from 'dart:core'.
+  functionVar = objectNullableArg;
+                ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t79 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:194:17: Error: A value of type 'num' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = numArg;
                 ^" in numArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final<BottomType> #t50 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:195:17: Error: A value of type 'num?' can't be assigned to a variable of type 'Function'.
+  functionVar = let final<BottomType> #t80 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:195:17: Error: A value of type 'num?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = numNullableArg;
                 ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final<BottomType> #t51 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:196:17: Error: A value of type 'int' can't be assigned to a variable of type 'Function'.
+  functionVar = let final<BottomType> #t81 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:196:17: Error: A value of type 'int' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = intArg;
                 ^" in intArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final<BottomType> #t52 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:197:17: Error: A value of type 'int?' can't be assigned to a variable of type 'Function'.
+  functionVar = let final<BottomType> #t82 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:197:17: Error: A value of type 'int?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = intNullableArg;
                 ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final<BottomType> #t53 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:198:17: Error: A value of type 'double' can't be assigned to a variable of type 'Function'.
+  functionVar = let final<BottomType> #t83 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:198:17: Error: A value of type 'double' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = doubleArg;
                 ^" in doubleArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final<BottomType> #t54 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:199:17: Error: A value of type 'double?' can't be assigned to a variable of type 'Function'.
+  functionVar = let final<BottomType> #t84 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:199:17: Error: A value of type 'double?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = doubleNullableArg;
                 ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t85 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:200:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'Function'.
+ - 'Function' is from 'dart:core'.
   functionVar = functionNullableArg;
+                ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t86 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:201:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Function'.
+ - 'Function' is from 'dart:core'.
   functionVar = toVoidNullableArg;
-  functionVar = tearoffableNullableArg as{TypeError} core::Function;
-  functionVar = let final<BottomType> #t55 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:203:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Function'.
+                ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t87 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:202:17: Error: Can't tear off method 'call' from a potentially null value.
+  functionVar = tearoffableNullableArg;
+                ^" in tearoffableNullableArg as{TypeError} core::Function;
+  functionVar = let final<BottomType> #t88 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:203:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xNonNullArg;
                 ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final<BottomType> #t56 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:204:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Function'.
+  functionVar = let final<BottomType> #t89 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:204:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xNonNullNullableArg;
                 ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final<BottomType> #t57 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:205:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Function'.
+  functionVar = let final<BottomType> #t90 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:205:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xPotentiallyNullArg;
                 ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final<BottomType> #t58 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:206:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Function'.
+  functionVar = let final<BottomType> #t91 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:206:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xPotentiallyNullNullableArg;
                 ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final<BottomType> #t59 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:207:17: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Function'.
+  functionVar = let final<BottomType> #t92 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:207:17: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yNonNullArg;
                 ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final<BottomType> #t60 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:208:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Function'.
+  functionVar = let final<BottomType> #t93 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:208:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yNonNullNullableArg;
                 ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final<BottomType> #t61 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:209:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Function'.
+  functionVar = let final<BottomType> #t94 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:209:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yPotentiallyNullArg;
                 ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final<BottomType> #t62 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:210:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Function'.
+  functionVar = let final<BottomType> #t95 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:210:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yPotentiallyNullNullableArg;
                 ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  () → void toVoidVar = objectArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = objectNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final<BottomType> #t63 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:214:15: Error: A value of type 'num' can't be assigned to a variable of type 'void Function()'.
+  () → void toVoidVar = let final<BottomType> #t96 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:212:31: Error: A value of type 'Object' can't be assigned to a variable of type 'void Function()'.
+ - 'Object' is from 'dart:core'.
+  void Function() toVoidVar = objectArg;
+                              ^" in objectArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t97 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:213:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'void Function()'.
+ - 'Object' is from 'dart:core'.
+  toVoidVar = objectNullableArg;
+              ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t98 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:214:15: Error: A value of type 'num' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = numArg;
               ^" in numArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final<BottomType> #t64 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:215:15: Error: A value of type 'num?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = let final<BottomType> #t99 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:215:15: Error: A value of type 'num?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = numNullableArg;
               ^" in numNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final<BottomType> #t65 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:216:15: Error: A value of type 'int' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = let final<BottomType> #t100 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:216:15: Error: A value of type 'int' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = intArg;
               ^" in intArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final<BottomType> #t66 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:217:15: Error: A value of type 'int?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = let final<BottomType> #t101 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:217:15: Error: A value of type 'int?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = intNullableArg;
               ^" in intNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final<BottomType> #t67 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:218:15: Error: A value of type 'double' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = let final<BottomType> #t102 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:218:15: Error: A value of type 'double' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = doubleArg;
               ^" in doubleArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final<BottomType> #t68 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:219:15: Error: A value of type 'double?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = let final<BottomType> #t103 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:219:15: Error: A value of type 'double?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = doubleNullableArg;
               ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = functionArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = functionNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t104 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:220:15: Error: A value of type 'Function' can't be assigned to a variable of type 'void Function()'.
+ - 'Function' is from 'dart:core'.
+  toVoidVar = functionArg;
+              ^" in functionArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t105 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:221:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'void Function()'.
+ - 'Function' is from 'dart:core'.
+  toVoidVar = functionNullableArg;
+              ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t106 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:222:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = toVoidNullableArg;
-  toVoidVar = tearoffableNullableArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t69 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:224:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'void Function()'.
+              ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t107 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:223:15: Error: Can't tear off method 'call' from a potentially null value.
+  toVoidVar = tearoffableNullableArg;
+              ^" in tearoffableNullableArg as{TypeError} () → void;
+  toVoidVar = let final<BottomType> #t108 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:224:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xNonNullArg;
               ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final<BottomType> #t70 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:225:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = let final<BottomType> #t109 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:225:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xNonNullNullableArg;
               ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final<BottomType> #t71 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:226:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = let final<BottomType> #t110 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:226:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xPotentiallyNullArg;
               ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final<BottomType> #t72 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:227:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = let final<BottomType> #t111 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:227:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xPotentiallyNullNullableArg;
               ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final<BottomType> #t73 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:228:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = let final<BottomType> #t112 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:228:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yNonNullArg;
               ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final<BottomType> #t74 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:229:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = let final<BottomType> #t113 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:229:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yNonNullNullableArg;
               ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final<BottomType> #t75 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:230:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = let final<BottomType> #t114 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:230:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yPotentiallyNullArg;
               ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final<BottomType> #t76 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:231:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = let final<BottomType> #t115 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:231:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yPotentiallyNullNullableArg;
               ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  self::Tearoffable tearoffableVar = objectArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = objectNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t77 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:235:20: Error: A value of type 'num' can't be assigned to a variable of type 'Tearoffable'.
+  self::Tearoffable tearoffableVar = let final<BottomType> #t116 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:233:32: Error: A value of type 'Object' can't be assigned to a variable of type 'Tearoffable'.
+ - 'Object' is from 'dart:core'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  Tearoffable tearoffableVar = objectArg;
+                               ^" in objectArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t117 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:234:20: Error: A value of type 'Object?' can't be assigned to a variable of type 'Tearoffable'.
+ - 'Object' is from 'dart:core'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  tearoffableVar = objectNullableArg;
+                   ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t118 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:235:20: Error: A value of type 'num' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = numArg;
                    ^" in numArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t78 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:236:20: Error: A value of type 'num?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = let final<BottomType> #t119 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:236:20: Error: A value of type 'num?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = numNullableArg;
                    ^" in numNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t79 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:237:20: Error: A value of type 'int' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = let final<BottomType> #t120 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:237:20: Error: A value of type 'int' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = intArg;
                    ^" in intArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t80 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:238:20: Error: A value of type 'int?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = let final<BottomType> #t121 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:238:20: Error: A value of type 'int?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = intNullableArg;
                    ^" in intNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t81 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:239:20: Error: A value of type 'double' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = let final<BottomType> #t122 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:239:20: Error: A value of type 'double' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = doubleArg;
                    ^" in doubleArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t82 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:240:20: Error: A value of type 'double?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = let final<BottomType> #t123 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:240:20: Error: A value of type 'double?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = doubleNullableArg;
                    ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t83 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:241:20: Error: A value of type 'Function' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = let final<BottomType> #t124 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:241:20: Error: A value of type 'Function' can't be assigned to a variable of type 'Tearoffable'.
  - 'Function' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = functionArg;
                    ^" in functionArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t84 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:242:20: Error: A value of type 'Function?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = let final<BottomType> #t125 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:242:20: Error: A value of type 'Function?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Function' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = functionNullableArg;
                    ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t85 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:243:20: Error: A value of type 'void Function()' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = let final<BottomType> #t126 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:243:20: Error: A value of type 'void Function()' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = toVoidArg;
                    ^" in toVoidArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t86 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:244:20: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = let final<BottomType> #t127 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:244:20: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = toVoidNullableArg;
                    ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t128 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:245:20: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Tearoffable'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = tearoffableNullableArg;
-  tearoffableVar = let final<BottomType> #t87 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:246:20: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t129 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:246:20: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xNonNullArg;
                    ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t88 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:247:20: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = let final<BottomType> #t130 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:247:20: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xNonNullNullableArg;
                    ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t89 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:248:20: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = let final<BottomType> #t131 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:248:20: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xPotentiallyNullArg;
                    ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t90 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:249:20: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = let final<BottomType> #t132 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:249:20: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xPotentiallyNullNullableArg;
                    ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t91 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:250:20: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = let final<BottomType> #t133 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:250:20: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yNonNullArg;
                    ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t92 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:251:20: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = let final<BottomType> #t134 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:251:20: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yNonNullNullableArg;
                    ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t93 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:252:20: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = let final<BottomType> #t135 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:252:20: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yPotentiallyNullArg;
                    ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t94 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:253:20: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = let final<BottomType> #t136 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:253:20: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yPotentiallyNullNullableArg;
                    ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  self::error::XnonNull xNonNullVar = objectArg as{TypeError,ForNonNullableByDefault} self::error::XnonNull;
-  xNonNullVar = objectNullableArg as{TypeError,ForNonNullableByDefault} self::error::XnonNull;
-  xNonNullVar = let final<BottomType> #t95 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:257:17: Error: A value of type 'num' can't be assigned to a variable of type 'XnonNull'.
+  self::error::XnonNull xNonNullVar = let final<BottomType> #t137 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:255:26: Error: A value of type 'Object' can't be assigned to a variable of type 'XnonNull'.
+ - 'Object' is from 'dart:core'.
+  XnonNull xNonNullVar = objectArg;
+                         ^" in objectArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t138 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:256:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'XnonNull'.
+ - 'Object' is from 'dart:core'.
+  xNonNullVar = objectNullableArg;
+                ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t139 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:257:17: Error: A value of type 'num' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = numArg;
                 ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xNonNullVar = let final<BottomType> #t96 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:258:17: Error: A value of type 'num?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = let final<BottomType> #t140 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:258:17: Error: A value of type 'num?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = numNullableArg;
                 ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xNonNullVar = let final<BottomType> #t97 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:259:17: Error: A value of type 'int' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = let final<BottomType> #t141 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:259:17: Error: A value of type 'int' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = intArg;
                 ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xNonNullVar = let final<BottomType> #t98 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:260:17: Error: A value of type 'int?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = let final<BottomType> #t142 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:260:17: Error: A value of type 'int?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = intNullableArg;
                 ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xNonNullVar = let final<BottomType> #t99 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:261:17: Error: A value of type 'double' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = let final<BottomType> #t143 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:261:17: Error: A value of type 'double' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = doubleArg;
                 ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xNonNullVar = let final<BottomType> #t100 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:262:17: Error: A value of type 'double?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = let final<BottomType> #t144 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:262:17: Error: A value of type 'double?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = doubleNullableArg;
                 ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xNonNullVar = let final<BottomType> #t101 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:263:17: Error: A value of type 'Function' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = let final<BottomType> #t145 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:263:17: Error: A value of type 'Function' can't be assigned to a variable of type 'XnonNull'.
  - 'Function' is from 'dart:core'.
   xNonNullVar = functionArg;
                 ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xNonNullVar = let final<BottomType> #t102 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:264:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = let final<BottomType> #t146 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:264:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'XnonNull'.
  - 'Function' is from 'dart:core'.
   xNonNullVar = functionNullableArg;
                 ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xNonNullVar = let final<BottomType> #t103 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:265:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = let final<BottomType> #t147 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:265:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = toVoidArg;
                 ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xNonNullVar = let final<BottomType> #t104 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:266:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = let final<BottomType> #t148 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:266:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = toVoidNullableArg;
                 ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xNonNullVar = let final<BottomType> #t105 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:267:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = let final<BottomType> #t149 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:267:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xNonNullVar = tearoffableArg;
                 ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xNonNullVar = let final<BottomType> #t106 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:268:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = let final<BottomType> #t150 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:268:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xNonNullVar = tearoffableNullableArg;
                 ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t151 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:269:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = xNonNullNullableArg;
-  xNonNullVar = let final<BottomType> #t107 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:270:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
+                ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t152 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:270:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = xPotentiallyNullArg;
                 ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xNonNullVar = let final<BottomType> #t108 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:271:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = let final<BottomType> #t153 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:271:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = xPotentiallyNullNullableArg;
                 ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t154 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:272:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = yNonNullNullableArg;
-  xNonNullVar = let final<BottomType> #t109 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:273:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
+                ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t155 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:273:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = yPotentiallyNullArg;
                 ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xNonNullVar = let final<BottomType> #t110 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:274:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = let final<BottomType> #t156 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:274:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = yPotentiallyNullNullableArg;
                 ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  self::error::XpotentiallyNull% xPotentiallyNullVar = objectArg as{TypeError,ForNonNullableByDefault} self::error::XpotentiallyNull%;
-  xPotentiallyNullVar = objectNullableArg as{TypeError,ForNonNullableByDefault} self::error::XpotentiallyNull%;
-  xPotentiallyNullVar = let final<BottomType> #t111 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:278:25: Error: A value of type 'num' can't be assigned to a variable of type 'XpotentiallyNull'.
+  self::error::XpotentiallyNull% xPotentiallyNullVar = let final<BottomType> #t157 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:276:42: Error: A value of type 'Object' can't be assigned to a variable of type 'XpotentiallyNull'.
+ - 'Object' is from 'dart:core'.
+  XpotentiallyNull xPotentiallyNullVar = objectArg;
+                                         ^" in objectArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t158 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:277:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'XpotentiallyNull'.
+ - 'Object' is from 'dart:core'.
+  xPotentiallyNullVar = objectNullableArg;
+                        ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t159 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:278:25: Error: A value of type 'num' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = numArg;
                         ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t112 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:279:25: Error: A value of type 'num?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = let final<BottomType> #t160 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:279:25: Error: A value of type 'num?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = numNullableArg;
                         ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t113 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:280:25: Error: A value of type 'int' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = let final<BottomType> #t161 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:280:25: Error: A value of type 'int' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = intArg;
                         ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t114 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:281:25: Error: A value of type 'int?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = let final<BottomType> #t162 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:281:25: Error: A value of type 'int?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = intNullableArg;
                         ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t115 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:282:25: Error: A value of type 'double' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = let final<BottomType> #t163 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:282:25: Error: A value of type 'double' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = doubleArg;
                         ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t116 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:283:25: Error: A value of type 'double?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = let final<BottomType> #t164 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:283:25: Error: A value of type 'double?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = doubleNullableArg;
                         ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t117 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:284:25: Error: A value of type 'Function' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = let final<BottomType> #t165 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:284:25: Error: A value of type 'Function' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   xPotentiallyNullVar = functionArg;
                         ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t118 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:285:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = let final<BottomType> #t166 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:285:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   xPotentiallyNullVar = functionNullableArg;
                         ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t119 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:286:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = let final<BottomType> #t167 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:286:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = toVoidArg;
                         ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t120 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:287:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = let final<BottomType> #t168 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:287:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = toVoidNullableArg;
                         ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t121 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:288:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = let final<BottomType> #t169 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:288:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xPotentiallyNullVar = tearoffableArg;
                         ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t122 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:289:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = let final<BottomType> #t170 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:289:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xPotentiallyNullVar = tearoffableNullableArg;
                         ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t123 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:290:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = let final<BottomType> #t171 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:290:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = xNonNullArg;
                         ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t124 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:291:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = let final<BottomType> #t172 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:291:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = xNonNullNullableArg;
                         ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t173 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:292:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = xPotentiallyNullNullableArg;
-  xPotentiallyNullVar = let final<BottomType> #t125 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:293:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t174 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:293:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = yNonNullArg;
                         ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t126 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:294:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = let final<BottomType> #t175 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:294:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = yNonNullNullableArg;
                         ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t176 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:295:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = yPotentiallyNullNullableArg;
-  self::error::YnonNull yNonNullVar = objectArg as{TypeError,ForNonNullableByDefault} self::error::YnonNull;
-  yNonNullVar = objectNullableArg as{TypeError,ForNonNullableByDefault} self::error::YnonNull;
-  yNonNullVar = let final<BottomType> #t127 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:299:17: Error: A value of type 'num' can't be assigned to a variable of type 'YnonNull'.
+                        ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  self::error::YnonNull yNonNullVar = let final<BottomType> #t177 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:297:26: Error: A value of type 'Object' can't be assigned to a variable of type 'YnonNull'.
+ - 'Object' is from 'dart:core'.
+  YnonNull yNonNullVar = objectArg;
+                         ^" in objectArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t178 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:298:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'YnonNull'.
+ - 'Object' is from 'dart:core'.
+  yNonNullVar = objectNullableArg;
+                ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t179 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:299:17: Error: A value of type 'num' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = numArg;
                 ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yNonNullVar = let final<BottomType> #t128 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:300:17: Error: A value of type 'num?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = let final<BottomType> #t180 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:300:17: Error: A value of type 'num?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = numNullableArg;
                 ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yNonNullVar = let final<BottomType> #t129 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:301:17: Error: A value of type 'int' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = let final<BottomType> #t181 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:301:17: Error: A value of type 'int' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = intArg;
                 ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yNonNullVar = let final<BottomType> #t130 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:302:17: Error: A value of type 'int?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = let final<BottomType> #t182 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:302:17: Error: A value of type 'int?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = intNullableArg;
                 ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yNonNullVar = let final<BottomType> #t131 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:303:17: Error: A value of type 'double' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = let final<BottomType> #t183 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:303:17: Error: A value of type 'double' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = doubleArg;
                 ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yNonNullVar = let final<BottomType> #t132 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:304:17: Error: A value of type 'double?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = let final<BottomType> #t184 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:304:17: Error: A value of type 'double?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = doubleNullableArg;
                 ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yNonNullVar = let final<BottomType> #t133 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:305:17: Error: A value of type 'Function' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = let final<BottomType> #t185 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:305:17: Error: A value of type 'Function' can't be assigned to a variable of type 'YnonNull'.
  - 'Function' is from 'dart:core'.
   yNonNullVar = functionArg;
                 ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yNonNullVar = let final<BottomType> #t134 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:306:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = let final<BottomType> #t186 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:306:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'YnonNull'.
  - 'Function' is from 'dart:core'.
   yNonNullVar = functionNullableArg;
                 ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yNonNullVar = let final<BottomType> #t135 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:307:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = let final<BottomType> #t187 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:307:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = toVoidArg;
                 ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yNonNullVar = let final<BottomType> #t136 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:308:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = let final<BottomType> #t188 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:308:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = toVoidNullableArg;
                 ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yNonNullVar = let final<BottomType> #t137 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:309:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = let final<BottomType> #t189 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:309:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yNonNullVar = tearoffableArg;
                 ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yNonNullVar = let final<BottomType> #t138 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:310:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = let final<BottomType> #t190 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:310:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yNonNullVar = tearoffableNullableArg;
                 ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yNonNullVar = xNonNullArg as{TypeError,ForNonNullableByDefault} self::error::YnonNull;
-  yNonNullVar = xNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::error::YnonNull;
-  yNonNullVar = let final<BottomType> #t139 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:313:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = let final<BottomType> #t191 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:311:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = xNonNullArg;
+                ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t192 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:312:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = xNonNullNullableArg;
+                ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t193 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:313:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xPotentiallyNullArg;
                 ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yNonNullVar = let final<BottomType> #t140 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:314:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = let final<BottomType> #t194 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:314:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xPotentiallyNullNullableArg;
                 ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t195 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:315:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = yNonNullNullableArg;
-  yNonNullVar = let final<BottomType> #t141 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:316:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
+                ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t196 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:316:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = yPotentiallyNullArg;
                 ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yNonNullVar = let final<BottomType> #t142 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:317:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = let final<BottomType> #t197 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:317:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = yPotentiallyNullNullableArg;
                 ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  self::error::YpotentiallyNull% yPotentiallyNullVar = objectArg as{TypeError,ForNonNullableByDefault} self::error::YpotentiallyNull%;
-  yPotentiallyNullVar = objectNullableArg as{TypeError,ForNonNullableByDefault} self::error::YpotentiallyNull%;
-  yPotentiallyNullVar = let final<BottomType> #t143 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:321:25: Error: A value of type 'num' can't be assigned to a variable of type 'YpotentiallyNull'.
+  self::error::YpotentiallyNull% yPotentiallyNullVar = let final<BottomType> #t198 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:319:42: Error: A value of type 'Object' can't be assigned to a variable of type 'YpotentiallyNull'.
+ - 'Object' is from 'dart:core'.
+  YpotentiallyNull yPotentiallyNullVar = objectArg;
+                                         ^" in objectArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t199 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:320:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'YpotentiallyNull'.
+ - 'Object' is from 'dart:core'.
+  yPotentiallyNullVar = objectNullableArg;
+                        ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t200 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:321:25: Error: A value of type 'num' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = numArg;
                         ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t144 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:322:25: Error: A value of type 'num?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = let final<BottomType> #t201 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:322:25: Error: A value of type 'num?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = numNullableArg;
                         ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t145 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:323:25: Error: A value of type 'int' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = let final<BottomType> #t202 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:323:25: Error: A value of type 'int' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = intArg;
                         ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t146 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:324:25: Error: A value of type 'int?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = let final<BottomType> #t203 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:324:25: Error: A value of type 'int?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = intNullableArg;
                         ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t147 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:325:25: Error: A value of type 'double' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = let final<BottomType> #t204 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:325:25: Error: A value of type 'double' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = doubleArg;
                         ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t148 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:326:25: Error: A value of type 'double?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = let final<BottomType> #t205 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:326:25: Error: A value of type 'double?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = doubleNullableArg;
                         ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t149 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:327:25: Error: A value of type 'Function' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = let final<BottomType> #t206 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:327:25: Error: A value of type 'Function' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   yPotentiallyNullVar = functionArg;
                         ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t150 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:328:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = let final<BottomType> #t207 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:328:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   yPotentiallyNullVar = functionNullableArg;
                         ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t151 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:329:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = let final<BottomType> #t208 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:329:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = toVoidArg;
                         ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t152 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:330:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = let final<BottomType> #t209 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:330:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = toVoidNullableArg;
                         ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t153 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:331:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = let final<BottomType> #t210 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:331:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yPotentiallyNullVar = tearoffableArg;
                         ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t154 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:332:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = let final<BottomType> #t211 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:332:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yPotentiallyNullVar = tearoffableNullableArg;
                         ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t155 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:333:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = let final<BottomType> #t212 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:333:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xNonNullArg;
                         ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t156 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:334:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = let final<BottomType> #t213 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:334:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xNonNullNullableArg;
                         ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yPotentiallyNullVar = xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::error::YpotentiallyNull%;
-  yPotentiallyNullVar = xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::error::YpotentiallyNull%;
-  yPotentiallyNullVar = let final<BottomType> #t157 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:337:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = let final<BottomType> #t214 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:335:25: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = xPotentiallyNullArg;
+                        ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t215 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:336:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = xPotentiallyNullNullableArg;
+                        ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t216 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:337:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = yNonNullArg;
                         ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t158 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:338:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = let final<BottomType> #t217 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:338:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = yNonNullNullableArg;
                         ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t218 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:339:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = yPotentiallyNullNullableArg;
+                        ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/assignability.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/assignability.dart.weak.transformed.expect
index ddfc6a4..9c3d453 100644
--- a/pkg/front_end/testcases/nnbd/assignability.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/assignability.dart.weak.transformed.expect
@@ -2,94 +2,94 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:114:10: Warning: Assigning value of type 'Object?' to a variable of type 'Object'.
+// pkg/front_end/testcases/nnbd/assignability.dart:114:22: Error: A value of type 'Object?' can't be assigned to a variable of type 'Object'.
 //  - 'Object' is from 'dart:core'.
 //   Object objectVar = objectNullableArg;
-//          ^
+//                      ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:115:3: Warning: Assigning value of type 'num?' to a variable of type 'Object'.
+// pkg/front_end/testcases/nnbd/assignability.dart:115:15: Error: A value of type 'num?' can't be assigned to a variable of type 'Object'.
 //  - 'Object' is from 'dart:core'.
 //   objectVar = numNullableArg;
-//   ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:116:3: Warning: Assigning value of type 'int?' to a variable of type 'Object'.
+// pkg/front_end/testcases/nnbd/assignability.dart:116:15: Error: A value of type 'int?' can't be assigned to a variable of type 'Object'.
 //  - 'Object' is from 'dart:core'.
 //   objectVar = intNullableArg;
-//   ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:117:3: Warning: Assigning value of type 'double?' to a variable of type 'Object'.
+// pkg/front_end/testcases/nnbd/assignability.dart:117:15: Error: A value of type 'double?' can't be assigned to a variable of type 'Object'.
 //  - 'Object' is from 'dart:core'.
 //   objectVar = doubleNullableArg;
-//   ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:118:3: Warning: Assigning value of type 'Function?' to a variable of type 'Object'.
+// pkg/front_end/testcases/nnbd/assignability.dart:118:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'Object'.
 //  - 'Function' is from 'dart:core'.
 //  - 'Object' is from 'dart:core'.
 //   objectVar = functionNullableArg;
-//   ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:119:3: Warning: Assigning value of type 'void Function()?' to a variable of type 'Object'.
+// pkg/front_end/testcases/nnbd/assignability.dart:119:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Object'.
 //  - 'Object' is from 'dart:core'.
 //   objectVar = toVoidNullableArg;
-//   ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:120:3: Warning: Assigning value of type 'Tearoffable?' to a variable of type 'Object'.
+// pkg/front_end/testcases/nnbd/assignability.dart:120:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Object'.
 //  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
 //  - 'Object' is from 'dart:core'.
 //   objectVar = tearoffableNullableArg;
-//   ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:121:3: Warning: Assigning value of type 'XnonNull?' to a variable of type 'Object'.
+// pkg/front_end/testcases/nnbd/assignability.dart:121:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Object'.
 //  - 'Object' is from 'dart:core'.
 //   objectVar = xNonNullNullableArg;
-//   ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:122:3: Warning: Assigning value of type 'XpotentiallyNull' to a variable of type 'Object'.
+// pkg/front_end/testcases/nnbd/assignability.dart:122:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Object'.
 //  - 'Object' is from 'dart:core'.
 //   objectVar = xPotentiallyNullArg;
-//   ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:123:3: Warning: Assigning value of type 'XpotentiallyNull?' to a variable of type 'Object'.
+// pkg/front_end/testcases/nnbd/assignability.dart:123:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Object'.
 //  - 'Object' is from 'dart:core'.
 //   objectVar = xPotentiallyNullNullableArg;
-//   ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:124:3: Warning: Assigning value of type 'YnonNull?' to a variable of type 'Object'.
+// pkg/front_end/testcases/nnbd/assignability.dart:124:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Object'.
 //  - 'Object' is from 'dart:core'.
 //   objectVar = yNonNullNullableArg;
-//   ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:125:3: Warning: Assigning value of type 'YpotentiallyNull' to a variable of type 'Object'.
+// pkg/front_end/testcases/nnbd/assignability.dart:125:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Object'.
 //  - 'Object' is from 'dart:core'.
 //   objectVar = yPotentiallyNullArg;
-//   ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:126:3: Warning: Assigning value of type 'YpotentiallyNull?' to a variable of type 'Object'.
+// pkg/front_end/testcases/nnbd/assignability.dart:126:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Object'.
 //  - 'Object' is from 'dart:core'.
 //   objectVar = yPotentiallyNullNullableArg;
-//   ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:128:7: Warning: Assigning value of type 'Object' to a variable of type 'num'.
+// pkg/front_end/testcases/nnbd/assignability.dart:128:16: Error: A value of type 'Object' can't be assigned to a variable of type 'num'.
 //  - 'Object' is from 'dart:core'.
 //   num numVar = objectArg;
-//       ^
+//                ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:129:3: Warning: Assigning value of type 'Object?' to a variable of type 'num'.
+// pkg/front_end/testcases/nnbd/assignability.dart:129:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'num'.
 //  - 'Object' is from 'dart:core'.
 //   numVar = objectNullableArg;
-//   ^
+//            ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:130:3: Warning: Assigning value of type 'num?' to a variable of type 'num'.
+// pkg/front_end/testcases/nnbd/assignability.dart:130:12: Error: A value of type 'num?' can't be assigned to a variable of type 'num'.
 //   numVar = numNullableArg;
-//   ^
+//            ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:131:3: Warning: Assigning value of type 'int?' to a variable of type 'num'.
+// pkg/front_end/testcases/nnbd/assignability.dart:131:12: Error: A value of type 'int?' can't be assigned to a variable of type 'num'.
 //   numVar = intNullableArg;
-//   ^
+//            ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:132:3: Warning: Assigning value of type 'double?' to a variable of type 'num'.
+// pkg/front_end/testcases/nnbd/assignability.dart:132:12: Error: A value of type 'double?' can't be assigned to a variable of type 'num'.
 //   numVar = doubleNullableArg;
-//   ^
+//            ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:133:12: Error: A value of type 'Function' can't be assigned to a variable of type 'num'.
 //  - 'Function' is from 'dart:core'.
@@ -151,27 +151,27 @@
 //   numVar = yPotentiallyNullNullableArg;
 //            ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:148:7: Warning: Assigning value of type 'Object' to a variable of type 'int'.
+// pkg/front_end/testcases/nnbd/assignability.dart:148:16: Error: A value of type 'Object' can't be assigned to a variable of type 'int'.
 //  - 'Object' is from 'dart:core'.
 //   int intVar = objectArg;
-//       ^
+//                ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:149:3: Warning: Assigning value of type 'Object?' to a variable of type 'int'.
+// pkg/front_end/testcases/nnbd/assignability.dart:149:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'int'.
 //  - 'Object' is from 'dart:core'.
 //   intVar = objectNullableArg;
-//   ^
+//            ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:150:3: Warning: Assigning value of type 'num' to a variable of type 'int'.
+// pkg/front_end/testcases/nnbd/assignability.dart:150:12: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
 //   intVar = numArg;
-//   ^
+//            ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:151:3: Warning: Assigning value of type 'num?' to a variable of type 'int'.
+// pkg/front_end/testcases/nnbd/assignability.dart:151:12: Error: A value of type 'num?' can't be assigned to a variable of type 'int'.
 //   intVar = numNullableArg;
-//   ^
+//            ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:152:3: Warning: Assigning value of type 'int?' to a variable of type 'int'.
+// pkg/front_end/testcases/nnbd/assignability.dart:152:12: Error: A value of type 'int?' can't be assigned to a variable of type 'int'.
 //   intVar = intNullableArg;
-//   ^
+//            ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:153:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
 //   intVar = doubleArg;
@@ -241,23 +241,23 @@
 //   intVar = yPotentiallyNullNullableArg;
 //            ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:170:10: Warning: Assigning value of type 'Object' to a variable of type 'double'.
+// pkg/front_end/testcases/nnbd/assignability.dart:170:22: Error: A value of type 'Object' can't be assigned to a variable of type 'double'.
 //  - 'Object' is from 'dart:core'.
 //   double doubleVar = objectArg;
-//          ^
+//                      ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:171:3: Warning: Assigning value of type 'Object?' to a variable of type 'double'.
+// pkg/front_end/testcases/nnbd/assignability.dart:171:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'double'.
 //  - 'Object' is from 'dart:core'.
 //   doubleVar = objectNullableArg;
-//   ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:172:3: Warning: Assigning value of type 'num' to a variable of type 'double'.
+// pkg/front_end/testcases/nnbd/assignability.dart:172:15: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
 //   doubleVar = numArg;
-//   ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:173:3: Warning: Assigning value of type 'num?' to a variable of type 'double'.
+// pkg/front_end/testcases/nnbd/assignability.dart:173:15: Error: A value of type 'num?' can't be assigned to a variable of type 'double'.
 //   doubleVar = numNullableArg;
-//   ^
+//               ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:174:15: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
 //   doubleVar = intArg;
@@ -267,9 +267,9 @@
 //   doubleVar = intNullableArg;
 //               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:176:3: Warning: Assigning value of type 'double?' to a variable of type 'double'.
+// pkg/front_end/testcases/nnbd/assignability.dart:176:15: Error: A value of type 'double?' can't be assigned to a variable of type 'double'.
 //   doubleVar = doubleNullableArg;
-//   ^
+//               ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:177:15: Error: A value of type 'Function' can't be assigned to a variable of type 'double'.
 //  - 'Function' is from 'dart:core'.
@@ -331,17 +331,17 @@
 //   doubleVar = yPotentiallyNullNullableArg;
 //               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:192:12: Warning: Assigning value of type 'Object' to a variable of type 'Function'.
+// pkg/front_end/testcases/nnbd/assignability.dart:192:26: Error: A value of type 'Object' can't be assigned to a variable of type 'Function'.
 //  - 'Object' is from 'dart:core'.
 //  - 'Function' is from 'dart:core'.
 //   Function functionVar = objectArg;
-//            ^
+//                          ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:193:3: Warning: Assigning value of type 'Object?' to a variable of type 'Function'.
+// pkg/front_end/testcases/nnbd/assignability.dart:193:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'Function'.
 //  - 'Object' is from 'dart:core'.
 //  - 'Function' is from 'dart:core'.
 //   functionVar = objectNullableArg;
-//   ^
+//                 ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:194:17: Error: A value of type 'num' can't be assigned to a variable of type 'Function'.
 //  - 'Function' is from 'dart:core'.
@@ -373,17 +373,17 @@
 //   functionVar = doubleNullableArg;
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:200:3: Warning: Assigning value of type 'Function?' to a variable of type 'Function'.
+// pkg/front_end/testcases/nnbd/assignability.dart:200:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'Function'.
 //  - 'Function' is from 'dart:core'.
 //   functionVar = functionNullableArg;
-//   ^
+//                 ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:201:3: Warning: Assigning value of type 'void Function()?' to a variable of type 'Function'.
+// pkg/front_end/testcases/nnbd/assignability.dart:201:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Function'.
 //  - 'Function' is from 'dart:core'.
 //   functionVar = toVoidNullableArg;
-//   ^
+//                 ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:202:17: Warning: Tearing off method 'call' from a potentially null value.
+// pkg/front_end/testcases/nnbd/assignability.dart:202:17: Error: Can't tear off method 'call' from a potentially null value.
 //   functionVar = tearoffableNullableArg;
 //                 ^
 //
@@ -427,15 +427,15 @@
 //   functionVar = yPotentiallyNullNullableArg;
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:212:19: Warning: Assigning value of type 'Object' to a variable of type 'void Function()'.
+// pkg/front_end/testcases/nnbd/assignability.dart:212:31: Error: A value of type 'Object' can't be assigned to a variable of type 'void Function()'.
 //  - 'Object' is from 'dart:core'.
 //   void Function() toVoidVar = objectArg;
-//                   ^
+//                               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:213:3: Warning: Assigning value of type 'Object?' to a variable of type 'void Function()'.
+// pkg/front_end/testcases/nnbd/assignability.dart:213:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'void Function()'.
 //  - 'Object' is from 'dart:core'.
 //   toVoidVar = objectNullableArg;
-//   ^
+//               ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:214:15: Error: A value of type 'num' can't be assigned to a variable of type 'void Function()'.
 //   toVoidVar = numArg;
@@ -461,21 +461,21 @@
 //   toVoidVar = doubleNullableArg;
 //               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:220:3: Warning: Assigning value of type 'Function' to a variable of type 'void Function()'.
+// pkg/front_end/testcases/nnbd/assignability.dart:220:15: Error: A value of type 'Function' can't be assigned to a variable of type 'void Function()'.
 //  - 'Function' is from 'dart:core'.
 //   toVoidVar = functionArg;
-//   ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:221:3: Warning: Assigning value of type 'Function?' to a variable of type 'void Function()'.
+// pkg/front_end/testcases/nnbd/assignability.dart:221:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'void Function()'.
 //  - 'Function' is from 'dart:core'.
 //   toVoidVar = functionNullableArg;
-//   ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:222:3: Warning: Assigning value of type 'void Function()?' to a variable of type 'void Function()'.
+// pkg/front_end/testcases/nnbd/assignability.dart:222:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'void Function()'.
 //   toVoidVar = toVoidNullableArg;
-//   ^
+//               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:223:15: Warning: Tearing off method 'call' from a potentially null value.
+// pkg/front_end/testcases/nnbd/assignability.dart:223:15: Error: Can't tear off method 'call' from a potentially null value.
 //   toVoidVar = tearoffableNullableArg;
 //               ^
 //
@@ -511,17 +511,17 @@
 //   toVoidVar = yPotentiallyNullNullableArg;
 //               ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:233:15: Warning: Assigning value of type 'Object' to a variable of type 'Tearoffable'.
+// pkg/front_end/testcases/nnbd/assignability.dart:233:32: Error: A value of type 'Object' can't be assigned to a variable of type 'Tearoffable'.
 //  - 'Object' is from 'dart:core'.
 //  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
 //   Tearoffable tearoffableVar = objectArg;
-//               ^
+//                                ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:234:3: Warning: Assigning value of type 'Object?' to a variable of type 'Tearoffable'.
+// pkg/front_end/testcases/nnbd/assignability.dart:234:20: Error: A value of type 'Object?' can't be assigned to a variable of type 'Tearoffable'.
 //  - 'Object' is from 'dart:core'.
 //  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
 //   tearoffableVar = objectNullableArg;
-//   ^
+//                    ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:235:20: Error: A value of type 'num' can't be assigned to a variable of type 'Tearoffable'.
 //  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
@@ -575,10 +575,10 @@
 //   tearoffableVar = toVoidNullableArg;
 //                    ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:245:3: Warning: Assigning value of type 'Tearoffable?' to a variable of type 'Tearoffable'.
+// pkg/front_end/testcases/nnbd/assignability.dart:245:20: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Tearoffable'.
 //  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
 //   tearoffableVar = tearoffableNullableArg;
-//   ^
+//                    ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:246:20: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Tearoffable'.
 //  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
@@ -620,15 +620,15 @@
 //   tearoffableVar = yPotentiallyNullNullableArg;
 //                    ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:255:12: Warning: Assigning value of type 'Object' to a variable of type 'XnonNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:255:26: Error: A value of type 'Object' can't be assigned to a variable of type 'XnonNull'.
 //  - 'Object' is from 'dart:core'.
 //   XnonNull xNonNullVar = objectArg;
-//            ^
+//                          ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:256:3: Warning: Assigning value of type 'Object?' to a variable of type 'XnonNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:256:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'XnonNull'.
 //  - 'Object' is from 'dart:core'.
 //   xNonNullVar = objectNullableArg;
-//   ^
+//                 ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:257:17: Error: A value of type 'num' can't be assigned to a variable of type 'XnonNull'.
 //   xNonNullVar = numArg;
@@ -682,9 +682,9 @@
 //   xNonNullVar = tearoffableNullableArg;
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:269:3: Warning: Assigning value of type 'XnonNull?' to a variable of type 'XnonNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:269:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XnonNull'.
 //   xNonNullVar = xNonNullNullableArg;
-//   ^
+//                 ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:270:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
 //   xNonNullVar = xPotentiallyNullArg;
@@ -694,9 +694,9 @@
 //   xNonNullVar = xPotentiallyNullNullableArg;
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:272:3: Warning: Assigning value of type 'YnonNull?' to a variable of type 'XnonNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:272:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XnonNull'.
 //   xNonNullVar = yNonNullNullableArg;
-//   ^
+//                 ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:273:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
 //   xNonNullVar = yPotentiallyNullArg;
@@ -706,15 +706,15 @@
 //   xNonNullVar = yPotentiallyNullNullableArg;
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:276:20: Warning: Assigning value of type 'Object' to a variable of type 'XpotentiallyNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:276:42: Error: A value of type 'Object' can't be assigned to a variable of type 'XpotentiallyNull'.
 //  - 'Object' is from 'dart:core'.
 //   XpotentiallyNull xPotentiallyNullVar = objectArg;
-//                    ^
+//                                          ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:277:3: Warning: Assigning value of type 'Object?' to a variable of type 'XpotentiallyNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:277:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'XpotentiallyNull'.
 //  - 'Object' is from 'dart:core'.
 //   xPotentiallyNullVar = objectNullableArg;
-//   ^
+//                         ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:278:25: Error: A value of type 'num' can't be assigned to a variable of type 'XpotentiallyNull'.
 //   xPotentiallyNullVar = numArg;
@@ -776,9 +776,9 @@
 //   xPotentiallyNullVar = xNonNullNullableArg;
 //                         ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:292:3: Warning: Assigning value of type 'XpotentiallyNull?' to a variable of type 'XpotentiallyNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:292:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
 //   xPotentiallyNullVar = xPotentiallyNullNullableArg;
-//   ^
+//                         ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:293:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
 //   xPotentiallyNullVar = yNonNullArg;
@@ -788,19 +788,19 @@
 //   xPotentiallyNullVar = yNonNullNullableArg;
 //                         ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:295:3: Warning: Assigning value of type 'YpotentiallyNull?' to a variable of type 'XpotentiallyNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:295:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
 //   xPotentiallyNullVar = yPotentiallyNullNullableArg;
-//   ^
+//                         ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:297:12: Warning: Assigning value of type 'Object' to a variable of type 'YnonNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:297:26: Error: A value of type 'Object' can't be assigned to a variable of type 'YnonNull'.
 //  - 'Object' is from 'dart:core'.
 //   YnonNull yNonNullVar = objectArg;
-//            ^
+//                          ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:298:3: Warning: Assigning value of type 'Object?' to a variable of type 'YnonNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:298:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'YnonNull'.
 //  - 'Object' is from 'dart:core'.
 //   yNonNullVar = objectNullableArg;
-//   ^
+//                 ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:299:17: Error: A value of type 'num' can't be assigned to a variable of type 'YnonNull'.
 //   yNonNullVar = numArg;
@@ -854,13 +854,13 @@
 //   yNonNullVar = tearoffableNullableArg;
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:311:3: Warning: Assigning value of type 'XnonNull' to a variable of type 'YnonNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:311:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YnonNull'.
 //   yNonNullVar = xNonNullArg;
-//   ^
+//                 ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:312:3: Warning: Assigning value of type 'XnonNull?' to a variable of type 'YnonNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:312:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YnonNull'.
 //   yNonNullVar = xNonNullNullableArg;
-//   ^
+//                 ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:313:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
 //   yNonNullVar = xPotentiallyNullArg;
@@ -870,9 +870,9 @@
 //   yNonNullVar = xPotentiallyNullNullableArg;
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:315:3: Warning: Assigning value of type 'YnonNull?' to a variable of type 'YnonNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:315:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YnonNull'.
 //   yNonNullVar = yNonNullNullableArg;
-//   ^
+//                 ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:316:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
 //   yNonNullVar = yPotentiallyNullArg;
@@ -882,15 +882,15 @@
 //   yNonNullVar = yPotentiallyNullNullableArg;
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:319:20: Warning: Assigning value of type 'Object' to a variable of type 'YpotentiallyNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:319:42: Error: A value of type 'Object' can't be assigned to a variable of type 'YpotentiallyNull'.
 //  - 'Object' is from 'dart:core'.
 //   YpotentiallyNull yPotentiallyNullVar = objectArg;
-//                    ^
+//                                          ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:320:3: Warning: Assigning value of type 'Object?' to a variable of type 'YpotentiallyNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:320:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'YpotentiallyNull'.
 //  - 'Object' is from 'dart:core'.
 //   yPotentiallyNullVar = objectNullableArg;
-//   ^
+//                         ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:321:25: Error: A value of type 'num' can't be assigned to a variable of type 'YpotentiallyNull'.
 //   yPotentiallyNullVar = numArg;
@@ -952,13 +952,13 @@
 //   yPotentiallyNullVar = xNonNullNullableArg;
 //                         ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:335:3: Warning: Assigning value of type 'XpotentiallyNull' to a variable of type 'YpotentiallyNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:335:25: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YpotentiallyNull'.
 //   yPotentiallyNullVar = xPotentiallyNullArg;
-//   ^
+//                         ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:336:3: Warning: Assigning value of type 'XpotentiallyNull?' to a variable of type 'YpotentiallyNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:336:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
 //   yPotentiallyNullVar = xPotentiallyNullNullableArg;
-//   ^
+//                         ^
 //
 // pkg/front_end/testcases/nnbd/assignability.dart:337:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
 //   yPotentiallyNullVar = yNonNullArg;
@@ -968,9 +968,9 @@
 //   yPotentiallyNullVar = yNonNullNullableArg;
 //                         ^
 //
-// pkg/front_end/testcases/nnbd/assignability.dart:339:3: Warning: Assigning value of type 'YpotentiallyNull?' to a variable of type 'YpotentiallyNull'.
+// pkg/front_end/testcases/nnbd/assignability.dart:339:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
 //   yPotentiallyNullVar = yPotentiallyNullNullableArg;
-//   ^
+//                         ^
 //
 import self as self;
 import "dart:core" as core;
@@ -994,7 +994,7 @@
   dynamicVar = xPotentiallyNullArg;
   dynamicVar = yNonNullArg;
   dynamicVar = yPotentiallyNullArg;
-  core::Object objectVar = dynamicArg;
+  core::Object objectVar = dynamicArg as{TypeError,ForDynamic,ForNonNullableByDefault} core::Object;
   objectVar = objectArg;
   objectVar = numArg;
   objectVar = intArg;
@@ -1032,595 +1032,759 @@
   yPotentiallyNullVar = yPotentiallyNullArg;
 }
 static method error<XnonNull extends core::Object = core::Object, YnonNull extends self::error::XnonNull = core::Object, XpotentiallyNull extends core::Object? = core::Object?, YpotentiallyNull extends self::error::XpotentiallyNull% = core::Object?>(core::Object objectArg, core::Object? objectNullableArg, core::num numArg, core::num? numNullableArg, core::int intArg, core::int? intNullableArg, core::double doubleArg, core::double? doubleNullableArg, core::Function functionArg, core::Function? functionNullableArg, () → void toVoidArg, () →? void toVoidNullableArg, self::Tearoffable tearoffableArg, self::Tearoffable? tearoffableNullableArg, self::error::XnonNull xNonNullArg, self::error::XnonNull? xNonNullNullableArg, self::error::XpotentiallyNull% xPotentiallyNullArg, self::error::XpotentiallyNull? xPotentiallyNullNullableArg, self::error::YnonNull yNonNullArg, self::error::YnonNull? yNonNullNullableArg, self::error::YpotentiallyNull% yPotentiallyNullArg, self::error::YpotentiallyNull? yPotentiallyNullNullableArg) → dynamic {
-  core::Object objectVar = objectNullableArg;
+  core::Object objectVar = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:114:22: Error: A value of type 'Object?' can't be assigned to a variable of type 'Object'.
+ - 'Object' is from 'dart:core'.
+  Object objectVar = objectNullableArg;
+                     ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:115:15: Error: A value of type 'num?' can't be assigned to a variable of type 'Object'.
+ - 'Object' is from 'dart:core'.
   objectVar = numNullableArg;
+              ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:116:15: Error: A value of type 'int?' can't be assigned to a variable of type 'Object'.
+ - 'Object' is from 'dart:core'.
   objectVar = intNullableArg;
+              ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:117:15: Error: A value of type 'double?' can't be assigned to a variable of type 'Object'.
+ - 'Object' is from 'dart:core'.
   objectVar = doubleNullableArg;
+              ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:118:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'Object'.
+ - 'Function' is from 'dart:core'.
+ - 'Object' is from 'dart:core'.
   objectVar = functionNullableArg;
+              ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:119:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Object'.
+ - 'Object' is from 'dart:core'.
   objectVar = toVoidNullableArg;
+              ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:120:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Object'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+ - 'Object' is from 'dart:core'.
   objectVar = tearoffableNullableArg;
+              ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:121:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Object'.
+ - 'Object' is from 'dart:core'.
   objectVar = xNonNullNullableArg;
+              ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:122:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Object'.
+ - 'Object' is from 'dart:core'.
   objectVar = xPotentiallyNullArg;
+              ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:123:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Object'.
+ - 'Object' is from 'dart:core'.
   objectVar = xPotentiallyNullNullableArg;
+              ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:124:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Object'.
+ - 'Object' is from 'dart:core'.
   objectVar = yNonNullNullableArg;
+              ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:125:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Object'.
+ - 'Object' is from 'dart:core'.
   objectVar = yPotentiallyNullArg;
+              ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Object;
+  objectVar = let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:126:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Object'.
+ - 'Object' is from 'dart:core'.
   objectVar = yPotentiallyNullNullableArg;
-  core::num numVar = objectArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = objectNullableArg as{TypeError,ForNonNullableByDefault} core::num;
+              ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Object;
+  core::num numVar = let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:128:16: Error: A value of type 'Object' can't be assigned to a variable of type 'num'.
+ - 'Object' is from 'dart:core'.
+  num numVar = objectArg;
+               ^" in objectArg as{TypeError,ForNonNullableByDefault} core::num;
+  numVar = let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:129:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'num'.
+ - 'Object' is from 'dart:core'.
+  numVar = objectNullableArg;
+           ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::num;
+  numVar = let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:130:12: Error: A value of type 'num?' can't be assigned to a variable of type 'num'.
   numVar = numNullableArg;
+           ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::num;
+  numVar = let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:131:12: Error: A value of type 'int?' can't be assigned to a variable of type 'num'.
   numVar = intNullableArg;
+           ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::num;
+  numVar = let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:132:12: Error: A value of type 'double?' can't be assigned to a variable of type 'num'.
   numVar = doubleNullableArg;
-  numVar = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:133:12: Error: A value of type 'Function' can't be assigned to a variable of type 'num'.
+           ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::num;
+  numVar = let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:133:12: Error: A value of type 'Function' can't be assigned to a variable of type 'num'.
  - 'Function' is from 'dart:core'.
   numVar = functionArg;
            ^" in functionArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:134:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'num'.
+  numVar = let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:134:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'num'.
  - 'Function' is from 'dart:core'.
   numVar = functionNullableArg;
            ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:135:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'num'.
+  numVar = let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:135:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'num'.
   numVar = toVoidArg;
            ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:136:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'num'.
+  numVar = let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:136:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'num'.
   numVar = toVoidNullableArg;
            ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:137:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'num'.
+  numVar = let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:137:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'num'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   numVar = tearoffableArg;
            ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:138:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'num'.
+  numVar = let final<BottomType> #t26 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:138:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'num'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   numVar = tearoffableNullableArg;
            ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:139:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'num'.
+  numVar = let final<BottomType> #t27 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:139:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'num'.
   numVar = xNonNullArg;
            ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:140:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'num'.
+  numVar = let final<BottomType> #t28 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:140:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'num'.
   numVar = xNonNullNullableArg;
            ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:141:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'num'.
+  numVar = let final<BottomType> #t29 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:141:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'num'.
   numVar = xPotentiallyNullArg;
            ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:142:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'num'.
+  numVar = let final<BottomType> #t30 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:142:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'num'.
   numVar = xPotentiallyNullNullableArg;
            ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:143:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'num'.
+  numVar = let final<BottomType> #t31 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:143:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'num'.
   numVar = yNonNullArg;
            ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:144:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'num'.
+  numVar = let final<BottomType> #t32 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:144:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'num'.
   numVar = yNonNullNullableArg;
            ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:145:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'num'.
+  numVar = let final<BottomType> #t33 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:145:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'num'.
   numVar = yPotentiallyNullArg;
            ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::num;
-  numVar = let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:146:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'num'.
+  numVar = let final<BottomType> #t34 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:146:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'num'.
   numVar = yPotentiallyNullNullableArg;
            ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::num;
-  core::int intVar = objectArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = objectNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = numArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = numNullableArg as{TypeError,ForNonNullableByDefault} core::int;
+  core::int intVar = let final<BottomType> #t35 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:148:16: Error: A value of type 'Object' can't be assigned to a variable of type 'int'.
+ - 'Object' is from 'dart:core'.
+  int intVar = objectArg;
+               ^" in objectArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = let final<BottomType> #t36 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:149:12: Error: A value of type 'Object?' can't be assigned to a variable of type 'int'.
+ - 'Object' is from 'dart:core'.
+  intVar = objectNullableArg;
+           ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = let final<BottomType> #t37 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:150:12: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
+  intVar = numArg;
+           ^" in numArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = let final<BottomType> #t38 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:151:12: Error: A value of type 'num?' can't be assigned to a variable of type 'int'.
+  intVar = numNullableArg;
+           ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = let final<BottomType> #t39 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:152:12: Error: A value of type 'int?' can't be assigned to a variable of type 'int'.
   intVar = intNullableArg;
-  intVar = let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:153:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
+           ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::int;
+  intVar = let final<BottomType> #t40 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:153:12: Error: A value of type 'double' can't be assigned to a variable of type 'int'.
   intVar = doubleArg;
            ^" in doubleArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:154:12: Error: A value of type 'double?' can't be assigned to a variable of type 'int'.
+  intVar = let final<BottomType> #t41 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:154:12: Error: A value of type 'double?' can't be assigned to a variable of type 'int'.
   intVar = doubleNullableArg;
            ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:155:12: Error: A value of type 'Function' can't be assigned to a variable of type 'int'.
+  intVar = let final<BottomType> #t42 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:155:12: Error: A value of type 'Function' can't be assigned to a variable of type 'int'.
  - 'Function' is from 'dart:core'.
   intVar = functionArg;
            ^" in functionArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:156:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'int'.
+  intVar = let final<BottomType> #t43 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:156:12: Error: A value of type 'Function?' can't be assigned to a variable of type 'int'.
  - 'Function' is from 'dart:core'.
   intVar = functionNullableArg;
            ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:157:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'int'.
+  intVar = let final<BottomType> #t44 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:157:12: Error: A value of type 'void Function()' can't be assigned to a variable of type 'int'.
   intVar = toVoidArg;
            ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:158:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'int'.
+  intVar = let final<BottomType> #t45 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:158:12: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'int'.
   intVar = toVoidNullableArg;
            ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:159:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'int'.
+  intVar = let final<BottomType> #t46 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:159:12: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'int'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   intVar = tearoffableArg;
            ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:160:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'int'.
+  intVar = let final<BottomType> #t47 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:160:12: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'int'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   intVar = tearoffableNullableArg;
            ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:161:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'int'.
+  intVar = let final<BottomType> #t48 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:161:12: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'int'.
   intVar = xNonNullArg;
            ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final<BottomType> #t26 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:162:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'int'.
+  intVar = let final<BottomType> #t49 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:162:12: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'int'.
   intVar = xNonNullNullableArg;
            ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final<BottomType> #t27 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:163:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'int'.
+  intVar = let final<BottomType> #t50 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:163:12: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'int'.
   intVar = xPotentiallyNullArg;
            ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final<BottomType> #t28 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:164:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'int'.
+  intVar = let final<BottomType> #t51 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:164:12: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'int'.
   intVar = xPotentiallyNullNullableArg;
            ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final<BottomType> #t29 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:165:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'int'.
+  intVar = let final<BottomType> #t52 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:165:12: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'int'.
   intVar = yNonNullArg;
            ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final<BottomType> #t30 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:166:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'int'.
+  intVar = let final<BottomType> #t53 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:166:12: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'int'.
   intVar = yNonNullNullableArg;
            ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final<BottomType> #t31 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:167:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'int'.
+  intVar = let final<BottomType> #t54 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:167:12: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'int'.
   intVar = yPotentiallyNullArg;
            ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::int;
-  intVar = let final<BottomType> #t32 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:168:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'int'.
+  intVar = let final<BottomType> #t55 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:168:12: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'int'.
   intVar = yPotentiallyNullNullableArg;
            ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::int;
-  core::double doubleVar = objectArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = objectNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = numArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = numNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final<BottomType> #t33 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:174:15: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
+  core::double doubleVar = let final<BottomType> #t56 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:170:22: Error: A value of type 'Object' can't be assigned to a variable of type 'double'.
+ - 'Object' is from 'dart:core'.
+  double doubleVar = objectArg;
+                     ^" in objectArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = let final<BottomType> #t57 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:171:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'double'.
+ - 'Object' is from 'dart:core'.
+  doubleVar = objectNullableArg;
+              ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = let final<BottomType> #t58 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:172:15: Error: A value of type 'num' can't be assigned to a variable of type 'double'.
+  doubleVar = numArg;
+              ^" in numArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = let final<BottomType> #t59 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:173:15: Error: A value of type 'num?' can't be assigned to a variable of type 'double'.
+  doubleVar = numNullableArg;
+              ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = let final<BottomType> #t60 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:174:15: Error: A value of type 'int' can't be assigned to a variable of type 'double'.
   doubleVar = intArg;
               ^" in intArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final<BottomType> #t34 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:175:15: Error: A value of type 'int?' can't be assigned to a variable of type 'double'.
+  doubleVar = let final<BottomType> #t61 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:175:15: Error: A value of type 'int?' can't be assigned to a variable of type 'double'.
   doubleVar = intNullableArg;
               ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = let final<BottomType> #t62 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:176:15: Error: A value of type 'double?' can't be assigned to a variable of type 'double'.
   doubleVar = doubleNullableArg;
-  doubleVar = let final<BottomType> #t35 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:177:15: Error: A value of type 'Function' can't be assigned to a variable of type 'double'.
+              ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::double;
+  doubleVar = let final<BottomType> #t63 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:177:15: Error: A value of type 'Function' can't be assigned to a variable of type 'double'.
  - 'Function' is from 'dart:core'.
   doubleVar = functionArg;
               ^" in functionArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final<BottomType> #t36 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:178:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'double'.
+  doubleVar = let final<BottomType> #t64 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:178:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'double'.
  - 'Function' is from 'dart:core'.
   doubleVar = functionNullableArg;
               ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final<BottomType> #t37 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:179:15: Error: A value of type 'void Function()' can't be assigned to a variable of type 'double'.
+  doubleVar = let final<BottomType> #t65 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:179:15: Error: A value of type 'void Function()' can't be assigned to a variable of type 'double'.
   doubleVar = toVoidArg;
               ^" in toVoidArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final<BottomType> #t38 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:180:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'double'.
+  doubleVar = let final<BottomType> #t66 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:180:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'double'.
   doubleVar = toVoidNullableArg;
               ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final<BottomType> #t39 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:181:15: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'double'.
+  doubleVar = let final<BottomType> #t67 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:181:15: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'double'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   doubleVar = tearoffableArg;
               ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final<BottomType> #t40 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:182:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'double'.
+  doubleVar = let final<BottomType> #t68 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:182:15: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'double'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   doubleVar = tearoffableNullableArg;
               ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final<BottomType> #t41 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:183:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'double'.
+  doubleVar = let final<BottomType> #t69 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:183:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'double'.
   doubleVar = xNonNullArg;
               ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final<BottomType> #t42 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:184:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'double'.
+  doubleVar = let final<BottomType> #t70 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:184:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'double'.
   doubleVar = xNonNullNullableArg;
               ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final<BottomType> #t43 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:185:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'double'.
+  doubleVar = let final<BottomType> #t71 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:185:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'double'.
   doubleVar = xPotentiallyNullArg;
               ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final<BottomType> #t44 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:186:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'double'.
+  doubleVar = let final<BottomType> #t72 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:186:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'double'.
   doubleVar = xPotentiallyNullNullableArg;
               ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final<BottomType> #t45 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:187:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'double'.
+  doubleVar = let final<BottomType> #t73 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:187:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'double'.
   doubleVar = yNonNullArg;
               ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final<BottomType> #t46 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:188:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'double'.
+  doubleVar = let final<BottomType> #t74 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:188:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'double'.
   doubleVar = yNonNullNullableArg;
               ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final<BottomType> #t47 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:189:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'double'.
+  doubleVar = let final<BottomType> #t75 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:189:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'double'.
   doubleVar = yPotentiallyNullArg;
               ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::double;
-  doubleVar = let final<BottomType> #t48 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:190:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'double'.
+  doubleVar = let final<BottomType> #t76 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:190:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'double'.
   doubleVar = yPotentiallyNullNullableArg;
               ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::double;
-  core::Function functionVar = objectArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = objectNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final<BottomType> #t49 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:194:17: Error: A value of type 'num' can't be assigned to a variable of type 'Function'.
+  core::Function functionVar = let final<BottomType> #t77 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:192:26: Error: A value of type 'Object' can't be assigned to a variable of type 'Function'.
+ - 'Object' is from 'dart:core'.
+ - 'Function' is from 'dart:core'.
+  Function functionVar = objectArg;
+                         ^" in objectArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t78 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:193:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'Function'.
+ - 'Object' is from 'dart:core'.
+ - 'Function' is from 'dart:core'.
+  functionVar = objectNullableArg;
+                ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t79 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:194:17: Error: A value of type 'num' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = numArg;
                 ^" in numArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final<BottomType> #t50 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:195:17: Error: A value of type 'num?' can't be assigned to a variable of type 'Function'.
+  functionVar = let final<BottomType> #t80 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:195:17: Error: A value of type 'num?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = numNullableArg;
                 ^" in numNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final<BottomType> #t51 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:196:17: Error: A value of type 'int' can't be assigned to a variable of type 'Function'.
+  functionVar = let final<BottomType> #t81 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:196:17: Error: A value of type 'int' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = intArg;
                 ^" in intArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final<BottomType> #t52 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:197:17: Error: A value of type 'int?' can't be assigned to a variable of type 'Function'.
+  functionVar = let final<BottomType> #t82 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:197:17: Error: A value of type 'int?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = intNullableArg;
                 ^" in intNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final<BottomType> #t53 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:198:17: Error: A value of type 'double' can't be assigned to a variable of type 'Function'.
+  functionVar = let final<BottomType> #t83 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:198:17: Error: A value of type 'double' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = doubleArg;
                 ^" in doubleArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final<BottomType> #t54 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:199:17: Error: A value of type 'double?' can't be assigned to a variable of type 'Function'.
+  functionVar = let final<BottomType> #t84 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:199:17: Error: A value of type 'double?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = doubleNullableArg;
                 ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t85 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:200:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'Function'.
+ - 'Function' is from 'dart:core'.
   functionVar = functionNullableArg;
+                ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t86 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:201:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Function'.
+ - 'Function' is from 'dart:core'.
   functionVar = toVoidNullableArg;
-  functionVar = tearoffableNullableArg as{TypeError} core::Function;
-  functionVar = let final<BottomType> #t55 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:203:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Function'.
+                ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
+  functionVar = let final<BottomType> #t87 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:202:17: Error: Can't tear off method 'call' from a potentially null value.
+  functionVar = tearoffableNullableArg;
+                ^" in tearoffableNullableArg as{TypeError} core::Function;
+  functionVar = let final<BottomType> #t88 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:203:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xNonNullArg;
                 ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final<BottomType> #t56 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:204:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Function'.
+  functionVar = let final<BottomType> #t89 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:204:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xNonNullNullableArg;
                 ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final<BottomType> #t57 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:205:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Function'.
+  functionVar = let final<BottomType> #t90 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:205:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xPotentiallyNullArg;
                 ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final<BottomType> #t58 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:206:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Function'.
+  functionVar = let final<BottomType> #t91 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:206:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = xPotentiallyNullNullableArg;
                 ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final<BottomType> #t59 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:207:17: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Function'.
+  functionVar = let final<BottomType> #t92 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:207:17: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yNonNullArg;
                 ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final<BottomType> #t60 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:208:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Function'.
+  functionVar = let final<BottomType> #t93 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:208:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yNonNullNullableArg;
                 ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final<BottomType> #t61 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:209:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Function'.
+  functionVar = let final<BottomType> #t94 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:209:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yPotentiallyNullArg;
                 ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} core::Function;
-  functionVar = let final<BottomType> #t62 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:210:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Function'.
+  functionVar = let final<BottomType> #t95 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:210:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Function'.
  - 'Function' is from 'dart:core'.
   functionVar = yPotentiallyNullNullableArg;
                 ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} core::Function;
-  () → void toVoidVar = objectArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = objectNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final<BottomType> #t63 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:214:15: Error: A value of type 'num' can't be assigned to a variable of type 'void Function()'.
+  () → void toVoidVar = let final<BottomType> #t96 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:212:31: Error: A value of type 'Object' can't be assigned to a variable of type 'void Function()'.
+ - 'Object' is from 'dart:core'.
+  void Function() toVoidVar = objectArg;
+                              ^" in objectArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t97 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:213:15: Error: A value of type 'Object?' can't be assigned to a variable of type 'void Function()'.
+ - 'Object' is from 'dart:core'.
+  toVoidVar = objectNullableArg;
+              ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t98 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:214:15: Error: A value of type 'num' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = numArg;
               ^" in numArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final<BottomType> #t64 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:215:15: Error: A value of type 'num?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = let final<BottomType> #t99 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:215:15: Error: A value of type 'num?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = numNullableArg;
               ^" in numNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final<BottomType> #t65 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:216:15: Error: A value of type 'int' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = let final<BottomType> #t100 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:216:15: Error: A value of type 'int' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = intArg;
               ^" in intArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final<BottomType> #t66 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:217:15: Error: A value of type 'int?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = let final<BottomType> #t101 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:217:15: Error: A value of type 'int?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = intNullableArg;
               ^" in intNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final<BottomType> #t67 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:218:15: Error: A value of type 'double' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = let final<BottomType> #t102 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:218:15: Error: A value of type 'double' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = doubleArg;
               ^" in doubleArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final<BottomType> #t68 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:219:15: Error: A value of type 'double?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = let final<BottomType> #t103 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:219:15: Error: A value of type 'double?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = doubleNullableArg;
               ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = functionArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = functionNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t104 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:220:15: Error: A value of type 'Function' can't be assigned to a variable of type 'void Function()'.
+ - 'Function' is from 'dart:core'.
+  toVoidVar = functionArg;
+              ^" in functionArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t105 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:221:15: Error: A value of type 'Function?' can't be assigned to a variable of type 'void Function()'.
+ - 'Function' is from 'dart:core'.
+  toVoidVar = functionNullableArg;
+              ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t106 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:222:15: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = toVoidNullableArg;
-  toVoidVar = tearoffableNullableArg as{TypeError} () → void;
-  toVoidVar = let final<BottomType> #t69 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:224:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'void Function()'.
+              ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} () → void;
+  toVoidVar = let final<BottomType> #t107 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:223:15: Error: Can't tear off method 'call' from a potentially null value.
+  toVoidVar = tearoffableNullableArg;
+              ^" in tearoffableNullableArg as{TypeError} () → void;
+  toVoidVar = let final<BottomType> #t108 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:224:15: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xNonNullArg;
               ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final<BottomType> #t70 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:225:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = let final<BottomType> #t109 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:225:15: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xNonNullNullableArg;
               ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final<BottomType> #t71 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:226:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = let final<BottomType> #t110 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:226:15: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xPotentiallyNullArg;
               ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final<BottomType> #t72 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:227:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = let final<BottomType> #t111 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:227:15: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = xPotentiallyNullNullableArg;
               ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final<BottomType> #t73 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:228:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = let final<BottomType> #t112 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:228:15: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yNonNullArg;
               ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final<BottomType> #t74 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:229:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = let final<BottomType> #t113 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:229:15: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yNonNullNullableArg;
               ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final<BottomType> #t75 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:230:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = let final<BottomType> #t114 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:230:15: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yPotentiallyNullArg;
               ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} () → void;
-  toVoidVar = let final<BottomType> #t76 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:231:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
+  toVoidVar = let final<BottomType> #t115 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:231:15: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'void Function()'.
   toVoidVar = yPotentiallyNullNullableArg;
               ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} () → void;
-  self::Tearoffable tearoffableVar = objectArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = objectNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t77 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:235:20: Error: A value of type 'num' can't be assigned to a variable of type 'Tearoffable'.
+  self::Tearoffable tearoffableVar = let final<BottomType> #t116 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:233:32: Error: A value of type 'Object' can't be assigned to a variable of type 'Tearoffable'.
+ - 'Object' is from 'dart:core'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  Tearoffable tearoffableVar = objectArg;
+                               ^" in objectArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t117 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:234:20: Error: A value of type 'Object?' can't be assigned to a variable of type 'Tearoffable'.
+ - 'Object' is from 'dart:core'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
+  tearoffableVar = objectNullableArg;
+                   ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t118 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:235:20: Error: A value of type 'num' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = numArg;
                    ^" in numArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t78 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:236:20: Error: A value of type 'num?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = let final<BottomType> #t119 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:236:20: Error: A value of type 'num?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = numNullableArg;
                    ^" in numNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t79 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:237:20: Error: A value of type 'int' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = let final<BottomType> #t120 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:237:20: Error: A value of type 'int' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = intArg;
                    ^" in intArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t80 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:238:20: Error: A value of type 'int?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = let final<BottomType> #t121 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:238:20: Error: A value of type 'int?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = intNullableArg;
                    ^" in intNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t81 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:239:20: Error: A value of type 'double' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = let final<BottomType> #t122 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:239:20: Error: A value of type 'double' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = doubleArg;
                    ^" in doubleArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t82 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:240:20: Error: A value of type 'double?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = let final<BottomType> #t123 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:240:20: Error: A value of type 'double?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = doubleNullableArg;
                    ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t83 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:241:20: Error: A value of type 'Function' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = let final<BottomType> #t124 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:241:20: Error: A value of type 'Function' can't be assigned to a variable of type 'Tearoffable'.
  - 'Function' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = functionArg;
                    ^" in functionArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t84 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:242:20: Error: A value of type 'Function?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = let final<BottomType> #t125 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:242:20: Error: A value of type 'Function?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Function' is from 'dart:core'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = functionNullableArg;
                    ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t85 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:243:20: Error: A value of type 'void Function()' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = let final<BottomType> #t126 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:243:20: Error: A value of type 'void Function()' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = toVoidArg;
                    ^" in toVoidArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t86 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:244:20: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = let final<BottomType> #t127 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:244:20: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = toVoidNullableArg;
                    ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t128 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:245:20: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'Tearoffable'.
+ - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = tearoffableNullableArg;
-  tearoffableVar = let final<BottomType> #t87 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:246:20: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Tearoffable'.
+                   ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
+  tearoffableVar = let final<BottomType> #t129 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:246:20: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xNonNullArg;
                    ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t88 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:247:20: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = let final<BottomType> #t130 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:247:20: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xNonNullNullableArg;
                    ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t89 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:248:20: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = let final<BottomType> #t131 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:248:20: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xPotentiallyNullArg;
                    ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t90 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:249:20: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = let final<BottomType> #t132 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:249:20: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = xPotentiallyNullNullableArg;
                    ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t91 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:250:20: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = let final<BottomType> #t133 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:250:20: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yNonNullArg;
                    ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t92 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:251:20: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = let final<BottomType> #t134 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:251:20: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yNonNullNullableArg;
                    ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t93 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:252:20: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = let final<BottomType> #t135 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:252:20: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yPotentiallyNullArg;
                    ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  tearoffableVar = let final<BottomType> #t94 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:253:20: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
+  tearoffableVar = let final<BottomType> #t136 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:253:20: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'Tearoffable'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   tearoffableVar = yPotentiallyNullNullableArg;
                    ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::Tearoffable;
-  self::error::XnonNull xNonNullVar = objectArg as{TypeError,ForNonNullableByDefault} self::error::XnonNull;
-  xNonNullVar = objectNullableArg as{TypeError,ForNonNullableByDefault} self::error::XnonNull;
-  xNonNullVar = let final<BottomType> #t95 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:257:17: Error: A value of type 'num' can't be assigned to a variable of type 'XnonNull'.
+  self::error::XnonNull xNonNullVar = let final<BottomType> #t137 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:255:26: Error: A value of type 'Object' can't be assigned to a variable of type 'XnonNull'.
+ - 'Object' is from 'dart:core'.
+  XnonNull xNonNullVar = objectArg;
+                         ^" in objectArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t138 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:256:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'XnonNull'.
+ - 'Object' is from 'dart:core'.
+  xNonNullVar = objectNullableArg;
+                ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t139 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:257:17: Error: A value of type 'num' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = numArg;
                 ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xNonNullVar = let final<BottomType> #t96 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:258:17: Error: A value of type 'num?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = let final<BottomType> #t140 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:258:17: Error: A value of type 'num?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = numNullableArg;
                 ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xNonNullVar = let final<BottomType> #t97 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:259:17: Error: A value of type 'int' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = let final<BottomType> #t141 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:259:17: Error: A value of type 'int' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = intArg;
                 ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xNonNullVar = let final<BottomType> #t98 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:260:17: Error: A value of type 'int?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = let final<BottomType> #t142 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:260:17: Error: A value of type 'int?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = intNullableArg;
                 ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xNonNullVar = let final<BottomType> #t99 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:261:17: Error: A value of type 'double' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = let final<BottomType> #t143 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:261:17: Error: A value of type 'double' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = doubleArg;
                 ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xNonNullVar = let final<BottomType> #t100 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:262:17: Error: A value of type 'double?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = let final<BottomType> #t144 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:262:17: Error: A value of type 'double?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = doubleNullableArg;
                 ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xNonNullVar = let final<BottomType> #t101 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:263:17: Error: A value of type 'Function' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = let final<BottomType> #t145 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:263:17: Error: A value of type 'Function' can't be assigned to a variable of type 'XnonNull'.
  - 'Function' is from 'dart:core'.
   xNonNullVar = functionArg;
                 ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xNonNullVar = let final<BottomType> #t102 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:264:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = let final<BottomType> #t146 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:264:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'XnonNull'.
  - 'Function' is from 'dart:core'.
   xNonNullVar = functionNullableArg;
                 ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xNonNullVar = let final<BottomType> #t103 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:265:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = let final<BottomType> #t147 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:265:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = toVoidArg;
                 ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xNonNullVar = let final<BottomType> #t104 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:266:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = let final<BottomType> #t148 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:266:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = toVoidNullableArg;
                 ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xNonNullVar = let final<BottomType> #t105 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:267:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = let final<BottomType> #t149 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:267:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xNonNullVar = tearoffableArg;
                 ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xNonNullVar = let final<BottomType> #t106 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:268:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = let final<BottomType> #t150 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:268:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xNonNullVar = tearoffableNullableArg;
                 ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t151 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:269:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = xNonNullNullableArg;
-  xNonNullVar = let final<BottomType> #t107 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:270:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
+                ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t152 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:270:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = xPotentiallyNullArg;
                 ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xNonNullVar = let final<BottomType> #t108 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:271:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = let final<BottomType> #t153 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:271:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = xPotentiallyNullNullableArg;
                 ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t154 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:272:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = yNonNullNullableArg;
-  xNonNullVar = let final<BottomType> #t109 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:273:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
+                ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xNonNullVar = let final<BottomType> #t155 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:273:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = yPotentiallyNullArg;
                 ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xNonNullVar = let final<BottomType> #t110 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:274:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
+  xNonNullVar = let final<BottomType> #t156 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:274:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XnonNull'.
   xNonNullVar = yPotentiallyNullNullableArg;
                 ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  self::error::XpotentiallyNull% xPotentiallyNullVar = objectArg as{TypeError,ForNonNullableByDefault} self::error::XpotentiallyNull%;
-  xPotentiallyNullVar = objectNullableArg as{TypeError,ForNonNullableByDefault} self::error::XpotentiallyNull%;
-  xPotentiallyNullVar = let final<BottomType> #t111 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:278:25: Error: A value of type 'num' can't be assigned to a variable of type 'XpotentiallyNull'.
+  self::error::XpotentiallyNull% xPotentiallyNullVar = let final<BottomType> #t157 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:276:42: Error: A value of type 'Object' can't be assigned to a variable of type 'XpotentiallyNull'.
+ - 'Object' is from 'dart:core'.
+  XpotentiallyNull xPotentiallyNullVar = objectArg;
+                                         ^" in objectArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t158 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:277:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'XpotentiallyNull'.
+ - 'Object' is from 'dart:core'.
+  xPotentiallyNullVar = objectNullableArg;
+                        ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t159 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:278:25: Error: A value of type 'num' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = numArg;
                         ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t112 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:279:25: Error: A value of type 'num?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = let final<BottomType> #t160 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:279:25: Error: A value of type 'num?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = numNullableArg;
                         ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t113 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:280:25: Error: A value of type 'int' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = let final<BottomType> #t161 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:280:25: Error: A value of type 'int' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = intArg;
                         ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t114 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:281:25: Error: A value of type 'int?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = let final<BottomType> #t162 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:281:25: Error: A value of type 'int?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = intNullableArg;
                         ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t115 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:282:25: Error: A value of type 'double' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = let final<BottomType> #t163 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:282:25: Error: A value of type 'double' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = doubleArg;
                         ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t116 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:283:25: Error: A value of type 'double?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = let final<BottomType> #t164 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:283:25: Error: A value of type 'double?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = doubleNullableArg;
                         ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t117 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:284:25: Error: A value of type 'Function' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = let final<BottomType> #t165 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:284:25: Error: A value of type 'Function' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   xPotentiallyNullVar = functionArg;
                         ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t118 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:285:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = let final<BottomType> #t166 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:285:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   xPotentiallyNullVar = functionNullableArg;
                         ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t119 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:286:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = let final<BottomType> #t167 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:286:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = toVoidArg;
                         ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t120 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:287:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = let final<BottomType> #t168 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:287:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = toVoidNullableArg;
                         ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t121 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:288:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = let final<BottomType> #t169 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:288:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xPotentiallyNullVar = tearoffableArg;
                         ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t122 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:289:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = let final<BottomType> #t170 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:289:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'XpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   xPotentiallyNullVar = tearoffableNullableArg;
                         ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t123 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:290:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = let final<BottomType> #t171 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:290:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = xNonNullArg;
                         ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t124 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:291:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = let final<BottomType> #t172 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:291:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = xNonNullNullableArg;
                         ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t173 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:292:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = xPotentiallyNullNullableArg;
-  xPotentiallyNullVar = let final<BottomType> #t125 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:293:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
+                        ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t174 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:293:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = yNonNullArg;
                         ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  xPotentiallyNullVar = let final<BottomType> #t126 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:294:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
+  xPotentiallyNullVar = let final<BottomType> #t175 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:294:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = yNonNullNullableArg;
                         ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  xPotentiallyNullVar = let final<BottomType> #t176 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:295:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'XpotentiallyNull'.
   xPotentiallyNullVar = yPotentiallyNullNullableArg;
-  self::error::YnonNull yNonNullVar = objectArg as{TypeError,ForNonNullableByDefault} self::error::YnonNull;
-  yNonNullVar = objectNullableArg as{TypeError,ForNonNullableByDefault} self::error::YnonNull;
-  yNonNullVar = let final<BottomType> #t127 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:299:17: Error: A value of type 'num' can't be assigned to a variable of type 'YnonNull'.
+                        ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  self::error::YnonNull yNonNullVar = let final<BottomType> #t177 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:297:26: Error: A value of type 'Object' can't be assigned to a variable of type 'YnonNull'.
+ - 'Object' is from 'dart:core'.
+  YnonNull yNonNullVar = objectArg;
+                         ^" in objectArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t178 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:298:17: Error: A value of type 'Object?' can't be assigned to a variable of type 'YnonNull'.
+ - 'Object' is from 'dart:core'.
+  yNonNullVar = objectNullableArg;
+                ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t179 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:299:17: Error: A value of type 'num' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = numArg;
                 ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yNonNullVar = let final<BottomType> #t128 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:300:17: Error: A value of type 'num?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = let final<BottomType> #t180 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:300:17: Error: A value of type 'num?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = numNullableArg;
                 ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yNonNullVar = let final<BottomType> #t129 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:301:17: Error: A value of type 'int' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = let final<BottomType> #t181 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:301:17: Error: A value of type 'int' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = intArg;
                 ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yNonNullVar = let final<BottomType> #t130 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:302:17: Error: A value of type 'int?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = let final<BottomType> #t182 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:302:17: Error: A value of type 'int?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = intNullableArg;
                 ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yNonNullVar = let final<BottomType> #t131 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:303:17: Error: A value of type 'double' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = let final<BottomType> #t183 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:303:17: Error: A value of type 'double' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = doubleArg;
                 ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yNonNullVar = let final<BottomType> #t132 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:304:17: Error: A value of type 'double?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = let final<BottomType> #t184 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:304:17: Error: A value of type 'double?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = doubleNullableArg;
                 ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yNonNullVar = let final<BottomType> #t133 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:305:17: Error: A value of type 'Function' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = let final<BottomType> #t185 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:305:17: Error: A value of type 'Function' can't be assigned to a variable of type 'YnonNull'.
  - 'Function' is from 'dart:core'.
   yNonNullVar = functionArg;
                 ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yNonNullVar = let final<BottomType> #t134 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:306:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = let final<BottomType> #t186 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:306:17: Error: A value of type 'Function?' can't be assigned to a variable of type 'YnonNull'.
  - 'Function' is from 'dart:core'.
   yNonNullVar = functionNullableArg;
                 ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yNonNullVar = let final<BottomType> #t135 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:307:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = let final<BottomType> #t187 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:307:17: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = toVoidArg;
                 ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yNonNullVar = let final<BottomType> #t136 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:308:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = let final<BottomType> #t188 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:308:17: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = toVoidNullableArg;
                 ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yNonNullVar = let final<BottomType> #t137 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:309:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = let final<BottomType> #t189 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:309:17: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yNonNullVar = tearoffableArg;
                 ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yNonNullVar = let final<BottomType> #t138 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:310:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = let final<BottomType> #t190 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:310:17: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YnonNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yNonNullVar = tearoffableNullableArg;
                 ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yNonNullVar = xNonNullArg as{TypeError,ForNonNullableByDefault} self::error::YnonNull;
-  yNonNullVar = xNonNullNullableArg as{TypeError,ForNonNullableByDefault} self::error::YnonNull;
-  yNonNullVar = let final<BottomType> #t139 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:313:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = let final<BottomType> #t191 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:311:17: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = xNonNullArg;
+                ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t192 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:312:17: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = xNonNullNullableArg;
+                ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t193 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:313:17: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xPotentiallyNullArg;
                 ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yNonNullVar = let final<BottomType> #t140 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:314:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = let final<BottomType> #t194 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:314:17: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = xPotentiallyNullNullableArg;
                 ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t195 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:315:17: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = yNonNullNullableArg;
-  yNonNullVar = let final<BottomType> #t141 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:316:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
+                ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yNonNullVar = let final<BottomType> #t196 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:316:17: Error: A value of type 'YpotentiallyNull' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = yPotentiallyNullArg;
                 ^" in yPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yNonNullVar = let final<BottomType> #t142 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:317:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
+  yNonNullVar = let final<BottomType> #t197 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:317:17: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YnonNull'.
   yNonNullVar = yPotentiallyNullNullableArg;
                 ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  self::error::YpotentiallyNull% yPotentiallyNullVar = objectArg as{TypeError,ForNonNullableByDefault} self::error::YpotentiallyNull%;
-  yPotentiallyNullVar = objectNullableArg as{TypeError,ForNonNullableByDefault} self::error::YpotentiallyNull%;
-  yPotentiallyNullVar = let final<BottomType> #t143 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:321:25: Error: A value of type 'num' can't be assigned to a variable of type 'YpotentiallyNull'.
+  self::error::YpotentiallyNull% yPotentiallyNullVar = let final<BottomType> #t198 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:319:42: Error: A value of type 'Object' can't be assigned to a variable of type 'YpotentiallyNull'.
+ - 'Object' is from 'dart:core'.
+  YpotentiallyNull yPotentiallyNullVar = objectArg;
+                                         ^" in objectArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t199 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:320:25: Error: A value of type 'Object?' can't be assigned to a variable of type 'YpotentiallyNull'.
+ - 'Object' is from 'dart:core'.
+  yPotentiallyNullVar = objectNullableArg;
+                        ^" in objectNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t200 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:321:25: Error: A value of type 'num' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = numArg;
                         ^" in numArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t144 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:322:25: Error: A value of type 'num?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = let final<BottomType> #t201 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:322:25: Error: A value of type 'num?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = numNullableArg;
                         ^" in numNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t145 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:323:25: Error: A value of type 'int' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = let final<BottomType> #t202 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:323:25: Error: A value of type 'int' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = intArg;
                         ^" in intArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t146 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:324:25: Error: A value of type 'int?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = let final<BottomType> #t203 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:324:25: Error: A value of type 'int?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = intNullableArg;
                         ^" in intNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t147 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:325:25: Error: A value of type 'double' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = let final<BottomType> #t204 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:325:25: Error: A value of type 'double' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = doubleArg;
                         ^" in doubleArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t148 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:326:25: Error: A value of type 'double?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = let final<BottomType> #t205 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:326:25: Error: A value of type 'double?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = doubleNullableArg;
                         ^" in doubleNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t149 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:327:25: Error: A value of type 'Function' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = let final<BottomType> #t206 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:327:25: Error: A value of type 'Function' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   yPotentiallyNullVar = functionArg;
                         ^" in functionArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t150 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:328:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = let final<BottomType> #t207 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:328:25: Error: A value of type 'Function?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Function' is from 'dart:core'.
   yPotentiallyNullVar = functionNullableArg;
                         ^" in functionNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t151 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:329:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = let final<BottomType> #t208 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:329:25: Error: A value of type 'void Function()' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = toVoidArg;
                         ^" in toVoidArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t152 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:330:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = let final<BottomType> #t209 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:330:25: Error: A value of type 'void Function()?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = toVoidNullableArg;
                         ^" in toVoidNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t153 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:331:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = let final<BottomType> #t210 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:331:25: Error: A value of type 'Tearoffable' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yPotentiallyNullVar = tearoffableArg;
                         ^" in tearoffableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t154 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:332:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = let final<BottomType> #t211 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:332:25: Error: A value of type 'Tearoffable?' can't be assigned to a variable of type 'YpotentiallyNull'.
  - 'Tearoffable' is from 'pkg/front_end/testcases/nnbd/assignability.dart'.
   yPotentiallyNullVar = tearoffableNullableArg;
                         ^" in tearoffableNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t155 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:333:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = let final<BottomType> #t212 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:333:25: Error: A value of type 'XnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xNonNullArg;
                         ^" in xNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t156 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:334:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = let final<BottomType> #t213 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:334:25: Error: A value of type 'XnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = xNonNullNullableArg;
                         ^" in xNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yPotentiallyNullVar = xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} self::error::YpotentiallyNull%;
-  yPotentiallyNullVar = xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} self::error::YpotentiallyNull%;
-  yPotentiallyNullVar = let final<BottomType> #t157 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:337:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = let final<BottomType> #t214 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:335:25: Error: A value of type 'XpotentiallyNull' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = xPotentiallyNullArg;
+                        ^" in xPotentiallyNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t215 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:336:25: Error: A value of type 'XpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = xPotentiallyNullNullableArg;
+                        ^" in xPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t216 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:337:25: Error: A value of type 'YnonNull' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = yNonNullArg;
                         ^" in yNonNullArg as{TypeError,ForNonNullableByDefault} <BottomType>;
-  yPotentiallyNullVar = let final<BottomType> #t158 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:338:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
+  yPotentiallyNullVar = let final<BottomType> #t217 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:338:25: Error: A value of type 'YnonNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = yNonNullNullableArg;
                         ^" in yNonNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
+  yPotentiallyNullVar = let final<BottomType> #t218 = invalid-expression "pkg/front_end/testcases/nnbd/assignability.dart:339:25: Error: A value of type 'YpotentiallyNull?' can't be assigned to a variable of type 'YpotentiallyNull'.
   yPotentiallyNullVar = yPotentiallyNullNullableArg;
+                        ^" in yPotentiallyNullNullableArg as{TypeError,ForNonNullableByDefault} <BottomType>;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/bounds_checks.dart b/pkg/front_end/testcases/nnbd/bounds_checks.dart
index 3250d57..617a14a 100644
--- a/pkg/front_end/testcases/nnbd/bounds_checks.dart
+++ b/pkg/front_end/testcases/nnbd/bounds_checks.dart
@@ -4,15 +4,15 @@
 
 class A<X extends num> {}
 
-foo(A<num?> a) {} // Error in strong mode and Warning in weak mode.
+foo(A<num?> a) {} // Error
 
-A<num?> bar() {} // Error in strong mode and Warning in weak mode.
+A<num?>? bar() {} // Error
 
-baz<T extends A<num?>>() {} // Error in strong mode and Warning in weak mode.
+baz<T extends A<num?>>() {} // Error
 
-class B extends A<num?> {} // Error in strong mode and Warning in weak mode.
+class B extends A<num?> {} // Error
 
-class C<T extends A<num?>> {} // Error in strong mode and Warning in weak mode.
+class C<T extends A<num?>> {} // Error
 
 void hest<T extends num>() {}
 
diff --git a/pkg/front_end/testcases/nnbd/bounds_checks.dart.outline.expect b/pkg/front_end/testcases/nnbd/bounds_checks.dart.outline.expect
index a66b2fe..f3c9fb6 100644
--- a/pkg/front_end/testcases/nnbd/bounds_checks.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/bounds_checks.dart.outline.expect
@@ -4,23 +4,23 @@
 //
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:7:13: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
-// foo(A<num?> a) {} // Error in strong mode and Warning in weak mode.
+// foo(A<num?> a) {} // Error
 //             ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:9:12: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A' in the return type.
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:9:13: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A' in the return type.
 // Try changing type arguments so that they conform to the bounds.
-// A<num?> bar() {} // Error in strong mode and Warning in weak mode.
-//            ^
+// A<num?>? bar() {} // Error
+//             ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
 //         ^
 //
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:11:5: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
-// baz<T extends A<num?>>() {} // Error in strong mode and Warning in weak mode.
+// baz<T extends A<num?>>() {} // Error
 //     ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
@@ -28,7 +28,7 @@
 //
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:13:7: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A' in the supertype 'A' of class 'B'.
 // Try changing type arguments so that they conform to the bounds.
-// class B extends A<num?> {} // Error in strong mode and Warning in weak mode.
+// class B extends A<num?> {} // Error
 //       ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
@@ -36,7 +36,7 @@
 //
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:15:9: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
-// class C<T extends A<num?>> {} // Error in strong mode and Warning in weak mode.
+// class C<T extends A<num?>> {} // Error
 //         ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
@@ -65,7 +65,7 @@
 }
 static method foo(self::A<core::num?> a) → dynamic
   ;
-static method bar() → self::A<core::num?>
+static method bar() → self::A<core::num?>?
   ;
 static method baz<T extends self::A<core::num?> = self::A<core::num?>>() → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd/bounds_checks.dart.strong.expect b/pkg/front_end/testcases/nnbd/bounds_checks.dart.strong.expect
index 686cc68..90866e8 100644
--- a/pkg/front_end/testcases/nnbd/bounds_checks.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/bounds_checks.dart.strong.expect
@@ -4,23 +4,23 @@
 //
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:7:13: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
-// foo(A<num?> a) {} // Error in strong mode and Warning in weak mode.
+// foo(A<num?> a) {} // Error
 //             ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:9:12: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A' in the return type.
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:9:13: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A' in the return type.
 // Try changing type arguments so that they conform to the bounds.
-// A<num?> bar() {} // Error in strong mode and Warning in weak mode.
-//            ^
+// A<num?>? bar() {} // Error
+//             ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
 //         ^
 //
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:11:5: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
-// baz<T extends A<num?>>() {} // Error in strong mode and Warning in weak mode.
+// baz<T extends A<num?>>() {} // Error
 //     ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
@@ -28,7 +28,7 @@
 //
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:13:7: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A' in the supertype 'A' of class 'B'.
 // Try changing type arguments so that they conform to the bounds.
-// class B extends A<num?> {} // Error in strong mode and Warning in weak mode.
+// class B extends A<num?> {} // Error
 //       ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
@@ -36,7 +36,7 @@
 //
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:15:9: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
-// class C<T extends A<num?>> {} // Error in strong mode and Warning in weak mode.
+// class C<T extends A<num?>> {} // Error
 //         ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
@@ -81,7 +81,7 @@
   method hest<T extends core::num = core::num>() → void {}
 }
 static method foo(self::A<core::num?> a) → dynamic {}
-static method bar() → self::A<core::num?> {}
+static method bar() → self::A<core::num?>? {}
 static method baz<T extends self::A<core::num?> = self::A<core::num?>>() → dynamic {}
 static method hest<T extends core::num = core::num>() → void {}
 static method fisk(self::Hest h) → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/bounds_checks.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/bounds_checks.dart.strong.transformed.expect
index 686cc68..90866e8 100644
--- a/pkg/front_end/testcases/nnbd/bounds_checks.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/bounds_checks.dart.strong.transformed.expect
@@ -4,23 +4,23 @@
 //
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:7:13: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
-// foo(A<num?> a) {} // Error in strong mode and Warning in weak mode.
+// foo(A<num?> a) {} // Error
 //             ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:9:12: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A' in the return type.
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:9:13: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A' in the return type.
 // Try changing type arguments so that they conform to the bounds.
-// A<num?> bar() {} // Error in strong mode and Warning in weak mode.
-//            ^
+// A<num?>? bar() {} // Error
+//             ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
 //         ^
 //
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:11:5: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
-// baz<T extends A<num?>>() {} // Error in strong mode and Warning in weak mode.
+// baz<T extends A<num?>>() {} // Error
 //     ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
@@ -28,7 +28,7 @@
 //
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:13:7: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A' in the supertype 'A' of class 'B'.
 // Try changing type arguments so that they conform to the bounds.
-// class B extends A<num?> {} // Error in strong mode and Warning in weak mode.
+// class B extends A<num?> {} // Error
 //       ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
@@ -36,7 +36,7 @@
 //
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:15:9: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
-// class C<T extends A<num?>> {} // Error in strong mode and Warning in weak mode.
+// class C<T extends A<num?>> {} // Error
 //         ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
@@ -81,7 +81,7 @@
   method hest<T extends core::num = core::num>() → void {}
 }
 static method foo(self::A<core::num?> a) → dynamic {}
-static method bar() → self::A<core::num?> {}
+static method bar() → self::A<core::num?>? {}
 static method baz<T extends self::A<core::num?> = self::A<core::num?>>() → dynamic {}
 static method hest<T extends core::num = core::num>() → void {}
 static method fisk(self::Hest h) → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/bounds_checks.dart.weak.expect b/pkg/front_end/testcases/nnbd/bounds_checks.dart.weak.expect
index d78654a..90866e8 100644
--- a/pkg/front_end/testcases/nnbd/bounds_checks.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/bounds_checks.dart.weak.expect
@@ -2,47 +2,47 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:7:13: Warning: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:7:13: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
-// foo(A<num?> a) {} // Error in strong mode and Warning in weak mode.
+// foo(A<num?> a) {} // Error
 //             ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:9:12: Warning: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A' in the return type.
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:9:13: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A' in the return type.
 // Try changing type arguments so that they conform to the bounds.
-// A<num?> bar() {} // Error in strong mode and Warning in weak mode.
-//            ^
+// A<num?>? bar() {} // Error
+//             ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:11:5: Warning: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:11:5: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
-// baz<T extends A<num?>>() {} // Error in strong mode and Warning in weak mode.
+// baz<T extends A<num?>>() {} // Error
 //     ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:13:7: Warning: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A' in the supertype 'A' of class 'B'.
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:13:7: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A' in the supertype 'A' of class 'B'.
 // Try changing type arguments so that they conform to the bounds.
-// class B extends A<num?> {} // Error in strong mode and Warning in weak mode.
+// class B extends A<num?> {} // Error
 //       ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:15:9: Warning: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:15:9: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
-// class C<T extends A<num?>> {} // Error in strong mode and Warning in weak mode.
+// class C<T extends A<num?>> {} // Error
 //         ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:24:3: Warning: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'T' on 'hest'.
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:24:3: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'T' on 'hest'.
 // Try changing type arguments so that they conform to the bounds.
 //   hest<num?>();
 //   ^
@@ -50,7 +50,7 @@
 // void hest<T extends num>() {}
 //           ^
 //
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:25:5: Warning: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'T' on 'Hest.hest'.
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:25:5: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'T' on 'Hest.hest'.
 //  - 'Hest' is from 'pkg/front_end/testcases/nnbd/bounds_checks.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //   h.hest<num?>();
@@ -81,7 +81,7 @@
   method hest<T extends core::num = core::num>() → void {}
 }
 static method foo(self::A<core::num?> a) → dynamic {}
-static method bar() → self::A<core::num?> {}
+static method bar() → self::A<core::num?>? {}
 static method baz<T extends self::A<core::num?> = self::A<core::num?>>() → dynamic {}
 static method hest<T extends core::num = core::num>() → void {}
 static method fisk(self::Hest h) → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/bounds_checks.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/bounds_checks.dart.weak.transformed.expect
index d78654a..90866e8 100644
--- a/pkg/front_end/testcases/nnbd/bounds_checks.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/bounds_checks.dart.weak.transformed.expect
@@ -2,47 +2,47 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:7:13: Warning: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:7:13: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
-// foo(A<num?> a) {} // Error in strong mode and Warning in weak mode.
+// foo(A<num?> a) {} // Error
 //             ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:9:12: Warning: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A' in the return type.
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:9:13: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A' in the return type.
 // Try changing type arguments so that they conform to the bounds.
-// A<num?> bar() {} // Error in strong mode and Warning in weak mode.
-//            ^
+// A<num?>? bar() {} // Error
+//             ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:11:5: Warning: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:11:5: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
-// baz<T extends A<num?>>() {} // Error in strong mode and Warning in weak mode.
+// baz<T extends A<num?>>() {} // Error
 //     ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:13:7: Warning: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A' in the supertype 'A' of class 'B'.
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:13:7: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A' in the supertype 'A' of class 'B'.
 // Try changing type arguments so that they conform to the bounds.
-// class B extends A<num?> {} // Error in strong mode and Warning in weak mode.
+// class B extends A<num?> {} // Error
 //       ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:15:9: Warning: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:15:9: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'X' on 'A'.
 // Try changing type arguments so that they conform to the bounds.
-// class C<T extends A<num?>> {} // Error in strong mode and Warning in weak mode.
+// class C<T extends A<num?>> {} // Error
 //         ^
 // pkg/front_end/testcases/nnbd/bounds_checks.dart:5:9: Context: This is the type variable whose bound isn't conformed to.
 // class A<X extends num> {}
 //         ^
 //
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:24:3: Warning: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'T' on 'hest'.
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:24:3: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'T' on 'hest'.
 // Try changing type arguments so that they conform to the bounds.
 //   hest<num?>();
 //   ^
@@ -50,7 +50,7 @@
 // void hest<T extends num>() {}
 //           ^
 //
-// pkg/front_end/testcases/nnbd/bounds_checks.dart:25:5: Warning: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'T' on 'Hest.hest'.
+// pkg/front_end/testcases/nnbd/bounds_checks.dart:25:5: Error: Type argument 'num?' doesn't conform to the bound 'num' of the type variable 'T' on 'Hest.hest'.
 //  - 'Hest' is from 'pkg/front_end/testcases/nnbd/bounds_checks.dart'.
 // Try changing type arguments so that they conform to the bounds.
 //   h.hest<num?>();
@@ -81,7 +81,7 @@
   method hest<T extends core::num = core::num>() → void {}
 }
 static method foo(self::A<core::num?> a) → dynamic {}
-static method bar() → self::A<core::num?> {}
+static method bar() → self::A<core::num?>? {}
 static method baz<T extends self::A<core::num?> = self::A<core::num?>>() → dynamic {}
 static method hest<T extends core::num = core::num>() → void {}
 static method fisk(self::Hest h) → dynamic {
diff --git a/pkg/front_end/testcases/nnbd/call.dart.strong.expect b/pkg/front_end/testcases/nnbd/call.dart.strong.expect
index 9386657..66a5576 100644
--- a/pkg/front_end/testcases/nnbd/call.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/call.dart.strong.expect
@@ -2,11 +2,6 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/call.dart:12:4: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
-// Try calling using ?. instead.
-//   f();
-//    ^
-//
 // pkg/front_end/testcases/nnbd/call.dart:12:4: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 // Try calling using ?.call instead.
 //   f();
@@ -15,17 +10,17 @@
 // pkg/front_end/testcases/nnbd/call.dart:13:5: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
 // Try calling using ?. instead.
 //   f.call();
-//     ^
+//     ^^^^
 //
-// pkg/front_end/testcases/nnbd/call.dart:15:5: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
-// Try calling using ?. instead.
+// pkg/front_end/testcases/nnbd/call.dart:15:10: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+// Try calling using ?.call instead.
 //   c.field();
-//     ^
+//          ^
 //
-// pkg/front_end/testcases/nnbd/call.dart:16:5: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
-// Try calling using ?. instead.
+// pkg/front_end/testcases/nnbd/call.dart:16:11: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+// Try calling using ?.call instead.
 //   c.getter();
-//     ^
+//           ^
 //
 import self as self;
 import "dart:core" as core;
@@ -43,22 +38,19 @@
   let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:12:4: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
   f();
-   ^" in let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:12:4: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
-Try calling using ?. instead.
-  f();
    ^" in f.call();
-  let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:13:5: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
+  let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:13:5: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
 Try calling using ?. instead.
   f.call();
-    ^" in f.call();
+    ^^^^" in f.call();
   self::Class c = new self::Class::•();
-  let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:15:5: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
-Try calling using ?. instead.
+  let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:15:10: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+Try calling using ?.call instead.
   c.field();
-    ^" in c.{self::Class::field}.call();
-  let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:16:5: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
-Try calling using ?. instead.
+         ^" in c.{self::Class::field}.call();
+  let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:16:11: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+Try calling using ?.call instead.
   c.getter();
-    ^" in c.{self::Class::getter}.call();
+          ^" in c.{self::Class::getter}.call();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/call.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/call.dart.strong.transformed.expect
index 9386657..66a5576 100644
--- a/pkg/front_end/testcases/nnbd/call.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/call.dart.strong.transformed.expect
@@ -2,11 +2,6 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/call.dart:12:4: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
-// Try calling using ?. instead.
-//   f();
-//    ^
-//
 // pkg/front_end/testcases/nnbd/call.dart:12:4: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 // Try calling using ?.call instead.
 //   f();
@@ -15,17 +10,17 @@
 // pkg/front_end/testcases/nnbd/call.dart:13:5: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
 // Try calling using ?. instead.
 //   f.call();
-//     ^
+//     ^^^^
 //
-// pkg/front_end/testcases/nnbd/call.dart:15:5: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
-// Try calling using ?. instead.
+// pkg/front_end/testcases/nnbd/call.dart:15:10: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+// Try calling using ?.call instead.
 //   c.field();
-//     ^
+//          ^
 //
-// pkg/front_end/testcases/nnbd/call.dart:16:5: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
-// Try calling using ?. instead.
+// pkg/front_end/testcases/nnbd/call.dart:16:11: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+// Try calling using ?.call instead.
 //   c.getter();
-//     ^
+//           ^
 //
 import self as self;
 import "dart:core" as core;
@@ -43,22 +38,19 @@
   let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:12:4: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 Try calling using ?.call instead.
   f();
-   ^" in let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:12:4: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
-Try calling using ?. instead.
-  f();
    ^" in f.call();
-  let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:13:5: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
+  let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:13:5: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
 Try calling using ?. instead.
   f.call();
-    ^" in f.call();
+    ^^^^" in f.call();
   self::Class c = new self::Class::•();
-  let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:15:5: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
-Try calling using ?. instead.
+  let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:15:10: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+Try calling using ?.call instead.
   c.field();
-    ^" in c.{self::Class::field}.call();
-  let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:16:5: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
-Try calling using ?. instead.
+         ^" in c.{self::Class::field}.call();
+  let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:16:11: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+Try calling using ?.call instead.
   c.getter();
-    ^" in c.{self::Class::getter}.call();
+          ^" in c.{self::Class::getter}.call();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/call.dart.weak.expect b/pkg/front_end/testcases/nnbd/call.dart.weak.expect
index 3b6dfa5..66a5576 100644
--- a/pkg/front_end/testcases/nnbd/call.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/call.dart.weak.expect
@@ -2,30 +2,25 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/call.dart:12:4: Warning: Method 'call' is called on 'void Function()?' which is potentially null.
-// Try calling using ?. instead.
-//   f();
-//    ^
-//
-// pkg/front_end/testcases/nnbd/call.dart:12:4: Warning: Expression of type 'void Function()?' is used as a function, but it's potentially null.
+// pkg/front_end/testcases/nnbd/call.dart:12:4: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 // Try calling using ?.call instead.
 //   f();
 //    ^
 //
-// pkg/front_end/testcases/nnbd/call.dart:13:5: Warning: Method 'call' is called on 'void Function()?' which is potentially null.
+// pkg/front_end/testcases/nnbd/call.dart:13:5: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
 // Try calling using ?. instead.
 //   f.call();
-//     ^
+//     ^^^^
 //
-// pkg/front_end/testcases/nnbd/call.dart:15:5: Warning: Method 'call' is called on 'void Function()?' which is potentially null.
-// Try calling using ?. instead.
+// pkg/front_end/testcases/nnbd/call.dart:15:10: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+// Try calling using ?.call instead.
 //   c.field();
-//     ^
+//          ^
 //
-// pkg/front_end/testcases/nnbd/call.dart:16:5: Warning: Method 'call' is called on 'void Function()?' which is potentially null.
-// Try calling using ?. instead.
+// pkg/front_end/testcases/nnbd/call.dart:16:11: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+// Try calling using ?.call instead.
 //   c.getter();
-//     ^
+//           ^
 //
 import self as self;
 import "dart:core" as core;
@@ -40,10 +35,22 @@
 }
 static method error() → dynamic {
   () →? void f;
+  let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:12:4: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+Try calling using ?.call instead.
+  f();
+   ^" in f.call();
+  let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:13:5: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
+Try calling using ?. instead.
   f.call();
-  f.call();
+    ^^^^" in f.call();
   self::Class c = new self::Class::•();
-  c.{self::Class::field}.call();
-  c.{self::Class::getter}.call();
+  let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:15:10: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+Try calling using ?.call instead.
+  c.field();
+         ^" in c.{self::Class::field}.call();
+  let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:16:11: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+Try calling using ?.call instead.
+  c.getter();
+          ^" in c.{self::Class::getter}.call();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/call.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/call.dart.weak.transformed.expect
index 3b6dfa5..66a5576 100644
--- a/pkg/front_end/testcases/nnbd/call.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/call.dart.weak.transformed.expect
@@ -2,30 +2,25 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/call.dart:12:4: Warning: Method 'call' is called on 'void Function()?' which is potentially null.
-// Try calling using ?. instead.
-//   f();
-//    ^
-//
-// pkg/front_end/testcases/nnbd/call.dart:12:4: Warning: Expression of type 'void Function()?' is used as a function, but it's potentially null.
+// pkg/front_end/testcases/nnbd/call.dart:12:4: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
 // Try calling using ?.call instead.
 //   f();
 //    ^
 //
-// pkg/front_end/testcases/nnbd/call.dart:13:5: Warning: Method 'call' is called on 'void Function()?' which is potentially null.
+// pkg/front_end/testcases/nnbd/call.dart:13:5: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
 // Try calling using ?. instead.
 //   f.call();
-//     ^
+//     ^^^^
 //
-// pkg/front_end/testcases/nnbd/call.dart:15:5: Warning: Method 'call' is called on 'void Function()?' which is potentially null.
-// Try calling using ?. instead.
+// pkg/front_end/testcases/nnbd/call.dart:15:10: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+// Try calling using ?.call instead.
 //   c.field();
-//     ^
+//          ^
 //
-// pkg/front_end/testcases/nnbd/call.dart:16:5: Warning: Method 'call' is called on 'void Function()?' which is potentially null.
-// Try calling using ?. instead.
+// pkg/front_end/testcases/nnbd/call.dart:16:11: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+// Try calling using ?.call instead.
 //   c.getter();
-//     ^
+//           ^
 //
 import self as self;
 import "dart:core" as core;
@@ -40,10 +35,22 @@
 }
 static method error() → dynamic {
   () →? void f;
+  let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:12:4: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+Try calling using ?.call instead.
+  f();
+   ^" in f.call();
+  let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:13:5: Error: Method 'call' cannot be called on 'void Function()?' because it is potentially null.
+Try calling using ?. instead.
   f.call();
-  f.call();
+    ^^^^" in f.call();
   self::Class c = new self::Class::•();
-  c.{self::Class::field}.call();
-  c.{self::Class::getter}.call();
+  let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:15:10: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+Try calling using ?.call instead.
+  c.field();
+         ^" in c.{self::Class::field}.call();
+  let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/call.dart:16:11: Error: Can't use an expression of type 'void Function()?' as a function because it's potentially null.
+Try calling using ?.call instead.
+  c.getter();
+          ^" in c.{self::Class::getter}.call();
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/constants.dart b/pkg/front_end/testcases/nnbd/constants.dart
index 0a32e64..3335767 100644
--- a/pkg/front_end/testcases/nnbd/constants.dart
+++ b/pkg/front_end/testcases/nnbd/constants.dart
@@ -41,17 +41,8 @@
 final bool inStrongMode = _inStrongMode();
 
 bool _inStrongMode() {
-  var f = (String? s) {
-    s.length; // This will be an invalid expression in strong mode.
-  };
-  try {
-    f("foo");
-  } catch (e) {
-    print('Running in strong mode.');
-    return true;
-  }
-  print('Running in weak mode.');
-  return false;
+  const List<int?> list = const <int?>[];
+  return list is! List<int>;
 }
 
 main() {
diff --git a/pkg/front_end/testcases/nnbd/constants.dart.strong.expect b/pkg/front_end/testcases/nnbd/constants.dart.strong.expect
index 12632c3..0293eeb 100644
--- a/pkg/front_end/testcases/nnbd/constants.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/constants.dart.strong.expect
@@ -1,12 +1,4 @@
 library /*isNonNullableByDefault*/;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/nnbd/constants.dart:45:7: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
-// Try accessing using ?. instead.
-//     s.length; // This will be an invalid expression in strong mode.
-//       ^^^^^^
-//
 import self as self;
 import "dart:core" as core;
 import "constants_lib.dart" as con;
@@ -39,34 +31,20 @@
 static const field core::bool mapConcatenationIdentical = #C16;
 static final field core::bool inStrongMode = self::_inStrongMode();
 static method _inStrongMode() → core::bool {
-  (core::String?) → core::Null? f = (core::String? s) → core::Null? {
-    let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/constants.dart:45:7: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
-Try accessing using ?. instead.
-    s.length; // This will be an invalid expression in strong mode.
-      ^^^^^^" in s.{core::String::length};
-  };
-  try {
-    f.call("foo");
-  }
-  on dynamic catch(final dynamic e) {
-    core::print("Running in strong mode.");
-    return true;
-  }
-  core::print("Running in weak mode.");
-  return false;
+  return !((#C17) is{ForNonNullableByDefault} core::List<core::int>);
 }
 static method main() → dynamic {
-  self::test(#C1, #C17);
-  self::test(#C3, #C18);
-  self::test(#C5, #C19);
-  self::test(#C6, #C20);
-  self::test(#C7, #C21);
-  self::test(#C8, #C22);
-  self::test(#C12, #C24);
-  self::test(#C15, #C25);
-  self::test(#C8, #C22);
-  self::test(#C12, #C24);
-  self::test(#C15, #C25);
+  self::test(#C1, #C18);
+  self::test(#C3, #C19);
+  self::test(#C5, #C20);
+  self::test(#C6, #C21);
+  self::test(#C7, #C22);
+  self::test(#C8, #C23);
+  self::test(#C12, #C25);
+  self::test(#C15, #C26);
+  self::test(#C8, #C23);
+  self::test(#C12, #C25);
+  self::test(#C15, #C26);
   self::test(true, #C16);
   self::test(true, #C16);
   self::test(true, #C16);
@@ -105,29 +83,29 @@
     : con::Class::field = field, super core::Object::•()
     ;
 }
-static const field core::Type* objectTypeLiteral = #C17;
-static const field (core::Object*, core::Object*) →* core::bool* c2 = #C26;
-static const field (core::int*) →* core::int* partialInstantiation = #C18;
-static const field con::Class<core::int*>* instance = #C19;
-static const field core::Type* functionTypeLiteral = #C20;
-static const field core::Type* genericFunctionTypeLiteral = #C21;
-static const field core::List<core::int*>* listLiteral = #C22;
-static const field core::Set<core::int*>* setLiteral = #C24;
-static const field core::Map<core::int*, core::String*>* mapLiteral = #C25;
-static const field core::List<core::int*>* listConcatenation = #C22;
-static const field core::Set<core::int*>* setConcatenation = #C24;
-static const field core::Map<core::int*, core::String*>* mapConcatenation = #C25;
+static const field core::Type* objectTypeLiteral = #C18;
+static const field (core::Object*, core::Object*) →* core::bool* c2 = #C27;
+static const field (core::int*) →* core::int* partialInstantiation = #C19;
+static const field con::Class<core::int*>* instance = #C20;
+static const field core::Type* functionTypeLiteral = #C21;
+static const field core::Type* genericFunctionTypeLiteral = #C22;
+static const field core::List<core::int*>* listLiteral = #C23;
+static const field core::Set<core::int*>* setLiteral = #C25;
+static const field core::Map<core::int*, core::String*>* mapLiteral = #C26;
+static const field core::List<core::int*>* listConcatenation = #C23;
+static const field core::Set<core::int*>* setConcatenation = #C25;
+static const field core::Map<core::int*, core::String*>* mapConcatenation = #C26;
 static method id<T extends core::Object* = dynamic>(con::id::T* t) → con::id::T*
   return t;
 
 constants  {
-  #C1 = TypeLiteralConstant(dart.core::Object)
+  #C1 = TypeLiteralConstant(core::Object)
   #C2 = tearoff con::id
   #C3 = partial-instantiation con::id <core::int>
   #C4 = 0
   #C5 = con::Class<core::int> {field:#C4}
   #C6 = TypeLiteralConstant((dynamic) → dynamic)
-  #C7 = TypeLiteralConstant(<T extends dart.core::Object? = dynamic>(T%) → T%)
+  #C7 = TypeLiteralConstant(<T extends core::Object? = dynamic>(T%) → T%)
   #C8 = <core::int>[#C4]
   #C9 = null
   #C10 = <dynamic>[#C4, #C9]
@@ -137,14 +115,15 @@
   #C14 = <dynamic>[#C4, #C13]
   #C15 = core::_ImmutableMap<core::int, core::String> {_kvPairs:#C14}
   #C16 = false
-  #C17 = TypeLiteralConstant(dart.core::Object*)
-  #C18 = partial-instantiation con::id <core::int*>
-  #C19 = con::Class<core::int*> {field:#C4}
-  #C20 = TypeLiteralConstant((dynamic) →* dynamic)
-  #C21 = TypeLiteralConstant(<T extends dart.core::Object* = dynamic>(T*) →* T*)
-  #C22 = <core::int*>[#C4]
-  #C23 = core::_ImmutableMap<core::int*, core::Null?> {_kvPairs:#C10}
-  #C24 = col::_UnmodifiableSet<core::int*> {_map:#C23}
-  #C25 = core::_ImmutableMap<core::int*, core::String*> {_kvPairs:#C14}
-  #C26 = tearoff core::identical
+  #C17 = <core::int?>[]
+  #C18 = TypeLiteralConstant(core::Object*)
+  #C19 = partial-instantiation con::id <core::int*>
+  #C20 = con::Class<core::int*> {field:#C4}
+  #C21 = TypeLiteralConstant((dynamic) →* dynamic)
+  #C22 = TypeLiteralConstant(<T extends core::Object* = dynamic>(T*) →* T*)
+  #C23 = <core::int*>[#C4]
+  #C24 = core::_ImmutableMap<core::int*, core::Null?> {_kvPairs:#C10}
+  #C25 = col::_UnmodifiableSet<core::int*> {_map:#C24}
+  #C26 = core::_ImmutableMap<core::int*, core::String*> {_kvPairs:#C14}
+  #C27 = tearoff core::identical
 }
diff --git a/pkg/front_end/testcases/nnbd/constants.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/constants.dart.strong.transformed.expect
index 12632c3..0293eeb 100644
--- a/pkg/front_end/testcases/nnbd/constants.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/constants.dart.strong.transformed.expect
@@ -1,12 +1,4 @@
 library /*isNonNullableByDefault*/;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/nnbd/constants.dart:45:7: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
-// Try accessing using ?. instead.
-//     s.length; // This will be an invalid expression in strong mode.
-//       ^^^^^^
-//
 import self as self;
 import "dart:core" as core;
 import "constants_lib.dart" as con;
@@ -39,34 +31,20 @@
 static const field core::bool mapConcatenationIdentical = #C16;
 static final field core::bool inStrongMode = self::_inStrongMode();
 static method _inStrongMode() → core::bool {
-  (core::String?) → core::Null? f = (core::String? s) → core::Null? {
-    let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/constants.dart:45:7: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
-Try accessing using ?. instead.
-    s.length; // This will be an invalid expression in strong mode.
-      ^^^^^^" in s.{core::String::length};
-  };
-  try {
-    f.call("foo");
-  }
-  on dynamic catch(final dynamic e) {
-    core::print("Running in strong mode.");
-    return true;
-  }
-  core::print("Running in weak mode.");
-  return false;
+  return !((#C17) is{ForNonNullableByDefault} core::List<core::int>);
 }
 static method main() → dynamic {
-  self::test(#C1, #C17);
-  self::test(#C3, #C18);
-  self::test(#C5, #C19);
-  self::test(#C6, #C20);
-  self::test(#C7, #C21);
-  self::test(#C8, #C22);
-  self::test(#C12, #C24);
-  self::test(#C15, #C25);
-  self::test(#C8, #C22);
-  self::test(#C12, #C24);
-  self::test(#C15, #C25);
+  self::test(#C1, #C18);
+  self::test(#C3, #C19);
+  self::test(#C5, #C20);
+  self::test(#C6, #C21);
+  self::test(#C7, #C22);
+  self::test(#C8, #C23);
+  self::test(#C12, #C25);
+  self::test(#C15, #C26);
+  self::test(#C8, #C23);
+  self::test(#C12, #C25);
+  self::test(#C15, #C26);
   self::test(true, #C16);
   self::test(true, #C16);
   self::test(true, #C16);
@@ -105,29 +83,29 @@
     : con::Class::field = field, super core::Object::•()
     ;
 }
-static const field core::Type* objectTypeLiteral = #C17;
-static const field (core::Object*, core::Object*) →* core::bool* c2 = #C26;
-static const field (core::int*) →* core::int* partialInstantiation = #C18;
-static const field con::Class<core::int*>* instance = #C19;
-static const field core::Type* functionTypeLiteral = #C20;
-static const field core::Type* genericFunctionTypeLiteral = #C21;
-static const field core::List<core::int*>* listLiteral = #C22;
-static const field core::Set<core::int*>* setLiteral = #C24;
-static const field core::Map<core::int*, core::String*>* mapLiteral = #C25;
-static const field core::List<core::int*>* listConcatenation = #C22;
-static const field core::Set<core::int*>* setConcatenation = #C24;
-static const field core::Map<core::int*, core::String*>* mapConcatenation = #C25;
+static const field core::Type* objectTypeLiteral = #C18;
+static const field (core::Object*, core::Object*) →* core::bool* c2 = #C27;
+static const field (core::int*) →* core::int* partialInstantiation = #C19;
+static const field con::Class<core::int*>* instance = #C20;
+static const field core::Type* functionTypeLiteral = #C21;
+static const field core::Type* genericFunctionTypeLiteral = #C22;
+static const field core::List<core::int*>* listLiteral = #C23;
+static const field core::Set<core::int*>* setLiteral = #C25;
+static const field core::Map<core::int*, core::String*>* mapLiteral = #C26;
+static const field core::List<core::int*>* listConcatenation = #C23;
+static const field core::Set<core::int*>* setConcatenation = #C25;
+static const field core::Map<core::int*, core::String*>* mapConcatenation = #C26;
 static method id<T extends core::Object* = dynamic>(con::id::T* t) → con::id::T*
   return t;
 
 constants  {
-  #C1 = TypeLiteralConstant(dart.core::Object)
+  #C1 = TypeLiteralConstant(core::Object)
   #C2 = tearoff con::id
   #C3 = partial-instantiation con::id <core::int>
   #C4 = 0
   #C5 = con::Class<core::int> {field:#C4}
   #C6 = TypeLiteralConstant((dynamic) → dynamic)
-  #C7 = TypeLiteralConstant(<T extends dart.core::Object? = dynamic>(T%) → T%)
+  #C7 = TypeLiteralConstant(<T extends core::Object? = dynamic>(T%) → T%)
   #C8 = <core::int>[#C4]
   #C9 = null
   #C10 = <dynamic>[#C4, #C9]
@@ -137,14 +115,15 @@
   #C14 = <dynamic>[#C4, #C13]
   #C15 = core::_ImmutableMap<core::int, core::String> {_kvPairs:#C14}
   #C16 = false
-  #C17 = TypeLiteralConstant(dart.core::Object*)
-  #C18 = partial-instantiation con::id <core::int*>
-  #C19 = con::Class<core::int*> {field:#C4}
-  #C20 = TypeLiteralConstant((dynamic) →* dynamic)
-  #C21 = TypeLiteralConstant(<T extends dart.core::Object* = dynamic>(T*) →* T*)
-  #C22 = <core::int*>[#C4]
-  #C23 = core::_ImmutableMap<core::int*, core::Null?> {_kvPairs:#C10}
-  #C24 = col::_UnmodifiableSet<core::int*> {_map:#C23}
-  #C25 = core::_ImmutableMap<core::int*, core::String*> {_kvPairs:#C14}
-  #C26 = tearoff core::identical
+  #C17 = <core::int?>[]
+  #C18 = TypeLiteralConstant(core::Object*)
+  #C19 = partial-instantiation con::id <core::int*>
+  #C20 = con::Class<core::int*> {field:#C4}
+  #C21 = TypeLiteralConstant((dynamic) →* dynamic)
+  #C22 = TypeLiteralConstant(<T extends core::Object* = dynamic>(T*) →* T*)
+  #C23 = <core::int*>[#C4]
+  #C24 = core::_ImmutableMap<core::int*, core::Null?> {_kvPairs:#C10}
+  #C25 = col::_UnmodifiableSet<core::int*> {_map:#C24}
+  #C26 = core::_ImmutableMap<core::int*, core::String*> {_kvPairs:#C14}
+  #C27 = tearoff core::identical
 }
diff --git a/pkg/front_end/testcases/nnbd/constants.dart.weak.expect b/pkg/front_end/testcases/nnbd/constants.dart.weak.expect
index 794e075..d4e1e3f7 100644
--- a/pkg/front_end/testcases/nnbd/constants.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/constants.dart.weak.expect
@@ -1,12 +1,4 @@
 library /*isNonNullableByDefault*/;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/nnbd/constants.dart:45:7: Warning: Property 'length' is accessed on 'String?' which is potentially null.
-// Try accessing using ?. instead.
-//     s.length; // This will be an invalid expression in strong mode.
-//       ^^^^^^
-//
 import self as self;
 import "dart:core" as core;
 import "constants_lib.dart" as con;
@@ -39,18 +31,7 @@
 static const field core::bool mapConcatenationIdentical = #C16;
 static final field core::bool inStrongMode = self::_inStrongMode();
 static method _inStrongMode() → core::bool {
-  (core::String?) → core::Null? f = (core::String? s) → core::Null? {
-    s.{core::String::length};
-  };
-  try {
-    f.call("foo");
-  }
-  on dynamic catch(final dynamic e) {
-    core::print("Running in strong mode.");
-    return true;
-  }
-  core::print("Running in weak mode.");
-  return false;
+  return !((#C17) is{ForNonNullableByDefault} core::List<core::int>);
 }
 static method main() → dynamic {
   self::test(#C1, #C1);
@@ -103,7 +84,7 @@
     ;
 }
 static const field core::Type* objectTypeLiteral = #C1;
-static const field (core::Object*, core::Object*) →* core::bool* c2 = #C17;
+static const field (core::Object*, core::Object*) →* core::bool* c2 = #C18;
 static const field (core::int*) →* core::int* partialInstantiation = #C3;
 static const field con::Class<core::int*>* instance = #C5;
 static const field core::Type* functionTypeLiteral = #C6;
@@ -118,13 +99,13 @@
   return t;
 
 constants  {
-  #C1 = TypeLiteralConstant(dart.core::Object*)
+  #C1 = TypeLiteralConstant(core::Object*)
   #C2 = tearoff con::id
   #C3 = partial-instantiation con::id <core::int*>
   #C4 = 0
   #C5 = con::Class<core::int*> {field:#C4}
   #C6 = TypeLiteralConstant((dynamic) →* dynamic)
-  #C7 = TypeLiteralConstant(<T extends dart.core::Object* = dynamic>(T*) →* T*)
+  #C7 = TypeLiteralConstant(<T extends core::Object* = dynamic>(T*) →* T*)
   #C8 = <core::int*>[#C4]
   #C9 = null
   #C10 = <dynamic>[#C4, #C9]
@@ -134,5 +115,6 @@
   #C14 = <dynamic>[#C4, #C13]
   #C15 = core::_ImmutableMap<core::int*, core::String*> {_kvPairs:#C14}
   #C16 = true
-  #C17 = tearoff core::identical
+  #C17 = <core::int*>[]
+  #C18 = tearoff core::identical
 }
diff --git a/pkg/front_end/testcases/nnbd/constants.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/constants.dart.weak.transformed.expect
index 794e075..d4e1e3f7 100644
--- a/pkg/front_end/testcases/nnbd/constants.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/constants.dart.weak.transformed.expect
@@ -1,12 +1,4 @@
 library /*isNonNullableByDefault*/;
-//
-// Problems in library:
-//
-// pkg/front_end/testcases/nnbd/constants.dart:45:7: Warning: Property 'length' is accessed on 'String?' which is potentially null.
-// Try accessing using ?. instead.
-//     s.length; // This will be an invalid expression in strong mode.
-//       ^^^^^^
-//
 import self as self;
 import "dart:core" as core;
 import "constants_lib.dart" as con;
@@ -39,18 +31,7 @@
 static const field core::bool mapConcatenationIdentical = #C16;
 static final field core::bool inStrongMode = self::_inStrongMode();
 static method _inStrongMode() → core::bool {
-  (core::String?) → core::Null? f = (core::String? s) → core::Null? {
-    s.{core::String::length};
-  };
-  try {
-    f.call("foo");
-  }
-  on dynamic catch(final dynamic e) {
-    core::print("Running in strong mode.");
-    return true;
-  }
-  core::print("Running in weak mode.");
-  return false;
+  return !((#C17) is{ForNonNullableByDefault} core::List<core::int>);
 }
 static method main() → dynamic {
   self::test(#C1, #C1);
@@ -103,7 +84,7 @@
     ;
 }
 static const field core::Type* objectTypeLiteral = #C1;
-static const field (core::Object*, core::Object*) →* core::bool* c2 = #C17;
+static const field (core::Object*, core::Object*) →* core::bool* c2 = #C18;
 static const field (core::int*) →* core::int* partialInstantiation = #C3;
 static const field con::Class<core::int*>* instance = #C5;
 static const field core::Type* functionTypeLiteral = #C6;
@@ -118,13 +99,13 @@
   return t;
 
 constants  {
-  #C1 = TypeLiteralConstant(dart.core::Object*)
+  #C1 = TypeLiteralConstant(core::Object*)
   #C2 = tearoff con::id
   #C3 = partial-instantiation con::id <core::int*>
   #C4 = 0
   #C5 = con::Class<core::int*> {field:#C4}
   #C6 = TypeLiteralConstant((dynamic) →* dynamic)
-  #C7 = TypeLiteralConstant(<T extends dart.core::Object* = dynamic>(T*) →* T*)
+  #C7 = TypeLiteralConstant(<T extends core::Object* = dynamic>(T*) →* T*)
   #C8 = <core::int*>[#C4]
   #C9 = null
   #C10 = <dynamic>[#C4, #C9]
@@ -134,5 +115,6 @@
   #C14 = <dynamic>[#C4, #C13]
   #C15 = core::_ImmutableMap<core::int*, core::String*> {_kvPairs:#C14}
   #C16 = true
-  #C17 = tearoff core::identical
+  #C17 = <core::int*>[]
+  #C18 = tearoff core::identical
 }
diff --git a/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart b/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart
index 2c8941e..2afbd86 100644
--- a/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart
+++ b/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart
@@ -10,7 +10,7 @@
   return x;
 }
 
-int bar() {}
+int bar() => 0;
 
 int baz(int x) {
   return x;
@@ -28,7 +28,7 @@
     return x;
   }
 
-  int bar() {}
+  int bar() => 0;
 
   int baz(int x) {
     return x;
diff --git a/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart.strong.expect b/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart.strong.expect
index ee1a35e..4742f80 100644
--- a/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart.strong.expect
@@ -20,11 +20,12 @@
     ;
   method foo() → core::int {
     core::int x;
-    return (let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:28:12: Error: Non-nullable variable 'x' must be assigned before it can be used.
+    return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:28:12: Error: Non-nullable variable 'x' must be assigned before it can be used.
     return x;
-           ^" in x) as{TypeError,ForNonNullableByDefault} core::int;
+           ^" in x;
   }
-  method bar() → core::int {}
+  method bar() → core::int
+    return 0;
   method baz(core::int x) → core::int {
     return x;
   }
@@ -33,11 +34,12 @@
 }
 static method foo() → core::int {
   core::int x;
-  return (let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:10:10: Error: Non-nullable variable 'x' must be assigned before it can be used.
+  return let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:10:10: Error: Non-nullable variable 'x' must be assigned before it can be used.
   return x;
-         ^" in x) as{TypeError,ForNonNullableByDefault} core::int;
+         ^" in x;
 }
-static method bar() → core::int {}
+static method bar() → core::int
+  return 0;
 static method baz(core::int x) → core::int {
   return x;
 }
diff --git a/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart.strong.transformed.expect
index ee1a35e..4742f80 100644
--- a/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart.strong.transformed.expect
@@ -20,11 +20,12 @@
     ;
   method foo() → core::int {
     core::int x;
-    return (let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:28:12: Error: Non-nullable variable 'x' must be assigned before it can be used.
+    return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:28:12: Error: Non-nullable variable 'x' must be assigned before it can be used.
     return x;
-           ^" in x) as{TypeError,ForNonNullableByDefault} core::int;
+           ^" in x;
   }
-  method bar() → core::int {}
+  method bar() → core::int
+    return 0;
   method baz(core::int x) → core::int {
     return x;
   }
@@ -33,11 +34,12 @@
 }
 static method foo() → core::int {
   core::int x;
-  return (let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:10:10: Error: Non-nullable variable 'x' must be assigned before it can be used.
+  return let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:10:10: Error: Non-nullable variable 'x' must be assigned before it can be used.
   return x;
-         ^" in x) as{TypeError,ForNonNullableByDefault} core::int;
+         ^" in x;
 }
-static method bar() → core::int {}
+static method bar() → core::int
+  return 0;
 static method baz(core::int x) → core::int {
   return x;
 }
diff --git a/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart.weak.expect b/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart.weak.expect
index 645ac55..4742f80 100644
--- a/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart.weak.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:10:10: Warning: Non-nullable variable 'x' is used before it's assigned.
+// pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:10:10: Error: Non-nullable variable 'x' must be assigned before it can be used.
 //   return x;
 //          ^
 //
-// pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:28:12: Warning: Non-nullable variable 'x' is used before it's assigned.
+// pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:28:12: Error: Non-nullable variable 'x' must be assigned before it can be used.
 //     return x;
 //            ^
 //
@@ -20,9 +20,12 @@
     ;
   method foo() → core::int {
     core::int x;
+    return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:28:12: Error: Non-nullable variable 'x' must be assigned before it can be used.
     return x;
+           ^" in x;
   }
-  method bar() → core::int {}
+  method bar() → core::int
+    return 0;
   method baz(core::int x) → core::int {
     return x;
   }
@@ -31,9 +34,12 @@
 }
 static method foo() → core::int {
   core::int x;
+  return let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:10:10: Error: Non-nullable variable 'x' must be assigned before it can be used.
   return x;
+         ^" in x;
 }
-static method bar() → core::int {}
+static method bar() → core::int
+  return 0;
 static method baz(core::int x) → core::int {
   return x;
 }
diff --git a/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart.weak.transformed.expect
index 645ac55..4742f80 100644
--- a/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart.weak.transformed.expect
@@ -2,11 +2,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:10:10: Warning: Non-nullable variable 'x' is used before it's assigned.
+// pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:10:10: Error: Non-nullable variable 'x' must be assigned before it can be used.
 //   return x;
 //          ^
 //
-// pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:28:12: Warning: Non-nullable variable 'x' is used before it's assigned.
+// pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:28:12: Error: Non-nullable variable 'x' must be assigned before it can be used.
 //     return x;
 //            ^
 //
@@ -20,9 +20,12 @@
     ;
   method foo() → core::int {
     core::int x;
+    return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:28:12: Error: Non-nullable variable 'x' must be assigned before it can be used.
     return x;
+           ^" in x;
   }
-  method bar() → core::int {}
+  method bar() → core::int
+    return 0;
   method baz(core::int x) → core::int {
     return x;
   }
@@ -31,9 +34,12 @@
 }
 static method foo() → core::int {
   core::int x;
+  return let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definite_assignment_and_completion.dart:10:10: Error: Non-nullable variable 'x' must be assigned before it can be used.
   return x;
+         ^" in x;
 }
-static method bar() → core::int {}
+static method bar() → core::int
+  return 0;
 static method baz(core::int x) → core::int {
   return x;
 }
diff --git a/pkg/front_end/testcases/nnbd/definitely_assigned.dart b/pkg/front_end/testcases/nnbd/definitely_assigned.dart
new file mode 100644
index 0000000..12241c7
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/definitely_assigned.dart
@@ -0,0 +1,91 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+
+methodDirect<T>(T value) {
+  late final T local2;
+  late final int local4;
+  late final FutureOr<int> local6;
+
+  local2 = value; // ok
+  local4 = 0; // ok
+  local6 = 0; // ok
+
+  local2 = value; // error
+  local4 = 0; // error
+  local6 = 0; // error
+}
+
+var fieldDirect = <T>(T value) {
+  late final T local2;
+  late final int local4;
+  late final FutureOr<int> local6;
+
+  local2 = value; // ok
+  local4 = 0; // ok
+  local6 = 0; // ok
+
+  local2 = value; // error
+  local4 = 0; // error
+  local6 = 0; // error
+};
+
+methodConditional<T>(bool b, T value) {
+  late final T local2;
+  late final int local4;
+  late final FutureOr<int> local6;
+
+  if (b) {
+    local2 = value; // ok
+    local4 = 0; // ok
+    local6 = 0; // ok
+  }
+
+  local2 = value; // ok
+  local4 = 0; // ok
+  local6 = 0; // ok
+
+  local2 = value; // error
+  local4 = 0; // error
+  local6 = 0; // error
+}
+
+var fieldConditional = <T>(bool b, T value) {
+  late final T local2;
+  late final int local4;
+  late final FutureOr<int> local6;
+
+  if (b) {
+    local2 = value; // ok
+    local4 = 0; // ok
+    local6 = 0; // ok
+  }
+
+  local2 = value; // ok
+  local4 = 0; // ok
+  local6 = 0; // ok
+
+  local2 = value; // error
+  local4 = 0; // error
+  local6 = 0; // error
+};
+
+methodCompound() {
+  late final int local4;
+
+  local4 = 0; // ok
+
+  local4 += 0; // error
+}
+
+var fieldCompound = () {
+  late final int local4;
+
+  local4 = 0; // ok
+
+  local4 += 0; // error
+};
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd/definitely_assigned.dart.outline.expect b/pkg/front_end/testcases/nnbd/definitely_assigned.dart.outline.expect
new file mode 100644
index 0000000..1a5e8e7
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/definitely_assigned.dart.outline.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+static field <T extends core::Object? = dynamic>(T%) → core::Null? fieldDirect;
+static field <T extends core::Object? = dynamic>(core::bool, T%) → core::Null? fieldConditional;
+static field () → core::Null? fieldCompound;
+static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic
+  ;
+static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic
+  ;
+static method methodCompound() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/nnbd/definitely_assigned.dart.strong.expect b/pkg/front_end/testcases/nnbd/definitely_assigned.dart.strong.expect
new file mode 100644
index 0000000..9751d45
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/definitely_assigned.dart.strong.expect
@@ -0,0 +1,159 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:16:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:17:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:18:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:30:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:31:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:32:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:50:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:51:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:52:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:70:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:71:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:72:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:80:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:88:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static field <T extends core::Object? = dynamic>(T%) → core::Null? fieldDirect = <T extends core::Object? = dynamic>(T% value) → core::Null? {
+  late final T% local2;
+  late final core::int local4;
+  late final asy::FutureOr<core::int> local6;
+  local2 = value;
+  local4 = 0;
+  local6 = 0;
+  let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:30:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in local2 = value;
+  let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:31:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in local4 = 0;
+  let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:32:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in local6 = 0;
+};
+static field <T extends core::Object? = dynamic>(core::bool, T%) → core::Null? fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → core::Null? {
+  late final T% local2;
+  late final core::int local4;
+  late final asy::FutureOr<core::int> local6;
+  if(b) {
+    local2 = value;
+    local4 = 0;
+    local6 = 0;
+  }
+  local2 = value;
+  local4 = 0;
+  local6 = 0;
+  let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:70:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in local2 = value;
+  let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:71:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in local4 = 0;
+  let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:72:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in local6 = 0;
+};
+static field () → core::Null? fieldCompound = () → core::Null? {
+  late final core::int local4;
+  local4 = 0;
+  let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:88:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 += 0; // error
+  ^^^^^^" in local4 = local4.{core::num::+}(0);
+};
+static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
+  late final self::methodDirect::T% local2;
+  late final core::int local4;
+  late final asy::FutureOr<core::int> local6;
+  local2 = value;
+  local4 = 0;
+  local6 = 0;
+  let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:16:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in local2 = value;
+  let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:17:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in local4 = 0;
+  let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:18:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in local6 = 0;
+}
+static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
+  late final self::methodConditional::T% local2;
+  late final core::int local4;
+  late final asy::FutureOr<core::int> local6;
+  if(b) {
+    local2 = value;
+    local4 = 0;
+    local6 = 0;
+  }
+  local2 = value;
+  local4 = 0;
+  local6 = 0;
+  let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:50:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in local2 = value;
+  let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:51:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in local4 = 0;
+  let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:52:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in local6 = 0;
+}
+static method methodCompound() → dynamic {
+  late final core::int local4;
+  local4 = 0;
+  let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:80:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 += 0; // error
+  ^^^^^^" in local4 = local4.{core::num::+}(0);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/definitely_assigned.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/definitely_assigned.dart.strong.transformed.expect
new file mode 100644
index 0000000..9751d45
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/definitely_assigned.dart.strong.transformed.expect
@@ -0,0 +1,159 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:16:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:17:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:18:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:30:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:31:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:32:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:50:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:51:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:52:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:70:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:71:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:72:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:80:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:88:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static field <T extends core::Object? = dynamic>(T%) → core::Null? fieldDirect = <T extends core::Object? = dynamic>(T% value) → core::Null? {
+  late final T% local2;
+  late final core::int local4;
+  late final asy::FutureOr<core::int> local6;
+  local2 = value;
+  local4 = 0;
+  local6 = 0;
+  let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:30:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in local2 = value;
+  let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:31:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in local4 = 0;
+  let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:32:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in local6 = 0;
+};
+static field <T extends core::Object? = dynamic>(core::bool, T%) → core::Null? fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → core::Null? {
+  late final T% local2;
+  late final core::int local4;
+  late final asy::FutureOr<core::int> local6;
+  if(b) {
+    local2 = value;
+    local4 = 0;
+    local6 = 0;
+  }
+  local2 = value;
+  local4 = 0;
+  local6 = 0;
+  let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:70:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in local2 = value;
+  let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:71:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in local4 = 0;
+  let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:72:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in local6 = 0;
+};
+static field () → core::Null? fieldCompound = () → core::Null? {
+  late final core::int local4;
+  local4 = 0;
+  let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:88:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 += 0; // error
+  ^^^^^^" in local4 = local4.{core::num::+}(0);
+};
+static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
+  late final self::methodDirect::T% local2;
+  late final core::int local4;
+  late final asy::FutureOr<core::int> local6;
+  local2 = value;
+  local4 = 0;
+  local6 = 0;
+  let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:16:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in local2 = value;
+  let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:17:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in local4 = 0;
+  let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:18:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in local6 = 0;
+}
+static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
+  late final self::methodConditional::T% local2;
+  late final core::int local4;
+  late final asy::FutureOr<core::int> local6;
+  if(b) {
+    local2 = value;
+    local4 = 0;
+    local6 = 0;
+  }
+  local2 = value;
+  local4 = 0;
+  local6 = 0;
+  let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:50:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in local2 = value;
+  let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:51:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in local4 = 0;
+  let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:52:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in local6 = 0;
+}
+static method methodCompound() → dynamic {
+  late final core::int local4;
+  local4 = 0;
+  let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:80:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 += 0; // error
+  ^^^^^^" in local4 = local4.{core::num::+}(0);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/definitely_assigned.dart.weak.expect b/pkg/front_end/testcases/nnbd/definitely_assigned.dart.weak.expect
new file mode 100644
index 0000000..9751d45
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/definitely_assigned.dart.weak.expect
@@ -0,0 +1,159 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:16:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:17:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:18:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:30:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:31:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:32:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:50:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:51:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:52:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:70:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:71:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:72:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:80:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:88:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static field <T extends core::Object? = dynamic>(T%) → core::Null? fieldDirect = <T extends core::Object? = dynamic>(T% value) → core::Null? {
+  late final T% local2;
+  late final core::int local4;
+  late final asy::FutureOr<core::int> local6;
+  local2 = value;
+  local4 = 0;
+  local6 = 0;
+  let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:30:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in local2 = value;
+  let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:31:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in local4 = 0;
+  let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:32:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in local6 = 0;
+};
+static field <T extends core::Object? = dynamic>(core::bool, T%) → core::Null? fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → core::Null? {
+  late final T% local2;
+  late final core::int local4;
+  late final asy::FutureOr<core::int> local6;
+  if(b) {
+    local2 = value;
+    local4 = 0;
+    local6 = 0;
+  }
+  local2 = value;
+  local4 = 0;
+  local6 = 0;
+  let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:70:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in local2 = value;
+  let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:71:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in local4 = 0;
+  let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:72:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in local6 = 0;
+};
+static field () → core::Null? fieldCompound = () → core::Null? {
+  late final core::int local4;
+  local4 = 0;
+  let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:88:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 += 0; // error
+  ^^^^^^" in local4 = local4.{core::num::+}(0);
+};
+static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
+  late final self::methodDirect::T% local2;
+  late final core::int local4;
+  late final asy::FutureOr<core::int> local6;
+  local2 = value;
+  local4 = 0;
+  local6 = 0;
+  let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:16:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in local2 = value;
+  let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:17:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in local4 = 0;
+  let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:18:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in local6 = 0;
+}
+static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
+  late final self::methodConditional::T% local2;
+  late final core::int local4;
+  late final asy::FutureOr<core::int> local6;
+  if(b) {
+    local2 = value;
+    local4 = 0;
+    local6 = 0;
+  }
+  local2 = value;
+  local4 = 0;
+  local6 = 0;
+  let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:50:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in local2 = value;
+  let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:51:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in local4 = 0;
+  let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:52:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in local6 = 0;
+}
+static method methodCompound() → dynamic {
+  late final core::int local4;
+  local4 = 0;
+  let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:80:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 += 0; // error
+  ^^^^^^" in local4 = local4.{core::num::+}(0);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/definitely_assigned.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/definitely_assigned.dart.weak.transformed.expect
new file mode 100644
index 0000000..9751d45
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/definitely_assigned.dart.weak.transformed.expect
@@ -0,0 +1,159 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:16:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:17:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:18:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:30:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:31:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:32:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:50:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:51:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:52:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:70:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+//   local2 = value; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:71:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:72:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+//   local6 = 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:80:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_assigned.dart:88:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static field <T extends core::Object? = dynamic>(T%) → core::Null? fieldDirect = <T extends core::Object? = dynamic>(T% value) → core::Null? {
+  late final T% local2;
+  late final core::int local4;
+  late final asy::FutureOr<core::int> local6;
+  local2 = value;
+  local4 = 0;
+  local6 = 0;
+  let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:30:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in local2 = value;
+  let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:31:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in local4 = 0;
+  let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:32:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in local6 = 0;
+};
+static field <T extends core::Object? = dynamic>(core::bool, T%) → core::Null? fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → core::Null? {
+  late final T% local2;
+  late final core::int local4;
+  late final asy::FutureOr<core::int> local6;
+  if(b) {
+    local2 = value;
+    local4 = 0;
+    local6 = 0;
+  }
+  local2 = value;
+  local4 = 0;
+  local6 = 0;
+  let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:70:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in local2 = value;
+  let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:71:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in local4 = 0;
+  let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:72:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in local6 = 0;
+};
+static field () → core::Null? fieldCompound = () → core::Null? {
+  late final core::int local4;
+  local4 = 0;
+  let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:88:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 += 0; // error
+  ^^^^^^" in local4 = local4.{core::num::+}(0);
+};
+static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
+  late final self::methodDirect::T% local2;
+  late final core::int local4;
+  late final asy::FutureOr<core::int> local6;
+  local2 = value;
+  local4 = 0;
+  local6 = 0;
+  let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:16:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in local2 = value;
+  let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:17:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in local4 = 0;
+  let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:18:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in local6 = 0;
+}
+static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
+  late final self::methodConditional::T% local2;
+  late final core::int local4;
+  late final asy::FutureOr<core::int> local6;
+  if(b) {
+    local2 = value;
+    local4 = 0;
+    local6 = 0;
+  }
+  local2 = value;
+  local4 = 0;
+  local6 = 0;
+  let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:50:3: Error: Non-nullable late final variable 'local2' definitely assigned.
+  local2 = value; // error
+  ^^^^^^" in local2 = value;
+  let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:51:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 = 0; // error
+  ^^^^^^" in local4 = 0;
+  let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:52:3: Error: Non-nullable late final variable 'local6' definitely assigned.
+  local6 = 0; // error
+  ^^^^^^" in local6 = 0;
+}
+static method methodCompound() → dynamic {
+  late final core::int local4;
+  local4 = 0;
+  let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_assigned.dart:80:3: Error: Non-nullable late final variable 'local4' definitely assigned.
+  local4 += 0; // error
+  ^^^^^^" in local4 = local4.{core::num::+}(0);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/definitely_unassigned.dart b/pkg/front_end/testcases/nnbd/definitely_unassigned.dart
new file mode 100644
index 0000000..5843b75
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/definitely_unassigned.dart
@@ -0,0 +1,115 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+
+methodDirect<T>(T value) {
+  T local1;
+  late T local2;
+  int local3;
+  late int local4;
+  FutureOr<int> local5;
+  late FutureOr<int> local6;
+  late T local7 = value;
+
+  local1; // error
+  local2; // error
+  local3; // error
+  local4; // error
+  local5; // error
+  local6; // error
+  local7; // ok
+}
+
+var fieldDirect = <T>(T value) {
+  T local1;
+  late T local2;
+  int local3;
+  late int local4;
+  FutureOr<int> local5;
+  late FutureOr<int> local6;
+  late T local7 = value;
+
+  local1; // error
+  local2; // error
+  local3; // error
+  local4; // error
+  local5; // error
+  local6; // error
+  local7; // ok
+};
+
+methodConditional<T>(bool b, T value) {
+  T local1;
+  late T local2;
+  int local3;
+  late int local4;
+  FutureOr<int> local5;
+  late FutureOr<int> local6;
+  late T local7 = value;
+
+  if (b) {
+    local1 = value;
+    local2 = value;
+    local3 = 0;
+    local4 = 0;
+    local5 = 0;
+    local6 = 0;
+    local7 = value;
+  }
+
+  local1; // error
+  local2; // ok
+  local3; // error
+  local4; // ok
+  local5; // error
+  local6; // ok
+  local7; // ok
+}
+
+var fieldConditional = <T>(bool b, T value) {
+  T local1;
+  late T local2;
+  int local3;
+  late int local4;
+  FutureOr<int> local5;
+  late FutureOr<int> local6;
+  late T local7 = value;
+
+  if (b) {
+    local1 = value;
+    local2 = value;
+    local3 = 0;
+    local4 = 0;
+    local5 = 0;
+    local6 = 0;
+    local7; // ok
+  }
+
+  local1; // error
+  local2; // ok
+  local3; // error
+  local4; // ok
+  local5; // error
+  local6; // ok
+  local7; // ok
+};
+
+methodCompound() {
+  int local3;
+  late int local4;
+
+  local3 += 0; // error
+  local4 += 0; // error
+}
+
+var fieldCompound = () {
+  int local3;
+  late int local4;
+
+  local3 += 0; // error
+  local4 += 0; // error
+};
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.outline.expect b/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.outline.expect
new file mode 100644
index 0000000..1a5e8e7
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.outline.expect
@@ -0,0 +1,17 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+import "dart:async";
+
+static field <T extends core::Object? = dynamic>(T%) → core::Null? fieldDirect;
+static field <T extends core::Object? = dynamic>(core::bool, T%) → core::Null? fieldConditional;
+static field () → core::Null? fieldCompound;
+static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic
+  ;
+static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic
+  ;
+static method methodCompound() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.strong.expect b/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.strong.expect
new file mode 100644
index 0000000..ba765a9
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.strong.expect
@@ -0,0 +1,237 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:17:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
+//   local2; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:19:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+//   local4; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:21:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
+//   local6; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:35:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
+//   local2; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:37:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+//   local4; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:39:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
+//   local6; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:104:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:112:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static field <T extends core::Object? = dynamic>(T%) → core::Null? fieldDirect = <T extends core::Object? = dynamic>(T% value) → core::Null? {
+  T% local1;
+  late T% local2;
+  core::int local3;
+  late core::int local4;
+  asy::FutureOr<core::int> local5;
+  late asy::FutureOr<core::int> local6;
+  late T% local7 = value;
+  let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:35:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
+  local2; // error
+  ^^^^^^" in local2;
+  let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:37:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+  local4; // error
+  ^^^^^^" in local4;
+  let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:39:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
+  local6; // error
+  ^^^^^^" in local6;
+  local7;
+};
+static field <T extends core::Object? = dynamic>(core::bool, T%) → core::Null? fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → core::Null? {
+  T% local1;
+  late T% local2;
+  core::int local3;
+  late core::int local4;
+  asy::FutureOr<core::int> local5;
+  late asy::FutureOr<core::int> local6;
+  late T% local7 = value;
+  if(b) {
+    local1 = value;
+    local2 = value;
+    local3 = 0;
+    local4 = 0;
+    local5 = 0;
+    local6 = 0;
+    local7;
+  }
+  let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  local2;
+  let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  local4;
+  let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  local6;
+  local7;
+};
+static field () → core::Null? fieldCompound = () → core::Null? {
+  core::int local3;
+  late core::int local4;
+  local3 = (let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3 += 0; // error
+  ^^^^^^" in local3).{core::num::+}(0);
+  local4 = (let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:112:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+  local4 += 0; // error
+  ^^^^^^" in local4).{core::num::+}(0);
+};
+static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
+  self::methodDirect::T% local1;
+  late self::methodDirect::T% local2;
+  core::int local3;
+  late core::int local4;
+  asy::FutureOr<core::int> local5;
+  late asy::FutureOr<core::int> local6;
+  late self::methodDirect::T% local7 = value;
+  let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:17:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
+  local2; // error
+  ^^^^^^" in local2;
+  let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:19:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+  local4; // error
+  ^^^^^^" in local4;
+  let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:21:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
+  local6; // error
+  ^^^^^^" in local6;
+  local7;
+}
+static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
+  self::methodConditional::T% local1;
+  late self::methodConditional::T% local2;
+  core::int local3;
+  late core::int local4;
+  asy::FutureOr<core::int> local5;
+  late asy::FutureOr<core::int> local6;
+  late self::methodConditional::T% local7 = value;
+  if(b) {
+    local1 = value;
+    local2 = value;
+    local3 = 0;
+    local4 = 0;
+    local5 = 0;
+    local6 = 0;
+    local7 = value;
+  }
+  let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  local2;
+  let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  local4;
+  let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  local6;
+  local7;
+}
+static method methodCompound() → dynamic {
+  core::int local3;
+  late core::int local4;
+  local3 = (let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3 += 0; // error
+  ^^^^^^" in local3).{core::num::+}(0);
+  local4 = (let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:104:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+  local4 += 0; // error
+  ^^^^^^" in local4).{core::num::+}(0);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.strong.transformed.expect
new file mode 100644
index 0000000..9f695f8
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.strong.transformed.expect
@@ -0,0 +1,245 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:17:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
+//   local2; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:19:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+//   local4; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:21:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
+//   local6; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:35:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
+//   local2; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:37:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+//   local4; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:39:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
+//   local6; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:104:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:112:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static field <T extends core::Object? = dynamic>(T%) → core::Null? fieldDirect = <T extends core::Object? = dynamic>(T% value) → core::Null? {
+  T% local1;
+  late T% local2;
+  core::int local3;
+  late core::int local4;
+  asy::FutureOr<core::int> local5;
+  late asy::FutureOr<core::int> local6;
+  function #local7#initializer() → T%
+    return value;
+  late T% local7 = #local7#initializer.call();
+  let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:35:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
+  local2; // error
+  ^^^^^^" in local2;
+  let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:37:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+  local4; // error
+  ^^^^^^" in local4;
+  let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:39:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
+  local6; // error
+  ^^^^^^" in local6;
+  local7;
+};
+static field <T extends core::Object? = dynamic>(core::bool, T%) → core::Null? fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → core::Null? {
+  T% local1;
+  late T% local2;
+  core::int local3;
+  late core::int local4;
+  asy::FutureOr<core::int> local5;
+  late asy::FutureOr<core::int> local6;
+  function #local7#initializer() → T%
+    return value;
+  late T% local7 = #local7#initializer.call();
+  if(b) {
+    local1 = value;
+    local2 = value;
+    local3 = 0;
+    local4 = 0;
+    local5 = 0;
+    local6 = 0;
+    local7;
+  }
+  let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  local2;
+  let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  local4;
+  let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  local6;
+  local7;
+};
+static field () → core::Null? fieldCompound = () → core::Null? {
+  core::int local3;
+  late core::int local4;
+  local3 = (let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3 += 0; // error
+  ^^^^^^" in local3).{core::num::+}(0);
+  local4 = (let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:112:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+  local4 += 0; // error
+  ^^^^^^" in local4).{core::num::+}(0);
+};
+static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
+  self::methodDirect::T% local1;
+  late self::methodDirect::T% local2;
+  core::int local3;
+  late core::int local4;
+  asy::FutureOr<core::int> local5;
+  late asy::FutureOr<core::int> local6;
+  function #local7#initializer() → self::methodDirect::T%
+    return value;
+  late self::methodDirect::T% local7 = #local7#initializer.call();
+  let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:17:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
+  local2; // error
+  ^^^^^^" in local2;
+  let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:19:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+  local4; // error
+  ^^^^^^" in local4;
+  let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:21:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
+  local6; // error
+  ^^^^^^" in local6;
+  local7;
+}
+static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
+  self::methodConditional::T% local1;
+  late self::methodConditional::T% local2;
+  core::int local3;
+  late core::int local4;
+  asy::FutureOr<core::int> local5;
+  late asy::FutureOr<core::int> local6;
+  function #local7#initializer() → self::methodConditional::T%
+    return value;
+  late self::methodConditional::T% local7 = #local7#initializer.call();
+  if(b) {
+    local1 = value;
+    local2 = value;
+    local3 = 0;
+    local4 = 0;
+    local5 = 0;
+    local6 = 0;
+    local7 = value;
+  }
+  let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  local2;
+  let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  local4;
+  let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  local6;
+  local7;
+}
+static method methodCompound() → dynamic {
+  core::int local3;
+  late core::int local4;
+  local3 = (let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3 += 0; // error
+  ^^^^^^" in local3).{core::num::+}(0);
+  local4 = (let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:104:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+  local4 += 0; // error
+  ^^^^^^" in local4).{core::num::+}(0);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.weak.expect b/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.weak.expect
new file mode 100644
index 0000000..ba765a9
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.weak.expect
@@ -0,0 +1,237 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:17:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
+//   local2; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:19:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+//   local4; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:21:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
+//   local6; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:35:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
+//   local2; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:37:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+//   local4; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:39:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
+//   local6; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:104:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:112:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static field <T extends core::Object? = dynamic>(T%) → core::Null? fieldDirect = <T extends core::Object? = dynamic>(T% value) → core::Null? {
+  T% local1;
+  late T% local2;
+  core::int local3;
+  late core::int local4;
+  asy::FutureOr<core::int> local5;
+  late asy::FutureOr<core::int> local6;
+  late T% local7 = value;
+  let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:35:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
+  local2; // error
+  ^^^^^^" in local2;
+  let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:37:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+  local4; // error
+  ^^^^^^" in local4;
+  let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:39:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
+  local6; // error
+  ^^^^^^" in local6;
+  local7;
+};
+static field <T extends core::Object? = dynamic>(core::bool, T%) → core::Null? fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → core::Null? {
+  T% local1;
+  late T% local2;
+  core::int local3;
+  late core::int local4;
+  asy::FutureOr<core::int> local5;
+  late asy::FutureOr<core::int> local6;
+  late T% local7 = value;
+  if(b) {
+    local1 = value;
+    local2 = value;
+    local3 = 0;
+    local4 = 0;
+    local5 = 0;
+    local6 = 0;
+    local7;
+  }
+  let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  local2;
+  let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  local4;
+  let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  local6;
+  local7;
+};
+static field () → core::Null? fieldCompound = () → core::Null? {
+  core::int local3;
+  late core::int local4;
+  local3 = (let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3 += 0; // error
+  ^^^^^^" in local3).{core::num::+}(0);
+  local4 = (let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:112:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+  local4 += 0; // error
+  ^^^^^^" in local4).{core::num::+}(0);
+};
+static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
+  self::methodDirect::T% local1;
+  late self::methodDirect::T% local2;
+  core::int local3;
+  late core::int local4;
+  asy::FutureOr<core::int> local5;
+  late asy::FutureOr<core::int> local6;
+  late self::methodDirect::T% local7 = value;
+  let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:17:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
+  local2; // error
+  ^^^^^^" in local2;
+  let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:19:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+  local4; // error
+  ^^^^^^" in local4;
+  let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:21:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
+  local6; // error
+  ^^^^^^" in local6;
+  local7;
+}
+static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
+  self::methodConditional::T% local1;
+  late self::methodConditional::T% local2;
+  core::int local3;
+  late core::int local4;
+  asy::FutureOr<core::int> local5;
+  late asy::FutureOr<core::int> local6;
+  late self::methodConditional::T% local7 = value;
+  if(b) {
+    local1 = value;
+    local2 = value;
+    local3 = 0;
+    local4 = 0;
+    local5 = 0;
+    local6 = 0;
+    local7 = value;
+  }
+  let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  local2;
+  let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  local4;
+  let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  local6;
+  local7;
+}
+static method methodCompound() → dynamic {
+  core::int local3;
+  late core::int local4;
+  local3 = (let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3 += 0; // error
+  ^^^^^^" in local3).{core::num::+}(0);
+  local4 = (let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:104:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+  local4 += 0; // error
+  ^^^^^^" in local4).{core::num::+}(0);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.weak.transformed.expect
new file mode 100644
index 0000000..9f695f8
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/definitely_unassigned.dart.weak.transformed.expect
@@ -0,0 +1,245 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:17:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
+//   local2; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:19:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+//   local4; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:21:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
+//   local6; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:35:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
+//   local2; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:37:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+//   local4; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:39:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
+//   local6; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+//   local1; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+//   local5; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:104:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+//   local3 += 0; // error
+//   ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned.dart:112:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+//   local4 += 0; // error
+//   ^^^^^^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static field <T extends core::Object? = dynamic>(T%) → core::Null? fieldDirect = <T extends core::Object? = dynamic>(T% value) → core::Null? {
+  T% local1;
+  late T% local2;
+  core::int local3;
+  late core::int local4;
+  asy::FutureOr<core::int> local5;
+  late asy::FutureOr<core::int> local6;
+  function #local7#initializer() → T%
+    return value;
+  late T% local7 = #local7#initializer.call();
+  let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:34:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:35:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
+  local2; // error
+  ^^^^^^" in local2;
+  let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:36:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:37:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+  local4; // error
+  ^^^^^^" in local4;
+  let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:38:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:39:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
+  local6; // error
+  ^^^^^^" in local6;
+  local7;
+};
+static field <T extends core::Object? = dynamic>(core::bool, T%) → core::Null? fieldConditional = <T extends core::Object? = dynamic>(core::bool b, T% value) → core::Null? {
+  T% local1;
+  late T% local2;
+  core::int local3;
+  late core::int local4;
+  asy::FutureOr<core::int> local5;
+  late asy::FutureOr<core::int> local6;
+  function #local7#initializer() → T%
+    return value;
+  late T% local7 = #local7#initializer.call();
+  if(b) {
+    local1 = value;
+    local2 = value;
+    local3 = 0;
+    local4 = 0;
+    local5 = 0;
+    local6 = 0;
+    local7;
+  }
+  let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:90:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  local2;
+  let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:92:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  local4;
+  let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:94:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  local6;
+  local7;
+};
+static field () → core::Null? fieldCompound = () → core::Null? {
+  core::int local3;
+  late core::int local4;
+  local3 = (let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:111:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3 += 0; // error
+  ^^^^^^" in local3).{core::num::+}(0);
+  local4 = (let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:112:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+  local4 += 0; // error
+  ^^^^^^" in local4).{core::num::+}(0);
+};
+static method methodDirect<T extends core::Object? = dynamic>(self::methodDirect::T% value) → dynamic {
+  self::methodDirect::T% local1;
+  late self::methodDirect::T% local2;
+  core::int local3;
+  late core::int local4;
+  asy::FutureOr<core::int> local5;
+  late asy::FutureOr<core::int> local6;
+  function #local7#initializer() → self::methodDirect::T%
+    return value;
+  late self::methodDirect::T% local7 = #local7#initializer.call();
+  let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:16:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:17:3: Error: Non-nullable late variable 'local2' without initializer is definitely unassigned.
+  local2; // error
+  ^^^^^^" in local2;
+  let final<BottomType> #t14 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:18:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:19:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+  local4; // error
+  ^^^^^^" in local4;
+  let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:20:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:21:3: Error: Non-nullable late variable 'local6' without initializer is definitely unassigned.
+  local6; // error
+  ^^^^^^" in local6;
+  local7;
+}
+static method methodConditional<T extends core::Object? = dynamic>(core::bool b, self::methodConditional::T% value) → dynamic {
+  self::methodConditional::T% local1;
+  late self::methodConditional::T% local2;
+  core::int local3;
+  late core::int local4;
+  asy::FutureOr<core::int> local5;
+  late asy::FutureOr<core::int> local6;
+  function #local7#initializer() → self::methodConditional::T%
+    return value;
+  late self::methodConditional::T% local7 = #local7#initializer.call();
+  if(b) {
+    local1 = value;
+    local2 = value;
+    local3 = 0;
+    local4 = 0;
+    local5 = 0;
+    local6 = 0;
+    local7 = value;
+  }
+  let final<BottomType> #t18 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:62:3: Error: Non-nullable variable 'local1' must be assigned before it can be used.
+  local1; // error
+  ^^^^^^" in local1;
+  local2;
+  let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:64:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3; // error
+  ^^^^^^" in local3;
+  local4;
+  let final<BottomType> #t20 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:66:3: Error: Non-nullable variable 'local5' must be assigned before it can be used.
+  local5; // error
+  ^^^^^^" in local5;
+  local6;
+  local7;
+}
+static method methodCompound() → dynamic {
+  core::int local3;
+  late core::int local4;
+  local3 = (let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:103:3: Error: Non-nullable variable 'local3' must be assigned before it can be used.
+  local3 += 0; // error
+  ^^^^^^" in local3).{core::num::+}(0);
+  local4 = (let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned.dart:104:3: Error: Non-nullable late variable 'local4' without initializer is definitely unassigned.
+  local4 += 0; // error
+  ^^^^^^" in local4).{core::num::+}(0);
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.strong.expect b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.strong.expect
index 1696100..3b6af6d 100644
--- a/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.strong.expect
@@ -1,4 +1,15 @@
 library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:15:9: Error: Non-nullable late variable 'value' without initializer is definitely unassigned.
+//     bar(value); // Error.
+//         ^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:16:12: Error: Non-nullable late variable 'intValue' without initializer is definitely unassigned.
+//     barInt(intValue); // Error.
+//            ^^^^^^^^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -11,8 +22,12 @@
   method foo() → dynamic {
     late self::A::T% value;
     late core::int intValue;
-    this.{self::A::bar}(value);
-    this.{self::A::barInt}(intValue);
+    this.{self::A::bar}(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:15:9: Error: Non-nullable late variable 'value' without initializer is definitely unassigned.
+    bar(value); // Error.
+        ^^^^^" in value);
+    this.{self::A::barInt}(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:16:12: Error: Non-nullable late variable 'intValue' without initializer is definitely unassigned.
+    barInt(intValue); // Error.
+           ^^^^^^^^" in intValue);
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.strong.transformed.expect
index 1696100..3b6af6d 100644
--- a/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.strong.transformed.expect
@@ -1,4 +1,15 @@
 library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:15:9: Error: Non-nullable late variable 'value' without initializer is definitely unassigned.
+//     bar(value); // Error.
+//         ^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:16:12: Error: Non-nullable late variable 'intValue' without initializer is definitely unassigned.
+//     barInt(intValue); // Error.
+//            ^^^^^^^^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -11,8 +22,12 @@
   method foo() → dynamic {
     late self::A::T% value;
     late core::int intValue;
-    this.{self::A::bar}(value);
-    this.{self::A::barInt}(intValue);
+    this.{self::A::bar}(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:15:9: Error: Non-nullable late variable 'value' without initializer is definitely unassigned.
+    bar(value); // Error.
+        ^^^^^" in value);
+    this.{self::A::barInt}(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:16:12: Error: Non-nullable late variable 'intValue' without initializer is definitely unassigned.
+    barInt(intValue); // Error.
+           ^^^^^^^^" in intValue);
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.expect b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.expect
index 1696100..3b6af6d 100644
--- a/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.expect
@@ -1,4 +1,15 @@
 library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:15:9: Error: Non-nullable late variable 'value' without initializer is definitely unassigned.
+//     bar(value); // Error.
+//         ^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:16:12: Error: Non-nullable late variable 'intValue' without initializer is definitely unassigned.
+//     barInt(intValue); // Error.
+//            ^^^^^^^^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -11,8 +22,12 @@
   method foo() → dynamic {
     late self::A::T% value;
     late core::int intValue;
-    this.{self::A::bar}(value);
-    this.{self::A::barInt}(intValue);
+    this.{self::A::bar}(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:15:9: Error: Non-nullable late variable 'value' without initializer is definitely unassigned.
+    bar(value); // Error.
+        ^^^^^" in value);
+    this.{self::A::barInt}(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:16:12: Error: Non-nullable late variable 'intValue' without initializer is definitely unassigned.
+    barInt(intValue); // Error.
+           ^^^^^^^^" in intValue);
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.transformed.expect
index 1696100..3b6af6d 100644
--- a/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart.weak.transformed.expect
@@ -1,4 +1,15 @@
 library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:15:9: Error: Non-nullable late variable 'value' without initializer is definitely unassigned.
+//     bar(value); // Error.
+//         ^^^^^
+//
+// pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:16:12: Error: Non-nullable late variable 'intValue' without initializer is definitely unassigned.
+//     barInt(intValue); // Error.
+//            ^^^^^^^^
+//
 import self as self;
 import "dart:core" as core;
 
@@ -11,8 +22,12 @@
   method foo() → dynamic {
     late self::A::T% value;
     late core::int intValue;
-    this.{self::A::bar}(value);
-    this.{self::A::barInt}(intValue);
+    this.{self::A::bar}(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:15:9: Error: Non-nullable late variable 'value' without initializer is definitely unassigned.
+    bar(value); // Error.
+        ^^^^^" in value);
+    this.{self::A::barInt}(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/definitely_unassigned_late_local_variables.dart:16:12: Error: Non-nullable late variable 'intValue' without initializer is definitely unassigned.
+    barInt(intValue); // Error.
+           ^^^^^^^^" in intValue);
   }
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/forbidden_supers.dart.weak.expect b/pkg/front_end/testcases/nnbd/forbidden_supers.dart.weak.expect
index 7dd2f83..5fac846 100644
--- a/pkg/front_end/testcases/nnbd/forbidden_supers.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/forbidden_supers.dart.weak.expect
@@ -2,59 +2,59 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:12:7: Warning: Mixing in 'Aoo' marked with '?'.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:12:7: Error: Can't mix 'Aoo' in because it's marked with '?'.
 // class Coo extends Boo with Aoo? {}
 //       ^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:14:7: Warning: Extending 'Aoo' marked with '?'.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:14:7: Error: Can't extend 'Aoo' because it's marked with '?'.
 // class Doo extends Aoo? {}
 //       ^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:16:7: Warning: Implementing 'Boo' marked with '?'.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:16:7: Error: Can't implement 'Boo' because it's marked with '?'.
 // class Eoo implements Boo? {}
 //       ^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:18:7: Warning: Extending 'Boo' marked with '?'.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:18:7: Error: Can't extend 'Boo' because it's marked with '?'.
 // class Foo extends Boo? with Aoo {}
 //       ^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:20:7: Warning: Extending 'Boo' marked with '?'.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:20:7: Error: Can't extend 'Boo' because it's marked with '?'.
 // class Goo = Boo? with Aoo?;
 //       ^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:20:7: Warning: Mixing in 'Aoo' marked with '?'.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:20:7: Error: Can't mix 'Aoo' in because it's marked with '?'.
 // class Goo = Boo? with Aoo?;
 //       ^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:22:7: Warning: Implementing 'Boo' marked with '?'.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:22:7: Error: Can't implement 'Boo' because it's marked with '?'.
 // class Hoo extends Object with Aoo implements Boo? {}
 //       ^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:24:7: Warning: Implementing 'Boo' marked with '?'.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:24:7: Error: Can't implement 'Boo' because it's marked with '?'.
 // class Ioo = Object with Aoo implements Boo?;
 //       ^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:32:7: Warning: Extending 'Aoo' marked with '?'.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:32:7: Error: Can't extend 'Aoo' because it's marked with '?'.
 // mixin Moo1 on Aoo? implements Boo? {}
 //       ^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:32:7: Warning: Implementing 'Boo' marked with '?'.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:32:7: Error: Can't implement 'Boo' because it's marked with '?'.
 // mixin Moo1 on Aoo? implements Boo? {}
 //       ^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:34:7: Warning: Extending 'Aoo' marked with '?'.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:34:7: Error: Can't extend 'Aoo' because it's marked with '?'.
 // mixin Moo2 on Aoo?, Boo? {}
 //       ^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:34:7: Warning: Extending 'Boo' marked with '?'.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:34:7: Error: Can't extend 'Boo' because it's marked with '?'.
 // mixin Moo2 on Aoo?, Boo? {}
 //       ^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:36:7: Warning: Implementing 'Aoo' marked with '?'.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:36:7: Error: Can't implement 'Aoo' because it's marked with '?'.
 // mixin Moo3 implements Aoo?, Boo? {}
 //       ^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:36:7: Warning: Implementing 'Boo' marked with '?'.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:36:7: Error: Can't implement 'Boo' because it's marked with '?'.
 // mixin Moo3 implements Aoo?, Boo? {}
 //       ^^^^
 //
diff --git a/pkg/front_end/testcases/nnbd/forbidden_supers.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/forbidden_supers.dart.weak.transformed.expect
index 2222d06..a6f6d2a 100644
--- a/pkg/front_end/testcases/nnbd/forbidden_supers.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/forbidden_supers.dart.weak.transformed.expect
@@ -2,59 +2,59 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:12:7: Warning: Mixing in 'Aoo' marked with '?'.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:12:7: Error: Can't mix 'Aoo' in because it's marked with '?'.
 // class Coo extends Boo with Aoo? {}
 //       ^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:14:7: Warning: Extending 'Aoo' marked with '?'.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:14:7: Error: Can't extend 'Aoo' because it's marked with '?'.
 // class Doo extends Aoo? {}
 //       ^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:16:7: Warning: Implementing 'Boo' marked with '?'.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:16:7: Error: Can't implement 'Boo' because it's marked with '?'.
 // class Eoo implements Boo? {}
 //       ^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:18:7: Warning: Extending 'Boo' marked with '?'.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:18:7: Error: Can't extend 'Boo' because it's marked with '?'.
 // class Foo extends Boo? with Aoo {}
 //       ^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:20:7: Warning: Extending 'Boo' marked with '?'.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:20:7: Error: Can't extend 'Boo' because it's marked with '?'.
 // class Goo = Boo? with Aoo?;
 //       ^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:20:7: Warning: Mixing in 'Aoo' marked with '?'.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:20:7: Error: Can't mix 'Aoo' in because it's marked with '?'.
 // class Goo = Boo? with Aoo?;
 //       ^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:22:7: Warning: Implementing 'Boo' marked with '?'.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:22:7: Error: Can't implement 'Boo' because it's marked with '?'.
 // class Hoo extends Object with Aoo implements Boo? {}
 //       ^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:24:7: Warning: Implementing 'Boo' marked with '?'.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:24:7: Error: Can't implement 'Boo' because it's marked with '?'.
 // class Ioo = Object with Aoo implements Boo?;
 //       ^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:32:7: Warning: Extending 'Aoo' marked with '?'.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:32:7: Error: Can't extend 'Aoo' because it's marked with '?'.
 // mixin Moo1 on Aoo? implements Boo? {}
 //       ^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:32:7: Warning: Implementing 'Boo' marked with '?'.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:32:7: Error: Can't implement 'Boo' because it's marked with '?'.
 // mixin Moo1 on Aoo? implements Boo? {}
 //       ^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:34:7: Warning: Extending 'Aoo' marked with '?'.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:34:7: Error: Can't extend 'Aoo' because it's marked with '?'.
 // mixin Moo2 on Aoo?, Boo? {}
 //       ^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:34:7: Warning: Extending 'Boo' marked with '?'.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:34:7: Error: Can't extend 'Boo' because it's marked with '?'.
 // mixin Moo2 on Aoo?, Boo? {}
 //       ^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:36:7: Warning: Implementing 'Aoo' marked with '?'.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:36:7: Error: Can't implement 'Aoo' because it's marked with '?'.
 // mixin Moo3 implements Aoo?, Boo? {}
 //       ^^^^
 //
-// pkg/front_end/testcases/nnbd/forbidden_supers.dart:36:7: Warning: Implementing 'Boo' marked with '?'.
+// pkg/front_end/testcases/nnbd/forbidden_supers.dart:36:7: Error: Can't implement 'Boo' because it's marked with '?'.
 // mixin Moo3 implements Aoo?, Boo? {}
 //       ^^^^
 //
diff --git a/pkg/front_end/testcases/nnbd/forin.dart.weak.expect b/pkg/front_end/testcases/nnbd/forin.dart.weak.expect
index 36438f5..d6e6324 100644
--- a/pkg/front_end/testcases/nnbd/forin.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/forin.dart.weak.expect
@@ -2,47 +2,47 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/forin.dart:9:17: Warning: Assigning value of type 'Iterable<int>?' to a variable of type 'Iterable<dynamic>'.
+// pkg/front_end/testcases/nnbd/forin.dart:9:17: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>'.
 //  - 'Iterable' is from 'dart:core'.
 //   for (int x in i2) x;
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/forin.dart:10:18: Warning: Assigning value of type 'Iterable<int>?' to a variable of type 'Iterable<dynamic>'.
+// pkg/front_end/testcases/nnbd/forin.dart:10:18: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>'.
 //  - 'Iterable' is from 'dart:core'.
 //   [for (int x in i2) x];
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/forin.dart:12:17: Warning: Assigning value of type 'List<int>?' to a variable of type 'Iterable<dynamic>'.
+// pkg/front_end/testcases/nnbd/forin.dart:12:17: Error: The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>'.
 //  - 'List' is from 'dart:core'.
 //  - 'Iterable' is from 'dart:core'.
 //   for (int x in l2) x;
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/forin.dart:13:18: Warning: Assigning value of type 'List<int>?' to a variable of type 'Iterable<dynamic>'.
+// pkg/front_end/testcases/nnbd/forin.dart:13:18: Error: The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>'.
 //  - 'List' is from 'dart:core'.
 //  - 'Iterable' is from 'dart:core'.
 //   [for (int x in l2) x];
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/forin.dart:15:17: Warning: Assigning value of type 'Object' to a variable of type 'Iterable<dynamic>'.
+// pkg/front_end/testcases/nnbd/forin.dart:15:17: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
 //  - 'Object' is from 'dart:core'.
 //  - 'Iterable' is from 'dart:core'.
 //   for (int x in o1) x;
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/forin.dart:16:18: Warning: Assigning value of type 'Object' to a variable of type 'Iterable<dynamic>'.
+// pkg/front_end/testcases/nnbd/forin.dart:16:18: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
 //  - 'Object' is from 'dart:core'.
 //  - 'Iterable' is from 'dart:core'.
 //   [for (int x in o1) x];
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/forin.dart:18:17: Warning: Assigning value of type 'Object?' to a variable of type 'Iterable<dynamic>'.
+// pkg/front_end/testcases/nnbd/forin.dart:18:17: Error: The type 'Object?' used in the 'for' loop must implement 'Iterable<dynamic>'.
 //  - 'Object' is from 'dart:core'.
 //  - 'Iterable' is from 'dart:core'.
 //   for (int x in o2) x;
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/forin.dart:19:18: Warning: Assigning value of type 'Object?' to a variable of type 'Iterable<dynamic>'.
+// pkg/front_end/testcases/nnbd/forin.dart:19:18: Error: The type 'Object?' used in the 'for' loop must implement 'Iterable<dynamic>'.
 //  - 'Object' is from 'dart:core'.
 //  - 'Iterable' is from 'dart:core'.
 //   [for (int x in o2) x];
@@ -52,68 +52,98 @@
 import "dart:core" as core;
 
 static method error(core::Iterable<core::int>? i2, core::List<core::int>? l2, core::Object o1, core::Object? o2) → dynamic {
-  for (core::int x in i2)
-    x;
-  block {
-    final core::List<core::int> #t1 = <core::int>[];
-    for (core::int x in i2)
-      #t1.{core::List::add}(x);
-  } =>#t1;
-  for (core::int x in l2)
+  for (core::int x in let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:9:17: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Iterable' is from 'dart:core'.
+  for (int x in i2) x;
+                ^" in i2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>)
     x;
   block {
     final core::List<core::int> #t2 = <core::int>[];
-    for (core::int x in l2)
+    for (core::int x in let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:10:18: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Iterable' is from 'dart:core'.
+  [for (int x in i2) x];
+                 ^" in i2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>)
       #t2.{core::List::add}(x);
   } =>#t2;
-  for (final dynamic #t3 in o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
-    core::int x = #t3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  for (core::int x in let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:12:17: Error: The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'List' is from 'dart:core'.
+ - 'Iterable' is from 'dart:core'.
+  for (int x in l2) x;
+                ^" in l2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>)
+    x;
+  block {
+    final core::List<core::int> #t5 = <core::int>[];
+    for (core::int x in let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:13:18: Error: The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'List' is from 'dart:core'.
+ - 'Iterable' is from 'dart:core'.
+  [for (int x in l2) x];
+                 ^" in l2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>)
+      #t5.{core::List::add}(x);
+  } =>#t5;
+  for (final dynamic #t7 in let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:15:17: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Object' is from 'dart:core'.
+ - 'Iterable' is from 'dart:core'.
+  for (int x in o1) x;
+                ^" in o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    core::int x = #t7 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
     x;
   }
   block {
-    final core::List<core::int> #t4 = <core::int>[];
-    for (final dynamic #t5 in o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
-      core::int x = #t5 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
-      #t4.{core::List::add}(x);
+    final core::List<core::int> #t9 = <core::int>[];
+    for (final dynamic #t10 in let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:16:18: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Object' is from 'dart:core'.
+ - 'Iterable' is from 'dart:core'.
+  [for (int x in o1) x];
+                 ^" in o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      core::int x = #t10 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+      #t9.{core::List::add}(x);
     }
-  } =>#t4;
-  for (final dynamic #t6 in o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
-    core::int x = #t6 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+  } =>#t9;
+  for (final dynamic #t12 in let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:18:17: Error: The type 'Object?' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Object' is from 'dart:core'.
+ - 'Iterable' is from 'dart:core'.
+  for (int x in o2) x;
+                ^" in o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    core::int x = #t12 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
     x;
   }
   block {
-    final core::List<core::int> #t7 = <core::int>[];
-    for (final dynamic #t8 in o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
-      core::int x = #t8 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
-      #t7.{core::List::add}(x);
+    final core::List<core::int> #t14 = <core::int>[];
+    for (final dynamic #t15 in let final<BottomType> #t16 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:19:18: Error: The type 'Object?' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Object' is from 'dart:core'.
+ - 'Iterable' is from 'dart:core'.
+  [for (int x in o2) x];
+                 ^" in o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      core::int x = #t15 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+      #t14.{core::List::add}(x);
     }
-  } =>#t7;
+  } =>#t14;
 }
 static method ok(core::Iterable<core::int> i1, core::List<core::int> l1, dynamic d) → dynamic {
   for (core::int x in i1)
     x;
   block {
-    final core::List<core::int> #t9 = <core::int>[];
+    final core::List<core::int> #t17 = <core::int>[];
     for (core::int x in i1)
-      #t9.{core::List::add}(x);
-  } =>#t9;
+      #t17.{core::List::add}(x);
+  } =>#t17;
   for (core::int x in l1)
     x;
   block {
-    final core::List<core::int> #t10 = <core::int>[];
+    final core::List<core::int> #t18 = <core::int>[];
     for (core::int x in l1)
-      #t10.{core::List::add}(x);
-  } =>#t10;
-  for (final dynamic #t11 in d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
-    core::int x = #t11 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+      #t18.{core::List::add}(x);
+  } =>#t18;
+  for (final dynamic #t19 in d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+    core::int x = #t19 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
     x;
   }
   block {
-    final core::List<core::int> #t12 = <core::int>[];
-    for (final dynamic #t13 in d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
-      core::int x = #t13 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
-      #t12.{core::List::add}(x);
+    final core::List<core::int> #t20 = <core::int>[];
+    for (final dynamic #t21 in d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>) {
+      core::int x = #t21 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+      #t20.{core::List::add}(x);
     }
-  } =>#t12;
+  } =>#t20;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/forin.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/forin.dart.weak.transformed.expect
index d263365..b65a75c 100644
--- a/pkg/front_end/testcases/nnbd/forin.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/forin.dart.weak.transformed.expect
@@ -2,47 +2,47 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/forin.dart:9:17: Warning: Assigning value of type 'Iterable<int>?' to a variable of type 'Iterable<dynamic>'.
+// pkg/front_end/testcases/nnbd/forin.dart:9:17: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>'.
 //  - 'Iterable' is from 'dart:core'.
 //   for (int x in i2) x;
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/forin.dart:10:18: Warning: Assigning value of type 'Iterable<int>?' to a variable of type 'Iterable<dynamic>'.
+// pkg/front_end/testcases/nnbd/forin.dart:10:18: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>'.
 //  - 'Iterable' is from 'dart:core'.
 //   [for (int x in i2) x];
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/forin.dart:12:17: Warning: Assigning value of type 'List<int>?' to a variable of type 'Iterable<dynamic>'.
+// pkg/front_end/testcases/nnbd/forin.dart:12:17: Error: The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>'.
 //  - 'List' is from 'dart:core'.
 //  - 'Iterable' is from 'dart:core'.
 //   for (int x in l2) x;
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/forin.dart:13:18: Warning: Assigning value of type 'List<int>?' to a variable of type 'Iterable<dynamic>'.
+// pkg/front_end/testcases/nnbd/forin.dart:13:18: Error: The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>'.
 //  - 'List' is from 'dart:core'.
 //  - 'Iterable' is from 'dart:core'.
 //   [for (int x in l2) x];
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/forin.dart:15:17: Warning: Assigning value of type 'Object' to a variable of type 'Iterable<dynamic>'.
+// pkg/front_end/testcases/nnbd/forin.dart:15:17: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
 //  - 'Object' is from 'dart:core'.
 //  - 'Iterable' is from 'dart:core'.
 //   for (int x in o1) x;
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/forin.dart:16:18: Warning: Assigning value of type 'Object' to a variable of type 'Iterable<dynamic>'.
+// pkg/front_end/testcases/nnbd/forin.dart:16:18: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
 //  - 'Object' is from 'dart:core'.
 //  - 'Iterable' is from 'dart:core'.
 //   [for (int x in o1) x];
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/forin.dart:18:17: Warning: Assigning value of type 'Object?' to a variable of type 'Iterable<dynamic>'.
+// pkg/front_end/testcases/nnbd/forin.dart:18:17: Error: The type 'Object?' used in the 'for' loop must implement 'Iterable<dynamic>'.
 //  - 'Object' is from 'dart:core'.
 //  - 'Iterable' is from 'dart:core'.
 //   for (int x in o2) x;
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/forin.dart:19:18: Warning: Assigning value of type 'Object?' to a variable of type 'Iterable<dynamic>'.
+// pkg/front_end/testcases/nnbd/forin.dart:19:18: Error: The type 'Object?' used in the 'for' loop must implement 'Iterable<dynamic>'.
 //  - 'Object' is from 'dart:core'.
 //  - 'Iterable' is from 'dart:core'.
 //   [for (int x in o2) x];
@@ -54,24 +54,10 @@
 
 static method error(core::Iterable<core::int>? i2, core::List<core::int>? l2, core::Object o1, core::Object? o2) → dynamic {
   {
-    core::Iterator<core::int>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int>*>(i2).{core::Iterable::iterator};
-    for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
-      core::int x = :sync-for-iterator.{core::Iterator::current};
-      x;
-    }
-  }
-  block {
-    final core::List<core::int> #t1 = <core::int>[];
-    {
-      core::Iterator<core::int>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int>*>(i2).{core::Iterable::iterator};
-      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
-        core::int x = :sync-for-iterator.{core::Iterator::current};
-        #t1.{core::List::add}(x);
-      }
-    }
-  } =>#t1;
-  {
-    core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(l2).{core::Iterable::iterator};
+    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:9:17: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Iterable' is from 'dart:core'.
+  for (int x in i2) x;
+                ^" in i2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
       core::int x = :sync-for-iterator.{core::Iterator::current};
       x;
@@ -80,7 +66,10 @@
   block {
     final core::List<core::int> #t2 = <core::int>[];
     {
-      core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(l2).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:10:18: Error: The type 'Iterable<int>?' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Iterable' is from 'dart:core'.
+  [for (int x in i2) x];
+                 ^" in i2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int x = :sync-for-iterator.{core::Iterator::current};
         #t2.{core::List::add}(x);
@@ -88,51 +77,92 @@
     }
   } =>#t2;
   {
-    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
+    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:12:17: Error: The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'List' is from 'dart:core'.
+ - 'Iterable' is from 'dart:core'.
+  for (int x in l2) x;
+                ^" in l2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
-      final dynamic #t3 = :sync-for-iterator.{core::Iterator::current};
-      {
-        core::int x = #t3 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
-        x;
-      }
+      core::int x = :sync-for-iterator.{core::Iterator::current};
+      x;
     }
   }
   block {
-    final core::List<core::int> #t4 = <core::int>[];
+    final core::List<core::int> #t5 = <core::int>[];
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:13:18: Error: The type 'List<int>?' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'List' is from 'dart:core'.
+ - 'Iterable' is from 'dart:core'.
+  [for (int x in l2) x];
+                 ^" in l2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
-        final dynamic #t5 = :sync-for-iterator.{core::Iterator::current};
-        {
-          core::int x = #t5 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
-          #t4.{core::List::add}(x);
-        }
+        core::int x = :sync-for-iterator.{core::Iterator::current};
+        #t5.{core::List::add}(x);
       }
     }
-  } =>#t4;
+  } =>#t5;
   {
-    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
+    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:15:17: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Object' is from 'dart:core'.
+ - 'Iterable' is from 'dart:core'.
+  for (int x in o1) x;
+                ^" in o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
-      final dynamic #t6 = :sync-for-iterator.{core::Iterator::current};
+      final dynamic #t8 = :sync-for-iterator.{core::Iterator::current};
       {
-        core::int x = #t6 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+        core::int x = #t8 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
         x;
       }
     }
   }
   block {
-    final core::List<core::int> #t7 = <core::int>[];
+    final core::List<core::int> #t9 = <core::int>[];
     {
-      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:16:18: Error: The type 'Object' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Object' is from 'dart:core'.
+ - 'Iterable' is from 'dart:core'.
+  [for (int x in o1) x];
+                 ^" in o1 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
-        final dynamic #t8 = :sync-for-iterator.{core::Iterator::current};
+        final dynamic #t11 = :sync-for-iterator.{core::Iterator::current};
         {
-          core::int x = #t8 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
-          #t7.{core::List::add}(x);
+          core::int x = #t11 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+          #t9.{core::List::add}(x);
         }
       }
     }
-  } =>#t7;
+  } =>#t9;
+  {
+    core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:18:17: Error: The type 'Object?' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Object' is from 'dart:core'.
+ - 'Iterable' is from 'dart:core'.
+  for (int x in o2) x;
+                ^" in o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
+    for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+      final dynamic #t13 = :sync-for-iterator.{core::Iterator::current};
+      {
+        core::int x = #t13 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+        x;
+      }
+    }
+  }
+  block {
+    final core::List<core::int> #t14 = <core::int>[];
+    {
+      core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(let final<BottomType> #t15 = invalid-expression "pkg/front_end/testcases/nnbd/forin.dart:19:18: Error: The type 'Object?' used in the 'for' loop must implement 'Iterable<dynamic>'.
+ - 'Object' is from 'dart:core'.
+ - 'Iterable' is from 'dart:core'.
+  [for (int x in o2) x];
+                 ^" in o2 as{TypeError,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
+      for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
+        final dynamic #t16 = :sync-for-iterator.{core::Iterator::current};
+        {
+          core::int x = #t16 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+          #t14.{core::List::add}(x);
+        }
+      }
+    }
+  } =>#t14;
 }
 static method ok(core::Iterable<core::int> i1, core::List<core::int> l1, dynamic d) → dynamic {
   {
@@ -143,15 +173,15 @@
     }
   }
   block {
-    final core::List<core::int> #t9 = <core::int>[];
+    final core::List<core::int> #t17 = <core::int>[];
     {
       core::Iterator<core::int>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int>*>(i1).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int x = :sync-for-iterator.{core::Iterator::current};
-        #t9.{core::List::add}(x);
+        #t17.{core::List::add}(x);
       }
     }
-  } =>#t9;
+  } =>#t17;
   {
     core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(l1).{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
@@ -160,37 +190,37 @@
     }
   }
   block {
-    final core::List<core::int> #t10 = <core::int>[];
+    final core::List<core::int> #t18 = <core::int>[];
     {
       core::Iterator<core::int*>* :sync-for-iterator = _in::unsafeCast<core::Iterable<core::int*>*>(l1).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
         core::int x = :sync-for-iterator.{core::Iterator::current};
-        #t10.{core::List::add}(x);
+        #t18.{core::List::add}(x);
       }
     }
-  } =>#t10;
+  } =>#t18;
   {
     core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
     for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
-      final dynamic #t11 = :sync-for-iterator.{core::Iterator::current};
+      final dynamic #t19 = :sync-for-iterator.{core::Iterator::current};
       {
-        core::int x = #t11 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+        core::int x = #t19 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
         x;
       }
     }
   }
   block {
-    final core::List<core::int> #t12 = <core::int>[];
+    final core::List<core::int> #t20 = <core::int>[];
     {
       core::Iterator<dynamic>* :sync-for-iterator = _in::unsafeCast<core::Iterable<dynamic>*>(d as{TypeError,ForDynamic,ForNonNullableByDefault} core::Iterable<dynamic>).{core::Iterable::iterator};
       for (; :sync-for-iterator.{core::Iterator::moveNext}(); ) {
-        final dynamic #t13 = :sync-for-iterator.{core::Iterator::current};
+        final dynamic #t21 = :sync-for-iterator.{core::Iterator::current};
         {
-          core::int x = #t13 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
-          #t12.{core::List::add}(x);
+          core::int x = #t21 as{TypeError,ForDynamic,ForNonNullableByDefault} core::int;
+          #t20.{core::List::add}(x);
         }
       }
     }
-  } =>#t12;
+  } =>#t20;
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/infer_constraints_from_opt_in.dart.weak.expect b/pkg/front_end/testcases/nnbd/infer_constraints_from_opt_in.dart.weak.expect
index 1e36767..2ab45fe 100644
--- a/pkg/front_end/testcases/nnbd/infer_constraints_from_opt_in.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/infer_constraints_from_opt_in.dart.weak.expect
@@ -47,12 +47,12 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/infer_constraints_from_opt_in_lib.dart:11:9: Warning: Field 'field5' isn't initialized and its type 'C<int?>' doesn't allow null.
+// pkg/front_end/testcases/nnbd/infer_constraints_from_opt_in_lib.dart:11:9: Error: Field 'field5' should be initialized because its type 'C<int?>' doesn't allow null.
 //  - 'C' is from 'pkg/front_end/testcases/nnbd/infer_constraints_from_opt_in_lib.dart'.
 // C<int?> field5;
 //         ^^^^^^
 //
-// pkg/front_end/testcases/nnbd/infer_constraints_from_opt_in_lib.dart:13:5: Warning: Field 'field7' isn't initialized and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/infer_constraints_from_opt_in_lib.dart:13:5: Error: Field 'field7' should be initialized because its type 'int' doesn't allow null.
 // int field7;
 //     ^^^^^^
 //
diff --git a/pkg/front_end/testcases/nnbd/infer_constraints_from_opt_in.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/infer_constraints_from_opt_in.dart.weak.transformed.expect
index 81342ac..755f2c9 100644
--- a/pkg/front_end/testcases/nnbd/infer_constraints_from_opt_in.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/infer_constraints_from_opt_in.dart.weak.transformed.expect
@@ -47,12 +47,12 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/infer_constraints_from_opt_in_lib.dart:11:9: Warning: Field 'field5' isn't initialized and its type 'C<int?>' doesn't allow null.
+// pkg/front_end/testcases/nnbd/infer_constraints_from_opt_in_lib.dart:11:9: Error: Field 'field5' should be initialized because its type 'C<int?>' doesn't allow null.
 //  - 'C' is from 'pkg/front_end/testcases/nnbd/infer_constraints_from_opt_in_lib.dart'.
 // C<int?> field5;
 //         ^^^^^^
 //
-// pkg/front_end/testcases/nnbd/infer_constraints_from_opt_in_lib.dart:13:5: Warning: Field 'field7' isn't initialized and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/infer_constraints_from_opt_in_lib.dart:13:5: Error: Field 'field7' should be initialized because its type 'int' doesn't allow null.
 // int field7;
 //     ^^^^^^
 //
diff --git a/pkg/front_end/testcases/nnbd/infer_from_late_variable.dart b/pkg/front_end/testcases/nnbd/infer_from_late_variable.dart
new file mode 100644
index 0000000..99b6bc0
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/infer_from_late_variable.dart
@@ -0,0 +1,10 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+T f<T>(T t) => t;
+
+main() {
+  late int local;
+  local = f(0);
+}
diff --git a/pkg/front_end/testcases/nnbd/infer_from_late_variable.dart.outline.expect b/pkg/front_end/testcases/nnbd/infer_from_late_variable.dart.outline.expect
new file mode 100644
index 0000000..b6346e7
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/infer_from_late_variable.dart.outline.expect
@@ -0,0 +1,8 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method f<T extends core::Object? = dynamic>(self::f::T% t) → self::f::T%
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/nnbd/infer_from_late_variable.dart.strong.expect b/pkg/front_end/testcases/nnbd/infer_from_late_variable.dart.strong.expect
new file mode 100644
index 0000000..954dd07
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/infer_from_late_variable.dart.strong.expect
@@ -0,0 +1,10 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method f<T extends core::Object? = dynamic>(self::f::T% t) → self::f::T%
+  return t;
+static method main() → dynamic {
+  late core::int local;
+  local = self::f<core::int>(0);
+}
diff --git a/pkg/front_end/testcases/nnbd/infer_from_late_variable.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/infer_from_late_variable.dart.strong.transformed.expect
new file mode 100644
index 0000000..954dd07
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/infer_from_late_variable.dart.strong.transformed.expect
@@ -0,0 +1,10 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method f<T extends core::Object? = dynamic>(self::f::T% t) → self::f::T%
+  return t;
+static method main() → dynamic {
+  late core::int local;
+  local = self::f<core::int>(0);
+}
diff --git a/pkg/front_end/testcases/nnbd/infer_from_late_variable.dart.weak.expect b/pkg/front_end/testcases/nnbd/infer_from_late_variable.dart.weak.expect
new file mode 100644
index 0000000..954dd07
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/infer_from_late_variable.dart.weak.expect
@@ -0,0 +1,10 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method f<T extends core::Object? = dynamic>(self::f::T% t) → self::f::T%
+  return t;
+static method main() → dynamic {
+  late core::int local;
+  local = self::f<core::int>(0);
+}
diff --git a/pkg/front_end/testcases/nnbd/infer_from_late_variable.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/infer_from_late_variable.dart.weak.transformed.expect
new file mode 100644
index 0000000..954dd07
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/infer_from_late_variable.dart.weak.transformed.expect
@@ -0,0 +1,10 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+static method f<T extends core::Object? = dynamic>(self::f::T% t) → self::f::T%
+  return t;
+static method main() → dynamic {
+  late core::int local;
+  local = self::f<core::int>(0);
+}
diff --git a/pkg/front_end/testcases/nnbd/issue39659.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue39659.dart.weak.expect
index 0579729..910ce4f 100644
--- a/pkg/front_end/testcases/nnbd/issue39659.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue39659.dart.weak.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue39659.dart:8:9: Warning: Throwing a value of 'String?' that is neither dynamic nor non-nullable.
+// pkg/front_end/testcases/nnbd/issue39659.dart:8:9: Error: Can't throw a value of 'String?' since it is neither dynamic nor non-nullable.
 //   throw bar();
 //         ^
 //
@@ -10,7 +10,9 @@
 import "dart:core" as core;
 
 static method foo() → dynamic {
-  throw self::bar();
+  invalid-expression "pkg/front_end/testcases/nnbd/issue39659.dart:8:9: Error: Can't throw a value of 'String?' since it is neither dynamic nor non-nullable.
+  throw bar();
+        ^";
 }
 static method bar() → core::String?
   return "asdf";
diff --git a/pkg/front_end/testcases/nnbd/issue39659.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue39659.dart.weak.transformed.expect
index 0579729..910ce4f 100644
--- a/pkg/front_end/testcases/nnbd/issue39659.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue39659.dart.weak.transformed.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/issue39659.dart:8:9: Warning: Throwing a value of 'String?' that is neither dynamic nor non-nullable.
+// pkg/front_end/testcases/nnbd/issue39659.dart:8:9: Error: Can't throw a value of 'String?' since it is neither dynamic nor non-nullable.
 //   throw bar();
 //         ^
 //
@@ -10,7 +10,9 @@
 import "dart:core" as core;
 
 static method foo() → dynamic {
-  throw self::bar();
+  invalid-expression "pkg/front_end/testcases/nnbd/issue39659.dart:8:9: Error: Can't throw a value of 'String?' since it is neither dynamic nor non-nullable.
+  throw bar();
+        ^";
 }
 static method bar() → core::String?
   return "asdf";
diff --git a/pkg/front_end/testcases/nnbd/issue40600.dart b/pkg/front_end/testcases/nnbd/issue40600.dart
index 270b693..41bdab6 100644
--- a/pkg/front_end/testcases/nnbd/issue40600.dart
+++ b/pkg/front_end/testcases/nnbd/issue40600.dart
@@ -20,11 +20,11 @@
 }
 
 class C<T> {
-  FutureOr<T> baz<X extends FutureOr<T>>(FutureOr<T> x) {}
+  FutureOr<T> baz<X extends FutureOr<T>>(FutureOr<T> x) => x;
 }
 
 class D<T> extends C<T> {
-  FutureOr<T> baz<X extends FutureOr<T>>(FutureOr<T> x) {}
+  FutureOr<T> baz<X extends FutureOr<T>>(FutureOr<T> x) => x;
 }
 
 main() {}
diff --git a/pkg/front_end/testcases/nnbd/issue40600.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue40600.dart.strong.expect
index fc667aa..df7df7b 100644
--- a/pkg/front_end/testcases/nnbd/issue40600.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/issue40600.dart.strong.expect
@@ -26,13 +26,15 @@
   synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method baz<generic-covariant-impl X extends asy::FutureOr<self::C::T%> = asy::FutureOr<self::C::T%>>(generic-covariant-impl asy::FutureOr<self::C::T%> x) → asy::FutureOr<self::C::T%> {}
+  method baz<generic-covariant-impl X extends asy::FutureOr<self::C::T%> = asy::FutureOr<self::C::T%>>(generic-covariant-impl asy::FutureOr<self::C::T%> x) → asy::FutureOr<self::C::T%>
+    return x;
 }
 class D<T extends core::Object? = dynamic> extends self::C<self::D::T%> {
   synthetic constructor •() → self::D<self::D::T%>
     : super self::C::•()
     ;
-  method baz<generic-covariant-impl X extends asy::FutureOr<self::D::T%> = asy::FutureOr<self::D::T%>>(generic-covariant-impl asy::FutureOr<self::D::T%> x) → asy::FutureOr<self::D::T%> {}
+  method baz<generic-covariant-impl X extends asy::FutureOr<self::D::T%> = asy::FutureOr<self::D::T%>>(generic-covariant-impl asy::FutureOr<self::D::T%> x) → asy::FutureOr<self::D::T%>
+    return x;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/issue40600.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue40600.dart.strong.transformed.expect
index fc667aa..df7df7b 100644
--- a/pkg/front_end/testcases/nnbd/issue40600.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue40600.dart.strong.transformed.expect
@@ -26,13 +26,15 @@
   synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method baz<generic-covariant-impl X extends asy::FutureOr<self::C::T%> = asy::FutureOr<self::C::T%>>(generic-covariant-impl asy::FutureOr<self::C::T%> x) → asy::FutureOr<self::C::T%> {}
+  method baz<generic-covariant-impl X extends asy::FutureOr<self::C::T%> = asy::FutureOr<self::C::T%>>(generic-covariant-impl asy::FutureOr<self::C::T%> x) → asy::FutureOr<self::C::T%>
+    return x;
 }
 class D<T extends core::Object? = dynamic> extends self::C<self::D::T%> {
   synthetic constructor •() → self::D<self::D::T%>
     : super self::C::•()
     ;
-  method baz<generic-covariant-impl X extends asy::FutureOr<self::D::T%> = asy::FutureOr<self::D::T%>>(generic-covariant-impl asy::FutureOr<self::D::T%> x) → asy::FutureOr<self::D::T%> {}
+  method baz<generic-covariant-impl X extends asy::FutureOr<self::D::T%> = asy::FutureOr<self::D::T%>>(generic-covariant-impl asy::FutureOr<self::D::T%> x) → asy::FutureOr<self::D::T%>
+    return x;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/issue40600.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue40600.dart.weak.expect
index fc667aa..df7df7b 100644
--- a/pkg/front_end/testcases/nnbd/issue40600.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/issue40600.dart.weak.expect
@@ -26,13 +26,15 @@
   synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method baz<generic-covariant-impl X extends asy::FutureOr<self::C::T%> = asy::FutureOr<self::C::T%>>(generic-covariant-impl asy::FutureOr<self::C::T%> x) → asy::FutureOr<self::C::T%> {}
+  method baz<generic-covariant-impl X extends asy::FutureOr<self::C::T%> = asy::FutureOr<self::C::T%>>(generic-covariant-impl asy::FutureOr<self::C::T%> x) → asy::FutureOr<self::C::T%>
+    return x;
 }
 class D<T extends core::Object? = dynamic> extends self::C<self::D::T%> {
   synthetic constructor •() → self::D<self::D::T%>
     : super self::C::•()
     ;
-  method baz<generic-covariant-impl X extends asy::FutureOr<self::D::T%> = asy::FutureOr<self::D::T%>>(generic-covariant-impl asy::FutureOr<self::D::T%> x) → asy::FutureOr<self::D::T%> {}
+  method baz<generic-covariant-impl X extends asy::FutureOr<self::D::T%> = asy::FutureOr<self::D::T%>>(generic-covariant-impl asy::FutureOr<self::D::T%> x) → asy::FutureOr<self::D::T%>
+    return x;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/issue40600.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue40600.dart.weak.transformed.expect
index fc667aa..df7df7b 100644
--- a/pkg/front_end/testcases/nnbd/issue40600.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/issue40600.dart.weak.transformed.expect
@@ -26,13 +26,15 @@
   synthetic constructor •() → self::C<self::C::T%>
     : super core::Object::•()
     ;
-  method baz<generic-covariant-impl X extends asy::FutureOr<self::C::T%> = asy::FutureOr<self::C::T%>>(generic-covariant-impl asy::FutureOr<self::C::T%> x) → asy::FutureOr<self::C::T%> {}
+  method baz<generic-covariant-impl X extends asy::FutureOr<self::C::T%> = asy::FutureOr<self::C::T%>>(generic-covariant-impl asy::FutureOr<self::C::T%> x) → asy::FutureOr<self::C::T%>
+    return x;
 }
 class D<T extends core::Object? = dynamic> extends self::C<self::D::T%> {
   synthetic constructor •() → self::D<self::D::T%>
     : super self::C::•()
     ;
-  method baz<generic-covariant-impl X extends asy::FutureOr<self::D::T%> = asy::FutureOr<self::D::T%>>(generic-covariant-impl asy::FutureOr<self::D::T%> x) → asy::FutureOr<self::D::T%> {}
+  method baz<generic-covariant-impl X extends asy::FutureOr<self::D::T%> = asy::FutureOr<self::D::T%>>(generic-covariant-impl asy::FutureOr<self::D::T%> x) → asy::FutureOr<self::D::T%>
+    return x;
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/issue40601.dart b/pkg/front_end/testcases/nnbd/issue40601.dart
new file mode 100644
index 0000000..56ae989
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue40601.dart
@@ -0,0 +1,18 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+abstract class A<T> {
+  T baz();
+  bar(T value) {}
+  foo() {
+    late T value;
+    var result = () => bar(value);
+    (() {
+      value = baz();
+    })();
+    return result;
+  }
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd/issue40601.dart.outline.expect b/pkg/front_end/testcases/nnbd/issue40601.dart.outline.expect
new file mode 100644
index 0000000..f2c5efd
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue40601.dart.outline.expect
@@ -0,0 +1,15 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
+    ;
+  abstract method baz() → self::A::T%;
+  method bar(generic-covariant-impl self::A::T% value) → dynamic
+    ;
+  method foo() → dynamic
+    ;
+}
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/nnbd/issue40601.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue40601.dart.strong.expect
new file mode 100644
index 0000000..3d1b60c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue40601.dart.strong.expect
@@ -0,0 +1,20 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  abstract method baz() → self::A::T%;
+  method bar(generic-covariant-impl self::A::T% value) → dynamic {}
+  method foo() → dynamic {
+    late self::A::T% value;
+    () → dynamic result = () → dynamic => this.{self::A::bar}(value);
+    (() → core::Null? {
+      value = this.{self::A::baz}();
+    }).call();
+    return result;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue40601.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue40601.dart.strong.transformed.expect
new file mode 100644
index 0000000..3d1b60c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue40601.dart.strong.transformed.expect
@@ -0,0 +1,20 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  abstract method baz() → self::A::T%;
+  method bar(generic-covariant-impl self::A::T% value) → dynamic {}
+  method foo() → dynamic {
+    late self::A::T% value;
+    () → dynamic result = () → dynamic => this.{self::A::bar}(value);
+    (() → core::Null? {
+      value = this.{self::A::baz}();
+    }).call();
+    return result;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue40601.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue40601.dart.weak.expect
new file mode 100644
index 0000000..3d1b60c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue40601.dart.weak.expect
@@ -0,0 +1,20 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  abstract method baz() → self::A::T%;
+  method bar(generic-covariant-impl self::A::T% value) → dynamic {}
+  method foo() → dynamic {
+    late self::A::T% value;
+    () → dynamic result = () → dynamic => this.{self::A::bar}(value);
+    (() → core::Null? {
+      value = this.{self::A::baz}();
+    }).call();
+    return result;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue40601.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue40601.dart.weak.transformed.expect
new file mode 100644
index 0000000..3d1b60c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue40601.dart.weak.transformed.expect
@@ -0,0 +1,20 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+
+abstract class A<T extends core::Object? = dynamic> extends core::Object {
+  synthetic constructor •() → self::A<self::A::T%>
+    : super core::Object::•()
+    ;
+  abstract method baz() → self::A::T%;
+  method bar(generic-covariant-impl self::A::T% value) → dynamic {}
+  method foo() → dynamic {
+    late self::A::T% value;
+    () → dynamic result = () → dynamic => this.{self::A::bar}(value);
+    (() → core::Null? {
+      value = this.{self::A::baz}();
+    }).call();
+    return result;
+  }
+}
+static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/issue41102.dart b/pkg/front_end/testcases/nnbd/issue41102.dart
new file mode 100644
index 0000000..f10ab27
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41102.dart
@@ -0,0 +1,49 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+
+void main() {}
+
+final t = StreamTransformer.fromHandlers(
+    handleData: (data, sink) => Future.microtask(() => sink.add(data)),
+    handleDone: (sink) => Future.microtask(() => sink.close()));
+
+final s1 = [];
+
+final s2 = s1?.length;
+
+final s3 = new List<int>(2);
+
+final s4 = () {
+  var e = 0;
+  switch (e) {
+    case 0:
+      print('fallthrough');
+    case 1:
+    case '':
+  }
+}();
+
+int? s5;
+
+final s6 = s5 + 0;
+
+List? s7;
+
+final s8 = s7[0];
+
+final s9 = s7[0] = 0;
+
+final s10 = s7.length;
+
+final s11 = s5.length = 0;
+
+final s12 = -s5;
+
+int Function()? s13;
+
+final s14 = (s13)();
+
+final s15 = throw null;
diff --git a/pkg/front_end/testcases/nnbd/issue41102.dart.outline.expect b/pkg/front_end/testcases/nnbd/issue41102.dart.outline.expect
new file mode 100644
index 0000000..ea7aadc
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41102.dart.outline.expect
@@ -0,0 +1,25 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+
+static final field asy::StreamTransformer<dynamic, dynamic> t;
+static final field core::List<dynamic> s1;
+static final field core::int? s2;
+static final field core::List<core::int> s3;
+static final field dynamic s4;
+static field core::int? s5;
+static final field core::int? s6;
+static field core::List<dynamic>? s7;
+static final field dynamic s8;
+static final field core::int s9;
+static final field core::int s10;
+static final field core::int s11;
+static final field core::int s12;
+static field () →? core::int s13;
+static final field core::int s14;
+static final field Never s15;
+static method main() → void
+  ;
diff --git a/pkg/front_end/testcases/nnbd/issue41102.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41102.dart.strong.expect
new file mode 100644
index 0000000..7157bfd
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41102.dart.strong.expect
@@ -0,0 +1,138 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:15:12: Warning: Operand of null-aware operation '?.' has type 'List<dynamic>' which excludes null.
+//  - 'List' is from 'dart:core'.
+// final s2 = s1?.length;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:17:16: Error: Can't use the default List constructor.
+// Try using List.filled instead.
+// final s3 = new List<int>(2);
+//                ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:22:5: Error: Switch case may fall through to the next case.
+//     case 0:
+//     ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:25:10: Error: Type 'String' of the case expression is not a subtype of type 'int' of this switch expression.
+//     case '':
+//          ^
+// pkg/front_end/testcases/nnbd/issue41102.dart:21:11: Context: The switch expression is here.
+//   switch (e) {
+//           ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:31:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+// final s6 = s5 + 0;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:35:14: Error: Operator '[]' cannot be called on 'List<dynamic>?' because it is potentially null.
+//  - 'List' is from 'dart:core'.
+// final s8 = s7[0];
+//              ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:37:14: Error: Operator '[]=' cannot be called on 'List<dynamic>?' because it is potentially null.
+//  - 'List' is from 'dart:core'.
+// final s9 = s7[0] = 0;
+//              ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:39:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
+//  - 'List' is from 'dart:core'.
+// Try accessing using ?. instead.
+// final s10 = s7.length;
+//                ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:41:16: Error: The setter 'length' isn't defined for the class 'int?'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'length'.
+// final s11 = s5.length = 0;
+//                ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:41:16: Error: Property 'length' cannot be accessed on 'int?' because it is potentially null.
+// Try accessing using ?. instead.
+// final s11 = s5.length = 0;
+//                ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:43:13: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+// final s12 = -s5;
+//             ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:47:18: Error: Can't use an expression of type 'int Function()?' as a function because it's potentially null.
+// Try calling using ?.call instead.
+// final s14 = (s13)();
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:49:19: Error: Can't throw a value of 'Null?' since it is neither dynamic nor non-nullable.
+// final s15 = throw null;
+//                   ^
+//
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+
+static final field asy::StreamTransformer<dynamic, dynamic> t = new asy::_StreamHandlerTransformer::•<dynamic, dynamic>(handleData: (dynamic data, asy::EventSink<dynamic> sink) → asy::Future<void> => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::add}(data)), handleDone: (asy::EventSink<dynamic> sink) → asy::Future<void> => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::close}()));
+static final field core::List<dynamic> s1 = <dynamic>[];
+static final field core::int? s2 = let final core::List<dynamic> #t1 = self::s1 in #t1.{core::List::==}(null) ?{core::int?} null : #t1.{core::List::length};
+static final field core::List<core::int> s3 = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:17:16: Error: Can't use the default List constructor.
+Try using List.filled instead.
+final s3 = new List<int>(2);
+               ^" in core::List::•<core::int>(2);
+static final field dynamic s4 = (() → core::Null? {
+  core::int e = 0;
+  switch(e) {
+    #L1:
+    case #C1:
+      {
+        core::print("fallthrough");
+      }
+    #L2:
+    case #C2:
+    case #C3:
+      {}
+  }
+}).call();
+static field core::int? s5;
+static final field core::int? s6 = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:31:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+final s6 = s5 + 0;
+              ^" in self::s5.{core::num::+}(0);
+static field core::List<dynamic>? s7;
+static final field dynamic s8 = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:35:14: Error: Operator '[]' cannot be called on 'List<dynamic>?' because it is potentially null.
+ - 'List' is from 'dart:core'.
+final s8 = s7[0];
+             ^" in self::s7.{core::List::[]}(0);
+static final field core::int s9 = let final core::List<dynamic>? #t5 = self::s7 in let final core::int #t6 = 0 in let final core::int #t7 = 0 in let final void #t8 = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:37:14: Error: Operator '[]=' cannot be called on 'List<dynamic>?' because it is potentially null.
+ - 'List' is from 'dart:core'.
+final s9 = s7[0] = 0;
+             ^" in #t5.{core::List::[]=}(#t6, #t7) in #t7;
+static final field core::int s10 = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:39:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
+ - 'List' is from 'dart:core'.
+Try accessing using ?. instead.
+final s10 = s7.length;
+               ^^^^^^" in self::s7.{core::List::length};
+static final field core::int s11 = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:41:16: Error: Property 'length' cannot be accessed on 'int?' because it is potentially null.
+Try accessing using ?. instead.
+final s11 = s5.length = 0;
+               ^^^^^^" in invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:41:16: Error: The setter 'length' isn't defined for the class 'int?'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'length'.
+final s11 = s5.length = 0;
+               ^^^^^^";
+static final field core::int s12 = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:43:13: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+final s12 = -s5;
+            ^" in self::s5.{core::int::unary-}();
+static field () →? core::int s13;
+static final field core::int s14 = let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:47:18: Error: Can't use an expression of type 'int Function()?' as a function because it's potentially null.
+Try calling using ?.call instead.
+final s14 = (s13)();
+                 ^" in self::s13.call();
+static final field Never s15 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:49:19: Error: Can't throw a value of 'Null?' since it is neither dynamic nor non-nullable.
+final s15 = throw null;
+                  ^" as{TypeError,ForDynamic,ForNonNullableByDefault} Never;
+static method main() → void {}
+
+constants  {
+  #C1 = 0
+  #C2 = 1
+  #C3 = ""
+}
diff --git a/pkg/front_end/testcases/nnbd/issue41102.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41102.dart.strong.transformed.expect
new file mode 100644
index 0000000..d888b44
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41102.dart.strong.transformed.expect
@@ -0,0 +1,138 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:15:12: Warning: Operand of null-aware operation '?.' has type 'List<dynamic>' which excludes null.
+//  - 'List' is from 'dart:core'.
+// final s2 = s1?.length;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:17:16: Error: Can't use the default List constructor.
+// Try using List.filled instead.
+// final s3 = new List<int>(2);
+//                ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:22:5: Error: Switch case may fall through to the next case.
+//     case 0:
+//     ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:25:10: Error: Type 'String' of the case expression is not a subtype of type 'int' of this switch expression.
+//     case '':
+//          ^
+// pkg/front_end/testcases/nnbd/issue41102.dart:21:11: Context: The switch expression is here.
+//   switch (e) {
+//           ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:31:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+// final s6 = s5 + 0;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:35:14: Error: Operator '[]' cannot be called on 'List<dynamic>?' because it is potentially null.
+//  - 'List' is from 'dart:core'.
+// final s8 = s7[0];
+//              ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:37:14: Error: Operator '[]=' cannot be called on 'List<dynamic>?' because it is potentially null.
+//  - 'List' is from 'dart:core'.
+// final s9 = s7[0] = 0;
+//              ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:39:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
+//  - 'List' is from 'dart:core'.
+// Try accessing using ?. instead.
+// final s10 = s7.length;
+//                ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:41:16: Error: The setter 'length' isn't defined for the class 'int?'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'length'.
+// final s11 = s5.length = 0;
+//                ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:41:16: Error: Property 'length' cannot be accessed on 'int?' because it is potentially null.
+// Try accessing using ?. instead.
+// final s11 = s5.length = 0;
+//                ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:43:13: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+// final s12 = -s5;
+//             ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:47:18: Error: Can't use an expression of type 'int Function()?' as a function because it's potentially null.
+// Try calling using ?.call instead.
+// final s14 = (s13)();
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:49:19: Error: Can't throw a value of 'Null?' since it is neither dynamic nor non-nullable.
+// final s15 = throw null;
+//                   ^
+//
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+
+static final field asy::StreamTransformer<dynamic, dynamic> t = new asy::_StreamHandlerTransformer::•<dynamic, dynamic>(handleData: (dynamic data, asy::EventSink<dynamic> sink) → asy::Future<void> => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::add}(data)), handleDone: (asy::EventSink<dynamic> sink) → asy::Future<void> => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::close}()));
+static final field core::List<dynamic> s1 = <dynamic>[];
+static final field core::int? s2 = let final core::List<dynamic> #t1 = self::s1 in #t1.{core::List::==}(null) ?{core::int?} null : #t1.{core::List::length};
+static final field core::List<core::int> s3 = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:17:16: Error: Can't use the default List constructor.
+Try using List.filled instead.
+final s3 = new List<int>(2);
+               ^" in core::_List::•<core::int>(2);
+static final field dynamic s4 = (() → core::Null? {
+  core::int e = 0;
+  switch(e) {
+    #L1:
+    case #C1:
+      {
+        core::print("fallthrough");
+      }
+    #L2:
+    case #C2:
+    case #C3:
+      {}
+  }
+}).call();
+static field core::int? s5;
+static final field core::int? s6 = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:31:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+final s6 = s5 + 0;
+              ^" in self::s5.{core::num::+}(0);
+static field core::List<dynamic>? s7;
+static final field dynamic s8 = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:35:14: Error: Operator '[]' cannot be called on 'List<dynamic>?' because it is potentially null.
+ - 'List' is from 'dart:core'.
+final s8 = s7[0];
+             ^" in self::s7.{core::List::[]}(0);
+static final field core::int s9 = let final core::List<dynamic>? #t5 = self::s7 in let final core::int #t6 = 0 in let final core::int #t7 = 0 in let final void #t8 = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:37:14: Error: Operator '[]=' cannot be called on 'List<dynamic>?' because it is potentially null.
+ - 'List' is from 'dart:core'.
+final s9 = s7[0] = 0;
+             ^" in #t5.{core::List::[]=}(#t6, #t7) in #t7;
+static final field core::int s10 = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:39:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
+ - 'List' is from 'dart:core'.
+Try accessing using ?. instead.
+final s10 = s7.length;
+               ^^^^^^" in self::s7.{core::List::length};
+static final field core::int s11 = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:41:16: Error: Property 'length' cannot be accessed on 'int?' because it is potentially null.
+Try accessing using ?. instead.
+final s11 = s5.length = 0;
+               ^^^^^^" in invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:41:16: Error: The setter 'length' isn't defined for the class 'int?'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'length'.
+final s11 = s5.length = 0;
+               ^^^^^^";
+static final field core::int s12 = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:43:13: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+final s12 = -s5;
+            ^" in self::s5.{core::int::unary-}();
+static field () →? core::int s13;
+static final field core::int s14 = let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:47:18: Error: Can't use an expression of type 'int Function()?' as a function because it's potentially null.
+Try calling using ?.call instead.
+final s14 = (s13)();
+                 ^" in self::s13.call();
+static final field Never s15 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:49:19: Error: Can't throw a value of 'Null?' since it is neither dynamic nor non-nullable.
+final s15 = throw null;
+                  ^" as{TypeError,ForDynamic,ForNonNullableByDefault} Never;
+static method main() → void {}
+
+constants  {
+  #C1 = 0
+  #C2 = 1
+  #C3 = ""
+}
diff --git a/pkg/front_end/testcases/nnbd/issue41102.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41102.dart.weak.expect
new file mode 100644
index 0000000..7157bfd
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41102.dart.weak.expect
@@ -0,0 +1,138 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:15:12: Warning: Operand of null-aware operation '?.' has type 'List<dynamic>' which excludes null.
+//  - 'List' is from 'dart:core'.
+// final s2 = s1?.length;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:17:16: Error: Can't use the default List constructor.
+// Try using List.filled instead.
+// final s3 = new List<int>(2);
+//                ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:22:5: Error: Switch case may fall through to the next case.
+//     case 0:
+//     ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:25:10: Error: Type 'String' of the case expression is not a subtype of type 'int' of this switch expression.
+//     case '':
+//          ^
+// pkg/front_end/testcases/nnbd/issue41102.dart:21:11: Context: The switch expression is here.
+//   switch (e) {
+//           ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:31:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+// final s6 = s5 + 0;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:35:14: Error: Operator '[]' cannot be called on 'List<dynamic>?' because it is potentially null.
+//  - 'List' is from 'dart:core'.
+// final s8 = s7[0];
+//              ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:37:14: Error: Operator '[]=' cannot be called on 'List<dynamic>?' because it is potentially null.
+//  - 'List' is from 'dart:core'.
+// final s9 = s7[0] = 0;
+//              ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:39:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
+//  - 'List' is from 'dart:core'.
+// Try accessing using ?. instead.
+// final s10 = s7.length;
+//                ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:41:16: Error: The setter 'length' isn't defined for the class 'int?'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'length'.
+// final s11 = s5.length = 0;
+//                ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:41:16: Error: Property 'length' cannot be accessed on 'int?' because it is potentially null.
+// Try accessing using ?. instead.
+// final s11 = s5.length = 0;
+//                ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:43:13: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+// final s12 = -s5;
+//             ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:47:18: Error: Can't use an expression of type 'int Function()?' as a function because it's potentially null.
+// Try calling using ?.call instead.
+// final s14 = (s13)();
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:49:19: Error: Can't throw a value of 'Null?' since it is neither dynamic nor non-nullable.
+// final s15 = throw null;
+//                   ^
+//
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+
+static final field asy::StreamTransformer<dynamic, dynamic> t = new asy::_StreamHandlerTransformer::•<dynamic, dynamic>(handleData: (dynamic data, asy::EventSink<dynamic> sink) → asy::Future<void> => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::add}(data)), handleDone: (asy::EventSink<dynamic> sink) → asy::Future<void> => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::close}()));
+static final field core::List<dynamic> s1 = <dynamic>[];
+static final field core::int? s2 = let final core::List<dynamic> #t1 = self::s1 in #t1.{core::List::==}(null) ?{core::int?} null : #t1.{core::List::length};
+static final field core::List<core::int> s3 = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:17:16: Error: Can't use the default List constructor.
+Try using List.filled instead.
+final s3 = new List<int>(2);
+               ^" in core::List::•<core::int>(2);
+static final field dynamic s4 = (() → core::Null? {
+  core::int e = 0;
+  switch(e) {
+    #L1:
+    case #C1:
+      {
+        core::print("fallthrough");
+      }
+    #L2:
+    case #C2:
+    case #C3:
+      {}
+  }
+}).call();
+static field core::int? s5;
+static final field core::int? s6 = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:31:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+final s6 = s5 + 0;
+              ^" in self::s5.{core::num::+}(0);
+static field core::List<dynamic>? s7;
+static final field dynamic s8 = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:35:14: Error: Operator '[]' cannot be called on 'List<dynamic>?' because it is potentially null.
+ - 'List' is from 'dart:core'.
+final s8 = s7[0];
+             ^" in self::s7.{core::List::[]}(0);
+static final field core::int s9 = let final core::List<dynamic>? #t5 = self::s7 in let final core::int #t6 = 0 in let final core::int #t7 = 0 in let final void #t8 = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:37:14: Error: Operator '[]=' cannot be called on 'List<dynamic>?' because it is potentially null.
+ - 'List' is from 'dart:core'.
+final s9 = s7[0] = 0;
+             ^" in #t5.{core::List::[]=}(#t6, #t7) in #t7;
+static final field core::int s10 = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:39:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
+ - 'List' is from 'dart:core'.
+Try accessing using ?. instead.
+final s10 = s7.length;
+               ^^^^^^" in self::s7.{core::List::length};
+static final field core::int s11 = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:41:16: Error: Property 'length' cannot be accessed on 'int?' because it is potentially null.
+Try accessing using ?. instead.
+final s11 = s5.length = 0;
+               ^^^^^^" in invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:41:16: Error: The setter 'length' isn't defined for the class 'int?'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'length'.
+final s11 = s5.length = 0;
+               ^^^^^^";
+static final field core::int s12 = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:43:13: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+final s12 = -s5;
+            ^" in self::s5.{core::int::unary-}();
+static field () →? core::int s13;
+static final field core::int s14 = let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:47:18: Error: Can't use an expression of type 'int Function()?' as a function because it's potentially null.
+Try calling using ?.call instead.
+final s14 = (s13)();
+                 ^" in self::s13.call();
+static final field Never s15 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:49:19: Error: Can't throw a value of 'Null?' since it is neither dynamic nor non-nullable.
+final s15 = throw null;
+                  ^" as{TypeError,ForDynamic,ForNonNullableByDefault} Never;
+static method main() → void {}
+
+constants  {
+  #C1 = 0
+  #C2 = 1
+  #C3 = ""
+}
diff --git a/pkg/front_end/testcases/nnbd/issue41102.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41102.dart.weak.transformed.expect
new file mode 100644
index 0000000..d888b44
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41102.dart.weak.transformed.expect
@@ -0,0 +1,138 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:15:12: Warning: Operand of null-aware operation '?.' has type 'List<dynamic>' which excludes null.
+//  - 'List' is from 'dart:core'.
+// final s2 = s1?.length;
+//            ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:17:16: Error: Can't use the default List constructor.
+// Try using List.filled instead.
+// final s3 = new List<int>(2);
+//                ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:22:5: Error: Switch case may fall through to the next case.
+//     case 0:
+//     ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:25:10: Error: Type 'String' of the case expression is not a subtype of type 'int' of this switch expression.
+//     case '':
+//          ^
+// pkg/front_end/testcases/nnbd/issue41102.dart:21:11: Context: The switch expression is here.
+//   switch (e) {
+//           ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:31:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+// final s6 = s5 + 0;
+//               ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:35:14: Error: Operator '[]' cannot be called on 'List<dynamic>?' because it is potentially null.
+//  - 'List' is from 'dart:core'.
+// final s8 = s7[0];
+//              ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:37:14: Error: Operator '[]=' cannot be called on 'List<dynamic>?' because it is potentially null.
+//  - 'List' is from 'dart:core'.
+// final s9 = s7[0] = 0;
+//              ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:39:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
+//  - 'List' is from 'dart:core'.
+// Try accessing using ?. instead.
+// final s10 = s7.length;
+//                ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:41:16: Error: The setter 'length' isn't defined for the class 'int?'.
+// Try correcting the name to the name of an existing setter, or defining a setter or field named 'length'.
+// final s11 = s5.length = 0;
+//                ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:41:16: Error: Property 'length' cannot be accessed on 'int?' because it is potentially null.
+// Try accessing using ?. instead.
+// final s11 = s5.length = 0;
+//                ^^^^^^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:43:13: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+// final s12 = -s5;
+//             ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:47:18: Error: Can't use an expression of type 'int Function()?' as a function because it's potentially null.
+// Try calling using ?.call instead.
+// final s14 = (s13)();
+//                  ^
+//
+// pkg/front_end/testcases/nnbd/issue41102.dart:49:19: Error: Can't throw a value of 'Null?' since it is neither dynamic nor non-nullable.
+// final s15 = throw null;
+//                   ^
+//
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:async";
+
+static final field asy::StreamTransformer<dynamic, dynamic> t = new asy::_StreamHandlerTransformer::•<dynamic, dynamic>(handleData: (dynamic data, asy::EventSink<dynamic> sink) → asy::Future<void> => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::add}(data)), handleDone: (asy::EventSink<dynamic> sink) → asy::Future<void> => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::close}()));
+static final field core::List<dynamic> s1 = <dynamic>[];
+static final field core::int? s2 = let final core::List<dynamic> #t1 = self::s1 in #t1.{core::List::==}(null) ?{core::int?} null : #t1.{core::List::length};
+static final field core::List<core::int> s3 = let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:17:16: Error: Can't use the default List constructor.
+Try using List.filled instead.
+final s3 = new List<int>(2);
+               ^" in core::_List::•<core::int>(2);
+static final field dynamic s4 = (() → core::Null? {
+  core::int e = 0;
+  switch(e) {
+    #L1:
+    case #C1:
+      {
+        core::print("fallthrough");
+      }
+    #L2:
+    case #C2:
+    case #C3:
+      {}
+  }
+}).call();
+static field core::int? s5;
+static final field core::int? s6 = let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:31:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+final s6 = s5 + 0;
+              ^" in self::s5.{core::num::+}(0);
+static field core::List<dynamic>? s7;
+static final field dynamic s8 = let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:35:14: Error: Operator '[]' cannot be called on 'List<dynamic>?' because it is potentially null.
+ - 'List' is from 'dart:core'.
+final s8 = s7[0];
+             ^" in self::s7.{core::List::[]}(0);
+static final field core::int s9 = let final core::List<dynamic>? #t5 = self::s7 in let final core::int #t6 = 0 in let final core::int #t7 = 0 in let final void #t8 = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:37:14: Error: Operator '[]=' cannot be called on 'List<dynamic>?' because it is potentially null.
+ - 'List' is from 'dart:core'.
+final s9 = s7[0] = 0;
+             ^" in #t5.{core::List::[]=}(#t6, #t7) in #t7;
+static final field core::int s10 = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:39:16: Error: Property 'length' cannot be accessed on 'List<dynamic>?' because it is potentially null.
+ - 'List' is from 'dart:core'.
+Try accessing using ?. instead.
+final s10 = s7.length;
+               ^^^^^^" in self::s7.{core::List::length};
+static final field core::int s11 = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:41:16: Error: Property 'length' cannot be accessed on 'int?' because it is potentially null.
+Try accessing using ?. instead.
+final s11 = s5.length = 0;
+               ^^^^^^" in invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:41:16: Error: The setter 'length' isn't defined for the class 'int?'.
+Try correcting the name to the name of an existing setter, or defining a setter or field named 'length'.
+final s11 = s5.length = 0;
+               ^^^^^^";
+static final field core::int s12 = let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:43:13: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+final s12 = -s5;
+            ^" in self::s5.{core::int::unary-}();
+static field () →? core::int s13;
+static final field core::int s14 = let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:47:18: Error: Can't use an expression of type 'int Function()?' as a function because it's potentially null.
+Try calling using ?.call instead.
+final s14 = (s13)();
+                 ^" in self::s13.call();
+static final field Never s15 = invalid-expression "pkg/front_end/testcases/nnbd/issue41102.dart:49:19: Error: Can't throw a value of 'Null?' since it is neither dynamic nor non-nullable.
+final s15 = throw null;
+                  ^" as{TypeError,ForDynamic,ForNonNullableByDefault} Never;
+static method main() → void {}
+
+constants  {
+  #C1 = 0
+  #C2 = 1
+  #C3 = ""
+}
diff --git a/pkg/front_end/testcases/nnbd/issue41103.dart b/pkg/front_end/testcases/nnbd/issue41103.dart
new file mode 100644
index 0000000..764b551
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41103.dart
@@ -0,0 +1,11 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+
+void main() {}
+
+final t = StreamTransformer.fromHandlers(
+    handleData: (data, sink) => Future.microtask(() => sink.add(data)),
+    handleDone: (sink) => Future.microtask(() => sink.close()));
diff --git a/pkg/front_end/testcases/nnbd/issue41103.dart.outline.expect b/pkg/front_end/testcases/nnbd/issue41103.dart.outline.expect
new file mode 100644
index 0000000..49a4279
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41103.dart.outline.expect
@@ -0,0 +1,9 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static final field asy::StreamTransformer<dynamic, dynamic> t;
+static method main() → void
+  ;
diff --git a/pkg/front_end/testcases/nnbd/issue41103.dart.strong.expect b/pkg/front_end/testcases/nnbd/issue41103.dart.strong.expect
new file mode 100644
index 0000000..367e4c5
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41103.dart.strong.expect
@@ -0,0 +1,8 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static final field asy::StreamTransformer<dynamic, dynamic> t = new asy::_StreamHandlerTransformer::•<dynamic, dynamic>(handleData: (dynamic data, asy::EventSink<dynamic> sink) → asy::Future<void> => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::add}(data)), handleDone: (asy::EventSink<dynamic> sink) → asy::Future<void> => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::close}()));
+static method main() → void {}
diff --git a/pkg/front_end/testcases/nnbd/issue41103.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/issue41103.dart.strong.transformed.expect
new file mode 100644
index 0000000..367e4c5
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41103.dart.strong.transformed.expect
@@ -0,0 +1,8 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static final field asy::StreamTransformer<dynamic, dynamic> t = new asy::_StreamHandlerTransformer::•<dynamic, dynamic>(handleData: (dynamic data, asy::EventSink<dynamic> sink) → asy::Future<void> => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::add}(data)), handleDone: (asy::EventSink<dynamic> sink) → asy::Future<void> => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::close}()));
+static method main() → void {}
diff --git a/pkg/front_end/testcases/nnbd/issue41103.dart.weak.expect b/pkg/front_end/testcases/nnbd/issue41103.dart.weak.expect
new file mode 100644
index 0000000..367e4c5
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41103.dart.weak.expect
@@ -0,0 +1,8 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static final field asy::StreamTransformer<dynamic, dynamic> t = new asy::_StreamHandlerTransformer::•<dynamic, dynamic>(handleData: (dynamic data, asy::EventSink<dynamic> sink) → asy::Future<void> => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::add}(data)), handleDone: (asy::EventSink<dynamic> sink) → asy::Future<void> => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::close}()));
+static method main() → void {}
diff --git a/pkg/front_end/testcases/nnbd/issue41103.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/issue41103.dart.weak.transformed.expect
new file mode 100644
index 0000000..367e4c5
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/issue41103.dart.weak.transformed.expect
@@ -0,0 +1,8 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+
+import "dart:async";
+
+static final field asy::StreamTransformer<dynamic, dynamic> t = new asy::_StreamHandlerTransformer::•<dynamic, dynamic>(handleData: (dynamic data, asy::EventSink<dynamic> sink) → asy::Future<void> => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::add}(data)), handleDone: (asy::EventSink<dynamic> sink) → asy::Future<void> => asy::Future::microtask<void>(() → void => sink.{asy::EventSink::close}()));
+static method main() → void {}
diff --git a/pkg/front_end/testcases/nnbd/later.dart.weak.expect b/pkg/front_end/testcases/nnbd/later.dart.weak.expect
index 2ff6a62..4ea3cb9 100644
--- a/pkg/front_end/testcases/nnbd/later.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/later.dart.weak.expect
@@ -55,7 +55,7 @@
 //   late String s2 = '${fisk}${await hest()}${fisk}';
 //                              ^^^^^
 //
-// pkg/front_end/testcases/nnbd/later.dart:46:9: Warning: Constructor is marked 'const' and some fields are late.
+// pkg/front_end/testcases/nnbd/later.dart:46:9: Error: Constructor is marked 'const' so fields can't be late.
 //   const B();
 //         ^
 // pkg/front_end/testcases/nnbd/later.dart:44:18: Context: Field is late, but constructor is 'const'.
diff --git a/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect
index 6f8ab34..37628df 100644
--- a/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/later.dart.weak.transformed.expect
@@ -55,7 +55,7 @@
 //   late String s2 = '${fisk}${await hest()}${fisk}';
 //                              ^^^^^
 //
-// pkg/front_end/testcases/nnbd/later.dart:46:9: Warning: Constructor is marked 'const' and some fields are late.
+// pkg/front_end/testcases/nnbd/later.dart:46:9: Error: Constructor is marked 'const' so fields can't be late.
 //   const B();
 //         ^
 // pkg/front_end/testcases/nnbd/later.dart:44:18: Context: Field is late, but constructor is 'const'.
diff --git a/pkg/front_end/testcases/nnbd/list_constructor.dart.weak.expect b/pkg/front_end/testcases/nnbd/list_constructor.dart.weak.expect
index 4b2756e..5cc723c 100644
--- a/pkg/front_end/testcases/nnbd/list_constructor.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/list_constructor.dart.weak.expect
@@ -2,17 +2,17 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/list_constructor.dart:9:7: Warning: Using the default List constructor.
+// pkg/front_end/testcases/nnbd/list_constructor.dart:9:7: Error: Can't use the default List constructor.
 // Try using List.filled instead.
 //   new List<T>(42);
 //       ^
 //
-// pkg/front_end/testcases/nnbd/list_constructor.dart:10:7: Warning: Using the default List constructor.
+// pkg/front_end/testcases/nnbd/list_constructor.dart:10:7: Error: Can't use the default List constructor.
 // Try using List.filled instead.
 //   new List<int?>(42);
 //       ^
 //
-// pkg/front_end/testcases/nnbd/list_constructor.dart:11:7: Warning: Using the default List constructor.
+// pkg/front_end/testcases/nnbd/list_constructor.dart:11:7: Error: Can't use the default List constructor.
 // Try using List.filled instead.
 //   new List<int>(42);
 //       ^
@@ -21,8 +21,17 @@
 import "dart:core" as core;
 
 static method foo<T extends core::Object? = core::Object?>() → dynamic {
-  core::List::•<self::foo::T%>(42);
-  core::List::•<core::int?>(42);
-  core::List::•<core::int>(42);
+  let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/list_constructor.dart:9:7: Error: Can't use the default List constructor.
+Try using List.filled instead.
+  new List<T>(42);
+      ^" in core::List::•<self::foo::T%>(42);
+  let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/list_constructor.dart:10:7: Error: Can't use the default List constructor.
+Try using List.filled instead.
+  new List<int?>(42);
+      ^" in core::List::•<core::int?>(42);
+  let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/list_constructor.dart:11:7: Error: Can't use the default List constructor.
+Try using List.filled instead.
+  new List<int>(42);
+      ^" in core::List::•<core::int>(42);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/list_constructor.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/list_constructor.dart.weak.transformed.expect
index 80f0ed3..78ee25b 100644
--- a/pkg/front_end/testcases/nnbd/list_constructor.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/list_constructor.dart.weak.transformed.expect
@@ -2,17 +2,17 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/list_constructor.dart:9:7: Warning: Using the default List constructor.
+// pkg/front_end/testcases/nnbd/list_constructor.dart:9:7: Error: Can't use the default List constructor.
 // Try using List.filled instead.
 //   new List<T>(42);
 //       ^
 //
-// pkg/front_end/testcases/nnbd/list_constructor.dart:10:7: Warning: Using the default List constructor.
+// pkg/front_end/testcases/nnbd/list_constructor.dart:10:7: Error: Can't use the default List constructor.
 // Try using List.filled instead.
 //   new List<int?>(42);
 //       ^
 //
-// pkg/front_end/testcases/nnbd/list_constructor.dart:11:7: Warning: Using the default List constructor.
+// pkg/front_end/testcases/nnbd/list_constructor.dart:11:7: Error: Can't use the default List constructor.
 // Try using List.filled instead.
 //   new List<int>(42);
 //       ^
@@ -21,8 +21,17 @@
 import "dart:core" as core;
 
 static method foo<T extends core::Object? = core::Object?>() → dynamic {
-  core::_List::•<self::foo::T%>(42);
-  core::_List::•<core::int?>(42);
-  core::_List::•<core::int>(42);
+  let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/list_constructor.dart:9:7: Error: Can't use the default List constructor.
+Try using List.filled instead.
+  new List<T>(42);
+      ^" in core::_List::•<self::foo::T%>(42);
+  let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/list_constructor.dart:10:7: Error: Can't use the default List constructor.
+Try using List.filled instead.
+  new List<int?>(42);
+      ^" in core::_List::•<core::int?>(42);
+  let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/list_constructor.dart:11:7: Error: Can't use the default List constructor.
+Try using List.filled instead.
+  new List<int>(42);
+      ^" in core::_List::•<core::int>(42);
 }
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/load_library.dart b/pkg/front_end/testcases/nnbd/load_library.dart
new file mode 100644
index 0000000..95e2745
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/load_library.dart
@@ -0,0 +1,12 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "dart:math" deferred as math;
+
+main() {
+  var v1 = math.loadLibrary();
+  v1.then((_) {});
+  var v2 = math.loadLibrary;
+  v2().then((_) {});
+}
diff --git a/pkg/front_end/testcases/nnbd/load_library.dart.outline.expect b/pkg/front_end/testcases/nnbd/load_library.dart.outline.expect
new file mode 100644
index 0000000..69f8d21
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/load_library.dart.outline.expect
@@ -0,0 +1,7 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+
+import "dart:math" deferred as math;
+
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/nnbd/load_library.dart.strong.expect b/pkg/front_end/testcases/nnbd/load_library.dart.strong.expect
new file mode 100644
index 0000000..92acca2
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/load_library.dart.strong.expect
@@ -0,0 +1,19 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:math" deferred as math;
+
+static method main() → dynamic {
+  asy::Future<dynamic> v1 = LoadLibrary(math);
+  v1.{asy::Future::then}<core::Null?>((dynamic _) → core::Null? {});
+  () → asy::Future<dynamic> v2 = #C1;
+  v2.call().{asy::Future::then}<core::Null?>((dynamic _) → core::Null? {});
+}
+static method _#loadLibrary_math() → asy::Future<dynamic>
+  return LoadLibrary(math);
+
+constants  {
+  #C1 = tearoff self::_#loadLibrary_math
+}
diff --git a/pkg/front_end/testcases/nnbd/load_library.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/load_library.dart.strong.transformed.expect
new file mode 100644
index 0000000..92acca2
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/load_library.dart.strong.transformed.expect
@@ -0,0 +1,19 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:math" deferred as math;
+
+static method main() → dynamic {
+  asy::Future<dynamic> v1 = LoadLibrary(math);
+  v1.{asy::Future::then}<core::Null?>((dynamic _) → core::Null? {});
+  () → asy::Future<dynamic> v2 = #C1;
+  v2.call().{asy::Future::then}<core::Null?>((dynamic _) → core::Null? {});
+}
+static method _#loadLibrary_math() → asy::Future<dynamic>
+  return LoadLibrary(math);
+
+constants  {
+  #C1 = tearoff self::_#loadLibrary_math
+}
diff --git a/pkg/front_end/testcases/nnbd/load_library.dart.weak.expect b/pkg/front_end/testcases/nnbd/load_library.dart.weak.expect
new file mode 100644
index 0000000..92acca2
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/load_library.dart.weak.expect
@@ -0,0 +1,19 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:math" deferred as math;
+
+static method main() → dynamic {
+  asy::Future<dynamic> v1 = LoadLibrary(math);
+  v1.{asy::Future::then}<core::Null?>((dynamic _) → core::Null? {});
+  () → asy::Future<dynamic> v2 = #C1;
+  v2.call().{asy::Future::then}<core::Null?>((dynamic _) → core::Null? {});
+}
+static method _#loadLibrary_math() → asy::Future<dynamic>
+  return LoadLibrary(math);
+
+constants  {
+  #C1 = tearoff self::_#loadLibrary_math
+}
diff --git a/pkg/front_end/testcases/nnbd/load_library.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/load_library.dart.weak.transformed.expect
new file mode 100644
index 0000000..92acca2
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/load_library.dart.weak.transformed.expect
@@ -0,0 +1,19 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:async" as asy;
+import "dart:core" as core;
+
+import "dart:math" deferred as math;
+
+static method main() → dynamic {
+  asy::Future<dynamic> v1 = LoadLibrary(math);
+  v1.{asy::Future::then}<core::Null?>((dynamic _) → core::Null? {});
+  () → asy::Future<dynamic> v2 = #C1;
+  v2.call().{asy::Future::then}<core::Null?>((dynamic _) → core::Null? {});
+}
+static method _#loadLibrary_math() → asy::Future<dynamic>
+  return LoadLibrary(math);
+
+constants  {
+  #C1 = tearoff self::_#loadLibrary_math
+}
diff --git a/pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart.outline.expect b/pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart.outline.expect
index 96347ea..712b735 100644
--- a/pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart.outline.expect
@@ -1,4 +1,35 @@
 library main /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart:96:30: Error: The required named parameter 'a' in method 'Class2b.method5c' is not required in overridden method 'LegacyClass.method5c'.
+//   int method5c({required int a, required int b}) => 0;
+//                              ^
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out_lib.dart:30:7: Context: This is the overridden method ('method5c').
+//   int method5c({int a, int b}) => 0;
+//       ^
+//
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart:96:46: Error: The required named parameter 'b' in method 'Class2b.method5c' is not required in overridden method 'LegacyClass.method5c'.
+//   int method5c({required int a, required int b}) => 0;
+//                                              ^
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out_lib.dart:30:7: Context: This is the overridden method ('method5c').
+//   int method5c({int a, int b}) => 0;
+//       ^
+//
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart:102:32: Error: The required named parameter 'a' in method 'Class2b.method6c' is not required in overridden method 'LegacyClass.method6c'.
+//   int? method6c({required int? a, required int? b}) => 0;
+//                                ^
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out_lib.dart:36:7: Context: This is the overridden method ('method6c').
+//   int method6c({int a, int b}) => 0;
+//       ^
+//
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart:102:49: Error: The required named parameter 'b' in method 'Class2b.method6c' is not required in overridden method 'LegacyClass.method6c'.
+//   int? method6c({required int? a, required int? b}) => 0;
+//                                                 ^
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out_lib.dart:36:7: Context: This is the overridden method ('method6c').
+//   int method6c({int a, int b}) => 0;
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 import "member_inheritance_from_opt_out_lib.dart" as opt;
diff --git a/pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart.strong.expect b/pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart.strong.expect
index b776417..9e92aa7 100644
--- a/pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart.strong.expect
@@ -1,4 +1,35 @@
 library main /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart:96:30: Error: The required named parameter 'a' in method 'Class2b.method5c' is not required in overridden method 'LegacyClass.method5c'.
+//   int method5c({required int a, required int b}) => 0;
+//                              ^
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out_lib.dart:30:7: Context: This is the overridden method ('method5c').
+//   int method5c({int a, int b}) => 0;
+//       ^
+//
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart:96:46: Error: The required named parameter 'b' in method 'Class2b.method5c' is not required in overridden method 'LegacyClass.method5c'.
+//   int method5c({required int a, required int b}) => 0;
+//                                              ^
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out_lib.dart:30:7: Context: This is the overridden method ('method5c').
+//   int method5c({int a, int b}) => 0;
+//       ^
+//
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart:102:32: Error: The required named parameter 'a' in method 'Class2b.method6c' is not required in overridden method 'LegacyClass.method6c'.
+//   int? method6c({required int? a, required int? b}) => 0;
+//                                ^
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out_lib.dart:36:7: Context: This is the overridden method ('method6c').
+//   int method6c({int a, int b}) => 0;
+//       ^
+//
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart:102:49: Error: The required named parameter 'b' in method 'Class2b.method6c' is not required in overridden method 'LegacyClass.method6c'.
+//   int? method6c({required int? a, required int? b}) => 0;
+//                                                 ^
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out_lib.dart:36:7: Context: This is the overridden method ('method6c').
+//   int method6c({int a, int b}) => 0;
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 import "member_inheritance_from_opt_out_lib.dart" as opt;
diff --git a/pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart.strong.transformed.expect
index b776417..9e92aa7 100644
--- a/pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart.strong.transformed.expect
@@ -1,4 +1,35 @@
 library main /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart:96:30: Error: The required named parameter 'a' in method 'Class2b.method5c' is not required in overridden method 'LegacyClass.method5c'.
+//   int method5c({required int a, required int b}) => 0;
+//                              ^
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out_lib.dart:30:7: Context: This is the overridden method ('method5c').
+//   int method5c({int a, int b}) => 0;
+//       ^
+//
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart:96:46: Error: The required named parameter 'b' in method 'Class2b.method5c' is not required in overridden method 'LegacyClass.method5c'.
+//   int method5c({required int a, required int b}) => 0;
+//                                              ^
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out_lib.dart:30:7: Context: This is the overridden method ('method5c').
+//   int method5c({int a, int b}) => 0;
+//       ^
+//
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart:102:32: Error: The required named parameter 'a' in method 'Class2b.method6c' is not required in overridden method 'LegacyClass.method6c'.
+//   int? method6c({required int? a, required int? b}) => 0;
+//                                ^
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out_lib.dart:36:7: Context: This is the overridden method ('method6c').
+//   int method6c({int a, int b}) => 0;
+//       ^
+//
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart:102:49: Error: The required named parameter 'b' in method 'Class2b.method6c' is not required in overridden method 'LegacyClass.method6c'.
+//   int? method6c({required int? a, required int? b}) => 0;
+//                                                 ^
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out_lib.dart:36:7: Context: This is the overridden method ('method6c').
+//   int method6c({int a, int b}) => 0;
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 import "member_inheritance_from_opt_out_lib.dart" as opt;
diff --git a/pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart.weak.expect b/pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart.weak.expect
index b776417..9e92aa7 100644
--- a/pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart.weak.expect
@@ -1,4 +1,35 @@
 library main /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart:96:30: Error: The required named parameter 'a' in method 'Class2b.method5c' is not required in overridden method 'LegacyClass.method5c'.
+//   int method5c({required int a, required int b}) => 0;
+//                              ^
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out_lib.dart:30:7: Context: This is the overridden method ('method5c').
+//   int method5c({int a, int b}) => 0;
+//       ^
+//
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart:96:46: Error: The required named parameter 'b' in method 'Class2b.method5c' is not required in overridden method 'LegacyClass.method5c'.
+//   int method5c({required int a, required int b}) => 0;
+//                                              ^
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out_lib.dart:30:7: Context: This is the overridden method ('method5c').
+//   int method5c({int a, int b}) => 0;
+//       ^
+//
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart:102:32: Error: The required named parameter 'a' in method 'Class2b.method6c' is not required in overridden method 'LegacyClass.method6c'.
+//   int? method6c({required int? a, required int? b}) => 0;
+//                                ^
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out_lib.dart:36:7: Context: This is the overridden method ('method6c').
+//   int method6c({int a, int b}) => 0;
+//       ^
+//
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart:102:49: Error: The required named parameter 'b' in method 'Class2b.method6c' is not required in overridden method 'LegacyClass.method6c'.
+//   int? method6c({required int? a, required int? b}) => 0;
+//                                                 ^
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out_lib.dart:36:7: Context: This is the overridden method ('method6c').
+//   int method6c({int a, int b}) => 0;
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 import "member_inheritance_from_opt_out_lib.dart" as opt;
diff --git a/pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart.weak.transformed.expect
index b776417..9e92aa7 100644
--- a/pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart.weak.transformed.expect
@@ -1,4 +1,35 @@
 library main /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart:96:30: Error: The required named parameter 'a' in method 'Class2b.method5c' is not required in overridden method 'LegacyClass.method5c'.
+//   int method5c({required int a, required int b}) => 0;
+//                              ^
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out_lib.dart:30:7: Context: This is the overridden method ('method5c').
+//   int method5c({int a, int b}) => 0;
+//       ^
+//
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart:96:46: Error: The required named parameter 'b' in method 'Class2b.method5c' is not required in overridden method 'LegacyClass.method5c'.
+//   int method5c({required int a, required int b}) => 0;
+//                                              ^
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out_lib.dart:30:7: Context: This is the overridden method ('method5c').
+//   int method5c({int a, int b}) => 0;
+//       ^
+//
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart:102:32: Error: The required named parameter 'a' in method 'Class2b.method6c' is not required in overridden method 'LegacyClass.method6c'.
+//   int? method6c({required int? a, required int? b}) => 0;
+//                                ^
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out_lib.dart:36:7: Context: This is the overridden method ('method6c').
+//   int method6c({int a, int b}) => 0;
+//       ^
+//
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out.dart:102:49: Error: The required named parameter 'b' in method 'Class2b.method6c' is not required in overridden method 'LegacyClass.method6c'.
+//   int? method6c({required int? a, required int? b}) => 0;
+//                                                 ^
+// pkg/front_end/testcases/nnbd/member_inheritance_from_opt_out_lib.dart:36:7: Context: This is the overridden method ('method6c').
+//   int method6c({int a, int b}) => 0;
+//       ^
+//
 import self as self;
 import "dart:core" as core;
 import "member_inheritance_from_opt_out_lib.dart" as opt;
diff --git a/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.weak.expect b/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.weak.expect
index c8a1961..aea1af9 100644
--- a/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.weak.expect
@@ -2,23 +2,29 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:15:6: Warning: Missing required named parameter 's'.
+// pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:15:6: Error: Required named parameter 's' must be provided.
 //   foo();
 //      ^
+// pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:5:6: Context: Found this candidate, but the arguments don't match.
+// void foo({required String s}) {}
+//      ^^^
 //
-// pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:16:8: Warning: Missing required named parameter 'x'.
+// pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:16:8: Error: Required named parameter 'x' must be provided.
 //   new A();
 //        ^
+// pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:9:3: Context: Found this candidate, but the arguments don't match.
+//   A({required int x});
+//   ^
 //
-// pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:18:8: Warning: Missing required named parameter 'y'.
+// pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:18:8: Error: Required named parameter 'y' must be provided.
 //   a.foo();
 //        ^
 //
-// pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:19:6: Warning: Missing required named parameter 's'.
+// pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:19:6: Error: Required named parameter 's' must be provided.
 //   a.f();
 //      ^
 //
-// pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:20:4: Warning: Missing required named parameter 's'.
+// pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:20:4: Error: Required named parameter 's' must be provided.
 //   g();
 //    ^
 //
@@ -35,12 +41,22 @@
 static field ({required s: core::String}) → void g = ({required core::String s = #C1}) → core::Null? {};
 static method foo({required core::String s = #C1}) → void {}
 static method bar() → dynamic {
-  self::foo();
-  new self::A::•();
+  invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:15:6: Error: Required named parameter 's' must be provided.
+  foo();
+     ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:16:8: Error: Required named parameter 'x' must be provided.
+  new A();
+       ^";
   self::A a = new self::A::•(x: 42);
-  a.{self::A::foo}();
-  a.{self::A::f}.call();
-  self::g.call();
+  let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:18:8: Error: Required named parameter 'y' must be provided.
+  a.foo();
+       ^" in a.{self::A::foo}();
+  let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:19:6: Error: Required named parameter 's' must be provided.
+  a.f();
+     ^" in a.{self::A::f}.call();
+  let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:20:4: Error: Required named parameter 's' must be provided.
+  g();
+   ^" in self::g.call();
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.weak.transformed.expect
index c8a1961..aea1af9 100644
--- a/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart.weak.transformed.expect
@@ -2,23 +2,29 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:15:6: Warning: Missing required named parameter 's'.
+// pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:15:6: Error: Required named parameter 's' must be provided.
 //   foo();
 //      ^
+// pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:5:6: Context: Found this candidate, but the arguments don't match.
+// void foo({required String s}) {}
+//      ^^^
 //
-// pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:16:8: Warning: Missing required named parameter 'x'.
+// pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:16:8: Error: Required named parameter 'x' must be provided.
 //   new A();
 //        ^
+// pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:9:3: Context: Found this candidate, but the arguments don't match.
+//   A({required int x});
+//   ^
 //
-// pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:18:8: Warning: Missing required named parameter 'y'.
+// pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:18:8: Error: Required named parameter 'y' must be provided.
 //   a.foo();
 //        ^
 //
-// pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:19:6: Warning: Missing required named parameter 's'.
+// pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:19:6: Error: Required named parameter 's' must be provided.
 //   a.f();
 //      ^
 //
-// pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:20:4: Warning: Missing required named parameter 's'.
+// pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:20:4: Error: Required named parameter 's' must be provided.
 //   g();
 //    ^
 //
@@ -35,12 +41,22 @@
 static field ({required s: core::String}) → void g = ({required core::String s = #C1}) → core::Null? {};
 static method foo({required core::String s = #C1}) → void {}
 static method bar() → dynamic {
-  self::foo();
-  new self::A::•();
+  invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:15:6: Error: Required named parameter 's' must be provided.
+  foo();
+     ^";
+  invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:16:8: Error: Required named parameter 'x' must be provided.
+  new A();
+       ^";
   self::A a = new self::A::•(x: 42);
-  a.{self::A::foo}();
-  a.{self::A::f}.call();
-  self::g.call();
+  let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:18:8: Error: Required named parameter 'y' must be provided.
+  a.foo();
+       ^" in a.{self::A::foo}();
+  let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:19:6: Error: Required named parameter 's' must be provided.
+  a.f();
+     ^" in a.{self::A::f}.call();
+  let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/missing_required_named_parameter.dart:20:4: Error: Required named parameter 's' must be provided.
+  g();
+   ^" in self::g.call();
 }
 static method main() → dynamic {}
 
diff --git a/pkg/front_end/testcases/nnbd/never_opt_out.dart.weak.expect b/pkg/front_end/testcases/nnbd/never_opt_out.dart.weak.expect
index ecb173e..83a210a 100644
--- a/pkg/front_end/testcases/nnbd/never_opt_out.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/never_opt_out.dart.weak.expect
@@ -102,7 +102,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/never_opt_out_lib.dart:19:28: Warning: Assigning value of type 'Type' to a variable of type 'Null?'.
+// pkg/front_end/testcases/nnbd/never_opt_out_lib.dart:19:28: Error: A value of type 'Type' can't be assigned to a variable of type 'Null?'.
 //  - 'Type' is from 'dart:core'.
 //   Null get nullProperty => Null;
 //                            ^
@@ -127,7 +127,10 @@
   method nullMethod(core::Null? value) → core::Null?
     return value;
   get nullProperty() → core::Null?
-    return core::Null? as{TypeError,ForNonNullableByDefault} core::Null?;
+    return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/never_opt_out_lib.dart:19:28: Error: A value of type 'Type' can't be assigned to a variable of type 'Null?'.
+ - 'Type' is from 'dart:core'.
+  Null get nullProperty => Null;
+                           ^" in core::Null? as{TypeError,ForNonNullableByDefault} core::Null?;
   set nullProperty(core::Null? value) → void {}
 }
 static field Never optInNever = self::optOutNever;
diff --git a/pkg/front_end/testcases/nnbd/never_receiver.dart.strong.expect b/pkg/front_end/testcases/nnbd/never_receiver.dart.strong.expect
index 65d01e2..06d0203 100644
--- a/pkg/front_end/testcases/nnbd/never_receiver.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/never_receiver.dart.strong.expect
@@ -32,13 +32,8 @@
 //   y(); // Error.
 //    ^
 //
-// pkg/front_end/testcases/nnbd/never_receiver.dart:27:4: Error: Can't use an expression of type 'Never' as a function because it's potentially null.
-// Try calling using ?.call instead.
-//   y(); // Error.
-//    ^
-//
-// pkg/front_end/testcases/nnbd/never_receiver.dart:28:4: Error: The method '+' isn't defined for the class 'Never'.
-// Try correcting the name to the name of an existing method, or defining a method named '+'.
+// pkg/front_end/testcases/nnbd/never_receiver.dart:28:4: Error: The operator '+' isn't defined for the class 'Never'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
 //   y++; // Error.
 //    ^
 //
@@ -46,8 +41,8 @@
 //   y++; // Error.
 //    ^
 //
-// pkg/front_end/testcases/nnbd/never_receiver.dart:29:5: Error: The method '+' isn't defined for the class 'Never'.
-// Try correcting the name to the name of an existing method, or defining a method named '+'.
+// pkg/front_end/testcases/nnbd/never_receiver.dart:29:5: Error: The operator '+' isn't defined for the class 'Never'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
 //   y += 1; // Error.
 //     ^
 //
@@ -55,8 +50,8 @@
 //   y += 1; // Error.
 //     ^
 //
-// pkg/front_end/testcases/nnbd/never_receiver.dart:30:4: Error: The method '[]' isn't defined for the class 'Never'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]'.
+// pkg/front_end/testcases/nnbd/never_receiver.dart:30:4: Error: The operator '[]' isn't defined for the class 'Never'.
+// Try correcting the operator to an existing operator, or defining a '[]' operator.
 //   y[42]; // Error.
 //    ^
 //
@@ -64,8 +59,8 @@
 //   y[42]; // Error.
 //    ^
 //
-// pkg/front_end/testcases/nnbd/never_receiver.dart:31:4: Error: The method '[]=' isn't defined for the class 'Never'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]='.
+// pkg/front_end/testcases/nnbd/never_receiver.dart:31:4: Error: The operator '[]=' isn't defined for the class 'Never'.
+// Try correcting the operator to an existing operator, or defining a '[]=' operator.
 //   y[42] = 42; // Error.
 //    ^
 //
@@ -111,35 +106,32 @@
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'baz'.
   y.baz = 42; // Error.
     ^^^";
-  let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:27:4: Error: Can't use an expression of type 'Never' as a function because it's potentially null.
-Try calling using ?.call instead.
-  y(); // Error.
-   ^" in invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:27:4: Error: The method 'call' isn't defined for the class 'Never'.
+  invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:27:4: Error: The method 'call' isn't defined for the class 'Never'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
   y(); // Error.
    ^";
-  y = (let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:28:4: Error: Operator '+' cannot be called on 'Never' because it is potentially null.
+  y = (let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:28:4: Error: Operator '+' cannot be called on 'Never' because it is potentially null.
   y++; // Error.
-   ^" in invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:28:4: Error: The method '+' isn't defined for the class 'Never'.
-Try correcting the name to the name of an existing method, or defining a method named '+'.
+   ^" in invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:28:4: Error: The operator '+' isn't defined for the class 'Never'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
   y++; // Error.
    ^") as{TypeError,ForDynamic,ForNonNullableByDefault} Never?;
-  y = (let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:29:5: Error: Operator '+' cannot be called on 'Never' because it is potentially null.
+  y = (let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:29:5: Error: Operator '+' cannot be called on 'Never' because it is potentially null.
   y += 1; // Error.
-    ^" in invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:29:5: Error: The method '+' isn't defined for the class 'Never'.
-Try correcting the name to the name of an existing method, or defining a method named '+'.
+    ^" in invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:29:5: Error: The operator '+' isn't defined for the class 'Never'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
   y += 1; // Error.
     ^") as{TypeError,ForDynamic,ForNonNullableByDefault} Never?;
-  let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:30:4: Error: Operator '[]' cannot be called on 'Never' because it is potentially null.
+  let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:30:4: Error: Operator '[]' cannot be called on 'Never' because it is potentially null.
   y[42]; // Error.
-   ^" in invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:30:4: Error: The method '[]' isn't defined for the class 'Never'.
-Try correcting the name to the name of an existing method, or defining a method named '[]'.
+   ^" in invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:30:4: Error: The operator '[]' isn't defined for the class 'Never'.
+Try correcting the operator to an existing operator, or defining a '[]' operator.
   y[42]; // Error.
    ^";
-  let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:31:4: Error: Operator '[]=' cannot be called on 'Never' because it is potentially null.
+  let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:31:4: Error: Operator '[]=' cannot be called on 'Never' because it is potentially null.
   y[42] = 42; // Error.
-   ^" in invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:31:4: Error: The method '[]=' isn't defined for the class 'Never'.
-Try correcting the name to the name of an existing method, or defining a method named '[]='.
+   ^" in invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:31:4: Error: The operator '[]=' isn't defined for the class 'Never'.
+Try correcting the operator to an existing operator, or defining a '[]=' operator.
   y[42] = 42; // Error.
    ^";
 }
diff --git a/pkg/front_end/testcases/nnbd/never_receiver.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/never_receiver.dart.strong.transformed.expect
index 65d01e2..06d0203 100644
--- a/pkg/front_end/testcases/nnbd/never_receiver.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/never_receiver.dart.strong.transformed.expect
@@ -32,13 +32,8 @@
 //   y(); // Error.
 //    ^
 //
-// pkg/front_end/testcases/nnbd/never_receiver.dart:27:4: Error: Can't use an expression of type 'Never' as a function because it's potentially null.
-// Try calling using ?.call instead.
-//   y(); // Error.
-//    ^
-//
-// pkg/front_end/testcases/nnbd/never_receiver.dart:28:4: Error: The method '+' isn't defined for the class 'Never'.
-// Try correcting the name to the name of an existing method, or defining a method named '+'.
+// pkg/front_end/testcases/nnbd/never_receiver.dart:28:4: Error: The operator '+' isn't defined for the class 'Never'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
 //   y++; // Error.
 //    ^
 //
@@ -46,8 +41,8 @@
 //   y++; // Error.
 //    ^
 //
-// pkg/front_end/testcases/nnbd/never_receiver.dart:29:5: Error: The method '+' isn't defined for the class 'Never'.
-// Try correcting the name to the name of an existing method, or defining a method named '+'.
+// pkg/front_end/testcases/nnbd/never_receiver.dart:29:5: Error: The operator '+' isn't defined for the class 'Never'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
 //   y += 1; // Error.
 //     ^
 //
@@ -55,8 +50,8 @@
 //   y += 1; // Error.
 //     ^
 //
-// pkg/front_end/testcases/nnbd/never_receiver.dart:30:4: Error: The method '[]' isn't defined for the class 'Never'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]'.
+// pkg/front_end/testcases/nnbd/never_receiver.dart:30:4: Error: The operator '[]' isn't defined for the class 'Never'.
+// Try correcting the operator to an existing operator, or defining a '[]' operator.
 //   y[42]; // Error.
 //    ^
 //
@@ -64,8 +59,8 @@
 //   y[42]; // Error.
 //    ^
 //
-// pkg/front_end/testcases/nnbd/never_receiver.dart:31:4: Error: The method '[]=' isn't defined for the class 'Never'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]='.
+// pkg/front_end/testcases/nnbd/never_receiver.dart:31:4: Error: The operator '[]=' isn't defined for the class 'Never'.
+// Try correcting the operator to an existing operator, or defining a '[]=' operator.
 //   y[42] = 42; // Error.
 //    ^
 //
@@ -111,35 +106,32 @@
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'baz'.
   y.baz = 42; // Error.
     ^^^";
-  let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:27:4: Error: Can't use an expression of type 'Never' as a function because it's potentially null.
-Try calling using ?.call instead.
-  y(); // Error.
-   ^" in invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:27:4: Error: The method 'call' isn't defined for the class 'Never'.
+  invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:27:4: Error: The method 'call' isn't defined for the class 'Never'.
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
   y(); // Error.
    ^";
-  y = (let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:28:4: Error: Operator '+' cannot be called on 'Never' because it is potentially null.
+  y = (let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:28:4: Error: Operator '+' cannot be called on 'Never' because it is potentially null.
   y++; // Error.
-   ^" in invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:28:4: Error: The method '+' isn't defined for the class 'Never'.
-Try correcting the name to the name of an existing method, or defining a method named '+'.
+   ^" in invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:28:4: Error: The operator '+' isn't defined for the class 'Never'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
   y++; // Error.
    ^") as{TypeError,ForDynamic,ForNonNullableByDefault} Never?;
-  y = (let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:29:5: Error: Operator '+' cannot be called on 'Never' because it is potentially null.
+  y = (let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:29:5: Error: Operator '+' cannot be called on 'Never' because it is potentially null.
   y += 1; // Error.
-    ^" in invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:29:5: Error: The method '+' isn't defined for the class 'Never'.
-Try correcting the name to the name of an existing method, or defining a method named '+'.
+    ^" in invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:29:5: Error: The operator '+' isn't defined for the class 'Never'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
   y += 1; // Error.
     ^") as{TypeError,ForDynamic,ForNonNullableByDefault} Never?;
-  let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:30:4: Error: Operator '[]' cannot be called on 'Never' because it is potentially null.
+  let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:30:4: Error: Operator '[]' cannot be called on 'Never' because it is potentially null.
   y[42]; // Error.
-   ^" in invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:30:4: Error: The method '[]' isn't defined for the class 'Never'.
-Try correcting the name to the name of an existing method, or defining a method named '[]'.
+   ^" in invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:30:4: Error: The operator '[]' isn't defined for the class 'Never'.
+Try correcting the operator to an existing operator, or defining a '[]' operator.
   y[42]; // Error.
    ^";
-  let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:31:4: Error: Operator '[]=' cannot be called on 'Never' because it is potentially null.
+  let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:31:4: Error: Operator '[]=' cannot be called on 'Never' because it is potentially null.
   y[42] = 42; // Error.
-   ^" in invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:31:4: Error: The method '[]=' isn't defined for the class 'Never'.
-Try correcting the name to the name of an existing method, or defining a method named '[]='.
+   ^" in invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:31:4: Error: The operator '[]=' isn't defined for the class 'Never'.
+Try correcting the operator to an existing operator, or defining a '[]=' operator.
   y[42] = 42; // Error.
    ^";
 }
diff --git a/pkg/front_end/testcases/nnbd/never_receiver.dart.weak.expect b/pkg/front_end/testcases/nnbd/never_receiver.dart.weak.expect
index ae3949b..06d0203 100644
--- a/pkg/front_end/testcases/nnbd/never_receiver.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/never_receiver.dart.weak.expect
@@ -7,17 +7,12 @@
 //   y.foo(); // Error.
 //     ^^^
 //
-// pkg/front_end/testcases/nnbd/never_receiver.dart:24:5: Warning: Method 'foo' is called on 'Never' which is potentially null.
-// Try calling using ?. instead.
-//   y.foo(); // Error.
-//     ^^^
-//
 // pkg/front_end/testcases/nnbd/never_receiver.dart:25:5: Error: The getter 'bar' isn't defined for the class 'Never'.
 // Try correcting the name to the name of an existing getter, or defining a getter or field named 'bar'.
 //   y.bar; // Error.
 //     ^^^
 //
-// pkg/front_end/testcases/nnbd/never_receiver.dart:25:5: Warning: Property 'bar' is accessed on 'Never' which is potentially null.
+// pkg/front_end/testcases/nnbd/never_receiver.dart:25:5: Error: Property 'bar' cannot be accessed on 'Never' because it is potentially null.
 // Try accessing using ?. instead.
 //   y.bar; // Error.
 //     ^^^
@@ -27,7 +22,7 @@
 //   y.baz = 42; // Error.
 //     ^^^
 //
-// pkg/front_end/testcases/nnbd/never_receiver.dart:26:5: Warning: Property 'baz' is accessed on 'Never' which is potentially null.
+// pkg/front_end/testcases/nnbd/never_receiver.dart:26:5: Error: Property 'baz' cannot be accessed on 'Never' because it is potentially null.
 // Try accessing using ?. instead.
 //   y.baz = 42; // Error.
 //     ^^^
@@ -37,49 +32,39 @@
 //   y(); // Error.
 //    ^
 //
-// pkg/front_end/testcases/nnbd/never_receiver.dart:27:4: Warning: Method 'call' is called on 'Never' which is potentially null.
-// Try calling using ?. instead.
-//   y(); // Error.
-//    ^
-//
-// pkg/front_end/testcases/nnbd/never_receiver.dart:27:4: Warning: Expression of type 'Never' is used as a function, but it's potentially null.
-// Try calling using ?.call instead.
-//   y(); // Error.
-//    ^
-//
-// pkg/front_end/testcases/nnbd/never_receiver.dart:28:4: Error: The method '+' isn't defined for the class 'Never'.
-// Try correcting the name to the name of an existing method, or defining a method named '+'.
+// pkg/front_end/testcases/nnbd/never_receiver.dart:28:4: Error: The operator '+' isn't defined for the class 'Never'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
 //   y++; // Error.
 //    ^
 //
-// pkg/front_end/testcases/nnbd/never_receiver.dart:28:4: Warning: Operator '+' is called on 'Never' which is potentially null.
+// pkg/front_end/testcases/nnbd/never_receiver.dart:28:4: Error: Operator '+' cannot be called on 'Never' because it is potentially null.
 //   y++; // Error.
 //    ^
 //
-// pkg/front_end/testcases/nnbd/never_receiver.dart:29:5: Error: The method '+' isn't defined for the class 'Never'.
-// Try correcting the name to the name of an existing method, or defining a method named '+'.
+// pkg/front_end/testcases/nnbd/never_receiver.dart:29:5: Error: The operator '+' isn't defined for the class 'Never'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
 //   y += 1; // Error.
 //     ^
 //
-// pkg/front_end/testcases/nnbd/never_receiver.dart:29:5: Warning: Operator '+' is called on 'Never' which is potentially null.
+// pkg/front_end/testcases/nnbd/never_receiver.dart:29:5: Error: Operator '+' cannot be called on 'Never' because it is potentially null.
 //   y += 1; // Error.
 //     ^
 //
-// pkg/front_end/testcases/nnbd/never_receiver.dart:30:4: Error: The method '[]' isn't defined for the class 'Never'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]'.
+// pkg/front_end/testcases/nnbd/never_receiver.dart:30:4: Error: The operator '[]' isn't defined for the class 'Never'.
+// Try correcting the operator to an existing operator, or defining a '[]' operator.
 //   y[42]; // Error.
 //    ^
 //
-// pkg/front_end/testcases/nnbd/never_receiver.dart:30:4: Warning: Operator '[]' is called on 'Never' which is potentially null.
+// pkg/front_end/testcases/nnbd/never_receiver.dart:30:4: Error: Operator '[]' cannot be called on 'Never' because it is potentially null.
 //   y[42]; // Error.
 //    ^
 //
-// pkg/front_end/testcases/nnbd/never_receiver.dart:31:4: Error: The method '[]=' isn't defined for the class 'Never'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]='.
+// pkg/front_end/testcases/nnbd/never_receiver.dart:31:4: Error: The operator '[]=' isn't defined for the class 'Never'.
+// Try correcting the operator to an existing operator, or defining a '[]=' operator.
 //   y[42] = 42; // Error.
 //    ^
 //
-// pkg/front_end/testcases/nnbd/never_receiver.dart:31:4: Warning: Operator '[]=' is called on 'Never' which is potentially null.
+// pkg/front_end/testcases/nnbd/never_receiver.dart:31:4: Error: Operator '[]=' cannot be called on 'Never' because it is potentially null.
 //   y[42] = 42; // Error.
 //    ^
 //
@@ -107,11 +92,17 @@
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   y.foo(); // Error.
     ^^^";
-  invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:25:5: Error: The getter 'bar' isn't defined for the class 'Never'.
+  let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:25:5: Error: Property 'bar' cannot be accessed on 'Never' because it is potentially null.
+Try accessing using ?. instead.
+  y.bar; // Error.
+    ^^^" in invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:25:5: Error: The getter 'bar' isn't defined for the class 'Never'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'bar'.
   y.bar; // Error.
     ^^^";
-  invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:26:5: Error: The setter 'baz' isn't defined for the class 'Never'.
+  let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:26:5: Error: Property 'baz' cannot be accessed on 'Never' because it is potentially null.
+Try accessing using ?. instead.
+  y.baz = 42; // Error.
+    ^^^" in invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:26:5: Error: The setter 'baz' isn't defined for the class 'Never'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'baz'.
   y.baz = 42; // Error.
     ^^^";
@@ -119,20 +110,28 @@
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
   y(); // Error.
    ^";
-  y = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:28:4: Error: The method '+' isn't defined for the class 'Never'.
-Try correcting the name to the name of an existing method, or defining a method named '+'.
+  y = (let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:28:4: Error: Operator '+' cannot be called on 'Never' because it is potentially null.
   y++; // Error.
-   ^" as{TypeError,ForDynamic,ForNonNullableByDefault} Never?;
-  y = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:29:5: Error: The method '+' isn't defined for the class 'Never'.
-Try correcting the name to the name of an existing method, or defining a method named '+'.
+   ^" in invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:28:4: Error: The operator '+' isn't defined for the class 'Never'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
+  y++; // Error.
+   ^") as{TypeError,ForDynamic,ForNonNullableByDefault} Never?;
+  y = (let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:29:5: Error: Operator '+' cannot be called on 'Never' because it is potentially null.
   y += 1; // Error.
-    ^" as{TypeError,ForDynamic,ForNonNullableByDefault} Never?;
-  invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:30:4: Error: The method '[]' isn't defined for the class 'Never'.
-Try correcting the name to the name of an existing method, or defining a method named '[]'.
+    ^" in invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:29:5: Error: The operator '+' isn't defined for the class 'Never'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
+  y += 1; // Error.
+    ^") as{TypeError,ForDynamic,ForNonNullableByDefault} Never?;
+  let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:30:4: Error: Operator '[]' cannot be called on 'Never' because it is potentially null.
+  y[42]; // Error.
+   ^" in invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:30:4: Error: The operator '[]' isn't defined for the class 'Never'.
+Try correcting the operator to an existing operator, or defining a '[]' operator.
   y[42]; // Error.
    ^";
-  invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:31:4: Error: The method '[]=' isn't defined for the class 'Never'.
-Try correcting the name to the name of an existing method, or defining a method named '[]='.
+  let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:31:4: Error: Operator '[]=' cannot be called on 'Never' because it is potentially null.
+  y[42] = 42; // Error.
+   ^" in invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:31:4: Error: The operator '[]=' isn't defined for the class 'Never'.
+Try correcting the operator to an existing operator, or defining a '[]=' operator.
   y[42] = 42; // Error.
    ^";
 }
diff --git a/pkg/front_end/testcases/nnbd/never_receiver.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/never_receiver.dart.weak.transformed.expect
index ae3949b..06d0203 100644
--- a/pkg/front_end/testcases/nnbd/never_receiver.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/never_receiver.dart.weak.transformed.expect
@@ -7,17 +7,12 @@
 //   y.foo(); // Error.
 //     ^^^
 //
-// pkg/front_end/testcases/nnbd/never_receiver.dart:24:5: Warning: Method 'foo' is called on 'Never' which is potentially null.
-// Try calling using ?. instead.
-//   y.foo(); // Error.
-//     ^^^
-//
 // pkg/front_end/testcases/nnbd/never_receiver.dart:25:5: Error: The getter 'bar' isn't defined for the class 'Never'.
 // Try correcting the name to the name of an existing getter, or defining a getter or field named 'bar'.
 //   y.bar; // Error.
 //     ^^^
 //
-// pkg/front_end/testcases/nnbd/never_receiver.dart:25:5: Warning: Property 'bar' is accessed on 'Never' which is potentially null.
+// pkg/front_end/testcases/nnbd/never_receiver.dart:25:5: Error: Property 'bar' cannot be accessed on 'Never' because it is potentially null.
 // Try accessing using ?. instead.
 //   y.bar; // Error.
 //     ^^^
@@ -27,7 +22,7 @@
 //   y.baz = 42; // Error.
 //     ^^^
 //
-// pkg/front_end/testcases/nnbd/never_receiver.dart:26:5: Warning: Property 'baz' is accessed on 'Never' which is potentially null.
+// pkg/front_end/testcases/nnbd/never_receiver.dart:26:5: Error: Property 'baz' cannot be accessed on 'Never' because it is potentially null.
 // Try accessing using ?. instead.
 //   y.baz = 42; // Error.
 //     ^^^
@@ -37,49 +32,39 @@
 //   y(); // Error.
 //    ^
 //
-// pkg/front_end/testcases/nnbd/never_receiver.dart:27:4: Warning: Method 'call' is called on 'Never' which is potentially null.
-// Try calling using ?. instead.
-//   y(); // Error.
-//    ^
-//
-// pkg/front_end/testcases/nnbd/never_receiver.dart:27:4: Warning: Expression of type 'Never' is used as a function, but it's potentially null.
-// Try calling using ?.call instead.
-//   y(); // Error.
-//    ^
-//
-// pkg/front_end/testcases/nnbd/never_receiver.dart:28:4: Error: The method '+' isn't defined for the class 'Never'.
-// Try correcting the name to the name of an existing method, or defining a method named '+'.
+// pkg/front_end/testcases/nnbd/never_receiver.dart:28:4: Error: The operator '+' isn't defined for the class 'Never'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
 //   y++; // Error.
 //    ^
 //
-// pkg/front_end/testcases/nnbd/never_receiver.dart:28:4: Warning: Operator '+' is called on 'Never' which is potentially null.
+// pkg/front_end/testcases/nnbd/never_receiver.dart:28:4: Error: Operator '+' cannot be called on 'Never' because it is potentially null.
 //   y++; // Error.
 //    ^
 //
-// pkg/front_end/testcases/nnbd/never_receiver.dart:29:5: Error: The method '+' isn't defined for the class 'Never'.
-// Try correcting the name to the name of an existing method, or defining a method named '+'.
+// pkg/front_end/testcases/nnbd/never_receiver.dart:29:5: Error: The operator '+' isn't defined for the class 'Never'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
 //   y += 1; // Error.
 //     ^
 //
-// pkg/front_end/testcases/nnbd/never_receiver.dart:29:5: Warning: Operator '+' is called on 'Never' which is potentially null.
+// pkg/front_end/testcases/nnbd/never_receiver.dart:29:5: Error: Operator '+' cannot be called on 'Never' because it is potentially null.
 //   y += 1; // Error.
 //     ^
 //
-// pkg/front_end/testcases/nnbd/never_receiver.dart:30:4: Error: The method '[]' isn't defined for the class 'Never'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]'.
+// pkg/front_end/testcases/nnbd/never_receiver.dart:30:4: Error: The operator '[]' isn't defined for the class 'Never'.
+// Try correcting the operator to an existing operator, or defining a '[]' operator.
 //   y[42]; // Error.
 //    ^
 //
-// pkg/front_end/testcases/nnbd/never_receiver.dart:30:4: Warning: Operator '[]' is called on 'Never' which is potentially null.
+// pkg/front_end/testcases/nnbd/never_receiver.dart:30:4: Error: Operator '[]' cannot be called on 'Never' because it is potentially null.
 //   y[42]; // Error.
 //    ^
 //
-// pkg/front_end/testcases/nnbd/never_receiver.dart:31:4: Error: The method '[]=' isn't defined for the class 'Never'.
-// Try correcting the name to the name of an existing method, or defining a method named '[]='.
+// pkg/front_end/testcases/nnbd/never_receiver.dart:31:4: Error: The operator '[]=' isn't defined for the class 'Never'.
+// Try correcting the operator to an existing operator, or defining a '[]=' operator.
 //   y[42] = 42; // Error.
 //    ^
 //
-// pkg/front_end/testcases/nnbd/never_receiver.dart:31:4: Warning: Operator '[]=' is called on 'Never' which is potentially null.
+// pkg/front_end/testcases/nnbd/never_receiver.dart:31:4: Error: Operator '[]=' cannot be called on 'Never' because it is potentially null.
 //   y[42] = 42; // Error.
 //    ^
 //
@@ -107,11 +92,17 @@
 Try correcting the name to the name of an existing method, or defining a method named 'foo'.
   y.foo(); // Error.
     ^^^";
-  invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:25:5: Error: The getter 'bar' isn't defined for the class 'Never'.
+  let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:25:5: Error: Property 'bar' cannot be accessed on 'Never' because it is potentially null.
+Try accessing using ?. instead.
+  y.bar; // Error.
+    ^^^" in invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:25:5: Error: The getter 'bar' isn't defined for the class 'Never'.
 Try correcting the name to the name of an existing getter, or defining a getter or field named 'bar'.
   y.bar; // Error.
     ^^^";
-  invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:26:5: Error: The setter 'baz' isn't defined for the class 'Never'.
+  let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:26:5: Error: Property 'baz' cannot be accessed on 'Never' because it is potentially null.
+Try accessing using ?. instead.
+  y.baz = 42; // Error.
+    ^^^" in invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:26:5: Error: The setter 'baz' isn't defined for the class 'Never'.
 Try correcting the name to the name of an existing setter, or defining a setter or field named 'baz'.
   y.baz = 42; // Error.
     ^^^";
@@ -119,20 +110,28 @@
 Try correcting the name to the name of an existing method, or defining a method named 'call'.
   y(); // Error.
    ^";
-  y = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:28:4: Error: The method '+' isn't defined for the class 'Never'.
-Try correcting the name to the name of an existing method, or defining a method named '+'.
+  y = (let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:28:4: Error: Operator '+' cannot be called on 'Never' because it is potentially null.
   y++; // Error.
-   ^" as{TypeError,ForDynamic,ForNonNullableByDefault} Never?;
-  y = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:29:5: Error: The method '+' isn't defined for the class 'Never'.
-Try correcting the name to the name of an existing method, or defining a method named '+'.
+   ^" in invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:28:4: Error: The operator '+' isn't defined for the class 'Never'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
+  y++; // Error.
+   ^") as{TypeError,ForDynamic,ForNonNullableByDefault} Never?;
+  y = (let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:29:5: Error: Operator '+' cannot be called on 'Never' because it is potentially null.
   y += 1; // Error.
-    ^" as{TypeError,ForDynamic,ForNonNullableByDefault} Never?;
-  invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:30:4: Error: The method '[]' isn't defined for the class 'Never'.
-Try correcting the name to the name of an existing method, or defining a method named '[]'.
+    ^" in invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:29:5: Error: The operator '+' isn't defined for the class 'Never'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
+  y += 1; // Error.
+    ^") as{TypeError,ForDynamic,ForNonNullableByDefault} Never?;
+  let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:30:4: Error: Operator '[]' cannot be called on 'Never' because it is potentially null.
+  y[42]; // Error.
+   ^" in invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:30:4: Error: The operator '[]' isn't defined for the class 'Never'.
+Try correcting the operator to an existing operator, or defining a '[]' operator.
   y[42]; // Error.
    ^";
-  invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:31:4: Error: The method '[]=' isn't defined for the class 'Never'.
-Try correcting the name to the name of an existing method, or defining a method named '[]='.
+  let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:31:4: Error: Operator '[]=' cannot be called on 'Never' because it is potentially null.
+  y[42] = 42; // Error.
+   ^" in invalid-expression "pkg/front_end/testcases/nnbd/never_receiver.dart:31:4: Error: The operator '[]=' isn't defined for the class 'Never'.
+Try correcting the operator to an existing operator, or defining a '[]=' operator.
   y[42] = 42; // Error.
    ^";
 }
diff --git a/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.weak.expect b/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.weak.expect
index 7f76fc6..bd5dcc7 100644
--- a/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.weak.expect
@@ -2,39 +2,39 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:7:5: Warning: Field 'topLevelField' isn't initialized and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:7:5: Error: Field 'topLevelField' should be initialized because its type 'int' doesn't allow null.
 // int topLevelField; // Error.
 //     ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:10:14: Warning: Field 'staticFieldOfA' isn't initialized and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:10:14: Error: Field 'staticFieldOfA' should be initialized because its type 'int' doesn't allow null.
 //   static int staticFieldOfA; // Error.
 //              ^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:24:14: Warning: Field 'staticFieldOfM' isn't initialized and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:24:14: Error: Field 'staticFieldOfM' should be initialized because its type 'int' doesn't allow null.
 //   static int staticFieldOfM; // Error.
 //              ^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:11:7: Warning: This constructor doesn't initialize field 'fieldOfA' and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:11:7: Error: This constructor should initialize field 'fieldOfA' because its type 'int' doesn't allow null.
 //   int fieldOfA; // Error.
 //       ^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:17:5: Warning: This constructor doesn't initialize field 'fieldOfB' and its type 'X' doesn't allow null.
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:17:5: Error: This constructor should initialize field 'fieldOfB' because its type 'X' doesn't allow null.
 //   X fieldOfB; // Error.
 //     ^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:18:5: Warning: This constructor doesn't initialize field 'fieldOfB2' and its type 'Y' doesn't allow null.
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:18:5: Error: This constructor should initialize field 'fieldOfB2' because its type 'Y' doesn't allow null.
 //   Y fieldOfB2; // Error.
 //     ^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:25:7: Warning: Field 'fieldOfM' isn't initialized and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:25:7: Error: Field 'fieldOfM' should be initialized because its type 'int' doesn't allow null.
 //   int fieldOfM; // Error.
 //       ^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:29:5: Warning: Field 'fieldOfN' isn't initialized and its type 'X' doesn't allow null.
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:29:5: Error: Field 'fieldOfN' should be initialized because its type 'X' doesn't allow null.
 //   X fieldOfN; // Error.
 //     ^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:30:5: Warning: Field 'fieldOfN2' isn't initialized and its type 'Y' doesn't allow null.
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:30:5: Error: Field 'fieldOfN2' should be initialized because its type 'Y' doesn't allow null.
 //   Y fieldOfN2; // Error.
 //     ^^^^^^^^^
 //
diff --git a/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.weak.transformed.expect
index 7f76fc6..bd5dcc7 100644
--- a/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart.weak.transformed.expect
@@ -2,39 +2,39 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:7:5: Warning: Field 'topLevelField' isn't initialized and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:7:5: Error: Field 'topLevelField' should be initialized because its type 'int' doesn't allow null.
 // int topLevelField; // Error.
 //     ^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:10:14: Warning: Field 'staticFieldOfA' isn't initialized and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:10:14: Error: Field 'staticFieldOfA' should be initialized because its type 'int' doesn't allow null.
 //   static int staticFieldOfA; // Error.
 //              ^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:24:14: Warning: Field 'staticFieldOfM' isn't initialized and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:24:14: Error: Field 'staticFieldOfM' should be initialized because its type 'int' doesn't allow null.
 //   static int staticFieldOfM; // Error.
 //              ^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:11:7: Warning: This constructor doesn't initialize field 'fieldOfA' and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:11:7: Error: This constructor should initialize field 'fieldOfA' because its type 'int' doesn't allow null.
 //   int fieldOfA; // Error.
 //       ^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:17:5: Warning: This constructor doesn't initialize field 'fieldOfB' and its type 'X' doesn't allow null.
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:17:5: Error: This constructor should initialize field 'fieldOfB' because its type 'X' doesn't allow null.
 //   X fieldOfB; // Error.
 //     ^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:18:5: Warning: This constructor doesn't initialize field 'fieldOfB2' and its type 'Y' doesn't allow null.
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:18:5: Error: This constructor should initialize field 'fieldOfB2' because its type 'Y' doesn't allow null.
 //   Y fieldOfB2; // Error.
 //     ^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:25:7: Warning: Field 'fieldOfM' isn't initialized and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:25:7: Error: Field 'fieldOfM' should be initialized because its type 'int' doesn't allow null.
 //   int fieldOfM; // Error.
 //       ^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:29:5: Warning: Field 'fieldOfN' isn't initialized and its type 'X' doesn't allow null.
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:29:5: Error: Field 'fieldOfN' should be initialized because its type 'X' doesn't allow null.
 //   X fieldOfN; // Error.
 //     ^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:30:5: Warning: Field 'fieldOfN2' isn't initialized and its type 'Y' doesn't allow null.
+// pkg/front_end/testcases/nnbd/non_nullable_field_initialization.dart:30:5: Error: Field 'fieldOfN2' should be initialized because its type 'Y' doesn't allow null.
 //   Y fieldOfN2; // Error.
 //     ^^^^^^^^^
 //
diff --git a/pkg/front_end/testcases/nnbd/non_nullable_optional.dart.weak.expect b/pkg/front_end/testcases/nnbd/non_nullable_optional.dart.weak.expect
index e484f3d..d869c59 100644
--- a/pkg/front_end/testcases/nnbd/non_nullable_optional.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/non_nullable_optional.dart.weak.expect
@@ -2,19 +2,19 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/non_nullable_optional.dart:9:14: Warning: Optional parameter 'a' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/non_nullable_optional.dart:9:14: Error: Optional parameter 'a' should have a default value because its type 'int' doesn't allow null.
 // method1({int a}) {}
 //              ^
 //
-// pkg/front_end/testcases/nnbd/non_nullable_optional.dart:11:14: Warning: Optional parameter 'a' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/non_nullable_optional.dart:11:14: Error: Optional parameter 'a' should have a default value because its type 'int' doesn't allow null.
 // method2([int a]) {}
 //              ^
 //
-// pkg/front_end/testcases/nnbd/non_nullable_optional_part.dart:7:14: Warning: Optional parameter 'a' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/non_nullable_optional_part.dart:7:14: Error: Optional parameter 'a' should have a default value because its type 'int' doesn't allow null.
 // method3({int a}) {}
 //              ^
 //
-// pkg/front_end/testcases/nnbd/non_nullable_optional_part.dart:9:14: Warning: Optional parameter 'a' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/non_nullable_optional_part.dart:9:14: Error: Optional parameter 'a' should have a default value because its type 'int' doesn't allow null.
 // method4([int a]) {}
 //              ^
 //
diff --git a/pkg/front_end/testcases/nnbd/non_nullable_optional.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/non_nullable_optional.dart.weak.transformed.expect
index e484f3d..d869c59 100644
--- a/pkg/front_end/testcases/nnbd/non_nullable_optional.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/non_nullable_optional.dart.weak.transformed.expect
@@ -2,19 +2,19 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/non_nullable_optional.dart:9:14: Warning: Optional parameter 'a' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/non_nullable_optional.dart:9:14: Error: Optional parameter 'a' should have a default value because its type 'int' doesn't allow null.
 // method1({int a}) {}
 //              ^
 //
-// pkg/front_end/testcases/nnbd/non_nullable_optional.dart:11:14: Warning: Optional parameter 'a' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/non_nullable_optional.dart:11:14: Error: Optional parameter 'a' should have a default value because its type 'int' doesn't allow null.
 // method2([int a]) {}
 //              ^
 //
-// pkg/front_end/testcases/nnbd/non_nullable_optional_part.dart:7:14: Warning: Optional parameter 'a' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/non_nullable_optional_part.dart:7:14: Error: Optional parameter 'a' should have a default value because its type 'int' doesn't allow null.
 // method3({int a}) {}
 //              ^
 //
-// pkg/front_end/testcases/nnbd/non_nullable_optional_part.dart:9:14: Warning: Optional parameter 'a' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/non_nullable_optional_part.dart:9:14: Error: Optional parameter 'a' should have a default value because its type 'int' doesn't allow null.
 // method4([int a]) {}
 //              ^
 //
diff --git a/pkg/front_end/testcases/nnbd/null_access.dart.strong.expect b/pkg/front_end/testcases/nnbd/null_access.dart.strong.expect
index 3495b4b..066a5f6 100644
--- a/pkg/front_end/testcases/nnbd/null_access.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/null_access.dart.strong.expect
@@ -70,12 +70,6 @@
 //   nullableClass?.nonNullableClass.nonNullableField ??= 0; // ok
 //                                   ^
 //
-// pkg/front_end/testcases/nnbd/null_access.dart:57:16: Error: Method 'call' cannot be called on 'Class?' because it is potentially null.
-//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
-// Try calling using ?. instead.
-//   nullableClass(); // error
-//                ^
-//
 // pkg/front_end/testcases/nnbd/null_access.dart:57:16: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
 //  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 // Try calling using ?.call instead.
@@ -191,12 +185,8 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try calling using ?.call instead.
   nullableClass(); // error
-               ^" in let final<BottomType> #t42 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:57:16: Error: Method 'call' cannot be called on 'Class?' because it is potentially null.
- - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
-Try calling using ?. instead.
-  nullableClass(); // error
                ^" in nullableClass.{self::Class::call}();
   nonNullableClass.{self::Class::call}();
-  let final self::Class #t43 = nonNullableClass in #t43.{core::Object::==}(null) ?{self::Class?} null : #t43.{self::Class::nonNullableClass}.{self::Class::call}();
-  let final self::Class #t44 = nonNullableClass in #t44.{core::Object::==}(null) ?{self::Class?} null : #t44.{self::Class::nonNullableClass}.{self::Class::nonNullableClass}.{self::Class::call}();
+  let final self::Class #t42 = nonNullableClass in #t42.{core::Object::==}(null) ?{self::Class?} null : #t42.{self::Class::nonNullableClass}.{self::Class::call}();
+  let final self::Class #t43 = nonNullableClass in #t43.{core::Object::==}(null) ?{self::Class?} null : #t43.{self::Class::nonNullableClass}.{self::Class::nonNullableClass}.{self::Class::call}();
 }
diff --git a/pkg/front_end/testcases/nnbd/null_access.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/null_access.dart.strong.transformed.expect
index 3495b4b..066a5f6 100644
--- a/pkg/front_end/testcases/nnbd/null_access.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_access.dart.strong.transformed.expect
@@ -70,12 +70,6 @@
 //   nullableClass?.nonNullableClass.nonNullableField ??= 0; // ok
 //                                   ^
 //
-// pkg/front_end/testcases/nnbd/null_access.dart:57:16: Error: Method 'call' cannot be called on 'Class?' because it is potentially null.
-//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
-// Try calling using ?. instead.
-//   nullableClass(); // error
-//                ^
-//
 // pkg/front_end/testcases/nnbd/null_access.dart:57:16: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
 //  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 // Try calling using ?.call instead.
@@ -191,12 +185,8 @@
  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 Try calling using ?.call instead.
   nullableClass(); // error
-               ^" in let final<BottomType> #t42 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:57:16: Error: Method 'call' cannot be called on 'Class?' because it is potentially null.
- - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
-Try calling using ?. instead.
-  nullableClass(); // error
                ^" in nullableClass.{self::Class::call}();
   nonNullableClass.{self::Class::call}();
-  let final self::Class #t43 = nonNullableClass in #t43.{core::Object::==}(null) ?{self::Class?} null : #t43.{self::Class::nonNullableClass}.{self::Class::call}();
-  let final self::Class #t44 = nonNullableClass in #t44.{core::Object::==}(null) ?{self::Class?} null : #t44.{self::Class::nonNullableClass}.{self::Class::nonNullableClass}.{self::Class::call}();
+  let final self::Class #t42 = nonNullableClass in #t42.{core::Object::==}(null) ?{self::Class?} null : #t42.{self::Class::nonNullableClass}.{self::Class::call}();
+  let final self::Class #t43 = nonNullableClass in #t43.{core::Object::==}(null) ?{self::Class?} null : #t43.{self::Class::nonNullableClass}.{self::Class::nonNullableClass}.{self::Class::call}();
 }
diff --git a/pkg/front_end/testcases/nnbd/null_access.dart.weak.expect b/pkg/front_end/testcases/nnbd/null_access.dart.weak.expect
index 7a28d30..066a5f6 100644
--- a/pkg/front_end/testcases/nnbd/null_access.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/null_access.dart.weak.expect
@@ -2,67 +2,67 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/null_access.dart:24:3: Warning: Operator 'unary-' is called on 'int?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_access.dart:24:3: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
 //   -nullableInt; // error
 //   ^
 //
-// pkg/front_end/testcases/nnbd/null_access.dart:25:15: Warning: Operator '+' is called on 'int?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_access.dart:25:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
 //   nullableInt + 2; // error
 //               ^
 //
-// pkg/front_end/testcases/nnbd/null_access.dart:26:16: Warning: Operator '[]' is called on 'Class?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_access.dart:26:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
 //  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 //   nullableClass[nonNullableInt]; // error
 //                ^
 //
-// pkg/front_end/testcases/nnbd/null_access.dart:27:16: Warning: Operator '[]=' is called on 'Class?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_access.dart:27:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
 //  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 //   nullableClass[nonNullableInt] = nonNullableInt; // error
 //                ^
 //
-// pkg/front_end/testcases/nnbd/null_access.dart:28:16: Warning: Operator '[]' is called on 'Class?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
 //  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 //   nullableClass[nonNullableInt] += nonNullableInt; // error
 //                ^
 //
-// pkg/front_end/testcases/nnbd/null_access.dart:28:16: Warning: Operator '[]=' is called on 'Class?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
 //  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 //   nullableClass[nonNullableInt] += nonNullableInt; // error
 //                ^
 //
-// pkg/front_end/testcases/nnbd/null_access.dart:29:29: Warning: Operator '[]' is called on 'NullableIndexClass?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]' cannot be called on 'NullableIndexClass?' because it is potentially null.
 //  - 'NullableIndexClass' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 //   nullableNullableIndexClass[nonNullableInt] ??= nonNullableInt; // error
 //                             ^
 //
-// pkg/front_end/testcases/nnbd/null_access.dart:29:29: Warning: Operator '[]=' is called on 'NullableIndexClass?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]=' cannot be called on 'NullableIndexClass?' because it is potentially null.
 //  - 'NullableIndexClass' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 //   nullableNullableIndexClass[nonNullableInt] ??= nonNullableInt; // error
 //                             ^
 //
-// pkg/front_end/testcases/nnbd/null_access.dart:37:17: Warning: Property 'nonNullableField' is accessed on 'Class?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_access.dart:37:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
 //  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 // Try accessing using ?. instead.
 //   nullableClass.nonNullableField; // error
 //                 ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/null_access.dart:38:17: Warning: Property 'nonNullableField' is accessed on 'Class?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_access.dart:38:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
 //  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 // Try accessing using ?. instead.
 //   nullableClass.nonNullableField = 2; // error
 //                 ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/null_access.dart:39:17: Warning: Property 'nonNullableField' is accessed on 'Class?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
 //  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 // Try accessing using ?. instead.
 //   nullableClass.nonNullableField += 2; // error
 //                 ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/null_access.dart:48:34: Warning: Operator '+' is called on 'int?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_access.dart:48:34: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
 //   nonNullableClass.nullableField += 2; // error
 //                                  ^
 //
-// pkg/front_end/testcases/nnbd/null_access.dart:49:32: Warning: Operator '+' is called on 'int?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
 //   nullableClass?.nullableField += 2; // error
 //                                ^
 //
@@ -70,13 +70,7 @@
 //   nullableClass?.nonNullableClass.nonNullableField ??= 0; // ok
 //                                   ^
 //
-// pkg/front_end/testcases/nnbd/null_access.dart:57:16: Warning: Method 'call' is called on 'Class?' which is potentially null.
-//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
-// Try calling using ?. instead.
-//   nullableClass(); // error
-//                ^
-//
-// pkg/front_end/testcases/nnbd/null_access.dart:57:16: Warning: Expression of type 'Class?' is used as a function, but it's potentially null.
+// pkg/front_end/testcases/nnbd/null_access.dart:57:16: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
 //  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 // Try calling using ?.call instead.
 //   nullableClass(); // error
@@ -121,32 +115,78 @@
 }
 static method main() → dynamic {}
 static method errors(self::Class? nullableClass, self::Class nonNullableClass, core::int? nullableInt, core::int nonNullableInt, self::NullableIndexClass? nullableNullableIndexClass) → dynamic {
-  nullableInt.{core::int::unary-}();
-  nullableInt.{core::num::+}(2);
-  nullableClass.{self::Class::[]}(nonNullableInt);
-  nullableClass.{self::Class::[]=}(nonNullableInt, nonNullableInt);
-  let final self::Class? #t1 = nullableClass in let final core::int #t2 = nonNullableInt in #t1.{self::Class::[]=}(#t2, #t1.{self::Class::[]}(#t2).{core::num::+}(nonNullableInt));
-  let final self::NullableIndexClass? #t3 = nullableNullableIndexClass in let final core::int #t4 = nonNullableInt in #t3.{self::NullableIndexClass::[]}(#t4).{core::num::==}(null) ?{core::int} #t3.{self::NullableIndexClass::[]=}(#t4, nonNullableInt) : null;
-  let final self::Class? #t5 = nullableClass in #t5.{core::Object::==}(null) ?{core::int?} null : #t5{self::Class}.{self::Class::nonNullableClass}.{self::Class::[]}(nonNullableInt);
-  let final self::Class? #t6 = nullableClass in #t6.{core::Object::==}(null) ?{core::int?} null : #t6{self::Class}.{self::Class::nonNullableClass}.{self::Class::[]=}(nonNullableInt, nonNullableInt);
-  let final self::Class? #t7 = nullableClass in #t7.{core::Object::==}(null) ?{core::int?} null : let final self::Class #t8 = #t7{self::Class}.{self::Class::nonNullableClass} in let final core::int #t9 = nonNullableInt in #t8.{self::Class::[]=}(#t9, #t8.{self::Class::[]}(#t9).{core::num::+}(nonNullableInt));
-  let final self::Class? #t10 = nullableClass in #t10.{core::Object::==}(null) ?{core::int?} null : let final self::NullableIndexClass #t11 = #t10{self::Class}.{self::Class::nonNullableNullableIndexClass} in let final core::int #t12 = nonNullableInt in #t11.{self::NullableIndexClass::[]}(#t12).{core::num::==}(null) ?{core::int} #t11.{self::NullableIndexClass::[]=}(#t12, nonNullableInt) : null;
-  nullableClass.{self::Class::nonNullableField};
-  nullableClass.{self::Class::nonNullableField} = 2;
-  let final self::Class? #t13 = nullableClass in #t13.{self::Class::nonNullableField} = #t13.{self::Class::nonNullableField}.{core::num::+}(2);
-  let final self::Class? #t14 = nullableClass in #t14.{core::Object::==}(null) ?{core::int?} null : #t14{self::Class}.{self::Class::nonNullableField};
-  let final self::Class? #t15 = nullableClass in #t15.{core::Object::==}(null) ?{core::int?} null : #t15{self::Class}.{self::Class::nonNullableField} = 2;
-  let final self::Class? #t16 = nullableClass in #t16.{core::Object::==}(null) ?{core::int?} null : #t16.{self::Class::nonNullableField} = #t16.{self::Class::nonNullableField}.{core::num::+}(2);
-  let final self::Class? #t17 = nullableClass in #t17.{core::Object::==}(null) ?{core::int?} null : #t17{self::Class}.{self::Class::nonNullableClass}.{self::Class::nonNullableField};
-  let final self::Class? #t18 = nullableClass in #t18.{core::Object::==}(null) ?{core::int?} null : #t18{self::Class}.{self::Class::nonNullableClass}.{self::Class::nonNullableField} = 2;
-  let final self::Class #t19 = nonNullableClass in #t19.{self::Class::nullableField} = #t19.{self::Class::nullableField}.{core::num::+}(2);
-  let final self::Class? #t20 = nullableClass in #t20.{core::Object::==}(null) ?{core::int?} null : #t20.{self::Class::nullableField} = #t20.{self::Class::nullableField}.{core::num::+}(2);
-  let final self::Class? #t21 = nullableClass in #t21.{core::Object::==}(null) ?{core::int?} null : #t21.{self::Class::nonNullableField}.{core::num::==}(null) ?{core::int} #t21.{self::Class::nonNullableField} = 0 : null;
-  let final self::Class? #t22 = nullableClass in #t22.{core::Object::==}(null) ?{core::int?} null : #t22.{self::Class::nullableField}.{core::num::==}(null) ?{core::int} #t22.{self::Class::nullableField} = 0 : null;
-  let final self::Class? #t23 = nullableClass in #t23.{core::Object::==}(null) ?{core::int?} null : let final self::Class? #t24 = #t23{self::Class}.{self::Class::nonNullableClass} in #t24{self::Class}.{self::Class::nonNullableField}.{core::num::==}(null) ?{core::int} #t24{self::Class}.{self::Class::nonNullableField} = 0 : null;
-  let final self::Class? #t25 = nullableClass in #t25.{core::Object::==}(null) ?{core::int?} null : let final self::Class? #t26 = #t25{self::Class}.{self::Class::nonNullableClass} in #t26{self::Class}.{self::Class::nullableField}.{core::num::==}(null) ?{core::int} #t26{self::Class}.{self::Class::nullableField} = 0 : null;
-  nullableClass.{self::Class::call}();
+  let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:24:3: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+  -nullableInt; // error
+  ^" in nullableInt.{core::int::unary-}();
+  let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:25:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+  nullableInt + 2; // error
+              ^" in nullableInt.{core::num::+}(2);
+  let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:26:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+  nullableClass[nonNullableInt]; // error
+               ^" in nullableClass.{self::Class::[]}(nonNullableInt);
+  let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:27:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+  nullableClass[nonNullableInt] = nonNullableInt; // error
+               ^" in nullableClass.{self::Class::[]=}(nonNullableInt, nonNullableInt);
+  let final self::Class? #t5 = nullableClass in let final core::int #t6 = nonNullableInt in let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+  nullableClass[nonNullableInt] += nonNullableInt; // error
+               ^" in #t5.{self::Class::[]=}(#t6, (let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+  nullableClass[nonNullableInt] += nonNullableInt; // error
+               ^" in #t5.{self::Class::[]}(#t6)).{core::num::+}(nonNullableInt));
+  let final self::NullableIndexClass? #t9 = nullableNullableIndexClass in let final core::int #t10 = nonNullableInt in (let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]' cannot be called on 'NullableIndexClass?' because it is potentially null.
+ - 'NullableIndexClass' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+  nullableNullableIndexClass[nonNullableInt] ??= nonNullableInt; // error
+                            ^" in #t9.{self::NullableIndexClass::[]}(#t10)).{core::num::==}(null) ?{core::int} let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]=' cannot be called on 'NullableIndexClass?' because it is potentially null.
+ - 'NullableIndexClass' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+  nullableNullableIndexClass[nonNullableInt] ??= nonNullableInt; // error
+                            ^" in #t9.{self::NullableIndexClass::[]=}(#t10, nonNullableInt) : null;
+  let final self::Class? #t13 = nullableClass in #t13.{core::Object::==}(null) ?{core::int?} null : #t13{self::Class}.{self::Class::nonNullableClass}.{self::Class::[]}(nonNullableInt);
+  let final self::Class? #t14 = nullableClass in #t14.{core::Object::==}(null) ?{core::int?} null : #t14{self::Class}.{self::Class::nonNullableClass}.{self::Class::[]=}(nonNullableInt, nonNullableInt);
+  let final self::Class? #t15 = nullableClass in #t15.{core::Object::==}(null) ?{core::int?} null : let final self::Class #t16 = #t15{self::Class}.{self::Class::nonNullableClass} in let final core::int #t17 = nonNullableInt in #t16.{self::Class::[]=}(#t17, #t16.{self::Class::[]}(#t17).{core::num::+}(nonNullableInt));
+  let final self::Class? #t18 = nullableClass in #t18.{core::Object::==}(null) ?{core::int?} null : let final self::NullableIndexClass #t19 = #t18{self::Class}.{self::Class::nonNullableNullableIndexClass} in let final core::int #t20 = nonNullableInt in #t19.{self::NullableIndexClass::[]}(#t20).{core::num::==}(null) ?{core::int} #t19.{self::NullableIndexClass::[]=}(#t20, nonNullableInt) : null;
+  let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:37:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+Try accessing using ?. instead.
+  nullableClass.nonNullableField; // error
+                ^^^^^^^^^^^^^^^^" in nullableClass.{self::Class::nonNullableField};
+  let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:38:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+Try accessing using ?. instead.
+  nullableClass.nonNullableField = 2; // error
+                ^^^^^^^^^^^^^^^^" in nullableClass.{self::Class::nonNullableField} = 2;
+  let final self::Class? #t23 = nullableClass in let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+Try accessing using ?. instead.
+  nullableClass.nonNullableField += 2; // error
+                ^^^^^^^^^^^^^^^^" in #t23.{self::Class::nonNullableField} = (let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+Try accessing using ?. instead.
+  nullableClass.nonNullableField += 2; // error
+                ^^^^^^^^^^^^^^^^" in #t23.{self::Class::nonNullableField}).{core::num::+}(2);
+  let final self::Class? #t26 = nullableClass in #t26.{core::Object::==}(null) ?{core::int?} null : #t26{self::Class}.{self::Class::nonNullableField};
+  let final self::Class? #t27 = nullableClass in #t27.{core::Object::==}(null) ?{core::int?} null : #t27{self::Class}.{self::Class::nonNullableField} = 2;
+  let final self::Class? #t28 = nullableClass in #t28.{core::Object::==}(null) ?{core::int?} null : #t28.{self::Class::nonNullableField} = #t28.{self::Class::nonNullableField}.{core::num::+}(2);
+  let final self::Class? #t29 = nullableClass in #t29.{core::Object::==}(null) ?{core::int?} null : #t29{self::Class}.{self::Class::nonNullableClass}.{self::Class::nonNullableField};
+  let final self::Class? #t30 = nullableClass in #t30.{core::Object::==}(null) ?{core::int?} null : #t30{self::Class}.{self::Class::nonNullableClass}.{self::Class::nonNullableField} = 2;
+  let final self::Class #t31 = nonNullableClass in #t31.{self::Class::nullableField} = let final<BottomType> #t32 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:48:34: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+  nonNullableClass.nullableField += 2; // error
+                                 ^" in #t31.{self::Class::nullableField}.{core::num::+}(2);
+  let final self::Class? #t33 = nullableClass in #t33.{core::Object::==}(null) ?{core::int?} null : #t33.{self::Class::nullableField} = let final<BottomType> #t34 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+  nullableClass?.nullableField += 2; // error
+                               ^" in #t33.{self::Class::nullableField}.{core::num::+}(2);
+  let final self::Class? #t35 = nullableClass in #t35.{core::Object::==}(null) ?{core::int?} null : #t35.{self::Class::nonNullableField}.{core::num::==}(null) ?{core::int} #t35.{self::Class::nonNullableField} = 0 : null;
+  let final self::Class? #t36 = nullableClass in #t36.{core::Object::==}(null) ?{core::int?} null : #t36.{self::Class::nullableField}.{core::num::==}(null) ?{core::int} #t36.{self::Class::nullableField} = 0 : null;
+  let final self::Class? #t37 = nullableClass in #t37.{core::Object::==}(null) ?{core::int?} null : let final self::Class? #t38 = #t37{self::Class}.{self::Class::nonNullableClass} in #t38{self::Class}.{self::Class::nonNullableField}.{core::num::==}(null) ?{core::int} #t38{self::Class}.{self::Class::nonNullableField} = 0 : null;
+  let final self::Class? #t39 = nullableClass in #t39.{core::Object::==}(null) ?{core::int?} null : let final self::Class? #t40 = #t39{self::Class}.{self::Class::nonNullableClass} in #t40{self::Class}.{self::Class::nullableField}.{core::num::==}(null) ?{core::int} #t40{self::Class}.{self::Class::nullableField} = 0 : null;
+  let final<BottomType> #t41 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:57:16: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+Try calling using ?.call instead.
+  nullableClass(); // error
+               ^" in nullableClass.{self::Class::call}();
   nonNullableClass.{self::Class::call}();
-  let final self::Class #t27 = nonNullableClass in #t27.{core::Object::==}(null) ?{self::Class?} null : #t27.{self::Class::nonNullableClass}.{self::Class::call}();
-  let final self::Class #t28 = nonNullableClass in #t28.{core::Object::==}(null) ?{self::Class?} null : #t28.{self::Class::nonNullableClass}.{self::Class::nonNullableClass}.{self::Class::call}();
+  let final self::Class #t42 = nonNullableClass in #t42.{core::Object::==}(null) ?{self::Class?} null : #t42.{self::Class::nonNullableClass}.{self::Class::call}();
+  let final self::Class #t43 = nonNullableClass in #t43.{core::Object::==}(null) ?{self::Class?} null : #t43.{self::Class::nonNullableClass}.{self::Class::nonNullableClass}.{self::Class::call}();
 }
diff --git a/pkg/front_end/testcases/nnbd/null_access.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/null_access.dart.weak.transformed.expect
index 7a28d30..066a5f6 100644
--- a/pkg/front_end/testcases/nnbd/null_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_access.dart.weak.transformed.expect
@@ -2,67 +2,67 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/null_access.dart:24:3: Warning: Operator 'unary-' is called on 'int?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_access.dart:24:3: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
 //   -nullableInt; // error
 //   ^
 //
-// pkg/front_end/testcases/nnbd/null_access.dart:25:15: Warning: Operator '+' is called on 'int?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_access.dart:25:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
 //   nullableInt + 2; // error
 //               ^
 //
-// pkg/front_end/testcases/nnbd/null_access.dart:26:16: Warning: Operator '[]' is called on 'Class?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_access.dart:26:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
 //  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 //   nullableClass[nonNullableInt]; // error
 //                ^
 //
-// pkg/front_end/testcases/nnbd/null_access.dart:27:16: Warning: Operator '[]=' is called on 'Class?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_access.dart:27:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
 //  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 //   nullableClass[nonNullableInt] = nonNullableInt; // error
 //                ^
 //
-// pkg/front_end/testcases/nnbd/null_access.dart:28:16: Warning: Operator '[]' is called on 'Class?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
 //  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 //   nullableClass[nonNullableInt] += nonNullableInt; // error
 //                ^
 //
-// pkg/front_end/testcases/nnbd/null_access.dart:28:16: Warning: Operator '[]=' is called on 'Class?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
 //  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 //   nullableClass[nonNullableInt] += nonNullableInt; // error
 //                ^
 //
-// pkg/front_end/testcases/nnbd/null_access.dart:29:29: Warning: Operator '[]' is called on 'NullableIndexClass?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]' cannot be called on 'NullableIndexClass?' because it is potentially null.
 //  - 'NullableIndexClass' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 //   nullableNullableIndexClass[nonNullableInt] ??= nonNullableInt; // error
 //                             ^
 //
-// pkg/front_end/testcases/nnbd/null_access.dart:29:29: Warning: Operator '[]=' is called on 'NullableIndexClass?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]=' cannot be called on 'NullableIndexClass?' because it is potentially null.
 //  - 'NullableIndexClass' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 //   nullableNullableIndexClass[nonNullableInt] ??= nonNullableInt; // error
 //                             ^
 //
-// pkg/front_end/testcases/nnbd/null_access.dart:37:17: Warning: Property 'nonNullableField' is accessed on 'Class?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_access.dart:37:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
 //  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 // Try accessing using ?. instead.
 //   nullableClass.nonNullableField; // error
 //                 ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/null_access.dart:38:17: Warning: Property 'nonNullableField' is accessed on 'Class?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_access.dart:38:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
 //  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 // Try accessing using ?. instead.
 //   nullableClass.nonNullableField = 2; // error
 //                 ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/null_access.dart:39:17: Warning: Property 'nonNullableField' is accessed on 'Class?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
 //  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 // Try accessing using ?. instead.
 //   nullableClass.nonNullableField += 2; // error
 //                 ^^^^^^^^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/null_access.dart:48:34: Warning: Operator '+' is called on 'int?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_access.dart:48:34: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
 //   nonNullableClass.nullableField += 2; // error
 //                                  ^
 //
-// pkg/front_end/testcases/nnbd/null_access.dart:49:32: Warning: Operator '+' is called on 'int?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
 //   nullableClass?.nullableField += 2; // error
 //                                ^
 //
@@ -70,13 +70,7 @@
 //   nullableClass?.nonNullableClass.nonNullableField ??= 0; // ok
 //                                   ^
 //
-// pkg/front_end/testcases/nnbd/null_access.dart:57:16: Warning: Method 'call' is called on 'Class?' which is potentially null.
-//  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
-// Try calling using ?. instead.
-//   nullableClass(); // error
-//                ^
-//
-// pkg/front_end/testcases/nnbd/null_access.dart:57:16: Warning: Expression of type 'Class?' is used as a function, but it's potentially null.
+// pkg/front_end/testcases/nnbd/null_access.dart:57:16: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
 //  - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
 // Try calling using ?.call instead.
 //   nullableClass(); // error
@@ -121,32 +115,78 @@
 }
 static method main() → dynamic {}
 static method errors(self::Class? nullableClass, self::Class nonNullableClass, core::int? nullableInt, core::int nonNullableInt, self::NullableIndexClass? nullableNullableIndexClass) → dynamic {
-  nullableInt.{core::int::unary-}();
-  nullableInt.{core::num::+}(2);
-  nullableClass.{self::Class::[]}(nonNullableInt);
-  nullableClass.{self::Class::[]=}(nonNullableInt, nonNullableInt);
-  let final self::Class? #t1 = nullableClass in let final core::int #t2 = nonNullableInt in #t1.{self::Class::[]=}(#t2, #t1.{self::Class::[]}(#t2).{core::num::+}(nonNullableInt));
-  let final self::NullableIndexClass? #t3 = nullableNullableIndexClass in let final core::int #t4 = nonNullableInt in #t3.{self::NullableIndexClass::[]}(#t4).{core::num::==}(null) ?{core::int} #t3.{self::NullableIndexClass::[]=}(#t4, nonNullableInt) : null;
-  let final self::Class? #t5 = nullableClass in #t5.{core::Object::==}(null) ?{core::int?} null : #t5{self::Class}.{self::Class::nonNullableClass}.{self::Class::[]}(nonNullableInt);
-  let final self::Class? #t6 = nullableClass in #t6.{core::Object::==}(null) ?{core::int?} null : #t6{self::Class}.{self::Class::nonNullableClass}.{self::Class::[]=}(nonNullableInt, nonNullableInt);
-  let final self::Class? #t7 = nullableClass in #t7.{core::Object::==}(null) ?{core::int?} null : let final self::Class #t8 = #t7{self::Class}.{self::Class::nonNullableClass} in let final core::int #t9 = nonNullableInt in #t8.{self::Class::[]=}(#t9, #t8.{self::Class::[]}(#t9).{core::num::+}(nonNullableInt));
-  let final self::Class? #t10 = nullableClass in #t10.{core::Object::==}(null) ?{core::int?} null : let final self::NullableIndexClass #t11 = #t10{self::Class}.{self::Class::nonNullableNullableIndexClass} in let final core::int #t12 = nonNullableInt in #t11.{self::NullableIndexClass::[]}(#t12).{core::num::==}(null) ?{core::int} #t11.{self::NullableIndexClass::[]=}(#t12, nonNullableInt) : null;
-  nullableClass.{self::Class::nonNullableField};
-  nullableClass.{self::Class::nonNullableField} = 2;
-  let final self::Class? #t13 = nullableClass in #t13.{self::Class::nonNullableField} = #t13.{self::Class::nonNullableField}.{core::num::+}(2);
-  let final self::Class? #t14 = nullableClass in #t14.{core::Object::==}(null) ?{core::int?} null : #t14{self::Class}.{self::Class::nonNullableField};
-  let final self::Class? #t15 = nullableClass in #t15.{core::Object::==}(null) ?{core::int?} null : #t15{self::Class}.{self::Class::nonNullableField} = 2;
-  let final self::Class? #t16 = nullableClass in #t16.{core::Object::==}(null) ?{core::int?} null : #t16.{self::Class::nonNullableField} = #t16.{self::Class::nonNullableField}.{core::num::+}(2);
-  let final self::Class? #t17 = nullableClass in #t17.{core::Object::==}(null) ?{core::int?} null : #t17{self::Class}.{self::Class::nonNullableClass}.{self::Class::nonNullableField};
-  let final self::Class? #t18 = nullableClass in #t18.{core::Object::==}(null) ?{core::int?} null : #t18{self::Class}.{self::Class::nonNullableClass}.{self::Class::nonNullableField} = 2;
-  let final self::Class #t19 = nonNullableClass in #t19.{self::Class::nullableField} = #t19.{self::Class::nullableField}.{core::num::+}(2);
-  let final self::Class? #t20 = nullableClass in #t20.{core::Object::==}(null) ?{core::int?} null : #t20.{self::Class::nullableField} = #t20.{self::Class::nullableField}.{core::num::+}(2);
-  let final self::Class? #t21 = nullableClass in #t21.{core::Object::==}(null) ?{core::int?} null : #t21.{self::Class::nonNullableField}.{core::num::==}(null) ?{core::int} #t21.{self::Class::nonNullableField} = 0 : null;
-  let final self::Class? #t22 = nullableClass in #t22.{core::Object::==}(null) ?{core::int?} null : #t22.{self::Class::nullableField}.{core::num::==}(null) ?{core::int} #t22.{self::Class::nullableField} = 0 : null;
-  let final self::Class? #t23 = nullableClass in #t23.{core::Object::==}(null) ?{core::int?} null : let final self::Class? #t24 = #t23{self::Class}.{self::Class::nonNullableClass} in #t24{self::Class}.{self::Class::nonNullableField}.{core::num::==}(null) ?{core::int} #t24{self::Class}.{self::Class::nonNullableField} = 0 : null;
-  let final self::Class? #t25 = nullableClass in #t25.{core::Object::==}(null) ?{core::int?} null : let final self::Class? #t26 = #t25{self::Class}.{self::Class::nonNullableClass} in #t26{self::Class}.{self::Class::nullableField}.{core::num::==}(null) ?{core::int} #t26{self::Class}.{self::Class::nullableField} = 0 : null;
-  nullableClass.{self::Class::call}();
+  let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:24:3: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+  -nullableInt; // error
+  ^" in nullableInt.{core::int::unary-}();
+  let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:25:15: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+  nullableInt + 2; // error
+              ^" in nullableInt.{core::num::+}(2);
+  let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:26:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+  nullableClass[nonNullableInt]; // error
+               ^" in nullableClass.{self::Class::[]}(nonNullableInt);
+  let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:27:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+  nullableClass[nonNullableInt] = nonNullableInt; // error
+               ^" in nullableClass.{self::Class::[]=}(nonNullableInt, nonNullableInt);
+  let final self::Class? #t5 = nullableClass in let final core::int #t6 = nonNullableInt in let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]=' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+  nullableClass[nonNullableInt] += nonNullableInt; // error
+               ^" in #t5.{self::Class::[]=}(#t6, (let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:28:16: Error: Operator '[]' cannot be called on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+  nullableClass[nonNullableInt] += nonNullableInt; // error
+               ^" in #t5.{self::Class::[]}(#t6)).{core::num::+}(nonNullableInt));
+  let final self::NullableIndexClass? #t9 = nullableNullableIndexClass in let final core::int #t10 = nonNullableInt in (let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]' cannot be called on 'NullableIndexClass?' because it is potentially null.
+ - 'NullableIndexClass' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+  nullableNullableIndexClass[nonNullableInt] ??= nonNullableInt; // error
+                            ^" in #t9.{self::NullableIndexClass::[]}(#t10)).{core::num::==}(null) ?{core::int} let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:29:29: Error: Operator '[]=' cannot be called on 'NullableIndexClass?' because it is potentially null.
+ - 'NullableIndexClass' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+  nullableNullableIndexClass[nonNullableInt] ??= nonNullableInt; // error
+                            ^" in #t9.{self::NullableIndexClass::[]=}(#t10, nonNullableInt) : null;
+  let final self::Class? #t13 = nullableClass in #t13.{core::Object::==}(null) ?{core::int?} null : #t13{self::Class}.{self::Class::nonNullableClass}.{self::Class::[]}(nonNullableInt);
+  let final self::Class? #t14 = nullableClass in #t14.{core::Object::==}(null) ?{core::int?} null : #t14{self::Class}.{self::Class::nonNullableClass}.{self::Class::[]=}(nonNullableInt, nonNullableInt);
+  let final self::Class? #t15 = nullableClass in #t15.{core::Object::==}(null) ?{core::int?} null : let final self::Class #t16 = #t15{self::Class}.{self::Class::nonNullableClass} in let final core::int #t17 = nonNullableInt in #t16.{self::Class::[]=}(#t17, #t16.{self::Class::[]}(#t17).{core::num::+}(nonNullableInt));
+  let final self::Class? #t18 = nullableClass in #t18.{core::Object::==}(null) ?{core::int?} null : let final self::NullableIndexClass #t19 = #t18{self::Class}.{self::Class::nonNullableNullableIndexClass} in let final core::int #t20 = nonNullableInt in #t19.{self::NullableIndexClass::[]}(#t20).{core::num::==}(null) ?{core::int} #t19.{self::NullableIndexClass::[]=}(#t20, nonNullableInt) : null;
+  let final<BottomType> #t21 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:37:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+Try accessing using ?. instead.
+  nullableClass.nonNullableField; // error
+                ^^^^^^^^^^^^^^^^" in nullableClass.{self::Class::nonNullableField};
+  let final<BottomType> #t22 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:38:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+Try accessing using ?. instead.
+  nullableClass.nonNullableField = 2; // error
+                ^^^^^^^^^^^^^^^^" in nullableClass.{self::Class::nonNullableField} = 2;
+  let final self::Class? #t23 = nullableClass in let final<BottomType> #t24 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+Try accessing using ?. instead.
+  nullableClass.nonNullableField += 2; // error
+                ^^^^^^^^^^^^^^^^" in #t23.{self::Class::nonNullableField} = (let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:39:17: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+Try accessing using ?. instead.
+  nullableClass.nonNullableField += 2; // error
+                ^^^^^^^^^^^^^^^^" in #t23.{self::Class::nonNullableField}).{core::num::+}(2);
+  let final self::Class? #t26 = nullableClass in #t26.{core::Object::==}(null) ?{core::int?} null : #t26{self::Class}.{self::Class::nonNullableField};
+  let final self::Class? #t27 = nullableClass in #t27.{core::Object::==}(null) ?{core::int?} null : #t27{self::Class}.{self::Class::nonNullableField} = 2;
+  let final self::Class? #t28 = nullableClass in #t28.{core::Object::==}(null) ?{core::int?} null : #t28.{self::Class::nonNullableField} = #t28.{self::Class::nonNullableField}.{core::num::+}(2);
+  let final self::Class? #t29 = nullableClass in #t29.{core::Object::==}(null) ?{core::int?} null : #t29{self::Class}.{self::Class::nonNullableClass}.{self::Class::nonNullableField};
+  let final self::Class? #t30 = nullableClass in #t30.{core::Object::==}(null) ?{core::int?} null : #t30{self::Class}.{self::Class::nonNullableClass}.{self::Class::nonNullableField} = 2;
+  let final self::Class #t31 = nonNullableClass in #t31.{self::Class::nullableField} = let final<BottomType> #t32 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:48:34: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+  nonNullableClass.nullableField += 2; // error
+                                 ^" in #t31.{self::Class::nullableField}.{core::num::+}(2);
+  let final self::Class? #t33 = nullableClass in #t33.{core::Object::==}(null) ?{core::int?} null : #t33.{self::Class::nullableField} = let final<BottomType> #t34 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:49:32: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+  nullableClass?.nullableField += 2; // error
+                               ^" in #t33.{self::Class::nullableField}.{core::num::+}(2);
+  let final self::Class? #t35 = nullableClass in #t35.{core::Object::==}(null) ?{core::int?} null : #t35.{self::Class::nonNullableField}.{core::num::==}(null) ?{core::int} #t35.{self::Class::nonNullableField} = 0 : null;
+  let final self::Class? #t36 = nullableClass in #t36.{core::Object::==}(null) ?{core::int?} null : #t36.{self::Class::nullableField}.{core::num::==}(null) ?{core::int} #t36.{self::Class::nullableField} = 0 : null;
+  let final self::Class? #t37 = nullableClass in #t37.{core::Object::==}(null) ?{core::int?} null : let final self::Class? #t38 = #t37{self::Class}.{self::Class::nonNullableClass} in #t38{self::Class}.{self::Class::nonNullableField}.{core::num::==}(null) ?{core::int} #t38{self::Class}.{self::Class::nonNullableField} = 0 : null;
+  let final self::Class? #t39 = nullableClass in #t39.{core::Object::==}(null) ?{core::int?} null : let final self::Class? #t40 = #t39{self::Class}.{self::Class::nonNullableClass} in #t40{self::Class}.{self::Class::nullableField}.{core::num::==}(null) ?{core::int} #t40{self::Class}.{self::Class::nullableField} = 0 : null;
+  let final<BottomType> #t41 = invalid-expression "pkg/front_end/testcases/nnbd/null_access.dart:57:16: Error: Can't use an expression of type 'Class?' as a function because it's potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/null_access.dart'.
+Try calling using ?.call instead.
+  nullableClass(); // error
+               ^" in nullableClass.{self::Class::call}();
   nonNullableClass.{self::Class::call}();
-  let final self::Class #t27 = nonNullableClass in #t27.{core::Object::==}(null) ?{self::Class?} null : #t27.{self::Class::nonNullableClass}.{self::Class::call}();
-  let final self::Class #t28 = nonNullableClass in #t28.{core::Object::==}(null) ?{self::Class?} null : #t28.{self::Class::nonNullableClass}.{self::Class::nonNullableClass}.{self::Class::call}();
+  let final self::Class #t42 = nonNullableClass in #t42.{core::Object::==}(null) ?{self::Class?} null : #t42.{self::Class::nonNullableClass}.{self::Class::call}();
+  let final self::Class #t43 = nonNullableClass in #t43.{core::Object::==}(null) ?{self::Class?} null : #t43.{self::Class::nonNullableClass}.{self::Class::nonNullableClass}.{self::Class::call}();
 }
diff --git a/pkg/front_end/testcases/nnbd/null_shorting.dart.weak.expect b/pkg/front_end/testcases/nnbd/null_shorting.dart.weak.expect
index 1667166..4b8eb0a 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting.dart.weak.expect
@@ -2,24 +2,24 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/null_shorting.dart:87:47: Warning: Property 'nullable1' is accessed on 'Class1?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_shorting.dart:87:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
 //  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
 // Try accessing using ?. instead.
 //   throws(() => (n1?.nullable1 = new Class1()).nullable1);
 //                                               ^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/null_shorting.dart:88:43: Warning: Property 'nullable1' is accessed on 'Class1?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_shorting.dart:88:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
 //  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
 // Try accessing using ?. instead.
 //   throws(() => (n1?.nonNullable1Method()).nullable1);
 //                                           ^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/null_shorting.dart:220:33: Warning: Operator '+' is called on 'Class1?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_shorting.dart:220:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
 //  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
 //   throws(() => n1?.nonNullable1 + 0);
 //                                 ^
 //
-// pkg/front_end/testcases/nnbd/null_shorting.dart:221:16: Warning: Operator 'unary-' is called on 'Class1?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_shorting.dart:221:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
 //  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
 //   throws(() => -n1?.nonNullable1);
 //                ^
@@ -110,139 +110,153 @@
   let final self::Class1? #t11 = n1 in #t11.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t12 = #t11{self::Class1}.{self::Class1::nullable1} in #t12.{core::Object::==}(null) ?{self::Class1?} null : #t12{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
   let final self::Class1? #t13 = n1 in #t13.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t14 = #t13{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} in #t14.{core::Object::==}(null) ?{self::Class1?} null : #t14{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
   let final self::Class1? #t15 = let final self::Class1? #t16 = n1 in #t16.{core::Object::==}(null) ?{self::Class1?} null : #t16{self::Class1}.{self::Class1::nullable1} in #t15.{core::Object::==}(null) ?{self::Class1?} null : #t15{self::Class1}.{self::Class1::nullable1};
-  self::throws(() → self::Class1? => (let final self::Class1? #t17 = n1 in #t17.{core::Object::==}(null) ?{self::Class1?} null : #t17{self::Class1}.{self::Class1::nullable1} = new self::Class1::•()).{self::Class1::nullable1});
-  self::throws(() → self::Class1? => (let final self::Class1? #t18 = n1 in #t18.{core::Object::==}(null) ?{self::Class1?} null : #t18{self::Class1}.{self::Class1::nonNullable1Method}()).{self::Class1::nullable1});
-  nullable1 = let final self::Class1? #t19 = n1 in #t19.{core::Object::==}(null) ?{self::Class1?} null : #t19{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t20 = n1 in #t20.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t21 = #t20{self::Class1}.{self::Class1::nullable1} in #t21.{core::Object::==}(null) ?{self::Class1?} null : #t21{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t22 = n1 in #t22.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t23 = #t22{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} in #t23.{core::Object::==}(null) ?{self::Class1?} null : #t23{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t24 = n1 in #t24.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t25 = #t24{self::Class1}.{self::Class1::nullable1} in #t25.{core::Object::==}(null) ?{self::Class1?} null : #t25{self::Class1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t26 = n1 in #t26.{core::Object::==}(null) ?{self::Class1?} null : #t26{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t27 = n1 in #t27.{core::Object::==}(null) ?{self::Class1?} null : #t27{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  let final self::Class1? #t28 = n1 in #t28.{core::Object::==}(null) ?{self::Class1?} null : #t28{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t29 = n1 in #t29.{core::Object::==}(null) ?{self::Class1?} null : #t29{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t30 = n1 in #t30.{core::Object::==}(null) ?{self::Class1?} null : #t30{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t31 = n1 in #t31.{core::Object::==}(null) ?{self::Class1?} null : #t31{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t32 = n1 in #t32.{core::Object::==}(null) ?{self::Class1?} null : #t32{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
-  let final self::Class1? #t33 = n1 in #t33.{core::Object::==}(null) ?{self::Class1?} null : #t33{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t34 = n1 in #t34.{core::Object::==}(null) ?{self::Class1?} null : #t34{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t35 = n1 in #t35.{core::Object::==}(null) ?{self::Class1?} null : #t35{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1}.{self::Class1::nullable1};
-  let final self::Class1? #t36 = n1 in #t36.{core::Object::==}(null) ?{self::Class1?} null : #t36{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t37 = n1 in #t37.{core::Object::==}(null) ?{self::Class1?} null : #t37{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t38 = n1 in #t38.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t39 = #t38{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} in #t39.{core::Object::==}(null) ?{self::Class1?} null : #t39{self::Class1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t40 = n1 in #t40.{core::Object::==}(null) ?{self::Class1?} null : #t40{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t41 = n1 in #t41.{core::Object::==}(null) ?{self::Class1?} null : #t41{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nullable1};
-  let final self::Class1? #t42 = n1 in #t42.{core::Object::==}(null) ?{self::Class1?} null : #t42{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t43 = n1 in #t43.{core::Object::==}(null) ?{self::Class1?} null : #t43{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t44 = n1 in #t44.{core::Object::==}(null) ?{self::Class1?} null : #t44{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t45 = n1 in #t45.{core::Object::==}(null) ?{self::Class1?} null : #t45{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t46 = n1 in #t46.{core::Object::==}(null) ?{self::Class1?} null : #t46{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1}.{self::Class1::nullable1};
-  let final self::Class1? #t47 = n1 in #t47.{core::Object::==}(null) ?{self::Class1?} null : #t47{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t48 = n1 in #t48.{core::Object::==}(null) ?{self::Class1?} null : #t48{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t49 = n1 in #t49.{core::Object::==}(null) ?{self::Class1?} null : #t49{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t50 = n1 in #t50.{core::Object::==}(null) ?{self::Class1?} null : #t50{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  let final self::Class1? #t51 = n1 in #t51.{core::Object::==}(null) ?{self::Class1?} null : #t51{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t52 = n1 in #t52.{core::Object::==}(null) ?{self::Class1?} null : #t52{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t53 = n1 in #t53.{core::Object::==}(null) ?{self::Class1?} null : #t53{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t54 = n1 in #t54.{core::Object::==}(null) ?{self::Class1?} null : #t54{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t55 = n1 in #t55.{core::Object::==}(null) ?{self::Class1?} null : #t55{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t56 = n1 in #t56.{core::Object::==}(null) ?{self::Class1?} null : #t56{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  let final self::Class1? #t57 = n1 in #t57.{core::Object::==}(null) ?{self::Class1?} null : #t57{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t58 = n1 in #t58.{core::Object::==}(null) ?{self::Class1?} null : #t58{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t59 = n1 in #t59.{core::Object::==}(null) ?{self::Class1?} null : #t59{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t60 = n1 in #t60.{core::Object::==}(null) ?{self::Class1?} null : #t60{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t61 = n1 in #t61.{core::Object::==}(null) ?{self::Class1?} null : #t61{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t62 = n1 in #t62.{core::Object::==}(null) ?{self::Class1?} null : #t62{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  let final self::Class1? #t63 = n1 in #t63.{core::Object::==}(null) ?{self::Class1?} null : #t63{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t64 = n1 in #t64.{core::Object::==}(null) ?{self::Class1?} null : #t64{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t65 = n1 in #t65.{core::Object::==}(null) ?{self::Class1?} null : #t65{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t66 = n1 in #t66.{core::Object::==}(null) ?{self::Class1?} null : #t66{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t67 = n1 in #t67.{core::Object::==}(null) ?{self::Class1?} null : #t67{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
-  let final self::Class1? #t68 = n1 in #t68.{core::Object::==}(null) ?{self::Class1?} null : #t68{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t69 = n1 in #t69.{core::Object::==}(null) ?{self::Class1?} null : #t69{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t70 = n1 in #t70.{core::Object::==}(null) ?{self::Class1?} null : #t70{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t71 = n1 in #t71.{core::Object::==}(null) ?{self::Class1?} null : #t71{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t72 = n1 in #t72.{core::Object::==}(null) ?{self::Class1?} null : #t72{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
-  let final self::Class1? #t73 = n1 in #t73.{core::Object::==}(null) ?{self::Class1?} null : #t73{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t74 = n1 in #t74.{core::Object::==}(null) ?{self::Class1?} null : #t74{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t75 = n1 in #t75.{core::Object::==}(null) ?{self::Class1?} null : #t75{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t76 = n1 in #t76.{core::Object::==}(null) ?{self::Class1?} null : #t76{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t77 = n1 in #t77.{core::Object::==}(null) ?{self::Class1?} null : #t77{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
-  let final self::Class1? #t78 = n1 in #t78.{core::Object::==}(null) ?{self::Class1?} null : #t78{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t79 = n1 in #t79.{core::Object::==}(null) ?{self::Class1?} null : #t79{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t80 = n1 in #t80.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t81 = #t80{self::Class1}.{self::Class1::nonNullable1Method}() in #t81.{core::Object::==}(null) ?{self::Class1?} null : #t81{self::Class1}.{self::Class1::nonNullable1Method}();
+  self::throws(() → self::Class1? => let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:87:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
+Try accessing using ?. instead.
+  throws(() => (n1?.nullable1 = new Class1()).nullable1);
+                                              ^^^^^^^^^" in (let final self::Class1? #t18 = n1 in #t18.{core::Object::==}(null) ?{self::Class1?} null : #t18{self::Class1}.{self::Class1::nullable1} = new self::Class1::•()).{self::Class1::nullable1});
+  self::throws(() → self::Class1? => let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:88:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
+Try accessing using ?. instead.
+  throws(() => (n1?.nonNullable1Method()).nullable1);
+                                          ^^^^^^^^^" in (let final self::Class1? #t20 = n1 in #t20.{core::Object::==}(null) ?{self::Class1?} null : #t20{self::Class1}.{self::Class1::nonNullable1Method}()).{self::Class1::nullable1});
+  nullable1 = let final self::Class1? #t21 = n1 in #t21.{core::Object::==}(null) ?{self::Class1?} null : #t21{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t22 = n1 in #t22.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t23 = #t22{self::Class1}.{self::Class1::nullable1} in #t23.{core::Object::==}(null) ?{self::Class1?} null : #t23{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t24 = n1 in #t24.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t25 = #t24{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} in #t25.{core::Object::==}(null) ?{self::Class1?} null : #t25{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t26 = n1 in #t26.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t27 = #t26{self::Class1}.{self::Class1::nullable1} in #t27.{core::Object::==}(null) ?{self::Class1?} null : #t27{self::Class1}.{self::Class1::nonNullable1Method}();
+  let final self::Class1? #t28 = n1 in #t28.{core::Object::==}(null) ?{self::Class1?} null : #t28{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
+  nullable1 = let final self::Class1? #t29 = n1 in #t29.{core::Object::==}(null) ?{self::Class1?} null : #t29{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
+  let final self::Class1? #t30 = n1 in #t30.{core::Object::==}(null) ?{self::Class1?} null : #t30{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t31 = n1 in #t31.{core::Object::==}(null) ?{self::Class1?} null : #t31{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t32 = n1 in #t32.{core::Object::==}(null) ?{self::Class1?} null : #t32{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
+  nullable1 = let final self::Class1? #t33 = n1 in #t33.{core::Object::==}(null) ?{self::Class1?} null : #t33{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
+  let final self::Class1? #t34 = n1 in #t34.{core::Object::==}(null) ?{self::Class1?} null : #t34{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
+  let final self::Class1? #t35 = n1 in #t35.{core::Object::==}(null) ?{self::Class1?} null : #t35{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t36 = n1 in #t36.{core::Object::==}(null) ?{self::Class1?} null : #t36{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
+  let final self::Class1? #t37 = n1 in #t37.{core::Object::==}(null) ?{self::Class1?} null : #t37{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1}.{self::Class1::nullable1};
+  let final self::Class1? #t38 = n1 in #t38.{core::Object::==}(null) ?{self::Class1?} null : #t38{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t39 = n1 in #t39.{core::Object::==}(null) ?{self::Class1?} null : #t39{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t40 = n1 in #t40.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t41 = #t40{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} in #t41.{core::Object::==}(null) ?{self::Class1?} null : #t41{self::Class1}.{self::Class1::nonNullable1Method}();
+  let final self::Class1? #t42 = n1 in #t42.{core::Object::==}(null) ?{self::Class1?} null : #t42{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nullable1};
+  nullable1 = let final self::Class1? #t43 = n1 in #t43.{core::Object::==}(null) ?{self::Class1?} null : #t43{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nullable1};
+  let final self::Class1? #t44 = n1 in #t44.{core::Object::==}(null) ?{self::Class1?} null : #t44{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t45 = n1 in #t45.{core::Object::==}(null) ?{self::Class1?} null : #t45{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t46 = n1 in #t46.{core::Object::==}(null) ?{self::Class1?} null : #t46{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}();
+  nullable1 = let final self::Class1? #t47 = n1 in #t47.{core::Object::==}(null) ?{self::Class1?} null : #t47{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}();
+  let final self::Class1? #t48 = n1 in #t48.{core::Object::==}(null) ?{self::Class1?} null : #t48{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1}.{self::Class1::nullable1};
+  let final self::Class1? #t49 = n1 in #t49.{core::Object::==}(null) ?{self::Class1?} null : #t49{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t50 = n1 in #t50.{core::Object::==}(null) ?{self::Class1?} null : #t50{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}();
+  let final self::Class1? #t51 = n1 in #t51.{core::Object::==}(null) ?{self::Class1?} null : #t51{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
+  nullable1 = let final self::Class1? #t52 = n1 in #t52.{core::Object::==}(null) ?{self::Class1?} null : #t52{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
+  let final self::Class1? #t53 = n1 in #t53.{core::Object::==}(null) ?{self::Class1?} null : #t53{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t54 = n1 in #t54.{core::Object::==}(null) ?{self::Class1?} null : #t54{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t55 = n1 in #t55.{core::Object::==}(null) ?{self::Class1?} null : #t55{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
+  nullable1 = let final self::Class1? #t56 = n1 in #t56.{core::Object::==}(null) ?{self::Class1?} null : #t56{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
+  let final self::Class1? #t57 = n1 in #t57.{core::Object::==}(null) ?{self::Class1?} null : #t57{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
+  nullable1 = let final self::Class1? #t58 = n1 in #t58.{core::Object::==}(null) ?{self::Class1?} null : #t58{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
+  let final self::Class1? #t59 = n1 in #t59.{core::Object::==}(null) ?{self::Class1?} null : #t59{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t60 = n1 in #t60.{core::Object::==}(null) ?{self::Class1?} null : #t60{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t61 = n1 in #t61.{core::Object::==}(null) ?{self::Class1?} null : #t61{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
+  nullable1 = let final self::Class1? #t62 = n1 in #t62.{core::Object::==}(null) ?{self::Class1?} null : #t62{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
+  let final self::Class1? #t63 = n1 in #t63.{core::Object::==}(null) ?{self::Class1?} null : #t63{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
+  nullable1 = let final self::Class1? #t64 = n1 in #t64.{core::Object::==}(null) ?{self::Class1?} null : #t64{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
+  let final self::Class1? #t65 = n1 in #t65.{core::Object::==}(null) ?{self::Class1?} null : #t65{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t66 = n1 in #t66.{core::Object::==}(null) ?{self::Class1?} null : #t66{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t67 = n1 in #t67.{core::Object::==}(null) ?{self::Class1?} null : #t67{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
+  nullable1 = let final self::Class1? #t68 = n1 in #t68.{core::Object::==}(null) ?{self::Class1?} null : #t68{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
+  let final self::Class1? #t69 = n1 in #t69.{core::Object::==}(null) ?{self::Class1?} null : #t69{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
+  let final self::Class1? #t70 = n1 in #t70.{core::Object::==}(null) ?{self::Class1?} null : #t70{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t71 = n1 in #t71.{core::Object::==}(null) ?{self::Class1?} null : #t71{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t72 = n1 in #t72.{core::Object::==}(null) ?{self::Class1?} null : #t72{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
+  let final self::Class1? #t73 = n1 in #t73.{core::Object::==}(null) ?{self::Class1?} null : #t73{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
+  nullable1 = let final self::Class1? #t74 = n1 in #t74.{core::Object::==}(null) ?{self::Class1?} null : #t74{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
+  let final self::Class1? #t75 = n1 in #t75.{core::Object::==}(null) ?{self::Class1?} null : #t75{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t76 = n1 in #t76.{core::Object::==}(null) ?{self::Class1?} null : #t76{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t77 = n1 in #t77.{core::Object::==}(null) ?{self::Class1?} null : #t77{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
+  nullable1 = let final self::Class1? #t78 = n1 in #t78.{core::Object::==}(null) ?{self::Class1?} null : #t78{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
+  let final self::Class1? #t79 = n1 in #t79.{core::Object::==}(null) ?{self::Class1?} null : #t79{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
+  let final self::Class1? #t80 = n1 in #t80.{core::Object::==}(null) ?{self::Class1?} null : #t80{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t81 = n1 in #t81.{core::Object::==}(null) ?{self::Class1?} null : #t81{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
+  let final self::Class1? #t82 = n1 in #t82.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t83 = #t82{self::Class1}.{self::Class1::nonNullable1Method}() in #t83.{core::Object::==}(null) ?{self::Class1?} null : #t83{self::Class1}.{self::Class1::nonNullable1Method}();
 }
 static method indexAccess(self::Class1? n1, self::Class2? n2, self::Class3? n3) → void {
   self::Class1? nullable1 = n1;
   self::Class2? nullable2 = n2;
   self::Class3? nullable3 = n3;
-  let final self::Class1? #t82 = n1 in #t82.{core::Object::==}(null) ?{self::Class1?} null : #t82{self::Class1}.{self::Class1::[]}(nullable1);
-  let final self::Class1? #t83 = n1 in #t83.{core::Object::==}(null) ?{self::Class1?} null : #t83{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•());
-  let final self::Class1? #t84 = n1 in #t84.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t85 = #t84{self::Class1}.{self::Class1::[]}(nullable1) in #t85.{core::Object::==}(null) ?{self::Class1?} null : #t85{self::Class1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t86 = n1 in #t86.{core::Object::==}(null) ?{self::Class1?} null : #t86{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::[]}(nullable1);
-  let final self::Class1? #t87 = n1 in #t87.{core::Object::==}(null) ?{self::Class1?} null : #t87{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::[]=}(nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t88 = n1 in #t88.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t89 = #t88{self::Class1}.{self::Class1::nonNullable1} in let final self::Class1? #t90 = nullable1 in let final self::Class1 #t91 = new self::Class1::•() in let final void #t92 = #t89.{self::Class1::[]=}(#t90, #t91) in #t91;
-  let final self::Class1? #t93 = n1 in #t93.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t94 = #t93{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::[]}(nullable1) in #t94.{core::Object::==}(null) ?{self::Class1?} null : #t94{self::Class1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t95 = n1 in #t95.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t96 = #t95{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t97 = nullable2 in #t96.{self::Class2::[]=}(#t97, #t96.{self::Class2::[]}(#t97).{self::Class2::+}(0));
-  nullable2 = let final self::Class1? #t98 = n1 in #t98.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t99 = #t98{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t100 = nullable2 in let final self::Class2 #t101 = #t99.{self::Class2::[]}(#t100).{self::Class2::+}(0) in let final void #t102 = #t99.{self::Class2::[]=}(#t100, #t101) in #t101;
-  let final self::Class1? #t103 = n1 in #t103.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t104 = nullable1 in #t103{self::Class1}.{self::Class1::[]}(#t104).{core::Object::==}(null) ?{self::Class1?} #t103{self::Class1}.{self::Class1::[]=}(#t104, nullable1) : null;
-  nullable1 = let final self::Class1? #t105 = n1 in #t105.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t106 = nullable1 in let final self::Class1? #t107 = #t105{self::Class1}.{self::Class1::[]}(#t106) in #t107.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t108 = nullable1 in let final void #t109 = #t105{self::Class1}.{self::Class1::[]=}(#t106, #t108) in #t108 : #t107{self::Class1};
-  let final self::Class2? #t110 = n2 in #t110.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t111 = nullable2 in #t110{self::Class2}.{self::Class2::[]=}(#t111, #t110{self::Class2}.{self::Class2::[]}(#t111).{self::Class2::+}(0));
-  nullable2 = let final self::Class2? #t112 = n2 in #t112.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t113 = nullable2 in let final self::Class2 #t114 = #t112{self::Class2}.{self::Class2::[]}(#t113).{self::Class2::+}(0) in let final void #t115 = #t112{self::Class2}.{self::Class2::[]=}(#t113, #t114) in #t114;
-  let final self::Class2? #t116 = n2 in #t116.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t117 = nullable2 in #t116{self::Class2}.{self::Class2::[]=}(#t117, #t116{self::Class2}.{self::Class2::[]}(#t117).{self::Class2::+}(0));
-  nullable2 = let final self::Class2? #t118 = n2 in #t118.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t119 = nullable2 in let final self::Class2 #t120 = #t118{self::Class2}.{self::Class2::[]}(#t119).{self::Class2::+}(0) in let final void #t121 = #t118{self::Class2}.{self::Class2::[]=}(#t119, #t120) in #t120;
-  let final self::Class2? #t122 = n2 in #t122.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t123 = nullable2 in #t122{self::Class2}.{self::Class2::[]=}(#t123, #t122{self::Class2}.{self::Class2::[]}(#t123).{self::Class2::+}(1));
-  nullable2 = let final self::Class2? #t124 = n2 in #t124.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t125 = nullable2 in let final self::Class2 #t126 = #t124{self::Class2}.{self::Class2::[]}(#t125) in let final void #t127 = #t124{self::Class2}.{self::Class2::[]=}(#t125, #t126.{self::Class2::+}(1)) in #t126;
-  let final self::Class2? #t128 = n2 in #t128.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t129 = nullable2 in let final self::Class2 #t130 = #t128{self::Class2}.{self::Class2::[]}(#t129).{self::Class2::+}(1) in let final void #t131 = #t128{self::Class2}.{self::Class2::[]=}(#t129, #t130) in #t130;
-  nullable2 = let final self::Class2? #t132 = n2 in #t132.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t133 = nullable2 in let final self::Class2 #t134 = #t132{self::Class2}.{self::Class2::[]}(#t133).{self::Class2::+}(1) in let final void #t135 = #t132{self::Class2}.{self::Class2::[]=}(#t133, #t134) in #t134;
-  let final self::Class1? #t136 = n1 in #t136.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t137 = #t136{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t138 = nullable2 in #t137.{self::Class2::[]=}(#t138, #t137.{self::Class2::[]}(#t138).{self::Class2::+}(1));
-  nullable2 = let final self::Class1? #t139 = n1 in #t139.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t140 = #t139{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t141 = nullable2 in let final self::Class2 #t142 = #t140.{self::Class2::[]}(#t141) in let final void #t143 = #t140.{self::Class2::[]=}(#t141, #t142.{self::Class2::+}(1)) in #t142;
-  let final self::Class1? #t144 = n1 in #t144.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t145 = #t144{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t146 = nullable2 in let final self::Class2 #t147 = #t145.{self::Class2::[]}(#t146).{self::Class2::+}(1) in let final void #t148 = #t145.{self::Class2::[]=}(#t146, #t147) in #t147;
-  nullable2 = let final self::Class1? #t149 = n1 in #t149.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t150 = #t149{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t151 = nullable2 in let final self::Class2 #t152 = #t150.{self::Class2::[]}(#t151).{self::Class2::+}(1) in let final void #t153 = #t150.{self::Class2::[]=}(#t151, #t152) in #t152;
-  let final self::Class1? #t154 = n1 in #t154.{core::Object::==}(null) ?{self::Class2?} null : #t154{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2).{self::Class2::[]}(nullable2);
-  let final self::Class1? #t155 = n1 in #t155.{core::Object::==}(null) ?{self::Class2?} null : #t155{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2).{self::Class2::[]=}(nullable2, new self::Class2::•());
-  nullable2 = let final self::Class1? #t156 = n1 in #t156.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t157 = #t156{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t158 = nullable2 in let final self::Class2 #t159 = new self::Class2::•() in let final void #t160 = #t157.{self::Class2::[]=}(#t158, #t159) in #t159;
-  let final self::Class1? #t161 = n1 in #t161.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t162 = #t161{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2).{self::Class2::[]}(nullable2) in #t162.{core::Object::==}(null) ?{self::Class2?} null : #t162{self::Class2}.{self::Class2::nonNullable2Method}();
-  let final self::Class1? #t163 = n1 in #t163.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t164 = #t163{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t165 = nullable2 in #t164.{self::Class2::[]=}(#t165, #t164.{self::Class2::[]}(#t165).{self::Class2::+}(0));
-  nullable2 = let final self::Class1? #t166 = n1 in #t166.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t167 = #t166{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t168 = nullable2 in let final self::Class2 #t169 = #t167.{self::Class2::[]}(#t168).{self::Class2::+}(0) in let final void #t170 = #t167.{self::Class2::[]=}(#t168, #t169) in #t169;
-  let final self::Class1? #t171 = n1 in #t171.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t172 = #t171{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t173 = nullable2 in #t172.{self::Class2::[]=}(#t173, #t172.{self::Class2::[]}(#t173).{self::Class2::+}(1));
-  nullable2 = let final self::Class1? #t174 = n1 in #t174.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t175 = #t174{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t176 = nullable2 in let final self::Class2 #t177 = #t175.{self::Class2::[]}(#t176) in let final void #t178 = #t175.{self::Class2::[]=}(#t176, #t177.{self::Class2::+}(1)) in #t177;
-  let final self::Class1? #t179 = n1 in #t179.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t180 = #t179{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t181 = nullable2 in let final self::Class2 #t182 = #t180.{self::Class2::[]}(#t181).{self::Class2::+}(1) in let final void #t183 = #t180.{self::Class2::[]=}(#t181, #t182) in #t182;
-  nullable2 = let final self::Class1? #t184 = n1 in #t184.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t185 = #t184{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t186 = nullable2 in let final self::Class2 #t187 = #t185.{self::Class2::[]}(#t186).{self::Class2::+}(1) in let final void #t188 = #t185.{self::Class2::[]=}(#t186, #t187) in #t187;
-  let final self::Class1? #t189 = n1 in #t189.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t190 = #t189{self::Class1}.{self::Class1::[]}(nullable1) in #t190.{core::Object::==}(null) ?{self::Class1?} null : #t190{self::Class1}.{self::Class1::[]}(nullable1);
-  let final self::Class1? #t191 = n1 in #t191.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t192 = #t191{self::Class1}.{self::Class1::[]}(nullable1) in #t192.{core::Object::==}(null) ?{self::Class1?} null : #t192{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t193 = n1 in #t193.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t194 = #t193{self::Class1}.{self::Class1::[]}(nullable1) in #t194.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t195 = nullable1 in let final self::Class1 #t196 = new self::Class1::•() in let final void #t197 = #t194{self::Class1}.{self::Class1::[]=}(#t195, #t196) in #t196;
-  let final self::Class1? #t198 = n1 in #t198.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t199 = #t198{self::Class1}.{self::Class1::[]}(nullable1) in #t199.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t200 = #t199{self::Class1}.{self::Class1::[]}(nullable1) in #t200.{core::Object::==}(null) ?{self::Class1?} null : #t200{self::Class1}.{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t201 = n1 in #t201.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t202 = #t201{self::Class1}.{self::Class1::[]}(nullable1) in #t202.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t203 = #t202{self::Class1}.{self::Class1::[]}(nullable1) in #t203.{core::Object::==}(null) ?{self::Class1?} null : #t203{self::Class1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t204 = n1 in #t204.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t205 = #t204{self::Class1}.{self::Class1::[]}(nullable1) in #t205.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t206 = nullable1 in #t205{self::Class1}.{self::Class1::[]}(#t206).{core::Object::==}(null) ?{self::Class1?} #t205{self::Class1}.{self::Class1::[]=}(#t206, nullable1) : null;
-  nullable1 = let final self::Class1? #t207 = n1 in #t207.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t208 = #t207{self::Class1}.{self::Class1::[]}(nullable1) in #t208.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t209 = nullable1 in let final self::Class1? #t210 = #t208{self::Class1}.{self::Class1::[]}(#t209) in #t210.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t211 = nullable1 in let final void #t212 = #t208{self::Class1}.{self::Class1::[]=}(#t209, #t211) in #t211 : #t210{self::Class1};
-  let final self::Class3? #t213 = n3 in #t213.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t214 = #t213{self::Class3}.{self::Class3::[]}(nullable3) in #t214.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t215 = nullable2 in #t214{self::Class2}.{self::Class2::[]=}(#t215, #t214{self::Class2}.{self::Class2::[]}(#t215).{self::Class2::+}(0));
-  nullable2 = let final self::Class3? #t216 = n3 in #t216.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t217 = #t216{self::Class3}.{self::Class3::[]}(nullable3) in #t217.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t218 = nullable2 in let final self::Class2 #t219 = #t217{self::Class2}.{self::Class2::[]}(#t218).{self::Class2::+}(0) in let final void #t220 = #t217{self::Class2}.{self::Class2::[]=}(#t218, #t219) in #t219;
-  let final self::Class3? #t221 = n3 in #t221.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t222 = #t221{self::Class3}.{self::Class3::[]}(nullable3) in #t222.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t223 = nullable2 in #t222{self::Class2}.{self::Class2::[]=}(#t223, #t222{self::Class2}.{self::Class2::[]}(#t223).{self::Class2::+}(1));
-  nullable2 = let final self::Class3? #t224 = n3 in #t224.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t225 = #t224{self::Class3}.{self::Class3::[]}(nullable3) in #t225.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t226 = nullable2 in let final self::Class2 #t227 = #t225{self::Class2}.{self::Class2::[]}(#t226) in let final void #t228 = #t225{self::Class2}.{self::Class2::[]=}(#t226, #t227.{self::Class2::+}(1)) in #t227;
-  let final self::Class3? #t229 = n3 in #t229.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t230 = #t229{self::Class3}.{self::Class3::[]}(nullable3) in #t230.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t231 = nullable2 in let final self::Class2 #t232 = #t230{self::Class2}.{self::Class2::[]}(#t231).{self::Class2::+}(1) in let final void #t233 = #t230{self::Class2}.{self::Class2::[]=}(#t231, #t232) in #t232;
-  nullable2 = let final self::Class3? #t234 = n3 in #t234.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t235 = #t234{self::Class3}.{self::Class3::[]}(nullable3) in #t235.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t236 = nullable2 in let final self::Class2 #t237 = #t235{self::Class2}.{self::Class2::[]}(#t236).{self::Class2::+}(1) in let final void #t238 = #t235{self::Class2}.{self::Class2::[]=}(#t236, #t237) in #t237;
+  let final self::Class1? #t84 = n1 in #t84.{core::Object::==}(null) ?{self::Class1?} null : #t84{self::Class1}.{self::Class1::[]}(nullable1);
+  let final self::Class1? #t85 = n1 in #t85.{core::Object::==}(null) ?{self::Class1?} null : #t85{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•());
+  let final self::Class1? #t86 = n1 in #t86.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t87 = #t86{self::Class1}.{self::Class1::[]}(nullable1) in #t87.{core::Object::==}(null) ?{self::Class1?} null : #t87{self::Class1}.{self::Class1::nonNullable1Method}();
+  let final self::Class1? #t88 = n1 in #t88.{core::Object::==}(null) ?{self::Class1?} null : #t88{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::[]}(nullable1);
+  let final self::Class1? #t89 = n1 in #t89.{core::Object::==}(null) ?{self::Class1?} null : #t89{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::[]=}(nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t90 = n1 in #t90.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t91 = #t90{self::Class1}.{self::Class1::nonNullable1} in let final self::Class1? #t92 = nullable1 in let final self::Class1 #t93 = new self::Class1::•() in let final void #t94 = #t91.{self::Class1::[]=}(#t92, #t93) in #t93;
+  let final self::Class1? #t95 = n1 in #t95.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t96 = #t95{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::[]}(nullable1) in #t96.{core::Object::==}(null) ?{self::Class1?} null : #t96{self::Class1}.{self::Class1::nonNullable1Method}();
+  let final self::Class1? #t97 = n1 in #t97.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t98 = #t97{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t99 = nullable2 in #t98.{self::Class2::[]=}(#t99, #t98.{self::Class2::[]}(#t99).{self::Class2::+}(0));
+  nullable2 = let final self::Class1? #t100 = n1 in #t100.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t101 = #t100{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t102 = nullable2 in let final self::Class2 #t103 = #t101.{self::Class2::[]}(#t102).{self::Class2::+}(0) in let final void #t104 = #t101.{self::Class2::[]=}(#t102, #t103) in #t103;
+  let final self::Class1? #t105 = n1 in #t105.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t106 = nullable1 in #t105{self::Class1}.{self::Class1::[]}(#t106).{core::Object::==}(null) ?{self::Class1?} #t105{self::Class1}.{self::Class1::[]=}(#t106, nullable1) : null;
+  nullable1 = let final self::Class1? #t107 = n1 in #t107.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t108 = nullable1 in let final self::Class1? #t109 = #t107{self::Class1}.{self::Class1::[]}(#t108) in #t109.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t110 = nullable1 in let final void #t111 = #t107{self::Class1}.{self::Class1::[]=}(#t108, #t110) in #t110 : #t109{self::Class1};
+  let final self::Class2? #t112 = n2 in #t112.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t113 = nullable2 in #t112{self::Class2}.{self::Class2::[]=}(#t113, #t112{self::Class2}.{self::Class2::[]}(#t113).{self::Class2::+}(0));
+  nullable2 = let final self::Class2? #t114 = n2 in #t114.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t115 = nullable2 in let final self::Class2 #t116 = #t114{self::Class2}.{self::Class2::[]}(#t115).{self::Class2::+}(0) in let final void #t117 = #t114{self::Class2}.{self::Class2::[]=}(#t115, #t116) in #t116;
+  let final self::Class2? #t118 = n2 in #t118.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t119 = nullable2 in #t118{self::Class2}.{self::Class2::[]=}(#t119, #t118{self::Class2}.{self::Class2::[]}(#t119).{self::Class2::+}(0));
+  nullable2 = let final self::Class2? #t120 = n2 in #t120.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t121 = nullable2 in let final self::Class2 #t122 = #t120{self::Class2}.{self::Class2::[]}(#t121).{self::Class2::+}(0) in let final void #t123 = #t120{self::Class2}.{self::Class2::[]=}(#t121, #t122) in #t122;
+  let final self::Class2? #t124 = n2 in #t124.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t125 = nullable2 in #t124{self::Class2}.{self::Class2::[]=}(#t125, #t124{self::Class2}.{self::Class2::[]}(#t125).{self::Class2::+}(1));
+  nullable2 = let final self::Class2? #t126 = n2 in #t126.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t127 = nullable2 in let final self::Class2 #t128 = #t126{self::Class2}.{self::Class2::[]}(#t127) in let final void #t129 = #t126{self::Class2}.{self::Class2::[]=}(#t127, #t128.{self::Class2::+}(1)) in #t128;
+  let final self::Class2? #t130 = n2 in #t130.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t131 = nullable2 in let final self::Class2 #t132 = #t130{self::Class2}.{self::Class2::[]}(#t131).{self::Class2::+}(1) in let final void #t133 = #t130{self::Class2}.{self::Class2::[]=}(#t131, #t132) in #t132;
+  nullable2 = let final self::Class2? #t134 = n2 in #t134.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t135 = nullable2 in let final self::Class2 #t136 = #t134{self::Class2}.{self::Class2::[]}(#t135).{self::Class2::+}(1) in let final void #t137 = #t134{self::Class2}.{self::Class2::[]=}(#t135, #t136) in #t136;
+  let final self::Class1? #t138 = n1 in #t138.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t139 = #t138{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t140 = nullable2 in #t139.{self::Class2::[]=}(#t140, #t139.{self::Class2::[]}(#t140).{self::Class2::+}(1));
+  nullable2 = let final self::Class1? #t141 = n1 in #t141.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t142 = #t141{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t143 = nullable2 in let final self::Class2 #t144 = #t142.{self::Class2::[]}(#t143) in let final void #t145 = #t142.{self::Class2::[]=}(#t143, #t144.{self::Class2::+}(1)) in #t144;
+  let final self::Class1? #t146 = n1 in #t146.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t147 = #t146{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t148 = nullable2 in let final self::Class2 #t149 = #t147.{self::Class2::[]}(#t148).{self::Class2::+}(1) in let final void #t150 = #t147.{self::Class2::[]=}(#t148, #t149) in #t149;
+  nullable2 = let final self::Class1? #t151 = n1 in #t151.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t152 = #t151{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t153 = nullable2 in let final self::Class2 #t154 = #t152.{self::Class2::[]}(#t153).{self::Class2::+}(1) in let final void #t155 = #t152.{self::Class2::[]=}(#t153, #t154) in #t154;
+  let final self::Class1? #t156 = n1 in #t156.{core::Object::==}(null) ?{self::Class2?} null : #t156{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2).{self::Class2::[]}(nullable2);
+  let final self::Class1? #t157 = n1 in #t157.{core::Object::==}(null) ?{self::Class2?} null : #t157{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2).{self::Class2::[]=}(nullable2, new self::Class2::•());
+  nullable2 = let final self::Class1? #t158 = n1 in #t158.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t159 = #t158{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t160 = nullable2 in let final self::Class2 #t161 = new self::Class2::•() in let final void #t162 = #t159.{self::Class2::[]=}(#t160, #t161) in #t161;
+  let final self::Class1? #t163 = n1 in #t163.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t164 = #t163{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2).{self::Class2::[]}(nullable2) in #t164.{core::Object::==}(null) ?{self::Class2?} null : #t164{self::Class2}.{self::Class2::nonNullable2Method}();
+  let final self::Class1? #t165 = n1 in #t165.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t166 = #t165{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t167 = nullable2 in #t166.{self::Class2::[]=}(#t167, #t166.{self::Class2::[]}(#t167).{self::Class2::+}(0));
+  nullable2 = let final self::Class1? #t168 = n1 in #t168.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t169 = #t168{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t170 = nullable2 in let final self::Class2 #t171 = #t169.{self::Class2::[]}(#t170).{self::Class2::+}(0) in let final void #t172 = #t169.{self::Class2::[]=}(#t170, #t171) in #t171;
+  let final self::Class1? #t173 = n1 in #t173.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t174 = #t173{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t175 = nullable2 in #t174.{self::Class2::[]=}(#t175, #t174.{self::Class2::[]}(#t175).{self::Class2::+}(1));
+  nullable2 = let final self::Class1? #t176 = n1 in #t176.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t177 = #t176{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t178 = nullable2 in let final self::Class2 #t179 = #t177.{self::Class2::[]}(#t178) in let final void #t180 = #t177.{self::Class2::[]=}(#t178, #t179.{self::Class2::+}(1)) in #t179;
+  let final self::Class1? #t181 = n1 in #t181.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t182 = #t181{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t183 = nullable2 in let final self::Class2 #t184 = #t182.{self::Class2::[]}(#t183).{self::Class2::+}(1) in let final void #t185 = #t182.{self::Class2::[]=}(#t183, #t184) in #t184;
+  nullable2 = let final self::Class1? #t186 = n1 in #t186.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t187 = #t186{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = #t187.{self::Class2::[]}(#t188).{self::Class2::+}(1) in let final void #t190 = #t187.{self::Class2::[]=}(#t188, #t189) in #t189;
+  let final self::Class1? #t191 = n1 in #t191.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t192 = #t191{self::Class1}.{self::Class1::[]}(nullable1) in #t192.{core::Object::==}(null) ?{self::Class1?} null : #t192{self::Class1}.{self::Class1::[]}(nullable1);
+  let final self::Class1? #t193 = n1 in #t193.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t194 = #t193{self::Class1}.{self::Class1::[]}(nullable1) in #t194.{core::Object::==}(null) ?{self::Class1?} null : #t194{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t195 = n1 in #t195.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t196 = #t195{self::Class1}.{self::Class1::[]}(nullable1) in #t196.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t197 = nullable1 in let final self::Class1 #t198 = new self::Class1::•() in let final void #t199 = #t196{self::Class1}.{self::Class1::[]=}(#t197, #t198) in #t198;
+  let final self::Class1? #t200 = n1 in #t200.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t201 = #t200{self::Class1}.{self::Class1::[]}(nullable1) in #t201.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t202 = #t201{self::Class1}.{self::Class1::[]}(nullable1) in #t202.{core::Object::==}(null) ?{self::Class1?} null : #t202{self::Class1}.{self::Class1::nonNullable1Method}();
+  nullable1 = let final self::Class1? #t203 = n1 in #t203.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t204 = #t203{self::Class1}.{self::Class1::[]}(nullable1) in #t204.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t205 = #t204{self::Class1}.{self::Class1::[]}(nullable1) in #t205.{core::Object::==}(null) ?{self::Class1?} null : #t205{self::Class1}.{self::Class1::nonNullable1Method}();
+  let final self::Class1? #t206 = n1 in #t206.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t207 = #t206{self::Class1}.{self::Class1::[]}(nullable1) in #t207.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t208 = nullable1 in #t207{self::Class1}.{self::Class1::[]}(#t208).{core::Object::==}(null) ?{self::Class1?} #t207{self::Class1}.{self::Class1::[]=}(#t208, nullable1) : null;
+  nullable1 = let final self::Class1? #t209 = n1 in #t209.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t210 = #t209{self::Class1}.{self::Class1::[]}(nullable1) in #t210.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t211 = nullable1 in let final self::Class1? #t212 = #t210{self::Class1}.{self::Class1::[]}(#t211) in #t212.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t213 = nullable1 in let final void #t214 = #t210{self::Class1}.{self::Class1::[]=}(#t211, #t213) in #t213 : #t212{self::Class1};
+  let final self::Class3? #t215 = n3 in #t215.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t216 = #t215{self::Class3}.{self::Class3::[]}(nullable3) in #t216.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in #t216{self::Class2}.{self::Class2::[]=}(#t217, #t216{self::Class2}.{self::Class2::[]}(#t217).{self::Class2::+}(0));
+  nullable2 = let final self::Class3? #t218 = n3 in #t218.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t219 = #t218{self::Class3}.{self::Class3::[]}(nullable3) in #t219.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t220 = nullable2 in let final self::Class2 #t221 = #t219{self::Class2}.{self::Class2::[]}(#t220).{self::Class2::+}(0) in let final void #t222 = #t219{self::Class2}.{self::Class2::[]=}(#t220, #t221) in #t221;
+  let final self::Class3? #t223 = n3 in #t223.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t224 = #t223{self::Class3}.{self::Class3::[]}(nullable3) in #t224.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t225 = nullable2 in #t224{self::Class2}.{self::Class2::[]=}(#t225, #t224{self::Class2}.{self::Class2::[]}(#t225).{self::Class2::+}(1));
+  nullable2 = let final self::Class3? #t226 = n3 in #t226.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t227 = #t226{self::Class3}.{self::Class3::[]}(nullable3) in #t227.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t228 = nullable2 in let final self::Class2 #t229 = #t227{self::Class2}.{self::Class2::[]}(#t228) in let final void #t230 = #t227{self::Class2}.{self::Class2::[]=}(#t228, #t229.{self::Class2::+}(1)) in #t229;
+  let final self::Class3? #t231 = n3 in #t231.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t232 = #t231{self::Class3}.{self::Class3::[]}(nullable3) in #t232.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t233 = nullable2 in let final self::Class2 #t234 = #t232{self::Class2}.{self::Class2::[]}(#t233).{self::Class2::+}(1) in let final void #t235 = #t232{self::Class2}.{self::Class2::[]=}(#t233, #t234) in #t234;
+  nullable2 = let final self::Class3? #t236 = n3 in #t236.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t237 = #t236{self::Class3}.{self::Class3::[]}(nullable3) in #t237.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t238 = nullable2 in let final self::Class2 #t239 = #t237{self::Class2}.{self::Class2::[]}(#t238).{self::Class2::+}(1) in let final void #t240 = #t237{self::Class2}.{self::Class2::[]=}(#t238, #t239) in #t239;
 }
 static method operatorAccess(self::Class1? n1, self::Class2? n2) → void {
   self::Class2? nullable2 = n2;
-  self::throws(() → self::Class1? => (let final self::Class1? #t239 = n1 in #t239.{core::Object::==}(null) ?{self::Class1?} null : #t239{self::Class1}.{self::Class1::nonNullable1}).{self::Class1::+}(0));
-  self::throws(() → self::Class1? => (let final self::Class1? #t240 = n1 in #t240.{core::Object::==}(null) ?{self::Class1?} null : #t240{self::Class1}.{self::Class1::nonNullable1}).{self::Class1::unary-}());
-  let final self::Class2? #t241 = n2 in #t241.{core::Object::==}(null) ?{self::Class2?} null : #t241.{self::Class2::nonNullable2} = #t241.{self::Class2::nonNullable2}.{self::Class2::+}(0);
-  nullable2 = let final self::Class2? #t242 = n2 in #t242.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t243 = #t242.{self::Class2::nonNullable2}.{self::Class2::+}(0) in let final void #t244 = #t242.{self::Class2::nonNullable2} = #t243 in #t243;
-  let final self::Class2? #t245 = n2 in #t245.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t246 = #t245{self::Class2}.{self::Class2::nonNullable2} in #t246.{self::Class2::nonNullable2} = #t246.{self::Class2::nonNullable2}.{self::Class2::+}(0);
-  nullable2 = let final self::Class2? #t247 = n2 in #t247.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t248 = #t247{self::Class2}.{self::Class2::nonNullable2} in #t248.{self::Class2::nonNullable2} = #t248.{self::Class2::nonNullable2}.{self::Class2::+}(0);
-  let final self::Class2? #t249 = n2 in #t249.{core::Object::==}(null) ?{self::Class2?} null : #t249.{self::Class2::nonNullable2} = #t249.{self::Class2::nonNullable2}.{self::Class2::+}(1);
-  nullable2 = let final self::Class2? #t250 = n2 in #t250.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t251 = #t250.{self::Class2::nonNullable2} in let final void #t252 = #t250.{self::Class2::nonNullable2} = #t251.{self::Class2::+}(1) in #t251;
-  let final self::Class2? #t253 = n2 in #t253.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t254 = #t253.{self::Class2::nonNullable2}.{self::Class2::+}(1) in let final void #t255 = #t253.{self::Class2::nonNullable2} = #t254 in #t254;
-  nullable2 = let final self::Class2? #t256 = n2 in #t256.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t257 = #t256.{self::Class2::nonNullable2}.{self::Class2::+}(1) in let final void #t258 = #t256.{self::Class2::nonNullable2} = #t257 in #t257;
+  self::throws(() → self::Class1? => let final<BottomType> #t241 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:220:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
+  throws(() => n1?.nonNullable1 + 0);
+                                ^" in (let final self::Class1? #t242 = n1 in #t242.{core::Object::==}(null) ?{self::Class1?} null : #t242{self::Class1}.{self::Class1::nonNullable1}).{self::Class1::+}(0));
+  self::throws(() → self::Class1? => let final<BottomType> #t243 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:221:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
+  throws(() => -n1?.nonNullable1);
+               ^" in (let final self::Class1? #t244 = n1 in #t244.{core::Object::==}(null) ?{self::Class1?} null : #t244{self::Class1}.{self::Class1::nonNullable1}).{self::Class1::unary-}());
+  let final self::Class2? #t245 = n2 in #t245.{core::Object::==}(null) ?{self::Class2?} null : #t245.{self::Class2::nonNullable2} = #t245.{self::Class2::nonNullable2}.{self::Class2::+}(0);
+  nullable2 = let final self::Class2? #t246 = n2 in #t246.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t247 = #t246.{self::Class2::nonNullable2}.{self::Class2::+}(0) in let final void #t248 = #t246.{self::Class2::nonNullable2} = #t247 in #t247;
+  let final self::Class2? #t249 = n2 in #t249.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t250 = #t249{self::Class2}.{self::Class2::nonNullable2} in #t250.{self::Class2::nonNullable2} = #t250.{self::Class2::nonNullable2}.{self::Class2::+}(0);
+  nullable2 = let final self::Class2? #t251 = n2 in #t251.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t252 = #t251{self::Class2}.{self::Class2::nonNullable2} in #t252.{self::Class2::nonNullable2} = #t252.{self::Class2::nonNullable2}.{self::Class2::+}(0);
+  let final self::Class2? #t253 = n2 in #t253.{core::Object::==}(null) ?{self::Class2?} null : #t253.{self::Class2::nonNullable2} = #t253.{self::Class2::nonNullable2}.{self::Class2::+}(1);
+  nullable2 = let final self::Class2? #t254 = n2 in #t254.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t255 = #t254.{self::Class2::nonNullable2} in let final void #t256 = #t254.{self::Class2::nonNullable2} = #t255.{self::Class2::+}(1) in #t255;
+  let final self::Class2? #t257 = n2 in #t257.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t258 = #t257.{self::Class2::nonNullable2}.{self::Class2::+}(1) in let final void #t259 = #t257.{self::Class2::nonNullable2} = #t258 in #t258;
+  nullable2 = let final self::Class2? #t260 = n2 in #t260.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t261 = #t260.{self::Class2::nonNullable2}.{self::Class2::+}(1) in let final void #t262 = #t260.{self::Class2::nonNullable2} = #t261 in #t261;
 }
 static method ifNull(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t259 = n1 in #t259.{core::Object::==}(null) ?{self::Class1?} null : #t259.{self::Class1::nullable1}.{core::Object::==}(null) ?{self::Class1} #t259.{self::Class1::nullable1} = n1{self::Class1} : null;
-  n1 = let final self::Class1? #t260 = n1 in #t260.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t261 = #t260.{self::Class1::nullable1} in #t261.{core::Object::==}(null) ?{self::Class1} #t260.{self::Class1::nullable1} = n1{self::Class1} : #t261{self::Class1};
-  let final self::Class1? #t262 = n1 in #t262.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t263 = #t262{self::Class1}.{self::Class1::nonNullable1} in #t263{self::Class1}.{self::Class1::nullable1}.{core::Object::==}(null) ?{self::Class1} #t263{self::Class1}.{self::Class1::nullable1} = n1{self::Class1} : null;
-  n1 = let final self::Class1? #t264 = n1 in #t264.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t265 = #t264{self::Class1}.{self::Class1::nonNullable1} in let final self::Class1? #t266 = #t265{self::Class1}.{self::Class1::nullable1} in #t266.{core::Object::==}(null) ?{self::Class1} #t265{self::Class1}.{self::Class1::nullable1} = n1{self::Class1} : #t266{self::Class1};
-  let final self::Class1? #t267 = n1 in #t267.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t268 = #t267{self::Class1}.{self::Class1::nonNullable1} in let final self::Class1 #t269 = n1{self::Class1} in #t268.{self::Class1::[]}(#t269).{core::Object::==}(null) ?{self::Class1} #t268.{self::Class1::[]=}(#t269, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t270 = n1 in #t270.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t271 = #t270{self::Class1}.{self::Class1::nonNullable1} in let final self::Class1 #t272 = n1{self::Class1} in let final self::Class1? #t273 = #t271.{self::Class1::[]}(#t272) in #t273.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t274 = n1{self::Class1} in let final void #t275 = #t271.{self::Class1::[]=}(#t272, #t274) in #t274 : #t273{self::Class1};
+  let final self::Class1? #t263 = n1 in #t263.{core::Object::==}(null) ?{self::Class1?} null : #t263.{self::Class1::nullable1}.{core::Object::==}(null) ?{self::Class1} #t263.{self::Class1::nullable1} = n1{self::Class1} : null;
+  n1 = let final self::Class1? #t264 = n1 in #t264.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t265 = #t264.{self::Class1::nullable1} in #t265.{core::Object::==}(null) ?{self::Class1} #t264.{self::Class1::nullable1} = n1{self::Class1} : #t265{self::Class1};
+  let final self::Class1? #t266 = n1 in #t266.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t267 = #t266{self::Class1}.{self::Class1::nonNullable1} in #t267{self::Class1}.{self::Class1::nullable1}.{core::Object::==}(null) ?{self::Class1} #t267{self::Class1}.{self::Class1::nullable1} = n1{self::Class1} : null;
+  n1 = let final self::Class1? #t268 = n1 in #t268.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t269 = #t268{self::Class1}.{self::Class1::nonNullable1} in let final self::Class1? #t270 = #t269{self::Class1}.{self::Class1::nullable1} in #t270.{core::Object::==}(null) ?{self::Class1} #t269{self::Class1}.{self::Class1::nullable1} = n1{self::Class1} : #t270{self::Class1};
+  let final self::Class1? #t271 = n1 in #t271.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t272 = #t271{self::Class1}.{self::Class1::nonNullable1} in let final self::Class1 #t273 = n1{self::Class1} in #t272.{self::Class1::[]}(#t273).{core::Object::==}(null) ?{self::Class1} #t272.{self::Class1::[]=}(#t273, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t274 = n1 in #t274.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t275 = #t274{self::Class1}.{self::Class1::nonNullable1} in let final self::Class1 #t276 = n1{self::Class1} in let final self::Class1? #t277 = #t275.{self::Class1::[]}(#t276) in #t277.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t278 = n1{self::Class1} in let final void #t279 = #t275.{self::Class1::[]=}(#t276, #t278) in #t278 : #t277{self::Class1};
 }
 static method throws(() → void f) → void {
   try {
diff --git a/pkg/front_end/testcases/nnbd/null_shorting.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/null_shorting.dart.weak.transformed.expect
index 1667166..4b8eb0a 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting.dart.weak.transformed.expect
@@ -2,24 +2,24 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/null_shorting.dart:87:47: Warning: Property 'nullable1' is accessed on 'Class1?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_shorting.dart:87:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
 //  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
 // Try accessing using ?. instead.
 //   throws(() => (n1?.nullable1 = new Class1()).nullable1);
 //                                               ^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/null_shorting.dart:88:43: Warning: Property 'nullable1' is accessed on 'Class1?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_shorting.dart:88:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
 //  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
 // Try accessing using ?. instead.
 //   throws(() => (n1?.nonNullable1Method()).nullable1);
 //                                           ^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/null_shorting.dart:220:33: Warning: Operator '+' is called on 'Class1?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_shorting.dart:220:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
 //  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
 //   throws(() => n1?.nonNullable1 + 0);
 //                                 ^
 //
-// pkg/front_end/testcases/nnbd/null_shorting.dart:221:16: Warning: Operator 'unary-' is called on 'Class1?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_shorting.dart:221:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
 //  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
 //   throws(() => -n1?.nonNullable1);
 //                ^
@@ -110,139 +110,153 @@
   let final self::Class1? #t11 = n1 in #t11.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t12 = #t11{self::Class1}.{self::Class1::nullable1} in #t12.{core::Object::==}(null) ?{self::Class1?} null : #t12{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
   let final self::Class1? #t13 = n1 in #t13.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t14 = #t13{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} in #t14.{core::Object::==}(null) ?{self::Class1?} null : #t14{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
   let final self::Class1? #t15 = let final self::Class1? #t16 = n1 in #t16.{core::Object::==}(null) ?{self::Class1?} null : #t16{self::Class1}.{self::Class1::nullable1} in #t15.{core::Object::==}(null) ?{self::Class1?} null : #t15{self::Class1}.{self::Class1::nullable1};
-  self::throws(() → self::Class1? => (let final self::Class1? #t17 = n1 in #t17.{core::Object::==}(null) ?{self::Class1?} null : #t17{self::Class1}.{self::Class1::nullable1} = new self::Class1::•()).{self::Class1::nullable1});
-  self::throws(() → self::Class1? => (let final self::Class1? #t18 = n1 in #t18.{core::Object::==}(null) ?{self::Class1?} null : #t18{self::Class1}.{self::Class1::nonNullable1Method}()).{self::Class1::nullable1});
-  nullable1 = let final self::Class1? #t19 = n1 in #t19.{core::Object::==}(null) ?{self::Class1?} null : #t19{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t20 = n1 in #t20.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t21 = #t20{self::Class1}.{self::Class1::nullable1} in #t21.{core::Object::==}(null) ?{self::Class1?} null : #t21{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t22 = n1 in #t22.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t23 = #t22{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} in #t23.{core::Object::==}(null) ?{self::Class1?} null : #t23{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t24 = n1 in #t24.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t25 = #t24{self::Class1}.{self::Class1::nullable1} in #t25.{core::Object::==}(null) ?{self::Class1?} null : #t25{self::Class1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t26 = n1 in #t26.{core::Object::==}(null) ?{self::Class1?} null : #t26{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t27 = n1 in #t27.{core::Object::==}(null) ?{self::Class1?} null : #t27{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  let final self::Class1? #t28 = n1 in #t28.{core::Object::==}(null) ?{self::Class1?} null : #t28{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t29 = n1 in #t29.{core::Object::==}(null) ?{self::Class1?} null : #t29{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t30 = n1 in #t30.{core::Object::==}(null) ?{self::Class1?} null : #t30{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t31 = n1 in #t31.{core::Object::==}(null) ?{self::Class1?} null : #t31{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t32 = n1 in #t32.{core::Object::==}(null) ?{self::Class1?} null : #t32{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
-  let final self::Class1? #t33 = n1 in #t33.{core::Object::==}(null) ?{self::Class1?} null : #t33{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t34 = n1 in #t34.{core::Object::==}(null) ?{self::Class1?} null : #t34{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t35 = n1 in #t35.{core::Object::==}(null) ?{self::Class1?} null : #t35{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1}.{self::Class1::nullable1};
-  let final self::Class1? #t36 = n1 in #t36.{core::Object::==}(null) ?{self::Class1?} null : #t36{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t37 = n1 in #t37.{core::Object::==}(null) ?{self::Class1?} null : #t37{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t38 = n1 in #t38.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t39 = #t38{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} in #t39.{core::Object::==}(null) ?{self::Class1?} null : #t39{self::Class1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t40 = n1 in #t40.{core::Object::==}(null) ?{self::Class1?} null : #t40{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t41 = n1 in #t41.{core::Object::==}(null) ?{self::Class1?} null : #t41{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nullable1};
-  let final self::Class1? #t42 = n1 in #t42.{core::Object::==}(null) ?{self::Class1?} null : #t42{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t43 = n1 in #t43.{core::Object::==}(null) ?{self::Class1?} null : #t43{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t44 = n1 in #t44.{core::Object::==}(null) ?{self::Class1?} null : #t44{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t45 = n1 in #t45.{core::Object::==}(null) ?{self::Class1?} null : #t45{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t46 = n1 in #t46.{core::Object::==}(null) ?{self::Class1?} null : #t46{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1}.{self::Class1::nullable1};
-  let final self::Class1? #t47 = n1 in #t47.{core::Object::==}(null) ?{self::Class1?} null : #t47{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t48 = n1 in #t48.{core::Object::==}(null) ?{self::Class1?} null : #t48{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t49 = n1 in #t49.{core::Object::==}(null) ?{self::Class1?} null : #t49{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t50 = n1 in #t50.{core::Object::==}(null) ?{self::Class1?} null : #t50{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  let final self::Class1? #t51 = n1 in #t51.{core::Object::==}(null) ?{self::Class1?} null : #t51{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t52 = n1 in #t52.{core::Object::==}(null) ?{self::Class1?} null : #t52{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t53 = n1 in #t53.{core::Object::==}(null) ?{self::Class1?} null : #t53{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t54 = n1 in #t54.{core::Object::==}(null) ?{self::Class1?} null : #t54{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t55 = n1 in #t55.{core::Object::==}(null) ?{self::Class1?} null : #t55{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t56 = n1 in #t56.{core::Object::==}(null) ?{self::Class1?} null : #t56{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  let final self::Class1? #t57 = n1 in #t57.{core::Object::==}(null) ?{self::Class1?} null : #t57{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t58 = n1 in #t58.{core::Object::==}(null) ?{self::Class1?} null : #t58{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t59 = n1 in #t59.{core::Object::==}(null) ?{self::Class1?} null : #t59{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t60 = n1 in #t60.{core::Object::==}(null) ?{self::Class1?} null : #t60{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t61 = n1 in #t61.{core::Object::==}(null) ?{self::Class1?} null : #t61{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t62 = n1 in #t62.{core::Object::==}(null) ?{self::Class1?} null : #t62{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
-  let final self::Class1? #t63 = n1 in #t63.{core::Object::==}(null) ?{self::Class1?} null : #t63{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t64 = n1 in #t64.{core::Object::==}(null) ?{self::Class1?} null : #t64{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t65 = n1 in #t65.{core::Object::==}(null) ?{self::Class1?} null : #t65{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t66 = n1 in #t66.{core::Object::==}(null) ?{self::Class1?} null : #t66{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t67 = n1 in #t67.{core::Object::==}(null) ?{self::Class1?} null : #t67{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
-  let final self::Class1? #t68 = n1 in #t68.{core::Object::==}(null) ?{self::Class1?} null : #t68{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t69 = n1 in #t69.{core::Object::==}(null) ?{self::Class1?} null : #t69{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t70 = n1 in #t70.{core::Object::==}(null) ?{self::Class1?} null : #t70{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t71 = n1 in #t71.{core::Object::==}(null) ?{self::Class1?} null : #t71{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
-  nullable1 = let final self::Class1? #t72 = n1 in #t72.{core::Object::==}(null) ?{self::Class1?} null : #t72{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
-  let final self::Class1? #t73 = n1 in #t73.{core::Object::==}(null) ?{self::Class1?} null : #t73{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  nullable1 = let final self::Class1? #t74 = n1 in #t74.{core::Object::==}(null) ?{self::Class1?} null : #t74{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t75 = n1 in #t75.{core::Object::==}(null) ?{self::Class1?} null : #t75{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t76 = n1 in #t76.{core::Object::==}(null) ?{self::Class1?} null : #t76{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t77 = n1 in #t77.{core::Object::==}(null) ?{self::Class1?} null : #t77{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
-  let final self::Class1? #t78 = n1 in #t78.{core::Object::==}(null) ?{self::Class1?} null : #t78{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
-  let final self::Class1? #t79 = n1 in #t79.{core::Object::==}(null) ?{self::Class1?} null : #t79{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t80 = n1 in #t80.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t81 = #t80{self::Class1}.{self::Class1::nonNullable1Method}() in #t81.{core::Object::==}(null) ?{self::Class1?} null : #t81{self::Class1}.{self::Class1::nonNullable1Method}();
+  self::throws(() → self::Class1? => let final<BottomType> #t17 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:87:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
+Try accessing using ?. instead.
+  throws(() => (n1?.nullable1 = new Class1()).nullable1);
+                                              ^^^^^^^^^" in (let final self::Class1? #t18 = n1 in #t18.{core::Object::==}(null) ?{self::Class1?} null : #t18{self::Class1}.{self::Class1::nullable1} = new self::Class1::•()).{self::Class1::nullable1});
+  self::throws(() → self::Class1? => let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:88:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
+Try accessing using ?. instead.
+  throws(() => (n1?.nonNullable1Method()).nullable1);
+                                          ^^^^^^^^^" in (let final self::Class1? #t20 = n1 in #t20.{core::Object::==}(null) ?{self::Class1?} null : #t20{self::Class1}.{self::Class1::nonNullable1Method}()).{self::Class1::nullable1});
+  nullable1 = let final self::Class1? #t21 = n1 in #t21.{core::Object::==}(null) ?{self::Class1?} null : #t21{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t22 = n1 in #t22.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t23 = #t22{self::Class1}.{self::Class1::nullable1} in #t23.{core::Object::==}(null) ?{self::Class1?} null : #t23{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t24 = n1 in #t24.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t25 = #t24{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} in #t25.{core::Object::==}(null) ?{self::Class1?} null : #t25{self::Class1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t26 = n1 in #t26.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t27 = #t26{self::Class1}.{self::Class1::nullable1} in #t27.{core::Object::==}(null) ?{self::Class1?} null : #t27{self::Class1}.{self::Class1::nonNullable1Method}();
+  let final self::Class1? #t28 = n1 in #t28.{core::Object::==}(null) ?{self::Class1?} null : #t28{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
+  nullable1 = let final self::Class1? #t29 = n1 in #t29.{core::Object::==}(null) ?{self::Class1?} null : #t29{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
+  let final self::Class1? #t30 = n1 in #t30.{core::Object::==}(null) ?{self::Class1?} null : #t30{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t31 = n1 in #t31.{core::Object::==}(null) ?{self::Class1?} null : #t31{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t32 = n1 in #t32.{core::Object::==}(null) ?{self::Class1?} null : #t32{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
+  nullable1 = let final self::Class1? #t33 = n1 in #t33.{core::Object::==}(null) ?{self::Class1?} null : #t33{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
+  let final self::Class1? #t34 = n1 in #t34.{core::Object::==}(null) ?{self::Class1?} null : #t34{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
+  let final self::Class1? #t35 = n1 in #t35.{core::Object::==}(null) ?{self::Class1?} null : #t35{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t36 = n1 in #t36.{core::Object::==}(null) ?{self::Class1?} null : #t36{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
+  let final self::Class1? #t37 = n1 in #t37.{core::Object::==}(null) ?{self::Class1?} null : #t37{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1}.{self::Class1::nullable1};
+  let final self::Class1? #t38 = n1 in #t38.{core::Object::==}(null) ?{self::Class1?} null : #t38{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t39 = n1 in #t39.{core::Object::==}(null) ?{self::Class1?} null : #t39{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t40 = n1 in #t40.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t41 = #t40{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} in #t41.{core::Object::==}(null) ?{self::Class1?} null : #t41{self::Class1}.{self::Class1::nonNullable1Method}();
+  let final self::Class1? #t42 = n1 in #t42.{core::Object::==}(null) ?{self::Class1?} null : #t42{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nullable1};
+  nullable1 = let final self::Class1? #t43 = n1 in #t43.{core::Object::==}(null) ?{self::Class1?} null : #t43{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nullable1};
+  let final self::Class1? #t44 = n1 in #t44.{core::Object::==}(null) ?{self::Class1?} null : #t44{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t45 = n1 in #t45.{core::Object::==}(null) ?{self::Class1?} null : #t45{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t46 = n1 in #t46.{core::Object::==}(null) ?{self::Class1?} null : #t46{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}();
+  nullable1 = let final self::Class1? #t47 = n1 in #t47.{core::Object::==}(null) ?{self::Class1?} null : #t47{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}();
+  let final self::Class1? #t48 = n1 in #t48.{core::Object::==}(null) ?{self::Class1?} null : #t48{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1}.{self::Class1::nullable1};
+  let final self::Class1? #t49 = n1 in #t49.{core::Object::==}(null) ?{self::Class1?} null : #t49{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t50 = n1 in #t50.{core::Object::==}(null) ?{self::Class1?} null : #t50{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}();
+  let final self::Class1? #t51 = n1 in #t51.{core::Object::==}(null) ?{self::Class1?} null : #t51{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
+  nullable1 = let final self::Class1? #t52 = n1 in #t52.{core::Object::==}(null) ?{self::Class1?} null : #t52{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
+  let final self::Class1? #t53 = n1 in #t53.{core::Object::==}(null) ?{self::Class1?} null : #t53{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t54 = n1 in #t54.{core::Object::==}(null) ?{self::Class1?} null : #t54{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t55 = n1 in #t55.{core::Object::==}(null) ?{self::Class1?} null : #t55{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
+  nullable1 = let final self::Class1? #t56 = n1 in #t56.{core::Object::==}(null) ?{self::Class1?} null : #t56{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
+  let final self::Class1? #t57 = n1 in #t57.{core::Object::==}(null) ?{self::Class1?} null : #t57{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
+  nullable1 = let final self::Class1? #t58 = n1 in #t58.{core::Object::==}(null) ?{self::Class1?} null : #t58{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
+  let final self::Class1? #t59 = n1 in #t59.{core::Object::==}(null) ?{self::Class1?} null : #t59{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t60 = n1 in #t60.{core::Object::==}(null) ?{self::Class1?} null : #t60{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t61 = n1 in #t61.{core::Object::==}(null) ?{self::Class1?} null : #t61{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
+  nullable1 = let final self::Class1? #t62 = n1 in #t62.{core::Object::==}(null) ?{self::Class1?} null : #t62{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
+  let final self::Class1? #t63 = n1 in #t63.{core::Object::==}(null) ?{self::Class1?} null : #t63{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
+  nullable1 = let final self::Class1? #t64 = n1 in #t64.{core::Object::==}(null) ?{self::Class1?} null : #t64{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1};
+  let final self::Class1? #t65 = n1 in #t65.{core::Object::==}(null) ?{self::Class1?} null : #t65{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t66 = n1 in #t66.{core::Object::==}(null) ?{self::Class1?} null : #t66{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t67 = n1 in #t67.{core::Object::==}(null) ?{self::Class1?} null : #t67{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
+  nullable1 = let final self::Class1? #t68 = n1 in #t68.{core::Object::==}(null) ?{self::Class1?} null : #t68{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}();
+  let final self::Class1? #t69 = n1 in #t69.{core::Object::==}(null) ?{self::Class1?} null : #t69{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
+  let final self::Class1? #t70 = n1 in #t70.{core::Object::==}(null) ?{self::Class1?} null : #t70{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t71 = n1 in #t71.{core::Object::==}(null) ?{self::Class1?} null : #t71{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t72 = n1 in #t72.{core::Object::==}(null) ?{self::Class1?} null : #t72{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
+  let final self::Class1? #t73 = n1 in #t73.{core::Object::==}(null) ?{self::Class1?} null : #t73{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
+  nullable1 = let final self::Class1? #t74 = n1 in #t74.{core::Object::==}(null) ?{self::Class1?} null : #t74{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
+  let final self::Class1? #t75 = n1 in #t75.{core::Object::==}(null) ?{self::Class1?} null : #t75{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
+  nullable1 = let final self::Class1? #t76 = n1 in #t76.{core::Object::==}(null) ?{self::Class1?} null : #t76{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t77 = n1 in #t77.{core::Object::==}(null) ?{self::Class1?} null : #t77{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
+  nullable1 = let final self::Class1? #t78 = n1 in #t78.{core::Object::==}(null) ?{self::Class1?} null : #t78{self::Class1}.{self::Class1::nullable1} = new self::Class1::•().{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
+  let final self::Class1? #t79 = n1 in #t79.{core::Object::==}(null) ?{self::Class1?} null : #t79{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}().{self::Class1::nullable1};
+  let final self::Class1? #t80 = n1 in #t80.{core::Object::==}(null) ?{self::Class1?} null : #t80{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}().{self::Class1::nullable1} = new self::Class1::•();
+  let final self::Class1? #t81 = n1 in #t81.{core::Object::==}(null) ?{self::Class1?} null : #t81{self::Class1}.{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}().{self::Class1::nonNullable1Method}();
+  let final self::Class1? #t82 = n1 in #t82.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t83 = #t82{self::Class1}.{self::Class1::nonNullable1Method}() in #t83.{core::Object::==}(null) ?{self::Class1?} null : #t83{self::Class1}.{self::Class1::nonNullable1Method}();
 }
 static method indexAccess(self::Class1? n1, self::Class2? n2, self::Class3? n3) → void {
   self::Class1? nullable1 = n1;
   self::Class2? nullable2 = n2;
   self::Class3? nullable3 = n3;
-  let final self::Class1? #t82 = n1 in #t82.{core::Object::==}(null) ?{self::Class1?} null : #t82{self::Class1}.{self::Class1::[]}(nullable1);
-  let final self::Class1? #t83 = n1 in #t83.{core::Object::==}(null) ?{self::Class1?} null : #t83{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•());
-  let final self::Class1? #t84 = n1 in #t84.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t85 = #t84{self::Class1}.{self::Class1::[]}(nullable1) in #t85.{core::Object::==}(null) ?{self::Class1?} null : #t85{self::Class1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t86 = n1 in #t86.{core::Object::==}(null) ?{self::Class1?} null : #t86{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::[]}(nullable1);
-  let final self::Class1? #t87 = n1 in #t87.{core::Object::==}(null) ?{self::Class1?} null : #t87{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::[]=}(nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t88 = n1 in #t88.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t89 = #t88{self::Class1}.{self::Class1::nonNullable1} in let final self::Class1? #t90 = nullable1 in let final self::Class1 #t91 = new self::Class1::•() in let final void #t92 = #t89.{self::Class1::[]=}(#t90, #t91) in #t91;
-  let final self::Class1? #t93 = n1 in #t93.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t94 = #t93{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::[]}(nullable1) in #t94.{core::Object::==}(null) ?{self::Class1?} null : #t94{self::Class1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t95 = n1 in #t95.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t96 = #t95{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t97 = nullable2 in #t96.{self::Class2::[]=}(#t97, #t96.{self::Class2::[]}(#t97).{self::Class2::+}(0));
-  nullable2 = let final self::Class1? #t98 = n1 in #t98.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t99 = #t98{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t100 = nullable2 in let final self::Class2 #t101 = #t99.{self::Class2::[]}(#t100).{self::Class2::+}(0) in let final void #t102 = #t99.{self::Class2::[]=}(#t100, #t101) in #t101;
-  let final self::Class1? #t103 = n1 in #t103.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t104 = nullable1 in #t103{self::Class1}.{self::Class1::[]}(#t104).{core::Object::==}(null) ?{self::Class1?} #t103{self::Class1}.{self::Class1::[]=}(#t104, nullable1) : null;
-  nullable1 = let final self::Class1? #t105 = n1 in #t105.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t106 = nullable1 in let final self::Class1? #t107 = #t105{self::Class1}.{self::Class1::[]}(#t106) in #t107.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t108 = nullable1 in let final void #t109 = #t105{self::Class1}.{self::Class1::[]=}(#t106, #t108) in #t108 : #t107{self::Class1};
-  let final self::Class2? #t110 = n2 in #t110.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t111 = nullable2 in #t110{self::Class2}.{self::Class2::[]=}(#t111, #t110{self::Class2}.{self::Class2::[]}(#t111).{self::Class2::+}(0));
-  nullable2 = let final self::Class2? #t112 = n2 in #t112.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t113 = nullable2 in let final self::Class2 #t114 = #t112{self::Class2}.{self::Class2::[]}(#t113).{self::Class2::+}(0) in let final void #t115 = #t112{self::Class2}.{self::Class2::[]=}(#t113, #t114) in #t114;
-  let final self::Class2? #t116 = n2 in #t116.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t117 = nullable2 in #t116{self::Class2}.{self::Class2::[]=}(#t117, #t116{self::Class2}.{self::Class2::[]}(#t117).{self::Class2::+}(0));
-  nullable2 = let final self::Class2? #t118 = n2 in #t118.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t119 = nullable2 in let final self::Class2 #t120 = #t118{self::Class2}.{self::Class2::[]}(#t119).{self::Class2::+}(0) in let final void #t121 = #t118{self::Class2}.{self::Class2::[]=}(#t119, #t120) in #t120;
-  let final self::Class2? #t122 = n2 in #t122.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t123 = nullable2 in #t122{self::Class2}.{self::Class2::[]=}(#t123, #t122{self::Class2}.{self::Class2::[]}(#t123).{self::Class2::+}(1));
-  nullable2 = let final self::Class2? #t124 = n2 in #t124.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t125 = nullable2 in let final self::Class2 #t126 = #t124{self::Class2}.{self::Class2::[]}(#t125) in let final void #t127 = #t124{self::Class2}.{self::Class2::[]=}(#t125, #t126.{self::Class2::+}(1)) in #t126;
-  let final self::Class2? #t128 = n2 in #t128.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t129 = nullable2 in let final self::Class2 #t130 = #t128{self::Class2}.{self::Class2::[]}(#t129).{self::Class2::+}(1) in let final void #t131 = #t128{self::Class2}.{self::Class2::[]=}(#t129, #t130) in #t130;
-  nullable2 = let final self::Class2? #t132 = n2 in #t132.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t133 = nullable2 in let final self::Class2 #t134 = #t132{self::Class2}.{self::Class2::[]}(#t133).{self::Class2::+}(1) in let final void #t135 = #t132{self::Class2}.{self::Class2::[]=}(#t133, #t134) in #t134;
-  let final self::Class1? #t136 = n1 in #t136.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t137 = #t136{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t138 = nullable2 in #t137.{self::Class2::[]=}(#t138, #t137.{self::Class2::[]}(#t138).{self::Class2::+}(1));
-  nullable2 = let final self::Class1? #t139 = n1 in #t139.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t140 = #t139{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t141 = nullable2 in let final self::Class2 #t142 = #t140.{self::Class2::[]}(#t141) in let final void #t143 = #t140.{self::Class2::[]=}(#t141, #t142.{self::Class2::+}(1)) in #t142;
-  let final self::Class1? #t144 = n1 in #t144.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t145 = #t144{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t146 = nullable2 in let final self::Class2 #t147 = #t145.{self::Class2::[]}(#t146).{self::Class2::+}(1) in let final void #t148 = #t145.{self::Class2::[]=}(#t146, #t147) in #t147;
-  nullable2 = let final self::Class1? #t149 = n1 in #t149.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t150 = #t149{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t151 = nullable2 in let final self::Class2 #t152 = #t150.{self::Class2::[]}(#t151).{self::Class2::+}(1) in let final void #t153 = #t150.{self::Class2::[]=}(#t151, #t152) in #t152;
-  let final self::Class1? #t154 = n1 in #t154.{core::Object::==}(null) ?{self::Class2?} null : #t154{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2).{self::Class2::[]}(nullable2);
-  let final self::Class1? #t155 = n1 in #t155.{core::Object::==}(null) ?{self::Class2?} null : #t155{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2).{self::Class2::[]=}(nullable2, new self::Class2::•());
-  nullable2 = let final self::Class1? #t156 = n1 in #t156.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t157 = #t156{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t158 = nullable2 in let final self::Class2 #t159 = new self::Class2::•() in let final void #t160 = #t157.{self::Class2::[]=}(#t158, #t159) in #t159;
-  let final self::Class1? #t161 = n1 in #t161.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t162 = #t161{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2).{self::Class2::[]}(nullable2) in #t162.{core::Object::==}(null) ?{self::Class2?} null : #t162{self::Class2}.{self::Class2::nonNullable2Method}();
-  let final self::Class1? #t163 = n1 in #t163.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t164 = #t163{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t165 = nullable2 in #t164.{self::Class2::[]=}(#t165, #t164.{self::Class2::[]}(#t165).{self::Class2::+}(0));
-  nullable2 = let final self::Class1? #t166 = n1 in #t166.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t167 = #t166{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t168 = nullable2 in let final self::Class2 #t169 = #t167.{self::Class2::[]}(#t168).{self::Class2::+}(0) in let final void #t170 = #t167.{self::Class2::[]=}(#t168, #t169) in #t169;
-  let final self::Class1? #t171 = n1 in #t171.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t172 = #t171{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t173 = nullable2 in #t172.{self::Class2::[]=}(#t173, #t172.{self::Class2::[]}(#t173).{self::Class2::+}(1));
-  nullable2 = let final self::Class1? #t174 = n1 in #t174.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t175 = #t174{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t176 = nullable2 in let final self::Class2 #t177 = #t175.{self::Class2::[]}(#t176) in let final void #t178 = #t175.{self::Class2::[]=}(#t176, #t177.{self::Class2::+}(1)) in #t177;
-  let final self::Class1? #t179 = n1 in #t179.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t180 = #t179{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t181 = nullable2 in let final self::Class2 #t182 = #t180.{self::Class2::[]}(#t181).{self::Class2::+}(1) in let final void #t183 = #t180.{self::Class2::[]=}(#t181, #t182) in #t182;
-  nullable2 = let final self::Class1? #t184 = n1 in #t184.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t185 = #t184{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t186 = nullable2 in let final self::Class2 #t187 = #t185.{self::Class2::[]}(#t186).{self::Class2::+}(1) in let final void #t188 = #t185.{self::Class2::[]=}(#t186, #t187) in #t187;
-  let final self::Class1? #t189 = n1 in #t189.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t190 = #t189{self::Class1}.{self::Class1::[]}(nullable1) in #t190.{core::Object::==}(null) ?{self::Class1?} null : #t190{self::Class1}.{self::Class1::[]}(nullable1);
-  let final self::Class1? #t191 = n1 in #t191.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t192 = #t191{self::Class1}.{self::Class1::[]}(nullable1) in #t192.{core::Object::==}(null) ?{self::Class1?} null : #t192{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t193 = n1 in #t193.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t194 = #t193{self::Class1}.{self::Class1::[]}(nullable1) in #t194.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t195 = nullable1 in let final self::Class1 #t196 = new self::Class1::•() in let final void #t197 = #t194{self::Class1}.{self::Class1::[]=}(#t195, #t196) in #t196;
-  let final self::Class1? #t198 = n1 in #t198.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t199 = #t198{self::Class1}.{self::Class1::[]}(nullable1) in #t199.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t200 = #t199{self::Class1}.{self::Class1::[]}(nullable1) in #t200.{core::Object::==}(null) ?{self::Class1?} null : #t200{self::Class1}.{self::Class1::nonNullable1Method}();
-  nullable1 = let final self::Class1? #t201 = n1 in #t201.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t202 = #t201{self::Class1}.{self::Class1::[]}(nullable1) in #t202.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t203 = #t202{self::Class1}.{self::Class1::[]}(nullable1) in #t203.{core::Object::==}(null) ?{self::Class1?} null : #t203{self::Class1}.{self::Class1::nonNullable1Method}();
-  let final self::Class1? #t204 = n1 in #t204.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t205 = #t204{self::Class1}.{self::Class1::[]}(nullable1) in #t205.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t206 = nullable1 in #t205{self::Class1}.{self::Class1::[]}(#t206).{core::Object::==}(null) ?{self::Class1?} #t205{self::Class1}.{self::Class1::[]=}(#t206, nullable1) : null;
-  nullable1 = let final self::Class1? #t207 = n1 in #t207.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t208 = #t207{self::Class1}.{self::Class1::[]}(nullable1) in #t208.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t209 = nullable1 in let final self::Class1? #t210 = #t208{self::Class1}.{self::Class1::[]}(#t209) in #t210.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t211 = nullable1 in let final void #t212 = #t208{self::Class1}.{self::Class1::[]=}(#t209, #t211) in #t211 : #t210{self::Class1};
-  let final self::Class3? #t213 = n3 in #t213.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t214 = #t213{self::Class3}.{self::Class3::[]}(nullable3) in #t214.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t215 = nullable2 in #t214{self::Class2}.{self::Class2::[]=}(#t215, #t214{self::Class2}.{self::Class2::[]}(#t215).{self::Class2::+}(0));
-  nullable2 = let final self::Class3? #t216 = n3 in #t216.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t217 = #t216{self::Class3}.{self::Class3::[]}(nullable3) in #t217.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t218 = nullable2 in let final self::Class2 #t219 = #t217{self::Class2}.{self::Class2::[]}(#t218).{self::Class2::+}(0) in let final void #t220 = #t217{self::Class2}.{self::Class2::[]=}(#t218, #t219) in #t219;
-  let final self::Class3? #t221 = n3 in #t221.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t222 = #t221{self::Class3}.{self::Class3::[]}(nullable3) in #t222.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t223 = nullable2 in #t222{self::Class2}.{self::Class2::[]=}(#t223, #t222{self::Class2}.{self::Class2::[]}(#t223).{self::Class2::+}(1));
-  nullable2 = let final self::Class3? #t224 = n3 in #t224.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t225 = #t224{self::Class3}.{self::Class3::[]}(nullable3) in #t225.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t226 = nullable2 in let final self::Class2 #t227 = #t225{self::Class2}.{self::Class2::[]}(#t226) in let final void #t228 = #t225{self::Class2}.{self::Class2::[]=}(#t226, #t227.{self::Class2::+}(1)) in #t227;
-  let final self::Class3? #t229 = n3 in #t229.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t230 = #t229{self::Class3}.{self::Class3::[]}(nullable3) in #t230.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t231 = nullable2 in let final self::Class2 #t232 = #t230{self::Class2}.{self::Class2::[]}(#t231).{self::Class2::+}(1) in let final void #t233 = #t230{self::Class2}.{self::Class2::[]=}(#t231, #t232) in #t232;
-  nullable2 = let final self::Class3? #t234 = n3 in #t234.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t235 = #t234{self::Class3}.{self::Class3::[]}(nullable3) in #t235.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t236 = nullable2 in let final self::Class2 #t237 = #t235{self::Class2}.{self::Class2::[]}(#t236).{self::Class2::+}(1) in let final void #t238 = #t235{self::Class2}.{self::Class2::[]=}(#t236, #t237) in #t237;
+  let final self::Class1? #t84 = n1 in #t84.{core::Object::==}(null) ?{self::Class1?} null : #t84{self::Class1}.{self::Class1::[]}(nullable1);
+  let final self::Class1? #t85 = n1 in #t85.{core::Object::==}(null) ?{self::Class1?} null : #t85{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•());
+  let final self::Class1? #t86 = n1 in #t86.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t87 = #t86{self::Class1}.{self::Class1::[]}(nullable1) in #t87.{core::Object::==}(null) ?{self::Class1?} null : #t87{self::Class1}.{self::Class1::nonNullable1Method}();
+  let final self::Class1? #t88 = n1 in #t88.{core::Object::==}(null) ?{self::Class1?} null : #t88{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::[]}(nullable1);
+  let final self::Class1? #t89 = n1 in #t89.{core::Object::==}(null) ?{self::Class1?} null : #t89{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::[]=}(nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t90 = n1 in #t90.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t91 = #t90{self::Class1}.{self::Class1::nonNullable1} in let final self::Class1? #t92 = nullable1 in let final self::Class1 #t93 = new self::Class1::•() in let final void #t94 = #t91.{self::Class1::[]=}(#t92, #t93) in #t93;
+  let final self::Class1? #t95 = n1 in #t95.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t96 = #t95{self::Class1}.{self::Class1::nonNullable1}.{self::Class1::[]}(nullable1) in #t96.{core::Object::==}(null) ?{self::Class1?} null : #t96{self::Class1}.{self::Class1::nonNullable1Method}();
+  let final self::Class1? #t97 = n1 in #t97.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t98 = #t97{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t99 = nullable2 in #t98.{self::Class2::[]=}(#t99, #t98.{self::Class2::[]}(#t99).{self::Class2::+}(0));
+  nullable2 = let final self::Class1? #t100 = n1 in #t100.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t101 = #t100{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t102 = nullable2 in let final self::Class2 #t103 = #t101.{self::Class2::[]}(#t102).{self::Class2::+}(0) in let final void #t104 = #t101.{self::Class2::[]=}(#t102, #t103) in #t103;
+  let final self::Class1? #t105 = n1 in #t105.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t106 = nullable1 in #t105{self::Class1}.{self::Class1::[]}(#t106).{core::Object::==}(null) ?{self::Class1?} #t105{self::Class1}.{self::Class1::[]=}(#t106, nullable1) : null;
+  nullable1 = let final self::Class1? #t107 = n1 in #t107.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t108 = nullable1 in let final self::Class1? #t109 = #t107{self::Class1}.{self::Class1::[]}(#t108) in #t109.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t110 = nullable1 in let final void #t111 = #t107{self::Class1}.{self::Class1::[]=}(#t108, #t110) in #t110 : #t109{self::Class1};
+  let final self::Class2? #t112 = n2 in #t112.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t113 = nullable2 in #t112{self::Class2}.{self::Class2::[]=}(#t113, #t112{self::Class2}.{self::Class2::[]}(#t113).{self::Class2::+}(0));
+  nullable2 = let final self::Class2? #t114 = n2 in #t114.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t115 = nullable2 in let final self::Class2 #t116 = #t114{self::Class2}.{self::Class2::[]}(#t115).{self::Class2::+}(0) in let final void #t117 = #t114{self::Class2}.{self::Class2::[]=}(#t115, #t116) in #t116;
+  let final self::Class2? #t118 = n2 in #t118.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t119 = nullable2 in #t118{self::Class2}.{self::Class2::[]=}(#t119, #t118{self::Class2}.{self::Class2::[]}(#t119).{self::Class2::+}(0));
+  nullable2 = let final self::Class2? #t120 = n2 in #t120.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t121 = nullable2 in let final self::Class2 #t122 = #t120{self::Class2}.{self::Class2::[]}(#t121).{self::Class2::+}(0) in let final void #t123 = #t120{self::Class2}.{self::Class2::[]=}(#t121, #t122) in #t122;
+  let final self::Class2? #t124 = n2 in #t124.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t125 = nullable2 in #t124{self::Class2}.{self::Class2::[]=}(#t125, #t124{self::Class2}.{self::Class2::[]}(#t125).{self::Class2::+}(1));
+  nullable2 = let final self::Class2? #t126 = n2 in #t126.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t127 = nullable2 in let final self::Class2 #t128 = #t126{self::Class2}.{self::Class2::[]}(#t127) in let final void #t129 = #t126{self::Class2}.{self::Class2::[]=}(#t127, #t128.{self::Class2::+}(1)) in #t128;
+  let final self::Class2? #t130 = n2 in #t130.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t131 = nullable2 in let final self::Class2 #t132 = #t130{self::Class2}.{self::Class2::[]}(#t131).{self::Class2::+}(1) in let final void #t133 = #t130{self::Class2}.{self::Class2::[]=}(#t131, #t132) in #t132;
+  nullable2 = let final self::Class2? #t134 = n2 in #t134.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t135 = nullable2 in let final self::Class2 #t136 = #t134{self::Class2}.{self::Class2::[]}(#t135).{self::Class2::+}(1) in let final void #t137 = #t134{self::Class2}.{self::Class2::[]=}(#t135, #t136) in #t136;
+  let final self::Class1? #t138 = n1 in #t138.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t139 = #t138{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t140 = nullable2 in #t139.{self::Class2::[]=}(#t140, #t139.{self::Class2::[]}(#t140).{self::Class2::+}(1));
+  nullable2 = let final self::Class1? #t141 = n1 in #t141.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t142 = #t141{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t143 = nullable2 in let final self::Class2 #t144 = #t142.{self::Class2::[]}(#t143) in let final void #t145 = #t142.{self::Class2::[]=}(#t143, #t144.{self::Class2::+}(1)) in #t144;
+  let final self::Class1? #t146 = n1 in #t146.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t147 = #t146{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t148 = nullable2 in let final self::Class2 #t149 = #t147.{self::Class2::[]}(#t148).{self::Class2::+}(1) in let final void #t150 = #t147.{self::Class2::[]=}(#t148, #t149) in #t149;
+  nullable2 = let final self::Class1? #t151 = n1 in #t151.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t152 = #t151{self::Class1}.{self::Class1::nonNullable2} in let final self::Class2? #t153 = nullable2 in let final self::Class2 #t154 = #t152.{self::Class2::[]}(#t153).{self::Class2::+}(1) in let final void #t155 = #t152.{self::Class2::[]=}(#t153, #t154) in #t154;
+  let final self::Class1? #t156 = n1 in #t156.{core::Object::==}(null) ?{self::Class2?} null : #t156{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2).{self::Class2::[]}(nullable2);
+  let final self::Class1? #t157 = n1 in #t157.{core::Object::==}(null) ?{self::Class2?} null : #t157{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2).{self::Class2::[]=}(nullable2, new self::Class2::•());
+  nullable2 = let final self::Class1? #t158 = n1 in #t158.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t159 = #t158{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t160 = nullable2 in let final self::Class2 #t161 = new self::Class2::•() in let final void #t162 = #t159.{self::Class2::[]=}(#t160, #t161) in #t161;
+  let final self::Class1? #t163 = n1 in #t163.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t164 = #t163{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2).{self::Class2::[]}(nullable2) in #t164.{core::Object::==}(null) ?{self::Class2?} null : #t164{self::Class2}.{self::Class2::nonNullable2Method}();
+  let final self::Class1? #t165 = n1 in #t165.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t166 = #t165{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t167 = nullable2 in #t166.{self::Class2::[]=}(#t167, #t166.{self::Class2::[]}(#t167).{self::Class2::+}(0));
+  nullable2 = let final self::Class1? #t168 = n1 in #t168.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t169 = #t168{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t170 = nullable2 in let final self::Class2 #t171 = #t169.{self::Class2::[]}(#t170).{self::Class2::+}(0) in let final void #t172 = #t169.{self::Class2::[]=}(#t170, #t171) in #t171;
+  let final self::Class1? #t173 = n1 in #t173.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t174 = #t173{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t175 = nullable2 in #t174.{self::Class2::[]=}(#t175, #t174.{self::Class2::[]}(#t175).{self::Class2::+}(1));
+  nullable2 = let final self::Class1? #t176 = n1 in #t176.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t177 = #t176{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t178 = nullable2 in let final self::Class2 #t179 = #t177.{self::Class2::[]}(#t178) in let final void #t180 = #t177.{self::Class2::[]=}(#t178, #t179.{self::Class2::+}(1)) in #t179;
+  let final self::Class1? #t181 = n1 in #t181.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t182 = #t181{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t183 = nullable2 in let final self::Class2 #t184 = #t182.{self::Class2::[]}(#t183).{self::Class2::+}(1) in let final void #t185 = #t182.{self::Class2::[]=}(#t183, #t184) in #t184;
+  nullable2 = let final self::Class1? #t186 = n1 in #t186.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t187 = #t186{self::Class1}.{self::Class1::nonNullable2}.{self::Class2::[]}(nullable2) in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = #t187.{self::Class2::[]}(#t188).{self::Class2::+}(1) in let final void #t190 = #t187.{self::Class2::[]=}(#t188, #t189) in #t189;
+  let final self::Class1? #t191 = n1 in #t191.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t192 = #t191{self::Class1}.{self::Class1::[]}(nullable1) in #t192.{core::Object::==}(null) ?{self::Class1?} null : #t192{self::Class1}.{self::Class1::[]}(nullable1);
+  let final self::Class1? #t193 = n1 in #t193.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t194 = #t193{self::Class1}.{self::Class1::[]}(nullable1) in #t194.{core::Object::==}(null) ?{self::Class1?} null : #t194{self::Class1}.{self::Class1::[]=}(nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t195 = n1 in #t195.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t196 = #t195{self::Class1}.{self::Class1::[]}(nullable1) in #t196.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t197 = nullable1 in let final self::Class1 #t198 = new self::Class1::•() in let final void #t199 = #t196{self::Class1}.{self::Class1::[]=}(#t197, #t198) in #t198;
+  let final self::Class1? #t200 = n1 in #t200.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t201 = #t200{self::Class1}.{self::Class1::[]}(nullable1) in #t201.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t202 = #t201{self::Class1}.{self::Class1::[]}(nullable1) in #t202.{core::Object::==}(null) ?{self::Class1?} null : #t202{self::Class1}.{self::Class1::nonNullable1Method}();
+  nullable1 = let final self::Class1? #t203 = n1 in #t203.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t204 = #t203{self::Class1}.{self::Class1::[]}(nullable1) in #t204.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t205 = #t204{self::Class1}.{self::Class1::[]}(nullable1) in #t205.{core::Object::==}(null) ?{self::Class1?} null : #t205{self::Class1}.{self::Class1::nonNullable1Method}();
+  let final self::Class1? #t206 = n1 in #t206.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t207 = #t206{self::Class1}.{self::Class1::[]}(nullable1) in #t207.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t208 = nullable1 in #t207{self::Class1}.{self::Class1::[]}(#t208).{core::Object::==}(null) ?{self::Class1?} #t207{self::Class1}.{self::Class1::[]=}(#t208, nullable1) : null;
+  nullable1 = let final self::Class1? #t209 = n1 in #t209.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t210 = #t209{self::Class1}.{self::Class1::[]}(nullable1) in #t210.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t211 = nullable1 in let final self::Class1? #t212 = #t210{self::Class1}.{self::Class1::[]}(#t211) in #t212.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t213 = nullable1 in let final void #t214 = #t210{self::Class1}.{self::Class1::[]=}(#t211, #t213) in #t213 : #t212{self::Class1};
+  let final self::Class3? #t215 = n3 in #t215.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t216 = #t215{self::Class3}.{self::Class3::[]}(nullable3) in #t216.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in #t216{self::Class2}.{self::Class2::[]=}(#t217, #t216{self::Class2}.{self::Class2::[]}(#t217).{self::Class2::+}(0));
+  nullable2 = let final self::Class3? #t218 = n3 in #t218.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t219 = #t218{self::Class3}.{self::Class3::[]}(nullable3) in #t219.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t220 = nullable2 in let final self::Class2 #t221 = #t219{self::Class2}.{self::Class2::[]}(#t220).{self::Class2::+}(0) in let final void #t222 = #t219{self::Class2}.{self::Class2::[]=}(#t220, #t221) in #t221;
+  let final self::Class3? #t223 = n3 in #t223.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t224 = #t223{self::Class3}.{self::Class3::[]}(nullable3) in #t224.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t225 = nullable2 in #t224{self::Class2}.{self::Class2::[]=}(#t225, #t224{self::Class2}.{self::Class2::[]}(#t225).{self::Class2::+}(1));
+  nullable2 = let final self::Class3? #t226 = n3 in #t226.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t227 = #t226{self::Class3}.{self::Class3::[]}(nullable3) in #t227.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t228 = nullable2 in let final self::Class2 #t229 = #t227{self::Class2}.{self::Class2::[]}(#t228) in let final void #t230 = #t227{self::Class2}.{self::Class2::[]=}(#t228, #t229.{self::Class2::+}(1)) in #t229;
+  let final self::Class3? #t231 = n3 in #t231.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t232 = #t231{self::Class3}.{self::Class3::[]}(nullable3) in #t232.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t233 = nullable2 in let final self::Class2 #t234 = #t232{self::Class2}.{self::Class2::[]}(#t233).{self::Class2::+}(1) in let final void #t235 = #t232{self::Class2}.{self::Class2::[]=}(#t233, #t234) in #t234;
+  nullable2 = let final self::Class3? #t236 = n3 in #t236.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t237 = #t236{self::Class3}.{self::Class3::[]}(nullable3) in #t237.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t238 = nullable2 in let final self::Class2 #t239 = #t237{self::Class2}.{self::Class2::[]}(#t238).{self::Class2::+}(1) in let final void #t240 = #t237{self::Class2}.{self::Class2::[]=}(#t238, #t239) in #t239;
 }
 static method operatorAccess(self::Class1? n1, self::Class2? n2) → void {
   self::Class2? nullable2 = n2;
-  self::throws(() → self::Class1? => (let final self::Class1? #t239 = n1 in #t239.{core::Object::==}(null) ?{self::Class1?} null : #t239{self::Class1}.{self::Class1::nonNullable1}).{self::Class1::+}(0));
-  self::throws(() → self::Class1? => (let final self::Class1? #t240 = n1 in #t240.{core::Object::==}(null) ?{self::Class1?} null : #t240{self::Class1}.{self::Class1::nonNullable1}).{self::Class1::unary-}());
-  let final self::Class2? #t241 = n2 in #t241.{core::Object::==}(null) ?{self::Class2?} null : #t241.{self::Class2::nonNullable2} = #t241.{self::Class2::nonNullable2}.{self::Class2::+}(0);
-  nullable2 = let final self::Class2? #t242 = n2 in #t242.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t243 = #t242.{self::Class2::nonNullable2}.{self::Class2::+}(0) in let final void #t244 = #t242.{self::Class2::nonNullable2} = #t243 in #t243;
-  let final self::Class2? #t245 = n2 in #t245.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t246 = #t245{self::Class2}.{self::Class2::nonNullable2} in #t246.{self::Class2::nonNullable2} = #t246.{self::Class2::nonNullable2}.{self::Class2::+}(0);
-  nullable2 = let final self::Class2? #t247 = n2 in #t247.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t248 = #t247{self::Class2}.{self::Class2::nonNullable2} in #t248.{self::Class2::nonNullable2} = #t248.{self::Class2::nonNullable2}.{self::Class2::+}(0);
-  let final self::Class2? #t249 = n2 in #t249.{core::Object::==}(null) ?{self::Class2?} null : #t249.{self::Class2::nonNullable2} = #t249.{self::Class2::nonNullable2}.{self::Class2::+}(1);
-  nullable2 = let final self::Class2? #t250 = n2 in #t250.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t251 = #t250.{self::Class2::nonNullable2} in let final void #t252 = #t250.{self::Class2::nonNullable2} = #t251.{self::Class2::+}(1) in #t251;
-  let final self::Class2? #t253 = n2 in #t253.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t254 = #t253.{self::Class2::nonNullable2}.{self::Class2::+}(1) in let final void #t255 = #t253.{self::Class2::nonNullable2} = #t254 in #t254;
-  nullable2 = let final self::Class2? #t256 = n2 in #t256.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t257 = #t256.{self::Class2::nonNullable2}.{self::Class2::+}(1) in let final void #t258 = #t256.{self::Class2::nonNullable2} = #t257 in #t257;
+  self::throws(() → self::Class1? => let final<BottomType> #t241 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:220:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
+  throws(() => n1?.nonNullable1 + 0);
+                                ^" in (let final self::Class1? #t242 = n1 in #t242.{core::Object::==}(null) ?{self::Class1?} null : #t242{self::Class1}.{self::Class1::nonNullable1}).{self::Class1::+}(0));
+  self::throws(() → self::Class1? => let final<BottomType> #t243 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting.dart:221:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting.dart'.
+  throws(() => -n1?.nonNullable1);
+               ^" in (let final self::Class1? #t244 = n1 in #t244.{core::Object::==}(null) ?{self::Class1?} null : #t244{self::Class1}.{self::Class1::nonNullable1}).{self::Class1::unary-}());
+  let final self::Class2? #t245 = n2 in #t245.{core::Object::==}(null) ?{self::Class2?} null : #t245.{self::Class2::nonNullable2} = #t245.{self::Class2::nonNullable2}.{self::Class2::+}(0);
+  nullable2 = let final self::Class2? #t246 = n2 in #t246.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t247 = #t246.{self::Class2::nonNullable2}.{self::Class2::+}(0) in let final void #t248 = #t246.{self::Class2::nonNullable2} = #t247 in #t247;
+  let final self::Class2? #t249 = n2 in #t249.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t250 = #t249{self::Class2}.{self::Class2::nonNullable2} in #t250.{self::Class2::nonNullable2} = #t250.{self::Class2::nonNullable2}.{self::Class2::+}(0);
+  nullable2 = let final self::Class2? #t251 = n2 in #t251.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t252 = #t251{self::Class2}.{self::Class2::nonNullable2} in #t252.{self::Class2::nonNullable2} = #t252.{self::Class2::nonNullable2}.{self::Class2::+}(0);
+  let final self::Class2? #t253 = n2 in #t253.{core::Object::==}(null) ?{self::Class2?} null : #t253.{self::Class2::nonNullable2} = #t253.{self::Class2::nonNullable2}.{self::Class2::+}(1);
+  nullable2 = let final self::Class2? #t254 = n2 in #t254.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t255 = #t254.{self::Class2::nonNullable2} in let final void #t256 = #t254.{self::Class2::nonNullable2} = #t255.{self::Class2::+}(1) in #t255;
+  let final self::Class2? #t257 = n2 in #t257.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t258 = #t257.{self::Class2::nonNullable2}.{self::Class2::+}(1) in let final void #t259 = #t257.{self::Class2::nonNullable2} = #t258 in #t258;
+  nullable2 = let final self::Class2? #t260 = n2 in #t260.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t261 = #t260.{self::Class2::nonNullable2}.{self::Class2::+}(1) in let final void #t262 = #t260.{self::Class2::nonNullable2} = #t261 in #t261;
 }
 static method ifNull(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t259 = n1 in #t259.{core::Object::==}(null) ?{self::Class1?} null : #t259.{self::Class1::nullable1}.{core::Object::==}(null) ?{self::Class1} #t259.{self::Class1::nullable1} = n1{self::Class1} : null;
-  n1 = let final self::Class1? #t260 = n1 in #t260.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t261 = #t260.{self::Class1::nullable1} in #t261.{core::Object::==}(null) ?{self::Class1} #t260.{self::Class1::nullable1} = n1{self::Class1} : #t261{self::Class1};
-  let final self::Class1? #t262 = n1 in #t262.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t263 = #t262{self::Class1}.{self::Class1::nonNullable1} in #t263{self::Class1}.{self::Class1::nullable1}.{core::Object::==}(null) ?{self::Class1} #t263{self::Class1}.{self::Class1::nullable1} = n1{self::Class1} : null;
-  n1 = let final self::Class1? #t264 = n1 in #t264.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t265 = #t264{self::Class1}.{self::Class1::nonNullable1} in let final self::Class1? #t266 = #t265{self::Class1}.{self::Class1::nullable1} in #t266.{core::Object::==}(null) ?{self::Class1} #t265{self::Class1}.{self::Class1::nullable1} = n1{self::Class1} : #t266{self::Class1};
-  let final self::Class1? #t267 = n1 in #t267.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t268 = #t267{self::Class1}.{self::Class1::nonNullable1} in let final self::Class1 #t269 = n1{self::Class1} in #t268.{self::Class1::[]}(#t269).{core::Object::==}(null) ?{self::Class1} #t268.{self::Class1::[]=}(#t269, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t270 = n1 in #t270.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t271 = #t270{self::Class1}.{self::Class1::nonNullable1} in let final self::Class1 #t272 = n1{self::Class1} in let final self::Class1? #t273 = #t271.{self::Class1::[]}(#t272) in #t273.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t274 = n1{self::Class1} in let final void #t275 = #t271.{self::Class1::[]=}(#t272, #t274) in #t274 : #t273{self::Class1};
+  let final self::Class1? #t263 = n1 in #t263.{core::Object::==}(null) ?{self::Class1?} null : #t263.{self::Class1::nullable1}.{core::Object::==}(null) ?{self::Class1} #t263.{self::Class1::nullable1} = n1{self::Class1} : null;
+  n1 = let final self::Class1? #t264 = n1 in #t264.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t265 = #t264.{self::Class1::nullable1} in #t265.{core::Object::==}(null) ?{self::Class1} #t264.{self::Class1::nullable1} = n1{self::Class1} : #t265{self::Class1};
+  let final self::Class1? #t266 = n1 in #t266.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t267 = #t266{self::Class1}.{self::Class1::nonNullable1} in #t267{self::Class1}.{self::Class1::nullable1}.{core::Object::==}(null) ?{self::Class1} #t267{self::Class1}.{self::Class1::nullable1} = n1{self::Class1} : null;
+  n1 = let final self::Class1? #t268 = n1 in #t268.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t269 = #t268{self::Class1}.{self::Class1::nonNullable1} in let final self::Class1? #t270 = #t269{self::Class1}.{self::Class1::nullable1} in #t270.{core::Object::==}(null) ?{self::Class1} #t269{self::Class1}.{self::Class1::nullable1} = n1{self::Class1} : #t270{self::Class1};
+  let final self::Class1? #t271 = n1 in #t271.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t272 = #t271{self::Class1}.{self::Class1::nonNullable1} in let final self::Class1 #t273 = n1{self::Class1} in #t272.{self::Class1::[]}(#t273).{core::Object::==}(null) ?{self::Class1} #t272.{self::Class1::[]=}(#t273, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t274 = n1 in #t274.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t275 = #t274{self::Class1}.{self::Class1::nonNullable1} in let final self::Class1 #t276 = n1{self::Class1} in let final self::Class1? #t277 = #t275.{self::Class1::[]}(#t276) in #t277.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t278 = n1{self::Class1} in let final void #t279 = #t275.{self::Class1::[]=}(#t276, #t278) in #t278 : #t277{self::Class1};
 }
 static method throws(() → void f) → void {
   try {
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.weak.expect b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.weak.expect
index 559dca6..ad010f7 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.weak.expect
@@ -2,24 +2,24 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:93:59: Warning: Property 'nullable1' is accessed on 'Class1?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:93:59: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
 //  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
 // Try accessing using ?. instead.
 //   throws(() => (Extension1(n1)?.nullable1 = new Class1()).nullable1);
 //                                                           ^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:94:55: Warning: Property 'nullable1' is accessed on 'Class1?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:94:55: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
 //  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
 // Try accessing using ?. instead.
 //   throws(() => (Extension1(n1)?.nonNullable1Method()).nullable1);
 //                                                       ^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:244:45: Warning: Operator '+' is called on 'Class1?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:244:45: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
 //  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
 //   throws(() => Extension1(n1)?.nonNullable1 + 0);
 //                                             ^
 //
-// pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:245:16: Warning: Operator 'unary-' is called on 'Class1?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:245:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
 //  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
 //   throws(() => -Extension1(n1)?.nonNullable1);
 //                ^
@@ -139,139 +139,153 @@
   let final self::Class1? #t13 = n1 in #t13.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t14 = self::Extension1|get#nullable1(#t13{self::Class1}) in #t14.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t14{self::Class1}, new self::Class1::•());
   let final self::Class1? #t15 = n1 in #t15.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t16 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t15{self::Class1})) in #t16.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t16{self::Class1}, new self::Class1::•());
   let final self::Class1? #t17 = let final self::Class1? #t18 = n1 in #t18.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t18{self::Class1}) in #t17.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t17{self::Class1});
-  self::throws(() → self::Class1? => self::Extension1|get#nullable1(let final self::Class1? #t19 = n1 in #t19.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t20 = new self::Class1::•() in let final void #t21 = self::Extension1|set#nullable1(#t19{self::Class1}, #t20) in #t20));
-  self::throws(() → self::Class1? => self::Extension1|get#nullable1(let final self::Class1? #t22 = n1 in #t22.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t22{self::Class1})));
-  nullable1 = let final self::Class1? #t23 = n1 in #t23.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t24 = new self::Class1::•() in let final void #t25 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t23{self::Class1}), #t24) in #t24;
-  nullable1 = let final self::Class1? #t26 = n1 in #t26.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t27 = self::Extension1|get#nullable1(#t26{self::Class1}) in #t27.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t28 = new self::Class1::•() in let final void #t29 = self::Extension1|set#nullable1(#t27{self::Class1}, #t28) in #t28;
-  nullable1 = let final self::Class1? #t30 = n1 in #t30.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t31 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t30{self::Class1})) in #t31.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t32 = new self::Class1::•() in let final void #t33 = self::Extension1|set#nullable1(#t31{self::Class1}, #t32) in #t32;
-  let final self::Class1? #t34 = n1 in #t34.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t35 = self::Extension1|get#nullable1(#t34{self::Class1}) in #t35.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t35{self::Class1});
-  let final self::Class1? #t36 = n1 in #t36.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t36{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t37 = n1 in #t37.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t38 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t39 = self::Extension1|set#nullable1(#t37{self::Class1}, #t38) in #t38;
-  let final self::Class1? #t40 = n1 in #t40.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t40{self::Class1}, let final self::Class1 #t41 = new self::Class1::•() in let final void #t42 = self::Extension1|set#nullable1(new self::Class1::•(), #t41) in #t41);
-  nullable1 = let final self::Class1? #t43 = n1 in #t43.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t44 = let final self::Class1 #t45 = new self::Class1::•() in let final void #t46 = self::Extension1|set#nullable1(new self::Class1::•(), #t45) in #t45 in let final void #t47 = self::Extension1|set#nullable1(#t43{self::Class1}, #t44) in #t44;
-  let final self::Class1? #t48 = n1 in #t48.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t48{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t49 = n1 in #t49.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t50 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t51 = self::Extension1|set#nullable1(#t49{self::Class1}, #t50) in #t50;
-  let final self::Class1? #t52 = n1 in #t52.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t52{self::Class1}));
-  let final self::Class1? #t53 = n1 in #t53.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t53{self::Class1}), new self::Class1::•());
-  let final self::Class1? #t54 = n1 in #t54.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t54{self::Class1}));
-  let final self::Class1? #t55 = n1 in #t55.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t55{self::Class1})));
-  let final self::Class1? #t56 = n1 in #t56.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t56{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t57 = n1 in #t57.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t58 = new self::Class1::•() in let final void #t59 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})), #t58) in #t58;
-  let final self::Class1? #t60 = n1 in #t60.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t61 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t60{self::Class1})) in #t61.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t61{self::Class1});
-  let final self::Class1? #t62 = n1 in #t62.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t62{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t63 = n1 in #t63.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t64 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t65 = self::Extension1|set#nullable1(#t63{self::Class1}, #t64) in #t64;
-  let final self::Class1? #t66 = n1 in #t66.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t66{self::Class1}, let final self::Class1 #t67 = new self::Class1::•() in let final void #t68 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t67) in #t67);
-  nullable1 = let final self::Class1? #t69 = n1 in #t69.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t70 = let final self::Class1 #t71 = new self::Class1::•() in let final void #t72 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t71) in #t71 in let final void #t73 = self::Extension1|set#nullable1(#t69{self::Class1}, #t70) in #t70;
-  let final self::Class1? #t74 = n1 in #t74.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t74{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t75 = n1 in #t75.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t76 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t77 = self::Extension1|set#nullable1(#t75{self::Class1}, #t76) in #t76;
-  let final self::Class1? #t78 = n1 in #t78.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t78{self::Class1})));
-  let final self::Class1? #t79 = n1 in #t79.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t79{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t80 = n1 in #t80.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
-  let final self::Class1? #t81 = n1 in #t81.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t81{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t82 = n1 in #t82.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t83 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t84 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t82{self::Class1}), #t83) in #t83;
-  let final self::Class1? #t85 = n1 in #t85.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t85{self::Class1}), let final self::Class1 #t86 = new self::Class1::•() in let final void #t87 = self::Extension1|set#nullable1(new self::Class1::•(), #t86) in #t86);
-  nullable1 = let final self::Class1? #t88 = n1 in #t88.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t89 = let final self::Class1 #t90 = new self::Class1::•() in let final void #t91 = self::Extension1|set#nullable1(new self::Class1::•(), #t90) in #t90 in let final void #t92 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t88{self::Class1}), #t89) in #t89;
-  let final self::Class1? #t93 = n1 in #t93.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t93{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t94 = n1 in #t94.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t95 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t96 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t94{self::Class1}), #t95) in #t95;
-  let final self::Class1? #t97 = n1 in #t97.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t97{self::Class1}, let final self::Class1? #t98 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t99 = self::Extension1|set#nullable1(new self::Class1::•(), #t98) in #t98);
-  nullable1 = let final self::Class1? #t100 = n1 in #t100.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t101 = let final self::Class1? #t102 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t103 = self::Extension1|set#nullable1(new self::Class1::•(), #t102) in #t102 in let final void #t104 = self::Extension1|set#nullable1(#t100{self::Class1}, #t101) in #t101;
-  let final self::Class1? #t105 = n1 in #t105.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t105{self::Class1}, let final self::Class1 #t106 = let final self::Class1 #t107 = new self::Class1::•() in let final void #t108 = self::Extension1|set#nullable1(new self::Class1::•(), #t107) in #t107 in let final void #t109 = self::Extension1|set#nullable1(new self::Class1::•(), #t106) in #t106);
-  nullable1 = let final self::Class1? #t110 = n1 in #t110.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t111 = let final self::Class1 #t112 = let final self::Class1 #t113 = new self::Class1::•() in let final void #t114 = self::Extension1|set#nullable1(new self::Class1::•(), #t113) in #t113 in let final void #t115 = self::Extension1|set#nullable1(new self::Class1::•(), #t112) in #t112 in let final void #t116 = self::Extension1|set#nullable1(#t110{self::Class1}, #t111) in #t111;
-  let final self::Class1? #t117 = n1 in #t117.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t117{self::Class1}, let final self::Class1 #t118 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t119 = self::Extension1|set#nullable1(new self::Class1::•(), #t118) in #t118);
-  nullable1 = let final self::Class1? #t120 = n1 in #t120.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t121 = let final self::Class1 #t122 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t123 = self::Extension1|set#nullable1(new self::Class1::•(), #t122) in #t122 in let final void #t124 = self::Extension1|set#nullable1(#t120{self::Class1}, #t121) in #t121;
-  let final self::Class1? #t125 = n1 in #t125.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t125{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t126 = n1 in #t126.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t127 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t128 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t126{self::Class1}), #t127) in #t127;
-  let final self::Class1? #t129 = n1 in #t129.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t129{self::Class1}), let final self::Class1 #t130 = new self::Class1::•() in let final void #t131 = self::Extension1|set#nullable1(new self::Class1::•(), #t130) in #t130);
-  nullable1 = let final self::Class1? #t132 = n1 in #t132.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t133 = let final self::Class1 #t134 = new self::Class1::•() in let final void #t135 = self::Extension1|set#nullable1(new self::Class1::•(), #t134) in #t134 in let final void #t136 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t132{self::Class1}), #t133) in #t133;
-  let final self::Class1? #t137 = n1 in #t137.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t137{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t138 = n1 in #t138.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t139 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t140 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t138{self::Class1}), #t139) in #t139;
-  let final self::Class1? #t141 = n1 in #t141.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t141{self::Class1})));
-  let final self::Class1? #t142 = n1 in #t142.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t142{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t143 = n1 in #t143.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t144 = new self::Class1::•() in let final void #t145 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})), #t144) in #t144;
-  let final self::Class1? #t146 = n1 in #t146.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t146{self::Class1})));
-  let final self::Class1? #t147 = n1 in #t147.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t147{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t148 = n1 in #t148.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t149 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t150 = self::Extension1|set#nullable1(#t148{self::Class1}, #t149) in #t149;
-  let final self::Class1? #t151 = n1 in #t151.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t151{self::Class1}, let final self::Class1 #t152 = new self::Class1::•() in let final void #t153 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t152) in #t152);
-  nullable1 = let final self::Class1? #t154 = n1 in #t154.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t155 = let final self::Class1 #t156 = new self::Class1::•() in let final void #t157 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t156) in #t156 in let final void #t158 = self::Extension1|set#nullable1(#t154{self::Class1}, #t155) in #t155;
-  let final self::Class1? #t159 = n1 in #t159.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t159{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t160 = n1 in #t160.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t161 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t162 = self::Extension1|set#nullable1(#t160{self::Class1}, #t161) in #t161;
-  let final self::Class1? #t163 = n1 in #t163.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t163{self::Class1})));
-  let final self::Class1? #t164 = n1 in #t164.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t164{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t165 = n1 in #t165.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
-  let final self::Class1? #t166 = n1 in #t166.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t167 = self::Extension1|nonNullable1Method(#t166{self::Class1}) in #t167.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t167{self::Class1});
+  self::throws(() → self::Class1? => let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:93:59: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
+Try accessing using ?. instead.
+  throws(() => (Extension1(n1)?.nullable1 = new Class1()).nullable1);
+                                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t20 = n1 in #t20.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t21 = new self::Class1::•() in let final void #t22 = self::Extension1|set#nullable1(#t20{self::Class1}, #t21) in #t21));
+  self::throws(() → self::Class1? => let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:94:55: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
+Try accessing using ?. instead.
+  throws(() => (Extension1(n1)?.nonNullable1Method()).nullable1);
+                                                      ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t24 = n1 in #t24.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t24{self::Class1})));
+  nullable1 = let final self::Class1? #t25 = n1 in #t25.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t26 = new self::Class1::•() in let final void #t27 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t25{self::Class1}), #t26) in #t26;
+  nullable1 = let final self::Class1? #t28 = n1 in #t28.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t29 = self::Extension1|get#nullable1(#t28{self::Class1}) in #t29.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t30 = new self::Class1::•() in let final void #t31 = self::Extension1|set#nullable1(#t29{self::Class1}, #t30) in #t30;
+  nullable1 = let final self::Class1? #t32 = n1 in #t32.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t33 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t32{self::Class1})) in #t33.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t34 = new self::Class1::•() in let final void #t35 = self::Extension1|set#nullable1(#t33{self::Class1}, #t34) in #t34;
+  let final self::Class1? #t36 = n1 in #t36.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t37 = self::Extension1|get#nullable1(#t36{self::Class1}) in #t37.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t37{self::Class1});
+  let final self::Class1? #t38 = n1 in #t38.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t38{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t39 = n1 in #t39.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t40 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t41 = self::Extension1|set#nullable1(#t39{self::Class1}, #t40) in #t40;
+  let final self::Class1? #t42 = n1 in #t42.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t42{self::Class1}, let final self::Class1 #t43 = new self::Class1::•() in let final void #t44 = self::Extension1|set#nullable1(new self::Class1::•(), #t43) in #t43);
+  nullable1 = let final self::Class1? #t45 = n1 in #t45.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t46 = let final self::Class1 #t47 = new self::Class1::•() in let final void #t48 = self::Extension1|set#nullable1(new self::Class1::•(), #t47) in #t47 in let final void #t49 = self::Extension1|set#nullable1(#t45{self::Class1}, #t46) in #t46;
+  let final self::Class1? #t50 = n1 in #t50.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t50{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t51 = n1 in #t51.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t52 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t53 = self::Extension1|set#nullable1(#t51{self::Class1}, #t52) in #t52;
+  let final self::Class1? #t54 = n1 in #t54.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t54{self::Class1}));
+  let final self::Class1? #t55 = n1 in #t55.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t55{self::Class1}), new self::Class1::•());
+  let final self::Class1? #t56 = n1 in #t56.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t56{self::Class1}));
+  let final self::Class1? #t57 = n1 in #t57.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})));
+  let final self::Class1? #t58 = n1 in #t58.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t58{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t59 = n1 in #t59.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t60 = new self::Class1::•() in let final void #t61 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t59{self::Class1})), #t60) in #t60;
+  let final self::Class1? #t62 = n1 in #t62.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t63 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t62{self::Class1})) in #t63.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t63{self::Class1});
+  let final self::Class1? #t64 = n1 in #t64.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t64{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t65 = n1 in #t65.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t66 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t67 = self::Extension1|set#nullable1(#t65{self::Class1}, #t66) in #t66;
+  let final self::Class1? #t68 = n1 in #t68.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t68{self::Class1}, let final self::Class1 #t69 = new self::Class1::•() in let final void #t70 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t69) in #t69);
+  nullable1 = let final self::Class1? #t71 = n1 in #t71.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t72 = let final self::Class1 #t73 = new self::Class1::•() in let final void #t74 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t73) in #t73 in let final void #t75 = self::Extension1|set#nullable1(#t71{self::Class1}, #t72) in #t72;
+  let final self::Class1? #t76 = n1 in #t76.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t76{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t77 = n1 in #t77.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t78 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t79 = self::Extension1|set#nullable1(#t77{self::Class1}, #t78) in #t78;
+  let final self::Class1? #t80 = n1 in #t80.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
+  let final self::Class1? #t81 = n1 in #t81.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t81{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t82 = n1 in #t82.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t82{self::Class1})));
+  let final self::Class1? #t83 = n1 in #t83.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t83{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t84 = n1 in #t84.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t85 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t86 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t84{self::Class1}), #t85) in #t85;
+  let final self::Class1? #t87 = n1 in #t87.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t87{self::Class1}), let final self::Class1 #t88 = new self::Class1::•() in let final void #t89 = self::Extension1|set#nullable1(new self::Class1::•(), #t88) in #t88);
+  nullable1 = let final self::Class1? #t90 = n1 in #t90.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t91 = let final self::Class1 #t92 = new self::Class1::•() in let final void #t93 = self::Extension1|set#nullable1(new self::Class1::•(), #t92) in #t92 in let final void #t94 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t90{self::Class1}), #t91) in #t91;
+  let final self::Class1? #t95 = n1 in #t95.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t95{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t96 = n1 in #t96.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t97 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t98 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t96{self::Class1}), #t97) in #t97;
+  let final self::Class1? #t99 = n1 in #t99.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t99{self::Class1}, let final self::Class1? #t100 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t101 = self::Extension1|set#nullable1(new self::Class1::•(), #t100) in #t100);
+  nullable1 = let final self::Class1? #t102 = n1 in #t102.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t103 = let final self::Class1? #t104 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t105 = self::Extension1|set#nullable1(new self::Class1::•(), #t104) in #t104 in let final void #t106 = self::Extension1|set#nullable1(#t102{self::Class1}, #t103) in #t103;
+  let final self::Class1? #t107 = n1 in #t107.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t107{self::Class1}, let final self::Class1 #t108 = let final self::Class1 #t109 = new self::Class1::•() in let final void #t110 = self::Extension1|set#nullable1(new self::Class1::•(), #t109) in #t109 in let final void #t111 = self::Extension1|set#nullable1(new self::Class1::•(), #t108) in #t108);
+  nullable1 = let final self::Class1? #t112 = n1 in #t112.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t113 = let final self::Class1 #t114 = let final self::Class1 #t115 = new self::Class1::•() in let final void #t116 = self::Extension1|set#nullable1(new self::Class1::•(), #t115) in #t115 in let final void #t117 = self::Extension1|set#nullable1(new self::Class1::•(), #t114) in #t114 in let final void #t118 = self::Extension1|set#nullable1(#t112{self::Class1}, #t113) in #t113;
+  let final self::Class1? #t119 = n1 in #t119.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t119{self::Class1}, let final self::Class1 #t120 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t121 = self::Extension1|set#nullable1(new self::Class1::•(), #t120) in #t120);
+  nullable1 = let final self::Class1? #t122 = n1 in #t122.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t123 = let final self::Class1 #t124 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t125 = self::Extension1|set#nullable1(new self::Class1::•(), #t124) in #t124 in let final void #t126 = self::Extension1|set#nullable1(#t122{self::Class1}, #t123) in #t123;
+  let final self::Class1? #t127 = n1 in #t127.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t127{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t128 = n1 in #t128.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t129 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t130 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t128{self::Class1}), #t129) in #t129;
+  let final self::Class1? #t131 = n1 in #t131.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t131{self::Class1}), let final self::Class1 #t132 = new self::Class1::•() in let final void #t133 = self::Extension1|set#nullable1(new self::Class1::•(), #t132) in #t132);
+  nullable1 = let final self::Class1? #t134 = n1 in #t134.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t135 = let final self::Class1 #t136 = new self::Class1::•() in let final void #t137 = self::Extension1|set#nullable1(new self::Class1::•(), #t136) in #t136 in let final void #t138 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t134{self::Class1}), #t135) in #t135;
+  let final self::Class1? #t139 = n1 in #t139.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t139{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t140 = n1 in #t140.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t141 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t142 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t140{self::Class1}), #t141) in #t141;
+  let final self::Class1? #t143 = n1 in #t143.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})));
+  let final self::Class1? #t144 = n1 in #t144.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t144{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t145 = n1 in #t145.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t146 = new self::Class1::•() in let final void #t147 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t145{self::Class1})), #t146) in #t146;
+  let final self::Class1? #t148 = n1 in #t148.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t148{self::Class1})));
+  let final self::Class1? #t149 = n1 in #t149.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t149{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t150 = n1 in #t150.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t151 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t152 = self::Extension1|set#nullable1(#t150{self::Class1}, #t151) in #t151;
+  let final self::Class1? #t153 = n1 in #t153.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t153{self::Class1}, let final self::Class1 #t154 = new self::Class1::•() in let final void #t155 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t154) in #t154);
+  nullable1 = let final self::Class1? #t156 = n1 in #t156.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t157 = let final self::Class1 #t158 = new self::Class1::•() in let final void #t159 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t158) in #t158 in let final void #t160 = self::Extension1|set#nullable1(#t156{self::Class1}, #t157) in #t157;
+  let final self::Class1? #t161 = n1 in #t161.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t161{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t162 = n1 in #t162.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t163 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t164 = self::Extension1|set#nullable1(#t162{self::Class1}, #t163) in #t163;
+  let final self::Class1? #t165 = n1 in #t165.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
+  let final self::Class1? #t166 = n1 in #t166.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t166{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t167 = n1 in #t167.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t167{self::Class1})));
+  let final self::Class1? #t168 = n1 in #t168.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t169 = self::Extension1|nonNullable1Method(#t168{self::Class1}) in #t169.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t169{self::Class1});
 }
 static method indexAccess(self::Class1? n1, self::Class2? n2, self::Class3? n3) → void {
   self::Class1? nullable1 = n1;
   self::Class2? nullable2 = n2;
   self::Class3? nullable3 = n3;
-  let final self::Class1? #t168 = n1 in #t168.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](#t168{self::Class1}, nullable1);
-  let final self::Class1? #t169 = n1 in #t169.{core::Object::==}(null) ?{void} null : self::Extension1|[]=(#t169{self::Class1}, nullable1, new self::Class1::•());
-  let final self::Class1? #t170 = n1 in #t170.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t171 = self::Extension1|[](#t170{self::Class1}, nullable1) in #t171.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t171{self::Class1});
-  let final self::Class1? #t172 = n1 in #t172.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t172{self::Class1}), nullable1);
-  let final self::Class1? #t173 = n1 in #t173.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t173{self::Class1}), nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t174 = n1 in #t174.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t175 = self::Extension1|get#nonNullable1(#t174{self::Class1}) in let final self::Class1? #t176 = nullable1 in let final self::Class1 #t177 = new self::Class1::•() in let final void #t178 = self::Extension1|[]=(#t175, #t176, #t177) in #t177;
-  let final self::Class1? #t179 = n1 in #t179.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t180 = self::Extension1|[](self::Extension1|get#nonNullable1(#t179{self::Class1}), nullable1) in #t180.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t180{self::Class1});
-  let final self::Class1? #t181 = n1 in #t181.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t182 = self::Extension1|get#nonNullable2(#t181{self::Class1}) in let final self::Class2? #t183 = nullable2 in self::Extension2|[]=(#t182, #t183, self::Extension2|+(self::Extension2|[](#t182, #t183), 0));
-  nullable2 = let final self::Class1? #t184 = n1 in #t184.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t185 = self::Extension1|get#nonNullable2(#t184{self::Class1}) in let final self::Class2? #t186 = nullable2 in let final self::Class2 #t187 = self::Extension2|+(self::Extension2|[](#t185, #t186), 0) in let final void #t188 = self::Extension2|[]=(#t185, #t186, #t187) in #t187;
-  let final self::Class1? #t189 = n1 in #t189.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t190 = nullable1 in self::Extension1|[](#t189{self::Class1}, #t190).{core::Object::==}(null) ?{self::Class1?} self::Extension1|[]=(#t189{self::Class1}, #t190, nullable1) : null;
-  nullable1 = let final self::Class1? #t191 = n1 in #t191.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in let final self::Class1? #t193 = self::Extension1|[](#t191{self::Class1}, #t192) in #t193.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t194 = nullable1 in let final void #t195 = self::Extension1|[]=(#t191{self::Class1}, #t192, #t194) in #t194 : #t193{self::Class1};
-  let final self::Class2? #t196 = n2 in #t196.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t197 = nullable2 in self::Extension2|[]=(#t196{self::Class2}, #t197, self::Extension2|+(self::Extension2|[](#t196{self::Class2}, #t197), 0));
-  nullable2 = let final self::Class2? #t198 = n2 in #t198.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in let final self::Class2 #t200 = self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0) in let final void #t201 = self::Extension2|[]=(#t198{self::Class2}, #t199, #t200) in #t200;
-  let final self::Class2? #t202 = n2 in #t202.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t203 = nullable2 in self::Extension2|[]=(#t202{self::Class2}, #t203, self::Extension2|+(self::Extension2|[](#t202{self::Class2}, #t203), 0));
-  nullable2 = let final self::Class2? #t204 = n2 in #t204.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in let final self::Class2 #t206 = self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0) in let final void #t207 = self::Extension2|[]=(#t204{self::Class2}, #t205, #t206) in #t206;
-  let final self::Class2? #t208 = n2 in #t208.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t209 = nullable2 in self::Extension2|[]=(#t208{self::Class2}, #t209, self::Extension2|+(self::Extension2|[](#t208{self::Class2}, #t209), 1));
-  nullable2 = let final self::Class2? #t210 = n2 in #t210.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in let final self::Class2 #t212 = self::Extension2|[](#t210{self::Class2}, #t211) in let final void #t213 = self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(#t212, 1)) in #t212;
-  let final self::Class2? #t214 = n2 in #t214.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t215 = nullable2 in let final self::Class2 #t216 = self::Extension2|+(self::Extension2|[](#t214{self::Class2}, #t215), 1) in let final void #t217 = self::Extension2|[]=(#t214{self::Class2}, #t215, #t216) in #t216;
-  nullable2 = let final self::Class2? #t218 = n2 in #t218.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t219 = nullable2 in let final self::Class2 #t220 = self::Extension2|+(self::Extension2|[](#t218{self::Class2}, #t219), 1) in let final void #t221 = self::Extension2|[]=(#t218{self::Class2}, #t219, #t220) in #t220;
-  let final self::Class1? #t222 = n1 in #t222.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t223 = self::Extension1|get#nonNullable2(#t222{self::Class1}) in let final self::Class2? #t224 = nullable2 in self::Extension2|[]=(#t223, #t224, self::Extension2|+(self::Extension2|[](#t223, #t224), 1));
-  nullable2 = let final self::Class1? #t225 = n1 in #t225.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t226 = self::Extension1|get#nonNullable2(#t225{self::Class1}) in let final self::Class2? #t227 = nullable2 in let final self::Class2 #t228 = self::Extension2|[](#t226, #t227) in let final void #t229 = self::Extension2|[]=(#t226, #t227, self::Extension2|+(#t228, 1)) in #t228;
-  let final self::Class1? #t230 = n1 in #t230.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t231 = self::Extension1|get#nonNullable2(#t230{self::Class1}) in let final self::Class2? #t232 = nullable2 in let final self::Class2 #t233 = self::Extension2|+(self::Extension2|[](#t231, #t232), 1) in let final void #t234 = self::Extension2|[]=(#t231, #t232, #t233) in #t233;
-  nullable2 = let final self::Class1? #t235 = n1 in #t235.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t236 = self::Extension1|get#nonNullable2(#t235{self::Class1}) in let final self::Class2? #t237 = nullable2 in let final self::Class2 #t238 = self::Extension2|+(self::Extension2|[](#t236, #t237), 1) in let final void #t239 = self::Extension2|[]=(#t236, #t237, #t238) in #t238;
-  let final self::Class1? #t240 = n1 in #t240.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t240{self::Class1}), nullable2), nullable2);
-  let final self::Class1? #t241 = n1 in #t241.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t241{self::Class1}), nullable2), nullable2, new self::Class2::•());
-  nullable2 = let final self::Class1? #t242 = n1 in #t242.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t243 = self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2) in let final self::Class2? #t244 = nullable2 in let final self::Class2 #t245 = new self::Class2::•() in let final void #t246 = self::Extension2|[]=(#t243, #t244, #t245) in #t245;
-  let final self::Class1? #t247 = n1 in #t247.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t248 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t247{self::Class1}), nullable2), nullable2) in #t248.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t248{self::Class2});
-  let final self::Class1? #t249 = n1 in #t249.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t250 = self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2) in let final self::Class2? #t251 = nullable2 in self::Extension2|[]=(#t250, #t251, self::Extension2|+(self::Extension2|[](#t250, #t251), 0));
-  nullable2 = let final self::Class1? #t252 = n1 in #t252.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t253 = self::Extension2|[](self::Extension1|get#nonNullable2(#t252{self::Class1}), nullable2) in let final self::Class2? #t254 = nullable2 in let final self::Class2 #t255 = self::Extension2|+(self::Extension2|[](#t253, #t254), 0) in let final void #t256 = self::Extension2|[]=(#t253, #t254, #t255) in #t255;
-  let final self::Class1? #t257 = n1 in #t257.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t258 = self::Extension2|[](self::Extension1|get#nonNullable2(#t257{self::Class1}), nullable2) in let final self::Class2? #t259 = nullable2 in self::Extension2|[]=(#t258, #t259, self::Extension2|+(self::Extension2|[](#t258, #t259), 1));
-  nullable2 = let final self::Class1? #t260 = n1 in #t260.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t261 = self::Extension2|[](self::Extension1|get#nonNullable2(#t260{self::Class1}), nullable2) in let final self::Class2? #t262 = nullable2 in let final self::Class2 #t263 = self::Extension2|[](#t261, #t262) in let final void #t264 = self::Extension2|[]=(#t261, #t262, self::Extension2|+(#t263, 1)) in #t263;
-  let final self::Class1? #t265 = n1 in #t265.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t266 = self::Extension2|[](self::Extension1|get#nonNullable2(#t265{self::Class1}), nullable2) in let final self::Class2? #t267 = nullable2 in let final self::Class2 #t268 = self::Extension2|+(self::Extension2|[](#t266, #t267), 1) in let final void #t269 = self::Extension2|[]=(#t266, #t267, #t268) in #t268;
-  nullable2 = let final self::Class1? #t270 = n1 in #t270.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t271 = self::Extension2|[](self::Extension1|get#nonNullable2(#t270{self::Class1}), nullable2) in let final self::Class2? #t272 = nullable2 in let final self::Class2 #t273 = self::Extension2|+(self::Extension2|[](#t271, #t272), 1) in let final void #t274 = self::Extension2|[]=(#t271, #t272, #t273) in #t273;
-  let final self::Class1? #t275 = n1 in #t275.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t276 = self::Extension1|[](#t275{self::Class1}, nullable1) in #t276.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](#t276{self::Class1}, nullable1);
-  let final self::Class1? #t277 = n1 in #t277.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(#t278{self::Class1}, nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t279 = n1 in #t279.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t281 = nullable1 in let final self::Class1 #t282 = new self::Class1::•() in let final void #t283 = self::Extension1|[]=(#t280{self::Class1}, #t281, #t282) in #t282;
-  let final self::Class1? #t284 = n1 in #t284.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t285 = self::Extension1|[](#t284{self::Class1}, nullable1) in #t285.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t286 = self::Extension1|[](#t285{self::Class1}, nullable1) in #t286.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t286{self::Class1});
-  nullable1 = let final self::Class1? #t287 = n1 in #t287.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t289 = self::Extension1|[](#t288{self::Class1}, nullable1) in #t289.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t289{self::Class1});
-  let final self::Class1? #t290 = n1 in #t290.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t292 = nullable1 in self::Extension1|[](#t291{self::Class1}, #t292).{core::Object::==}(null) ?{self::Class1?} self::Extension1|[]=(#t291{self::Class1}, #t292, nullable1) : null;
-  nullable1 = let final self::Class1? #t293 = n1 in #t293.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t294 = self::Extension1|[](#t293{self::Class1}, nullable1) in #t294.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t295 = nullable1 in let final self::Class1? #t296 = self::Extension1|[](#t294{self::Class1}, #t295) in #t296.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t297 = nullable1 in let final void #t298 = self::Extension1|[]=(#t294{self::Class1}, #t295, #t297) in #t297 : #t296{self::Class1};
-  let final self::Class3? #t299 = n3 in #t299.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t300 = self::Extension3|[](#t299{self::Class3}, nullable3) in #t300.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t301 = nullable2 in self::Extension2|[]=(#t300{self::Class2}, #t301, self::Extension2|+(self::Extension2|[](#t300{self::Class2}, #t301), 0));
-  nullable2 = let final self::Class3? #t302 = n3 in #t302.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t303 = self::Extension3|[](#t302{self::Class3}, nullable3) in #t303.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t304 = nullable2 in let final self::Class2 #t305 = self::Extension2|+(self::Extension2|[](#t303{self::Class2}, #t304), 0) in let final void #t306 = self::Extension2|[]=(#t303{self::Class2}, #t304, #t305) in #t305;
-  let final self::Class3? #t307 = n3 in #t307.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t308 = self::Extension3|[](#t307{self::Class3}, nullable3) in #t308.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t309 = nullable2 in self::Extension2|[]=(#t308{self::Class2}, #t309, self::Extension2|+(self::Extension2|[](#t308{self::Class2}, #t309), 1));
-  nullable2 = let final self::Class3? #t310 = n3 in #t310.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t311 = self::Extension3|[](#t310{self::Class3}, nullable3) in #t311.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t312 = nullable2 in let final self::Class2 #t313 = self::Extension2|[](#t311{self::Class2}, #t312) in let final void #t314 = self::Extension2|[]=(#t311{self::Class2}, #t312, self::Extension2|+(#t313, 1)) in #t313;
-  let final self::Class3? #t315 = n3 in #t315.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t316 = self::Extension3|[](#t315{self::Class3}, nullable3) in #t316.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t317 = nullable2 in let final self::Class2 #t318 = self::Extension2|+(self::Extension2|[](#t316{self::Class2}, #t317), 1) in let final void #t319 = self::Extension2|[]=(#t316{self::Class2}, #t317, #t318) in #t318;
-  nullable2 = let final self::Class3? #t320 = n3 in #t320.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t321 = self::Extension3|[](#t320{self::Class3}, nullable3) in #t321.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t322 = nullable2 in let final self::Class2 #t323 = self::Extension2|+(self::Extension2|[](#t321{self::Class2}, #t322), 1) in let final void #t324 = self::Extension2|[]=(#t321{self::Class2}, #t322, #t323) in #t323;
+  let final self::Class1? #t170 = n1 in #t170.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](#t170{self::Class1}, nullable1);
+  let final self::Class1? #t171 = n1 in #t171.{core::Object::==}(null) ?{void} null : self::Extension1|[]=(#t171{self::Class1}, nullable1, new self::Class1::•());
+  let final self::Class1? #t172 = n1 in #t172.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t173 = self::Extension1|[](#t172{self::Class1}, nullable1) in #t173.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t173{self::Class1});
+  let final self::Class1? #t174 = n1 in #t174.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t174{self::Class1}), nullable1);
+  let final self::Class1? #t175 = n1 in #t175.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t175{self::Class1}), nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t176 = n1 in #t176.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t177 = self::Extension1|get#nonNullable1(#t176{self::Class1}) in let final self::Class1? #t178 = nullable1 in let final self::Class1 #t179 = new self::Class1::•() in let final void #t180 = self::Extension1|[]=(#t177, #t178, #t179) in #t179;
+  let final self::Class1? #t181 = n1 in #t181.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t182 = self::Extension1|[](self::Extension1|get#nonNullable1(#t181{self::Class1}), nullable1) in #t182.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t182{self::Class1});
+  let final self::Class1? #t183 = n1 in #t183.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t184 = self::Extension1|get#nonNullable2(#t183{self::Class1}) in let final self::Class2? #t185 = nullable2 in self::Extension2|[]=(#t184, #t185, self::Extension2|+(self::Extension2|[](#t184, #t185), 0));
+  nullable2 = let final self::Class1? #t186 = n1 in #t186.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t187 = self::Extension1|get#nonNullable2(#t186{self::Class1}) in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = self::Extension2|+(self::Extension2|[](#t187, #t188), 0) in let final void #t190 = self::Extension2|[]=(#t187, #t188, #t189) in #t189;
+  let final self::Class1? #t191 = n1 in #t191.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in self::Extension1|[](#t191{self::Class1}, #t192).{core::Object::==}(null) ?{self::Class1?} self::Extension1|[]=(#t191{self::Class1}, #t192, nullable1) : null;
+  nullable1 = let final self::Class1? #t193 = n1 in #t193.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t194 = nullable1 in let final self::Class1? #t195 = self::Extension1|[](#t193{self::Class1}, #t194) in #t195.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t196 = nullable1 in let final void #t197 = self::Extension1|[]=(#t193{self::Class1}, #t194, #t196) in #t196 : #t195{self::Class1};
+  let final self::Class2? #t198 = n2 in #t198.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in self::Extension2|[]=(#t198{self::Class2}, #t199, self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0));
+  nullable2 = let final self::Class2? #t200 = n2 in #t200.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t201 = nullable2 in let final self::Class2 #t202 = self::Extension2|+(self::Extension2|[](#t200{self::Class2}, #t201), 0) in let final void #t203 = self::Extension2|[]=(#t200{self::Class2}, #t201, #t202) in #t202;
+  let final self::Class2? #t204 = n2 in #t204.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in self::Extension2|[]=(#t204{self::Class2}, #t205, self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0));
+  nullable2 = let final self::Class2? #t206 = n2 in #t206.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t207 = nullable2 in let final self::Class2 #t208 = self::Extension2|+(self::Extension2|[](#t206{self::Class2}, #t207), 0) in let final void #t209 = self::Extension2|[]=(#t206{self::Class2}, #t207, #t208) in #t208;
+  let final self::Class2? #t210 = n2 in #t210.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(self::Extension2|[](#t210{self::Class2}, #t211), 1));
+  nullable2 = let final self::Class2? #t212 = n2 in #t212.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t213 = nullable2 in let final self::Class2 #t214 = self::Extension2|[](#t212{self::Class2}, #t213) in let final void #t215 = self::Extension2|[]=(#t212{self::Class2}, #t213, self::Extension2|+(#t214, 1)) in #t214;
+  let final self::Class2? #t216 = n2 in #t216.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in let final self::Class2 #t218 = self::Extension2|+(self::Extension2|[](#t216{self::Class2}, #t217), 1) in let final void #t219 = self::Extension2|[]=(#t216{self::Class2}, #t217, #t218) in #t218;
+  nullable2 = let final self::Class2? #t220 = n2 in #t220.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t221 = nullable2 in let final self::Class2 #t222 = self::Extension2|+(self::Extension2|[](#t220{self::Class2}, #t221), 1) in let final void #t223 = self::Extension2|[]=(#t220{self::Class2}, #t221, #t222) in #t222;
+  let final self::Class1? #t224 = n1 in #t224.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t225 = self::Extension1|get#nonNullable2(#t224{self::Class1}) in let final self::Class2? #t226 = nullable2 in self::Extension2|[]=(#t225, #t226, self::Extension2|+(self::Extension2|[](#t225, #t226), 1));
+  nullable2 = let final self::Class1? #t227 = n1 in #t227.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t228 = self::Extension1|get#nonNullable2(#t227{self::Class1}) in let final self::Class2? #t229 = nullable2 in let final self::Class2 #t230 = self::Extension2|[](#t228, #t229) in let final void #t231 = self::Extension2|[]=(#t228, #t229, self::Extension2|+(#t230, 1)) in #t230;
+  let final self::Class1? #t232 = n1 in #t232.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t233 = self::Extension1|get#nonNullable2(#t232{self::Class1}) in let final self::Class2? #t234 = nullable2 in let final self::Class2 #t235 = self::Extension2|+(self::Extension2|[](#t233, #t234), 1) in let final void #t236 = self::Extension2|[]=(#t233, #t234, #t235) in #t235;
+  nullable2 = let final self::Class1? #t237 = n1 in #t237.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t238 = self::Extension1|get#nonNullable2(#t237{self::Class1}) in let final self::Class2? #t239 = nullable2 in let final self::Class2 #t240 = self::Extension2|+(self::Extension2|[](#t238, #t239), 1) in let final void #t241 = self::Extension2|[]=(#t238, #t239, #t240) in #t240;
+  let final self::Class1? #t242 = n1 in #t242.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2), nullable2);
+  let final self::Class1? #t243 = n1 in #t243.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t243{self::Class1}), nullable2), nullable2, new self::Class2::•());
+  nullable2 = let final self::Class1? #t244 = n1 in #t244.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t245 = self::Extension2|[](self::Extension1|get#nonNullable2(#t244{self::Class1}), nullable2) in let final self::Class2? #t246 = nullable2 in let final self::Class2 #t247 = new self::Class2::•() in let final void #t248 = self::Extension2|[]=(#t245, #t246, #t247) in #t247;
+  let final self::Class1? #t249 = n1 in #t249.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t250 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2), nullable2) in #t250.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t250{self::Class2});
+  let final self::Class1? #t251 = n1 in #t251.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t252 = self::Extension2|[](self::Extension1|get#nonNullable2(#t251{self::Class1}), nullable2) in let final self::Class2? #t253 = nullable2 in self::Extension2|[]=(#t252, #t253, self::Extension2|+(self::Extension2|[](#t252, #t253), 0));
+  nullable2 = let final self::Class1? #t254 = n1 in #t254.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t255 = self::Extension2|[](self::Extension1|get#nonNullable2(#t254{self::Class1}), nullable2) in let final self::Class2? #t256 = nullable2 in let final self::Class2 #t257 = self::Extension2|+(self::Extension2|[](#t255, #t256), 0) in let final void #t258 = self::Extension2|[]=(#t255, #t256, #t257) in #t257;
+  let final self::Class1? #t259 = n1 in #t259.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t260 = self::Extension2|[](self::Extension1|get#nonNullable2(#t259{self::Class1}), nullable2) in let final self::Class2? #t261 = nullable2 in self::Extension2|[]=(#t260, #t261, self::Extension2|+(self::Extension2|[](#t260, #t261), 1));
+  nullable2 = let final self::Class1? #t262 = n1 in #t262.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t263 = self::Extension2|[](self::Extension1|get#nonNullable2(#t262{self::Class1}), nullable2) in let final self::Class2? #t264 = nullable2 in let final self::Class2 #t265 = self::Extension2|[](#t263, #t264) in let final void #t266 = self::Extension2|[]=(#t263, #t264, self::Extension2|+(#t265, 1)) in #t265;
+  let final self::Class1? #t267 = n1 in #t267.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t268 = self::Extension2|[](self::Extension1|get#nonNullable2(#t267{self::Class1}), nullable2) in let final self::Class2? #t269 = nullable2 in let final self::Class2 #t270 = self::Extension2|+(self::Extension2|[](#t268, #t269), 1) in let final void #t271 = self::Extension2|[]=(#t268, #t269, #t270) in #t270;
+  nullable2 = let final self::Class1? #t272 = n1 in #t272.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t273 = self::Extension2|[](self::Extension1|get#nonNullable2(#t272{self::Class1}), nullable2) in let final self::Class2? #t274 = nullable2 in let final self::Class2 #t275 = self::Extension2|+(self::Extension2|[](#t273, #t274), 1) in let final void #t276 = self::Extension2|[]=(#t273, #t274, #t275) in #t275;
+  let final self::Class1? #t277 = n1 in #t277.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](#t278{self::Class1}, nullable1);
+  let final self::Class1? #t279 = n1 in #t279.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(#t280{self::Class1}, nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t281 = n1 in #t281.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t282 = self::Extension1|[](#t281{self::Class1}, nullable1) in #t282.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t283 = nullable1 in let final self::Class1 #t284 = new self::Class1::•() in let final void #t285 = self::Extension1|[]=(#t282{self::Class1}, #t283, #t284) in #t284;
+  let final self::Class1? #t286 = n1 in #t286.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t287 = self::Extension1|[](#t286{self::Class1}, nullable1) in #t287.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t288{self::Class1});
+  nullable1 = let final self::Class1? #t289 = n1 in #t289.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t290 = self::Extension1|[](#t289{self::Class1}, nullable1) in #t290.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t291{self::Class1});
+  let final self::Class1? #t292 = n1 in #t292.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t293 = self::Extension1|[](#t292{self::Class1}, nullable1) in #t293.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t294 = nullable1 in self::Extension1|[](#t293{self::Class1}, #t294).{core::Object::==}(null) ?{self::Class1?} self::Extension1|[]=(#t293{self::Class1}, #t294, nullable1) : null;
+  nullable1 = let final self::Class1? #t295 = n1 in #t295.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t296 = self::Extension1|[](#t295{self::Class1}, nullable1) in #t296.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t297 = nullable1 in let final self::Class1? #t298 = self::Extension1|[](#t296{self::Class1}, #t297) in #t298.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t299 = nullable1 in let final void #t300 = self::Extension1|[]=(#t296{self::Class1}, #t297, #t299) in #t299 : #t298{self::Class1};
+  let final self::Class3? #t301 = n3 in #t301.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t302 = self::Extension3|[](#t301{self::Class3}, nullable3) in #t302.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t303 = nullable2 in self::Extension2|[]=(#t302{self::Class2}, #t303, self::Extension2|+(self::Extension2|[](#t302{self::Class2}, #t303), 0));
+  nullable2 = let final self::Class3? #t304 = n3 in #t304.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t305 = self::Extension3|[](#t304{self::Class3}, nullable3) in #t305.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t306 = nullable2 in let final self::Class2 #t307 = self::Extension2|+(self::Extension2|[](#t305{self::Class2}, #t306), 0) in let final void #t308 = self::Extension2|[]=(#t305{self::Class2}, #t306, #t307) in #t307;
+  let final self::Class3? #t309 = n3 in #t309.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t310 = self::Extension3|[](#t309{self::Class3}, nullable3) in #t310.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t311 = nullable2 in self::Extension2|[]=(#t310{self::Class2}, #t311, self::Extension2|+(self::Extension2|[](#t310{self::Class2}, #t311), 1));
+  nullable2 = let final self::Class3? #t312 = n3 in #t312.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t313 = self::Extension3|[](#t312{self::Class3}, nullable3) in #t313.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t314 = nullable2 in let final self::Class2 #t315 = self::Extension2|[](#t313{self::Class2}, #t314) in let final void #t316 = self::Extension2|[]=(#t313{self::Class2}, #t314, self::Extension2|+(#t315, 1)) in #t315;
+  let final self::Class3? #t317 = n3 in #t317.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t318 = self::Extension3|[](#t317{self::Class3}, nullable3) in #t318.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t319 = nullable2 in let final self::Class2 #t320 = self::Extension2|+(self::Extension2|[](#t318{self::Class2}, #t319), 1) in let final void #t321 = self::Extension2|[]=(#t318{self::Class2}, #t319, #t320) in #t320;
+  nullable2 = let final self::Class3? #t322 = n3 in #t322.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t323 = self::Extension3|[](#t322{self::Class3}, nullable3) in #t323.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t324 = nullable2 in let final self::Class2 #t325 = self::Extension2|+(self::Extension2|[](#t323{self::Class2}, #t324), 1) in let final void #t326 = self::Extension2|[]=(#t323{self::Class2}, #t324, #t325) in #t325;
 }
 static method operatorAccess(self::Class1? n1, self::Class2? n2) → void {
   self::Class2? nullable2 = n2;
-  self::throws(() → self::Class1? => self::Extension1|+(let final self::Class1? #t325 = n1 in #t325.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t325{self::Class1}), 0));
-  self::throws(() → self::Class1? => self::Extension1|unary-(let final self::Class1? #t326 = n1 in #t326.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t326{self::Class1})));
-  let final self::Class2? #t327 = n2 in #t327.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t327{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t327{self::Class2}), 0));
-  nullable2 = let final self::Class2? #t328 = n2 in #t328.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t329 = self::Extension2|+(self::Extension2|get#nonNullable2(#t328{self::Class2}), 0) in let final void #t330 = self::Extension2|set#nonNullable2(#t328{self::Class2}, #t329) in #t329;
-  let final self::Class2? #t331 = n2 in #t331.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t332 = self::Extension2|get#nonNullable2(#t331{self::Class2}) in self::Extension2|set#nonNullable2(#t332, self::Extension2|+(self::Extension2|get#nonNullable2(#t332), 0));
-  nullable2 = let final self::Class2? #t333 = n2 in #t333.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t334 = self::Extension2|get#nonNullable2(#t333{self::Class2}) in let final self::Class2 #t335 = self::Extension2|+(self::Extension2|get#nonNullable2(#t334), 0) in let final void #t336 = self::Extension2|set#nonNullable2(#t334, #t335) in #t335;
-  let final self::Class2? #t337 = n2 in #t337.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t337{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t337{self::Class2}), 1));
-  nullable2 = let final self::Class2? #t338 = n2 in #t338.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t339 = self::Extension2|get#nonNullable2(#t338{self::Class2}) in let final self::Class2 #t340 = let final self::Class2 #t341 = self::Extension2|+(#t339, 1) in let final void #t342 = self::Extension2|set#nonNullable2(#t338{self::Class2}, #t341) in #t341 in #t339;
-  let final self::Class2? #t343 = n2 in #t343.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t344 = self::Extension2|+(self::Extension2|get#nonNullable2(#t343{self::Class2}), 1) in let final void #t345 = self::Extension2|set#nonNullable2(#t343{self::Class2}, #t344) in #t344;
-  nullable2 = let final self::Class2? #t346 = n2 in #t346.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t347 = self::Extension2|+(self::Extension2|get#nonNullable2(#t346{self::Class2}), 1) in let final void #t348 = self::Extension2|set#nonNullable2(#t346{self::Class2}, #t347) in #t347;
+  self::throws(() → self::Class1? => let final<BottomType> #t327 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:244:45: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
+  throws(() => Extension1(n1)?.nonNullable1 + 0);
+                                            ^" in self::Extension1|+(let final self::Class1? #t328 = n1 in #t328.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t328{self::Class1}), 0));
+  self::throws(() → self::Class1? => let final<BottomType> #t329 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:245:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
+  throws(() => -Extension1(n1)?.nonNullable1);
+               ^" in self::Extension1|unary-(let final self::Class1? #t330 = n1 in #t330.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t330{self::Class1})));
+  let final self::Class2? #t331 = n2 in #t331.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t331{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t331{self::Class2}), 0));
+  nullable2 = let final self::Class2? #t332 = n2 in #t332.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t333 = self::Extension2|+(self::Extension2|get#nonNullable2(#t332{self::Class2}), 0) in let final void #t334 = self::Extension2|set#nonNullable2(#t332{self::Class2}, #t333) in #t333;
+  let final self::Class2? #t335 = n2 in #t335.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t336 = self::Extension2|get#nonNullable2(#t335{self::Class2}) in self::Extension2|set#nonNullable2(#t336, self::Extension2|+(self::Extension2|get#nonNullable2(#t336), 0));
+  nullable2 = let final self::Class2? #t337 = n2 in #t337.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t338 = self::Extension2|get#nonNullable2(#t337{self::Class2}) in let final self::Class2 #t339 = self::Extension2|+(self::Extension2|get#nonNullable2(#t338), 0) in let final void #t340 = self::Extension2|set#nonNullable2(#t338, #t339) in #t339;
+  let final self::Class2? #t341 = n2 in #t341.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t341{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t341{self::Class2}), 1));
+  nullable2 = let final self::Class2? #t342 = n2 in #t342.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t343 = self::Extension2|get#nonNullable2(#t342{self::Class2}) in let final self::Class2 #t344 = let final self::Class2 #t345 = self::Extension2|+(#t343, 1) in let final void #t346 = self::Extension2|set#nonNullable2(#t342{self::Class2}, #t345) in #t345 in #t343;
+  let final self::Class2? #t347 = n2 in #t347.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t348 = self::Extension2|+(self::Extension2|get#nonNullable2(#t347{self::Class2}), 1) in let final void #t349 = self::Extension2|set#nonNullable2(#t347{self::Class2}, #t348) in #t348;
+  nullable2 = let final self::Class2? #t350 = n2 in #t350.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t351 = self::Extension2|+(self::Extension2|get#nonNullable2(#t350{self::Class2}), 1) in let final void #t352 = self::Extension2|set#nonNullable2(#t350{self::Class2}, #t351) in #t351;
 }
 static method ifNull(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t349 = n1 in #t349.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t349).{core::Object::==}(null) ?{self::Class1} self::Extension1|set#nullable1(#t349, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t350 = n1 in #t350.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t351 = self::Extension1|get#nullable1(#t350) in #t351.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t352 = n1{self::Class1} in let final void #t353 = self::Extension1|set#nullable1(#t350, #t352) in #t352 : #t351{self::Class1};
-  let final self::Class1? #t354 = n1 in #t354.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t355 = self::Extension1|get#nonNullable1(#t354{self::Class1}) in self::Extension1|get#nullable1(#t355{self::Class1}).{core::Object::==}(null) ?{self::Class1} self::Extension1|set#nullable1(#t355{self::Class1}, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t356 = n1 in #t356.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t357 = self::Extension1|get#nonNullable1(#t356{self::Class1}) in let final self::Class1? #t358 = self::Extension1|get#nullable1(#t357{self::Class1}) in #t358.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t359 = n1{self::Class1} in let final void #t360 = self::Extension1|set#nullable1(#t357{self::Class1}, #t359) in #t359 : #t358{self::Class1};
-  let final self::Class1? #t361 = n1 in #t361.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t362 = self::Extension1|get#nonNullable1(#t361{self::Class1}) in let final self::Class1 #t363 = n1{self::Class1} in self::Extension1|[](#t362, #t363).{core::Object::==}(null) ?{self::Class1} self::Extension1|[]=(#t362, #t363, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t364 = n1 in #t364.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t365 = self::Extension1|get#nonNullable1(#t364{self::Class1}) in let final self::Class1 #t366 = n1{self::Class1} in let final self::Class1? #t367 = self::Extension1|[](#t365, #t366) in #t367.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t368 = n1{self::Class1} in let final void #t369 = self::Extension1|[]=(#t365, #t366, #t368) in #t368 : #t367{self::Class1};
+  let final self::Class1? #t353 = n1 in #t353.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t353).{core::Object::==}(null) ?{self::Class1} self::Extension1|set#nullable1(#t353, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t354 = n1 in #t354.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t355 = self::Extension1|get#nullable1(#t354) in #t355.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t356 = n1{self::Class1} in let final void #t357 = self::Extension1|set#nullable1(#t354, #t356) in #t356 : #t355{self::Class1};
+  let final self::Class1? #t358 = n1 in #t358.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t359 = self::Extension1|get#nonNullable1(#t358{self::Class1}) in self::Extension1|get#nullable1(#t359{self::Class1}).{core::Object::==}(null) ?{self::Class1} self::Extension1|set#nullable1(#t359{self::Class1}, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t360 = n1 in #t360.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t361 = self::Extension1|get#nonNullable1(#t360{self::Class1}) in let final self::Class1? #t362 = self::Extension1|get#nullable1(#t361{self::Class1}) in #t362.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t363 = n1{self::Class1} in let final void #t364 = self::Extension1|set#nullable1(#t361{self::Class1}, #t363) in #t363 : #t362{self::Class1};
+  let final self::Class1? #t365 = n1 in #t365.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t366 = self::Extension1|get#nonNullable1(#t365{self::Class1}) in let final self::Class1 #t367 = n1{self::Class1} in self::Extension1|[](#t366, #t367).{core::Object::==}(null) ?{self::Class1} self::Extension1|[]=(#t366, #t367, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t368 = n1 in #t368.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t369 = self::Extension1|get#nonNullable1(#t368{self::Class1}) in let final self::Class1 #t370 = n1{self::Class1} in let final self::Class1? #t371 = self::Extension1|[](#t369, #t370) in #t371.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t372 = n1{self::Class1} in let final void #t373 = self::Extension1|[]=(#t369, #t370, #t372) in #t372 : #t371{self::Class1};
 }
 static method throws(() → void f) → void {
   try {
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.weak.transformed.expect
index 559dca6..ad010f7 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart.weak.transformed.expect
@@ -2,24 +2,24 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:93:59: Warning: Property 'nullable1' is accessed on 'Class1?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:93:59: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
 //  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
 // Try accessing using ?. instead.
 //   throws(() => (Extension1(n1)?.nullable1 = new Class1()).nullable1);
 //                                                           ^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:94:55: Warning: Property 'nullable1' is accessed on 'Class1?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:94:55: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
 //  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
 // Try accessing using ?. instead.
 //   throws(() => (Extension1(n1)?.nonNullable1Method()).nullable1);
 //                                                       ^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:244:45: Warning: Operator '+' is called on 'Class1?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:244:45: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
 //  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
 //   throws(() => Extension1(n1)?.nonNullable1 + 0);
 //                                             ^
 //
-// pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:245:16: Warning: Operator 'unary-' is called on 'Class1?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:245:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
 //  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
 //   throws(() => -Extension1(n1)?.nonNullable1);
 //                ^
@@ -139,139 +139,153 @@
   let final self::Class1? #t13 = n1 in #t13.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t14 = self::Extension1|get#nullable1(#t13{self::Class1}) in #t14.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t14{self::Class1}, new self::Class1::•());
   let final self::Class1? #t15 = n1 in #t15.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t16 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t15{self::Class1})) in #t16.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t16{self::Class1}, new self::Class1::•());
   let final self::Class1? #t17 = let final self::Class1? #t18 = n1 in #t18.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t18{self::Class1}) in #t17.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t17{self::Class1});
-  self::throws(() → self::Class1? => self::Extension1|get#nullable1(let final self::Class1? #t19 = n1 in #t19.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t20 = new self::Class1::•() in let final void #t21 = self::Extension1|set#nullable1(#t19{self::Class1}, #t20) in #t20));
-  self::throws(() → self::Class1? => self::Extension1|get#nullable1(let final self::Class1? #t22 = n1 in #t22.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t22{self::Class1})));
-  nullable1 = let final self::Class1? #t23 = n1 in #t23.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t24 = new self::Class1::•() in let final void #t25 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t23{self::Class1}), #t24) in #t24;
-  nullable1 = let final self::Class1? #t26 = n1 in #t26.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t27 = self::Extension1|get#nullable1(#t26{self::Class1}) in #t27.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t28 = new self::Class1::•() in let final void #t29 = self::Extension1|set#nullable1(#t27{self::Class1}, #t28) in #t28;
-  nullable1 = let final self::Class1? #t30 = n1 in #t30.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t31 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t30{self::Class1})) in #t31.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t32 = new self::Class1::•() in let final void #t33 = self::Extension1|set#nullable1(#t31{self::Class1}, #t32) in #t32;
-  let final self::Class1? #t34 = n1 in #t34.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t35 = self::Extension1|get#nullable1(#t34{self::Class1}) in #t35.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t35{self::Class1});
-  let final self::Class1? #t36 = n1 in #t36.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t36{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t37 = n1 in #t37.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t38 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t39 = self::Extension1|set#nullable1(#t37{self::Class1}, #t38) in #t38;
-  let final self::Class1? #t40 = n1 in #t40.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t40{self::Class1}, let final self::Class1 #t41 = new self::Class1::•() in let final void #t42 = self::Extension1|set#nullable1(new self::Class1::•(), #t41) in #t41);
-  nullable1 = let final self::Class1? #t43 = n1 in #t43.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t44 = let final self::Class1 #t45 = new self::Class1::•() in let final void #t46 = self::Extension1|set#nullable1(new self::Class1::•(), #t45) in #t45 in let final void #t47 = self::Extension1|set#nullable1(#t43{self::Class1}, #t44) in #t44;
-  let final self::Class1? #t48 = n1 in #t48.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t48{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t49 = n1 in #t49.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t50 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t51 = self::Extension1|set#nullable1(#t49{self::Class1}, #t50) in #t50;
-  let final self::Class1? #t52 = n1 in #t52.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t52{self::Class1}));
-  let final self::Class1? #t53 = n1 in #t53.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t53{self::Class1}), new self::Class1::•());
-  let final self::Class1? #t54 = n1 in #t54.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t54{self::Class1}));
-  let final self::Class1? #t55 = n1 in #t55.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t55{self::Class1})));
-  let final self::Class1? #t56 = n1 in #t56.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t56{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t57 = n1 in #t57.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t58 = new self::Class1::•() in let final void #t59 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})), #t58) in #t58;
-  let final self::Class1? #t60 = n1 in #t60.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t61 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t60{self::Class1})) in #t61.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t61{self::Class1});
-  let final self::Class1? #t62 = n1 in #t62.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t62{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t63 = n1 in #t63.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t64 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t65 = self::Extension1|set#nullable1(#t63{self::Class1}, #t64) in #t64;
-  let final self::Class1? #t66 = n1 in #t66.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t66{self::Class1}, let final self::Class1 #t67 = new self::Class1::•() in let final void #t68 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t67) in #t67);
-  nullable1 = let final self::Class1? #t69 = n1 in #t69.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t70 = let final self::Class1 #t71 = new self::Class1::•() in let final void #t72 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t71) in #t71 in let final void #t73 = self::Extension1|set#nullable1(#t69{self::Class1}, #t70) in #t70;
-  let final self::Class1? #t74 = n1 in #t74.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t74{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t75 = n1 in #t75.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t76 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t77 = self::Extension1|set#nullable1(#t75{self::Class1}, #t76) in #t76;
-  let final self::Class1? #t78 = n1 in #t78.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t78{self::Class1})));
-  let final self::Class1? #t79 = n1 in #t79.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t79{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t80 = n1 in #t80.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
-  let final self::Class1? #t81 = n1 in #t81.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t81{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t82 = n1 in #t82.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t83 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t84 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t82{self::Class1}), #t83) in #t83;
-  let final self::Class1? #t85 = n1 in #t85.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t85{self::Class1}), let final self::Class1 #t86 = new self::Class1::•() in let final void #t87 = self::Extension1|set#nullable1(new self::Class1::•(), #t86) in #t86);
-  nullable1 = let final self::Class1? #t88 = n1 in #t88.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t89 = let final self::Class1 #t90 = new self::Class1::•() in let final void #t91 = self::Extension1|set#nullable1(new self::Class1::•(), #t90) in #t90 in let final void #t92 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t88{self::Class1}), #t89) in #t89;
-  let final self::Class1? #t93 = n1 in #t93.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t93{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t94 = n1 in #t94.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t95 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t96 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t94{self::Class1}), #t95) in #t95;
-  let final self::Class1? #t97 = n1 in #t97.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t97{self::Class1}, let final self::Class1? #t98 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t99 = self::Extension1|set#nullable1(new self::Class1::•(), #t98) in #t98);
-  nullable1 = let final self::Class1? #t100 = n1 in #t100.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t101 = let final self::Class1? #t102 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t103 = self::Extension1|set#nullable1(new self::Class1::•(), #t102) in #t102 in let final void #t104 = self::Extension1|set#nullable1(#t100{self::Class1}, #t101) in #t101;
-  let final self::Class1? #t105 = n1 in #t105.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t105{self::Class1}, let final self::Class1 #t106 = let final self::Class1 #t107 = new self::Class1::•() in let final void #t108 = self::Extension1|set#nullable1(new self::Class1::•(), #t107) in #t107 in let final void #t109 = self::Extension1|set#nullable1(new self::Class1::•(), #t106) in #t106);
-  nullable1 = let final self::Class1? #t110 = n1 in #t110.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t111 = let final self::Class1 #t112 = let final self::Class1 #t113 = new self::Class1::•() in let final void #t114 = self::Extension1|set#nullable1(new self::Class1::•(), #t113) in #t113 in let final void #t115 = self::Extension1|set#nullable1(new self::Class1::•(), #t112) in #t112 in let final void #t116 = self::Extension1|set#nullable1(#t110{self::Class1}, #t111) in #t111;
-  let final self::Class1? #t117 = n1 in #t117.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t117{self::Class1}, let final self::Class1 #t118 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t119 = self::Extension1|set#nullable1(new self::Class1::•(), #t118) in #t118);
-  nullable1 = let final self::Class1? #t120 = n1 in #t120.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t121 = let final self::Class1 #t122 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t123 = self::Extension1|set#nullable1(new self::Class1::•(), #t122) in #t122 in let final void #t124 = self::Extension1|set#nullable1(#t120{self::Class1}, #t121) in #t121;
-  let final self::Class1? #t125 = n1 in #t125.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t125{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t126 = n1 in #t126.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t127 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t128 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t126{self::Class1}), #t127) in #t127;
-  let final self::Class1? #t129 = n1 in #t129.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t129{self::Class1}), let final self::Class1 #t130 = new self::Class1::•() in let final void #t131 = self::Extension1|set#nullable1(new self::Class1::•(), #t130) in #t130);
-  nullable1 = let final self::Class1? #t132 = n1 in #t132.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t133 = let final self::Class1 #t134 = new self::Class1::•() in let final void #t135 = self::Extension1|set#nullable1(new self::Class1::•(), #t134) in #t134 in let final void #t136 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t132{self::Class1}), #t133) in #t133;
-  let final self::Class1? #t137 = n1 in #t137.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t137{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t138 = n1 in #t138.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t139 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t140 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t138{self::Class1}), #t139) in #t139;
-  let final self::Class1? #t141 = n1 in #t141.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t141{self::Class1})));
-  let final self::Class1? #t142 = n1 in #t142.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t142{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t143 = n1 in #t143.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t144 = new self::Class1::•() in let final void #t145 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})), #t144) in #t144;
-  let final self::Class1? #t146 = n1 in #t146.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t146{self::Class1})));
-  let final self::Class1? #t147 = n1 in #t147.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t147{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t148 = n1 in #t148.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t149 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t150 = self::Extension1|set#nullable1(#t148{self::Class1}, #t149) in #t149;
-  let final self::Class1? #t151 = n1 in #t151.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t151{self::Class1}, let final self::Class1 #t152 = new self::Class1::•() in let final void #t153 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t152) in #t152);
-  nullable1 = let final self::Class1? #t154 = n1 in #t154.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t155 = let final self::Class1 #t156 = new self::Class1::•() in let final void #t157 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t156) in #t156 in let final void #t158 = self::Extension1|set#nullable1(#t154{self::Class1}, #t155) in #t155;
-  let final self::Class1? #t159 = n1 in #t159.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t159{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t160 = n1 in #t160.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t161 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t162 = self::Extension1|set#nullable1(#t160{self::Class1}, #t161) in #t161;
-  let final self::Class1? #t163 = n1 in #t163.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t163{self::Class1})));
-  let final self::Class1? #t164 = n1 in #t164.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t164{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t165 = n1 in #t165.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
-  let final self::Class1? #t166 = n1 in #t166.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t167 = self::Extension1|nonNullable1Method(#t166{self::Class1}) in #t167.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t167{self::Class1});
+  self::throws(() → self::Class1? => let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:93:59: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
+Try accessing using ?. instead.
+  throws(() => (Extension1(n1)?.nullable1 = new Class1()).nullable1);
+                                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t20 = n1 in #t20.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t21 = new self::Class1::•() in let final void #t22 = self::Extension1|set#nullable1(#t20{self::Class1}, #t21) in #t21));
+  self::throws(() → self::Class1? => let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:94:55: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
+Try accessing using ?. instead.
+  throws(() => (Extension1(n1)?.nonNullable1Method()).nullable1);
+                                                      ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t24 = n1 in #t24.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t24{self::Class1})));
+  nullable1 = let final self::Class1? #t25 = n1 in #t25.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t26 = new self::Class1::•() in let final void #t27 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t25{self::Class1}), #t26) in #t26;
+  nullable1 = let final self::Class1? #t28 = n1 in #t28.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t29 = self::Extension1|get#nullable1(#t28{self::Class1}) in #t29.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t30 = new self::Class1::•() in let final void #t31 = self::Extension1|set#nullable1(#t29{self::Class1}, #t30) in #t30;
+  nullable1 = let final self::Class1? #t32 = n1 in #t32.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t33 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t32{self::Class1})) in #t33.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t34 = new self::Class1::•() in let final void #t35 = self::Extension1|set#nullable1(#t33{self::Class1}, #t34) in #t34;
+  let final self::Class1? #t36 = n1 in #t36.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t37 = self::Extension1|get#nullable1(#t36{self::Class1}) in #t37.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t37{self::Class1});
+  let final self::Class1? #t38 = n1 in #t38.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t38{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t39 = n1 in #t39.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t40 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t41 = self::Extension1|set#nullable1(#t39{self::Class1}, #t40) in #t40;
+  let final self::Class1? #t42 = n1 in #t42.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t42{self::Class1}, let final self::Class1 #t43 = new self::Class1::•() in let final void #t44 = self::Extension1|set#nullable1(new self::Class1::•(), #t43) in #t43);
+  nullable1 = let final self::Class1? #t45 = n1 in #t45.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t46 = let final self::Class1 #t47 = new self::Class1::•() in let final void #t48 = self::Extension1|set#nullable1(new self::Class1::•(), #t47) in #t47 in let final void #t49 = self::Extension1|set#nullable1(#t45{self::Class1}, #t46) in #t46;
+  let final self::Class1? #t50 = n1 in #t50.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t50{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t51 = n1 in #t51.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t52 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t53 = self::Extension1|set#nullable1(#t51{self::Class1}, #t52) in #t52;
+  let final self::Class1? #t54 = n1 in #t54.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t54{self::Class1}));
+  let final self::Class1? #t55 = n1 in #t55.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t55{self::Class1}), new self::Class1::•());
+  let final self::Class1? #t56 = n1 in #t56.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t56{self::Class1}));
+  let final self::Class1? #t57 = n1 in #t57.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})));
+  let final self::Class1? #t58 = n1 in #t58.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t58{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t59 = n1 in #t59.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t60 = new self::Class1::•() in let final void #t61 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t59{self::Class1})), #t60) in #t60;
+  let final self::Class1? #t62 = n1 in #t62.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t63 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t62{self::Class1})) in #t63.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t63{self::Class1});
+  let final self::Class1? #t64 = n1 in #t64.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t64{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t65 = n1 in #t65.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t66 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t67 = self::Extension1|set#nullable1(#t65{self::Class1}, #t66) in #t66;
+  let final self::Class1? #t68 = n1 in #t68.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t68{self::Class1}, let final self::Class1 #t69 = new self::Class1::•() in let final void #t70 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t69) in #t69);
+  nullable1 = let final self::Class1? #t71 = n1 in #t71.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t72 = let final self::Class1 #t73 = new self::Class1::•() in let final void #t74 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t73) in #t73 in let final void #t75 = self::Extension1|set#nullable1(#t71{self::Class1}, #t72) in #t72;
+  let final self::Class1? #t76 = n1 in #t76.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t76{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t77 = n1 in #t77.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t78 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t79 = self::Extension1|set#nullable1(#t77{self::Class1}, #t78) in #t78;
+  let final self::Class1? #t80 = n1 in #t80.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
+  let final self::Class1? #t81 = n1 in #t81.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t81{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t82 = n1 in #t82.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t82{self::Class1})));
+  let final self::Class1? #t83 = n1 in #t83.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t83{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t84 = n1 in #t84.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t85 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t86 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t84{self::Class1}), #t85) in #t85;
+  let final self::Class1? #t87 = n1 in #t87.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t87{self::Class1}), let final self::Class1 #t88 = new self::Class1::•() in let final void #t89 = self::Extension1|set#nullable1(new self::Class1::•(), #t88) in #t88);
+  nullable1 = let final self::Class1? #t90 = n1 in #t90.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t91 = let final self::Class1 #t92 = new self::Class1::•() in let final void #t93 = self::Extension1|set#nullable1(new self::Class1::•(), #t92) in #t92 in let final void #t94 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t90{self::Class1}), #t91) in #t91;
+  let final self::Class1? #t95 = n1 in #t95.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t95{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t96 = n1 in #t96.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t97 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t98 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t96{self::Class1}), #t97) in #t97;
+  let final self::Class1? #t99 = n1 in #t99.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t99{self::Class1}, let final self::Class1? #t100 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t101 = self::Extension1|set#nullable1(new self::Class1::•(), #t100) in #t100);
+  nullable1 = let final self::Class1? #t102 = n1 in #t102.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t103 = let final self::Class1? #t104 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t105 = self::Extension1|set#nullable1(new self::Class1::•(), #t104) in #t104 in let final void #t106 = self::Extension1|set#nullable1(#t102{self::Class1}, #t103) in #t103;
+  let final self::Class1? #t107 = n1 in #t107.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t107{self::Class1}, let final self::Class1 #t108 = let final self::Class1 #t109 = new self::Class1::•() in let final void #t110 = self::Extension1|set#nullable1(new self::Class1::•(), #t109) in #t109 in let final void #t111 = self::Extension1|set#nullable1(new self::Class1::•(), #t108) in #t108);
+  nullable1 = let final self::Class1? #t112 = n1 in #t112.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t113 = let final self::Class1 #t114 = let final self::Class1 #t115 = new self::Class1::•() in let final void #t116 = self::Extension1|set#nullable1(new self::Class1::•(), #t115) in #t115 in let final void #t117 = self::Extension1|set#nullable1(new self::Class1::•(), #t114) in #t114 in let final void #t118 = self::Extension1|set#nullable1(#t112{self::Class1}, #t113) in #t113;
+  let final self::Class1? #t119 = n1 in #t119.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t119{self::Class1}, let final self::Class1 #t120 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t121 = self::Extension1|set#nullable1(new self::Class1::•(), #t120) in #t120);
+  nullable1 = let final self::Class1? #t122 = n1 in #t122.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t123 = let final self::Class1 #t124 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t125 = self::Extension1|set#nullable1(new self::Class1::•(), #t124) in #t124 in let final void #t126 = self::Extension1|set#nullable1(#t122{self::Class1}, #t123) in #t123;
+  let final self::Class1? #t127 = n1 in #t127.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t127{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t128 = n1 in #t128.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t129 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t130 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t128{self::Class1}), #t129) in #t129;
+  let final self::Class1? #t131 = n1 in #t131.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t131{self::Class1}), let final self::Class1 #t132 = new self::Class1::•() in let final void #t133 = self::Extension1|set#nullable1(new self::Class1::•(), #t132) in #t132);
+  nullable1 = let final self::Class1? #t134 = n1 in #t134.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t135 = let final self::Class1 #t136 = new self::Class1::•() in let final void #t137 = self::Extension1|set#nullable1(new self::Class1::•(), #t136) in #t136 in let final void #t138 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t134{self::Class1}), #t135) in #t135;
+  let final self::Class1? #t139 = n1 in #t139.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t139{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t140 = n1 in #t140.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t141 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t142 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t140{self::Class1}), #t141) in #t141;
+  let final self::Class1? #t143 = n1 in #t143.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})));
+  let final self::Class1? #t144 = n1 in #t144.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t144{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t145 = n1 in #t145.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t146 = new self::Class1::•() in let final void #t147 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t145{self::Class1})), #t146) in #t146;
+  let final self::Class1? #t148 = n1 in #t148.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t148{self::Class1})));
+  let final self::Class1? #t149 = n1 in #t149.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t149{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t150 = n1 in #t150.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t151 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t152 = self::Extension1|set#nullable1(#t150{self::Class1}, #t151) in #t151;
+  let final self::Class1? #t153 = n1 in #t153.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t153{self::Class1}, let final self::Class1 #t154 = new self::Class1::•() in let final void #t155 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t154) in #t154);
+  nullable1 = let final self::Class1? #t156 = n1 in #t156.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t157 = let final self::Class1 #t158 = new self::Class1::•() in let final void #t159 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t158) in #t158 in let final void #t160 = self::Extension1|set#nullable1(#t156{self::Class1}, #t157) in #t157;
+  let final self::Class1? #t161 = n1 in #t161.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t161{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t162 = n1 in #t162.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t163 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t164 = self::Extension1|set#nullable1(#t162{self::Class1}, #t163) in #t163;
+  let final self::Class1? #t165 = n1 in #t165.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
+  let final self::Class1? #t166 = n1 in #t166.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t166{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t167 = n1 in #t167.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t167{self::Class1})));
+  let final self::Class1? #t168 = n1 in #t168.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t169 = self::Extension1|nonNullable1Method(#t168{self::Class1}) in #t169.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t169{self::Class1});
 }
 static method indexAccess(self::Class1? n1, self::Class2? n2, self::Class3? n3) → void {
   self::Class1? nullable1 = n1;
   self::Class2? nullable2 = n2;
   self::Class3? nullable3 = n3;
-  let final self::Class1? #t168 = n1 in #t168.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](#t168{self::Class1}, nullable1);
-  let final self::Class1? #t169 = n1 in #t169.{core::Object::==}(null) ?{void} null : self::Extension1|[]=(#t169{self::Class1}, nullable1, new self::Class1::•());
-  let final self::Class1? #t170 = n1 in #t170.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t171 = self::Extension1|[](#t170{self::Class1}, nullable1) in #t171.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t171{self::Class1});
-  let final self::Class1? #t172 = n1 in #t172.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t172{self::Class1}), nullable1);
-  let final self::Class1? #t173 = n1 in #t173.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t173{self::Class1}), nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t174 = n1 in #t174.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t175 = self::Extension1|get#nonNullable1(#t174{self::Class1}) in let final self::Class1? #t176 = nullable1 in let final self::Class1 #t177 = new self::Class1::•() in let final void #t178 = self::Extension1|[]=(#t175, #t176, #t177) in #t177;
-  let final self::Class1? #t179 = n1 in #t179.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t180 = self::Extension1|[](self::Extension1|get#nonNullable1(#t179{self::Class1}), nullable1) in #t180.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t180{self::Class1});
-  let final self::Class1? #t181 = n1 in #t181.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t182 = self::Extension1|get#nonNullable2(#t181{self::Class1}) in let final self::Class2? #t183 = nullable2 in self::Extension2|[]=(#t182, #t183, self::Extension2|+(self::Extension2|[](#t182, #t183), 0));
-  nullable2 = let final self::Class1? #t184 = n1 in #t184.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t185 = self::Extension1|get#nonNullable2(#t184{self::Class1}) in let final self::Class2? #t186 = nullable2 in let final self::Class2 #t187 = self::Extension2|+(self::Extension2|[](#t185, #t186), 0) in let final void #t188 = self::Extension2|[]=(#t185, #t186, #t187) in #t187;
-  let final self::Class1? #t189 = n1 in #t189.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t190 = nullable1 in self::Extension1|[](#t189{self::Class1}, #t190).{core::Object::==}(null) ?{self::Class1?} self::Extension1|[]=(#t189{self::Class1}, #t190, nullable1) : null;
-  nullable1 = let final self::Class1? #t191 = n1 in #t191.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in let final self::Class1? #t193 = self::Extension1|[](#t191{self::Class1}, #t192) in #t193.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t194 = nullable1 in let final void #t195 = self::Extension1|[]=(#t191{self::Class1}, #t192, #t194) in #t194 : #t193{self::Class1};
-  let final self::Class2? #t196 = n2 in #t196.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t197 = nullable2 in self::Extension2|[]=(#t196{self::Class2}, #t197, self::Extension2|+(self::Extension2|[](#t196{self::Class2}, #t197), 0));
-  nullable2 = let final self::Class2? #t198 = n2 in #t198.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in let final self::Class2 #t200 = self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0) in let final void #t201 = self::Extension2|[]=(#t198{self::Class2}, #t199, #t200) in #t200;
-  let final self::Class2? #t202 = n2 in #t202.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t203 = nullable2 in self::Extension2|[]=(#t202{self::Class2}, #t203, self::Extension2|+(self::Extension2|[](#t202{self::Class2}, #t203), 0));
-  nullable2 = let final self::Class2? #t204 = n2 in #t204.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in let final self::Class2 #t206 = self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0) in let final void #t207 = self::Extension2|[]=(#t204{self::Class2}, #t205, #t206) in #t206;
-  let final self::Class2? #t208 = n2 in #t208.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t209 = nullable2 in self::Extension2|[]=(#t208{self::Class2}, #t209, self::Extension2|+(self::Extension2|[](#t208{self::Class2}, #t209), 1));
-  nullable2 = let final self::Class2? #t210 = n2 in #t210.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in let final self::Class2 #t212 = self::Extension2|[](#t210{self::Class2}, #t211) in let final void #t213 = self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(#t212, 1)) in #t212;
-  let final self::Class2? #t214 = n2 in #t214.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t215 = nullable2 in let final self::Class2 #t216 = self::Extension2|+(self::Extension2|[](#t214{self::Class2}, #t215), 1) in let final void #t217 = self::Extension2|[]=(#t214{self::Class2}, #t215, #t216) in #t216;
-  nullable2 = let final self::Class2? #t218 = n2 in #t218.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t219 = nullable2 in let final self::Class2 #t220 = self::Extension2|+(self::Extension2|[](#t218{self::Class2}, #t219), 1) in let final void #t221 = self::Extension2|[]=(#t218{self::Class2}, #t219, #t220) in #t220;
-  let final self::Class1? #t222 = n1 in #t222.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t223 = self::Extension1|get#nonNullable2(#t222{self::Class1}) in let final self::Class2? #t224 = nullable2 in self::Extension2|[]=(#t223, #t224, self::Extension2|+(self::Extension2|[](#t223, #t224), 1));
-  nullable2 = let final self::Class1? #t225 = n1 in #t225.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t226 = self::Extension1|get#nonNullable2(#t225{self::Class1}) in let final self::Class2? #t227 = nullable2 in let final self::Class2 #t228 = self::Extension2|[](#t226, #t227) in let final void #t229 = self::Extension2|[]=(#t226, #t227, self::Extension2|+(#t228, 1)) in #t228;
-  let final self::Class1? #t230 = n1 in #t230.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t231 = self::Extension1|get#nonNullable2(#t230{self::Class1}) in let final self::Class2? #t232 = nullable2 in let final self::Class2 #t233 = self::Extension2|+(self::Extension2|[](#t231, #t232), 1) in let final void #t234 = self::Extension2|[]=(#t231, #t232, #t233) in #t233;
-  nullable2 = let final self::Class1? #t235 = n1 in #t235.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t236 = self::Extension1|get#nonNullable2(#t235{self::Class1}) in let final self::Class2? #t237 = nullable2 in let final self::Class2 #t238 = self::Extension2|+(self::Extension2|[](#t236, #t237), 1) in let final void #t239 = self::Extension2|[]=(#t236, #t237, #t238) in #t238;
-  let final self::Class1? #t240 = n1 in #t240.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t240{self::Class1}), nullable2), nullable2);
-  let final self::Class1? #t241 = n1 in #t241.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t241{self::Class1}), nullable2), nullable2, new self::Class2::•());
-  nullable2 = let final self::Class1? #t242 = n1 in #t242.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t243 = self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2) in let final self::Class2? #t244 = nullable2 in let final self::Class2 #t245 = new self::Class2::•() in let final void #t246 = self::Extension2|[]=(#t243, #t244, #t245) in #t245;
-  let final self::Class1? #t247 = n1 in #t247.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t248 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t247{self::Class1}), nullable2), nullable2) in #t248.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t248{self::Class2});
-  let final self::Class1? #t249 = n1 in #t249.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t250 = self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2) in let final self::Class2? #t251 = nullable2 in self::Extension2|[]=(#t250, #t251, self::Extension2|+(self::Extension2|[](#t250, #t251), 0));
-  nullable2 = let final self::Class1? #t252 = n1 in #t252.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t253 = self::Extension2|[](self::Extension1|get#nonNullable2(#t252{self::Class1}), nullable2) in let final self::Class2? #t254 = nullable2 in let final self::Class2 #t255 = self::Extension2|+(self::Extension2|[](#t253, #t254), 0) in let final void #t256 = self::Extension2|[]=(#t253, #t254, #t255) in #t255;
-  let final self::Class1? #t257 = n1 in #t257.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t258 = self::Extension2|[](self::Extension1|get#nonNullable2(#t257{self::Class1}), nullable2) in let final self::Class2? #t259 = nullable2 in self::Extension2|[]=(#t258, #t259, self::Extension2|+(self::Extension2|[](#t258, #t259), 1));
-  nullable2 = let final self::Class1? #t260 = n1 in #t260.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t261 = self::Extension2|[](self::Extension1|get#nonNullable2(#t260{self::Class1}), nullable2) in let final self::Class2? #t262 = nullable2 in let final self::Class2 #t263 = self::Extension2|[](#t261, #t262) in let final void #t264 = self::Extension2|[]=(#t261, #t262, self::Extension2|+(#t263, 1)) in #t263;
-  let final self::Class1? #t265 = n1 in #t265.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t266 = self::Extension2|[](self::Extension1|get#nonNullable2(#t265{self::Class1}), nullable2) in let final self::Class2? #t267 = nullable2 in let final self::Class2 #t268 = self::Extension2|+(self::Extension2|[](#t266, #t267), 1) in let final void #t269 = self::Extension2|[]=(#t266, #t267, #t268) in #t268;
-  nullable2 = let final self::Class1? #t270 = n1 in #t270.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t271 = self::Extension2|[](self::Extension1|get#nonNullable2(#t270{self::Class1}), nullable2) in let final self::Class2? #t272 = nullable2 in let final self::Class2 #t273 = self::Extension2|+(self::Extension2|[](#t271, #t272), 1) in let final void #t274 = self::Extension2|[]=(#t271, #t272, #t273) in #t273;
-  let final self::Class1? #t275 = n1 in #t275.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t276 = self::Extension1|[](#t275{self::Class1}, nullable1) in #t276.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](#t276{self::Class1}, nullable1);
-  let final self::Class1? #t277 = n1 in #t277.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(#t278{self::Class1}, nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t279 = n1 in #t279.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t281 = nullable1 in let final self::Class1 #t282 = new self::Class1::•() in let final void #t283 = self::Extension1|[]=(#t280{self::Class1}, #t281, #t282) in #t282;
-  let final self::Class1? #t284 = n1 in #t284.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t285 = self::Extension1|[](#t284{self::Class1}, nullable1) in #t285.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t286 = self::Extension1|[](#t285{self::Class1}, nullable1) in #t286.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t286{self::Class1});
-  nullable1 = let final self::Class1? #t287 = n1 in #t287.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t289 = self::Extension1|[](#t288{self::Class1}, nullable1) in #t289.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t289{self::Class1});
-  let final self::Class1? #t290 = n1 in #t290.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t292 = nullable1 in self::Extension1|[](#t291{self::Class1}, #t292).{core::Object::==}(null) ?{self::Class1?} self::Extension1|[]=(#t291{self::Class1}, #t292, nullable1) : null;
-  nullable1 = let final self::Class1? #t293 = n1 in #t293.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t294 = self::Extension1|[](#t293{self::Class1}, nullable1) in #t294.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t295 = nullable1 in let final self::Class1? #t296 = self::Extension1|[](#t294{self::Class1}, #t295) in #t296.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t297 = nullable1 in let final void #t298 = self::Extension1|[]=(#t294{self::Class1}, #t295, #t297) in #t297 : #t296{self::Class1};
-  let final self::Class3? #t299 = n3 in #t299.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t300 = self::Extension3|[](#t299{self::Class3}, nullable3) in #t300.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t301 = nullable2 in self::Extension2|[]=(#t300{self::Class2}, #t301, self::Extension2|+(self::Extension2|[](#t300{self::Class2}, #t301), 0));
-  nullable2 = let final self::Class3? #t302 = n3 in #t302.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t303 = self::Extension3|[](#t302{self::Class3}, nullable3) in #t303.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t304 = nullable2 in let final self::Class2 #t305 = self::Extension2|+(self::Extension2|[](#t303{self::Class2}, #t304), 0) in let final void #t306 = self::Extension2|[]=(#t303{self::Class2}, #t304, #t305) in #t305;
-  let final self::Class3? #t307 = n3 in #t307.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t308 = self::Extension3|[](#t307{self::Class3}, nullable3) in #t308.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t309 = nullable2 in self::Extension2|[]=(#t308{self::Class2}, #t309, self::Extension2|+(self::Extension2|[](#t308{self::Class2}, #t309), 1));
-  nullable2 = let final self::Class3? #t310 = n3 in #t310.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t311 = self::Extension3|[](#t310{self::Class3}, nullable3) in #t311.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t312 = nullable2 in let final self::Class2 #t313 = self::Extension2|[](#t311{self::Class2}, #t312) in let final void #t314 = self::Extension2|[]=(#t311{self::Class2}, #t312, self::Extension2|+(#t313, 1)) in #t313;
-  let final self::Class3? #t315 = n3 in #t315.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t316 = self::Extension3|[](#t315{self::Class3}, nullable3) in #t316.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t317 = nullable2 in let final self::Class2 #t318 = self::Extension2|+(self::Extension2|[](#t316{self::Class2}, #t317), 1) in let final void #t319 = self::Extension2|[]=(#t316{self::Class2}, #t317, #t318) in #t318;
-  nullable2 = let final self::Class3? #t320 = n3 in #t320.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t321 = self::Extension3|[](#t320{self::Class3}, nullable3) in #t321.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t322 = nullable2 in let final self::Class2 #t323 = self::Extension2|+(self::Extension2|[](#t321{self::Class2}, #t322), 1) in let final void #t324 = self::Extension2|[]=(#t321{self::Class2}, #t322, #t323) in #t323;
+  let final self::Class1? #t170 = n1 in #t170.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](#t170{self::Class1}, nullable1);
+  let final self::Class1? #t171 = n1 in #t171.{core::Object::==}(null) ?{void} null : self::Extension1|[]=(#t171{self::Class1}, nullable1, new self::Class1::•());
+  let final self::Class1? #t172 = n1 in #t172.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t173 = self::Extension1|[](#t172{self::Class1}, nullable1) in #t173.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t173{self::Class1});
+  let final self::Class1? #t174 = n1 in #t174.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t174{self::Class1}), nullable1);
+  let final self::Class1? #t175 = n1 in #t175.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t175{self::Class1}), nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t176 = n1 in #t176.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t177 = self::Extension1|get#nonNullable1(#t176{self::Class1}) in let final self::Class1? #t178 = nullable1 in let final self::Class1 #t179 = new self::Class1::•() in let final void #t180 = self::Extension1|[]=(#t177, #t178, #t179) in #t179;
+  let final self::Class1? #t181 = n1 in #t181.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t182 = self::Extension1|[](self::Extension1|get#nonNullable1(#t181{self::Class1}), nullable1) in #t182.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t182{self::Class1});
+  let final self::Class1? #t183 = n1 in #t183.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t184 = self::Extension1|get#nonNullable2(#t183{self::Class1}) in let final self::Class2? #t185 = nullable2 in self::Extension2|[]=(#t184, #t185, self::Extension2|+(self::Extension2|[](#t184, #t185), 0));
+  nullable2 = let final self::Class1? #t186 = n1 in #t186.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t187 = self::Extension1|get#nonNullable2(#t186{self::Class1}) in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = self::Extension2|+(self::Extension2|[](#t187, #t188), 0) in let final void #t190 = self::Extension2|[]=(#t187, #t188, #t189) in #t189;
+  let final self::Class1? #t191 = n1 in #t191.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in self::Extension1|[](#t191{self::Class1}, #t192).{core::Object::==}(null) ?{self::Class1?} self::Extension1|[]=(#t191{self::Class1}, #t192, nullable1) : null;
+  nullable1 = let final self::Class1? #t193 = n1 in #t193.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t194 = nullable1 in let final self::Class1? #t195 = self::Extension1|[](#t193{self::Class1}, #t194) in #t195.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t196 = nullable1 in let final void #t197 = self::Extension1|[]=(#t193{self::Class1}, #t194, #t196) in #t196 : #t195{self::Class1};
+  let final self::Class2? #t198 = n2 in #t198.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in self::Extension2|[]=(#t198{self::Class2}, #t199, self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0));
+  nullable2 = let final self::Class2? #t200 = n2 in #t200.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t201 = nullable2 in let final self::Class2 #t202 = self::Extension2|+(self::Extension2|[](#t200{self::Class2}, #t201), 0) in let final void #t203 = self::Extension2|[]=(#t200{self::Class2}, #t201, #t202) in #t202;
+  let final self::Class2? #t204 = n2 in #t204.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in self::Extension2|[]=(#t204{self::Class2}, #t205, self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0));
+  nullable2 = let final self::Class2? #t206 = n2 in #t206.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t207 = nullable2 in let final self::Class2 #t208 = self::Extension2|+(self::Extension2|[](#t206{self::Class2}, #t207), 0) in let final void #t209 = self::Extension2|[]=(#t206{self::Class2}, #t207, #t208) in #t208;
+  let final self::Class2? #t210 = n2 in #t210.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(self::Extension2|[](#t210{self::Class2}, #t211), 1));
+  nullable2 = let final self::Class2? #t212 = n2 in #t212.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t213 = nullable2 in let final self::Class2 #t214 = self::Extension2|[](#t212{self::Class2}, #t213) in let final void #t215 = self::Extension2|[]=(#t212{self::Class2}, #t213, self::Extension2|+(#t214, 1)) in #t214;
+  let final self::Class2? #t216 = n2 in #t216.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in let final self::Class2 #t218 = self::Extension2|+(self::Extension2|[](#t216{self::Class2}, #t217), 1) in let final void #t219 = self::Extension2|[]=(#t216{self::Class2}, #t217, #t218) in #t218;
+  nullable2 = let final self::Class2? #t220 = n2 in #t220.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t221 = nullable2 in let final self::Class2 #t222 = self::Extension2|+(self::Extension2|[](#t220{self::Class2}, #t221), 1) in let final void #t223 = self::Extension2|[]=(#t220{self::Class2}, #t221, #t222) in #t222;
+  let final self::Class1? #t224 = n1 in #t224.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t225 = self::Extension1|get#nonNullable2(#t224{self::Class1}) in let final self::Class2? #t226 = nullable2 in self::Extension2|[]=(#t225, #t226, self::Extension2|+(self::Extension2|[](#t225, #t226), 1));
+  nullable2 = let final self::Class1? #t227 = n1 in #t227.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t228 = self::Extension1|get#nonNullable2(#t227{self::Class1}) in let final self::Class2? #t229 = nullable2 in let final self::Class2 #t230 = self::Extension2|[](#t228, #t229) in let final void #t231 = self::Extension2|[]=(#t228, #t229, self::Extension2|+(#t230, 1)) in #t230;
+  let final self::Class1? #t232 = n1 in #t232.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t233 = self::Extension1|get#nonNullable2(#t232{self::Class1}) in let final self::Class2? #t234 = nullable2 in let final self::Class2 #t235 = self::Extension2|+(self::Extension2|[](#t233, #t234), 1) in let final void #t236 = self::Extension2|[]=(#t233, #t234, #t235) in #t235;
+  nullable2 = let final self::Class1? #t237 = n1 in #t237.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t238 = self::Extension1|get#nonNullable2(#t237{self::Class1}) in let final self::Class2? #t239 = nullable2 in let final self::Class2 #t240 = self::Extension2|+(self::Extension2|[](#t238, #t239), 1) in let final void #t241 = self::Extension2|[]=(#t238, #t239, #t240) in #t240;
+  let final self::Class1? #t242 = n1 in #t242.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2), nullable2);
+  let final self::Class1? #t243 = n1 in #t243.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t243{self::Class1}), nullable2), nullable2, new self::Class2::•());
+  nullable2 = let final self::Class1? #t244 = n1 in #t244.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t245 = self::Extension2|[](self::Extension1|get#nonNullable2(#t244{self::Class1}), nullable2) in let final self::Class2? #t246 = nullable2 in let final self::Class2 #t247 = new self::Class2::•() in let final void #t248 = self::Extension2|[]=(#t245, #t246, #t247) in #t247;
+  let final self::Class1? #t249 = n1 in #t249.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t250 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2), nullable2) in #t250.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t250{self::Class2});
+  let final self::Class1? #t251 = n1 in #t251.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t252 = self::Extension2|[](self::Extension1|get#nonNullable2(#t251{self::Class1}), nullable2) in let final self::Class2? #t253 = nullable2 in self::Extension2|[]=(#t252, #t253, self::Extension2|+(self::Extension2|[](#t252, #t253), 0));
+  nullable2 = let final self::Class1? #t254 = n1 in #t254.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t255 = self::Extension2|[](self::Extension1|get#nonNullable2(#t254{self::Class1}), nullable2) in let final self::Class2? #t256 = nullable2 in let final self::Class2 #t257 = self::Extension2|+(self::Extension2|[](#t255, #t256), 0) in let final void #t258 = self::Extension2|[]=(#t255, #t256, #t257) in #t257;
+  let final self::Class1? #t259 = n1 in #t259.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t260 = self::Extension2|[](self::Extension1|get#nonNullable2(#t259{self::Class1}), nullable2) in let final self::Class2? #t261 = nullable2 in self::Extension2|[]=(#t260, #t261, self::Extension2|+(self::Extension2|[](#t260, #t261), 1));
+  nullable2 = let final self::Class1? #t262 = n1 in #t262.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t263 = self::Extension2|[](self::Extension1|get#nonNullable2(#t262{self::Class1}), nullable2) in let final self::Class2? #t264 = nullable2 in let final self::Class2 #t265 = self::Extension2|[](#t263, #t264) in let final void #t266 = self::Extension2|[]=(#t263, #t264, self::Extension2|+(#t265, 1)) in #t265;
+  let final self::Class1? #t267 = n1 in #t267.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t268 = self::Extension2|[](self::Extension1|get#nonNullable2(#t267{self::Class1}), nullable2) in let final self::Class2? #t269 = nullable2 in let final self::Class2 #t270 = self::Extension2|+(self::Extension2|[](#t268, #t269), 1) in let final void #t271 = self::Extension2|[]=(#t268, #t269, #t270) in #t270;
+  nullable2 = let final self::Class1? #t272 = n1 in #t272.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t273 = self::Extension2|[](self::Extension1|get#nonNullable2(#t272{self::Class1}), nullable2) in let final self::Class2? #t274 = nullable2 in let final self::Class2 #t275 = self::Extension2|+(self::Extension2|[](#t273, #t274), 1) in let final void #t276 = self::Extension2|[]=(#t273, #t274, #t275) in #t275;
+  let final self::Class1? #t277 = n1 in #t277.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](#t278{self::Class1}, nullable1);
+  let final self::Class1? #t279 = n1 in #t279.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(#t280{self::Class1}, nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t281 = n1 in #t281.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t282 = self::Extension1|[](#t281{self::Class1}, nullable1) in #t282.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t283 = nullable1 in let final self::Class1 #t284 = new self::Class1::•() in let final void #t285 = self::Extension1|[]=(#t282{self::Class1}, #t283, #t284) in #t284;
+  let final self::Class1? #t286 = n1 in #t286.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t287 = self::Extension1|[](#t286{self::Class1}, nullable1) in #t287.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t288{self::Class1});
+  nullable1 = let final self::Class1? #t289 = n1 in #t289.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t290 = self::Extension1|[](#t289{self::Class1}, nullable1) in #t290.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t291{self::Class1});
+  let final self::Class1? #t292 = n1 in #t292.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t293 = self::Extension1|[](#t292{self::Class1}, nullable1) in #t293.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t294 = nullable1 in self::Extension1|[](#t293{self::Class1}, #t294).{core::Object::==}(null) ?{self::Class1?} self::Extension1|[]=(#t293{self::Class1}, #t294, nullable1) : null;
+  nullable1 = let final self::Class1? #t295 = n1 in #t295.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t296 = self::Extension1|[](#t295{self::Class1}, nullable1) in #t296.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t297 = nullable1 in let final self::Class1? #t298 = self::Extension1|[](#t296{self::Class1}, #t297) in #t298.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t299 = nullable1 in let final void #t300 = self::Extension1|[]=(#t296{self::Class1}, #t297, #t299) in #t299 : #t298{self::Class1};
+  let final self::Class3? #t301 = n3 in #t301.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t302 = self::Extension3|[](#t301{self::Class3}, nullable3) in #t302.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t303 = nullable2 in self::Extension2|[]=(#t302{self::Class2}, #t303, self::Extension2|+(self::Extension2|[](#t302{self::Class2}, #t303), 0));
+  nullable2 = let final self::Class3? #t304 = n3 in #t304.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t305 = self::Extension3|[](#t304{self::Class3}, nullable3) in #t305.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t306 = nullable2 in let final self::Class2 #t307 = self::Extension2|+(self::Extension2|[](#t305{self::Class2}, #t306), 0) in let final void #t308 = self::Extension2|[]=(#t305{self::Class2}, #t306, #t307) in #t307;
+  let final self::Class3? #t309 = n3 in #t309.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t310 = self::Extension3|[](#t309{self::Class3}, nullable3) in #t310.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t311 = nullable2 in self::Extension2|[]=(#t310{self::Class2}, #t311, self::Extension2|+(self::Extension2|[](#t310{self::Class2}, #t311), 1));
+  nullable2 = let final self::Class3? #t312 = n3 in #t312.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t313 = self::Extension3|[](#t312{self::Class3}, nullable3) in #t313.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t314 = nullable2 in let final self::Class2 #t315 = self::Extension2|[](#t313{self::Class2}, #t314) in let final void #t316 = self::Extension2|[]=(#t313{self::Class2}, #t314, self::Extension2|+(#t315, 1)) in #t315;
+  let final self::Class3? #t317 = n3 in #t317.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t318 = self::Extension3|[](#t317{self::Class3}, nullable3) in #t318.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t319 = nullable2 in let final self::Class2 #t320 = self::Extension2|+(self::Extension2|[](#t318{self::Class2}, #t319), 1) in let final void #t321 = self::Extension2|[]=(#t318{self::Class2}, #t319, #t320) in #t320;
+  nullable2 = let final self::Class3? #t322 = n3 in #t322.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t323 = self::Extension3|[](#t322{self::Class3}, nullable3) in #t323.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t324 = nullable2 in let final self::Class2 #t325 = self::Extension2|+(self::Extension2|[](#t323{self::Class2}, #t324), 1) in let final void #t326 = self::Extension2|[]=(#t323{self::Class2}, #t324, #t325) in #t325;
 }
 static method operatorAccess(self::Class1? n1, self::Class2? n2) → void {
   self::Class2? nullable2 = n2;
-  self::throws(() → self::Class1? => self::Extension1|+(let final self::Class1? #t325 = n1 in #t325.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t325{self::Class1}), 0));
-  self::throws(() → self::Class1? => self::Extension1|unary-(let final self::Class1? #t326 = n1 in #t326.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t326{self::Class1})));
-  let final self::Class2? #t327 = n2 in #t327.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t327{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t327{self::Class2}), 0));
-  nullable2 = let final self::Class2? #t328 = n2 in #t328.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t329 = self::Extension2|+(self::Extension2|get#nonNullable2(#t328{self::Class2}), 0) in let final void #t330 = self::Extension2|set#nonNullable2(#t328{self::Class2}, #t329) in #t329;
-  let final self::Class2? #t331 = n2 in #t331.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t332 = self::Extension2|get#nonNullable2(#t331{self::Class2}) in self::Extension2|set#nonNullable2(#t332, self::Extension2|+(self::Extension2|get#nonNullable2(#t332), 0));
-  nullable2 = let final self::Class2? #t333 = n2 in #t333.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t334 = self::Extension2|get#nonNullable2(#t333{self::Class2}) in let final self::Class2 #t335 = self::Extension2|+(self::Extension2|get#nonNullable2(#t334), 0) in let final void #t336 = self::Extension2|set#nonNullable2(#t334, #t335) in #t335;
-  let final self::Class2? #t337 = n2 in #t337.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t337{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t337{self::Class2}), 1));
-  nullable2 = let final self::Class2? #t338 = n2 in #t338.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t339 = self::Extension2|get#nonNullable2(#t338{self::Class2}) in let final self::Class2 #t340 = let final self::Class2 #t341 = self::Extension2|+(#t339, 1) in let final void #t342 = self::Extension2|set#nonNullable2(#t338{self::Class2}, #t341) in #t341 in #t339;
-  let final self::Class2? #t343 = n2 in #t343.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t344 = self::Extension2|+(self::Extension2|get#nonNullable2(#t343{self::Class2}), 1) in let final void #t345 = self::Extension2|set#nonNullable2(#t343{self::Class2}, #t344) in #t344;
-  nullable2 = let final self::Class2? #t346 = n2 in #t346.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t347 = self::Extension2|+(self::Extension2|get#nonNullable2(#t346{self::Class2}), 1) in let final void #t348 = self::Extension2|set#nonNullable2(#t346{self::Class2}, #t347) in #t347;
+  self::throws(() → self::Class1? => let final<BottomType> #t327 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:244:45: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
+  throws(() => Extension1(n1)?.nonNullable1 + 0);
+                                            ^" in self::Extension1|+(let final self::Class1? #t328 = n1 in #t328.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t328{self::Class1}), 0));
+  self::throws(() → self::Class1? => let final<BottomType> #t329 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart:245:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_explicit_extension.dart'.
+  throws(() => -Extension1(n1)?.nonNullable1);
+               ^" in self::Extension1|unary-(let final self::Class1? #t330 = n1 in #t330.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t330{self::Class1})));
+  let final self::Class2? #t331 = n2 in #t331.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t331{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t331{self::Class2}), 0));
+  nullable2 = let final self::Class2? #t332 = n2 in #t332.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t333 = self::Extension2|+(self::Extension2|get#nonNullable2(#t332{self::Class2}), 0) in let final void #t334 = self::Extension2|set#nonNullable2(#t332{self::Class2}, #t333) in #t333;
+  let final self::Class2? #t335 = n2 in #t335.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t336 = self::Extension2|get#nonNullable2(#t335{self::Class2}) in self::Extension2|set#nonNullable2(#t336, self::Extension2|+(self::Extension2|get#nonNullable2(#t336), 0));
+  nullable2 = let final self::Class2? #t337 = n2 in #t337.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t338 = self::Extension2|get#nonNullable2(#t337{self::Class2}) in let final self::Class2 #t339 = self::Extension2|+(self::Extension2|get#nonNullable2(#t338), 0) in let final void #t340 = self::Extension2|set#nonNullable2(#t338, #t339) in #t339;
+  let final self::Class2? #t341 = n2 in #t341.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t341{self::Class2}, self::Extension2|+(self::Extension2|get#nonNullable2(#t341{self::Class2}), 1));
+  nullable2 = let final self::Class2? #t342 = n2 in #t342.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t343 = self::Extension2|get#nonNullable2(#t342{self::Class2}) in let final self::Class2 #t344 = let final self::Class2 #t345 = self::Extension2|+(#t343, 1) in let final void #t346 = self::Extension2|set#nonNullable2(#t342{self::Class2}, #t345) in #t345 in #t343;
+  let final self::Class2? #t347 = n2 in #t347.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t348 = self::Extension2|+(self::Extension2|get#nonNullable2(#t347{self::Class2}), 1) in let final void #t349 = self::Extension2|set#nonNullable2(#t347{self::Class2}, #t348) in #t348;
+  nullable2 = let final self::Class2? #t350 = n2 in #t350.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t351 = self::Extension2|+(self::Extension2|get#nonNullable2(#t350{self::Class2}), 1) in let final void #t352 = self::Extension2|set#nonNullable2(#t350{self::Class2}, #t351) in #t351;
 }
 static method ifNull(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t349 = n1 in #t349.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t349).{core::Object::==}(null) ?{self::Class1} self::Extension1|set#nullable1(#t349, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t350 = n1 in #t350.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t351 = self::Extension1|get#nullable1(#t350) in #t351.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t352 = n1{self::Class1} in let final void #t353 = self::Extension1|set#nullable1(#t350, #t352) in #t352 : #t351{self::Class1};
-  let final self::Class1? #t354 = n1 in #t354.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t355 = self::Extension1|get#nonNullable1(#t354{self::Class1}) in self::Extension1|get#nullable1(#t355{self::Class1}).{core::Object::==}(null) ?{self::Class1} self::Extension1|set#nullable1(#t355{self::Class1}, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t356 = n1 in #t356.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t357 = self::Extension1|get#nonNullable1(#t356{self::Class1}) in let final self::Class1? #t358 = self::Extension1|get#nullable1(#t357{self::Class1}) in #t358.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t359 = n1{self::Class1} in let final void #t360 = self::Extension1|set#nullable1(#t357{self::Class1}, #t359) in #t359 : #t358{self::Class1};
-  let final self::Class1? #t361 = n1 in #t361.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t362 = self::Extension1|get#nonNullable1(#t361{self::Class1}) in let final self::Class1 #t363 = n1{self::Class1} in self::Extension1|[](#t362, #t363).{core::Object::==}(null) ?{self::Class1} self::Extension1|[]=(#t362, #t363, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t364 = n1 in #t364.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t365 = self::Extension1|get#nonNullable1(#t364{self::Class1}) in let final self::Class1 #t366 = n1{self::Class1} in let final self::Class1? #t367 = self::Extension1|[](#t365, #t366) in #t367.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t368 = n1{self::Class1} in let final void #t369 = self::Extension1|[]=(#t365, #t366, #t368) in #t368 : #t367{self::Class1};
+  let final self::Class1? #t353 = n1 in #t353.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t353).{core::Object::==}(null) ?{self::Class1} self::Extension1|set#nullable1(#t353, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t354 = n1 in #t354.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t355 = self::Extension1|get#nullable1(#t354) in #t355.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t356 = n1{self::Class1} in let final void #t357 = self::Extension1|set#nullable1(#t354, #t356) in #t356 : #t355{self::Class1};
+  let final self::Class1? #t358 = n1 in #t358.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t359 = self::Extension1|get#nonNullable1(#t358{self::Class1}) in self::Extension1|get#nullable1(#t359{self::Class1}).{core::Object::==}(null) ?{self::Class1} self::Extension1|set#nullable1(#t359{self::Class1}, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t360 = n1 in #t360.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t361 = self::Extension1|get#nonNullable1(#t360{self::Class1}) in let final self::Class1? #t362 = self::Extension1|get#nullable1(#t361{self::Class1}) in #t362.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t363 = n1{self::Class1} in let final void #t364 = self::Extension1|set#nullable1(#t361{self::Class1}, #t363) in #t363 : #t362{self::Class1};
+  let final self::Class1? #t365 = n1 in #t365.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t366 = self::Extension1|get#nonNullable1(#t365{self::Class1}) in let final self::Class1 #t367 = n1{self::Class1} in self::Extension1|[](#t366, #t367).{core::Object::==}(null) ?{self::Class1} self::Extension1|[]=(#t366, #t367, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t368 = n1 in #t368.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t369 = self::Extension1|get#nonNullable1(#t368{self::Class1}) in let final self::Class1 #t370 = n1{self::Class1} in let final self::Class1? #t371 = self::Extension1|[](#t369, #t370) in #t371.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t372 = n1{self::Class1} in let final void #t373 = self::Extension1|[]=(#t369, #t370, #t372) in #t372 : #t371{self::Class1};
 }
 static method throws(() → void f) → void {
   try {
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.weak.expect b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.weak.expect
index dce5931..51808db 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.weak.expect
@@ -2,24 +2,24 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/null_shorting_extension.dart:93:47: Warning: Property 'nullable1' is accessed on 'Class1?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_shorting_extension.dart:93:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
 //  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
 // Try accessing using ?. instead.
 //   throws(() => (n1?.nullable1 = new Class1()).nullable1);
 //                                               ^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/null_shorting_extension.dart:94:43: Warning: Property 'nullable1' is accessed on 'Class1?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_shorting_extension.dart:94:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
 //  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
 // Try accessing using ?. instead.
 //   throws(() => (n1?.nonNullable1Method()).nullable1);
 //                                           ^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/null_shorting_extension.dart:226:33: Warning: Operator '+' is called on 'Class1?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_shorting_extension.dart:226:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
 //  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
 //   throws(() => n1?.nonNullable1 + 0);
 //                                 ^
 //
-// pkg/front_end/testcases/nnbd/null_shorting_extension.dart:227:16: Warning: Operator 'unary-' is called on 'Class1?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_shorting_extension.dart:227:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
 //  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
 //   throws(() => -n1?.nonNullable1);
 //                ^
@@ -139,139 +139,153 @@
   let final self::Class1? #t13 = n1 in #t13.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t14 = self::Extension1|get#nullable1(#t13{self::Class1}) in #t14.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t14{self::Class1}, new self::Class1::•());
   let final self::Class1? #t15 = n1 in #t15.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t16 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t15{self::Class1})) in #t16.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t16{self::Class1}, new self::Class1::•());
   let final self::Class1? #t17 = let final self::Class1? #t18 = n1 in #t18.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t18{self::Class1}) in #t17.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t17{self::Class1});
-  self::throws(() → self::Class1? => self::Extension1|get#nullable1(let final self::Class1? #t19 = n1 in #t19.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t20 = new self::Class1::•() in let final void #t21 = self::Extension1|set#nullable1(#t19{self::Class1}, #t20) in #t20));
-  self::throws(() → self::Class1? => self::Extension1|get#nullable1(let final self::Class1? #t22 = n1 in #t22.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t22{self::Class1})));
-  nullable1 = let final self::Class1? #t23 = n1 in #t23.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t24 = new self::Class1::•() in let final void #t25 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t23{self::Class1}), #t24) in #t24;
-  nullable1 = let final self::Class1? #t26 = n1 in #t26.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t27 = self::Extension1|get#nullable1(#t26{self::Class1}) in #t27.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t28 = new self::Class1::•() in let final void #t29 = self::Extension1|set#nullable1(#t27{self::Class1}, #t28) in #t28;
-  nullable1 = let final self::Class1? #t30 = n1 in #t30.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t31 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t30{self::Class1})) in #t31.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t32 = new self::Class1::•() in let final void #t33 = self::Extension1|set#nullable1(#t31{self::Class1}, #t32) in #t32;
-  let final self::Class1? #t34 = n1 in #t34.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t35 = self::Extension1|get#nullable1(#t34{self::Class1}) in #t35.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t35{self::Class1});
-  let final self::Class1? #t36 = n1 in #t36.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t36{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t37 = n1 in #t37.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t38 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t39 = self::Extension1|set#nullable1(#t37{self::Class1}, #t38) in #t38;
-  let final self::Class1? #t40 = n1 in #t40.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t40{self::Class1}, let final self::Class1 #t41 = new self::Class1::•() in let final void #t42 = self::Extension1|set#nullable1(new self::Class1::•(), #t41) in #t41);
-  nullable1 = let final self::Class1? #t43 = n1 in #t43.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t44 = let final self::Class1 #t45 = new self::Class1::•() in let final void #t46 = self::Extension1|set#nullable1(new self::Class1::•(), #t45) in #t45 in let final void #t47 = self::Extension1|set#nullable1(#t43{self::Class1}, #t44) in #t44;
-  let final self::Class1? #t48 = n1 in #t48.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t48{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t49 = n1 in #t49.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t50 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t51 = self::Extension1|set#nullable1(#t49{self::Class1}, #t50) in #t50;
-  let final self::Class1? #t52 = n1 in #t52.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t52{self::Class1}));
-  let final self::Class1? #t53 = n1 in #t53.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t53{self::Class1}), new self::Class1::•());
-  let final self::Class1? #t54 = n1 in #t54.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t54{self::Class1}));
-  let final self::Class1? #t55 = n1 in #t55.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t55{self::Class1})));
-  let final self::Class1? #t56 = n1 in #t56.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t56{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t57 = n1 in #t57.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t58 = new self::Class1::•() in let final void #t59 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})), #t58) in #t58;
-  let final self::Class1? #t60 = n1 in #t60.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t61 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t60{self::Class1})) in #t61.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t61{self::Class1});
-  let final self::Class1? #t62 = n1 in #t62.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t62{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t63 = n1 in #t63.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t64 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t65 = self::Extension1|set#nullable1(#t63{self::Class1}, #t64) in #t64;
-  let final self::Class1? #t66 = n1 in #t66.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t66{self::Class1}, let final self::Class1 #t67 = new self::Class1::•() in let final void #t68 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t67) in #t67);
-  nullable1 = let final self::Class1? #t69 = n1 in #t69.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t70 = let final self::Class1 #t71 = new self::Class1::•() in let final void #t72 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t71) in #t71 in let final void #t73 = self::Extension1|set#nullable1(#t69{self::Class1}, #t70) in #t70;
-  let final self::Class1? #t74 = n1 in #t74.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t74{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t75 = n1 in #t75.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t76 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t77 = self::Extension1|set#nullable1(#t75{self::Class1}, #t76) in #t76;
-  let final self::Class1? #t78 = n1 in #t78.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t78{self::Class1})));
-  let final self::Class1? #t79 = n1 in #t79.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t79{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t80 = n1 in #t80.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
-  let final self::Class1? #t81 = n1 in #t81.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t81{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t82 = n1 in #t82.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t83 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t84 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t82{self::Class1}), #t83) in #t83;
-  let final self::Class1? #t85 = n1 in #t85.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t85{self::Class1}), let final self::Class1 #t86 = new self::Class1::•() in let final void #t87 = self::Extension1|set#nullable1(new self::Class1::•(), #t86) in #t86);
-  nullable1 = let final self::Class1? #t88 = n1 in #t88.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t89 = let final self::Class1 #t90 = new self::Class1::•() in let final void #t91 = self::Extension1|set#nullable1(new self::Class1::•(), #t90) in #t90 in let final void #t92 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t88{self::Class1}), #t89) in #t89;
-  let final self::Class1? #t93 = n1 in #t93.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t93{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t94 = n1 in #t94.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t95 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t96 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t94{self::Class1}), #t95) in #t95;
-  let final self::Class1? #t97 = n1 in #t97.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t97{self::Class1}, let final self::Class1? #t98 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t99 = self::Extension1|set#nullable1(new self::Class1::•(), #t98) in #t98);
-  nullable1 = let final self::Class1? #t100 = n1 in #t100.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t101 = let final self::Class1? #t102 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t103 = self::Extension1|set#nullable1(new self::Class1::•(), #t102) in #t102 in let final void #t104 = self::Extension1|set#nullable1(#t100{self::Class1}, #t101) in #t101;
-  let final self::Class1? #t105 = n1 in #t105.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t105{self::Class1}, let final self::Class1 #t106 = let final self::Class1 #t107 = new self::Class1::•() in let final void #t108 = self::Extension1|set#nullable1(new self::Class1::•(), #t107) in #t107 in let final void #t109 = self::Extension1|set#nullable1(new self::Class1::•(), #t106) in #t106);
-  nullable1 = let final self::Class1? #t110 = n1 in #t110.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t111 = let final self::Class1 #t112 = let final self::Class1 #t113 = new self::Class1::•() in let final void #t114 = self::Extension1|set#nullable1(new self::Class1::•(), #t113) in #t113 in let final void #t115 = self::Extension1|set#nullable1(new self::Class1::•(), #t112) in #t112 in let final void #t116 = self::Extension1|set#nullable1(#t110{self::Class1}, #t111) in #t111;
-  let final self::Class1? #t117 = n1 in #t117.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t117{self::Class1}, let final self::Class1 #t118 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t119 = self::Extension1|set#nullable1(new self::Class1::•(), #t118) in #t118);
-  nullable1 = let final self::Class1? #t120 = n1 in #t120.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t121 = let final self::Class1 #t122 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t123 = self::Extension1|set#nullable1(new self::Class1::•(), #t122) in #t122 in let final void #t124 = self::Extension1|set#nullable1(#t120{self::Class1}, #t121) in #t121;
-  let final self::Class1? #t125 = n1 in #t125.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t125{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t126 = n1 in #t126.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t127 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t128 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t126{self::Class1}), #t127) in #t127;
-  let final self::Class1? #t129 = n1 in #t129.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t129{self::Class1}), let final self::Class1 #t130 = new self::Class1::•() in let final void #t131 = self::Extension1|set#nullable1(new self::Class1::•(), #t130) in #t130);
-  nullable1 = let final self::Class1? #t132 = n1 in #t132.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t133 = let final self::Class1 #t134 = new self::Class1::•() in let final void #t135 = self::Extension1|set#nullable1(new self::Class1::•(), #t134) in #t134 in let final void #t136 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t132{self::Class1}), #t133) in #t133;
-  let final self::Class1? #t137 = n1 in #t137.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t137{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t138 = n1 in #t138.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t139 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t140 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t138{self::Class1}), #t139) in #t139;
-  let final self::Class1? #t141 = n1 in #t141.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t141{self::Class1})));
-  let final self::Class1? #t142 = n1 in #t142.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t142{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t143 = n1 in #t143.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t144 = new self::Class1::•() in let final void #t145 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})), #t144) in #t144;
-  let final self::Class1? #t146 = n1 in #t146.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t146{self::Class1})));
-  let final self::Class1? #t147 = n1 in #t147.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t147{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t148 = n1 in #t148.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t149 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t150 = self::Extension1|set#nullable1(#t148{self::Class1}, #t149) in #t149;
-  let final self::Class1? #t151 = n1 in #t151.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t151{self::Class1}, let final self::Class1 #t152 = new self::Class1::•() in let final void #t153 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t152) in #t152);
-  nullable1 = let final self::Class1? #t154 = n1 in #t154.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t155 = let final self::Class1 #t156 = new self::Class1::•() in let final void #t157 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t156) in #t156 in let final void #t158 = self::Extension1|set#nullable1(#t154{self::Class1}, #t155) in #t155;
-  let final self::Class1? #t159 = n1 in #t159.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t159{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t160 = n1 in #t160.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t161 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t162 = self::Extension1|set#nullable1(#t160{self::Class1}, #t161) in #t161;
-  let final self::Class1? #t163 = n1 in #t163.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t163{self::Class1})));
-  let final self::Class1? #t164 = n1 in #t164.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t164{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t165 = n1 in #t165.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
-  let final self::Class1? #t166 = n1 in #t166.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t167 = self::Extension1|nonNullable1Method(#t166{self::Class1}) in #t167.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t167{self::Class1});
+  self::throws(() → self::Class1? => let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:93:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
+Try accessing using ?. instead.
+  throws(() => (n1?.nullable1 = new Class1()).nullable1);
+                                              ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t20 = n1 in #t20.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t21 = new self::Class1::•() in let final void #t22 = self::Extension1|set#nullable1(#t20{self::Class1}, #t21) in #t21));
+  self::throws(() → self::Class1? => let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:94:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
+Try accessing using ?. instead.
+  throws(() => (n1?.nonNullable1Method()).nullable1);
+                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t24 = n1 in #t24.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t24{self::Class1})));
+  nullable1 = let final self::Class1? #t25 = n1 in #t25.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t26 = new self::Class1::•() in let final void #t27 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t25{self::Class1}), #t26) in #t26;
+  nullable1 = let final self::Class1? #t28 = n1 in #t28.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t29 = self::Extension1|get#nullable1(#t28{self::Class1}) in #t29.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t30 = new self::Class1::•() in let final void #t31 = self::Extension1|set#nullable1(#t29{self::Class1}, #t30) in #t30;
+  nullable1 = let final self::Class1? #t32 = n1 in #t32.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t33 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t32{self::Class1})) in #t33.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t34 = new self::Class1::•() in let final void #t35 = self::Extension1|set#nullable1(#t33{self::Class1}, #t34) in #t34;
+  let final self::Class1? #t36 = n1 in #t36.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t37 = self::Extension1|get#nullable1(#t36{self::Class1}) in #t37.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t37{self::Class1});
+  let final self::Class1? #t38 = n1 in #t38.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t38{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t39 = n1 in #t39.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t40 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t41 = self::Extension1|set#nullable1(#t39{self::Class1}, #t40) in #t40;
+  let final self::Class1? #t42 = n1 in #t42.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t42{self::Class1}, let final self::Class1 #t43 = new self::Class1::•() in let final void #t44 = self::Extension1|set#nullable1(new self::Class1::•(), #t43) in #t43);
+  nullable1 = let final self::Class1? #t45 = n1 in #t45.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t46 = let final self::Class1 #t47 = new self::Class1::•() in let final void #t48 = self::Extension1|set#nullable1(new self::Class1::•(), #t47) in #t47 in let final void #t49 = self::Extension1|set#nullable1(#t45{self::Class1}, #t46) in #t46;
+  let final self::Class1? #t50 = n1 in #t50.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t50{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t51 = n1 in #t51.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t52 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t53 = self::Extension1|set#nullable1(#t51{self::Class1}, #t52) in #t52;
+  let final self::Class1? #t54 = n1 in #t54.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t54{self::Class1}));
+  let final self::Class1? #t55 = n1 in #t55.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t55{self::Class1}), new self::Class1::•());
+  let final self::Class1? #t56 = n1 in #t56.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t56{self::Class1}));
+  let final self::Class1? #t57 = n1 in #t57.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})));
+  let final self::Class1? #t58 = n1 in #t58.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t58{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t59 = n1 in #t59.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t60 = new self::Class1::•() in let final void #t61 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t59{self::Class1})), #t60) in #t60;
+  let final self::Class1? #t62 = n1 in #t62.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t63 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t62{self::Class1})) in #t63.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t63{self::Class1});
+  let final self::Class1? #t64 = n1 in #t64.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t64{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t65 = n1 in #t65.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t66 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t67 = self::Extension1|set#nullable1(#t65{self::Class1}, #t66) in #t66;
+  let final self::Class1? #t68 = n1 in #t68.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t68{self::Class1}, let final self::Class1 #t69 = new self::Class1::•() in let final void #t70 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t69) in #t69);
+  nullable1 = let final self::Class1? #t71 = n1 in #t71.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t72 = let final self::Class1 #t73 = new self::Class1::•() in let final void #t74 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t73) in #t73 in let final void #t75 = self::Extension1|set#nullable1(#t71{self::Class1}, #t72) in #t72;
+  let final self::Class1? #t76 = n1 in #t76.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t76{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t77 = n1 in #t77.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t78 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t79 = self::Extension1|set#nullable1(#t77{self::Class1}, #t78) in #t78;
+  let final self::Class1? #t80 = n1 in #t80.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
+  let final self::Class1? #t81 = n1 in #t81.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t81{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t82 = n1 in #t82.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t82{self::Class1})));
+  let final self::Class1? #t83 = n1 in #t83.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t83{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t84 = n1 in #t84.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t85 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t86 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t84{self::Class1}), #t85) in #t85;
+  let final self::Class1? #t87 = n1 in #t87.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t87{self::Class1}), let final self::Class1 #t88 = new self::Class1::•() in let final void #t89 = self::Extension1|set#nullable1(new self::Class1::•(), #t88) in #t88);
+  nullable1 = let final self::Class1? #t90 = n1 in #t90.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t91 = let final self::Class1 #t92 = new self::Class1::•() in let final void #t93 = self::Extension1|set#nullable1(new self::Class1::•(), #t92) in #t92 in let final void #t94 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t90{self::Class1}), #t91) in #t91;
+  let final self::Class1? #t95 = n1 in #t95.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t95{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t96 = n1 in #t96.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t97 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t98 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t96{self::Class1}), #t97) in #t97;
+  let final self::Class1? #t99 = n1 in #t99.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t99{self::Class1}, let final self::Class1? #t100 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t101 = self::Extension1|set#nullable1(new self::Class1::•(), #t100) in #t100);
+  nullable1 = let final self::Class1? #t102 = n1 in #t102.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t103 = let final self::Class1? #t104 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t105 = self::Extension1|set#nullable1(new self::Class1::•(), #t104) in #t104 in let final void #t106 = self::Extension1|set#nullable1(#t102{self::Class1}, #t103) in #t103;
+  let final self::Class1? #t107 = n1 in #t107.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t107{self::Class1}, let final self::Class1 #t108 = let final self::Class1 #t109 = new self::Class1::•() in let final void #t110 = self::Extension1|set#nullable1(new self::Class1::•(), #t109) in #t109 in let final void #t111 = self::Extension1|set#nullable1(new self::Class1::•(), #t108) in #t108);
+  nullable1 = let final self::Class1? #t112 = n1 in #t112.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t113 = let final self::Class1 #t114 = let final self::Class1 #t115 = new self::Class1::•() in let final void #t116 = self::Extension1|set#nullable1(new self::Class1::•(), #t115) in #t115 in let final void #t117 = self::Extension1|set#nullable1(new self::Class1::•(), #t114) in #t114 in let final void #t118 = self::Extension1|set#nullable1(#t112{self::Class1}, #t113) in #t113;
+  let final self::Class1? #t119 = n1 in #t119.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t119{self::Class1}, let final self::Class1 #t120 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t121 = self::Extension1|set#nullable1(new self::Class1::•(), #t120) in #t120);
+  nullable1 = let final self::Class1? #t122 = n1 in #t122.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t123 = let final self::Class1 #t124 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t125 = self::Extension1|set#nullable1(new self::Class1::•(), #t124) in #t124 in let final void #t126 = self::Extension1|set#nullable1(#t122{self::Class1}, #t123) in #t123;
+  let final self::Class1? #t127 = n1 in #t127.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t127{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t128 = n1 in #t128.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t129 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t130 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t128{self::Class1}), #t129) in #t129;
+  let final self::Class1? #t131 = n1 in #t131.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t131{self::Class1}), let final self::Class1 #t132 = new self::Class1::•() in let final void #t133 = self::Extension1|set#nullable1(new self::Class1::•(), #t132) in #t132);
+  nullable1 = let final self::Class1? #t134 = n1 in #t134.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t135 = let final self::Class1 #t136 = new self::Class1::•() in let final void #t137 = self::Extension1|set#nullable1(new self::Class1::•(), #t136) in #t136 in let final void #t138 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t134{self::Class1}), #t135) in #t135;
+  let final self::Class1? #t139 = n1 in #t139.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t139{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t140 = n1 in #t140.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t141 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t142 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t140{self::Class1}), #t141) in #t141;
+  let final self::Class1? #t143 = n1 in #t143.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})));
+  let final self::Class1? #t144 = n1 in #t144.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t144{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t145 = n1 in #t145.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t146 = new self::Class1::•() in let final void #t147 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t145{self::Class1})), #t146) in #t146;
+  let final self::Class1? #t148 = n1 in #t148.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t148{self::Class1})));
+  let final self::Class1? #t149 = n1 in #t149.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t149{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t150 = n1 in #t150.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t151 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t152 = self::Extension1|set#nullable1(#t150{self::Class1}, #t151) in #t151;
+  let final self::Class1? #t153 = n1 in #t153.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t153{self::Class1}, let final self::Class1 #t154 = new self::Class1::•() in let final void #t155 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t154) in #t154);
+  nullable1 = let final self::Class1? #t156 = n1 in #t156.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t157 = let final self::Class1 #t158 = new self::Class1::•() in let final void #t159 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t158) in #t158 in let final void #t160 = self::Extension1|set#nullable1(#t156{self::Class1}, #t157) in #t157;
+  let final self::Class1? #t161 = n1 in #t161.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t161{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t162 = n1 in #t162.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t163 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t164 = self::Extension1|set#nullable1(#t162{self::Class1}, #t163) in #t163;
+  let final self::Class1? #t165 = n1 in #t165.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
+  let final self::Class1? #t166 = n1 in #t166.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t166{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t167 = n1 in #t167.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t167{self::Class1})));
+  let final self::Class1? #t168 = n1 in #t168.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t169 = self::Extension1|nonNullable1Method(#t168{self::Class1}) in #t169.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t169{self::Class1});
 }
 static method indexAccess(self::Class1? n1, self::Class2? n2, self::Class3? n3) → void {
   self::Class1? nullable1 = n1;
   self::Class2? nullable2 = n2;
   self::Class3? nullable3 = n3;
-  let final self::Class1? #t168 = n1 in #t168.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](#t168{self::Class1}, nullable1);
-  let final self::Class1? #t169 = n1 in #t169.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(#t169{self::Class1}, nullable1, new self::Class1::•());
-  let final self::Class1? #t170 = n1 in #t170.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t171 = self::Extension1|[](#t170{self::Class1}, nullable1) in #t171.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t171{self::Class1});
-  let final self::Class1? #t172 = n1 in #t172.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t172{self::Class1}), nullable1);
-  let final self::Class1? #t173 = n1 in #t173.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t173{self::Class1}), nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t174 = n1 in #t174.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t175 = self::Extension1|get#nonNullable1(#t174{self::Class1}) in let final self::Class1? #t176 = nullable1 in let final self::Class1 #t177 = new self::Class1::•() in let final void #t178 = self::Extension1|[]=(#t175, #t176, #t177) in #t177;
-  let final self::Class1? #t179 = n1 in #t179.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t180 = self::Extension1|[](self::Extension1|get#nonNullable1(#t179{self::Class1}), nullable1) in #t180.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t180{self::Class1});
-  let final self::Class1? #t181 = n1 in #t181.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t182 = self::Extension1|get#nonNullable2(#t181{self::Class1}) in let final self::Class2? #t183 = nullable2 in self::Extension2|[]=(#t182, #t183, self::Extension2|+(self::Extension2|[](#t182, #t183), 0));
-  nullable2 = let final self::Class1? #t184 = n1 in #t184.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t185 = self::Extension1|get#nonNullable2(#t184{self::Class1}) in let final self::Class2? #t186 = nullable2 in let final self::Class2 #t187 = self::Extension2|+(self::Extension2|[](#t185, #t186), 0) in let final void #t188 = self::Extension2|[]=(#t185, #t186, #t187) in #t187;
-  let final self::Class1? #t189 = n1 in #t189.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t190 = nullable1 in self::Extension1|[](#t189{self::Class1}, #t190).{core::Object::==}(null) ?{self::Class1?} self::Extension1|[]=(#t189{self::Class1}, #t190, nullable1) : null;
-  nullable1 = let final self::Class1? #t191 = n1 in #t191.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in let final self::Class1? #t193 = self::Extension1|[](#t191{self::Class1}, #t192) in #t193.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t194 = nullable1 in let final void #t195 = self::Extension1|[]=(#t191{self::Class1}, #t192, #t194) in #t194 : #t193{self::Class1};
-  let final self::Class2? #t196 = n2 in #t196.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t197 = nullable2 in self::Extension2|[]=(#t196{self::Class2}, #t197, self::Extension2|+(self::Extension2|[](#t196{self::Class2}, #t197), 0));
-  nullable2 = let final self::Class2? #t198 = n2 in #t198.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in let final self::Class2 #t200 = self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0) in let final void #t201 = self::Extension2|[]=(#t198{self::Class2}, #t199, #t200) in #t200;
-  let final self::Class2? #t202 = n2 in #t202.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t203 = nullable2 in self::Extension2|[]=(#t202{self::Class2}, #t203, self::Extension2|+(self::Extension2|[](#t202{self::Class2}, #t203), 0));
-  nullable2 = let final self::Class2? #t204 = n2 in #t204.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in let final self::Class2 #t206 = self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0) in let final void #t207 = self::Extension2|[]=(#t204{self::Class2}, #t205, #t206) in #t206;
-  let final self::Class2? #t208 = n2 in #t208.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t209 = nullable2 in self::Extension2|[]=(#t208{self::Class2}, #t209, self::Extension2|+(self::Extension2|[](#t208{self::Class2}, #t209), 1));
-  nullable2 = let final self::Class2? #t210 = n2 in #t210.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in let final self::Class2 #t212 = self::Extension2|[](#t210{self::Class2}, #t211) in let final void #t213 = self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(#t212, 1)) in #t212;
-  let final self::Class2? #t214 = n2 in #t214.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t215 = nullable2 in let final self::Class2 #t216 = self::Extension2|+(self::Extension2|[](#t214{self::Class2}, #t215), 1) in let final void #t217 = self::Extension2|[]=(#t214{self::Class2}, #t215, #t216) in #t216;
-  nullable2 = let final self::Class2? #t218 = n2 in #t218.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t219 = nullable2 in let final self::Class2 #t220 = self::Extension2|+(self::Extension2|[](#t218{self::Class2}, #t219), 1) in let final void #t221 = self::Extension2|[]=(#t218{self::Class2}, #t219, #t220) in #t220;
-  let final self::Class1? #t222 = n1 in #t222.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t223 = self::Extension1|get#nonNullable2(#t222{self::Class1}) in let final self::Class2? #t224 = nullable2 in self::Extension2|[]=(#t223, #t224, self::Extension2|+(self::Extension2|[](#t223, #t224), 1));
-  nullable2 = let final self::Class1? #t225 = n1 in #t225.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t226 = self::Extension1|get#nonNullable2(#t225{self::Class1}) in let final self::Class2? #t227 = nullable2 in let final self::Class2 #t228 = self::Extension2|[](#t226, #t227) in let final void #t229 = self::Extension2|[]=(#t226, #t227, self::Extension2|+(#t228, 1)) in #t228;
-  let final self::Class1? #t230 = n1 in #t230.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t231 = self::Extension1|get#nonNullable2(#t230{self::Class1}) in let final self::Class2? #t232 = nullable2 in let final self::Class2 #t233 = self::Extension2|+(self::Extension2|[](#t231, #t232), 1) in let final void #t234 = self::Extension2|[]=(#t231, #t232, #t233) in #t233;
-  nullable2 = let final self::Class1? #t235 = n1 in #t235.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t236 = self::Extension1|get#nonNullable2(#t235{self::Class1}) in let final self::Class2? #t237 = nullable2 in let final self::Class2 #t238 = self::Extension2|+(self::Extension2|[](#t236, #t237), 1) in let final void #t239 = self::Extension2|[]=(#t236, #t237, #t238) in #t238;
-  let final self::Class1? #t240 = n1 in #t240.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t240{self::Class1}), nullable2), nullable2);
-  let final self::Class1? #t241 = n1 in #t241.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t241{self::Class1}), nullable2), nullable2, new self::Class2::•());
-  nullable2 = let final self::Class1? #t242 = n1 in #t242.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t243 = self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2) in let final self::Class2? #t244 = nullable2 in let final self::Class2 #t245 = new self::Class2::•() in let final void #t246 = self::Extension2|[]=(#t243, #t244, #t245) in #t245;
-  let final self::Class1? #t247 = n1 in #t247.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t248 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t247{self::Class1}), nullable2), nullable2) in #t248.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t248{self::Class2});
-  let final self::Class1? #t249 = n1 in #t249.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t250 = self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2) in let final self::Class2? #t251 = nullable2 in self::Extension2|[]=(#t250, #t251, self::Extension2|+(self::Extension2|[](#t250, #t251), 0));
-  nullable2 = let final self::Class1? #t252 = n1 in #t252.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t253 = self::Extension2|[](self::Extension1|get#nonNullable2(#t252{self::Class1}), nullable2) in let final self::Class2? #t254 = nullable2 in let final self::Class2 #t255 = self::Extension2|+(self::Extension2|[](#t253, #t254), 0) in let final void #t256 = self::Extension2|[]=(#t253, #t254, #t255) in #t255;
-  let final self::Class1? #t257 = n1 in #t257.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t258 = self::Extension2|[](self::Extension1|get#nonNullable2(#t257{self::Class1}), nullable2) in let final self::Class2? #t259 = nullable2 in self::Extension2|[]=(#t258, #t259, self::Extension2|+(self::Extension2|[](#t258, #t259), 1));
-  nullable2 = let final self::Class1? #t260 = n1 in #t260.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t261 = self::Extension2|[](self::Extension1|get#nonNullable2(#t260{self::Class1}), nullable2) in let final self::Class2? #t262 = nullable2 in let final self::Class2 #t263 = self::Extension2|[](#t261, #t262) in let final void #t264 = self::Extension2|[]=(#t261, #t262, self::Extension2|+(#t263, 1)) in #t263;
-  let final self::Class1? #t265 = n1 in #t265.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t266 = self::Extension2|[](self::Extension1|get#nonNullable2(#t265{self::Class1}), nullable2) in let final self::Class2? #t267 = nullable2 in let final self::Class2 #t268 = self::Extension2|+(self::Extension2|[](#t266, #t267), 1) in let final void #t269 = self::Extension2|[]=(#t266, #t267, #t268) in #t268;
-  nullable2 = let final self::Class1? #t270 = n1 in #t270.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t271 = self::Extension2|[](self::Extension1|get#nonNullable2(#t270{self::Class1}), nullable2) in let final self::Class2? #t272 = nullable2 in let final self::Class2 #t273 = self::Extension2|+(self::Extension2|[](#t271, #t272), 1) in let final void #t274 = self::Extension2|[]=(#t271, #t272, #t273) in #t273;
-  let final self::Class1? #t275 = n1 in #t275.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t276 = self::Extension1|[](#t275{self::Class1}, nullable1) in #t276.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](#t276{self::Class1}, nullable1);
-  let final self::Class1? #t277 = n1 in #t277.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(#t278{self::Class1}, nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t279 = n1 in #t279.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t281 = nullable1 in let final self::Class1 #t282 = new self::Class1::•() in let final void #t283 = self::Extension1|[]=(#t280{self::Class1}, #t281, #t282) in #t282;
-  let final self::Class1? #t284 = n1 in #t284.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t285 = self::Extension1|[](#t284{self::Class1}, nullable1) in #t285.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t286 = self::Extension1|[](#t285{self::Class1}, nullable1) in #t286.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t286{self::Class1});
-  nullable1 = let final self::Class1? #t287 = n1 in #t287.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t289 = self::Extension1|[](#t288{self::Class1}, nullable1) in #t289.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t289{self::Class1});
-  let final self::Class1? #t290 = n1 in #t290.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t292 = nullable1 in self::Extension1|[](#t291{self::Class1}, #t292).{core::Object::==}(null) ?{self::Class1?} self::Extension1|[]=(#t291{self::Class1}, #t292, nullable1) : null;
-  nullable1 = let final self::Class1? #t293 = n1 in #t293.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t294 = self::Extension1|[](#t293{self::Class1}, nullable1) in #t294.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t295 = nullable1 in let final self::Class1? #t296 = self::Extension1|[](#t294{self::Class1}, #t295) in #t296.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t297 = nullable1 in let final void #t298 = self::Extension1|[]=(#t294{self::Class1}, #t295, #t297) in #t297 : #t296{self::Class1};
-  let final self::Class3? #t299 = n3 in #t299.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t300 = self::Extension3|[](#t299{self::Class3}, nullable3) in #t300.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t301 = nullable2 in self::Extension2|[]=(#t300{self::Class2}, #t301, self::Extension2|+(self::Extension2|[](#t300{self::Class2}, #t301), 0));
-  nullable2 = let final self::Class3? #t302 = n3 in #t302.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t303 = self::Extension3|[](#t302{self::Class3}, nullable3) in #t303.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t304 = nullable2 in let final self::Class2 #t305 = self::Extension2|+(self::Extension2|[](#t303{self::Class2}, #t304), 0) in let final void #t306 = self::Extension2|[]=(#t303{self::Class2}, #t304, #t305) in #t305;
-  let final self::Class3? #t307 = n3 in #t307.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t308 = self::Extension3|[](#t307{self::Class3}, nullable3) in #t308.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t309 = nullable2 in self::Extension2|[]=(#t308{self::Class2}, #t309, self::Extension2|+(self::Extension2|[](#t308{self::Class2}, #t309), 1));
-  nullable2 = let final self::Class3? #t310 = n3 in #t310.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t311 = self::Extension3|[](#t310{self::Class3}, nullable3) in #t311.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t312 = nullable2 in let final self::Class2 #t313 = self::Extension2|[](#t311{self::Class2}, #t312) in let final void #t314 = self::Extension2|[]=(#t311{self::Class2}, #t312, self::Extension2|+(#t313, 1)) in #t313;
-  let final self::Class3? #t315 = n3 in #t315.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t316 = self::Extension3|[](#t315{self::Class3}, nullable3) in #t316.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t317 = nullable2 in let final self::Class2 #t318 = self::Extension2|+(self::Extension2|[](#t316{self::Class2}, #t317), 1) in let final void #t319 = self::Extension2|[]=(#t316{self::Class2}, #t317, #t318) in #t318;
-  nullable2 = let final self::Class3? #t320 = n3 in #t320.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t321 = self::Extension3|[](#t320{self::Class3}, nullable3) in #t321.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t322 = nullable2 in let final self::Class2 #t323 = self::Extension2|+(self::Extension2|[](#t321{self::Class2}, #t322), 1) in let final void #t324 = self::Extension2|[]=(#t321{self::Class2}, #t322, #t323) in #t323;
+  let final self::Class1? #t170 = n1 in #t170.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](#t170{self::Class1}, nullable1);
+  let final self::Class1? #t171 = n1 in #t171.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(#t171{self::Class1}, nullable1, new self::Class1::•());
+  let final self::Class1? #t172 = n1 in #t172.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t173 = self::Extension1|[](#t172{self::Class1}, nullable1) in #t173.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t173{self::Class1});
+  let final self::Class1? #t174 = n1 in #t174.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t174{self::Class1}), nullable1);
+  let final self::Class1? #t175 = n1 in #t175.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t175{self::Class1}), nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t176 = n1 in #t176.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t177 = self::Extension1|get#nonNullable1(#t176{self::Class1}) in let final self::Class1? #t178 = nullable1 in let final self::Class1 #t179 = new self::Class1::•() in let final void #t180 = self::Extension1|[]=(#t177, #t178, #t179) in #t179;
+  let final self::Class1? #t181 = n1 in #t181.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t182 = self::Extension1|[](self::Extension1|get#nonNullable1(#t181{self::Class1}), nullable1) in #t182.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t182{self::Class1});
+  let final self::Class1? #t183 = n1 in #t183.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t184 = self::Extension1|get#nonNullable2(#t183{self::Class1}) in let final self::Class2? #t185 = nullable2 in self::Extension2|[]=(#t184, #t185, self::Extension2|+(self::Extension2|[](#t184, #t185), 0));
+  nullable2 = let final self::Class1? #t186 = n1 in #t186.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t187 = self::Extension1|get#nonNullable2(#t186{self::Class1}) in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = self::Extension2|+(self::Extension2|[](#t187, #t188), 0) in let final void #t190 = self::Extension2|[]=(#t187, #t188, #t189) in #t189;
+  let final self::Class1? #t191 = n1 in #t191.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in self::Extension1|[](#t191{self::Class1}, #t192).{core::Object::==}(null) ?{self::Class1?} self::Extension1|[]=(#t191{self::Class1}, #t192, nullable1) : null;
+  nullable1 = let final self::Class1? #t193 = n1 in #t193.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t194 = nullable1 in let final self::Class1? #t195 = self::Extension1|[](#t193{self::Class1}, #t194) in #t195.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t196 = nullable1 in let final void #t197 = self::Extension1|[]=(#t193{self::Class1}, #t194, #t196) in #t196 : #t195{self::Class1};
+  let final self::Class2? #t198 = n2 in #t198.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in self::Extension2|[]=(#t198{self::Class2}, #t199, self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0));
+  nullable2 = let final self::Class2? #t200 = n2 in #t200.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t201 = nullable2 in let final self::Class2 #t202 = self::Extension2|+(self::Extension2|[](#t200{self::Class2}, #t201), 0) in let final void #t203 = self::Extension2|[]=(#t200{self::Class2}, #t201, #t202) in #t202;
+  let final self::Class2? #t204 = n2 in #t204.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in self::Extension2|[]=(#t204{self::Class2}, #t205, self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0));
+  nullable2 = let final self::Class2? #t206 = n2 in #t206.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t207 = nullable2 in let final self::Class2 #t208 = self::Extension2|+(self::Extension2|[](#t206{self::Class2}, #t207), 0) in let final void #t209 = self::Extension2|[]=(#t206{self::Class2}, #t207, #t208) in #t208;
+  let final self::Class2? #t210 = n2 in #t210.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(self::Extension2|[](#t210{self::Class2}, #t211), 1));
+  nullable2 = let final self::Class2? #t212 = n2 in #t212.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t213 = nullable2 in let final self::Class2 #t214 = self::Extension2|[](#t212{self::Class2}, #t213) in let final void #t215 = self::Extension2|[]=(#t212{self::Class2}, #t213, self::Extension2|+(#t214, 1)) in #t214;
+  let final self::Class2? #t216 = n2 in #t216.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in let final self::Class2 #t218 = self::Extension2|+(self::Extension2|[](#t216{self::Class2}, #t217), 1) in let final void #t219 = self::Extension2|[]=(#t216{self::Class2}, #t217, #t218) in #t218;
+  nullable2 = let final self::Class2? #t220 = n2 in #t220.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t221 = nullable2 in let final self::Class2 #t222 = self::Extension2|+(self::Extension2|[](#t220{self::Class2}, #t221), 1) in let final void #t223 = self::Extension2|[]=(#t220{self::Class2}, #t221, #t222) in #t222;
+  let final self::Class1? #t224 = n1 in #t224.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t225 = self::Extension1|get#nonNullable2(#t224{self::Class1}) in let final self::Class2? #t226 = nullable2 in self::Extension2|[]=(#t225, #t226, self::Extension2|+(self::Extension2|[](#t225, #t226), 1));
+  nullable2 = let final self::Class1? #t227 = n1 in #t227.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t228 = self::Extension1|get#nonNullable2(#t227{self::Class1}) in let final self::Class2? #t229 = nullable2 in let final self::Class2 #t230 = self::Extension2|[](#t228, #t229) in let final void #t231 = self::Extension2|[]=(#t228, #t229, self::Extension2|+(#t230, 1)) in #t230;
+  let final self::Class1? #t232 = n1 in #t232.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t233 = self::Extension1|get#nonNullable2(#t232{self::Class1}) in let final self::Class2? #t234 = nullable2 in let final self::Class2 #t235 = self::Extension2|+(self::Extension2|[](#t233, #t234), 1) in let final void #t236 = self::Extension2|[]=(#t233, #t234, #t235) in #t235;
+  nullable2 = let final self::Class1? #t237 = n1 in #t237.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t238 = self::Extension1|get#nonNullable2(#t237{self::Class1}) in let final self::Class2? #t239 = nullable2 in let final self::Class2 #t240 = self::Extension2|+(self::Extension2|[](#t238, #t239), 1) in let final void #t241 = self::Extension2|[]=(#t238, #t239, #t240) in #t240;
+  let final self::Class1? #t242 = n1 in #t242.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2), nullable2);
+  let final self::Class1? #t243 = n1 in #t243.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t243{self::Class1}), nullable2), nullable2, new self::Class2::•());
+  nullable2 = let final self::Class1? #t244 = n1 in #t244.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t245 = self::Extension2|[](self::Extension1|get#nonNullable2(#t244{self::Class1}), nullable2) in let final self::Class2? #t246 = nullable2 in let final self::Class2 #t247 = new self::Class2::•() in let final void #t248 = self::Extension2|[]=(#t245, #t246, #t247) in #t247;
+  let final self::Class1? #t249 = n1 in #t249.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t250 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2), nullable2) in #t250.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t250{self::Class2});
+  let final self::Class1? #t251 = n1 in #t251.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t252 = self::Extension2|[](self::Extension1|get#nonNullable2(#t251{self::Class1}), nullable2) in let final self::Class2? #t253 = nullable2 in self::Extension2|[]=(#t252, #t253, self::Extension2|+(self::Extension2|[](#t252, #t253), 0));
+  nullable2 = let final self::Class1? #t254 = n1 in #t254.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t255 = self::Extension2|[](self::Extension1|get#nonNullable2(#t254{self::Class1}), nullable2) in let final self::Class2? #t256 = nullable2 in let final self::Class2 #t257 = self::Extension2|+(self::Extension2|[](#t255, #t256), 0) in let final void #t258 = self::Extension2|[]=(#t255, #t256, #t257) in #t257;
+  let final self::Class1? #t259 = n1 in #t259.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t260 = self::Extension2|[](self::Extension1|get#nonNullable2(#t259{self::Class1}), nullable2) in let final self::Class2? #t261 = nullable2 in self::Extension2|[]=(#t260, #t261, self::Extension2|+(self::Extension2|[](#t260, #t261), 1));
+  nullable2 = let final self::Class1? #t262 = n1 in #t262.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t263 = self::Extension2|[](self::Extension1|get#nonNullable2(#t262{self::Class1}), nullable2) in let final self::Class2? #t264 = nullable2 in let final self::Class2 #t265 = self::Extension2|[](#t263, #t264) in let final void #t266 = self::Extension2|[]=(#t263, #t264, self::Extension2|+(#t265, 1)) in #t265;
+  let final self::Class1? #t267 = n1 in #t267.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t268 = self::Extension2|[](self::Extension1|get#nonNullable2(#t267{self::Class1}), nullable2) in let final self::Class2? #t269 = nullable2 in let final self::Class2 #t270 = self::Extension2|+(self::Extension2|[](#t268, #t269), 1) in let final void #t271 = self::Extension2|[]=(#t268, #t269, #t270) in #t270;
+  nullable2 = let final self::Class1? #t272 = n1 in #t272.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t273 = self::Extension2|[](self::Extension1|get#nonNullable2(#t272{self::Class1}), nullable2) in let final self::Class2? #t274 = nullable2 in let final self::Class2 #t275 = self::Extension2|+(self::Extension2|[](#t273, #t274), 1) in let final void #t276 = self::Extension2|[]=(#t273, #t274, #t275) in #t275;
+  let final self::Class1? #t277 = n1 in #t277.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](#t278{self::Class1}, nullable1);
+  let final self::Class1? #t279 = n1 in #t279.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(#t280{self::Class1}, nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t281 = n1 in #t281.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t282 = self::Extension1|[](#t281{self::Class1}, nullable1) in #t282.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t283 = nullable1 in let final self::Class1 #t284 = new self::Class1::•() in let final void #t285 = self::Extension1|[]=(#t282{self::Class1}, #t283, #t284) in #t284;
+  let final self::Class1? #t286 = n1 in #t286.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t287 = self::Extension1|[](#t286{self::Class1}, nullable1) in #t287.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t288{self::Class1});
+  nullable1 = let final self::Class1? #t289 = n1 in #t289.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t290 = self::Extension1|[](#t289{self::Class1}, nullable1) in #t290.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t291{self::Class1});
+  let final self::Class1? #t292 = n1 in #t292.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t293 = self::Extension1|[](#t292{self::Class1}, nullable1) in #t293.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t294 = nullable1 in self::Extension1|[](#t293{self::Class1}, #t294).{core::Object::==}(null) ?{self::Class1?} self::Extension1|[]=(#t293{self::Class1}, #t294, nullable1) : null;
+  nullable1 = let final self::Class1? #t295 = n1 in #t295.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t296 = self::Extension1|[](#t295{self::Class1}, nullable1) in #t296.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t297 = nullable1 in let final self::Class1? #t298 = self::Extension1|[](#t296{self::Class1}, #t297) in #t298.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t299 = nullable1 in let final void #t300 = self::Extension1|[]=(#t296{self::Class1}, #t297, #t299) in #t299 : #t298{self::Class1};
+  let final self::Class3? #t301 = n3 in #t301.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t302 = self::Extension3|[](#t301{self::Class3}, nullable3) in #t302.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t303 = nullable2 in self::Extension2|[]=(#t302{self::Class2}, #t303, self::Extension2|+(self::Extension2|[](#t302{self::Class2}, #t303), 0));
+  nullable2 = let final self::Class3? #t304 = n3 in #t304.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t305 = self::Extension3|[](#t304{self::Class3}, nullable3) in #t305.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t306 = nullable2 in let final self::Class2 #t307 = self::Extension2|+(self::Extension2|[](#t305{self::Class2}, #t306), 0) in let final void #t308 = self::Extension2|[]=(#t305{self::Class2}, #t306, #t307) in #t307;
+  let final self::Class3? #t309 = n3 in #t309.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t310 = self::Extension3|[](#t309{self::Class3}, nullable3) in #t310.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t311 = nullable2 in self::Extension2|[]=(#t310{self::Class2}, #t311, self::Extension2|+(self::Extension2|[](#t310{self::Class2}, #t311), 1));
+  nullable2 = let final self::Class3? #t312 = n3 in #t312.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t313 = self::Extension3|[](#t312{self::Class3}, nullable3) in #t313.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t314 = nullable2 in let final self::Class2 #t315 = self::Extension2|[](#t313{self::Class2}, #t314) in let final void #t316 = self::Extension2|[]=(#t313{self::Class2}, #t314, self::Extension2|+(#t315, 1)) in #t315;
+  let final self::Class3? #t317 = n3 in #t317.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t318 = self::Extension3|[](#t317{self::Class3}, nullable3) in #t318.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t319 = nullable2 in let final self::Class2 #t320 = self::Extension2|+(self::Extension2|[](#t318{self::Class2}, #t319), 1) in let final void #t321 = self::Extension2|[]=(#t318{self::Class2}, #t319, #t320) in #t320;
+  nullable2 = let final self::Class3? #t322 = n3 in #t322.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t323 = self::Extension3|[](#t322{self::Class3}, nullable3) in #t323.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t324 = nullable2 in let final self::Class2 #t325 = self::Extension2|+(self::Extension2|[](#t323{self::Class2}, #t324), 1) in let final void #t326 = self::Extension2|[]=(#t323{self::Class2}, #t324, #t325) in #t325;
 }
 static method operatorAccess(self::Class1? n1, self::Class2? n2) → void {
   self::Class2? nullable2 = n2;
-  self::throws(() → self::Class1? => self::Extension1|+(let final self::Class1? #t325 = n1 in #t325.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t325{self::Class1}), 0));
-  self::throws(() → self::Class1? => self::Extension1|unary-(let final self::Class1? #t326 = n1 in #t326.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t326{self::Class1})));
-  let final self::Class2? #t327 = n2 in #t327.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t327, self::Extension2|+(self::Extension2|get#nonNullable2(#t327), 0));
-  nullable2 = let final self::Class2? #t328 = n2 in #t328.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t329 = self::Extension2|+(self::Extension2|get#nonNullable2(#t328), 0) in let final void #t330 = self::Extension2|set#nonNullable2(#t328, #t329) in #t329;
-  let final self::Class2? #t331 = n2 in #t331.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t332 = self::Extension2|get#nonNullable2(#t331{self::Class2}) in self::Extension2|set#nonNullable2(#t332, self::Extension2|+(self::Extension2|get#nonNullable2(#t332), 0));
-  nullable2 = let final self::Class2? #t333 = n2 in #t333.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t334 = self::Extension2|get#nonNullable2(#t333{self::Class2}) in let final self::Class2 #t335 = self::Extension2|+(self::Extension2|get#nonNullable2(#t334), 0) in let final void #t336 = self::Extension2|set#nonNullable2(#t334, #t335) in #t335;
-  let final self::Class2? #t337 = n2 in #t337.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t337, self::Extension2|+(self::Extension2|get#nonNullable2(#t337), 1));
-  nullable2 = let final self::Class2? #t338 = n2 in #t338.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t339 = self::Extension2|get#nonNullable2(#t338) in let final void #t340 = self::Extension2|set#nonNullable2(#t338, self::Extension2|+(#t339, 1)) in #t339;
-  let final self::Class2? #t341 = n2 in #t341.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t342 = self::Extension2|+(self::Extension2|get#nonNullable2(#t341), 1) in let final void #t343 = self::Extension2|set#nonNullable2(#t341, #t342) in #t342;
-  nullable2 = let final self::Class2? #t344 = n2 in #t344.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t345 = self::Extension2|+(self::Extension2|get#nonNullable2(#t344), 1) in let final void #t346 = self::Extension2|set#nonNullable2(#t344, #t345) in #t345;
+  self::throws(() → self::Class1? => let final<BottomType> #t327 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:226:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
+  throws(() => n1?.nonNullable1 + 0);
+                                ^" in self::Extension1|+(let final self::Class1? #t328 = n1 in #t328.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t328{self::Class1}), 0));
+  self::throws(() → self::Class1? => let final<BottomType> #t329 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:227:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
+  throws(() => -n1?.nonNullable1);
+               ^" in self::Extension1|unary-(let final self::Class1? #t330 = n1 in #t330.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t330{self::Class1})));
+  let final self::Class2? #t331 = n2 in #t331.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t331, self::Extension2|+(self::Extension2|get#nonNullable2(#t331), 0));
+  nullable2 = let final self::Class2? #t332 = n2 in #t332.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t333 = self::Extension2|+(self::Extension2|get#nonNullable2(#t332), 0) in let final void #t334 = self::Extension2|set#nonNullable2(#t332, #t333) in #t333;
+  let final self::Class2? #t335 = n2 in #t335.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t336 = self::Extension2|get#nonNullable2(#t335{self::Class2}) in self::Extension2|set#nonNullable2(#t336, self::Extension2|+(self::Extension2|get#nonNullable2(#t336), 0));
+  nullable2 = let final self::Class2? #t337 = n2 in #t337.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t338 = self::Extension2|get#nonNullable2(#t337{self::Class2}) in let final self::Class2 #t339 = self::Extension2|+(self::Extension2|get#nonNullable2(#t338), 0) in let final void #t340 = self::Extension2|set#nonNullable2(#t338, #t339) in #t339;
+  let final self::Class2? #t341 = n2 in #t341.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t341, self::Extension2|+(self::Extension2|get#nonNullable2(#t341), 1));
+  nullable2 = let final self::Class2? #t342 = n2 in #t342.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t343 = self::Extension2|get#nonNullable2(#t342) in let final void #t344 = self::Extension2|set#nonNullable2(#t342, self::Extension2|+(#t343, 1)) in #t343;
+  let final self::Class2? #t345 = n2 in #t345.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t346 = self::Extension2|+(self::Extension2|get#nonNullable2(#t345), 1) in let final void #t347 = self::Extension2|set#nonNullable2(#t345, #t346) in #t346;
+  nullable2 = let final self::Class2? #t348 = n2 in #t348.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t349 = self::Extension2|+(self::Extension2|get#nonNullable2(#t348), 1) in let final void #t350 = self::Extension2|set#nonNullable2(#t348, #t349) in #t349;
 }
 static method ifNull(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t347 = n1 in #t347.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t347).{core::Object::==}(null) ?{self::Class1} self::Extension1|set#nullable1(#t347, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t348 = n1 in #t348.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t349 = self::Extension1|get#nullable1(#t348) in #t349.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t350 = n1{self::Class1} in let final void #t351 = self::Extension1|set#nullable1(#t348, #t350) in #t350 : #t349{self::Class1};
-  let final self::Class1? #t352 = n1 in #t352.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t353 = self::Extension1|get#nonNullable1(#t352{self::Class1}) in self::Extension1|get#nullable1(#t353{self::Class1}).{core::Object::==}(null) ?{self::Class1} self::Extension1|set#nullable1(#t353{self::Class1}, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t354 = n1 in #t354.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t355 = self::Extension1|get#nonNullable1(#t354{self::Class1}) in let final self::Class1? #t356 = self::Extension1|get#nullable1(#t355{self::Class1}) in #t356.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t357 = n1{self::Class1} in let final void #t358 = self::Extension1|set#nullable1(#t355{self::Class1}, #t357) in #t357 : #t356{self::Class1};
-  let final self::Class1? #t359 = n1 in #t359.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t360 = self::Extension1|get#nonNullable1(#t359{self::Class1}) in let final self::Class1 #t361 = n1{self::Class1} in self::Extension1|[](#t360, #t361).{core::Object::==}(null) ?{self::Class1} self::Extension1|[]=(#t360, #t361, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t362 = n1 in #t362.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t363 = self::Extension1|get#nonNullable1(#t362{self::Class1}) in let final self::Class1 #t364 = n1{self::Class1} in let final self::Class1? #t365 = self::Extension1|[](#t363, #t364) in #t365.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t366 = n1{self::Class1} in let final void #t367 = self::Extension1|[]=(#t363, #t364, #t366) in #t366 : #t365{self::Class1};
+  let final self::Class1? #t351 = n1 in #t351.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t351).{core::Object::==}(null) ?{self::Class1} self::Extension1|set#nullable1(#t351, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t352 = n1 in #t352.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t353 = self::Extension1|get#nullable1(#t352) in #t353.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t354 = n1{self::Class1} in let final void #t355 = self::Extension1|set#nullable1(#t352, #t354) in #t354 : #t353{self::Class1};
+  let final self::Class1? #t356 = n1 in #t356.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t357 = self::Extension1|get#nonNullable1(#t356{self::Class1}) in self::Extension1|get#nullable1(#t357{self::Class1}).{core::Object::==}(null) ?{self::Class1} self::Extension1|set#nullable1(#t357{self::Class1}, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t358 = n1 in #t358.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t359 = self::Extension1|get#nonNullable1(#t358{self::Class1}) in let final self::Class1? #t360 = self::Extension1|get#nullable1(#t359{self::Class1}) in #t360.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t361 = n1{self::Class1} in let final void #t362 = self::Extension1|set#nullable1(#t359{self::Class1}, #t361) in #t361 : #t360{self::Class1};
+  let final self::Class1? #t363 = n1 in #t363.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t364 = self::Extension1|get#nonNullable1(#t363{self::Class1}) in let final self::Class1 #t365 = n1{self::Class1} in self::Extension1|[](#t364, #t365).{core::Object::==}(null) ?{self::Class1} self::Extension1|[]=(#t364, #t365, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t366 = n1 in #t366.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t367 = self::Extension1|get#nonNullable1(#t366{self::Class1}) in let final self::Class1 #t368 = n1{self::Class1} in let final self::Class1? #t369 = self::Extension1|[](#t367, #t368) in #t369.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t370 = n1{self::Class1} in let final void #t371 = self::Extension1|[]=(#t367, #t368, #t370) in #t370 : #t369{self::Class1};
 }
 static method throws(() → void f) → void {
   try {
diff --git a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.weak.transformed.expect
index dce5931..51808db 100644
--- a/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/null_shorting_extension.dart.weak.transformed.expect
@@ -2,24 +2,24 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/null_shorting_extension.dart:93:47: Warning: Property 'nullable1' is accessed on 'Class1?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_shorting_extension.dart:93:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
 //  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
 // Try accessing using ?. instead.
 //   throws(() => (n1?.nullable1 = new Class1()).nullable1);
 //                                               ^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/null_shorting_extension.dart:94:43: Warning: Property 'nullable1' is accessed on 'Class1?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_shorting_extension.dart:94:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
 //  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
 // Try accessing using ?. instead.
 //   throws(() => (n1?.nonNullable1Method()).nullable1);
 //                                           ^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/null_shorting_extension.dart:226:33: Warning: Operator '+' is called on 'Class1?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_shorting_extension.dart:226:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
 //  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
 //   throws(() => n1?.nonNullable1 + 0);
 //                                 ^
 //
-// pkg/front_end/testcases/nnbd/null_shorting_extension.dart:227:16: Warning: Operator 'unary-' is called on 'Class1?' which is potentially null.
+// pkg/front_end/testcases/nnbd/null_shorting_extension.dart:227:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
 //  - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
 //   throws(() => -n1?.nonNullable1);
 //                ^
@@ -139,139 +139,153 @@
   let final self::Class1? #t13 = n1 in #t13.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t14 = self::Extension1|get#nullable1(#t13{self::Class1}) in #t14.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t14{self::Class1}, new self::Class1::•());
   let final self::Class1? #t15 = n1 in #t15.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t16 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t15{self::Class1})) in #t16.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t16{self::Class1}, new self::Class1::•());
   let final self::Class1? #t17 = let final self::Class1? #t18 = n1 in #t18.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t18{self::Class1}) in #t17.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t17{self::Class1});
-  self::throws(() → self::Class1? => self::Extension1|get#nullable1(let final self::Class1? #t19 = n1 in #t19.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t20 = new self::Class1::•() in let final void #t21 = self::Extension1|set#nullable1(#t19{self::Class1}, #t20) in #t20));
-  self::throws(() → self::Class1? => self::Extension1|get#nullable1(let final self::Class1? #t22 = n1 in #t22.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t22{self::Class1})));
-  nullable1 = let final self::Class1? #t23 = n1 in #t23.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t24 = new self::Class1::•() in let final void #t25 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t23{self::Class1}), #t24) in #t24;
-  nullable1 = let final self::Class1? #t26 = n1 in #t26.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t27 = self::Extension1|get#nullable1(#t26{self::Class1}) in #t27.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t28 = new self::Class1::•() in let final void #t29 = self::Extension1|set#nullable1(#t27{self::Class1}, #t28) in #t28;
-  nullable1 = let final self::Class1? #t30 = n1 in #t30.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t31 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t30{self::Class1})) in #t31.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t32 = new self::Class1::•() in let final void #t33 = self::Extension1|set#nullable1(#t31{self::Class1}, #t32) in #t32;
-  let final self::Class1? #t34 = n1 in #t34.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t35 = self::Extension1|get#nullable1(#t34{self::Class1}) in #t35.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t35{self::Class1});
-  let final self::Class1? #t36 = n1 in #t36.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t36{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t37 = n1 in #t37.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t38 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t39 = self::Extension1|set#nullable1(#t37{self::Class1}, #t38) in #t38;
-  let final self::Class1? #t40 = n1 in #t40.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t40{self::Class1}, let final self::Class1 #t41 = new self::Class1::•() in let final void #t42 = self::Extension1|set#nullable1(new self::Class1::•(), #t41) in #t41);
-  nullable1 = let final self::Class1? #t43 = n1 in #t43.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t44 = let final self::Class1 #t45 = new self::Class1::•() in let final void #t46 = self::Extension1|set#nullable1(new self::Class1::•(), #t45) in #t45 in let final void #t47 = self::Extension1|set#nullable1(#t43{self::Class1}, #t44) in #t44;
-  let final self::Class1? #t48 = n1 in #t48.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t48{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t49 = n1 in #t49.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t50 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t51 = self::Extension1|set#nullable1(#t49{self::Class1}, #t50) in #t50;
-  let final self::Class1? #t52 = n1 in #t52.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t52{self::Class1}));
-  let final self::Class1? #t53 = n1 in #t53.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t53{self::Class1}), new self::Class1::•());
-  let final self::Class1? #t54 = n1 in #t54.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t54{self::Class1}));
-  let final self::Class1? #t55 = n1 in #t55.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t55{self::Class1})));
-  let final self::Class1? #t56 = n1 in #t56.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t56{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t57 = n1 in #t57.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t58 = new self::Class1::•() in let final void #t59 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})), #t58) in #t58;
-  let final self::Class1? #t60 = n1 in #t60.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t61 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t60{self::Class1})) in #t61.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t61{self::Class1});
-  let final self::Class1? #t62 = n1 in #t62.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t62{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t63 = n1 in #t63.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t64 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t65 = self::Extension1|set#nullable1(#t63{self::Class1}, #t64) in #t64;
-  let final self::Class1? #t66 = n1 in #t66.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t66{self::Class1}, let final self::Class1 #t67 = new self::Class1::•() in let final void #t68 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t67) in #t67);
-  nullable1 = let final self::Class1? #t69 = n1 in #t69.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t70 = let final self::Class1 #t71 = new self::Class1::•() in let final void #t72 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t71) in #t71 in let final void #t73 = self::Extension1|set#nullable1(#t69{self::Class1}, #t70) in #t70;
-  let final self::Class1? #t74 = n1 in #t74.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t74{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t75 = n1 in #t75.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t76 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t77 = self::Extension1|set#nullable1(#t75{self::Class1}, #t76) in #t76;
-  let final self::Class1? #t78 = n1 in #t78.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t78{self::Class1})));
-  let final self::Class1? #t79 = n1 in #t79.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t79{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t80 = n1 in #t80.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
-  let final self::Class1? #t81 = n1 in #t81.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t81{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t82 = n1 in #t82.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t83 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t84 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t82{self::Class1}), #t83) in #t83;
-  let final self::Class1? #t85 = n1 in #t85.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t85{self::Class1}), let final self::Class1 #t86 = new self::Class1::•() in let final void #t87 = self::Extension1|set#nullable1(new self::Class1::•(), #t86) in #t86);
-  nullable1 = let final self::Class1? #t88 = n1 in #t88.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t89 = let final self::Class1 #t90 = new self::Class1::•() in let final void #t91 = self::Extension1|set#nullable1(new self::Class1::•(), #t90) in #t90 in let final void #t92 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t88{self::Class1}), #t89) in #t89;
-  let final self::Class1? #t93 = n1 in #t93.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t93{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t94 = n1 in #t94.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t95 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t96 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t94{self::Class1}), #t95) in #t95;
-  let final self::Class1? #t97 = n1 in #t97.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t97{self::Class1}, let final self::Class1? #t98 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t99 = self::Extension1|set#nullable1(new self::Class1::•(), #t98) in #t98);
-  nullable1 = let final self::Class1? #t100 = n1 in #t100.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t101 = let final self::Class1? #t102 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t103 = self::Extension1|set#nullable1(new self::Class1::•(), #t102) in #t102 in let final void #t104 = self::Extension1|set#nullable1(#t100{self::Class1}, #t101) in #t101;
-  let final self::Class1? #t105 = n1 in #t105.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t105{self::Class1}, let final self::Class1 #t106 = let final self::Class1 #t107 = new self::Class1::•() in let final void #t108 = self::Extension1|set#nullable1(new self::Class1::•(), #t107) in #t107 in let final void #t109 = self::Extension1|set#nullable1(new self::Class1::•(), #t106) in #t106);
-  nullable1 = let final self::Class1? #t110 = n1 in #t110.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t111 = let final self::Class1 #t112 = let final self::Class1 #t113 = new self::Class1::•() in let final void #t114 = self::Extension1|set#nullable1(new self::Class1::•(), #t113) in #t113 in let final void #t115 = self::Extension1|set#nullable1(new self::Class1::•(), #t112) in #t112 in let final void #t116 = self::Extension1|set#nullable1(#t110{self::Class1}, #t111) in #t111;
-  let final self::Class1? #t117 = n1 in #t117.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t117{self::Class1}, let final self::Class1 #t118 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t119 = self::Extension1|set#nullable1(new self::Class1::•(), #t118) in #t118);
-  nullable1 = let final self::Class1? #t120 = n1 in #t120.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t121 = let final self::Class1 #t122 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t123 = self::Extension1|set#nullable1(new self::Class1::•(), #t122) in #t122 in let final void #t124 = self::Extension1|set#nullable1(#t120{self::Class1}, #t121) in #t121;
-  let final self::Class1? #t125 = n1 in #t125.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t125{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t126 = n1 in #t126.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t127 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t128 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t126{self::Class1}), #t127) in #t127;
-  let final self::Class1? #t129 = n1 in #t129.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t129{self::Class1}), let final self::Class1 #t130 = new self::Class1::•() in let final void #t131 = self::Extension1|set#nullable1(new self::Class1::•(), #t130) in #t130);
-  nullable1 = let final self::Class1? #t132 = n1 in #t132.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t133 = let final self::Class1 #t134 = new self::Class1::•() in let final void #t135 = self::Extension1|set#nullable1(new self::Class1::•(), #t134) in #t134 in let final void #t136 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t132{self::Class1}), #t133) in #t133;
-  let final self::Class1? #t137 = n1 in #t137.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t137{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
-  nullable1 = let final self::Class1? #t138 = n1 in #t138.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t139 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t140 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t138{self::Class1}), #t139) in #t139;
-  let final self::Class1? #t141 = n1 in #t141.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t141{self::Class1})));
-  let final self::Class1? #t142 = n1 in #t142.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t142{self::Class1})), new self::Class1::•());
-  nullable1 = let final self::Class1? #t143 = n1 in #t143.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t144 = new self::Class1::•() in let final void #t145 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})), #t144) in #t144;
-  let final self::Class1? #t146 = n1 in #t146.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t146{self::Class1})));
-  let final self::Class1? #t147 = n1 in #t147.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t147{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t148 = n1 in #t148.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t149 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t150 = self::Extension1|set#nullable1(#t148{self::Class1}, #t149) in #t149;
-  let final self::Class1? #t151 = n1 in #t151.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t151{self::Class1}, let final self::Class1 #t152 = new self::Class1::•() in let final void #t153 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t152) in #t152);
-  nullable1 = let final self::Class1? #t154 = n1 in #t154.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t155 = let final self::Class1 #t156 = new self::Class1::•() in let final void #t157 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t156) in #t156 in let final void #t158 = self::Extension1|set#nullable1(#t154{self::Class1}, #t155) in #t155;
-  let final self::Class1? #t159 = n1 in #t159.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t159{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
-  nullable1 = let final self::Class1? #t160 = n1 in #t160.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t161 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t162 = self::Extension1|set#nullable1(#t160{self::Class1}, #t161) in #t161;
-  let final self::Class1? #t163 = n1 in #t163.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t163{self::Class1})));
-  let final self::Class1? #t164 = n1 in #t164.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t164{self::Class1})), new self::Class1::•());
-  let final self::Class1? #t165 = n1 in #t165.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
-  let final self::Class1? #t166 = n1 in #t166.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t167 = self::Extension1|nonNullable1Method(#t166{self::Class1}) in #t167.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t167{self::Class1});
+  self::throws(() → self::Class1? => let final<BottomType> #t19 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:93:47: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
+Try accessing using ?. instead.
+  throws(() => (n1?.nullable1 = new Class1()).nullable1);
+                                              ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t20 = n1 in #t20.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t21 = new self::Class1::•() in let final void #t22 = self::Extension1|set#nullable1(#t20{self::Class1}, #t21) in #t21));
+  self::throws(() → self::Class1? => let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:94:43: Error: Property 'nullable1' cannot be accessed on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
+Try accessing using ?. instead.
+  throws(() => (n1?.nonNullable1Method()).nullable1);
+                                          ^^^^^^^^^" in self::Extension1|get#nullable1(let final self::Class1? #t24 = n1 in #t24.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t24{self::Class1})));
+  nullable1 = let final self::Class1? #t25 = n1 in #t25.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t26 = new self::Class1::•() in let final void #t27 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t25{self::Class1}), #t26) in #t26;
+  nullable1 = let final self::Class1? #t28 = n1 in #t28.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t29 = self::Extension1|get#nullable1(#t28{self::Class1}) in #t29.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t30 = new self::Class1::•() in let final void #t31 = self::Extension1|set#nullable1(#t29{self::Class1}, #t30) in #t30;
+  nullable1 = let final self::Class1? #t32 = n1 in #t32.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t33 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t32{self::Class1})) in #t33.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t34 = new self::Class1::•() in let final void #t35 = self::Extension1|set#nullable1(#t33{self::Class1}, #t34) in #t34;
+  let final self::Class1? #t36 = n1 in #t36.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t37 = self::Extension1|get#nullable1(#t36{self::Class1}) in #t37.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t37{self::Class1});
+  let final self::Class1? #t38 = n1 in #t38.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t38{self::Class1}, self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t39 = n1 in #t39.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t40 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t41 = self::Extension1|set#nullable1(#t39{self::Class1}, #t40) in #t40;
+  let final self::Class1? #t42 = n1 in #t42.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t42{self::Class1}, let final self::Class1 #t43 = new self::Class1::•() in let final void #t44 = self::Extension1|set#nullable1(new self::Class1::•(), #t43) in #t43);
+  nullable1 = let final self::Class1? #t45 = n1 in #t45.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t46 = let final self::Class1 #t47 = new self::Class1::•() in let final void #t48 = self::Extension1|set#nullable1(new self::Class1::•(), #t47) in #t47 in let final void #t49 = self::Extension1|set#nullable1(#t45{self::Class1}, #t46) in #t46;
+  let final self::Class1? #t50 = n1 in #t50.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t50{self::Class1}, self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t51 = n1 in #t51.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t52 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t53 = self::Extension1|set#nullable1(#t51{self::Class1}, #t52) in #t52;
+  let final self::Class1? #t54 = n1 in #t54.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(#t54{self::Class1}));
+  let final self::Class1? #t55 = n1 in #t55.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t55{self::Class1}), new self::Class1::•());
+  let final self::Class1? #t56 = n1 in #t56.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t56{self::Class1}));
+  let final self::Class1? #t57 = n1 in #t57.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t57{self::Class1})));
+  let final self::Class1? #t58 = n1 in #t58.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t58{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t59 = n1 in #t59.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t60 = new self::Class1::•() in let final void #t61 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|get#nonNullable1(#t59{self::Class1})), #t60) in #t60;
+  let final self::Class1? #t62 = n1 in #t62.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t63 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(#t62{self::Class1})) in #t63.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t63{self::Class1});
+  let final self::Class1? #t64 = n1 in #t64.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t64{self::Class1}, self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t65 = n1 in #t65.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t66 = self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t67 = self::Extension1|set#nullable1(#t65{self::Class1}, #t66) in #t66;
+  let final self::Class1? #t68 = n1 in #t68.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t68{self::Class1}, let final self::Class1 #t69 = new self::Class1::•() in let final void #t70 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t69) in #t69);
+  nullable1 = let final self::Class1? #t71 = n1 in #t71.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t72 = let final self::Class1 #t73 = new self::Class1::•() in let final void #t74 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(new self::Class1::•()), #t73) in #t73 in let final void #t75 = self::Extension1|set#nullable1(#t71{self::Class1}, #t72) in #t72;
+  let final self::Class1? #t76 = n1 in #t76.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t76{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t77 = n1 in #t77.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t78 = self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(new self::Class1::•())) in let final void #t79 = self::Extension1|set#nullable1(#t77{self::Class1}, #t78) in #t78;
+  let final self::Class1? #t80 = n1 in #t80.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t80{self::Class1})));
+  let final self::Class1? #t81 = n1 in #t81.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t81{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t82 = n1 in #t82.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(self::Extension1|nonNullable1Method(#t82{self::Class1})));
+  let final self::Class1? #t83 = n1 in #t83.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t83{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t84 = n1 in #t84.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t85 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t86 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t84{self::Class1}), #t85) in #t85;
+  let final self::Class1? #t87 = n1 in #t87.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t87{self::Class1}), let final self::Class1 #t88 = new self::Class1::•() in let final void #t89 = self::Extension1|set#nullable1(new self::Class1::•(), #t88) in #t88);
+  nullable1 = let final self::Class1? #t90 = n1 in #t90.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t91 = let final self::Class1 #t92 = new self::Class1::•() in let final void #t93 = self::Extension1|set#nullable1(new self::Class1::•(), #t92) in #t92 in let final void #t94 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t90{self::Class1}), #t91) in #t91;
+  let final self::Class1? #t95 = n1 in #t95.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t95{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t96 = n1 in #t96.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t97 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t98 = self::Extension1|set#nullable1(self::Extension1|get#nonNullable1(#t96{self::Class1}), #t97) in #t97;
+  let final self::Class1? #t99 = n1 in #t99.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t99{self::Class1}, let final self::Class1? #t100 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t101 = self::Extension1|set#nullable1(new self::Class1::•(), #t100) in #t100);
+  nullable1 = let final self::Class1? #t102 = n1 in #t102.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t103 = let final self::Class1? #t104 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t105 = self::Extension1|set#nullable1(new self::Class1::•(), #t104) in #t104 in let final void #t106 = self::Extension1|set#nullable1(#t102{self::Class1}, #t103) in #t103;
+  let final self::Class1? #t107 = n1 in #t107.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t107{self::Class1}, let final self::Class1 #t108 = let final self::Class1 #t109 = new self::Class1::•() in let final void #t110 = self::Extension1|set#nullable1(new self::Class1::•(), #t109) in #t109 in let final void #t111 = self::Extension1|set#nullable1(new self::Class1::•(), #t108) in #t108);
+  nullable1 = let final self::Class1? #t112 = n1 in #t112.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t113 = let final self::Class1 #t114 = let final self::Class1 #t115 = new self::Class1::•() in let final void #t116 = self::Extension1|set#nullable1(new self::Class1::•(), #t115) in #t115 in let final void #t117 = self::Extension1|set#nullable1(new self::Class1::•(), #t114) in #t114 in let final void #t118 = self::Extension1|set#nullable1(#t112{self::Class1}, #t113) in #t113;
+  let final self::Class1? #t119 = n1 in #t119.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t119{self::Class1}, let final self::Class1 #t120 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t121 = self::Extension1|set#nullable1(new self::Class1::•(), #t120) in #t120);
+  nullable1 = let final self::Class1? #t122 = n1 in #t122.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t123 = let final self::Class1 #t124 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t125 = self::Extension1|set#nullable1(new self::Class1::•(), #t124) in #t124 in let final void #t126 = self::Extension1|set#nullable1(#t122{self::Class1}, #t123) in #t123;
+  let final self::Class1? #t127 = n1 in #t127.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t127{self::Class1}), self::Extension1|get#nullable1(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t128 = n1 in #t128.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t129 = self::Extension1|get#nullable1(new self::Class1::•()) in let final void #t130 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t128{self::Class1}), #t129) in #t129;
+  let final self::Class1? #t131 = n1 in #t131.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t131{self::Class1}), let final self::Class1 #t132 = new self::Class1::•() in let final void #t133 = self::Extension1|set#nullable1(new self::Class1::•(), #t132) in #t132);
+  nullable1 = let final self::Class1? #t134 = n1 in #t134.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t135 = let final self::Class1 #t136 = new self::Class1::•() in let final void #t137 = self::Extension1|set#nullable1(new self::Class1::•(), #t136) in #t136 in let final void #t138 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t134{self::Class1}), #t135) in #t135;
+  let final self::Class1? #t139 = n1 in #t139.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t139{self::Class1}), self::Extension1|nonNullable1Method(new self::Class1::•()));
+  nullable1 = let final self::Class1? #t140 = n1 in #t140.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t141 = self::Extension1|nonNullable1Method(new self::Class1::•()) in let final void #t142 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(#t140{self::Class1}), #t141) in #t141;
+  let final self::Class1? #t143 = n1 in #t143.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t143{self::Class1})));
+  let final self::Class1? #t144 = n1 in #t144.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t144{self::Class1})), new self::Class1::•());
+  nullable1 = let final self::Class1? #t145 = n1 in #t145.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t146 = new self::Class1::•() in let final void #t147 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t145{self::Class1})), #t146) in #t146;
+  let final self::Class1? #t148 = n1 in #t148.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|get#nonNullable1(#t148{self::Class1})));
+  let final self::Class1? #t149 = n1 in #t149.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t149{self::Class1}, self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t150 = n1 in #t150.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t151 = self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t152 = self::Extension1|set#nullable1(#t150{self::Class1}, #t151) in #t151;
+  let final self::Class1? #t153 = n1 in #t153.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t153{self::Class1}, let final self::Class1 #t154 = new self::Class1::•() in let final void #t155 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t154) in #t154);
+  nullable1 = let final self::Class1? #t156 = n1 in #t156.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t157 = let final self::Class1 #t158 = new self::Class1::•() in let final void #t159 = self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(new self::Class1::•()), #t158) in #t158 in let final void #t160 = self::Extension1|set#nullable1(#t156{self::Class1}, #t157) in #t157;
+  let final self::Class1? #t161 = n1 in #t161.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(#t161{self::Class1}, self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())));
+  nullable1 = let final self::Class1? #t162 = n1 in #t162.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t163 = self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(new self::Class1::•())) in let final void #t164 = self::Extension1|set#nullable1(#t162{self::Class1}, #t163) in #t163;
+  let final self::Class1? #t165 = n1 in #t165.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t165{self::Class1})));
+  let final self::Class1? #t166 = n1 in #t166.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|set#nullable1(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t166{self::Class1})), new self::Class1::•());
+  let final self::Class1? #t167 = n1 in #t167.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(self::Extension1|nonNullable1Method(#t167{self::Class1})));
+  let final self::Class1? #t168 = n1 in #t168.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t169 = self::Extension1|nonNullable1Method(#t168{self::Class1}) in #t169.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t169{self::Class1});
 }
 static method indexAccess(self::Class1? n1, self::Class2? n2, self::Class3? n3) → void {
   self::Class1? nullable1 = n1;
   self::Class2? nullable2 = n2;
   self::Class3? nullable3 = n3;
-  let final self::Class1? #t168 = n1 in #t168.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](#t168{self::Class1}, nullable1);
-  let final self::Class1? #t169 = n1 in #t169.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(#t169{self::Class1}, nullable1, new self::Class1::•());
-  let final self::Class1? #t170 = n1 in #t170.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t171 = self::Extension1|[](#t170{self::Class1}, nullable1) in #t171.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t171{self::Class1});
-  let final self::Class1? #t172 = n1 in #t172.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t172{self::Class1}), nullable1);
-  let final self::Class1? #t173 = n1 in #t173.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t173{self::Class1}), nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t174 = n1 in #t174.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t175 = self::Extension1|get#nonNullable1(#t174{self::Class1}) in let final self::Class1? #t176 = nullable1 in let final self::Class1 #t177 = new self::Class1::•() in let final void #t178 = self::Extension1|[]=(#t175, #t176, #t177) in #t177;
-  let final self::Class1? #t179 = n1 in #t179.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t180 = self::Extension1|[](self::Extension1|get#nonNullable1(#t179{self::Class1}), nullable1) in #t180.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t180{self::Class1});
-  let final self::Class1? #t181 = n1 in #t181.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t182 = self::Extension1|get#nonNullable2(#t181{self::Class1}) in let final self::Class2? #t183 = nullable2 in self::Extension2|[]=(#t182, #t183, self::Extension2|+(self::Extension2|[](#t182, #t183), 0));
-  nullable2 = let final self::Class1? #t184 = n1 in #t184.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t185 = self::Extension1|get#nonNullable2(#t184{self::Class1}) in let final self::Class2? #t186 = nullable2 in let final self::Class2 #t187 = self::Extension2|+(self::Extension2|[](#t185, #t186), 0) in let final void #t188 = self::Extension2|[]=(#t185, #t186, #t187) in #t187;
-  let final self::Class1? #t189 = n1 in #t189.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t190 = nullable1 in self::Extension1|[](#t189{self::Class1}, #t190).{core::Object::==}(null) ?{self::Class1?} self::Extension1|[]=(#t189{self::Class1}, #t190, nullable1) : null;
-  nullable1 = let final self::Class1? #t191 = n1 in #t191.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in let final self::Class1? #t193 = self::Extension1|[](#t191{self::Class1}, #t192) in #t193.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t194 = nullable1 in let final void #t195 = self::Extension1|[]=(#t191{self::Class1}, #t192, #t194) in #t194 : #t193{self::Class1};
-  let final self::Class2? #t196 = n2 in #t196.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t197 = nullable2 in self::Extension2|[]=(#t196{self::Class2}, #t197, self::Extension2|+(self::Extension2|[](#t196{self::Class2}, #t197), 0));
-  nullable2 = let final self::Class2? #t198 = n2 in #t198.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in let final self::Class2 #t200 = self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0) in let final void #t201 = self::Extension2|[]=(#t198{self::Class2}, #t199, #t200) in #t200;
-  let final self::Class2? #t202 = n2 in #t202.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t203 = nullable2 in self::Extension2|[]=(#t202{self::Class2}, #t203, self::Extension2|+(self::Extension2|[](#t202{self::Class2}, #t203), 0));
-  nullable2 = let final self::Class2? #t204 = n2 in #t204.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in let final self::Class2 #t206 = self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0) in let final void #t207 = self::Extension2|[]=(#t204{self::Class2}, #t205, #t206) in #t206;
-  let final self::Class2? #t208 = n2 in #t208.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t209 = nullable2 in self::Extension2|[]=(#t208{self::Class2}, #t209, self::Extension2|+(self::Extension2|[](#t208{self::Class2}, #t209), 1));
-  nullable2 = let final self::Class2? #t210 = n2 in #t210.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in let final self::Class2 #t212 = self::Extension2|[](#t210{self::Class2}, #t211) in let final void #t213 = self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(#t212, 1)) in #t212;
-  let final self::Class2? #t214 = n2 in #t214.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t215 = nullable2 in let final self::Class2 #t216 = self::Extension2|+(self::Extension2|[](#t214{self::Class2}, #t215), 1) in let final void #t217 = self::Extension2|[]=(#t214{self::Class2}, #t215, #t216) in #t216;
-  nullable2 = let final self::Class2? #t218 = n2 in #t218.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t219 = nullable2 in let final self::Class2 #t220 = self::Extension2|+(self::Extension2|[](#t218{self::Class2}, #t219), 1) in let final void #t221 = self::Extension2|[]=(#t218{self::Class2}, #t219, #t220) in #t220;
-  let final self::Class1? #t222 = n1 in #t222.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t223 = self::Extension1|get#nonNullable2(#t222{self::Class1}) in let final self::Class2? #t224 = nullable2 in self::Extension2|[]=(#t223, #t224, self::Extension2|+(self::Extension2|[](#t223, #t224), 1));
-  nullable2 = let final self::Class1? #t225 = n1 in #t225.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t226 = self::Extension1|get#nonNullable2(#t225{self::Class1}) in let final self::Class2? #t227 = nullable2 in let final self::Class2 #t228 = self::Extension2|[](#t226, #t227) in let final void #t229 = self::Extension2|[]=(#t226, #t227, self::Extension2|+(#t228, 1)) in #t228;
-  let final self::Class1? #t230 = n1 in #t230.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t231 = self::Extension1|get#nonNullable2(#t230{self::Class1}) in let final self::Class2? #t232 = nullable2 in let final self::Class2 #t233 = self::Extension2|+(self::Extension2|[](#t231, #t232), 1) in let final void #t234 = self::Extension2|[]=(#t231, #t232, #t233) in #t233;
-  nullable2 = let final self::Class1? #t235 = n1 in #t235.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t236 = self::Extension1|get#nonNullable2(#t235{self::Class1}) in let final self::Class2? #t237 = nullable2 in let final self::Class2 #t238 = self::Extension2|+(self::Extension2|[](#t236, #t237), 1) in let final void #t239 = self::Extension2|[]=(#t236, #t237, #t238) in #t238;
-  let final self::Class1? #t240 = n1 in #t240.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t240{self::Class1}), nullable2), nullable2);
-  let final self::Class1? #t241 = n1 in #t241.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t241{self::Class1}), nullable2), nullable2, new self::Class2::•());
-  nullable2 = let final self::Class1? #t242 = n1 in #t242.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t243 = self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2) in let final self::Class2? #t244 = nullable2 in let final self::Class2 #t245 = new self::Class2::•() in let final void #t246 = self::Extension2|[]=(#t243, #t244, #t245) in #t245;
-  let final self::Class1? #t247 = n1 in #t247.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t248 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t247{self::Class1}), nullable2), nullable2) in #t248.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t248{self::Class2});
-  let final self::Class1? #t249 = n1 in #t249.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t250 = self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2) in let final self::Class2? #t251 = nullable2 in self::Extension2|[]=(#t250, #t251, self::Extension2|+(self::Extension2|[](#t250, #t251), 0));
-  nullable2 = let final self::Class1? #t252 = n1 in #t252.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t253 = self::Extension2|[](self::Extension1|get#nonNullable2(#t252{self::Class1}), nullable2) in let final self::Class2? #t254 = nullable2 in let final self::Class2 #t255 = self::Extension2|+(self::Extension2|[](#t253, #t254), 0) in let final void #t256 = self::Extension2|[]=(#t253, #t254, #t255) in #t255;
-  let final self::Class1? #t257 = n1 in #t257.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t258 = self::Extension2|[](self::Extension1|get#nonNullable2(#t257{self::Class1}), nullable2) in let final self::Class2? #t259 = nullable2 in self::Extension2|[]=(#t258, #t259, self::Extension2|+(self::Extension2|[](#t258, #t259), 1));
-  nullable2 = let final self::Class1? #t260 = n1 in #t260.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t261 = self::Extension2|[](self::Extension1|get#nonNullable2(#t260{self::Class1}), nullable2) in let final self::Class2? #t262 = nullable2 in let final self::Class2 #t263 = self::Extension2|[](#t261, #t262) in let final void #t264 = self::Extension2|[]=(#t261, #t262, self::Extension2|+(#t263, 1)) in #t263;
-  let final self::Class1? #t265 = n1 in #t265.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t266 = self::Extension2|[](self::Extension1|get#nonNullable2(#t265{self::Class1}), nullable2) in let final self::Class2? #t267 = nullable2 in let final self::Class2 #t268 = self::Extension2|+(self::Extension2|[](#t266, #t267), 1) in let final void #t269 = self::Extension2|[]=(#t266, #t267, #t268) in #t268;
-  nullable2 = let final self::Class1? #t270 = n1 in #t270.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t271 = self::Extension2|[](self::Extension1|get#nonNullable2(#t270{self::Class1}), nullable2) in let final self::Class2? #t272 = nullable2 in let final self::Class2 #t273 = self::Extension2|+(self::Extension2|[](#t271, #t272), 1) in let final void #t274 = self::Extension2|[]=(#t271, #t272, #t273) in #t273;
-  let final self::Class1? #t275 = n1 in #t275.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t276 = self::Extension1|[](#t275{self::Class1}, nullable1) in #t276.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](#t276{self::Class1}, nullable1);
-  let final self::Class1? #t277 = n1 in #t277.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(#t278{self::Class1}, nullable1, new self::Class1::•());
-  nullable1 = let final self::Class1? #t279 = n1 in #t279.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t281 = nullable1 in let final self::Class1 #t282 = new self::Class1::•() in let final void #t283 = self::Extension1|[]=(#t280{self::Class1}, #t281, #t282) in #t282;
-  let final self::Class1? #t284 = n1 in #t284.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t285 = self::Extension1|[](#t284{self::Class1}, nullable1) in #t285.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t286 = self::Extension1|[](#t285{self::Class1}, nullable1) in #t286.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t286{self::Class1});
-  nullable1 = let final self::Class1? #t287 = n1 in #t287.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t289 = self::Extension1|[](#t288{self::Class1}, nullable1) in #t289.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t289{self::Class1});
-  let final self::Class1? #t290 = n1 in #t290.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t292 = nullable1 in self::Extension1|[](#t291{self::Class1}, #t292).{core::Object::==}(null) ?{self::Class1?} self::Extension1|[]=(#t291{self::Class1}, #t292, nullable1) : null;
-  nullable1 = let final self::Class1? #t293 = n1 in #t293.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t294 = self::Extension1|[](#t293{self::Class1}, nullable1) in #t294.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t295 = nullable1 in let final self::Class1? #t296 = self::Extension1|[](#t294{self::Class1}, #t295) in #t296.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t297 = nullable1 in let final void #t298 = self::Extension1|[]=(#t294{self::Class1}, #t295, #t297) in #t297 : #t296{self::Class1};
-  let final self::Class3? #t299 = n3 in #t299.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t300 = self::Extension3|[](#t299{self::Class3}, nullable3) in #t300.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t301 = nullable2 in self::Extension2|[]=(#t300{self::Class2}, #t301, self::Extension2|+(self::Extension2|[](#t300{self::Class2}, #t301), 0));
-  nullable2 = let final self::Class3? #t302 = n3 in #t302.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t303 = self::Extension3|[](#t302{self::Class3}, nullable3) in #t303.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t304 = nullable2 in let final self::Class2 #t305 = self::Extension2|+(self::Extension2|[](#t303{self::Class2}, #t304), 0) in let final void #t306 = self::Extension2|[]=(#t303{self::Class2}, #t304, #t305) in #t305;
-  let final self::Class3? #t307 = n3 in #t307.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t308 = self::Extension3|[](#t307{self::Class3}, nullable3) in #t308.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t309 = nullable2 in self::Extension2|[]=(#t308{self::Class2}, #t309, self::Extension2|+(self::Extension2|[](#t308{self::Class2}, #t309), 1));
-  nullable2 = let final self::Class3? #t310 = n3 in #t310.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t311 = self::Extension3|[](#t310{self::Class3}, nullable3) in #t311.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t312 = nullable2 in let final self::Class2 #t313 = self::Extension2|[](#t311{self::Class2}, #t312) in let final void #t314 = self::Extension2|[]=(#t311{self::Class2}, #t312, self::Extension2|+(#t313, 1)) in #t313;
-  let final self::Class3? #t315 = n3 in #t315.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t316 = self::Extension3|[](#t315{self::Class3}, nullable3) in #t316.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t317 = nullable2 in let final self::Class2 #t318 = self::Extension2|+(self::Extension2|[](#t316{self::Class2}, #t317), 1) in let final void #t319 = self::Extension2|[]=(#t316{self::Class2}, #t317, #t318) in #t318;
-  nullable2 = let final self::Class3? #t320 = n3 in #t320.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t321 = self::Extension3|[](#t320{self::Class3}, nullable3) in #t321.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t322 = nullable2 in let final self::Class2 #t323 = self::Extension2|+(self::Extension2|[](#t321{self::Class2}, #t322), 1) in let final void #t324 = self::Extension2|[]=(#t321{self::Class2}, #t322, #t323) in #t323;
+  let final self::Class1? #t170 = n1 in #t170.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](#t170{self::Class1}, nullable1);
+  let final self::Class1? #t171 = n1 in #t171.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(#t171{self::Class1}, nullable1, new self::Class1::•());
+  let final self::Class1? #t172 = n1 in #t172.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t173 = self::Extension1|[](#t172{self::Class1}, nullable1) in #t173.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t173{self::Class1});
+  let final self::Class1? #t174 = n1 in #t174.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](self::Extension1|get#nonNullable1(#t174{self::Class1}), nullable1);
+  let final self::Class1? #t175 = n1 in #t175.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(self::Extension1|get#nonNullable1(#t175{self::Class1}), nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t176 = n1 in #t176.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t177 = self::Extension1|get#nonNullable1(#t176{self::Class1}) in let final self::Class1? #t178 = nullable1 in let final self::Class1 #t179 = new self::Class1::•() in let final void #t180 = self::Extension1|[]=(#t177, #t178, #t179) in #t179;
+  let final self::Class1? #t181 = n1 in #t181.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t182 = self::Extension1|[](self::Extension1|get#nonNullable1(#t181{self::Class1}), nullable1) in #t182.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t182{self::Class1});
+  let final self::Class1? #t183 = n1 in #t183.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t184 = self::Extension1|get#nonNullable2(#t183{self::Class1}) in let final self::Class2? #t185 = nullable2 in self::Extension2|[]=(#t184, #t185, self::Extension2|+(self::Extension2|[](#t184, #t185), 0));
+  nullable2 = let final self::Class1? #t186 = n1 in #t186.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t187 = self::Extension1|get#nonNullable2(#t186{self::Class1}) in let final self::Class2? #t188 = nullable2 in let final self::Class2 #t189 = self::Extension2|+(self::Extension2|[](#t187, #t188), 0) in let final void #t190 = self::Extension2|[]=(#t187, #t188, #t189) in #t189;
+  let final self::Class1? #t191 = n1 in #t191.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t192 = nullable1 in self::Extension1|[](#t191{self::Class1}, #t192).{core::Object::==}(null) ?{self::Class1?} self::Extension1|[]=(#t191{self::Class1}, #t192, nullable1) : null;
+  nullable1 = let final self::Class1? #t193 = n1 in #t193.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t194 = nullable1 in let final self::Class1? #t195 = self::Extension1|[](#t193{self::Class1}, #t194) in #t195.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t196 = nullable1 in let final void #t197 = self::Extension1|[]=(#t193{self::Class1}, #t194, #t196) in #t196 : #t195{self::Class1};
+  let final self::Class2? #t198 = n2 in #t198.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t199 = nullable2 in self::Extension2|[]=(#t198{self::Class2}, #t199, self::Extension2|+(self::Extension2|[](#t198{self::Class2}, #t199), 0));
+  nullable2 = let final self::Class2? #t200 = n2 in #t200.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t201 = nullable2 in let final self::Class2 #t202 = self::Extension2|+(self::Extension2|[](#t200{self::Class2}, #t201), 0) in let final void #t203 = self::Extension2|[]=(#t200{self::Class2}, #t201, #t202) in #t202;
+  let final self::Class2? #t204 = n2 in #t204.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t205 = nullable2 in self::Extension2|[]=(#t204{self::Class2}, #t205, self::Extension2|+(self::Extension2|[](#t204{self::Class2}, #t205), 0));
+  nullable2 = let final self::Class2? #t206 = n2 in #t206.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t207 = nullable2 in let final self::Class2 #t208 = self::Extension2|+(self::Extension2|[](#t206{self::Class2}, #t207), 0) in let final void #t209 = self::Extension2|[]=(#t206{self::Class2}, #t207, #t208) in #t208;
+  let final self::Class2? #t210 = n2 in #t210.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t211 = nullable2 in self::Extension2|[]=(#t210{self::Class2}, #t211, self::Extension2|+(self::Extension2|[](#t210{self::Class2}, #t211), 1));
+  nullable2 = let final self::Class2? #t212 = n2 in #t212.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t213 = nullable2 in let final self::Class2 #t214 = self::Extension2|[](#t212{self::Class2}, #t213) in let final void #t215 = self::Extension2|[]=(#t212{self::Class2}, #t213, self::Extension2|+(#t214, 1)) in #t214;
+  let final self::Class2? #t216 = n2 in #t216.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t217 = nullable2 in let final self::Class2 #t218 = self::Extension2|+(self::Extension2|[](#t216{self::Class2}, #t217), 1) in let final void #t219 = self::Extension2|[]=(#t216{self::Class2}, #t217, #t218) in #t218;
+  nullable2 = let final self::Class2? #t220 = n2 in #t220.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t221 = nullable2 in let final self::Class2 #t222 = self::Extension2|+(self::Extension2|[](#t220{self::Class2}, #t221), 1) in let final void #t223 = self::Extension2|[]=(#t220{self::Class2}, #t221, #t222) in #t222;
+  let final self::Class1? #t224 = n1 in #t224.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t225 = self::Extension1|get#nonNullable2(#t224{self::Class1}) in let final self::Class2? #t226 = nullable2 in self::Extension2|[]=(#t225, #t226, self::Extension2|+(self::Extension2|[](#t225, #t226), 1));
+  nullable2 = let final self::Class1? #t227 = n1 in #t227.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t228 = self::Extension1|get#nonNullable2(#t227{self::Class1}) in let final self::Class2? #t229 = nullable2 in let final self::Class2 #t230 = self::Extension2|[](#t228, #t229) in let final void #t231 = self::Extension2|[]=(#t228, #t229, self::Extension2|+(#t230, 1)) in #t230;
+  let final self::Class1? #t232 = n1 in #t232.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t233 = self::Extension1|get#nonNullable2(#t232{self::Class1}) in let final self::Class2? #t234 = nullable2 in let final self::Class2 #t235 = self::Extension2|+(self::Extension2|[](#t233, #t234), 1) in let final void #t236 = self::Extension2|[]=(#t233, #t234, #t235) in #t235;
+  nullable2 = let final self::Class1? #t237 = n1 in #t237.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t238 = self::Extension1|get#nonNullable2(#t237{self::Class1}) in let final self::Class2? #t239 = nullable2 in let final self::Class2 #t240 = self::Extension2|+(self::Extension2|[](#t238, #t239), 1) in let final void #t241 = self::Extension2|[]=(#t238, #t239, #t240) in #t240;
+  let final self::Class1? #t242 = n1 in #t242.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t242{self::Class1}), nullable2), nullable2);
+  let final self::Class1? #t243 = n1 in #t243.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|[]=(self::Extension2|[](self::Extension1|get#nonNullable2(#t243{self::Class1}), nullable2), nullable2, new self::Class2::•());
+  nullable2 = let final self::Class1? #t244 = n1 in #t244.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t245 = self::Extension2|[](self::Extension1|get#nonNullable2(#t244{self::Class1}), nullable2) in let final self::Class2? #t246 = nullable2 in let final self::Class2 #t247 = new self::Class2::•() in let final void #t248 = self::Extension2|[]=(#t245, #t246, #t247) in #t247;
+  let final self::Class1? #t249 = n1 in #t249.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t250 = self::Extension2|[](self::Extension2|[](self::Extension1|get#nonNullable2(#t249{self::Class1}), nullable2), nullable2) in #t250.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|nonNullable2Method(#t250{self::Class2});
+  let final self::Class1? #t251 = n1 in #t251.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t252 = self::Extension2|[](self::Extension1|get#nonNullable2(#t251{self::Class1}), nullable2) in let final self::Class2? #t253 = nullable2 in self::Extension2|[]=(#t252, #t253, self::Extension2|+(self::Extension2|[](#t252, #t253), 0));
+  nullable2 = let final self::Class1? #t254 = n1 in #t254.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t255 = self::Extension2|[](self::Extension1|get#nonNullable2(#t254{self::Class1}), nullable2) in let final self::Class2? #t256 = nullable2 in let final self::Class2 #t257 = self::Extension2|+(self::Extension2|[](#t255, #t256), 0) in let final void #t258 = self::Extension2|[]=(#t255, #t256, #t257) in #t257;
+  let final self::Class1? #t259 = n1 in #t259.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t260 = self::Extension2|[](self::Extension1|get#nonNullable2(#t259{self::Class1}), nullable2) in let final self::Class2? #t261 = nullable2 in self::Extension2|[]=(#t260, #t261, self::Extension2|+(self::Extension2|[](#t260, #t261), 1));
+  nullable2 = let final self::Class1? #t262 = n1 in #t262.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t263 = self::Extension2|[](self::Extension1|get#nonNullable2(#t262{self::Class1}), nullable2) in let final self::Class2? #t264 = nullable2 in let final self::Class2 #t265 = self::Extension2|[](#t263, #t264) in let final void #t266 = self::Extension2|[]=(#t263, #t264, self::Extension2|+(#t265, 1)) in #t265;
+  let final self::Class1? #t267 = n1 in #t267.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t268 = self::Extension2|[](self::Extension1|get#nonNullable2(#t267{self::Class1}), nullable2) in let final self::Class2? #t269 = nullable2 in let final self::Class2 #t270 = self::Extension2|+(self::Extension2|[](#t268, #t269), 1) in let final void #t271 = self::Extension2|[]=(#t268, #t269, #t270) in #t270;
+  nullable2 = let final self::Class1? #t272 = n1 in #t272.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t273 = self::Extension2|[](self::Extension1|get#nonNullable2(#t272{self::Class1}), nullable2) in let final self::Class2? #t274 = nullable2 in let final self::Class2 #t275 = self::Extension2|+(self::Extension2|[](#t273, #t274), 1) in let final void #t276 = self::Extension2|[]=(#t273, #t274, #t275) in #t275;
+  let final self::Class1? #t277 = n1 in #t277.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t278 = self::Extension1|[](#t277{self::Class1}, nullable1) in #t278.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[](#t278{self::Class1}, nullable1);
+  let final self::Class1? #t279 = n1 in #t279.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t280 = self::Extension1|[](#t279{self::Class1}, nullable1) in #t280.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|[]=(#t280{self::Class1}, nullable1, new self::Class1::•());
+  nullable1 = let final self::Class1? #t281 = n1 in #t281.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t282 = self::Extension1|[](#t281{self::Class1}, nullable1) in #t282.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t283 = nullable1 in let final self::Class1 #t284 = new self::Class1::•() in let final void #t285 = self::Extension1|[]=(#t282{self::Class1}, #t283, #t284) in #t284;
+  let final self::Class1? #t286 = n1 in #t286.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t287 = self::Extension1|[](#t286{self::Class1}, nullable1) in #t287.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t288 = self::Extension1|[](#t287{self::Class1}, nullable1) in #t288.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t288{self::Class1});
+  nullable1 = let final self::Class1? #t289 = n1 in #t289.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t290 = self::Extension1|[](#t289{self::Class1}, nullable1) in #t290.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t291 = self::Extension1|[](#t290{self::Class1}, nullable1) in #t291.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|nonNullable1Method(#t291{self::Class1});
+  let final self::Class1? #t292 = n1 in #t292.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t293 = self::Extension1|[](#t292{self::Class1}, nullable1) in #t293.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t294 = nullable1 in self::Extension1|[](#t293{self::Class1}, #t294).{core::Object::==}(null) ?{self::Class1?} self::Extension1|[]=(#t293{self::Class1}, #t294, nullable1) : null;
+  nullable1 = let final self::Class1? #t295 = n1 in #t295.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t296 = self::Extension1|[](#t295{self::Class1}, nullable1) in #t296.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t297 = nullable1 in let final self::Class1? #t298 = self::Extension1|[](#t296{self::Class1}, #t297) in #t298.{core::Object::==}(null) ?{self::Class1?} let final self::Class1? #t299 = nullable1 in let final void #t300 = self::Extension1|[]=(#t296{self::Class1}, #t297, #t299) in #t299 : #t298{self::Class1};
+  let final self::Class3? #t301 = n3 in #t301.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t302 = self::Extension3|[](#t301{self::Class3}, nullable3) in #t302.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t303 = nullable2 in self::Extension2|[]=(#t302{self::Class2}, #t303, self::Extension2|+(self::Extension2|[](#t302{self::Class2}, #t303), 0));
+  nullable2 = let final self::Class3? #t304 = n3 in #t304.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t305 = self::Extension3|[](#t304{self::Class3}, nullable3) in #t305.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t306 = nullable2 in let final self::Class2 #t307 = self::Extension2|+(self::Extension2|[](#t305{self::Class2}, #t306), 0) in let final void #t308 = self::Extension2|[]=(#t305{self::Class2}, #t306, #t307) in #t307;
+  let final self::Class3? #t309 = n3 in #t309.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t310 = self::Extension3|[](#t309{self::Class3}, nullable3) in #t310.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t311 = nullable2 in self::Extension2|[]=(#t310{self::Class2}, #t311, self::Extension2|+(self::Extension2|[](#t310{self::Class2}, #t311), 1));
+  nullable2 = let final self::Class3? #t312 = n3 in #t312.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t313 = self::Extension3|[](#t312{self::Class3}, nullable3) in #t313.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t314 = nullable2 in let final self::Class2 #t315 = self::Extension2|[](#t313{self::Class2}, #t314) in let final void #t316 = self::Extension2|[]=(#t313{self::Class2}, #t314, self::Extension2|+(#t315, 1)) in #t315;
+  let final self::Class3? #t317 = n3 in #t317.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t318 = self::Extension3|[](#t317{self::Class3}, nullable3) in #t318.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t319 = nullable2 in let final self::Class2 #t320 = self::Extension2|+(self::Extension2|[](#t318{self::Class2}, #t319), 1) in let final void #t321 = self::Extension2|[]=(#t318{self::Class2}, #t319, #t320) in #t320;
+  nullable2 = let final self::Class3? #t322 = n3 in #t322.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t323 = self::Extension3|[](#t322{self::Class3}, nullable3) in #t323.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2? #t324 = nullable2 in let final self::Class2 #t325 = self::Extension2|+(self::Extension2|[](#t323{self::Class2}, #t324), 1) in let final void #t326 = self::Extension2|[]=(#t323{self::Class2}, #t324, #t325) in #t325;
 }
 static method operatorAccess(self::Class1? n1, self::Class2? n2) → void {
   self::Class2? nullable2 = n2;
-  self::throws(() → self::Class1? => self::Extension1|+(let final self::Class1? #t325 = n1 in #t325.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t325{self::Class1}), 0));
-  self::throws(() → self::Class1? => self::Extension1|unary-(let final self::Class1? #t326 = n1 in #t326.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t326{self::Class1})));
-  let final self::Class2? #t327 = n2 in #t327.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t327, self::Extension2|+(self::Extension2|get#nonNullable2(#t327), 0));
-  nullable2 = let final self::Class2? #t328 = n2 in #t328.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t329 = self::Extension2|+(self::Extension2|get#nonNullable2(#t328), 0) in let final void #t330 = self::Extension2|set#nonNullable2(#t328, #t329) in #t329;
-  let final self::Class2? #t331 = n2 in #t331.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t332 = self::Extension2|get#nonNullable2(#t331{self::Class2}) in self::Extension2|set#nonNullable2(#t332, self::Extension2|+(self::Extension2|get#nonNullable2(#t332), 0));
-  nullable2 = let final self::Class2? #t333 = n2 in #t333.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t334 = self::Extension2|get#nonNullable2(#t333{self::Class2}) in let final self::Class2 #t335 = self::Extension2|+(self::Extension2|get#nonNullable2(#t334), 0) in let final void #t336 = self::Extension2|set#nonNullable2(#t334, #t335) in #t335;
-  let final self::Class2? #t337 = n2 in #t337.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t337, self::Extension2|+(self::Extension2|get#nonNullable2(#t337), 1));
-  nullable2 = let final self::Class2? #t338 = n2 in #t338.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t339 = self::Extension2|get#nonNullable2(#t338) in let final void #t340 = self::Extension2|set#nonNullable2(#t338, self::Extension2|+(#t339, 1)) in #t339;
-  let final self::Class2? #t341 = n2 in #t341.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t342 = self::Extension2|+(self::Extension2|get#nonNullable2(#t341), 1) in let final void #t343 = self::Extension2|set#nonNullable2(#t341, #t342) in #t342;
-  nullable2 = let final self::Class2? #t344 = n2 in #t344.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t345 = self::Extension2|+(self::Extension2|get#nonNullable2(#t344), 1) in let final void #t346 = self::Extension2|set#nonNullable2(#t344, #t345) in #t345;
+  self::throws(() → self::Class1? => let final<BottomType> #t327 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:226:33: Error: Operator '+' cannot be called on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
+  throws(() => n1?.nonNullable1 + 0);
+                                ^" in self::Extension1|+(let final self::Class1? #t328 = n1 in #t328.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t328{self::Class1}), 0));
+  self::throws(() → self::Class1? => let final<BottomType> #t329 = invalid-expression "pkg/front_end/testcases/nnbd/null_shorting_extension.dart:227:16: Error: Operator 'unary-' cannot be called on 'Class1?' because it is potentially null.
+ - 'Class1' is from 'pkg/front_end/testcases/nnbd/null_shorting_extension.dart'.
+  throws(() => -n1?.nonNullable1);
+               ^" in self::Extension1|unary-(let final self::Class1? #t330 = n1 in #t330.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nonNullable1(#t330{self::Class1})));
+  let final self::Class2? #t331 = n2 in #t331.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t331, self::Extension2|+(self::Extension2|get#nonNullable2(#t331), 0));
+  nullable2 = let final self::Class2? #t332 = n2 in #t332.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t333 = self::Extension2|+(self::Extension2|get#nonNullable2(#t332), 0) in let final void #t334 = self::Extension2|set#nonNullable2(#t332, #t333) in #t333;
+  let final self::Class2? #t335 = n2 in #t335.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t336 = self::Extension2|get#nonNullable2(#t335{self::Class2}) in self::Extension2|set#nonNullable2(#t336, self::Extension2|+(self::Extension2|get#nonNullable2(#t336), 0));
+  nullable2 = let final self::Class2? #t337 = n2 in #t337.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t338 = self::Extension2|get#nonNullable2(#t337{self::Class2}) in let final self::Class2 #t339 = self::Extension2|+(self::Extension2|get#nonNullable2(#t338), 0) in let final void #t340 = self::Extension2|set#nonNullable2(#t338, #t339) in #t339;
+  let final self::Class2? #t341 = n2 in #t341.{core::Object::==}(null) ?{self::Class2?} null : self::Extension2|set#nonNullable2(#t341, self::Extension2|+(self::Extension2|get#nonNullable2(#t341), 1));
+  nullable2 = let final self::Class2? #t342 = n2 in #t342.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t343 = self::Extension2|get#nonNullable2(#t342) in let final void #t344 = self::Extension2|set#nonNullable2(#t342, self::Extension2|+(#t343, 1)) in #t343;
+  let final self::Class2? #t345 = n2 in #t345.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t346 = self::Extension2|+(self::Extension2|get#nonNullable2(#t345), 1) in let final void #t347 = self::Extension2|set#nonNullable2(#t345, #t346) in #t346;
+  nullable2 = let final self::Class2? #t348 = n2 in #t348.{core::Object::==}(null) ?{self::Class2?} null : let final self::Class2 #t349 = self::Extension2|+(self::Extension2|get#nonNullable2(#t348), 1) in let final void #t350 = self::Extension2|set#nonNullable2(#t348, #t349) in #t349;
 }
 static method ifNull(self::Class1? n1) → void {
   self::Class1? nullable1 = n1;
-  let final self::Class1? #t347 = n1 in #t347.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t347).{core::Object::==}(null) ?{self::Class1} self::Extension1|set#nullable1(#t347, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t348 = n1 in #t348.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t349 = self::Extension1|get#nullable1(#t348) in #t349.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t350 = n1{self::Class1} in let final void #t351 = self::Extension1|set#nullable1(#t348, #t350) in #t350 : #t349{self::Class1};
-  let final self::Class1? #t352 = n1 in #t352.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t353 = self::Extension1|get#nonNullable1(#t352{self::Class1}) in self::Extension1|get#nullable1(#t353{self::Class1}).{core::Object::==}(null) ?{self::Class1} self::Extension1|set#nullable1(#t353{self::Class1}, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t354 = n1 in #t354.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t355 = self::Extension1|get#nonNullable1(#t354{self::Class1}) in let final self::Class1? #t356 = self::Extension1|get#nullable1(#t355{self::Class1}) in #t356.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t357 = n1{self::Class1} in let final void #t358 = self::Extension1|set#nullable1(#t355{self::Class1}, #t357) in #t357 : #t356{self::Class1};
-  let final self::Class1? #t359 = n1 in #t359.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t360 = self::Extension1|get#nonNullable1(#t359{self::Class1}) in let final self::Class1 #t361 = n1{self::Class1} in self::Extension1|[](#t360, #t361).{core::Object::==}(null) ?{self::Class1} self::Extension1|[]=(#t360, #t361, n1{self::Class1}) : null;
-  n1 = let final self::Class1? #t362 = n1 in #t362.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t363 = self::Extension1|get#nonNullable1(#t362{self::Class1}) in let final self::Class1 #t364 = n1{self::Class1} in let final self::Class1? #t365 = self::Extension1|[](#t363, #t364) in #t365.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t366 = n1{self::Class1} in let final void #t367 = self::Extension1|[]=(#t363, #t364, #t366) in #t366 : #t365{self::Class1};
+  let final self::Class1? #t351 = n1 in #t351.{core::Object::==}(null) ?{self::Class1?} null : self::Extension1|get#nullable1(#t351).{core::Object::==}(null) ?{self::Class1} self::Extension1|set#nullable1(#t351, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t352 = n1 in #t352.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t353 = self::Extension1|get#nullable1(#t352) in #t353.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t354 = n1{self::Class1} in let final void #t355 = self::Extension1|set#nullable1(#t352, #t354) in #t354 : #t353{self::Class1};
+  let final self::Class1? #t356 = n1 in #t356.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t357 = self::Extension1|get#nonNullable1(#t356{self::Class1}) in self::Extension1|get#nullable1(#t357{self::Class1}).{core::Object::==}(null) ?{self::Class1} self::Extension1|set#nullable1(#t357{self::Class1}, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t358 = n1 in #t358.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1? #t359 = self::Extension1|get#nonNullable1(#t358{self::Class1}) in let final self::Class1? #t360 = self::Extension1|get#nullable1(#t359{self::Class1}) in #t360.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t361 = n1{self::Class1} in let final void #t362 = self::Extension1|set#nullable1(#t359{self::Class1}, #t361) in #t361 : #t360{self::Class1};
+  let final self::Class1? #t363 = n1 in #t363.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t364 = self::Extension1|get#nonNullable1(#t363{self::Class1}) in let final self::Class1 #t365 = n1{self::Class1} in self::Extension1|[](#t364, #t365).{core::Object::==}(null) ?{self::Class1} self::Extension1|[]=(#t364, #t365, n1{self::Class1}) : null;
+  n1 = let final self::Class1? #t366 = n1 in #t366.{core::Object::==}(null) ?{self::Class1?} null : let final self::Class1 #t367 = self::Extension1|get#nonNullable1(#t366{self::Class1}) in let final self::Class1 #t368 = n1{self::Class1} in let final self::Class1? #t369 = self::Extension1|[](#t367, #t368) in #t369.{core::Object::==}(null) ?{self::Class1} let final self::Class1 #t370 = n1{self::Class1} in let final void #t371 = self::Extension1|[]=(#t367, #t368, #t370) in #t370 : #t369{self::Class1};
 }
 static method throws(() → void f) → void {
   try {
diff --git a/pkg/front_end/testcases/nnbd/nullable_access.dart.weak.expect b/pkg/front_end/testcases/nnbd/nullable_access.dart.weak.expect
index dc3992f..9699336 100644
--- a/pkg/front_end/testcases/nnbd/nullable_access.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_access.dart.weak.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/nullable_access.dart:23:18: Warning: Property 'nonNullableField' is accessed on 'Class?' which is potentially null.
+// pkg/front_end/testcases/nnbd/nullable_access.dart:23:18: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
 //  - 'Class' is from 'pkg/front_end/testcases/nnbd/nullable_access.dart'.
 // Try accessing using ?. instead.
 //   throws(() => c.nonNullableField);
@@ -33,9 +33,13 @@
 }
 static method main() → dynamic {
   self::Class? c;
-  self::throws(() → self::A => c.{self::Class::nonNullableField});
-  self::expect(null, let final self::Class? #t1 = c in #t1.{core::Object::==}(null) ?{self::A?} null : #t1{self::Class}.{self::Class::nonNullableField});
-  self::expect(null, let final self::Class? #t2 = c in #t2.{core::Object::==}(null) ?{self::A?} null : #t2{self::Class}.{self::Class::nonNullableField}.{self::A::nonNullableProperty});
+  self::throws(() → self::A => let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_access.dart:23:18: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/nullable_access.dart'.
+Try accessing using ?. instead.
+  throws(() => c.nonNullableField);
+                 ^^^^^^^^^^^^^^^^" in c.{self::Class::nonNullableField});
+  self::expect(null, let final self::Class? #t2 = c in #t2.{core::Object::==}(null) ?{self::A?} null : #t2{self::Class}.{self::Class::nonNullableField});
+  self::expect(null, let final self::Class? #t3 = c in #t3.{core::Object::==}(null) ?{self::A?} null : #t3{self::Class}.{self::Class::nonNullableField}.{self::A::nonNullableProperty});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!expected.{core::Object::==}(actual))
diff --git a/pkg/front_end/testcases/nnbd/nullable_access.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/nullable_access.dart.weak.transformed.expect
index dc3992f..9699336 100644
--- a/pkg/front_end/testcases/nnbd/nullable_access.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_access.dart.weak.transformed.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/nullable_access.dart:23:18: Warning: Property 'nonNullableField' is accessed on 'Class?' which is potentially null.
+// pkg/front_end/testcases/nnbd/nullable_access.dart:23:18: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
 //  - 'Class' is from 'pkg/front_end/testcases/nnbd/nullable_access.dart'.
 // Try accessing using ?. instead.
 //   throws(() => c.nonNullableField);
@@ -33,9 +33,13 @@
 }
 static method main() → dynamic {
   self::Class? c;
-  self::throws(() → self::A => c.{self::Class::nonNullableField});
-  self::expect(null, let final self::Class? #t1 = c in #t1.{core::Object::==}(null) ?{self::A?} null : #t1{self::Class}.{self::Class::nonNullableField});
-  self::expect(null, let final self::Class? #t2 = c in #t2.{core::Object::==}(null) ?{self::A?} null : #t2{self::Class}.{self::Class::nonNullableField}.{self::A::nonNullableProperty});
+  self::throws(() → self::A => let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_access.dart:23:18: Error: Property 'nonNullableField' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/nullable_access.dart'.
+Try accessing using ?. instead.
+  throws(() => c.nonNullableField);
+                 ^^^^^^^^^^^^^^^^" in c.{self::Class::nonNullableField});
+  self::expect(null, let final self::Class? #t2 = c in #t2.{core::Object::==}(null) ?{self::A?} null : #t2{self::Class}.{self::Class::nonNullableField});
+  self::expect(null, let final self::Class? #t3 = c in #t3.{core::Object::==}(null) ?{self::A?} null : #t3{self::Class}.{self::Class::nonNullableField}.{self::A::nonNullableProperty});
 }
 static method expect(dynamic expected, dynamic actual) → dynamic {
   if(!expected.{core::Object::==}(actual))
diff --git a/pkg/front_end/testcases/nnbd/nullable_receiver.dart.strong.expect b/pkg/front_end/testcases/nnbd/nullable_receiver.dart.strong.expect
index a326cf2..24d5f3d 100644
--- a/pkg/front_end/testcases/nnbd/nullable_receiver.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_receiver.dart.strong.expect
@@ -30,12 +30,6 @@
 //   a.baz = 42;
 //     ^^^
 //
-// pkg/front_end/testcases/nnbd/nullable_receiver.dart:26:4: Error: Method 'call' cannot be called on 'A?' because it is potentially null.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
-// Try calling using ?. instead.
-//   a();
-//    ^
-//
 // pkg/front_end/testcases/nnbd/nullable_receiver.dart:26:4: Error: Can't use an expression of type 'A?' as a function because it's potentially null.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
 // Try calling using ?.call instead.
@@ -108,23 +102,19 @@
  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
 Try calling using ?.call instead.
   a();
-   ^" in let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:26:4: Error: Method 'call' cannot be called on 'A?' because it is potentially null.
- - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
-Try calling using ?. instead.
-  a();
    ^" in a.{self::A::call}();
-  let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:27:5: Error: Method 'toString' cannot be called on 'B?' because it is potentially null.
+  let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:27:5: Error: Method 'toString' cannot be called on 'B?' because it is potentially null.
  - 'B' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
 Try calling using ?. instead.
   b.toString(0);
     ^^^^^^^^" in b.{self::B::toString}(0);
-  core::Function f1 = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:29:17: Error: Can't tear off method 'call' from a potentially null value.
+  core::Function f1 = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:29:17: Error: Can't tear off method 'call' from a potentially null value.
   Function f1 = a;
                 ^" in a as{TypeError} core::Function;
-  () → void f2 = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:30:24: Error: Can't tear off method 'call' from a potentially null value.
+  () → void f2 = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:30:24: Error: Can't tear off method 'call' from a potentially null value.
   void Function() f2 = a;
                        ^" in a as{TypeError} () → void;
-  () →? void f3 = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:31:25: Error: Can't tear off method 'call' from a potentially null value.
+  () →? void f3 = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:31:25: Error: Can't tear off method 'call' from a potentially null value.
   void Function()? f3 = a;
                         ^" in a as{TypeError} () →? void;
 }
diff --git a/pkg/front_end/testcases/nnbd/nullable_receiver.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/nullable_receiver.dart.strong.transformed.expect
index a326cf2..24d5f3d 100644
--- a/pkg/front_end/testcases/nnbd/nullable_receiver.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_receiver.dart.strong.transformed.expect
@@ -30,12 +30,6 @@
 //   a.baz = 42;
 //     ^^^
 //
-// pkg/front_end/testcases/nnbd/nullable_receiver.dart:26:4: Error: Method 'call' cannot be called on 'A?' because it is potentially null.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
-// Try calling using ?. instead.
-//   a();
-//    ^
-//
 // pkg/front_end/testcases/nnbd/nullable_receiver.dart:26:4: Error: Can't use an expression of type 'A?' as a function because it's potentially null.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
 // Try calling using ?.call instead.
@@ -108,23 +102,19 @@
  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
 Try calling using ?.call instead.
   a();
-   ^" in let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:26:4: Error: Method 'call' cannot be called on 'A?' because it is potentially null.
- - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
-Try calling using ?. instead.
-  a();
    ^" in a.{self::A::call}();
-  let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:27:5: Error: Method 'toString' cannot be called on 'B?' because it is potentially null.
+  let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:27:5: Error: Method 'toString' cannot be called on 'B?' because it is potentially null.
  - 'B' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
 Try calling using ?. instead.
   b.toString(0);
     ^^^^^^^^" in b.{self::B::toString}(0);
-  core::Function f1 = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:29:17: Error: Can't tear off method 'call' from a potentially null value.
+  core::Function f1 = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:29:17: Error: Can't tear off method 'call' from a potentially null value.
   Function f1 = a;
                 ^" in a as{TypeError} core::Function;
-  () → void f2 = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:30:24: Error: Can't tear off method 'call' from a potentially null value.
+  () → void f2 = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:30:24: Error: Can't tear off method 'call' from a potentially null value.
   void Function() f2 = a;
                        ^" in a as{TypeError} () → void;
-  () →? void f3 = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:31:25: Error: Can't tear off method 'call' from a potentially null value.
+  () →? void f3 = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:31:25: Error: Can't tear off method 'call' from a potentially null value.
   void Function()? f3 = a;
                         ^" in a as{TypeError} () →? void;
 }
diff --git a/pkg/front_end/testcases/nnbd/nullable_receiver.dart.weak.expect b/pkg/front_end/testcases/nnbd/nullable_receiver.dart.weak.expect
index a00b574..24d5f3d 100644
--- a/pkg/front_end/testcases/nnbd/nullable_receiver.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_receiver.dart.weak.expect
@@ -2,61 +2,55 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/nullable_receiver.dart:20:5: Warning: Property 'length' is accessed on 'String?' which is potentially null.
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:20:5: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
 // Try accessing using ?. instead.
 //   s.length;
 //     ^^^^^^
 //
-// pkg/front_end/testcases/nnbd/nullable_receiver.dart:21:5: Warning: Method 'substring' is called on 'String?' which is potentially null.
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:21:5: Error: Method 'substring' cannot be called on 'String?' because it is potentially null.
 // Try calling using ?. instead.
 //   s.substring(1, 1);
 //     ^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/nullable_receiver.dart:23:5: Warning: Method 'foo' is called on 'A?' which is potentially null.
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:23:5: Error: Method 'foo' cannot be called on 'A?' because it is potentially null.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
 // Try calling using ?. instead.
 //   a.foo();
 //     ^^^
 //
-// pkg/front_end/testcases/nnbd/nullable_receiver.dart:24:5: Warning: Property 'bar' is accessed on 'A?' which is potentially null.
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:24:5: Error: Property 'bar' cannot be accessed on 'A?' because it is potentially null.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
 // Try accessing using ?. instead.
 //   a.bar;
 //     ^^^
 //
-// pkg/front_end/testcases/nnbd/nullable_receiver.dart:25:5: Warning: Property 'baz' is accessed on 'A?' which is potentially null.
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:25:5: Error: Property 'baz' cannot be accessed on 'A?' because it is potentially null.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
 // Try accessing using ?. instead.
 //   a.baz = 42;
 //     ^^^
 //
-// pkg/front_end/testcases/nnbd/nullable_receiver.dart:26:4: Warning: Method 'call' is called on 'A?' which is potentially null.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
-// Try calling using ?. instead.
-//   a();
-//    ^
-//
-// pkg/front_end/testcases/nnbd/nullable_receiver.dart:26:4: Warning: Expression of type 'A?' is used as a function, but it's potentially null.
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:26:4: Error: Can't use an expression of type 'A?' as a function because it's potentially null.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
 // Try calling using ?.call instead.
 //   a();
 //    ^
 //
-// pkg/front_end/testcases/nnbd/nullable_receiver.dart:27:5: Warning: Method 'toString' is called on 'B?' which is potentially null.
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:27:5: Error: Method 'toString' cannot be called on 'B?' because it is potentially null.
 //  - 'B' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
 // Try calling using ?. instead.
 //   b.toString(0);
 //     ^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/nullable_receiver.dart:29:17: Warning: Tearing off method 'call' from a potentially null value.
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:29:17: Error: Can't tear off method 'call' from a potentially null value.
 //   Function f1 = a;
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/nullable_receiver.dart:30:24: Warning: Tearing off method 'call' from a potentially null value.
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:30:24: Error: Can't tear off method 'call' from a potentially null value.
 //   void Function() f2 = a;
 //                        ^
 //
-// pkg/front_end/testcases/nnbd/nullable_receiver.dart:31:25: Warning: Tearing off method 'call' from a potentially null value.
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:31:25: Error: Can't tear off method 'call' from a potentially null value.
 //   void Function()? f3 = a;
 //                         ^
 //
@@ -81,16 +75,48 @@
     return super.{core::Object::toString}();
 }
 static method error(core::String? s, self::A? a, self::B? b) → dynamic {
-  s.{core::String::length};
-  s.{core::String::substring}(1, 1);
-  a.{self::A::foo}();
-  a.{self::A::bar};
-  a.{self::A::baz} = 42;
-  a.{self::A::call}();
-  b.{self::B::toString}(0);
-  core::Function f1 = a as{TypeError} core::Function;
-  () → void f2 = a as{TypeError} () → void;
-  () →? void f3 = a as{TypeError} () →? void;
+  let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:20:5: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
+Try accessing using ?. instead.
+  s.length;
+    ^^^^^^" in s.{core::String::length};
+  let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:21:5: Error: Method 'substring' cannot be called on 'String?' because it is potentially null.
+Try calling using ?. instead.
+  s.substring(1, 1);
+    ^^^^^^^^^" in s.{core::String::substring}(1, 1);
+  let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:23:5: Error: Method 'foo' cannot be called on 'A?' because it is potentially null.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
+Try calling using ?. instead.
+  a.foo();
+    ^^^" in a.{self::A::foo}();
+  let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:24:5: Error: Property 'bar' cannot be accessed on 'A?' because it is potentially null.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
+Try accessing using ?. instead.
+  a.bar;
+    ^^^" in a.{self::A::bar};
+  let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:25:5: Error: Property 'baz' cannot be accessed on 'A?' because it is potentially null.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
+Try accessing using ?. instead.
+  a.baz = 42;
+    ^^^" in a.{self::A::baz} = 42;
+  let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:26:4: Error: Can't use an expression of type 'A?' as a function because it's potentially null.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
+Try calling using ?.call instead.
+  a();
+   ^" in a.{self::A::call}();
+  let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:27:5: Error: Method 'toString' cannot be called on 'B?' because it is potentially null.
+ - 'B' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
+Try calling using ?. instead.
+  b.toString(0);
+    ^^^^^^^^" in b.{self::B::toString}(0);
+  core::Function f1 = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:29:17: Error: Can't tear off method 'call' from a potentially null value.
+  Function f1 = a;
+                ^" in a as{TypeError} core::Function;
+  () → void f2 = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:30:24: Error: Can't tear off method 'call' from a potentially null value.
+  void Function() f2 = a;
+                       ^" in a as{TypeError} () → void;
+  () →? void f3 = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:31:25: Error: Can't tear off method 'call' from a potentially null value.
+  void Function()? f3 = a;
+                        ^" in a as{TypeError} () →? void;
 }
 static method ok<T extends core::Object? = core::Object?>(core::String? s, self::A? a, self::ok::T% t, self::B? b, core::Invocation i) → dynamic {
   s.{core::String::==}(s);
diff --git a/pkg/front_end/testcases/nnbd/nullable_receiver.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/nullable_receiver.dart.weak.transformed.expect
index a00b574..24d5f3d 100644
--- a/pkg/front_end/testcases/nnbd/nullable_receiver.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_receiver.dart.weak.transformed.expect
@@ -2,61 +2,55 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/nullable_receiver.dart:20:5: Warning: Property 'length' is accessed on 'String?' which is potentially null.
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:20:5: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
 // Try accessing using ?. instead.
 //   s.length;
 //     ^^^^^^
 //
-// pkg/front_end/testcases/nnbd/nullable_receiver.dart:21:5: Warning: Method 'substring' is called on 'String?' which is potentially null.
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:21:5: Error: Method 'substring' cannot be called on 'String?' because it is potentially null.
 // Try calling using ?. instead.
 //   s.substring(1, 1);
 //     ^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/nullable_receiver.dart:23:5: Warning: Method 'foo' is called on 'A?' which is potentially null.
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:23:5: Error: Method 'foo' cannot be called on 'A?' because it is potentially null.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
 // Try calling using ?. instead.
 //   a.foo();
 //     ^^^
 //
-// pkg/front_end/testcases/nnbd/nullable_receiver.dart:24:5: Warning: Property 'bar' is accessed on 'A?' which is potentially null.
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:24:5: Error: Property 'bar' cannot be accessed on 'A?' because it is potentially null.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
 // Try accessing using ?. instead.
 //   a.bar;
 //     ^^^
 //
-// pkg/front_end/testcases/nnbd/nullable_receiver.dart:25:5: Warning: Property 'baz' is accessed on 'A?' which is potentially null.
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:25:5: Error: Property 'baz' cannot be accessed on 'A?' because it is potentially null.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
 // Try accessing using ?. instead.
 //   a.baz = 42;
 //     ^^^
 //
-// pkg/front_end/testcases/nnbd/nullable_receiver.dart:26:4: Warning: Method 'call' is called on 'A?' which is potentially null.
-//  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
-// Try calling using ?. instead.
-//   a();
-//    ^
-//
-// pkg/front_end/testcases/nnbd/nullable_receiver.dart:26:4: Warning: Expression of type 'A?' is used as a function, but it's potentially null.
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:26:4: Error: Can't use an expression of type 'A?' as a function because it's potentially null.
 //  - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
 // Try calling using ?.call instead.
 //   a();
 //    ^
 //
-// pkg/front_end/testcases/nnbd/nullable_receiver.dart:27:5: Warning: Method 'toString' is called on 'B?' which is potentially null.
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:27:5: Error: Method 'toString' cannot be called on 'B?' because it is potentially null.
 //  - 'B' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
 // Try calling using ?. instead.
 //   b.toString(0);
 //     ^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/nullable_receiver.dart:29:17: Warning: Tearing off method 'call' from a potentially null value.
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:29:17: Error: Can't tear off method 'call' from a potentially null value.
 //   Function f1 = a;
 //                 ^
 //
-// pkg/front_end/testcases/nnbd/nullable_receiver.dart:30:24: Warning: Tearing off method 'call' from a potentially null value.
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:30:24: Error: Can't tear off method 'call' from a potentially null value.
 //   void Function() f2 = a;
 //                        ^
 //
-// pkg/front_end/testcases/nnbd/nullable_receiver.dart:31:25: Warning: Tearing off method 'call' from a potentially null value.
+// pkg/front_end/testcases/nnbd/nullable_receiver.dart:31:25: Error: Can't tear off method 'call' from a potentially null value.
 //   void Function()? f3 = a;
 //                         ^
 //
@@ -81,16 +75,48 @@
     return super.{core::Object::toString}();
 }
 static method error(core::String? s, self::A? a, self::B? b) → dynamic {
-  s.{core::String::length};
-  s.{core::String::substring}(1, 1);
-  a.{self::A::foo}();
-  a.{self::A::bar};
-  a.{self::A::baz} = 42;
-  a.{self::A::call}();
-  b.{self::B::toString}(0);
-  core::Function f1 = a as{TypeError} core::Function;
-  () → void f2 = a as{TypeError} () → void;
-  () →? void f3 = a as{TypeError} () →? void;
+  let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:20:5: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
+Try accessing using ?. instead.
+  s.length;
+    ^^^^^^" in s.{core::String::length};
+  let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:21:5: Error: Method 'substring' cannot be called on 'String?' because it is potentially null.
+Try calling using ?. instead.
+  s.substring(1, 1);
+    ^^^^^^^^^" in s.{core::String::substring}(1, 1);
+  let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:23:5: Error: Method 'foo' cannot be called on 'A?' because it is potentially null.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
+Try calling using ?. instead.
+  a.foo();
+    ^^^" in a.{self::A::foo}();
+  let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:24:5: Error: Property 'bar' cannot be accessed on 'A?' because it is potentially null.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
+Try accessing using ?. instead.
+  a.bar;
+    ^^^" in a.{self::A::bar};
+  let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:25:5: Error: Property 'baz' cannot be accessed on 'A?' because it is potentially null.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
+Try accessing using ?. instead.
+  a.baz = 42;
+    ^^^" in a.{self::A::baz} = 42;
+  let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:26:4: Error: Can't use an expression of type 'A?' as a function because it's potentially null.
+ - 'A' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
+Try calling using ?.call instead.
+  a();
+   ^" in a.{self::A::call}();
+  let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:27:5: Error: Method 'toString' cannot be called on 'B?' because it is potentially null.
+ - 'B' is from 'pkg/front_end/testcases/nnbd/nullable_receiver.dart'.
+Try calling using ?. instead.
+  b.toString(0);
+    ^^^^^^^^" in b.{self::B::toString}(0);
+  core::Function f1 = let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:29:17: Error: Can't tear off method 'call' from a potentially null value.
+  Function f1 = a;
+                ^" in a as{TypeError} core::Function;
+  () → void f2 = let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:30:24: Error: Can't tear off method 'call' from a potentially null value.
+  void Function() f2 = a;
+                       ^" in a as{TypeError} () → void;
+  () →? void f3 = let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/nullable_receiver.dart:31:25: Error: Can't tear off method 'call' from a potentially null value.
+  void Function()? f3 = a;
+                        ^" in a as{TypeError} () →? void;
 }
 static method ok<T extends core::Object? = core::Object?>(core::String? s, self::A? a, self::ok::T% t, self::B? b, core::Invocation i) → dynamic {
   s.{core::String::==}(s);
diff --git a/pkg/front_end/testcases/nnbd/nullable_rhs_of_typedef.dart.outline.expect b/pkg/front_end/testcases/nnbd/nullable_rhs_of_typedef.dart.outline.expect
index 3429c36..4c7e4f3 100644
--- a/pkg/front_end/testcases/nnbd/nullable_rhs_of_typedef.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_rhs_of_typedef.dart.outline.expect
@@ -1,12 +1,19 @@
 library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/nullable_rhs_of_typedef.dart:5:11: Error: Can't create typedef from nullable type.
+// typedef F = void Function()?;
+//           ^
+//
 import self as self;
 
-typedef F = () →? void;
+typedef F = invalid-type;
 static method foo(() → void x) → void
   ;
-static method bar(() →? void x) → void
+static method bar(invalid-type x) → void
   ;
-static method baz(() →? void x) → void
+static method baz(invalid-type x) → void
   ;
 static method main() → dynamic
   ;
diff --git a/pkg/front_end/testcases/nnbd/nullable_rhs_of_typedef.dart.strong.expect b/pkg/front_end/testcases/nnbd/nullable_rhs_of_typedef.dart.strong.expect
index 425f791..8c42147 100644
--- a/pkg/front_end/testcases/nnbd/nullable_rhs_of_typedef.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_rhs_of_typedef.dart.strong.expect
@@ -1,13 +1,20 @@
 library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/nullable_rhs_of_typedef.dart:5:11: Error: Can't create typedef from nullable type.
+// typedef F = void Function()?;
+//           ^
+//
 import self as self;
 
-typedef F = () →? void;
+typedef F = invalid-type;
 static method foo(() → void x) → void {
-  self::bar(x);
+  self::bar(x as{TypeError,ForNonNullableByDefault} invalid-type);
   self::bar(null);
-  self::baz(x);
+  self::baz(x as{TypeError,ForNonNullableByDefault} invalid-type);
   self::baz(null);
 }
-static method bar(() →? void x) → void {}
-static method baz(() →? void x) → void {}
+static method bar(invalid-type x) → void {}
+static method baz(invalid-type x) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/nullable_rhs_of_typedef.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/nullable_rhs_of_typedef.dart.strong.transformed.expect
index 425f791..8c42147 100644
--- a/pkg/front_end/testcases/nnbd/nullable_rhs_of_typedef.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_rhs_of_typedef.dart.strong.transformed.expect
@@ -1,13 +1,20 @@
 library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/nullable_rhs_of_typedef.dart:5:11: Error: Can't create typedef from nullable type.
+// typedef F = void Function()?;
+//           ^
+//
 import self as self;
 
-typedef F = () →? void;
+typedef F = invalid-type;
 static method foo(() → void x) → void {
-  self::bar(x);
+  self::bar(x as{TypeError,ForNonNullableByDefault} invalid-type);
   self::bar(null);
-  self::baz(x);
+  self::baz(x as{TypeError,ForNonNullableByDefault} invalid-type);
   self::baz(null);
 }
-static method bar(() →? void x) → void {}
-static method baz(() →? void x) → void {}
+static method bar(invalid-type x) → void {}
+static method baz(invalid-type x) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/nullable_rhs_of_typedef.dart.weak.expect b/pkg/front_end/testcases/nnbd/nullable_rhs_of_typedef.dart.weak.expect
index 425f791..8c42147 100644
--- a/pkg/front_end/testcases/nnbd/nullable_rhs_of_typedef.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_rhs_of_typedef.dart.weak.expect
@@ -1,13 +1,20 @@
 library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/nullable_rhs_of_typedef.dart:5:11: Error: Can't create typedef from nullable type.
+// typedef F = void Function()?;
+//           ^
+//
 import self as self;
 
-typedef F = () →? void;
+typedef F = invalid-type;
 static method foo(() → void x) → void {
-  self::bar(x);
+  self::bar(x as{TypeError,ForNonNullableByDefault} invalid-type);
   self::bar(null);
-  self::baz(x);
+  self::baz(x as{TypeError,ForNonNullableByDefault} invalid-type);
   self::baz(null);
 }
-static method bar(() →? void x) → void {}
-static method baz(() →? void x) → void {}
+static method bar(invalid-type x) → void {}
+static method baz(invalid-type x) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/nullable_rhs_of_typedef.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/nullable_rhs_of_typedef.dart.weak.transformed.expect
index 425f791..8c42147 100644
--- a/pkg/front_end/testcases/nnbd/nullable_rhs_of_typedef.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/nullable_rhs_of_typedef.dart.weak.transformed.expect
@@ -1,13 +1,20 @@
 library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/nullable_rhs_of_typedef.dart:5:11: Error: Can't create typedef from nullable type.
+// typedef F = void Function()?;
+//           ^
+//
 import self as self;
 
-typedef F = () →? void;
+typedef F = invalid-type;
 static method foo(() → void x) → void {
-  self::bar(x);
+  self::bar(x as{TypeError,ForNonNullableByDefault} invalid-type);
   self::bar(null);
-  self::baz(x);
+  self::baz(x as{TypeError,ForNonNullableByDefault} invalid-type);
   self::baz(null);
 }
-static method bar(() →? void x) → void {}
-static method baz(() →? void x) → void {}
+static method bar(invalid-type x) → void {}
+static method baz(invalid-type x) → void {}
 static method main() → dynamic {}
diff --git a/pkg/front_end/testcases/nnbd/opt_out.dart.outline.expect b/pkg/front_end/testcases/nnbd/opt_out.dart.outline.expect
index 7361e96..49acd75 100644
--- a/pkg/front_end/testcases/nnbd/opt_out.dart.outline.expect
+++ b/pkg/front_end/testcases/nnbd/opt_out.dart.outline.expect
@@ -1,10 +1,17 @@
 library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/opt_out.dart:16:11: Error: Can't create typedef from nullable type.
+// typedef F = void Function()?;
+//           ^
+//
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///opt_out_lib.dart";
 
-typedef F = () →? void;
+typedef F = invalid-type;
 class A<T extends core::Object? = dynamic> extends core::Object {
   late field core::int field;
   synthetic constructor •() → self::A<self::A::T%>
@@ -45,6 +52,10 @@
 // // @dart=2.5
 // ^^^^^^^^^^^^
 //
+// pkg/front_end/testcases/nnbd/opt_out_lib.dart:20:11: Error: Can't create typedef from nullable type.
+// typedef F = void Function()?;
+//           ^
+//
 // pkg/front_end/testcases/nnbd/opt_out_lib.dart:22:12: Error: Null safety features are disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version higher.
 // List<String?> l = [];
@@ -80,7 +91,7 @@
 import self as self2;
 import "dart:core" as core;
 
-typedef F = () →? void;
+typedef F = invalid-type;
 class A<T extends core::Object* = dynamic> extends core::Object {
   field core::int* field;
   synthetic constructor •() → self2::A<self2::A::T*>*
diff --git a/pkg/front_end/testcases/nnbd/opt_out.dart.strong.expect b/pkg/front_end/testcases/nnbd/opt_out.dart.strong.expect
index 66a160f..a4191d5 100644
--- a/pkg/front_end/testcases/nnbd/opt_out.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/opt_out.dart.strong.expect
@@ -1,10 +1,17 @@
 library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/opt_out.dart:16:11: Error: Can't create typedef from nullable type.
+// typedef F = void Function()?;
+//           ^
+//
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///opt_out_lib.dart";
 
-typedef F = () →? void;
+typedef F = invalid-type;
 class A<T extends core::Object? = dynamic> extends core::Object {
   late field core::int field = 42;
   synthetic constructor •() → self::A<self::A::T%>
@@ -50,6 +57,10 @@
 // // @dart=2.5
 // ^^^^^^^^^^^^
 //
+// pkg/front_end/testcases/nnbd/opt_out_lib.dart:20:11: Error: Can't create typedef from nullable type.
+// typedef F = void Function()?;
+//           ^
+//
 // pkg/front_end/testcases/nnbd/opt_out_lib.dart:22:12: Error: Null safety features are disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version higher.
 // List<String?> l = [];
@@ -121,7 +132,7 @@
 import self as self2;
 import "dart:core" as core;
 
-typedef F = () →? void;
+typedef F = invalid-type;
 class A<T extends core::Object* = dynamic> extends core::Object {
   field core::int* field = 42;
   synthetic constructor •() → self2::A<self2::A::T*>*
diff --git a/pkg/front_end/testcases/nnbd/opt_out.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/opt_out.dart.strong.transformed.expect
index 66a160f..a4191d5 100644
--- a/pkg/front_end/testcases/nnbd/opt_out.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/opt_out.dart.strong.transformed.expect
@@ -1,10 +1,17 @@
 library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/opt_out.dart:16:11: Error: Can't create typedef from nullable type.
+// typedef F = void Function()?;
+//           ^
+//
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///opt_out_lib.dart";
 
-typedef F = () →? void;
+typedef F = invalid-type;
 class A<T extends core::Object? = dynamic> extends core::Object {
   late field core::int field = 42;
   synthetic constructor •() → self::A<self::A::T%>
@@ -50,6 +57,10 @@
 // // @dart=2.5
 // ^^^^^^^^^^^^
 //
+// pkg/front_end/testcases/nnbd/opt_out_lib.dart:20:11: Error: Can't create typedef from nullable type.
+// typedef F = void Function()?;
+//           ^
+//
 // pkg/front_end/testcases/nnbd/opt_out_lib.dart:22:12: Error: Null safety features are disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version higher.
 // List<String?> l = [];
@@ -121,7 +132,7 @@
 import self as self2;
 import "dart:core" as core;
 
-typedef F = () →? void;
+typedef F = invalid-type;
 class A<T extends core::Object* = dynamic> extends core::Object {
   field core::int* field = 42;
   synthetic constructor •() → self2::A<self2::A::T*>*
diff --git a/pkg/front_end/testcases/nnbd/opt_out.dart.weak.expect b/pkg/front_end/testcases/nnbd/opt_out.dart.weak.expect
index 66a160f..a4191d5 100644
--- a/pkg/front_end/testcases/nnbd/opt_out.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/opt_out.dart.weak.expect
@@ -1,10 +1,17 @@
 library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/opt_out.dart:16:11: Error: Can't create typedef from nullable type.
+// typedef F = void Function()?;
+//           ^
+//
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///opt_out_lib.dart";
 
-typedef F = () →? void;
+typedef F = invalid-type;
 class A<T extends core::Object? = dynamic> extends core::Object {
   late field core::int field = 42;
   synthetic constructor •() → self::A<self::A::T%>
@@ -50,6 +57,10 @@
 // // @dart=2.5
 // ^^^^^^^^^^^^
 //
+// pkg/front_end/testcases/nnbd/opt_out_lib.dart:20:11: Error: Can't create typedef from nullable type.
+// typedef F = void Function()?;
+//           ^
+//
 // pkg/front_end/testcases/nnbd/opt_out_lib.dart:22:12: Error: Null safety features are disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version higher.
 // List<String?> l = [];
@@ -121,7 +132,7 @@
 import self as self2;
 import "dart:core" as core;
 
-typedef F = () →? void;
+typedef F = invalid-type;
 class A<T extends core::Object* = dynamic> extends core::Object {
   field core::int* field = 42;
   synthetic constructor •() → self2::A<self2::A::T*>*
diff --git a/pkg/front_end/testcases/nnbd/opt_out.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/opt_out.dart.weak.transformed.expect
index 66a160f..a4191d5 100644
--- a/pkg/front_end/testcases/nnbd/opt_out.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/opt_out.dart.weak.transformed.expect
@@ -1,10 +1,17 @@
 library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/opt_out.dart:16:11: Error: Can't create typedef from nullable type.
+// typedef F = void Function()?;
+//           ^
+//
 import self as self;
 import "dart:core" as core;
 
 import "org-dartlang-testcase:///opt_out_lib.dart";
 
-typedef F = () →? void;
+typedef F = invalid-type;
 class A<T extends core::Object? = dynamic> extends core::Object {
   late field core::int field = 42;
   synthetic constructor •() → self::A<self::A::T%>
@@ -50,6 +57,10 @@
 // // @dart=2.5
 // ^^^^^^^^^^^^
 //
+// pkg/front_end/testcases/nnbd/opt_out_lib.dart:20:11: Error: Can't create typedef from nullable type.
+// typedef F = void Function()?;
+//           ^
+//
 // pkg/front_end/testcases/nnbd/opt_out_lib.dart:22:12: Error: Null safety features are disabled for this library.
 // Try removing the `@dart=` annotation or setting the language version higher.
 // List<String?> l = [];
@@ -121,7 +132,7 @@
 import self as self2;
 import "dart:core" as core;
 
-typedef F = () →? void;
+typedef F = invalid-type;
 class A<T extends core::Object* = dynamic> extends core::Object {
   field core::int* field = 42;
   synthetic constructor •() → self2::A<self2::A::T*>*
diff --git a/pkg/front_end/testcases/nnbd/override_checks.dart.weak.expect b/pkg/front_end/testcases/nnbd/override_checks.dart.weak.expect
index 4749c02..0c70778 100644
--- a/pkg/front_end/testcases/nnbd/override_checks.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/override_checks.dart.weak.expect
@@ -7,14 +7,14 @@
 //   factory C1 = C2<int?>; // Error in strong mode and Warning in weak mode.
 //              ^
 //
-// pkg/front_end/testcases/nnbd/override_checks.dart:14:7: Warning: The field 'B2.bar' has type 'num', which does not match the corresponding type, 'num?', in the overridden setter, 'B1.bar'.
+// pkg/front_end/testcases/nnbd/override_checks.dart:14:7: Error: The field 'B2.bar' has type 'num', which does not match the corresponding type, 'num?', in the overridden setter, 'B1.bar'.
 //   num bar = 3.14; // Error in strong mode and Warning in weak mode.
 //       ^
 // pkg/front_end/testcases/nnbd/override_checks.dart:8:12: Context: This is the overridden method ('bar').
 //   void set bar(num? value) {}
 //            ^
 //
-// pkg/front_end/testcases/nnbd/override_checks.dart:15:12: Warning: The return type of the method 'B2.baz' is 'num?', which does not match the return type, 'num', of the overridden method, 'B1.baz'.
+// pkg/front_end/testcases/nnbd/override_checks.dart:15:12: Error: The return type of the method 'B2.baz' is 'num?', which does not match the return type, 'num', of the overridden method, 'B1.baz'.
 // Change to a subtype of 'num'.
 //   num? get baz => null; // Error in strong mode and Warning in weak mode.
 //            ^
@@ -22,7 +22,7 @@
 //   num get baz => 42;
 //           ^
 //
-// pkg/front_end/testcases/nnbd/override_checks.dart:16:17: Warning: The parameter 'value' of the method 'B2.hest' has type 'num', which does not match the corresponding type, 'num?', in the overridden method, 'B1.hest'.
+// pkg/front_end/testcases/nnbd/override_checks.dart:16:17: Error: The parameter 'value' of the method 'B2.hest' has type 'num', which does not match the corresponding type, 'num?', in the overridden method, 'B1.hest'.
 // Change to a supertype of 'num?', or, for a covariant parameter, a subtype.
 //   void hest(num value) {} // Error in strong mode and Warning in weak mode.
 //                 ^
@@ -30,12 +30,12 @@
 //   void hest(num? value) {}
 //        ^
 //
-// pkg/front_end/testcases/nnbd/override_checks.dart:20:16: Warning: The type 'int?' doesn't extend 'int'.
+// pkg/front_end/testcases/nnbd/override_checks.dart:20:16: Error: The type 'int?' doesn't extend 'int'.
 // Try using a different type as argument.
 //   factory C1 = C2<int?>; // Error in strong mode and Warning in weak mode.
 //                ^
 //
-// pkg/front_end/testcases/nnbd/override_checks.dart:27:27: Warning: The constructor function type 'D Function(num)' isn't a subtype of 'D Function(num?)'.
+// pkg/front_end/testcases/nnbd/override_checks.dart:27:27: Error: The constructor function type 'D Function(num)' isn't a subtype of 'D Function(num?)'.
 //  - 'D' is from 'pkg/front_end/testcases/nnbd/override_checks.dart'.
 //   factory D.bar(num? x) = D.foo; // Error in strong mode and Warning in weak mode.
 //                           ^
diff --git a/pkg/front_end/testcases/nnbd/override_checks.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/override_checks.dart.weak.transformed.expect
index 8670b98..1387d52 100644
--- a/pkg/front_end/testcases/nnbd/override_checks.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/override_checks.dart.weak.transformed.expect
@@ -7,14 +7,14 @@
 //   factory C1 = C2<int?>; // Error in strong mode and Warning in weak mode.
 //              ^
 //
-// pkg/front_end/testcases/nnbd/override_checks.dart:14:7: Warning: The field 'B2.bar' has type 'num', which does not match the corresponding type, 'num?', in the overridden setter, 'B1.bar'.
+// pkg/front_end/testcases/nnbd/override_checks.dart:14:7: Error: The field 'B2.bar' has type 'num', which does not match the corresponding type, 'num?', in the overridden setter, 'B1.bar'.
 //   num bar = 3.14; // Error in strong mode and Warning in weak mode.
 //       ^
 // pkg/front_end/testcases/nnbd/override_checks.dart:8:12: Context: This is the overridden method ('bar').
 //   void set bar(num? value) {}
 //            ^
 //
-// pkg/front_end/testcases/nnbd/override_checks.dart:15:12: Warning: The return type of the method 'B2.baz' is 'num?', which does not match the return type, 'num', of the overridden method, 'B1.baz'.
+// pkg/front_end/testcases/nnbd/override_checks.dart:15:12: Error: The return type of the method 'B2.baz' is 'num?', which does not match the return type, 'num', of the overridden method, 'B1.baz'.
 // Change to a subtype of 'num'.
 //   num? get baz => null; // Error in strong mode and Warning in weak mode.
 //            ^
@@ -22,7 +22,7 @@
 //   num get baz => 42;
 //           ^
 //
-// pkg/front_end/testcases/nnbd/override_checks.dart:16:17: Warning: The parameter 'value' of the method 'B2.hest' has type 'num', which does not match the corresponding type, 'num?', in the overridden method, 'B1.hest'.
+// pkg/front_end/testcases/nnbd/override_checks.dart:16:17: Error: The parameter 'value' of the method 'B2.hest' has type 'num', which does not match the corresponding type, 'num?', in the overridden method, 'B1.hest'.
 // Change to a supertype of 'num?', or, for a covariant parameter, a subtype.
 //   void hest(num value) {} // Error in strong mode and Warning in weak mode.
 //                 ^
@@ -30,12 +30,12 @@
 //   void hest(num? value) {}
 //        ^
 //
-// pkg/front_end/testcases/nnbd/override_checks.dart:20:16: Warning: The type 'int?' doesn't extend 'int'.
+// pkg/front_end/testcases/nnbd/override_checks.dart:20:16: Error: The type 'int?' doesn't extend 'int'.
 // Try using a different type as argument.
 //   factory C1 = C2<int?>; // Error in strong mode and Warning in weak mode.
 //                ^
 //
-// pkg/front_end/testcases/nnbd/override_checks.dart:27:27: Warning: The constructor function type 'D Function(num)' isn't a subtype of 'D Function(num?)'.
+// pkg/front_end/testcases/nnbd/override_checks.dart:27:27: Error: The constructor function type 'D Function(num)' isn't a subtype of 'D Function(num?)'.
 //  - 'D' is from 'pkg/front_end/testcases/nnbd/override_checks.dart'.
 //   factory D.bar(num? x) = D.foo; // Error in strong mode and Warning in weak mode.
 //                           ^
diff --git a/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.strong.expect b/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.strong.expect
index 560b2ef..7a5255b 100644
--- a/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.strong.expect
+++ b/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.strong.expect
@@ -76,47 +76,47 @@
   method method(core::int a) → core::int {
     core::int k;
     core::int j = a;
-    return (let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:25:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
+    return let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:25:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
     return k;
-           ^" in k) as{TypeError,ForNonNullableByDefault} core::int;
+           ^" in k;
   }
   @#C1
   method /* from org-dartlang-testcase:///patch_lib.dart */ patchedMethod(core::int i) → core::int {
     core::int k;
     core::int j = i;
-    return (let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:22:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
+    return let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:22:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
     return k;
-           ^" in k) as{TypeError,ForNonNullableByDefault} core::int;
+           ^" in k;
   }
   method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod(core::int i) → core::int {
     core::int k;
     core::int j = i;
-    return (let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:28:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
+    return let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:28:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
     return k;
-           ^" in k) as{TypeError,ForNonNullableByDefault} core::int;
+           ^" in k;
   }
 }
 static method method(core::int a) → core::int {
   core::int k;
   core::int j = a;
-  return (let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:34:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
+  return let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:34:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
   return k;
-         ^" in k) as{TypeError,ForNonNullableByDefault} core::int;
+         ^" in k;
 }
 @#C1
 static method /* from org-dartlang-testcase:///patch_lib.dart */ patchedMethod(core::int i) → core::int {
   core::int k;
   core::int j = i;
-  return (let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:36:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
+  return let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:36:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
   return k;
-         ^" in k) as{TypeError,ForNonNullableByDefault} core::int;
+         ^" in k;
 }
 static method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod(core::int i) → core::int {
   core::int k;
   core::int j = i;
-  return (let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:42:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
+  return let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:42:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
   return k;
-         ^" in k) as{TypeError,ForNonNullableByDefault} core::int;
+         ^" in k;
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.strong.transformed.expect
index 560b2ef..7a5255b 100644
--- a/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.strong.transformed.expect
@@ -76,47 +76,47 @@
   method method(core::int a) → core::int {
     core::int k;
     core::int j = a;
-    return (let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:25:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
+    return let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:25:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
     return k;
-           ^" in k) as{TypeError,ForNonNullableByDefault} core::int;
+           ^" in k;
   }
   @#C1
   method /* from org-dartlang-testcase:///patch_lib.dart */ patchedMethod(core::int i) → core::int {
     core::int k;
     core::int j = i;
-    return (let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:22:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
+    return let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:22:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
     return k;
-           ^" in k) as{TypeError,ForNonNullableByDefault} core::int;
+           ^" in k;
   }
   method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod(core::int i) → core::int {
     core::int k;
     core::int j = i;
-    return (let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:28:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
+    return let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:28:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
     return k;
-           ^" in k) as{TypeError,ForNonNullableByDefault} core::int;
+           ^" in k;
   }
 }
 static method method(core::int a) → core::int {
   core::int k;
   core::int j = a;
-  return (let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:34:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
+  return let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:34:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
   return k;
-         ^" in k) as{TypeError,ForNonNullableByDefault} core::int;
+         ^" in k;
 }
 @#C1
 static method /* from org-dartlang-testcase:///patch_lib.dart */ patchedMethod(core::int i) → core::int {
   core::int k;
   core::int j = i;
-  return (let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:36:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
+  return let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:36:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
   return k;
-         ^" in k) as{TypeError,ForNonNullableByDefault} core::int;
+         ^" in k;
 }
 static method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod(core::int i) → core::int {
   core::int k;
   core::int j = i;
-  return (let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:42:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
+  return let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:42:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
   return k;
-         ^" in k) as{TypeError,ForNonNullableByDefault} core::int;
+         ^" in k;
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.weak.expect b/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.weak.expect
index 08205c5..7a5255b 100644
--- a/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.weak.expect
@@ -13,35 +13,35 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:15:5: Warning: Non-nullable variable 'k' is used before it's assigned.
+// pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:15:5: Error: Non-nullable variable 'k' must be assigned before it can be used.
 //     k;
 //     ^
 //
-// pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:22:12: Warning: Non-nullable variable 'k' is used before it's assigned.
+// pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:22:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
 //     return k;
 //            ^
 //
-// pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:28:12: Warning: Non-nullable variable 'k' is used before it's assigned.
+// pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:28:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
 //     return k;
 //            ^
 //
-// pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:36:10: Warning: Non-nullable variable 'k' is used before it's assigned.
+// pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:36:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
 //   return k;
 //          ^
 //
-// pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:42:10: Warning: Non-nullable variable 'k' is used before it's assigned.
+// pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:42:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
 //   return k;
 //          ^
 //
-// pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:17:5: Warning: Non-nullable variable 'k' is used before it's assigned.
+// pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:17:5: Error: Non-nullable variable 'k' must be assigned before it can be used.
 //     k;
 //     ^
 //
-// pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:25:12: Warning: Non-nullable variable 'k' is used before it's assigned.
+// pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:25:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
 //     return k;
 //            ^
 //
-// pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:34:10: Warning: Non-nullable variable 'k' is used before it's assigned.
+// pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:34:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
 //   return k;
 //          ^
 //
@@ -61,46 +61,62 @@
   constructor constructor(core::int a, test::Class::T b) → test::Class<test::Class::T>
     : test::Class::a = a, test::Class::b = b, super core::Object::•() {
     core::int k;
+    let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:17:5: Error: Non-nullable variable 'k' must be assigned before it can be used.
     k;
+    ^" in k;
   }
   @#C1
   constructor patchedConstructor(core::int i, test::Class::T j) → test::Class<test::Class::T>
     : test::Class::a = i, test::Class::b = j, super core::Object::•() {
     core::int k;
+    let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:15:5: Error: Non-nullable variable 'k' must be assigned before it can be used.
     k;
+    ^" in k;
   }
   method method(core::int a) → core::int {
     core::int k;
     core::int j = a;
+    return let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:25:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
     return k;
+           ^" in k;
   }
   @#C1
   method /* from org-dartlang-testcase:///patch_lib.dart */ patchedMethod(core::int i) → core::int {
     core::int k;
     core::int j = i;
+    return let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:22:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
     return k;
+           ^" in k;
   }
   method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod(core::int i) → core::int {
     core::int k;
     core::int j = i;
+    return let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:28:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
     return k;
+           ^" in k;
   }
 }
 static method method(core::int a) → core::int {
   core::int k;
   core::int j = a;
+  return let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:34:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
   return k;
+         ^" in k;
 }
 @#C1
 static method /* from org-dartlang-testcase:///patch_lib.dart */ patchedMethod(core::int i) → core::int {
   core::int k;
   core::int j = i;
+  return let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:36:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
   return k;
+         ^" in k;
 }
 static method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod(core::int i) → core::int {
   core::int k;
   core::int j = i;
+  return let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:42:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
   return k;
+         ^" in k;
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.weak.transformed.expect
index 08205c5..7a5255b 100644
--- a/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/platform_definite_assignment/main.dart.weak.transformed.expect
@@ -13,35 +13,35 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:15:5: Warning: Non-nullable variable 'k' is used before it's assigned.
+// pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:15:5: Error: Non-nullable variable 'k' must be assigned before it can be used.
 //     k;
 //     ^
 //
-// pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:22:12: Warning: Non-nullable variable 'k' is used before it's assigned.
+// pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:22:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
 //     return k;
 //            ^
 //
-// pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:28:12: Warning: Non-nullable variable 'k' is used before it's assigned.
+// pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:28:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
 //     return k;
 //            ^
 //
-// pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:36:10: Warning: Non-nullable variable 'k' is used before it's assigned.
+// pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:36:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
 //   return k;
 //          ^
 //
-// pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:42:10: Warning: Non-nullable variable 'k' is used before it's assigned.
+// pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:42:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
 //   return k;
 //          ^
 //
-// pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:17:5: Warning: Non-nullable variable 'k' is used before it's assigned.
+// pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:17:5: Error: Non-nullable variable 'k' must be assigned before it can be used.
 //     k;
 //     ^
 //
-// pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:25:12: Warning: Non-nullable variable 'k' is used before it's assigned.
+// pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:25:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
 //     return k;
 //            ^
 //
-// pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:34:10: Warning: Non-nullable variable 'k' is used before it's assigned.
+// pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:34:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
 //   return k;
 //          ^
 //
@@ -61,46 +61,62 @@
   constructor constructor(core::int a, test::Class::T b) → test::Class<test::Class::T>
     : test::Class::a = a, test::Class::b = b, super core::Object::•() {
     core::int k;
+    let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:17:5: Error: Non-nullable variable 'k' must be assigned before it can be used.
     k;
+    ^" in k;
   }
   @#C1
   constructor patchedConstructor(core::int i, test::Class::T j) → test::Class<test::Class::T>
     : test::Class::a = i, test::Class::b = j, super core::Object::•() {
     core::int k;
+    let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:15:5: Error: Non-nullable variable 'k' must be assigned before it can be used.
     k;
+    ^" in k;
   }
   method method(core::int a) → core::int {
     core::int k;
     core::int j = a;
+    return let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:25:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
     return k;
+           ^" in k;
   }
   @#C1
   method /* from org-dartlang-testcase:///patch_lib.dart */ patchedMethod(core::int i) → core::int {
     core::int k;
     core::int j = i;
+    return let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:22:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
     return k;
+           ^" in k;
   }
   method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod(core::int i) → core::int {
     core::int k;
     core::int j = i;
+    return let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:28:12: Error: Non-nullable variable 'k' must be assigned before it can be used.
     return k;
+           ^" in k;
   }
 }
 static method method(core::int a) → core::int {
   core::int k;
   core::int j = a;
+  return let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/origin_lib.dart:34:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
   return k;
+         ^" in k;
 }
 @#C1
 static method /* from org-dartlang-testcase:///patch_lib.dart */ patchedMethod(core::int i) → core::int {
   core::int k;
   core::int j = i;
+  return let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:36:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
   return k;
+         ^" in k;
 }
 static method /* from org-dartlang-testcase:///patch_lib.dart */ _injectedMethod(core::int i) → core::int {
   core::int k;
   core::int j = i;
+  return let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/platform_definite_assignment/patch_lib.dart:42:10: Error: Non-nullable variable 'k' must be assigned before it can be used.
   return k;
+         ^" in k;
 }
 
 constants  {
diff --git a/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.weak.expect b/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.weak.expect
index 56c3e97..d823eb3 100644
--- a/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.weak.expect
@@ -13,11 +13,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib.dart:10:7: Warning: Field 'field' isn't initialized and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib.dart:10:7: Error: Field 'field' should be initialized because its type 'int' doesn't allow null.
 //   int field;
 //       ^^^^^
 //
-// pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib.dart:15:7: Warning: This constructor doesn't initialize field 'field' and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib.dart:15:7: Error: This constructor should initialize field 'field' because its type 'int' doesn't allow null.
 //   int field;
 //       ^^^^^
 //
diff --git a/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.weak.transformed.expect
index 56c3e97..d823eb3 100644
--- a/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/platform_nonnullable_fields/main.dart.weak.transformed.expect
@@ -13,11 +13,11 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib.dart:10:7: Warning: Field 'field' isn't initialized and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib.dart:10:7: Error: Field 'field' should be initialized because its type 'int' doesn't allow null.
 //   int field;
 //       ^^^^^
 //
-// pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib.dart:15:7: Warning: This constructor doesn't initialize field 'field' and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/platform_nonnullable_fields/patch_lib.dart:15:7: Error: This constructor should initialize field 'field' because its type 'int' doesn't allow null.
 //   int field;
 //       ^^^^^
 //
diff --git a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.expect b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.expect
index 0faff12..9a4131e 100644
--- a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.expect
@@ -12,35 +12,35 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:11:27: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:11:27: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
 //   void patchedMethod([int i]) {}
 //                           ^
 //
-// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:13:29: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:13:29: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
 //   void _injectedMethod([int i]) {}
 //                             ^
 //
-// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:17:25: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:17:25: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
 // void patchedMethod([int i]) {}
 //                         ^
 //
-// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:19:27: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:19:27: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
 // void _injectedMethod([int i]) {}
 //                           ^
 //
-// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:6:20: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:6:20: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
 //   void method([int i]) {}
 //                    ^
 //
-// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:8:36: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:8:36: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
 //   external void patchedMethod([int i]);
 //                                    ^
 //
-// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:11:18: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:11:18: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
 // void method([int i]) {}
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:13:34: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:13:34: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
 // external void patchedMethod([int i]);
 //                                  ^
 //
diff --git a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.transformed.expect
index 0faff12..9a4131e 100644
--- a/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/platform_optional_parameters/main.dart.weak.transformed.expect
@@ -12,35 +12,35 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:11:27: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:11:27: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
 //   void patchedMethod([int i]) {}
 //                           ^
 //
-// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:13:29: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:13:29: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
 //   void _injectedMethod([int i]) {}
 //                             ^
 //
-// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:17:25: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:17:25: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
 // void patchedMethod([int i]) {}
 //                         ^
 //
-// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:19:27: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/patch_lib.dart:19:27: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
 // void _injectedMethod([int i]) {}
 //                           ^
 //
-// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:6:20: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:6:20: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
 //   void method([int i]) {}
 //                    ^
 //
-// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:8:36: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:8:36: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
 //   external void patchedMethod([int i]);
 //                                    ^
 //
-// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:11:18: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:11:18: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
 // void method([int i]) {}
 //                  ^
 //
-// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:13:34: Warning: Optional parameter 'i' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/platform_optional_parameters/origin_lib.dart:13:34: Error: Optional parameter 'i' should have a default value because its type 'int' doesn't allow null.
 // external void patchedMethod([int i]);
 //                                  ^
 //
diff --git a/pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart.weak.expect b/pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart.weak.expect
index 0b34a21..ac1c56b 100644
--- a/pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart.weak.expect
@@ -2,19 +2,19 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart:8:5: Warning: Field 'x' isn't initialized and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart:8:5: Error: Field 'x' should be initialized because its type 'int' doesn't allow null.
 // int x; // Error.
 //     ^
 //
-// pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart:13:14: Warning: Field 'x' isn't initialized and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart:13:14: Error: Field 'x' should be initialized because its type 'int' doesn't allow null.
 //   static int x; // Error.
 //              ^
 //
-// pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart:17:7: Warning: Field 'lx' isn't initialized and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart:17:7: Error: Field 'lx' should be initialized because its type 'int' doesn't allow null.
 //   int lx; // Error.
 //       ^^
 //
-// pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart:23:5: Warning: Field 'lt' isn't initialized and its type 'T' doesn't allow null.
+// pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart:23:5: Error: Field 'lt' should be initialized because its type 'T' doesn't allow null.
 //   T lt; // Error.
 //     ^^
 //
diff --git a/pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart.weak.transformed.expect
index 0b34a21..ac1c56b 100644
--- a/pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart.weak.transformed.expect
@@ -2,19 +2,19 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart:8:5: Warning: Field 'x' isn't initialized and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart:8:5: Error: Field 'x' should be initialized because its type 'int' doesn't allow null.
 // int x; // Error.
 //     ^
 //
-// pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart:13:14: Warning: Field 'x' isn't initialized and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart:13:14: Error: Field 'x' should be initialized because its type 'int' doesn't allow null.
 //   static int x; // Error.
 //              ^
 //
-// pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart:17:7: Warning: Field 'lx' isn't initialized and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart:17:7: Error: Field 'lx' should be initialized because its type 'int' doesn't allow null.
 //   int lx; // Error.
 //       ^^
 //
-// pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart:23:5: Warning: Field 'lt' isn't initialized and its type 'T' doesn't allow null.
+// pkg/front_end/testcases/nnbd/potentially_non_nullable_field.dart:23:5: Error: Field 'lt' should be initialized because its type 'T' doesn't allow null.
 //   T lt; // Error.
 //     ^^
 //
diff --git a/pkg/front_end/testcases/nnbd/required.dart.weak.expect b/pkg/front_end/testcases/nnbd/required.dart.weak.expect
index 4c8f81d..ed0ee8e 100644
--- a/pkg/front_end/testcases/nnbd/required.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/required.dart.weak.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/required.dart:29:8: Warning: Optional parameter 'x' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/required.dart:29:8: Error: Optional parameter 'x' should have a default value because its type 'int' doesn't allow null.
 //   foo({x}) {}
 //        ^
 //
@@ -21,27 +21,27 @@
 //   f2 = (int a = 42, [int b]) {};
 //               ^
 //
-// pkg/front_end/testcases/nnbd/required.dart:48:15: Warning: Optional parameter 'a' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/required.dart:48:15: Error: Optional parameter 'a' should have a default value because its type 'int' doesn't allow null.
 //   void g({int a, required int b = 42}) {}
 //               ^
 //
-// pkg/front_end/testcases/nnbd/required.dart:48:31: Warning: Named parameter 'b' is required and has a default value.
+// pkg/front_end/testcases/nnbd/required.dart:48:31: Error: Named parameter 'b' is required and can't have a default value.
 //   void g({int a, required int b = 42}) {}
 //                               ^
 //
-// pkg/front_end/testcases/nnbd/required.dart:49:13: Warning: Optional parameter 'a' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/required.dart:49:13: Error: Optional parameter 'a' should have a default value because its type 'int' doesn't allow null.
 //   f = ({int a, required int b = 42}) {};
 //             ^
 //
-// pkg/front_end/testcases/nnbd/required.dart:49:29: Warning: Named parameter 'b' is required and has a default value.
+// pkg/front_end/testcases/nnbd/required.dart:49:29: Error: Named parameter 'b' is required and can't have a default value.
 //   f = ({int a, required int b = 42}) {};
 //                             ^
 //
-// pkg/front_end/testcases/nnbd/required.dart:52:28: Warning: Optional parameter 'b' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/required.dart:52:28: Error: Optional parameter 'b' should have a default value because its type 'int' doesn't allow null.
 //   void g2(int a = 42, [int b]) {}
 //                            ^
 //
-// pkg/front_end/testcases/nnbd/required.dart:53:26: Warning: Optional parameter 'b' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/required.dart:53:26: Error: Optional parameter 'b' should have a default value because its type 'int' doesn't allow null.
 //   f2 = (int a = 42, [int b]) {};
 //                          ^
 //
diff --git a/pkg/front_end/testcases/nnbd/required.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/required.dart.weak.transformed.expect
index 4c8f81d..ed0ee8e 100644
--- a/pkg/front_end/testcases/nnbd/required.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/required.dart.weak.transformed.expect
@@ -2,7 +2,7 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/required.dart:29:8: Warning: Optional parameter 'x' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/required.dart:29:8: Error: Optional parameter 'x' should have a default value because its type 'int' doesn't allow null.
 //   foo({x}) {}
 //        ^
 //
@@ -21,27 +21,27 @@
 //   f2 = (int a = 42, [int b]) {};
 //               ^
 //
-// pkg/front_end/testcases/nnbd/required.dart:48:15: Warning: Optional parameter 'a' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/required.dart:48:15: Error: Optional parameter 'a' should have a default value because its type 'int' doesn't allow null.
 //   void g({int a, required int b = 42}) {}
 //               ^
 //
-// pkg/front_end/testcases/nnbd/required.dart:48:31: Warning: Named parameter 'b' is required and has a default value.
+// pkg/front_end/testcases/nnbd/required.dart:48:31: Error: Named parameter 'b' is required and can't have a default value.
 //   void g({int a, required int b = 42}) {}
 //                               ^
 //
-// pkg/front_end/testcases/nnbd/required.dart:49:13: Warning: Optional parameter 'a' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/required.dart:49:13: Error: Optional parameter 'a' should have a default value because its type 'int' doesn't allow null.
 //   f = ({int a, required int b = 42}) {};
 //             ^
 //
-// pkg/front_end/testcases/nnbd/required.dart:49:29: Warning: Named parameter 'b' is required and has a default value.
+// pkg/front_end/testcases/nnbd/required.dart:49:29: Error: Named parameter 'b' is required and can't have a default value.
 //   f = ({int a, required int b = 42}) {};
 //                             ^
 //
-// pkg/front_end/testcases/nnbd/required.dart:52:28: Warning: Optional parameter 'b' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/required.dart:52:28: Error: Optional parameter 'b' should have a default value because its type 'int' doesn't allow null.
 //   void g2(int a = 42, [int b]) {}
 //                            ^
 //
-// pkg/front_end/testcases/nnbd/required.dart:53:26: Warning: Optional parameter 'b' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/required.dart:53:26: Error: Optional parameter 'b' should have a default value because its type 'int' doesn't allow null.
 //   f2 = (int a = 42, [int b]) {};
 //                          ^
 //
diff --git a/pkg/front_end/testcases/nnbd/required_name_override.dart b/pkg/front_end/testcases/nnbd/required_name_override.dart
new file mode 100644
index 0000000..ed0b0526
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/required_name_override.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'required_name_override_lib.dart';
+
+class B {
+  void test_default({int? i}) {}
+  void test_nondefault({int? i = 1}) {}
+}
+
+class A extends B implements C {
+  void test_default({required int? i}) {}
+  void test_nondefault({required int? i}) {}
+  void test_legacy({required int? i}) {}
+}
+
+main() {
+  A().test_default(i: 1);
+  A().test_nondefault(i: 1);
+  A().test_legacy(i: 1);
+}
diff --git a/pkg/front_end/testcases/nnbd/required_name_override.dart.outline.expect b/pkg/front_end/testcases/nnbd/required_name_override.dart.outline.expect
new file mode 100644
index 0000000..a35314d
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/required_name_override.dart.outline.expect
@@ -0,0 +1,62 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/required_name_override.dart:13:36: Error: The required named parameter 'i' in method 'A.test_default' is not required in overridden method 'B.test_default'.
+//   void test_default({required int? i}) {}
+//                                    ^
+// pkg/front_end/testcases/nnbd/required_name_override.dart:8:8: Context: This is the overridden method ('test_default').
+//   void test_default({int? i}) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd/required_name_override.dart:14:39: Error: The required named parameter 'i' in method 'A.test_nondefault' is not required in overridden method 'B.test_nondefault'.
+//   void test_nondefault({required int? i}) {}
+//                                       ^
+// pkg/front_end/testcases/nnbd/required_name_override.dart:9:8: Context: This is the overridden method ('test_nondefault').
+//   void test_nondefault({int? i = 1}) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd/required_name_override.dart:15:35: Error: The required named parameter 'i' in method 'A.test_legacy' is not required in overridden method 'C.test_legacy'.
+//   void test_legacy({required int? i}) {}
+//                                   ^
+// pkg/front_end/testcases/nnbd/required_name_override_lib.dart:8:8: Context: This is the overridden method ('test_legacy').
+//   void test_legacy({int i}) {}
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+import "required_name_override_lib.dart" as req;
+
+import "org-dartlang-testcase:///required_name_override_lib.dart";
+
+class B extends core::Object {
+  synthetic constructor •() → self::B
+    ;
+  method test_default({core::int? i}) → void
+    ;
+  method test_nondefault({core::int? i = 1}) → void
+    ;
+}
+class A extends self::B implements req::C {
+  synthetic constructor •() → self::A
+    ;
+  method test_default({required core::int? i}) → void
+    ;
+  method test_nondefault({required core::int? i}) → void
+    ;
+  method test_legacy({required core::int? i}) → void
+    ;
+}
+static method main() → dynamic
+  ;
+
+library;
+import self as req;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → req::C*
+    ;
+  method test_legacy({core::int* i}) → void
+    ;
+}
diff --git a/pkg/front_end/testcases/nnbd/required_name_override.dart.strong.expect b/pkg/front_end/testcases/nnbd/required_name_override.dart.strong.expect
new file mode 100644
index 0000000..201e23a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/required_name_override.dart.strong.expect
@@ -0,0 +1,67 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/required_name_override.dart:13:36: Error: The required named parameter 'i' in method 'A.test_default' is not required in overridden method 'B.test_default'.
+//   void test_default({required int? i}) {}
+//                                    ^
+// pkg/front_end/testcases/nnbd/required_name_override.dart:8:8: Context: This is the overridden method ('test_default').
+//   void test_default({int? i}) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd/required_name_override.dart:14:39: Error: The required named parameter 'i' in method 'A.test_nondefault' is not required in overridden method 'B.test_nondefault'.
+//   void test_nondefault({required int? i}) {}
+//                                       ^
+// pkg/front_end/testcases/nnbd/required_name_override.dart:9:8: Context: This is the overridden method ('test_nondefault').
+//   void test_nondefault({int? i = 1}) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd/required_name_override.dart:15:35: Error: The required named parameter 'i' in method 'A.test_legacy' is not required in overridden method 'C.test_legacy'.
+//   void test_legacy({required int? i}) {}
+//                                   ^
+// pkg/front_end/testcases/nnbd/required_name_override_lib.dart:8:8: Context: This is the overridden method ('test_legacy').
+//   void test_legacy({int i}) {}
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+import "required_name_override_lib.dart" as req;
+
+import "org-dartlang-testcase:///required_name_override_lib.dart";
+
+class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+  method test_default({core::int? i = #C1}) → void {}
+  method test_nondefault({core::int? i = #C2}) → void {}
+}
+class A extends self::B implements req::C {
+  synthetic constructor •() → self::A
+    : super self::B::•()
+    ;
+  method test_default({required core::int? i = #C1}) → void {}
+  method test_nondefault({required core::int? i = #C1}) → void {}
+  method test_legacy({required core::int? i = #C1}) → void {}
+}
+static method main() → dynamic {
+  new self::A::•().{self::A::test_default}(i: 1);
+  new self::A::•().{self::A::test_nondefault}(i: 1);
+  new self::A::•().{self::A::test_legacy}(i: 1);
+}
+
+library;
+import self as req;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → req::C*
+    : super core::Object::•()
+    ;
+  method test_legacy({core::int* i = #C1}) → void {}
+}
+
+constants  {
+  #C1 = null
+  #C2 = 1
+}
diff --git a/pkg/front_end/testcases/nnbd/required_name_override.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/required_name_override.dart.strong.transformed.expect
new file mode 100644
index 0000000..201e23a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/required_name_override.dart.strong.transformed.expect
@@ -0,0 +1,67 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/required_name_override.dart:13:36: Error: The required named parameter 'i' in method 'A.test_default' is not required in overridden method 'B.test_default'.
+//   void test_default({required int? i}) {}
+//                                    ^
+// pkg/front_end/testcases/nnbd/required_name_override.dart:8:8: Context: This is the overridden method ('test_default').
+//   void test_default({int? i}) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd/required_name_override.dart:14:39: Error: The required named parameter 'i' in method 'A.test_nondefault' is not required in overridden method 'B.test_nondefault'.
+//   void test_nondefault({required int? i}) {}
+//                                       ^
+// pkg/front_end/testcases/nnbd/required_name_override.dart:9:8: Context: This is the overridden method ('test_nondefault').
+//   void test_nondefault({int? i = 1}) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd/required_name_override.dart:15:35: Error: The required named parameter 'i' in method 'A.test_legacy' is not required in overridden method 'C.test_legacy'.
+//   void test_legacy({required int? i}) {}
+//                                   ^
+// pkg/front_end/testcases/nnbd/required_name_override_lib.dart:8:8: Context: This is the overridden method ('test_legacy').
+//   void test_legacy({int i}) {}
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+import "required_name_override_lib.dart" as req;
+
+import "org-dartlang-testcase:///required_name_override_lib.dart";
+
+class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+  method test_default({core::int? i = #C1}) → void {}
+  method test_nondefault({core::int? i = #C2}) → void {}
+}
+class A extends self::B implements req::C {
+  synthetic constructor •() → self::A
+    : super self::B::•()
+    ;
+  method test_default({required core::int? i = #C1}) → void {}
+  method test_nondefault({required core::int? i = #C1}) → void {}
+  method test_legacy({required core::int? i = #C1}) → void {}
+}
+static method main() → dynamic {
+  new self::A::•().{self::A::test_default}(i: 1);
+  new self::A::•().{self::A::test_nondefault}(i: 1);
+  new self::A::•().{self::A::test_legacy}(i: 1);
+}
+
+library;
+import self as req;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → req::C*
+    : super core::Object::•()
+    ;
+  method test_legacy({core::int* i = #C1}) → void {}
+}
+
+constants  {
+  #C1 = null
+  #C2 = 1
+}
diff --git a/pkg/front_end/testcases/nnbd/required_name_override.dart.weak.expect b/pkg/front_end/testcases/nnbd/required_name_override.dart.weak.expect
new file mode 100644
index 0000000..201e23a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/required_name_override.dart.weak.expect
@@ -0,0 +1,67 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/required_name_override.dart:13:36: Error: The required named parameter 'i' in method 'A.test_default' is not required in overridden method 'B.test_default'.
+//   void test_default({required int? i}) {}
+//                                    ^
+// pkg/front_end/testcases/nnbd/required_name_override.dart:8:8: Context: This is the overridden method ('test_default').
+//   void test_default({int? i}) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd/required_name_override.dart:14:39: Error: The required named parameter 'i' in method 'A.test_nondefault' is not required in overridden method 'B.test_nondefault'.
+//   void test_nondefault({required int? i}) {}
+//                                       ^
+// pkg/front_end/testcases/nnbd/required_name_override.dart:9:8: Context: This is the overridden method ('test_nondefault').
+//   void test_nondefault({int? i = 1}) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd/required_name_override.dart:15:35: Error: The required named parameter 'i' in method 'A.test_legacy' is not required in overridden method 'C.test_legacy'.
+//   void test_legacy({required int? i}) {}
+//                                   ^
+// pkg/front_end/testcases/nnbd/required_name_override_lib.dart:8:8: Context: This is the overridden method ('test_legacy').
+//   void test_legacy({int i}) {}
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+import "required_name_override_lib.dart" as req;
+
+import "org-dartlang-testcase:///required_name_override_lib.dart";
+
+class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+  method test_default({core::int? i = #C1}) → void {}
+  method test_nondefault({core::int? i = #C2}) → void {}
+}
+class A extends self::B implements req::C {
+  synthetic constructor •() → self::A
+    : super self::B::•()
+    ;
+  method test_default({required core::int? i = #C1}) → void {}
+  method test_nondefault({required core::int? i = #C1}) → void {}
+  method test_legacy({required core::int? i = #C1}) → void {}
+}
+static method main() → dynamic {
+  new self::A::•().{self::A::test_default}(i: 1);
+  new self::A::•().{self::A::test_nondefault}(i: 1);
+  new self::A::•().{self::A::test_legacy}(i: 1);
+}
+
+library;
+import self as req;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → req::C*
+    : super core::Object::•()
+    ;
+  method test_legacy({core::int* i = #C1}) → void {}
+}
+
+constants  {
+  #C1 = null
+  #C2 = 1
+}
diff --git a/pkg/front_end/testcases/nnbd/required_name_override.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/required_name_override.dart.weak.transformed.expect
new file mode 100644
index 0000000..201e23a
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/required_name_override.dart.weak.transformed.expect
@@ -0,0 +1,67 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/required_name_override.dart:13:36: Error: The required named parameter 'i' in method 'A.test_default' is not required in overridden method 'B.test_default'.
+//   void test_default({required int? i}) {}
+//                                    ^
+// pkg/front_end/testcases/nnbd/required_name_override.dart:8:8: Context: This is the overridden method ('test_default').
+//   void test_default({int? i}) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd/required_name_override.dart:14:39: Error: The required named parameter 'i' in method 'A.test_nondefault' is not required in overridden method 'B.test_nondefault'.
+//   void test_nondefault({required int? i}) {}
+//                                       ^
+// pkg/front_end/testcases/nnbd/required_name_override.dart:9:8: Context: This is the overridden method ('test_nondefault').
+//   void test_nondefault({int? i = 1}) {}
+//        ^
+//
+// pkg/front_end/testcases/nnbd/required_name_override.dart:15:35: Error: The required named parameter 'i' in method 'A.test_legacy' is not required in overridden method 'C.test_legacy'.
+//   void test_legacy({required int? i}) {}
+//                                   ^
+// pkg/front_end/testcases/nnbd/required_name_override_lib.dart:8:8: Context: This is the overridden method ('test_legacy').
+//   void test_legacy({int i}) {}
+//        ^
+//
+import self as self;
+import "dart:core" as core;
+import "required_name_override_lib.dart" as req;
+
+import "org-dartlang-testcase:///required_name_override_lib.dart";
+
+class B extends core::Object {
+  synthetic constructor •() → self::B
+    : super core::Object::•()
+    ;
+  method test_default({core::int? i = #C1}) → void {}
+  method test_nondefault({core::int? i = #C2}) → void {}
+}
+class A extends self::B implements req::C {
+  synthetic constructor •() → self::A
+    : super self::B::•()
+    ;
+  method test_default({required core::int? i = #C1}) → void {}
+  method test_nondefault({required core::int? i = #C1}) → void {}
+  method test_legacy({required core::int? i = #C1}) → void {}
+}
+static method main() → dynamic {
+  new self::A::•().{self::A::test_default}(i: 1);
+  new self::A::•().{self::A::test_nondefault}(i: 1);
+  new self::A::•().{self::A::test_legacy}(i: 1);
+}
+
+library;
+import self as req;
+import "dart:core" as core;
+
+class C extends core::Object {
+  synthetic constructor •() → req::C*
+    : super core::Object::•()
+    ;
+  method test_legacy({core::int* i = #C1}) → void {}
+}
+
+constants  {
+  #C1 = null
+  #C2 = 1
+}
diff --git a/pkg/front_end/testcases/nnbd/required_name_override_lib.dart b/pkg/front_end/testcases/nnbd/required_name_override_lib.dart
new file mode 100644
index 0000000..44d3239
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/required_name_override_lib.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// @dart=2.5
+
+class C {
+  void test_legacy({int i}) {}
+}
diff --git a/pkg/front_end/testcases/nnbd/required_named_parameter.dart.weak.expect b/pkg/front_end/testcases/nnbd/required_named_parameter.dart.weak.expect
index 8f475d6..41566f3 100644
--- a/pkg/front_end/testcases/nnbd/required_named_parameter.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/required_named_parameter.dart.weak.expect
@@ -2,15 +2,15 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/required_named_parameter.dart:6:19: Warning: Named parameter 'parameter' is required and has a default value.
+// pkg/front_end/testcases/nnbd/required_named_parameter.dart:6:19: Error: Named parameter 'parameter' is required and can't have a default value.
 // foo({required int parameter = 42}) {}
 //                   ^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/required_named_parameter.dart:7:11: Warning: Optional parameter 'parameter' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/required_named_parameter.dart:7:11: Error: Optional parameter 'parameter' should have a default value because its type 'int' doesn't allow null.
 // foo2({int parameter}) {}
 //           ^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/required_named_parameter.dart:8:11: Warning: Optional parameter 'parameter' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/required_named_parameter.dart:8:11: Error: Optional parameter 'parameter' should have a default value because its type 'int' doesn't allow null.
 // foo3([int parameter]) {}
 //           ^^^^^^^^^
 //
diff --git a/pkg/front_end/testcases/nnbd/required_named_parameter.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/required_named_parameter.dart.weak.transformed.expect
index 8f475d6..41566f3 100644
--- a/pkg/front_end/testcases/nnbd/required_named_parameter.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/required_named_parameter.dart.weak.transformed.expect
@@ -2,15 +2,15 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/required_named_parameter.dart:6:19: Warning: Named parameter 'parameter' is required and has a default value.
+// pkg/front_end/testcases/nnbd/required_named_parameter.dart:6:19: Error: Named parameter 'parameter' is required and can't have a default value.
 // foo({required int parameter = 42}) {}
 //                   ^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/required_named_parameter.dart:7:11: Warning: Optional parameter 'parameter' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/required_named_parameter.dart:7:11: Error: Optional parameter 'parameter' should have a default value because its type 'int' doesn't allow null.
 // foo2({int parameter}) {}
 //           ^^^^^^^^^
 //
-// pkg/front_end/testcases/nnbd/required_named_parameter.dart:8:11: Warning: Optional parameter 'parameter' doesn't have a default value and its type 'int' doesn't allow null.
+// pkg/front_end/testcases/nnbd/required_named_parameter.dart:8:11: Error: Optional parameter 'parameter' should have a default value because its type 'int' doesn't allow null.
 // foo3([int parameter]) {}
 //           ^^^^^^^^^
 //
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart b/pkg/front_end/testcases/nnbd/return_null.dart
new file mode 100644
index 0000000..a044f19
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/return_null.dart
@@ -0,0 +1,126 @@
+// Copyright (c) 2020, the Dart project authors. Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+
+String returnImplicit() /*error*/ {
+  print("foo");
+}
+
+String returnExplicit() {
+  print("foo");
+  return null; // error
+}
+
+String returnMixed(bool b) /*error*/ {
+  if (b) {
+    print("foo");
+    return null; // error
+  }
+}
+
+Future returnAsync1() async {} // ok
+
+FutureOr returnAsync2() async {} // ok
+
+FutureOr<int> returnAsync3() async {} // error
+
+FutureOr<int?> returnAsync4() async {} // ok
+
+returnAsync5() async {} // ok
+
+Future<int?> returnAsync6() async {
+  return null; // ok
+}
+
+Future<int?> returnAsync7() async {} // ok
+
+Iterable yieldSync() sync* {} // ok
+
+Stream yieldAsync() async* {} // ok
+
+enum Enum { a, b }
+
+Enum caseReturn1(Enum e) /* ok */ {
+  switch (e) {
+    case Enum.a:
+      return e;
+    case Enum.b:
+      return e;
+  }
+}
+
+Enum caseReturn2(Enum e) /* error */ {
+  switch (e) {
+    case Enum.a:
+      return e;
+    default:
+  }
+}
+
+localFunctions() {
+  String returnImplicit() /* error */ {
+    print("foo");
+  }
+
+  String returnExplicit() {
+    print("foo");
+    return null; // error
+  }
+
+  String returnMixed(bool b) /* error */ {
+    if (b) {
+      print("foo");
+      return null; // error
+    }
+  }
+
+  Future returnAsync1() async {} // ok
+
+  FutureOr returnAsync2() async {} // ok
+
+  FutureOr<int> returnAsync3() async {} // error
+
+  FutureOr<int?> returnAsync4() async {} // ok
+
+  returnAsync5() async {} // ok
+
+  Future<int?> returnAsync6() async {
+    return null; // ok
+  }
+
+  Future<int?> returnAsync7() async {} // ok
+
+  Iterable yieldSync() sync* {} // ok
+
+  Stream yieldAsync() async* {} // ok
+
+  Enum caseReturn1(Enum e) /* ok */ {
+    switch (e) {
+      case Enum.a:
+        return e;
+      case Enum.b:
+        return e;
+    }
+  }
+
+  Enum caseReturn2(Enum e) /* error */ {
+    switch (e) {
+      case Enum.a:
+        return e;
+      default:
+    }
+  }
+
+  bool b = false;
+  var local1 = () /* error */ {
+    if (b) return 0;
+  }();
+  var local2 = () /* ok */ {
+    if (b) return null;
+    if (!b) return 0;
+  }();
+}
+
+main() {}
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.outline.expect b/pkg/front_end/testcases/nnbd/return_null.dart.outline.expect
new file mode 100644
index 0000000..94a68bd
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.outline.expect
@@ -0,0 +1,51 @@
+library /*isNonNullableByDefault*/;
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class Enum extends core::Object /*isEnum*/  {
+  final field core::int index;
+  final field core::String _name;
+  static const field core::List<self::Enum> values = const <self::Enum>[self::Enum::a, self::Enum::b];
+  static const field self::Enum a = const self::Enum::•(0, "Enum.a");
+  static const field self::Enum b = const self::Enum::•(1, "Enum.b");
+  const constructor •(core::int index, core::String _name) → self::Enum
+    : self::Enum::index = index, self::Enum::_name = _name, super core::Object::•()
+    ;
+  method toString() → core::String
+    return this.{=self::Enum::_name};
+}
+static method returnImplicit() → core::String
+  ;
+static method returnExplicit() → core::String
+  ;
+static method returnMixed(core::bool b) → core::String
+  ;
+static method returnAsync1() → asy::Future<dynamic>
+  ;
+static method returnAsync2() → asy::FutureOr<dynamic>
+  ;
+static method returnAsync3() → asy::FutureOr<core::int>
+  ;
+static method returnAsync4() → asy::FutureOr<core::int?>
+  ;
+static method returnAsync5() → dynamic
+  ;
+static method returnAsync6() → asy::Future<core::int?>
+  ;
+static method returnAsync7() → asy::Future<core::int?>
+  ;
+static method yieldSync() → core::Iterable<dynamic>
+  ;
+static method yieldAsync() → asy::Stream<dynamic>
+  ;
+static method caseReturn1(self::Enum e) → self::Enum
+  ;
+static method caseReturn2(self::Enum e) → self::Enum
+  ;
+static method localFunctions() → dynamic
+  ;
+static method main() → dynamic
+  ;
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect b/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect
new file mode 100644
index 0000000..336e616
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.strong.expect
@@ -0,0 +1,239 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:7:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+// String returnImplicit() /*error*/ {
+//        ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:13:10: Error: A value of type 'Null?' can't be assigned to a variable of type 'String'.
+//   return null; // error
+//          ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:19:12: Error: A value of type 'Null?' can't be assigned to a variable of type 'String'.
+//     return null; // error
+//            ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:16:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+// String returnMixed(bool b) /*error*/ {
+//        ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:27:15: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+// FutureOr<int> returnAsync3() async {} // error
+//               ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+//  - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
+// Enum caseReturn2(Enum e) /* error */ {
+//      ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:63:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+//   String returnImplicit() /* error */ {
+//   ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:69:12: Error: A value of type 'Null?' can't be assigned to a variable of type 'String'.
+//     return null; // error
+//            ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:75:14: Error: A value of type 'Null?' can't be assigned to a variable of type 'String'.
+//       return null; // error
+//              ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:72:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+//   String returnMixed(bool b) /* error */ {
+//   ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+//   FutureOr<int> returnAsync3() async {} // error
+//   ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+//  - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
+//   Enum caseReturn2(Enum e) /* error */ {
+//   ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:117:16: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+//   var local1 = () /* error */ {
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class Enum extends core::Object /*isEnum*/  {
+  final field core::int index;
+  final field core::String _name;
+  static const field core::List<self::Enum> values = #C7;
+  static const field self::Enum a = #C3;
+  static const field self::Enum b = #C6;
+  const constructor •(core::int index, core::String _name) → self::Enum
+    : self::Enum::index = index, self::Enum::_name = _name, super core::Object::•()
+    ;
+  method toString() → core::String
+    return this.{=self::Enum::_name};
+}
+static method returnImplicit() → core::String {
+  core::print("foo");
+  return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:7:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+String returnImplicit() /*error*/ {
+       ^" in null;
+}
+static method returnExplicit() → core::String {
+  core::print("foo");
+  return let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:13:10: Error: A value of type 'Null?' can't be assigned to a variable of type 'String'.
+  return null; // error
+         ^" in null as{TypeError,ForNonNullableByDefault} core::String;
+}
+static method returnMixed(core::bool b) → core::String {
+  if(b) {
+    core::print("foo");
+    return let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:19:12: Error: A value of type 'Null?' can't be assigned to a variable of type 'String'.
+    return null; // error
+           ^" in null as{TypeError,ForNonNullableByDefault} core::String;
+  }
+  return let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:16:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+String returnMixed(bool b) /*error*/ {
+       ^" in null;
+}
+static method returnAsync1() → asy::Future<dynamic> async {}
+static method returnAsync2() → asy::FutureOr<dynamic> async {}
+static method returnAsync3() → asy::FutureOr<core::int> async {
+  return let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:27:15: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+FutureOr<int> returnAsync3() async {} // error
+              ^" in null;
+}
+static method returnAsync4() → asy::FutureOr<core::int?> async {}
+static method returnAsync5() → dynamic async {}
+static method returnAsync6() → asy::Future<core::int?> async {
+  return null;
+}
+static method returnAsync7() → asy::Future<core::int?> async {}
+static method yieldSync() → core::Iterable<dynamic> sync* {}
+static method yieldAsync() → asy::Stream<dynamic> async* {}
+static method caseReturn1(self::Enum e) → self::Enum {
+  switch(e) {
+    #L1:
+    case #C3:
+      {
+        return e;
+      }
+    #L2:
+    case #C6:
+      {
+        return e;
+      }
+  }
+}
+static method caseReturn2(self::Enum e) → self::Enum {
+  switch(e) {
+    #L3:
+    case #C3:
+      {
+        return e;
+      }
+    #L4:
+    default:
+      {}
+  }
+  return let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+ - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
+Enum caseReturn2(Enum e) /* error */ {
+     ^" in null;
+}
+static method localFunctions() → dynamic {
+  function returnImplicit() → core::String {
+    core::print("foo");
+    return let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:63:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  String returnImplicit() /* error */ {
+  ^" in null;
+  }
+  function returnExplicit() → core::String {
+    core::print("foo");
+    return let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:69:12: Error: A value of type 'Null?' can't be assigned to a variable of type 'String'.
+    return null; // error
+           ^" in null as{TypeError,ForNonNullableByDefault} core::String;
+  }
+  function returnMixed(core::bool b) → core::String {
+    if(b) {
+      core::print("foo");
+      return let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:75:14: Error: A value of type 'Null?' can't be assigned to a variable of type 'String'.
+      return null; // error
+             ^" in null as{TypeError,ForNonNullableByDefault} core::String;
+    }
+    return let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:72:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  String returnMixed(bool b) /* error */ {
+  ^" in null;
+  }
+  function returnAsync1() → asy::Future<dynamic> async {}
+  function returnAsync2() → asy::FutureOr<dynamic> async {}
+  function returnAsync3() → asy::FutureOr<core::int> async {
+    return let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+  FutureOr<int> returnAsync3() async {} // error
+  ^" in null;
+  }
+  function returnAsync4() → asy::FutureOr<core::int?> async {}
+  function returnAsync5() → asy::Future<core::Null?> async {}
+  function returnAsync6() → asy::Future<core::int?> async {
+    return null;
+  }
+  function returnAsync7() → asy::Future<core::int?> async {}
+  function yieldSync() → core::Iterable<dynamic> sync* {}
+  function yieldAsync() → asy::Stream<dynamic> async* {}
+  function caseReturn1(self::Enum e) → self::Enum {
+    switch(e) {
+      #L5:
+      case #C3:
+        {
+          return e;
+        }
+      #L6:
+      case #C6:
+        {
+          return e;
+        }
+    }
+  }
+  function caseReturn2(self::Enum e) → self::Enum {
+    switch(e) {
+      #L7:
+      case #C3:
+        {
+          return e;
+        }
+      #L8:
+      default:
+        {}
+    }
+    return let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+ - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
+  Enum caseReturn2(Enum e) /* error */ {
+  ^" in null;
+  }
+  core::bool b = false;
+  core::int local1 = (() → core::int {
+    if(b)
+      return 0;
+    return let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:117:16: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+  var local1 = () /* error */ {
+               ^" in null;
+  }).call();
+  core::int? local2 = (() → core::int? {
+    if(b)
+      return null;
+    if(!b)
+      return 0;
+  }).call();
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "Enum.a"
+  #C3 = self::Enum {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "Enum.b"
+  #C6 = self::Enum {index:#C4, _name:#C5}
+  #C7 = <self::Enum>[#C3, #C6]
+}
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect b/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect
new file mode 100644
index 0000000..7c0e736
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.strong.transformed.expect
@@ -0,0 +1,635 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:7:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+// String returnImplicit() /*error*/ {
+//        ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:13:10: Error: A value of type 'Null?' can't be assigned to a variable of type 'String'.
+//   return null; // error
+//          ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:19:12: Error: A value of type 'Null?' can't be assigned to a variable of type 'String'.
+//     return null; // error
+//            ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:16:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+// String returnMixed(bool b) /*error*/ {
+//        ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:27:15: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+// FutureOr<int> returnAsync3() async {} // error
+//               ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+//  - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
+// Enum caseReturn2(Enum e) /* error */ {
+//      ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:63:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+//   String returnImplicit() /* error */ {
+//   ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:69:12: Error: A value of type 'Null?' can't be assigned to a variable of type 'String'.
+//     return null; // error
+//            ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:75:14: Error: A value of type 'Null?' can't be assigned to a variable of type 'String'.
+//       return null; // error
+//              ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:72:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+//   String returnMixed(bool b) /* error */ {
+//   ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+//   FutureOr<int> returnAsync3() async {} // error
+//   ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+//  - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
+//   Enum caseReturn2(Enum e) /* error */ {
+//   ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:117:16: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+//   var local1 = () /* error */ {
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class Enum extends core::Object /*isEnum*/  {
+  final field core::int index;
+  final field core::String _name;
+  static const field core::List<self::Enum> values = #C7;
+  static const field self::Enum a = #C3;
+  static const field self::Enum b = #C6;
+  const constructor •(core::int index, core::String _name) → self::Enum
+    : self::Enum::index = index, self::Enum::_name = _name, super core::Object::•()
+    ;
+  method toString() → core::String
+    return this.{=self::Enum::_name};
+}
+static method returnImplicit() → core::String {
+  core::print("foo");
+  return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:7:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+String returnImplicit() /*error*/ {
+       ^" in null;
+}
+static method returnExplicit() → core::String {
+  core::print("foo");
+  return let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:13:10: Error: A value of type 'Null?' can't be assigned to a variable of type 'String'.
+  return null; // error
+         ^" in null as{TypeError,ForNonNullableByDefault} core::String;
+}
+static method returnMixed(core::bool b) → core::String {
+  if(b) {
+    core::print("foo");
+    return let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:19:12: Error: A value of type 'Null?' can't be assigned to a variable of type 'String'.
+    return null; // error
+           ^" in null as{TypeError,ForNonNullableByDefault} core::String;
+  }
+  return let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:16:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+String returnMixed(bool b) /*error*/ {
+       ^" in null;
+}
+static method returnAsync1() → asy::Future<dynamic> /* originally async */ {
+  final asy::_AsyncAwaitCompleter<dynamic> :async_completer = new asy::_AsyncAwaitCompleter::•<dynamic>();
+  asy::FutureOr<dynamic>? :return_value;
+  dynamic :async_stack_trace;
+  dynamic :async_op_then;
+  dynamic :async_op_error;
+  core::int :await_jump_var = 0;
+  dynamic :await_ctx_var;
+  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    try {
+      #L1:
+      {}
+      asy::_completeOnAsyncReturn(:async_completer, :return_value);
+      return;
+    }
+    on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+      :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
+    }
+  :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_completer.start(:async_op);
+  return :async_completer.{asy::Completer::future};
+}
+static method returnAsync2() → asy::FutureOr<dynamic> /* originally async */ {
+  final asy::_AsyncAwaitCompleter<dynamic> :async_completer = new asy::_AsyncAwaitCompleter::•<dynamic>();
+  asy::FutureOr<dynamic>? :return_value;
+  dynamic :async_stack_trace;
+  dynamic :async_op_then;
+  dynamic :async_op_error;
+  core::int :await_jump_var = 0;
+  dynamic :await_ctx_var;
+  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    try {
+      #L2:
+      {}
+      asy::_completeOnAsyncReturn(:async_completer, :return_value);
+      return;
+    }
+    on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+      :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
+    }
+  :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_completer.start(:async_op);
+  return :async_completer.{asy::Completer::future};
+}
+static method returnAsync3() → asy::FutureOr<core::int> /* originally async */ {
+  final asy::_AsyncAwaitCompleter<core::int> :async_completer = new asy::_AsyncAwaitCompleter::•<core::int>();
+  asy::FutureOr<core::int>? :return_value;
+  dynamic :async_stack_trace;
+  dynamic :async_op_then;
+  dynamic :async_op_error;
+  core::int :await_jump_var = 0;
+  dynamic :await_ctx_var;
+  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    try {
+      #L3:
+      {
+        :return_value = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:27:15: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+FutureOr<int> returnAsync3() async {} // error
+              ^" in null;
+        break #L3;
+      }
+      asy::_completeOnAsyncReturn(:async_completer, :return_value);
+      return;
+    }
+    on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+      :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
+    }
+  :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_completer.start(:async_op);
+  return :async_completer.{asy::Completer::future};
+}
+static method returnAsync4() → asy::FutureOr<core::int?> /* originally async */ {
+  final asy::_AsyncAwaitCompleter<core::int?> :async_completer = new asy::_AsyncAwaitCompleter::•<core::int?>();
+  asy::FutureOr<core::int?>? :return_value;
+  dynamic :async_stack_trace;
+  dynamic :async_op_then;
+  dynamic :async_op_error;
+  core::int :await_jump_var = 0;
+  dynamic :await_ctx_var;
+  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    try {
+      #L4:
+      {}
+      asy::_completeOnAsyncReturn(:async_completer, :return_value);
+      return;
+    }
+    on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+      :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
+    }
+  :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_completer.start(:async_op);
+  return :async_completer.{asy::Completer::future};
+}
+static method returnAsync5() → dynamic /* originally async */ {
+  final asy::_AsyncAwaitCompleter<dynamic> :async_completer = new asy::_AsyncAwaitCompleter::•<dynamic>();
+  asy::FutureOr<dynamic>? :return_value;
+  dynamic :async_stack_trace;
+  dynamic :async_op_then;
+  dynamic :async_op_error;
+  core::int :await_jump_var = 0;
+  dynamic :await_ctx_var;
+  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    try {
+      #L5:
+      {}
+      asy::_completeOnAsyncReturn(:async_completer, :return_value);
+      return;
+    }
+    on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+      :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
+    }
+  :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_completer.start(:async_op);
+  return :async_completer.{asy::Completer::future};
+}
+static method returnAsync6() → asy::Future<core::int?> /* originally async */ {
+  final asy::_AsyncAwaitCompleter<core::int?> :async_completer = new asy::_AsyncAwaitCompleter::•<core::int?>();
+  asy::FutureOr<core::int?>? :return_value;
+  dynamic :async_stack_trace;
+  dynamic :async_op_then;
+  dynamic :async_op_error;
+  core::int :await_jump_var = 0;
+  dynamic :await_ctx_var;
+  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    try {
+      #L6:
+      {
+        :return_value = null;
+        break #L6;
+      }
+      asy::_completeOnAsyncReturn(:async_completer, :return_value);
+      return;
+    }
+    on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+      :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
+    }
+  :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_completer.start(:async_op);
+  return :async_completer.{asy::Completer::future};
+}
+static method returnAsync7() → asy::Future<core::int?> /* originally async */ {
+  final asy::_AsyncAwaitCompleter<core::int?> :async_completer = new asy::_AsyncAwaitCompleter::•<core::int?>();
+  asy::FutureOr<core::int?>? :return_value;
+  dynamic :async_stack_trace;
+  dynamic :async_op_then;
+  dynamic :async_op_error;
+  core::int :await_jump_var = 0;
+  dynamic :await_ctx_var;
+  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    try {
+      #L7:
+      {}
+      asy::_completeOnAsyncReturn(:async_completer, :return_value);
+      return;
+    }
+    on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+      :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
+    }
+  :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_completer.start(:async_op);
+  return :async_completer.{asy::Completer::future};
+}
+static method yieldSync() → core::Iterable<dynamic> /* originally sync* */ {
+  core::int :await_jump_var = 0;
+  dynamic :await_ctx_var;
+  function :sync_op(core::_SyncIterator<dynamic>? :iterator) → core::bool* yielding {
+    {}
+    return false;
+  }
+  return new core::_SyncIterable::•<dynamic>(:sync_op);
+}
+static method yieldAsync() → asy::Stream<dynamic> /* originally async* */ {
+  asy::_AsyncStarStreamController<dynamic>? :controller;
+  dynamic :controller_stream;
+  dynamic :async_stack_trace;
+  dynamic :async_op_then;
+  dynamic :async_op_error;
+  core::int :await_jump_var = 0;
+  dynamic :await_ctx_var;
+  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    try
+      try {
+        #L8:
+        {}
+        return;
+      }
+      on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+        :controller.{asy::_AsyncStarStreamController::addError}(:exception, :stack_trace);
+      }
+    finally {
+      :controller.{asy::_AsyncStarStreamController::close}();
+    }
+  :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :controller = new asy::_AsyncStarStreamController::•<dynamic>(:async_op);
+  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream};
+  return :controller_stream;
+}
+static method caseReturn1(self::Enum e) → self::Enum {
+  switch(e) {
+    #L9:
+    case #C3:
+      {
+        return e;
+      }
+    #L10:
+    case #C6:
+      {
+        return e;
+      }
+  }
+}
+static method caseReturn2(self::Enum e) → self::Enum {
+  switch(e) {
+    #L11:
+    case #C3:
+      {
+        return e;
+      }
+    #L12:
+    default:
+      {}
+  }
+  return let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+ - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
+Enum caseReturn2(Enum e) /* error */ {
+     ^" in null;
+}
+static method localFunctions() → dynamic {
+  function returnImplicit() → core::String {
+    core::print("foo");
+    return let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:63:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  String returnImplicit() /* error */ {
+  ^" in null;
+  }
+  function returnExplicit() → core::String {
+    core::print("foo");
+    return let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:69:12: Error: A value of type 'Null?' can't be assigned to a variable of type 'String'.
+    return null; // error
+           ^" in null as{TypeError,ForNonNullableByDefault} core::String;
+  }
+  function returnMixed(core::bool b) → core::String {
+    if(b) {
+      core::print("foo");
+      return let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:75:14: Error: A value of type 'Null?' can't be assigned to a variable of type 'String'.
+      return null; // error
+             ^" in null as{TypeError,ForNonNullableByDefault} core::String;
+    }
+    return let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:72:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  String returnMixed(bool b) /* error */ {
+  ^" in null;
+  }
+  function returnAsync1() → asy::Future<dynamic> /* originally async */ {
+    final asy::_AsyncAwaitCompleter<dynamic> :async_completer = new asy::_AsyncAwaitCompleter::•<dynamic>();
+    asy::FutureOr<dynamic>? :return_value;
+    dynamic :async_stack_trace;
+    dynamic :async_op_then;
+    dynamic :async_op_error;
+    core::int :await_jump_var = 0;
+    dynamic :await_ctx_var;
+    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+      try {
+        #L13:
+        {}
+        asy::_completeOnAsyncReturn(:async_completer, :return_value);
+        return;
+      }
+      on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+        :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
+      }
+    :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+    :async_completer.start(:async_op);
+    return :async_completer.{asy::Completer::future};
+  }
+  function returnAsync2() → asy::FutureOr<dynamic> /* originally async */ {
+    final asy::_AsyncAwaitCompleter<dynamic> :async_completer = new asy::_AsyncAwaitCompleter::•<dynamic>();
+    asy::FutureOr<dynamic>? :return_value;
+    dynamic :async_stack_trace;
+    dynamic :async_op_then;
+    dynamic :async_op_error;
+    core::int :await_jump_var = 0;
+    dynamic :await_ctx_var;
+    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+      try {
+        #L14:
+        {}
+        asy::_completeOnAsyncReturn(:async_completer, :return_value);
+        return;
+      }
+      on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+        :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
+      }
+    :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+    :async_completer.start(:async_op);
+    return :async_completer.{asy::Completer::future};
+  }
+  function returnAsync3() → asy::FutureOr<core::int> /* originally async */ {
+    final asy::_AsyncAwaitCompleter<core::int> :async_completer = new asy::_AsyncAwaitCompleter::•<core::int>();
+    asy::FutureOr<core::int>? :return_value;
+    dynamic :async_stack_trace;
+    dynamic :async_op_then;
+    dynamic :async_op_error;
+    core::int :await_jump_var = 0;
+    dynamic :await_ctx_var;
+    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+      try {
+        #L15:
+        {
+          :return_value = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+  FutureOr<int> returnAsync3() async {} // error
+  ^" in null;
+          break #L15;
+        }
+        asy::_completeOnAsyncReturn(:async_completer, :return_value);
+        return;
+      }
+      on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+        :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
+      }
+    :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+    :async_completer.start(:async_op);
+    return :async_completer.{asy::Completer::future};
+  }
+  function returnAsync4() → asy::FutureOr<core::int?> /* originally async */ {
+    final asy::_AsyncAwaitCompleter<core::int?> :async_completer = new asy::_AsyncAwaitCompleter::•<core::int?>();
+    asy::FutureOr<core::int?>? :return_value;
+    dynamic :async_stack_trace;
+    dynamic :async_op_then;
+    dynamic :async_op_error;
+    core::int :await_jump_var = 0;
+    dynamic :await_ctx_var;
+    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+      try {
+        #L16:
+        {}
+        asy::_completeOnAsyncReturn(:async_completer, :return_value);
+        return;
+      }
+      on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+        :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
+      }
+    :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+    :async_completer.start(:async_op);
+    return :async_completer.{asy::Completer::future};
+  }
+  function returnAsync5() → asy::Future<core::Null?> /* originally async */ {
+    final asy::_AsyncAwaitCompleter<core::Null?> :async_completer = new asy::_AsyncAwaitCompleter::•<core::Null?>();
+    asy::FutureOr<core::Null?>? :return_value;
+    dynamic :async_stack_trace;
+    dynamic :async_op_then;
+    dynamic :async_op_error;
+    core::int :await_jump_var = 0;
+    dynamic :await_ctx_var;
+    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+      try {
+        #L17:
+        {}
+        asy::_completeOnAsyncReturn(:async_completer, :return_value);
+        return;
+      }
+      on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+        :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
+      }
+    :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+    :async_completer.start(:async_op);
+    return :async_completer.{asy::Completer::future};
+  }
+  function returnAsync6() → asy::Future<core::int?> /* originally async */ {
+    final asy::_AsyncAwaitCompleter<core::int?> :async_completer = new asy::_AsyncAwaitCompleter::•<core::int?>();
+    asy::FutureOr<core::int?>? :return_value;
+    dynamic :async_stack_trace;
+    dynamic :async_op_then;
+    dynamic :async_op_error;
+    core::int :await_jump_var = 0;
+    dynamic :await_ctx_var;
+    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+      try {
+        #L18:
+        {
+          :return_value = null;
+          break #L18;
+        }
+        asy::_completeOnAsyncReturn(:async_completer, :return_value);
+        return;
+      }
+      on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+        :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
+      }
+    :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+    :async_completer.start(:async_op);
+    return :async_completer.{asy::Completer::future};
+  }
+  function returnAsync7() → asy::Future<core::int?> /* originally async */ {
+    final asy::_AsyncAwaitCompleter<core::int?> :async_completer = new asy::_AsyncAwaitCompleter::•<core::int?>();
+    asy::FutureOr<core::int?>? :return_value;
+    dynamic :async_stack_trace;
+    dynamic :async_op_then;
+    dynamic :async_op_error;
+    core::int :await_jump_var = 0;
+    dynamic :await_ctx_var;
+    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+      try {
+        #L19:
+        {}
+        asy::_completeOnAsyncReturn(:async_completer, :return_value);
+        return;
+      }
+      on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+        :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
+      }
+    :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+    :async_completer.start(:async_op);
+    return :async_completer.{asy::Completer::future};
+  }
+  function yieldSync() → core::Iterable<dynamic> /* originally sync* */ {
+    core::int :await_jump_var = 0;
+    dynamic :await_ctx_var;
+    function :sync_op(core::_SyncIterator<dynamic>? :iterator) → core::bool* yielding {
+      {}
+      return false;
+    }
+    return new core::_SyncIterable::•<dynamic>(:sync_op);
+  }
+  function yieldAsync() → asy::Stream<dynamic> /* originally async* */ {
+    asy::_AsyncStarStreamController<dynamic>? :controller;
+    dynamic :controller_stream;
+    dynamic :async_stack_trace;
+    dynamic :async_op_then;
+    dynamic :async_op_error;
+    core::int :await_jump_var = 0;
+    dynamic :await_ctx_var;
+    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+      try
+        try {
+          #L20:
+          {}
+          return;
+        }
+        on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+          :controller.{asy::_AsyncStarStreamController::addError}(:exception, :stack_trace);
+        }
+      finally {
+        :controller.{asy::_AsyncStarStreamController::close}();
+      }
+    :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+    :controller = new asy::_AsyncStarStreamController::•<dynamic>(:async_op);
+    :controller_stream = :controller.{asy::_AsyncStarStreamController::stream};
+    return :controller_stream;
+  }
+  function caseReturn1(self::Enum e) → self::Enum {
+    switch(e) {
+      #L21:
+      case #C3:
+        {
+          return e;
+        }
+      #L22:
+      case #C6:
+        {
+          return e;
+        }
+    }
+  }
+  function caseReturn2(self::Enum e) → self::Enum {
+    switch(e) {
+      #L23:
+      case #C3:
+        {
+          return e;
+        }
+      #L24:
+      default:
+        {}
+    }
+    return let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+ - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
+  Enum caseReturn2(Enum e) /* error */ {
+  ^" in null;
+  }
+  core::bool b = false;
+  core::int local1 = (() → core::int {
+    if(b)
+      return 0;
+    return let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:117:16: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+  var local1 = () /* error */ {
+               ^" in null;
+  }).call();
+  core::int? local2 = (() → core::int? {
+    if(b)
+      return null;
+    if(!b)
+      return 0;
+  }).call();
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "Enum.a"
+  #C3 = self::Enum {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "Enum.b"
+  #C6 = self::Enum {index:#C4, _name:#C5}
+  #C7 = <self::Enum>[#C3, #C6]
+}
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect b/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect
new file mode 100644
index 0000000..9180305
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.weak.expect
@@ -0,0 +1,239 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:7:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+// String returnImplicit() /*error*/ {
+//        ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:13:10: Error: A value of type 'Null?' can't be assigned to a variable of type 'String'.
+//   return null; // error
+//          ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:19:12: Error: A value of type 'Null?' can't be assigned to a variable of type 'String'.
+//     return null; // error
+//            ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:16:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+// String returnMixed(bool b) /*error*/ {
+//        ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:27:15: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+// FutureOr<int> returnAsync3() async {} // error
+//               ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+//  - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
+// Enum caseReturn2(Enum e) /* error */ {
+//      ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:63:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+//   String returnImplicit() /* error */ {
+//   ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:69:12: Error: A value of type 'Null?' can't be assigned to a variable of type 'String'.
+//     return null; // error
+//            ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:75:14: Error: A value of type 'Null?' can't be assigned to a variable of type 'String'.
+//       return null; // error
+//              ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:72:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+//   String returnMixed(bool b) /* error */ {
+//   ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+//   FutureOr<int> returnAsync3() async {} // error
+//   ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+//  - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
+//   Enum caseReturn2(Enum e) /* error */ {
+//   ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:117:16: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+//   var local1 = () /* error */ {
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class Enum extends core::Object /*isEnum*/  {
+  final field core::int index;
+  final field core::String _name;
+  static const field core::List<self::Enum> values = #C7;
+  static const field self::Enum a = #C3;
+  static const field self::Enum b = #C6;
+  const constructor •(core::int index, core::String _name) → self::Enum
+    : self::Enum::index = index, self::Enum::_name = _name, super core::Object::•()
+    ;
+  method toString() → core::String
+    return this.{=self::Enum::_name};
+}
+static method returnImplicit() → core::String {
+  core::print("foo");
+  return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:7:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+String returnImplicit() /*error*/ {
+       ^" in null;
+}
+static method returnExplicit() → core::String {
+  core::print("foo");
+  return let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:13:10: Error: A value of type 'Null?' can't be assigned to a variable of type 'String'.
+  return null; // error
+         ^" in null as{TypeError,ForNonNullableByDefault} core::String;
+}
+static method returnMixed(core::bool b) → core::String {
+  if(b) {
+    core::print("foo");
+    return let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:19:12: Error: A value of type 'Null?' can't be assigned to a variable of type 'String'.
+    return null; // error
+           ^" in null as{TypeError,ForNonNullableByDefault} core::String;
+  }
+  return let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:16:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+String returnMixed(bool b) /*error*/ {
+       ^" in null;
+}
+static method returnAsync1() → asy::Future<dynamic> async {}
+static method returnAsync2() → asy::FutureOr<dynamic> async {}
+static method returnAsync3() → asy::FutureOr<core::int> async {
+  return let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:27:15: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+FutureOr<int> returnAsync3() async {} // error
+              ^" in null;
+}
+static method returnAsync4() → asy::FutureOr<core::int?> async {}
+static method returnAsync5() → dynamic async {}
+static method returnAsync6() → asy::Future<core::int?> async {
+  return null;
+}
+static method returnAsync7() → asy::Future<core::int?> async {}
+static method yieldSync() → core::Iterable<dynamic> sync* {}
+static method yieldAsync() → asy::Stream<dynamic> async* {}
+static method caseReturn1(self::Enum e) → self::Enum {
+  switch(e) {
+    #L1:
+    case #C3:
+      {
+        return e;
+      }
+    #L2:
+    case #C6:
+      {
+        return e;
+      }
+  }
+}
+static method caseReturn2(self::Enum e) → self::Enum {
+  switch(e) {
+    #L3:
+    case #C3:
+      {
+        return e;
+      }
+    #L4:
+    default:
+      {}
+  }
+  return let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+ - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
+Enum caseReturn2(Enum e) /* error */ {
+     ^" in null;
+}
+static method localFunctions() → dynamic {
+  function returnImplicit() → core::String {
+    core::print("foo");
+    return let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:63:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  String returnImplicit() /* error */ {
+  ^" in null;
+  }
+  function returnExplicit() → core::String {
+    core::print("foo");
+    return let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:69:12: Error: A value of type 'Null?' can't be assigned to a variable of type 'String'.
+    return null; // error
+           ^" in null as{TypeError,ForNonNullableByDefault} core::String;
+  }
+  function returnMixed(core::bool b) → core::String {
+    if(b) {
+      core::print("foo");
+      return let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:75:14: Error: A value of type 'Null?' can't be assigned to a variable of type 'String'.
+      return null; // error
+             ^" in null as{TypeError,ForNonNullableByDefault} core::String;
+    }
+    return let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:72:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  String returnMixed(bool b) /* error */ {
+  ^" in null;
+  }
+  function returnAsync1() → asy::Future<dynamic> async {}
+  function returnAsync2() → asy::FutureOr<dynamic> async {}
+  function returnAsync3() → asy::FutureOr<core::int> async {
+    return let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+  FutureOr<int> returnAsync3() async {} // error
+  ^" in null;
+  }
+  function returnAsync4() → asy::FutureOr<core::int?> async {}
+  function returnAsync5() → asy::Future<core::Null?> async {}
+  function returnAsync6() → asy::Future<core::int?> async {
+    return null;
+  }
+  function returnAsync7() → asy::Future<core::int?> async {}
+  function yieldSync() → core::Iterable<dynamic> sync* {}
+  function yieldAsync() → asy::Stream<dynamic> async* {}
+  function caseReturn1(self::Enum e) → self::Enum {
+    switch(e) {
+      #L5:
+      case #C3:
+        {
+          return e;
+        }
+      #L6:
+      case #C6:
+        {
+          return e;
+        }
+    }
+  }
+  function caseReturn2(self::Enum e) → self::Enum {
+    switch(e) {
+      #L7:
+      case #C3:
+        {
+          return e;
+        }
+      #L8:
+      default:
+        {}
+    }
+    return let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+ - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
+  Enum caseReturn2(Enum e) /* error */ {
+  ^" in null;
+  }
+  core::bool b = false;
+  core::int local1 = (() → core::int {
+    if(b)
+      return 0;
+    return let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:117:16: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+  var local1 = () /* error */ {
+               ^" in null;
+  }).call();
+  core::int? local2 = (() → core::int? {
+    if(b)
+      return null;
+    if(!b)
+      return 0;
+  }).call();
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "Enum.a"
+  #C3 = self::Enum {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "Enum.b"
+  #C6 = self::Enum {index:#C4, _name:#C5}
+  #C7 = <self::Enum*>[#C3, #C6]
+}
diff --git a/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect
new file mode 100644
index 0000000..319833c
--- /dev/null
+++ b/pkg/front_end/testcases/nnbd/return_null.dart.weak.transformed.expect
@@ -0,0 +1,635 @@
+library /*isNonNullableByDefault*/;
+//
+// Problems in library:
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:7:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+// String returnImplicit() /*error*/ {
+//        ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:13:10: Error: A value of type 'Null?' can't be assigned to a variable of type 'String'.
+//   return null; // error
+//          ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:19:12: Error: A value of type 'Null?' can't be assigned to a variable of type 'String'.
+//     return null; // error
+//            ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:16:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+// String returnMixed(bool b) /*error*/ {
+//        ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:27:15: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+// FutureOr<int> returnAsync3() async {} // error
+//               ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+//  - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
+// Enum caseReturn2(Enum e) /* error */ {
+//      ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:63:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+//   String returnImplicit() /* error */ {
+//   ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:69:12: Error: A value of type 'Null?' can't be assigned to a variable of type 'String'.
+//     return null; // error
+//            ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:75:14: Error: A value of type 'Null?' can't be assigned to a variable of type 'String'.
+//       return null; // error
+//              ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:72:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+//   String returnMixed(bool b) /* error */ {
+//   ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+//   FutureOr<int> returnAsync3() async {} // error
+//   ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+//  - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
+//   Enum caseReturn2(Enum e) /* error */ {
+//   ^
+//
+// pkg/front_end/testcases/nnbd/return_null.dart:117:16: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+//   var local1 = () /* error */ {
+//                ^
+//
+import self as self;
+import "dart:core" as core;
+import "dart:async" as asy;
+
+import "dart:async";
+
+class Enum extends core::Object /*isEnum*/  {
+  final field core::int index;
+  final field core::String _name;
+  static const field core::List<self::Enum> values = #C7;
+  static const field self::Enum a = #C3;
+  static const field self::Enum b = #C6;
+  const constructor •(core::int index, core::String _name) → self::Enum
+    : self::Enum::index = index, self::Enum::_name = _name, super core::Object::•()
+    ;
+  method toString() → core::String
+    return this.{=self::Enum::_name};
+}
+static method returnImplicit() → core::String {
+  core::print("foo");
+  return let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:7:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+String returnImplicit() /*error*/ {
+       ^" in null;
+}
+static method returnExplicit() → core::String {
+  core::print("foo");
+  return let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:13:10: Error: A value of type 'Null?' can't be assigned to a variable of type 'String'.
+  return null; // error
+         ^" in null as{TypeError,ForNonNullableByDefault} core::String;
+}
+static method returnMixed(core::bool b) → core::String {
+  if(b) {
+    core::print("foo");
+    return let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:19:12: Error: A value of type 'Null?' can't be assigned to a variable of type 'String'.
+    return null; // error
+           ^" in null as{TypeError,ForNonNullableByDefault} core::String;
+  }
+  return let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:16:8: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+String returnMixed(bool b) /*error*/ {
+       ^" in null;
+}
+static method returnAsync1() → asy::Future<dynamic> /* originally async */ {
+  final asy::_AsyncAwaitCompleter<dynamic> :async_completer = new asy::_AsyncAwaitCompleter::•<dynamic>();
+  asy::FutureOr<dynamic>? :return_value;
+  dynamic :async_stack_trace;
+  dynamic :async_op_then;
+  dynamic :async_op_error;
+  core::int :await_jump_var = 0;
+  dynamic :await_ctx_var;
+  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    try {
+      #L1:
+      {}
+      asy::_completeOnAsyncReturn(:async_completer, :return_value);
+      return;
+    }
+    on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+      :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
+    }
+  :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_completer.start(:async_op);
+  return :async_completer.{asy::Completer::future};
+}
+static method returnAsync2() → asy::FutureOr<dynamic> /* originally async */ {
+  final asy::_AsyncAwaitCompleter<dynamic> :async_completer = new asy::_AsyncAwaitCompleter::•<dynamic>();
+  asy::FutureOr<dynamic>? :return_value;
+  dynamic :async_stack_trace;
+  dynamic :async_op_then;
+  dynamic :async_op_error;
+  core::int :await_jump_var = 0;
+  dynamic :await_ctx_var;
+  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    try {
+      #L2:
+      {}
+      asy::_completeOnAsyncReturn(:async_completer, :return_value);
+      return;
+    }
+    on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+      :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
+    }
+  :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_completer.start(:async_op);
+  return :async_completer.{asy::Completer::future};
+}
+static method returnAsync3() → asy::FutureOr<core::int> /* originally async */ {
+  final asy::_AsyncAwaitCompleter<core::int> :async_completer = new asy::_AsyncAwaitCompleter::•<core::int>();
+  asy::FutureOr<core::int>? :return_value;
+  dynamic :async_stack_trace;
+  dynamic :async_op_then;
+  dynamic :async_op_error;
+  core::int :await_jump_var = 0;
+  dynamic :await_ctx_var;
+  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    try {
+      #L3:
+      {
+        :return_value = let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:27:15: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+FutureOr<int> returnAsync3() async {} // error
+              ^" in null;
+        break #L3;
+      }
+      asy::_completeOnAsyncReturn(:async_completer, :return_value);
+      return;
+    }
+    on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+      :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
+    }
+  :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_completer.start(:async_op);
+  return :async_completer.{asy::Completer::future};
+}
+static method returnAsync4() → asy::FutureOr<core::int?> /* originally async */ {
+  final asy::_AsyncAwaitCompleter<core::int?> :async_completer = new asy::_AsyncAwaitCompleter::•<core::int?>();
+  asy::FutureOr<core::int?>? :return_value;
+  dynamic :async_stack_trace;
+  dynamic :async_op_then;
+  dynamic :async_op_error;
+  core::int :await_jump_var = 0;
+  dynamic :await_ctx_var;
+  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    try {
+      #L4:
+      {}
+      asy::_completeOnAsyncReturn(:async_completer, :return_value);
+      return;
+    }
+    on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+      :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
+    }
+  :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_completer.start(:async_op);
+  return :async_completer.{asy::Completer::future};
+}
+static method returnAsync5() → dynamic /* originally async */ {
+  final asy::_AsyncAwaitCompleter<dynamic> :async_completer = new asy::_AsyncAwaitCompleter::•<dynamic>();
+  asy::FutureOr<dynamic>? :return_value;
+  dynamic :async_stack_trace;
+  dynamic :async_op_then;
+  dynamic :async_op_error;
+  core::int :await_jump_var = 0;
+  dynamic :await_ctx_var;
+  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    try {
+      #L5:
+      {}
+      asy::_completeOnAsyncReturn(:async_completer, :return_value);
+      return;
+    }
+    on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+      :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
+    }
+  :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_completer.start(:async_op);
+  return :async_completer.{asy::Completer::future};
+}
+static method returnAsync6() → asy::Future<core::int?> /* originally async */ {
+  final asy::_AsyncAwaitCompleter<core::int?> :async_completer = new asy::_AsyncAwaitCompleter::•<core::int?>();
+  asy::FutureOr<core::int?>? :return_value;
+  dynamic :async_stack_trace;
+  dynamic :async_op_then;
+  dynamic :async_op_error;
+  core::int :await_jump_var = 0;
+  dynamic :await_ctx_var;
+  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    try {
+      #L6:
+      {
+        :return_value = null;
+        break #L6;
+      }
+      asy::_completeOnAsyncReturn(:async_completer, :return_value);
+      return;
+    }
+    on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+      :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
+    }
+  :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_completer.start(:async_op);
+  return :async_completer.{asy::Completer::future};
+}
+static method returnAsync7() → asy::Future<core::int?> /* originally async */ {
+  final asy::_AsyncAwaitCompleter<core::int?> :async_completer = new asy::_AsyncAwaitCompleter::•<core::int?>();
+  asy::FutureOr<core::int?>? :return_value;
+  dynamic :async_stack_trace;
+  dynamic :async_op_then;
+  dynamic :async_op_error;
+  core::int :await_jump_var = 0;
+  dynamic :await_ctx_var;
+  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    try {
+      #L7:
+      {}
+      asy::_completeOnAsyncReturn(:async_completer, :return_value);
+      return;
+    }
+    on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+      :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
+    }
+  :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :async_completer.start(:async_op);
+  return :async_completer.{asy::Completer::future};
+}
+static method yieldSync() → core::Iterable<dynamic> /* originally sync* */ {
+  core::int :await_jump_var = 0;
+  dynamic :await_ctx_var;
+  function :sync_op(core::_SyncIterator<dynamic>? :iterator) → core::bool* yielding {
+    {}
+    return false;
+  }
+  return new core::_SyncIterable::•<dynamic>(:sync_op);
+}
+static method yieldAsync() → asy::Stream<dynamic> /* originally async* */ {
+  asy::_AsyncStarStreamController<dynamic>? :controller;
+  dynamic :controller_stream;
+  dynamic :async_stack_trace;
+  dynamic :async_op_then;
+  dynamic :async_op_error;
+  core::int :await_jump_var = 0;
+  dynamic :await_ctx_var;
+  function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+    try
+      try {
+        #L8:
+        {}
+        return;
+      }
+      on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+        :controller.{asy::_AsyncStarStreamController::addError}(:exception, :stack_trace);
+      }
+    finally {
+      :controller.{asy::_AsyncStarStreamController::close}();
+    }
+  :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+  :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+  :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+  :controller = new asy::_AsyncStarStreamController::•<dynamic>(:async_op);
+  :controller_stream = :controller.{asy::_AsyncStarStreamController::stream};
+  return :controller_stream;
+}
+static method caseReturn1(self::Enum e) → self::Enum {
+  switch(e) {
+    #L9:
+    case #C3:
+      {
+        return e;
+      }
+    #L10:
+    case #C6:
+      {
+        return e;
+      }
+  }
+}
+static method caseReturn2(self::Enum e) → self::Enum {
+  switch(e) {
+    #L11:
+    case #C3:
+      {
+        return e;
+      }
+    #L12:
+    default:
+      {}
+  }
+  return let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:54:6: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+ - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
+Enum caseReturn2(Enum e) /* error */ {
+     ^" in null;
+}
+static method localFunctions() → dynamic {
+  function returnImplicit() → core::String {
+    core::print("foo");
+    return let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:63:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  String returnImplicit() /* error */ {
+  ^" in null;
+  }
+  function returnExplicit() → core::String {
+    core::print("foo");
+    return let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:69:12: Error: A value of type 'Null?' can't be assigned to a variable of type 'String'.
+    return null; // error
+           ^" in null as{TypeError,ForNonNullableByDefault} core::String;
+  }
+  function returnMixed(core::bool b) → core::String {
+    if(b) {
+      core::print("foo");
+      return let final<BottomType> #t9 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:75:14: Error: A value of type 'Null?' can't be assigned to a variable of type 'String'.
+      return null; // error
+             ^" in null as{TypeError,ForNonNullableByDefault} core::String;
+    }
+    return let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:72:3: Error: A non-null value must be returned since the return type 'String' doesn't allow null.
+  String returnMixed(bool b) /* error */ {
+  ^" in null;
+  }
+  function returnAsync1() → asy::Future<dynamic> /* originally async */ {
+    final asy::_AsyncAwaitCompleter<dynamic> :async_completer = new asy::_AsyncAwaitCompleter::•<dynamic>();
+    asy::FutureOr<dynamic>? :return_value;
+    dynamic :async_stack_trace;
+    dynamic :async_op_then;
+    dynamic :async_op_error;
+    core::int :await_jump_var = 0;
+    dynamic :await_ctx_var;
+    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+      try {
+        #L13:
+        {}
+        asy::_completeOnAsyncReturn(:async_completer, :return_value);
+        return;
+      }
+      on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+        :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
+      }
+    :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+    :async_completer.start(:async_op);
+    return :async_completer.{asy::Completer::future};
+  }
+  function returnAsync2() → asy::FutureOr<dynamic> /* originally async */ {
+    final asy::_AsyncAwaitCompleter<dynamic> :async_completer = new asy::_AsyncAwaitCompleter::•<dynamic>();
+    asy::FutureOr<dynamic>? :return_value;
+    dynamic :async_stack_trace;
+    dynamic :async_op_then;
+    dynamic :async_op_error;
+    core::int :await_jump_var = 0;
+    dynamic :await_ctx_var;
+    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+      try {
+        #L14:
+        {}
+        asy::_completeOnAsyncReturn(:async_completer, :return_value);
+        return;
+      }
+      on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+        :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
+      }
+    :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+    :async_completer.start(:async_op);
+    return :async_completer.{asy::Completer::future};
+  }
+  function returnAsync3() → asy::FutureOr<core::int> /* originally async */ {
+    final asy::_AsyncAwaitCompleter<core::int> :async_completer = new asy::_AsyncAwaitCompleter::•<core::int>();
+    asy::FutureOr<core::int>? :return_value;
+    dynamic :async_stack_trace;
+    dynamic :async_op_then;
+    dynamic :async_op_error;
+    core::int :await_jump_var = 0;
+    dynamic :await_ctx_var;
+    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+      try {
+        #L15:
+        {
+          :return_value = let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:83:3: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+  FutureOr<int> returnAsync3() async {} // error
+  ^" in null;
+          break #L15;
+        }
+        asy::_completeOnAsyncReturn(:async_completer, :return_value);
+        return;
+      }
+      on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+        :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
+      }
+    :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+    :async_completer.start(:async_op);
+    return :async_completer.{asy::Completer::future};
+  }
+  function returnAsync4() → asy::FutureOr<core::int?> /* originally async */ {
+    final asy::_AsyncAwaitCompleter<core::int?> :async_completer = new asy::_AsyncAwaitCompleter::•<core::int?>();
+    asy::FutureOr<core::int?>? :return_value;
+    dynamic :async_stack_trace;
+    dynamic :async_op_then;
+    dynamic :async_op_error;
+    core::int :await_jump_var = 0;
+    dynamic :await_ctx_var;
+    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+      try {
+        #L16:
+        {}
+        asy::_completeOnAsyncReturn(:async_completer, :return_value);
+        return;
+      }
+      on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+        :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
+      }
+    :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+    :async_completer.start(:async_op);
+    return :async_completer.{asy::Completer::future};
+  }
+  function returnAsync5() → asy::Future<core::Null?> /* originally async */ {
+    final asy::_AsyncAwaitCompleter<core::Null?> :async_completer = new asy::_AsyncAwaitCompleter::•<core::Null?>();
+    asy::FutureOr<core::Null?>? :return_value;
+    dynamic :async_stack_trace;
+    dynamic :async_op_then;
+    dynamic :async_op_error;
+    core::int :await_jump_var = 0;
+    dynamic :await_ctx_var;
+    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+      try {
+        #L17:
+        {}
+        asy::_completeOnAsyncReturn(:async_completer, :return_value);
+        return;
+      }
+      on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+        :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
+      }
+    :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+    :async_completer.start(:async_op);
+    return :async_completer.{asy::Completer::future};
+  }
+  function returnAsync6() → asy::Future<core::int?> /* originally async */ {
+    final asy::_AsyncAwaitCompleter<core::int?> :async_completer = new asy::_AsyncAwaitCompleter::•<core::int?>();
+    asy::FutureOr<core::int?>? :return_value;
+    dynamic :async_stack_trace;
+    dynamic :async_op_then;
+    dynamic :async_op_error;
+    core::int :await_jump_var = 0;
+    dynamic :await_ctx_var;
+    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+      try {
+        #L18:
+        {
+          :return_value = null;
+          break #L18;
+        }
+        asy::_completeOnAsyncReturn(:async_completer, :return_value);
+        return;
+      }
+      on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+        :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
+      }
+    :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+    :async_completer.start(:async_op);
+    return :async_completer.{asy::Completer::future};
+  }
+  function returnAsync7() → asy::Future<core::int?> /* originally async */ {
+    final asy::_AsyncAwaitCompleter<core::int?> :async_completer = new asy::_AsyncAwaitCompleter::•<core::int?>();
+    asy::FutureOr<core::int?>? :return_value;
+    dynamic :async_stack_trace;
+    dynamic :async_op_then;
+    dynamic :async_op_error;
+    core::int :await_jump_var = 0;
+    dynamic :await_ctx_var;
+    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+      try {
+        #L19:
+        {}
+        asy::_completeOnAsyncReturn(:async_completer, :return_value);
+        return;
+      }
+      on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+        :async_completer.{asy::Completer::completeError}(:exception, :stack_trace);
+      }
+    :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+    :async_completer.start(:async_op);
+    return :async_completer.{asy::Completer::future};
+  }
+  function yieldSync() → core::Iterable<dynamic> /* originally sync* */ {
+    core::int :await_jump_var = 0;
+    dynamic :await_ctx_var;
+    function :sync_op(core::_SyncIterator<dynamic>? :iterator) → core::bool* yielding {
+      {}
+      return false;
+    }
+    return new core::_SyncIterable::•<dynamic>(:sync_op);
+  }
+  function yieldAsync() → asy::Stream<dynamic> /* originally async* */ {
+    asy::_AsyncStarStreamController<dynamic>? :controller;
+    dynamic :controller_stream;
+    dynamic :async_stack_trace;
+    dynamic :async_op_then;
+    dynamic :async_op_error;
+    core::int :await_jump_var = 0;
+    dynamic :await_ctx_var;
+    function :async_op([dynamic :result, dynamic :exception, dynamic :stack_trace]) → dynamic yielding 
+      try
+        try {
+          #L20:
+          {}
+          return;
+        }
+        on dynamic catch(dynamic :exception, dynamic :stack_trace) {
+          :controller.{asy::_AsyncStarStreamController::addError}(:exception, :stack_trace);
+        }
+      finally {
+        :controller.{asy::_AsyncStarStreamController::close}();
+      }
+    :async_stack_trace = asy::_asyncStackTraceHelper(:async_op);
+    :async_op_then = asy::_asyncThenWrapperHelper(:async_op);
+    :async_op_error = asy::_asyncErrorWrapperHelper(:async_op);
+    :controller = new asy::_AsyncStarStreamController::•<dynamic>(:async_op);
+    :controller_stream = :controller.{asy::_AsyncStarStreamController::stream};
+    return :controller_stream;
+  }
+  function caseReturn1(self::Enum e) → self::Enum {
+    switch(e) {
+      #L21:
+      case #C3:
+        {
+          return e;
+        }
+      #L22:
+      case #C6:
+        {
+          return e;
+        }
+    }
+  }
+  function caseReturn2(self::Enum e) → self::Enum {
+    switch(e) {
+      #L23:
+      case #C3:
+        {
+          return e;
+        }
+      #L24:
+      default:
+        {}
+    }
+    return let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:108:3: Error: A non-null value must be returned since the return type 'Enum' doesn't allow null.
+ - 'Enum' is from 'pkg/front_end/testcases/nnbd/return_null.dart'.
+  Enum caseReturn2(Enum e) /* error */ {
+  ^" in null;
+  }
+  core::bool b = false;
+  core::int local1 = (() → core::int {
+    if(b)
+      return 0;
+    return let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/return_null.dart:117:16: Error: A non-null value must be returned since the return type 'int' doesn't allow null.
+  var local1 = () /* error */ {
+               ^" in null;
+  }).call();
+  core::int? local2 = (() → core::int? {
+    if(b)
+      return null;
+    if(!b)
+      return 0;
+  }).call();
+}
+static method main() → dynamic {}
+
+constants  {
+  #C1 = 0
+  #C2 = "Enum.a"
+  #C3 = self::Enum {index:#C1, _name:#C2}
+  #C4 = 1
+  #C5 = "Enum.b"
+  #C6 = self::Enum {index:#C4, _name:#C5}
+  #C7 = <self::Enum*>[#C3, #C6]
+}
diff --git a/pkg/front_end/testcases/nnbd/shorting_stop.dart.weak.expect b/pkg/front_end/testcases/nnbd/shorting_stop.dart.weak.expect
index 0c83c79..9ddd160 100644
--- a/pkg/front_end/testcases/nnbd/shorting_stop.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/shorting_stop.dart.weak.expect
@@ -2,34 +2,34 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/shorting_stop.dart:18:33: Warning: Operator '+' is called on 'int?' which is potentially null.
+// pkg/front_end/testcases/nnbd/shorting_stop.dart:18:33: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
 //   throwsInStrong(() => c?.field + 2); // error
 //                                 ^
 //
-// pkg/front_end/testcases/nnbd/shorting_stop.dart:21:34: Warning: Property 'field' is accessed on 'Class?' which is potentially null.
+// pkg/front_end/testcases/nnbd/shorting_stop.dart:21:34: Error: Property 'field' cannot be accessed on 'Class?' because it is potentially null.
 //  - 'Class' is from 'pkg/front_end/testcases/nnbd/shorting_stop.dart'.
 // Try accessing using ?. instead.
 //   throwsInStrong(() => (c?.next).field); // error
 //                                  ^^^^^
 //
-// pkg/front_end/testcases/nnbd/shorting_stop.dart:22:24: Warning: Operator 'unary-' is called on 'int?' which is potentially null.
+// pkg/front_end/testcases/nnbd/shorting_stop.dart:22:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
 //   throwsInStrong(() => -c?.field); // error
 //                        ^
 //
-// pkg/front_end/testcases/nnbd/shorting_stop.dart:25:35: Warning: Operator '+' is called on 'int?' which is potentially null.
+// pkg/front_end/testcases/nnbd/shorting_stop.dart:25:35: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
 //   throwsInStrong(() => c?.next[0] + 2); // error
 //                                   ^
 //
-// pkg/front_end/testcases/nnbd/shorting_stop.dart:28:37: Warning: Property 'isEven' is accessed on 'int?' which is potentially null.
+// pkg/front_end/testcases/nnbd/shorting_stop.dart:28:37: Error: Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
 // Try accessing using ?. instead.
 //   throwsInStrong(() => (c?.next[0]).isEven); // error
 //                                     ^^^^^^
 //
-// pkg/front_end/testcases/nnbd/shorting_stop.dart:29:24: Warning: Operator 'unary-' is called on 'int?' which is potentially null.
+// pkg/front_end/testcases/nnbd/shorting_stop.dart:29:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
 //   throwsInStrong(() => -c?.next[0]); // error
 //                        ^
 //
-// pkg/front_end/testcases/nnbd/shorting_stop.dart:36:7: Warning: Property 'length' is accessed on 'String?' which is potentially null.
+// pkg/front_end/testcases/nnbd/shorting_stop.dart:36:7: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
 // Try accessing using ?. instead.
 //     s.length; // This will be an invalid expression in strong mode.
 //       ^^^^^^
@@ -54,21 +54,39 @@
 }
 static method test(self::Class? c) → dynamic {
   let final self::Class? #t1 = c in #t1.{core::Object::==}(null) ?{core::int?} null : #t1{self::Class}.{self::Class::next}.{self::Class::field};
-  self::throwsInStrong(() → core::int? => (let final self::Class? #t2 = c in #t2.{core::Object::==}(null) ?{core::int?} null : #t2{self::Class}.{self::Class::field}).{core::num::+}(2));
-  let final self::Class? #t3 = c in #t3.{core::Object::==}(null) ?{core::int?} null : let final core::int #t4 = #t3.{self::Class::field}.{core::num::+}(1) in let final void #t5 = #t3.{self::Class::field} = #t4 in #t4;
-  let final self::Class? #t6 = c in #t6.{core::Object::==}(null) ?{core::int?} null : #t6.{self::Class::field} = #t6.{self::Class::field}.{core::num::+}(1);
-  self::throwsInStrong(() → core::int => (let final self::Class? #t7 = c in #t7.{core::Object::==}(null) ?{self::Class?} null : #t7{self::Class}.{self::Class::next}).{self::Class::field});
-  self::throwsInStrong(() → core::int => (let final self::Class? #t8 = c in #t8.{core::Object::==}(null) ?{core::int?} null : #t8{self::Class}.{self::Class::field}).{core::int::unary-}());
-  let final self::Class? #t9 = c in #t9.{core::Object::==}(null) ?{core::bool?} null : #t9{self::Class}.{self::Class::next}.{self::Class::[]}(0).{core::int::isEven};
-  self::throwsInStrong(() → core::int? => (let final self::Class? #t10 = c in #t10.{core::Object::==}(null) ?{core::int?} null : #t10{self::Class}.{self::Class::next}.{self::Class::[]}(0)).{core::num::+}(2));
-  let final self::Class? #t11 = c in #t11.{core::Object::==}(null) ?{core::int?} null : let final self::Class #t12 = #t11{self::Class}.{self::Class::next} in let final core::int #t13 = 0 in let final core::int #t14 = #t12.{self::Class::[]}(#t13).{core::num::+}(1) in let final void #t15 = #t12.{self::Class::[]=}(#t13, #t14) in #t14;
-  let final self::Class? #t16 = c in #t16.{core::Object::==}(null) ?{core::int?} null : let final self::Class #t17 = #t16{self::Class}.{self::Class::next} in let final core::int #t18 = 0 in #t17.{self::Class::[]=}(#t18, #t17.{self::Class::[]}(#t18).{core::num::+}(1));
-  self::throwsInStrong(() → core::bool => (let final self::Class? #t19 = c in #t19.{core::Object::==}(null) ?{core::int?} null : #t19{self::Class}.{self::Class::next}.{self::Class::[]}(0)).{core::int::isEven});
-  self::throwsInStrong(() → core::int => (let final self::Class? #t20 = c in #t20.{core::Object::==}(null) ?{core::int?} null : #t20{self::Class}.{self::Class::next}.{self::Class::[]}(0)).{core::int::unary-}());
+  self::throwsInStrong(() → core::int? => let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:18:33: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+  throwsInStrong(() => c?.field + 2); // error
+                                ^" in (let final self::Class? #t3 = c in #t3.{core::Object::==}(null) ?{core::int?} null : #t3{self::Class}.{self::Class::field}).{core::num::+}(2));
+  let final self::Class? #t4 = c in #t4.{core::Object::==}(null) ?{core::int?} null : let final core::int #t5 = #t4.{self::Class::field}.{core::num::+}(1) in let final void #t6 = #t4.{self::Class::field} = #t5 in #t5;
+  let final self::Class? #t7 = c in #t7.{core::Object::==}(null) ?{core::int?} null : #t7.{self::Class::field} = #t7.{self::Class::field}.{core::num::+}(1);
+  self::throwsInStrong(() → core::int => let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:21:34: Error: Property 'field' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/shorting_stop.dart'.
+Try accessing using ?. instead.
+  throwsInStrong(() => (c?.next).field); // error
+                                 ^^^^^" in (let final self::Class? #t9 = c in #t9.{core::Object::==}(null) ?{self::Class?} null : #t9{self::Class}.{self::Class::next}).{self::Class::field});
+  self::throwsInStrong(() → core::int => let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:22:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+  throwsInStrong(() => -c?.field); // error
+                       ^" in (let final self::Class? #t11 = c in #t11.{core::Object::==}(null) ?{core::int?} null : #t11{self::Class}.{self::Class::field}).{core::int::unary-}());
+  let final self::Class? #t12 = c in #t12.{core::Object::==}(null) ?{core::bool?} null : #t12{self::Class}.{self::Class::next}.{self::Class::[]}(0).{core::int::isEven};
+  self::throwsInStrong(() → core::int? => let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:25:35: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+  throwsInStrong(() => c?.next[0] + 2); // error
+                                  ^" in (let final self::Class? #t14 = c in #t14.{core::Object::==}(null) ?{core::int?} null : #t14{self::Class}.{self::Class::next}.{self::Class::[]}(0)).{core::num::+}(2));
+  let final self::Class? #t15 = c in #t15.{core::Object::==}(null) ?{core::int?} null : let final self::Class #t16 = #t15{self::Class}.{self::Class::next} in let final core::int #t17 = 0 in let final core::int #t18 = #t16.{self::Class::[]}(#t17).{core::num::+}(1) in let final void #t19 = #t16.{self::Class::[]=}(#t17, #t18) in #t18;
+  let final self::Class? #t20 = c in #t20.{core::Object::==}(null) ?{core::int?} null : let final self::Class #t21 = #t20{self::Class}.{self::Class::next} in let final core::int #t22 = 0 in #t21.{self::Class::[]=}(#t22, #t21.{self::Class::[]}(#t22).{core::num::+}(1));
+  self::throwsInStrong(() → core::bool => let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:28:37: Error: Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
+Try accessing using ?. instead.
+  throwsInStrong(() => (c?.next[0]).isEven); // error
+                                    ^^^^^^" in (let final self::Class? #t24 = c in #t24.{core::Object::==}(null) ?{core::int?} null : #t24{self::Class}.{self::Class::next}.{self::Class::[]}(0)).{core::int::isEven});
+  self::throwsInStrong(() → core::int => let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:29:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+  throwsInStrong(() => -c?.next[0]); // error
+                       ^" in (let final self::Class? #t26 = c in #t26.{core::Object::==}(null) ?{core::int?} null : #t26{self::Class}.{self::Class::next}.{self::Class::[]}(0)).{core::int::unary-}());
 }
 static method _inStrongMode() → core::bool {
   (core::String?) → core::Null? f = (core::String? s) → core::Null? {
-    s.{core::String::length};
+    let final<BottomType> #t27 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:36:7: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
+Try accessing using ?. instead.
+    s.length; // This will be an invalid expression in strong mode.
+      ^^^^^^" in s.{core::String::length};
   };
   try {
     f.call("foo");
diff --git a/pkg/front_end/testcases/nnbd/shorting_stop.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/shorting_stop.dart.weak.transformed.expect
index 0c83c79..9ddd160 100644
--- a/pkg/front_end/testcases/nnbd/shorting_stop.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/shorting_stop.dart.weak.transformed.expect
@@ -2,34 +2,34 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/shorting_stop.dart:18:33: Warning: Operator '+' is called on 'int?' which is potentially null.
+// pkg/front_end/testcases/nnbd/shorting_stop.dart:18:33: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
 //   throwsInStrong(() => c?.field + 2); // error
 //                                 ^
 //
-// pkg/front_end/testcases/nnbd/shorting_stop.dart:21:34: Warning: Property 'field' is accessed on 'Class?' which is potentially null.
+// pkg/front_end/testcases/nnbd/shorting_stop.dart:21:34: Error: Property 'field' cannot be accessed on 'Class?' because it is potentially null.
 //  - 'Class' is from 'pkg/front_end/testcases/nnbd/shorting_stop.dart'.
 // Try accessing using ?. instead.
 //   throwsInStrong(() => (c?.next).field); // error
 //                                  ^^^^^
 //
-// pkg/front_end/testcases/nnbd/shorting_stop.dart:22:24: Warning: Operator 'unary-' is called on 'int?' which is potentially null.
+// pkg/front_end/testcases/nnbd/shorting_stop.dart:22:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
 //   throwsInStrong(() => -c?.field); // error
 //                        ^
 //
-// pkg/front_end/testcases/nnbd/shorting_stop.dart:25:35: Warning: Operator '+' is called on 'int?' which is potentially null.
+// pkg/front_end/testcases/nnbd/shorting_stop.dart:25:35: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
 //   throwsInStrong(() => c?.next[0] + 2); // error
 //                                   ^
 //
-// pkg/front_end/testcases/nnbd/shorting_stop.dart:28:37: Warning: Property 'isEven' is accessed on 'int?' which is potentially null.
+// pkg/front_end/testcases/nnbd/shorting_stop.dart:28:37: Error: Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
 // Try accessing using ?. instead.
 //   throwsInStrong(() => (c?.next[0]).isEven); // error
 //                                     ^^^^^^
 //
-// pkg/front_end/testcases/nnbd/shorting_stop.dart:29:24: Warning: Operator 'unary-' is called on 'int?' which is potentially null.
+// pkg/front_end/testcases/nnbd/shorting_stop.dart:29:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
 //   throwsInStrong(() => -c?.next[0]); // error
 //                        ^
 //
-// pkg/front_end/testcases/nnbd/shorting_stop.dart:36:7: Warning: Property 'length' is accessed on 'String?' which is potentially null.
+// pkg/front_end/testcases/nnbd/shorting_stop.dart:36:7: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
 // Try accessing using ?. instead.
 //     s.length; // This will be an invalid expression in strong mode.
 //       ^^^^^^
@@ -54,21 +54,39 @@
 }
 static method test(self::Class? c) → dynamic {
   let final self::Class? #t1 = c in #t1.{core::Object::==}(null) ?{core::int?} null : #t1{self::Class}.{self::Class::next}.{self::Class::field};
-  self::throwsInStrong(() → core::int? => (let final self::Class? #t2 = c in #t2.{core::Object::==}(null) ?{core::int?} null : #t2{self::Class}.{self::Class::field}).{core::num::+}(2));
-  let final self::Class? #t3 = c in #t3.{core::Object::==}(null) ?{core::int?} null : let final core::int #t4 = #t3.{self::Class::field}.{core::num::+}(1) in let final void #t5 = #t3.{self::Class::field} = #t4 in #t4;
-  let final self::Class? #t6 = c in #t6.{core::Object::==}(null) ?{core::int?} null : #t6.{self::Class::field} = #t6.{self::Class::field}.{core::num::+}(1);
-  self::throwsInStrong(() → core::int => (let final self::Class? #t7 = c in #t7.{core::Object::==}(null) ?{self::Class?} null : #t7{self::Class}.{self::Class::next}).{self::Class::field});
-  self::throwsInStrong(() → core::int => (let final self::Class? #t8 = c in #t8.{core::Object::==}(null) ?{core::int?} null : #t8{self::Class}.{self::Class::field}).{core::int::unary-}());
-  let final self::Class? #t9 = c in #t9.{core::Object::==}(null) ?{core::bool?} null : #t9{self::Class}.{self::Class::next}.{self::Class::[]}(0).{core::int::isEven};
-  self::throwsInStrong(() → core::int? => (let final self::Class? #t10 = c in #t10.{core::Object::==}(null) ?{core::int?} null : #t10{self::Class}.{self::Class::next}.{self::Class::[]}(0)).{core::num::+}(2));
-  let final self::Class? #t11 = c in #t11.{core::Object::==}(null) ?{core::int?} null : let final self::Class #t12 = #t11{self::Class}.{self::Class::next} in let final core::int #t13 = 0 in let final core::int #t14 = #t12.{self::Class::[]}(#t13).{core::num::+}(1) in let final void #t15 = #t12.{self::Class::[]=}(#t13, #t14) in #t14;
-  let final self::Class? #t16 = c in #t16.{core::Object::==}(null) ?{core::int?} null : let final self::Class #t17 = #t16{self::Class}.{self::Class::next} in let final core::int #t18 = 0 in #t17.{self::Class::[]=}(#t18, #t17.{self::Class::[]}(#t18).{core::num::+}(1));
-  self::throwsInStrong(() → core::bool => (let final self::Class? #t19 = c in #t19.{core::Object::==}(null) ?{core::int?} null : #t19{self::Class}.{self::Class::next}.{self::Class::[]}(0)).{core::int::isEven});
-  self::throwsInStrong(() → core::int => (let final self::Class? #t20 = c in #t20.{core::Object::==}(null) ?{core::int?} null : #t20{self::Class}.{self::Class::next}.{self::Class::[]}(0)).{core::int::unary-}());
+  self::throwsInStrong(() → core::int? => let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:18:33: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+  throwsInStrong(() => c?.field + 2); // error
+                                ^" in (let final self::Class? #t3 = c in #t3.{core::Object::==}(null) ?{core::int?} null : #t3{self::Class}.{self::Class::field}).{core::num::+}(2));
+  let final self::Class? #t4 = c in #t4.{core::Object::==}(null) ?{core::int?} null : let final core::int #t5 = #t4.{self::Class::field}.{core::num::+}(1) in let final void #t6 = #t4.{self::Class::field} = #t5 in #t5;
+  let final self::Class? #t7 = c in #t7.{core::Object::==}(null) ?{core::int?} null : #t7.{self::Class::field} = #t7.{self::Class::field}.{core::num::+}(1);
+  self::throwsInStrong(() → core::int => let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:21:34: Error: Property 'field' cannot be accessed on 'Class?' because it is potentially null.
+ - 'Class' is from 'pkg/front_end/testcases/nnbd/shorting_stop.dart'.
+Try accessing using ?. instead.
+  throwsInStrong(() => (c?.next).field); // error
+                                 ^^^^^" in (let final self::Class? #t9 = c in #t9.{core::Object::==}(null) ?{self::Class?} null : #t9{self::Class}.{self::Class::next}).{self::Class::field});
+  self::throwsInStrong(() → core::int => let final<BottomType> #t10 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:22:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+  throwsInStrong(() => -c?.field); // error
+                       ^" in (let final self::Class? #t11 = c in #t11.{core::Object::==}(null) ?{core::int?} null : #t11{self::Class}.{self::Class::field}).{core::int::unary-}());
+  let final self::Class? #t12 = c in #t12.{core::Object::==}(null) ?{core::bool?} null : #t12{self::Class}.{self::Class::next}.{self::Class::[]}(0).{core::int::isEven};
+  self::throwsInStrong(() → core::int? => let final<BottomType> #t13 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:25:35: Error: Operator '+' cannot be called on 'int?' because it is potentially null.
+  throwsInStrong(() => c?.next[0] + 2); // error
+                                  ^" in (let final self::Class? #t14 = c in #t14.{core::Object::==}(null) ?{core::int?} null : #t14{self::Class}.{self::Class::next}.{self::Class::[]}(0)).{core::num::+}(2));
+  let final self::Class? #t15 = c in #t15.{core::Object::==}(null) ?{core::int?} null : let final self::Class #t16 = #t15{self::Class}.{self::Class::next} in let final core::int #t17 = 0 in let final core::int #t18 = #t16.{self::Class::[]}(#t17).{core::num::+}(1) in let final void #t19 = #t16.{self::Class::[]=}(#t17, #t18) in #t18;
+  let final self::Class? #t20 = c in #t20.{core::Object::==}(null) ?{core::int?} null : let final self::Class #t21 = #t20{self::Class}.{self::Class::next} in let final core::int #t22 = 0 in #t21.{self::Class::[]=}(#t22, #t21.{self::Class::[]}(#t22).{core::num::+}(1));
+  self::throwsInStrong(() → core::bool => let final<BottomType> #t23 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:28:37: Error: Property 'isEven' cannot be accessed on 'int?' because it is potentially null.
+Try accessing using ?. instead.
+  throwsInStrong(() => (c?.next[0]).isEven); // error
+                                    ^^^^^^" in (let final self::Class? #t24 = c in #t24.{core::Object::==}(null) ?{core::int?} null : #t24{self::Class}.{self::Class::next}.{self::Class::[]}(0)).{core::int::isEven});
+  self::throwsInStrong(() → core::int => let final<BottomType> #t25 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:29:24: Error: Operator 'unary-' cannot be called on 'int?' because it is potentially null.
+  throwsInStrong(() => -c?.next[0]); // error
+                       ^" in (let final self::Class? #t26 = c in #t26.{core::Object::==}(null) ?{core::int?} null : #t26{self::Class}.{self::Class::next}.{self::Class::[]}(0)).{core::int::unary-}());
 }
 static method _inStrongMode() → core::bool {
   (core::String?) → core::Null? f = (core::String? s) → core::Null? {
-    s.{core::String::length};
+    let final<BottomType> #t27 = invalid-expression "pkg/front_end/testcases/nnbd/shorting_stop.dart:36:7: Error: Property 'length' cannot be accessed on 'String?' because it is potentially null.
+Try accessing using ?. instead.
+    s.length; // This will be an invalid expression in strong mode.
+      ^^^^^^" in s.{core::String::length};
   };
   try {
     f.call("foo");
diff --git a/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.expect b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.expect
index 2317ae7..19bd0eb 100644
--- a/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.expect
+++ b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.expect
@@ -2,19 +2,19 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:14:24: Warning: Tearing off method 'call' from a potentially null value.
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:14:24: Error: Can't tear off method 'call' from a potentially null value.
 //   functionContext(null as C?); // Error.
 //                        ^
 //
-// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:15:32: Warning: Tearing off method 'call' from a potentially null value.
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:15:32: Error: Can't tear off method 'call' from a potentially null value.
 //   nullableFunctionContext(null as C?); // Error.
 //                                ^
 //
-// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:16:19: Warning: Tearing off method 'call' from a potentially null value.
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:16:19: Error: Can't tear off method 'call' from a potentially null value.
 //   functionContext(c); // Error.
 //                   ^
 //
-// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:17:27: Warning: Tearing off method 'call' from a potentially null value.
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:17:27: Error: Can't tear off method 'call' from a potentially null value.
 //   nullableFunctionContext(c); // Error.
 //                           ^
 //
@@ -55,30 +55,38 @@
 static method functionContext(() → core::int f) → dynamic {}
 static method nullableFunctionContext(() →? core::int f) → dynamic {}
 static method foo<T extends self::C? = self::C?>(self::C? c, self::foo::T% t, self::foo::T? nt) → dynamic {
-  self::functionContext((null as{ForNonNullableByDefault} self::C?) as{TypeError} () → core::int);
-  self::nullableFunctionContext((null as{ForNonNullableByDefault} self::C?) as{TypeError} () →? core::int);
-  self::functionContext(c as{TypeError} () → core::int);
-  self::nullableFunctionContext(c as{TypeError} () →? core::int);
-  self::functionContext(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:18:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
+  self::functionContext(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:14:24: Error: Can't tear off method 'call' from a potentially null value.
+  functionContext(null as C?); // Error.
+                       ^" in (null as{ForNonNullableByDefault} self::C?) as{TypeError} () → core::int);
+  self::nullableFunctionContext(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:15:32: Error: Can't tear off method 'call' from a potentially null value.
+  nullableFunctionContext(null as C?); // Error.
+                               ^" in (null as{ForNonNullableByDefault} self::C?) as{TypeError} () →? core::int);
+  self::functionContext(let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:16:19: Error: Can't tear off method 'call' from a potentially null value.
+  functionContext(c); // Error.
+                  ^" in c as{TypeError} () → core::int);
+  self::nullableFunctionContext(let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:17:27: Error: Can't tear off method 'call' from a potentially null value.
+  nullableFunctionContext(c); // Error.
+                          ^" in c as{TypeError} () →? core::int);
+  self::functionContext(let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:18:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
   functionContext(t); // Error.
                   ^" in t as{TypeError,ForNonNullableByDefault} () → core::int);
-  self::nullableFunctionContext(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:19:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
+  self::nullableFunctionContext(let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:19:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
   nullableFunctionContext(t); // Error.
                           ^" in t as{TypeError,ForNonNullableByDefault} () →? core::int);
-  self::functionContext(let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:20:19: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()'.
+  self::functionContext(let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:20:19: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()'.
   functionContext(nt); // Error.
                   ^" in nt as{TypeError,ForNonNullableByDefault} () → core::int);
-  self::nullableFunctionContext(let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:21:27: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()?'.
+  self::nullableFunctionContext(let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:21:27: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()?'.
   nullableFunctionContext(nt); // Error.
                           ^" in nt as{TypeError,ForNonNullableByDefault} () →? core::int);
 }
 static method bar<T extends self::C = self::C>(self::C c, self::bar::T t) → dynamic {
-  self::functionContext(let final self::C #t5 = c in #t5.==(null) ?{() → core::int} null : #t5.{self::C::call});
-  self::nullableFunctionContext(let final self::C #t6 = c in #t6.==(null) ?{() → core::int} null : #t6.{self::C::call});
-  self::functionContext(let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:27:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
+  self::functionContext(let final self::C #t9 = c in #t9.==(null) ?{() → core::int} null : #t9.{self::C::call});
+  self::nullableFunctionContext(let final self::C #t10 = c in #t10.==(null) ?{() → core::int} null : #t10.{self::C::call});
+  self::functionContext(let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:27:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
   functionContext(t); // Shouldn't result in a compile-time error.
                   ^" in t as{TypeError,ForNonNullableByDefault} () → core::int);
-  self::nullableFunctionContext(let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:28:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
+  self::nullableFunctionContext(let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:28:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
   nullableFunctionContext(t); // Shouldn't result in a compile-time error.
                           ^" in t as{TypeError,ForNonNullableByDefault} () →? core::int);
 }
diff --git a/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.transformed.expect b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.transformed.expect
index 2317ae7..19bd0eb 100644
--- a/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.transformed.expect
+++ b/pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart.weak.transformed.expect
@@ -2,19 +2,19 @@
 //
 // Problems in library:
 //
-// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:14:24: Warning: Tearing off method 'call' from a potentially null value.
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:14:24: Error: Can't tear off method 'call' from a potentially null value.
 //   functionContext(null as C?); // Error.
 //                        ^
 //
-// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:15:32: Warning: Tearing off method 'call' from a potentially null value.
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:15:32: Error: Can't tear off method 'call' from a potentially null value.
 //   nullableFunctionContext(null as C?); // Error.
 //                                ^
 //
-// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:16:19: Warning: Tearing off method 'call' from a potentially null value.
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:16:19: Error: Can't tear off method 'call' from a potentially null value.
 //   functionContext(c); // Error.
 //                   ^
 //
-// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:17:27: Warning: Tearing off method 'call' from a potentially null value.
+// pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:17:27: Error: Can't tear off method 'call' from a potentially null value.
 //   nullableFunctionContext(c); // Error.
 //                           ^
 //
@@ -55,30 +55,38 @@
 static method functionContext(() → core::int f) → dynamic {}
 static method nullableFunctionContext(() →? core::int f) → dynamic {}
 static method foo<T extends self::C? = self::C?>(self::C? c, self::foo::T% t, self::foo::T? nt) → dynamic {
-  self::functionContext((null as{ForNonNullableByDefault} self::C?) as{TypeError} () → core::int);
-  self::nullableFunctionContext((null as{ForNonNullableByDefault} self::C?) as{TypeError} () →? core::int);
-  self::functionContext(c as{TypeError} () → core::int);
-  self::nullableFunctionContext(c as{TypeError} () →? core::int);
-  self::functionContext(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:18:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
+  self::functionContext(let final<BottomType> #t1 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:14:24: Error: Can't tear off method 'call' from a potentially null value.
+  functionContext(null as C?); // Error.
+                       ^" in (null as{ForNonNullableByDefault} self::C?) as{TypeError} () → core::int);
+  self::nullableFunctionContext(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:15:32: Error: Can't tear off method 'call' from a potentially null value.
+  nullableFunctionContext(null as C?); // Error.
+                               ^" in (null as{ForNonNullableByDefault} self::C?) as{TypeError} () →? core::int);
+  self::functionContext(let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:16:19: Error: Can't tear off method 'call' from a potentially null value.
+  functionContext(c); // Error.
+                  ^" in c as{TypeError} () → core::int);
+  self::nullableFunctionContext(let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:17:27: Error: Can't tear off method 'call' from a potentially null value.
+  nullableFunctionContext(c); // Error.
+                          ^" in c as{TypeError} () →? core::int);
+  self::functionContext(let final<BottomType> #t5 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:18:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
   functionContext(t); // Error.
                   ^" in t as{TypeError,ForNonNullableByDefault} () → core::int);
-  self::nullableFunctionContext(let final<BottomType> #t2 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:19:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
+  self::nullableFunctionContext(let final<BottomType> #t6 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:19:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
   nullableFunctionContext(t); // Error.
                           ^" in t as{TypeError,ForNonNullableByDefault} () →? core::int);
-  self::functionContext(let final<BottomType> #t3 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:20:19: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()'.
+  self::functionContext(let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:20:19: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()'.
   functionContext(nt); // Error.
                   ^" in nt as{TypeError,ForNonNullableByDefault} () → core::int);
-  self::nullableFunctionContext(let final<BottomType> #t4 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:21:27: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()?'.
+  self::nullableFunctionContext(let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:21:27: Error: The argument type 'T?' can't be assigned to the parameter type 'int Function()?'.
   nullableFunctionContext(nt); // Error.
                           ^" in nt as{TypeError,ForNonNullableByDefault} () →? core::int);
 }
 static method bar<T extends self::C = self::C>(self::C c, self::bar::T t) → dynamic {
-  self::functionContext(let final self::C #t5 = c in #t5.==(null) ?{() → core::int} null : #t5.{self::C::call});
-  self::nullableFunctionContext(let final self::C #t6 = c in #t6.==(null) ?{() → core::int} null : #t6.{self::C::call});
-  self::functionContext(let final<BottomType> #t7 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:27:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
+  self::functionContext(let final self::C #t9 = c in #t9.==(null) ?{() → core::int} null : #t9.{self::C::call});
+  self::nullableFunctionContext(let final self::C #t10 = c in #t10.==(null) ?{() → core::int} null : #t10.{self::C::call});
+  self::functionContext(let final<BottomType> #t11 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:27:19: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()'.
   functionContext(t); // Shouldn't result in a compile-time error.
                   ^" in t as{TypeError,ForNonNullableByDefault} () → core::int);
-  self::nullableFunctionContext(let final<BottomType> #t8 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:28:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
+  self::nullableFunctionContext(let final<BottomType> #t12 = invalid-expression "pkg/front_end/testcases/nnbd/tearoff_from_nullable_receiver.dart:28:27: Error: The argument type 'T' can't be assigned to the parameter type 'int Function()?'.
   nullableFunctionContext(t); // Shouldn't result in a compile-time error.
                           ^" in t as{TypeError,ForNonNullableByDefault} () →? core::int);
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000032.dart.strong.expect b/pkg/front_end/testcases/rasta/issue_000032.dart.strong.expect
index f449dd1..8b101b6 100644
--- a/pkg/front_end/testcases/rasta/issue_000032.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/issue_000032.dart.strong.expect
@@ -28,9 +28,9 @@
 // }
 // ^
 //
-// pkg/front_end/testcases/rasta/issue_000032.dart:10:4: Error: The method '<' isn't defined for the class 'Type'.
+// pkg/front_end/testcases/rasta/issue_000032.dart:10:4: Error: The operator '<' isn't defined for the class 'Type'.
 //  - 'Type' is from 'dart:core'.
-// Try correcting the name to the name of an existing method, or defining a method named '<'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
 //   C<
 //    ^
 //
@@ -42,9 +42,9 @@
     : super core::Object::•() {}
 }
 static method main() → dynamic {
-  invalid-expression "pkg/front_end/testcases/rasta/issue_000032.dart:10:4: Error: The method '<' isn't defined for the class 'Type'.
+  invalid-expression "pkg/front_end/testcases/rasta/issue_000032.dart:10:4: Error: The operator '<' isn't defined for the class 'Type'.
  - 'Type' is from 'dart:core'.
-Try correcting the name to the name of an existing method, or defining a method named '<'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
   C<
    ^";
 }
diff --git a/pkg/front_end/testcases/rasta/issue_000032.dart.strong.transformed.expect b/pkg/front_end/testcases/rasta/issue_000032.dart.strong.transformed.expect
index f449dd1..8b101b6 100644
--- a/pkg/front_end/testcases/rasta/issue_000032.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/rasta/issue_000032.dart.strong.transformed.expect
@@ -28,9 +28,9 @@
 // }
 // ^
 //
-// pkg/front_end/testcases/rasta/issue_000032.dart:10:4: Error: The method '<' isn't defined for the class 'Type'.
+// pkg/front_end/testcases/rasta/issue_000032.dart:10:4: Error: The operator '<' isn't defined for the class 'Type'.
 //  - 'Type' is from 'dart:core'.
-// Try correcting the name to the name of an existing method, or defining a method named '<'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
 //   C<
 //    ^
 //
@@ -42,9 +42,9 @@
     : super core::Object::•() {}
 }
 static method main() → dynamic {
-  invalid-expression "pkg/front_end/testcases/rasta/issue_000032.dart:10:4: Error: The method '<' isn't defined for the class 'Type'.
+  invalid-expression "pkg/front_end/testcases/rasta/issue_000032.dart:10:4: Error: The operator '<' isn't defined for the class 'Type'.
  - 'Type' is from 'dart:core'.
-Try correcting the name to the name of an existing method, or defining a method named '<'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
   C<
    ^";
 }
diff --git a/pkg/front_end/testcases/rasta/super.dart.strong.expect b/pkg/front_end/testcases/rasta/super.dart.strong.expect
index 4ed69fe..5907733 100644
--- a/pkg/front_end/testcases/rasta/super.dart.strong.expect
+++ b/pkg/front_end/testcases/rasta/super.dart.strong.expect
@@ -229,43 +229,43 @@
 //     use(super.m -= 42);
 //               ^
 //
-// pkg/front_end/testcases/rasta/super.dart:95:12: Error: The method '+' isn't defined for the class 'void Function()'.
-// Try correcting the name to the name of an existing method, or defining a method named '+'.
+// pkg/front_end/testcases/rasta/super.dart:95:12: Error: The operator '+' isn't defined for the class 'void Function()'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
 //     super.m++;
 //            ^
 //
-// pkg/front_end/testcases/rasta/super.dart:96:16: Error: The method '+' isn't defined for the class 'void Function()'.
-// Try correcting the name to the name of an existing method, or defining a method named '+'.
+// pkg/front_end/testcases/rasta/super.dart:96:16: Error: The operator '+' isn't defined for the class 'void Function()'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
 //     use(super.m++);
 //                ^
 //
-// pkg/front_end/testcases/rasta/super.dart:97:12: Error: The method '+' isn't defined for the class 'void Function()'.
-// Try correcting the name to the name of an existing method, or defining a method named '+'.
+// pkg/front_end/testcases/rasta/super.dart:97:12: Error: The operator '+' isn't defined for the class 'void Function()'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
 //     super.n++;
 //            ^
 //
-// pkg/front_end/testcases/rasta/super.dart:98:16: Error: The method '+' isn't defined for the class 'void Function()'.
-// Try correcting the name to the name of an existing method, or defining a method named '+'.
+// pkg/front_end/testcases/rasta/super.dart:98:16: Error: The operator '+' isn't defined for the class 'void Function()'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
 //     use(super.n++);
 //                ^
 //
-// pkg/front_end/testcases/rasta/super.dart:120:5: Error: The method '+' isn't defined for the class 'void Function()'.
-// Try correcting the name to the name of an existing method, or defining a method named '+'.
+// pkg/front_end/testcases/rasta/super.dart:120:5: Error: The operator '+' isn't defined for the class 'void Function()'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
 //     ++super.m;
 //     ^
 //
-// pkg/front_end/testcases/rasta/super.dart:121:9: Error: The method '+' isn't defined for the class 'void Function()'.
-// Try correcting the name to the name of an existing method, or defining a method named '+'.
+// pkg/front_end/testcases/rasta/super.dart:121:9: Error: The operator '+' isn't defined for the class 'void Function()'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
 //     use(++super.m);
 //         ^
 //
-// pkg/front_end/testcases/rasta/super.dart:122:5: Error: The method '+' isn't defined for the class 'void Function()'.
-// Try correcting the name to the name of an existing method, or defining a method named '+'.
+// pkg/front_end/testcases/rasta/super.dart:122:5: Error: The operator '+' isn't defined for the class 'void Function()'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
 //     ++super.n;
 //     ^
 //
-// pkg/front_end/testcases/rasta/super.dart:123:9: Error: The method '+' isn't defined for the class 'void Function()'.
-// Try correcting the name to the name of an existing method, or defining a method named '+'.
+// pkg/front_end/testcases/rasta/super.dart:123:9: Error: The operator '+' isn't defined for the class 'void Function()'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
 //     use(++super.n);
 //         ^
 //
@@ -293,43 +293,43 @@
 //     use(super.n(87));
 //                ^
 //
-// pkg/front_end/testcases/rasta/super.dart:222:13: Error: The method '+' isn't defined for the class 'void Function()'.
-// Try correcting the name to the name of an existing method, or defining a method named '+'.
+// pkg/front_end/testcases/rasta/super.dart:222:13: Error: The operator '+' isn't defined for the class 'void Function()'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
 //     super.m += 42;
 //             ^
 //
-// pkg/front_end/testcases/rasta/super.dart:223:17: Error: The method '+' isn't defined for the class 'void Function()'.
-// Try correcting the name to the name of an existing method, or defining a method named '+'.
+// pkg/front_end/testcases/rasta/super.dart:223:17: Error: The operator '+' isn't defined for the class 'void Function()'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
 //     use(super.m += 42);
 //                 ^
 //
-// pkg/front_end/testcases/rasta/super.dart:224:13: Error: The method '+' isn't defined for the class 'void Function()'.
-// Try correcting the name to the name of an existing method, or defining a method named '+'.
+// pkg/front_end/testcases/rasta/super.dart:224:13: Error: The operator '+' isn't defined for the class 'void Function()'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
 //     super.n += 42;
 //             ^
 //
-// pkg/front_end/testcases/rasta/super.dart:225:17: Error: The method '+' isn't defined for the class 'void Function()'.
-// Try correcting the name to the name of an existing method, or defining a method named '+'.
+// pkg/front_end/testcases/rasta/super.dart:225:17: Error: The operator '+' isn't defined for the class 'void Function()'.
+// Try correcting the operator to an existing operator, or defining a '+' operator.
 //     use(super.n += 42);
 //                 ^
 //
-// pkg/front_end/testcases/rasta/super.dart:247:13: Error: The method '-' isn't defined for the class 'void Function()'.
-// Try correcting the name to the name of an existing method, or defining a method named '-'.
+// pkg/front_end/testcases/rasta/super.dart:247:13: Error: The operator '-' isn't defined for the class 'void Function()'.
+// Try correcting the operator to an existing operator, or defining a '-' operator.
 //     super.m -= 42;
 //             ^
 //
-// pkg/front_end/testcases/rasta/super.dart:248:17: Error: The method '-' isn't defined for the class 'void Function()'.
-// Try correcting the name to the name of an existing method, or defining a method named '-'.
+// pkg/front_end/testcases/rasta/super.dart:248:17: Error: The operator '-' isn't defined for the class 'void Function()'.
+// Try correcting the operator to an existing operator, or defining a '-' operator.
 //     use(super.m -= 42);
 //                 ^
 //
-// pkg/front_end/testcases/rasta/super.dart:249:13: Error: The method '-' isn't defined for the class 'void Function()'.
-// Try correcting the name to the name of an existing method, or defining a method named '-'.
+// pkg/front_end/testcases/rasta/super.dart:249:13: Error: The operator '-' isn't defined for the class 'void Function()'.
+// Try correcting the operator to an existing operator, or defining a '-' operator.
 //     super.n -= 42;
 //             ^
 //
-// pkg/front_end/testcases/rasta/super.dart:250:17: Error: The method '-' isn't defined for the class 'void Function()'.
-// Try correcting the name to the name of an existing method, or defining a method named '-'.
+// pkg/front_end/testcases/rasta/super.dart:250:17: Error: The operator '-' isn't defined for the class 'void Function()'.
+// Try correcting the operator to an existing operator, or defining a '-' operator.
 //     use(super.n -= 42);
 //                 ^
 //
@@ -455,20 +455,20 @@
     self::use(let final dynamic #t17 = super.{self::A::i} in let final dynamic #t18 = super.{self::B::i} = #t17.+(1) in #t17);
     let final core::int* #t19 = 87 in super.{self::A::[]=}(#t19, super.{self::A::[]}(#t19).+(1));
     self::use(let final core::int* #t20 = 87 in let final dynamic #t21 = super.{self::A::[]}(#t20) in let final void #t22 = super.{self::A::[]=}(#t20, #t21.+(1)) in #t21);
-    super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:95:12: Error: The method '+' isn't defined for the class 'void Function()'.
-Try correcting the name to the name of an existing method, or defining a method named '+'.
+    super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:95:12: Error: The operator '+' isn't defined for the class 'void Function()'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
     super.m++;
            ^";
-    self::use(let final () →* void #t23 = super.{self::A::m} in let final dynamic #t24 = super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:96:16: Error: The method '+' isn't defined for the class 'void Function()'.
-Try correcting the name to the name of an existing method, or defining a method named '+'.
+    self::use(let final () →* void #t23 = super.{self::A::m} in let final dynamic #t24 = super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:96:16: Error: The operator '+' isn't defined for the class 'void Function()'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
     use(super.m++);
                ^" in #t23);
-    super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:97:12: Error: The method '+' isn't defined for the class 'void Function()'.
-Try correcting the name to the name of an existing method, or defining a method named '+'.
+    super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:97:12: Error: The operator '+' isn't defined for the class 'void Function()'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
     super.n++;
            ^";
-    self::use(let final () →* void #t25 = super.{self::A::n} in let final dynamic #t26 = super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:98:16: Error: The method '+' isn't defined for the class 'void Function()'.
-Try correcting the name to the name of an existing method, or defining a method named '+'.
+    self::use(let final () →* void #t25 = super.{self::A::n} in let final dynamic #t26 = super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:98:16: Error: The operator '+' isn't defined for the class 'void Function()'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
     use(super.n++);
                ^" in #t25);
     super.{self::A::a} = super.{self::A::a}.+(1);
@@ -491,20 +491,20 @@
     self::use(super.{self::B::i} = super.{self::A::i}.+(1));
     let final core::int* #t27 = 87 in let final dynamic #t28 = super.{self::A::[]}(#t27).+(1) in let final void #t29 = super.{self::A::[]=}(#t27, #t28) in #t28;
     self::use(let final core::int* #t30 = 87 in let final dynamic #t31 = super.{self::A::[]}(#t30).+(1) in let final void #t32 = super.{self::A::[]=}(#t30, #t31) in #t31);
-    super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:120:5: Error: The method '+' isn't defined for the class 'void Function()'.
-Try correcting the name to the name of an existing method, or defining a method named '+'.
+    super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:120:5: Error: The operator '+' isn't defined for the class 'void Function()'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
     ++super.m;
     ^";
-    self::use(super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:121:9: Error: The method '+' isn't defined for the class 'void Function()'.
-Try correcting the name to the name of an existing method, or defining a method named '+'.
+    self::use(super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:121:9: Error: The operator '+' isn't defined for the class 'void Function()'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
     use(++super.m);
         ^");
-    super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:122:5: Error: The method '+' isn't defined for the class 'void Function()'.
-Try correcting the name to the name of an existing method, or defining a method named '+'.
+    super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:122:5: Error: The operator '+' isn't defined for the class 'void Function()'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
     ++super.n;
     ^";
-    self::use(super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:123:9: Error: The method '+' isn't defined for the class 'void Function()'.
-Try correcting the name to the name of an existing method, or defining a method named '+'.
+    self::use(super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:123:9: Error: The operator '+' isn't defined for the class 'void Function()'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
     use(++super.n);
         ^");
     super.{self::A::a}.call();
@@ -615,20 +615,20 @@
     self::use(super.{self::B::i} = super.{self::A::i}.+(42));
     let final core::int* #t57 = 87 in super.{self::A::[]=}(#t57, super.{self::A::[]}(#t57).+(42));
     self::use(let final core::int* #t58 = 87 in let final dynamic #t59 = super.{self::A::[]}(#t58).+(42) in let final void #t60 = super.{self::A::[]=}(#t58, #t59) in #t59);
-    super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:222:13: Error: The method '+' isn't defined for the class 'void Function()'.
-Try correcting the name to the name of an existing method, or defining a method named '+'.
+    super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:222:13: Error: The operator '+' isn't defined for the class 'void Function()'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
     super.m += 42;
             ^";
-    self::use(super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:223:17: Error: The method '+' isn't defined for the class 'void Function()'.
-Try correcting the name to the name of an existing method, or defining a method named '+'.
+    self::use(super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:223:17: Error: The operator '+' isn't defined for the class 'void Function()'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
     use(super.m += 42);
                 ^");
-    super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:224:13: Error: The method '+' isn't defined for the class 'void Function()'.
-Try correcting the name to the name of an existing method, or defining a method named '+'.
+    super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:224:13: Error: The operator '+' isn't defined for the class 'void Function()'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
     super.n += 42;
             ^";
-    self::use(super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:225:17: Error: The method '+' isn't defined for the class 'void Function()'.
-Try correcting the name to the name of an existing method, or defining a method named '+'.
+    self::use(super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:225:17: Error: The operator '+' isn't defined for the class 'void Function()'.
+Try correcting the operator to an existing operator, or defining a '+' operator.
     use(super.n += 42);
                 ^");
     super.{self::A::a} = super.{self::A::a}.-(42);
@@ -651,20 +651,20 @@
     self::use(super.{self::B::i} = super.{self::A::i}.-(42));
     let final core::int* #t61 = 87 in super.{self::A::[]=}(#t61, super.{self::A::[]}(#t61).-(42));
     self::use(let final core::int* #t62 = 87 in let final dynamic #t63 = super.{self::A::[]}(#t62).-(42) in let final void #t64 = super.{self::A::[]=}(#t62, #t63) in #t63);
-    super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:247:13: Error: The method '-' isn't defined for the class 'void Function()'.
-Try correcting the name to the name of an existing method, or defining a method named '-'.
+    super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:247:13: Error: The operator '-' isn't defined for the class 'void Function()'.
+Try correcting the operator to an existing operator, or defining a '-' operator.
     super.m -= 42;
             ^";
-    self::use(super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:248:17: Error: The method '-' isn't defined for the class 'void Function()'.
-Try correcting the name to the name of an existing method, or defining a method named '-'.
+    self::use(super.m = invalid-expression "pkg/front_end/testcases/rasta/super.dart:248:17: Error: The operator '-' isn't defined for the class 'void Function()'.
+Try correcting the operator to an existing operator, or defining a '-' operator.
     use(super.m -= 42);
                 ^");
-    super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:249:13: Error: The method '-' isn't defined for the class 'void Function()'.
-Try correcting the name to the name of an existing method, or defining a method named '-'.
+    super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:249:13: Error: The operator '-' isn't defined for the class 'void Function()'.
+Try correcting the operator to an existing operator, or defining a '-' operator.
     super.n -= 42;
             ^";
-    self::use(super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:250:17: Error: The method '-' isn't defined for the class 'void Function()'.
-Try correcting the name to the name of an existing method, or defining a method named '-'.
+    self::use(super.{self::A::n} = invalid-expression "pkg/front_end/testcases/rasta/super.dart:250:17: Error: The operator '-' isn't defined for the class 'void Function()'.
+Try correcting the operator to an existing operator, or defining a '-' operator.
     use(super.n -= 42);
                 ^");
   }
diff --git a/pkg/front_end/testcases/regress/issue_31155.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31155.dart.strong.expect
index abdf3cd..96da1b8 100644
--- a/pkg/front_end/testcases/regress/issue_31155.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31155.dart.strong.expect
@@ -24,9 +24,9 @@
 //   var f = Map<A, B> {};
 //                       ^
 //
-// pkg/front_end/testcases/regress/issue_31155.dart:11:14: Error: The method '<' isn't defined for the class 'Type'.
+// pkg/front_end/testcases/regress/issue_31155.dart:11:14: Error: The operator '<' isn't defined for the class 'Type'.
 //  - 'Type' is from 'dart:core'.
-// Try correcting the name to the name of an existing method, or defining a method named '<'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
 //   var f = Map<A, B> {};
 //              ^
 //
@@ -44,9 +44,9 @@
     ;
 }
 class C extends core::Object {
-  field dynamic f = invalid-expression "pkg/front_end/testcases/regress/issue_31155.dart:11:14: Error: The method '<' isn't defined for the class 'Type'.
+  field dynamic f = invalid-expression "pkg/front_end/testcases/regress/issue_31155.dart:11:14: Error: The operator '<' isn't defined for the class 'Type'.
  - 'Type' is from 'dart:core'.
-Try correcting the name to the name of an existing method, or defining a method named '<'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
   var f = Map<A, B> {};
              ^";
   field dynamic B = null;
diff --git a/pkg/front_end/testcases/regress/issue_31155.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_31155.dart.strong.transformed.expect
index abdf3cd..96da1b8 100644
--- a/pkg/front_end/testcases/regress/issue_31155.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31155.dart.strong.transformed.expect
@@ -24,9 +24,9 @@
 //   var f = Map<A, B> {};
 //                       ^
 //
-// pkg/front_end/testcases/regress/issue_31155.dart:11:14: Error: The method '<' isn't defined for the class 'Type'.
+// pkg/front_end/testcases/regress/issue_31155.dart:11:14: Error: The operator '<' isn't defined for the class 'Type'.
 //  - 'Type' is from 'dart:core'.
-// Try correcting the name to the name of an existing method, or defining a method named '<'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
 //   var f = Map<A, B> {};
 //              ^
 //
@@ -44,9 +44,9 @@
     ;
 }
 class C extends core::Object {
-  field dynamic f = invalid-expression "pkg/front_end/testcases/regress/issue_31155.dart:11:14: Error: The method '<' isn't defined for the class 'Type'.
+  field dynamic f = invalid-expression "pkg/front_end/testcases/regress/issue_31155.dart:11:14: Error: The operator '<' isn't defined for the class 'Type'.
  - 'Type' is from 'dart:core'.
-Try correcting the name to the name of an existing method, or defining a method named '<'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
   var f = Map<A, B> {};
              ^";
   field dynamic B = null;
diff --git a/pkg/front_end/testcases/regress/issue_31188.dart.strong.expect b/pkg/front_end/testcases/regress/issue_31188.dart.strong.expect
index 5874008..8a0e754 100644
--- a/pkg/front_end/testcases/regress/issue_31188.dart.strong.expect
+++ b/pkg/front_end/testcases/regress/issue_31188.dart.strong.expect
@@ -22,17 +22,17 @@
 // type T = Map<A, B>
 //              ^
 //
-// pkg/front_end/testcases/regress/issue_31188.dart:7:13: Error: The method '<' isn't defined for the class 'Type'.
+// pkg/front_end/testcases/regress/issue_31188.dart:7:13: Error: The operator '<' isn't defined for the class 'Type'.
 //  - 'Type' is from 'dart:core'.
-// Try correcting the name to the name of an existing method, or defining a method named '<'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
 // type T = Map<A, B>
 //             ^
 //
 import self as self;
 
-static field invalid-type T = invalid-expression "pkg/front_end/testcases/regress/issue_31188.dart:7:13: Error: The method '<' isn't defined for the class 'Type'.
+static field invalid-type T = invalid-expression "pkg/front_end/testcases/regress/issue_31188.dart:7:13: Error: The operator '<' isn't defined for the class 'Type'.
  - 'Type' is from 'dart:core'.
-Try correcting the name to the name of an existing method, or defining a method named '<'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
 type T = Map<A, B>
             ^" as{TypeError,ForDynamic} invalid-type;
 static field invalid-type B;
diff --git a/pkg/front_end/testcases/regress/issue_31188.dart.strong.transformed.expect b/pkg/front_end/testcases/regress/issue_31188.dart.strong.transformed.expect
index 5874008..8a0e754 100644
--- a/pkg/front_end/testcases/regress/issue_31188.dart.strong.transformed.expect
+++ b/pkg/front_end/testcases/regress/issue_31188.dart.strong.transformed.expect
@@ -22,17 +22,17 @@
 // type T = Map<A, B>
 //              ^
 //
-// pkg/front_end/testcases/regress/issue_31188.dart:7:13: Error: The method '<' isn't defined for the class 'Type'.
+// pkg/front_end/testcases/regress/issue_31188.dart:7:13: Error: The operator '<' isn't defined for the class 'Type'.
 //  - 'Type' is from 'dart:core'.
-// Try correcting the name to the name of an existing method, or defining a method named '<'.
+// Try correcting the operator to an existing operator, or defining a '<' operator.
 // type T = Map<A, B>
 //             ^
 //
 import self as self;
 
-static field invalid-type T = invalid-expression "pkg/front_end/testcases/regress/issue_31188.dart:7:13: Error: The method '<' isn't defined for the class 'Type'.
+static field invalid-type T = invalid-expression "pkg/front_end/testcases/regress/issue_31188.dart:7:13: Error: The operator '<' isn't defined for the class 'Type'.
  - 'Type' is from 'dart:core'.
-Try correcting the name to the name of an existing method, or defining a method named '<'.
+Try correcting the operator to an existing operator, or defining a '<' operator.
 type T = Map<A, B>
             ^" as{TypeError,ForDynamic} invalid-type;
 static field invalid-type B;
diff --git a/pkg/front_end/testcases/strong.status b/pkg/front_end/testcases/strong.status
index a15ef79..2ef9e79 100644
--- a/pkg/front_end/testcases/strong.status
+++ b/pkg/front_end/testcases/strong.status
@@ -38,7 +38,6 @@
 general/external_import: RuntimeError # The native extension to import doesn't exist. This is ok.
 general/incomplete_field_formal_parameter: RuntimeError
 general/infer_field_from_multiple: TypeCheckError
-general/invalid_type: TypeCheckError
 general/invalid_operator: TypeCheckError
 general/invocations: RuntimeError
 general/issue37776: RuntimeError
@@ -92,7 +91,6 @@
 general_nnbd_opt_out/expressions: RuntimeError
 general_nnbd_opt_out/external_import: RuntimeError # The native extension to import doesn't exist. This is ok.
 general_nnbd_opt_out/incomplete_field_formal_parameter: RuntimeError
-general_nnbd_opt_out/invalid_type: TypeCheckError
 general_nnbd_opt_out/invocations: RuntimeError
 general_nnbd_opt_out/issue37776: RuntimeError
 general_nnbd_opt_out/issue38938: RuntimeError # no main and compile time errors.
@@ -150,7 +148,6 @@
 inference/override_equals: RuntimeError
 inference/unsafe_block_closure_inference_function_call_explicit_dynamic_param_via_expr1: InstrumentationMismatch # Issue #25824
 inference/unsafe_block_closure_inference_function_call_explicit_type_param_via_expr1: InstrumentationMismatch # Issue #25824
-inference_new/dependency_only_if_overloaded: TypeCheckError
 inference_new/infer_assign_to_index_super_upwards: TypeCheckError
 inference_new/infer_assign_to_index_this_upwards: TypeCheckError
 inference_new/infer_assign_to_index_upwards: TypeCheckError
diff --git a/pkg/front_end/testcases/text_serialization.status b/pkg/front_end/testcases/text_serialization.status
index 20fccba..1a235ee 100644
--- a/pkg/front_end/testcases/text_serialization.status
+++ b/pkg/front_end/testcases/text_serialization.status
@@ -11,6 +11,7 @@
 agnostic/set: TextSerializationFailure
 expression/eval: TextSerializationFailure # Was: Pass
 expression/main: TextSerializationFailure # Was: Pass
+extensions/ambiguous: TextSerializationFailure
 extensions/annotations: TextSerializationFailure
 extensions/builtin_identifiers: TextSerializationFailure
 extensions/call_methods: TypeCheckError
@@ -57,6 +58,7 @@
 extensions/issue38750: TextSerializationFailure
 extensions/issue38755: TextSerializationFailure
 extensions/issue38915: TextSerializationFailure
+extensions/issue39527: TextSerializationFailure
 extensions/issue39889: TextSerializationFailure
 extensions/issue39938/issue39938: TextSerializationFailure
 extensions/issue40596: TextSerializationFailure
@@ -217,6 +219,7 @@
 general/infer_field_type: TextSerializationFailure
 general/infer_fixed_generic_return_type: TextSerializationFailure
 general/infer_map_literal_with_closure: TextSerializationFailure
+general/inherit_function: TextSerializationFailure
 general/interface_conflict: TextSerializationFailure
 general/interface_contravariant_from_class: TextSerializationFailure
 general/interface_covariantImpl_from_class: TextSerializationFailure
@@ -225,7 +228,7 @@
 general/invalid_cast: TextSerializationFailure # Was: Pass
 general/invalid_operator2: TextSerializationFailure
 general/invalid_operator: TypeCheckError
-general/invalid_type: TypeCheckError
+general/invalid_type: TextSerializationFailure
 general/invocations: TextSerializationFailure # Was: RuntimeError
 general/issue129167943: TextSerializationFailure
 general/issue34515: TextSerializationFailure
@@ -512,7 +515,7 @@
 general_nnbd_opt_out/interface_covariantInterface_from_class: TextSerializationFailure
 general_nnbd_opt_out/invalid_assignment: TextSerializationFailure # Was: Pass
 general_nnbd_opt_out/invalid_cast: TextSerializationFailure # Was: Pass
-general_nnbd_opt_out/invalid_type: TypeCheckError
+general_nnbd_opt_out/invalid_type: TextSerializationFailure
 general_nnbd_opt_out/invocations: TextSerializationFailure # Was: RuntimeError
 general_nnbd_opt_out/issue129167943: TextSerializationFailure
 general_nnbd_opt_out/issue34515: TextSerializationFailure
@@ -1211,8 +1214,12 @@
 instantiate_to_bound/typedef_omitted_bound: TextSerializationFailure # Was: Pass
 instantiate_to_bound/typedef_raw_in_bound: TextSerializationFailure # Was: Pass
 instantiate_to_bound/typedef_super_bounded_type: TextSerializationFailure # Was: Pass
+late_lowering/compound: TextSerializationFailure
+late_lowering/definitely_assigned: TextSerializationFailure
+late_lowering/definitely_unassigned: TextSerializationFailure
 late_lowering/initializer_rewrite: TextSerializationFailure
 late_lowering/infer_late_field_type: TextSerializationFailure
+late_lowering/infer_from_late_variable: TextSerializationFailure
 late_lowering/injected_late_field_checks/main: TextSerializationFailure
 late_lowering/instance_field_with_initializer: TextSerializationFailure
 late_lowering/instance_field_without_initializer: TextSerializationFailure
@@ -1223,6 +1230,7 @@
 late_lowering/issue40093: TextSerializationFailure
 late_lowering/issue40373: TextSerializationFailure
 late_lowering/issue40373b: TextSerializationFailure
+late_lowering/issue40601: TextSerializationFailure
 late_lowering/issue40805: TextSerializationFailure
 late_lowering/late_field_inference: TextSerializationFailure
 late_lowering/late_field_with_initializer: TextSerializationFailure
@@ -1255,6 +1263,8 @@
 nnbd/constants: TextSerializationFailure
 nnbd/covariant_nnbd_top_merge: TextSerializationFailure
 nnbd/definite_assignment_and_completion: TextSerializationFailure
+nnbd/definitely_assigned: TextSerializationFailure
+nnbd/definitely_unassigned: TextSerializationFailure
 nnbd/definitely_unassigned_late_local_variables: TextSerializationFailure
 nnbd/demote_closure_types: TextSerializationFailure
 nnbd/export_from_opt_out: TextSerializationFailure
@@ -1265,6 +1275,7 @@
 nnbd/future_or_variables: TextSerializationFailure
 nnbd/generic_override: TextSerializationFailure
 nnbd/infer_constraints_from_opt_in: TextSerializationFailure
+nnbd/infer_from_late_variable: TextSerializationFailure
 nnbd/infer_from_opt_in: TextSerializationFailure
 nnbd/infer_from_opt_out: TextSerializationFailure
 nnbd/infer_if_null: TextSerializationFailure
@@ -1280,7 +1291,10 @@
 nnbd/issue40134: TextSerializationFailure
 nnbd/issue40512/issue40512: TextSerializationFailure
 nnbd/issue40600: TextSerializationFailure
+nnbd/issue40601: TextSerializationFailure
 nnbd/issue40805: TextSerializationFailure
+nnbd/issue41102: TextSerializationFailure
+nnbd/issue41103: TextSerializationFailure
 nnbd/issue_39286: TextSerializationFailure
 nnbd/issue_39286_2: TextSerializationFailure
 nnbd/late: TextSerializationFailure
@@ -1288,6 +1302,7 @@
 nnbd/lhs_of_if_null: TextSerializationFailure
 nnbd/list_constructor: TextSerializationFailure
 nnbd/literal_from_opt_in: TextSerializationFailure
+nnbd/load_library: TextSerializationFailure
 nnbd/member_inheritance_from_opt_in: TextSerializationFailure
 nnbd/member_inheritance_from_opt_out: TextSerializationFailure
 nnbd/messages_with_types_opt_in: TypeCheckError
@@ -1330,8 +1345,10 @@
 nnbd/potentially_non_nullable_field: TextSerializationFailure
 nnbd/regress_null_aware: TextSerializationFailure
 nnbd/required: TextSerializationFailure
+nnbd/required_name_override: TextSerializationFailure
 nnbd/required_named_parameter: TextSerializationFailure
 nnbd/return_late: TextSerializationFailure
+nnbd/return_null: TextSerializationFailure
 nnbd/shorting_stop: TextSerializationFailure
 nnbd/simple_never: TextSerializationFailure
 nnbd/sink_hierarchy: TextSerializationFailure
diff --git a/pkg/front_end/testcases/weak.status b/pkg/front_end/testcases/weak.status
index 23aa8f9..76ab3a5 100644
--- a/pkg/front_end/testcases/weak.status
+++ b/pkg/front_end/testcases/weak.status
@@ -35,7 +35,6 @@
 general_nnbd_opt_out/expressions: RuntimeError
 general_nnbd_opt_out/external_import: RuntimeError # The native extension to import doesn't exist. This is ok.
 general_nnbd_opt_out/incomplete_field_formal_parameter: RuntimeError
-general_nnbd_opt_out/invalid_type: TypeCheckError
 general_nnbd_opt_out/invocations: RuntimeError
 general_nnbd_opt_out/issue37776: RuntimeError
 general_nnbd_opt_out/issue38938: RuntimeError # no main and compile time errors.
diff --git a/pkg/front_end/tool/_fasta/abcompile.dart b/pkg/front_end/tool/_fasta/abcompile.dart
index 4ccde2a..63ea80b 100644
--- a/pkg/front_end/tool/_fasta/abcompile.dart
+++ b/pkg/front_end/tool/_fasta/abcompile.dart
@@ -9,11 +9,10 @@
 
 import 'standard_deviation.dart';
 
-const String bRootPath = const String.fromEnvironment("bRoot");
-const int abIterations =
-    const int.fromEnvironment("abIterations", defaultValue: 15);
-const int iterations =
-    const int.fromEnvironment("iterations", defaultValue: 15);
+const String bRootPath =
+    bool.hasEnvironment("bRoot") ? String.fromEnvironment("bRoot") : null;
+const int abIterations = int.fromEnvironment("abIterations", defaultValue: 15);
+const int iterations = int.fromEnvironment("iterations", defaultValue: 15);
 
 /// Compare the performance of two different fast implementations
 /// by alternately launching the compile application in this directory
diff --git a/pkg/frontend_server/lib/src/javascript_bundle.dart b/pkg/frontend_server/lib/src/javascript_bundle.dart
index cedccc6..201d379f 100644
--- a/pkg/frontend_server/lib/src/javascript_bundle.dart
+++ b/pkg/frontend_server/lib/src/javascript_bundle.dart
@@ -156,6 +156,7 @@
         mapUrl: '$moduleUrl.lib.js.map',
         sourceMapBase: sourceMapBase,
         customScheme: _fileSystemScheme,
+        component: summaryComponent,
       );
       final codeBytes = utf8.encode(code.code);
       final sourceMapBytes = utf8.encode(json.encode(code.sourceMap));
diff --git a/pkg/kernel/lib/ast.dart b/pkg/kernel/lib/ast.dart
index 92e1b4c..3cce979 100644
--- a/pkg/kernel/lib/ast.dart
+++ b/pkg/kernel/lib/ast.dart
@@ -76,12 +76,83 @@
 import 'default_language_version.dart';
 
 import 'transformations/flags.dart';
-import 'text/ast_to_text.dart';
+import 'text/ast_to_text.dart' as astToText;
 import 'core_types.dart';
 import 'type_algebra.dart';
 import 'type_environment.dart';
 import 'src/assumptions.dart';
 
+String _debugNullability(Nullability nullability) {
+  switch (nullability) {
+    case Nullability.legacy:
+      return '*';
+    case Nullability.nullable:
+      return '?';
+    case Nullability.undetermined:
+      return '%';
+    case Nullability.nonNullable:
+      return '';
+  }
+  throw "Unknown Nullability: $nullability";
+}
+
+String _debugLibraryName(Library node) {
+  return node == null ? 'null' : node.name ?? 'library ${node.importUri}';
+}
+
+String _debugQualifiedClassName(Class node) {
+  return _debugLibraryName(node.enclosingLibrary) +
+      '::' +
+      _debugClassName(node);
+}
+
+String _debugClassName(Class node) {
+  return node == null
+      ? 'null'
+      : node.name ?? 'null-named class ${node.runtimeType} ${node.hashCode}';
+}
+
+String _debugQualifiedMemberName(Member node) {
+  if (node.enclosingClass != null) {
+    return _debugQualifiedClassName(node.enclosingClass) +
+        '::' +
+        _debugMemberName(node);
+  } else {
+    return _debugLibraryName(node.enclosingLibrary) +
+        '::' +
+        _debugMemberName(node);
+  }
+}
+
+String _debugMemberName(Member node) {
+  return node.name?.name ??
+      "null-named member ${node.runtimeType} ${node.hashCode}";
+}
+
+String _debugVariableDeclarationName(VariableDeclaration node) {
+  return node.name ??
+      "null-named VariableDeclaration ${node.runtimeType} ${node.hashCode}";
+}
+
+String _debugQualifiedTypeParameterName(TypeParameter node) {
+  if (node.parent is Class) {
+    return _debugQualifiedClassName(node.parent) +
+        '::' +
+        _debugTypeParameterName(node);
+  }
+  if (node.parent is Member) {
+    return _debugQualifiedMemberName(node.parent) +
+        '::' +
+        _debugTypeParameterName(node);
+  }
+  return _debugTypeParameterName(node);
+}
+
+String _debugTypeParameterName(TypeParameter node) {
+  return node.name ??
+      "null-named TypeParameter ${node.runtimeType} ${node.hashCode}";
+}
+
 /// Any type of node in the IR.
 abstract class Node {
   const Node();
@@ -91,22 +162,21 @@
 
   /// Returns the textual representation of this node for use in debugging.
   ///
-  /// [toString] should only be used for debugging and short-running test tools
-  /// as it can cause serious memory leaks.
+  /// [toString] should only be used for debugging, but should not leak.
   ///
-  /// Synthetic names are cached globally to retain consistency across different
-  /// [toString] calls (hence the memory leak).
-  ///
-  /// Nodes that are named, such as [Class] and [Member], return their
-  /// (possibly synthesized) name, whereas other AST nodes return the complete
-  /// textual representation of their subtree.
-  String toString() => debugNodeToString(this);
+  /// The data is generally bare-bones, but can easily be updated for your
+  /// specific debugging needs.
+  String toString();
 
   /// Returns the textual representation of this node for use in debugging.
   ///
   /// Note that this adds some nodes to a static map to ensure consistent
-  /// naming, but that it thus also leaks memory.
-  String leakingDebugToString() => debugNodeToString(this);
+  /// naming, but that it thus also leaks memory. [leakingDebugToString] should
+  /// thus only be used for debugging and short-running test tools.
+  ///
+  /// Synthetic names are cached globally to retain consistency across different
+  /// [leakingDebugToString] calls (hence the memory leak).
+  String leakingDebugToString() => astToText.debugNodeToString(this);
 }
 
 /// A mutable AST node with a parent pointer.
@@ -615,7 +685,7 @@
 
   /// Returns a possibly synthesized name for this library, consistent with
   /// the names across all [toString] calls.
-  String toString() => debugLibraryName(this);
+  String toString() => _debugLibraryName(this);
 
   Location _getLocationInEnclosingFile(int offset) {
     return _getLocationInComponent(enclosingComponent, fileUri, offset);
@@ -698,6 +768,11 @@
     transformList(annotations, v, this);
     transformList(combinators, v, this);
   }
+
+  @override
+  String toString() {
+    return "LibraryDependency()";
+  }
 }
 
 /// A part declaration in a library.
@@ -726,6 +801,11 @@
   transformChildren(Transformer v) {
     transformList(annotations, v, this);
   }
+
+  @override
+  String toString() {
+    return "LibraryPart()";
+  }
 }
 
 /// A `show` or `hide` clause for an import or export.
@@ -750,6 +830,11 @@
 
   @override
   transformChildren(Transformer v) {}
+
+  @override
+  String toString() {
+    return "Combinator()";
+  }
 }
 
 /// Declaration of a type alias.
@@ -817,6 +902,11 @@
   Location _getLocationInEnclosingFile(int offset) {
     return _getLocationInComponent(enclosingComponent, fileUri, offset);
   }
+
+  @override
+  String toString() {
+    return "Typedef()";
+  }
 }
 
 /// The degree to which the contents of a class have been loaded into memory.
@@ -1328,7 +1418,7 @@
 
   /// Returns a possibly synthesized name for this class, consistent with
   /// the names used across all [toString] calls.
-  String toString() => debugQualifiedClassName(this);
+  String toString() => _debugQualifiedClassName(this);
 
   visitChildren(Visitor v) {
     visitList(annotations, v);
@@ -1426,6 +1516,11 @@
       onType = v.visitDartType(onType);
     }
   }
+
+  @override
+  String toString() {
+    return "Extension()";
+  }
 }
 
 enum ExtensionMemberKind {
@@ -1586,7 +1681,7 @@
 
   /// Returns a possibly synthesized name for this member, consistent with
   /// the names used across all [toString] calls.
-  String toString() => debugQualifiedMemberName(this);
+  String toString() => _debugQualifiedMemberName(this);
 
   void addAnnotation(Expression node) {
     if (annotations.isEmpty) {
@@ -2362,6 +2457,11 @@
 
   visitChildren(Visitor v) {}
   transformChildren(Transformer v) {}
+
+  @override
+  String toString() {
+    return "InvalidInitializer()";
+  }
 }
 
 /// A field assignment `field = value` occurring in the initializer list of
@@ -2403,6 +2503,11 @@
       value?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "FieldInitializer()";
+  }
 }
 
 /// A super call `super(x,y)` occurring in the initializer list of a
@@ -2445,6 +2550,11 @@
       arguments?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "SuperInitializer()";
+  }
 }
 
 /// A redirecting call `this(x,y)` occurring in the initializer list of
@@ -2483,6 +2593,11 @@
       arguments?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "RedirectingInitializer()";
+  }
 }
 
 /// Binding of a temporary variable in the initializer list of a constructor.
@@ -2508,6 +2623,11 @@
       variable?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "LocalInitializer()";
+  }
 }
 
 class AssertInitializer extends Initializer {
@@ -2527,6 +2647,11 @@
     statement = statement.accept<TreeNode>(v);
     statement.parent = this;
   }
+
+  @override
+  String toString() {
+    return "AssertInitializer()";
+  }
 }
 
 // ------------------------------------------------------------------------
@@ -2676,6 +2801,11 @@
       body?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "FunctionNode()";
+  }
 }
 
 enum AsyncMarker {
@@ -2802,6 +2932,11 @@
 
   visitChildren(Visitor v) {}
   transformChildren(Transformer v) {}
+
+  @override
+  String toString() {
+    return "InvalidExpression()";
+  }
 }
 
 /// Read a local variable, a local function, or a function parameter.
@@ -2828,6 +2963,11 @@
       promotedType = v.visitDartType(promotedType);
     }
   }
+
+  @override
+  String toString() {
+    return "VariableGet()";
+  }
 }
 
 /// Assign a local variable or function parameter.
@@ -2858,6 +2998,11 @@
       value?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "VariableSet()";
+  }
 }
 
 /// Expression of form `x.field`.
@@ -2918,6 +3063,11 @@
       receiver?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "PropertyGet($receiver.$name)";
+  }
 }
 
 /// Expression of form `x.field = value`.
@@ -2973,6 +3123,11 @@
       value?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "PropertySet()";
+  }
 }
 
 /// Directly read a field, call a getter, or tear off a method.
@@ -3015,6 +3170,11 @@
     return Substitution.fromInterfaceType(receiverType)
         .substituteType(target.getterType);
   }
+
+  @override
+  String toString() {
+    return "DirectPropertyGet()";
+  }
 }
 
 /// Directly assign a field, or call a setter.
@@ -3063,6 +3223,11 @@
 
   DartType getStaticType(StaticTypeContext context) =>
       value.getStaticType(context);
+
+  @override
+  String toString() {
+    return "DirectPropertySet()";
+  }
 }
 
 /// Directly call an instance method, bypassing ordinary dispatch.
@@ -3124,6 +3289,11 @@
             target.function.typeParameters, arguments.types)
         .substituteType(returnType);
   }
+
+  @override
+  String toString() {
+    return "DirectMethodInvocation()";
+  }
 }
 
 /// Expression of form `super.field`.
@@ -3172,6 +3342,11 @@
   }
 
   transformChildren(Transformer v) {}
+
+  @override
+  String toString() {
+    return "SuperPropertyGet()";
+  }
 }
 
 /// Expression of form `super.field = value`.
@@ -3218,6 +3393,11 @@
       value?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "SuperPropertySet()";
+  }
 }
 
 /// Read a static field, call a static getter, or tear off a static method.
@@ -3246,6 +3426,11 @@
   }
 
   transformChildren(Transformer v) {}
+
+  @override
+  String toString() {
+    return "StaticGet()";
+  }
 }
 
 /// Assign a static field or call a static setter.
@@ -3287,6 +3472,11 @@
       value?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "StaticSet()";
+  }
 }
 
 /// The arguments to a function call, divided into type arguments,
@@ -3334,6 +3524,11 @@
     transformList(positional, v, this);
     transformList(named, v, this);
   }
+
+  @override
+  String toString() {
+    return "Arguments()";
+  }
 }
 
 /// A named argument, `name: value`.
@@ -3357,6 +3552,11 @@
       value?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "NamedExpression()";
+  }
 }
 
 /// Common super class for [DirectMethodInvocation], [MethodInvocation],
@@ -3486,6 +3686,11 @@
       arguments?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "MethodInvocation()";
+  }
 }
 
 /// Expression of form `super.foo(x)`.
@@ -3541,6 +3746,11 @@
       arguments?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "SuperMethodInvocation()";
+  }
 }
 
 /// Expression of form `foo(x)`, or `const foo(x)` if the target is an
@@ -3592,6 +3802,11 @@
       arguments?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "StaticInvocation($targetReference, $arguments)";
+  }
 }
 
 /// Expression of form `new Foo(x)` or `const Foo(x)`.
@@ -3659,6 +3874,11 @@
         : new InterfaceType(
             enclosingClass, Nullability.legacy, arguments.types);
   }
+
+  @override
+  String toString() {
+    return "ConstructorInvocation()";
+  }
 }
 
 /// An explicit type instantiation of a generic function.
@@ -3692,6 +3912,11 @@
     }
     transformTypeList(typeArguments, v);
   }
+
+  @override
+  String toString() {
+    return "Instantiation()";
+  }
 }
 
 /// Expression of form `!x`.
@@ -3721,6 +3946,11 @@
       operand?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "Not()";
+  }
 }
 
 /// Expression of form `x && y` or `x || y`
@@ -3756,6 +3986,11 @@
       right?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "LogicalExpression()";
+  }
 }
 
 /// Expression of form `x ? y : z`.
@@ -3804,6 +4039,11 @@
       staticType = v.visitDartType(staticType);
     }
   }
+
+  @override
+  String toString() {
+    return "ConditionalExpression($condition ? $then : $otherwise)";
+  }
 }
 
 /// Convert expressions to strings and concatenate them.  Semantically, calls
@@ -3834,6 +4074,11 @@
   transformChildren(Transformer v) {
     transformList(expressions, v, this);
   }
+
+  @override
+  String toString() {
+    return "StringConcatenation()";
+  }
 }
 
 /// Concatenate lists into a single list.
@@ -3868,6 +4113,11 @@
     typeArgument = v.visitDartType(typeArgument);
     transformList(lists, v, this);
   }
+
+  @override
+  String toString() {
+    return "ListConcatenation()";
+  }
 }
 
 /// Concatenate sets into a single set.
@@ -3905,6 +4155,11 @@
     typeArgument = v.visitDartType(typeArgument);
     transformList(sets, v, this);
   }
+
+  @override
+  String toString() {
+    return "SetConcatenation()";
+  }
 }
 
 /// Concatenate maps into a single map.
@@ -3948,6 +4203,11 @@
     valueType = v.visitDartType(valueType);
     transformList(maps, v, this);
   }
+
+  @override
+  String toString() {
+    return "MapConcatenation()";
+  }
 }
 
 /// Create an instance directly from the field values.
@@ -4007,6 +4267,11 @@
     transformList(asserts, v, this);
     transformList(unusedArguments, v, this);
   }
+
+  @override
+  String toString() {
+    return "InstanceCreation()";
+  }
 }
 
 /// A marker indicating that a subexpression originates in a different source
@@ -4044,6 +4309,11 @@
   Location _getLocationInEnclosingFile(int offset) {
     return _getLocationInComponent(enclosingComponent, fileUri, offset);
   }
+
+  @override
+  String toString() {
+    return "FileUriExpression()";
+  }
 }
 
 /// Expression of form `x is T`.
@@ -4091,6 +4361,11 @@
     }
     type = v.visitDartType(type);
   }
+
+  @override
+  String toString() {
+    return "IsExpression()";
+  }
 }
 
 /// Expression of form `x as T`.
@@ -4183,6 +4458,11 @@
     }
     type = v.visitDartType(type);
   }
+
+  @override
+  String toString() {
+    return "AsExpression($operand as $type)";
+  }
 }
 
 /// Null check expression of form `x!`.
@@ -4217,6 +4497,11 @@
       operand?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "NullCheck()";
+  }
 }
 
 /// An integer, double, boolean, string, or null constant.
@@ -4238,6 +4523,11 @@
   R accept<R>(ExpressionVisitor<R> v) => v.visitStringLiteral(this);
   R accept1<R, A>(ExpressionVisitor1<R, A> v, A arg) =>
       v.visitStringLiteral(this, arg);
+
+  @override
+  String toString() {
+    return "StringLiteral($value)";
+  }
 }
 
 class IntLiteral extends BasicLiteral {
@@ -4255,6 +4545,11 @@
   R accept<R>(ExpressionVisitor<R> v) => v.visitIntLiteral(this);
   R accept1<R, A>(ExpressionVisitor1<R, A> v, A arg) =>
       v.visitIntLiteral(this, arg);
+
+  @override
+  String toString() {
+    return "IntLiteral($value)";
+  }
 }
 
 class DoubleLiteral extends BasicLiteral {
@@ -4268,6 +4563,11 @@
   R accept<R>(ExpressionVisitor<R> v) => v.visitDoubleLiteral(this);
   R accept1<R, A>(ExpressionVisitor1<R, A> v, A arg) =>
       v.visitDoubleLiteral(this, arg);
+
+  @override
+  String toString() {
+    return "DoubleLiteral($value)";
+  }
 }
 
 class BoolLiteral extends BasicLiteral {
@@ -4281,6 +4581,11 @@
   R accept<R>(ExpressionVisitor<R> v) => v.visitBoolLiteral(this);
   R accept1<R, A>(ExpressionVisitor1<R, A> v, A arg) =>
       v.visitBoolLiteral(this, arg);
+
+  @override
+  String toString() {
+    return "BoolLiteral($value)";
+  }
 }
 
 class NullLiteral extends BasicLiteral {
@@ -4292,6 +4597,11 @@
   R accept<R>(ExpressionVisitor<R> v) => v.visitNullLiteral(this);
   R accept1<R, A>(ExpressionVisitor1<R, A> v, A arg) =>
       v.visitNullLiteral(this, arg);
+
+  @override
+  String toString() {
+    return "NullLiteral()";
+  }
 }
 
 class SymbolLiteral extends Expression {
@@ -4308,6 +4618,11 @@
 
   visitChildren(Visitor v) {}
   transformChildren(Transformer v) {}
+
+  @override
+  String toString() {
+    return "SymbolLiteral(#$value)";
+  }
 }
 
 class TypeLiteral extends Expression {
@@ -4329,6 +4644,11 @@
   transformChildren(Transformer v) {
     type = v.visitDartType(type);
   }
+
+  @override
+  String toString() {
+    return "TypeLiteral($type)";
+  }
 }
 
 class ThisExpression extends Expression {
@@ -4340,6 +4660,11 @@
 
   visitChildren(Visitor v) {}
   transformChildren(Transformer v) {}
+
+  @override
+  String toString() {
+    return "ThisExpression()";
+  }
 }
 
 class Rethrow extends Expression {
@@ -4354,6 +4679,11 @@
 
   visitChildren(Visitor v) {}
   transformChildren(Transformer v) {}
+
+  @override
+  String toString() {
+    return "Rethrow()";
+  }
 }
 
 class Throw extends Expression {
@@ -4381,6 +4711,11 @@
       expression?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "Throw()";
+  }
 }
 
 class ListLiteral extends Expression {
@@ -4411,6 +4746,11 @@
     typeArgument = v.visitDartType(typeArgument);
     transformList(expressions, v, this);
   }
+
+  @override
+  String toString() {
+    return "ListLiteral()";
+  }
 }
 
 class SetLiteral extends Expression {
@@ -4441,6 +4781,11 @@
     typeArgument = v.visitDartType(typeArgument);
     transformList(expressions, v, this);
   }
+
+  @override
+  String toString() {
+    return "SetLiteral()";
+  }
 }
 
 class MapLiteral extends Expression {
@@ -4478,6 +4823,11 @@
     valueType = v.visitDartType(valueType);
     transformList(entries, v, this);
   }
+
+  @override
+  String toString() {
+    return "MapLiteral()";
+  }
 }
 
 class MapEntry extends TreeNode {
@@ -4506,6 +4856,11 @@
       value?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "MapEntry()";
+  }
 }
 
 /// Expression of form `await x`.
@@ -4534,6 +4889,11 @@
       operand?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "AwaitExpression()";
+  }
 }
 
 /// Common super-interface for [FunctionExpression] and [FunctionDeclaration].
@@ -4569,6 +4929,11 @@
       function?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "FunctionExpression()";
+  }
 }
 
 class ConstantExpression extends Expression {
@@ -4594,6 +4959,11 @@
     constant = v.visitConstant(constant);
     type = v.visitDartType(type);
   }
+
+  @override
+  String toString() {
+    return "ConstantExpression()";
+  }
 }
 
 /// Synthetic expression of form `let v = x in y`
@@ -4627,6 +4997,11 @@
       body?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "Let()";
+  }
 }
 
 class BlockExpression extends Expression {
@@ -4660,6 +5035,11 @@
       value?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "BlockExpression()";
+  }
 }
 
 /// Attempt to load the library referred to by a deferred import.
@@ -4691,6 +5071,11 @@
 
   visitChildren(Visitor v) {}
   transformChildren(Transformer v) {}
+
+  @override
+  String toString() {
+    return "LoadLibrary()";
+  }
 }
 
 /// Checks that the given deferred import has been marked as 'loaded'.
@@ -4710,6 +5095,11 @@
 
   visitChildren(Visitor v) {}
   transformChildren(Transformer v) {}
+
+  @override
+  String toString() {
+    return "CheckLibraryIsLoaded()";
+  }
 }
 
 // ------------------------------------------------------------------------
@@ -4742,6 +5132,11 @@
       expression?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "ExpressionStatement()";
+  }
 }
 
 class Block extends Statement {
@@ -4771,6 +5166,11 @@
     statements.add(node);
     node.parent = this;
   }
+
+  @override
+  String toString() {
+    return "Block()";
+  }
 }
 
 /// A block that is only executed when asserts are enabled.
@@ -4806,6 +5206,11 @@
     statements.add(node);
     node.parent = this;
   }
+
+  @override
+  String toString() {
+    return "AssertBlock()";
+  }
 }
 
 class EmptyStatement extends Statement {
@@ -4815,6 +5220,11 @@
 
   visitChildren(Visitor v) {}
   transformChildren(Transformer v) {}
+
+  @override
+  String toString() {
+    return "EmptyStatement()";
+  }
 }
 
 class AssertStatement extends Statement {
@@ -4856,6 +5266,11 @@
       message?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "AssertStatement()";
+  }
 }
 
 /// A target of a [Break] statement.
@@ -4884,6 +5299,11 @@
       body?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "LabeledStatement()";
+  }
 }
 
 /// Breaks out of an enclosing [LabeledStatement].
@@ -4917,6 +5337,11 @@
 
   visitChildren(Visitor v) {}
   transformChildren(Transformer v) {}
+
+  @override
+  String toString() {
+    return "BreakStatement()";
+  }
 }
 
 class WhileStatement extends Statement {
@@ -4947,6 +5372,11 @@
       body?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "WhileStatement()";
+  }
 }
 
 class DoStatement extends Statement {
@@ -4977,6 +5407,11 @@
       condition?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "DoStatement()";
+  }
 }
 
 class ForStatement extends Statement {
@@ -5015,6 +5450,11 @@
       body?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "ForStatement()";
+  }
 }
 
 class ForInStatement extends Statement {
@@ -5060,6 +5500,11 @@
       body?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "ForInStatement()";
+  }
 }
 
 /// Statement of form `switch (e) { case x: ... }`.
@@ -5091,6 +5536,11 @@
     }
     transformList(cases, v, this);
   }
+
+  @override
+  String toString() {
+    return "SwitchStatement()";
+  }
 }
 
 /// A group of `case` clauses and/or a `default` clause.
@@ -5135,6 +5585,11 @@
       body?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "SwitchCase()";
+  }
 }
 
 /// Jump to a case in an enclosing switch.
@@ -5149,6 +5604,11 @@
 
   visitChildren(Visitor v) {}
   transformChildren(Transformer v) {}
+
+  @override
+  String toString() {
+    return "ContinueSwitchStatement()";
+  }
 }
 
 class IfStatement extends Statement {
@@ -5186,6 +5646,11 @@
       otherwise?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "IfStatement()";
+  }
 }
 
 class ReturnStatement extends Statement {
@@ -5209,6 +5674,11 @@
       expression?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "ReturnStatement()";
+  }
 }
 
 class TryCatch extends Statement {
@@ -5237,6 +5707,11 @@
     }
     transformList(catches, v, this);
   }
+
+  @override
+  String toString() {
+    return "TryCatch()";
+  }
 }
 
 class Catch extends TreeNode {
@@ -5277,6 +5752,11 @@
       body?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "Catch()";
+  }
 }
 
 class TryFinally extends Statement {
@@ -5307,6 +5787,11 @@
       finalizer?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "TryFinally()";
+  }
 }
 
 /// Statement of form `yield x` or `yield* x`.
@@ -5351,6 +5836,11 @@
       expression?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "YieldStatement()";
+  }
 }
 
 /// Declaration of a local variable.
@@ -5550,7 +6040,7 @@
 
   /// Returns a possibly synthesized name for this variable, consistent with
   /// the names used across all [toString] calls.
-  String toString() => debugVariableDeclarationName(this);
+  String toString() => _debugVariableDeclarationName(this);
 }
 
 /// Declaration a local function.
@@ -5584,6 +6074,11 @@
       function?.parent = this;
     }
   }
+
+  @override
+  String toString() {
+    return "FunctionDeclaration()";
+  }
 }
 
 // ------------------------------------------------------------------------
@@ -5637,7 +6132,7 @@
   ///
   /// Note that this adds some nodes to a static map to ensure consistent
   /// naming, but that it thus also leaks memory.
-  String leakingDebugToString() => debugNodeToString(this);
+  String leakingDebugToString() => astToText.debugNodeToString(this);
 }
 
 class _PrivateName extends Name {
@@ -5800,6 +6295,11 @@
 
   @override
   InvalidType withNullability(Nullability nullability) => this;
+
+  @override
+  String toString() {
+    return "invalid-type";
+  }
 }
 
 class DynamicType extends DartType {
@@ -5829,6 +6329,11 @@
 
   @override
   DynamicType withNullability(Nullability nullability) => this;
+
+  @override
+  String toString() {
+    return "dynamic";
+  }
 }
 
 class VoidType extends DartType {
@@ -5858,6 +6363,11 @@
 
   @override
   VoidType withNullability(Nullability nullability) => this;
+
+  @override
+  String toString() {
+    return "void";
+  }
 }
 
 class NeverType extends DartType {
@@ -5892,6 +6402,11 @@
   NeverType withNullability(Nullability nullability) {
     return this.nullability == nullability ? this : new NeverType(nullability);
   }
+
+  @override
+  String toString() {
+    return "NeverType()";
+  }
 }
 
 class BottomType extends DartType {
@@ -5921,6 +6436,11 @@
 
   @override
   BottomType withNullability(Nullability nullability) => this;
+
+  @override
+  String toString() {
+    return "<BottomType>";
+  }
 }
 
 class InterfaceType extends DartType {
@@ -6005,6 +6525,11 @@
         ? this
         : new InterfaceType.byReference(className, nullability, typeArguments);
   }
+
+  @override
+  String toString() {
+    return "InterfaceType($className${_debugNullability(nullability)})";
+  }
 }
 
 /// A possibly generic function type.
@@ -6175,6 +6700,11 @@
     if (typeParameters.isEmpty) return result;
     return getFreshTypeParameters(typeParameters).applyToFunctionType(result);
   }
+
+  @override
+  String toString() {
+    return "FunctionType()";
+  }
 }
 
 /// A use of a [Typedef] as a type.
@@ -6263,6 +6793,11 @@
         : new TypedefType.byReference(
             typedefReference, nullability, typeArguments);
   }
+
+  @override
+  String toString() {
+    return "TypedefType()";
+  }
 }
 
 /// A named parameter in [FunctionType].
@@ -6301,6 +6836,11 @@
   void visitChildren(Visitor v) {
     type.accept(v);
   }
+
+  @override
+  String toString() {
+    return "NamedType()";
+  }
 }
 
 /// Reference to a type variable.
@@ -6571,6 +7111,11 @@
 
     return Nullability.legacy;
   }
+
+  @override
+  String toString() {
+    return "TypeParameterType()";
+  }
 }
 
 /// Value set for variance of a type parameter X in a type term T.
@@ -6772,7 +7317,7 @@
 
   /// Returns a possibly synthesized name for this type parameter, consistent
   /// with the names used across all [toString] calls.
-  String toString() => debugQualifiedTypeParameterName(this);
+  String toString() => _debugQualifiedTypeParameterName(this);
 
   bool get isFunctionTypeTypeParameter => parent == null;
 }
@@ -6820,6 +7365,11 @@
     }
     return hash;
   }
+
+  @override
+  String toString() {
+    return "Supertype()";
+  }
 }
 
 // ------------------------------------------------------------------------
@@ -7256,6 +7806,11 @@
 
   @override
   Expression asExpression() => expression;
+
+  @override
+  String toString() {
+    return "UnevaluatedConstant()";
+  }
 }
 
 // ------------------------------------------------------------------------
@@ -7394,6 +7949,11 @@
   void addMetadataRepository(MetadataRepository repository) {
     metadata[repository.tag] = repository;
   }
+
+  @override
+  String toString() {
+    return "Component()";
+  }
 }
 
 /// A tuple with file, line, and column number, for displaying human-readable
diff --git a/pkg/kernel/lib/class_hierarchy.dart b/pkg/kernel/lib/class_hierarchy.dart
index da3e50b..9d460d4 100644
--- a/pkg/kernel/lib/class_hierarchy.dart
+++ b/pkg/kernel/lib/class_hierarchy.dart
@@ -1284,11 +1284,9 @@
       // Copy over the super type entries.
       subInfo.genericSuperType ??= <Class, Supertype>{};
       subInfo.genericSuperTypes ??= <Class, List<Supertype>>{};
-      superInfo.genericSuperTypes?.forEach((Class key, List<Supertype> types) {
-        for (Supertype type in types) {
-          subInfo.recordGenericSuperType(
-              coreTypes, key, type, _onAmbiguousSupertypes);
-        }
+      superInfo.genericSuperType?.forEach((Class key, Supertype type) {
+        subInfo.recordGenericSuperType(
+            coreTypes, key, type, _onAmbiguousSupertypes);
       });
     } else {
       // Copy over all transitive generic super types, and substitute the
@@ -1298,11 +1296,9 @@
           superclass.typeParameters, supertype.typeArguments);
       subInfo.genericSuperType ??= <Class, Supertype>{};
       subInfo.genericSuperTypes ??= <Class, List<Supertype>>{};
-      superInfo.genericSuperTypes?.forEach((Class key, List<Supertype> types) {
-        for (Supertype type in types) {
-          subInfo.recordGenericSuperType(coreTypes, key,
-              substitution.substituteSupertype(type), _onAmbiguousSupertypes);
-        }
+      superInfo.genericSuperType?.forEach((Class key, Supertype type) {
+        subInfo.recordGenericSuperType(coreTypes, key,
+            substitution.substituteSupertype(type), _onAmbiguousSupertypes);
       });
 
       subInfo.recordGenericSuperType(
diff --git a/pkg/kernel/lib/naive_type_checker.dart b/pkg/kernel/lib/naive_type_checker.dart
index 20ee3b5..e18a1125 100644
--- a/pkg/kernel/lib/naive_type_checker.dart
+++ b/pkg/kernel/lib/naive_type_checker.dart
@@ -251,6 +251,12 @@
     if (receiver is DynamicType) {
       return;
     }
+    if (receiver is InvalidType) {
+      return;
+    }
+    if (receiver is BottomType) {
+      return;
+    }
     if (receiver is NeverType &&
         receiver.nullability == Nullability.nonNullable) {
       return;
diff --git a/pkg/kernel/lib/src/bounds_checks.dart b/pkg/kernel/lib/src/bounds_checks.dart
index 03e68b4..c1ea1f8 100644
--- a/pkg/kernel/lib/src/bounds_checks.dart
+++ b/pkg/kernel/lib/src/bounds_checks.dart
@@ -11,8 +11,10 @@
         FunctionType,
         InterfaceType,
         InvalidType,
+        Library,
         NamedType,
         NeverType,
+        Nullability,
         TypeParameter,
         TypeParameterType,
         Typedef,
@@ -113,7 +115,8 @@
   }
 }
 
-DartType instantiateToBounds(DartType type, Class objectClass) {
+DartType instantiateToBounds(
+    DartType type, Class objectClass, Library contextLibrary) {
   if (type is InterfaceType) {
     if (type.typeArguments.isEmpty) return type;
     for (DartType typeArgument in type.typeArguments) {
@@ -124,8 +127,11 @@
         return type;
       }
     }
-    return new InterfaceType.byReference(type.className, type.nullability,
-        calculateBounds(type.classNode.typeParameters, objectClass));
+    return new InterfaceType.byReference(
+        type.className,
+        type.nullability,
+        calculateBounds(
+            type.classNode.typeParameters, objectClass, contextLibrary));
   }
   if (type is TypedefType) {
     if (type.typeArguments.isEmpty) return type;
@@ -134,8 +140,11 @@
         return type;
       }
     }
-    return new TypedefType.byReference(type.typedefReference, type.nullability,
-        calculateBounds(type.typedefNode.typeParameters, objectClass));
+    return new TypedefType.byReference(
+        type.typedefReference,
+        type.nullability,
+        calculateBounds(
+            type.typedefNode.typeParameters, objectClass, contextLibrary));
   }
   return type;
 }
@@ -146,8 +155,8 @@
 /// See the [description]
 /// (https://github.com/dart-lang/sdk/blob/master/docs/language/informal/instantiate-to-bound.md)
 /// of the algorithm for details.
-List<DartType> calculateBounds(
-    List<TypeParameter> typeParameters, Class objectClass) {
+List<DartType> calculateBounds(List<TypeParameter> typeParameters,
+    Class objectClass, Library contextLibrary) {
   List<DartType> bounds = new List<DartType>(typeParameters.length);
   for (int i = 0; i < typeParameters.length; i++) {
     DartType bound = typeParameters[i].bound;
@@ -165,12 +174,16 @@
 
   TypeVariableGraph graph = new TypeVariableGraph(typeParameters, bounds);
   List<List<int>> stronglyConnected = computeStrongComponents(graph);
+  final DartType topType = const DynamicType();
+  final DartType bottomType = contextLibrary.isNonNullableByDefault
+      ? const NeverType(Nullability.nonNullable)
+      : const BottomType();
   for (List<int> component in stronglyConnected) {
     Map<TypeParameter, DartType> upperBounds = <TypeParameter, DartType>{};
     Map<TypeParameter, DartType> lowerBounds = <TypeParameter, DartType>{};
     for (int typeParameterIndex in component) {
-      upperBounds[typeParameters[typeParameterIndex]] = const DynamicType();
-      lowerBounds[typeParameters[typeParameterIndex]] = const BottomType();
+      upperBounds[typeParameters[typeParameterIndex]] = topType;
+      lowerBounds[typeParameters[typeParameterIndex]] = bottomType;
     }
     Substitution substitution =
         Substitution.fromUpperAndLowerBounds(upperBounds, lowerBounds);
@@ -184,7 +197,7 @@
     Map<TypeParameter, DartType> upperBounds = <TypeParameter, DartType>{};
     Map<TypeParameter, DartType> lowerBounds = <TypeParameter, DartType>{};
     upperBounds[typeParameters[i]] = bounds[i];
-    lowerBounds[typeParameters[i]] = const BottomType();
+    lowerBounds[typeParameters[i]] = bottomType;
     Substitution substitution =
         Substitution.fromUpperAndLowerBounds(upperBounds, lowerBounds);
     for (int j = 0; j < typeParameters.length; j++) {
@@ -227,13 +240,30 @@
         typeParameter == other.typeParameter &&
         enclosingType == other.enclosingType;
   }
+
+  String toString() {
+    return "TypeArgumentIssue(index=${index}, argument=${argument}, "
+        "typeParameter=${typeParameter}, enclosingType=${enclosingType}";
+  }
 }
 
+// Finds type arguments that don't follow the rules of well-boundness.
+//
+// [bottomType] should be either Null or Never, depending on what should be
+// taken for the bottom type at the call site.  The bottom type is used in the
+// checks for super-boundness for construction of the auxiliary type.  For
+// details see Dart Language Specification, Section 14.3.2 The Instantiation to
+// Bound Algorithm.
 // TODO(dmitryas):  Remove [typedefInstantiations] when type arguments passed to
 // typedefs are preserved in the Kernel output.
-List<TypeArgumentIssue> findTypeArgumentIssues(DartType type,
-    TypeEnvironment typeEnvironment, SubtypeCheckMode subtypeCheckMode,
+List<TypeArgumentIssue> findTypeArgumentIssues(
+    DartType type,
+    TypeEnvironment typeEnvironment,
+    SubtypeCheckMode subtypeCheckMode,
+    DartType bottomType,
     {bool allowSuperBounded = false}) {
+  assert(bottomType == const NeverType(Nullability.nonNullable) ||
+      bottomType == typeEnvironment.nullType);
   List<TypeParameter> variables;
   List<DartType> arguments;
   List<TypeArgumentIssue> typedefRhsResult;
@@ -251,7 +281,7 @@
         requiredParameterCount: functionType.requiredParameterCount,
         typedefType: null);
     typedefRhsResult = findTypeArgumentIssues(
-        cloned, typeEnvironment, subtypeCheckMode,
+        cloned, typeEnvironment, subtypeCheckMode, bottomType,
         allowSuperBounded: true);
     type = functionType.typedefType;
   }
@@ -266,24 +296,24 @@
     List<TypeArgumentIssue> result = <TypeArgumentIssue>[];
     for (TypeParameter parameter in type.typeParameters) {
       result.addAll(findTypeArgumentIssues(
-              parameter.bound, typeEnvironment, subtypeCheckMode,
+              parameter.bound, typeEnvironment, subtypeCheckMode, bottomType,
               allowSuperBounded: true) ??
           const <TypeArgumentIssue>[]);
     }
     for (DartType formal in type.positionalParameters) {
       result.addAll(findTypeArgumentIssues(
-              formal, typeEnvironment, subtypeCheckMode,
+              formal, typeEnvironment, subtypeCheckMode, bottomType,
               allowSuperBounded: true) ??
           const <TypeArgumentIssue>[]);
     }
     for (NamedType named in type.namedParameters) {
       result.addAll(findTypeArgumentIssues(
-              named.type, typeEnvironment, subtypeCheckMode,
+              named.type, typeEnvironment, subtypeCheckMode, bottomType,
               allowSuperBounded: true) ??
           const <TypeArgumentIssue>[]);
     }
     result.addAll(findTypeArgumentIssues(
-            type.returnType, typeEnvironment, subtypeCheckMode,
+            type.returnType, typeEnvironment, subtypeCheckMode, bottomType,
             allowSuperBounded: true) ??
         const <TypeArgumentIssue>[]);
     return result.isEmpty ? null : result;
@@ -316,7 +346,7 @@
     }
 
     List<TypeArgumentIssue> issues = findTypeArgumentIssues(
-        argument, typeEnvironment, subtypeCheckMode,
+        argument, typeEnvironment, subtypeCheckMode, bottomType,
         allowSuperBounded: true);
     if (issues != null) {
       argumentsResult ??= <TypeArgumentIssue>[];
@@ -337,7 +367,7 @@
   if (!allowSuperBounded) return result;
 
   result = null;
-  type = convertSuperBoundedToRegularBounded(typeEnvironment, type);
+  type = convertSuperBoundedToRegularBounded(typeEnvironment, type, bottomType);
   List<DartType> argumentsToReport = arguments.toList();
   if (type is InterfaceType) {
     variables = type.classNode.typeParameters;
@@ -373,6 +403,13 @@
   return result;
 }
 
+// Finds type arguments that don't follow the rules of well-boundness.
+//
+// [bottomType] should be either Null or Never, depending on what should be
+// taken for the bottom type at the call site.  The bottom type is used in the
+// checks for super-boundness for construction of the auxiliary type.  For
+// details see Dart Language Specification, Section 14.3.2 The Instantiation to
+// Bound Algorithm.
 // TODO(dmitryas):  Remove [typedefInstantiations] when type arguments passed to
 // typedefs are preserved in the Kernel output.
 List<TypeArgumentIssue> findTypeArgumentIssuesForInvocation(
@@ -380,8 +417,11 @@
     List<DartType> arguments,
     TypeEnvironment typeEnvironment,
     SubtypeCheckMode subtypeCheckMode,
+    DartType bottomType,
     {Map<FunctionType, List<DartType>> typedefInstantiations}) {
   assert(arguments.length == parameters.length);
+  assert(bottomType == const NeverType(Nullability.nonNullable) ||
+      bottomType == typeEnvironment.nullType);
   List<TypeArgumentIssue> result;
   var substitutionMap = <TypeParameter, DartType>{};
   for (int i = 0; i < arguments.length; ++i) {
@@ -403,7 +443,7 @@
     }
 
     List<TypeArgumentIssue> issues = findTypeArgumentIssues(
-        argument, typeEnvironment, subtypeCheckMode,
+        argument, typeEnvironment, subtypeCheckMode, bottomType,
         allowSuperBounded: true);
     if (issues != null) {
       result ??= <TypeArgumentIssue>[];
@@ -426,22 +466,21 @@
 /// [BottomType] and all contravariant occurrences of `Null` and [BottomType]
 /// with `Object`.
 DartType convertSuperBoundedToRegularBounded(
-    TypeEnvironment typeEnvironment, DartType type,
+    TypeEnvironment typeEnvironment, DartType type, DartType bottomType,
     {bool isCovariant = true}) {
   if ((type is DynamicType ||
           type is VoidType ||
           isObject(typeEnvironment, type)) &&
       isCovariant) {
-    return const BottomType();
-  } else if ((type is BottomType || isNull(typeEnvironment, type)) &&
-      !isCovariant) {
+    return bottomType;
+  } else if ((type == bottomType || type is BottomType) && !isCovariant) {
     return typeEnvironment.coreTypes.objectLegacyRawType;
   } else if (type is InterfaceType && type.classNode.typeParameters != null) {
     List<DartType> replacedTypeArguments =
         new List<DartType>(type.typeArguments.length);
     for (int i = 0; i < replacedTypeArguments.length; i++) {
       replacedTypeArguments[i] = convertSuperBoundedToRegularBounded(
-          typeEnvironment, type.typeArguments[i],
+          typeEnvironment, type.typeArguments[i], bottomType,
           isCovariant: isCovariant);
     }
     return new InterfaceType(
@@ -451,20 +490,20 @@
         new List<DartType>(type.typeArguments.length);
     for (int i = 0; i < replacedTypeArguments.length; i++) {
       replacedTypeArguments[i] = convertSuperBoundedToRegularBounded(
-          typeEnvironment, type.typeArguments[i],
+          typeEnvironment, type.typeArguments[i], bottomType,
           isCovariant: isCovariant);
     }
     return new TypedefType(
         type.typedefNode, type.nullability, replacedTypeArguments);
   } else if (type is FunctionType) {
     var replacedReturnType = convertSuperBoundedToRegularBounded(
-        typeEnvironment, type.returnType,
+        typeEnvironment, type.returnType, bottomType,
         isCovariant: isCovariant);
     var replacedPositionalParameters =
         new List<DartType>(type.positionalParameters.length);
     for (int i = 0; i < replacedPositionalParameters.length; i++) {
       replacedPositionalParameters[i] = convertSuperBoundedToRegularBounded(
-          typeEnvironment, type.positionalParameters[i],
+          typeEnvironment, type.positionalParameters[i], bottomType,
           isCovariant: !isCovariant);
     }
     var replacedNamedParameters =
@@ -473,7 +512,7 @@
       replacedNamedParameters[i] = new NamedType(
           type.namedParameters[i].name,
           convertSuperBoundedToRegularBounded(
-              typeEnvironment, type.namedParameters[i].type,
+              typeEnvironment, type.namedParameters[i].type, bottomType,
               isCovariant: !isCovariant));
     }
     return new FunctionType(
@@ -491,11 +530,6 @@
       type.classNode == typeEnvironment.coreTypes.objectClass;
 }
 
-bool isNull(TypeEnvironment typeEnvironment, DartType type) {
-  return type is InterfaceType &&
-      type.classNode == typeEnvironment.nullType.classNode;
-}
-
 int computeVariance(TypeParameter typeParameter, DartType type,
     {Map<TypeParameter, Map<DartType, int>> computedVariances}) {
   computedVariances ??= new Map<TypeParameter, Map<DartType, int>>.identity();
diff --git a/pkg/kernel/lib/testing/type_parser_environment.dart b/pkg/kernel/lib/testing/type_parser_environment.dart
index 0f066b2..43b38d5 100644
--- a/pkg/kernel/lib/testing/type_parser_environment.dart
+++ b/pkg/kernel/lib/testing/type_parser_environment.dart
@@ -437,7 +437,8 @@
           ..defaultType = type;
       }
     }
-    List<DartType> defaultTypes = calculateBounds(typeParameters, objectClass);
+    List<DartType> defaultTypes = calculateBounds(typeParameters, objectClass,
+        new Library(new Uri.file("test.lib"))..isNonNullableByDefault = true);
     for (int i = 0; i < typeParameters.length; i++) {
       typeParameters[i].defaultType = defaultTypes[i];
     }
diff --git a/pkg/kernel/lib/text/ast_to_text.dart b/pkg/kernel/lib/text/ast_to_text.dart
index 72fb6e7..e3e2566 100644
--- a/pkg/kernel/lib/text/ast_to_text.dart
+++ b/pkg/kernel/lib/text/ast_to_text.dart
@@ -2294,6 +2294,16 @@
     endLine(')');
   }
 
+  visitTypeLiteralConstant(TypeLiteralConstant node) {
+    writeIndentation();
+    writeConstantReference(node);
+    writeSpaced('=');
+    writeWord('${node.runtimeType}');
+    writeSymbol('(');
+    writeNode(node.type);
+    endLine(')');
+  }
+
   visitInstanceConstant(InstanceConstant node) {
     writeIndentation();
     writeConstantReference(node);
diff --git a/pkg/kernel/test/metadata_test.dart b/pkg/kernel/test/metadata_test.dart
index 87ed4e9..a6d285a 100644
--- a/pkg/kernel/test/metadata_test.dart
+++ b/pkg/kernel/test/metadata_test.dart
@@ -25,8 +25,8 @@
   Member get member => _memberRef?.asMember;
 
   Metadata.forNode(TreeNode n)
-      : this(n.toString(), getMemberReference(getMemberForMetadata(n)),
-            getTypeForMetadata(n));
+      : this(n.leakingDebugToString(),
+            getMemberReference(getMemberForMetadata(n)), getTypeForMetadata(n));
 
   Metadata(this.string, this._memberRef, this.type);
 }
diff --git a/pkg/kernel/test/verify_test.dart b/pkg/kernel/test/verify_test.dart
index c69b044..a128818 100644
--- a/pkg/kernel/test/verify_test.dart
+++ b/pkg/kernel/test/verify_test.dart
@@ -7,10 +7,6 @@
 import 'package:kernel/verifier.dart';
 import 'package:test/test.dart';
 
-const String varRegexp = "#t[0-9]+";
-
-const String tvarRegexp = "#T[0-9]+";
-
 /// Checks that the verifier correctly find errors in invalid components.
 ///
 /// The frontend should never generate invalid components, so we have to test
@@ -19,496 +15,653 @@
 /// We mostly test negative cases here, as we get plenty of positive cases by
 /// compiling the Dart test suite with the verifier enabled.
 main() {
-  positiveTest('Test harness has no errors', (TestHarness test) {
-    test.addNode(NullLiteral());
-  });
-  negativeTest('VariableGet out of scope',
-      matches("Variable '$varRegexp' used out of scope\\."),
-      (TestHarness test) {
-    test.addNode(VariableGet(test.makeVariable()));
-  });
-  negativeTest('VariableSet out of scope',
-      matches("Variable '$varRegexp' used out of scope\\."),
-      (TestHarness test) {
-    test.addNode(VariableSet(test.makeVariable(), new NullLiteral()));
-  });
-  negativeTest('Variable block scope',
-      matches("Variable '$varRegexp' used out of scope\\."),
-      (TestHarness test) {
-    VariableDeclaration variable = test.makeVariable();
-    test.addNode(Block([
-      new Block([variable]),
-      new ReturnStatement(new VariableGet(variable))
-    ]));
-  });
-  negativeTest('Variable let scope',
-      matches("Variable '$varRegexp' used out of scope\\."),
-      (TestHarness test) {
-    VariableDeclaration variable = test.makeVariable();
-    test.addNode(LogicalExpression(new Let(variable, new VariableGet(variable)),
-        '&&', new VariableGet(variable)));
-  });
-  negativeTest('Variable redeclared',
-      matches("Variable '$varRegexp' declared more than once\\."),
-      (TestHarness test) {
-    VariableDeclaration variable = test.makeVariable();
-    test.addNode(Block([variable, variable]));
-  });
-  negativeTest('Member redeclared',
-      "Member 'test_lib::Test::field' has been declared more than once.",
-      (TestHarness test) {
-    Field field = new Field(new Name('field'), initializer: new NullLiteral());
-    test.addNode(Class(
-        name: 'Test',
-        supertype: test.objectClass.asRawSupertype,
-        fields: [field, field]));
-  });
-  negativeTest('Class redeclared',
-      "Class 'test_lib::OtherClass' declared more than once.",
-      (TestHarness test) {
-    test.addNode(
-        test.otherClass); // Test harness also adds otherClass to component.
-  });
-  negativeTest('Class type parameter redeclared',
-      matches("Type parameter 'test_lib::Test::$tvarRegexp' redeclared\\."),
-      (TestHarness test) {
-    var parameter = test.makeTypeParameter();
-    test.addNode(Class(
-        name: 'Test',
-        supertype: test.objectClass.asRawSupertype,
-        typeParameters: [parameter, parameter]));
-  });
-  negativeTest('Member type parameter redeclared',
-      matches("Type parameter '$tvarRegexp' redeclared\\."),
-      (TestHarness test) {
-    var parameter = test.makeTypeParameter();
-    test.addNode(Procedure(
-        new Name('bar'),
-        ProcedureKind.Method,
-        new FunctionNode(new ReturnStatement(new NullLiteral()),
-            typeParameters: [parameter, parameter])));
-  });
-  negativeTest(
-      'Type parameter out of scope',
-      matches("Type parameter '$tvarRegexp' referenced out of scope,"
-          " parent is: 'null'\\."), (TestHarness test) {
-    var parameter = test.makeTypeParameter();
-    test.addNode(ListLiteral([],
-        typeArgument: new TypeParameterType(parameter, Nullability.legacy)));
-  });
-  negativeTest(
-      'Class type parameter from another class',
-      "Type parameter 'test_lib::OtherClass::OtherT' referenced out of scope,"
-          " parent is: 'test_lib::OtherClass'.", (TestHarness test) {
-    test.addNode(TypeLiteral(new TypeParameterType(
-        test.otherClass.typeParameters[0], Nullability.legacy)));
-  });
-  negativeTest(
-      'Class type parameter in static method',
-      "Type parameter 'test_lib::TestClass::T' referenced from static context,"
-          " parent is: 'test_lib::TestClass'.", (TestHarness test) {
-    test.addNode(Procedure(
-        new Name('bar'),
-        ProcedureKind.Method,
-        new FunctionNode(new ReturnStatement(new TypeLiteral(
-            new TypeParameterType(
-                test.classTypeParameter, Nullability.legacy)))),
-        isStatic: true));
-  });
-  negativeTest(
-      'Class type parameter in static field',
-      "Type parameter 'test_lib::TestClass::T' referenced from static context,"
-          " parent is: 'test_lib::TestClass'.", (TestHarness test) {
-    test.addNode(Field(new Name('field'),
-        initializer: new TypeLiteral(
-            new TypeParameterType(test.classTypeParameter, Nullability.legacy)),
-        isStatic: true));
-  });
-  negativeTest(
-      'Method type parameter out of scope',
-      matches("Type parameter '$tvarRegexp' referenced out of scope,"
-          " parent is: '<FunctionNode>'\\."), (TestHarness test) {
-    var parameter = test.makeTypeParameter();
-    test.addNode(Class(
-        name: 'Test',
-        supertype: test.objectClass.asRawSupertype,
-        procedures: [
-          new Procedure(
-              new Name('generic'),
-              ProcedureKind.Method,
-              new FunctionNode(new EmptyStatement(),
-                  typeParameters: [parameter])),
-          new Procedure(
-              new Name('use'),
-              ProcedureKind.Method,
-              new FunctionNode(new ReturnStatement(new TypeLiteral(
-                  new TypeParameterType(parameter, Nullability.legacy)))))
-        ]));
-  });
-  negativeTest(
-      'Interface type arity too low',
-      "Type test_lib::OtherClass* provides 0 type arguments,"
-          " but the class declares 1 parameters.", (TestHarness test) {
-    test.addNode(TypeLiteral(
-        new InterfaceType(test.otherClass, Nullability.legacy, [])));
-  });
-  negativeTest(
-      'Interface type arity too high',
-      "Type test_lib::OtherClass<dynamic, dynamic>* provides 2 type arguments,"
-          " but the class declares 1 parameters.", (TestHarness test) {
-    test.addNode(TypeLiteral(new InterfaceType(test.otherClass,
-        Nullability.legacy, [new DynamicType(), new DynamicType()])));
-  });
-  negativeTest(
-      'Dangling interface type',
-      matches("Dangling reference to 'null::#class[0-9]+',"
-          " parent is: 'null'\\."), (TestHarness test) {
-    var orphan = new Class();
-    test.addNode(TypeLiteral(new InterfaceType(orphan, Nullability.legacy)));
-  });
-  negativeTest('Dangling field get',
-      "Dangling reference to 'null::foo', parent is: 'null'.",
-      (TestHarness test) {
-    var orphan = new Field(new Name('foo'));
-    test.addNode(DirectPropertyGet(new NullLiteral(), orphan));
-  });
-  negativeTest(
-      'Missing block parent pointer',
-      "Incorrect parent pointer on ReturnStatement:"
-          " expected 'Block', but found: 'Null'.", (TestHarness test) {
-    var block = new Block([]);
-    block.statements.add(new ReturnStatement());
-    test.addNode(block);
-  });
-  negativeTest(
-      'Missing function parent pointer',
-      "Incorrect parent pointer on FunctionNode:"
-          " expected 'Procedure', but found: 'Null'.", (TestHarness test) {
-    var procedure = new Procedure(new Name('bar'), ProcedureKind.Method, null);
-    procedure.function = new FunctionNode(new EmptyStatement());
-    test.addNode(procedure);
-  });
-  negativeTest('StaticGet without target', "StaticGet without target.",
-      (TestHarness test) {
-    test.addNode(StaticGet(null));
-  });
-  negativeTest('StaticSet without target', "StaticSet without target.",
-      (TestHarness test) {
-    test.addNode(StaticSet(null, new NullLiteral()));
-  });
-  negativeTest(
-      'StaticInvocation without target', "StaticInvocation without target.",
-      (TestHarness test) {
-    test.addNode(StaticInvocation(null, new Arguments.empty()));
-  });
-  positiveTest('Correct StaticInvocation', (TestHarness test) {
-    var method = new Procedure(
-        new Name('foo'),
-        ProcedureKind.Method,
-        new FunctionNode(new EmptyStatement(),
-            positionalParameters: [new VariableDeclaration('p')]),
-        isStatic: true);
-    test.enclosingClass.addMember(method);
-    test.addNode(StaticInvocation(method, new Arguments([new NullLiteral()])));
-  });
-  negativeTest(
-      'StaticInvocation with too many parameters',
-      "StaticInvocation with incompatible arguments for"
-          " 'test_lib::TestClass::bar'.", (TestHarness test) {
-    var method = new Procedure(new Name('bar'), ProcedureKind.Method,
-        new FunctionNode(new EmptyStatement()),
-        isStatic: true);
-    test.enclosingClass.addMember(method);
-    test.addNode(StaticInvocation(method, new Arguments([new NullLiteral()])));
-  });
-  negativeTest(
-      'StaticInvocation with too few parameters',
-      "StaticInvocation with incompatible arguments for"
-          " 'test_lib::TestClass::bar'.", (TestHarness test) {
-    var method = new Procedure(
-        new Name('bar'),
-        ProcedureKind.Method,
-        new FunctionNode(new EmptyStatement(),
-            positionalParameters: [new VariableDeclaration('p')]),
-        isStatic: true);
-    test.enclosingClass.addMember(method);
-    test.addNode(StaticInvocation(method, new Arguments.empty()));
-  });
-  negativeTest(
-      'StaticInvocation with unmatched named parameter',
-      "StaticInvocation with incompatible arguments for"
-          " 'test_lib::TestClass::bar'.", (TestHarness test) {
-    var method = new Procedure(new Name('bar'), ProcedureKind.Method,
-        new FunctionNode(new EmptyStatement()),
-        isStatic: true);
-    test.enclosingClass.addMember(method);
-    test.addNode(StaticInvocation(
-        method,
-        new Arguments([],
-            named: [new NamedExpression('p', new NullLiteral())])));
-  });
-  negativeTest(
-      'StaticInvocation with missing type argument',
-      "StaticInvocation with wrong number of type arguments for"
-          " 'test_lib::TestClass::bar'.", (TestHarness test) {
-    var method = new Procedure(
-        new Name('bar'),
-        ProcedureKind.Method,
-        new FunctionNode(new EmptyStatement(),
-            typeParameters: [test.makeTypeParameter()]),
-        isStatic: true);
-    test.enclosingClass.addMember(method);
-    test.addNode(StaticInvocation(method, new Arguments.empty()));
-  });
-  negativeTest(
-      'ConstructorInvocation with missing type argument',
-      "ConstructorInvocation with wrong number of type arguments for"
-          " 'test_lib::TestClass::foo'.", (TestHarness test) {
-    var class_ = new Class(
-        name: 'Test',
-        typeParameters: [test.makeTypeParameter()],
-        supertype: test.objectClass.asRawSupertype);
-    test.enclosingLibrary.addClass(class_);
-    var constructor = new Constructor(new FunctionNode(new EmptyStatement()),
-        name: new Name('foo'));
-    test.enclosingClass.addMember(constructor);
-    test.addNode(ConstructorInvocation(constructor, new Arguments.empty()));
-  });
-  positiveTest('Valid typedef Foo = `(C) => void`', (TestHarness test) {
-    var typedef_ = new Typedef(
-        'Foo',
-        new FunctionType(
-            [test.otherLegacyRawType], const VoidType(), Nullability.legacy));
-    test.addNode(typedef_);
-  });
-  positiveTest('Valid typedef Foo = C<dynamic>', (TestHarness test) {
-    var typedef_ = new Typedef(
-        'Foo',
-        new InterfaceType(
-            test.otherClass, Nullability.legacy, [const DynamicType()]));
-    test.addNode(typedef_);
-  });
-  positiveTest('Valid typedefs Foo = Bar, Bar = C', (TestHarness test) {
-    var foo = new Typedef('Foo', null);
-    var bar = new Typedef('Bar', null);
-    foo.type = new TypedefType(bar, Nullability.legacy);
-    bar.type = test.otherLegacyRawType;
-    test.enclosingLibrary.addTypedef(foo);
-    test.enclosingLibrary.addTypedef(bar);
-  });
-  positiveTest('Valid typedefs Foo = C<Bar>, Bar = C', (TestHarness test) {
-    var foo = new Typedef('Foo', null);
-    var bar = new Typedef('Bar', null);
-    foo.type = new InterfaceType(test.otherClass, Nullability.legacy,
-        [new TypedefType(bar, Nullability.legacy)]);
-    bar.type = test.otherLegacyRawType;
-    test.enclosingLibrary.addTypedef(foo);
-    test.enclosingLibrary.addTypedef(bar);
-  });
-  positiveTest('Valid typedef type in field', (TestHarness test) {
-    var typedef_ = new Typedef(
-        'Foo',
-        new FunctionType(
-            [test.otherLegacyRawType], const VoidType(), Nullability.legacy));
-    var field = new Field(new Name('field'),
-        type: new TypedefType(typedef_, Nullability.legacy), isStatic: true);
-    test.enclosingLibrary.addTypedef(typedef_);
-    test.enclosingLibrary.addMember(field);
-  });
-  negativeTest(
-      'Invalid typedef Foo = Foo',
-      "The typedef 'typedef Foo = test_lib::Foo;\n'"
-          " refers to itself", (TestHarness test) {
-    var typedef_ = new Typedef('Foo', null);
-    typedef_.type = new TypedefType(typedef_, Nullability.legacy);
-    test.addNode(typedef_);
-  });
-  negativeTest(
-      'Invalid typedef Foo = `(Foo) => void`',
-      "The typedef 'typedef Foo = (test_lib::Foo) →* void;\n'"
-          " refers to itself", (TestHarness test) {
-    var typedef_ = new Typedef('Foo', null);
-    typedef_.type = new FunctionType(
-        [new TypedefType(typedef_, Nullability.legacy)],
-        const VoidType(),
-        Nullability.legacy);
-    test.addNode(typedef_);
-  });
-  negativeTest(
-      'Invalid typedef Foo = `() => Foo`',
-      "The typedef 'typedef Foo = () →* test_lib::Foo;\n'"
-          " refers to itself", (TestHarness test) {
-    var typedef_ = new Typedef('Foo', null);
-    typedef_.type = new FunctionType(
-        [], new TypedefType(typedef_, Nullability.legacy), Nullability.legacy);
-    test.addNode(typedef_);
-  });
-  negativeTest(
-      'Invalid typedef Foo = C<Foo>',
-      "The typedef 'typedef Foo = test_lib::OtherClass<test_lib::Foo>*;\n'"
-          " refers to itself", (TestHarness test) {
-    var typedef_ = new Typedef('Foo', null);
-    typedef_.type = new InterfaceType(test.otherClass, Nullability.legacy,
-        [new TypedefType(typedef_, Nullability.legacy)]);
-    test.addNode(typedef_);
-  });
-  negativeTest(
-      'Invalid typedefs Foo = Bar, Bar = Foo',
-      "The typedef 'typedef Foo = test_lib::Bar;\n'"
-          " refers to itself", (TestHarness test) {
-    var foo = new Typedef('Foo', null);
-    var bar = new Typedef('Bar', null);
-    foo.type = new TypedefType(bar, Nullability.legacy);
-    bar.type = new TypedefType(foo, Nullability.legacy);
-    test.enclosingLibrary.addTypedef(foo);
-    test.enclosingLibrary.addTypedef(bar);
-  });
-  negativeTest(
-      'Invalid typedefs Foo = Bar, Bar = C<Foo>',
-      "The typedef 'typedef Foo = test_lib::Bar;\n'"
-          " refers to itself", (TestHarness test) {
-    var foo = new Typedef('Foo', null);
-    var bar = new Typedef('Bar', null);
-    foo.type = new TypedefType(bar, Nullability.legacy);
-    bar.type = new InterfaceType(test.otherClass, Nullability.legacy,
-        [new TypedefType(foo, Nullability.legacy)]);
-    test.enclosingLibrary.addTypedef(foo);
-    test.enclosingLibrary.addTypedef(bar);
-  });
-  negativeTest(
-      'Invalid typedefs Foo = C<Bar>, Bar = C<Foo>',
-      "The typedef 'typedef Foo = test_lib::OtherClass<test_lib::Bar>*;\n'"
-          " refers to itself", (TestHarness test) {
-    var foo = new Typedef('Foo', null);
-    var bar = new Typedef('Bar', null);
-    foo.type = new InterfaceType(test.otherClass, Nullability.legacy,
-        [new TypedefType(bar, Nullability.legacy)]);
-    bar.type = new InterfaceType(test.otherClass, Nullability.legacy,
-        [new TypedefType(foo, Nullability.legacy)]);
-    test.enclosingLibrary.addTypedef(foo);
-    test.enclosingLibrary.addTypedef(bar);
-  });
-  positiveTest('Valid long typedefs C20 = C19 = ... = C1 = C0 = dynamic',
-      (TestHarness test) {
-    var typedef_ = new Typedef('C0', const DynamicType());
-    test.enclosingLibrary.addTypedef(typedef_);
-    for (int i = 1; i < 20; ++i) {
-      typedef_ =
-          new Typedef('C$i', new TypedefType(typedef_, Nullability.legacy));
+  positiveTest(
+    'Test harness has no errors',
+    (TestHarness test) {
+      test.addNode(NullLiteral());
+    },
+  );
+  negative1Test(
+    'VariableGet out of scope',
+    (TestHarness test) {
+      VariableDeclaration node = test.makeVariable();
+      test.addNode(VariableGet(node));
+      return node;
+    },
+    (Node node) => matches("Variable '$node' used out of scope\\."),
+  );
+  negative1Test(
+    'VariableSet out of scope',
+    (TestHarness test) {
+      VariableDeclaration variable = test.makeVariable();
+      test.addNode(VariableSet(variable, new NullLiteral()));
+      return variable;
+    },
+    (Node node) => matches("Variable '$node' used out of scope\\."),
+  );
+  negative1Test(
+    'Variable block scope',
+    (TestHarness test) {
+      VariableDeclaration variable = test.makeVariable();
+      test.addNode(Block([
+        new Block([variable]),
+        new ReturnStatement(new VariableGet(variable))
+      ]));
+      return variable;
+    },
+    (Node node) => matches("Variable '$node' used out of scope\\."),
+  );
+  negative1Test(
+    'Variable let scope',
+    (TestHarness test) {
+      VariableDeclaration variable = test.makeVariable();
+      test.addNode(LogicalExpression(
+          new Let(variable, new VariableGet(variable)),
+          '&&',
+          new VariableGet(variable)));
+      return variable;
+    },
+    (Node node) => matches("Variable '$node' used out of scope\\."),
+  );
+  negative1Test(
+    'Variable redeclared',
+    (TestHarness test) {
+      VariableDeclaration variable = test.makeVariable();
+      test.addNode(Block([variable, variable]));
+      return variable;
+    },
+    (Node node) => matches("Variable '$node' declared more than once\\."),
+  );
+  negative1Test(
+    'Member redeclared',
+    (TestHarness test) {
+      Field field =
+          new Field(new Name('field'), initializer: new NullLiteral());
+      test.addNode(Class(
+          name: 'Test',
+          supertype: test.objectClass.asRawSupertype,
+          fields: [field, field]));
+      return field;
+    },
+    (Node node) => "Member '$node' has been declared more than once.",
+  );
+  negative1Test(
+    'Class redeclared',
+    (TestHarness test) {
+      Class otherClass = test.otherClass;
+      test.addNode(
+          otherClass); // Test harness also adds otherClass to component.
+      return test.otherClass;
+    },
+    (Node node) => "Class '$node' declared more than once.",
+  );
+  negative1Test(
+    'Class type parameter redeclared',
+    (TestHarness test) {
+      TypeParameter parameter = test.makeTypeParameter();
+      test.addNode(Class(
+          name: 'Test',
+          supertype: test.objectClass.asRawSupertype,
+          typeParameters: [parameter, parameter]));
+      return parameter;
+    },
+    (Node node) => matches("Type parameter '$node' redeclared\\."),
+  );
+  negative1Test(
+    'Member type parameter redeclared',
+    (TestHarness test) {
+      TypeParameter parameter = test.makeTypeParameter();
+      test.addNode(Procedure(
+          new Name('bar'),
+          ProcedureKind.Method,
+          new FunctionNode(new ReturnStatement(new NullLiteral()),
+              typeParameters: [parameter, parameter])));
+
+      return parameter;
+    },
+    (Node node) => matches("Type parameter '$node' redeclared\\."),
+  );
+  negative2Test(
+    'Type parameter out of scope',
+    (TestHarness test) {
+      TypeParameter parameter = test.makeTypeParameter();
+      test.addNode(ListLiteral([],
+          typeArgument: new TypeParameterType(parameter, Nullability.legacy)));
+      return [parameter, null];
+    },
+    (Node node, Node parent) =>
+        matches("Type parameter '$node' referenced out of scope,"
+            " parent is: '$parent'\\."),
+  );
+  negative2Test(
+    'Class type parameter from another class',
+    (TestHarness test) {
+      TypeParameter node = test.otherClass.typeParameters[0];
+      test.addNode(
+          TypeLiteral(new TypeParameterType(node, Nullability.legacy)));
+      return [node, test.otherClass];
+    },
+    (Node node, Node parent) =>
+        "Type parameter '$node' referenced out of scope,"
+        " parent is: '$parent'.",
+  );
+  negative2Test(
+    'Class type parameter in static method',
+    (TestHarness test) {
+      TypeParameter node = test.classTypeParameter;
+      test.addNode(Procedure(
+          new Name('bar'),
+          ProcedureKind.Method,
+          new FunctionNode(new ReturnStatement(new TypeLiteral(
+              new TypeParameterType(node, Nullability.legacy)))),
+          isStatic: true));
+
+      return [node, test.enclosingClass];
+    },
+    (Node node, Node parent) =>
+        "Type parameter '$node' referenced from static context,"
+        " parent is: '$parent'.",
+  );
+  negative2Test(
+    'Class type parameter in static field',
+    (TestHarness test) {
+      TypeParameter node = test.classTypeParameter;
+      test.addNode(Field(new Name('field'),
+          initializer:
+              new TypeLiteral(new TypeParameterType(node, Nullability.legacy)),
+          isStatic: true));
+      return [node, test.enclosingClass];
+    },
+    (Node node, Node parent) =>
+        "Type parameter '$node' referenced from static context,"
+        " parent is: '$parent'.",
+  );
+  negative2Test(
+    'Method type parameter out of scope',
+    (TestHarness test) {
+      TypeParameter parameter = test.makeTypeParameter();
+      FunctionNode parent =
+          new FunctionNode(new EmptyStatement(), typeParameters: [parameter]);
+      test.addNode(Class(
+          name: 'Test',
+          supertype: test.objectClass.asRawSupertype,
+          procedures: [
+            new Procedure(new Name('generic'), ProcedureKind.Method, parent),
+            new Procedure(
+                new Name('use'),
+                ProcedureKind.Method,
+                new FunctionNode(new ReturnStatement(new TypeLiteral(
+                    new TypeParameterType(parameter, Nullability.legacy)))))
+          ]));
+
+      return [parameter, parent];
+    },
+    (Node node, Node parent) =>
+        "Type parameter '$node' referenced out of scope,"
+        " parent is: '$parent'.",
+  );
+  negative1Test(
+    'Interface type arity too low',
+    (TestHarness test) {
+      InterfaceType node =
+          new InterfaceType(test.otherClass, Nullability.legacy, []);
+      test.addNode(TypeLiteral(node));
+      return node;
+    },
+    (Node node) => "Type $node provides 0 type arguments,"
+        " but the class declares 1 parameters.",
+  );
+  negative1Test(
+    'Interface type arity too high',
+    (TestHarness test) {
+      InterfaceType node = new InterfaceType(test.otherClass,
+          Nullability.legacy, [new DynamicType(), new DynamicType()]);
+      test.addNode(TypeLiteral(node));
+      return node;
+    },
+    (Node node) => "Type $node provides 2 type arguments,"
+        " but the class declares 1 parameters.",
+  );
+  negative1Test(
+    'Dangling interface type',
+    (TestHarness test) {
+      Class orphan = new Class();
+      test.addNode(
+          new TypeLiteral(new InterfaceType(orphan, Nullability.legacy)));
+      return orphan;
+    },
+    (Node node) => "Dangling reference to '$node', parent is: 'null'.",
+  );
+  negative1Test(
+    'Dangling field get',
+    (TestHarness test) {
+      Field orphan = new Field(new Name('foo'));
+      test.addNode(new DirectPropertyGet(new NullLiteral(), orphan));
+      return orphan;
+    },
+    (Node node) => "Dangling reference to '$node', parent is: 'null'.",
+  );
+  simpleNegativeTest(
+    'Missing block parent pointer',
+    "Incorrect parent pointer on ReturnStatement:"
+        " expected 'Block', but found: 'Null'.",
+    (TestHarness test) {
+      var block = new Block([]);
+      block.statements.add(new ReturnStatement());
+      test.addNode(block);
+    },
+  );
+  simpleNegativeTest(
+    'Missing function parent pointer',
+    "Incorrect parent pointer on FunctionNode:"
+        " expected 'Procedure', but found: 'Null'.",
+    (TestHarness test) {
+      var procedure =
+          new Procedure(new Name('bar'), ProcedureKind.Method, null);
+      procedure.function = new FunctionNode(new EmptyStatement());
+      test.addNode(procedure);
+    },
+  );
+  simpleNegativeTest(
+    'StaticGet without target',
+    "StaticGet without target.",
+    (TestHarness test) {
+      test.addNode(StaticGet(null));
+    },
+  );
+  simpleNegativeTest(
+    'StaticSet without target',
+    "StaticSet without target.",
+    (TestHarness test) {
+      test.addNode(StaticSet(null, new NullLiteral()));
+    },
+  );
+  simpleNegativeTest(
+    'StaticInvocation without target',
+    "StaticInvocation without target.",
+    (TestHarness test) {
+      test.addNode(StaticInvocation(null, new Arguments.empty()));
+    },
+  );
+  positiveTest(
+    'Correct StaticInvocation',
+    (TestHarness test) {
+      var method = new Procedure(
+          new Name('foo'),
+          ProcedureKind.Method,
+          new FunctionNode(new EmptyStatement(),
+              positionalParameters: [new VariableDeclaration('p')]),
+          isStatic: true);
+      test.enclosingClass.addMember(method);
+      test.addNode(
+          StaticInvocation(method, new Arguments([new NullLiteral()])));
+    },
+  );
+  negative1Test(
+    'StaticInvocation with too many parameters',
+    (TestHarness test) {
+      var method = new Procedure(new Name('bar'), ProcedureKind.Method,
+          new FunctionNode(new EmptyStatement()),
+          isStatic: true);
+      test.enclosingClass.addMember(method);
+      test.addNode(
+          StaticInvocation(method, new Arguments([new NullLiteral()])));
+      return method;
+    },
+    (Node node) => "StaticInvocation with incompatible arguments for"
+        " '$node'.",
+  );
+  negative1Test(
+    'StaticInvocation with too few parameters',
+    (TestHarness test) {
+      var method = new Procedure(
+          new Name('bar'),
+          ProcedureKind.Method,
+          new FunctionNode(new EmptyStatement(),
+              positionalParameters: [new VariableDeclaration('p')]),
+          isStatic: true);
+      test.enclosingClass.addMember(method);
+      test.addNode(StaticInvocation(method, new Arguments.empty()));
+      return method;
+    },
+    (Node node) => "StaticInvocation with incompatible arguments for '$node'.",
+  );
+  negative1Test(
+    'StaticInvocation with unmatched named parameter',
+    (TestHarness test) {
+      var method = new Procedure(new Name('bar'), ProcedureKind.Method,
+          new FunctionNode(new EmptyStatement()),
+          isStatic: true);
+      test.enclosingClass.addMember(method);
+      test.addNode(StaticInvocation(
+          method,
+          new Arguments([],
+              named: [new NamedExpression('p', new NullLiteral())])));
+      return method;
+    },
+    (Node node) => "StaticInvocation with incompatible arguments for"
+        " '$node'.",
+  );
+  negative1Test(
+    'StaticInvocation with missing type argument',
+    (TestHarness test) {
+      Procedure method = new Procedure(
+          new Name('bar'),
+          ProcedureKind.Method,
+          new FunctionNode(new EmptyStatement(),
+              typeParameters: [test.makeTypeParameter()]),
+          isStatic: true);
+      test.enclosingClass.addMember(method);
+      test.addNode(StaticInvocation(method, new Arguments.empty()));
+      return method;
+    },
+    (Node node) => "StaticInvocation with wrong number of type arguments for"
+        " '$node'.",
+  );
+  negative1Test(
+    'ConstructorInvocation with missing type argument',
+    (TestHarness test) {
+      var constructor = new Constructor(new FunctionNode(new EmptyStatement()),
+          name: new Name('foo'));
+      test.enclosingClass.addMember(constructor);
+      test.addNode(ConstructorInvocation(constructor, new Arguments.empty()));
+      return constructor;
+    },
+    (Node node) =>
+        "ConstructorInvocation with wrong number of type arguments for"
+        " '$node'.",
+  );
+  positiveTest(
+    'Valid typedef Foo = `(C) => void`',
+    (TestHarness test) {
+      var typedef_ = new Typedef(
+          'Foo',
+          new FunctionType(
+              [test.otherLegacyRawType], const VoidType(), Nullability.legacy));
+      test.addNode(typedef_);
+    },
+  );
+  positiveTest(
+    'Valid typedef Foo = C<dynamic>',
+    (TestHarness test) {
+      var typedef_ = new Typedef(
+          'Foo',
+          new InterfaceType(
+              test.otherClass, Nullability.legacy, [const DynamicType()]));
+      test.addNode(typedef_);
+    },
+  );
+  positiveTest(
+    'Valid typedefs Foo = Bar, Bar = C',
+    (TestHarness test) {
+      var foo = new Typedef('Foo', null);
+      var bar = new Typedef('Bar', null);
+      foo.type = new TypedefType(bar, Nullability.legacy);
+      bar.type = test.otherLegacyRawType;
+      test.enclosingLibrary.addTypedef(foo);
+      test.enclosingLibrary.addTypedef(bar);
+    },
+  );
+  positiveTest(
+    'Valid typedefs Foo = C<Bar>, Bar = C',
+    (TestHarness test) {
+      var foo = new Typedef('Foo', null);
+      var bar = new Typedef('Bar', null);
+      foo.type = new InterfaceType(test.otherClass, Nullability.legacy,
+          [new TypedefType(bar, Nullability.legacy)]);
+      bar.type = test.otherLegacyRawType;
+      test.enclosingLibrary.addTypedef(foo);
+      test.enclosingLibrary.addTypedef(bar);
+    },
+  );
+  positiveTest(
+    'Valid typedef type in field',
+    (TestHarness test) {
+      var typedef_ = new Typedef(
+          'Foo',
+          new FunctionType(
+              [test.otherLegacyRawType], const VoidType(), Nullability.legacy));
+      var field = new Field(new Name('field'),
+          type: new TypedefType(typedef_, Nullability.legacy), isStatic: true);
       test.enclosingLibrary.addTypedef(typedef_);
-    }
-  });
-  negativeTest(
-      'Invalid long typedefs C20 = C19 = ... = C1 = C0 = C20',
-      "The typedef 'typedef C0 = test_lib::C19;\n'"
-          " refers to itself", (TestHarness test) {
-    var typedef_ = new Typedef('C0', null);
-    test.enclosingLibrary.addTypedef(typedef_);
-    var first = typedef_;
-    for (int i = 1; i < 20; ++i) {
-      typedef_ =
-          new Typedef('C$i', new TypedefType(typedef_, Nullability.legacy));
+      test.enclosingLibrary.addMember(field);
+    },
+  );
+  negative1Test(
+    'Invalid typedef Foo = Foo',
+    (TestHarness test) {
+      var typedef_ = new Typedef('Foo', null);
+      typedef_.type = new TypedefType(typedef_, Nullability.legacy);
+      test.addNode(typedef_);
+      return typedef_;
+    },
+    (Node node) => "The typedef '$node' refers to itself",
+  );
+  negative1Test(
+    'Invalid typedef Foo = `(Foo) => void`',
+    (TestHarness test) {
+      var typedef_ = new Typedef('Foo', null);
+      typedef_.type = new FunctionType(
+          [new TypedefType(typedef_, Nullability.legacy)],
+          const VoidType(),
+          Nullability.legacy);
+      test.addNode(typedef_);
+      return typedef_;
+    },
+    (Node node) => "The typedef '$node' refers to itself",
+  );
+  negative1Test(
+    'Invalid typedef Foo = `() => Foo`',
+    (TestHarness test) {
+      var typedef_ = new Typedef('Foo', null);
+      typedef_.type = new FunctionType([],
+          new TypedefType(typedef_, Nullability.legacy), Nullability.legacy);
+      test.addNode(typedef_);
+      return typedef_;
+    },
+    (Node node) => "The typedef '$node' refers to itself",
+  );
+  negative1Test(
+    'Invalid typedef Foo = C<Foo>',
+    (TestHarness test) {
+      var typedef_ = new Typedef('Foo', null);
+      typedef_.type = new InterfaceType(test.otherClass, Nullability.legacy,
+          [new TypedefType(typedef_, Nullability.legacy)]);
+      test.addNode(typedef_);
+      return typedef_;
+    },
+    (Node node) => "The typedef '$node' refers to itself",
+  );
+  negative1Test(
+    'Invalid typedefs Foo = Bar, Bar = Foo',
+    (TestHarness test) {
+      var foo = new Typedef('Foo', null);
+      var bar = new Typedef('Bar', null);
+      foo.type = new TypedefType(bar, Nullability.legacy);
+      bar.type = new TypedefType(foo, Nullability.legacy);
+      test.enclosingLibrary.addTypedef(foo);
+      test.enclosingLibrary.addTypedef(bar);
+      return foo;
+    },
+    (Node foo) => "The typedef '$foo' refers to itself",
+  );
+  negative1Test(
+    'Invalid typedefs Foo = Bar, Bar = C<Foo>',
+    (TestHarness test) {
+      var foo = new Typedef('Foo', null);
+      var bar = new Typedef('Bar', null);
+      foo.type = new TypedefType(bar, Nullability.legacy);
+      bar.type = new InterfaceType(test.otherClass, Nullability.legacy,
+          [new TypedefType(foo, Nullability.legacy)]);
+      test.enclosingLibrary.addTypedef(foo);
+      test.enclosingLibrary.addTypedef(bar);
+      return foo;
+    },
+    (Node foo) => "The typedef '$foo' refers to itself",
+  );
+  negative1Test(
+    'Invalid typedefs Foo = C<Bar>, Bar = C<Foo>',
+    (TestHarness test) {
+      var foo = new Typedef('Foo', null);
+      var bar = new Typedef('Bar', null);
+      foo.type = new InterfaceType(test.otherClass, Nullability.legacy,
+          [new TypedefType(bar, Nullability.legacy)]);
+      bar.type = new InterfaceType(test.otherClass, Nullability.legacy,
+          [new TypedefType(foo, Nullability.legacy)]);
+      test.enclosingLibrary.addTypedef(foo);
+      test.enclosingLibrary.addTypedef(bar);
+      return foo;
+    },
+    (Node foo) => "The typedef '$foo' refers to itself",
+  );
+  positiveTest(
+    'Valid long typedefs C20 = C19 = ... = C1 = C0 = dynamic',
+    (TestHarness test) {
+      var typedef_ = new Typedef('C0', const DynamicType());
       test.enclosingLibrary.addTypedef(typedef_);
-    }
-    first.type = new TypedefType(typedef_, Nullability.legacy);
-  });
-  positiveTest('Valid typedef Foo<T extends C> = C<T>', (TestHarness test) {
-    var param = new TypeParameter('T', test.otherLegacyRawType);
-    var foo = new Typedef(
-        'Foo',
-        new InterfaceType(test.otherClass, Nullability.legacy,
-            [new TypeParameterType(param, Nullability.legacy)]),
-        typeParameters: [param]);
-    test.addNode(foo);
-  });
-  positiveTest('Valid typedef Foo<T extends C<T>> = C<T>', (TestHarness test) {
-    var param = new TypeParameter('T', test.otherLegacyRawType);
-    param.bound = new InterfaceType(test.otherClass, Nullability.legacy,
-        [new TypeParameterType(param, Nullability.legacy)]);
-    var foo = new Typedef(
-        'Foo',
-        new InterfaceType(test.otherClass, Nullability.legacy,
-            [new TypeParameterType(param, Nullability.legacy)]),
-        typeParameters: [param]);
-    test.addNode(foo);
-  });
-  positiveTest('Valid typedef Foo<T> = dynamic, Bar<T extends Foo<T>> = C<T>',
-      (TestHarness test) {
-    var fooParam = test.makeTypeParameter('T');
-    var foo =
-        new Typedef('Foo', const DynamicType(), typeParameters: [fooParam]);
-    var barParam = new TypeParameter('T', null);
-    barParam.bound = new TypedefType(foo, Nullability.legacy,
-        [new TypeParameterType(barParam, Nullability.legacy)]);
-    var bar = new Typedef(
-        'Bar',
-        new InterfaceType(test.otherClass, Nullability.legacy,
-            [new TypeParameterType(barParam, Nullability.legacy)]),
-        typeParameters: [barParam]);
-    test.enclosingLibrary.addTypedef(foo);
-    test.enclosingLibrary.addTypedef(bar);
-  });
-  negativeTest(
-      'Invalid typedefs Foo<T extends Bar<T>>, Bar<T extends Foo<T>>',
-      "The typedef 'typedef Foo<T extends test_lib::Bar<T*>> = dynamic;\n'"
-          " refers to itself", (TestHarness test) {
-    var fooParam = test.makeTypeParameter('T');
-    var foo =
-        new Typedef('Foo', const DynamicType(), typeParameters: [fooParam]);
-    var barParam = new TypeParameter('T', null);
-    barParam.bound = new TypedefType(foo, Nullability.legacy,
-        [new TypeParameterType(barParam, Nullability.legacy)]);
-    var bar = new Typedef(
-        'Bar',
-        new InterfaceType(test.otherClass, Nullability.legacy,
-            [new TypeParameterType(barParam, Nullability.legacy)]),
-        typeParameters: [barParam]);
-    fooParam.bound = new TypedefType(bar, Nullability.legacy,
-        [new TypeParameterType(fooParam, Nullability.legacy)]);
-    test.enclosingLibrary.addTypedef(foo);
-    test.enclosingLibrary.addTypedef(bar);
-  });
-  negativeTest(
-      'Invalid typedef Foo<T extends Foo<dynamic> = C<T>',
-      "The typedef 'typedef Foo<T extends test_lib::Foo<dynamic>> = "
-          "test_lib::OtherClass<T*>*;\n'"
-          " refers to itself", (TestHarness test) {
-    var param = new TypeParameter('T', null);
-    var foo = new Typedef(
-        'Foo',
-        new InterfaceType(test.otherClass, Nullability.legacy,
-            [new TypeParameterType(param, Nullability.legacy)]),
-        typeParameters: [param]);
-    param.bound =
-        new TypedefType(foo, Nullability.legacy, [const DynamicType()]);
-    test.addNode(foo);
-  });
-  negativeTest(
-      'Typedef arity error',
-      "The typedef type test_lib::Foo provides 0 type arguments,"
-          " but the typedef declares 1 parameters.", (TestHarness test) {
-    var param = test.makeTypeParameter('T');
-    var foo =
-        new Typedef('Foo', test.otherLegacyRawType, typeParameters: [param]);
-    var field = new Field(new Name('field'),
-        type: new TypedefType(foo, Nullability.legacy, []), isStatic: true);
-    test.enclosingLibrary.addTypedef(foo);
-    test.enclosingLibrary.addMember(field);
-  });
-  negativeTest(
-      'Dangling typedef reference',
-      "Dangling reference to 'typedef Foo = test_lib::OtherClass<dynamic>*;\n'"
-          ", parent is: 'null'", (TestHarness test) {
-    var foo = new Typedef('Foo', test.otherLegacyRawType, typeParameters: []);
-    var field = new Field(new Name('field'),
-        type: new TypedefType(foo, Nullability.legacy, []), isStatic: true);
-    test.enclosingLibrary.addMember(field);
-  });
-  negativeTest('Non-static top-level field',
-      "The top-level field 'field' should be static", (TestHarness test) {
-    var field = new Field(new Name('field'));
-    test.enclosingLibrary.addMember(field);
-  });
+      for (int i = 1; i < 20; ++i) {
+        typedef_ =
+            new Typedef('C$i', new TypedefType(typedef_, Nullability.legacy));
+        test.enclosingLibrary.addTypedef(typedef_);
+      }
+    },
+  );
+  negative1Test(
+    'Invalid long typedefs C20 = C19 = ... = C1 = C0 = C20',
+    (TestHarness test) {
+      Typedef firstTypedef = new Typedef('C0', null);
+      Typedef typedef_ = firstTypedef;
+      test.enclosingLibrary.addTypedef(typedef_);
+      var first = typedef_;
+      for (int i = 1; i < 20; ++i) {
+        typedef_ =
+            new Typedef('C$i', new TypedefType(typedef_, Nullability.legacy));
+        test.enclosingLibrary.addTypedef(typedef_);
+      }
+      first.type = new TypedefType(typedef_, Nullability.legacy);
+      return firstTypedef;
+    },
+    (Node node) => "The typedef '$node' refers to itself",
+  );
+  positiveTest(
+    'Valid typedef Foo<T extends C> = C<T>',
+    (TestHarness test) {
+      var param = new TypeParameter('T', test.otherLegacyRawType);
+      var foo = new Typedef(
+          'Foo',
+          new InterfaceType(test.otherClass, Nullability.legacy,
+              [new TypeParameterType(param, Nullability.legacy)]),
+          typeParameters: [param]);
+      test.addNode(foo);
+    },
+  );
+  positiveTest(
+    'Valid typedef Foo<T extends C<T>> = C<T>',
+    (TestHarness test) {
+      var param = new TypeParameter('T', test.otherLegacyRawType);
+      param.bound = new InterfaceType(test.otherClass, Nullability.legacy,
+          [new TypeParameterType(param, Nullability.legacy)]);
+      var foo = new Typedef(
+          'Foo',
+          new InterfaceType(test.otherClass, Nullability.legacy,
+              [new TypeParameterType(param, Nullability.legacy)]),
+          typeParameters: [param]);
+      test.addNode(foo);
+    },
+  );
+  positiveTest(
+    'Valid typedef Foo<T> = dynamic, Bar<T extends Foo<T>> = C<T>',
+    (TestHarness test) {
+      var fooParam = test.makeTypeParameter('T');
+      var foo =
+          new Typedef('Foo', const DynamicType(), typeParameters: [fooParam]);
+      var barParam = new TypeParameter('T', null);
+      barParam.bound = new TypedefType(foo, Nullability.legacy,
+          [new TypeParameterType(barParam, Nullability.legacy)]);
+      var bar = new Typedef(
+          'Bar',
+          new InterfaceType(test.otherClass, Nullability.legacy,
+              [new TypeParameterType(barParam, Nullability.legacy)]),
+          typeParameters: [barParam]);
+      test.enclosingLibrary.addTypedef(foo);
+      test.enclosingLibrary.addTypedef(bar);
+    },
+  );
+  negative1Test(
+    'Invalid typedefs Foo<T extends Bar<T>>, Bar<T extends Foo<T>>',
+    (TestHarness test) {
+      var fooParam = test.makeTypeParameter('T');
+      var foo =
+          new Typedef('Foo', const DynamicType(), typeParameters: [fooParam]);
+      var barParam = new TypeParameter('T', null);
+      barParam.bound = new TypedefType(foo, Nullability.legacy,
+          [new TypeParameterType(barParam, Nullability.legacy)]);
+      var bar = new Typedef(
+          'Bar',
+          new InterfaceType(test.otherClass, Nullability.legacy,
+              [new TypeParameterType(barParam, Nullability.legacy)]),
+          typeParameters: [barParam]);
+      fooParam.bound = new TypedefType(bar, Nullability.legacy,
+          [new TypeParameterType(fooParam, Nullability.legacy)]);
+      test.enclosingLibrary.addTypedef(foo);
+      test.enclosingLibrary.addTypedef(bar);
+      return foo;
+    },
+    (Node foo) => "The typedef '$foo' refers to itself",
+  );
+  negative1Test(
+    'Invalid typedef Foo<T extends Foo<dynamic> = C<T>',
+    (TestHarness test) {
+      var param = new TypeParameter('T', null);
+      var foo = new Typedef(
+          'Foo',
+          new InterfaceType(test.otherClass, Nullability.legacy,
+              [new TypeParameterType(param, Nullability.legacy)]),
+          typeParameters: [param]);
+      param.bound =
+          new TypedefType(foo, Nullability.legacy, [const DynamicType()]);
+      test.addNode(foo);
+      return foo;
+    },
+    (Node foo) => "The typedef '$foo' refers to itself",
+  );
+  negative1Test(
+    'Typedef arity error',
+    (TestHarness test) {
+      var param = test.makeTypeParameter('T');
+      var foo =
+          new Typedef('Foo', test.otherLegacyRawType, typeParameters: [param]);
+      var typedefType = new TypedefType(foo, Nullability.legacy, []);
+      var field =
+          new Field(new Name('field'), type: typedefType, isStatic: true);
+      test.enclosingLibrary.addTypedef(foo);
+      test.enclosingLibrary.addMember(field);
+      return typedefType;
+    },
+    (Node typedefType) =>
+        "The typedef type $typedefType provides 0 type arguments,"
+        " but the typedef declares 1 parameters.",
+  );
+  negative1Test(
+    'Dangling typedef reference',
+    (TestHarness test) {
+      var foo = new Typedef('Foo', test.otherLegacyRawType, typeParameters: []);
+      var field = new Field(new Name('field'),
+          type: new TypedefType(foo, Nullability.legacy, []), isStatic: true);
+      test.enclosingLibrary.addMember(field);
+      return foo;
+    },
+    (Node foo) => "Dangling reference to '$foo', parent is: 'null'",
+  );
+  negative1Test(
+    'Non-static top-level field',
+    (TestHarness test) {
+      var field = new Field(new Name('field'));
+      test.enclosingLibrary.addMember(field);
+      return null;
+    },
+    (Node node) => "The top-level field 'field' should be static",
+  );
 }
 
 checkHasError(Component component, Matcher matcher) {
@@ -620,21 +773,61 @@
   }
 }
 
-negativeTest(String name, matcher, void makeTestCase(TestHarness test)) {
-  if (matcher is String) {
-    matcher = equals(matcher);
-  }
-  test(name, () {
-    var test = new TestHarness();
-    makeTestCase(test);
-    checkHasError(test.component, matcher);
-  });
+negative1Test(String name, Node Function(TestHarness test) nodeProvider,
+    dynamic Function(Node node) matcher) {
+  TestHarness testHarness = new TestHarness();
+  Node node = nodeProvider(testHarness);
+  test(
+    name,
+    () {
+      dynamic matcherResult = matcher(node);
+      if (matcherResult is String) {
+        matcherResult = equals(matcherResult);
+      }
+      checkHasError(testHarness.component, matcherResult);
+    },
+  );
+}
+
+negative2Test(String name, List<Node> Function(TestHarness test) nodeProvider,
+    dynamic Function(Node node, Node other) matcher) {
+  TestHarness testHarness = new TestHarness();
+  List<Node> nodes = nodeProvider(testHarness);
+  if (nodes.length != 2) throw "Needs exactly 2 nodes: Node and other!";
+  test(
+    name,
+    () {
+      dynamic matcherResult = matcher(nodes[0], nodes[1]);
+      if (matcherResult is String) {
+        matcherResult = equals(matcherResult);
+      }
+      checkHasError(testHarness.component, matcherResult);
+    },
+  );
+}
+
+simpleNegativeTest(String name, dynamic matcher,
+    void Function(TestHarness test) makeTestCase) {
+  TestHarness testHarness = new TestHarness();
+  test(
+    name,
+    () {
+      makeTestCase(testHarness);
+      if (matcher is String) {
+        matcher = equals(matcher);
+      }
+      checkHasError(testHarness.component, matcher);
+    },
+  );
 }
 
 positiveTest(String name, void makeTestCase(TestHarness test)) {
-  test(name, () {
-    var test = new TestHarness();
-    makeTestCase(test);
-    verifyComponent(test.component);
-  });
+  test(
+    name,
+    () {
+      var test = new TestHarness();
+      makeTestCase(test);
+      verifyComponent(test.component);
+    },
+  );
 }
diff --git a/pkg/native_stack_traces/CHANGELOG.md b/pkg/native_stack_traces/CHANGELOG.md
index de635af..c6fb8b8 100644
--- a/pkg/native_stack_traces/CHANGELOG.md
+++ b/pkg/native_stack_traces/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Changelog
 
+## 0.3.0
+
+- Adds handling of virtual addresses within stub code payloads.
+
 ## 0.2.2
 
 - Finds instruction sections by the dynamic symbols the Dart VM creates instead
diff --git a/pkg/native_stack_traces/bin/decode.dart b/pkg/native_stack_traces/bin/decode.dart
index fe59643..4b864c0 100644
--- a/pkg/native_stack_traces/bin/decode.dart
+++ b/pkg/native_stack_traces/bin/decode.dart
@@ -10,36 +10,36 @@
 import 'package:path/path.dart' as path;
 import 'package:native_stack_traces/native_stack_traces.dart';
 
-final ArgParser _translateParser = ArgParser(allowTrailingOptions: true)
+ArgParser _createBaseDebugParser(ArgParser parser) => parser
   ..addOption('debug',
       abbr: 'd',
       help: 'Filename containing debugging information (REQUIRED)',
       valueHelp: 'FILE')
-  ..addOption('input',
-      abbr: 'i', help: 'Filename for processed input', valueHelp: 'FILE')
-  ..addOption('output',
-      abbr: 'o', help: 'Filename for generated output', valueHelp: 'FILE')
-  ..addFlag('verbose',
-      abbr: 'v',
-      negatable: false,
-      help: 'Translate all frames, not just user or library code frames');
-
-final ArgParser _findParser = ArgParser(allowTrailingOptions: true)
-  ..addOption('debug',
-      abbr: 'd',
-      help: 'Filename containing debugging information (REQUIRED)',
-      valueHelp: 'FILE')
-  ..addMultiOption('location',
-      abbr: 'l', help: 'PC address to find', valueHelp: 'PC')
   ..addFlag('verbose',
       abbr: 'v',
       negatable: false,
       help: 'Translate all frames, not just user or library code frames')
-  ..addOption('vm_start',
-      help: 'Absolute address for start of VM instructions', valueHelp: 'PC')
-  ..addOption('isolate_start',
-      help: 'Absolute address for start of isolate instructions',
-      valueHelp: 'PC');
+  ..addFlag('dump_debug_file_contents',
+      negatable: false,
+      help: 'Dump all the parsed information from the debugging file');
+
+final ArgParser _translateParser =
+    _createBaseDebugParser(ArgParser(allowTrailingOptions: true))
+      ..addOption('input',
+          abbr: 'i', help: 'Filename for processed input', valueHelp: 'FILE')
+      ..addOption('output',
+          abbr: 'o', help: 'Filename for generated output', valueHelp: 'FILE');
+
+final ArgParser _findParser =
+    _createBaseDebugParser(ArgParser(allowTrailingOptions: true))
+      ..addMultiOption('location',
+          abbr: 'l', help: 'PC address to find', valueHelp: 'PC')
+      ..addOption('vm_start',
+          help: 'Absolute address for start of VM instructions',
+          valueHelp: 'PC')
+      ..addOption('isolate_start',
+          help: 'Absolute address for start of isolate instructions',
+          valueHelp: 'PC');
 
 final ArgParser _helpParser = ArgParser(allowTrailingOptions: true);
 
@@ -141,14 +141,34 @@
   }
 }
 
+Dwarf _loadFromFile(String original, Function(String) usageError) {
+  if (original == null) {
+    usageError('must provide -d/--debug');
+    return null;
+  }
+  final filename = path.canonicalize(path.normalize(original));
+  if (!io.File(filename).existsSync()) {
+    usageError('debug file "$original" does not exist');
+    return null;
+  }
+  final dwarf = Dwarf.fromFile(filename);
+  if (dwarf == null) {
+    usageError('file "$original" does not contain debugging information');
+  }
+  return dwarf;
+}
+
 void find(ArgResults options) {
   void usageError(String message) => errorWithUsage(message, command: 'find');
   int convertAddress(String s) => int.tryParse(s, radix: 16);
 
-  if (options['debug'] == null) {
-    return usageError('must provide -d/--debug');
+  final dwarf = _loadFromFile(options['debug'], usageError);
+  if (dwarf == null) {
+    return;
   }
-  final dwarf = Dwarf.fromFile(options['debug']);
+  if (options['dump_debug_file_contents']) {
+    print(dwarf.dumpFileInfo());
+  }
   final verbose = options['verbose'];
 
   int vm_start;
@@ -215,11 +235,13 @@
   void usageError(String message) =>
       errorWithUsage(message, command: 'translate');
 
-  if (options['debug'] == null) {
-    return usageError('must provide -d/--debug');
+  final dwarf = _loadFromFile(options['debug'], usageError);
+  if (dwarf == null) {
+    return;
   }
-  final dwarf =
-      Dwarf.fromFile(path.canonicalize(path.normalize(options['debug'])));
+  if (options['dump_debug_file_contents']) {
+    print(dwarf.dumpFileInfo());
+  }
 
   final verbose = options['verbose'];
   final output = options['output'] != null
diff --git a/pkg/native_stack_traces/lib/native_stack_traces.dart b/pkg/native_stack_traces/lib/native_stack_traces.dart
index ad8e6a9..bbb59f7 100644
--- a/pkg/native_stack_traces/lib/native_stack_traces.dart
+++ b/pkg/native_stack_traces/lib/native_stack_traces.dart
@@ -4,4 +4,5 @@
 
 export 'src/convert.dart'
     show collectPCOffsets, DwarfStackTraceDecoder, StackTraceHeader;
-export 'src/dwarf.dart' show CallInfo, Dwarf, PCOffset;
+export 'src/dwarf.dart'
+    show CallInfo, DartCallInfo, StubCallInfo, Dwarf, PCOffset;
diff --git a/pkg/native_stack_traces/lib/src/dwarf.dart b/pkg/native_stack_traces/lib/src/dwarf.dart
index a10a9cd..a53ea59 100644
--- a/pkg/native_stack_traces/lib/src/dwarf.dart
+++ b/pkg/native_stack_traces/lib/src/dwarf.dart
@@ -174,16 +174,27 @@
     }
   }
 
+  void writeToStringBuffer(StringBuffer buffer) {
+    buffer
+      ..write('    Tag: ')
+      ..writeln(_tagStrings[tag])
+      ..write('    Children: ')
+      ..writeln(children ? 'DW_CHILDREN_yes' : 'DW_CHILDREN_no')
+      ..writeln('    Attributes:');
+    for (final attribute in attributes) {
+      buffer
+        ..write('      ')
+        ..write(_attributeNameStrings[attribute.name])
+        ..write(': ')
+        ..writeln(_attributeFormStrings[attribute.form]);
+    }
+  }
+
   @override
   String toString() {
-    var ret = "    Tag: ${_tagStrings[tag]}\n"
-        "    Children: ${children ? "DW_CHILDREN_yes" : "DW_CHILDREN_no"}\n"
-        "    Attributes:\n";
-    for (final attribute in attributes) {
-      ret += "      ${_attributeNameStrings[attribute.name]}: "
-          "${_attributeFormStrings[attribute.form]}\n";
-    }
-    return ret;
+    final buffer = StringBuffer();
+    writeToStringBuffer(buffer);
+    return buffer.toString();
   }
 }
 
@@ -214,12 +225,24 @@
     }
   }
 
+  void writeToStringBuffer(StringBuffer buffer) {
+    buffer..writeln('Abbreviations table:')..writeln();
+    for (final key in _abbreviations.keys) {
+      buffer
+        ..write('  ')
+        ..write(key)
+        ..writeln(':');
+      _abbreviations[key].writeToStringBuffer(buffer);
+      buffer..writeln();
+    }
+  }
+
   @override
-  String toString() =>
-      "Abbreviations table:\n\n" +
-      _abbreviations.keys
-          .map((k) => "  Abbreviation $k:\n" + _abbreviations[k].toString())
-          .join("\n");
+  String toString() {
+    final buffer = StringBuffer();
+    writeToStringBuffer(buffer);
+    return buffer.toString();
+  }
 }
 
 /// A DWARF Debug Information Entry (DIE).
@@ -356,7 +379,7 @@
         continue;
       }
       if (tag != _Tag.compileUnit) {
-        callInfo.add(CallInfo(
+        callInfo.add(DartCallInfo(
             function: abstractOrigin.name,
             inlined: inlined,
             filename: callFilename(unit.callFileIndex),
@@ -370,7 +393,7 @@
     final filename = lineNumberProgram.filename(address);
     final line = lineNumberProgram.lineNumber(address);
     return [
-      CallInfo(
+      DartCallInfo(
           function: abstractOrigin.name,
           inlined: inlined,
           filename: filename,
@@ -378,26 +401,51 @@
     ];
   }
 
-  @override
-  String toString() {
-    var ret =
-        "Abbreviated unit (code $code, offset ${paddedHex(_unitOffset)}):\n";
+  void writeToStringBuffer(StringBuffer buffer, {String indent = ''}) {
+    buffer
+      ..write(indent)
+      ..write('Abbreviated unit (code ')
+      ..write(code)
+      ..write(', offset ')
+      ..write(paddedHex(_unitOffset))
+      ..writeln('):');
     for (final attribute in attributes.keys) {
-      ret += "  ${_attributeNameStrings[attribute.name]} => "
-          "${_attributeValueToString(attribute, attributes[attribute])}\n";
+      buffer
+        ..write(indent)
+        ..write('  ')
+        ..write(_attributeNameStrings[attribute.name])
+        ..write(' => ')
+        ..writeln(_attributeValueToString(attribute, attributes[attribute]));
     }
     if (children == null || children.isEmpty) {
-      ret += "Has no children.\n\n";
-      return ret;
+      buffer
+        ..write(indent)
+        ..writeln('Has no children.');
+      return;
     }
-    ret += "Has ${children.length} " +
-        (children.length == 1 ? "child" : "children") +
-        "\n\n";
+    buffer
+      ..write(indent)
+      ..write('Has ')
+      ..write(children.length)
+      ..write(' ')
+      ..write(children.length == 1 ? "child" : "children")
+      ..writeln(':');
     for (int i = 0; i < children.length; i++) {
-      ret += "Child ${i} of unit at offset ${paddedHex(_unitOffset)}:\n";
-      ret += children[i].toString();
+      buffer
+        ..write(indent)
+        ..write('Child ')
+        ..write(i)
+        ..write(' of unit at offset ')
+        ..write(paddedHex(_unitOffset))
+        ..writeln(':');
+      children[i].writeToStringBuffer(buffer, indent: indent + '  ');
     }
-    return ret;
+  }
+
+  String toString() {
+    final buffer = StringBuffer();
+    writeToStringBuffer(buffer);
+    return buffer.toString();
   }
 }
 
@@ -465,13 +513,28 @@
   _AbbreviationsTable get abbreviations =>
       _abbreviationsTables[abbreviationOffset];
 
+  void writeToStringBuffer(StringBuffer buffer) {
+    buffer
+      ..writeln('Compilation unit:')
+      ..write('  Version: ')
+      ..writeln(version)
+      ..write('  Abbreviation offset: ')
+      ..writeln(paddedHex(abbreviationOffset, 4))
+      ..write('  Address size: ')
+      ..writeln(addressSize)
+      ..writeln();
+    for (final die in contents) {
+      die.writeToStringBuffer(buffer);
+      buffer.writeln();
+    }
+  }
+
   @override
-  String toString() =>
-      "Compilation unit:\n"
-          "  Version: $version\n"
-          "  Abbreviation offset: ${paddedHex(abbreviationOffset, 4)}\n"
-          "  Address size: $addressSize\n\n" +
-      contents.map((DebugInformationEntry u) => u.toString()).join();
+  String toString() {
+    final buffer = StringBuffer();
+    writeToStringBuffer(buffer);
+    return buffer.toString();
+  }
 }
 
 /// A class representing a DWARF `.debug_info` section.
@@ -511,9 +574,18 @@
     return null;
   }
 
-  String toString() =>
-      "Debug information:\n\n" +
-      units.map((CompilationUnit u) => u.toString()).join();
+  void writeToStringBuffer(StringBuffer buffer) {
+    for (final unit in units) {
+      unit.writeToStringBuffer(buffer);
+      buffer.writeln();
+    }
+  }
+
+  String toString() {
+    final buffer = StringBuffer();
+    writeToStringBuffer(buffer);
+    return buffer.toString();
+  }
 }
 
 class FileEntry {
@@ -681,7 +753,7 @@
       "  Column number: $column\n"
       "  Is ${isStatement ? "" : "not "}a statement.\n"
       "  Is ${basicBlock ? "" : "not "}at the beginning of a basic block.\n"
-      "  Is ${endSequence ? "" : "not "}just after the end of a sequence.\n";
+      "  Is ${endSequence ? "" : "not "}just after the end of a sequence.";
 }
 
 /// A class representing a DWARF line number program.
@@ -887,32 +959,40 @@
     return state.line;
   }
 
-  @override
-  String toString() {
-    var buffer = StringBuffer("  Size: $size\n"
-        "  Version: $version\n"
-        "  Header length: $headerLength\n"
-        "  Min instruction length: $minimumInstructionLength\n"
-        "  Default value of is_stmt: $defaultIsStatement\n"
-        "  Line base: $lineBase\n"
-        "  Line range: $lineRange\n"
-        "  Opcode base: $opcodeBase\n"
-        "  Standard opcode lengths:\n");
+  void writeToStringBuffer(StringBuffer buffer) {
+    buffer
+      ..write('  Size: ')
+      ..writeln(size)
+      ..write('  Version: ')
+      ..writeln(version)
+      ..write('  Header length: ')
+      ..writeln(headerLength)
+      ..write('  Min instruction length: ')
+      ..writeln(minimumInstructionLength)
+      ..write('  Default value of is_stmt: ')
+      ..writeln(defaultIsStatement)
+      ..write('  Line base: ')
+      ..writeln(lineBase)
+      ..write('  Line range: ')
+      ..writeln(lineRange)
+      ..write('  Opcode base: ')
+      ..writeln(opcodeBase)
+      ..writeln('Standard opcode lengths:');
     for (int i = 1; i < opcodeBase; i++) {
       buffer
-        ..write("    Opcode ")
+        ..write('    Opcode ')
         ..write(i)
-        ..write(": ")
+        ..write(': ')
         ..writeln(standardOpcodeLengths[i]);
     }
 
     if (includeDirectories.isEmpty) {
-      buffer.writeln("No include directories.");
+      buffer.writeln('No include directories.');
     } else {
-      buffer.writeln("Include directories:");
+      buffer.writeln('Include directories:');
       for (final dir in includeDirectories) {
         buffer
-          ..write("    ")
+          ..write('    ')
           ..writeln(dir);
       }
     }
@@ -921,9 +1001,13 @@
 
     buffer.writeln("Results of line number program:");
     for (final state in calculatedMatrix) {
-      buffer..write(state);
+      buffer..writeln(state);
     }
+  }
 
+  String toString() {
+    final buffer = StringBuffer();
+    writeToStringBuffer(buffer);
     return buffer.toString();
   }
 }
@@ -955,13 +1039,20 @@
   bool containsKey(int address) => programs.containsKey(address);
   LineNumberProgram operator [](int address) => programs[address];
 
-  String toString() =>
-      "Line number information:\n\n" +
-      programs
-          .map((int i, LineNumberProgram p) =>
-              MapEntry(i, "Line number program @ 0x${paddedHex(i)}:\n$p\n"))
-          .values
-          .join();
+  void writeToStringBuffer(StringBuffer buffer) {
+    for (final offset in programs.keys) {
+      buffer
+        ..write('Line number program @ 0x')
+        ..writeln(paddedHex(offset));
+      programs[offset].writeToStringBuffer(buffer);
+    }
+  }
+
+  String toString() {
+    final buffer = StringBuffer();
+    writeToStringBuffer(buffer);
+    return buffer.toString();
+  }
 }
 
 // TODO(11617): Replace calls to these functions with a general hashing solution
@@ -978,22 +1069,35 @@
   return 0x1fffffff & (hash + ((0x00003fff & hash) << 15));
 }
 
-class CallInfo {
+/// Represents the information for a call site.
+abstract class CallInfo {
+  /// Whether this call site is considered internal (i.e. not located in either
+  /// user or library Dart source code).
+  bool get isInternal => true;
+}
+
+/// Represents the information for a call site located in Dart source code.
+class DartCallInfo extends CallInfo {
   final bool inlined;
   final String function;
   final String filename;
   final int line;
 
-  CallInfo({this.inlined = false, this.function, this.filename, this.line});
+  DartCallInfo({this.inlined = false, this.function, this.filename, this.line});
 
+  @override
+  bool get isInternal => line <= 0;
+
+  @override
   int get hashCode => _hashFinish(_hashCombine(
       _hashCombine(
           _hashCombine(_hashCombine(0, inlined.hashCode), function.hashCode),
           filename.hashCode),
       line.hashCode));
 
+  @override
   bool operator ==(Object other) {
-    if (other is CallInfo) {
+    if (other is DartCallInfo) {
       return inlined == other.inlined &&
           function == other.function &&
           filename == other.filename &&
@@ -1002,8 +1106,32 @@
     return false;
   }
 
+  @override
   String toString() =>
-      "${function} (${filename}:${line <= 0 ? "??" : line.toString()})";
+      "${function} (${filename}:${isInternal ? "??" : line.toString()})";
+}
+
+/// Represents the information for a call site located in a Dart stub.
+class StubCallInfo extends CallInfo {
+  final String name;
+  final int offset;
+
+  StubCallInfo({this.name, this.offset});
+
+  @override
+  int get hashCode => _hashFinish(
+      _hashCombine(_hashCombine(0, name.hashCode), offset.hashCode));
+
+  @override
+  bool operator ==(Object other) {
+    if (other is StubCallInfo) {
+      return name == other.name && offset == other.offset;
+    }
+    return false;
+  }
+
+  @override
+  String toString() => "${name} + ${offset}";
 }
 
 /// The instructions section in which a program counter address is located.
@@ -1042,14 +1170,15 @@
 
 /// The DWARF debugging information for a Dart snapshot.
 class Dwarf {
+  final Elf _elf;
   final Map<int, _AbbreviationsTable> _abbreviationTables;
   final DebugInfo _debugInfo;
   final LineNumberInfo _lineNumberInfo;
   final int _vmStartAddress;
   final int _isolateStartAddress;
 
-  Dwarf._(this._abbreviationTables, this._debugInfo, this._lineNumberInfo,
-      this._vmStartAddress, this._isolateStartAddress);
+  Dwarf._(this._elf, this._abbreviationTables, this._debugInfo,
+      this._lineNumberInfo, this._vmStartAddress, this._isolateStartAddress);
 
   /// Attempts to load the DWARF debugging information from the reader.
   ///
@@ -1072,8 +1201,8 @@
   /// Returns a [Dwarf] object if the load succeeds, otherwise returns null.
   static Dwarf fromFile(String path) => Dwarf.fromReader(Reader.fromFile(path));
 
-  static const String _vmSymbol = "_kDartVmSnapshotInstructions";
-  static const String _isolateSymbol = "_kDartIsolateSnapshotInstructions";
+  static const String _vmSymbolName = "_kDartVmSnapshotInstructions";
+  static const String _isolateSymbolName = "_kDartIsolateSnapshotInstructions";
 
   static Dwarf _loadSectionsFromElf(Elf elf) {
     final abbrevSection = elf.namedSections(".debug_abbrev").single;
@@ -1094,17 +1223,21 @@
     final debugInfo = DebugInfo.fromReader(
         infoSection.reader, abbreviationTables, lineNumberInfo);
 
-    final vmStartAddress = elf.namedAddress(_vmSymbol);
-    if (vmStartAddress == -1) {
-      throw FormatException("Expected a dynamic symbol with name ${_vmSymbol}");
-    }
-    final isolateStartAddress = elf.namedAddress(_isolateSymbol);
-    if (isolateStartAddress == -1) {
+    final vmStartSymbol = elf.dynamicSymbolFor(_vmSymbolName);
+    if (vmStartSymbol == null) {
       throw FormatException(
-          "Expected a dynamic symbol with name ${_isolateSymbol}");
+          "Expected a dynamic symbol with name ${_vmSymbolName}");
     }
+    final vmStartAddress = vmStartSymbol.value;
 
-    return Dwarf._(abbreviationTables, debugInfo, lineNumberInfo,
+    final isolateStartSymbol = elf.dynamicSymbolFor(_isolateSymbolName);
+    if (isolateStartSymbol == null) {
+      throw FormatException(
+          "Expected a dynamic symbol with name ${_isolateSymbolName}");
+    }
+    final isolateStartAddress = isolateStartSymbol.value;
+
+    return Dwarf._(elf, abbreviationTables, debugInfo, lineNumberInfo,
         vmStartAddress, isolateStartAddress);
   }
 
@@ -1116,9 +1249,19 @@
   /// to user or library code is returned.
   Iterable<CallInfo> callInfoFor(int address,
       {bool includeInternalFrames = false}) {
-    final calls = _debugInfo.callInfo(address);
+    var calls = _debugInfo.callInfo(address);
+    if (calls == null) {
+      // Since we're dealing with return addresses in stack frames, subtract
+      // one in case the return address is just off the end of the stub (since
+      // the calling instruction is before the return address).
+      final symbol = _elf.staticSymbolAt(address - 1);
+      if (symbol != null) {
+        final offset = address - symbol.value;
+        calls = <CallInfo>[StubCallInfo(name: symbol.name, offset: offset)];
+      }
+    }
     if (calls != null && !includeInternalFrames) {
-      return calls.where((CallInfo c) => c.line > 0);
+      return calls.where((CallInfo c) => !c.isInternal);
     }
     return calls;
   }
@@ -1135,13 +1278,42 @@
     }
   }
 
+  void writeToStringBuffer(StringBuffer buffer) {
+    buffer
+      ..writeln('----------------------------------------')
+      ..writeln('         Abbreviation tables')
+      ..writeln('----------------------------------------')
+      ..writeln();
+    for (final offset in _abbreviationTables.keys) {
+      buffer..write('(Offset ')..write(paddedHex(offset, 4))..write(') ');
+      _abbreviationTables[offset].writeToStringBuffer(buffer);
+    }
+    buffer
+      ..writeln('----------------------------------------')
+      ..writeln('          Debug information')
+      ..writeln('----------------------------------------')
+      ..writeln();
+    _debugInfo.writeToStringBuffer(buffer);
+    buffer
+      ..writeln('----------------------------------------')
+      ..writeln('        Line number information')
+      ..writeln('----------------------------------------')
+      ..writeln();
+    _lineNumberInfo.writeToStringBuffer(buffer);
+  }
+
+  String dumpFileInfo() {
+    final buffer = StringBuffer();
+    _elf.writeToStringBuffer(buffer);
+    buffer.writeln();
+    writeToStringBuffer(buffer);
+    return buffer.toString();
+  }
+
   @override
-  String toString() =>
-      "DWARF debugging information:\n\n" +
-      _abbreviationTables
-          .map((int i, _AbbreviationsTable t) =>
-              MapEntry(i, "(Offset ${paddedHex(i)}) $t"))
-          .values
-          .join() +
-      "\n$_debugInfo\n$_lineNumberInfo";
+  String toString() {
+    final buffer = StringBuffer();
+    writeToStringBuffer(buffer);
+    return buffer.toString();
+  }
 }
diff --git a/pkg/native_stack_traces/lib/src/elf.dart b/pkg/native_stack_traces/lib/src/elf.dart
index da4efae..64b325a 100644
--- a/pkg/native_stack_traces/lib/src/elf.dart
+++ b/pkg/native_stack_traces/lib/src/elf.dart
@@ -189,29 +189,42 @@
     }
   }
 
-  String toString() {
-    var ret = "Format is ${wordSize * 8} bits\n";
+  void writeToStringBuffer(StringBuffer buffer) {
+    buffer..write('Format is ')..write(wordSize * 8)..write(' bits');
     switch (endian) {
       case Endian.little:
-        ret += "Little-endian format\n";
+        buffer..writeln(' and little-endian');
         break;
       case Endian.big:
-        ret += "Big-endian format\n";
+        buffer..writeln(' and big-endian');
         break;
     }
-    ret += "Entry point: 0x${paddedHex(entry, wordSize)}\n"
-        "Flags: 0x${paddedHex(flags, 4)}\n"
-        "Header size: ${headerSize}\n"
-        "Program header offset: "
-        "0x${paddedHex(programHeaderOffset, wordSize)}\n"
-        "Program header entry size: ${programHeaderEntrySize}\n"
-        "Program header entry count: ${programHeaderCount}\n"
-        "Section header offset: "
-        "0x${paddedHex(sectionHeaderOffset, wordSize)}\n"
-        "Section header entry size: ${sectionHeaderEntrySize}\n"
-        "Section header entry count: ${sectionHeaderCount}\n"
-        "Section header strings index: ${sectionHeaderStringsIndex}\n";
-    return ret;
+    buffer
+      ..write('Entry point: 0x')
+      ..writeln(paddedHex(entry, wordSize))
+      ..write('Flags: 0x')
+      ..writeln(paddedHex(flags, 4))
+      ..write('Program header offset: 0x')
+      ..writeln(paddedHex(programHeaderOffset, wordSize))
+      ..write('Program header entry size: ')
+      ..writeln(programHeaderEntrySize)
+      ..write('Program header entry count: ')
+      ..writeln(programHeaderCount)
+      ..write('Section header offset: 0x')
+      ..writeln(paddedHex(sectionHeaderOffset, wordSize))
+      ..write('Section header entry size: ')
+      ..writeln(sectionHeaderEntrySize)
+      ..write('Section header entry count: ')
+      ..writeln(sectionHeaderCount)
+      ..write('Section header strings index: ')
+      ..write(sectionHeaderStringsIndex);
+  }
+
+  @override
+  String toString() {
+    var buffer = StringBuffer();
+    writeToStringBuffer(buffer);
+    return buffer.toString();
   }
 }
 
@@ -269,14 +282,31 @@
     return "unknown (${paddedHex(type, 4)})";
   }
 
-  String toString() => "Type: ${_typeToString(type)}\n"
-      "Flags: 0x${paddedHex(flags, 4)}\n"
-      "Offset: $offset (0x${paddedHex(offset, reader.wordSize)})\n"
-      "Virtual address: 0x${paddedHex(vaddr, reader.wordSize)}\n"
-      "Physical address: 0x${paddedHex(paddr, reader.wordSize)}\n"
-      "Size in file: $filesz\n"
-      "Size in memory: $memsz\n"
-      "Alignment: 0x${paddedHex(align, reader.wordSize)}\n";
+  void writeToStringBuffer(StringBuffer buffer) {
+    buffer
+      ..write('Type: ')
+      ..writeln(_typeToString(type))
+      ..write('Flags: 0x')
+      ..writeln(paddedHex(flags, 4))
+      ..write('Offset: 0x')
+      ..writeln(paddedHex(offset, reader.wordSize))
+      ..write('Virtual address: 0x')
+      ..writeln(paddedHex(vaddr, reader.wordSize))
+      ..write('Physical address: 0x')
+      ..writeln(paddedHex(paddr, reader.wordSize))
+      ..write('Size in file: ')
+      ..writeln(filesz)
+      ..write('Size in memory')
+      ..writeln(memsz)
+      ..write('Alignment: 0x')
+      ..write(paddedHex(align, reader.wordSize));
+  }
+
+  String toString() {
+    final buffer = StringBuffer();
+    writeToStringBuffer(buffer);
+    return buffer.toString();
+  }
 }
 
 class ProgramHeader {
@@ -303,12 +333,21 @@
     }
   }
 
-  String toString() {
-    var ret = "";
+  void writeToStringBuffer(StringBuffer buffer) {
     for (var i = 0; i < length; i++) {
-      ret += "Entry $i:\n${this[i]}\n";
+      if (i != 0) buffer..writeln()..writeln();
+      buffer
+        ..write('Entry ')
+        ..write(i)
+        ..writeln(':');
+      _entries[i].writeToStringBuffer(buffer);
     }
-    return ret;
+  }
+
+  String toString() {
+    final buffer = StringBuffer();
+    writeToStringBuffer(buffer);
+    return buffer.toString();
   }
 }
 
@@ -316,7 +355,7 @@
   final Reader reader;
 
   int nameIndex;
-  String name;
+  String _cachedName;
   int type;
   int flags;
   int addr;
@@ -356,9 +395,11 @@
   }
 
   void setName(StringTable nameTable) {
-    name = nameTable[nameIndex];
+    _cachedName = nameTable[nameIndex];
   }
 
+  String get name => _cachedName != null ? _cachedName : '<${nameIndex}>';
+
   static const _typeStrings = <int, String>{
     _SHT_NULL: "SHT_NULL",
     _SHT_PROGBITS: "SHT_PROGBITS",
@@ -377,16 +418,44 @@
     return "unknown (${paddedHex(type, 4)})";
   }
 
-  String toString() => "Name: ${name} (@ ${nameIndex})\n"
-      "Type: ${_typeToString(type)}\n"
-      "Flags: 0x${paddedHex(flags, reader.wordSize)}\n"
-      "Address: 0x${paddedHex(addr, reader.wordSize)}\n"
-      "Offset: $offset (0x${paddedHex(offset, reader.wordSize)})\n"
-      "Size: $size\n"
-      "Link: $link\n"
-      "Info: 0x${paddedHex(info, 4)}\n"
-      "Address alignment: 0x${paddedHex(addrAlign, reader.wordSize)}\n"
-      "Entry size: ${entrySize}\n";
+  void writeToStringBuffer(StringBuffer buffer) {
+    buffer.write('Name: ');
+    if (_cachedName != null) {
+      buffer
+        ..write('"')
+        ..write(name)
+        ..write('" (@ ')
+        ..write(nameIndex)
+        ..writeln(')');
+    } else {
+      buffer.writeln(name);
+    }
+    buffer
+      ..write('Type: ')
+      ..writeln(_typeToString(type))
+      ..write('Flags: 0x')
+      ..writeln(paddedHex(flags, reader.wordSize))
+      ..write('Address: 0x')
+      ..writeln(paddedHex(addr, reader.wordSize))
+      ..write('Offset: 0x')
+      ..writeln(paddedHex(offset, reader.wordSize))
+      ..write('Size: ')
+      ..writeln(size)
+      ..write('Link: ')
+      ..writeln(link)
+      ..write('Info: 0x')
+      ..writeln(paddedHex(info, 4))
+      ..write('Address alignment: 0x')
+      ..writeln(paddedHex(addrAlign, reader.wordSize))
+      ..write('Entry size: ')
+      ..write(entrySize);
+  }
+
+  String toString() {
+    final buffer = StringBuffer();
+    writeToStringBuffer(buffer);
+    return buffer.toString();
+  }
 }
 
 class SectionHeader {
@@ -436,13 +505,22 @@
   int get length => _entries.length;
   SectionHeaderEntry operator [](int index) => _entries[index];
 
+  void writeToStringBuffer(StringBuffer buffer) {
+    for (var i = 0; i < length; i++) {
+      if (i != 0) buffer..writeln()..writeln();
+      buffer
+        ..write('Entry ')
+        ..write(i)
+        ..writeln(':');
+      _entries[i].writeToStringBuffer(buffer);
+    }
+  }
+
   @override
   String toString() {
-    var ret = "";
-    for (var i = 0; i < length; i++) {
-      ret += "Entry $i:\n${this[i]}\n";
-    }
-    return ret;
+    final buffer = StringBuffer();
+    writeToStringBuffer(buffer);
+    return buffer.toString();
   }
 }
 
@@ -467,33 +545,48 @@
 
   int get virtualAddress => headerEntry.addr;
   int get length => reader.bdata.lengthInBytes;
+
+  void writeToStringBuffer(StringBuffer buffer) {
+    buffer
+      ..write('Section "')
+      ..write(headerEntry.name)
+      ..write('" is unparsed and ')
+      ..write(length)
+      ..writeln(' bytes long.');
+  }
+
   @override
-  String toString() => "an unparsed section of ${length} bytes\n";
+  String toString() {
+    StringBuffer buffer;
+    writeToStringBuffer(buffer);
+    return buffer.toString();
+  }
 }
 
 class StringTable extends Section {
-  final _entries = Map<int, String>();
+  final _entries;
 
-  StringTable(SectionHeaderEntry entry, Reader reader) : super(entry, reader) {
-    while (!reader.done) {
-      _entries[reader.offset] = reader.readNullTerminatedString();
-    }
-  }
+  StringTable(SectionHeaderEntry entry, Reader reader)
+      : _entries = Map<int, String>.fromEntries(
+            reader.readRepeated((r) => r.readNullTerminatedString())),
+        super(entry, reader);
 
   String operator [](int index) => _entries[index];
   bool containsKey(int index) => _entries.containsKey(index);
 
   @override
-  String toString() {
-    var buffer = StringBuffer("a string table:\n");
+  void writeToStringBuffer(StringBuffer buffer) {
+    buffer
+      ..write('Section "')
+      ..write(headerEntry.name)
+      ..writeln('" is a string table:');
     for (var key in _entries.keys) {
       buffer
-        ..write(" ")
+        ..write("  ")
         ..write(key)
         ..write(" => ")
         ..writeln(_entries[key]);
     }
-    return buffer.toString();
   }
 }
 
@@ -562,37 +655,59 @@
   SymbolType get type => SymbolType.values[info & 0x0f];
   SymbolVisibility get visibility => SymbolVisibility.values[other & 0x03];
 
-  @override
-  String toString() {
-    final buffer = StringBuffer("symbol ");
+  void writeToStringBuffer(StringBuffer buffer) {
     if (name != null) {
-      buffer..write('"')..write(name)..write('" ');
+      buffer..write('"')..write(name)..write('" =>');
+    } else {
+      buffer..write('<')..write(nameIndex)..write('> =>');
+    }
+    switch (bind) {
+      case SymbolBinding.STB_GLOBAL:
+        buffer..write(' a global');
+        break;
+      case SymbolBinding.STB_LOCAL:
+        buffer..write(' a local');
+        break;
+    }
+    switch (visibility) {
+      case SymbolVisibility.STV_DEFAULT:
+        break;
+      case SymbolVisibility.STV_HIDDEN:
+        buffer..write(' hidden');
+        break;
+      case SymbolVisibility.STV_INTERNAL:
+        buffer..write(' internal');
+        break;
+      case SymbolVisibility.STV_PROTECTED:
+        buffer..write(' protected');
+        break;
     }
     buffer
-      ..write("(")
-      ..write(nameIndex)
-      ..write("): ")
-      ..write(paddedHex(value, _wordSize))
-      ..write(" ")
+      ..write(" symbol that points to ")
       ..write(size)
-      ..write(" sec ")
-      ..write(sectionIndex)
-      ..write(" ")
-      ..write(bind)
-      ..write(" ")
-      ..write(type)
-      ..write(" ")
-      ..write(visibility);
+      ..write(" bytes at location 0x")
+      ..write(paddedHex(value, _wordSize))
+      ..write(" in section ")
+      ..write(sectionIndex);
+  }
+
+  @override
+  String toString() {
+    final buffer = StringBuffer();
+    writeToStringBuffer(buffer);
     return buffer.toString();
   }
 }
 
 class SymbolTable extends Section {
-  final Iterable<Symbol> _entries;
+  final List<Symbol> _entries;
   final _nameCache = Map<String, Symbol>();
 
   SymbolTable(SectionHeaderEntry entry, Reader reader)
-      : _entries = reader.readRepeated(Symbol.fromReader),
+      : _entries = reader
+            .readRepeated(Symbol.fromReader)
+            .map((kv) => kv.value)
+            .toList(),
         super(entry, reader);
 
   void _cacheNames(StringTable stringTable) {
@@ -603,18 +718,21 @@
     }
   }
 
+  Iterable<String> get keys => _nameCache.keys;
   Symbol operator [](String name) => _nameCache[name];
   bool containsKey(String name) => _nameCache.containsKey(name);
 
   @override
-  String toString() {
-    var buffer = StringBuffer("a symbol table:\n");
+  void writeToStringBuffer(StringBuffer buffer) {
+    buffer
+      ..write('Section "')
+      ..write(headerEntry.name)
+      ..writeln('" is a symbol table:');
     for (var symbol in _entries) {
-      buffer
-        ..write(" ")
-        ..writeln(symbol);
+      buffer.write(" ");
+      symbol.writeToStringBuffer(buffer);
+      buffer.writeln();
     }
-    return buffer.toString();
   }
 }
 
@@ -647,16 +765,16 @@
   /// Returns null if the file does not start with the ELF magic number.
   static Elf fromFile(String path) => Elf.fromReader(Reader.fromFile(path));
 
-  /// The virtual address value of the dynamic symbol named [name].
+  /// Lookup of a dynamic symbol by name.
   ///
-  /// Returns -1 if there is no dynamic symbol with that name.
-  int namedAddress(String name) {
+  /// Returns -1 if there is no dynamic symbol that matches [name].
+  Symbol dynamicSymbolFor(String name) {
     for (final SymbolTable dynsym in namedSections(".dynsym")) {
       if (dynsym.containsKey(name)) {
-        return dynsym[name].value;
+        return dynsym[name];
       }
     }
-    return -1;
+    return null;
   }
 
   /// The [Section]s whose names match [name].
@@ -666,6 +784,20 @@
         .map((entry) => _sections[entry]);
   }
 
+  /// Reverse lookup of the static symbol that contains the given virtual
+  /// address. Returns null if no static symbol matching the address is found.
+  Symbol staticSymbolAt(int address) {
+    for (final SymbolTable table in namedSections('.symtab')) {
+      for (final name in table.keys) {
+        final symbol = table[name];
+        if (symbol.value <= address && address < (symbol.value + symbol.size)) {
+          return symbol;
+        }
+      }
+    }
+    return null;
+  }
+
   static Elf _read(Reader startingReader) {
     final header = ElfHeader.fromReader(startingReader.copy());
     // Now use the word size and endianness information from the header.
@@ -681,48 +813,81 @@
         entryCount: header.sectionHeaderCount,
         stringsIndex: header.sectionHeaderStringsIndex);
     final sections = <SectionHeaderEntry, Section>{};
-    final dynsyms = Map<SectionHeaderEntry, SymbolTable>();
-    final dynstrs = Map<SectionHeaderEntry, StringTable>();
     for (var i = 0; i < sectionHeader.length; i++) {
       final entry = sectionHeader[i];
       if (i == header.sectionHeaderStringsIndex) {
         sections[entry] = sectionHeader.nameTable;
         continue;
       }
-      final section = Section.fromEntryAndReader(
+      sections[entry] = Section.fromEntryAndReader(
           entry, reader.refocus(entry.offset, entry.size));
-      // Store the dynamic symbol tables and dynamic string tables so we can
-      // cache the symbol names afterwards.
-      switch (entry.name) {
-        case ".dynsym":
-          dynsyms[entry] = section;
-          break;
-        case ".dynstr":
-          dynstrs[entry] = section;
-          break;
-        default:
-          break;
-      }
-      sections[entry] = section;
     }
-    dynsyms.forEach((entry, dynsym) {
-      final linkEntry = sectionHeader[entry.link];
-      if (!dynstrs.containsKey(linkEntry)) {
-        throw FormatException(
-            "String table not found at section header entry ${entry.link}");
+    void _cacheSymbolNames(String stringTableTag, String symbolTableTag) {
+      final stringTables = <SectionHeaderEntry, StringTable>{};
+      final symbolTables = <SymbolTable>[];
+      for (final entry in sections.keys) {
+        if (entry.name == stringTableTag) {
+          stringTables[entry] = sections[entry];
+        } else if (entry.name == symbolTableTag) {
+          symbolTables.add(sections[entry]);
+        }
       }
-      dynsym._cacheNames(dynstrs[linkEntry]);
-    });
+      for (final symbolTable in symbolTables) {
+        final link = symbolTable.headerEntry.link;
+        final entry = sectionHeader[link];
+        if (!stringTables.containsKey(entry)) {
+          throw FormatException(
+              "String table not found at section header entry ${link}");
+        }
+        symbolTable._cacheNames(stringTables[entry]);
+      }
+    }
+
+    _cacheSymbolNames('.strtab', '.symtab');
+    _cacheSymbolNames('.dynstr', '.dynsym');
     return Elf._(header, programHeader, sectionHeader, sections);
   }
 
+  void writeToStringBuffer(StringBuffer buffer) {
+    buffer
+      ..writeln('-----------------------------------------------------')
+      ..writeln('             ELF header information')
+      ..writeln('-----------------------------------------------------')
+      ..writeln();
+    _header.writeToStringBuffer(buffer);
+    buffer
+      ..writeln()
+      ..writeln()
+      ..writeln('-----------------------------------------------------')
+      ..writeln('            Program header information')
+      ..writeln('-----------------------------------------------------')
+      ..writeln();
+    _programHeader.writeToStringBuffer(buffer);
+    buffer
+      ..writeln()
+      ..writeln()
+      ..writeln('-----------------------------------------------------')
+      ..writeln('            Section header information')
+      ..writeln('-----------------------------------------------------')
+      ..writeln();
+    _sectionHeader.writeToStringBuffer(buffer);
+    buffer
+      ..writeln()
+      ..writeln()
+      ..writeln('-----------------------------------------------------')
+      ..writeln('                 Section information')
+      ..writeln('-----------------------------------------------------')
+      ..writeln();
+    for (final entry in _sections.keys) {
+      _sections[entry].writeToStringBuffer(buffer);
+      buffer.writeln();
+    }
+  }
+
   @override
   String toString() {
-    String accumulateSection(String acc, SectionHeaderEntry entry) =>
-        acc + "\nSection ${entry.name} is ${_sections[entry]}";
-    return "Header information:\n\n${_header}"
-        "\nProgram header information:\n\n${_programHeader}"
-        "\nSection header information:\n\n${_sectionHeader}"
-        "${_sections.keys.fold("", accumulateSection)}";
+    StringBuffer buffer = StringBuffer();
+    writeToStringBuffer(buffer);
+    return buffer.toString();
   }
 }
diff --git a/pkg/native_stack_traces/lib/src/reader.dart b/pkg/native_stack_traces/lib/src/reader.dart
index 3079094..8f6b637 100644
--- a/pkg/native_stack_traces/lib/src/reader.dart
+++ b/pkg/native_stack_traces/lib/src/reader.dart
@@ -123,9 +123,10 @@
     return ret;
   }
 
-  Iterable<S> readRepeated<S>(S Function(Reader) callback) sync* {
+  Iterable<MapEntry<int, S>> readRepeated<S>(
+      S Function(Reader) callback) sync* {
     while (!done) {
-      yield callback(this);
+      yield MapEntry<int, S>(offset, callback(this));
     }
   }
 
@@ -156,7 +157,7 @@
   }
 
   String toString() {
-    final buffer = new StringBuffer();
+    final buffer = StringBuffer();
     buffer
       ..write("Start:  0x")
       ..write(paddedHex(start, wordSize))
diff --git a/pkg/native_stack_traces/pubspec.yaml b/pkg/native_stack_traces/pubspec.yaml
index aeccefc..e300e9e 100644
--- a/pkg/native_stack_traces/pubspec.yaml
+++ b/pkg/native_stack_traces/pubspec.yaml
@@ -1,6 +1,6 @@
 name: native_stack_traces
 description: Utilities for working with non-symbolic stack traces.
-version: 0.2.2
+version: 0.3.0
 
 homepage: https://github.com/dart-lang/sdk/tree/master/pkg/native_stack_traces
 
diff --git a/pkg/nnbd_migration/README.md b/pkg/nnbd_migration/README.md
index b1d8f0a..4e46dd6 100644
--- a/pkg/nnbd_migration/README.md
+++ b/pkg/nnbd_migration/README.md
@@ -1,4 +1,85 @@
-# NNBD Migration Engine
+# Null Safety Migration Tooling
 
-This package provides infrastructure for migrating code to be non-nullable by
-default.
+Note: the null safety migration tooling and workflow is in an early state;
+this doc will be updated as the steps and workflow are simplified.
+
+## Building the NNBD sdk
+
+In order to run the tool currently you have to be able to build your own copy
+of the Dart SDK.
+
+To do this, run:
+
+```
+./tools/build.py -mrelease --nnbd create_sdk
+```
+
+The NNBD sdk now lives under the ReleaseX64NNBD sub-directory of your build
+directory, e.g.
+
+```
+xcodebuild/ReleaseX64NNBD/dart-sdk/
+```
+
+## Migrating a package
+
+- build a NNBD version of the SDK (see above)
+- select a package to work on
+- in that package, edit the `analysis_options.yaml` to enable the NNBD
+  experiment from the POV of the analyzer:
+```yaml
+analyzer:
+  enable-experiment:
+    - non-nullable
+```
+- run `pub get` for the package (and, verify that the
+  `.dart_tool/package_config.json` file was created)
+
+Then, run the migration tool from the top-level of the package directory:
+
+```
+<sdk-repo>/xcodebuild/ReleaseX64NNBD/dart migrate .
+```
+
+The migration tool will run, print the proposed changes to the console, and
+display a url for the preview tool. Open that url from a browser to see a rich
+preview of the proposed null safety changes.
+
+## Using the tool
+
+1. Run the tool (see above).
+2. Once analysis and migration suggestions are complete, open the indicated url
+in a browser.
+3. Start with an important or interesting file in your package on the left
+side by clicking on it.
+4. Look at the proposed edits in the upper right, and click on them in turn.
+5. If you see an edit that looks wrong:
+    1. Use the "trace view" in the bottom right to find the root cause
+    2. Go to your editor and make a change to the original file by adding a hint
+    (`String foo` ==> `String/*!*/ foo`) or making other changes as needed.
+    3. You can have the migration tool perform this itself, although right now
+       for large packages this takes a prohibitively long time.
+       1. ***Warning: DO NOT mix edits in your editor and edits applied by the
+       migration tool. We have not yet written the necessary logic to
+       prevent the migration tool from clobbering files edited while the
+       preview tool is running.*** 
+       2. To try this, from the 'Edit Details' area in the bottom right select
+       the `Force type to be non-nullable` or `Force type to be nullable`
+       links. These will add the indicated hints on disk and recompute the
+       migration suggestions. 
+6. After some edits are complete, control-C the migration and rerun it.  If
+some things are still wrong, return to step 5.
+7. Once all edits are complete and you've rerun migration and are satisfied with
+the output:
+    1. Save your work using git or other means. Applying the migration will
+    overwrite the existing files on disk.
+    2. Rerun the migration with `--apply-changes`, or click the
+    `Apply Migration` button in the interface.
+8. Remove any SDK constraint in your pubspec.yaml.
+9. Remove any opt-out comments in your library files (e.g.:  `// @dart = 2.6`).
+10. Rerun `pub get` and test your package.
+
+## Providing feedback
+
+Please file issues at https://github.com/dart-lang/sdk/issues, and reference the
+`analyzer-nnbd-migration` label (you may not be able to apply the label yourself). 
diff --git a/pkg/nnbd_migration/lib/nnbd_migration.dart b/pkg/nnbd_migration/lib/nnbd_migration.dart
index bd2113c..16cdeed 100644
--- a/pkg/nnbd_migration/lib/nnbd_migration.dart
+++ b/pkg/nnbd_migration/lib/nnbd_migration.dart
@@ -86,6 +86,14 @@
         kind: NullabilityFixKind.makeTypeNullable,
       );
 
+  /// An explicit type mentioned in the source program does not need to be made
+  /// nullable.
+  factory NullabilityFixDescription.typeNotMadeNullable(String type) =>
+      NullabilityFixDescription._(
+        appliedMessage: "Type '$type' was not made nullable",
+        kind: NullabilityFixKind.typeNotMadeNullable,
+      );
+
   const NullabilityFixDescription._(
       {@required this.appliedMessage, @required this.kind});
 
@@ -117,9 +125,9 @@
   discardIf,
   discardThen,
   makeTypeNullable,
-  noModification,
   removeAs,
   removeNullAwareness,
+  typeNotMadeNullable,
 }
 
 /// Provisional API for DartFix to perform nullability migration.
diff --git a/pkg/nnbd_migration/lib/src/edge_builder.dart b/pkg/nnbd_migration/lib/src/edge_builder.dart
index 6949482..021717b 100644
--- a/pkg/nnbd_migration/lib/src/edge_builder.dart
+++ b/pkg/nnbd_migration/lib/src/edge_builder.dart
@@ -893,7 +893,8 @@
     List<DecoratedType> decoratedTypeArguments;
     var typeArguments = node.constructorName.type.typeArguments;
     List<EdgeOrigin> parameterEdgeOrigins;
-    var target = NullabilityNodeTarget.codeRef('constructed type', node);
+    var target =
+        NullabilityNodeTarget.text('constructed type').withCodeRef(node);
     if (typeArguments != null) {
       typeArguments.accept(this);
       typeArgumentTypes = typeArguments.arguments.map((t) => t.type);
@@ -999,7 +1000,8 @@
     try {
       var listType = node.staticType as InterfaceType;
       if (node.typeArguments == null) {
-        var target = NullabilityNodeTarget.codeRef('list element type', node);
+        var target =
+            NullabilityNodeTarget.text('list element type').withCodeRef(node);
         var elementType = DecoratedType.forImplicitType(
             typeProvider, listType.typeArguments[0], _graph, target);
         instrumentation?.implicitTypeArguments(source, node, [elementType]);
@@ -1104,7 +1106,7 @@
   @override
   DecoratedType visitNullLiteral(NullLiteral node) {
     _flowAnalysis.nullLiteral(node);
-    var target = NullabilityNodeTarget.codeRef('null literal', node);
+    var target = NullabilityNodeTarget.text('null literal').withCodeRef(node);
     var decoratedType = DecoratedType.forImplicitType(
         typeProvider, node.staticType, _graph, target);
     _graph.makeNullable(decoratedType.node, LiteralOrigin(source, node));
@@ -1223,7 +1225,8 @@
   @override
   DecoratedType visitRethrowExpression(RethrowExpression node) {
     _flowAnalysis.handleExit();
-    var target = NullabilityNodeTarget.codeRef('rethrow expression', node);
+    var target =
+        NullabilityNodeTarget.text('rethrow expression').withCodeRef(node);
     var nullabilityNode = NullabilityNode.forInferredType(target);
     _graph.makeNonNullable(nullabilityNode, ThrowOrigin(source, node));
     return DecoratedType(node.staticType, nullabilityNode);
@@ -1235,7 +1238,8 @@
     Expression returnValue = node.expression;
     final isAsync = node.thisOrAncestorOfType<FunctionBody>().isAsynchronous;
     if (returnValue == null) {
-      var target = NullabilityNodeTarget.codeRef('implicit null return', node);
+      var target =
+          NullabilityNodeTarget.text('implicit null return').withCodeRef(node);
       var implicitNullType = DecoratedType.forImplicitType(
           typeProvider, typeProvider.nullType, _graph, target);
       _graph.makeNullable(
@@ -1269,7 +1273,8 @@
       try {
         if (typeArguments == null) {
           assert(setOrMapType.typeArguments.length == 1);
-          var target = NullabilityNodeTarget.codeRef('set element type', node);
+          var target =
+              NullabilityNodeTarget.text('set element type').withCodeRef(node);
           var elementType = DecoratedType.forImplicitType(
               typeProvider, setOrMapType.typeArguments[0], _graph, target);
           instrumentation?.implicitTypeArguments(source, node, [elementType]);
@@ -1294,12 +1299,13 @@
       try {
         if (typeArguments == null) {
           assert(setOrMapType.typeArguments.length == 2);
-          var targetKey = NullabilityNodeTarget.codeRef('map key type', node);
+          var targetKey =
+              NullabilityNodeTarget.text('map key type').withCodeRef(node);
           var keyType = DecoratedType.forImplicitType(
               typeProvider, setOrMapType.typeArguments[0], _graph, targetKey);
           _currentMapKeyType = keyType;
           var targetValue =
-              NullabilityNodeTarget.codeRef('map value type', node);
+              NullabilityNodeTarget.text('map value type').withCodeRef(node);
           var valueType = DecoratedType.forImplicitType(
               typeProvider, setOrMapType.typeArguments[1], _graph, targetValue);
           _currentMapValueType = valueType;
@@ -1375,7 +1381,8 @@
   DecoratedType visitSpreadElement(SpreadElement node) {
     final spreadType = node.expression.staticType;
     DecoratedType spreadTypeDecorated;
-    var target = NullabilityNodeTarget.codeRef('spread element type', node);
+    var target =
+        NullabilityNodeTarget.text('spread element type').withCodeRef(node);
     if (_typeSystem.isSubtypeOf(spreadType, typeProvider.mapObjectObjectType)) {
       assert(_currentMapKeyType != null && _currentMapValueType != null);
       final expectedType = typeProvider.mapType2(
@@ -1418,8 +1425,8 @@
   DecoratedType visitSuperConstructorInvocation(
       SuperConstructorInvocation node) {
     var callee = node.staticElement;
-    var target =
-        NullabilityNodeTarget.codeRef('super constructor invocation', node);
+    var target = NullabilityNodeTarget.text('super constructor invocation')
+        .withCodeRef(node);
     var nullabilityNode = NullabilityNode.forInferredType(target);
     var class_ = node.thisOrAncestorOfType<ClassDeclaration>();
     var decoratedSupertype = _decoratedClassHierarchy.getDecoratedSupertype(
@@ -1485,7 +1492,8 @@
     node.expression.accept(this);
     // TODO(paulberry): do we need to check the expression type?  I think not.
     _flowAnalysis.handleExit();
-    var target = NullabilityNodeTarget.codeRef('throw expression', node);
+    var target =
+        NullabilityNodeTarget.text('throw expression').withCodeRef(node);
     var nullabilityNode = NullabilityNode.forInferredType(target);
     _graph.makeNonNullable(nullabilityNode, ThrowOrigin(source, node));
     return DecoratedType(node.staticType, nullabilityNode);
@@ -1601,6 +1609,29 @@
       } else {
         assert(_flowAnalysis != null);
       }
+      var type = _variables.decoratedElementType(declaredElement);
+      var enclosingElement = declaredElement.enclosingElement;
+      if (!declaredElement.isStatic && enclosingElement is ClassElement) {
+        var overriddenElements = _inheritanceManager.getOverridden(
+            enclosingElement.thisType,
+            Name(enclosingElement.library.source.uri, declaredElement.name));
+        for (var overriddenElement
+            in overriddenElements ?? <ExecutableElement>[]) {
+          _handleFieldOverriddenDeclaration(
+              variable, type, enclosingElement, overriddenElement);
+        }
+        if (!declaredElement.isFinal) {
+          var overriddenElements = _inheritanceManager.getOverridden(
+              enclosingElement.thisType,
+              Name(enclosingElement.library.source.uri,
+                  declaredElement.name + '='));
+          for (var overriddenElement
+              in overriddenElements ?? <ExecutableElement>[]) {
+            _handleFieldOverriddenDeclaration(
+                variable, type, enclosingElement, overriddenElement);
+          }
+        }
+      }
       try {
         if (declaredElement is PromotableElement) {
           _flowAnalysis.declare(declaredElement, initializer != null);
@@ -1613,13 +1644,11 @@
           // the variable isn't definitely assigned).
           if (isTopLevel &&
               !(declaredElement is FieldElement && !declaredElement.isStatic)) {
-            var type = _variables.decoratedElementType(declaredElement);
             _graph.makeNullable(
                 type.node, ImplicitNullInitializerOrigin(source, node));
           }
         } else {
-          var destinationType = getOrComputeElementType(declaredElement);
-          _handleAssignment(initializer, destinationType: destinationType);
+          _handleAssignment(initializer, destinationType: type);
         }
         if (isTopLevel) {
           _flowAnalysis.finish();
@@ -1720,7 +1749,8 @@
   /// Creates a type that can be used to check that an expression's value is
   /// non-nullable.
   DecoratedType _createNonNullableType(Expression expression) {
-    var target = NullabilityNodeTarget.codeRef('expression type', expression);
+    var target =
+        NullabilityNodeTarget.text('expression type').withCodeRef(expression);
     // Note: it's not necessary for the type to precisely match the type of the
     // expression, since all we are going to do is cause a single graph edge to
     // be built; it is sufficient to pass in any decorated type whose node is
@@ -1903,7 +1933,7 @@
           typeProvider,
           typeProvider.futureType2(type.type),
           _graph,
-          NullabilityNodeTarget.codeRef('implicit future', node),
+          NullabilityNodeTarget.text('implicit future').withCodeRef(node),
           typeArguments: [type]);
 
   @override
@@ -2200,6 +2230,45 @@
     }
   }
 
+  void _handleFieldOverriddenDeclaration(
+      VariableDeclaration node,
+      DecoratedType type,
+      ClassElement classElement,
+      Element overriddenElement) {
+    overriddenElement = overriddenElement.declaration;
+    var overriddenClass = overriddenElement.enclosingElement as ClassElement;
+    var decoratedSupertype = _decoratedClassHierarchy.getDecoratedSupertype(
+        classElement, overriddenClass);
+    var substitution = decoratedSupertype.asSubstitution;
+    if (overriddenElement is PropertyAccessorElement) {
+      DecoratedType unsubstitutedOverriddenType;
+      if (overriddenElement.isSynthetic) {
+        unsubstitutedOverriddenType =
+            _variables.decoratedElementType(overriddenElement.variable);
+      } else {
+        if (overriddenElement.isGetter) {
+          unsubstitutedOverriddenType =
+              _variables.decoratedElementType(overriddenElement).returnType;
+        } else {
+          unsubstitutedOverriddenType = _variables
+              .decoratedElementType(overriddenElement)
+              .positionalParameters[0];
+        }
+      }
+      var overriddenType = unsubstitutedOverriddenType.substitute(substitution);
+      if (overriddenElement.isGetter) {
+        _checkAssignment(ReturnTypeInheritanceOrigin(source, node),
+            source: type, destination: overriddenType, hard: true);
+      } else {
+        assert(overriddenElement.isSetter);
+        _checkAssignment(ParameterInheritanceOrigin(source, node),
+            source: overriddenType, destination: type, hard: true);
+      }
+    } else {
+      assert(false, 'Field overrides non-property-accessor');
+    }
+  }
+
   void _handleForLoopParts(AstNode node, ForLoopParts parts, AstNode body,
       DecoratedType Function(AstNode) bodyHandler) {
     if (parts is ForParts) {
@@ -2218,6 +2287,7 @@
       Element lhsElement;
       if (parts is ForEachPartsWithDeclaration) {
         var variableElement = parts.loopVariable.declaredElement;
+        _flowAnalysis.declare(variableElement, true);
         lhsElement = variableElement;
         parts.loopVariable?.type?.accept(this);
       } else if (parts is ForEachPartsWithIdentifier) {
@@ -2294,7 +2364,7 @@
       List<TypeParameterElement> constructorTypeParameters,
       {DartType invokeType}) {
     var typeFormals = constructorTypeParameters ?? calleeType.typeFormals;
-    var target = NullabilityNodeTarget.codeRef('invocation', node);
+    var target = NullabilityNodeTarget.text('invocation').withCodeRef(node);
     if (typeFormals.isNotEmpty) {
       if (typeArguments != null) {
         var argumentTypes = typeArguments.arguments
@@ -2505,7 +2575,8 @@
 
   DecoratedType _makeNonNullableBoolType(Expression expression) {
     assert(expression.staticType.isDartCoreBool);
-    var target = NullabilityNodeTarget.codeRef('expression', expression);
+    var target =
+        NullabilityNodeTarget.text('expression').withCodeRef(expression);
     var nullabilityNode = NullabilityNode.forInferredType(target);
     _graph.makeNonNullableUnion(
         nullabilityNode, NonNullableBoolTypeOrigin(source, expression));
@@ -2514,7 +2585,8 @@
 
   DecoratedType _makeNonNullLiteralType(Expression expression,
       {List<DecoratedType> typeArguments = const []}) {
-    var target = NullabilityNodeTarget.codeRef('expression', expression);
+    var target =
+        NullabilityNodeTarget.text('expression').withCodeRef(expression);
     var nullabilityNode = NullabilityNode.forInferredType(target);
     _graph.makeNonNullableUnion(
         nullabilityNode, LiteralOrigin(source, expression));
@@ -2523,7 +2595,8 @@
   }
 
   DecoratedType _makeNullableDynamicType(AstNode astNode) {
-    var target = NullabilityNodeTarget.codeRef('dynamic type', astNode);
+    var target =
+        NullabilityNodeTarget.text('dynamic type').withCodeRef(astNode);
     var decoratedType = DecoratedType.forImplicitType(
         typeProvider, typeProvider.dynamicType, _graph, target);
     _graph.makeNullable(
@@ -2532,7 +2605,7 @@
   }
 
   DecoratedType _makeNullableVoidType(SimpleIdentifier astNode) {
-    var target = NullabilityNodeTarget.codeRef('void type', astNode);
+    var target = NullabilityNodeTarget.text('void type').withCodeRef(astNode);
     var decoratedType = DecoratedType.forImplicitType(
         typeProvider, typeProvider.voidType, _graph, target);
     _graph.makeNullable(
@@ -2563,7 +2636,8 @@
     }
 
     var token = node.beginToken.lexeme;
-    var target = NullabilityNodeTarget.codeRef('$token expression', node);
+    var target =
+        NullabilityNodeTarget.text('$token expression').withCodeRef(node);
     if (_currentClassOrExtension is ClassElement) {
       final type = (_currentClassOrExtension as ClassElement).thisType;
 
diff --git a/pkg/nnbd_migration/lib/src/edit_plan.dart b/pkg/nnbd_migration/lib/src/edit_plan.dart
index 6cb72cb..00931b3 100644
--- a/pkg/nnbd_migration/lib/src/edit_plan.dart
+++ b/pkg/nnbd_migration/lib/src/edit_plan.dart
@@ -69,19 +69,26 @@
   /// if no characters should be inserted.
   final String replacement;
 
+  /// If `true`, this edit shouldn't actually be made to the source file; it
+  /// exists merely to provide additional information to be shown in the preview
+  /// tool.
+  final bool isInformative;
+
   /// Initialize an edit to delete [length] characters.
   ///
   /// Optional argument [info] contains information about why the change was
   /// made.
   const AtomicEdit.delete(this.length, {this.info})
       : assert(length > 0),
-        replacement = '';
+        replacement = '',
+        isInformative = false;
 
   /// Initialize an edit to insert the [replacement] characters.
   ///
   /// Optional argument [info] contains information about why the change was
   /// made.
-  const AtomicEdit.insert(this.replacement, {this.info})
+  const AtomicEdit.insert(this.replacement,
+      {this.info, this.isInformative: false})
       : assert(replacement.length > 0),
         length = 0;
 
@@ -91,7 +98,8 @@
   /// Optional argument [info] contains information about why the change was
   /// made.
   const AtomicEdit.replace(this.length, this.replacement, {this.info})
-      : assert(length > 0 || replacement.length > 0);
+      : assert(length > 0 || replacement.length > 0),
+        isInformative = false;
 
   /// Return `true` if this edit is a deletion (no characters added).
   bool get isDeletion => replacement.length == 0;
@@ -255,6 +263,18 @@
       _PassThroughBuilderImpl(node);
 
   /// Creates a new edit plan that consists of executing [innerPlan], and then
+  /// appending an informative ` `, to illustrate that the type is non-nullable.
+  ///
+  /// Optional argument [info] contains information about why the change was
+  /// made.
+  NodeProducingEditPlan explainNonNullable(NodeProducingEditPlan innerPlan,
+      {AtomicEditInfo info}) {
+    assert(innerPlan.sourceNode is TypeAnnotation);
+    return surround(innerPlan,
+        suffix: [AtomicEdit.insert(' ', info: info, isInformative: true)]);
+  }
+
+  /// Creates a new edit plan that consists of executing [innerPlan], and then
   /// removing from the source code any code that is in [sourceNode] but not in
   /// [innerPlan.sourceNode].  This is intended to be used to drop unnecessary
   /// syntax (for example, to drop an unnecessary cast).
@@ -1498,12 +1518,17 @@
 extension AtomicEditList on List<AtomicEdit> {
   /// Converts a list of [AtomicEdits] to a single [SourceEdit] by concatenating
   /// them.
-  SourceEdit toSourceEdit(int offset) {
+  ///
+  /// If [includeInformative] is `true`, informative edits are included;
+  /// otherwise they are ignored.
+  SourceEdit toSourceEdit(int offset, {bool includeInformative = false}) {
     var totalLength = 0;
     var replacement = '';
     for (var edit in this) {
-      totalLength += edit.length;
-      replacement += edit.replacement;
+      if (!edit.isInformative || includeInformative) {
+        totalLength += edit.length;
+        replacement += edit.replacement;
+      }
     }
     return SourceEdit(offset, totalLength, replacement);
   }
@@ -1514,16 +1539,24 @@
 /// source file changes.
 extension AtomicEditMap on Map<int, List<AtomicEdit>> {
   /// Applies the changes to source file text.
-  String applyTo(String code) {
-    return SourceEdit.applySequence(code, toSourceEdits());
+  ///
+  /// If [includeInformative] is `true`, informative edits are included;
+  /// otherwise they are ignored.
+  String applyTo(String code, {bool includeInformative = false}) {
+    return SourceEdit.applySequence(
+        code, toSourceEdits(includeInformative: includeInformative));
   }
 
   /// Converts the changes to a list of [SourceEdit]s.  The list is reverse
   /// sorted by offset so that they can be applied in order.
-  List<SourceEdit> toSourceEdits() {
+  ///
+  /// If [includeInformative] is `true`, informative edits are included;
+  /// otherwise they are ignored.
+  List<SourceEdit> toSourceEdits({bool includeInformative = false}) {
     return [
       for (var offset in keys.toList()..sort((a, b) => b.compareTo(a)))
-        this[offset].toSourceEdit(offset)
+        this[offset]
+            .toSourceEdit(offset, includeInformative: includeInformative)
     ];
   }
 
diff --git a/pkg/nnbd_migration/lib/src/fix_aggregator.dart b/pkg/nnbd_migration/lib/src/fix_aggregator.dart
index 1aca2bc..a4c8043 100644
--- a/pkg/nnbd_migration/lib/src/fix_aggregator.dart
+++ b/pkg/nnbd_migration/lib/src/fix_aggregator.dart
@@ -5,6 +5,8 @@
 import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/ast/token.dart';
 import 'package:analyzer/dart/ast/visitor.dart';
+import 'package:analyzer/dart/element/element.dart';
+import 'package:analyzer/dart/element/nullability_suffix.dart';
 import 'package:analyzer/dart/element/type.dart';
 import 'package:nnbd_migration/instrumentation.dart';
 import 'package:nnbd_migration/nnbd_migration.dart';
@@ -24,7 +26,35 @@
 
   final EditPlanner planner;
 
-  FixAggregator._(this.planner, this._changes);
+  /// Map from library to the prefix we should use when inserting code that
+  /// refers to it.
+  final Map<LibraryElement, String> _importPrefixes = {};
+
+  FixAggregator._(this.planner, this._changes,
+      CompilationUnitElement compilationUnitElement) {
+    for (var importElement in compilationUnitElement.library.imports) {
+      // TODO(paulberry): the `??=` should ensure that if there are two imports,
+      // one prefixed and one not, we prefer the prefix.  Test this.
+      _importPrefixes[importElement.importedLibrary] ??=
+          importElement.prefix?.name;
+    }
+  }
+
+  /// Creates the necessary Dart code to refer to the given element, using an
+  /// import prefix if necessary.
+  ///
+  /// TODO(paulberry): if the element is not currently imported, we should
+  /// update or add an import statement as necessary.
+  String elementToCode(Element element) {
+    var name = element.name;
+    var library = element.library;
+    var prefix = _importPrefixes[library];
+    if (prefix != null) {
+      return '$prefix.$name';
+    } else {
+      return name;
+    }
+  }
 
   /// Gathers all the changes to nodes descended from [node] into a single
   /// [EditPlan].
@@ -57,6 +87,75 @@
     }
   }
 
+  /// Creates a string representation of the given type parameter element,
+  /// suitable for inserting into the user's source code.
+  String typeFormalToCode(TypeParameterElement formal) {
+    var bound = formal.bound;
+    if (bound == null ||
+        bound.isDynamic ||
+        (bound.isDartCoreObject &&
+            bound.nullabilitySuffix != NullabilitySuffix.none)) {
+      return formal.name;
+    }
+    return '${formal.name} extends ${typeToCode(bound)}';
+  }
+
+  String typeToCode(DartType type) {
+    // TODO(paulberry): is it possible to share code with DartType.toString()
+    // somehow?
+    String suffix =
+        type.nullabilitySuffix == NullabilitySuffix.question ? '?' : '';
+    if (type is InterfaceType) {
+      var name = elementToCode(type.element);
+      var typeArguments = type.typeArguments;
+      if (typeArguments.isEmpty) {
+        return '$name$suffix';
+      } else {
+        var args = [for (var arg in typeArguments) typeToCode(arg)].join(', ');
+        return '$name<$args>$suffix';
+      }
+    } else if (type is FunctionType) {
+      var buffer = StringBuffer();
+      buffer.write(typeToCode(type.returnType));
+      buffer.write(' Function');
+      var typeFormals = type.typeFormals;
+      if (typeFormals.isNotEmpty) {
+        var formals = [for (var formal in typeFormals) typeFormalToCode(formal)]
+            .join(', ');
+        buffer.write('<$formals>');
+      }
+      buffer.write('(');
+      String optionalOrNamedCloser = '';
+      bool commaNeeded = false;
+      for (var parameter in type.parameters) {
+        if (commaNeeded) {
+          buffer.write(', ');
+        } else {
+          commaNeeded = true;
+        }
+        if (optionalOrNamedCloser.isEmpty && !parameter.isRequiredPositional) {
+          if (parameter.isPositional) {
+            buffer.write('[');
+            optionalOrNamedCloser = ']';
+          } else {
+            buffer.write('{');
+            optionalOrNamedCloser = '}';
+          }
+        }
+        buffer.write(typeToCode(parameter.type));
+        if (parameter.isNamed) {
+          buffer.write(' ${parameter.name}');
+        }
+      }
+      buffer.write(optionalOrNamedCloser);
+      buffer.write(')');
+      buffer.write(suffix);
+      return buffer.toString();
+    } else {
+      return type.toString();
+    }
+  }
+
   @override
   void visitNode(AstNode node) {
     var change = _changes[node];
@@ -76,7 +175,7 @@
       {bool removeViaComments: false}) {
     var planner = EditPlanner(unit.lineInfo, sourceText,
         removeViaComments: removeViaComments);
-    var aggregator = FixAggregator._(planner, changes);
+    var aggregator = FixAggregator._(planner, changes, unit.declaredElement);
     unit.accept(aggregator);
     if (aggregator._plans.isEmpty) return {};
     EditPlan plan;
@@ -94,6 +193,10 @@
 abstract class NodeChange<N extends AstNode> {
   NodeChange._();
 
+  /// Indicates whether this node exists solely to provide informative
+  /// information.
+  bool get isInformative => false;
+
   /// Applies this change to the given [node], producing an [EditPlan].  The
   /// [aggregator] may be used to gather up any edits to the node's descendants
   /// into their own [EditPlan]s.
@@ -289,7 +392,7 @@
 
   AtomicEditInfo _addNullCheckInfo;
 
-  String _introducesAsType;
+  DartType _introducesAsType;
 
   AtomicEditInfo _introduceAsInfo;
 
@@ -308,7 +411,7 @@
 
   /// Causes a cast to the given [type] to be added to this expression, with
   /// the given [info].
-  void introduceAs(String type, AtomicEditInfo info) {
+  void introduceAs(DartType type, AtomicEditInfo info) {
     assert(!_addsNullCheck);
     assert(_introducesAsType == null);
     assert(type != null);
@@ -332,7 +435,7 @@
           .addUnaryPostfix(innerPlan, TokenType.BANG, info: _addNullCheckInfo);
     } else if (_introducesAsType != null) {
       return aggregator.planner.addBinaryPostfix(
-          innerPlan, TokenType.AS, _introducesAsType,
+          innerPlan, TokenType.AS, aggregator.typeToCode(_introducesAsType),
           info: _introduceAsInfo);
     } else {
       return innerPlan;
@@ -461,20 +564,35 @@
   /// Indicates whether the type should be made nullable by adding a `?`.
   bool makeNullable = false;
 
-  /// If [makeNullable] is `true`, the decorated type that results.
-  DecoratedType makeNullableType;
+  /// The decorated type of the type annotation, or `null` if there is no
+  /// decorated type info of interest.  If [makeNullable] is `true`, the node
+  /// from this type will be attached to the edit that adds the `?`. If
+  /// [makeNullable] is `false`, the node from this type will be attached to the
+  /// information about why the node wasn't made nullable.
+  DecoratedType decoratedType;
 
   NodeChangeForTypeAnnotation() : super._();
 
   @override
+  bool get isInformative => !makeNullable;
+
+  @override
   EditPlan _apply(TypeAnnotation node, FixAggregator aggregator) {
     var innerPlan = aggregator.innerPlanForNode(node);
-    if (!makeNullable) return innerPlan;
-    return aggregator.planner.makeNullable(innerPlan,
-        info: AtomicEditInfo(
-            NullabilityFixDescription.makeTypeNullable(
-                makeNullableType.type.getDisplayString(withNullability: false)),
-            [makeNullableType.node]));
+    if (decoratedType == null) return innerPlan;
+    if (makeNullable) {
+      return aggregator.planner.makeNullable(innerPlan,
+          info: AtomicEditInfo(
+              NullabilityFixDescription.makeTypeNullable(
+                  decoratedType.type.getDisplayString(withNullability: false)),
+              [decoratedType.node]));
+    } else {
+      return aggregator.planner.explainNonNullable(innerPlan,
+          info: AtomicEditInfo(
+              NullabilityFixDescription.typeNotMadeNullable(
+                  decoratedType.type.getDisplayString(withNullability: false)),
+              [decoratedType.node]));
+    }
   }
 }
 
diff --git a/pkg/nnbd_migration/lib/src/fix_builder.dart b/pkg/nnbd_migration/lib/src/fix_builder.dart
index 098c842..76b1db7 100644
--- a/pkg/nnbd_migration/lib/src/fix_builder.dart
+++ b/pkg/nnbd_migration/lib/src/fix_builder.dart
@@ -32,6 +32,7 @@
 import 'package:nnbd_migration/src/fix_aggregator.dart';
 import 'package:nnbd_migration/src/nullability_node.dart';
 import 'package:nnbd_migration/src/utilities/permissive_mode.dart';
+import 'package:nnbd_migration/src/utilities/resolution_utils.dart';
 import 'package:nnbd_migration/src/variables.dart';
 
 /// Problem reported by [FixBuilder] when encountering a compound assignment
@@ -432,7 +433,7 @@
             NullabilityFixDescription.checkExpression, checks.edges)
         : null;
     (_fixBuilder._getChange(node) as NodeChangeForExpression)
-        .introduceAs(contextType.getDisplayString(withNullability: true), info);
+        .introduceAs(contextType, info);
     _flowAnalysis.asExpression_end(node, contextType);
     return contextType;
   }
@@ -659,10 +660,10 @@
   void visitGenericFunctionType(GenericFunctionType node) {
     var decoratedType = _fixBuilder._variables
         .decoratedTypeAnnotation(_fixBuilder.source, node);
-    if (decoratedType.node.isNullable) {
+    if (!typeIsNonNullableByContext(node)) {
       (_fixBuilder._getChange(node) as NodeChangeForTypeAnnotation)
-        ..makeNullable = true
-        ..makeNullableType = decoratedType;
+        ..makeNullable = decoratedType.node.isNullable
+        ..decoratedType = decoratedType;
     }
     (node as GenericFunctionTypeImpl).type =
         _fixBuilder._variables.toFinalType(decoratedType);
@@ -673,11 +674,13 @@
   void visitTypeName(TypeName node) {
     var decoratedType = _fixBuilder._variables
         .decoratedTypeAnnotation(_fixBuilder.source, node);
-    var type = decoratedType.type;
-    if (!type.isDynamic && !type.isVoid && decoratedType.node.isNullable) {
-      (_fixBuilder._getChange(node) as NodeChangeForTypeAnnotation)
-        ..makeNullable = true
-        ..makeNullableType = decoratedType;
+    if (!typeIsNonNullableByContext(node)) {
+      var type = decoratedType.type;
+      if (!type.isDynamic && !type.isVoid) {
+        (_fixBuilder._getChange(node) as NodeChangeForTypeAnnotation)
+          ..makeNullable = decoratedType.node.isNullable
+          ..decoratedType = decoratedType;
+      }
     }
     node.type = _fixBuilder._variables.toFinalType(decoratedType);
     super.visitTypeName(node);
diff --git a/pkg/nnbd_migration/lib/src/node_builder.dart b/pkg/nnbd_migration/lib/src/node_builder.dart
index 132666e..e0e5a2f 100644
--- a/pkg/nnbd_migration/lib/src/node_builder.dart
+++ b/pkg/nnbd_migration/lib/src/node_builder.dart
@@ -22,6 +22,7 @@
 import 'package:nnbd_migration/src/potential_modification.dart';
 import 'package:nnbd_migration/src/utilities/completeness_tracker.dart';
 import 'package:nnbd_migration/src/utilities/permissive_mode.dart';
+import 'package:nnbd_migration/src/utilities/resolution_utils.dart';
 
 import 'edge_origin.dart';
 
@@ -74,7 +75,7 @@
     if (node.exceptionParameter != null) {
       // If there is no `on Type` part of the catch clause, the type is dynamic.
       if (exceptionType == null) {
-        var target = NullabilityNodeTarget.codeRef('exception', node);
+        var target = NullabilityNodeTarget.text('exception').withCodeRef(node);
         exceptionType = DecoratedType.forImplicitType(
             _typeProvider, _typeProvider.dynamicType, _graph, target);
         instrumentation?.implicitType(
@@ -85,7 +86,7 @@
     }
     if (node.stackTraceParameter != null) {
       // The type of stack traces is always StackTrace (non-nullable).
-      var target = NullabilityNodeTarget.codeRef('stack trace', node);
+      var target = NullabilityNodeTarget.text('stack trace').withCodeRef(node);
       var nullabilityNode = NullabilityNode.forInferredType(target);
       _graph.makeNonNullableUnion(nullabilityNode,
           StackTraceTypeOrigin(source, node.stackTraceParameter));
@@ -273,6 +274,24 @@
   }
 
   @override
+  DecoratedType visitFormalParameterList(FormalParameterList node) {
+    int index = 0;
+    for (var parameter in node.parameters) {
+      var element = parameter.declaredElement;
+      NullabilityNodeTarget newTarget;
+      if (_target == null) {
+        newTarget = null;
+      } else if (element.isNamed) {
+        newTarget = _target.namedParameter(element.name);
+      } else {
+        newTarget = _target.positionalParameter(index++);
+      }
+      _pushNullabilityNodeTarget(newTarget, () => parameter.accept(this));
+    }
+    return null;
+  }
+
+  @override
   DecoratedType visitFunctionDeclaration(FunctionDeclaration node) {
     _handleExecutableDeclaration(
         node,
@@ -398,8 +417,8 @@
   DecoratedType visitTypeAnnotation(TypeAnnotation node) {
     assert(node != null); // TODO(paulberry)
     var type = node.type;
-    var target =
-        _target ?? NullabilityNodeTarget.codeRef('explicit type', node);
+    var target = (_target ?? NullabilityNodeTarget.text('explicit type'))
+        .withCodeRef(node);
     if (type.isVoid || type.isDynamic) {
       var nullabilityNode = NullabilityNode.forTypeAnnotation(target);
       var decoratedType = DecoratedType(type, nullabilityNode);
@@ -457,13 +476,7 @@
       }
     }
     NullabilityNode nullabilityNode;
-    var parent = node.parent;
-    if (parent is ExtendsClause ||
-        parent is ImplementsClause ||
-        parent is WithClause ||
-        parent is OnClause ||
-        parent is ClassTypeAlias ||
-        parent is GenericTypeAlias) {
+    if (typeIsNonNullableByContext(node)) {
       nullabilityNode = _graph.never;
     } else {
       nullabilityNode = NullabilityNode.forTypeAnnotation(target);
@@ -612,7 +625,7 @@
     DecoratedType decoratedFunctionType;
     try {
       typeParameters?.accept(this);
-      parameters?.accept(this);
+      _pushNullabilityNodeTarget(target, () => parameters?.accept(this));
       redirectedConstructor?.accept(this);
       initializers?.accept(this);
       decoratedFunctionType = DecoratedType(functionType, _graph.never,
@@ -708,8 +721,8 @@
     for (var supertype in supertypes) {
       DecoratedType decoratedSupertype;
       if (supertype == null) {
-        var target =
-            NullabilityNodeTarget.codeRef('implicit object supertype', astNode);
+        var target = NullabilityNodeTarget.text('implicit object supertype')
+            .withCodeRef(astNode);
         var nullabilityNode = NullabilityNode.forInferredType(target);
         _graph.makeNonNullableUnion(
             nullabilityNode, NonNullableObjectSuperclass(source, astNode));
diff --git a/pkg/nnbd_migration/lib/src/nullability_node.dart b/pkg/nnbd_migration/lib/src/nullability_node.dart
index 506236e..6031c97 100644
--- a/pkg/nnbd_migration/lib/src/nullability_node.dart
+++ b/pkg/nnbd_migration/lib/src/nullability_node.dart
@@ -680,7 +680,7 @@
   /// Creates a [NullabilityNode] representing the nullability of a variable
   /// whose type is determined by the `??` operator.
   factory NullabilityNode.forIfNotNull(AstNode node) => _NullabilityNodeSimple(
-      NullabilityNodeTarget.codeRef('?? operator', node));
+      NullabilityNodeTarget.text('?? operator').withCodeRef(node));
 
   /// Creates a [NullabilityNode] representing the nullability of a variable
   /// whose type is determined by type inference.
diff --git a/pkg/nnbd_migration/lib/src/nullability_node_target.dart b/pkg/nnbd_migration/lib/src/nullability_node_target.dart
index c83ae21..61a46e6 100644
--- a/pkg/nnbd_migration/lib/src/nullability_node_target.dart
+++ b/pkg/nnbd_migration/lib/src/nullability_node_target.dart
@@ -27,11 +27,6 @@
 /// Data structure tracking information about which type in the user's source
 /// code is referenced by a given nullability node.
 abstract class NullabilityNodeTarget {
-  /// Creates a [NullabilityNodeTarget] referring to a particular point in the
-  /// source code.
-  factory NullabilityNodeTarget.codeRef(String description, AstNode astNode) =
-      _NullabilityNodeTarget_CodeRef;
-
   /// Creates a [NullabilityNodeTarget] referring to a particular element.
   factory NullabilityNodeTarget.element(Element element) =
       _NullabilityNodeTarget_Element;
@@ -51,8 +46,15 @@
   CodeReference get codeReference => null;
 
   /// Gets a short description of this nullability node target suitable for
-  /// displaying to the user.
-  String get displayName;
+  /// displaying to the user, not including a code reference.
+  String get description;
+
+  /// Same as [description], but if there is a [codeReference], it is included
+  /// after the description in parentheses.
+  String get displayName {
+    if (codeReference == null) return description;
+    return '$description (${codeReference.shortName})';
+  }
 
   /// Creates a new [NullabilityNodeTarget] representing a named function
   /// parameter of this target.
@@ -77,21 +79,26 @@
   /// function type parameter of this target.
   NullabilityNodeTarget typeFormalBound(String typeFormalName) =>
       _NullabilityNodeTarget_TypeFormalBound(this, typeFormalName);
+
+  /// Creates a [NullabilityNodeTarget] referring to a particular point in the
+  /// source code.
+  NullabilityNodeTarget withCodeRef(AstNode astNode) =>
+      _NullabilityNodeTarget_CodeRef(this, astNode);
 }
 
 /// Nullability node target representing a reference to a specific location in
 /// source code.
 class _NullabilityNodeTarget_CodeRef extends NullabilityNodeTarget {
-  final String description;
+  final NullabilityNodeTarget inner;
 
   final CodeReference codeReference;
 
-  _NullabilityNodeTarget_CodeRef(this.description, AstNode astNode)
+  _NullabilityNodeTarget_CodeRef(this.inner, AstNode astNode)
       : codeReference = CodeReference.fromAstNode(astNode),
         super._();
 
   @override
-  String get displayName => '$description (${codeReference.shortName})';
+  String get description => inner.description;
 }
 
 /// Nullability node target representing the type of an element.
@@ -103,7 +110,7 @@
         super._();
 
   @override
-  String get displayName => name;
+  String get description => name;
 }
 
 /// Nullability node target representing the type of a named function parameter.
@@ -115,7 +122,7 @@
       : super(inner);
 
   @override
-  String get displayName => 'parameter $name of ${inner.displayName}';
+  String get description => 'parameter $name of ${inner.description}';
 }
 
 /// Nullability node target representing a type that forms part of a larger type
@@ -140,7 +147,7 @@
       : super(inner);
 
   @override
-  String get displayName => 'parameter $index of ${inner.displayName}';
+  String get description => 'parameter $index of ${inner.description}';
 }
 
 /// Nullability node target representing a function's return type.
@@ -148,7 +155,7 @@
   _NullabilityNodeTarget_ReturnType(NullabilityNodeTarget inner) : super(inner);
 
   @override
-  String get displayName => 'return type of ${inner.displayName}';
+  String get description => 'return type of ${inner.description}';
 }
 
 /// Nullability node target for which we only know a string description.
@@ -158,7 +165,7 @@
   _NullabilityNodeTarget_Text(this.name) : super._();
 
   @override
-  String get displayName => name;
+  String get description => name;
 }
 
 /// Nullability node target representing a type argument of an interface type or
@@ -170,7 +177,7 @@
       : super(inner);
 
   @override
-  String get displayName => 'type argument $index of ${inner.displayName}';
+  String get description => 'type argument $index of ${inner.description}';
 }
 
 /// Nullability node target representing a bound of a function type's formal
@@ -184,8 +191,8 @@
       : super(inner);
 
   @override
-  String get displayName =>
-      'bound of type formal $typeFormalName of ${inner.displayName}';
+  String get description =>
+      'bound of type formal $typeFormalName of ${inner.description}';
 }
 
 /// Nullability node target representing a type parameter bound.
@@ -197,5 +204,5 @@
         super._();
 
   @override
-  String get displayName => 'bound of $name';
+  String get description => 'bound of $name';
 }
diff --git a/pkg/nnbd_migration/lib/src/utilities/resolution_utils.dart b/pkg/nnbd_migration/lib/src/utilities/resolution_utils.dart
index d5d8170..81624db 100644
--- a/pkg/nnbd_migration/lib/src/utilities/resolution_utils.dart
+++ b/pkg/nnbd_migration/lib/src/utilities/resolution_utils.dart
@@ -2,8 +2,22 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'package:analyzer/dart/ast/ast.dart';
 import 'package:analyzer/dart/element/type_provider.dart';
 
+/// Determines whether a type annotation's position in the AST makes it
+/// impossible to be nullable.
+bool typeIsNonNullableByContext(TypeAnnotation node) {
+  var parent = node.parent;
+  return parent is ExtendsClause ||
+      parent is ImplementsClause ||
+      parent is WithClause ||
+      parent is OnClause ||
+      parent is ClassTypeAlias ||
+      parent is GenericTypeAlias ||
+      parent is ConstructorName;
+}
+
 /// This mixin provides utilities that are useful to visitors implementing
 /// resolution-like behaviors.
 mixin ResolutionUtils {
diff --git a/pkg/nnbd_migration/test/api_test.dart b/pkg/nnbd_migration/test/api_test.dart
index 7a63ba6..06dd229 100644
--- a/pkg/nnbd_migration/test/api_test.dart
+++ b/pkg/nnbd_migration/test/api_test.dart
@@ -2053,6 +2053,32 @@
     await _checkSingleFileChanges(content, expected);
   }
 
+  Future<void> test_field_overrides_getter() async {
+    var content = '''
+abstract class C {
+  int get i;
+}
+class D implements C {
+  @override
+  final int i;
+  D._() : i = computeI();
+}
+int computeI() => null;
+''';
+    var expected = '''
+abstract class C {
+  int? get i;
+}
+class D implements C {
+  @override
+  final int? i;
+  D._() : i = computeI();
+}
+int? computeI() => null;
+''';
+    await _checkSingleFileChanges(content, expected);
+  }
+
   Future<void> test_field_type_inferred() async {
     var content = '''
 int f() => null;
@@ -2161,6 +2187,28 @@
     await _checkSingleFileChanges(content, expected);
   }
 
+  Future<void> test_for_each_variable_initialized() async {
+    var content = '''
+int sum(List<int> list) {
+  int total = 0;
+  for (var i in list) {
+    total = total + i;
+  }
+  return total;
+}
+''';
+    var expected = '''
+int sum(List<int> list) {
+  int total = 0;
+  for (var i in list) {
+    total = total + i;
+  }
+  return total;
+}
+''';
+    await _checkSingleFileChanges(content, expected);
+  }
+
   Future<void> test_function_expression() async {
     var content = '''
 int f(int i) {
@@ -2704,6 +2752,18 @@
     await _checkSingleFileChanges(content, expected);
   }
 
+  Future<void> test_insert_as_prefixed_type() async {
+    var content = '''
+import 'dart:async' as a;
+Future<int> f(Object o) => o;
+''';
+    var expected = '''
+import 'dart:async' as a;
+Future<int> f(Object o) => o as a.Future<int>;
+''';
+    await _checkSingleFileChanges(content, expected);
+  }
+
   @FailingTest(issue: 'https://github.com/dart-lang/sdk/issues/40871')
   Future<void> test_insert_type_with_prefix() async {
     var content = '''
diff --git a/pkg/nnbd_migration/test/edge_builder_test.dart b/pkg/nnbd_migration/test/edge_builder_test.dart
index a410270..9612cea 100644
--- a/pkg/nnbd_migration/test/edge_builder_test.dart
+++ b/pkg/nnbd_migration/test/edge_builder_test.dart
@@ -2705,6 +2705,22 @@
     // metadata was visited.
   }
 
+  Future<void> test_field_final_does_not_override_setter() async {
+    await analyze('''
+abstract class A {
+  void set i(int value);
+}
+abstract class C implements A {
+  final int i;
+  C(this.i);
+}
+''');
+    var baseNode = decoratedTypeAnnotation('int value').node;
+    var derivedNode = decoratedTypeAnnotation('int i').node;
+    assertNoEdge(derivedNode, baseNode);
+    assertNoEdge(baseNode, derivedNode);
+  }
+
   Future<void> test_field_initialized_in_constructor() async {
     await analyze('''
 class C {
@@ -2731,6 +2747,67 @@
     // metadata was visited.
   }
 
+  Future<void> test_field_overrides_field() async {
+    await analyze('''
+abstract class A {
+  int i; // A
+}
+class C implements A {
+  int i; // C
+}
+''');
+    var baseNode = decoratedTypeAnnotation('int i; // A').node;
+    var derivedNode = decoratedTypeAnnotation('int i; // C').node;
+    assertEdge(baseNode, derivedNode, hard: true);
+    assertEdge(derivedNode, baseNode, hard: true);
+  }
+
+  Future<void> test_field_overrides_field_final() async {
+    await analyze('''
+abstract class A {
+  final int i; // A
+  A(this.i);
+}
+class C implements A {
+  int i; // C
+}
+''');
+    var baseNode = decoratedTypeAnnotation('int i; // A').node;
+    var derivedNode = decoratedTypeAnnotation('int i; // C').node;
+    assertEdge(derivedNode, baseNode, hard: true);
+    assertNoEdge(baseNode, derivedNode);
+  }
+
+  Future<void> test_field_overrides_getter() async {
+    await analyze('''
+abstract class A {
+  int get i;
+}
+class C implements A {
+  int i;
+}
+''');
+    var baseNode = decoratedTypeAnnotation('int get i').node;
+    var derivedNode = decoratedTypeAnnotation('int i').node;
+    assertEdge(derivedNode, baseNode, hard: true);
+    assertNoEdge(baseNode, derivedNode);
+  }
+
+  Future<void> test_field_overrides_setter() async {
+    await analyze('''
+abstract class A {
+  void set i(int value);
+}
+class C implements A {
+  int i;
+}
+''');
+    var baseNode = decoratedTypeAnnotation('int value').node;
+    var derivedNode = decoratedTypeAnnotation('int i').node;
+    assertEdge(baseNode, derivedNode, hard: true);
+    assertNoEdge(derivedNode, baseNode);
+  }
+
   Future<void> test_field_static_implicitInitializer() async {
     await analyze('''
 class C {
diff --git a/pkg/nnbd_migration/test/edit_plan_test.dart b/pkg/nnbd_migration/test/edit_plan_test.dart
index 3d78101..5cb8c7f 100644
--- a/pkg/nnbd_migration/test/edit_plan_test.dart
+++ b/pkg/nnbd_migration/test/edit_plan_test.dart
@@ -40,9 +40,13 @@
     await resolveTestUnit(code);
   }
 
-  Map<int, List<AtomicEdit>> checkPlan(EditPlan plan, String expected) {
+  Map<int, List<AtomicEdit>> checkPlan(EditPlan plan, String expected,
+      {String expectedIncludingInformative}) {
+    expectedIncludingInformative ??= expected;
     var changes = planner.finalize(plan);
     expect(changes.applyTo(code), expected);
+    expect(changes.applyTo(code, includeInformative: true),
+        expectedIncludingInformative);
     return changes;
   }
 
@@ -284,6 +288,15 @@
     }
   }
 
+  Future<void> test_explainNonNullable() async {
+    await analyze('int x = 0;');
+    checkPlan(
+        planner.explainNonNullable(
+            planner.passThrough(findNode.typeAnnotation('int'))),
+        'int x = 0;',
+        expectedIncludingInformative: 'int  x = 0;');
+  }
+
   Future<void> test_extract_add_parens() async {
     await analyze('f(g) => 1 * g(2, 3 + 4, 5);');
     checkPlan(
diff --git a/pkg/nnbd_migration/test/fix_aggregator_test.dart b/pkg/nnbd_migration/test/fix_aggregator_test.dart
index 10cc5a8..e50444b 100644
--- a/pkg/nnbd_migration/test/fix_aggregator_test.dart
+++ b/pkg/nnbd_migration/test/fix_aggregator_test.dart
@@ -2,9 +2,13 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+import 'package:analyzer/analyzer.dart';
 import 'package:analyzer/dart/ast/ast.dart';
+import 'package:analyzer/dart/element/nullability_suffix.dart';
 import 'package:analyzer/dart/element/type.dart';
+import 'package:analyzer/src/dart/element/element.dart';
 import 'package:analyzer/src/dart/element/type.dart';
+import 'package:analyzer/src/dart/element/type_provider.dart';
 import 'package:nnbd_migration/src/decorated_type.dart';
 import 'package:nnbd_migration/src/edit_plan.dart';
 import 'package:nnbd_migration/src/fix_aggregator.dart';
@@ -23,6 +27,10 @@
 
 @reflectiveTest
 class FixAggregatorTest extends FixAggregatorTestBase {
+  TypeProviderImpl get nnbdTypeProvider =>
+      (testAnalysisResult.typeProvider as TypeProviderImpl)
+          .asNonNullableByDefault;
+
   Future<void> test_addRequired() async {
     await analyze('f({int x}) => 0;');
     var previewInfo = run({
@@ -374,28 +382,296 @@
     // leave them.
     await analyze('f(a, c) => a..b = (throw c..d);');
     var cd = findNode.cascade('c..d');
-    var previewInfo =
-        run({cd: NodeChangeForExpression()..introduceAs('int', _MockInfo())});
+    var previewInfo = run({
+      cd: NodeChangeForExpression()
+        ..introduceAs(nnbdTypeProvider.intType, _MockInfo())
+    });
     expect(
         previewInfo.applyTo(code), 'f(a, c) => a..b = (throw (c..d) as int);');
   }
 
+  Future<void> test_introduceAs_dynamic() async {
+    await analyze('f(Object o) => o;');
+    var expr = findNode.simple('o;');
+    var previewInfo = run({
+      expr: NodeChangeForExpression()
+        ..introduceAs(nnbdTypeProvider.dynamicType, _MockInfo())
+    });
+    expect(previewInfo.applyTo(code), 'f(Object o) => o as dynamic;');
+  }
+
+  Future<void> test_introduceAs_favorPrefix() async {
+    await analyze('''
+import 'dart:async' as a;
+import 'dart:async';
+f(Object o) => o;
+''');
+    var expr = findNode.simple('o;');
+    var previewInfo = run({
+      expr: NodeChangeForExpression()
+        ..introduceAs(nnbdTypeProvider.futureNullType, _MockInfo())
+    });
+    expect(previewInfo.applyTo(code), '''
+import 'dart:async' as a;
+import 'dart:async';
+f(Object o) => o as a.Future<Null>;
+''');
+  }
+
+  Future<void> test_introduceAs_functionType() async {
+    await analyze('f(Object o) => o;');
+    var expr = findNode.simple('o;');
+    var previewInfo = run({
+      expr: NodeChangeForExpression()
+        ..introduceAs(
+            FunctionTypeImpl(
+                returnType: nnbdTypeProvider.boolType,
+                typeFormals: [],
+                parameters: [],
+                nullabilitySuffix: NullabilitySuffix.none),
+            _MockInfo())
+    });
+    expect(previewInfo.applyTo(code), 'f(Object o) => o as bool Function();');
+  }
+
+  Future<void> test_introduceAs_functionType_formal_bound() async {
+    await analyze('f(Object o) => o;');
+    var expr = findNode.simple('o;');
+    var previewInfo = run({
+      expr: NodeChangeForExpression()
+        ..introduceAs(
+            FunctionTypeImpl(
+                returnType: nnbdTypeProvider.boolType,
+                typeFormals: [
+                  TypeParameterElementImpl.synthetic('T')
+                    ..bound = nnbdTypeProvider.numType
+                ],
+                parameters: [],
+                nullabilitySuffix: NullabilitySuffix.none),
+            _MockInfo())
+    });
+    expect(previewInfo.applyTo(code),
+        'f(Object o) => o as bool Function<T extends num>();');
+  }
+
+  Future<void> test_introduceAs_functionType_formal_bound_dynamic() async {
+    await analyze('f(Object o) => o;');
+    var expr = findNode.simple('o;');
+    var previewInfo = run({
+      expr: NodeChangeForExpression()
+        ..introduceAs(
+            FunctionTypeImpl(
+                returnType: nnbdTypeProvider.boolType,
+                typeFormals: [
+                  TypeParameterElementImpl.synthetic('T')
+                    ..bound = nnbdTypeProvider.dynamicType
+                ],
+                parameters: [],
+                nullabilitySuffix: NullabilitySuffix.none),
+            _MockInfo())
+    });
+    expect(
+        previewInfo.applyTo(code), 'f(Object o) => o as bool Function<T>();');
+  }
+
+  Future<void> test_introduceAs_functionType_formal_bound_object() async {
+    await analyze('f(Object o) => o;');
+    var expr = findNode.simple('o;');
+    var previewInfo = run({
+      expr: NodeChangeForExpression()
+        ..introduceAs(
+            FunctionTypeImpl(
+                returnType: nnbdTypeProvider.boolType,
+                typeFormals: [
+                  TypeParameterElementImpl.synthetic('T')
+                    ..bound = nnbdTypeProvider.objectType
+                ],
+                parameters: [],
+                nullabilitySuffix: NullabilitySuffix.none),
+            _MockInfo())
+    });
+    expect(previewInfo.applyTo(code),
+        'f(Object o) => o as bool Function<T extends Object>();');
+  }
+
+  Future<void>
+      test_introduceAs_functionType_formal_bound_object_question() async {
+    await analyze('f(Object o) => o;');
+    var expr = findNode.simple('o;');
+    var previewInfo = run({
+      expr: NodeChangeForExpression()
+        ..introduceAs(
+            FunctionTypeImpl(
+                returnType: nnbdTypeProvider.boolType,
+                typeFormals: [
+                  TypeParameterElementImpl.synthetic('T')
+                    ..bound = (nnbdTypeProvider.objectType as TypeImpl)
+                        .withNullability(NullabilitySuffix.question)
+                ],
+                parameters: [],
+                nullabilitySuffix: NullabilitySuffix.none),
+            _MockInfo())
+    });
+    expect(
+        previewInfo.applyTo(code), 'f(Object o) => o as bool Function<T>();');
+  }
+
+  Future<void> test_introduceAs_functionType_formal_bound_question() async {
+    await analyze('f(Object o) => o;');
+    var expr = findNode.simple('o;');
+    var previewInfo = run({
+      expr: NodeChangeForExpression()
+        ..introduceAs(
+            FunctionTypeImpl(
+                returnType: nnbdTypeProvider.boolType,
+                typeFormals: [
+                  TypeParameterElementImpl.synthetic('T')
+                    ..bound = (nnbdTypeProvider.numType as TypeImpl)
+                        .withNullability(NullabilitySuffix.question)
+                ],
+                parameters: [],
+                nullabilitySuffix: NullabilitySuffix.none),
+            _MockInfo())
+    });
+    expect(previewInfo.applyTo(code),
+        'f(Object o) => o as bool Function<T extends num?>();');
+  }
+
+  Future<void> test_introduceAs_functionType_formals() async {
+    await analyze('f(Object o) => o;');
+    var expr = findNode.simple('o;');
+    var previewInfo = run({
+      expr: NodeChangeForExpression()
+        ..introduceAs(
+            FunctionTypeImpl(
+                returnType: nnbdTypeProvider.boolType,
+                typeFormals: [
+                  TypeParameterElementImpl.synthetic('T'),
+                  TypeParameterElementImpl.synthetic('U')
+                ],
+                parameters: [],
+                nullabilitySuffix: NullabilitySuffix.none),
+            _MockInfo())
+    });
+    expect(previewInfo.applyTo(code),
+        'f(Object o) => o as bool Function<T, U>();');
+  }
+
+  Future<void> test_introduceAs_functionType_parameters() async {
+    await analyze('f(Object o) => o;');
+    var expr = findNode.simple('o;');
+    var previewInfo = run({
+      expr: NodeChangeForExpression()
+        ..introduceAs(
+            FunctionTypeImpl(
+                returnType: nnbdTypeProvider.boolType,
+                typeFormals: [],
+                parameters: [
+                  ParameterElementImpl.synthetic(
+                      'x', nnbdTypeProvider.intType, ParameterKind.REQUIRED),
+                  ParameterElementImpl.synthetic(
+                      'y', nnbdTypeProvider.numType, ParameterKind.REQUIRED)
+                ],
+                nullabilitySuffix: NullabilitySuffix.none),
+            _MockInfo())
+    });
+    expect(previewInfo.applyTo(code),
+        'f(Object o) => o as bool Function(int, num);');
+  }
+
+  Future<void> test_introduceAs_functionType_parameters_named() async {
+    await analyze('f(Object o) => o;');
+    var expr = findNode.simple('o;');
+    var previewInfo = run({
+      expr: NodeChangeForExpression()
+        ..introduceAs(
+            FunctionTypeImpl(
+                returnType: nnbdTypeProvider.boolType,
+                typeFormals: [],
+                parameters: [
+                  ParameterElementImpl.synthetic(
+                      'x', nnbdTypeProvider.intType, ParameterKind.NAMED),
+                  ParameterElementImpl.synthetic(
+                      'y', nnbdTypeProvider.numType, ParameterKind.NAMED)
+                ],
+                nullabilitySuffix: NullabilitySuffix.none),
+            _MockInfo())
+    });
+    expect(previewInfo.applyTo(code),
+        'f(Object o) => o as bool Function({int x, num y});');
+  }
+
+  Future<void> test_introduceAs_functionType_parameters_optional() async {
+    await analyze('f(Object o) => o;');
+    var expr = findNode.simple('o;');
+    var previewInfo = run({
+      expr: NodeChangeForExpression()
+        ..introduceAs(
+            FunctionTypeImpl(
+                returnType: nnbdTypeProvider.boolType,
+                typeFormals: [],
+                parameters: [
+                  ParameterElementImpl.synthetic(
+                      'x', nnbdTypeProvider.intType, ParameterKind.POSITIONAL),
+                  ParameterElementImpl.synthetic(
+                      'y', nnbdTypeProvider.numType, ParameterKind.POSITIONAL)
+                ],
+                nullabilitySuffix: NullabilitySuffix.none),
+            _MockInfo())
+    });
+    expect(previewInfo.applyTo(code),
+        'f(Object o) => o as bool Function([int, num]);');
+  }
+
+  Future<void> test_introduceAs_interfaceType_parameterized() async {
+    await analyze('f(Object o) => o;');
+    var expr = findNode.simple('o;');
+    var previewInfo = run({
+      expr: NodeChangeForExpression()
+        ..introduceAs(
+            nnbdTypeProvider.mapType2(
+                nnbdTypeProvider.intType, nnbdTypeProvider.boolType),
+            _MockInfo())
+    });
+    expect(previewInfo.applyTo(code), 'f(Object o) => o as Map<int, bool>;');
+  }
+
   Future<void> test_introduceAs_no_parens() async {
     await analyze('f(a, b) => a | b;');
     var expr = findNode.binary('a | b');
-    var previewInfo =
-        run({expr: NodeChangeForExpression()..introduceAs('int', _MockInfo())});
+    var previewInfo = run({
+      expr: NodeChangeForExpression()
+        ..introduceAs(nnbdTypeProvider.intType, _MockInfo())
+    });
     expect(previewInfo.applyTo(code), 'f(a, b) => a | b as int;');
   }
 
   Future<void> test_introduceAs_parens() async {
     await analyze('f(a, b) => a < b;');
     var expr = findNode.binary('a < b');
-    var previewInfo = run(
-        {expr: NodeChangeForExpression()..introduceAs('bool', _MockInfo())});
+    var previewInfo = run({
+      expr: NodeChangeForExpression()
+        ..introduceAs(nnbdTypeProvider.boolType, _MockInfo())
+    });
     expect(previewInfo.applyTo(code), 'f(a, b) => (a < b) as bool;');
   }
 
+  Future<void> test_introduceAs_usePrefix() async {
+    await analyze('''
+import 'dart:async' as a;
+f(Object o) => o;
+''');
+    var expr = findNode.simple('o;');
+    var previewInfo = run({
+      expr: NodeChangeForExpression()
+        ..introduceAs(nnbdTypeProvider.futureNullType, _MockInfo())
+    });
+    expect(previewInfo.applyTo(code), '''
+import 'dart:async' as a;
+f(Object o) => o as a.Future<Null>;
+''');
+  }
+
   Future<void> test_keep_redundant_parens() async {
     await analyze('f(a, b, c) => a + (b * c);');
     var previewInfo = run({});
@@ -408,12 +684,33 @@
     var previewInfo = run({
       typeName: NodeChangeForTypeAnnotation()
         ..makeNullable = true
-        ..makeNullableType = MockDecoratedType(
+        ..decoratedType = MockDecoratedType(
             MockDartType(toStringValueWithoutNullability: 'int'))
     });
     expect(previewInfo.applyTo(code), 'f(int? x) {}');
   }
 
+  Future<void> test_noChangeToTypeAnnotation() async {
+    await analyze('int x = 0;');
+    var typeName = findNode.typeName('int');
+    var previewInfo = run({
+      typeName: NodeChangeForTypeAnnotation()
+        ..decoratedType = MockDecoratedType(
+            MockDartType(toStringValueWithoutNullability: 'int'))
+    });
+    expect(previewInfo.applyTo(code), 'int x = 0;');
+    expect(previewInfo.applyTo(code, includeInformative: true), 'int  x = 0;');
+    expect(previewInfo.values.single.single.info.description.appliedMessage,
+        "Type 'int' was not made nullable");
+  }
+
+  Future<void> test_noInfoForTypeAnnotation() async {
+    await analyze('int x = 0;');
+    var typeName = findNode.typeName('int');
+    var previewInfo = run({typeName: NodeChangeForTypeAnnotation()});
+    expect(previewInfo, null);
+  }
+
   Future<void> test_nullCheck_index_cascadeResult() async {
     await analyze('f(a) => a..[0].c;');
     var index = findNode.index('[0]');
@@ -614,7 +911,7 @@
         ..removeNullAwareness = true,
       typeAnnotation: NodeChangeForTypeAnnotation()
         ..makeNullable = true
-        ..makeNullableType = MockDecoratedType(
+        ..decoratedType = MockDecoratedType(
             MockDartType(toStringValueWithoutNullability: 'int'))
     });
     expect(previewInfo.applyTo(code), 'f(x) => x.m<int?>();');
diff --git a/pkg/nnbd_migration/test/fix_builder_test.dart b/pkg/nnbd_migration/test/fix_builder_test.dart
index bded508..228047a 100644
--- a/pkg/nnbd_migration/test/fix_builder_test.dart
+++ b/pkg/nnbd_migration/test/fix_builder_test.dart
@@ -46,6 +46,9 @@
   static final isMakeNullable = TypeMatcher<NodeChangeForTypeAnnotation>()
       .having((c) => c.makeNullable, 'makeNullable', true);
 
+  static final isExplainNonNullable = TypeMatcher<NodeChangeForTypeAnnotation>()
+      .having((c) => c.makeNullable, 'makeNullable', false);
+
   static final isNullCheck = TypeMatcher<NodeChangeForExpression>()
       .having((c) => c.addsNullCheck, 'addsNullCheck', true);
 
@@ -78,7 +81,16 @@
           FixBuilder fixBuilder, AstNode scope) =>
       {
         for (var entry in fixBuilder.changes.entries)
-          if (_isInScope(entry.key, scope)) entry.key: entry.value
+          if (_isInScope(entry.key, scope) && !entry.value.isInformative)
+            entry.key: entry.value
+      };
+
+  Map<AstNode, NodeChange> scopedInformative(
+          FixBuilder fixBuilder, AstNode scope) =>
+      {
+        for (var entry in fixBuilder.changes.entries)
+          if (_isInScope(entry.key, scope) && entry.value.isInformative)
+            entry.key: entry.value
       };
 
   Map<AstNode, Set<Problem>> scopedProblems(
@@ -1216,8 +1228,18 @@
   void Function() x = _f;
 }
 ''');
-    visitTypeAnnotation(
-        findNode.genericFunctionType('Function'), 'void Function()');
+    var genericFunctionType = findNode.genericFunctionType('Function');
+    visitTypeAnnotation(genericFunctionType, 'void Function()',
+        informative: {genericFunctionType: isExplainNonNullable});
+  }
+
+  Future<void> test_genericFunctionType_nonNullable_by_context() async {
+    await analyze('''
+typedef F = void Function();
+''');
+    var genericFunctionType = findNode.genericFunctionType('Function');
+    visitTypeAnnotation(genericFunctionType, 'void Function()',
+        informative: isEmpty);
   }
 
   Future<void> test_genericFunctionType_nullable() async {
@@ -2575,7 +2597,17 @@
   int i = 0;
 }
 ''');
-    visitTypeAnnotation(findNode.typeAnnotation('int'), 'int');
+    var typeAnnotation = findNode.typeAnnotation('int');
+    visitTypeAnnotation(typeAnnotation, 'int',
+        informative: {typeAnnotation: isExplainNonNullable});
+  }
+
+  Future<void> test_typeName_simple_nonNullable_by_context() async {
+    await analyze('''
+class C extends Object {}
+''');
+    visitTypeAnnotation(findNode.typeAnnotation('Object'), 'Object',
+        informative: isEmpty);
   }
 
   Future<void> test_typeName_simple_nullable() async {
@@ -2715,13 +2747,15 @@
 
   void visitTypeAnnotation(TypeAnnotation node, String expectedType,
       {Map<AstNode, Matcher> changes = const <AstNode, Matcher>{},
-      Map<AstNode, Set<Problem>> problems = const <AstNode, Set<Problem>>{}}) {
+      Map<AstNode, Set<Problem>> problems = const <AstNode, Set<Problem>>{},
+      dynamic informative = anything}) {
     var fixBuilder = _createFixBuilder(node);
     fixBuilder.visitAll();
     var type = node.type;
     expect(type.getDisplayString(withNullability: true), expectedType);
     expect(scopedChanges(fixBuilder, node), changes);
     expect(scopedProblems(fixBuilder, node), problems);
+    expect(scopedInformative(fixBuilder, node), informative);
   }
 
   AssignmentTargetInfo _computeAssignmentTargetInfo(
diff --git a/pkg/nnbd_migration/test/instrumentation_test.dart b/pkg/nnbd_migration/test/instrumentation_test.dart
index a27e8f4..3f20a56 100644
--- a/pkg/nnbd_migration/test/instrumentation_test.dart
+++ b/pkg/nnbd_migration/test/instrumentation_test.dart
@@ -29,7 +29,11 @@
   @override
   void changes(Source source, Map<int, List<AtomicEdit>> changes) {
     expect(test.changes, isNull);
-    test.changes = changes;
+    test.changes = {
+      for (var entry in changes.entries)
+        if (entry.value.any((edit) => !edit.isInformative))
+          entry.key: entry.value
+    };
   }
 
   @override
diff --git a/pkg/nnbd_migration/test/node_builder_test.dart b/pkg/nnbd_migration/test/node_builder_test.dart
index f6e8bbc..7a1fcf7 100644
--- a/pkg/nnbd_migration/test/node_builder_test.dart
+++ b/pkg/nnbd_migration/test/node_builder_test.dart
@@ -454,6 +454,24 @@
         same(decoratedTypeAnnotation('V> {').node));
   }
 
+  Future<void> test_displayName_explicitParameterType_named() async {
+    await analyze('void f({int x, int y}) {}');
+    expect(decoratedTypeAnnotation('int x').node.displayName,
+        'parameter x of f (test.dart:1:9)');
+    expect(decoratedTypeAnnotation('int y').node.displayName,
+        'parameter y of f (test.dart:1:16)');
+  }
+
+  Future<void> test_displayName_explicitParameterType_positional() async {
+    await analyze('void f(int x, int y, [int z]) {}');
+    expect(decoratedTypeAnnotation('int x').node.displayName,
+        'parameter 0 of f (test.dart:1:8)');
+    expect(decoratedTypeAnnotation('int y').node.displayName,
+        'parameter 1 of f (test.dart:1:15)');
+    expect(decoratedTypeAnnotation('int z').node.displayName,
+        'parameter 2 of f (test.dart:1:23)');
+  }
+
   Future<void> test_dynamic_type() async {
     await analyze('''
 dynamic f() {}
@@ -656,7 +674,8 @@
 }
 ''');
     var decoratedType = decoratedTypeAnnotation('int');
-    expect(decoratedType.node.displayName, 'return type of C.f');
+    expect(
+        decoratedType.node.displayName, 'return type of C.f (test.dart:2:3)');
   }
 
   Future<void> test_function_generic_bounded() async {
@@ -903,7 +922,7 @@
     expect(decoratedIntType.node, isNotNull);
     expect(decoratedIntType.node, isNot(never));
     expect(decoratedType.returnType.node.displayName,
-        'return type of explicit type (test.dart:1:8)');
+        'parameter 0 of f (test.dart:1:8)');
   }
 
   Future<void> test_genericFunctionType_syntax_inferred_dynamic_return() async {
@@ -1010,7 +1029,8 @@
     expect(decoratedType.typeFormals, isEmpty);
     expect(decoratedType.positionalParameters[0],
         same(decoratedTypeAnnotation('String')));
-    expect(decoratedType.returnType.node.displayName, 'return type of F');
+    expect(decoratedType.returnType.node.displayName,
+        'return type of F (test.dart:1:13)');
   }
 
   Future<void> test_interfaceType_generic_instantiate_to_dynamic() async {
@@ -1642,8 +1662,8 @@
         decoratedType.returnType.node, TypeMatcher<NullabilityNodeMutable>());
     expect(decoratedType.returnType.node,
         isNot(same(typedefDecoratedType.returnType.node)));
-    expect(
-        typedefDecoratedType.returnType.node.displayName, 'return type of F');
+    expect(typedefDecoratedType.returnType.node.displayName,
+        'return type of F (test.dart:1:9)');
     expect(decoratedType.returnType.node.displayName,
         'return type of explicit type (test.dart:2:1)');
     _assertType(decoratedType.positionalParameters[0].type, 'String');
diff --git a/pkg/pkg.status b/pkg/pkg.status
index 53d5295..18134be 100644
--- a/pkg/pkg.status
+++ b/pkg/pkg.status
@@ -120,6 +120,7 @@
 mutation_observer: Skip # Skip tests on the VM if the package depends on dart:html
 
 [ $runtime != vm ]
+dds/test/*: SkipByDesign # Only meant to run on vm
 dev_compiler/test/options/*: SkipByDesign
 front_end/test/hot_reload_e2e_test: Skip
 frontend_server/test/*: SkipByDesign # Only meant to run on vm
diff --git a/pkg/telemetry/lib/crash_reporting.dart b/pkg/telemetry/lib/crash_reporting.dart
index 808c4ac..1590da8 100644
--- a/pkg/telemetry/lib/crash_reporting.dart
+++ b/pkg/telemetry/lib/crash_reporting.dart
@@ -126,15 +126,20 @@
       }
 
       final Chain chain = new Chain.forTrace(stackTrace);
-      req.files.add(new http.MultipartFile.fromString(
-          _stackTraceFileField, chain.terse.toString(),
-          filename: _stackTraceFilename));
+      req.files.add(
+        new http.MultipartFile.fromString(
+          _stackTraceFileField,
+          chain.terse.toString(),
+          filename: _stackTraceFilename,
+        ),
+      );
 
       for (var attachment in attachments) {
         req.files.add(
           new http.MultipartFile.fromString(
             attachment._field,
             attachment._value,
+            filename: attachment._field,
           ),
         );
       }
diff --git a/pkg/test_runner/lib/src/utils.dart b/pkg/test_runner/lib/src/utils.dart
index ca61d45..7daa0eb 100644
--- a/pkg/test_runner/lib/src/utils.dart
+++ b/pkg/test_runner/lib/src/utils.dart
@@ -27,8 +27,7 @@
   "matcher",
   "meta",
   "path",
-  "stack_trace",
-  "unittest"
+  "stack_trace"
 ];
 
 // TODO(nshahan): Grow this list until it matches the list above. We are
diff --git a/pkg/testing/lib/src/discover.dart b/pkg/testing/lib/src/discover.dart
index 9b82e8a..3fd09e9 100644
--- a/pkg/testing/lib/src/discover.dart
+++ b/pkg/testing/lib/src/discover.dart
@@ -64,9 +64,15 @@
   return Uri.base.resolve(".packages");
 }
 
+// TODO(eernst): Use `bool.hasEnvironment` below when possible;
+// for now we use a dual `defaultValue` rewrite.
+const _dartSdk = (String.fromEnvironment("DART_SDK", defaultValue: "1") ==
+        String.fromEnvironment("DART_SDK", defaultValue: "2"))
+    ? String.fromEnvironment("DART_SDK")
+    : null;
+
 Uri computeDartSdk() {
-  String dartSdkPath = Platform.environment["DART_SDK"] ??
-      const String.fromEnvironment("DART_SDK");
+  String dartSdkPath = Platform.environment["DART_SDK"] ?? _dartSdk;
   if (dartSdkPath != null) {
     return Uri.base.resolveUri(new Uri.file(dartSdkPath));
   } else {
diff --git a/pkg/vm/lib/bytecode/gen_bytecode.dart b/pkg/vm/lib/bytecode/gen_bytecode.dart
index d947d92..7109a15 100644
--- a/pkg/vm/lib/bytecode/gen_bytecode.dart
+++ b/pkg/vm/lib/bytecode/gen_bytecode.dart
@@ -820,6 +820,9 @@
         library.importUri.toString() == 'dart:_internal') {
       return false;
     }
+    if (member is Procedure && member.isMemberSignature) {
+      return false;
+    }
     return true;
   }
 
diff --git a/pkg/vm/lib/transformations/list_factory_specializer.dart b/pkg/vm/lib/transformations/list_factory_specializer.dart
index ca9df25..ad989c3 100644
--- a/pkg/vm/lib/transformations/list_factory_specializer.dart
+++ b/pkg/vm/lib/transformations/list_factory_specializer.dart
@@ -7,25 +7,36 @@
 import 'package:kernel/ast.dart';
 import 'package:kernel/core_types.dart' show CoreTypes;
 
-/// Replaces new List() and new List(n) with VM-specific
-/// new _GrowableList(0) and new _List(n).
+/// Replaces invocation of List factory constructors with
+/// factories of VM-specific classes.
+///
+/// new List() => new _GrowableList(0)
+/// new List(n) => new _List(n)
+/// new List.filled(n, null, growable: true) => new _GrowableList(n)
+/// new List.filled(n, null) => new _List(n)
+///
 void transformLibraries(List<Library> libraries, CoreTypes coreTypes) {
   final transformer = new _ListFactorySpecializer(coreTypes);
   libraries.forEach(transformer.visitLibrary);
 }
 
 class _ListFactorySpecializer extends Transformer {
-  final Procedure _listFactory;
+  final Procedure _defaultListFactory;
+  final Procedure _listFilledFactory;
   final Procedure _growableListFactory;
   final Procedure _fixedListFactory;
 
   _ListFactorySpecializer(CoreTypes coreTypes)
-      : _listFactory = coreTypes.index.getMember('dart:core', 'List', ''),
+      : _defaultListFactory =
+            coreTypes.index.getMember('dart:core', 'List', ''),
+        _listFilledFactory =
+            coreTypes.index.getMember('dart:core', 'List', 'filled'),
         _growableListFactory =
             coreTypes.index.getMember('dart:core', '_GrowableList', ''),
         _fixedListFactory =
             coreTypes.index.getMember('dart:core', '_List', '') {
-    assert(_listFactory.isFactory);
+    assert(_defaultListFactory.isFactory);
+    assert(_listFilledFactory.isFactory);
     assert(_growableListFactory.isFactory);
     assert(_fixedListFactory.isFactory);
   }
@@ -34,15 +45,53 @@
   visitStaticInvocation(StaticInvocation node) {
     super.visitStaticInvocation(node);
 
-    if (node.target == _listFactory) {
-      if (node.arguments.positional.isEmpty) {
-        return new StaticInvocation(_growableListFactory,
-            new Arguments([new IntLiteral(0)], types: node.arguments.types))
-          ..parent = node.parent
+    final target = node.target;
+    if (target == _defaultListFactory) {
+      final args = node.arguments;
+      if (args.positional.isEmpty) {
+        return StaticInvocation(_growableListFactory,
+            Arguments([new IntLiteral(0)], types: args.types))
           ..fileOffset = node.fileOffset;
       } else {
-        return new StaticInvocation(_fixedListFactory, node.arguments)
-          ..parent = node.parent
+        return StaticInvocation(_fixedListFactory, args)
+          ..fileOffset = node.fileOffset;
+      }
+    } else if (target == _listFilledFactory) {
+      final args = node.arguments;
+      assert(args.positional.length == 2);
+      final length = args.positional[0];
+      final fill = args.positional[1];
+      if (fill is! NullLiteral &&
+          !(fill is ConstantExpression && fill.constant is NullConstant)) {
+        return node;
+      }
+      bool growable;
+      if (args.named.isEmpty) {
+        growable = false;
+      } else {
+        final namedArg = args.named.single;
+        assert(namedArg.name == 'growable');
+        final value = namedArg.value;
+        if (value is BoolLiteral) {
+          growable = value.value;
+        } else if (value is ConstantExpression) {
+          final constant = value.constant;
+          if (constant is BoolConstant) {
+            growable = constant.value;
+          } else {
+            return node;
+          }
+        } else {
+          return node;
+        }
+      }
+      if (growable) {
+        return StaticInvocation(
+            _growableListFactory, Arguments([length], types: args.types))
+          ..fileOffset = node.fileOffset;
+      } else {
+        return StaticInvocation(
+            _fixedListFactory, Arguments([length], types: args.types))
           ..fileOffset = node.fileOffset;
       }
     }
diff --git a/pkg/vm/lib/transformations/type_flow/utils.dart b/pkg/vm/lib/transformations/type_flow/utils.dart
index 164a6e9..379c1ed 100644
--- a/pkg/vm/lib/transformations/type_flow/utils.dart
+++ b/pkg/vm/lib/transformations/type_flow/utils.dart
@@ -32,7 +32,7 @@
     const bool.fromEnvironment('global.type.flow.scope.trace');
 
 const int kScopeIndent =
-    const int.fromEnvironment('global.type.flow.scope.indent');
+    const int.fromEnvironment('global.type.flow.scope.indent', defaultValue: 1);
 
 /// Extended 'assert': always checks condition.
 assertx(bool cond, {details}) {
@@ -57,7 +57,7 @@
     "\u001b[35m", // magenta
     "\u001b[36m", // cyan
   ];
-  static const int _scopeIndent = kScopeIndent ?? 1;
+  static const int _scopeIndent = kScopeIndent;
 
   int _scope = 0;
   List<String> _scopePrefixes = <String>[""];
diff --git a/pkg/vm/testcases/bytecode/asserts.dart.expect b/pkg/vm/testcases/bytecode/asserts.dart.expect
index d8c3913..4149a93 100644
--- a/pkg/vm/testcases/bytecode/asserts.dart.expect
+++ b/pkg/vm/testcases/bytecode/asserts.dart.expect
@@ -90,7 +90,7 @@
     assert(condition);
   }
   static method test2(() →* dart.core::bool* condition, () →* dart.core::String* message) → void {
-    assert([@vm.call-site-attributes.metadata=receiverType:() →* dart.core::bool*] condition.call(), [@vm.call-site-attributes.metadata=receiverType:() →* dart.core::String*] message.call());
+    assert([@vm.call-site-attributes.metadata=receiverType:FunctionType()] condition.call(), [@vm.call-site-attributes.metadata=receiverType:FunctionType()] message.call());
   }
   static method main() → dynamic {}
 }
diff --git a/pkg/vm/testcases/bytecode/closures.dart.expect b/pkg/vm/testcases/bytecode/closures.dart.expect
index 558d02f..fd792c7 100644
--- a/pkg/vm/testcases/bytecode/closures.dart.expect
+++ b/pkg/vm/testcases/bytecode/closures.dart.expect
@@ -1770,13 +1770,13 @@
             dart.core::print(<dart.core::Type*>[#lib::A::T1*, #lib::A::T2*, #lib::A::foo::T3*, #lib::A::foo::T4*, T5*, T6*, T7*, T8*]);
             #lib::callWithArgs<#lib::A::T1*, #lib::A::T2*, #lib::A::foo::T3*, #lib::A::foo::T4*, T5*, T6*, T7*, T8*>();
           };
-          [@vm.call-site-attributes.metadata=receiverType:() →* dart.core::Null?] nested3.call();
+          [@vm.call-site-attributes.metadata=receiverType:FunctionType()] nested3.call();
         }
-        [@vm.call-site-attributes.metadata=receiverType:<T7 extends dart.core::Object* = dynamic, T8 extends dart.core::Object* = dynamic>() →* void] nested2.call<#lib::C7*, #lib::C8*>();
-        [@vm.call-site-attributes.metadata=receiverType:<T7 extends dart.core::Object* = dynamic, T8 extends dart.core::Object* = dynamic>() →* void] nested2.call<dart.core::List<#lib::C7*>*, dart.core::List<#lib::C8*>*>();
+        [@vm.call-site-attributes.metadata=receiverType:FunctionType()] nested2.call<#lib::C7*, #lib::C8*>();
+        [@vm.call-site-attributes.metadata=receiverType:FunctionType()] nested2.call<dart.core::List<#lib::C7*>*, dart.core::List<#lib::C8*>*>();
       }
-      [@vm.call-site-attributes.metadata=receiverType:<T5 extends dart.core::Object* = dynamic, T6 extends dart.core::Object* = dynamic>() →* void] nested1.call<#lib::C5*, #lib::C6*>();
-      [@vm.call-site-attributes.metadata=receiverType:<T5 extends dart.core::Object* = dynamic, T6 extends dart.core::Object* = dynamic>() →* void] nested1.call<dart.core::List<#lib::C5*>*, dart.core::List<#lib::C6*>*>();
+      [@vm.call-site-attributes.metadata=receiverType:FunctionType()] nested1.call<#lib::C5*, #lib::C6*>();
+      [@vm.call-site-attributes.metadata=receiverType:FunctionType()] nested1.call<dart.core::List<#lib::C5*>*, dart.core::List<#lib::C6*>*>();
     }
   }
   class B extends dart.core::Object {
@@ -1798,12 +1798,12 @@
                 z = x.{dart.core::num::+}(2);
                 w = this.{#lib::B::foo}.{dart.core::num::+}(y);
               }
-              [@vm.call-site-attributes.metadata=receiverType:() →* void] closure2.call();
+              [@vm.call-site-attributes.metadata=receiverType:FunctionType()] closure2.call();
               dart.core::print(w);
             }
           };
-          [@vm.call-site-attributes.metadata=receiverType:(dart.core::int*) →* dart.core::Null?] closure1.call(10);
-          [@vm.call-site-attributes.metadata=receiverType:(dart.core::int*) →* dart.core::Null?] closure1.call(11);
+          [@vm.call-site-attributes.metadata=receiverType:FunctionType()] closure1.call(10);
+          [@vm.call-site-attributes.metadata=receiverType:FunctionType()] closure1.call(11);
           dart.core::print(y);
           dart.core::print(z);
         }
@@ -1814,7 +1814,7 @@
         () →* dart.core::Null? closure3 = () → dart.core::Null? {
           this.{#lib::B::foo} = x;
         };
-        [@vm.call-site-attributes.metadata=receiverType:() →* dart.core::Null?] closure3.call();
+        [@vm.call-site-attributes.metadata=receiverType:FunctionType()] closure3.call();
       }
     }
   }
@@ -1827,8 +1827,8 @@
       dart.core::List<dart.core::Function*>* getI = <dart.core::Function*>[];
       dart.core::List<dart.core::Function*>* setI = <dart.core::Function*>[];
       for (dart.core::int* i = 0; i.{dart.core::num::<}(10); i = i.{dart.core::num::+}(1)) {
-        [@vm.call-site-attributes.metadata=receiverType:dart.core::List<dart.core::Function*>*] getI.{dart.core::List::add}(() → dart.core::int* => i.{dart.core::num::+}(delta));
-        [@vm.call-site-attributes.metadata=receiverType:dart.core::List<dart.core::Function*>*] setI.{dart.core::List::add}((dart.core::int* ii) → dart.core::Null? {
+        [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to root::dart:core::List*)] getI.{dart.core::List::add}(() → dart.core::int* => i.{dart.core::num::+}(delta));
+        [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to root::dart:core::List*)] setI.{dart.core::List::add}((dart.core::int* ii) → dart.core::Null? {
           i = ii.{dart.core::num::+}(delta);
         });
       }
@@ -1842,7 +1842,7 @@
             () →* dart.core::Null? inc = () → dart.core::Null? {
               i = i.{dart.core::num::+}(1);
             };
-            [@vm.call-site-attributes.metadata=receiverType:() →* dart.core::Null?] inc.call();
+            [@vm.call-site-attributes.metadata=receiverType:FunctionType()] inc.call();
             dart.core::print(i);
           }
         }
@@ -1859,7 +1859,7 @@
     method bar() → dynamic {
       return () → dart.core::Null? {
         function inner() → dart.core::Null? {}
-        [@vm.call-site-attributes.metadata=receiverType:() →* dart.core::Null?] inner.call();
+        [@vm.call-site-attributes.metadata=receiverType:FunctionType()] inner.call();
       };
     }
   }
@@ -1873,18 +1873,18 @@
     abstract method evalArg2() → dart.core::int*;
     abstract method getE() → #lib::E*;
     method testCallThroughGetter1() → dart.core::int*
-      return let final dart.core::int* #t1 = this.{#lib::E::evalArg1}() in let final dart.core::int* #t2 = this.{#lib::E::evalArg2}() in [@vm.call-site-attributes.metadata=receiverType:(dart.core::int*, dart.core::int*) →* dart.core::int*] this.{#lib::E::foo1}.call(#t1, #t2);
+      return let final dart.core::int* #t1 = this.{#lib::E::evalArg1}() in let final dart.core::int* #t2 = this.{#lib::E::evalArg2}() in [@vm.call-site-attributes.metadata=receiverType:FunctionType()] this.{#lib::E::foo1}.call(#t1, #t2);
     method testCallThroughGetter2() → dart.core::int*
-      return let final dart.core::int* #t3 = this.{#lib::E::evalArg1}() in let final dart.core::int* #t4 = this.{#lib::E::evalArg2}() in [@vm.call-site-attributes.metadata=receiverType:<T extends dart.core::Object* = dynamic>(T*, T*) →* dart.core::int*] this.{#lib::E::foo2}.call<dart.core::int*>(#t3, #t4);
+      return let final dart.core::int* #t3 = this.{#lib::E::evalArg1}() in let final dart.core::int* #t4 = this.{#lib::E::evalArg2}() in [@vm.call-site-attributes.metadata=receiverType:FunctionType()] this.{#lib::E::foo2}.call<dart.core::int*>(#t3, #t4);
     method testCallThroughGetter3() → dart.core::int*
-      return let final #lib::E* #t5 = this.{#lib::E::getE}() in let final dart.core::int* #t6 = this.{#lib::E::evalArg1}() in let final dart.core::int* #t7 = this.{#lib::E::evalArg2}() in [@vm.call-site-attributes.metadata=receiverType:<T extends dart.core::Object* = dynamic>(T*, T*) →* dart.core::int*] #t5.{#lib::E::foo2}.call<dart.core::int*>(#t6, #t7);
+      return let final #lib::E* #t5 = this.{#lib::E::getE}() in let final dart.core::int* #t6 = this.{#lib::E::evalArg1}() in let final dart.core::int* #t7 = this.{#lib::E::evalArg2}() in [@vm.call-site-attributes.metadata=receiverType:FunctionType()] #t5.{#lib::E::foo2}.call<dart.core::int*>(#t6, #t7);
   }
   static method simpleClosure() → dart.core::int* {
     dart.core::int* x = 5;
     (dart.core::int*) →* dart.core::Null? inc = (dart.core::int* y) → dart.core::Null? {
       x = x.{dart.core::num::+}(y);
     };
-    [@vm.call-site-attributes.metadata=receiverType:(dart.core::int*) →* dart.core::Null?] inc.call(3);
+    [@vm.call-site-attributes.metadata=receiverType:FunctionType()] inc.call(3);
     return x;
   }
   static method callWithArgs<T1 extends dart.core::Object* = dynamic, T2 extends dart.core::Object* = dynamic, T3 extends dart.core::Object* = dynamic, T4 extends dart.core::Object* = dynamic, T5 extends dart.core::Object* = dynamic, T6 extends dart.core::Object* = dynamic, T7 extends dart.core::Object* = dynamic, T8 extends dart.core::Object* = dynamic>() → void {
diff --git a/pkg/vm/testcases/bytecode/try_blocks.dart.expect b/pkg/vm/testcases/bytecode/try_blocks.dart.expect
index 4bc3448..1d0580f 100644
--- a/pkg/vm/testcases/bytecode/try_blocks.dart.expect
+++ b/pkg/vm/testcases/bytecode/try_blocks.dart.expect
@@ -1033,7 +1033,7 @@
           y = 3;
         }
       }
-      [@vm.call-site-attributes.metadata=receiverType:() →* void] foo.call();
+      [@vm.call-site-attributes.metadata=receiverType:FunctionType()] foo.call();
       dart.core::print(y);
     }
     on dynamic catch(final dynamic e, final dart.core::StackTrace* st) {
@@ -1099,7 +1099,7 @@
                 dart.core::print(x);
                 dart.core::print(y);
               }
-              [@vm.call-site-attributes.metadata=receiverType:() →* void] foo.call();
+              [@vm.call-site-attributes.metadata=receiverType:FunctionType()] foo.call();
               continue #L4;
             }
             finally {
diff --git a/pkg/vm/testcases/bytecode/type_ops.dart.expect b/pkg/vm/testcases/bytecode/type_ops.dart.expect
index 02d8487..1293a71 100644
--- a/pkg/vm/testcases/bytecode/type_ops.dart.expect
+++ b/pkg/vm/testcases/bytecode/type_ops.dart.expect
@@ -706,7 +706,7 @@
       if(y is #lib::C<dynamic, #lib::D::Q*, dart.core::List<#lib::D::P*>*>*) {
         dart.core::print("22");
       }
-      [@vm.call-site-attributes.metadata=receiverType:#lib::D<#lib::D::P*, #lib::D::Q*>*] this.{#lib::D::foo} = y as{TypeError,ForDynamic} dart.core::Map<#lib::D::P*, #lib::D::Q*>*;
+      [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to #lib::D*)] this.{#lib::D::foo} = y as{TypeError,ForDynamic} dart.core::Map<#lib::D::P*, #lib::D::Q*>*;
     }
     method foo3<T1 extends dart.core::Object* = dynamic, T2 extends dart.core::Object* = dynamic>(dynamic z) → dynamic {
       if(z is #lib::A<#lib::D::foo3::T1*>*) {
diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/bool_expressions.dart.expect b/pkg/vm/testcases/transformations/type_flow/summary_collector/bool_expressions.dart.expect
index f99332f..80c11a9 100644
--- a/pkg/vm/testcases/transformations/type_flow/summary_collector/bool_expressions.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/bool_expressions.dart.expect
@@ -6,22 +6,22 @@
 RESULT: _T {}?
 ------------ #lib::bool_expressions ------------
 t0* = _Call direct [#lib::foo] ()
-t1 = _TypeCheck (t0 against dart.core::bool) (for #lib::foo() as{TypeError,ForDynamic} dart.core::bool*)
+t1 = _TypeCheck (t0 against dart.core::bool) (for AsExpression(StaticInvocation(Reference to #lib::foo, ArgumentsImpl()) as InterfaceType(Reference to root::dart:core::bool*)))
 t2* = _Call direct [#lib::bar] ()
 t3* = _Call [dart.core::num::+] (_T (dart.core::int)+, _T (dart.core::_Smi, 1))
-i_0 = _Join [dart.core::int*] (_T (dart.core::_Smi, 0), t3)
+i_0 = _Join [InterfaceType(Reference to root::dart:core::int*)] (_T (dart.core::_Smi, 0), t3)
 t5* = _Call [dart.core::num::<] (i_0, _T (dart.core::_Smi, 10))
 t6* = _Call direct [#lib::bar] ()
 t7* = _Call direct [#lib::foo] ()
 t8 = _Join [dynamic] (_T (dart.core::bool, true), t7)
-t9 = _TypeCheck (t8 against dart.core::bool) (for (x{dart.core::bool*} ?{dynamic} true : #lib::foo()) as{TypeError,ForDynamic} dart.core::bool*)
+t9 = _TypeCheck (t8 against dart.core::bool) (for AsExpression(ConditionalExpression(VariableGetImpl() ? BoolLiteral(true) : StaticInvocation(Reference to #lib::foo, ArgumentsImpl())) as InterfaceType(Reference to root::dart:core::bool*)))
 t10* = _Call direct [#lib::bar] ()
 t11* = _Call direct [#lib::bar] ()
 t12* = _Call direct [#lib::foo] ()
-t13 = _TypeCheck (t12 against dart.core::bool) (for #lib::foo() as{TypeError,ForDynamic} dart.core::bool*)
+t13 = _TypeCheck (t12 against dart.core::bool) (for AsExpression(StaticInvocation(Reference to #lib::foo, ArgumentsImpl()) as InterfaceType(Reference to root::dart:core::bool*)))
 t14* = _Call direct [#lib::foo] ()
-t15 = _TypeCheck (t14 against dart.core::bool) (for #lib::foo() as{TypeError,ForDynamic} dart.core::bool*)
-y_0 = _Join [dart.core::bool*] (_T (dart.core::bool), _T (dart.core::bool, true))
+t15 = _TypeCheck (t14 against dart.core::bool) (for AsExpression(StaticInvocation(Reference to #lib::foo, ArgumentsImpl()) as InterfaceType(Reference to root::dart:core::bool*)))
+y_0 = _Join [InterfaceType(Reference to root::dart:core::bool*)] (_T (dart.core::bool), _T (dart.core::bool, true))
 RESULT: _T {}?
 ------------ #lib::main ------------
 
diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/calls.dart.expect b/pkg/vm/testcases/transformations/type_flow/summary_collector/calls.dart.expect
index 50d02f9b..721f2bd 100644
--- a/pkg/vm/testcases/transformations/type_flow/summary_collector/calls.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/calls.dart.expect
@@ -38,7 +38,7 @@
 t6 = _Call [#lib::A::foo1] (%aa, _T (#lib::B))
 t7 = _Narrow (%aa to _T ANY)
 t8* = _Call get [#lib::A::foo2] (t7)
-t9 = _TypeCheck (t8 against dart.core::int) (for aa.{#lib::A::foo2} as{TypeError,ForDynamic} dart.core::int*)
+t9 = _TypeCheck (t8 against dart.core::int) (for AsExpression(PropertyGet(VariableGetImpl().foo2) as InterfaceType(Reference to root::dart:core::int*)))
 t10 = _Call set [#lib::A::foo3] (t7, t9)
 t11* = _Call get [#lib::A::foo1] (t7)
 t12* = _Call get [#lib::A::foo2] (t7)
diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/constants.dart.expect b/pkg/vm/testcases/transformations/type_flow/summary_collector/constants.dart.expect
index 7741659..b471e61 100644
--- a/pkg/vm/testcases/transformations/type_flow/summary_collector/constants.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/constants.dart.expect
@@ -9,18 +9,18 @@
 RESULT: _T (dart.core::_OneByteString, abc)
 ------------ #lib::indexingIntoConstantList1 ------------
 %i = _Parameter #0 [_T (dart.core::int)+?]
-t1 = _Join [dart.core::int*] (_T (dart.core::_Smi, 1), _T (dart.core::_Smi, 2), _T (dart.core::_Smi, 3))
+t1 = _Join [InterfaceType(Reference to root::dart:core::int*)] (_T (dart.core::_Smi, 1), _T (dart.core::_Smi, 2), _T (dart.core::_Smi, 3))
 RESULT: t1
 ------------ #lib::indexingIntoConstantList2 ------------
 %i = _Parameter #0 [_T (dart.core::int)+?]
-t1 = _Join [dart.core::Object*] (_T (dart.core::_OneByteString, hi), _T (dart.core::_Smi, 33), _T {}?, _T (dart.core::_Smi, -5))
+t1 = _Join [InterfaceType(Reference to root::dart:core::Object*)] (_T (dart.core::_OneByteString, hi), _T (dart.core::_Smi, 33), _T {}?, _T (dart.core::_Smi, -5))
 RESULT: t1
 ------------ #lib::main ------------
 
 RESULT: _T {}?
 ------------ #lib::_constList1 ------------
 
-RESULT: _T (dart.core::_ImmutableList, ListConstant<dart.core::int*>([1, 2, 3]))
+RESULT: _T (dart.core::_ImmutableList, ListConstant<InterfaceType(Reference to root::dart:core::int*)>([1, 2, 3]))
 ------------ #lib::_constList2 ------------
 
-RESULT: _T (dart.core::_ImmutableList, ListConstant<dart.core::Object*>([hi, 33, null, -5]))
+RESULT: _T (dart.core::_ImmutableList, ListConstant<InterfaceType(Reference to root::dart:core::Object*)>([hi, 33, null, -5]))
diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart.expect b/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart.expect
index eba9380..460c362 100644
--- a/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/control_flow.dart.expect
@@ -28,7 +28,7 @@
 RESULT: t1
 ------------ #lib::TestEnum::values ------------
 
-RESULT: _T (dart.core::_ImmutableList, ListConstant<#lib::TestEnum*>([#lib::TestEnum {index: 0, #lib::_name: TestEnum.v1, }, #lib::TestEnum {index: 1, #lib::_name: TestEnum.v2, }]))
+RESULT: _T (dart.core::_ImmutableList, ListConstant<InterfaceType(Reference to #lib::TestEnum*)>([#lib::TestEnum {index: 0, #lib::_name: TestEnum.v1, }, #lib::TestEnum {index: 1, #lib::_name: TestEnum.v2, }]))
 ------------ #lib::TestEnum::v1 ------------
 
 RESULT: _T (#lib::TestEnum, #lib::TestEnum {index: 0, #lib::_name: TestEnum.v1, })
@@ -71,10 +71,10 @@
 t2 = _Call direct [#lib::C1::] (_T (#lib::C1))
 t3 = _Call direct [#lib::C2::] (_T (#lib::C2))
 t4* = _Call direct [#lib::foo] (_T (#lib::C2))
-t5 = _TypeCheck (t4 against dart.core::bool) (for #lib::foo(x = new #lib::C2::•()) as{TypeError,ForDynamic} dart.core::bool*)
+t5 = _TypeCheck (t4 against dart.core::bool) (for AsExpression(StaticInvocation(Reference to #lib::foo, ArgumentsImpl()) as InterfaceType(Reference to root::dart:core::bool*)))
 t6 = _Call direct [#lib::C3::] (_T (#lib::C3))
 t7* = _Call direct [#lib::foo] (_T (#lib::C3))
-t8 = _TypeCheck (t7 against dart.core::bool) (for #lib::foo(x = new #lib::C3::•()) as{TypeError,ForDynamic} dart.core::bool*)
+t8 = _TypeCheck (t7 against dart.core::bool) (for AsExpression(StaticInvocation(Reference to #lib::foo, ArgumentsImpl()) as InterfaceType(Reference to root::dart:core::bool*)))
 x_0 = _Join [dynamic] (_T (#lib::C2), _T (#lib::C3))
 t10 = _Call direct [#lib::bar] (x_0)
 RESULT: x_0
@@ -82,10 +82,10 @@
 t0 = _Call direct [#lib::C1::] (_T (#lib::C1))
 t1 = _Call direct [#lib::C2::] (_T (#lib::C2))
 t2* = _Call direct [#lib::foo] (_T (#lib::C2))
-t3 = _TypeCheck (t2 against dart.core::bool) (for #lib::foo(x = new #lib::C2::•()) as{TypeError,ForDynamic} dart.core::bool*)
+t3 = _TypeCheck (t2 against dart.core::bool) (for AsExpression(StaticInvocation(Reference to #lib::foo, ArgumentsImpl()) as InterfaceType(Reference to root::dart:core::bool*)))
 t4 = _Call direct [#lib::C3::] (_T (#lib::C3))
 t5* = _Call direct [#lib::foo] (_T (#lib::C3))
-t6 = _TypeCheck (t5 against dart.core::bool) (for #lib::foo(x = new #lib::C3::•()) as{TypeError,ForDynamic} dart.core::bool*)
+t6 = _TypeCheck (t5 against dart.core::bool) (for AsExpression(StaticInvocation(Reference to #lib::foo, ArgumentsImpl()) as InterfaceType(Reference to root::dart:core::bool*)))
 t7 = _Call direct [#lib::bar] (_T (#lib::C3))
 x_0 = _Join [dynamic] (_T (#lib::C2), _T (#lib::C3))
 RESULT: x_0
@@ -99,12 +99,12 @@
 %x = _Parameter #0 [_T (dart.core::bool)+?]
 t1 = _Call direct [#lib::foo] (_T (dart.core::bool, true))
 t2 = _Call direct [#lib::bar] (_T (dart.core::bool, false))
-x_0 = _Join [dart.core::bool*] (_T (dart.core::bool, true), _T (dart.core::bool, false))
+x_0 = _Join [InterfaceType(Reference to root::dart:core::bool*)] (_T (dart.core::bool, true), _T (dart.core::bool, false))
 t4 = _Call direct [#lib::baz] (x_0)
 RESULT: _T {}?
 ------------ #lib::if6b ------------
 %x = _Parameter #0 [_T ANY?]
-t1 = _TypeCheck (%x against dart.core::bool) (for x as{TypeError,ForDynamic} dart.core::bool*)
+t1 = _TypeCheck (%x against dart.core::bool) (for AsExpression(VariableGetImpl() as InterfaceType(Reference to root::dart:core::bool*)))
 t2 = _Call direct [#lib::foo] (_T (dart.core::bool, true))
 t3 = _Call direct [#lib::bar] (_T (dart.core::bool, false))
 x_0 = _Join [dynamic] (_T (dart.core::bool, true), _T (dart.core::bool, false))
@@ -138,12 +138,12 @@
 t2 = _Call direct [#lib::C1::] (_T (#lib::C1))
 t3 = _Call direct [#lib::C2::] (_T (#lib::C2))
 t4* = _Call direct [#lib::foo] (_T (#lib::C2))
-t5 = _TypeCheck (t4 against dart.core::bool) (for #lib::foo(x = new #lib::C2::•()) as{TypeError,ForDynamic} dart.core::bool*)
+t5 = _TypeCheck (t4 against dart.core::bool) (for AsExpression(StaticInvocation(Reference to #lib::foo, ArgumentsImpl()) as InterfaceType(Reference to root::dart:core::bool*)))
 t6 = _Call direct [#lib::C3::] (_T (#lib::C3))
 t7 = _Call direct [#lib::C4::] (_T (#lib::C4))
 x_0 = _Join [dynamic] (_T (#lib::C3), _T (#lib::C4))
 t9 = _Call direct [#lib::foo] (x_0)
-t10 = _Join [dart.core::Object*] (_T (#lib::C3), _T (#lib::C4))
+t10 = _Join [InterfaceType(Reference to root::dart:core::Object*)] (_T (#lib::C3), _T (#lib::C4))
 t11 = _Narrow (t10 to _T (dart.core::Object)+?)
 t12 = _Call direct [#lib::bar] (t11)
 RESULT: _T {}?
@@ -153,7 +153,7 @@
 t2 = _Call direct [#lib::C1::] (_T (#lib::C1))
 t3 = _Call direct [#lib::C2::] (_T (#lib::C2))
 t4* = _Call direct [#lib::foo] (_T (#lib::C2))
-t5 = _TypeCheck (t4 against dart.core::bool) (for #lib::foo(x = new #lib::C2::•()) as{TypeError,ForDynamic} dart.core::bool*)
+t5 = _TypeCheck (t4 against dart.core::bool) (for AsExpression(StaticInvocation(Reference to #lib::foo, ArgumentsImpl()) as InterfaceType(Reference to root::dart:core::bool*)))
 t6 = _Call direct [#lib::C3::] (_T (#lib::C3))
 t7 = _Call direct [#lib::C4::] (_T (#lib::C4))
 t8* = _Call direct [#lib::foo] (_T (dart.core::_GrowableList<#lib::C4>))
@@ -165,7 +165,7 @@
 t0 = _Call direct [#lib::C1::] (_T (#lib::C1))
 x_0 = _Join [dynamic] (_T (#lib::C1), _T (#lib::C2))
 t2* = _Call direct [#lib::foo] (x_0)
-t3 = _TypeCheck (t2 against dart.core::bool) (for #lib::foo(x) as{TypeError,ForDynamic} dart.core::bool*)
+t3 = _TypeCheck (t2 against dart.core::bool) (for AsExpression(StaticInvocation(Reference to #lib::foo, ArgumentsImpl()) as InterfaceType(Reference to root::dart:core::bool*)))
 t4 = _Call direct [#lib::C2::] (_T (#lib::C2))
 t5 = _Call direct [#lib::bar] (x_0)
 RESULT: x_0
@@ -177,13 +177,13 @@
 t4 = _Call direct [#lib::bar] (_T (#lib::C2))
 t5 = _Call direct [#lib::C3::] (_T (#lib::C3))
 t6* = _Call direct [#lib::bar] (_T (#lib::C3))
-t7 = _TypeCheck (t6 against dart.core::bool) (for #lib::bar(x = new #lib::C3::•()) as{TypeError,ForDynamic} dart.core::bool*)
+t7 = _TypeCheck (t6 against dart.core::bool) (for AsExpression(StaticInvocation(Reference to #lib::bar, ArgumentsImpl()) as InterfaceType(Reference to root::dart:core::bool*)))
 RESULT: _T (#lib::C3)
 ------------ #lib::loop3 ------------
 t0 = _Call direct [#lib::C1::] (_T (#lib::C1))
 t1 = _Call direct [#lib::C2::] (_T (#lib::C2))
 t2* = _Call direct [#lib::foo] (_T (#lib::C2))
-t3 = _TypeCheck (t2 against dart.core::bool) (for #lib::foo(x = new #lib::C2::•()) as{TypeError,ForDynamic} dart.core::bool*)
+t3 = _TypeCheck (t2 against dart.core::bool) (for AsExpression(StaticInvocation(Reference to #lib::foo, ArgumentsImpl()) as InterfaceType(Reference to root::dart:core::bool*)))
 t4 = _Call direct [#lib::C3::] (_T (#lib::C3))
 t5 = _Call direct [#lib::bar] (_T (#lib::C2))
 RESULT: _T (#lib::C2)
@@ -204,10 +204,10 @@
 t0 = _Call direct [#lib::C1::] (_T (#lib::C1))
 x_0 = _Join [dynamic] (_T (#lib::C1), _T (#lib::C3))
 t2* = _Call direct [#lib::foo] (x_0)
-t3 = _TypeCheck (t2 against dart.core::bool) (for #lib::foo(x) as{TypeError,ForDynamic} dart.core::bool*)
+t3 = _TypeCheck (t2 against dart.core::bool) (for AsExpression(StaticInvocation(Reference to #lib::foo, ArgumentsImpl()) as InterfaceType(Reference to root::dart:core::bool*)))
 t4 = _Call direct [#lib::C2::] (_T (#lib::C2))
 t5* = _Call direct [#lib::bar] (_T (#lib::C2))
-t6 = _TypeCheck (t5 against dart.core::bool) (for #lib::bar(x) as{TypeError,ForDynamic} dart.core::bool*)
+t6 = _TypeCheck (t5 against dart.core::bool) (for AsExpression(StaticInvocation(Reference to #lib::bar, ArgumentsImpl()) as InterfaceType(Reference to root::dart:core::bool*)))
 t7 = _Call direct [#lib::C3::] (_T (#lib::C3))
 x_1 = _Join [dynamic] (x_0, _T (#lib::C2))
 RESULT: x_1
@@ -216,10 +216,10 @@
 x_1 = _Join [dynamic] (_T (#lib::C3), _T (#lib::C2))
 x_0 = _Join [dynamic] (_T (#lib::C1), x_1)
 t3* = _Call direct [#lib::foo] (x_0)
-t4 = _TypeCheck (t3 against dart.core::bool) (for #lib::foo(x) as{TypeError,ForDynamic} dart.core::bool*)
+t4 = _TypeCheck (t3 against dart.core::bool) (for AsExpression(StaticInvocation(Reference to #lib::foo, ArgumentsImpl()) as InterfaceType(Reference to root::dart:core::bool*)))
 t5 = _Call direct [#lib::C2::] (_T (#lib::C2))
 t6* = _Call direct [#lib::bar] (_T (#lib::C2))
-t7 = _TypeCheck (t6 against dart.core::bool) (for #lib::bar(x) as{TypeError,ForDynamic} dart.core::bool*)
+t7 = _TypeCheck (t6 against dart.core::bool) (for AsExpression(StaticInvocation(Reference to #lib::bar, ArgumentsImpl()) as InterfaceType(Reference to root::dart:core::bool*)))
 t8 = _Call direct [#lib::C3::] (_T (#lib::C3))
 RESULT: x_0
 ------------ #lib::try1 ------------
@@ -272,7 +272,7 @@
 RESULT: x_2
 ------------ #lib::cast1 ------------
 %x = _Parameter #0 [_T ANY?]
-t1 = _TypeCheck (%x against #lib::C1) (for x as #lib::C1*)
+t1 = _TypeCheck (%x against #lib::C1) (for AsExpression(VariableGetImpl() as InterfaceType(Reference to #lib::C1*)))
 t2 = _Call direct [#lib::foo] (t1)
 t3 = _Call direct [#lib::bar] (t1)
 RESULT: _T {}?
diff --git a/pkg/vm/testcases/transformations/type_flow/summary_collector/vars.dart.expect b/pkg/vm/testcases/transformations/type_flow/summary_collector/vars.dart.expect
index 2aff27c..c6281be 100644
--- a/pkg/vm/testcases/transformations/type_flow/summary_collector/vars.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/summary_collector/vars.dart.expect
@@ -11,11 +11,11 @@
 %a2 = _Parameter #1 [_T (dart.core::Object)+?]
 t2* = _Call direct get [#lib::someStatic] ()
 t3 = _Call direct [#lib::A::] (_T (#lib::A))
-a1_0 = _Join [dart.core::Object*] (_T (#lib::A), %a1)
+a1_0 = _Join [InterfaceType(Reference to root::dart:core::Object*)] (_T (#lib::A), %a1)
 t5 = _Call direct [#lib::bar] (a1_0, _T (dart.core::_Smi, 42))
 t6 = _Call direct [#lib::B::] (_T (#lib::B))
 t7* = _Call [dart.core::Object::==] (_T (#lib::B), %a2)
-t8 = _Join [dart.core::Object*] (_T (#lib::B), %a2)
+t8 = _Join [InterfaceType(Reference to root::dart:core::Object*)] (_T (#lib::B), %a2)
 t9 = _Narrow (t8 to _T (dart.core::Object)+?)
 RESULT: t9
 ------------ #lib::bar ------------
@@ -25,7 +25,7 @@
 t3* = _Call [dart.core::num::+] (t2, %a2)
 t4* = _Call [dart.core::num::*] (t3, _T (dart.core::_Smi, 3))
 t5* = _Call [dart.core::int::unary-] (_T (dart.core::_Smi, 1))
-%result = _Join [dart.core::int*] (t4, t5)
+%result = _Join [InterfaceType(Reference to root::dart:core::int*)] (t4, t5)
 RESULT: %result
 ------------ #lib::loop1 ------------
 %a1 = _Parameter #0 [_T (dart.core::Object)+?]
@@ -35,10 +35,10 @@
 ------------ #lib::loop2 ------------
 %x = _Parameter #0 [_T (dart.core::int)+?]
 t1* = _Call [dart.core::num::+] (_T (dart.core::int)+, _T (dart.core::_Smi, 1))
-i_0 = _Join [dart.core::int*] (_T (dart.core::_Smi, 0), t1)
+i_0 = _Join [InterfaceType(Reference to root::dart:core::int*)] (_T (dart.core::_Smi, 0), t1)
 t3* = _Call [dart.core::num::<] (i_0, _T (dart.core::_Smi, 5))
 t4* = _Call [dart.core::num::+] (_T (dart.core::int)+?, _T (dart.core::_Smi, 10))
-x_0 = _Join [dart.core::int*] (%x, t4)
+x_0 = _Join [InterfaceType(Reference to root::dart:core::int*)] (%x, t4)
 RESULT: x_0
 ------------ #lib::main ------------
 
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_basic.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_basic.dart.expect
index fd9dd20..6188f8a 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_basic.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_basic.dart.expect
@@ -23,7 +23,7 @@
     : super self::C::•()
     ;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  method foo() → dynamic
-    return [@vm.inferred-type.metadata=#lib::D<dart.core::String*>] super.{self::C::foo}();
+    return [@vm.inferred-type.metadata=#lib::D<InterfaceType(Reference to root::dart:core::String*)>] super.{self::C::foo}();
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8]  method bar() → dynamic
     return new self::D::•<self::E::S*>();
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9,getterSelectorId:10]  method baz() → dynamic
@@ -59,18 +59,18 @@
     ;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12]  method id3([@vm.inferred-type.metadata=dart.core::_Double (skip check) (value: 3.0)] generic-covariant-impl core::Comparable<self::C2::T*>* x) → dynamic
     return x;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14]  method id4([@vm.inferred-type.metadata=#lib::K<#lib::J*> (skip check)] generic-covariant-impl self::K<self::I<self::C2::T*>*>* x) → dynamic
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14]  method id4([@vm.inferred-type.metadata=#lib::K<InterfaceType(Reference to #lib::J*)> (skip check)] generic-covariant-impl self::K<self::I<self::C2::T*>*>* x) → dynamic
     return x;
 }
 static method main() → dynamic {
-  core::print([@vm.direct-call.metadata=#lib::C::foo] [@vm.inferred-type.metadata=#lib::D<dart.core::int*> (skip check)] new self::C::•<core::int*>().{self::C::foo}());
-  core::print([@vm.direct-call.metadata=#lib::E::foo] [@vm.inferred-type.metadata=#lib::D<dart.core::String*> (skip check)] new self::E::•<core::int*, core::String*>().{self::E::foo}());
-  core::print([@vm.direct-call.metadata=#lib::E::bar] [@vm.inferred-type.metadata=#lib::D<dart.core::int*> (skip check)] new self::E::•<core::int*, core::String*>().{self::E::bar}());
-  core::print([@vm.direct-call.metadata=#lib::E::baz] [@vm.inferred-type.metadata=#lib::D<dart.core::String*> (skip check)] new self::E::•<core::int*, core::String*>().{self::E::baz}());
+  core::print([@vm.direct-call.metadata=#lib::C::foo] [@vm.inferred-type.metadata=#lib::D<InterfaceType(Reference to root::dart:core::int*)> (skip check)] new self::C::•<core::int*>().{self::C::foo}());
+  core::print([@vm.direct-call.metadata=#lib::E::foo] [@vm.inferred-type.metadata=#lib::D<InterfaceType(Reference to root::dart:core::String*)> (skip check)] new self::E::•<core::int*, core::String*>().{self::E::foo}());
+  core::print([@vm.direct-call.metadata=#lib::E::bar] [@vm.inferred-type.metadata=#lib::D<InterfaceType(Reference to root::dart:core::int*)> (skip check)] new self::E::•<core::int*, core::String*>().{self::E::bar}());
+  core::print([@vm.direct-call.metadata=#lib::E::baz] [@vm.inferred-type.metadata=#lib::D<InterfaceType(Reference to root::dart:core::String*)> (skip check)] new self::E::•<core::int*, core::String*>().{self::E::baz}());
   self::C<self::X*>* c = new self::C::•<self::Y*>();
-  [@vm.call-site-attributes.metadata=receiverType:#lib::C<#lib::X*>*] [@vm.direct-call.metadata=#lib::C::id1] [@vm.inferred-type.metadata=!? (skip check)] c.{self::C::id1}(new self::Y::•());
-  [@vm.call-site-attributes.metadata=receiverType:#lib::C<#lib::X*>*] [@vm.direct-call.metadata=#lib::C::id2] c.{self::C::id2}(new self::Z::•());
+  [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to #lib::C*)] [@vm.direct-call.metadata=#lib::C::id1] [@vm.inferred-type.metadata=!? (skip check)] c.{self::C::id1}(new self::Y::•());
+  [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to #lib::C*)] [@vm.direct-call.metadata=#lib::C::id2] c.{self::C::id2}(new self::Z::•());
   self::C2<core::num*>* c2 = new self::C2::•<core::num*>();
-  [@vm.call-site-attributes.metadata=receiverType:#lib::C2<dart.core::num*>*] [@vm.direct-call.metadata=#lib::C2::id3] [@vm.inferred-type.metadata=!? (skip check)] c2.{self::C2::id3}(3.0);
-  [@vm.call-site-attributes.metadata=receiverType:#lib::C2<dart.core::num*>*] [@vm.direct-call.metadata=#lib::C2::id4] [@vm.inferred-type.metadata=!? (skip check)] c2.{self::C2::id4}(new self::K::•<self::J*>());
+  [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to #lib::C2*)] [@vm.direct-call.metadata=#lib::C2::id3] [@vm.inferred-type.metadata=!? (skip check)] c2.{self::C2::id3}(3.0);
+  [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to #lib::C2*)] [@vm.direct-call.metadata=#lib::C2::id4] [@vm.inferred-type.metadata=!? (skip check)] c2.{self::C2::id4}(new self::K::•<self::J*>());
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_case1.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_case1.dart.expect
index 8c4940c..701445c 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_case1.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/class_generics_case1.dart.expect
@@ -10,12 +10,12 @@
     ;
 }
 class InheritedElement extends self::Element {
-[@vm.inferred-type.metadata=dart.collection::_InternalLinkedHashMap<#lib::Element*, dart.core::Object*>] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  final field core::Map<self::Element*, core::Object*>* _dependents = <self::Element*, core::Object*>{};
+[@vm.inferred-type.metadata=dart.collection::_InternalLinkedHashMap<InterfaceType(Reference to #lib::Element*), InterfaceType(Reference to root::dart:core::Object*)>] [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  final field core::Map<self::Element*, core::Object*>* _dependents = <self::Element*, core::Object*>{};
   synthetic constructor •() → self::InheritedElement*
     : super self::Element::•()
     ;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  method setDependencies([@vm.inferred-type.metadata=!] self::Element* dependent, [@vm.inferred-type.metadata=dart.core::_Smi?] core::Object* value) → void {
-    [@vm.call-site-attributes.metadata=receiverType:dart.core::Map<#lib::Element*, dart.core::Object*>*] [@vm.direct-call.metadata=dart.collection::__InternalLinkedHashMap&_HashVMBase&MapMixin&_LinkedHashMapMixin::[]=] [@vm.inferred-type.metadata=!? (skip check)] [@vm.direct-call.metadata=#lib::InheritedElement::_dependents] [@vm.inferred-type.metadata=dart.collection::_InternalLinkedHashMap<#lib::Element*, dart.core::Object*>] this.{self::InheritedElement::_dependents}.{core::Map::[]=}(dependent, value);
+    [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to root::dart:core::Map*)] [@vm.direct-call.metadata=dart.collection::__InternalLinkedHashMap&_HashVMBase&MapMixin&_LinkedHashMapMixin::[]=] [@vm.inferred-type.metadata=!? (skip check)] [@vm.direct-call.metadata=#lib::InheritedElement::_dependents] [@vm.inferred-type.metadata=dart.collection::_InternalLinkedHashMap<InterfaceType(Reference to #lib::Element*), InterfaceType(Reference to root::dart:core::Object*)>] this.{self::InheritedElement::_dependents}.{core::Map::[]=}(dependent, value);
   }
 }
 static method main() → dynamic {
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/const_prop.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/const_prop.dart.expect
index 5ad5c41..9f278403 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/const_prop.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/const_prop.dart.expect
@@ -45,7 +45,7 @@
 }
 static method getList() → dynamic
   return #C6;
-static method testList([@vm.inferred-type.metadata=dart.core::_ImmutableList (value: ListConstant<dart.core::int*>([1, 2, 3]))] dynamic arg1, [[@vm.inferred-type.metadata=dart.core::_ImmutableList (value: ListConstant<dart.core::int*>([4, 5]))] dynamic arg2 = #C9]) → void {
+static method testList([@vm.inferred-type.metadata=dart.core::_ImmutableList (value: ListConstant<InterfaceType(Reference to root::dart:core::int*)>([1, 2, 3]))] dynamic arg1, [[@vm.inferred-type.metadata=dart.core::_ImmutableList (value: ListConstant<InterfaceType(Reference to root::dart:core::int*)>([4, 5]))] dynamic arg2 = #C9]) → void {
   core::print(arg1);
   core::print(arg2);
 }
@@ -56,5 +56,5 @@
   self::testDouble(3.14);
   self::testStrings(new self::A::•(), "bazz");
   self::testPassEnum(#C11);
-  self::testList([@vm.inferred-type.metadata=dart.core::_ImmutableList (value: ListConstant<dart.core::int*>([1, 2, 3]))] self::getList());
+  self::testList([@vm.inferred-type.metadata=dart.core::_ImmutableList (value: ListConstant<InterfaceType(Reference to root::dart:core::int*)>([1, 2, 3]))] self::getList());
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/dynamic_list_access.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/dynamic_list_access.dart.expect
index 2f98a40..c2edab0 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/dynamic_list_access.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/dynamic_list_access.dart.expect
@@ -3,6 +3,6 @@
 import "dart:core" as core;
 
 static method main() → dynamic {
-  dynamic x = [@vm.inferred-type.metadata=dart.core::_List<dart.core::int*>] core::_List::•<core::int*>(10);
+  dynamic x = [@vm.inferred-type.metadata=dart.core::_List<InterfaceType(Reference to root::dart:core::int*)>] core::_List::•<core::int*>(10);
   [@vm.direct-call.metadata=dart.core::_IntegerImplementation::+??] [@vm.direct-call.metadata=dart.core::_List::[]] [@vm.inferred-type.metadata=int? (receiver not int)] x.[](0).+(10);
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/future.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/future.dart.expect
index be83db0..406725b 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/future.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/future.dart.expect
@@ -10,21 +10,21 @@
     : super core::Object::•()
     ;
 [@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  method test2c([@vm.inferred-type.metadata=dart.core::_Smi (skip check) (value: 3)] generic-covariant-impl asy::FutureOr<self::C::T*>* x) → void {}
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method test3c([@vm.inferred-type.metadata=dart.async::_Future<dart.core::int*> (skip check)] generic-covariant-impl asy::Future<self::C::T*>* x) → void {}
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]  method test4c([@vm.inferred-type.metadata=dart.async::_Future<dart.core::int*> (skip check)] generic-covariant-impl asy::FutureOr<self::C::T*>* x) → void {}
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8]  method test2r([@vm.inferred-type.metadata=#lib::C<dart.core::int*> (skip check)] generic-covariant-impl self::C<asy::FutureOr<self::C::T*>*>* x) → void {}
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9,getterSelectorId:10]  method test3r([@vm.inferred-type.metadata=#lib::C<dart.async::Future<dart.core::int*>*> (skip check)] generic-covariant-impl self::C<asy::Future<self::C::T*>*>* x) → void {}
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12]  method test4r([@vm.inferred-type.metadata=#lib::C<dart.async::Future<dart.core::int*>*> (skip check)] generic-covariant-impl self::C<asy::FutureOr<self::C::T*>*>* x) → void {}
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14]  method test5r([@vm.inferred-type.metadata=#lib::C<dart.async::FutureOr<dart.core::int*>*>] generic-covariant-impl self::C<asy::Future<self::C::T*>*>* x) → void {}
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:15,getterSelectorId:16]  method test6r([@vm.inferred-type.metadata=#lib::C<dart.async::FutureOr<dart.core::int*>*> (skip check)] generic-covariant-impl self::C<asy::FutureOr<self::C::T*>*>* x) → void {}
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:17,getterSelectorId:18]  method test7r([@vm.inferred-type.metadata=#lib::C<dart.async::FutureOr<dart.core::int*>*>] generic-covariant-impl self::C<self::C::T*>* x) → void {}
-[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:19,getterSelectorId:20]  method test8r([@vm.inferred-type.metadata=#lib::C<dart.async::Future<dart.core::int*>*>] generic-covariant-impl self::C<self::C::T*>* x) → void {}
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:3,getterSelectorId:4]  method test3c([@vm.inferred-type.metadata=dart.async::_Future<InterfaceType(Reference to root::dart:core::int*)> (skip check)] generic-covariant-impl asy::Future<self::C::T*>* x) → void {}
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]  method test4c([@vm.inferred-type.metadata=dart.async::_Future<InterfaceType(Reference to root::dart:core::int*)> (skip check)] generic-covariant-impl asy::FutureOr<self::C::T*>* x) → void {}
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:7,getterSelectorId:8]  method test2r([@vm.inferred-type.metadata=#lib::C<InterfaceType(Reference to root::dart:core::int*)> (skip check)] generic-covariant-impl self::C<asy::FutureOr<self::C::T*>*>* x) → void {}
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:9,getterSelectorId:10]  method test3r([@vm.inferred-type.metadata=#lib::C<InterfaceType(Reference to root::dart:async::Future*)> (skip check)] generic-covariant-impl self::C<asy::Future<self::C::T*>*>* x) → void {}
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:11,getterSelectorId:12]  method test4r([@vm.inferred-type.metadata=#lib::C<InterfaceType(Reference to root::dart:async::Future*)> (skip check)] generic-covariant-impl self::C<asy::FutureOr<self::C::T*>*>* x) → void {}
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:13,getterSelectorId:14]  method test5r([@vm.inferred-type.metadata=#lib::C<InterfaceType(Reference to root::dart:async::FutureOr*)>] generic-covariant-impl self::C<asy::Future<self::C::T*>*>* x) → void {}
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:15,getterSelectorId:16]  method test6r([@vm.inferred-type.metadata=#lib::C<InterfaceType(Reference to root::dart:async::FutureOr*)> (skip check)] generic-covariant-impl self::C<asy::FutureOr<self::C::T*>*>* x) → void {}
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:17,getterSelectorId:18]  method test7r([@vm.inferred-type.metadata=#lib::C<InterfaceType(Reference to root::dart:async::FutureOr*)>] generic-covariant-impl self::C<self::C::T*>* x) → void {}
+[@vm.procedure-attributes.metadata=getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:19,getterSelectorId:20]  method test8r([@vm.inferred-type.metadata=#lib::C<InterfaceType(Reference to root::dart:async::Future*)>] generic-covariant-impl self::C<self::C::T*>* x) → void {}
 }
 static method main() → dynamic {
   dynamic c = new self::C::•<core::int*>();
   [@vm.direct-call.metadata=#lib::C::test2c] [@vm.inferred-type.metadata=!? (receiver not int)] c.test2c(3);
-  [@vm.direct-call.metadata=#lib::C::test3c] [@vm.inferred-type.metadata=!? (receiver not int)] c.test3c([@vm.inferred-type.metadata=dart.async::_Future<dart.core::int*>] asy::Future::value<core::int*>(3));
-  [@vm.direct-call.metadata=#lib::C::test4c] [@vm.inferred-type.metadata=!? (receiver not int)] c.test4c([@vm.inferred-type.metadata=dart.async::_Future<dart.core::int*>] asy::Future::value<core::int*>(3));
+  [@vm.direct-call.metadata=#lib::C::test3c] [@vm.inferred-type.metadata=!? (receiver not int)] c.test3c([@vm.inferred-type.metadata=dart.async::_Future<InterfaceType(Reference to root::dart:core::int*)>] asy::Future::value<core::int*>(3));
+  [@vm.direct-call.metadata=#lib::C::test4c] [@vm.inferred-type.metadata=!? (receiver not int)] c.test4c([@vm.inferred-type.metadata=dart.async::_Future<InterfaceType(Reference to root::dart:core::int*)>] asy::Future::value<core::int*>(3));
   [@vm.direct-call.metadata=#lib::C::test2r] [@vm.inferred-type.metadata=!? (receiver not int)] c.test2r(new self::C::•<core::int*>());
   [@vm.direct-call.metadata=#lib::C::test3r] [@vm.inferred-type.metadata=!? (receiver not int)] c.test3r(new self::C::•<asy::Future<core::int*>*>());
   [@vm.direct-call.metadata=#lib::C::test4r] [@vm.inferred-type.metadata=!? (receiver not int)] c.test4r(new self::C::•<asy::Future<core::int*>*>());
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/future_or.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/future_or.dart.expect
index d7385b2..f97cfd3 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/future_or.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/future_or.dart.expect
@@ -16,11 +16,11 @@
     ;
 }
 [@vm.inferred-type.metadata=dart.core::Null? (value: null)]static field core::Function* unknown;
-static method foo1_a1([@vm.inferred-type.metadata=dart.async::_Future<#lib::B*>] dynamic x) → void {}
+static method foo1_a1([@vm.inferred-type.metadata=dart.async::_Future<InterfaceType(Reference to #lib::B*)>] dynamic x) → void {}
 static method foo1_a2([@vm.inferred-type.metadata=#lib::B] dynamic x) → void {}
-static method foo1_a3([@vm.inferred-type.metadata=dart.async::_Future<#lib::B*>] dynamic x) → void {}
+static method foo1_a3([@vm.inferred-type.metadata=dart.async::_Future<InterfaceType(Reference to #lib::B*)>] dynamic x) → void {}
 static method foo1_a4([@vm.inferred-type.metadata=#lib::B] dynamic x) → void {}
-static method foo1([@vm.inferred-type.metadata=dart.async::_Future<#lib::B*>] asy::Future<self::A*>* a1, [@vm.inferred-type.metadata=#lib::B] self::A* a2, [@vm.inferred-type.metadata=dart.async::_Future<#lib::B*>] asy::FutureOr<self::A*>* a3, [@vm.inferred-type.metadata=#lib::B] asy::FutureOr<self::A*>* a4) → void {
+static method foo1([@vm.inferred-type.metadata=dart.async::_Future<InterfaceType(Reference to #lib::B*)>] asy::Future<self::A*>* a1, [@vm.inferred-type.metadata=#lib::B] self::A* a2, [@vm.inferred-type.metadata=dart.async::_Future<InterfaceType(Reference to #lib::B*)>] asy::FutureOr<self::A*>* a3, [@vm.inferred-type.metadata=#lib::B] asy::FutureOr<self::A*>* a4) → void {
   self::foo1_a1(a1);
   self::foo1_a2(a2);
   self::foo1_a3(a3);
@@ -37,8 +37,8 @@
   self::foo2_a4(a4);
 }
 static method getDynamic() → dynamic
-  return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown.call();
+  return [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to root::dart:core::Function*)] self::unknown.call();
 static method main(core::List<core::String*>* args) → dynamic {
-  self::foo1([@vm.inferred-type.metadata=dart.async::_Future<#lib::B*>] asy::Future::value<self::B*>(new self::B::•()), new self::B::•(), [@vm.inferred-type.metadata=dart.async::_Future<#lib::B*>] asy::Future::value<self::B*>(new self::B::•()), new self::B::•());
+  self::foo1([@vm.inferred-type.metadata=dart.async::_Future<InterfaceType(Reference to #lib::B*)>] asy::Future::value<self::B*>(new self::B::•()), new self::B::•(), [@vm.inferred-type.metadata=dart.async::_Future<InterfaceType(Reference to #lib::B*)>] asy::Future::value<self::B*>(new self::B::•()), new self::B::•());
   self::foo2(self::getDynamic() as{TypeError,ForDynamic} asy::Future<self::A*>*, self::getDynamic() as{TypeError,ForDynamic} self::A*, self::getDynamic() as{TypeError,ForDynamic} asy::FutureOr<self::A*>*, self::getDynamic() as{TypeError,ForDynamic} asy::FutureOr<self::A*>*);
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart.expect
index 6d5cf67..975ada1 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_field_initializer.dart.expect
@@ -64,7 +64,7 @@
 [@vm.inferred-type.metadata=dart.core::Null? (value: null)]static field core::Function* unknown;
 static field core::Object* field1 = [@vm.inferred-type.metadata=!] self::getValue();
 static method getDynamic() → dynamic
-  return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown.call();
+  return [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to root::dart:core::Function*)] self::unknown.call();
 static method getValue() → core::Object* {
   self::A* aa = self::getDynamic() as{TypeError,ForDynamic} self::A*;
   return [@vm.inferred-type.metadata=!] aa.{self::A::foo}();
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class1.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class1.dart.expect
index 95c4d00..5685ec8 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class1.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class1.dart.expect
@@ -33,7 +33,7 @@
 static method use2([@vm.inferred-type.metadata=#lib::Intermediate] self::Intermediate* i, [@vm.inferred-type.metadata=#lib::B?] self::A* aa) → dynamic
   return [@vm.direct-call.metadata=#lib::Intermediate::bar] [@vm.inferred-type.metadata=#lib::T1 (skip check)] i.{self::Intermediate::bar}(aa);
 static method getDynamic() → dynamic
-  return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown.call();
+  return [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to root::dart:core::Function*)] self::unknown.call();
 static method allocateB() → dynamic {
   new self::B::•();
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class2.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class2.dart.expect
index 6149267..1718427 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class2.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_class2.dart.expect
@@ -59,7 +59,7 @@
 static method use3([@vm.inferred-type.metadata=#lib::Intermediate] self::Intermediate* i, self::A* aa) → dynamic
   return [@vm.direct-call.metadata=#lib::Intermediate::bar] [@vm.inferred-type.metadata=! (skip check)] i.{self::Intermediate::bar}(aa);
 static method getDynamic() → dynamic
-  return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown.call();
+  return [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to root::dart:core::Function*)] self::unknown.call();
 static method allocateB() → dynamic {
   new self::B::•();
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_dynamic_target.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_dynamic_target.dart.expect
index c86de6e..9321536 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_dynamic_target.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_new_dynamic_target.dart.expect
@@ -49,7 +49,7 @@
 static method use_bazz(dynamic x) → dynamic
   return [@vm.inferred-type.metadata=#lib::T3] x.bazz();
 static method getDynamic() → dynamic
-  return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown.call();
+  return [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to root::dart:core::Function*)] self::unknown.call();
 static method allocateA() → dynamic {
   new self::A::•();
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field.dart.expect
index 6698bb7..c4aba2f 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field.dart.expect
@@ -51,7 +51,7 @@
 static method use2([@vm.inferred-type.metadata=#lib::DeepCaller2] self::DeepCaller2* x, [@vm.inferred-type.metadata=#lib::A?] self::A* aa) → dynamic
   return [@vm.direct-call.metadata=#lib::DeepCaller2::barL1] [@vm.inferred-type.metadata=! (skip check)] x.{self::DeepCaller2::barL1}(aa);
 static method getDynamic() → dynamic
-  return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown.call();
+  return [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to root::dart:core::Function*)] self::unknown.call();
 static method setField2([@vm.inferred-type.metadata=#lib::A] self::A* aa, [@vm.inferred-type.metadata=#lib::T2] dynamic value) → void {
   [@vm.direct-call.metadata=#lib::A::field2] [@vm.inferred-type.metadata=!? (skip check)] aa.{self::A::field2} = value;
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field2.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field2.dart.expect
index 9372e70..fdbf579 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field2.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/invalidation_set_field2.dart.expect
@@ -28,8 +28,8 @@
     : self::Q::result = result, super core::Object::•()
     ;
 }
-static method foo1([@vm.inferred-type.metadata=dart.core::_GrowableList<#lib::T1*>] core::List<self::T1*>* list) → dynamic {
-  [@vm.direct-call.metadata=#lib::T3::run] [@vm.inferred-type.metadata=!? (skip check)] [@vm.direct-call.metadata=#lib::T1::go??] [@vm.inferred-type.metadata=#lib::T3 (skip check)] [@vm.direct-call.metadata=#lib::Q::result??] [@vm.direct-call.metadata=dart._internal::ListIterable::first] [@vm.inferred-type.metadata=#lib::Q?] [@vm.direct-call.metadata=dart.collection::_ListBase&Object&ListMixin::map] [@vm.inferred-type.metadata=dart._internal::MappedListIterable<#lib::T1*, ?> (skip check)] list.{core::Iterable::map}<self::Q<self::T1*>*>((self::T1* t1) → self::Q<self::T1*>* => new self::Q::•<self::T1*>(t1)).{core::Iterable::first}.{self::Q::result}.{self::T1::go}().{self::T3::run}();
+static method foo1([@vm.inferred-type.metadata=dart.core::_GrowableList<InterfaceType(Reference to #lib::T1*)>] core::List<self::T1*>* list) → dynamic {
+  [@vm.direct-call.metadata=#lib::T3::run] [@vm.inferred-type.metadata=!? (skip check)] [@vm.direct-call.metadata=#lib::T1::go??] [@vm.inferred-type.metadata=#lib::T3 (skip check)] [@vm.direct-call.metadata=#lib::Q::result??] [@vm.direct-call.metadata=dart._internal::ListIterable::first] [@vm.inferred-type.metadata=#lib::Q?] [@vm.direct-call.metadata=dart.collection::_ListBase&Object&ListMixin::map] [@vm.inferred-type.metadata=dart._internal::MappedListIterable<InterfaceType(Reference to #lib::T1*), ?> (skip check)] list.{core::Iterable::map}<self::Q<self::T1*>*>((self::T1* t1) → self::Q<self::T1*>* => new self::Q::•<self::T1*>(t1)).{core::Iterable::first}.{self::Q::result}.{self::T1::go}().{self::T3::run}();
 }
 static method foo2NewValue() → self::Q<dynamic>*
   return new self::Q::•<self::T2*>(new self::T2::•());
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect
index fa129ad..52f7c57 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/no_such_method.dart.expect
@@ -49,11 +49,11 @@
     return new self::T1::•();
   }
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3]  no-such-method-forwarder get bar() → dynamic
-    return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::B::noSuchMethod] [@vm.inferred-type.metadata=#lib::T1 (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))));
+    return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::B::noSuchMethod] [@vm.inferred-type.metadata=#lib::T1 (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<InterfaceType(Reference to root::dart:core::Symbol*), dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))));
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  no-such-method-forwarder method foo() → dynamic
-    return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::B::noSuchMethod] [@vm.inferred-type.metadata=#lib::T1 (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, #C4, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))));
+    return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::B::noSuchMethod] [@vm.inferred-type.metadata=#lib::T1 (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, #C4, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<InterfaceType(Reference to root::dart:core::Symbol*), dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))));
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:4,getterSelectorId:5]  no-such-method-forwarder method bazz([@vm.inferred-type.metadata=dart.core::_Smi (value: 1)] dynamic a1, [@vm.inferred-type.metadata=dart.core::_Smi (value: 2)] dynamic a2, [@vm.inferred-type.metadata=dart.core::_Smi (value: 3)] dynamic a3, [[@vm.inferred-type.metadata=dart.core::_Smi (value: 4)] dynamic a4 = #C1, [@vm.inferred-type.metadata=dart.core::Null? (value: null)] dynamic a5 = #C1]) → dynamic
-    return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::B::noSuchMethod] [@vm.inferred-type.metadata=#lib::T1 (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[a1, a2, a3, a4, a5]), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))));
+    return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::B::noSuchMethod] [@vm.inferred-type.metadata=#lib::T1 (skip check)] this.{self::B::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[a1, a2, a3, a4, a5]), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<InterfaceType(Reference to root::dart:core::Symbol*), dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))));
 }
 abstract class C extends core::Object {
   synthetic constructor •() → self::C*
@@ -68,11 +68,11 @@
     : super self::C::•()
     ;
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3]  no-such-method-forwarder get bar() → dynamic
-    return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::C::noSuchMethod] [@vm.inferred-type.metadata=#lib::T2 (skip check)] this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))));
+    return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::C::noSuchMethod] [@vm.inferred-type.metadata=#lib::T2 (skip check)] this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<InterfaceType(Reference to root::dart:core::Symbol*), dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))));
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:1,getterSelectorId:2]  no-such-method-forwarder method foo() → dynamic
-    return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::C::noSuchMethod] [@vm.inferred-type.metadata=#lib::T2 (skip check)] this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, #C4, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))));
+    return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::C::noSuchMethod] [@vm.inferred-type.metadata=#lib::T2 (skip check)] this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C6, 0, #C3, #C4, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<InterfaceType(Reference to root::dart:core::Symbol*), dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))));
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasTearOffUses:false,methodOrSetterSelectorId:4,getterSelectorId:5]  no-such-method-forwarder method bazz([@vm.inferred-type.metadata=dart.core::_Smi (value: 1)] dynamic a1, [@vm.inferred-type.metadata=dart.core::_Smi (value: 2)] dynamic a2, [@vm.inferred-type.metadata=dart.core::_Smi (value: 3)] dynamic a3, [[@vm.inferred-type.metadata=dart.core::_Smi (value: 4)] dynamic a4 = #C1, [@vm.inferred-type.metadata=dart.core::Null? (value: null)] dynamic a5 = #C1]) → dynamic
-    return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::C::noSuchMethod] [@vm.inferred-type.metadata=#lib::T2 (skip check)] this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[a1, a2, a3, a4, a5]), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))));
+    return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::C::noSuchMethod] [@vm.inferred-type.metadata=#lib::T2 (skip check)] this.{self::C::noSuchMethod}(new core::_InvocationMirror::_withType(#C7, 0, #C3, core::List::unmodifiable<dynamic>(<dynamic>[a1, a2, a3, a4, a5]), [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<InterfaceType(Reference to root::dart:core::Symbol*), dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))));
 }
 class E extends core::Object implements self::A {
   synthetic constructor •() → self::E*
@@ -82,7 +82,7 @@
     return new self::T4::•();
   }
 [@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasThisUses:false,hasNonThisUses:false,hasTearOffUses:false,getterSelectorId:3]  no-such-method-forwarder get bar() → dynamic
-    return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::E::noSuchMethod] [@vm.inferred-type.metadata=#lib::T4 (skip check)] this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<dart.core::Symbol*, dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))));
+    return _in::unsafeCast<dynamic>([@vm.direct-call.metadata=#lib::E::noSuchMethod] [@vm.inferred-type.metadata=#lib::T4 (skip check)] this.{self::E::noSuchMethod}(new core::_InvocationMirror::_withType(#C2, 1, #C3, #C4, [@vm.inferred-type.metadata=dart.collection::UnmodifiableMapView<InterfaceType(Reference to root::dart:core::Symbol*), dynamic>] core::Map::unmodifiable<core::Symbol*, dynamic>(#C5))));
 }
 class F extends core::Object {
   synthetic constructor •() → self::F*
@@ -114,7 +114,7 @@
 [@vm.inferred-type.metadata=#lib::D?]static field self::A* dd = new self::D::•();
 [@vm.inferred-type.metadata=dart.core::Null? (value: null)]static field core::Function* unknown;
 static method getDynamic() → dynamic
-  return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown.call();
+  return [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to root::dart:core::Function*)] self::unknown.call();
 static method main(core::List<core::String*>* args) → dynamic {
   core::print([@vm.direct-call.metadata=#lib::B::foo??] [@vm.inferred-type.metadata=#lib::T1 (skip check)] [@vm.inferred-type.metadata=#lib::B?] self::bb.{self::A::foo}());
   core::print([@vm.direct-call.metadata=#lib::B::bar??] [@vm.inferred-type.metadata=#lib::T1] [@vm.inferred-type.metadata=#lib::B?] self::bb.{self::A::bar});
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/param_types_before_strong_mode_checks.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/param_types_before_strong_mode_checks.dart.expect
index 0378cce..3a1361a 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/param_types_before_strong_mode_checks.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/param_types_before_strong_mode_checks.dart.expect
@@ -49,9 +49,9 @@
   [@vm.direct-call.metadata=#lib::T2::foo??] [@vm.inferred-type.metadata=!? (skip check)] t0.{self::T0::foo}();
 }
 static method getDynamic() → dynamic
-  return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown.call();
+  return [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to root::dart:core::Function*)] self::unknown.call();
 static method use(dynamic x) → dynamic
-  return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown.call(x);
+  return [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to root::dart:core::Function*)] self::unknown.call(x);
 static method main(core::List<core::String*>* args) → dynamic {
   self::func1(self::getDynamic() as{TypeError,ForDynamic} self::T0*);
   self::use(#C1);
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_37455.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/regress_37455.dart.expect
index a7ca2b5..471beff 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_37455.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_37455.dart.expect
@@ -14,18 +14,18 @@
   synthetic constructor •() → self::B*
     : super core::Object::•()
     ;
-[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]  method _foo([@vm.inferred-type.metadata=dart._internal::ListIterator<dart.core::int*>] core::Iterator<core::int*>* iter) → core::List<dynamic>* {
+[@vm.procedure-attributes.metadata=methodOrSetterCalledDynamically:false,getterCalledDynamically:false,hasTearOffUses:false,methodOrSetterSelectorId:5,getterSelectorId:6]  method _foo([@vm.inferred-type.metadata=dart._internal::ListIterator<InterfaceType(Reference to root::dart:core::int*)>] core::Iterator<core::int*>* iter) → core::List<dynamic>* {
     core::List<dynamic>* result = <dynamic>[];
     while ([@vm.direct-call.metadata=dart._internal::ListIterator::moveNext] [@vm.inferred-type.metadata=dart.core::bool (skip check)] iter.{core::Iterator::moveNext}()) {
       if([@vm.direct-call.metadata=dart.core::_IntegerImplementation::<??] [@vm.inferred-type.metadata=dart.core::bool (skip check)] [@vm.direct-call.metadata=dart._internal::ListIterator::current] [@vm.inferred-type.metadata=int?] iter.{core::Iterator::current}.{core::num::<}(0)) {
         return result;
       }
-      [@vm.call-site-attributes.metadata=receiverType:dart.core::List<dynamic>*] [@vm.direct-call.metadata=dart.core::_GrowableList::add] [@vm.inferred-type.metadata=!? (skip check)] result.{core::List::add}(new self::A::•([@vm.direct-call.metadata=#lib::B::_foo] [@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic> (skip check)] this.{self::B::_foo}(iter)));
+      [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to root::dart:core::List*)] [@vm.direct-call.metadata=dart.core::_GrowableList::add] [@vm.inferred-type.metadata=!? (skip check)] result.{core::List::add}(new self::A::•([@vm.direct-call.metadata=#lib::B::_foo] [@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic> (skip check)] this.{self::B::_foo}(iter)));
     }
     return result;
   }
 }
 static method main() → void {
-  core::List<dynamic>* list = [@vm.direct-call.metadata=#lib::B::_foo] [@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic> (skip check)] new self::B::•().{self::B::_foo}([@vm.direct-call.metadata=dart.core::_GrowableList::iterator] [@vm.inferred-type.metadata=dart._internal::ListIterator<dart.core::int*>]<core::int*>[1, 2, 3].{core::Iterable::iterator});
+  core::List<dynamic>* list = [@vm.direct-call.metadata=#lib::B::_foo] [@vm.inferred-type.metadata=dart.core::_GrowableList<dynamic> (skip check)] new self::B::•().{self::B::_foo}([@vm.direct-call.metadata=dart.core::_GrowableList::iterator] [@vm.inferred-type.metadata=dart._internal::ListIterator<InterfaceType(Reference to root::dart:core::int*)>]<core::int*>[1, 2, 3].{core::Iterable::iterator});
   core::print(list);
 }
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_37719.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/regress_37719.dart.expect
index de17976..bb1f31d 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_37719.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_37719.dart.expect
@@ -2,7 +2,7 @@
 import self as self;
 import "dart:core" as core;
 
-[@vm.unboxing-info.metadata=(b)->i]static method foo([@vm.inferred-type.metadata=dart.core::_GrowableList<dart.core::int*>] core::List<core::int*>* x) → dynamic
+[@vm.unboxing-info.metadata=(b)->i]static method foo([@vm.inferred-type.metadata=dart.core::_GrowableList<InterfaceType(Reference to root::dart:core::int*)>] core::List<core::int*>* x) → dynamic
   return [@vm.direct-call.metadata=dart.core::_IntegerImplementation::+] [@vm.inferred-type.metadata=int (skip check)] 1.{core::num::+}([@vm.direct-call.metadata=dart.core::_GrowableList::[]] [@vm.inferred-type.metadata=int? (skip check)] x.{core::List::[]}(0));
 static method main() → dynamic
   return [@vm.inferred-type.metadata=dart.core::Null? (value: null)] core::print([@vm.inferred-type.metadata=int] self::foo(<core::int*>[1]));
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter16182.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter16182.dart.expect
index ab1a24e..3b00d52 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter16182.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/regress_flutter16182.dart.expect
@@ -117,7 +117,7 @@
 [@vm.inferred-type.metadata=dart.core::_Closure?]static field core::Function* unknown4 = () → dynamic => self::bb4;
 static method test1() → void {
   self::B1* bb = new self::B1::•();
-  let final self::B1* #t1 = bb in let final core::int* #t2 = 1 in let final core::int* #t3 = 2 in let final core::int* #t4 = 3 in let final core::int* #t5 = 4 in let final self::T1* #t6 = new self::T1::•() in [@vm.call-site-attributes.metadata=receiverType:#lib::A1*] [@vm.direct-call.metadata=#lib::A1::call] [@vm.inferred-type.metadata=!? (skip check)] [@vm.direct-call.metadata=#lib::B1::aa1] [@vm.inferred-type.metadata=#lib::A1] #t1.{self::B1::aa1}.{self::A1::call}(#t2, #t3, #t4, #t5, #t6);
+  let final self::B1* #t1 = bb in let final core::int* #t2 = 1 in let final core::int* #t3 = 2 in let final core::int* #t4 = 3 in let final core::int* #t5 = 4 in let final self::T1* #t6 = new self::T1::•() in [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to #lib::A1*)] [@vm.direct-call.metadata=#lib::A1::call] [@vm.inferred-type.metadata=!? (skip check)] [@vm.direct-call.metadata=#lib::B1::aa1] [@vm.inferred-type.metadata=#lib::A1] #t1.{self::B1::aa1}.{self::A1::call}(#t2, #t3, #t4, #t5, #t6);
   self::ok = false;
   [@vm.direct-call.metadata=#lib::T1::doTest1??] [@vm.inferred-type.metadata=!? (skip check)] [@vm.direct-call.metadata=#lib::A1::foo] [@vm.inferred-type.metadata=#lib::T1?] [@vm.direct-call.metadata=#lib::B1::aa1] [@vm.inferred-type.metadata=#lib::A1] bb.{self::B1::aa1}.{self::A1::foo}.{self::T1::doTest1}();
   exp::Expect::isTrue([@vm.inferred-type.metadata=dart.core::bool?] self::ok);
@@ -130,7 +130,7 @@
   exp::Expect::isTrue([@vm.inferred-type.metadata=dart.core::bool?] self::ok);
 }
 static method getDynamic3() → dynamic
-  return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown3.call();
+  return [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to root::dart:core::Function*)] self::unknown3.call();
 static method test3() → void {
   self::getDynamic3().aa3(1, 2, 3, 4, 5, 6, new self::T3::•());
   self::ok = false;
@@ -138,7 +138,7 @@
   exp::Expect::isTrue([@vm.inferred-type.metadata=dart.core::bool?] self::ok);
 }
 static method getDynamic4() → dynamic
-  return [@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] self::unknown4.call();
+  return [@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to root::dart:core::Function*)] self::unknown4.call();
 static method test4() → void {
   self::getDynamic4().aa4(1, 2, 3, 4, 5, 6, 7, new self::T4::•());
   self::ok = false;
diff --git a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart.expect b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart.expect
index e3c2996..f2aa9f5 100644
--- a/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart.expect
+++ b/pkg/vm/testcases/transformations/type_flow/transformer/tear_off_dynamic_method.dart.expect
@@ -25,5 +25,5 @@
   return new self::B::•();
 static method main(core::List<core::String*>* args) → dynamic {
   core::Function* closure = () → self::B* => new self::B::•();
-  new self::TearOffDynamicMethod::•([@vm.call-site-attributes.metadata=receiverType:dart.core::Function*] closure.call());
+  new self::TearOffDynamicMethod::•([@vm.call-site-attributes.metadata=receiverType:InterfaceType(Reference to root::dart:core::Function*)] closure.call());
 }
diff --git a/pkg/vm_service/CHANGELOG.md b/pkg/vm_service/CHANGELOG.md
index 6758942..cbe9222 100644
--- a/pkg/vm_service/CHANGELOG.md
+++ b/pkg/vm_service/CHANGELOG.md
@@ -1,8 +1,8 @@
 # Changelog
 
 ## 4.0.0
-- **breaking**: RPCs which can return a `Sentinel` will now throw the `Sentinel`
-  it is received as a response.
+- **breaking**: RPCs which can return a `Sentinel` will now throw a `SentinelException`
+  if a `Sential` is received as a response.
 - **breaking**: RPCs which can return multiple values now return
   `Future<Response>` rather than `Future<dynamic>`.
 - `RPCError` now implements `Exception`.
diff --git a/runtime/bin/BUILD.gn b/runtime/bin/BUILD.gn
index d7395fc..abf3f53 100644
--- a/runtime/bin/BUILD.gn
+++ b/runtime/bin/BUILD.gn
@@ -530,7 +530,10 @@
   ]
   args = []
   if (use_nnbd) {
-    args += [ "--enable-experiment=non-nullable" ]
+    args += [
+      "--enable-experiment=non-nullable",
+      "--null-safety",
+    ]
   }
   args += [
     "--deterministic",
diff --git a/runtime/bin/file.cc b/runtime/bin/file.cc
index 0ac8065..886970e 100644
--- a/runtime/bin/file.cc
+++ b/runtime/bin/file.cc
@@ -763,7 +763,7 @@
   Namespace* namespc = Namespace::GetNamespace(args, 0);
   const char* path_1 = DartUtils::GetNativeStringArgument(args, 1);
   const char* path_2 = DartUtils::GetNativeStringArgument(args, 2);
-  File::Identical result = File::AreIdentical(namespc, path_1, path_2);
+  File::Identical result = File::AreIdentical(namespc, path_1, namespc, path_2);
   if (result == File::kError) {
     Dart_SetReturnValue(args, DartUtils::NewDartOSError());
   } else {
@@ -1455,7 +1455,7 @@
   CObjectString path1(request[1]);
   CObjectString path2(request[2]);
   File::Identical result =
-      File::AreIdentical(namespc, path1.CString(), path2.CString());
+      File::AreIdentical(namespc, path1.CString(), namespc, path2.CString());
   if (result == File::kError) {
     return CObject::NewOSError();
   }
diff --git a/runtime/bin/file.h b/runtime/bin/file.h
index ac89688..642ba9e 100644
--- a/runtime/bin/file.h
+++ b/runtime/bin/file.h
@@ -250,8 +250,9 @@
   static const char* PathSeparator();
   static const char* StringEscapedPathSeparator();
   static Type GetType(Namespace* namespc, const char* path, bool follow_links);
-  static Identical AreIdentical(Namespace* namespc,
+  static Identical AreIdentical(Namespace* namespc_1,
                                 const char* file_1,
+                                Namespace* namespc_2,
                                 const char* file_2);
   static StdioHandleType GetStdioHandleType(int fd);
 
diff --git a/runtime/bin/file_android.cc b/runtime/bin/file_android.cc
index 151c969..51a7599 100644
--- a/runtime/bin/file_android.cc
+++ b/runtime/bin/file_android.cc
@@ -702,22 +702,28 @@
   return kOther;
 }
 
-File::Identical File::AreIdentical(Namespace* namespc,
+File::Identical File::AreIdentical(Namespace* namespc_1,
                                    const char* file_1,
+                                   Namespace* namespc_2,
                                    const char* file_2) {
-  NamespaceScope ns1(namespc, file_1);
-  NamespaceScope ns2(namespc, file_2);
   struct stat file_1_info;
   struct stat file_2_info;
-  int status = TEMP_FAILURE_RETRY(
-      fstatat(ns1.fd(), ns1.path(), &file_1_info, AT_SYMLINK_NOFOLLOW));
-  if (status == -1) {
-    return File::kError;
+  int status;
+  {
+    NamespaceScope ns1(namespc_1, file_1);
+    status = TEMP_FAILURE_RETRY(
+        fstatat(ns1.fd(), ns1.path(), &file_1_info, AT_SYMLINK_NOFOLLOW));
+    if (status == -1) {
+      return File::kError;
+    }
   }
-  status = TEMP_FAILURE_RETRY(
-      fstatat(ns2.fd(), ns2.path(), &file_2_info, AT_SYMLINK_NOFOLLOW));
-  if (status == -1) {
-    return File::kError;
+  {
+    NamespaceScope ns2(namespc_2, file_2);
+    status = TEMP_FAILURE_RETRY(
+        fstatat(ns2.fd(), ns2.path(), &file_2_info, AT_SYMLINK_NOFOLLOW));
+    if (status == -1) {
+      return File::kError;
+    }
   }
   return ((file_1_info.st_ino == file_2_info.st_ino) &&
           (file_1_info.st_dev == file_2_info.st_dev))
diff --git a/runtime/bin/file_fuchsia.cc b/runtime/bin/file_fuchsia.cc
index 0fde6ae..354dd65 100644
--- a/runtime/bin/file_fuchsia.cc
+++ b/runtime/bin/file_fuchsia.cc
@@ -655,22 +655,28 @@
   return kOther;
 }
 
-File::Identical File::AreIdentical(Namespace* namespc,
+File::Identical File::AreIdentical(Namespace* namespc_1,
                                    const char* file_1,
+                                   Namespace* namespc_2,
                                    const char* file_2) {
-  NamespaceScope ns1(namespc, file_1);
-  NamespaceScope ns2(namespc, file_2);
   struct stat file_1_info;
   struct stat file_2_info;
-  int status = TEMP_FAILURE_RETRY(
-      fstatat(ns1.fd(), ns1.path(), &file_1_info, AT_SYMLINK_NOFOLLOW));
-  if (status == -1) {
-    return File::kError;
+  int status;
+  {
+    NamespaceScope ns1(namespc_1, file_1);
+    status = TEMP_FAILURE_RETRY(
+        fstatat(ns1.fd(), ns1.path(), &file_1_info, AT_SYMLINK_NOFOLLOW));
+    if (status == -1) {
+      return File::kError;
+    }
   }
-  status = TEMP_FAILURE_RETRY(
-      fstatat(ns2.fd(), ns2.path(), &file_2_info, AT_SYMLINK_NOFOLLOW));
-  if (status == -1) {
-    return File::kError;
+  {
+    NamespaceScope ns2(namespc_2, file_2);
+    status = TEMP_FAILURE_RETRY(
+        fstatat(ns2.fd(), ns2.path(), &file_2_info, AT_SYMLINK_NOFOLLOW));
+    if (status == -1) {
+      return File::kError;
+    }
   }
   return ((file_1_info.st_ino == file_2_info.st_ino) &&
           (file_1_info.st_dev == file_2_info.st_dev))
diff --git a/runtime/bin/file_linux.cc b/runtime/bin/file_linux.cc
index e8efaa1..16c1770 100644
--- a/runtime/bin/file_linux.cc
+++ b/runtime/bin/file_linux.cc
@@ -699,22 +699,28 @@
   return kOther;
 }
 
-File::Identical File::AreIdentical(Namespace* namespc,
+File::Identical File::AreIdentical(Namespace* namespc_1,
                                    const char* file_1,
+                                   Namespace* namespc_2,
                                    const char* file_2) {
-  NamespaceScope ns1(namespc, file_1);
-  NamespaceScope ns2(namespc, file_2);
   struct stat64 file_1_info;
   struct stat64 file_2_info;
-  int status = TEMP_FAILURE_RETRY(
-      fstatat64(ns1.fd(), ns1.path(), &file_1_info, AT_SYMLINK_NOFOLLOW));
-  if (status == -1) {
-    return File::kError;
+  int status;
+  {
+    NamespaceScope ns1(namespc_1, file_1);
+    status = TEMP_FAILURE_RETRY(
+        fstatat64(ns1.fd(), ns1.path(), &file_1_info, AT_SYMLINK_NOFOLLOW));
+    if (status == -1) {
+      return File::kError;
+    }
   }
-  status = TEMP_FAILURE_RETRY(
-      fstatat64(ns2.fd(), ns2.path(), &file_2_info, AT_SYMLINK_NOFOLLOW));
-  if (status == -1) {
-    return File::kError;
+  {
+    NamespaceScope ns2(namespc_2, file_2);
+    status = TEMP_FAILURE_RETRY(
+        fstatat64(ns2.fd(), ns2.path(), &file_2_info, AT_SYMLINK_NOFOLLOW));
+    if (status == -1) {
+      return File::kError;
+    }
   }
   return ((file_1_info.st_ino == file_2_info.st_ino) &&
           (file_1_info.st_dev == file_2_info.st_dev))
diff --git a/runtime/bin/file_macos.cc b/runtime/bin/file_macos.cc
index d763add..bc6ef93 100644
--- a/runtime/bin/file_macos.cc
+++ b/runtime/bin/file_macos.cc
@@ -619,9 +619,12 @@
   return kOther;
 }
 
-File::Identical File::AreIdentical(Namespace* namespc,
+File::Identical File::AreIdentical(Namespace* namespc_1,
                                    const char* file_1,
+                                   Namespace* namespc_2,
                                    const char* file_2) {
+  USE(namespc_1);
+  USE(namespc_2);
   struct stat file_1_info;
   struct stat file_2_info;
   if ((NO_RETRY_EXPECTED(lstat(file_1, &file_1_info)) == -1) ||
diff --git a/runtime/bin/file_win.cc b/runtime/bin/file_win.cc
index bc4c6b1..2dc6b95 100644
--- a/runtime/bin/file_win.cc
+++ b/runtime/bin/file_win.cc
@@ -760,9 +760,12 @@
   return result;
 }
 
-File::Identical File::AreIdentical(Namespace* namespc,
+File::Identical File::AreIdentical(Namespace* namespc_1,
                                    const char* file_1,
+                                   Namespace* namespc_2,
                                    const char* file_2) {
+  USE(namespc_1);
+  USE(namespc_2);
   BY_HANDLE_FILE_INFORMATION file_info[2];
   const char* file_names[2] = {file_1, file_2};
   for (int i = 0; i < 2; ++i) {
diff --git a/runtime/bin/io_natives.cc b/runtime/bin/io_natives.cc
index f34671c..155d415 100644
--- a/runtime/bin/io_natives.cc
+++ b/runtime/bin/io_natives.cc
@@ -82,6 +82,7 @@
   V(Filter_Process, 4)                                                         \
   V(Filter_Processed, 3)                                                       \
   V(InternetAddress_Parse, 1)                                                  \
+  V(InternetAddress_RawAddrToString, 1)                                        \
   V(IOService_NewServicePort, 0)                                               \
   V(Namespace_Create, 2)                                                       \
   V(Namespace_GetDefault, 0)                                                   \
@@ -130,11 +131,14 @@
   V(SecurityContext_UseCertificateChainBytes, 3)                               \
   V(ServerSocket_Accept, 2)                                                    \
   V(ServerSocket_CreateBindListen, 7)                                          \
+  V(ServerSocket_CreateUnixDomainBindListen, 5)                                \
   V(SocketBase_IsBindError, 2)                                                 \
   V(Socket_Available, 1)                                                       \
   V(Socket_CreateBindConnect, 5)                                               \
+  V(Socket_CreateUnixDomainBindConnect, 4)                                     \
   V(Socket_CreateBindDatagram, 6)                                              \
   V(Socket_CreateConnect, 4)                                                   \
+  V(Socket_CreateUnixDomainConnect, 3)                                         \
   V(Socket_GetPort, 1)                                                         \
   V(Socket_GetRemotePeer, 1)                                                   \
   V(Socket_GetError, 1)                                                        \
diff --git a/runtime/bin/socket.cc b/runtime/bin/socket.cc
index c96530b..1b79c66 100644
--- a/runtime/bin/socket.cc
+++ b/runtime/bin/socket.cc
@@ -6,6 +6,7 @@
 
 #include "bin/dartutils.h"
 #include "bin/eventhandler.h"
+#include "bin/file.h"
 #include "bin/io_buffer.h"
 #include "bin/isolate_data.h"
 #include "bin/lockers.h"
@@ -178,7 +179,7 @@
 
   Socket* socketfd = new Socket(fd);
   OSSocket* os_socket =
-      new OSSocket(addr, allocated_port, v6_only, shared, socketfd);
+      new OSSocket(addr, allocated_port, v6_only, shared, socketfd, NULL);
   os_socket->ref_count = 1;
   os_socket->next = first_os_socket;
 
@@ -192,6 +193,73 @@
   return Dart_True();
 }
 
+Dart_Handle ListeningSocketRegistry::CreateUnixDomainBindListen(
+    Dart_Handle socket_object,
+    Namespace* namespc,
+    const char* path,
+    intptr_t backlog,
+    bool shared) {
+  MutexLocker ml(&mutex_);
+
+  if (unix_domain_sockets_ != NULL && File::Exists(namespc, path)) {
+    // If there is a socket listening on this file. Ensure
+    // that it was created with `shared` mode and current `shared`
+    // is also true.
+    OSSocket* os_socket = unix_domain_sockets_;
+    OSSocket* os_socket_same_addr =
+        FindOSSocketWithPath(os_socket, namespc, path);
+    if (os_socket_same_addr != NULL) {
+      if (!os_socket_same_addr->shared || !shared) {
+        OSError os_error(-1,
+                         "The shared flag to bind() needs to be `true` if "
+                         "binding multiple times on the same path.",
+                         OSError::kUnknown);
+        return DartUtils::NewDartOSError(&os_error);
+      }
+
+      // This socket creation is the exact same as the one which originally
+      // created the socket. Feed the same fd and store it into the native field
+      // of dart socket_object. Sockets here will share same fd but contain a
+      // different port() through EventHandler_SendData.
+      Socket* socketfd = new Socket(os_socket->fd);
+      os_socket->ref_count++;
+      // We set as a side-effect the file descriptor on the dart
+      // socket_object.
+      Socket::ReuseSocketIdNativeField(socket_object, socketfd,
+                                       Socket::kFinalizerListening);
+      InsertByFd(socketfd, os_socket);
+      return Dart_True();
+    }
+  }
+
+  RawAddr addr;
+  Dart_Handle result =
+      SocketAddress::GetUnixDomainSockAddr(path, namespc, &addr);
+  if (!Dart_IsNull(result)) {
+    return result;
+  }
+
+  // There is no socket listening on that path, so we create new one.
+  intptr_t fd = ServerSocket::CreateUnixDomainBindListen(addr, backlog);
+
+  if (fd < 0) {
+    return DartUtils::NewDartOSError();
+  }
+
+  Socket* socketfd = new Socket(fd);
+  OSSocket* os_socket =
+      new OSSocket(addr, -1, false, shared, socketfd, namespc);
+  os_socket->ref_count = 1;
+  os_socket->next = unix_domain_sockets_;
+  unix_domain_sockets_ = os_socket;
+  InsertByFd(socketfd, os_socket);
+
+  Socket::ReuseSocketIdNativeField(socket_object, socketfd,
+                                   Socket::kFinalizerListening);
+
+  return Dart_True();
+}
+
 bool ListeningSocketRegistry::CloseOneSafe(OSSocket* os_socket,
                                            Socket* socket) {
   ASSERT(!mutex_.TryLock());
@@ -202,7 +270,12 @@
   if (os_socket->ref_count > 0) {
     return false;
   }
-
+  // Unlink the socket file, if os_socket contains unix domain sockets.
+  if (os_socket->address.addr.sa_family == AF_UNIX) {
+    unlink(os_socket->address.un.sun_path);
+    delete os_socket;
+    return true;
+  }
   OSSocket* prev = NULL;
   OSSocket* current = LookupByPort(os_socket->port);
   while (current != os_socket) {
@@ -298,6 +371,72 @@
   }
 }
 
+void FUNCTION_NAME(Socket_CreateUnixDomainBindConnect)(
+    Dart_NativeArguments args) {
+#if defined(HOST_OS_WINDOWS) || defined(HOST_OS_FUCHSIA)
+  OSError os_error(
+      -1, "Unix domain sockets are not available on this operating system.",
+      OSError::kUnknown);
+  Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error));
+#else
+  RawAddr addr;
+  Dart_Handle address = Dart_GetNativeArgument(args, 1);
+  ASSERT(Dart_IsString(address));
+  Dart_Handle result = SocketAddress::GetUnixDomainSockAddr(
+      DartUtils::GetStringValue(address), Namespace::GetNamespace(args, 3),
+      &addr);
+  if (!Dart_IsNull(result)) {
+    return Dart_SetReturnValue(args, result);
+  }
+
+  RawAddr sourceAddr;
+  address = Dart_GetNativeArgument(args, 2);
+  ASSERT(Dart_IsString(address));
+  result = SocketAddress::GetUnixDomainSockAddr(
+      DartUtils::GetStringValue(address), Namespace::GetNamespace(args, 3),
+      &sourceAddr);
+  if (!Dart_IsNull(result)) {
+    return Dart_SetReturnValue(args, result);
+  }
+
+  intptr_t socket = Socket::CreateUnixDomainBindConnect(addr, sourceAddr);
+  if (socket >= 0) {
+    Socket::SetSocketIdNativeField(Dart_GetNativeArgument(args, 0), socket,
+                                   Socket::kFinalizerNormal);
+    Dart_SetReturnValue(args, Dart_True());
+  } else {
+    Dart_SetReturnValue(args, DartUtils::NewDartOSError());
+  }
+#endif  // defined(HOST_OS_WINDOWS) || defined(HOST_OS_FUCHSIA)
+}
+
+void FUNCTION_NAME(Socket_CreateUnixDomainConnect)(Dart_NativeArguments args) {
+#if defined(HOST_OS_WINDOWS) || defined(HOST_OS_FUCHSIA)
+  OSError os_error(
+      -1, "Unix domain sockets are only available on linux, android and macos.",
+      OSError::kUnknown);
+  Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error));
+#else
+  RawAddr addr;
+  Dart_Handle address = Dart_GetNativeArgument(args, 1);
+  ASSERT(Dart_IsString(address));
+  Dart_Handle result = SocketAddress::GetUnixDomainSockAddr(
+      DartUtils::GetStringValue(address), Namespace::GetNamespace(args, 2),
+      &addr);
+  if (!Dart_IsNull(result)) {
+    return Dart_SetReturnValue(args, result);
+  }
+  intptr_t socket = Socket::CreateUnixDomainConnect(addr);
+  if (socket >= 0) {
+    Socket::SetSocketIdNativeField(Dart_GetNativeArgument(args, 0), socket,
+                                   Socket::kFinalizerNormal);
+    Dart_SetReturnValue(args, Dart_True());
+  } else {
+    Dart_SetReturnValue(args, DartUtils::NewDartOSError());
+  }
+#endif  // defined(HOST_OS_WINDOWS) || defined(HOST_OS_FUCHSIA)
+}
+
 void FUNCTION_NAME(Socket_CreateBindDatagram)(Dart_NativeArguments args) {
   RawAddr addr;
   SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 1), &addr);
@@ -423,18 +562,24 @@
 
   // Get the port and clear it in the sockaddr structure.
   int port = SocketAddress::GetAddrPort(addr);
+  // TODO(21403): Add checks for AF_UNIX, if unix domain sockets
+  // are used in SOCK_DGRAM.
+  enum internet_type { IPv4, IPv6 };
+  internet_type type;
   if (addr.addr.sa_family == AF_INET) {
     addr.in.sin_port = 0;
+    type = IPv4;
   } else {
     ASSERT(addr.addr.sa_family == AF_INET6);
     addr.in6.sin6_port = 0;
+    type = IPv6;
   }
   // Format the address to a string using the numeric format.
   char numeric_address[INET6_ADDRSTRLEN];
   SocketBase::FormatNumericAddress(addr, numeric_address, INET6_ADDRSTRLEN);
 
   // Create a Datagram object with the data and sender address and port.
-  const int kNumArgs = 4;
+  const int kNumArgs = 5;
   Dart_Handle dart_args[kNumArgs];
   dart_args[0] = data;
   dart_args[1] = Dart_NewStringFromCString(numeric_address);
@@ -443,6 +588,7 @@
   }
   dart_args[2] = SocketAddress::ToTypedData(addr);
   dart_args[3] = Dart_NewInteger(port);
+  dart_args[4] = Dart_NewInteger(type);
   if (Dart_IsError(dart_args[3])) {
     Dart_PropagateError(dart_args[3]);
   }
@@ -550,7 +696,7 @@
   if (port > 0) {
     Dart_SetIntegerReturnValue(args, port);
   } else {
-    Dart_ThrowException(DartUtils::NewDartOSError());
+    Dart_SetReturnValue(args, DartUtils::NewDartOSError());
   }
 }
 
@@ -561,14 +707,18 @@
   SocketAddress* addr = SocketBase::GetRemotePeer(socket->fd(), &port);
   if (addr != NULL) {
     Dart_Handle list = Dart_NewList(2);
-
-    Dart_Handle entry = Dart_NewList(3);
-    Dart_ListSetAt(entry, 0, Dart_NewInteger(addr->GetType()));
+    int type = addr->GetType();
+    Dart_Handle entry;
+    if (type == SocketAddress::TYPE_UNIX) {
+      entry = Dart_NewList(2);
+    } else {
+      entry = Dart_NewList(3);
+      RawAddr raw = addr->addr();
+      Dart_ListSetAt(entry, 2, SocketAddress::ToTypedData(raw));
+    }
+    Dart_ListSetAt(entry, 0, Dart_NewInteger(type));
     Dart_ListSetAt(entry, 1, Dart_NewStringFromCString(addr->as_string()));
 
-    RawAddr raw = addr->addr();
-    Dart_ListSetAt(entry, 2, SocketAddress::ToTypedData(raw));
-
     Dart_ListSetAt(list, 0, entry);
     Dart_ListSetAt(list, 1, Dart_NewInteger(port));
     Dart_SetReturnValue(args, list);
@@ -651,6 +801,29 @@
   Dart_SetReturnValue(args, result);
 }
 
+void FUNCTION_NAME(ServerSocket_CreateUnixDomainBindListen)(
+    Dart_NativeArguments args) {
+#if defined(HOST_OS_WINDOWS)
+  OSError os_error(
+      -1, "Unix domain sockets are only available on linux, android and macos.",
+      OSError::kUnknown);
+  Dart_SetReturnValue(args, DartUtils::NewDartOSError(&os_error));
+#else
+  Dart_Handle address = Dart_GetNativeArgument(args, 1);
+  ASSERT(Dart_IsString(address));
+  const char* path = DartUtils::GetStringValue(address);
+  int64_t backlog = DartUtils::GetInt64ValueCheckRange(
+      Dart_GetNativeArgument(args, 2), 0, 65535);
+  bool shared = DartUtils::GetBooleanValue(Dart_GetNativeArgument(args, 3));
+  Namespace* namespc = Namespace::GetNamespace(args, 4);
+  Dart_Handle socket_object = Dart_GetNativeArgument(args, 0);
+  Dart_Handle result =
+      ListeningSocketRegistry::Instance()->CreateUnixDomainBindListen(
+          socket_object, namespc, path, backlog, shared);
+  Dart_SetReturnValue(args, result);
+#endif  // defined(HOST_OS_WINDOWS)
+}
+
 void FUNCTION_NAME(ServerSocket_Accept)(Dart_NativeArguments args) {
   Socket* socket =
       Socket::GetSocketIdNativeField(Dart_GetNativeArgument(args, 0));
diff --git a/runtime/bin/socket.h b/runtime/bin/socket.h
index c3ea9fe..caed3bb 100644
--- a/runtime/bin/socket.h
+++ b/runtime/bin/socket.h
@@ -7,6 +7,7 @@
 
 #include "bin/builtin.h"
 #include "bin/dartutils.h"
+#include "bin/file.h"
 #include "bin/reference_counting.h"
 #include "bin/socket_base.h"
 #include "bin/thread.h"
@@ -70,10 +71,13 @@
   // Creates a socket which is bound and connected. The port to connect to is
   // specified as the port component of the passed RawAddr structure.
   static intptr_t CreateConnect(const RawAddr& addr);
+  static intptr_t CreateUnixDomainConnect(const RawAddr& addr);
   // Creates a socket which is bound and connected. The port to connect to is
   // specified as the port component of the passed RawAddr structure.
   static intptr_t CreateBindConnect(const RawAddr& addr,
                                     const RawAddr& source_addr);
+  static intptr_t CreateUnixDomainBindConnect(const RawAddr& addr,
+                                              const RawAddr& source_addr);
   // Creates a datagram socket which is bound. The port to bind
   // to is specified as the port component of the RawAddr structure.
   static intptr_t CreateBindDatagram(const RawAddr& addr,
@@ -146,6 +150,8 @@
   static intptr_t CreateBindListen(const RawAddr& addr,
                                    intptr_t backlog,
                                    bool v6_only = false);
+  static intptr_t CreateUnixDomainBindListen(const RawAddr& addr,
+                                             intptr_t backlog);
 
   // Start accepting on a newly created listening socket. If it was unable to
   // start accepting incoming sockets, the fd is invalidated.
@@ -173,6 +179,8 @@
 
   static void Cleanup();
 
+  // Bind `socket_object` to `addr`.
+  // Return Dart_True() if succeed.
   // This function should be called from a dart runtime call in order to create
   // a new (potentially shared) socket.
   Dart_Handle CreateBindListen(Dart_Handle socket_object,
@@ -180,6 +188,15 @@
                                intptr_t backlog,
                                bool v6_only,
                                bool shared);
+  // Bind unix domain socket`socket_object` to `path`.
+  // Return Dart_True() if succeed.
+  // This function should be called from a dart runtime call in order to create
+  // a new socket.
+  Dart_Handle CreateUnixDomainBindListen(Dart_Handle socket_object,
+                                         Namespace* namespc,
+                                         const char* path,
+                                         intptr_t backlog,
+                                         bool shared);
 
   // This should be called from the event handler for every kCloseEvent it gets
   // on listening sockets.
@@ -202,6 +219,10 @@
     int ref_count;
     intptr_t fd;
 
+    // Only applicable to Unix domain socket, where address.addr.sa_family
+    // == AF_UNIX.
+    Namespace* namespc;
+
     // Singly linked lists of OSSocket instances which listen on the same port
     // but on different addresses.
     OSSocket* next;
@@ -210,12 +231,14 @@
              int port,
              bool v6_only,
              bool shared,
-             Socket* socketfd)
+             Socket* socketfd,
+             Namespace* namespc)
         : address(address),
           port(port),
           v6_only(v6_only),
           shared(shared),
           ref_count(0),
+          namespc(namespc),
           next(NULL) {
       fd = socketfd->fd();
     }
@@ -233,6 +256,20 @@
     return NULL;
   }
 
+  OSSocket* FindOSSocketWithPath(OSSocket* current,
+                                 Namespace* namespc,
+                                 const char* path) {
+    while (current != NULL) {
+      ASSERT(current->address.addr.sa_family == AF_UNIX);
+      if (File::AreIdentical(current->namespc, current->address.un.sun_path,
+                             namespc, path) == File::kIdentical) {
+        return current;
+      }
+      current = current->next;
+    }
+    return NULL;
+  }
+
   static bool SameIntptrValue(void* key1, void* key2) {
     return reinterpret_cast<intptr_t>(key1) == reinterpret_cast<intptr_t>(key2);
   }
@@ -259,6 +296,8 @@
   SimpleHashMap sockets_by_port_;
   SimpleHashMap sockets_by_fd_;
 
+  OSSocket* unix_domain_sockets_;
+
   Mutex mutex_;
 
   DISALLOW_COPY_AND_ASSIGN(ListeningSocketRegistry);
diff --git a/runtime/bin/socket_android.cc b/runtime/bin/socket_android.cc
index 78e1f8e..196cb36 100644
--- a/runtime/bin/socket_android.cc
+++ b/runtime/bin/socket_android.cc
@@ -37,7 +37,7 @@
   if (fd < 0) {
     return -1;
   }
-  if (!FDUtils::SetCloseOnExec(fd)) {
+  if (!FDUtils::SetCloseOnExec(fd) || !FDUtils::SetNonBlocking(fd)) {
     FDUtils::SaveErrorAndClose(fd);
     return -1;
   }
@@ -60,13 +60,23 @@
     return fd;
   }
 
-  if (!FDUtils::SetNonBlocking(fd)) {
-    FDUtils::SaveErrorAndClose(fd);
-    return -1;
-  }
   return Connect(fd, addr);
 }
 
+intptr_t Socket::CreateUnixDomainConnect(const RawAddr& addr) {
+  intptr_t fd = Create(addr);
+  if (fd < 0) {
+    return fd;
+  }
+  intptr_t result = TEMP_FAILURE_RETRY(connect(
+      fd, (struct sockaddr*)&addr.un, SocketAddress::GetAddrLength(addr)));
+  if (result == 0 || errno == EAGAIN) {
+    return fd;
+  }
+  FDUtils::SaveErrorAndClose(fd);
+  return -1;
+}
+
 intptr_t Socket::CreateBindConnect(const RawAddr& addr,
                                    const RawAddr& source_addr) {
   intptr_t fd = Create(addr);
@@ -76,7 +86,7 @@
 
   intptr_t result = TEMP_FAILURE_RETRY(
       bind(fd, &source_addr.addr, SocketAddress::GetAddrLength(source_addr)));
-  if ((result != 0) && (errno != EINPROGRESS)) {
+  if (result != 0) {
     FDUtils::SaveErrorAndClose(fd);
     return -1;
   }
@@ -84,6 +94,29 @@
   return Connect(fd, addr);
 }
 
+intptr_t Socket::CreateUnixDomainBindConnect(const RawAddr& addr,
+                                             const RawAddr& source_addr) {
+  intptr_t fd = Create(addr);
+  if (fd < 0) {
+    return fd;
+  }
+
+  intptr_t result = TEMP_FAILURE_RETRY(
+      bind(fd, &source_addr.addr, SocketAddress::GetAddrLength(source_addr)));
+  if (result != 0) {
+    FDUtils::SaveErrorAndClose(fd);
+    return -1;
+  }
+
+  result = TEMP_FAILURE_RETRY(connect(fd, (struct sockaddr*)&addr.un,
+                                      SocketAddress::GetAddrLength(addr)));
+  if (result == 0 || errno == EAGAIN) {
+    return fd;
+  }
+  FDUtils::SaveErrorAndClose(fd);
+  return -1;
+}
+
 intptr_t Socket::CreateBindDatagram(const RawAddr& addr,
                                     bool reuseAddress,
                                     bool reusePort,
@@ -189,6 +222,21 @@
   return fd;
 }
 
+intptr_t ServerSocket::CreateUnixDomainBindListen(const RawAddr& addr,
+                                                  intptr_t backlog) {
+  intptr_t fd = Create(addr);
+  if (NO_RETRY_EXPECTED(bind(fd, (struct sockaddr*)&addr.un,
+                             SocketAddress::GetAddrLength(addr))) < 0) {
+    FDUtils::SaveErrorAndClose(fd);
+    return -1;
+  }
+  if (NO_RETRY_EXPECTED(listen(fd, backlog > 0 ? backlog : SOMAXCONN)) != 0) {
+    FDUtils::SaveErrorAndClose(fd);
+    return -1;
+  }
+  return fd;
+}
+
 bool ServerSocket::StartAccept(intptr_t fd) {
   USE(fd);
   return true;
diff --git a/runtime/bin/socket_base.cc b/runtime/bin/socket_base.cc
index 8789c43..6fb402c 100644
--- a/runtime/bin/socket_base.cc
+++ b/runtime/bin/socket_base.cc
@@ -9,6 +9,7 @@
 #include "bin/isolate_data.h"
 #include "bin/lockers.h"
 #include "bin/thread.h"
+#include "bin/typed_data_utils.h"
 #include "bin/utils.h"
 
 #include "include/dart_api.h"
@@ -20,16 +21,33 @@
 namespace bin {
 
 int SocketAddress::GetType() {
-  if (addr_.ss.ss_family == AF_INET6) {
-    return TYPE_IPV6;
+  switch (addr_.ss.ss_family) {
+    case AF_INET6:
+      return TYPE_IPV6;
+    case AF_INET:
+      return TYPE_IPV4;
+    case AF_UNIX:
+      return TYPE_UNIX;
+    default:
+      UNREACHABLE();
+      return TYPE_ANY;
   }
-  return TYPE_IPV4;
 }
 
 intptr_t SocketAddress::GetAddrLength(const RawAddr& addr) {
-  ASSERT((addr.ss.ss_family == AF_INET) || (addr.ss.ss_family == AF_INET6));
-  return (addr.ss.ss_family == AF_INET6) ? sizeof(struct sockaddr_in6)
-                                         : sizeof(struct sockaddr_in);
+  ASSERT((addr.ss.ss_family == AF_INET) || (addr.ss.ss_family == AF_INET6) ||
+         (addr.ss.ss_family == AF_UNIX));
+  switch (addr.ss.ss_family) {
+    case AF_INET6:
+      return sizeof(struct sockaddr_in6);
+    case AF_INET:
+      return sizeof(struct sockaddr_in);
+    case AF_UNIX:
+      return sizeof(struct sockaddr_un);
+    default:
+      UNREACHABLE();
+      return 0;
+  }
 }
 
 intptr_t SocketAddress::GetInAddrLength(const RawAddr& addr) {
@@ -39,18 +57,24 @@
 }
 
 bool SocketAddress::AreAddressesEqual(const RawAddr& a, const RawAddr& b) {
+  if (a.ss.ss_family != b.ss.ss_family) {
+    return false;
+  }
   if (a.ss.ss_family == AF_INET) {
-    if (b.ss.ss_family != AF_INET) {
-      return false;
-    }
     return memcmp(&a.in.sin_addr, &b.in.sin_addr, sizeof(a.in.sin_addr)) == 0;
   } else if (a.ss.ss_family == AF_INET6) {
-    if (b.ss.ss_family != AF_INET6) {
-      return false;
-    }
     return memcmp(&a.in6.sin6_addr, &b.in6.sin6_addr,
                   sizeof(a.in6.sin6_addr)) == 0 &&
            a.in6.sin6_scope_id == b.in6.sin6_scope_id;
+  } else if (a.ss.ss_family == AF_UNIX) {
+    // This is not used anywhere. The comparison of file path is done via
+    // File::AreIdentical().
+    int len = sizeof(a.un.sun_path);
+    for (int i = 0; i < len; i++) {
+      if (a.un.sun_path[i] != b.un.sun_path[i]) return false;
+      if (a.un.sun_path[i] == '\0') return true;
+    }
+    return true;
   } else {
     UNREACHABLE();
     return false;
@@ -82,6 +106,25 @@
   Dart_TypedDataReleaseData(obj);
 }
 
+Dart_Handle SocketAddress::GetUnixDomainSockAddr(const char* path,
+                                                 Namespace* namespc,
+                                                 RawAddr* addr) {
+#if defined(HOST_OS_LINUX) || defined(HOST_OS_ANDROID)
+  NamespaceScope ns(namespc, path);
+  path = ns.path();
+#endif  // defined(HOST_OS_LINUX) || defined(HOST_OS_ANDROID)
+  if (sizeof(path) > sizeof(addr->un.sun_path)) {
+    OSError os_error(-1,
+                     "The length of path exceeds the limit. "
+                     "Check out man 7 unix page",
+                     OSError::kUnknown);
+    return DartUtils::NewDartOSError(&os_error);
+  }
+  addr->un.sun_family = AF_UNIX;
+  Utils::SNPrint(addr->un.sun_path, sizeof(addr->un.sun_path), "%s", path);
+  return Dart_Null();
+}
+
 int16_t SocketAddress::FromType(int type) {
   if (type == TYPE_ANY) {
     return AF_UNSPEC;
@@ -89,6 +132,9 @@
   if (type == TYPE_IPV4) {
     return AF_INET;
   }
+  if (type == TYPE_UNIX) {
+    return AF_UNIX;
+  }
   ASSERT((type == TYPE_IPV6) && "Invalid type");
   return AF_INET6;
 }
@@ -96,16 +142,23 @@
 void SocketAddress::SetAddrPort(RawAddr* addr, intptr_t port) {
   if (addr->ss.ss_family == AF_INET) {
     addr->in.sin_port = htons(port);
-  } else {
+  } else if (addr->ss.ss_family == AF_INET6) {
     addr->in6.sin6_port = htons(port);
+  } else {
+    UNREACHABLE();
   }
 }
 
 intptr_t SocketAddress::GetAddrPort(const RawAddr& addr) {
   if (addr.ss.ss_family == AF_INET) {
     return ntohs(addr.in.sin_port);
-  } else {
+  } else if (addr.ss.ss_family == AF_INET6) {
     return ntohs(addr.in6.sin6_port);
+  } else if (addr.ss.ss_family == AF_UNIX) {
+    return 0;
+  } else {
+    UNREACHABLE();
+    return -1;
   }
 }
 
@@ -176,16 +229,27 @@
   }
 }
 
+void FUNCTION_NAME(InternetAddress_RawAddrToString)(Dart_NativeArguments args) {
+  RawAddr addr;
+  SocketAddress::GetSockAddr(Dart_GetNativeArgument(args, 0), &addr);
+  // INET6_ADDRSTRLEN is larger than INET_ADDRSTRLEN
+  char str[INET6_ADDRSTRLEN];
+  bool ok = SocketBase::RawAddrToString(&addr, str);
+  if (!ok) {
+    str[0] = '\0';
+  }
+  Dart_SetReturnValue(args, ThrowIfError(DartUtils::NewString(str)));
+}
+
 void FUNCTION_NAME(NetworkInterface_ListSupported)(Dart_NativeArguments args) {
-  Dart_SetReturnValue(args,
-                      Dart_NewBoolean(SocketBase::ListInterfacesSupported()));
+  Dart_SetBooleanReturnValue(args, SocketBase::ListInterfacesSupported());
 }
 
 void FUNCTION_NAME(SocketBase_IsBindError)(Dart_NativeArguments args) {
   intptr_t error_number =
       DartUtils::GetIntptrValue(Dart_GetNativeArgument(args, 1));
   bool is_bind_error = SocketBase::IsBindError(error_number);
-  Dart_SetReturnValue(args, is_bind_error ? Dart_True() : Dart_False());
+  Dart_SetBooleanReturnValue(args, is_bind_error ? true : false);
 }
 
 }  // namespace bin
diff --git a/runtime/bin/socket_base.h b/runtime/bin/socket_base.h
index 404357b..8af4c59 100644
--- a/runtime/bin/socket_base.h
+++ b/runtime/bin/socket_base.h
@@ -23,6 +23,7 @@
 
 #include "bin/builtin.h"
 #include "bin/dartutils.h"
+#include "bin/file.h"
 #include "bin/thread.h"
 #include "bin/utils.h"
 #include "platform/allocation.h"
@@ -34,6 +35,7 @@
 union RawAddr {
   struct sockaddr_in in;
   struct sockaddr_in6 in6;
+  struct sockaddr_un un;
   struct sockaddr_storage ss;
   struct sockaddr addr;
 };
@@ -44,6 +46,7 @@
     TYPE_ANY = -1,
     TYPE_IPV4,
     TYPE_IPV6,
+    TYPE_UNIX,
   };
 
   enum {
@@ -55,7 +58,9 @@
     ADDRESS_LAST = ADDRESS_ANY_IP_V6,
   };
 
-  explicit SocketAddress(struct sockaddr* sa);
+  // Unix domain socket may be unnamed. In this case addr_.un.sun_path contains
+  // garbage and should not be inspected.
+  explicit SocketAddress(struct sockaddr* sa, bool unnamed_unix_socket = false);
 
   ~SocketAddress() {}
 
@@ -68,6 +73,9 @@
   static intptr_t GetInAddrLength(const RawAddr& addr);
   static bool AreAddressesEqual(const RawAddr& a, const RawAddr& b);
   static void GetSockAddr(Dart_Handle obj, RawAddr* addr);
+  static Dart_Handle GetUnixDomainSockAddr(const char* path,
+                                           Namespace* namespc,
+                                           RawAddr* addr);
   static int16_t FromType(int type);
   static void SetAddrPort(RawAddr* addr, intptr_t port);
   static intptr_t GetAddrPort(const RawAddr& addr);
@@ -77,7 +85,17 @@
   static intptr_t GetAddrScope(const RawAddr& addr);
 
  private:
+#if defined(HOST_OS_LINUX) || defined(HOST_OS_MACOS) || defined(HOST_OS_ANDROID)
+  // Unix domain address is only on Linux, Mac OS and Android now.
+  // unix(7) require sun_path to be 108 bytes on Linux and Android, 104 bytes on
+  // Mac OS.
+  static const intptr_t kMaxUnixPathLength =
+      sizeof(((struct sockaddr_un*)0)->sun_path);
+  char as_string_[kMaxUnixPathLength];
+#else
   char as_string_[INET6_ADDRSTRLEN];
+#endif  // defined(HOST_OS_LINUX) || defined(HOST_OS_MACOS) ||                 \
+        // defined(HOST_OS_ANDROID)
   RawAddr addr_;
 
   DISALLOW_COPY_AND_ASSIGN(SocketAddress);
@@ -214,6 +232,9 @@
                             OSError** os_error);
 
   static bool ParseAddress(int type, const char* address, RawAddr* addr);
+
+  // Convert address from byte representation to human readable string.
+  static bool RawAddrToString(RawAddr* addr, char* str);
   static bool FormatNumericAddress(const RawAddr& addr, char* address, int len);
 
   // Whether ListInterfaces is supported.
diff --git a/runtime/bin/socket_base_android.cc b/runtime/bin/socket_base_android.cc
index c72c276..6cea30d 100644
--- a/runtime/bin/socket_base_android.cc
+++ b/runtime/bin/socket_base_android.cc
@@ -26,11 +26,19 @@
 namespace dart {
 namespace bin {
 
-SocketAddress::SocketAddress(struct sockaddr* sa) {
-  ASSERT(INET6_ADDRSTRLEN >= INET_ADDRSTRLEN);
-  if (!SocketBase::FormatNumericAddress(*reinterpret_cast<RawAddr*>(sa),
-                                        as_string_, INET6_ADDRSTRLEN)) {
+SocketAddress::SocketAddress(struct sockaddr* sa, bool unnamed_unix_socket) {
+  if (unnamed_unix_socket) {
+    // This is an unnamed unix domain socket.
     as_string_[0] = 0;
+  } else if (sa->sa_family == AF_UNIX) {
+    struct sockaddr_un* un = ((struct sockaddr_un*)sa);
+    memmove(as_string_, un->sun_path, sizeof(un->sun_path));
+  } else {
+    ASSERT(INET6_ADDRSTRLEN >= INET_ADDRSTRLEN);
+    if (!SocketBase::FormatNumericAddress(*reinterpret_cast<RawAddr*>(sa),
+                                          as_string_, INET6_ADDRSTRLEN)) {
+      as_string_[0] = 0;
+    }
   }
   socklen_t salen = GetAddrLength(*reinterpret_cast<RawAddr*>(sa));
   memmove(reinterpret_cast<void*>(&addr_), sa, salen);
@@ -140,6 +148,13 @@
   if (NO_RETRY_EXPECTED(getpeername(fd, &raw.addr, &size))) {
     return NULL;
   }
+  // sockaddr_un contains sa_family_t sun_familty and char[] sun_path.
+  // If size is the size of sa_familty_t, this is an unnamed socket and
+  // sun_path contains garbage.
+  if (size == sizeof(sa_family_t)) {
+    *port = 0;
+    return new SocketAddress(&raw.addr, true);
+  }
   *port = SocketAddress::GetAddrPort(raw);
   return new SocketAddress(&raw.addr);
 }
@@ -244,6 +259,16 @@
   return (result == 1);
 }
 
+bool SocketBase::RawAddrToString(RawAddr* addr, char* str) {
+  if (addr->addr.sa_family == AF_INET) {
+    return inet_ntop(AF_INET, &addr->in.sin_addr, str, INET_ADDRSTRLEN) != NULL;
+  } else {
+    ASSERT(addr->addr.sa_family == AF_INET6);
+    return inet_ntop(AF_INET6, &addr->in6.sin6_addr, str, INET6_ADDRSTRLEN) !=
+           NULL;
+  }
+}
+
 static bool ShouldIncludeIfaAddrs(struct ifaddrs* ifa, int lookup_family) {
   if (ifa->ifa_addr == NULL) {
     // OpenVPN's virtual device tun0.
diff --git a/runtime/bin/socket_base_android.h b/runtime/bin/socket_base_android.h
index fb685be..9b10162 100644
--- a/runtime/bin/socket_base_android.h
+++ b/runtime/bin/socket_base_android.h
@@ -12,5 +12,6 @@
 #include <arpa/inet.h>
 #include <netdb.h>
 #include <sys/socket.h>
+#include <sys/un.h>
 
 #endif  // RUNTIME_BIN_SOCKET_BASE_ANDROID_H_
diff --git a/runtime/bin/socket_base_fuchsia.cc b/runtime/bin/socket_base_fuchsia.cc
index ba90aa9..d956dd0 100644
--- a/runtime/bin/socket_base_fuchsia.cc
+++ b/runtime/bin/socket_base_fuchsia.cc
@@ -54,7 +54,11 @@
 namespace dart {
 namespace bin {
 
-SocketAddress::SocketAddress(struct sockaddr* sa) {
+SocketAddress::SocketAddress(struct sockaddr* sa, bool unnamed_unix_socket) {
+  // Fuchsia does not support unix domain sockets.
+  if (unnamed_unix_socket) {
+    FATAL("Fuchsia does not support unix domain sockets.");
+  }
   ASSERT(INET6_ADDRSTRLEN >= INET_ADDRSTRLEN);
   if (!SocketBase::FormatNumericAddress(*reinterpret_cast<RawAddr*>(sa),
                                         as_string_, INET6_ADDRSTRLEN)) {
@@ -274,6 +278,16 @@
   return (result == 1);
 }
 
+bool SocketBase::RawAddrToString(RawAddr* addr, char* str) {
+  if (addr->addr.sa_family == AF_INET) {
+    return inet_ntop(AF_INET, &addr->in.sin_addr, str, INET_ADDRSTRLEN) != NULL;
+  } else {
+    ASSERT(addr->addr.sa_family == AF_INET6);
+    return inet_ntop(AF_INET6, &addr->in6.sin6_addr, str, INET6_ADDRSTRLEN) !=
+           NULL;
+  }
+}
+
 bool SocketBase::ListInterfacesSupported() {
   return true;
 }
diff --git a/runtime/bin/socket_base_fuchsia.h b/runtime/bin/socket_base_fuchsia.h
index 3ec3343..43d036b 100644
--- a/runtime/bin/socket_base_fuchsia.h
+++ b/runtime/bin/socket_base_fuchsia.h
@@ -12,5 +12,6 @@
 #include <arpa/inet.h>
 #include <netdb.h>
 #include <sys/socket.h>
+#include <sys/un.h>
 
 #endif  // RUNTIME_BIN_SOCKET_BASE_FUCHSIA_H_
diff --git a/runtime/bin/socket_base_linux.cc b/runtime/bin/socket_base_linux.cc
index 9a52d96..fb1e555 100644
--- a/runtime/bin/socket_base_linux.cc
+++ b/runtime/bin/socket_base_linux.cc
@@ -26,11 +26,19 @@
 namespace dart {
 namespace bin {
 
-SocketAddress::SocketAddress(struct sockaddr* sa) {
-  ASSERT(INET6_ADDRSTRLEN >= INET_ADDRSTRLEN);
-  if (!SocketBase::FormatNumericAddress(*reinterpret_cast<RawAddr*>(sa),
-                                        as_string_, INET6_ADDRSTRLEN)) {
+SocketAddress::SocketAddress(struct sockaddr* sa, bool unnamed_unix_socket) {
+  if (unnamed_unix_socket) {
+    // This is an unnamed unix domain socket.
     as_string_[0] = 0;
+  } else if (sa->sa_family == AF_UNIX) {
+    struct sockaddr_un* un = ((struct sockaddr_un*)sa);
+    memmove(as_string_, un->sun_path, sizeof(un->sun_path));
+  } else {
+    ASSERT(INET6_ADDRSTRLEN >= INET_ADDRSTRLEN);
+    if (!SocketBase::FormatNumericAddress(*reinterpret_cast<RawAddr*>(sa),
+                                          as_string_, INET6_ADDRSTRLEN)) {
+      as_string_[0] = 0;
+    }
   }
   socklen_t salen = GetAddrLength(*reinterpret_cast<RawAddr*>(sa));
   memmove(reinterpret_cast<void*>(&addr_), sa, salen);
@@ -140,6 +148,13 @@
   if (NO_RETRY_EXPECTED(getpeername(fd, &raw.addr, &size))) {
     return NULL;
   }
+  // sockaddr_un contains sa_family_t sun_familty and char[] sun_path.
+  // If size is the size of sa_familty_t, this is an unnamed socket and
+  // sun_path contains garbage.
+  if (size == sizeof(sa_family_t)) {
+    *port = 0;
+    return new SocketAddress(&raw.addr, true);
+  }
   *port = SocketAddress::GetAddrPort(raw);
   return new SocketAddress(&raw.addr);
 }
@@ -246,6 +261,16 @@
   return (result == 1);
 }
 
+bool SocketBase::RawAddrToString(RawAddr* addr, char* str) {
+  if (addr->addr.sa_family == AF_INET) {
+    return inet_ntop(AF_INET, &addr->in.sin_addr, str, INET_ADDRSTRLEN) != NULL;
+  } else {
+    ASSERT(addr->addr.sa_family == AF_INET6);
+    return inet_ntop(AF_INET6, &addr->in6.sin6_addr, str, INET6_ADDRSTRLEN) !=
+           NULL;
+  }
+}
+
 static bool ShouldIncludeIfaAddrs(struct ifaddrs* ifa, int lookup_family) {
   if (ifa->ifa_addr == NULL) {
     // OpenVPN's virtual device tun0.
diff --git a/runtime/bin/socket_base_linux.h b/runtime/bin/socket_base_linux.h
index 0cca9bc..42f5439 100644
--- a/runtime/bin/socket_base_linux.h
+++ b/runtime/bin/socket_base_linux.h
@@ -12,5 +12,6 @@
 #include <arpa/inet.h>
 #include <netdb.h>
 #include <sys/socket.h>
+#include <sys/un.h>
 
 #endif  // RUNTIME_BIN_SOCKET_BASE_LINUX_H_
diff --git a/runtime/bin/socket_base_macos.cc b/runtime/bin/socket_base_macos.cc
index a448911..e8bea83 100644
--- a/runtime/bin/socket_base_macos.cc
+++ b/runtime/bin/socket_base_macos.cc
@@ -25,11 +25,19 @@
 namespace dart {
 namespace bin {
 
-SocketAddress::SocketAddress(struct sockaddr* sa) {
-  ASSERT(INET6_ADDRSTRLEN >= INET_ADDRSTRLEN);
-  if (!SocketBase::FormatNumericAddress(*reinterpret_cast<RawAddr*>(sa),
-                                        as_string_, INET6_ADDRSTRLEN)) {
+SocketAddress::SocketAddress(struct sockaddr* sa, bool unnamed_unix_socket) {
+  if (unnamed_unix_socket) {
+    // This is an unnamed unix domain socket.
     as_string_[0] = 0;
+  } else if (sa->sa_family == AF_UNIX) {
+    struct sockaddr_un* un = ((struct sockaddr_un*)sa);
+    memmove(as_string_, un->sun_path, sizeof(un->sun_path));
+  } else {
+    ASSERT(INET6_ADDRSTRLEN >= INET_ADDRSTRLEN);
+    if (!SocketBase::FormatNumericAddress(*reinterpret_cast<RawAddr*>(sa),
+                                          as_string_, INET6_ADDRSTRLEN)) {
+      as_string_[0] = 0;
+    }
   }
   socklen_t salen = GetAddrLength(*reinterpret_cast<RawAddr*>(sa));
   memmove(reinterpret_cast<void*>(&addr_), sa, salen);
@@ -139,6 +147,13 @@
   if (NO_RETRY_EXPECTED(getpeername(fd, &raw.addr, &size))) {
     return NULL;
   }
+  // sockaddr_un contains sa_family_t sun_familty and char[] sun_path.
+  // If size is the size of sa_familty_t, this is an unnamed socket and
+  // sun_path contains garbage.
+  if (size == sizeof(sa_family_t)) {
+    *port = 0;
+    return new SocketAddress(&raw.addr, true);
+  }
   *port = SocketAddress::GetAddrPort(raw);
   return new SocketAddress(&raw.addr);
 }
@@ -236,6 +251,16 @@
   return (result == 1);
 }
 
+bool SocketBase::RawAddrToString(RawAddr* addr, char* str) {
+  if (addr->addr.sa_family == AF_INET) {
+    return inet_ntop(AF_INET, &addr->in.sin_addr, str, INET_ADDRSTRLEN) != NULL;
+  } else {
+    ASSERT(addr->addr.sa_family == AF_INET6);
+    return inet_ntop(AF_INET6, &addr->in6.sin6_addr, str, INET6_ADDRSTRLEN) !=
+           NULL;
+  }
+}
+
 static bool ShouldIncludeIfaAddrs(struct ifaddrs* ifa, int lookup_family) {
   if (ifa->ifa_addr == NULL) {
     // OpenVPN's virtual device tun0.
diff --git a/runtime/bin/socket_base_macos.h b/runtime/bin/socket_base_macos.h
index c382401..d919063 100644
--- a/runtime/bin/socket_base_macos.h
+++ b/runtime/bin/socket_base_macos.h
@@ -12,5 +12,6 @@
 #include <arpa/inet.h>
 #include <netdb.h>
 #include <sys/socket.h>
+#include <sys/un.h>
 
 #endif  // RUNTIME_BIN_SOCKET_BASE_MACOS_H_
diff --git a/runtime/bin/socket_base_win.cc b/runtime/bin/socket_base_win.cc
index b24dc05..4ce3fc0 100644
--- a/runtime/bin/socket_base_win.cc
+++ b/runtime/bin/socket_base_win.cc
@@ -20,7 +20,10 @@
 namespace dart {
 namespace bin {
 
-SocketAddress::SocketAddress(struct sockaddr* sockaddr) {
+SocketAddress::SocketAddress(struct sockaddr* sockaddr,
+                             bool unnamed_unix_socket) {
+  // Unix domain sockets not supported on Win. Remove this assert if enabled.
+  ASSERT(!unnamed_unix_socket);
   ASSERT(INET6_ADDRSTRLEN >= INET_ADDRSTRLEN);
   RawAddr* raw = reinterpret_cast<RawAddr*>(sockaddr);
 
@@ -246,6 +249,31 @@
   return result == 1;
 }
 
+bool SocketBase::RawAddrToString(RawAddr* addr, char* str) {
+  // According to InetNtopW(), buffer should be large enough for at least 46
+  // characters for IPv6 and 16 for IPv4.
+  COMPILE_ASSERT(INET6_ADDRSTRLEN >= 46);
+  wchar_t tmp_buffer[INET6_ADDRSTRLEN];
+  if (addr->addr.sa_family == AF_INET) {
+    if (InetNtop(AF_INET, &addr->in.sin_addr, tmp_buffer, INET_ADDRSTRLEN) ==
+        NULL) {
+      return false;
+    }
+  } else {
+    ASSERT(addr->addr.sa_family == AF_INET6);
+    if (InetNtop(AF_INET6, &addr->in6.sin6_addr, tmp_buffer,
+                 INET6_ADDRSTRLEN) == NULL) {
+      return false;
+    }
+  }
+  WideToUtf8Scope wide_to_utf8_scope(tmp_buffer);
+  if (wide_to_utf8_scope.length() <= INET6_ADDRSTRLEN) {
+    strncpy(str, wide_to_utf8_scope.utf8(), INET6_ADDRSTRLEN);
+    return true;
+  }
+  return false;
+}
+
 bool SocketBase::ListInterfacesSupported() {
   return true;
 }
diff --git a/runtime/bin/socket_base_win.h b/runtime/bin/socket_base_win.h
index 55ab91d..9bfbe8c 100644
--- a/runtime/bin/socket_base_win.h
+++ b/runtime/bin/socket_base_win.h
@@ -9,6 +9,7 @@
 #error Do not include socket_base_win.h directly. Use socket_base.h.
 #endif
 
+#include <afunix.h>
 #include <iphlpapi.h>
 #include <mswsock.h>
 #include <winsock2.h>
diff --git a/runtime/bin/socket_fuchsia.cc b/runtime/bin/socket_fuchsia.cc
index b4c0b10..fa8a958 100644
--- a/runtime/bin/socket_fuchsia.cc
+++ b/runtime/bin/socket_fuchsia.cc
@@ -109,12 +109,25 @@
   return Connect(fd, addr);
 }
 
+intptr_t Socket::CreateUnixDomainConnect(const RawAddr& addr) {
+  // Fuchsia does not support unix domain socket
+  errno = ENOSYS;
+  return -1;
+}
+
 intptr_t Socket::CreateBindConnect(const RawAddr& addr,
                                    const RawAddr& source_addr) {
   errno = ENOSYS;
   return -1;
 }
 
+intptr_t Socket::CreateUnixDomainBindConnect(const RawAddr& addr,
+                                             const RawAddr& source_addr) {
+  // Fuchsia does not support unix domain socket
+  errno = ENOSYS;
+  return -1;
+}
+
 intptr_t Socket::CreateBindDatagram(const RawAddr& addr,
                                     bool reuseAddress,
                                     bool reusePort,
@@ -192,6 +205,13 @@
   return reinterpret_cast<intptr_t>(io_handle);
 }
 
+intptr_t ServerSocket::CreateUnixDomainBindListen(const RawAddr& addr,
+                                                  intptr_t backlog) {
+  // Fuchsia does not support unix domain socket.
+  errno = ENOSYS;
+  return -1;
+}
+
 bool ServerSocket::StartAccept(intptr_t fd) {
   USE(fd);
   return true;
diff --git a/runtime/bin/socket_linux.cc b/runtime/bin/socket_linux.cc
index c993fcb..e6b7e5c 100644
--- a/runtime/bin/socket_linux.cc
+++ b/runtime/bin/socket_linux.cc
@@ -48,7 +48,7 @@
   if ((result == 0) || (errno == EINPROGRESS)) {
     return fd;
   }
-  FDUtils::FDUtils::SaveErrorAndClose(fd);
+  FDUtils::SaveErrorAndClose(fd);
   return -1;
 }
 
@@ -60,6 +60,20 @@
   return Connect(fd, addr);
 }
 
+intptr_t Socket::CreateUnixDomainConnect(const RawAddr& addr) {
+  intptr_t fd = Create(addr);
+  if (fd < 0) {
+    return fd;
+  }
+  intptr_t result = TEMP_FAILURE_RETRY(connect(
+      fd, (struct sockaddr*)&addr.un, SocketAddress::GetAddrLength(addr)));
+  if (result == 0 || errno == EAGAIN) {
+    return fd;
+  }
+  FDUtils::SaveErrorAndClose(fd);
+  return -1;
+}
+
 intptr_t Socket::CreateBindConnect(const RawAddr& addr,
                                    const RawAddr& source_addr) {
   intptr_t fd = Create(addr);
@@ -69,7 +83,7 @@
 
   intptr_t result = TEMP_FAILURE_RETRY(
       bind(fd, &source_addr.addr, SocketAddress::GetAddrLength(source_addr)));
-  if ((result != 0) && (errno != EINPROGRESS)) {
+  if (result != 0) {
     FDUtils::SaveErrorAndClose(fd);
     return -1;
   }
@@ -77,6 +91,29 @@
   return Connect(fd, addr);
 }
 
+intptr_t Socket::CreateUnixDomainBindConnect(const RawAddr& addr,
+                                             const RawAddr& source_addr) {
+  intptr_t fd = Create(addr);
+  if (fd < 0) {
+    return fd;
+  }
+
+  intptr_t result = TEMP_FAILURE_RETRY(
+      bind(fd, &source_addr.addr, SocketAddress::GetAddrLength(source_addr)));
+  if (result != 0) {
+    FDUtils::SaveErrorAndClose(fd);
+    return -1;
+  }
+
+  result = TEMP_FAILURE_RETRY(connect(fd, (struct sockaddr*)&addr.un,
+                                      SocketAddress::GetAddrLength(addr)));
+  if (result == 0 || errno == EAGAIN) {
+    return fd;
+  }
+  FDUtils::SaveErrorAndClose(fd);
+  return -1;
+}
+
 intptr_t Socket::CreateBindDatagram(const RawAddr& addr,
                                     bool reuseAddress,
                                     bool reusePort,
@@ -182,6 +219,21 @@
   return fd;
 }
 
+intptr_t ServerSocket::CreateUnixDomainBindListen(const RawAddr& addr,
+                                                  intptr_t backlog) {
+  intptr_t fd = Create(addr);
+  if (NO_RETRY_EXPECTED(bind(fd, (struct sockaddr*)&addr.un,
+                             sizeof(struct sockaddr_un))) < 0) {
+    FDUtils::SaveErrorAndClose(fd);
+    return -1;
+  }
+  if (NO_RETRY_EXPECTED(listen(fd, backlog > 0 ? backlog : SOMAXCONN)) != 0) {
+    FDUtils::SaveErrorAndClose(fd);
+    return -1;
+  }
+  return fd;
+}
+
 bool ServerSocket::StartAccept(intptr_t fd) {
   USE(fd);
   return true;
diff --git a/runtime/bin/socket_macos.cc b/runtime/bin/socket_macos.cc
index f87482e..8c6be8b 100644
--- a/runtime/bin/socket_macos.cc
+++ b/runtime/bin/socket_macos.cc
@@ -66,6 +66,14 @@
   return Connect(fd, addr);
 }
 
+intptr_t Socket::CreateUnixDomainConnect(const RawAddr& addr) {
+  intptr_t fd = Create(addr);
+  if (fd < 0) {
+    return fd;
+  }
+  return Connect(fd, addr);
+}
+
 intptr_t Socket::CreateBindConnect(const RawAddr& addr,
                                    const RawAddr& source_addr) {
   intptr_t fd = Create(addr);
@@ -75,7 +83,24 @@
 
   intptr_t result = TEMP_FAILURE_RETRY(
       bind(fd, &source_addr.addr, SocketAddress::GetAddrLength(source_addr)));
-  if ((result != 0) && (errno != EINPROGRESS)) {
+  if (result != 0) {
+    FDUtils::SaveErrorAndClose(fd);
+    return -1;
+  }
+
+  return Connect(fd, addr);
+}
+
+intptr_t Socket::CreateUnixDomainBindConnect(const RawAddr& addr,
+                                             const RawAddr& source_addr) {
+  intptr_t fd = Create(addr);
+  if (fd < 0) {
+    return fd;
+  }
+
+  intptr_t result = TEMP_FAILURE_RETRY(
+      bind(fd, &source_addr.addr, SocketAddress::GetAddrLength(source_addr)));
+  if (result != 0) {
     FDUtils::SaveErrorAndClose(fd);
     return -1;
   }
@@ -199,6 +224,37 @@
   return fd;
 }
 
+intptr_t ServerSocket::CreateUnixDomainBindListen(const RawAddr& addr,
+                                                  intptr_t backlog) {
+  intptr_t fd;
+  fd = NO_RETRY_EXPECTED(socket(addr.ss.ss_family, SOCK_STREAM, 0));
+  if (fd < 0) {
+    return -1;
+  }
+
+  if (!FDUtils::SetCloseOnExec(fd)) {
+    FDUtils::SaveErrorAndClose(fd);
+    return -1;
+  }
+
+  if (NO_RETRY_EXPECTED(
+          bind(fd, &addr.addr, SocketAddress::GetAddrLength(addr))) < 0) {
+    FDUtils::SaveErrorAndClose(fd);
+    return -1;
+  }
+
+  if (NO_RETRY_EXPECTED(listen(fd, backlog > 0 ? backlog : SOMAXCONN)) != 0) {
+    FDUtils::SaveErrorAndClose(fd);
+    return -1;
+  }
+
+  if (!FDUtils::SetNonBlocking(fd)) {
+    FDUtils::SaveErrorAndClose(fd);
+    return -1;
+  }
+  return fd;
+}
+
 bool ServerSocket::StartAccept(intptr_t fd) {
   USE(fd);
   return true;
diff --git a/runtime/bin/socket_win.cc b/runtime/bin/socket_win.cc
index 5d476e9..4e393dc 100644
--- a/runtime/bin/socket_win.cc
+++ b/runtime/bin/socket_win.cc
@@ -131,6 +131,13 @@
   return Connect(fd, addr, bind_addr);
 }
 
+intptr_t Socket::CreateUnixDomainConnect(const RawAddr& addr) {
+  // TODO(21403): Support unix domain socket on Windows
+  // https://devblogs.microsoft.com/commandline/af_unix-comes-to-windows/
+  SetLastError(ERROR_NOT_SUPPORTED);
+  return -1;
+}
+
 intptr_t Socket::CreateBindConnect(const RawAddr& addr,
                                    const RawAddr& source_addr) {
   intptr_t fd = Create(addr);
@@ -141,6 +148,12 @@
   return Connect(fd, addr, source_addr);
 }
 
+intptr_t Socket::CreateUnixDomainBindConnect(const RawAddr& addr,
+                                             const RawAddr& source_addr) {
+  SetLastError(ERROR_NOT_SUPPORTED);
+  return -1;
+}
+
 intptr_t ServerSocket::Accept(intptr_t fd) {
   ListenSocket* listen_socket = reinterpret_cast<ListenSocket*>(fd);
   ClientSocket* client_socket = listen_socket->Accept();
@@ -271,6 +284,14 @@
   return reinterpret_cast<intptr_t>(listen_socket);
 }
 
+intptr_t ServerSocket::CreateUnixDomainBindListen(const RawAddr& addr,
+                                                  intptr_t backlog) {
+  // TODO(21403): Support unix domain socket on Windows
+  // https://devblogs.microsoft.com/commandline/af_unix-comes-to-windows/
+  SetLastError(ERROR_NOT_SUPPORTED);
+  return -1;
+}
+
 bool ServerSocket::StartAccept(intptr_t fd) {
   ListenSocket* listen_socket = reinterpret_cast<ListenSocket*>(fd);
   listen_socket->EnsureInitialized(EventHandler::delegate());
diff --git a/runtime/bin/sync_socket_android.cc b/runtime/bin/sync_socket_android.cc
index b051e3a..80094f7 100644
--- a/runtime/bin/sync_socket_android.cc
+++ b/runtime/bin/sync_socket_android.cc
@@ -38,7 +38,7 @@
     return fd;
   }
   ASSERT(errno != EINPROGRESS);
-  FDUtils::FDUtils::SaveErrorAndClose(fd);
+  FDUtils::SaveErrorAndClose(fd);
   return -1;
 }
 
diff --git a/runtime/bin/sync_socket_fuchsia.cc b/runtime/bin/sync_socket_fuchsia.cc
index 3a6fe0d..23461f4f 100644
--- a/runtime/bin/sync_socket_fuchsia.cc
+++ b/runtime/bin/sync_socket_fuchsia.cc
@@ -38,7 +38,7 @@
     return fd;
   }
   ASSERT(errno != EINPROGRESS);
-  FDUtils::FDUtils::SaveErrorAndClose(fd);
+  FDUtils::SaveErrorAndClose(fd);
   return -1;
 }
 
diff --git a/runtime/bin/sync_socket_linux.cc b/runtime/bin/sync_socket_linux.cc
index 1fb564b..963787b 100644
--- a/runtime/bin/sync_socket_linux.cc
+++ b/runtime/bin/sync_socket_linux.cc
@@ -38,7 +38,7 @@
     return fd;
   }
   ASSERT(errno != EINPROGRESS);
-  FDUtils::FDUtils::SaveErrorAndClose(fd);
+  FDUtils::SaveErrorAndClose(fd);
   return -1;
 }
 
diff --git a/runtime/bin/sync_socket_macos.cc b/runtime/bin/sync_socket_macos.cc
index 5ee9b68c..e266341 100644
--- a/runtime/bin/sync_socket_macos.cc
+++ b/runtime/bin/sync_socket_macos.cc
@@ -41,7 +41,7 @@
     return fd;
   }
   ASSERT(errno != EINPROGRESS);
-  FDUtils::FDUtils::SaveErrorAndClose(fd);
+  FDUtils::SaveErrorAndClose(fd);
   return -1;
 }
 
diff --git a/runtime/include/dart_api.h b/runtime/include/dart_api.h
index 0da49b0..b01cedc 100644
--- a/runtime/include/dart_api.h
+++ b/runtime/include/dart_api.h
@@ -530,6 +530,7 @@
   bool load_vmservice_library;
   bool unsafe_trust_strong_mode_types;
   bool copy_parent_code;
+  bool null_safety;
 } Dart_IsolateFlags;
 
 /**
diff --git a/runtime/observatory/.packages b/runtime/observatory/.packages
index 0b5a10a..8521bd7 100644
--- a/runtime/observatory/.packages
+++ b/runtime/observatory/.packages
@@ -8,7 +8,6 @@
 path:../../third_party/observatory_pub_packages/packages/path/lib
 quiver:../../third_party/observatory_pub_packages/packages/quiver/lib
 stack_trace:../../third_party/observatory_pub_packages/packages/stack_trace/lib
-unittest:../../third_party/observatory_pub_packages/packages/unittest/lib
 usage:../../third_party/observatory_pub_packages/packages/usage/lib
 observatory:lib
 
@@ -17,6 +16,7 @@
 boolean_selector:../../third_party/pkg/boolean_selector/lib
 charcode:../../third_party/pkg/charcode/lib
 dart_internal:../../pkg/dart_internal/lib
+expect:../../pkg/expect/lib
 http:../../third_party/pkg/http/lib
 http_parser:../../third_party/pkg/http_parser/lib
 matcher:../../third_party/pkg/matcher/lib
diff --git a/runtime/observatory/lib/object_graph.dart b/runtime/observatory/lib/object_graph.dart
index 6f7cfe5..ce48c8b 100644
--- a/runtime/observatory/lib/object_graph.dart
+++ b/runtime/observatory/lib/object_graph.dart
@@ -260,7 +260,7 @@
 
   _SnapshotObject._new(this._id, this._graph, this.label);
 
-  bool operator ==(other) {
+  bool operator ==(Object other) {
     if (other is _SnapshotObject) {
       return _id == other._id && _graph == other._graph;
     }
@@ -378,7 +378,13 @@
 
   _SnapshotMergedDominator._new(this._id, this._graph, this._parent);
 
-  bool operator ==(other) => _id == other._id && _graph == other._graph;
+  bool operator ==(Object other) {
+    if (other is _SnapshotMergedDominator) {
+      return _id == other._id && _graph == other._graph;
+    }
+    return false;
+  }
+
   int get hashCode => _id ^ _graph.hashCode;
 
   String get description => "$instanceCount instances of ${klass.name}";
@@ -742,7 +748,7 @@
     _totalExternalSize = stream.readUnsigned();
 
     var K = stream.readUnsigned();
-    var classes = new List<_SnapshotClass>(K + 1);
+    var classes = new List<_SnapshotClass>.filled(K + 1, null);
     classes[0] = _SnapshotClass._new(this, 0, "Root", "", "");
 
     for (var cid = 1; cid <= K; cid++) {
diff --git a/runtime/observatory/lib/src/app/analytics.dart b/runtime/observatory/lib/src/app/analytics.dart
index 484f7da..a34c2da 100644
--- a/runtime/observatory/lib/src/app/analytics.dart
+++ b/runtime/observatory/lib/src/app/analytics.dart
@@ -4,10 +4,17 @@
 
 part of app;
 
+// TODO(eernst): Use 'bool.fromEnvironment' below when possible;
+// for now we use a dual `defaultValue` rewrite.
+const _obsVer = (String.fromEnvironment('OBS_VER', defaultValue: '1') ==
+        String.fromEnvironment('OBS_VER', defaultValue: '2'))
+    ? String.fromEnvironment('OBS_VER')
+    : null;
+
 class Analytics {
   static final _UA = 'UA-26406144-17';
   static final _name = 'Observatory';
-  static final _version = const String.fromEnvironment('OBS_VER');
+  static final _version = _obsVer;
   static final _googleAnalytics = new AnalyticsHtml(_UA, _name, _version);
 
   static initialize() {
diff --git a/runtime/observatory/lib/src/app/application.dart b/runtime/observatory/lib/src/app/application.dart
index 42ffe2e..e3c4d7b 100644
--- a/runtime/observatory/lib/src/app/application.dart
+++ b/runtime/observatory/lib/src/app/application.dart
@@ -12,7 +12,7 @@
   final TargetRepository targets = new TargetRepository(isConnectedVMTarget);
   final EventRepository events = new EventRepository();
   final NotificationRepository notifications = new NotificationRepository();
-  final _pageRegistry = new List<Page>();
+  final _pageRegistry = <Page>[];
   LocationManager _locationManager;
   LocationManager get locationManager => _locationManager;
   Page currentPage;
diff --git a/runtime/observatory/lib/src/app/view_model.dart b/runtime/observatory/lib/src/app/view_model.dart
index d312cb3..f210e13 100644
--- a/runtime/observatory/lib/src/app/view_model.dart
+++ b/runtime/observatory/lib/src/app/view_model.dart
@@ -24,7 +24,7 @@
 
 class SortedTable {
   final List<SortedTableColumn> columns;
-  final List<SortedTableRow> rows = new List<SortedTableRow>();
+  final List<SortedTableRow> rows = <SortedTableRow>[];
   final List<int> sortedRows = [];
 
   SortedTable(this.columns);
diff --git a/runtime/observatory/lib/src/cli/command.dart b/runtime/observatory/lib/src/cli/command.dart
index b2a1ab7..0a0fc42 100644
--- a/runtime/observatory/lib/src/cli/command.dart
+++ b/runtime/observatory/lib/src/cli/command.dart
@@ -61,7 +61,7 @@
 
   // Returns a list of local subcommands which match the args.
   List<Command> _matchLocal(String argWithSpace, bool preferExact) {
-    var matches = new List<Command>();
+    var matches = <Command>[];
     var arg = argWithSpace.trimRight();
     for (var child in _children) {
       if (child.name.startsWith(arg)) {
diff --git a/runtime/observatory/lib/src/elements/context_ref.dart b/runtime/observatory/lib/src/elements/context_ref.dart
index 1f92a48..f88bf00 100644
--- a/runtime/observatory/lib/src/elements/context_ref.dart
+++ b/runtime/observatory/lib/src/elements/context_ref.dart
@@ -101,7 +101,7 @@
     if (_loadedContext == null) {
       return [new SpanElement()..text = 'Loading...'];
     }
-    var members = new List<Element>();
+    var members = <Element>[];
     if (_loadedContext.parentContext != null) {
       members.add(new DivElement()
         ..classes = ['memberItem']
diff --git a/runtime/observatory/lib/src/elements/heap_snapshot.dart b/runtime/observatory/lib/src/elements/heap_snapshot.dart
index c5cd6cf..f6505be 100644
--- a/runtime/observatory/lib/src/elements/heap_snapshot.dart
+++ b/runtime/observatory/lib/src/elements/heap_snapshot.dart
@@ -434,7 +434,7 @@
     rootDiff.name = root;
     rootDiff.sizeA = graphA.processPartitions[root] ?? 0;
     rootDiff.sizeB = graphB.processPartitions[root] ?? 0;
-    rootDiff.children = new List<PartitionDiff>();
+    rootDiff.children = <PartitionDiff>[];
     partitions.remove(root);
 
     var childrenA = 0;
@@ -518,7 +518,7 @@
       SnapshotGraph graphA, SnapshotGraph graphB) {
     // Matching classes by SnapshotClass.qualifiedName.
     var classesB = new Map<String, SnapshotClass>();
-    var classesDiff = new List<SnapshotClassDiff>();
+    var classesDiff = <SnapshotClassDiff>[];
     for (var classB in graphB.classes) {
       classesB[classB.qualifiedName] = classB;
     }
@@ -581,7 +581,7 @@
     // dominator tree can be arbitrarily deep. We need to compute the full
     // tree to compute areas, so we do this eagerly to avoid having to
     // repeatedly test for initialization.
-    var worklist = new List<MergedDominatorDiff>();
+    var worklist = <MergedDominatorDiff>[];
     worklist.add(root);
     // Compute children top-down.
     for (var i = 0; i < worklist.length; i++) {
@@ -597,7 +597,7 @@
 
   void _computeChildren(List<MergedDominatorDiff> worklist) {
     assert(children == null);
-    children = new List<MergedDominatorDiff>();
+    children = <MergedDominatorDiff>[];
 
     // Matching children by MergedObjectVertex.klass.qualifiedName.
     final childrenB = <String, SnapshotMergedDominator>{};
@@ -681,7 +681,7 @@
   M.ObjectRepository _objects;
   SnapshotReader _reader;
   String _status;
-  List<SnapshotGraph> _loadedSnapshots = new List<SnapshotGraph>();
+  List<SnapshotGraph> _loadedSnapshots = <SnapshotGraph>[];
   SnapshotGraph _snapshotA;
   SnapshotGraph _snapshotB;
   HeapSnapshotTreeMode _mode = HeapSnapshotTreeMode.mergedDominatorTreeMap;
diff --git a/runtime/observatory/lib/src/elements/helpers/tag.dart b/runtime/observatory/lib/src/elements/helpers/tag.dart
index 1ad74c7..65c269a 100644
--- a/runtime/observatory/lib/src/elements/helpers/tag.dart
+++ b/runtime/observatory/lib/src/elements/helpers/tag.dart
@@ -11,7 +11,7 @@
   static Expando reverseElements = new Expando();
   static CustomElement reverse(HtmlElement element) => reverseElements[element];
 
-  static List<CustomElement> toBeAttached = new List<CustomElement>();
+  static List<CustomElement> toBeAttached = <CustomElement>[];
   static void drainAttached() {
     // Send 'attached' to elements that have been attached to the document.
     bool fired = false;
diff --git a/runtime/observatory/lib/src/elements/retaining_path.dart b/runtime/observatory/lib/src/elements/retaining_path.dart
index 7dca764..c27b912 100644
--- a/runtime/observatory/lib/src/elements/retaining_path.dart
+++ b/runtime/observatory/lib/src/elements/retaining_path.dart
@@ -87,7 +87,7 @@
       return [new SpanElement()..text = 'Loading'];
     }
 
-    var elements = new List<Element>();
+    var elements = <Element>[];
     bool first = true;
     for (var item in _path.elements) {
       elements.add(_createItem(item, first));
diff --git a/runtime/observatory/lib/src/repositories/flag.dart b/runtime/observatory/lib/src/repositories/flag.dart
index a3db15d..13ab784 100644
--- a/runtime/observatory/lib/src/repositories/flag.dart
+++ b/runtime/observatory/lib/src/repositories/flag.dart
@@ -22,7 +22,7 @@
   FlagsRepository(this.vm);
 
   Future<Iterable<Flag>> list() async {
-    var result = new List<Flag>();
+    var result = <Flag>[];
     for (var map in ((await vm.getFlagList()) as S.ServiceMap)['flags']) {
       result.add(_toFlag(map));
     }
diff --git a/runtime/observatory/lib/src/repositories/notification.dart b/runtime/observatory/lib/src/repositories/notification.dart
index 78a81c4..19eb99e 100644
--- a/runtime/observatory/lib/src/repositories/notification.dart
+++ b/runtime/observatory/lib/src/repositories/notification.dart
@@ -10,7 +10,7 @@
 }
 
 class NotificationRepository implements M.NotificationRepository {
-  final List<M.Notification> _list = new List<M.Notification>();
+  final List<M.Notification> _list = <M.Notification>[];
 
   final StreamController<M.NotificationChangeEvent> _onChange =
       new StreamController<M.NotificationChangeEvent>.broadcast();
diff --git a/runtime/observatory/lib/src/service/object.dart b/runtime/observatory/lib/src/service/object.dart
index dcbe861..1e4bf9f 100644
--- a/runtime/observatory/lib/src/service/object.dart
+++ b/runtime/observatory/lib/src/service/object.dart
@@ -1061,7 +1061,7 @@
   int get sum => _sum;
   int _sum = 0;
   TagProfileSnapshot(this.seconds, int countersLength)
-      : counters = new List<int>(countersLength);
+      : counters = new List<int>.filled(countersLength, 0);
 
   /// Set [counters] and update [sum].
   void set(List<int> counters) {
@@ -1097,8 +1097,8 @@
 }
 
 class TagProfile {
-  final List<String> names = new List<String>();
-  final List<TagProfileSnapshot> snapshots = new List<TagProfileSnapshot>();
+  final List<String> names = <String>[];
+  final List<TagProfileSnapshot> snapshots = <TagProfileSnapshot>[];
   double get updatedAtSeconds => _seconds;
   double _seconds;
   TagProfileSnapshot _maxSnapshot;
@@ -1404,7 +1404,7 @@
     return M.IsolateStatus.loading;
   }
 
-  final List<String> extensionRPCs = new List<String>();
+  final List<String> extensionRPCs = <String>[];
 
   Map<String, ServiceObject> _cache = new Map<String, ServiceObject>();
   final TagProfile tagProfile = new TagProfile(20);
@@ -1601,7 +1601,7 @@
   SnapshotReader _snapshotFetch;
 
   List<Thread> get threads => _threads;
-  final List<Thread> _threads = new List<Thread>();
+  final List<Thread> _threads = <Thread>[];
 
   int get zoneHighWatermark => _zoneHighWatermark;
   int _zoneHighWatermark = 0;
@@ -2054,7 +2054,7 @@
 }
 
 class ObjectStore extends ServiceObject implements M.ObjectStore {
-  List<NamedField> fields = new List<NamedField>();
+  List<NamedField> fields = <NamedField>[];
 
   ObjectStore._empty(ServiceObjectOwner owner) : super._empty(owner);
 
@@ -2911,7 +2911,7 @@
     twoByteBytecode = map['_twoByteBytecode'];
 
     if (map['fields'] != null) {
-      var fields = new List<BoundField>();
+      var fields = <BoundField>[];
       for (var f in map['fields']) {
         fields.add(new BoundField(f['decl'], f['value']));
       }
@@ -2930,7 +2930,7 @@
       // Should be:
       // elements = map['elements'].map((e) => new Guarded<Instance>(e)).toList();
       // some times we obtain object that are not InstanceRef
-      var localElements = new List<Guarded<HeapObject>>();
+      var localElements = <Guarded<HeapObject>>[];
       for (var element in map['elements']) {
         localElements.add(new Guarded<HeapObject>(element));
       }
@@ -3051,7 +3051,7 @@
     if (map['variables'] == null) {
       variables = <ContextElement>[];
     } else {
-      var localVariables = new List<ContextElement>();
+      var localVariables = <ContextElement>[];
       for (var element in map['variables']) {
         localVariables.add(new ContextElement(element));
       }
@@ -3465,15 +3465,18 @@
   factory CallSite.fromMap(Map siteMap, Script script) {
     var name = siteMap['name'];
     var tokenPos = siteMap['tokenPos'];
-    var entries = new List<CallSiteEntry>();
+    var entries = <CallSiteEntry>[];
     for (var entryMap in siteMap['cacheEntries']) {
       entries.add(new CallSiteEntry.fromMap(entryMap));
     }
     return new CallSite(name, script, tokenPos, entries);
   }
 
-  operator ==(other) {
-    return (script == other.script) && (tokenPos == other.tokenPos);
+  bool operator ==(Object other) {
+    if (other is CallSite) {
+      return (script == other.script) && (tokenPos == other.tokenPos);
+    }
+    return false;
   }
 
   int get hashCode => (script.hashCode << 8) | tokenPos;
@@ -4239,7 +4242,7 @@
 class CodeInlineInterval {
   final int start;
   final int end;
-  final List<ServiceFunction> functions = new List<ServiceFunction>();
+  final List<ServiceFunction> functions = <ServiceFunction>[];
   bool contains(int pc) => (pc >= start) && (pc < end);
   CodeInlineInterval(this.start, this.end);
 }
diff --git a/runtime/observatory/lib/utils.dart b/runtime/observatory/lib/utils.dart
index 286b512..821e88f 100644
--- a/runtime/observatory/lib/utils.dart
+++ b/runtime/observatory/lib/utils.dart
@@ -251,7 +251,7 @@
   static bool runningInJavaScript() => identical(1.0, 1);
 
   static formatStringAsLiteral(String value, [bool wasTruncated = false]) {
-    var result = new List<int>();
+    var result = <int>[];
     result.add("'".codeUnitAt(0));
     for (int codeUnit in value.codeUnits) {
       if (codeUnit == '\n'.codeUnitAt(0))
diff --git a/runtime/observatory/tests/service/add_breakpoint_rpc_kernel_test.dart b/runtime/observatory/tests/service/add_breakpoint_rpc_kernel_test.dart
index 6d5f293..34feaf0 100644
--- a/runtime/observatory/tests/service/add_breakpoint_rpc_kernel_test.dart
+++ b/runtime/observatory/tests/service/add_breakpoint_rpc_kernel_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/allocations_test.dart b/runtime/observatory/tests/service/allocations_test.dart
index b3a5c04..b2d9085 100644
--- a/runtime/observatory/tests/service/allocations_test.dart
+++ b/runtime/observatory/tests/service/allocations_test.dart
@@ -5,7 +5,7 @@
 library allocations_test;
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 class Foo {}
diff --git a/runtime/observatory/tests/service/async_generator_breakpoint_test.dart b/runtime/observatory/tests/service/async_generator_breakpoint_test.dart
index af14028..44f5c2a 100644
--- a/runtime/observatory/tests/service/async_generator_breakpoint_test.dart
+++ b/runtime/observatory/tests/service/async_generator_breakpoint_test.dart
@@ -6,7 +6,7 @@
 
 import 'dart:async';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 printSync() {
diff --git a/runtime/observatory/tests/service/async_scope_test.dart b/runtime/observatory/tests/service/async_scope_test.dart
index 106e053..3e01b1d 100644
--- a/runtime/observatory/tests/service/async_scope_test.dart
+++ b/runtime/observatory/tests/service/async_scope_test.dart
@@ -5,7 +5,7 @@
 import 'dart:async';
 import 'dart:developer';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/auth_token_test.dart b/runtime/observatory/tests/service/auth_token_test.dart
index 8c6ae7f..f2ba275 100644
--- a/runtime/observatory/tests/service/auth_token_test.dart
+++ b/runtime/observatory/tests/service/auth_token_test.dart
@@ -5,8 +5,9 @@
 import 'dart:async';
 import 'dart:developer';
 import 'dart:io' as io;
+import 'package:expect/expect.dart';
 import 'package:observatory/service_io.dart' as S;
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 Future<Null> testeeBefore() async {
@@ -14,11 +15,11 @@
   print(await Service.getInfo());
   // Start the web server.
   ServiceProtocolInfo info = await Service.controlWebServer(enable: true);
-  expect(info.serverUri, isNotNull);
+  Expect.isNotNull(info.serverUri);
   // Ensure that we have the auth token in the path segments.
-  expect(info.serverUri.pathSegments.length, greaterThan(1));
+  Expect.isTrue(info.serverUri.pathSegments.length > 1);
   // Sanity check the length of the auth token.
-  expect(info.serverUri.pathSegments[0].length, greaterThan(8));
+  Expect.isTrue(info.serverUri.pathSegments[0].length > 8);
 
   // Try connecting to the server without the auth token, it should throw
   // an exception.
@@ -27,17 +28,16 @@
   var httpClient = new io.HttpClient();
   try {
     var request = await httpClient.getUrl(url);
-    expect(true, false);
+    fail('expected exception');
   } catch (e) {
-    expect(true, true);
+    // Expected
   }
 
   // Try connecting to the server with the auth token, it should succeed.
   try {
     var request = await httpClient.getUrl(info.serverUri);
-    expect(true, true);
   } catch (e) {
-    expect(true, false);
+    fail('could not connect');
   }
 }
 
@@ -46,7 +46,6 @@
     await isolate.reload();
     // Just getting here means that the testee enabled the service protocol
     // web server.
-    expect(true, true);
   }
 ];
 
diff --git a/runtime/observatory/tests/service/awaiter_async_stack_contents_2_test.dart b/runtime/observatory/tests/service/awaiter_async_stack_contents_2_test.dart
index b2ba9cd..e9b971c 100644
--- a/runtime/observatory/tests/service/awaiter_async_stack_contents_2_test.dart
+++ b/runtime/observatory/tests/service/awaiter_async_stack_contents_2_test.dart
@@ -7,7 +7,7 @@
 import 'dart:developer';
 import 'package:observatory/models.dart' as M;
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/awaiter_async_stack_contents_test.dart b/runtime/observatory/tests/service/awaiter_async_stack_contents_test.dart
index 2887925..0aef00e 100644
--- a/runtime/observatory/tests/service/awaiter_async_stack_contents_test.dart
+++ b/runtime/observatory/tests/service/awaiter_async_stack_contents_test.dart
@@ -7,7 +7,7 @@
 import 'dart:developer';
 import 'package:observatory/models.dart' as M;
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/bad_reload_test.dart b/runtime/observatory/tests/service/bad_reload_test.dart
index ff6396c..9c4219c 100644
--- a/runtime/observatory/tests/service/bad_reload_test.dart
+++ b/runtime/observatory/tests/service/bad_reload_test.dart
@@ -10,7 +10,7 @@
 import 'service_test_common.dart';
 import 'package:observatory/service.dart';
 import 'package:path/path.dart' as path;
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 // Chop off the file name.
 String baseDirectory = path.dirname(Platform.script.path) + '/';
diff --git a/runtime/observatory/tests/service/bad_web_socket_address_test.dart b/runtime/observatory/tests/service/bad_web_socket_address_test.dart
index 62bbfb3..08df24d 100644
--- a/runtime/observatory/tests/service/bad_web_socket_address_test.dart
+++ b/runtime/observatory/tests/service/bad_web_socket_address_test.dart
@@ -4,7 +4,7 @@
 
 import 'package:logging/logging.dart';
 import "package:observatory/service_io.dart";
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 void testBadWebSocket() {
   var vm = new WebSocketVM(new WebSocketVMTarget('ws://karatekid/ws'));
diff --git a/runtime/observatory/tests/service/break_on_activation_test.dart b/runtime/observatory/tests/service/break_on_activation_test.dart
index 64ae8bf..fac2684 100644
--- a/runtime/observatory/tests/service/break_on_activation_test.dart
+++ b/runtime/observatory/tests/service/break_on_activation_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 genRepeater(value) {
diff --git a/runtime/observatory/tests/service/break_on_async_function_test.dart b/runtime/observatory/tests/service/break_on_async_function_test.dart
index b5bf200..dd52294 100644
--- a/runtime/observatory/tests/service/break_on_async_function_test.dart
+++ b/runtime/observatory/tests/service/break_on_async_function_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 import 'dart:developer';
diff --git a/runtime/observatory/tests/service/break_on_default_constructor_test.dart b/runtime/observatory/tests/service/break_on_default_constructor_test.dart
index 8f5d9e5..bc504c74 100644
--- a/runtime/observatory/tests/service/break_on_default_constructor_test.dart
+++ b/runtime/observatory/tests/service/break_on_default_constructor_test.dart
@@ -7,7 +7,7 @@
 import 'package:observatory/debugger.dart';
 import 'package:observatory/service.dart' as S;
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'service_test_common.dart';
 import 'test_helper.dart';
diff --git a/runtime/observatory/tests/service/break_on_function_test.dart b/runtime/observatory/tests/service/break_on_function_test.dart
index 83cfbc9..89f60fb 100644
--- a/runtime/observatory/tests/service/break_on_function_test.dart
+++ b/runtime/observatory/tests/service/break_on_function_test.dart
@@ -4,7 +4,7 @@
 // VMOptions=--verbose_debug
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 import 'dart:developer';
diff --git a/runtime/observatory/tests/service/breakpoint_async_break_test.dart b/runtime/observatory/tests/service/breakpoint_async_break_test.dart
index c33d670..b59613e 100644
--- a/runtime/observatory/tests/service/breakpoint_async_break_test.dart
+++ b/runtime/observatory/tests/service/breakpoint_async_break_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 import 'dart:async';
diff --git a/runtime/observatory/tests/service/breakpoint_non_debuggable_library_test.dart b/runtime/observatory/tests/service/breakpoint_non_debuggable_library_test.dart
index 7656a7b..0bc3c1f 100644
--- a/runtime/observatory/tests/service/breakpoint_non_debuggable_library_test.dart
+++ b/runtime/observatory/tests/service/breakpoint_non_debuggable_library_test.dart
@@ -5,7 +5,7 @@
 import 'dart:developer';
 import 'package:observatory/service_io.dart';
 import 'package:path/path.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
@@ -69,7 +69,6 @@
   },
   resumeIsolate,
   hasStoppedAtExit,
-  resumeIsolate
 ];
 
 main(args) => runIsolateTests(args, tests,
diff --git a/runtime/observatory/tests/service/breakpoint_two_args_checked_test.dart b/runtime/observatory/tests/service/breakpoint_two_args_checked_test.dart
index 8c21890..4723545 100644
--- a/runtime/observatory/tests/service/breakpoint_two_args_checked_test.dart
+++ b/runtime/observatory/tests/service/breakpoint_two_args_checked_test.dart
@@ -7,7 +7,7 @@
 // to create a breakpoint for fast Smi ops.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 import 'dart:developer';
diff --git a/runtime/observatory/tests/service/caching_test.dart b/runtime/observatory/tests/service/caching_test.dart
index b54f241..0c89eca 100644
--- a/runtime/observatory/tests/service/caching_test.dart
+++ b/runtime/observatory/tests/service/caching_test.dart
@@ -9,7 +9,7 @@
 library caching_test;
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 var tests = <IsolateTest>[
diff --git a/runtime/observatory/tests/service/capture_stdio_test.dart b/runtime/observatory/tests/service/capture_stdio_test.dart
index 64386323..b02e476 100644
--- a/runtime/observatory/tests/service/capture_stdio_test.dart
+++ b/runtime/observatory/tests/service/capture_stdio_test.dart
@@ -6,7 +6,7 @@
 import 'dart:developer';
 import 'dart:io';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/causal_async_stack_contents_test.dart b/runtime/observatory/tests/service/causal_async_stack_contents_test.dart
index 10a3669..ed77ae6 100644
--- a/runtime/observatory/tests/service/causal_async_stack_contents_test.dart
+++ b/runtime/observatory/tests/service/causal_async_stack_contents_test.dart
@@ -7,7 +7,7 @@
 import 'dart:developer';
 import 'package:observatory/models.dart' as M;
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/causal_async_stack_presence_test.dart b/runtime/observatory/tests/service/causal_async_stack_presence_test.dart
index 02d92ff..0e57f47 100644
--- a/runtime/observatory/tests/service/causal_async_stack_presence_test.dart
+++ b/runtime/observatory/tests/service/causal_async_stack_presence_test.dart
@@ -6,7 +6,7 @@
 
 import 'dart:developer';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/causal_async_star_stack_contents_test.dart b/runtime/observatory/tests/service/causal_async_star_stack_contents_test.dart
index feb529e..8efcecc 100644
--- a/runtime/observatory/tests/service/causal_async_star_stack_contents_test.dart
+++ b/runtime/observatory/tests/service/causal_async_star_stack_contents_test.dart
@@ -7,7 +7,7 @@
 import 'dart:developer';
 import 'package:observatory/models.dart' as M;
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/causal_async_star_stack_presence_test.dart b/runtime/observatory/tests/service/causal_async_star_stack_presence_test.dart
index 9456579..df29834 100644
--- a/runtime/observatory/tests/service/causal_async_star_stack_presence_test.dart
+++ b/runtime/observatory/tests/service/causal_async_star_stack_presence_test.dart
@@ -6,7 +6,7 @@
 
 import 'dart:developer';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/client_name_rpc_test.dart b/runtime/observatory/tests/service/client_name_rpc_test.dart
index b143bd5..41cbe4f 100644
--- a/runtime/observatory/tests/service/client_name_rpc_test.dart
+++ b/runtime/observatory/tests/service/client_name_rpc_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/client_resume_approvals_approve_then_disconnect_test.dart b/runtime/observatory/tests/service/client_resume_approvals_approve_then_disconnect_test.dart
index 3a57471..427706f 100644
--- a/runtime/observatory/tests/service/client_resume_approvals_approve_then_disconnect_test.dart
+++ b/runtime/observatory/tests/service/client_resume_approvals_approve_then_disconnect_test.dart
@@ -5,7 +5,7 @@
 import 'dart:async';
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'client_resume_approvals_common.dart';
 import 'service_test_common.dart';
diff --git a/runtime/observatory/tests/service/client_resume_approvals_common.dart b/runtime/observatory/tests/service/client_resume_approvals_common.dart
index 3323484..a2221e5 100644
--- a/runtime/observatory/tests/service/client_resume_approvals_common.dart
+++ b/runtime/observatory/tests/service/client_resume_approvals_common.dart
@@ -5,7 +5,6 @@
 import 'dart:async';
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
 import 'service_test_common.dart';
 
 const String clientName = 'TestClient';
diff --git a/runtime/observatory/tests/service/client_resume_approvals_disconnect_test.dart b/runtime/observatory/tests/service/client_resume_approvals_disconnect_test.dart
index 0dc0402..9d23522 100644
--- a/runtime/observatory/tests/service/client_resume_approvals_disconnect_test.dart
+++ b/runtime/observatory/tests/service/client_resume_approvals_disconnect_test.dart
@@ -5,7 +5,7 @@
 import 'dart:async';
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'client_resume_approvals_common.dart';
 import 'service_test_common.dart';
diff --git a/runtime/observatory/tests/service/client_resume_approvals_identical_names_test.dart b/runtime/observatory/tests/service/client_resume_approvals_identical_names_test.dart
index ffbbc06..d3a09a9 100644
--- a/runtime/observatory/tests/service/client_resume_approvals_identical_names_test.dart
+++ b/runtime/observatory/tests/service/client_resume_approvals_identical_names_test.dart
@@ -5,7 +5,7 @@
 import 'dart:async';
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'client_resume_approvals_common.dart';
 import 'service_test_common.dart';
diff --git a/runtime/observatory/tests/service/client_resume_approvals_multiple_names_test.dart b/runtime/observatory/tests/service/client_resume_approvals_multiple_names_test.dart
index 65989ee..5f26a9c 100644
--- a/runtime/observatory/tests/service/client_resume_approvals_multiple_names_test.dart
+++ b/runtime/observatory/tests/service/client_resume_approvals_multiple_names_test.dart
@@ -5,7 +5,7 @@
 import 'dart:async';
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'client_resume_approvals_common.dart';
 import 'service_test_common.dart';
@@ -36,7 +36,7 @@
     );
     client3 = await createClient(isolate.owner, clientName: 'DummyClient');
 
-    Future resumeFuture = waitForResume(isolate);
+    final resumeFuture = waitForResume(isolate);
     expect(await isPausedAtStart(isolate), true);
     await resume(client2, isolate);
     expect(await isPausedAtStart(isolate), true);
@@ -51,13 +51,10 @@
       isolate,
       pauseOnExit: true,
     );
-    final resumeFuture = waitForResume(isolate);
     await resume(client1, isolate);
     expect(await isPausedAtExit(isolate), true);
     await resume(client2, isolate);
-    await resumeFuture;
-    await isolate.reload();
-    expect(await isPausedAtExit(isolate), false);
+    await waitForTargetVMExit(isolate.vm);
   },
 ];
 
diff --git a/runtime/observatory/tests/service/client_resume_approvals_name_change_test.dart b/runtime/observatory/tests/service/client_resume_approvals_name_change_test.dart
index 9f0f52d..3d33112 100644
--- a/runtime/observatory/tests/service/client_resume_approvals_name_change_test.dart
+++ b/runtime/observatory/tests/service/client_resume_approvals_name_change_test.dart
@@ -5,7 +5,7 @@
 import 'dart:async';
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'client_resume_approvals_common.dart';
 import 'service_test_common.dart';
diff --git a/runtime/observatory/tests/service/client_resume_approvals_reload_test.dart b/runtime/observatory/tests/service/client_resume_approvals_reload_test.dart
index db0b852..250d349 100644
--- a/runtime/observatory/tests/service/client_resume_approvals_reload_test.dart
+++ b/runtime/observatory/tests/service/client_resume_approvals_reload_test.dart
@@ -5,7 +5,7 @@
 import 'dart:async';
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'client_resume_approvals_common.dart';
 import 'service_test_common.dart';
diff --git a/runtime/observatory/tests/service/code_test.dart b/runtime/observatory/tests/service/code_test.dart
index c904e8b..c08ef61 100644
--- a/runtime/observatory/tests/service/code_test.dart
+++ b/runtime/observatory/tests/service/code_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 import 'dart:async';
 
diff --git a/runtime/observatory/tests/service/collect_all_garbage_test.dart b/runtime/observatory/tests/service/collect_all_garbage_test.dart
index 8db2921..a9c0377 100644
--- a/runtime/observatory/tests/service/collect_all_garbage_test.dart
+++ b/runtime/observatory/tests/service/collect_all_garbage_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/command_test.dart b/runtime/observatory/tests/service/command_test.dart
index 86e40d5..57ca485 100644
--- a/runtime/observatory/tests/service/command_test.dart
+++ b/runtime/observatory/tests/service/command_test.dart
@@ -5,7 +5,7 @@
 import 'dart:async';
 
 import 'package:observatory/cli.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 class TestCommand extends Command {
   TestCommand(this.out, name, children) : super(name, children);
diff --git a/runtime/observatory/tests/service/complex_reload_test.dart b/runtime/observatory/tests/service/complex_reload_test.dart
index 2e6e35e..f0c8b93 100644
--- a/runtime/observatory/tests/service/complex_reload_test.dart
+++ b/runtime/observatory/tests/service/complex_reload_test.dart
@@ -10,7 +10,7 @@
 import 'service_test_common.dart';
 import 'package:observatory/service.dart';
 import 'package:path/path.dart' as path;
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 // Chop off the file name.
 String baseDirectory = path.dirname(Platform.script.path) + '/';
diff --git a/runtime/observatory/tests/service/contexts_test.dart b/runtime/observatory/tests/service/contexts_test.dart
index ecc9b44..ad17f38 100644
--- a/runtime/observatory/tests/service/contexts_test.dart
+++ b/runtime/observatory/tests/service/contexts_test.dart
@@ -5,7 +5,7 @@
 library inbound_references_test;
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 var cleanBlock, copyingBlock, fullBlock, fullBlockWithChain;
diff --git a/runtime/observatory/tests/service/coverage_const_field_async_closure_test.dart b/runtime/observatory/tests/service/coverage_const_field_async_closure_test.dart
index a89b0e9..a85a9c3 100644
--- a/runtime/observatory/tests/service/coverage_const_field_async_closure_test.dart
+++ b/runtime/observatory/tests/service/coverage_const_field_async_closure_test.dart
@@ -4,7 +4,7 @@
 
 import 'dart:developer';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/coverage_leaf_function_test.dart b/runtime/observatory/tests/service/coverage_leaf_function_test.dart
index a90ec86..c36441b 100644
--- a/runtime/observatory/tests/service/coverage_leaf_function_test.dart
+++ b/runtime/observatory/tests/service/coverage_leaf_function_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 import 'service_test_common.dart';
 import 'dart:developer';
@@ -44,12 +44,12 @@
 
     var expectedRange = {
       'scriptIndex': 0,
-      'startPos': 392,
-      'endPos': 442,
+      'startPos': 384,
+      'endPos': 434,
       'compiled': true,
       'coverage': {
         'hits': [],
-        'misses': [392]
+        'misses': [384]
       }
     };
 
@@ -85,11 +85,11 @@
 
     var expectedRange = {
       'scriptIndex': 0,
-      'startPos': 392,
-      'endPos': 442,
+      'startPos': 384,
+      'endPos': 434,
       'compiled': true,
       'coverage': {
-        'hits': [392],
+        'hits': [384],
         'misses': []
       }
     };
diff --git a/runtime/observatory/tests/service/coverage_optimized_function_test.dart b/runtime/observatory/tests/service/coverage_optimized_function_test.dart
index 8d68907..ad57d161 100644
--- a/runtime/observatory/tests/service/coverage_optimized_function_test.dart
+++ b/runtime/observatory/tests/service/coverage_optimized_function_test.dart
@@ -4,7 +4,7 @@
 // VMOptions=--no_background_compilation --optimization_counter_threshold=10
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 import 'service_test_common.dart';
 import 'dart:developer';
@@ -37,11 +37,11 @@
 
     var expectedRange = {
       'scriptIndex': 0,
-      'startPos': 469,
-      'endPos': 536,
+      'startPos': 461,
+      'endPos': 528,
       'compiled': true,
       'coverage': {
-        'hits': [469, 509, 520, 524],
+        'hits': [461, 501, 512, 516],
         'misses': []
       }
     };
diff --git a/runtime/observatory/tests/service/debugger_inspect_test.dart b/runtime/observatory/tests/service/debugger_inspect_test.dart
index 767fb64..1501b32 100644
--- a/runtime/observatory/tests/service/debugger_inspect_test.dart
+++ b/runtime/observatory/tests/service/debugger_inspect_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 import 'dart:async';
 import 'dart:developer';
diff --git a/runtime/observatory/tests/service/debugger_location_second_test.dart b/runtime/observatory/tests/service/debugger_location_second_test.dart
index 03c40b3..e8d6739 100644
--- a/runtime/observatory/tests/service/debugger_location_second_test.dart
+++ b/runtime/observatory/tests/service/debugger_location_second_test.dart
@@ -4,7 +4,7 @@
 
 import 'package:observatory/service_io.dart';
 import 'package:observatory/debugger.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 import 'dart:async';
diff --git a/runtime/observatory/tests/service/debugger_location_test.dart b/runtime/observatory/tests/service/debugger_location_test.dart
index 0ffd76c..77b939c 100644
--- a/runtime/observatory/tests/service/debugger_location_test.dart
+++ b/runtime/observatory/tests/service/debugger_location_test.dart
@@ -4,7 +4,7 @@
 
 import 'package:observatory/service_io.dart';
 import 'package:observatory/debugger.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 import 'dart:async';
@@ -82,17 +82,19 @@
 // Parse script + line
   (Isolate isolate) async {
     var debugger = await initDebugger(isolate);
-    var loc = await DebuggerLocation.parse(debugger, 'unittest.dart:15');
+    var loc = await DebuggerLocation.parse(
+        debugger, 'debugger_location_test.dart:16');
     expect(loc.valid, isTrue);
-    expect(loc.toString(), equals('unittest.dart:15'));
+    expect(loc.toString(), equals('debugger_location_test.dart:16'));
   },
 
 // Parse script + line + col
   (Isolate isolate) async {
     var debugger = await initDebugger(isolate);
-    var loc = await DebuggerLocation.parse(debugger, 'unittest.dart:15:10');
+    var loc = await DebuggerLocation.parse(
+        debugger, 'debugger_location_test.dart:16:11');
     expect(loc.valid, isTrue);
-    expect(loc.toString(), equals('unittest.dart:15:10'));
+    expect(loc.toString(), equals('debugger_location_test.dart:16:11'));
   },
 
 // Parse bad script
diff --git a/runtime/observatory/tests/service/debugging_inlined_finally_test.dart b/runtime/observatory/tests/service/debugging_inlined_finally_test.dart
index 424952c..9012cf3 100644
--- a/runtime/observatory/tests/service/debugging_inlined_finally_test.dart
+++ b/runtime/observatory/tests/service/debugging_inlined_finally_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 import 'dart:developer';
diff --git a/runtime/observatory/tests/service/debugging_test.dart b/runtime/observatory/tests/service/debugging_test.dart
index 9435ad2..55a6e05 100644
--- a/runtime/observatory/tests/service/debugging_test.dart
+++ b/runtime/observatory/tests/service/debugging_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 import 'dart:async';
 
diff --git a/runtime/observatory/tests/service/dev_fs_http_put_test.dart b/runtime/observatory/tests/service/dev_fs_http_put_test.dart
index faa2fa6..107778d 100644
--- a/runtime/observatory/tests/service/dev_fs_http_put_test.dart
+++ b/runtime/observatory/tests/service/dev_fs_http_put_test.dart
@@ -6,7 +6,7 @@
 import 'dart:convert';
 import 'dart:io';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 Future<String> readResponse(HttpClientResponse response) {
diff --git a/runtime/observatory/tests/service/dev_fs_http_put_weird_char_test.dart b/runtime/observatory/tests/service/dev_fs_http_put_weird_char_test.dart
index 8126f45..7801775 100644
--- a/runtime/observatory/tests/service/dev_fs_http_put_weird_char_test.dart
+++ b/runtime/observatory/tests/service/dev_fs_http_put_weird_char_test.dart
@@ -6,7 +6,7 @@
 import 'dart:convert';
 import 'dart:io';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 Future<String> readResponse(HttpClientResponse response) {
diff --git a/runtime/observatory/tests/service/dev_fs_spawn_test.dart b/runtime/observatory/tests/service/dev_fs_spawn_test.dart
index 1221a58..4e76990 100644
--- a/runtime/observatory/tests/service/dev_fs_spawn_test.dart
+++ b/runtime/observatory/tests/service/dev_fs_spawn_test.dart
@@ -6,7 +6,7 @@
 import 'dart:convert';
 import 'package:observatory/models.dart' as M;
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/dev_fs_test.dart b/runtime/observatory/tests/service/dev_fs_test.dart
index eca5e3ca..920a152 100644
--- a/runtime/observatory/tests/service/dev_fs_test.dart
+++ b/runtime/observatory/tests/service/dev_fs_test.dart
@@ -4,7 +4,7 @@
 
 import 'dart:convert';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 var tests = <VMTest>[
diff --git a/runtime/observatory/tests/service/dev_fs_uri_test.dart b/runtime/observatory/tests/service/dev_fs_uri_test.dart
index 2fda4d7..42e5150 100644
--- a/runtime/observatory/tests/service/dev_fs_uri_test.dart
+++ b/runtime/observatory/tests/service/dev_fs_uri_test.dart
@@ -6,7 +6,7 @@
 import 'dart:convert';
 import 'dart:io';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 Future<String> readResponse(HttpClientResponse response) {
diff --git a/runtime/observatory/tests/service/dev_fs_weird_char_test.dart b/runtime/observatory/tests/service/dev_fs_weird_char_test.dart
index bab7d69..f2fddce 100644
--- a/runtime/observatory/tests/service/dev_fs_weird_char_test.dart
+++ b/runtime/observatory/tests/service/dev_fs_weird_char_test.dart
@@ -4,7 +4,7 @@
 
 import 'dart:convert';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 var tests = <VMTest>[
diff --git a/runtime/observatory/tests/service/developer_extension_test.dart b/runtime/observatory/tests/service/developer_extension_test.dart
index ad1a386..d210539 100644
--- a/runtime/observatory/tests/service/developer_extension_test.dart
+++ b/runtime/observatory/tests/service/developer_extension_test.dart
@@ -5,9 +5,10 @@
 import 'dart:async';
 import 'dart:convert';
 import 'dart:developer';
+import 'package:expect/expect.dart';
 import 'package:observatory/service_io.dart';
 import 'package:observatory/sample_profile.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
@@ -60,7 +61,8 @@
   } catch (e) {
     exceptionThrown = true;
   }
-  expect(exceptionThrown, isTrue);
+  // This check is running in the target process so we can't used package:test.
+  Expect.isTrue(exceptionThrown);
 }
 
 var tests = <IsolateTest>[
diff --git a/runtime/observatory/tests/service/developer_server_control_test.dart b/runtime/observatory/tests/service/developer_server_control_test.dart
index a4b99f3..24347ea 100644
--- a/runtime/observatory/tests/service/developer_server_control_test.dart
+++ b/runtime/observatory/tests/service/developer_server_control_test.dart
@@ -4,8 +4,8 @@
 
 import 'dart:async';
 import 'dart:developer';
+import 'package:expect/expect.dart';
 import 'package:observatory/service_io.dart' as S;
-import 'package:unittest/unittest.dart';
 import 'test_helper.dart';
 
 int majorVersion;
@@ -21,39 +21,39 @@
   majorVersion = info.majorVersion;
   minorVersion = info.minorVersion;
   serverUri = info.serverUri;
-  expect(info.serverUri, isNull);
+  Expect.isNull(info.serverUri);
   {
     // Now, start the web server and store the URI which is expected to be
     // non NULL in the top level variable.
     ServiceProtocolInfo info = await Service.controlWebServer(enable: true);
-    expect(info.majorVersion, equals(majorVersion));
-    expect(info.minorVersion, equals(minorVersion));
-    expect(info.serverUri, isNotNull);
+    Expect.equals(info.majorVersion, majorVersion);
+    Expect.equals(info.minorVersion, minorVersion);
+    Expect.isNotNull(info.serverUri);
     serverUri = info.serverUri;
   }
   {
     // Now try starting the web server again, this should just return the
     // existing state without any change (port number does not change).
     ServiceProtocolInfo info = await Service.controlWebServer(enable: true);
-    expect(info.majorVersion, equals(majorVersion));
-    expect(info.minorVersion, equals(minorVersion));
-    expect(info.serverUri, equals(serverUri));
+    Expect.equals(info.majorVersion, majorVersion);
+    Expect.equals(info.minorVersion, minorVersion);
+    Expect.equals(info.serverUri, serverUri);
   }
   {
     // Try turning off the web server, this should turn off the server and
     // the Uri returned should be null.
     ServiceProtocolInfo info = await Service.controlWebServer(enable: false);
-    expect(info.majorVersion, equals(majorVersion));
-    expect(info.minorVersion, equals(minorVersion));
-    expect(info.serverUri, isNull);
+    Expect.equals(info.majorVersion, majorVersion);
+    Expect.equals(info.minorVersion, minorVersion);
+    Expect.isNull(info.serverUri);
   }
   {
     // Try turning off the web server again, this should be a nop
     // and the Uri returned should be null.
     ServiceProtocolInfo info = await Service.controlWebServer(enable: false);
-    expect(info.majorVersion, equals(majorVersion));
-    expect(info.minorVersion, equals(minorVersion));
-    expect(info.serverUri, isNull);
+    Expect.equals(info.majorVersion, majorVersion);
+    Expect.equals(info.minorVersion, minorVersion);
+    Expect.isNull(info.serverUri);
   }
   {
     // Start the web server again for the test below.
@@ -61,9 +61,9 @@
     majorVersion = info.majorVersion;
     minorVersion = info.minorVersion;
     serverUri = info.serverUri;
-    expect(info.majorVersion, equals(majorVersion));
-    expect(info.minorVersion, equals(minorVersion));
-    expect(info.serverUri, equals(serverUri));
+    Expect.equals(info.majorVersion, majorVersion);
+    Expect.equals(info.minorVersion, minorVersion);
+    Expect.equals(info.serverUri, serverUri);
   }
 }
 
@@ -72,7 +72,7 @@
     await isolate.reload();
     // Just getting here means that the testee enabled the service protocol
     // web server.
-    expect(true, true);
+    Expect.equals(true, true);
   }
 ];
 
diff --git a/runtime/observatory/tests/service/developer_service_get_isolate_id_test.dart b/runtime/observatory/tests/service/developer_service_get_isolate_id_test.dart
index 4400e47..1539e07 100644
--- a/runtime/observatory/tests/service/developer_service_get_isolate_id_test.dart
+++ b/runtime/observatory/tests/service/developer_service_get_isolate_id_test.dart
@@ -7,7 +7,7 @@
 import 'dart:isolate' as Core;
 
 import 'package:observatory/service_io.dart' as Service;
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/dominator_tree_vm_test.dart b/runtime/observatory/tests/service/dominator_tree_vm_test.dart
index be63548..ebb9c77 100644
--- a/runtime/observatory/tests/service/dominator_tree_vm_test.dart
+++ b/runtime/observatory/tests/service/dominator_tree_vm_test.dart
@@ -7,7 +7,7 @@
 
 import 'package:observatory/models.dart' as M;
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 // small example from [Lenguaer & Tarjan 1979]
diff --git a/runtime/observatory/tests/service/dominator_tree_vm_with_double_field_test.dart b/runtime/observatory/tests/service/dominator_tree_vm_with_double_field_test.dart
index 9edaf23..858f10a 100644
--- a/runtime/observatory/tests/service/dominator_tree_vm_with_double_field_test.dart
+++ b/runtime/observatory/tests/service/dominator_tree_vm_with_double_field_test.dart
@@ -7,8 +7,9 @@
 
 import 'dart:typed_data';
 
+import 'package:expect/expect.dart';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 double getDoubleWithHeapObjectTag() {
@@ -119,7 +120,7 @@
   k.y = r;
   l.x = h;
 
-  expect(r.fld, getDoubleWithHeapObjectTag());
+  Expect.equals(r.fld, getDoubleWithHeapObjectTag());
 }
 
 var tests = <IsolateTest>[
diff --git a/runtime/observatory/tests/service/echo_test.dart b/runtime/observatory/tests/service/echo_test.dart
index eda2f81..49ebe73 100644
--- a/runtime/observatory/tests/service/echo_test.dart
+++ b/runtime/observatory/tests/service/echo_test.dart
@@ -4,7 +4,7 @@
 
 import 'dart:async';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 var tests = <IsolateTest>[
diff --git a/runtime/observatory/tests/service/enable_service_port_fallback_positive_test.dart b/runtime/observatory/tests/service/enable_service_port_fallback_positive_test.dart
index c2159eb..ca25d5f 100644
--- a/runtime/observatory/tests/service/enable_service_port_fallback_positive_test.dart
+++ b/runtime/observatory/tests/service/enable_service_port_fallback_positive_test.dart
@@ -5,7 +5,7 @@
 import 'dart:io';
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 // Tests that the --enable-service-port-fallback flag works correctly by trying to bind to
diff --git a/runtime/observatory/tests/service/enable_service_port_fallback_test.dart b/runtime/observatory/tests/service/enable_service_port_fallback_test.dart
index e5fdef0..ea63b8b 100644
--- a/runtime/observatory/tests/service/enable_service_port_fallback_test.dart
+++ b/runtime/observatory/tests/service/enable_service_port_fallback_test.dart
@@ -5,7 +5,7 @@
 import 'dart:io';
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 // Tests that the --enable-service-port-fallback flag works correctly by trying to bind to
diff --git a/runtime/observatory/tests/service/eval_internal_class_test.dart b/runtime/observatory/tests/service/eval_internal_class_test.dart
index 0abee5e..98b5840 100644
--- a/runtime/observatory/tests/service/eval_internal_class_test.dart
+++ b/runtime/observatory/tests/service/eval_internal_class_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 var tests = <IsolateTest>[
diff --git a/runtime/observatory/tests/service/eval_regression_flutter20255_test.dart b/runtime/observatory/tests/service/eval_regression_flutter20255_test.dart
index 6e06387..28f07d7 100644
--- a/runtime/observatory/tests/service/eval_regression_flutter20255_test.dart
+++ b/runtime/observatory/tests/service/eval_regression_flutter20255_test.dart
@@ -6,7 +6,7 @@
 import 'dart:developer';
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'service_test_common.dart';
 import 'test_helper.dart';
diff --git a/runtime/observatory/tests/service/eval_test.dart b/runtime/observatory/tests/service/eval_test.dart
index a83ef37..0eafc1e 100644
--- a/runtime/observatory/tests/service/eval_test.dart
+++ b/runtime/observatory/tests/service/eval_test.dart
@@ -4,7 +4,7 @@
 
 import 'dart:developer';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/evaluate_activation_in_method_class_test.dart b/runtime/observatory/tests/service/evaluate_activation_in_method_class_test.dart
index 9fc206a..e1a78c4 100644
--- a/runtime/observatory/tests/service/evaluate_activation_in_method_class_test.dart
+++ b/runtime/observatory/tests/service/evaluate_activation_in_method_class_test.dart
@@ -7,7 +7,7 @@
 
 import 'dart:async';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 import 'service_test_common.dart';
 
diff --git a/runtime/observatory/tests/service/evaluate_activation_test.dart b/runtime/observatory/tests/service/evaluate_activation_test.dart
index 01f1e63..059d769 100644
--- a/runtime/observatory/tests/service/evaluate_activation_test.dart
+++ b/runtime/observatory/tests/service/evaluate_activation_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 import 'dart:async';
diff --git a/runtime/observatory/tests/service/evaluate_async_closure_test.dart b/runtime/observatory/tests/service/evaluate_async_closure_test.dart
index bcffa6b..4b64e63 100644
--- a/runtime/observatory/tests/service/evaluate_async_closure_test.dart
+++ b/runtime/observatory/tests/service/evaluate_async_closure_test.dart
@@ -5,7 +5,7 @@
 import 'dart:async';
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/evaluate_class_type_parameters_test.dart b/runtime/observatory/tests/service/evaluate_class_type_parameters_test.dart
index 0909420..48b6530 100644
--- a/runtime/observatory/tests/service/evaluate_class_type_parameters_test.dart
+++ b/runtime/observatory/tests/service/evaluate_class_type_parameters_test.dart
@@ -4,7 +4,7 @@
 
 import 'dart:developer';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/evaluate_function_type_parameters_test.dart b/runtime/observatory/tests/service/evaluate_function_type_parameters_test.dart
index 9e63186..1f8fcd0 100644
--- a/runtime/observatory/tests/service/evaluate_function_type_parameters_test.dart
+++ b/runtime/observatory/tests/service/evaluate_function_type_parameters_test.dart
@@ -4,7 +4,7 @@
 
 import 'dart:developer';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/evaluate_in_async_activation_test.dart b/runtime/observatory/tests/service/evaluate_in_async_activation_test.dart
index 0e021dc..6607b89 100644
--- a/runtime/observatory/tests/service/evaluate_in_async_activation_test.dart
+++ b/runtime/observatory/tests/service/evaluate_in_async_activation_test.dart
@@ -5,7 +5,7 @@
 import 'dart:async';
 import 'dart:developer';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/evaluate_in_async_star_activation_test.dart b/runtime/observatory/tests/service/evaluate_in_async_star_activation_test.dart
index 34c4358..4d6771a 100644
--- a/runtime/observatory/tests/service/evaluate_in_async_star_activation_test.dart
+++ b/runtime/observatory/tests/service/evaluate_in_async_star_activation_test.dart
@@ -4,7 +4,7 @@
 
 import 'dart:developer';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/evaluate_in_frame_rpc_test.dart b/runtime/observatory/tests/service/evaluate_in_frame_rpc_test.dart
index 5ec7dfd..2e47197 100644
--- a/runtime/observatory/tests/service/evaluate_in_frame_rpc_test.dart
+++ b/runtime/observatory/tests/service/evaluate_in_frame_rpc_test.dart
@@ -4,7 +4,7 @@
 
 import 'dart:developer';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/evaluate_in_frame_with_scope_test.dart b/runtime/observatory/tests/service/evaluate_in_frame_with_scope_test.dart
index e9724f5..fecc245 100644
--- a/runtime/observatory/tests/service/evaluate_in_frame_with_scope_test.dart
+++ b/runtime/observatory/tests/service/evaluate_in_frame_with_scope_test.dart
@@ -5,7 +5,7 @@
 import 'dart:developer';
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'service_test_common.dart';
 import 'test_helper.dart';
diff --git a/runtime/observatory/tests/service/evaluate_in_sync_star_activation_test.dart b/runtime/observatory/tests/service/evaluate_in_sync_star_activation_test.dart
index c29a44c..bbaf78f 100644
--- a/runtime/observatory/tests/service/evaluate_in_sync_star_activation_test.dart
+++ b/runtime/observatory/tests/service/evaluate_in_sync_star_activation_test.dart
@@ -4,7 +4,7 @@
 
 import 'dart:developer';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/evaluate_with_escaping_closure_test.dart b/runtime/observatory/tests/service/evaluate_with_escaping_closure_test.dart
index bb87130..7849fc7 100644
--- a/runtime/observatory/tests/service/evaluate_with_escaping_closure_test.dart
+++ b/runtime/observatory/tests/service/evaluate_with_escaping_closure_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 dynamic escapedClosure;
diff --git a/runtime/observatory/tests/service/evaluate_with_scope_test.dart b/runtime/observatory/tests/service/evaluate_with_scope_test.dart
index 5b6ee5c..90ea063 100644
--- a/runtime/observatory/tests/service/evaluate_with_scope_test.dart
+++ b/runtime/observatory/tests/service/evaluate_with_scope_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 var thing1;
diff --git a/runtime/observatory/tests/service/external_service_asynchronous_invocation_test.dart b/runtime/observatory/tests/service/external_service_asynchronous_invocation_test.dart
index 4feafac..2778167 100644
--- a/runtime/observatory/tests/service/external_service_asynchronous_invocation_test.dart
+++ b/runtime/observatory/tests/service/external_service_asynchronous_invocation_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 import 'dart:io' show WebSocket;
 import 'dart:convert' show jsonDecode, jsonEncode;
diff --git a/runtime/observatory/tests/service/external_service_disappear_test.dart b/runtime/observatory/tests/service/external_service_disappear_test.dart
index 6a7a0d6..eafe5a6 100644
--- a/runtime/observatory/tests/service/external_service_disappear_test.dart
+++ b/runtime/observatory/tests/service/external_service_disappear_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 import 'dart:io' show WebSocket;
 import 'dart:convert' show jsonDecode, jsonEncode;
diff --git a/runtime/observatory/tests/service/external_service_notification_invocation_test.dart b/runtime/observatory/tests/service/external_service_notification_invocation_test.dart
index 37547cb..3b1e695 100644
--- a/runtime/observatory/tests/service/external_service_notification_invocation_test.dart
+++ b/runtime/observatory/tests/service/external_service_notification_invocation_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 import 'dart:io' show WebSocket;
 import 'dart:convert' show jsonDecode, jsonEncode;
@@ -57,7 +57,7 @@
 
     client_invoker.first.then((_) {
       expect(false, isTrue, reason: 'shouldn\'t get here');
-    }).catchError((e) => e);
+    }).catchError((_) => null);
 
     // Testing serial invocation of service which succedes
     for (var iteration = 0; iteration < repetition; iteration++) {
diff --git a/runtime/observatory/tests/service/external_service_registration_test.dart b/runtime/observatory/tests/service/external_service_registration_test.dart
index bee0eec..2ec0d95 100644
--- a/runtime/observatory/tests/service/external_service_registration_test.dart
+++ b/runtime/observatory/tests/service/external_service_registration_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 import 'dart:io' show WebSocket;
 import 'dart:convert' show jsonDecode, jsonEncode;
diff --git a/runtime/observatory/tests/service/external_service_registration_via_notification_test.dart b/runtime/observatory/tests/service/external_service_registration_via_notification_test.dart
index 857b292..333c24e 100644
--- a/runtime/observatory/tests/service/external_service_registration_via_notification_test.dart
+++ b/runtime/observatory/tests/service/external_service_registration_via_notification_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 import 'dart:io' show WebSocket;
 import 'dart:convert' show jsonDecode, jsonEncode;
diff --git a/runtime/observatory/tests/service/external_service_synchronous_invocation_test.dart b/runtime/observatory/tests/service/external_service_synchronous_invocation_test.dart
index 69ab333..97917b3 100644
--- a/runtime/observatory/tests/service/external_service_synchronous_invocation_test.dart
+++ b/runtime/observatory/tests/service/external_service_synchronous_invocation_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 import 'dart:io' show WebSocket;
 import 'dart:convert' show jsonDecode, jsonEncode;
diff --git a/runtime/observatory/tests/service/field_script_test.dart b/runtime/observatory/tests/service/field_script_test.dart
index 1267101..17be1b1 100644
--- a/runtime/observatory/tests/service/field_script_test.dart
+++ b/runtime/observatory/tests/service/field_script_test.dart
@@ -5,7 +5,7 @@
 library field_script_test;
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 import 'service_test_common.dart';
 
diff --git a/runtime/observatory/tests/service/file_service_test.dart b/runtime/observatory/tests/service/file_service_test.dart
index 8eb2dcf..08c6d71 100644
--- a/runtime/observatory/tests/service/file_service_test.dart
+++ b/runtime/observatory/tests/service/file_service_test.dart
@@ -6,8 +6,9 @@
 import 'dart:convert';
 import 'dart:developer';
 import 'dart:io' as io;
+import 'package:expect/expect.dart';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 Future setupFiles() async {
@@ -55,7 +56,7 @@
       await utilFile.writeAsString('foobar');
       var readTemp = new io.File(writeTemp);
       var result = await readTemp.readAsString();
-      expect(result, equals('foobar'));
+      Expect.equals(result, 'foobar');
     } catch (e) {
       closeDown();
       throw e;
diff --git a/runtime/observatory/tests/service/gc_test.dart b/runtime/observatory/tests/service/gc_test.dart
index c0cab5f..20efc34 100644
--- a/runtime/observatory/tests/service/gc_test.dart
+++ b/runtime/observatory/tests/service/gc_test.dart
@@ -13,7 +13,7 @@
     if (iterations <= 0) {
       return;
     }
-    new List<int>(size);
+    new List<int>.filled(size, 0);
     new Timer(duration, () => grow(iterations - 1, size, duration));
   };
   grow(100, 1 << 24, new Duration(seconds: 1));
diff --git a/runtime/observatory/tests/service/get_allocation_profile_public_rpc_test.dart b/runtime/observatory/tests/service/get_allocation_profile_public_rpc_test.dart
index 85b2aff..d1c81e0 100644
--- a/runtime/observatory/tests/service/get_allocation_profile_public_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_allocation_profile_public_rpc_test.dart
@@ -4,7 +4,7 @@
 
 import 'dart:async';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/get_allocation_profile_rpc_test.dart b/runtime/observatory/tests/service/get_allocation_profile_rpc_test.dart
index 8d5c88e..05ab7c8 100644
--- a/runtime/observatory/tests/service/get_allocation_profile_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_allocation_profile_rpc_test.dart
@@ -4,7 +4,7 @@
 
 import 'dart:async';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/get_allocation_samples_test.dart b/runtime/observatory/tests/service/get_allocation_samples_test.dart
index 38dabcf..2370433 100644
--- a/runtime/observatory/tests/service/get_allocation_samples_test.dart
+++ b/runtime/observatory/tests/service/get_allocation_samples_test.dart
@@ -6,7 +6,7 @@
 import 'package:observatory/models.dart' as M;
 import 'package:observatory/service_io.dart';
 import 'package:observatory/sample_profile.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/get_client_name_rpc_test.dart b/runtime/observatory/tests/service/get_client_name_rpc_test.dart
index a3af0a6..d503a91 100644
--- a/runtime/observatory/tests/service/get_client_name_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_client_name_rpc_test.dart
@@ -5,7 +5,7 @@
 import 'dart:async';
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/get_cpu_profile_timeline_rpc_test.dart b/runtime/observatory/tests/service/get_cpu_profile_timeline_rpc_test.dart
index 5b7d1ec..db43578 100644
--- a/runtime/observatory/tests/service/get_cpu_profile_timeline_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_cpu_profile_timeline_rpc_test.dart
@@ -4,7 +4,7 @@
 
 import 'package:observatory/src/repositories/timeline_base.dart';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/get_cpu_samples_rpc_test.dart b/runtime/observatory/tests/service/get_cpu_samples_rpc_test.dart
index 542b476..93a7353 100644
--- a/runtime/observatory/tests/service/get_cpu_samples_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_cpu_samples_rpc_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/get_flag_list_rpc_test.dart b/runtime/observatory/tests/service/get_flag_list_rpc_test.dart
index 35484f6..f1c2c54 100644
--- a/runtime/observatory/tests/service/get_flag_list_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_flag_list_rpc_test.dart
@@ -5,7 +5,7 @@
 import 'dart:async';
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/get_heap_map_rpc_test.dart b/runtime/observatory/tests/service/get_heap_map_rpc_test.dart
index d5ff5c0..c85a561 100644
--- a/runtime/observatory/tests/service/get_heap_map_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_heap_map_rpc_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/get_instances_rpc_test.dart b/runtime/observatory/tests/service/get_instances_rpc_test.dart
index 8479483..0f234be 100644
--- a/runtime/observatory/tests/service/get_instances_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_instances_rpc_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/get_isolate_after_async_error_test.dart b/runtime/observatory/tests/service/get_isolate_after_async_error_test.dart
index e61d1b1..814cb7b 100644
--- a/runtime/observatory/tests/service/get_isolate_after_async_error_test.dart
+++ b/runtime/observatory/tests/service/get_isolate_after_async_error_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 import 'service_test_common.dart';
 
diff --git a/runtime/observatory/tests/service/get_isolate_after_language_error_test.dart b/runtime/observatory/tests/service/get_isolate_after_language_error_test.dart
index 4a7e076..425eb53 100644
--- a/runtime/observatory/tests/service/get_isolate_after_language_error_test.dart
+++ b/runtime/observatory/tests/service/get_isolate_after_language_error_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 import 'service_test_common.dart';
 
diff --git a/runtime/observatory/tests/service/get_isolate_after_stack_overflow_error_test.dart b/runtime/observatory/tests/service/get_isolate_after_stack_overflow_error_test.dart
index 0db543b..ab1c05d 100644
--- a/runtime/observatory/tests/service/get_isolate_after_stack_overflow_error_test.dart
+++ b/runtime/observatory/tests/service/get_isolate_after_stack_overflow_error_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 import 'service_test_common.dart';
 
diff --git a/runtime/observatory/tests/service/get_isolate_after_sync_error_test.dart b/runtime/observatory/tests/service/get_isolate_after_sync_error_test.dart
index cdf2763..8d0db3c 100644
--- a/runtime/observatory/tests/service/get_isolate_after_sync_error_test.dart
+++ b/runtime/observatory/tests/service/get_isolate_after_sync_error_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 import 'service_test_common.dart';
 
diff --git a/runtime/observatory/tests/service/get_isolate_group_memory_usage.dart b/runtime/observatory/tests/service/get_isolate_group_memory_usage.dart
index 8a834d9..1bdb6bd 100644
--- a/runtime/observatory/tests/service/get_isolate_group_memory_usage.dart
+++ b/runtime/observatory/tests/service/get_isolate_group_memory_usage.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/get_isolate_rpc_test.dart b/runtime/observatory/tests/service/get_isolate_rpc_test.dart
index 1b89f8c..2346282 100644
--- a/runtime/observatory/tests/service/get_isolate_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_isolate_rpc_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/get_memory_usage.dart b/runtime/observatory/tests/service/get_memory_usage.dart
index 96832c2..19ce0d2 100644
--- a/runtime/observatory/tests/service/get_memory_usage.dart
+++ b/runtime/observatory/tests/service/get_memory_usage.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/get_native_allocation_samples_test.dart b/runtime/observatory/tests/service/get_native_allocation_samples_test.dart
index 7ade11d..31f5325 100644
--- a/runtime/observatory/tests/service/get_native_allocation_samples_test.dart
+++ b/runtime/observatory/tests/service/get_native_allocation_samples_test.dart
@@ -7,7 +7,7 @@
 import 'package:observatory/sample_profile.dart';
 import 'package:observatory/models.dart' as M;
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 void verifyHelper(var root, bool exclusive) {
diff --git a/runtime/observatory/tests/service/get_object_rpc_test.dart b/runtime/observatory/tests/service/get_object_rpc_test.dart
index a19a869..faf5eca 100644
--- a/runtime/observatory/tests/service/get_object_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_object_rpc_test.dart
@@ -7,13 +7,13 @@
 import 'dart:typed_data';
 import 'dart:convert' show base64Decode;
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
 class _DummyClass {
   static var dummyVar = 11;
-  final List<String> dummyList = new List<String>(20);
+  final List<String> dummyList = new List<String>.filled(20, null);
   void dummyFunction() {}
 }
 
diff --git a/runtime/observatory/tests/service/get_object_store_rpc_test.dart b/runtime/observatory/tests/service/get_object_store_rpc_test.dart
index a98b595..cf50555 100644
--- a/runtime/observatory/tests/service/get_object_store_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_object_store_rpc_test.dart
@@ -4,7 +4,7 @@
 
 import 'package:observatory/models.dart' as M;
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/get_ports_rpc_test.dart b/runtime/observatory/tests/service/get_ports_rpc_test.dart
index 343bb48..61b6678 100644
--- a/runtime/observatory/tests/service/get_ports_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_ports_rpc_test.dart
@@ -6,7 +6,7 @@
 
 import 'dart:isolate' hide Isolate;
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/get_retained_size_rpc_test.dart b/runtime/observatory/tests/service/get_retained_size_rpc_test.dart
index 318c511..7060f13 100644
--- a/runtime/observatory/tests/service/get_retained_size_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_retained_size_rpc_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/get_retaining_path_rpc_test.dart b/runtime/observatory/tests/service/get_retaining_path_rpc_test.dart
index e9f6e55..78cacc0 100644
--- a/runtime/observatory/tests/service/get_retaining_path_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_retaining_path_rpc_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/get_scripts_rpc_test.dart b/runtime/observatory/tests/service/get_scripts_rpc_test.dart
index c22da46..9331adb 100644
--- a/runtime/observatory/tests/service/get_scripts_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_scripts_rpc_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/get_source_report_test.dart b/runtime/observatory/tests/service/get_source_report_test.dart
index 7abd05e..731e2f3 100644
--- a/runtime/observatory/tests/service/get_source_report_test.dart
+++ b/runtime/observatory/tests/service/get_source_report_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 import 'service_test_common.dart';
 import 'dart:developer';
diff --git a/runtime/observatory/tests/service/get_source_report_with_mixin_test.dart b/runtime/observatory/tests/service/get_source_report_with_mixin_test.dart
index ff2d41b..db85b1a 100644
--- a/runtime/observatory/tests/service/get_source_report_with_mixin_test.dart
+++ b/runtime/observatory/tests/service/get_source_report_with_mixin_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 import 'service_test_common.dart';
 import 'dart:developer';
diff --git a/runtime/observatory/tests/service/get_stack_rpc_test.dart b/runtime/observatory/tests/service/get_stack_rpc_test.dart
index a322752..db1695f 100644
--- a/runtime/observatory/tests/service/get_stack_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_stack_rpc_test.dart
@@ -4,7 +4,7 @@
 
 import 'package:observatory/models.dart' as M;
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 import 'dart:async';
diff --git a/runtime/observatory/tests/service/get_user_level_retaining_path_rpc_test.dart b/runtime/observatory/tests/service/get_user_level_retaining_path_rpc_test.dart
index e65dddf..9f69aeb 100644
--- a/runtime/observatory/tests/service/get_user_level_retaining_path_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_user_level_retaining_path_rpc_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/get_version_rpc_test.dart b/runtime/observatory/tests/service/get_version_rpc_test.dart
index 4503f6e..caaa488 100644
--- a/runtime/observatory/tests/service/get_version_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_version_rpc_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/get_vm_rpc_test.dart b/runtime/observatory/tests/service/get_vm_rpc_test.dart
index 0e924a3..97f973a 100644
--- a/runtime/observatory/tests/service/get_vm_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_vm_rpc_test.dart
@@ -6,7 +6,7 @@
 import 'dart:io';
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/get_vm_timeline_micros_rpc_test.dart b/runtime/observatory/tests/service/get_vm_timeline_micros_rpc_test.dart
index e8fa8e6..98a5150 100644
--- a/runtime/observatory/tests/service/get_vm_timeline_micros_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_vm_timeline_micros_rpc_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/get_vm_timeline_rpc_test.dart b/runtime/observatory/tests/service/get_vm_timeline_rpc_test.dart
index 25bcec0..b149a7e 100644
--- a/runtime/observatory/tests/service/get_vm_timeline_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_vm_timeline_rpc_test.dart
@@ -6,7 +6,7 @@
 import 'dart:io';
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/get_zone_memory_info_rpc_test.dart b/runtime/observatory/tests/service/get_zone_memory_info_rpc_test.dart
index d4d5467..428c42e 100644
--- a/runtime/observatory/tests/service/get_zone_memory_info_rpc_test.dart
+++ b/runtime/observatory/tests/service/get_zone_memory_info_rpc_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/http_enable_timeline_logging_service_test.dart b/runtime/observatory/tests/service/http_enable_timeline_logging_service_test.dart
index f880308..d3b3df8 100644
--- a/runtime/observatory/tests/service/http_enable_timeline_logging_service_test.dart
+++ b/runtime/observatory/tests/service/http_enable_timeline_logging_service_test.dart
@@ -4,7 +4,7 @@
 
 import 'dart:async';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/http_get_isolate_group_rpc_common.dart b/runtime/observatory/tests/service/http_get_isolate_group_rpc_common.dart
index 2b28be5..ebe21f5 100644
--- a/runtime/observatory/tests/service/http_get_isolate_group_rpc_common.dart
+++ b/runtime/observatory/tests/service/http_get_isolate_group_rpc_common.dart
@@ -6,8 +6,8 @@
 import 'dart:convert';
 import 'dart:developer';
 import 'dart:io' as io;
+import 'package:expect/expect.dart';
 import 'package:observatory/service_io.dart' as S;
-import 'package:unittest/unittest.dart';
 import 'test_helper.dart';
 
 Future<String> getIsolateGroupId(
@@ -36,7 +36,7 @@
   print(await Service.getInfo());
   // Start the web server.
   final ServiceProtocolInfo info = await Service.controlWebServer(enable: true);
-  expect(info.serverUri, isNotNull);
+  Expect.isNotNull(info.serverUri);
   final httpClient = new io.HttpClient();
 
   // Build the request.
@@ -63,13 +63,13 @@
         .transform(json.decoder)
         .first;
     final result = jsonResponse['result'];
-    expect(result['type'], equals('IsolateGroup'));
-    expect(result['id'], startsWith('isolateGroups/'));
-    expect(result['number'], new isInstanceOf<String>());
-    expect(result['isolates'].length, isPositive);
-    expect(result['isolates'][0]['type'], equals('@Isolate'));
+    Expect.equals(result['type'], 'IsolateGroup');
+    Expect.isTrue(result['id'].startsWith('isolateGroups/'));
+    Expect.type<String>(result['number']);
+    Expect.isTrue(result['isolates'].length > 0);
+    Expect.equals(result['isolates'][0]['type'], '@Isolate');
   } catch (e) {
-    fail('invalid request: $e');
+    Expect.fail('invalid request: $e');
   }
 }
 
@@ -78,6 +78,5 @@
     await isolate.reload();
     // Just getting here means that the testee enabled the service protocol
     // web server.
-    expect(true, true);
   }
 ];
diff --git a/runtime/observatory/tests/service/http_get_isolate_rpc_common.dart b/runtime/observatory/tests/service/http_get_isolate_rpc_common.dart
index f49e5a4..6d487c2 100644
--- a/runtime/observatory/tests/service/http_get_isolate_rpc_common.dart
+++ b/runtime/observatory/tests/service/http_get_isolate_rpc_common.dart
@@ -6,8 +6,8 @@
 import 'dart:convert';
 import 'dart:developer';
 import 'dart:io' as io;
+import 'package:expect/expect.dart';
 import 'package:observatory/service_io.dart' as S;
-import 'package:unittest/unittest.dart';
 import 'test_helper.dart';
 
 Future<String> getIsolateId(io.HttpClient httpClient, Uri serverUri) async {
@@ -35,7 +35,7 @@
   print(await Service.getInfo());
   // Start the web server.
   ServiceProtocolInfo info = await Service.controlWebServer(enable: true);
-  expect(info.serverUri, isNotNull);
+  Expect.isNotNull(info.serverUri);
   var httpClient = new io.HttpClient();
 
   // Build the request.
@@ -61,26 +61,26 @@
         .transform(json.decoder)
         .first;
     Map result = response['result'];
-    expect(result['type'], equals('Isolate'));
-    expect(result['id'], startsWith('isolates/'));
-    expect(result['number'], new isInstanceOf<String>());
-    expect(result['_originNumber'], equals(result['number']));
-    expect(result['startTime'], isPositive);
-    expect(result['livePorts'], isPositive);
-    expect(result['pauseOnExit'], isFalse);
-    expect(result['pauseEvent']['type'], equals('Event'));
-    expect(result['error'], isNull);
-    expect(result['_numZoneHandles'], isPositive);
-    expect(result['_numScopedHandles'], isPositive);
-    expect(result['rootLib']['type'], equals('@Library'));
-    expect(result['libraries'].length, isPositive);
-    expect(result['libraries'][0]['type'], equals('@Library'));
-    expect(result['breakpoints'].length, isZero);
-    expect(result['_heaps']['new']['type'], equals('HeapSpace'));
-    expect(result['_heaps']['old']['type'], equals('HeapSpace'));
-    expect(result['isolate_group']['type'], equals('@IsolateGroup'));
+    Expect.equals(result['type'], 'Isolate');
+    Expect.isTrue(result['id'].startsWith('isolates/'));
+    Expect.type<String>(result['number']);
+    Expect.equals(result['_originNumber'], result['number']);
+    Expect.isTrue(result['startTime'] > 0);
+    Expect.isTrue(result['livePorts'] > 0);
+    Expect.isFalse(result['pauseOnExit']);
+    Expect.equals(result['pauseEvent']['type'], 'Event');
+    Expect.isNull(result['error']);
+    Expect.isTrue(result['_numZoneHandles'] > 0);
+    Expect.isTrue(result['_numScopedHandles'] > 0);
+    Expect.equals(result['rootLib']['type'], '@Library');
+    Expect.isTrue(result['libraries'].length > 0);
+    Expect.equals(result['libraries'][0]['type'], '@Library');
+    Expect.equals(result['breakpoints'].length, 0);
+    Expect.equals(result['_heaps']['new']['type'], 'HeapSpace');
+    Expect.equals(result['_heaps']['old']['type'], 'HeapSpace');
+    Expect.equals(result['isolate_group']['type'], '@IsolateGroup');
   } catch (e) {
-    fail('invalid request: $e');
+    Expect.fail('invalid request: $e');
   }
 }
 
@@ -89,6 +89,5 @@
     await isolate.reload();
     // Just getting here means that the testee enabled the service protocol
     // web server.
-    expect(true, true);
   }
 ];
diff --git a/runtime/observatory/tests/service/http_get_vm_rpc_common.dart b/runtime/observatory/tests/service/http_get_vm_rpc_common.dart
index 18a0abe..b9b405e 100644
--- a/runtime/observatory/tests/service/http_get_vm_rpc_common.dart
+++ b/runtime/observatory/tests/service/http_get_vm_rpc_common.dart
@@ -6,8 +6,8 @@
 import 'dart:convert';
 import 'dart:developer';
 import 'dart:io' as io;
+import 'package:expect/expect.dart';
 import 'package:observatory/service_io.dart' as S;
-import 'package:unittest/unittest.dart';
 import 'test_helper.dart';
 
 Future<Null> testeeBefore() async {
@@ -15,7 +15,7 @@
   print(await Service.getInfo());
   // Start the web server.
   ServiceProtocolInfo info = await Service.controlWebServer(enable: true);
-  expect(info.serverUri, isNotNull);
+  Expect.isNotNull(info.serverUri);
   var httpClient = new io.HttpClient();
 
   // Build the request.
@@ -36,20 +36,20 @@
         .transform(json.decoder)
         .first;
     Map result = response['result'];
-    expect(result['type'], equals('VM'));
-    expect(result['name'], equals('vm'));
-    expect(result['architectureBits'], isPositive);
-    expect(result['targetCPU'], new isInstanceOf<String>());
-    expect(result['hostCPU'], new isInstanceOf<String>());
-    expect(result['version'], new isInstanceOf<String>());
-    expect(result['pid'], new isInstanceOf<int>());
-    expect(result['startTime'], isPositive);
-    expect(result['isolates'].length, isPositive);
-    expect(result['isolates'][0]['type'], equals('@Isolate'));
-    expect(result['isolateGroups'].length, isPositive);
-    expect(result['isolateGroups'][0]['type'], equals('@IsolateGroup'));
+    Expect.equals(result['type'], 'VM');
+    Expect.equals(result['name'], 'vm');
+    Expect.isTrue(result['architectureBits'] > 0);
+    Expect.type<String>(result['targetCPU']);
+    Expect.type<String>(result['hostCPU']);
+    Expect.type<String>(result['version']);
+    Expect.type<int>(result['pid']);
+    Expect.isTrue(result['startTime'] > 0);
+    Expect.isTrue(result['isolates'].length > 0);
+    Expect.equals(result['isolates'][0]['type'], '@Isolate');
+    Expect.isTrue(result['isolateGroups'].length > 0);
+    Expect.equals(result['isolateGroups'][0]['type'], '@IsolateGroup');
   } catch (e) {
-    fail('invalid request: $e');
+    Expect.fail('invalid request: $e');
   }
 }
 
@@ -58,6 +58,5 @@
     await isolate.reload();
     // Just getting here means that the testee enabled the service protocol
     // web server.
-    expect(true, true);
   }
 ];
diff --git a/runtime/observatory/tests/service/implicit_getter_setter_test.dart b/runtime/observatory/tests/service/implicit_getter_setter_test.dart
index 25423e3..30710d5 100644
--- a/runtime/observatory/tests/service/implicit_getter_setter_test.dart
+++ b/runtime/observatory/tests/service/implicit_getter_setter_test.dart
@@ -6,7 +6,7 @@
 
 import 'dart:async';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 class A {
diff --git a/runtime/observatory/tests/service/inbound_references_test.dart b/runtime/observatory/tests/service/inbound_references_test.dart
index fddc8ba..4c1e496 100644
--- a/runtime/observatory/tests/service/inbound_references_test.dart
+++ b/runtime/observatory/tests/service/inbound_references_test.dart
@@ -5,7 +5,7 @@
 library inbound_references_test;
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 class Node {
diff --git a/runtime/observatory/tests/service/instance_field_order_rpc_test.dart b/runtime/observatory/tests/service/instance_field_order_rpc_test.dart
index c531ad6..9ff16e4 100644
--- a/runtime/observatory/tests/service/instance_field_order_rpc_test.dart
+++ b/runtime/observatory/tests/service/instance_field_order_rpc_test.dart
@@ -5,7 +5,7 @@
 library get_object_rpc_test;
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 class Super {
diff --git a/runtime/observatory/tests/service/invoke_skip_breakpoint.dart b/runtime/observatory/tests/service/invoke_skip_breakpoint.dart
index d2d258c..825f94b 100644
--- a/runtime/observatory/tests/service/invoke_skip_breakpoint.dart
+++ b/runtime/observatory/tests/service/invoke_skip_breakpoint.dart
@@ -4,7 +4,7 @@
 
 import 'dart:developer';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/invoke_test.dart b/runtime/observatory/tests/service/invoke_test.dart
index 437a86d..8a9ebb7 100644
--- a/runtime/observatory/tests/service/invoke_test.dart
+++ b/runtime/observatory/tests/service/invoke_test.dart
@@ -4,7 +4,7 @@
 
 import 'dart:developer';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/isolate_lifecycle_test.dart b/runtime/observatory/tests/service/isolate_lifecycle_test.dart
index 57d3eb0..a4a364b 100644
--- a/runtime/observatory/tests/service/isolate_lifecycle_test.dart
+++ b/runtime/observatory/tests/service/isolate_lifecycle_test.dart
@@ -8,7 +8,7 @@
 
 import 'package:observatory/service_io.dart';
 import 'package:observatory/models.dart' as M;
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/issue_25465_test.dart b/runtime/observatory/tests/service/issue_25465_test.dart
index 41cb026..4b17e14 100644
--- a/runtime/observatory/tests/service/issue_25465_test.dart
+++ b/runtime/observatory/tests/service/issue_25465_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 import 'service_test_common.dart';
 import 'dart:async';
diff --git a/runtime/observatory/tests/service/issue_30555_test.dart b/runtime/observatory/tests/service/issue_30555_test.dart
index b804d9e..22f6a2b 100644
--- a/runtime/observatory/tests/service/issue_30555_test.dart
+++ b/runtime/observatory/tests/service/issue_30555_test.dart
@@ -5,7 +5,7 @@
 import 'dart:async';
 import 'dart:developer';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/kill_paused_test.dart b/runtime/observatory/tests/service/kill_paused_test.dart
index cf88edd..ad42edc 100644
--- a/runtime/observatory/tests/service/kill_paused_test.dart
+++ b/runtime/observatory/tests/service/kill_paused_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_common.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'test_helper.dart';
 import 'dart:developer';
diff --git a/runtime/observatory/tests/service/kill_running_test.dart b/runtime/observatory/tests/service/kill_running_test.dart
index 5fe16b7..c62a85c 100644
--- a/runtime/observatory/tests/service/kill_running_test.dart
+++ b/runtime/observatory/tests/service/kill_running_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_common.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'test_helper.dart';
 import 'service_test_common.dart';
diff --git a/runtime/observatory/tests/service/library_dependency_test.dart b/runtime/observatory/tests/service/library_dependency_test.dart
index a485b78..99df38d 100644
--- a/runtime/observatory/tests/service/library_dependency_test.dart
+++ b/runtime/observatory/tests/service/library_dependency_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 export 'dart:collection';
diff --git a/runtime/observatory/tests/service/local_variable_declaration_test.dart b/runtime/observatory/tests/service/local_variable_declaration_test.dart
index 2c59824..f7e696a 100644
--- a/runtime/observatory/tests/service/local_variable_declaration_test.dart
+++ b/runtime/observatory/tests/service/local_variable_declaration_test.dart
@@ -4,7 +4,7 @@
 // VMOptions=--verbose_debug
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 import 'dart:developer';
diff --git a/runtime/observatory/tests/service/logging_test.dart b/runtime/observatory/tests/service/logging_test.dart
index 5e24f01..4acf8b0 100644
--- a/runtime/observatory/tests/service/logging_test.dart
+++ b/runtime/observatory/tests/service/logging_test.dart
@@ -4,7 +4,7 @@
 
 import 'dart:developer' as developer;
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'package:logging/logging.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
diff --git a/runtime/observatory/tests/service/malformed_test.dart b/runtime/observatory/tests/service/malformed_test.dart
index 5738afe..5fff3fd 100644
--- a/runtime/observatory/tests/service/malformed_test.dart
+++ b/runtime/observatory/tests/service/malformed_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 var tests = <IsolateTest>[
diff --git a/runtime/observatory/tests/service/metrics_test.dart b/runtime/observatory/tests/service/metrics_test.dart
index 328a2ca..b35806c 100644
--- a/runtime/observatory/tests/service/metrics_test.dart
+++ b/runtime/observatory/tests/service/metrics_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 import 'dart:developer';
diff --git a/runtime/observatory/tests/service/mirror_references_test.dart b/runtime/observatory/tests/service/mirror_references_test.dart
index f0c9019..1567d2d 100644
--- a/runtime/observatory/tests/service/mirror_references_test.dart
+++ b/runtime/observatory/tests/service/mirror_references_test.dart
@@ -6,7 +6,7 @@
 
 import 'dart:mirrors';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 class Foo {}
diff --git a/runtime/observatory/tests/service/native_metrics_test.dart b/runtime/observatory/tests/service/native_metrics_test.dart
index e8afd57..0cb1394 100644
--- a/runtime/observatory/tests/service/native_metrics_test.dart
+++ b/runtime/observatory/tests/service/native_metrics_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 import 'dart:developer';
diff --git a/runtime/observatory/tests/service/network_profiling_test.dart b/runtime/observatory/tests/service/network_profiling_test.dart
index 9ec766f6..c02b278 100644
--- a/runtime/observatory/tests/service/network_profiling_test.dart
+++ b/runtime/observatory/tests/service/network_profiling_test.dart
@@ -8,7 +8,7 @@
 import 'dart:io' as io;
 import 'dart:isolate';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/object_graph_vm_test.dart b/runtime/observatory/tests/service/object_graph_vm_test.dart
index 669d096..852c823 100644
--- a/runtime/observatory/tests/service/object_graph_vm_test.dart
+++ b/runtime/observatory/tests/service/object_graph_vm_test.dart
@@ -5,7 +5,7 @@
 import 'package:observatory/models.dart' as M;
 import 'package:observatory/object_graph.dart';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 class Foo {
diff --git a/runtime/observatory/tests/service/observatory_assets_test.dart b/runtime/observatory/tests/service/observatory_assets_test.dart
index 43054f6..4b8f8e2 100644
--- a/runtime/observatory/tests/service/observatory_assets_test.dart
+++ b/runtime/observatory/tests/service/observatory_assets_test.dart
@@ -4,7 +4,7 @@
 
 import 'dart:io';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/parameters_in_scope_at_entry_test.dart b/runtime/observatory/tests/service/parameters_in_scope_at_entry_test.dart
index 7c8623a..03285f4 100644
--- a/runtime/observatory/tests/service/parameters_in_scope_at_entry_test.dart
+++ b/runtime/observatory/tests/service/parameters_in_scope_at_entry_test.dart
@@ -6,7 +6,7 @@
 import 'package:observatory/service_io.dart';
 import 'test_helper.dart';
 import 'dart:developer';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'service_test_common.dart';
 
diff --git a/runtime/observatory/tests/service/pause_idle_isolate_test.dart b/runtime/observatory/tests/service/pause_idle_isolate_test.dart
index cefff87..672b13a 100644
--- a/runtime/observatory/tests/service/pause_idle_isolate_test.dart
+++ b/runtime/observatory/tests/service/pause_idle_isolate_test.dart
@@ -7,7 +7,7 @@
 import 'dart:isolate' show ReceivePort;
 import 'package:observatory/models.dart' as M;
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/pause_on_exceptions_test.dart b/runtime/observatory/tests/service/pause_on_exceptions_test.dart
index b30206b..05dae04 100644
--- a/runtime/observatory/tests/service/pause_on_exceptions_test.dart
+++ b/runtime/observatory/tests/service/pause_on_exceptions_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 import 'dart:async';
 
diff --git a/runtime/observatory/tests/service/pause_on_start_and_exit_test.dart b/runtime/observatory/tests/service/pause_on_start_and_exit_test.dart
index 1326441..f1aff65 100644
--- a/runtime/observatory/tests/service/pause_on_start_and_exit_test.dart
+++ b/runtime/observatory/tests/service/pause_on_start_and_exit_test.dart
@@ -4,7 +4,7 @@
 
 import 'package:observatory/models.dart' as M;
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 import 'dart:async';
 
diff --git a/runtime/observatory/tests/service/pause_on_start_and_exit_with_child_test.dart b/runtime/observatory/tests/service/pause_on_start_and_exit_with_child_test.dart
index 756d169..1d3a8bf 100644
--- a/runtime/observatory/tests/service/pause_on_start_and_exit_with_child_test.dart
+++ b/runtime/observatory/tests/service/pause_on_start_and_exit_with_child_test.dart
@@ -4,7 +4,7 @@
 
 import 'package:observatory/models.dart' as M;
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 import 'dart:async';
 import 'dart:isolate' as isolate;
diff --git a/runtime/observatory/tests/service/pause_on_start_then_step_test.dart b/runtime/observatory/tests/service/pause_on_start_then_step_test.dart
index 4791e6d..93cefb4 100644
--- a/runtime/observatory/tests/service/pause_on_start_then_step_test.dart
+++ b/runtime/observatory/tests/service/pause_on_start_then_step_test.dart
@@ -4,7 +4,7 @@
 
 import 'package:observatory/models.dart' as M;
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 import 'dart:async';
 
diff --git a/runtime/observatory/tests/service/pause_on_unhandled_async_exceptions2_test.dart b/runtime/observatory/tests/service/pause_on_unhandled_async_exceptions2_test.dart
index bc12e54..850177a 100644
--- a/runtime/observatory/tests/service/pause_on_unhandled_async_exceptions2_test.dart
+++ b/runtime/observatory/tests/service/pause_on_unhandled_async_exceptions2_test.dart
@@ -8,7 +8,7 @@
 
 import 'package:observatory/service_io.dart';
 import 'package:observatory/models.dart' as M;
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 import 'service_test_common.dart';
 
diff --git a/runtime/observatory/tests/service/pause_on_unhandled_async_exceptions3_test.dart b/runtime/observatory/tests/service/pause_on_unhandled_async_exceptions3_test.dart
index e46654b..5871f60 100644
--- a/runtime/observatory/tests/service/pause_on_unhandled_async_exceptions3_test.dart
+++ b/runtime/observatory/tests/service/pause_on_unhandled_async_exceptions3_test.dart
@@ -6,7 +6,7 @@
 // function. Regression test for https://dartbug.com/38697.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 import 'service_test_common.dart';
 
diff --git a/runtime/observatory/tests/service/pause_on_unhandled_async_exceptions_test.dart b/runtime/observatory/tests/service/pause_on_unhandled_async_exceptions_test.dart
index c9ab632..05cf750 100644
--- a/runtime/observatory/tests/service/pause_on_unhandled_async_exceptions_test.dart
+++ b/runtime/observatory/tests/service/pause_on_unhandled_async_exceptions_test.dart
@@ -6,7 +6,7 @@
 
 import 'package:observatory/service_io.dart';
 import 'package:observatory/models.dart' as M;
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 import 'service_test_common.dart';
 
diff --git a/runtime/observatory/tests/service/pause_on_unhandled_exceptions_test.dart b/runtime/observatory/tests/service/pause_on_unhandled_exceptions_test.dart
index 3921ac7..62cf7df 100644
--- a/runtime/observatory/tests/service/pause_on_unhandled_exceptions_test.dart
+++ b/runtime/observatory/tests/service/pause_on_unhandled_exceptions_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 import 'service_test_common.dart';
 
diff --git a/runtime/observatory/tests/service/positive_token_pos_test.dart b/runtime/observatory/tests/service/positive_token_pos_test.dart
index 72d54dd..ee8dbad 100644
--- a/runtime/observatory/tests/service/positive_token_pos_test.dart
+++ b/runtime/observatory/tests/service/positive_token_pos_test.dart
@@ -5,7 +5,7 @@
 
 import 'dart:developer';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/process_service_test.dart b/runtime/observatory/tests/service/process_service_test.dart
index 045ed2c..02e71fc 100644
--- a/runtime/observatory/tests/service/process_service_test.dart
+++ b/runtime/observatory/tests/service/process_service_test.dart
@@ -9,7 +9,7 @@
 
 import 'package:observatory/service_io.dart';
 import 'package:path/path.dart' as path;
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/reachable_size_test.dart b/runtime/observatory/tests/service/reachable_size_test.dart
index 800ebb2..6bc92f5 100644
--- a/runtime/observatory/tests/service/reachable_size_test.dart
+++ b/runtime/observatory/tests/service/reachable_size_test.dart
@@ -4,7 +4,7 @@
 
 import 'dart:async';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 import 'service_test_common.dart';
 
diff --git a/runtime/observatory/tests/service/regexp_function_test.dart b/runtime/observatory/tests/service/regexp_function_test.dart
index 6fb09bc..a44cb5b 100644
--- a/runtime/observatory/tests/service/regexp_function_test.dart
+++ b/runtime/observatory/tests/service/regexp_function_test.dart
@@ -4,8 +4,9 @@
 // VMOptions=
 // VMOptions=--interpret_irregexp
 
+import 'package:expect/expect.dart';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 var regex0;
@@ -17,7 +18,7 @@
   regex = new RegExp(r"(\w+)");
   String str = "Parse my string";
   Iterable<Match> matches = regex.allMatches(str); // Run to generate bytecode.
-  expect(matches.length, equals(3));
+  Expect.equals(matches.length, 3);
 }
 
 var tests = <IsolateTest>[
diff --git a/runtime/observatory/tests/service/regress_28443_test.dart b/runtime/observatory/tests/service/regress_28443_test.dart
index bd585b9..ccdec12 100644
--- a/runtime/observatory/tests/service/regress_28443_test.dart
+++ b/runtime/observatory/tests/service/regress_28443_test.dart
@@ -6,7 +6,7 @@
 import 'test_helper.dart';
 import 'service_test_common.dart';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 const int LINE_A = 28, LINE_B = 33;
 
diff --git a/runtime/observatory/tests/service/regress_28980_test.dart b/runtime/observatory/tests/service/regress_28980_test.dart
index 65a59ae..56fac2a 100644
--- a/runtime/observatory/tests/service/regress_28980_test.dart
+++ b/runtime/observatory/tests/service/regress_28980_test.dart
@@ -6,7 +6,7 @@
 import 'test_helper.dart';
 import 'service_test_common.dart';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 const int LINE_A = 19, LINE_B = 38;
 
diff --git a/runtime/observatory/tests/service/regress_34841_test.dart b/runtime/observatory/tests/service/regress_34841_test.dart
index c53a9e9..05bb56a 100644
--- a/runtime/observatory/tests/service/regress_34841_test.dart
+++ b/runtime/observatory/tests/service/regress_34841_test.dart
@@ -8,7 +8,7 @@
 // (i.e. not actual) positions in this file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 import 'service_test_common.dart';
 import 'dart:developer';
diff --git a/runtime/observatory/tests/service/rewind_optimized_out_test.dart b/runtime/observatory/tests/service/rewind_optimized_out_test.dart
index 304678d..97aca1c 100644
--- a/runtime/observatory/tests/service/rewind_optimized_out_test.dart
+++ b/runtime/observatory/tests/service/rewind_optimized_out_test.dart
@@ -4,7 +4,7 @@
 
 import 'dart:developer';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/rewind_test.dart b/runtime/observatory/tests/service/rewind_test.dart
index 059d5f1..87e46ec 100644
--- a/runtime/observatory/tests/service/rewind_test.dart
+++ b/runtime/observatory/tests/service/rewind_test.dart
@@ -4,7 +4,7 @@
 
 import 'dart:developer';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/service_test_common.dart b/runtime/observatory/tests/service/service_test_common.dart
index 57227cd..85df4f6 100644
--- a/runtime/observatory/tests/service/service_test_common.dart
+++ b/runtime/observatory/tests/service/service_test_common.dart
@@ -8,7 +8,8 @@
 import 'dart:io' show Platform;
 import 'package:observatory/models.dart' as M;
 import 'package:observatory/service_common.dart';
-import 'package:unittest/unittest.dart';
+import 'package:observatory/service_io.dart';
+import 'package:test/test.dart';
 
 typedef Future IsolateTest(Isolate isolate);
 typedef Future VMTest(VM vm);
@@ -579,3 +580,5 @@
   }
   return result;
 }
+
+Future<void> waitForTargetVMExit(VM vm) async => await vm.onDisconnect;
diff --git a/runtime/observatory/tests/service/set_library_debuggable_rpc_test.dart b/runtime/observatory/tests/service/set_library_debuggable_rpc_test.dart
index 2a14bbb..1a5c8fd 100644
--- a/runtime/observatory/tests/service/set_library_debuggable_rpc_test.dart
+++ b/runtime/observatory/tests/service/set_library_debuggable_rpc_test.dart
@@ -5,7 +5,7 @@
 library set_library_debuggable_rpc_test;
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/set_library_debuggable_test.dart b/runtime/observatory/tests/service/set_library_debuggable_test.dart
index 6550a89..4ffbcb6 100644
--- a/runtime/observatory/tests/service/set_library_debuggable_test.dart
+++ b/runtime/observatory/tests/service/set_library_debuggable_test.dart
@@ -6,7 +6,7 @@
 
 import 'dart:developer';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/set_name_rpc_test.dart b/runtime/observatory/tests/service/set_name_rpc_test.dart
index 186e4e0..1e4253d 100644
--- a/runtime/observatory/tests/service/set_name_rpc_test.dart
+++ b/runtime/observatory/tests/service/set_name_rpc_test.dart
@@ -4,7 +4,7 @@
 // VMOptions=--vm-name=Walter
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 import 'dart:async';
 
diff --git a/runtime/observatory/tests/service/set_vm_name_rpc_test.dart b/runtime/observatory/tests/service/set_vm_name_rpc_test.dart
index 3a7c62c..67ad461 100644
--- a/runtime/observatory/tests/service/set_vm_name_rpc_test.dart
+++ b/runtime/observatory/tests/service/set_vm_name_rpc_test.dart
@@ -5,7 +5,7 @@
 
 import 'dart:async';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 var tests = <VMTest>[
diff --git a/runtime/observatory/tests/service/simple_reload_test.dart b/runtime/observatory/tests/service/simple_reload_test.dart
index 3ae8295..f67c95d 100644
--- a/runtime/observatory/tests/service/simple_reload_test.dart
+++ b/runtime/observatory/tests/service/simple_reload_test.dart
@@ -12,7 +12,7 @@
 import 'service_test_common.dart';
 import 'package:observatory/service.dart';
 import 'package:path/path.dart' as path;
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 // Chop off the file name.
 String baseDirectory = path.dirname(Platform.script.path) + '/';
diff --git a/runtime/observatory/tests/service/steal_breakpoint_test.dart b/runtime/observatory/tests/service/steal_breakpoint_test.dart
index 540eda4..4fe7d08 100644
--- a/runtime/observatory/tests/service/steal_breakpoint_test.dart
+++ b/runtime/observatory/tests/service/steal_breakpoint_test.dart
@@ -4,7 +4,7 @@
 // VMOptions=--steal-breakpoints
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 import 'dart:async';
 
diff --git a/runtime/observatory/tests/service/step_over_await_test.dart b/runtime/observatory/tests/service/step_over_await_test.dart
index 3471106..e8103b2 100644
--- a/runtime/observatory/tests/service/step_over_await_test.dart
+++ b/runtime/observatory/tests/service/step_over_await_test.dart
@@ -11,7 +11,7 @@
 
 import 'package:observatory/models.dart' as M;
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 const int LINE_A = 22;
 const int LINE_B = 24;
diff --git a/runtime/observatory/tests/service/step_test.dart b/runtime/observatory/tests/service/step_test.dart
index 973a208..01aaeb0 100644
--- a/runtime/observatory/tests/service/step_test.dart
+++ b/runtime/observatory/tests/service/step_test.dart
@@ -6,7 +6,7 @@
 import 'test_helper.dart';
 import 'service_test_common.dart';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 const int LINE_A = 14;
 
diff --git a/runtime/observatory/tests/service/string_escaping_test.dart b/runtime/observatory/tests/service/string_escaping_test.dart
index 81783d6..8a11dfb 100644
--- a/runtime/observatory/tests/service/string_escaping_test.dart
+++ b/runtime/observatory/tests/service/string_escaping_test.dart
@@ -6,7 +6,7 @@
 
 import 'dart:async';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 var ascii;
diff --git a/runtime/observatory/tests/service/tcp_socket_closing_service_test.dart b/runtime/observatory/tests/service/tcp_socket_closing_service_test.dart
index 740a138..8996577 100644
--- a/runtime/observatory/tests/service/tcp_socket_closing_service_test.dart
+++ b/runtime/observatory/tests/service/tcp_socket_closing_service_test.dart
@@ -6,7 +6,7 @@
 import 'dart:convert';
 import 'dart:io' as io;
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 /// Test that we correctly remove sockets that have been closed from the list
diff --git a/runtime/observatory/tests/service/tcp_socket_service_test.dart b/runtime/observatory/tests/service/tcp_socket_service_test.dart
index 889c50d..9e61a01 100644
--- a/runtime/observatory/tests/service/tcp_socket_service_test.dart
+++ b/runtime/observatory/tests/service/tcp_socket_service_test.dart
@@ -6,7 +6,7 @@
 import 'dart:convert';
 import 'dart:io' as io;
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 Future setupTCP() async {
diff --git a/runtime/observatory/tests/service/test_helper.dart b/runtime/observatory/tests/service/test_helper.dart
index ad76a66..1dd5989 100644
--- a/runtime/observatory/tests/service/test_helper.dart
+++ b/runtime/observatory/tests/service/test_helper.dart
@@ -8,6 +8,7 @@
 import 'dart:convert';
 import 'dart:io';
 import 'package:observatory/service_io.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 export 'service_test_common.dart' show IsolateTest, VMTest;
 
@@ -53,7 +54,7 @@
       bool pause_on_exit: false}) async {
     if (!pause_on_start) {
       if (testeeBefore != null) {
-        var result = testeeBefore();
+        final result = testeeBefore();
         if (result is Future) {
           await result;
         }
@@ -61,7 +62,7 @@
       print(''); // Print blank line to signal that testeeBefore has run.
     }
     if (testeeConcurrent != null) {
-      var result = testeeConcurrent();
+      final result = testeeConcurrent();
       if (result is Future) {
         await result;
       }
@@ -150,9 +151,9 @@
       List<String> executableArgs) {
     assert(!_shouldLaunchSkyShell());
 
-    String dartExecutable = Platform.executable;
+    final String dartExecutable = Platform.executable;
 
-    var fullArgs = <String>[];
+    final fullArgs = <String>[];
     if (pause_on_start) {
       fullArgs.add('--pause-isolates-on-start');
     }
@@ -189,10 +190,10 @@
       List<String> executableArgs) {
     assert(_shouldLaunchSkyShell());
 
-    String dartExecutable = _skyShellPath();
+    final String dartExecutable = _skyShellPath();
 
-    var dartFlags = <String>[];
-    var fullArgs = <String>[];
+    final dartFlags = <String>[];
+    final fullArgs = <String>[];
     if (pause_on_start) {
       dartFlags.add('--pause_isolates_on_start');
       fullArgs.add('--start-paused');
@@ -221,8 +222,8 @@
 
   Future<Process> _spawnCommon(String executable, List<String> arguments,
       Map<String, String> dartEnvironment) {
-    var environment = _TESTEE_SPAWN_ENV;
-    var bashEnvironment = new StringBuffer();
+    final environment = _TESTEE_SPAWN_ENV;
+    final bashEnvironment = new StringBuffer();
     environment.forEach((k, v) => bashEnvironment.write("$k=$v "));
     if (dartEnvironment != null) {
       dartEnvironment.forEach((k, v) {
@@ -336,10 +337,11 @@
       executableArgs = Platform.executableArguments;
     }
 
-    var process = new _ServiceTesteeLauncher();
-    bool testsDone = false;
-    runZoned(() {
-      process
+    final process = new _ServiceTesteeLauncher();
+    final name = Platform.script.pathSegments.last;
+    WebSocketVM vm;
+    setUp(() async {
+      await process
           .launch(
               pause_on_start,
               pause_on_exit,
@@ -351,23 +353,26 @@
               executableArgs)
           .then((Uri serverAddress) async {
         if (mainArgs.contains("--gdb")) {
-          var pid = process.process.pid;
-          var wait = new Duration(seconds: 10);
+          final pid = process.process.pid;
+          final wait = new Duration(seconds: 10);
           print("Testee has pid $pid, waiting $wait before continuing");
           sleep(wait);
         }
         setupAddresses(serverAddress);
-        var name = Platform.script.pathSegments.last;
-        var vm =
-            new WebSocketVM(new WebSocketVMTarget(serviceWebsocketAddress));
+        vm = new WebSocketVM(new WebSocketVMTarget(serviceWebsocketAddress));
         print('Loading VM...');
         await vm.load();
         print('Done loading VM');
+      });
+    });
 
+    test(
+      name,
+      () async {
         // Run vm tests.
         if (vmTests != null) {
-          var testIndex = 1;
-          var totalTests = vmTests.length;
+          int testIndex = 1;
+          final totalTests = vmTests.length;
           for (var test in vmTests) {
             vm.verbose = verbose_vm;
             print('Running $name [$testIndex/$totalTests]');
@@ -378,9 +383,9 @@
 
         // Run isolate tests.
         if (isolateTests != null) {
-          var isolate = await getFirstIsolate(vm);
-          var testIndex = 1;
-          var totalTests = isolateTests.length;
+          final isolate = await getFirstIsolate(vm);
+          int testIndex = 1;
+          final totalTests = isolateTests.length;
           for (var test in isolateTests) {
             vm.verbose = verbose_vm;
             print('Running $name [$testIndex/$totalTests]');
@@ -388,26 +393,21 @@
             await test(isolate);
           }
         }
+      },
+      retry: 0,
+      // Some service tests run fairly long (e.g., valid_source_locations_test).
+      timeout: Timeout.none,
+    );
 
-        print('All service tests completed successfully.');
-        testsDone = true;
-        process.requestExit();
-      });
-    }, onError: (error, stackTrace) {
-      if (testsDone) {
-        print('Ignoring late exception during process exit:\n'
-            '$error\n#stackTrace');
-      } else {
-        process.requestExit();
-        print('Unexpected exception in service tests: $error\n$stackTrace');
-        throw error;
-      }
+    tearDown(() {
+      print('All service tests completed successfully.');
+      process.requestExit();
     });
   }
 
   Future<Isolate> getFirstIsolate(WebSocketVM vm) async {
     if (vm.isolates.isNotEmpty) {
-      var isolate = await vm.isolates.first.load();
+      final isolate = await vm.isolates.first.load();
       if (isolate is Isolate) {
         return isolate;
       }
diff --git a/runtime/observatory/tests/service/type_arguments_test.dart b/runtime/observatory/tests/service/type_arguments_test.dart
index fe3f925..1c2a6ac 100644
--- a/runtime/observatory/tests/service/type_arguments_test.dart
+++ b/runtime/observatory/tests/service/type_arguments_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 var tests = <IsolateTest>[
diff --git a/runtime/observatory/tests/service/typed_data_test.dart b/runtime/observatory/tests/service/typed_data_test.dart
index 1459af5..d96583a 100644
--- a/runtime/observatory/tests/service/typed_data_test.dart
+++ b/runtime/observatory/tests/service/typed_data_test.dart
@@ -6,7 +6,7 @@
 
 import 'dart:typed_data';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 var int8List;
diff --git a/runtime/observatory/tests/service/udp_socket_service_test.dart b/runtime/observatory/tests/service/udp_socket_service_test.dart
index 01b88d3..e49aa97 100644
--- a/runtime/observatory/tests/service/udp_socket_service_test.dart
+++ b/runtime/observatory/tests/service/udp_socket_service_test.dart
@@ -6,7 +6,7 @@
 import 'dart:convert';
 import 'dart:io' as io;
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 Future setupUDP() async {
diff --git a/runtime/observatory/tests/service/verify_http_timeline_test.dart b/runtime/observatory/tests/service/verify_http_timeline_test.dart
index f7809c8..a555b11 100644
--- a/runtime/observatory/tests/service/verify_http_timeline_test.dart
+++ b/runtime/observatory/tests/service/verify_http_timeline_test.dart
@@ -4,11 +4,11 @@
 // VMOptions=--timeline_streams=Dart
 
 import 'dart:async';
-import 'dart:developer';
 import 'dart:io';
 import 'dart:math';
+import 'package:expect/expect.dart';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 
 import 'test_helper.dart';
 
@@ -80,8 +80,8 @@
 
 Future<void> testMain() async {
   // Ensure there's a chance some requests will be interrupted.
-  expect(maxRequestDelayMs > serverShutdownDelayMs, isTrue);
-  expect(maxResponseDelayMs < serverShutdownDelayMs, isTrue);
+  Expect.isTrue(maxRequestDelayMs > serverShutdownDelayMs);
+  Expect.isTrue(maxResponseDelayMs < serverShutdownDelayMs);
 
   final server = await startServer();
   HttpClient.enableTimelineLogging = true;
diff --git a/runtime/observatory/tests/service/vm_test.dart b/runtime/observatory/tests/service/vm_test.dart
index 55b060a..862e54f 100644
--- a/runtime/observatory/tests/service/vm_test.dart
+++ b/runtime/observatory/tests/service/vm_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 var tests = <IsolateTest>[
diff --git a/runtime/observatory/tests/service/vm_timeline_events_test.dart b/runtime/observatory/tests/service/vm_timeline_events_test.dart
index 9586771..1b77ed1 100644
--- a/runtime/observatory/tests/service/vm_timeline_events_test.dart
+++ b/runtime/observatory/tests/service/vm_timeline_events_test.dart
@@ -5,7 +5,7 @@
 import 'dart:async';
 import 'dart:developer';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/vm_timeline_flags_test.dart b/runtime/observatory/tests/service/vm_timeline_flags_test.dart
index 5f5365f..32c42b0 100644
--- a/runtime/observatory/tests/service/vm_timeline_flags_test.dart
+++ b/runtime/observatory/tests/service/vm_timeline_flags_test.dart
@@ -4,7 +4,7 @@
 
 import 'dart:developer';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/service/weak_properties_test.dart b/runtime/observatory/tests/service/weak_properties_test.dart
index e9ba05f..bc08b35 100644
--- a/runtime/observatory/tests/service/weak_properties_test.dart
+++ b/runtime/observatory/tests/service/weak_properties_test.dart
@@ -6,7 +6,7 @@
 
 import 'dart:mirrors';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'test_helper.dart';
 
 class Foo {}
diff --git a/runtime/observatory/tests/service/yield_positions_with_finally_test.dart b/runtime/observatory/tests/service/yield_positions_with_finally_test.dart
index af9643b..9a462b5 100644
--- a/runtime/observatory/tests/service/yield_positions_with_finally_test.dart
+++ b/runtime/observatory/tests/service/yield_positions_with_finally_test.dart
@@ -3,7 +3,7 @@
 // BSD-style license that can be found in the LICENSE file.
 import 'dart:developer';
 import 'package:observatory/service_io.dart';
-import 'package:unittest/unittest.dart';
+import 'package:test/test.dart';
 import 'service_test_common.dart';
 import 'test_helper.dart';
 
diff --git a/runtime/observatory/tests/ui/retainingPath.dart b/runtime/observatory/tests/ui/retainingPath.dart
index 119998d..0a2c30f 100644
--- a/runtime/observatory/tests/ui/retainingPath.dart
+++ b/runtime/observatory/tests/ui/retainingPath.dart
@@ -11,7 +11,7 @@
 }
 
 main() {
-  var list = new List<Foo>(10);
+  var list = new List<Foo>.filled(10, null);
   list[5] = new Foo(42.toString(), new Foo(87.toString(), 17.toString()));
   while (true) {}
 }
diff --git a/runtime/platform/atomic.h b/runtime/platform/atomic.h
index 5fb1d45..7a966f5 100644
--- a/runtime/platform/atomic.h
+++ b/runtime/platform/atomic.h
@@ -7,13 +7,10 @@
 
 #include <atomic>
 
-#include "platform/allocation.h"
-#include "platform/globals.h"
-
 namespace dart {
 
 // Like std::atomic, but operations default to relaxed ordering instead of
-// acquire-release ordering.
+// sequential consistency.
 template <typename T>
 class RelaxedAtomic {
  public:
@@ -21,29 +18,37 @@
   constexpr RelaxedAtomic(T arg) : value_(arg) {}           // NOLINT
   RelaxedAtomic(const RelaxedAtomic& arg) : value_(arg) {}  // NOLINT
 
-  T load() const { return value_.load(std::memory_order_relaxed); }
-  void store(T arg) { value_.store(arg, std::memory_order_relaxed); }
-
-  T fetch_add(T arg) {
-    return value_.fetch_add(arg, std::memory_order_relaxed);
+  T load(std::memory_order order = std::memory_order_relaxed) const {
+    return value_.load(order);
   }
-  T fetch_sub(T arg) {
-    return value_.fetch_sub(arg, std::memory_order_relaxed);
-  }
-  T fetch_or(T arg) { return value_.fetch_or(arg, std::memory_order_relaxed); }
-  T fetch_and(T arg) {
-    return value_.fetch_and(arg, std::memory_order_relaxed);
+  void store(T arg, std::memory_order order = std::memory_order_relaxed) {
+    value_.store(arg, order);
   }
 
-  bool compare_exchange_weak(T& expected, T desired) {  // NOLINT
-    return value_.compare_exchange_weak(expected, desired,
-                                        std::memory_order_relaxed,
-                                        std::memory_order_relaxed);
+  T fetch_add(T arg, std::memory_order order = std::memory_order_relaxed) {
+    return value_.fetch_add(arg, order);
   }
-  bool compare_exchange_strong(T& expected, T desired) {  // NOLINT
-    return value_.compare_exchange_strong(expected, desired,
-                                          std::memory_order_relaxed,
-                                          std::memory_order_relaxed);
+  T fetch_sub(T arg, std::memory_order order = std::memory_order_relaxed) {
+    return value_.fetch_sub(arg, order);
+  }
+  T fetch_or(T arg, std::memory_order order = std::memory_order_relaxed) {
+    return value_.fetch_or(arg, order);
+  }
+  T fetch_and(T arg, std::memory_order order = std::memory_order_relaxed) {
+    return value_.fetch_and(arg, order);
+  }
+
+  bool compare_exchange_weak(
+      T& expected,  // NOLINT
+      T desired,
+      std::memory_order order = std::memory_order_relaxed) {
+    return value_.compare_exchange_weak(expected, desired, order, order);
+  }
+  bool compare_exchange_strong(
+      T& expected,  // NOLINT
+      T desired,
+      std::memory_order order = std::memory_order_relaxed) {
+    return value_.compare_exchange_strong(expected, desired, order, order);
   }
 
   operator T() const { return load(); }
@@ -63,6 +68,59 @@
   std::atomic<T> value_;
 };
 
+// Like std::atomic, but operations default to acquire for load, release for
+// stores, and acquire-release for read-and-updates.
+template <typename T>
+class AcqRelAtomic {
+ public:
+  constexpr AcqRelAtomic() : value_() {}
+  constexpr AcqRelAtomic(T arg) : value_(arg) {}  // NOLINT
+  AcqRelAtomic(const AcqRelAtomic& arg) = delete;
+
+  T load(std::memory_order order = std::memory_order_acquire) const {
+    return value_.load(order);
+  }
+  void store(T arg, std::memory_order order = std::memory_order_release) {
+    value_.store(arg, order);
+  }
+
+  T fetch_add(T arg, std::memory_order order = std::memory_order_acq_rel) {
+    return value_.fetch_add(arg, order);
+  }
+  T fetch_sub(T arg, std::memory_order order = std::memory_order_acq_rel) {
+    return value_.fetch_sub(arg, order);
+  }
+  T fetch_or(T arg, std::memory_order order = std::memory_order_acq_rel) {
+    return value_.fetch_or(arg, order);
+  }
+  T fetch_and(T arg, std::memory_order order = std::memory_order_acq_rel) {
+    return value_.fetch_and(arg, order);
+  }
+
+  bool compare_exchange_weak(
+      T& expected,  // NOLINT
+      T desired,
+      std::memory_order order = std::memory_order_acq_rel) {
+    return value_.compare_exchange_weak(expected, desired, order, order);
+  }
+  bool compare_exchange_strong(
+      T& expected,  // NOLINT
+      T desired,
+      std::memory_order order = std::memory_order_acq_rel) {
+    return value_.compare_exchange_strong(expected, desired, order, order);
+  }
+
+  // Require explicit loads and stores.
+  operator T() const = delete;
+  T operator=(T arg) = delete;
+  T operator=(const AcqRelAtomic& arg) = delete;
+  T operator+=(T arg) = delete;
+  T operator-=(T arg) = delete;
+
+ private:
+  std::atomic<T> value_;
+};
+
 }  // namespace dart
 
 #endif  // RUNTIME_PLATFORM_ATOMIC_H_
diff --git a/runtime/tests/vm/dart/causal_stacks/utils.dart b/runtime/tests/vm/dart/causal_stacks/utils.dart
index 6501440..50d9527 100644
--- a/runtime/tests/vm/dart/causal_stacks/utils.dart
+++ b/runtime/tests/vm/dart/causal_stacks/utils.dart
@@ -647,7 +647,7 @@
             r'^#26     Future._completeError ',
             r'^#27     _AsyncAwaitCompleter.completeError ',
             r'^#28     allYield ',
-            r'^#29     _asyncErrorWrapperHelper.<anonymous closure> ',
+            r'^#29     _asyncErrorWrapperHelper.errorCallback ',
             r'^#30     _RootZone.runBinary ',
             r'^#31     _FutureListener.handleError ',
             r'^#32     Future._propagateToListeners.handleError ',
@@ -655,7 +655,7 @@
             r'^#34     Future._completeError ',
             r'^#35     _AsyncAwaitCompleter.completeError ',
             r'^#36     allYield2 ',
-            r'^#37     _asyncErrorWrapperHelper.<anonymous closure> ',
+            r'^#37     _asyncErrorWrapperHelper.errorCallback ',
             r'^#38     _RootZone.runBinary ',
             r'^#39     _FutureListener.handleError ',
             r'^#40     Future._propagateToListeners.handleError ',
@@ -691,7 +691,7 @@
             r'^#19     _AsyncAwaitCompleter.complete ',
             r'^#20     _completeOnAsyncReturn ',
             r'^#21     doTestAwait ',
-            r'^#22     _asyncErrorWrapperHelper.<anonymous closure> ',
+            r'^#22     _asyncErrorWrapperHelper.errorCallback ',
             r'^#23     _RootZone.runBinary ',
             r'^#24     _FutureListener.handleError ',
             r'^#25     Future._propagateToListeners.handleError ',
@@ -699,7 +699,7 @@
             r'^#27     Future._completeError ',
             r'^#28     _AsyncAwaitCompleter.completeError ',
             r'^#29     noYields ',
-            r'^#30     _asyncErrorWrapperHelper.<anonymous closure> ',
+            r'^#30     _asyncErrorWrapperHelper.errorCallback ',
             r'^#31     _RootZone.runBinary ',
             r'^#32     _FutureListener.handleError ',
             r'^#33     Future._propagateToListeners.handleError ',
@@ -707,7 +707,7 @@
             r'^#35     Future._completeError ',
             r'^#36     _AsyncAwaitCompleter.completeError ',
             r'^#37     noYields2 ',
-            r'^#38     _asyncErrorWrapperHelper.<anonymous closure> ',
+            r'^#38     _asyncErrorWrapperHelper.errorCallback ',
             r'^#39     _RootZone.runBinary ',
             r'^#40     _FutureListener.handleError ',
             r'^#41     Future._propagateToListeners.handleError ',
@@ -737,7 +737,7 @@
             r'^#19     _AsyncAwaitCompleter.complete ',
             r'^#20     _completeOnAsyncReturn ',
             r'^#21     doTestAwaitThen ',
-            r'^#22     _asyncErrorWrapperHelper.<anonymous closure> ',
+            r'^#22     _asyncErrorWrapperHelper.errorCallback ',
             r'^#23     _RootZone.runBinary ',
             r'^#24     _FutureListener.handleError ',
             r'^#25     Future._propagateToListeners.handleError ',
@@ -745,7 +745,7 @@
             r'^#27     Future._completeError ',
             r'^#28     _AsyncAwaitCompleter.completeError ',
             r'^#29     noYields ',
-            r'^#30     _asyncErrorWrapperHelper.<anonymous closure> ',
+            r'^#30     _asyncErrorWrapperHelper.errorCallback ',
             r'^#31     _RootZone.runBinary ',
             r'^#32     _FutureListener.handleError ',
             r'^#33     Future._propagateToListeners.handleError ',
@@ -753,7 +753,7 @@
             r'^#35     Future._completeError ',
             r'^#36     _AsyncAwaitCompleter.completeError ',
             r'^#37     noYields2 ',
-            r'^#38     _asyncErrorWrapperHelper.<anonymous closure> ',
+            r'^#38     _asyncErrorWrapperHelper.errorCallback ',
             r'^#39     _RootZone.runBinary ',
             r'^#40     _FutureListener.handleError ',
             r'^#41     Future._propagateToListeners.handleError ',
diff --git a/runtime/tests/vm/dart/regress_39747_test.dart b/runtime/tests/vm/dart/regress_39747_test.dart
index 605198c..0d3d1f7 100644
--- a/runtime/tests/vm/dart/regress_39747_test.dart
+++ b/runtime/tests/vm/dart/regress_39747_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart=2.7
+
 // Regression test for https://github.com/dart-lang/sdk/issues/39747.
 // Verifies that compiler doesn't crash on a particular piece of code.
 
diff --git a/runtime/tests/vm/dart/regress_39767_test.dart b/runtime/tests/vm/dart/regress_39767_test.dart
index 273023c..24e9b13 100644
--- a/runtime/tests/vm/dart/regress_39767_test.dart
+++ b/runtime/tests/vm/dart/regress_39767_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart=2.7
+
 // VMOptions=--optimization_counter_threshold=1 --deterministic
 
 // Regression test for https://github.com/dart-lang/sdk/issues/39767.
diff --git a/runtime/tests/vm/dart/v8_snapshot_profile_writer_test.dart b/runtime/tests/vm/dart/v8_snapshot_profile_writer_test.dart
index 0f1ff19..b0584ca 100644
--- a/runtime/tests/vm/dart/v8_snapshot_profile_writer_test.dart
+++ b/runtime/tests/vm/dart/v8_snapshot_profile_writer_test.dart
@@ -40,6 +40,11 @@
       if (stripFlag) '--strip',
       useBare ? '--use-bare-instructions' : '--no-use-bare-instructions',
       "--write-v8-snapshot-profile-to=$profilePath",
+      // Regression test for dartbug.com/41149. We don't assume forced
+      // disassembler support in Product mode.
+      if (!const bool.fromEnvironment('dart.vm.product'))
+        '--disassemble',
+      '--ignore-unrecognized-flags',
       dillPath,
     ];
 
diff --git a/runtime/vm/class_table.cc b/runtime/vm/class_table.cc
index 261728a..d19460a 100644
--- a/runtime/vm/class_table.cc
+++ b/runtime/vm/class_table.cc
@@ -27,28 +27,27 @@
     ASSERT(kInitialCapacity >= kNumPredefinedCids);
     capacity_ = kInitialCapacity;
     // Note that [calloc] will zero-initialize the memory.
-    table_ = reinterpret_cast<RelaxedAtomic<intptr_t>*>(
-        calloc(capacity_, sizeof(RelaxedAtomic<intptr_t>)));
+    table_.store(reinterpret_cast<RelaxedAtomic<intptr_t>*>(
+        calloc(capacity_, sizeof(RelaxedAtomic<intptr_t>))));
   } else {
     // Duplicate the class table from the VM isolate.
     auto vm_shared_class_table = Dart::vm_isolate()->group()->class_table();
     capacity_ = vm_shared_class_table->capacity_;
     // Note that [calloc] will zero-initialize the memory.
-    table_ = reinterpret_cast<RelaxedAtomic<intptr_t>*>(
+    RelaxedAtomic<intptr_t>* table = reinterpret_cast<RelaxedAtomic<intptr_t>*>(
         calloc(capacity_, sizeof(RelaxedAtomic<intptr_t>)));
     // The following cids don't have a corresponding class object in Dart code.
     // We therefore need to initialize them eagerly.
     for (intptr_t i = kObjectCid; i < kInstanceCid; i++) {
-      table_[i] = vm_shared_class_table->SizeAt(i);
+      table[i] = vm_shared_class_table->SizeAt(i);
     }
-    table_[kTypeArgumentsCid] =
-        vm_shared_class_table->SizeAt(kTypeArgumentsCid);
-    table_[kFreeListElement] = vm_shared_class_table->SizeAt(kFreeListElement);
-    table_[kForwardingCorpse] =
-        vm_shared_class_table->SizeAt(kForwardingCorpse);
-    table_[kDynamicCid] = vm_shared_class_table->SizeAt(kDynamicCid);
-    table_[kVoidCid] = vm_shared_class_table->SizeAt(kVoidCid);
-    table_[kNeverCid] = vm_shared_class_table->SizeAt(kNeverCid);
+    table[kTypeArgumentsCid] = vm_shared_class_table->SizeAt(kTypeArgumentsCid);
+    table[kFreeListElement] = vm_shared_class_table->SizeAt(kFreeListElement);
+    table[kForwardingCorpse] = vm_shared_class_table->SizeAt(kForwardingCorpse);
+    table[kDynamicCid] = vm_shared_class_table->SizeAt(kDynamicCid);
+    table[kVoidCid] = vm_shared_class_table->SizeAt(kVoidCid);
+    table[kNeverCid] = vm_shared_class_table->SizeAt(kNeverCid);
+    table_.store(table);
   }
 #if defined(SUPPORT_UNBOXED_INSTANCE_FIELDS)
   // Note that [calloc] will zero-initialize the memory.
@@ -57,8 +56,8 @@
 #endif  // defined(SUPPORT_UNBOXED_INSTANCE_FIELDS)
 #ifndef PRODUCT
   // Note that [calloc] will zero-initialize the memory.
-  trace_allocation_table_ =
-      static_cast<uint8_t*>(calloc(capacity_, sizeof(uint8_t)));
+  trace_allocation_table_.store(
+      static_cast<uint8_t*>(calloc(capacity_, sizeof(uint8_t))));
 #endif  // !PRODUCT
 }
 SharedClassTable::~SharedClassTable() {
@@ -66,10 +65,10 @@
     FreeOldTables();
     delete old_tables_;
   }
-  free(table_);
+  free(table_.load());
   free(unboxed_fields_map_);
 
-  NOT_IN_PRODUCT(free(trace_allocation_table_));
+  NOT_IN_PRODUCT(free(trace_allocation_table_.load()));
 }
 
 ClassTable::ClassTable(SharedClassTable* shared_class_table)
@@ -82,24 +81,26 @@
     ASSERT(kInitialCapacity >= kNumPredefinedCids);
     capacity_ = kInitialCapacity;
     // Note that [calloc] will zero-initialize the memory.
-    table_ = static_cast<RawClass**>(calloc(capacity_, sizeof(RawClass*)));
+    table_.store(static_cast<RawClass**>(calloc(capacity_, sizeof(RawClass*))));
   } else {
     // Duplicate the class table from the VM isolate.
     ClassTable* vm_class_table = Dart::vm_isolate()->class_table();
     capacity_ = vm_class_table->capacity_;
     // Note that [calloc] will zero-initialize the memory.
-    table_ = static_cast<RawClass**>(calloc(capacity_, sizeof(RawClass*)));
+    RawClass** table =
+        static_cast<RawClass**>(calloc(capacity_, sizeof(RawClass*)));
     // The following cids don't have a corresponding class object in Dart code.
     // We therefore need to initialize them eagerly.
     for (intptr_t i = kObjectCid; i < kInstanceCid; i++) {
-      table_[i] = vm_class_table->At(i);
+      table[i] = vm_class_table->At(i);
     }
-    table_[kTypeArgumentsCid] = vm_class_table->At(kTypeArgumentsCid);
-    table_[kFreeListElement] = vm_class_table->At(kFreeListElement);
-    table_[kForwardingCorpse] = vm_class_table->At(kForwardingCorpse);
-    table_[kDynamicCid] = vm_class_table->At(kDynamicCid);
-    table_[kVoidCid] = vm_class_table->At(kVoidCid);
-    table_[kNeverCid] = vm_class_table->At(kNeverCid);
+    table[kTypeArgumentsCid] = vm_class_table->At(kTypeArgumentsCid);
+    table[kFreeListElement] = vm_class_table->At(kFreeListElement);
+    table[kForwardingCorpse] = vm_class_table->At(kForwardingCorpse);
+    table[kDynamicCid] = vm_class_table->At(kDynamicCid);
+    table[kVoidCid] = vm_class_table->At(kVoidCid);
+    table[kNeverCid] = vm_class_table->At(kNeverCid);
+    table_.store(table);
   }
 }
 
@@ -108,7 +109,7 @@
     FreeOldTables();
     delete old_class_tables_;
   }
-  free(table_);
+  free(table_.load());
 }
 
 void ClassTable::AddOldTable(RawClass** old_class_table) {
@@ -149,8 +150,8 @@
 
   if (index != kIllegalCid) {
     ASSERT(index > 0 && index < kNumPredefinedCids && index < top_);
-    ASSERT(table_[index] == nullptr);
-    table_[index] = cls.raw();
+    ASSERT(table_.load()[index] == nullptr);
+    table_.load()[index] = cls.raw();
   } else {
     if (top_ == capacity_) {
       const intptr_t new_capacity = capacity_ + kCapacityIncrement;
@@ -158,7 +159,7 @@
     }
     ASSERT(top_ < capacity_);
     cls.set_id(top_);
-    table_[top_] = cls.raw();
+    table_.load()[top_] = cls.raw();
     top_++;  // Increment next index.
   }
   ASSERT(expected_cid == cls.id());
@@ -183,7 +184,7 @@
       Grow(new_capacity);
     }
     ASSERT(top_ < capacity_);
-    table_[top_] = size;
+    table_.load()[top_] = size;
     return top_++;  // Increment next index.
   }
 }
@@ -198,7 +199,7 @@
     Grow(new_capacity);
   }
 
-  ASSERT(table_[index] == nullptr);
+  ASSERT(table_.load()[index] == nullptr);
   if (index >= top_) {
     top_ = index + 1;
   }
@@ -210,13 +211,14 @@
 void ClassTable::Grow(intptr_t new_capacity) {
   ASSERT(new_capacity > capacity_);
 
+  auto old_table = table_.load();
   auto new_table = static_cast<RawClass**>(
       malloc(new_capacity * sizeof(RawClass*)));  // NOLINT
-  memmove(new_table, table_, capacity_ * sizeof(RawClass*));
+  memmove(new_table, old_table, capacity_ * sizeof(RawClass*));
   memset(new_table + capacity_, 0,
          (new_capacity - capacity_) * sizeof(RawClass*));
-  old_class_tables_->Add(table_);
-  table_ = new_table;  // TODO(koda): This should use atomics.
+  old_class_tables_->Add(old_table);
+  table_.store(new_table);
 
   capacity_ = new_capacity;
 }
@@ -230,7 +232,7 @@
     Grow(new_capacity);
   }
 
-  ASSERT(table_[index] == 0);
+  ASSERT(table_.load()[index] == 0);
   if (index >= top_) {
     top_ = index + 1;
   }
@@ -239,27 +241,28 @@
 void SharedClassTable::Grow(intptr_t new_capacity) {
   ASSERT(new_capacity >= capacity_);
 
+  RelaxedAtomic<intptr_t>* old_table = table_.load();
   RelaxedAtomic<intptr_t>* new_table =
       reinterpret_cast<RelaxedAtomic<intptr_t>*>(
           malloc(new_capacity * sizeof(RelaxedAtomic<intptr_t>)));  // NOLINT
 
-  memmove(new_table, table_, capacity_ * sizeof(intptr_t));
+  memmove(new_table, old_table, capacity_ * sizeof(intptr_t));
   memset(new_table + capacity_, 0,
          (new_capacity - capacity_) * sizeof(intptr_t));
 
 #if !defined(PRODUCT)
+  auto old_trace_table = trace_allocation_table_.load();
   auto new_trace_table =
       static_cast<uint8_t*>(malloc(new_capacity * sizeof(uint8_t)));  // NOLINT
-  memmove(new_trace_table, trace_allocation_table_,
-          capacity_ * sizeof(uint8_t));
+  memmove(new_trace_table, old_trace_table, capacity_ * sizeof(uint8_t));
   memset(new_trace_table + capacity_, 0,
          (new_capacity - capacity_) * sizeof(uint8_t));
 #endif
 
-  old_tables_->Add(table_);
-  table_ = new_table;  // TODO(koda): This should use atomics.
-  NOT_IN_PRODUCT(old_tables_->Add(trace_allocation_table_));
-  NOT_IN_PRODUCT(trace_allocation_table_ = new_trace_table);
+  old_tables_->Add(old_table);
+  table_.store(new_table);
+  NOT_IN_PRODUCT(old_tables_->Add(old_trace_table));
+  NOT_IN_PRODUCT(trace_allocation_table_.store(new_trace_table));
 
 #if defined(SUPPORT_UNBOXED_INSTANCE_FIELDS)
   auto new_unboxed_fields_map = static_cast<UnboxedFieldBitmap*>(
@@ -277,11 +280,11 @@
 
 void ClassTable::Unregister(intptr_t index) {
   shared_class_table_->Unregister(index);
-  table_[index] = nullptr;
+  table_.load()[index] = nullptr;
 }
 
 void SharedClassTable::Unregister(intptr_t index) {
-  table_[index] = 0;
+  table_.load()[index] = 0;
 #if defined(SUPPORT_UNBOXED_INSTANCE_FIELDS)
   unboxed_fields_map_[index].Reset();
 #endif  // defined(SUPPORT_UNBOXED_INSTANCE_FIELDS)
@@ -291,9 +294,10 @@
   ASSERT(Thread::Current()->IsAtSafepoint());
   const intptr_t num_cids = NumCids();
   std::unique_ptr<RawClass*[]> cls_by_old_cid(new RawClass*[num_cids]);
-  memmove(cls_by_old_cid.get(), table_, sizeof(RawClass*) * num_cids);
+  auto* table = table_.load();
+  memmove(cls_by_old_cid.get(), table, sizeof(RawClass*) * num_cids);
   for (intptr_t i = 0; i < num_cids; i++) {
-    table_[old_to_new_cid[i]] = cls_by_old_cid[i];
+    table[old_to_new_cid[i]] = cls_by_old_cid[i];
   }
 }
 
@@ -301,11 +305,12 @@
   ASSERT(Thread::Current()->IsAtSafepoint());
   const intptr_t num_cids = NumCids();
   std::unique_ptr<intptr_t[]> size_by_old_cid(new intptr_t[num_cids]);
+  auto* table = table_.load();
   for (intptr_t i = 0; i < num_cids; i++) {
-    size_by_old_cid[i] = table_[i];
+    size_by_old_cid[i] = table[i];
   }
   for (intptr_t i = 0; i < num_cids; i++) {
-    table_[old_to_new_cid[i]] = size_by_old_cid[i];
+    table[old_to_new_cid[i]] = size_by_old_cid[i];
   }
 
 #if defined(SUPPORT_UNBOXED_INSTANCE_FIELDS)
@@ -323,8 +328,11 @@
 void ClassTable::VisitObjectPointers(ObjectPointerVisitor* visitor) {
   ASSERT(visitor != NULL);
   visitor->set_gc_root_type("class table");
-  for (intptr_t i = 0; i < top_; i++) {
-    visitor->VisitPointer(reinterpret_cast<RawObject**>(&(table_[i])));
+  if (top_ != 0) {
+    auto* table = table_.load();
+    RawObject** from = reinterpret_cast<RawObject**>(&table[0]);
+    RawObject** to = reinterpret_cast<RawObject**>(&table[top_ - 1]);
+    visitor->VisitPointers(from, to);
   }
   visitor->clear_gc_root_type();
 }
@@ -376,7 +384,7 @@
   const intptr_t size =
       raw_cls == nullptr ? 0 : Class::host_instance_size(raw_cls);
   shared_class_table_->SetSizeAt(index, size);
-  table_[index] = raw_cls;
+  table_.load()[index] = raw_cls;
 }
 
 #ifndef PRODUCT
diff --git a/runtime/vm/class_table.h b/runtime/vm/class_table.h
index 3498946..eb5a431 100644
--- a/runtime/vm/class_table.h
+++ b/runtime/vm/class_table.h
@@ -71,13 +71,13 @@
   // Thread-safe.
   intptr_t SizeAt(intptr_t index) const {
     ASSERT(IsValidIndex(index));
-    return table_[index];
+    return table_.load()[index];
   }
 
   bool HasValidClassAt(intptr_t index) const {
     ASSERT(IsValidIndex(index));
-    ASSERT(table_[index] >= 0);
-    return table_[index] != 0;
+    ASSERT(table_.load()[index] >= 0);
+    return table_.load()[index] != 0;
   }
 
   void SetSizeAt(intptr_t index, intptr_t size) {
@@ -86,7 +86,7 @@
     // Ensure we never change size for a given cid from one non-zero size to
     // another non-zero size.
     intptr_t old_size = 0;
-    if (!table_[index].compare_exchange_strong(old_size, size)) {
+    if (!table_.load()[index].compare_exchange_strong(old_size, size)) {
       RELEASE_ASSERT(old_size == size);
     }
   }
@@ -119,12 +119,12 @@
   void SetTraceAllocationFor(intptr_t cid, bool trace) {
     ASSERT(cid > 0);
     ASSERT(cid < top_);
-    trace_allocation_table_[cid] = trace ? 1 : 0;
+    trace_allocation_table_.load()[cid] = trace ? 1 : 0;
   }
   bool TraceAllocationFor(intptr_t cid) {
     ASSERT(cid > 0);
     ASSERT(cid < top_);
-    return trace_allocation_table_[cid] != 0;
+    return trace_allocation_table_.load()[cid] != 0;
   }
 #endif  // !defined(PRODUCT)
 
@@ -134,14 +134,14 @@
     const intptr_t num_cids = NumCids();
     const intptr_t bytes = sizeof(intptr_t) * num_cids;
     auto size_table = static_cast<intptr_t*>(malloc(bytes));
-    memmove(size_table, table_, sizeof(intptr_t) * num_cids);
+    memmove(size_table, table_.load(), sizeof(intptr_t) * num_cids);
     *copy_num_cids = num_cids;
     *copy = size_table;
   }
 
   void ResetBeforeHotReload() {
     // The [IsolateReloadContext] is now source-of-truth for GC.
-    memset(table_, 0, sizeof(intptr_t) * top_);
+    memset(table_.load(), 0, sizeof(intptr_t) * top_);
   }
 
   void ResetAfterHotReload(intptr_t* old_table,
@@ -151,7 +151,7 @@
     // return, so we restore size information for all classes.
     if (is_rollback) {
       SetNumCids(num_old_cids);
-      memmove(table_, old_table, sizeof(intptr_t) * num_old_cids);
+      memmove(table_.load(), old_table, sizeof(intptr_t) * num_old_cids);
     }
 
     // Can't free this table immediately as another thread (e.g., concurrent
@@ -207,7 +207,7 @@
 #ifndef PRODUCT
   // Copy-on-write is used for trace_allocation_table_, with old copies stored
   // in old_tables_.
-  uint8_t* trace_allocation_table_ = nullptr;
+  AcqRelAtomic<uint8_t*> trace_allocation_table_ = {nullptr};
 #endif  // !PRODUCT
 
   void AddOldTable(intptr_t* old_table);
@@ -219,7 +219,7 @@
 
   // Copy-on-write is used for table_, with old copies stored in old_tables_.
   // Maps the cid to the instance size.
-  RelaxedAtomic<intptr_t>* table_ = nullptr;
+  AcqRelAtomic<RelaxedAtomic<intptr_t>*> table_ = {nullptr};
   MallocGrowableArray<void*>* old_tables_;
 
   IsolateGroupReloadContext* reload_context_ = nullptr;
@@ -247,7 +247,7 @@
     const intptr_t num_cids = NumCids();
     const intptr_t bytes = sizeof(RawClass*) * num_cids;
     auto class_table = static_cast<RawClass**>(malloc(bytes));
-    memmove(class_table, table_, sizeof(RawClass*) * num_cids);
+    memmove(class_table, table_.load(), sizeof(RawClass*) * num_cids);
     *copy_num_cids = num_cids;
     *copy = class_table;
   }
@@ -267,7 +267,7 @@
     // return, so we restore size information for all classes.
     if (is_rollback) {
       SetNumCids(num_old_cids);
-      memmove(table_, old_table, sizeof(RawClass*) * num_old_cids);
+      memmove(table_.load(), old_table, sizeof(RawClass*) * num_old_cids);
     } else {
       CopySizesFromClassObjects();
     }
@@ -282,7 +282,7 @@
   // Thread-safe.
   RawClass* At(intptr_t index) const {
     ASSERT(IsValidIndex(index));
-    return table_[index];
+    return table_.load()[index];
   }
 
   intptr_t SizeAt(intptr_t index) const {
@@ -297,7 +297,7 @@
 
   bool HasValidClassAt(intptr_t index) const {
     ASSERT(IsValidIndex(index));
-    return table_[index] != nullptr;
+    return table_.load()[index] != nullptr;
   }
 
   intptr_t NumCids() const { return shared_class_table_->NumCids(); }
@@ -375,7 +375,7 @@
 
   // Copy-on-write is used for table_, with old copies stored in
   // old_class_tables_.
-  RawClass** table_;
+  AcqRelAtomic<RawClass**> table_;
   MallocGrowableArray<RawClass**>* old_class_tables_;
   SharedClassTable* shared_class_table_;
 
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler.cc b/runtime/vm/compiler/backend/flow_graph_compiler.cc
index 63b0431..95841cb 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler.cc
@@ -2373,7 +2373,8 @@
     // instantiated with a non-nullable type which rejects null.
     // In NNBD weak mode or if type parameter is non-nullable or has
     // undetermined nullability null instance is correctly handled by TTS.
-    if (FLAG_null_safety && (dst_type.IsNullable() || dst_type.IsLegacy())) {
+    if (isolate()->null_safety() &&
+        (dst_type.IsNullable() || dst_type.IsLegacy())) {
       __ CompareObject(TypeTestABI::kInstanceReg, Object::null_object());
       __ BranchIf(EQUAL, done);
     }
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc b/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
index b1bdb6b..deec0f6 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_arm.cc
@@ -310,19 +310,14 @@
     return GenerateSubtype1TestCacheLookup(
         token_pos, type_class, is_instance_lbl, is_not_instance_lbl);
   }
-  // If one type argument only, check if type argument is Object or dynamic.
+  // If one type argument only, check if type argument is a top type.
   if (type_arguments.Length() == 1) {
     const AbstractType& tp_argument =
         AbstractType::ZoneHandle(zone(), type_arguments.TypeAt(0));
-    if (tp_argument.IsType()) {
-      ASSERT(tp_argument.HasTypeClass());
-      // Check if type argument is dynamic, Object, or void.
-      const Type& object_type = Type::Handle(zone(), Type::ObjectType());
-      if (object_type.IsSubtypeOf(tp_argument, Heap::kOld)) {
-        // Instance class test only necessary.
-        return GenerateSubtype1TestCacheLookup(
-            token_pos, type_class, is_instance_lbl, is_not_instance_lbl);
-      }
+    if (tp_argument.IsTopType()) {
+      // Instance class test only necessary.
+      return GenerateSubtype1TestCacheLookup(
+          token_pos, type_class, is_instance_lbl, is_not_instance_lbl);
     }
   }
 
@@ -482,10 +477,12 @@
                    compiler::target::TypeArguments::type_at_offset(
                        type_param.index())));
     // R3: concrete type of type.
-    // Check if type argument is dynamic, Object, or void.
+    // Check if type argument is dynamic, Object?, or void.
     __ CompareObject(R3, Object::dynamic_type());
     __ b(is_instance_lbl, EQ);
-    __ CompareObject(R3, Type::ZoneHandle(zone(), Type::ObjectType()));
+    __ CompareObject(
+        R3, Type::ZoneHandle(
+                zone(), isolate()->object_store()->nullable_object_type()));
     __ b(is_instance_lbl, EQ);
     __ CompareObject(R3, Object::void_type());
     __ b(is_instance_lbl, EQ);
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc b/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
index f4a6885..59c4bb7 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_arm64.cc
@@ -298,18 +298,14 @@
     return GenerateSubtype1TestCacheLookup(
         token_pos, type_class, is_instance_lbl, is_not_instance_lbl);
   }
-  // If one type argument only, check if type argument is Object or dynamic.
+  // If one type argument only, check if type argument is a top type.
   if (type_arguments.Length() == 1) {
     const AbstractType& tp_argument =
         AbstractType::ZoneHandle(zone(), type_arguments.TypeAt(0));
-    if (tp_argument.IsType()) {
-      // Check if type argument is dynamic, Object, or void.
-      const Type& object_type = Type::Handle(zone(), Type::ObjectType());
-      if (object_type.IsSubtypeOf(tp_argument, Heap::kOld)) {
-        // Instance class test only necessary.
-        return GenerateSubtype1TestCacheLookup(
-            token_pos, type_class, is_instance_lbl, is_not_instance_lbl);
-      }
+    if (tp_argument.IsTopType()) {
+      // Instance class test only necessary.
+      return GenerateSubtype1TestCacheLookup(
+          token_pos, type_class, is_instance_lbl, is_not_instance_lbl);
     }
   }
   // Regular subtype test cache involving instance's type arguments.
@@ -463,10 +459,12 @@
     __ LoadFieldFromOffset(R3, kTypeArgumentsReg,
                            TypeArguments::type_at_offset(type_param.index()));
     // R3: concrete type of type.
-    // Check if type argument is dynamic, Object, or void.
+    // Check if type argument is dynamic, Object?, or void.
     __ CompareObject(R3, Object::dynamic_type());
     __ b(is_instance_lbl, EQ);
-    __ CompareObject(R3, Type::ZoneHandle(zone(), Type::ObjectType()));
+    __ CompareObject(
+        R3, Type::ZoneHandle(
+                zone(), isolate()->object_store()->nullable_object_type()));
     __ b(is_instance_lbl, EQ);
     __ CompareObject(R3, Object::void_type());
     __ b(is_instance_lbl, EQ);
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc b/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
index d7fcd3e..e5e0a06 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_ia32.cc
@@ -286,18 +286,14 @@
     return GenerateSubtype1TestCacheLookup(
         token_pos, type_class, is_instance_lbl, is_not_instance_lbl);
   }
-  // If one type argument only, check if type argument is Object or dynamic.
+  // If one type argument only, check if type argument is a top type.
   if (type_arguments.Length() == 1) {
     const AbstractType& tp_argument =
         AbstractType::ZoneHandle(zone(), type_arguments.TypeAt(0));
-    if (tp_argument.IsType()) {
-      // Check if type argument is dynamic, Object, or void.
-      const Type& object_type = Type::Handle(zone(), Type::ObjectType());
-      if (object_type.IsSubtypeOf(tp_argument, Heap::kOld)) {
-        // Instance class test only necessary.
-        return GenerateSubtype1TestCacheLookup(
-            token_pos, type_class, is_instance_lbl, is_not_instance_lbl);
-      }
+    if (tp_argument.IsTopType()) {
+      // Instance class test only necessary.
+      return GenerateSubtype1TestCacheLookup(
+          token_pos, type_class, is_instance_lbl, is_not_instance_lbl);
     }
   }
   // Regular subtype test cache involving instance's type arguments.
@@ -458,10 +454,12 @@
                      kTypeArgumentsReg,
                      TypeArguments::type_at_offset(type_param.index())));
     // EDI: concrete type of type.
-    // Check if type argument is dynamic, Object, or void.
+    // Check if type argument is dynamic, Object?, or void.
     __ CompareObject(EDI, Object::dynamic_type());
     __ j(EQUAL, is_instance_lbl);
-    __ CompareObject(EDI, Type::ZoneHandle(zone(), Type::ObjectType()));
+    __ CompareObject(
+        EDI, Type::ZoneHandle(
+                 zone(), isolate()->object_store()->nullable_object_type()));
     __ j(EQUAL, is_instance_lbl);
     __ CompareObject(EDI, Object::void_type());
     __ j(EQUAL, is_instance_lbl);
diff --git a/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc b/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
index 3f62944..82fdc74 100644
--- a/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
+++ b/runtime/vm/compiler/backend/flow_graph_compiler_x64.cc
@@ -308,19 +308,14 @@
     return GenerateSubtype1TestCacheLookup(
         token_pos, type_class, is_instance_lbl, is_not_instance_lbl);
   }
-  // If one type argument only, check if type argument is Object or dynamic.
+  // If one type argument only, check if type argument is a top type.
   if (type_arguments.Length() == 1) {
     const AbstractType& tp_argument =
         AbstractType::ZoneHandle(zone(), type_arguments.TypeAt(0));
-    if (tp_argument.IsType()) {
-      ASSERT(tp_argument.HasTypeClass());
-      // Check if type argument is dynamic, Object, or void.
-      const Type& object_type = Type::Handle(zone(), Type::ObjectType());
-      if (object_type.IsSubtypeOf(tp_argument, Heap::kOld)) {
-        // Instance class test only necessary.
-        return GenerateSubtype1TestCacheLookup(
-            token_pos, type_class, is_instance_lbl, is_not_instance_lbl);
-      }
+    if (tp_argument.IsTopType()) {
+      // Instance class test only necessary.
+      return GenerateSubtype1TestCacheLookup(
+          token_pos, type_class, is_instance_lbl, is_not_instance_lbl);
     }
   }
 
@@ -486,11 +481,12 @@
                      kTypeArgumentsReg,
                      TypeArguments::type_at_offset(type_param.index())));
     // RDI: Concrete type of type.
-    // Check if type argument is dynamic, Object, or void.
+    // Check if type argument is dynamic, Object?, or void.
     __ CompareObject(RDI, Object::dynamic_type());
     __ j(EQUAL, is_instance_lbl);
-    const Type& object_type = Type::ZoneHandle(zone(), Type::ObjectType());
-    __ CompareObject(RDI, object_type);
+    __ CompareObject(
+        RDI, Type::ZoneHandle(
+                 zone(), isolate()->object_store()->nullable_object_type()));
     __ j(EQUAL, is_instance_lbl);
     __ CompareObject(RDI, Object::void_type());
     __ j(EQUAL, is_instance_lbl);
diff --git a/runtime/vm/compiler/frontend/constant_reader.cc b/runtime/vm/compiler/frontend/constant_reader.cc
index 1136484..23a30d3 100644
--- a/runtime/vm/compiler/frontend/constant_reader.cc
+++ b/runtime/vm/compiler/frontend/constant_reader.cc
@@ -104,6 +104,7 @@
 
 RawInstance* ConstantReader::ReadConstantInternal(intptr_t constant_offset) {
   // Get reader directly into raw bytes of constant table.
+  bool null_safety = H.thread()->isolate()->null_safety();
   KernelReaderHelper reader(Z, &H, script_, H.constants_table(), 0);
   reader.ReadUInt();  // skip variable-sized int for adjusted constant offset
   reader.SetOffset(reader.ReaderOffset() + constant_offset);
@@ -182,8 +183,9 @@
       const auto& list_class =
           Class::Handle(Z, corelib.LookupClassAllowPrivate(Symbols::_List()));
       // Build type from the raw bytes (needs temporary translator).
-      TypeTranslator type_translator(&reader, this, active_class_, true,
-                                     active_class_->RequireLegacyErasure());
+      TypeTranslator type_translator(
+          &reader, this, active_class_, true,
+          active_class_->RequireLegacyErasure(null_safety));
       auto& type_arguments =
           TypeArguments::Handle(Z, TypeArguments::New(1, Heap::kOld));
       AbstractType& type = type_translator.BuildType();
@@ -224,8 +226,9 @@
       ASSERT(klass.is_enum_class() || klass.is_const());
       instance = Instance::New(klass, Heap::kOld);
       // Build type from the raw bytes (needs temporary translator).
-      TypeTranslator type_translator(&reader, this, active_class_, true,
-                                     active_class_->RequireLegacyErasure());
+      TypeTranslator type_translator(
+          &reader, this, active_class_, true,
+          active_class_->RequireLegacyErasure(null_safety));
       const intptr_t number_of_type_arguments = reader.ReadUInt();
       if (klass.NumTypeArguments() > 0) {
         auto& type_arguments = TypeArguments::Handle(
@@ -267,8 +270,9 @@
       ASSERT(!constant.IsNull());
 
       // Build type from the raw bytes (needs temporary translator).
-      TypeTranslator type_translator(&reader, this, active_class_, true,
-                                     active_class_->RequireLegacyErasure());
+      TypeTranslator type_translator(
+          &reader, this, active_class_, true,
+          active_class_->RequireLegacyErasure(null_safety));
       const intptr_t number_of_type_arguments = reader.ReadUInt();
       ASSERT(number_of_type_arguments > 0);
       auto& type_arguments = TypeArguments::Handle(
@@ -301,8 +305,9 @@
     }
     case kTypeLiteralConstant: {
       // Build type from the raw bytes (needs temporary translator).
-      TypeTranslator type_translator(&reader, this, active_class_, true,
-                                     active_class_->RequireLegacyErasure());
+      TypeTranslator type_translator(
+          &reader, this, active_class_, true,
+          active_class_->RequireLegacyErasure(null_safety));
       instance = type_translator.BuildType().raw();
       break;
     }
diff --git a/runtime/vm/compiler/frontend/kernel_translation_helper.cc b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
index 6a8b7cd..4b59c97 100644
--- a/runtime/vm/compiler/frontend/kernel_translation_helper.cc
+++ b/runtime/vm/compiler/frontend/kernel_translation_helper.cc
@@ -2932,6 +2932,7 @@
       BuildTypeArguments(length);  // read type arguments.
   result_ =
       Type::New(klass, type_arguments, TokenPosition::kNoSource, nullability);
+  result_ = result_.NormalizeFutureOrType(Heap::kOld);
   if (finalize_) {
     ASSERT(active_class_->klass != NULL);
     result_ = ClassFinalizer::FinalizeType(*active_class_->klass, result_);
diff --git a/runtime/vm/compiler/frontend/kernel_translation_helper.h b/runtime/vm/compiler/frontend/kernel_translation_helper.h
index 2de2002..4597fb6 100644
--- a/runtime/vm/compiler/frontend/kernel_translation_helper.h
+++ b/runtime/vm/compiler/frontend/kernel_translation_helper.h
@@ -1294,8 +1294,8 @@
     return member->IsFactory();
   }
 
-  bool RequireLegacyErasure() const {
-    return klass != nullptr && !FLAG_null_safety &&
+  bool RequireLegacyErasure(bool null_safety) const {
+    return klass != nullptr && !null_safety &&
            Library::Handle(klass->library()).nnbd_compiled_mode() ==
                NNBDCompiledMode::kAgnostic;
   }
diff --git a/runtime/vm/compiler/frontend/prologue_builder.cc b/runtime/vm/compiler/frontend/prologue_builder.cc
index d3367e4..71fff65 100644
--- a/runtime/vm/compiler/frontend/prologue_builder.cc
+++ b/runtime/vm/compiler/frontend/prologue_builder.cc
@@ -291,6 +291,7 @@
   } else {
     ASSERT(num_opt_named_params > 0);
 
+    bool null_safety = Isolate::Current()->null_safety();
     const intptr_t first_name_offset =
         compiler::target::ArgumentsDescriptor::first_named_entry_offset() -
         compiler::target::Array::data_offset();
@@ -384,7 +385,7 @@
       // We had no match. If the param is required, throw a NoSuchMethod error.
       // Otherwise just load the default constant.
       Fragment not_good(missing);
-      if (FLAG_null_safety && function_.IsRequiredAt(opt_param_position[i])) {
+      if (null_safety && function_.IsRequiredAt(opt_param_position[i])) {
         not_good += Goto(nsm);
       } else {
         not_good += Constant(
diff --git a/runtime/vm/compiler/jit/compiler.cc b/runtime/vm/compiler/jit/compiler.cc
index 9995ebc..401c96d 100644
--- a/runtime/vm/compiler/jit/compiler.cc
+++ b/runtime/vm/compiler/jit/compiler.cc
@@ -7,7 +7,6 @@
 #include "vm/compiler/assembler/assembler.h"
 
 #include "vm/code_patcher.h"
-#include "vm/compiler/aot/precompiler.h"
 #include "vm/compiler/assembler/disassembler.h"
 #include "vm/compiler/backend/block_scheduler.h"
 #include "vm/compiler/backend/branch_optimizer.h"
@@ -863,10 +862,7 @@
 
 RawObject* Compiler::CompileFunction(Thread* thread, const Function& function) {
 #if defined(DART_PRECOMPILER) && !defined(TARGET_ARCH_IA32)
-  if (FLAG_precompiled_mode) {
-    return Precompiler::CompileFunction(
-        /* precompiler = */ NULL, thread, thread->zone(), function);
-  }
+  RELEASE_ASSERT(!FLAG_precompiled_mode);
 #endif
 
 #if defined(DART_PRECOMPILED_RUNTIME)
@@ -1203,9 +1199,11 @@
       Function& function = Function::Handle(zone);
       {
         MonitorLocker ml(&queue_monitor_);
-        function = function_queue()->PeekFunction();
+        if (running_) {
+          function = function_queue()->PeekFunction();
+        }
       }
-      while (running_ && !function.IsNull()) {
+      while (!function.IsNull()) {
         if (is_optimizing()) {
           Compiler::CompileOptimizedFunction(thread, function,
                                              Compiler::kNoOSRDeoptId);
@@ -1217,7 +1215,7 @@
         QueueElement* qelem = NULL;
         {
           MonitorLocker ml(&queue_monitor_);
-          if (function_queue()->IsEmpty()) {
+          if (!running_ || function_queue()->IsEmpty()) {
             // We are shutting down, queue was cleared.
             function = Function::null();
           } else {
diff --git a/runtime/vm/cpu_arm.cc b/runtime/vm/cpu_arm.cc
index 3ae65c1..6ab6eee 100644
--- a/runtime/vm/cpu_arm.cc
+++ b/runtime/vm/cpu_arm.cc
@@ -200,6 +200,8 @@
   bool is_krait = CpuInfo::FieldContains(kCpuInfoHardware, "QCT APQ8064");
   bool is_armada_370xp =
       CpuInfo::FieldContains(kCpuInfoHardware, "Marvell Armada 370/XP");
+  bool is_virtual_machine =
+      CpuInfo::FieldContains(kCpuInfoHardware, "Dummy Virtual Machine");
 #if defined(HOST_OS_ANDROID)
   bool is_android = true;
 #else
@@ -217,6 +219,10 @@
     integer_division_supported_ = false;
   } else if (is_armada_370xp) {
     integer_division_supported_ = false;
+  } else if (is_android && !is_arm64 && is_virtual_machine) {
+    // Some Android ARM emulators claim support for integer division in
+    // /proc/cpuinfo but do not actually support it.
+    integer_division_supported_ = false;
   } else {
     integer_division_supported_ =
         (CpuInfo::FieldContains(kCpuInfoFeatures, "idiva") || is_arm64) &&
diff --git a/runtime/vm/dart.cc b/runtime/vm/dart.cc
index bbf0ea3..77f7ea6 100644
--- a/runtime/vm/dart.cc
+++ b/runtime/vm/dart.cc
@@ -907,6 +907,8 @@
 #else
 #error What architecture?
 #endif
+
+    ADD_ISOLATE_FLAG(null_safety, null_safety, FLAG_null_safety);
   }
 
   if (Dart::non_nullable_flag()) {
diff --git a/runtime/vm/dart_api_impl.cc b/runtime/vm/dart_api_impl.cc
index 498e600..833f9c8 100644
--- a/runtime/vm/dart_api_impl.cc
+++ b/runtime/vm/dart_api_impl.cc
@@ -1339,13 +1339,14 @@
           old_space->set_tasks(0);
           ml.NotifyAll();
         }
-
-        spawning_group->Shutdown();
       });
     }
 
     Thread::ExitIsolateGroupAsHelper(kBypassSafepoint);
   }
+
+  spawning_group->Shutdown();
+
   Dart_EnterIsolate(Api::CastIsolate(isolate));
   ASSERT(Thread::Current()->isolate_group() == isolate->group());
 
diff --git a/runtime/vm/dart_api_impl_test.cc b/runtime/vm/dart_api_impl_test.cc
index a756343..c82582f 100644
--- a/runtime/vm/dart_api_impl_test.cc
+++ b/runtime/vm/dart_api_impl_test.cc
@@ -2283,6 +2283,9 @@
 
     const intptr_t kBufferSize = 100;
     void* buffer = malloc(kBufferSize);
+    // The buffer becomes readable by Dart, so ensure it is initialized to
+    // satisfy our eager MSAN check.
+    memset(buffer, 0, kBufferSize);
     Dart_Handle byte_data = Dart_NewExternalTypedDataWithFinalizer(
         Dart_TypedData_kByteData, buffer, kBufferSize, buffer, kBufferSize,
         ByteDataFinalizer);
diff --git a/runtime/vm/deopt_instructions.cc b/runtime/vm/deopt_instructions.cc
index 93124b1..3057977 100644
--- a/runtime/vm/deopt_instructions.cc
+++ b/runtime/vm/deopt_instructions.cc
@@ -358,9 +358,6 @@
 // Materializes all deferred objects.  Returns the total number of
 // artificial arguments used during deoptimization.
 intptr_t DeoptContext::MaterializeDeferredObjects() {
-  // This region is initialized by a mixture of C++ and generated code.
-  MSAN_UNPOISON(dest_frame_, dest_frame_size_ * kWordSize);
-
   // Populate slots with references to all unboxed "primitive" values (doubles,
   // mints, simd) and deferred objects. Deferred objects are only allocated
   // but not filled with data. This is done later because deferred objects
diff --git a/runtime/vm/dwarf.cc b/runtime/vm/dwarf.cc
index be78898..c70ed6a 100644
--- a/runtime/vm/dwarf.cc
+++ b/runtime/vm/dwarf.cc
@@ -124,7 +124,8 @@
   ASSERT(name != nullptr);
   ASSERT(payload_start >= 0);
   auto const virtual_address = elf_->NextMemoryOffset() + payload_start;
-  elf_->AddStaticSymbol(elf_->NextSectionIndex(), name, virtual_address);
+  elf_->AddStaticSymbol(elf_->NextSectionIndex(), name, virtual_address,
+                        code.Size());
 
   ASSERT(!code.IsNull());
   ASSERT(code_to_address_.Lookup(&code) == nullptr);
diff --git a/runtime/vm/elf.cc b/runtime/vm/elf.cc
index 60e9b62..9654d8e 100644
--- a/runtime/vm/elf.cc
+++ b/runtime/vm/elf.cc
@@ -5,10 +5,10 @@
 #include "vm/elf.h"
 
 #include "platform/elf.h"
-#include "platform/text_buffer.h"
 #include "vm/cpu.h"
 #include "vm/hash_map.h"
 #include "vm/thread.h"
+#include "vm/zone_text_buffer.h"
 
 namespace dart {
 
@@ -347,7 +347,7 @@
                 /*executable=*/false,
                 /*writable=*/false),
         dynamic_(allocate),
-        text_(128),
+        text_(Thread::Current()->zone(), 128),
         text_indices_() {
     text_.AddChar('\0');
     text_indices_.Insert({"", 1});
@@ -357,7 +357,7 @@
   intptr_t MemorySize() { return dynamic_ ? FileSize() : 0; }
 
   void Write(Elf* stream) {
-    stream->WriteBytes(reinterpret_cast<const uint8_t*>(text_.buf()),
+    stream->WriteBytes(reinterpret_cast<const uint8_t*>(text_.buffer()),
                        text_.length());
   }
 
@@ -371,7 +371,7 @@
   }
 
   const bool dynamic_;
-  TextBuffer text_;
+  ZoneTextBuffer text_;
   // To avoid kNoValue for intptr_t (0), we store an index n as n + 1.
   CStringMap<intptr_t> text_indices_;
 };
@@ -561,7 +561,7 @@
     }
   }
 
-  class Entry {
+  class Entry : public ZoneAllocated {
    public:
     intptr_t tag;
     intptr_t value;
@@ -650,7 +650,8 @@
 
 void Elf::AddStaticSymbol(intptr_t section,
                           const char* name,
-                          size_t memory_offset) {
+                          intptr_t address,
+                          intptr_t size) {
   // Lazily allocate the static string and symbol tables, as we only add static
   // symbols in unstripped ELF files.
   if (strtab_ == nullptr) {
@@ -661,8 +662,8 @@
 
   auto const name_index = strtab_->AddString(name);
   auto const info = (elf::STB_GLOBAL << 4) | elf::STT_FUNC;
-  Symbol* symbol = new (zone_)
-      Symbol(name, name_index, info, section, memory_offset, /*size=*/0);
+  Symbol* symbol =
+      new (zone_) Symbol(name, name_index, info, section, address, size);
   symtab_->AddSymbol(symbol);
 }
 
diff --git a/runtime/vm/elf.h b/runtime/vm/elf.h
index f270dac..4cd877a 100644
--- a/runtime/vm/elf.h
+++ b/runtime/vm/elf.h
@@ -33,7 +33,8 @@
   void AddDebug(const char* name, const uint8_t* bytes, intptr_t size);
   void AddStaticSymbol(intptr_t section,
                        const char* name,
-                       size_t memory_offset);
+                       intptr_t address,
+                       intptr_t size);
 
   void Finalize();
 
diff --git a/runtime/vm/instructions_arm64.cc b/runtime/vm/instructions_arm64.cc
index a421c27..3e3db82 100644
--- a/runtime/vm/instructions_arm64.cc
+++ b/runtime/vm/instructions_arm64.cc
@@ -332,6 +332,10 @@
     if (instr->RnField() == PP) {
       // PP is untagged on ARM64.
       ASSERT(Utils::IsAligned(offset, 8));
+      // A code object may have an object pool attached in bare instructions
+      // mode if the v8 snapshot profile writer is active, but this pool cannot
+      // be used for object loading.
+      if (FLAG_use_bare_instructions) return false;
       intptr_t index = ObjectPool::IndexFromOffset(offset - kHeapObjectTag);
       const ObjectPool& pool = ObjectPool::Handle(code.object_pool());
       if (!pool.IsNull()) {
diff --git a/runtime/vm/instructions_x64.cc b/runtime/vm/instructions_x64.cc
index d25854f..2225a3e 100644
--- a/runtime/vm/instructions_x64.cc
+++ b/runtime/vm/instructions_x64.cc
@@ -31,6 +31,31 @@
 
   uint8_t* bytes = reinterpret_cast<uint8_t*>(pc);
 
+  COMPILE_ASSERT(THR == R14);
+  if ((bytes[0] == 0x49) || (bytes[0] == 0x4d)) {
+    if ((bytes[1] == 0x8b) || (bytes[1] == 0x3b)) {   // movq, cmpq
+      if ((bytes[2] & 0xc7) == (0x80 | (THR & 7))) {  // [r14+disp32]
+        int32_t offset = *reinterpret_cast<int32_t*>(pc + 3);
+        return Thread::ObjectAtOffset(offset, obj);
+      }
+      if ((bytes[2] & 0xc7) == (0x40 | (THR & 7))) {  // [r14+disp8]
+        uint8_t offset = *reinterpret_cast<uint8_t*>(pc + 3);
+        return Thread::ObjectAtOffset(offset, obj);
+      }
+    }
+  }
+
+  if (((bytes[0] == 0x41) && (bytes[1] == 0xff) && (bytes[2] == 0x76))) {
+    // push [r14+disp8]
+    uint8_t offset = *reinterpret_cast<uint8_t*>(pc + 3);
+    return Thread::ObjectAtOffset(offset, obj);
+  }
+
+  // A code object may have an object pool attached in bare instructions mode
+  // if the v8 snapshot profile writer is active, but this pool cannot be used
+  // for object loading.
+  if (FLAG_use_bare_instructions) return false;
+
   COMPILE_ASSERT(PP == R15);
   if ((bytes[0] == 0x49) || (bytes[0] == 0x4d)) {
     if ((bytes[1] == 0x8b) || (bytes[1] == 0x3b)) {  // movq, cmpq
@@ -57,25 +82,6 @@
     }
   }
 
-  COMPILE_ASSERT(THR == R14);
-  if ((bytes[0] == 0x49) || (bytes[0] == 0x4d)) {
-    if ((bytes[1] == 0x8b) || (bytes[1] == 0x3b)) {   // movq, cmpq
-      if ((bytes[2] & 0xc7) == (0x80 | (THR & 7))) {  // [r14+disp32]
-        int32_t offset = *reinterpret_cast<int32_t*>(pc + 3);
-        return Thread::ObjectAtOffset(offset, obj);
-      }
-      if ((bytes[2] & 0xc7) == (0x40 | (THR & 7))) {  // [r14+disp8]
-        uint8_t offset = *reinterpret_cast<uint8_t*>(pc + 3);
-        return Thread::ObjectAtOffset(offset, obj);
-      }
-    }
-  }
-  if (((bytes[0] == 0x41) && (bytes[1] == 0xff) && (bytes[2] == 0x76))) {
-    // push [r14+disp8]
-    uint8_t offset = *reinterpret_cast<uint8_t*>(pc + 3);
-    return Thread::ObjectAtOffset(offset, obj);
-  }
-
   return false;
 }
 
diff --git a/runtime/vm/isolate.cc b/runtime/vm/isolate.cc
index 633d468..bf0ad70 100644
--- a/runtime/vm/isolate.cc
+++ b/runtime/vm/isolate.cc
@@ -267,7 +267,7 @@
 }
 
 void IsolateGroup::RunWithLockedGroup(std::function<void()> fun) {
-  SafepointReadRwLocker ml(Thread::Current(), isolates_lock_.get());
+  SafepointWriteRwLocker ml(Thread::Current(), isolates_lock_.get());
   fun();
 }
 
diff --git a/runtime/vm/isolate.h b/runtime/vm/isolate.h
index 554398b..621dfd2 100644
--- a/runtime/vm/isolate.h
+++ b/runtime/vm/isolate.h
@@ -160,6 +160,7 @@
   V(NONPRODUCT, use_field_guards, UseFieldGuards, use_field_guards,            \
     FLAG_use_field_guards)                                                     \
   V(NONPRODUCT, use_osr, UseOsr, use_osr, FLAG_use_osr)                        \
+  V(PRODUCT, null_safety, NullSafety, null_safety, FLAG_null_safety)           \
   V(PRECOMPILER, obfuscate, Obfuscate, obfuscate, false_by_default)            \
   V(PRODUCT, unsafe_trust_strong_mode_types, UnsafeTrustStrongModeTypes,       \
     unsafe_trust_strong_mode_types,                                            \
@@ -1258,6 +1259,7 @@
   V(UseOsr)                                                                    \
   V(Obfuscate)                                                                 \
   V(ShouldLoadVmService)                                                       \
+  V(NullSafety)                                                                \
   V(UnsafeTrustStrongModeTypes)
 
   // Isolate specific flags.
diff --git a/runtime/vm/isolate_reload.cc b/runtime/vm/isolate_reload.cc
index e3cb9c9..67d8ad5 100644
--- a/runtime/vm/isolate_reload.cc
+++ b/runtime/vm/isolate_reload.cc
@@ -2062,7 +2062,10 @@
         delayed_function_type_arguments_(TypeArguments::Handle(zone)) {}
 
   void CheckStatics(const GrowableArray<const Field*>& fields) {
-    HANDLESCOPE(Thread::Current());
+    Thread* thread = Thread::Current();
+    Isolate* isolate = thread->isolate();
+    bool null_safety = isolate->null_safety();
+    HANDLESCOPE(thread);
     instantiator_type_arguments_ = TypeArguments::null();
     for (intptr_t i = 0; i < fields.length(); i++) {
       const Field& field = *fields[i];
@@ -2074,24 +2077,27 @@
       }
       value_ = field.StaticValue();
       if (value_.raw() != Object::sentinel().raw()) {
-        CheckValueType(value_, field);
+        CheckValueType(null_safety, value_, field);
       }
     }
   }
 
   void CheckInstances(const GrowableArray<const Instance*>& instances) {
+    Thread* thread = Thread::Current();
+    Isolate* isolate = thread->isolate();
+    bool null_safety = isolate->null_safety();
     for (intptr_t i = 0; i < instances.length(); i++) {
       // This handle scope does run very frequently, but is a net-win by
       // preventing us from spending too much time in malloc for new handle
       // blocks.
-      HANDLESCOPE(Thread::Current());
-      CheckInstance(*instances[i]);
+      HANDLESCOPE(thread);
+      CheckInstance(null_safety, *instances[i]);
     }
   }
 
  private:
   DART_FORCE_INLINE
-  void CheckInstance(const Instance& instance) {
+  void CheckInstance(bool null_safety, const Instance& instance) {
     cls_ = instance.clazz();
     if (cls_.NumTypeArguments() > 0) {
       instantiator_type_arguments_ = instance.GetTypeArguments();
@@ -2105,12 +2111,14 @@
         continue;
       }
       const Field& field = Field::Cast(entry_);
-      CheckInstanceField(instance, field);
+      CheckInstanceField(null_safety, instance, field);
     }
   }
 
   DART_FORCE_INLINE
-  void CheckInstanceField(const Instance& instance, const Field& field) {
+  void CheckInstanceField(bool null_safety,
+                          const Instance& instance,
+                          const Field& field) {
     if (field.needs_load_guard()) {
       return;  // Already guarding.
     }
@@ -2121,12 +2129,14 @@
       field.set_needs_load_guard(true);
       return;
     }
-    CheckValueType(value_, field);
+    CheckValueType(null_safety, value_, field);
   }
 
   DART_FORCE_INLINE
-  void CheckValueType(const Instance& value, const Field& field) {
-    if (!FLAG_null_safety && value.IsNull()) {
+  void CheckValueType(bool null_safety,
+                      const Instance& value,
+                      const Field& field) {
+    if (!null_safety && value.IsNull()) {
       return;
     }
     type_ = field.type();
diff --git a/runtime/vm/kernel_isolate.cc b/runtime/vm/kernel_isolate.cc
index 845d10e..a326820 100644
--- a/runtime/vm/kernel_isolate.cc
+++ b/runtime/vm/kernel_isolate.cc
@@ -93,6 +93,7 @@
 #if !defined(DART_PRECOMPILER)
     api_flags.use_osr = true;
 #endif
+    api_flags.null_safety = false;
 
     isolate = reinterpret_cast<Isolate*>(
         create_group_callback(KernelIsolate::kName, KernelIsolate::kName, NULL,
@@ -759,7 +760,8 @@
 
     Dart_CObject null_safety;
     null_safety.type = Dart_CObject_kBool;
-    null_safety.value.as_bool = FLAG_null_safety;
+    null_safety.value.as_bool =
+        isolate != NULL ? isolate->null_safety() : FLAG_null_safety;
 
     intptr_t num_experimental_flags = experimental_flags->length();
     Dart_CObject** experimental_flags_array =
diff --git a/runtime/vm/kernel_loader.cc b/runtime/vm/kernel_loader.cc
index 7771db0..fd193c8 100644
--- a/runtime/vm/kernel_loader.cc
+++ b/runtime/vm/kernel_loader.cc
@@ -1030,13 +1030,13 @@
   library.set_is_nnbd(library_helper.IsNonNullableByDefault());
   const NNBDCompiledMode mode =
       library_helper.GetNonNullableByDefaultCompiledMode();
-  if (!FLAG_null_safety && mode == NNBDCompiledMode::kStrong) {
+  if (!I->null_safety() && mode == NNBDCompiledMode::kStrong) {
     H.ReportError(
         "Library '%s' was compiled with null safety (in strong mode) and it "
         "requires --null-safety option at runtime",
         String::Handle(library.url()).ToCString());
   }
-  if (FLAG_null_safety && (mode == NNBDCompiledMode::kWeak ||
+  if (I->null_safety() && (mode == NNBDCompiledMode::kWeak ||
                            mode == NNBDCompiledMode::kDisabled)) {
     H.ReportError(
         "Library '%s' was compiled without null safety (in weak mode) and it "
@@ -1958,6 +1958,9 @@
       (function.is_static() && (library.raw() == Library::InternalLibrary()))) {
     function.set_is_reflectable(false);
   }
+  if (procedure_helper.IsMemberSignature()) {
+    function.set_is_reflectable(false);
+  }
 
   ActiveMemberScope active_member(&active_class_, &function);
 
diff --git a/runtime/vm/native_api_impl.cc b/runtime/vm/native_api_impl.cc
index 895d5d6..75d9cd6 100644
--- a/runtime/vm/native_api_impl.cc
+++ b/runtime/vm/native_api_impl.cc
@@ -269,7 +269,7 @@
 
   } else if (strcmp(command, "is-mutator-in-native") == 0) {
     Isolate* const isolate = reinterpret_cast<Isolate*>(arg);
-    if (isolate->mutator_thread()->execution_state() ==
+    if (isolate->mutator_thread()->execution_state_cross_thread_for_testing() ==
         Thread::kThreadInNative) {
       return arg;
     } else {
diff --git a/runtime/vm/native_symbol.h b/runtime/vm/native_symbol.h
index 29dda98..84aad3c 100644
--- a/runtime/vm/native_symbol.h
+++ b/runtime/vm/native_symbol.h
@@ -16,7 +16,7 @@
  public:
   static void Init();
   static void Cleanup();
-  static char* LookupSymbolName(uintptr_t pc, uintptr_t* start);
+  static char* LookupSymbolName(uword pc, uword* start);
   static bool LookupSharedObject(uword pc, uword* dso_base, char** dso_name);
   static void FreeSymbolName(char* name);
   static void AddSymbols(const char* dso_name, void* buffer, size_t size);
diff --git a/runtime/vm/native_symbol_android.cc b/runtime/vm/native_symbol_android.cc
index 9cfd7cb..34a3492 100644
--- a/runtime/vm/native_symbol_android.cc
+++ b/runtime/vm/native_symbol_android.cc
@@ -17,7 +17,7 @@
 
 void NativeSymbolResolver::Cleanup() {}
 
-char* NativeSymbolResolver::LookupSymbolName(uintptr_t pc, uintptr_t* start) {
+char* NativeSymbolResolver::LookupSymbolName(uword pc, uword* start) {
   Dl_info info;
   int r = dladdr(reinterpret_cast<void*>(pc), &info);
   if (r == 0) {
@@ -27,7 +27,7 @@
     return NULL;
   }
   if (start != NULL) {
-    *start = reinterpret_cast<uintptr_t>(info.dli_saddr);
+    *start = reinterpret_cast<uword>(info.dli_saddr);
   }
   int status = 0;
   size_t len = 0;
diff --git a/runtime/vm/native_symbol_fuchsia.cc b/runtime/vm/native_symbol_fuchsia.cc
index 70aa0b5..aed0b2a 100644
--- a/runtime/vm/native_symbol_fuchsia.cc
+++ b/runtime/vm/native_symbol_fuchsia.cc
@@ -100,16 +100,16 @@
   }
 }
 
-char* NativeSymbolResolver::LookupSymbolName(uintptr_t pc, uintptr_t* start) {
+char* NativeSymbolResolver::LookupSymbolName(uword pc, uword* start) {
   Dl_info info;
   int r = dladdr(reinterpret_cast<void*>(pc), &info);
   if (r == 0) {
     return NULL;
   }
 
-  const char* dso_name = info.dli_fname;
-  uword dso_base = reinterpret_cast<uword>(info.dli_fbase);
-  uword dso_offset = pc - dso_base;
+  auto const dso_name = info.dli_fname;
+  const auto dso_base = reinterpret_cast<uword>(info.dli_fbase);
+  const auto dso_offset = pc - dso_base;
 
   for (NativeSymbols* symbols = symbols_; symbols != NULL;
        symbols = symbols->next()) {
diff --git a/runtime/vm/native_symbol_linux.cc b/runtime/vm/native_symbol_linux.cc
index a4af553..69fc1df 100644
--- a/runtime/vm/native_symbol_linux.cc
+++ b/runtime/vm/native_symbol_linux.cc
@@ -18,7 +18,7 @@
 
 void NativeSymbolResolver::Cleanup() {}
 
-char* NativeSymbolResolver::LookupSymbolName(uintptr_t pc, uintptr_t* start) {
+char* NativeSymbolResolver::LookupSymbolName(uword pc, uword* start) {
   Dl_info info;
   int r = dladdr(reinterpret_cast<void*>(pc), &info);
   if (r == 0) {
@@ -28,7 +28,7 @@
     return NULL;
   }
   if (start != NULL) {
-    *start = reinterpret_cast<uintptr_t>(info.dli_saddr);
+    *start = reinterpret_cast<uword>(info.dli_saddr);
   }
   int status = 0;
   size_t len = 0;
diff --git a/runtime/vm/native_symbol_macos.cc b/runtime/vm/native_symbol_macos.cc
index d3a6489..88af47b 100644
--- a/runtime/vm/native_symbol_macos.cc
+++ b/runtime/vm/native_symbol_macos.cc
@@ -17,7 +17,7 @@
 
 void NativeSymbolResolver::Cleanup() {}
 
-char* NativeSymbolResolver::LookupSymbolName(uintptr_t pc, uintptr_t* start) {
+char* NativeSymbolResolver::LookupSymbolName(uword pc, uword* start) {
   Dl_info info;
   int r = dladdr(reinterpret_cast<void*>(pc), &info);
   if (r == 0) {
@@ -27,7 +27,7 @@
     return NULL;
   }
   if (start != NULL) {
-    *start = reinterpret_cast<uintptr_t>(info.dli_saddr);
+    *start = reinterpret_cast<uword>(info.dli_saddr);
   }
   int status;
   char* demangled = abi::__cxa_demangle(info.dli_sname, NULL, NULL, &status);
diff --git a/runtime/vm/native_symbol_win.cc b/runtime/vm/native_symbol_win.cc
index d138ab0..a4f2f45 100644
--- a/runtime/vm/native_symbol_win.cc
+++ b/runtime/vm/native_symbol_win.cc
@@ -49,7 +49,7 @@
   }
 }
 
-char* NativeSymbolResolver::LookupSymbolName(uintptr_t pc, uintptr_t* start) {
+char* NativeSymbolResolver::LookupSymbolName(uword pc, uword* start) {
   static const intptr_t kMaxNameLength = 2048;
   static const intptr_t kSymbolInfoSize = sizeof(SYMBOL_INFO);  // NOLINT.
   static char buffer[kSymbolInfoSize + kMaxNameLength];
diff --git a/runtime/vm/object.cc b/runtime/vm/object.cc
index 85b1d32..b841c86 100644
--- a/runtime/vm/object.cc
+++ b/runtime/vm/object.cc
@@ -7499,7 +7499,9 @@
     return false;
   }
   // Verify that all argument names are valid parameter names.
-  Zone* zone = Thread::Current()->zone();
+  Thread* thread = Thread::Current();
+  Isolate* isolate = thread->isolate();
+  Zone* zone = thread->zone();
   String& argument_name = String::Handle(zone);
   String& parameter_name = String::Handle(zone);
   const intptr_t num_positional_args = num_arguments - num_named_arguments;
@@ -7528,7 +7530,7 @@
       return false;
     }
   }
-  if (FLAG_null_safety) {
+  if (isolate->null_safety()) {
     // Verify that all required named parameters are filled.
     for (intptr_t j = num_positional_args; j < num_parameters; j++) {
       if (IsRequiredAt(j)) {
@@ -7966,10 +7968,6 @@
       return false;
     }
   }
-  // Check the names and types of optional named parameters.
-  if (other_num_opt_named_params == 0) {
-    return true;
-  }
   // Check that for each optional named parameter of type T of the other
   // function type, there exists an optional named parameter of this function
   // type with an identical name and with a type S that is a supertype of T.
@@ -7983,7 +7981,6 @@
   for (intptr_t i = other_num_fixed_params; i < other_num_params; i++) {
     other_param_name = other.ParameterNameAt(i);
     ASSERT(other_param_name.IsSymbol());
-    const bool other_is_required = other.IsRequiredAt(i);
     found_param_name = false;
     for (intptr_t j = num_fixed_params; j < num_params; j++) {
       ASSERT(String::Handle(zone, ParameterNameAt(j)).IsSymbol());
@@ -7992,9 +7989,6 @@
         if (!IsContravariantParameter(j, other, i, space)) {
           return false;
         }
-        if (FLAG_null_safety && IsRequiredAt(j) && !other_is_required) {
-          return false;
-        }
         break;
       }
     }
@@ -8002,6 +7996,30 @@
       return false;
     }
   }
+  if (FLAG_null_safety) {
+    // Check that for each required named parameter in this function, there's a
+    // corresponding required named parameter in the other function.
+    String& param_name = other_param_name;
+    for (intptr_t j = num_fixed_params; j < num_params; j++) {
+      if (IsRequiredAt(j)) {
+        param_name = ParameterNameAt(j);
+        ASSERT(param_name.IsSymbol());
+        bool found = false;
+        for (intptr_t i = other_num_fixed_params; i < other_num_params; i++) {
+          ASSERT(String::Handle(zone, other.ParameterNameAt(i)).IsSymbol());
+          if (other.ParameterNameAt(i) == param_name.raw()) {
+            found = true;
+            if (!other.IsRequiredAt(i)) {
+              return false;
+            }
+          }
+        }
+        if (!found) {
+          return false;
+        }
+      }
+    }
+  }
   return true;
 }
 
@@ -17629,7 +17647,7 @@
   // In weak mode type casts, whether in legacy or opted-in libraries, the null
   // instance is detected and handled in inlined code and therefore cannot be
   // encountered here as a Dart null receiver.
-  ASSERT(FLAG_null_safety || !IsNull());
+  ASSERT(Isolate::Current()->null_safety() || !IsNull());
   // In strong mode, compute NNBD_SUBTYPE(runtimeType, other).
   // In weak mode, compute LEGACY_SUBTYPE(runtimeType, other).
   return RuntimeTypeIsSubtypeOf(other, other_instantiator_type_arguments,
@@ -17671,8 +17689,12 @@
 }
 
 bool Instance::NullIsAssignableTo(const AbstractType& other) {
+  Thread* thread = Thread::Current();
+  Isolate* isolate = thread->isolate();
+  Zone* zone = thread->zone();
+
   // In weak mode, Null is a bottom type (according to LEGACY_SUBTYPE).
-  if (!FLAG_null_safety) {
+  if (!isolate->null_safety()) {
     return true;
   }
   // "Left Null" rule: null is assignable when destination type is either
@@ -17682,7 +17704,8 @@
     return true;
   }
   if (other.IsFutureOrType()) {
-    return NullIsAssignableTo(AbstractType::Handle(other.UnwrapFutureOr()));
+    return NullIsAssignableTo(
+        AbstractType::Handle(zone, other.UnwrapFutureOr()));
   }
   return false;
 }
@@ -17699,12 +17722,13 @@
   if (other.IsTopType()) {
     return true;
   }
+  Thread* thread = Thread::Current();
+  Isolate* isolate = thread->isolate();
+  Zone* zone = thread->zone();
   // In weak testing mode, Null type is a subtype of any type.
-  if (IsNull() && !FLAG_null_safety) {
+  if (IsNull() && !isolate->null_safety()) {
     return true;
   }
-  Thread* thread = Thread::Current();
-  Zone* zone = thread->zone();
   const Class& cls = Class::Handle(zone, clazz());
   if (cls.IsClosureClass()) {
     if (other.IsDartFunctionType() || other.IsDartClosureType()) {
@@ -17766,7 +17790,7 @@
     return false;
   }
   if (IsNull()) {
-    ASSERT(FLAG_null_safety);
+    ASSERT(isolate->null_safety());
     if (instantiated_other.IsNullType()) {
       return true;
     }
@@ -18062,17 +18086,27 @@
       .SetInstantiatedNullability(type_param, space);
 }
 
-RawAbstractType* AbstractType::NormalizeInstantiatedType() const {
+RawAbstractType* AbstractType::NormalizeFutureOrType(Heap::Space space) const {
   if (Dart::non_nullable_flag()) {
-    // Normalize FutureOr<T>.
     if (IsFutureOrType()) {
       const AbstractType& unwrapped_type =
           AbstractType::Handle(UnwrapFutureOr());
       const classid_t cid = unwrapped_type.type_class_id();
-      if (cid == kDynamicCid || cid == kVoidCid || cid == kInstanceCid) {
+      if (cid == kDynamicCid || cid == kVoidCid) {
         return unwrapped_type.raw();
       }
-      if (cid == kNeverCid && IsNonNullable()) {
+      if (cid == kInstanceCid) {
+        if (IsNonNullable()) {
+          return unwrapped_type.raw();
+        }
+        if (IsNullable() || unwrapped_type.IsNullable()) {
+          return Type::Cast(unwrapped_type)
+              .ToNullability(Nullability::kNullable, space);
+        }
+        return Type::Cast(unwrapped_type)
+            .ToNullability(Nullability::kLegacy, space);
+      }
+      if (cid == kNeverCid && unwrapped_type.IsNonNullable()) {
         ObjectStore* object_store = Isolate::Current()->object_store();
         if (object_store->non_nullable_future_never_type() == Type::null()) {
           const Class& cls = Class::Handle(object_store->future_class());
@@ -18087,7 +18121,9 @@
           type ^= type.Canonicalize();
           object_store->set_non_nullable_future_never_type(type);
         }
-        return object_store->non_nullable_future_never_type();
+        const Type& future_never_type =
+            Type::Handle(object_store->non_nullable_future_never_type());
+        return future_never_type.ToNullability(nullability(), space);
       }
       if (cid == kNullCid) {
         ObjectStore* object_store = Isolate::Current()->object_store();
@@ -18106,6 +18142,10 @@
         }
         return object_store->nullable_future_null_type();
       }
+      if (IsNullable() && unwrapped_type.IsNullable()) {
+        return Type::Cast(*this).ToNullability(Nullability::kNonNullable,
+                                               space);
+      }
     }
   }
   return raw();
@@ -18449,7 +18489,7 @@
   if (cid == kInstanceCid) {  // Object type.
     // NNBD weak mode uses LEGACY_SUBTYPE for assignability / 'as' tests,
     // and non-nullable Object is a top type according to LEGACY_SUBTYPE.
-    return !FLAG_null_safety || !IsNonNullable();
+    return !Isolate::Current()->null_safety() || !IsNonNullable();
   }
   if (cid == kFutureOrCid) {
     // FutureOr<T> where T is a top type behaves as a top type.
@@ -18560,6 +18600,7 @@
     return Instance::NullIsAssignableTo(other);
   }
   Thread* thread = Thread::Current();
+  Isolate* isolate = thread->isolate();
   Zone* zone = thread->zone();
   // Type parameters cannot be handled by Class::IsSubtypeOf().
   // When comparing two uninstantiated function types, one returning type
@@ -18596,7 +18637,7 @@
   if (other.IsTypeParameter()) {
     return false;
   }
-  if (FLAG_null_safety && IsNullable() && other.IsNonNullable()) {
+  if (isolate->null_safety() && IsNullable() && other.IsNonNullable()) {
     return false;
   }
   const Class& type_cls = Class::Handle(zone, type_class());
@@ -18972,7 +19013,7 @@
     }
   }
   // Canonicalization is not part of instantiation.
-  return instantiated_type.NormalizeInstantiatedType();
+  return instantiated_type.NormalizeFutureOrType(space);
 }
 
 bool Type::IsEquivalent(const Instance& other,
@@ -19001,8 +19042,12 @@
   }
   Nullability this_type_nullability = nullability();
   Nullability other_type_nullability = other_type.nullability();
+  Thread* thread = Thread::Current();
+  Isolate* isolate = thread->isolate();
+  Zone* zone = thread->zone();
   if (kind == TypeEquality::kInSubtypeTest) {
-    if (FLAG_null_safety && this_type_nullability == Nullability::kNullable &&
+    if (isolate->null_safety() &&
+        this_type_nullability == Nullability::kNullable &&
         other_type_nullability == Nullability::kNonNullable) {
       return false;
     }
@@ -19028,8 +19073,6 @@
       (signature() == other_type.signature())) {
     return true;
   }
-  Thread* thread = Thread::Current();
-  Zone* zone = thread->zone();
   if (arguments() != other_type.arguments()) {
     const Class& cls = Class::Handle(zone, type_class());
     const intptr_t num_type_params = cls.NumTypeParameters(thread);
@@ -19722,7 +19765,7 @@
   Nullability this_type_param_nullability = nullability();
   Nullability other_type_param_nullability = other_type_param.nullability();
   if (kind == TypeEquality::kInSubtypeTest) {
-    if (FLAG_null_safety &&
+    if (Isolate::Current()->null_safety() &&
         (this_type_param_nullability == Nullability::kNullable) &&
         (other_type_param_nullability == Nullability::kNonNullable)) {
       return false;
@@ -19836,7 +19879,7 @@
     AbstractType& result =
         AbstractType::Handle(function_type_arguments.TypeAt(index()));
     result = result.SetInstantiatedNullability(*this, space);
-    return result.NormalizeInstantiatedType();
+    return result.NormalizeFutureOrType(space);
   }
   ASSERT(IsClassTypeParameter());
   if (instantiator_type_arguments.IsNull()) {
@@ -19854,7 +19897,7 @@
   AbstractType& result =
       AbstractType::Handle(instantiator_type_arguments.TypeAt(index()));
   result = result.SetInstantiatedNullability(*this, space);
-  return result.NormalizeInstantiatedType();
+  return result.NormalizeFutureOrType(space);
   // There is no need to canonicalize the instantiated type parameter, since all
   // type arguments are canonicalized at type finalization time. It would be too
   // early to canonicalize the returned type argument here, since instantiation
@@ -23432,18 +23475,27 @@
                                         : Code::Cast(code).PayloadStart();
         uword return_addr = start + pc_offset;
         uword call_addr = return_addr - 1;
+        buffer.Printf("    #%02" Pd " abs %" Pp "", frame_index, call_addr);
         uword dso_base;
         char* dso_name;
         if (NativeSymbolResolver::LookupSharedObject(call_addr, &dso_base,
                                                      &dso_name)) {
           uword dso_offset = call_addr - dso_base;
-          buffer.Printf("    #%02" Pd " abs %" Pp " virt %" Pp " %s\n",
-                        frame_index, call_addr, dso_offset, dso_name);
+          buffer.Printf(" virt %" Pp "", dso_offset);
+          uword symbol_start;
+          if (auto const symbol_name = NativeSymbolResolver::LookupSymbolName(
+                  call_addr, &symbol_start)) {
+            uword symbol_offset = call_addr - symbol_start;
+            buffer.Printf(" %s+0x%" Px "", symbol_name, symbol_offset);
+            NativeSymbolResolver::FreeSymbolName(symbol_name);
+          } else {
+            buffer.Printf(" %s", dso_name);
+          }
           NativeSymbolResolver::FreeSymbolName(dso_name);
         } else {
-          buffer.Printf("    #%02" Pd " abs %" Pp " <unknown>\n", frame_index,
-                        call_addr);
+          buffer.Printf(" <unknown>");
         }
+        buffer.Printf("\n");
         frame_index++;
       }
     }
diff --git a/runtime/vm/object.h b/runtime/vm/object.h
index 3706d9e..1c620c9 100644
--- a/runtime/vm/object.h
+++ b/runtime/vm/object.h
@@ -7463,7 +7463,7 @@
   virtual RawAbstractType* SetInstantiatedNullability(
       const TypeParameter& type_param,
       Heap::Space space) const;
-  virtual RawAbstractType* NormalizeInstantiatedType() const;
+  virtual RawAbstractType* NormalizeFutureOrType(Heap::Space space) const;
 
   virtual bool HasTypeClass() const { return type_class_id() != kIllegalCid; }
   virtual classid_t type_class_id() const;
diff --git a/runtime/vm/object_graph.cc b/runtime/vm/object_graph.cc
index a982bb6..e568c4a 100644
--- a/runtime/vm/object_graph.cc
+++ b/runtime/vm/object_graph.cc
@@ -983,10 +983,10 @@
     writer_->WriteUnsigned(writer_->GetObjectId(weak_persistent_handle->raw()));
     writer_->WriteUnsigned(weak_persistent_handle->external_size());
     // Attempt to include a native symbol name.
-    char* name = NativeSymbolResolver::LookupSymbolName(
-        reinterpret_cast<uintptr_t>(weak_persistent_handle->callback()), NULL);
-    writer_->WriteUtf8((name == NULL) ? "Unknown native function" : name);
-    if (name != NULL) {
+    auto const name = NativeSymbolResolver::LookupSymbolName(
+        reinterpret_cast<uword>(weak_persistent_handle->callback()), nullptr);
+    writer_->WriteUtf8((name == nullptr) ? "Unknown native function" : name);
+    if (name != nullptr) {
       NativeSymbolResolver::FreeSymbolName(name);
     }
   }
diff --git a/runtime/vm/profiler.cc b/runtime/vm/profiler.cc
index 0e09117..69eaf42 100644
--- a/runtime/vm/profiler.cc
+++ b/runtime/vm/profiler.cc
@@ -457,12 +457,12 @@
 }
 
 static void DumpStackFrame(intptr_t frame_index, uword pc, uword fp) {
-  uintptr_t start = 0;
-  char* native_symbol_name = NativeSymbolResolver::LookupSymbolName(pc, &start);
-  if (native_symbol_name != NULL) {
-    OS::PrintErr("  pc 0x%" Pp " fp 0x%" Pp " %s\n", pc, fp,
-                 native_symbol_name);
-    NativeSymbolResolver::FreeSymbolName(native_symbol_name);
+  uword start = 0;
+  if (auto const name = NativeSymbolResolver::LookupSymbolName(pc, &start)) {
+    uword offset = pc - start;
+    OS::PrintErr("  pc 0x%" Pp " fp 0x%" Pp " %s+0x%" Px "\n", pc, fp, name,
+                 offset);
+    NativeSymbolResolver::FreeSymbolName(name);
     return;
   }
 
diff --git a/runtime/vm/profiler_service.cc b/runtime/vm/profiler_service.cc
index c05cd6a..08770d8 100644
--- a/runtime/vm/profiler_service.cc
+++ b/runtime/vm/profiler_service.cc
@@ -1424,7 +1424,7 @@
     // We haven't seen this pc yet.
 
     // Check NativeSymbolResolver for pc.
-    uintptr_t native_start = 0;
+    uword native_start = 0;
     char* native_name =
         NativeSymbolResolver::LookupSymbolName(pc, &native_start);
     if (native_name == NULL) {
diff --git a/runtime/vm/runtime_entry.cc b/runtime/vm/runtime_entry.cc
index 5821da5..1a097cc 100644
--- a/runtime/vm/runtime_entry.cc
+++ b/runtime/vm/runtime_entry.cc
@@ -799,7 +799,7 @@
   ASSERT(!dst_type.IsDynamicType());  // No need to check assignment.
   // A null instance is already detected and allowed in inlined code, unless
   // strong checking is enabled.
-  ASSERT(!src_instance.IsNull() || FLAG_null_safety);
+  ASSERT(!src_instance.IsNull() || isolate->null_safety());
   const bool is_instance_of = src_instance.IsAssignableTo(
       dst_type, instantiator_type_arguments, function_type_arguments);
 
@@ -2845,6 +2845,14 @@
 static void CopySavedRegisters(uword saved_registers_address,
                                fpu_register_t** fpu_registers,
                                intptr_t** cpu_registers) {
+  // Tell MemorySanitizer this region is initialized by generated code. This
+  // region isn't already (fully) unpoisoned by FrameSetIterator::Unpoison
+  // because it is in an exit frame and stack frame iteration doesn't have
+  // access to true SP for exit frames.
+  MSAN_UNPOISON(reinterpret_cast<void*>(saved_registers_address),
+                kNumberOfSavedFpuRegisters * kFpuRegisterSize +
+                    kNumberOfSavedCpuRegisters * kWordSize);
+
   ASSERT(sizeof(fpu_register_t) == kFpuRegisterSize);
   fpu_register_t* fpu_registers_copy =
       new fpu_register_t[kNumberOfSavedFpuRegisters];
diff --git a/runtime/vm/service.cc b/runtime/vm/service.cc
index 72ce179..2f451ce 100644
--- a/runtime/vm/service.cc
+++ b/runtime/vm/service.cc
@@ -4155,9 +4155,9 @@
         reinterpret_cast<uintptr_t>(weak_persistent_handle->callback()));
     // Attempt to include a native symbol name.
     char* name = NativeSymbolResolver::LookupSymbolName(
-        reinterpret_cast<uintptr_t>(weak_persistent_handle->callback()), NULL);
-    obj.AddProperty("callbackSymbolName", (name == NULL) ? "" : name);
-    if (name != NULL) {
+        reinterpret_cast<uword>(weak_persistent_handle->callback()), nullptr);
+    obj.AddProperty("callbackSymbolName", (name == nullptr) ? "" : name);
+    if (name != nullptr) {
       NativeSymbolResolver::FreeSymbolName(name);
     }
     obj.AddPropertyF("externalSize", "%" Pd "",
diff --git a/runtime/vm/service_isolate.cc b/runtime/vm/service_isolate.cc
index 4817ab9..7e084ab 100644
--- a/runtime/vm/service_isolate.cc
+++ b/runtime/vm/service_isolate.cc
@@ -346,6 +346,7 @@
 
     Dart_IsolateFlags api_flags;
     Isolate::FlagsInitialize(&api_flags);
+    api_flags.null_safety = false;
 
     isolate = reinterpret_cast<Isolate*>(
         create_group_callback(ServiceIsolate::kName, ServiceIsolate::kName,
diff --git a/runtime/vm/signal_handler_android.cc b/runtime/vm/signal_handler_android.cc
index f9f6944..cdef00f 100644
--- a/runtime/vm/signal_handler_android.cc
+++ b/runtime/vm/signal_handler_android.cc
@@ -95,11 +95,27 @@
 }
 
 void SignalHandler::InstallImpl(SignalAction action) {
+  // Bionic implementation of setjmp temporary mangles SP register
+  // in place which breaks signal delivery on the thread stack - when
+  // kernel tries to deliver SIGPROF and we are in the middle of
+  // setjmp SP value is invalid - might be pointing to random memory
+  // or outside of writable space at all. In the first case we
+  // get memory corruption and in the second case kernel would send
+  // SIGSEGV to the process. See b/152210274 for details.
+  // To work around this issue we are using alternative signal stack
+  // to handle SIGPROF signals.
+  stack_t ss;
+  ss.ss_size = SIGSTKSZ;
+  ss.ss_sp = malloc(ss.ss_size);
+  ss.ss_flags = 0;
+  int r = sigaltstack(&ss, NULL);
+  ASSERT(r == 0);
+
   struct sigaction act = {};
   act.sa_sigaction = action;
   sigemptyset(&act.sa_mask);
-  act.sa_flags = SA_RESTART | SA_SIGINFO;
-  int r = sigaction(SIGPROF, &act, NULL);
+  act.sa_flags = SA_RESTART | SA_SIGINFO | SA_ONSTACK;
+  r = sigaction(SIGPROF, &act, NULL);
   ASSERT(r == 0);
 }
 
@@ -111,6 +127,13 @@
   sigemptyset(&act.sa_mask);
   int r = sigaction(SIGPROF, &act, NULL);
   ASSERT(r == 0);
+
+  // Disable and delete alternative signal stack.
+  stack_t ss, old_ss;
+  ss.ss_flags = SS_DISABLE;
+  r = sigaltstack(&ss, &old_ss);
+  ASSERT(r == 0);
+  free(old_ss.ss_sp);
 }
 
 }  // namespace dart
diff --git a/runtime/vm/thread.h b/runtime/vm/thread.h
index c1b0d03..1132a6e 100644
--- a/runtime/vm/thread.h
+++ b/runtime/vm/thread.h
@@ -751,6 +751,11 @@
   ExecutionState execution_state() const {
     return static_cast<ExecutionState>(execution_state_);
   }
+  // Normally execution state is only accessed for the current thread.
+  NO_SANITIZE_THREAD
+  ExecutionState execution_state_cross_thread_for_testing() const {
+    return static_cast<ExecutionState>(execution_state_);
+  }
   void set_execution_state(ExecutionState state) {
     execution_state_ = static_cast<uword>(state);
   }
diff --git a/runtime/vm/type_testing_stubs.cc b/runtime/vm/type_testing_stubs.cc
index 07ac698..45ea803 100644
--- a/runtime/vm/type_testing_stubs.cc
+++ b/runtime/vm/type_testing_stubs.cc
@@ -92,8 +92,9 @@
     const AbstractType& type,
     bool lazy_specialize /* = true */) {
   if (type.IsTypeRef()) {
-    return FLAG_null_safety ? StubCode::DefaultTypeTest().raw()
-                            : StubCode::DefaultNullableTypeTest().raw();
+    return Isolate::Current()->null_safety()
+               ? StubCode::DefaultTypeTest().raw()
+               : StubCode::DefaultNullableTypeTest().raw();
   }
 
   // During bootstrapping we have no access to stubs yet, so we'll just return
@@ -459,7 +460,8 @@
     // Weak NNBD mode uses LEGACY_SUBTYPE which ignores nullability.
     // We don't need to check nullability of LHS for nullable and legacy RHS
     // ("Right Legacy", "Right Nullable" rules).
-    if (FLAG_null_safety && !type_arg.IsNullable() && !type_arg.IsLegacy()) {
+    if (Isolate::Current()->null_safety() && !type_arg.IsNullable() &&
+        !type_arg.IsLegacy()) {
       compiler::Label skip_nullable_check;
       // Nullable type is not a subtype of non-nullable type.
       // TODO(dartbug.com/40736): Allocate a register for instance type argument
@@ -623,7 +625,11 @@
     if (instantiator_type_arguments_.IsNull()) {
       return Type::DynamicType();
     }
-    return instantiator_type_arguments_.TypeAt(parameter.index());
+    AbstractType& result = AbstractType::Handle(
+        instantiator_type_arguments_.TypeAt(parameter.index()));
+    result = result.SetInstantiatedNullability(TypeParameter::Cast(type),
+                                               Heap::kOld);
+    return result.NormalizeFutureOrType(Heap::kOld);
   } else if (type.IsFunctionType()) {
     // No support for function types yet.
     UNREACHABLE();
@@ -847,7 +853,7 @@
   // eagerly and avoid doing it down inside the loop.
   type = Type::DynamicType();
   UseTypeInAssertAssignable(type);
-  type = Type::ObjectType();
+  type = Type::ObjectType();  // TODO(regis): Add nullable Object?
   UseTypeInAssertAssignable(type);
 
   for (intptr_t cid = 0; cid < cid_count; ++cid) {
diff --git a/runtime/vm/version_in.cc b/runtime/vm/version_in.cc
index ae3cff7..b4f1e2d 100644
--- a/runtime/vm/version_in.cc
+++ b/runtime/vm/version_in.cc
@@ -39,7 +39,7 @@
 }
 
 const char* Version::snapshot_hash_ = "{{SNAPSHOT_HASH}}";
-const char* Version::str_ = "{{VERSION_STR}} ({{COMMIT_TIME}})";
+const char* Version::str_ = "{{VERSION_STR}} ({{CHANNEL}}) ({{COMMIT_TIME}})";
 const char* Version::commit_ = "{{VERSION_STR}}";
 
 }  // namespace dart
diff --git a/runtime/vm/zone_text_buffer.cc b/runtime/vm/zone_text_buffer.cc
index c7548eb..446f952 100644
--- a/runtime/vm/zone_text_buffer.cc
+++ b/runtime/vm/zone_text_buffer.cc
@@ -44,6 +44,13 @@
   return len;
 }
 
+void ZoneTextBuffer::AddChar(char ch) {
+  EnsureCapacity(sizeof(ch));
+  buffer_[length_] = ch;
+  length_++;
+  buffer_[length_] = '\0';
+}
+
 void ZoneTextBuffer::AddString(const char* s) {
   Printf("%s", s);
 }
diff --git a/runtime/vm/zone_text_buffer.h b/runtime/vm/zone_text_buffer.h
index 3d5207b..f4e2f31 100644
--- a/runtime/vm/zone_text_buffer.h
+++ b/runtime/vm/zone_text_buffer.h
@@ -21,6 +21,7 @@
   ~ZoneTextBuffer() {}
 
   intptr_t Printf(const char* format, ...) PRINTF_ATTRIBUTE(2, 3);
+  void AddChar(char ch);
   void AddString(const char* s);
   void AddString(const String& s);
 
diff --git a/samples-dev/samples-dev.status b/samples-dev/samples-dev.status
deleted file mode 100644
index 66ee67b..0000000
--- a/samples-dev/samples-dev.status
+++ /dev/null
@@ -1,27 +0,0 @@
-# Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
-# for details. All rights reserved. Use of this source code is governed by a
-# BSD-style license that can be found in the LICENSE file.
-
-[ $compiler == dart2analyzer ]
-swarm/test/swarm_test: StaticWarning
-swarm/test/swarm_ui_lib/layout/layout_test: StaticWarning
-swarm/test/swarm_ui_lib/observable/observable_test: StaticWarning
-swarm/test/swarm_ui_lib/touch/touch_test: StaticWarning
-swarm/test/swarm_ui_lib/util/util_test: StaticWarning
-swarm/test/swarm_ui_lib/view/view_test: StaticWarning
-
-[ $runtime == safari ]
-swarm/test/swarm_test: Pass, Fail # Issue 14523
-
-[ $runtime == vm ]
-swarm: Skip
-
-[ $browser ]
-swarm/test/swarm_ui_lib/touch/touch_test: Fail # This may be related to issue 157, Expectation: Solver. Expect.approxEquals(expected:9, actual:8.990625000000001, tolerance:0.0009) fails
-
-[ $compiler == dart2js && $runtime == chromeOnAndroid ]
-swarm/test/swarm_test: Fail # TODO(kasperl): Please triage.
-swarm/test/swarm_ui_lib/layout/layout_test: Fail # TODO(kasperl): Please triage.
-
-[ $compiler == dart2js && $runtime == ff ]
-swarm/test/swarm_test: Fail # Issue 5633
diff --git a/samples-dev/swarm/test/swarm_test.dart b/samples-dev/swarm/test/swarm_test.dart
deleted file mode 100644
index c7f39f9..0000000
--- a/samples-dev/swarm/test/swarm_test.dart
+++ /dev/null
@@ -1,159 +0,0 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library swarm_tests;
-
-import 'dart:html';
-import 'dart:async';
-import 'package:expect/expect.dart';
-import 'package:unittest/html_config.dart';
-import 'package:unittest/unittest.dart';
-import '../swarmlib.dart';
-import '../swarm_ui_lib/base/base.dart';
-import '../swarm_ui_lib/util/utilslib.dart';
-
-// TODO(jmesserly): these would probably be easier to debug if they were written
-// in the WebKit layout test style, so we could easy compare that the DOM is
-// what we expect it to be after performing some simulated user actions.
-
-void main() {
-  useHtmlConfiguration();
-  Swarm swarm = new Swarm(useCannedData: true);
-  UIStateProxy state = new UIStateProxy(swarm.sections);
-  swarm.state = state;
-  swarm.run();
-  // TODO(jmesserly): should be adding the full stylesheet here
-  Dom.addStyle('''
-      .story-content {
-        -webkit-column-width: 300px;
-        -webkit-column-gap: 26px; /* 2em */
-      }''');
-
-  getStoryNode() => swarm.frontView.storyView.node;
-
-  getView(Section section) {
-    return CollectionUtils.find(
-        swarm.frontView.sections.childViews, (view) => view.section == section);
-  }
-
-  getHistory(Article article) {
-    final feed = article.dataSource;
-    return {
-      'section': CollectionUtils
-          .find(swarm.sections, (s) => s.feeds.indexOf(feed, 0) >= 0)
-          .id,
-      'feed': feed.id,
-      'article': article.id
-    };
-  }
-
-  test('BackButton', () {
-    _serialInvokeAsync([
-      () {
-        Expect.equals(null, swarm.frontView.storyView); // verify initial state
-
-        // Make sure we've transitioned to the section
-        // In the real app, this isn't needed because ConveyorView fires the
-        // transition end event before we can click a story.
-        SectionView section = getView(swarm.sections[0]);
-        section.showSources();
-      },
-      () {
-        final item = swarm.sections[0].feeds[2].articles[1];
-        state.loadFromHistory(getHistory(item));
-
-        Expect.equals(item, state.currentArticle.value);
-
-        Expect.isFalse(getStoryNode().classes.contains(CSS.HIDDEN_STORY));
-
-        state.loadFromHistory({});
-
-        Expect.equals(null, state.currentArticle.value);
-        Expect.isTrue(getStoryNode().classes.contains(CSS.HIDDEN_STORY));
-      }
-    ]);
-  });
-
-  test('StoryView', () {
-    state.clearHistory();
-
-    Expect.isTrue(getStoryNode().classes.contains(CSS.HIDDEN_STORY));
-
-    final dataSourceView =
-        swarm.frontView.currentSection.dataSourceView.getSubview(0);
-    final itemView = dataSourceView.itemsView.getSubview(0);
-    // TODO(jacobr): remove  this null check. This is likely due to tests
-    // running without the correct CSS to size the window so that some items
-    // are visible.
-    if (itemView != null) {
-      click(itemView.node);
-      state.expectHistory([getHistory(itemView.item)]);
-    }
-  });
-
-  test('SliderMenu', () {
-    Expect.equals(getView(swarm.sections[0]), swarm.frontView.currentSection);
-
-    // Find the first slider menu item, and click on the one next after it.
-    click(document.querySelectorAll('.${CSS.SM_ITEM}')[1]);
-
-    Expect.equals(getView(swarm.sections[1]), swarm.frontView.currentSection);
-
-    // Find the first menu item again and click on it.
-    click(document.querySelector('.${CSS.SM_ITEM}'));
-
-    Expect.equals(getView(swarm.sections[0]), swarm.frontView.currentSection);
-  });
-}
-
-/** Triggers the click event, like [http://api.jquery.com/click/] */
-click(Element element) {
-  // TODO(rnystrom): This should be on the DOM API somewhere.
-  MouseEvent event = new MouseEvent('click');
-  element.dispatchEvent(event);
-}
-
-/** A proxy so we can intercept history calls */
-class UIStateProxy extends SwarmState {
-  List<Map<String, String>> history;
-
-  UIStateProxy(Sections dataModel) : super(dataModel) {
-    clearHistory();
-  }
-
-  void pushToHistory() {
-    history.add(toHistory());
-    super.pushToHistory();
-  }
-
-  void clearHistory() {
-    history = new List<Map<String, String>>();
-  }
-
-  void expectHistory(List<Map<String, String>> entries) {
-    Expect.equals(entries.length, history.length);
-    for (int i = 0; i < entries.length; i++) {
-      Map e = entries[i];
-      Map h = history[i];
-      Expect.equals(e['article'], h['article']);
-    }
-    clearHistory();
-  }
-}
-
-void _serialInvokeAsync(List closures) {
-  final length = closures.length;
-  if (length > 0) {
-    int i = 0;
-    void invokeNext() {
-      closures[i]();
-      i++;
-      if (i < length) {
-        Timer.run(expectAsync(invokeNext));
-      }
-    }
-
-    Timer.run(expectAsync(invokeNext));
-  }
-}
diff --git a/samples-dev/swarm/test/swarm_ui_lib/layout/css.dart b/samples-dev/swarm/test/swarm_ui_lib/layout/css.dart
deleted file mode 100644
index e066463..0000000
--- a/samples-dev/swarm/test/swarm_ui_lib/layout/css.dart
+++ /dev/null
@@ -1,351 +0,0 @@
-// File generated by Dart CSS from source file layout.scss
-// Do not edit.
-
-part of layout_tests;
-
-class AdaptiveLayout {
-  // selector, properties<propertyName, value>
-  static const selectors = const {
-    '#grid': const {
-      'display': '-dart-grid',
-      'grid-columns': 'auto minmax(min-content, 1fr)',
-      'grid-rows': 'auto minmax(min-content, 1fr) auto',
-    },
-    '#title': const {
-      'grid-column': '1',
-      'grid-row': '1',
-    },
-    '#score': const {
-      'grid-column': '1',
-      'grid-row': '3',
-    },
-    '#stats': const {
-      'grid-column': '1',
-      'grid-row': '2',
-      'grid-row-align': 'start',
-    },
-    '#board': const {
-      'grid-column': '2',
-      'grid-row': '1',
-      'grid-row-span': '2',
-    },
-    '#controls': const {
-      'grid-column': '2',
-      'grid-row': '3',
-      'grid-column-align': 'center',
-    },
-  };
-}
-
-class SourceIndependencePortrait {
-  // selector, properties<propertyName, value>
-  static const selectors = const {
-    '#grid': const {
-      'display': '-dart-grid',
-      'grid-template': '"ta" "sa" "bb" "cc"',
-      'grid-columns': 'auto minmax(min-content, 1fr)',
-      'grid-rows': 'auto auto minmax(min-content, 1fr) auto',
-    },
-    '#title': const {
-      'grid-cell': '"t"',
-    },
-    '#score': const {
-      'grid-cell': '"s"',
-    },
-    '#stats': const {
-      'grid-cell': '"a"',
-    },
-    '#board': const {
-      'grid-cell': '"b"',
-    },
-    '#controls': const {
-      'grid-cell': '"c"',
-    },
-  };
-}
-
-class SourceIndependenceLandscape {
-  // selector, properties<propertyName, value>
-  static const selectors = const {
-    '#grid': const {
-      'display': '-dart-grid',
-      'grid-template': '"tb" "ab" "sc"',
-      'grid-columns': 'auto minmax(min-content, 1fr)',
-      'grid-rows': 'auto minmax(min-content, 1fr) auto',
-    },
-    '#title': const {
-      'grid-cell': '"t"',
-    },
-    '#score': const {
-      'grid-cell': '"s"',
-    },
-    '#stats': const {
-      'grid-cell': '"a"',
-    },
-    '#board': const {
-      'grid-cell': '"b"',
-    },
-    '#controls': const {
-      'grid-cell': '"c"',
-    },
-  };
-}
-
-class GridLayering {
-  // selector, properties<propertyName, value>
-  static const selectors = const {
-    '#grid': const {
-      'display': '-dart-grid',
-      'grid-columns':
-          '"start" auto "track-start" 0.5fr "thumb-start" auto "fill-split" auto "thumb-end" 0.5fr "track-end" auto "end"',
-    },
-    '#lower-label': const {
-      'grid-column': '"start"',
-    },
-    '#track': const {
-      'grid-column': '"track-start" "track-end"',
-      'grid-row-align': 'center',
-    },
-    '#upper-label': const {
-      'grid-column': '"track-end"',
-    },
-    '#lower-fill': const {
-      'grid-column': '"track-start" "fill-split"',
-      'grid-row-align': 'center',
-      'grid-layer': '5',
-    },
-    '#upper-fill': const {
-      'grid-column': '"fill-split" "track-end"',
-      'grid-row-align': 'center',
-      'grid-layer': '5',
-    },
-    '#thumb': const {
-      'grid-column': '"thumb-start" "thumb-end"',
-      'grid-layer': '10',
-    },
-  };
-}
-
-class GridLines_5 {
-  // selector, properties<propertyName, value>
-  static const selectors = const {
-    '#grid': const {
-      'display': '-dart-grid',
-      'grid-columns': '150px 1fr',
-      'grid-rows': '50px 1fr 50px',
-    },
-    '#item1': const {
-      'grid-column': '2',
-      'grid-row': '1 4',
-    },
-  };
-}
-
-class GridLines_6 {
-  // selector, properties<propertyName, value>
-  static const selectors = const {
-    '#grid': const {
-      'display': '-dart-grid',
-      'grid-columns': '150px "item1-start" 1fr "item1-end"',
-      'grid-rows': '"item1-start" 50px 1fr 50px "item1-end"',
-    },
-    '#item1': const {
-      'grid-column': '"item1-start" "item1-end"',
-      'grid-row': '"item1-start" "item1-end"',
-    },
-  };
-}
-
-class GridCells {
-  // selector, properties<propertyName, value>
-  static const selectors = const {
-    '#grid': const {
-      'display': '-dart-grid',
-      'grid-template': '"ad" "bd" "cd"',
-      'grid-columns': '150px 1fr',
-      'grid-rows': '50px 1fr 50px',
-    },
-    '#item2': const {
-      'grid-cell': '"b"',
-      'grid-row-align': 'start',
-    },
-    '#item3': const {
-      'grid-cell': '"b"',
-      'grid-column-align': 'end',
-      'grid-row-align': 'end',
-    },
-  };
-}
-
-class StartEndingGridlines11a {
-  // selector, properties<propertyName, value>
-  static const selectors = const {
-    '#grid': const {
-      'display': '-dart-grid',
-      'grid-columns': '50px 1fr',
-      'grid-rows': '"first" 250px 1fr 250px "last"',
-    },
-    '#item': const {
-      'grid-column': '1 3',
-      'grid-row': '"first" "last"',
-    },
-  };
-}
-
-class StartEndingGridlines11b {
-  // selector, properties<propertyName, value>
-  static const selectors = const {
-    '#grid': const {
-      'display': '-dart-grid',
-      'grid-columns': '50px 1fr',
-      'grid-rows': '"first" 250px 1fr 250px "last"',
-    },
-    '#item': const {
-      'grid-column': 'start end',
-      'grid-row': 'start end',
-    },
-  };
-}
-
-class RepeatingColumnsRows {
-  // selector, properties<propertyName, value>
-  static const selectors = const {
-    '#grid': const {
-      'display': '-dart-grid',
-      'grid-columns': '10px ("content" 1fr 10px) [4]',
-      'grid-rows': '1fr',
-    },
-    '#col2': const {
-      'grid-column': '2',
-    },
-    '#col4': const {
-      'grid-column': '4',
-    },
-    '#col6': const {
-      'grid-column': '6',
-    },
-    '#col8': const {
-      'grid-column': '8',
-    },
-  };
-}
-
-class AnonymousGridCells {
-  // selector, properties<propertyName, value>
-  static const selectors = const {
-    '#grid': const {
-      'display': '-dart-grid',
-      'grid-rows': '"header" auto "main" 1fr "footer" auto',
-      'grid-columns': '1fr',
-    },
-    '#header': const {
-      'grid-row': '"header"',
-      'grid-column': 'start',
-    },
-    '#main': const {
-      'grid-row': '"main"',
-      'grid-column': 'start',
-    },
-    '#footer': const {
-      'grid-row': '"footer"',
-      'grid-column': 'start',
-    },
-  };
-}
-
-class ImplicitColumnsRows {
-  // selector, properties<propertyName, value>
-  static const selectors = const {
-    '#grid': const {
-      'display': '-dart-grid',
-      'grid-columns': '20px',
-      'grid-rows': '20px',
-    },
-    '#A': const {
-      'grid-column': '1',
-      'grid-row': '1',
-      'grid-column-align': 'start',
-      'grid-row-align': 'start',
-    },
-    '#B': const {
-      'grid-column': '5',
-      'grid-row': '1',
-      'grid-row-span': '2',
-    },
-    '#C': const {
-      'grid-column': '1',
-      'grid-row': '2',
-      'grid-column-span': '2',
-    },
-  };
-}
-
-class AlignGridItems {
-  // selector, properties<propertyName, value>
-  static const selectors = const {
-    '#grid': const {
-      'display': '-dart-grid',
-      'grid-columns': '1fr 1fr',
-      'grid-rows': '1fr 1fr',
-    },
-    '#A': const {
-      'grid-column': '1',
-      'grid-row': '1',
-      'grid-column-align': 'start',
-      'grid-row-align': 'start',
-    },
-    '#B': const {
-      'grid-column': '2',
-      'grid-row': '2',
-      'grid-column-align': 'end',
-      'grid-row-align': 'end',
-    },
-  };
-}
-
-class DrawOrderGridItems {
-  // selector, properties<propertyName, value>
-  static const selectors = const {
-    '#grid': const {
-      'display': '-dart-grid',
-      'grid-columns': '1fr 1fr',
-      'grid-rows': '1fr 1fr',
-    },
-    '#A': const {
-      'grid-column': '1',
-      'grid-row': '2',
-      'grid-column-span': '2',
-      'grid-row-align': 'end',
-    },
-    '#B': const {
-      'grid-column': '1',
-      'grid-row': '1',
-      'grid-layer': '10',
-    },
-    '#C': const {
-      'grid-column': '2',
-      'grid-row': '1',
-      'grid-row-align': 'start',
-      'margin-left': '-20px',
-    },
-    '#D': const {
-      'grid-column': '2',
-      'grid-row': '2',
-      'grid-column-align': 'end',
-      'grid-row-align': 'start',
-    },
-    '#E': const {
-      'grid-column': '1',
-      'grid-row': '1',
-      'grid-column-span': '2',
-      'grid-row-span': '2',
-      'grid-layer': '5',
-      'grid-column-align': 'center',
-      'grid-row-align': 'center',
-    },
-  };
-}
-
-class CSS {
-  // CSS class selectors:
-}
diff --git a/samples-dev/swarm/test/swarm_ui_lib/layout/grid_examples.dart b/samples-dev/swarm/test/swarm_ui_lib/layout/grid_examples.dart
deleted file mode 100644
index 3db78c7..0000000
--- a/samples-dev/swarm/test/swarm_ui_lib/layout/grid_examples.dart
+++ /dev/null
@@ -1,34 +0,0 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of layout_tests;
-
-/**
- * The examples from the spec: [http://dev.w3.org/csswg/css3-grid-align/]
- */
-// I've omitted examples that are subsumed by other examples, or examples
-// that illustrate features (such as grid-flow) that are currently
-// unsupported.
-class GridExamples {
-  // Note: controls is positioned in row 3 in the example. Might be a bug in
-  // the example, or they're using flow.
-  // TODO(jmesserly): also needed to set "display: inline-block" to get
-  // horizontal content sizing to work.
-  static const styles = const {
-    '1 Adaptive Layouts': AdaptiveLayout.selectors,
-    '2a Source Independence: Portrait': SourceIndependencePortrait.selectors,
-    '2b Source Independence: Landscape': SourceIndependenceLandscape.selectors,
-    '3 Grid Layering of Elements': GridLayering.selectors,
-    '5 Grid Lines': GridLines_5.selectors,
-    '6 Grid Lines': GridLines_6.selectors,
-    '7 Grid Cells': GridCells.selectors,
-    '11a Starting and Ending Grid Lines': StartEndingGridlines11a.selectors,
-    '11b Starting and Ending Grid Lines': StartEndingGridlines11b.selectors,
-    '12 Repeating Columns and Rows': RepeatingColumnsRows.selectors,
-    '17 Anonymous Grid Cells': AnonymousGridCells.selectors,
-    '20 Implicit Columns and Rows': ImplicitColumnsRows.selectors,
-    '22 Grid Item Alignment': AlignGridItems.selectors,
-    '23 Drawing Order of Grid Items': DrawOrderGridItems.selectors
-  };
-}
diff --git a/samples-dev/swarm/test/swarm_ui_lib/layout/grid_layout_demo.dart b/samples-dev/swarm/test/swarm_ui_lib/layout/grid_layout_demo.dart
deleted file mode 100644
index e12f234..0000000
--- a/samples-dev/swarm/test/swarm_ui_lib/layout/grid_layout_demo.dart
+++ /dev/null
@@ -1,132 +0,0 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of layout_tests;
-
-/**
- * An app for testing the grid layout system.
- */
-
-/** Creates a grid view structure given the CSS styles. */
-View createGrid(Map<String, Map<String, String>> styles) {
-  final gridStyle = styles['#grid'];
-
-  final children = new List<MockView>();
-  for (final String id in styles.keys) {
-    // All selectors in this test are id selectors string the # prefix.
-    assert(id.startsWith('#'));
-    String elemId = id.substring(1);
-    if (elemId != 'grid') {
-      children.add(new MockView(elemId, styles[id]));
-    }
-  }
-
-  return new MockCompositeView('grid', gridStyle, children);
-}
-
-void _onLoad() {
-  var query = SwarmUri.parsequerySelector(window.location.search)['q'];
-  if (query != null && query.length == 1) {
-    query = SwarmUri.decodeComponent(query[0]);
-    addGridStyles('100%', '100%', 'margin:0px;');
-    final view = createGrid(GridExamples.styles[query]);
-    view.addToDocument(document.body);
-    _addColorStyles();
-    printMetrics(query);
-  } else {
-    final html = new StringBuffer();
-    for (String ex in GridExamples.styles.keys) {
-      html.write('<div><a href="?q=$ex">Grid Example $ex</a></div>');
-    }
-    document.body.innerHtml = html.toString();
-  }
-}
-
-void addGridStyles(String width, String height, [String margin = '']) {
-  // Use monospace font and fixed line-height so the text size is predictable.
-  // TODO(jmesserly): only tested on Chromium Mac/Linux
-  Dom.addStyle('''
-    body { $margin }
-    #grid {
-      position: absolute;
-      width: $width;
-      height: $height;
-      border-color: black;
-    }
-    .grid-item {
-      border: solid 2px;
-      border-radius: 8px;
-      font-family:monospace;
-      font-size:16px;
-      line-height:20px;
-    }
-    ''');
-}
-
-void _addColorStyles() {
-  final grid = document.body.querySelector('#grid');
-  final colors = const [
-    'darkred',
-    'darkorange',
-    'darkgoldenrod',
-    'darkgreen',
-    'darkblue',
-    'darkviolet'
-  ];
-  int c = 0;
-  var node = grid.children[0];
-  while (node != null) {
-    if (node.id != '') {
-      node.style.cssText += "color:" + colors[c++];
-    }
-    node = node.nextElementSibling;
-  }
-}
-
-class MockCompositeView extends CompositeView {
-  MockCompositeView(String id, Map styles, List childViews) : super('') {
-    node.id = id;
-    CollectionUtils.copyMap(customStyle, styles);
-
-    for (final v in childViews) {
-      addChild(v);
-    }
-  }
-}
-
-class MockView extends View {
-  MockView(String id, Map styles)
-      : super.fromNode(
-            new Element.html('<div class="grid-item">MockView-$id</div>')) {
-    node.id = id;
-    CollectionUtils.copyMap(customStyle, styles);
-    // TODO(jmesserly): this is needed to get horizontal content-sizing to work
-    node.style.display = 'inline-block';
-  }
-}
-
-void printMetrics(String example) {
-  final node = document.body.querySelector('#grid');
-  String exampleId = example.split(' ')[0];
-  final sb = new StringBuffer();
-  sb.write("test('Spec Example $exampleId', () {\n");
-  sb.write("  verifyExample('$example', {\n");
-  final children = node.children;
-
-  scheduleMicrotask(() {
-    for (int i = 0; i < children.length; i++) {
-      _appendMetrics(sb, children[i], '    ');
-    }
-    sb.write('  });\n');
-    sb.write('});\n\n');
-    window.console.log(sb.toString());
-  });
-}
-
-void _appendMetrics(StringBuffer sb, Element node, [String indent = '']) {
-  String id = node.id;
-  num left = node.offsetLeft, top = node.offsetTop;
-  num width = node.offsetWidth, height = node.offsetHeight;
-  sb.write("${indent}'$id': [$left, $top, $width, $height],\n");
-}
diff --git a/samples-dev/swarm/test/swarm_ui_lib/layout/grid_layout_demo.html b/samples-dev/swarm/test/swarm_ui_lib/layout/grid_layout_demo.html
deleted file mode 100644
index 6d199ec..0000000
--- a/samples-dev/swarm/test/swarm_ui_lib/layout/grid_layout_demo.html
+++ /dev/null
@@ -1,12 +0,0 @@
-<!DOCTYPE html>
-<html>
-  <head>
-    <title>Grid Layout Demos</title>
-    <style type="text/css">
-    </style>
-    <script type="application/dart" src="grid_layout_demo.dart"></script>
-  </head>
-  <body>
-   <script src="http://dart.googlecode.com/svn/branches/bleeding_edge/dart/client/dart.js"></script>
-  </body>
-</html>
diff --git a/samples-dev/swarm/test/swarm_ui_lib/layout/layout.css b/samples-dev/swarm/test/swarm_ui_lib/layout/layout.css
deleted file mode 100644
index cc4296e..0000000
--- a/samples-dev/swarm/test/swarm_ui_lib/layout/layout.css
+++ /dev/null
@@ -1,18 +0,0 @@
-/* File generated by SCSS from source layout.scss
- * Do not edit.
- */
-
-/* @stylet export as AdaptiveLayout */
-/* @stylet export as SourceIndependencePortrait */
-/* @stylet export as SourceIndependenceLandscape */
-/* @stylet export as GridLayering */
-/* @stylet export as GridLines_5 */
-/* @stylet export as GridLines_6 */
-/* @stylet export as GridCells */
-/* @stylet export as StartEndingGridlines11a */
-/* @stylet export as StartEndingGridlines11b */
-/* @stylet export as RepeatingColumnsRows */
-/* @stylet export as AnonymousGridCells */
-/* @stylet export as ImplicitColumnsRows */
-/* @stylet export as AlignGridItems */
-/* @stylet export as DrawOrderGridItems */
diff --git a/samples-dev/swarm/test/swarm_ui_lib/layout/layout.scss b/samples-dev/swarm/test/swarm_ui_lib/layout/layout.scss
deleted file mode 100644
index 2bff753..0000000
--- a/samples-dev/swarm/test/swarm_ui_lib/layout/layout.scss
+++ /dev/null
@@ -1,316 +0,0 @@
-/* Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file */
-/* for details. All rights reserved. Use of this source code is governed by a */
-/* BSD-style license that can be found in the LICENSE file. */
-
-@stylet AdaptiveLayout {
-  #grid {
-    display: -dart-grid;
-    grid-columns: auto minmax(min-content, 1fr);
-    grid-rows: auto minmax(min-content, 1fr) auto;
-  }
-  #title {
-    grid-column: 1;
-    grid-row: 1;
-  }
-  #score {
-    grid-column: 1;
-    grid-row: 3;
-  }
-  #stats {
-    grid-column: 1;
-    grid-row: 2;
-    grid-row-align: start;
-  }
-  #board {
-    grid-column: 2;
-    grid-row: 1;
-    grid-row-span: 2;
-  }
-  #controls {
-    grid-column: 2;
-    grid-row: 3;
-    grid-column-align: center;
-  }
-}
-
-@stylet SourceIndependencePortrait {
-  #grid {
-    display: -dart-grid;
-    grid-template: "ta"
-                   "sa"
-                   "bb"
-                   "cc";
-    grid-columns: auto minmax(min-content, 1fr);
-    grid-rows: auto auto minmax(min-content, 1fr) auto;
-  }
-  #title {
-    grid-cell: "t";
-  }
-  #score {
-    grid-cell: "s";
-  }
-  #stats {
-    grid-cell: "a";
-  }
-  #board {
-    grid-cell: "b";
-  }
-  #controls {
-    grid-cell: "c";
-  }
-}
-
-@stylet SourceIndependenceLandscape {
-  #grid {
-    display: -dart-grid;
-    grid-template: "tb"
-                   "ab"
-                   "sc";
-    grid-columns: auto minmax(min-content, 1fr);
-    grid-rows: auto minmax(min-content, 1fr) auto;
-  }
-  #title {
-    grid-cell: "t";
-  }
-  #score {
-    grid-cell: "s";
-  }
-  #stats {
-    grid-cell: "a";
-  }
-  #board {
-    grid-cell: "b";
-  }
-  #controls {
-    grid-cell: "c";
-  }
-}
-
-@stylet GridLayering {
-  #grid {
-    display: -dart-grid;
-    grid-columns: "start"        auto
-                  "track-start"  0.5fr
-                  "thumb-start"  auto
-                  "fill-split"   auto
-                  "thumb-end"    0.5fr
-                  "track-end"    auto
-                  "end";
-  }
-  #lower-label {
-    grid-column: "start";
-  }
-  #track {
-    grid-column: "track-start" "track-end";
-    grid-row-align: center;
-  }
-  #upper-label {
-    grid-column: "track-end";
-  }
-  #lower-fill {
-    grid-column: "track-start" "fill-split";
-    grid-row-align: center; grid-layer: 5;
-  }
-  #upper-fill {
-    grid-column: "fill-split" "track-end";
-    grid-row-align: center;
-    grid-layer: 5;
-  }
-  #thumb {
-    grid-column: "thumb-start" "thumb-end";
-    grid-layer: 10;
-  }
-}
-
-@stylet GridLines_5 {
-  #grid {
-    display: -dart-grid;
-    grid-columns: 150px 1fr;
-    grid-rows: 50px 1fr 50px;
-  }
-  #item1 {
-    grid-column: 2;
-    grid-row: 1 4;
-  }
-}
-
-@stylet GridLines_6 {
-  #grid {
-    display: -dart-grid;
-    grid-columns: 150px "item1-start" 1fr "item1-end";
-    grid-rows: "item1-start" 50px 1fr 50px "item1-end";
-  }
-
-  #item1 {
-    grid-column: "item1-start" "item1-end";
-    grid-row: "item1-start" "item1-end";
-  }
-}
-
-@stylet GridCells {
-  #grid  {
-    display: -dart-grid;
-    grid-template: "ad"
-                   "bd"
-                   "cd";
-    grid-columns: 150px 1fr;
-    grid-rows: 50px 1fr 50px;
-  }
-  #item2 {
-    grid-cell: "b";
-    grid-row-align: start;
-  }
-  #item3 {
-    grid-cell: "b";
-    grid-column-align: end;
-    grid-row-align: end;
-  }
-}
-
-@stylet StartEndingGridlines11a {
-  #grid {
-    display: -dart-grid;
-    grid-columns: 50px 1fr;
-    grid-rows: "first" 250px 1fr 250px "last";
-  }
-  #item {
-    grid-column:1 3;
-    grid-row: "first" "last";
-  }
-}
-
-@stylet StartEndingGridlines11b {
-  #grid {
-    display: -dart-grid;
-    grid-columns: 50px 1fr;
-    grid-rows: "first" 250px 1fr 250px "last";
-  }
-  #item {
-    grid-column: start end;
-    grid-row: start end;
-  }
-}
-
-@stylet RepeatingColumnsRows {
-  #grid {
-    display: -dart-grid;
-    grid-columns: 10px ("content" 1fr 10px)[4];
-    grid-rows: 1fr;
-  }
-  #col2 {
-    grid-column: 2;
-  }
-  #col4 {
-    grid-column: 4;
-  }
-  #col6 {
-    grid-column: 6;
-  }
-  #col8 {
-    grid-column: 8;
-  }
-}
-
-@stylet AnonymousGridCells {
-  #grid {
-    display: -dart-grid;
-    grid-rows: "header" auto "main" 1fr "footer" auto;
-    grid-columns: 1fr;
-  }
-  #header {
-    grid-row: "header";
-    grid-column: start;
-  }
-  #main {
-    grid-row: "main";
-    grid-column: start;
-  }
-  #footer {
-    grid-row: "footer";
-    grid-column: start;
-  }
-}
-
-@stylet ImplicitColumnsRows {
-  #grid {
-    display: -dart-grid;
-    grid-columns: 20px;
-    grid-rows: 20px;
-  }
-  #A {
-    grid-column: 1;
-    grid-row: 1;
-    grid-column-align: start;
-    grid-row-align: start;
-  }
-  #B {
-    grid-column: 5;
-    grid-row: 1;
-    grid-row-span: 2;
-  }
-  #C {
-    grid-column: 1;
-    grid-row: 2;
-    grid-column-span: 2;
-  }
-}
-
-@stylet AlignGridItems {
-  #grid {
-    display: -dart-grid;
-    grid-columns: 1fr 1fr;
-    grid-rows: 1fr 1fr;
-   }
-  #A {
-    grid-column: 1;
-    grid-row: 1;
-    grid-column-align: start;
-    grid-row-align: start;
-  }
-  #B {
-    grid-column: 2;
-    grid-row: 2;
-    grid-column-align: end;
-    grid-row-align: end;
-  }
-}
-
-@stylet DrawOrderGridItems {
-  #grid {
-    display: -dart-grid;
-    grid-columns: 1fr 1fr;
-    grid-rows: 1fr 1fr;
-  }
-  #A {
-    grid-column: 1;
-    grid-row: 2;
-    grid-column-span: 2;
-    grid-row-align: end;
-  }
-  #B {
-    grid-column: 1;
-    grid-row: 1;
-    grid-layer: 10;
-  }
-  #C {
-    grid-column: 2;
-    grid-row: 1;
-    grid-row-align: start;
-    margin-left: -20px;
-  }
-  #D {
-    grid-column: 2;
-    grid-row: 2;
-    grid-column-align: end;
-    grid-row-align: start;
-  }
-  #E {
-    grid-column: 1; grid-row: 1;
-    grid-column-span: 2;
-    grid-row-span: 2;
-    grid-layer: 5;
-    grid-column-align: center;
-    grid-row-align: center;
-  }
- }
- 
\ No newline at end of file
diff --git a/samples-dev/swarm/test/swarm_ui_lib/layout/layout_test.dart b/samples-dev/swarm/test/swarm_ui_lib/layout/layout_test.dart
deleted file mode 100644
index 4b1cf60..0000000
--- a/samples-dev/swarm/test/swarm_ui_lib/layout/layout_test.dart
+++ /dev/null
@@ -1,193 +0,0 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library layout_tests;
-
-import 'package:expect/expect.dart';
-import 'dart:async';
-import 'dart:html';
-import '../../../swarm_ui_lib/base/base.dart';
-import '../../../swarm_ui_lib/layout/layout.dart';
-import '../../../swarm_ui_lib/view/view.dart';
-import '../../../swarm_ui_lib/util/utilslib.dart';
-import 'package:unittest/html_config.dart';
-import 'package:unittest/unittest.dart';
-
-part 'grid_layout_demo.dart';
-part 'grid_examples.dart';
-part 'css.dart';
-
-// TODO(jmesserly): these tests would be easier to work with if they were WebKit
-// layout tests. The way content shell works is exactly what we want for
-// testing layout: run the example and then print the element tree with metrics.
-// The UnitTestSuite wrapper gets in our way here, because you can't "see" the
-// test layout visually when you're debugging.
-// See these links for more info:
-//   http://www.webkit.org/quality/testwriting.html
-//   http://www.w3.org/Style/CSS/Test/guidelines.html
-
-// TODO(jmesserly): need parser unit tests, especially error conditions
-
-/**
- * Tests the grid layout. Currently based on examples from the spec at:
- * [http://dev.w3.org/csswg/css3-grid-align/]
- */
-main() {
-  useHtmlConfiguration();
-  addGridStyles('400px', '400px');
-
-  test('Spec Example 1', () {
-    return verifyExample('1 Adaptive Layouts', {
-      'title': [0, 0, 144, 24],
-      'score': [0, 376, 144, 24],
-      'stats': [0, 24, 144, 24],
-      'board': [144, 0, 256, 376],
-      'controls': [185, 376, 174, 24],
-    });
-  });
-
-  test('Spec Example 2a', () {
-    return verifyExample('2a Source Independence: Portrait', {
-      'title': [0, 0, 144, 24],
-      'score': [0, 24, 144, 24],
-      'stats': [144, 0, 256, 48],
-      'board': [0, 48, 400, 328],
-      'controls': [0, 376, 400, 24],
-    });
-  });
-
-  test('Spec Example 2b', () {
-    return verifyExample('2b Source Independence: Landscape', {
-      'title': [0, 0, 144, 24],
-      'score': [0, 376, 144, 24],
-      'stats': [0, 24, 144, 352],
-      'board': [144, 0, 256, 376],
-      'controls': [144, 376, 256, 24],
-    });
-  });
-
-  // Not currently supported, issue with
-  // http://dev.w3.org/csswg/css3-grid-layout/#function-CalculateNormalizedFractionBreadth
-  //test('Spec Example 3', () {
-  //  return verifyExample('3 Grid Layering of Elements', {
-  //    'lower-label': [0, 0, 204, 24],
-  //    'track': [204, 0, 144, 24],
-  //    'upper-label': [348, 0, 204, 24],
-  //    'lower-fill': [204, 0, 72, 24],
-  //    'upper-fill': [276, 0, 72, 24],
-  //    'thumb': [204, 0, 144, 24],
-  //  });
-  //});
-
-  test('Spec Example 5', () {
-    return verifyExample('5 Grid Lines', {
-      'item1': [125, 0, 275, 400],
-    });
-  });
-
-  test('Spec Example 6', () {
-    return verifyExample('6 Grid Lines', {
-      'item1': [125, 0, 275, 400],
-    });
-  });
-
-  test('Spec Example 7', () {
-    return verifyExample('7 Grid Cells', {
-      'item2': [0, 50, 125, 24],
-      'item3': [-19, 326, 144, 24],
-    });
-  });
-
-  test('Spec Example 11a', () {
-    return verifyExample('11a Starting and Ending Grid Lines', {
-      'item': [0, 0, 400, 400],
-    });
-  });
-
-  test('Spec Example 11b', () {
-    return verifyExample('11b Starting and Ending Grid Lines', {
-      'item': [0, 0, 400, 400],
-    });
-  });
-
-  test('Spec Example 12', () {
-    return verifyExample('12 Repeating Columns and Rows', {
-      'col2': [10, 0, 88, 400],
-      'col4': [108, 0, 87, 400],
-      'col6': [205, 0, 88, 400],
-      'col8': [303, 0, 87, 400],
-    });
-  });
-
-  test('Spec Example 17', () {
-    return verifyExample('17 Anonymous Grid Cells', {
-      'header': [0, 0, 400, 24],
-      'main': [0, 24, 400, 352],
-      'footer': [0, 376, 400, 24],
-    });
-  });
-
-  // Not currently supported, issue with
-  // http://dev.w3.org/csswg/css3-grid-layout/#function-CalculateNormalizedFractionBreadth
-  //test('Spec Example 20', () {
-  //  return verifyExample('20 Implicit Columns and Rows', {
-  //    'A': [0, 0, 104, 24],
-  //    'B': [104, 0, 104, 44],
-  //    'C': [0, 20, 104, 24],
-  //  });
-  //});
-
-  test('Spec Example 22', () {
-    return verifyExample('22 Grid Item Alignment', {
-      'A': [0, 0, 104, 24],
-      'B': [296, 376, 104, 24],
-    });
-  });
-
-  test('Spec Example 23', () {
-    return verifyExample('23 Drawing Order of Grid Items', {
-      'A': [0, 376, 400, 24],
-      'B': [0, 0, 200, 200],
-      'C': [200, 0, 200, 24],
-      'D': [296, 200, 104, 24],
-      'E': [148, 188, 104, 24],
-    });
-  });
-}
-
-// Note: to debug failures, best bet is to use GridLayoutDemo to run an
-// individual asyncTest and see the resulting layout.
-
-Future usingGrid(String example, Future test_(View grid)) {
-  final grid = createGrid(GridExamples.styles[example]);
-  grid.addToDocument(document.body);
-  return new Future.delayed(new Duration()).then((_) {
-    return test_(grid);
-  }).then((_) {
-    grid.removeFromDocument();
-  });
-}
-
-Future verifyGrid(String example, [Map expected = null]) {
-  printMetrics(example);
-  if (expected == null) {
-    return new Future.value();
-  }
-
-  for (String name in expected.keys) {
-    final values = expected[name];
-    final node = document.body.querySelector('#$name');
-    Expect.isNotNull(node);
-    return new Future.value().then((_) {
-      Expect.equals(values[0], node.offsetLeft);
-      Expect.equals(values[1], node.offsetTop);
-      Expect.equals(values[2], node.offsetWidth);
-      Expect.equals(values[3], node.offsetHeight);
-    });
-  }
-}
-
-Future verifyExample(String example, [Map expected = null]) {
-  return usingGrid(example, (grid) => verifyGrid(example, expected));
-}
diff --git a/samples-dev/swarm/test/swarm_ui_lib/observable/abstract_observable_tests.dart b/samples-dev/swarm/test/swarm_ui_lib/observable/abstract_observable_tests.dart
deleted file mode 100644
index 49c8e85..0000000
--- a/samples-dev/swarm/test/swarm_ui_lib/observable/abstract_observable_tests.dart
+++ /dev/null
@@ -1,75 +0,0 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of observable_tests;
-
-testAbstractObservable() {
-  group('addChangeListener()', () {
-    test('adding the same listener twice returns false the second time', () {
-      final target = new AbstractObservable();
-      final listener = (e) {};
-
-      expect(target.addChangeListener(listener), isTrue);
-      expect(target.addChangeListener(listener), isFalse);
-    });
-
-    test('modifies listeners list', () {
-      // check that add/remove works, see contents of listeners too
-      final target = new AbstractObservable();
-      final l1 = (e) {};
-      final l2 = (e) {};
-      final l3 = (e) {};
-      final l4 = (e) {};
-
-      expect(target.listeners, orderedEquals([]));
-
-      target.addChangeListener(l1);
-      expect(target.listeners, orderedEquals([l1]));
-
-      target.addChangeListener(l2);
-      expect(target.listeners, orderedEquals([l1, l2]));
-
-      target.addChangeListener(l3);
-      target.addChangeListener(l4);
-      expect(target.listeners, orderedEquals([l1, l2, l3, l4]));
-
-      target.removeChangeListener(l4);
-      expect(target.listeners, orderedEquals([l1, l2, l3]));
-
-      target.removeChangeListener(l2);
-      expect(target.listeners, orderedEquals([l1, l3]));
-
-      target.removeChangeListener(l1);
-      expect(target.listeners, orderedEquals([l3]));
-
-      target.removeChangeListener(l3);
-      expect(target.listeners, orderedEquals([]));
-    });
-  });
-
-  test('fires immediately if no batch', () {
-    // If no batch is created, a summary should be automatically created and
-    // fired on each property change.
-    final target = new AbstractObservable();
-    EventSummary res = null;
-    target.addChangeListener((summary) {
-      expect(res, isNull);
-      res = summary;
-      expect(res, isNotNull);
-    });
-
-    target.recordPropertyUpdate('pM', 10, 11);
-
-    expect(res, isNotNull);
-    expect(res.events, hasLength(1));
-    validateUpdate(res.events[0], target, 'pM', null, 10, 11);
-    res = null;
-
-    target.recordPropertyUpdate('pL', '11', '13');
-
-    expect(res, isNotNull);
-    expect(res.events, hasLength(1));
-    validateUpdate(res.events[0], target, 'pL', null, '11', '13');
-  });
-}
diff --git a/samples-dev/swarm/test/swarm_ui_lib/observable/change_event_tests.dart b/samples-dev/swarm/test/swarm_ui_lib/observable/change_event_tests.dart
deleted file mode 100644
index 1819fb6..0000000
--- a/samples-dev/swarm/test/swarm_ui_lib/observable/change_event_tests.dart
+++ /dev/null
@@ -1,41 +0,0 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of observable_tests;
-
-testChangeEvent() {
-  test('constructor', () {
-    // create property, list, global and check the proper initialization.
-    final target = new AbstractObservable();
-
-    validateUpdate(new ChangeEvent.property(target, 'pK', 33, '12'), target,
-        'pK', null, 33, '12');
-
-    validateUpdate(
-        new ChangeEvent.list(target, ChangeEvent.UPDATE, 3, 33, '12'),
-        target,
-        null,
-        3,
-        33,
-        '12');
-
-    validateInsert(
-        new ChangeEvent.list(target, ChangeEvent.INSERT, 3, 33, null),
-        target,
-        null,
-        3,
-        33);
-
-    validateRemove(
-        new ChangeEvent.list(target, ChangeEvent.REMOVE, 3, null, '12'),
-        target,
-        null,
-        3,
-        '12');
-
-    validateGlobal(
-        new ChangeEvent.list(target, ChangeEvent.GLOBAL, null, null, null),
-        target);
-  });
-}
diff --git a/samples-dev/swarm/test/swarm_ui_lib/observable/event_batch_tests.dart b/samples-dev/swarm/test/swarm_ui_lib/observable/event_batch_tests.dart
deleted file mode 100644
index 0e7a7cc..0000000
--- a/samples-dev/swarm/test/swarm_ui_lib/observable/event_batch_tests.dart
+++ /dev/null
@@ -1,40 +0,0 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of observable_tests;
-
-testEventBatch() {
-  test('EventBatch', () {
-    // check that all events are fired at the end. Use all record methods
-    // in abstract observable
-    final target = new AbstractObservable();
-    EventSummary res = null;
-    target.addChangeListener((summary) {
-      expect(res, isNull);
-      res = summary;
-      expect(res, isNotNull);
-    });
-
-    final f = EventBatch.wrap((e) {
-      target.recordPropertyUpdate('pM', 10, 11);
-      target.recordPropertyUpdate('pL', '11', '13');
-      target.recordListUpdate(2, 'a', 'b');
-      target.recordListInsert(5, 'a');
-      target.recordListRemove(4, 'c');
-      target.recordGlobalChange();
-    });
-
-    expect(res, isNull);
-    f(null);
-    expect(res, isNotNull);
-
-    expect(res.events, hasLength(6));
-    validateUpdate(res.events[0], target, 'pM', null, 10, 11);
-    validateUpdate(res.events[1], target, 'pL', null, '11', '13');
-    validateUpdate(res.events[2], target, null, 2, 'a', 'b');
-    validateInsert(res.events[3], target, null, 5, 'a');
-    validateRemove(res.events[4], target, null, 4, 'c');
-    validateGlobal(res.events[5], target);
-  });
-}
diff --git a/samples-dev/swarm/test/swarm_ui_lib/observable/observable_list_tests.dart b/samples-dev/swarm/test/swarm_ui_lib/observable/observable_list_tests.dart
deleted file mode 100644
index aaffb92..0000000
--- a/samples-dev/swarm/test/swarm_ui_lib/observable/observable_list_tests.dart
+++ /dev/null
@@ -1,122 +0,0 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of observable_tests;
-
-testObservableList() {
-  test('ObservableList', () {
-    final arr = new ObservableList<int>();
-
-    // Add some initial data before listening
-    arr.add(1);
-    arr.add(2);
-    arr.add(3);
-    arr.add(1);
-    arr.add(3);
-    arr.add(4);
-
-    expect(arr, orderedEquals([1, 2, 3, 1, 3, 4]));
-
-    // Add a listener that saves the events
-    EventSummary res = null;
-    arr.addChangeListener((summary) {
-      expect(res, isNull);
-      res = summary;
-      expect(res, isNotNull);
-    });
-
-    // execute some code with readonly operations only
-    expect(res, isNull);
-    bool called = false;
-    EventBatch.wrap((e) {
-      expect(arr, hasLength(6));
-      expect(arr[0], equals(1));
-      // TODO(sigmund): why we need write startIndex? it should be optional.
-      expect(arr.indexOf(4, 0), equals(5));
-      expect(arr.indexOf(1, 0), equals(0));
-      expect(arr.indexOf(1, 1), equals(3));
-      // TODO(rnystrom): Get rid of second arg when lastIndexOf has default.
-      expect(arr.lastIndexOf(1, arr.length - 1), equals(3));
-      expect(arr.last, equals(4));
-      final copy = new List<int>();
-      arr.forEach((i) {
-        copy.add(i);
-      });
-      expect(copy, orderedEquals([1, 2, 3, 1, 3, 4]));
-      called = true;
-    })(null);
-    expect(called, isTrue);
-    expect(res, isNull); // no change from read-only operators
-
-    // execute some code with mutations
-    expect(res, isNull);
-    called = false;
-    expect(arr, orderedEquals([1, 2, 3, 1, 3, 4]));
-    EventBatch.wrap((e) {
-      arr.add(5); // 1 2 3 1 3 4(5)
-      arr.add(6); // 1 2 3 1 3 4 5(6)
-      arr[1] = arr[arr.length - 1]; // 1(6)3 1 3 4 5 6
-      arr.add(7); // 1 6 3 1 3 4 5 6(7)
-      arr[5] = arr[8]; // 1 6 3 1 3(7)5 6 7
-      arr.add(42); // 1 6 3 1 3 7 5 6 7(42)
-      expect(arr.removeAt(3), equals(1)); // 1 6 3( )3 7 5 6 7 42
-      expect(arr.removeFirstElement(3), isTrue); // 1 6( )  3 7 5 6 7 42
-      expect(arr.removeLast(), equals(42)); // 1 6     3 7 5 6 7(  )
-      expect(arr.removeAllElements(6), equals(2)); // 1( )    3 7 5( )7
-      called = true;
-    })(null);
-    expect(called, isTrue);
-    expect(res, isNotNull);
-    expect(res.events, hasLength(11));
-    validateInsert(res.events[0], arr, null, 6, 5);
-    validateInsert(res.events[1], arr, null, 7, 6);
-    validateUpdate(res.events[2], arr, null, 1, 6, 2);
-    validateInsert(res.events[3], arr, null, 8, 7);
-    validateUpdate(res.events[4], arr, null, 5, 7, 4);
-    validateInsert(res.events[5], arr, null, 9, 42);
-    validateRemove(res.events[6], arr, null, 3, 1);
-    validateRemove(res.events[7], arr, null, 2, 3);
-    validateRemove(res.events[8], arr, null, 7, 42);
-    validateRemove(res.events[9], arr, null, 1, 6);
-    validateRemove(res.events[10], arr, null, 4, 6);
-    expect(arr, orderedEquals([1, 3, 7, 5, 7]));
-
-    res = null;
-    expect(res, isNull);
-    called = false;
-    // execute global mutations like sort and clear
-    EventBatch.wrap((e) {
-      arr.add(1);
-      arr.add(4);
-      arr.add(10);
-      arr.add(9);
-      arr.sort((int a, int b) {
-        return a - b;
-      });
-      called = true;
-    })(null);
-    expect(called, isTrue);
-    expect(res, isNotNull);
-    expect(res.events.length, equals(5));
-    validateInsert(res.events[0], arr, null, 5, 1);
-    validateInsert(res.events[1], arr, null, 6, 4);
-    validateInsert(res.events[2], arr, null, 7, 10);
-    validateInsert(res.events[3], arr, null, 8, 9);
-    validateGlobal(res.events[4], arr);
-    expect(arr, orderedEquals([1, 1, 3, 4, 5, 7, 7, 9, 10]));
-
-    res = null;
-    expect(res, isNull);
-    called = false;
-    EventBatch.wrap((e) {
-      arr.clear();
-      called = true;
-    })(null);
-    expect(called, isTrue);
-    expect(res, isNotNull);
-    expect(res.events, hasLength(1));
-    validateGlobal(res.events[0], arr);
-    expect(arr, orderedEquals([]));
-  });
-}
diff --git a/samples-dev/swarm/test/swarm_ui_lib/observable/observable_test.dart b/samples-dev/swarm/test/swarm_ui_lib/observable/observable_test.dart
deleted file mode 100644
index 296ecbe..0000000
--- a/samples-dev/swarm/test/swarm_ui_lib/observable/observable_test.dart
+++ /dev/null
@@ -1,49 +0,0 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library observable_tests;
-
-import '../../../swarm_ui_lib/observable/observable.dart';
-import 'package:unittest/html_config.dart';
-import 'package:unittest/unittest.dart';
-
-part 'abstract_observable_tests.dart';
-part 'change_event_tests.dart';
-part 'event_batch_tests.dart';
-part 'observable_list_tests.dart';
-part 'observable_value_tests.dart';
-
-void main() {
-  useHtmlConfiguration();
-  group('AbstractObservable', testAbstractObservable);
-  group('ChangeEvent', testChangeEvent);
-  group('EventBatch', testEventBatch);
-  group('ObservableList', testObservableList);
-  group('ObservableValue', testObservableValue);
-}
-
-void validateEvent(ChangeEvent e, target, pName, index, type, newVal, oldVal) {
-  expect(e.target, equals(target));
-  expect(e.propertyName, equals(pName));
-  expect(e.index, equals(index));
-  expect(e.type, equals(type));
-  expect(e.newValue, equals(newVal));
-  expect(e.oldValue, equals(oldVal));
-}
-
-void validateGlobal(ChangeEvent e, target) {
-  validateEvent(e, target, null, null, ChangeEvent.GLOBAL, null, null);
-}
-
-void validateInsert(ChangeEvent e, target, pName, index, newVal) {
-  validateEvent(e, target, pName, index, ChangeEvent.INSERT, newVal, null);
-}
-
-void validateRemove(ChangeEvent e, target, pName, index, oldVal) {
-  validateEvent(e, target, pName, index, ChangeEvent.REMOVE, null, oldVal);
-}
-
-void validateUpdate(ChangeEvent e, target, pName, index, newVal, oldVal) {
-  validateEvent(e, target, pName, index, ChangeEvent.UPDATE, newVal, oldVal);
-}
diff --git a/samples-dev/swarm/test/swarm_ui_lib/observable/observable_value_tests.dart b/samples-dev/swarm/test/swarm_ui_lib/observable/observable_value_tests.dart
deleted file mode 100644
index 2ee55c1..0000000
--- a/samples-dev/swarm/test/swarm_ui_lib/observable/observable_value_tests.dart
+++ /dev/null
@@ -1,46 +0,0 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-part of observable_tests;
-
-testObservableValue() {
-  test('ObservableValue', () {
-    final value = new ObservableValue<String>('initial');
-    expect(value.value, equals('initial'));
-
-    // Set value.
-    value.value = 'new';
-    expect(value.value, equals('new'));
-
-    // Change event is sent when value is changed.
-    EventSummary result = null;
-    value.addChangeListener((summary) {
-      expect(result, isNull);
-      result = summary;
-      expect(result, isNotNull);
-    });
-
-    value.value = 'newer';
-
-    expect(result, isNotNull);
-    expect(result.events.length, equals(1));
-    validateUpdate(result.events[0], value, 'value', null, 'newer', 'new');
-  });
-
-  test('does not raise event if unchanged', () {
-    final value = new ObservableValue<String>('foo');
-    expect(value.value, equals('foo'));
-
-    bool called = false;
-    value.addChangeListener((summary) {
-      called = true;
-    });
-
-    // Set it to the same value.
-    value.value = 'foo';
-
-    // Should not have gotten an event.
-    expect(called, isFalse);
-  });
-}
diff --git a/samples-dev/swarm/test/swarm_ui_lib/touch/touch_test.dart b/samples-dev/swarm/test/swarm_ui_lib/touch/touch_test.dart
deleted file mode 100644
index 1bd3436..0000000
--- a/samples-dev/swarm/test/swarm_ui_lib/touch/touch_test.dart
+++ /dev/null
@@ -1,52 +0,0 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library touchTests;
-
-import 'dart:html'; // TODO(rnystrom): Only needed to tell architecture.py
-// that this is a web test. Come up with cleaner solution.
-import 'package:unittest/html_config.dart';
-import 'package:unittest/unittest.dart';
-import '../../../swarm_ui_lib/touch/touch.dart';
-
-main() {
-  useHtmlConfiguration();
-  test('Solver', () {
-    expect(Solver.solve((x) => x * x, 81, 10), closeTo(9, 0.1));
-    expect(Solver.solve((x) => x * x, 0, 10), closeTo(0, 0.1));
-    expect(Solver.solve((x) => x * x, 1.5625, 10), closeTo(1.25, 0.1));
-    expect(Solver.solve((x) => 1 / x, 10, 1), closeTo(0.1, 0.1));
-  });
-
-  group('Momentum', () {
-    test('SingleDimensionPhysics', () {
-      expect(new SingleDimensionPhysics().solve(0, 0, 1), equals(0));
-      expect(new SingleDimensionPhysics().solve(0, 5, 1), equals(0));
-      expect(new SingleDimensionPhysics().solve(0, 100, 1), equals(0));
-      expect(new SingleDimensionPhysics().solve(0, 100, 0.5), equals(0));
-    });
-
-    test('TimeoutMomentum()', () {
-      final delegate = new TestMomentumDelegate();
-      final momentum = new TimeoutMomentum(null);
-    });
-  });
-}
-
-class TestMomentumDelegate {
-  Function onDecelerateCallback;
-  Function onDecelerationEndCallback;
-
-  void onDecelerate(num x, num y,
-      [num duration = 0, String timingFunction = null]) {
-    onDecelerateCallback(x, y, duration, timingFunction);
-  }
-
-  /**
-   * Callback for end of deceleration.
-   */
-  void onDecelerationEnd() {
-    onDecelerationEndCallback();
-  }
-}
diff --git a/samples-dev/swarm/test/swarm_ui_lib/util/util_test.dart b/samples-dev/swarm/test/swarm_ui_lib/util/util_test.dart
deleted file mode 100644
index 97b5890..0000000
--- a/samples-dev/swarm/test/swarm_ui_lib/util/util_test.dart
+++ /dev/null
@@ -1,45 +0,0 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library util_tests;
-
-import 'dart:html';
-import 'package:unittest/html_config.dart';
-import 'package:unittest/unittest.dart';
-import '../../../swarm_ui_lib/util/utilslib.dart';
-
-main() {
-  useHtmlConfiguration();
-  test('insertAt', () {
-    var a = [];
-    CollectionUtils.insertAt(a, 0, 1);
-    expect(a, orderedEquals([1]));
-
-    CollectionUtils.insertAt(a, 0, 2);
-    expect(a, orderedEquals([2, 1]));
-
-    CollectionUtils.insertAt(a, 0, 5);
-    CollectionUtils.insertAt(a, 0, 4);
-    CollectionUtils.insertAt(a, 0, 3);
-    expect(a, orderedEquals([3, 4, 5, 2, 1]));
-
-    a = [];
-    CollectionUtils.insertAt(a, 0, 1);
-    expect(a, orderedEquals([1]));
-
-    CollectionUtils.insertAt(a, 1, 2);
-    expect(a, orderedEquals([1, 2]));
-
-    CollectionUtils.insertAt(a, 1, 3);
-    CollectionUtils.insertAt(a, 3, 4);
-    CollectionUtils.insertAt(a, 3, 5);
-    expect(a, orderedEquals([1, 3, 2, 5, 4]));
-  });
-
-  test('defaultString', () {
-    expect(StringUtils.defaultString(null), isEmpty);
-    expect(StringUtils.defaultString(''), isEmpty);
-    expect(StringUtils.defaultString('test'), equals('test'));
-  });
-}
diff --git a/samples-dev/swarm/test/swarm_ui_lib/view/view_test.dart b/samples-dev/swarm/test/swarm_ui_lib/view/view_test.dart
deleted file mode 100644
index 663b45b..0000000
--- a/samples-dev/swarm/test/swarm_ui_lib/view/view_test.dart
+++ /dev/null
@@ -1,233 +0,0 @@
-// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-library view_tests;
-
-import 'dart:html';
-import '../../../swarm_ui_lib/view/view.dart';
-import 'package:unittest/html_config.dart';
-import 'package:unittest/unittest.dart';
-
-void main() {
-  useHtmlConfiguration();
-  test('does not render immediately', () {
-    final view = new TestView();
-    expect(view.isRendered, isFalse);
-
-    view.addToDocument(document.body);
-    expect(view.isRendered, isTrue);
-  });
-
-  group('addToDocument()', () {
-    test('causes view to render', () {
-      final view = new TestView();
-      view.addToDocument(document.body);
-      expect(view.isRendered, isTrue);
-    });
-
-    test('calls afterRender()', () {
-      var result = '';
-      final view = new TestView();
-      view.renderFn = () {
-        result = '${result}render';
-        return new Element.html('<div class="test"></div>');
-      };
-
-      view.afterRenderFn = (node) {
-        result = '${result}after';
-      };
-
-      view.addToDocument(document.body);
-      expect(result, equals('renderafter'));
-    });
-
-    test('calls enterDocument()', () {
-      final view = new TestView();
-      bool entered = false;
-      view.enterDocumentFn = () {
-        entered = true;
-      };
-
-      view.addToDocument(document.body);
-      expect(entered, isTrue);
-    });
-  });
-
-  group('afterRender()', () {
-    test('passes rendered node', () {
-      final rendered = new Element.html('<div class="node"></div>');
-      final view = new TestView();
-      view.renderFn = () => rendered;
-      view.afterRenderFn = (node) {
-        expect(node, equals(rendered));
-      };
-
-      view.addToDocument(document.body);
-    });
-  });
-
-  group('childViewAdded()', () {
-    test('calls enterDocument() if parent is in document', () {
-      final parent = new TestView();
-      parent.addToDocument(document.body);
-
-      bool entered = false;
-      final child = new TestView();
-      child.enterDocumentFn = () {
-        entered = true;
-      };
-
-      // Add the child.
-      parent.childViews = [child];
-      parent.childViewAdded(child);
-
-      expect(entered, isTrue);
-    });
-
-    test('does not call enterDocument() if parent is not in document', () {
-      final parent = new TestView();
-
-      bool entered = false;
-      final child = new TestView();
-      child.enterDocumentFn = () {
-        entered = true;
-      };
-
-      // Add the child.
-      parent.childViews = [child];
-      parent.childViewAdded(child);
-
-      expect(entered, isFalse);
-    });
-
-    test('calls enterDocument() each time added', () {
-      final parent = new TestView();
-      parent.addToDocument(document.body);
-
-      var entered = 0;
-      final child = new TestView();
-      child.enterDocumentFn = () {
-        entered++;
-      };
-
-      // Add the child.
-      parent.childViews = [child];
-      parent.childViewAdded(child);
-      parent.childViewRemoved(child);
-      parent.childViewAdded(child);
-      parent.childViewRemoved(child);
-      parent.childViewAdded(child);
-      parent.childViewRemoved(child);
-
-      expect(entered, equals(3));
-    });
-  });
-
-  group('childViewRemoved()', () {
-    test('calls exitDocument() if parent is in document', () {
-      final parent = new TestView();
-      parent.addToDocument(document.body);
-
-      bool exited = false;
-      final child = new TestView();
-      child.exitDocumentFn = () {
-        exited = true;
-      };
-
-      // Remove the child.
-      parent.childViews = [];
-      parent.childViewRemoved(child);
-
-      expect(exited, isTrue);
-    });
-
-    test('does not call exitDocument() if parent is not in document', () {
-      final parent = new TestView();
-
-      bool exited = false;
-      final child = new TestView();
-      child.exitDocumentFn = () {
-        exited = true;
-      };
-
-      // Remove the child.
-      parent.childViews = [];
-      parent.childViewRemoved(child);
-
-      expect(exited, isFalse);
-    });
-
-    test('calls exitDocument() each time removed', () {
-      final parent = new TestView();
-      parent.addToDocument(document.body);
-
-      var exited = 0;
-      final child = new TestView();
-      child.exitDocumentFn = () {
-        exited++;
-      };
-
-      // Add the child.
-      parent.childViews = [child];
-      parent.childViewAdded(child);
-      parent.childViewRemoved(child);
-      parent.childViewAdded(child);
-      parent.childViewRemoved(child);
-      parent.childViewAdded(child);
-      parent.childViewRemoved(child);
-
-      expect(exited, equals(3));
-    });
-  });
-
-  group('enterDocument()', () {
-    test('children are called before parents', () {
-      var result = '';
-
-      final parent = new TestView();
-      parent.enterDocumentFn = () {
-        result = '${result}parent';
-      };
-
-      final child = new TestView();
-      child.enterDocumentFn = () {
-        result = '${result}child';
-      };
-
-      parent.childViews = [child];
-
-      parent.addToDocument(document.body);
-      expect(result, equals('childparent'));
-    });
-  });
-}
-
-class TestView extends View {
-  Function renderFn;
-  Function afterRenderFn;
-  Function enterDocumentFn;
-  Function exitDocumentFn;
-  List<View> childViews;
-
-  TestView() : childViews = [] {
-    // Default behavior.
-    renderFn = () => new Element.html('<div class="test"></div>');
-    afterRenderFn = (node) {};
-    enterDocumentFn = () {};
-    exitDocumentFn = () {};
-  }
-
-  Element render() => renderFn();
-  void afterRender(Element node) {
-    afterRenderFn(node);
-  }
-
-  void enterDocument() {
-    enterDocumentFn();
-  }
-
-  void exitDocument() {
-    exitDocumentFn();
-  }
-}
diff --git a/sdk/lib/_http/http.dart b/sdk/lib/_http/http.dart
index f841bc5..6883fbc 100644
--- a/sdk/lib/_http/http.dart
+++ b/sdk/lib/_http/http.dart
@@ -753,6 +753,11 @@
  * [HeaderValue] can be used to conveniently build and parse header
  * values on this form.
  *
+ * Parameter values can be omitted, in which case the value is parsed as `null`.
+ * Values can be doubled quoted to allow characters outside of the RFC 7230
+ * token characters and backslash sequences can be used to represent the double
+ * quote and backslash characters themselves.
+ *
  * To build an [:accepts:] header with the value
  *
  *     text/plain; q=0.3, text/html
@@ -779,7 +784,8 @@
   /**
    * Creates a new header value object setting the value and parameters.
    */
-  factory HeaderValue([String value = "", Map<String, String> parameters]) {
+  factory HeaderValue(
+      [String value = "", Map<String, String> parameters = const {}]) {
     return new _HeaderValue(value, parameters);
   }
 
@@ -892,7 +898,7 @@
    * or in `parameters`, will have its value converted to lower-case.
    */
   factory ContentType(String primaryType, String subType,
-      {String charset, Map<String, String> parameters}) {
+      {String charset, Map<String, String> parameters = const {}}) {
     return new _ContentType(primaryType, subType, charset, parameters);
   }
 
diff --git a/sdk/lib/_http/http_headers.dart b/sdk/lib/_http/http_headers.dart
index d152153..e271935 100644
--- a/sdk/lib/_http/http_headers.dart
+++ b/sdk/lib/_http/http_headers.dart
@@ -641,8 +641,8 @@
   Map<String, String> _parameters;
   Map<String, String> _unmodifiableParameters;
 
-  _HeaderValue([this._value = "", Map<String, String> parameters]) {
-    if (parameters != null) {
+  _HeaderValue([this._value = "", Map<String, String> parameters = const {}]) {
+    if (parameters != null && parameters.isNotEmpty) {
       _parameters = new HashMap<String, String>.from(parameters);
     }
   }
@@ -659,18 +659,25 @@
 
   String get value => _value;
 
-  void _ensureParameters() {
-    if (_parameters == null) {
-      _parameters = new HashMap<String, String>();
-    }
-  }
+  Map<String, String> _ensureParameters() => _parameters ??= <String, String>{};
 
-  Map<String, String> get parameters {
-    _ensureParameters();
-    if (_unmodifiableParameters == null) {
-      _unmodifiableParameters = new UnmodifiableMapView(_parameters);
+  Map<String, String> get parameters =>
+      _unmodifiableParameters ??= UnmodifiableMapView(_ensureParameters());
+
+  static bool _isToken(String token) {
+    if (token.isEmpty) {
+      return false;
     }
-    return _unmodifiableParameters;
+    final delimiters = "\"(),/:;<=>?@[\]{}";
+    for (int i = 0; i < token.length; i++) {
+      int codeUnit = token.codeUnitAt(i);
+      if (codeUnit <= 32 ||
+          codeUnit >= 127 ||
+          delimiters.indexOf(token[i]) >= 0) {
+        return false;
+      }
+    }
+    return true;
   }
 
   String toString() {
@@ -678,7 +685,27 @@
     sb.write(_value);
     if (parameters != null && parameters.length > 0) {
       _parameters.forEach((String name, String value) {
-        sb..write("; ")..write(name)..write("=")..write(value);
+        sb..write("; ")..write(name);
+        if (value != null) {
+          sb.write("=");
+          if (_isToken(value)) {
+            sb.write(value);
+          } else {
+            sb.write('"');
+            int start = 0;
+            for (int i = 0; i < value.length; i++) {
+              // Can use codeUnitAt here instead.
+              int codeUnit = value.codeUnitAt(i);
+              if (codeUnit == 92 /* backslash */ ||
+                  codeUnit == 34 /* double quote */) {
+                sb.write(value.substring(start, i));
+                sb.write(r'\');
+                start = i;
+              }
+            }
+            sb..write(value.substring(start))..write('"');
+          }
+        }
       });
     }
     return sb.toString();
@@ -716,8 +743,12 @@
       index++;
     }
 
-    void maybeExpect(String expected) {
-      if (s[index] == expected) index++;
+    bool maybeExpect(String expected) {
+      if (done() || !s.startsWith(expected, index)) {
+        return false;
+      }
+      index++;
+      return true;
     }
 
     void parseParameters() {
@@ -753,16 +784,15 @@
               index++;
             } else if (s[index] == "\"") {
               index++;
-              break;
+              return sb.toString();
             }
             sb.write(s[index]);
             index++;
           }
-          return sb.toString();
+          throw new HttpException("Failed to parse header value");
         } else {
           // Parse non-quoted value.
-          var val = parseValue();
-          return val == "" ? null : val;
+          return parseValue();
         }
       }
 
@@ -771,23 +801,18 @@
         if (done()) return;
         String name = parseParameterName();
         skipWS();
-        if (done()) {
+        if (maybeExpect("=")) {
+          skipWS();
+          String value = parseParameterValue();
+          if (name == 'charset' && this is _ContentType) {
+            // Charset parameter of ContentTypes are always lower-case.
+            value = value.toLowerCase();
+          }
+          parameters[name] = value;
+          skipWS();
+        } else if (name.isNotEmpty) {
           parameters[name] = null;
-          return;
         }
-        maybeExpect("=");
-        skipWS();
-        if (done()) {
-          parameters[name] = null;
-          return;
-        }
-        String value = parseParameterValue();
-        if (name == 'charset' && this is _ContentType && value != null) {
-          // Charset parameter of ContentTypes are always lower-case.
-          value = value.toLowerCase();
-        }
-        parameters[name] = value;
-        skipWS();
         if (done()) return;
         // TODO: Implement support for multi-valued parameters.
         if (s[index] == valueSeparator) return;
@@ -821,7 +846,7 @@
       parameters.forEach((String key, String value) {
         String lowerCaseKey = key.toLowerCase();
         if (lowerCaseKey == "charset") {
-          value = value.toLowerCase();
+          value = value?.toLowerCase();
         }
         this._parameters[lowerCaseKey] = value;
       });
diff --git a/sdk/lib/_http/http_impl.dart b/sdk/lib/_http/http_impl.dart
index 890a570..761c12e 100644
--- a/sdk/lib/_http/http_impl.dart
+++ b/sdk/lib/_http/http_impl.dart
@@ -1760,9 +1760,9 @@
     request.headers
       ..host = host
       ..port = port
-      .._add(HttpHeaders.acceptEncodingHeader, "gzip");
+      ..add(HttpHeaders.acceptEncodingHeader, "gzip");
     if (_httpClient.userAgent != null) {
-      request.headers._add(HttpHeaders.userAgentHeader, _httpClient.userAgent);
+      request.headers.add(HttpHeaders.userAgentHeader, _httpClient.userAgent);
     }
     if (proxy.isAuthenticated) {
       // If the proxy configuration contains user information use that
@@ -2560,6 +2560,10 @@
           outgoing,
           _httpServer.defaultResponseHeaders,
           _httpServer.serverHeader);
+      // Parser found badRequest and sent out Response.
+      if (incoming.statusCode == HttpStatus.badRequest) {
+        response.statusCode = HttpStatus.badRequest;
+      }
       var request = new _HttpRequest(response, incoming, _httpServer, this);
       _streamFuture = outgoing.done.then((_) {
         response.deadline = null;
diff --git a/sdk/lib/_http/http_parser.dart b/sdk/lib/_http/http_parser.dart
index 0a17e19..6153ffa 100644
--- a/sdk/lib/_http/http_parser.dart
+++ b/sdk/lib/_http/http_parser.dart
@@ -249,6 +249,8 @@
   final List<int> _uriOrReasonPhrase = [];
   final List<int> _headerField = [];
   final List<int> _headerValue = [];
+  // The limit for method, uriOrReasonPhrase, header field and value
+  int _headerSizeLimit = 8 * 1024;
 
   int _httpVersion;
   int _transferLength = -1;
@@ -258,9 +260,14 @@
 
   bool _noMessageBody = false;
   int _remainingContent = -1;
+  bool _contentLength = false;
+  bool _transferEncoding = false;
 
   _HttpHeaders _headers;
 
+  // The limit for parsing chunk size
+  int _chunkSizeLimit = 0x7FFFFFFF;
+
   // The current incoming connection.
   _HttpIncoming _incoming;
   StreamSubscription<Uint8List> _socketSubscription;
@@ -433,7 +440,7 @@
             if (!_isTokenChar(byte)) {
               throw HttpException("Invalid request method");
             }
-            _method.add(byte);
+            _addWithValidation(_method, byte);
             if (!_requestParser) {
               throw HttpException("Invalid response line");
             }
@@ -458,12 +465,12 @@
           } else {
             // Did not parse HTTP version. Expect method instead.
             for (int i = 0; i < _httpVersionIndex; i++) {
-              _method.add(_Const.HTTP[i]);
+              _addWithValidation(_method, _Const.HTTP[i]);
             }
             if (byte == _CharCode.SP) {
               _state = _State.REQUEST_LINE_URI;
             } else {
-              _method.add(byte);
+              _addWithValidation(_method, byte);
               _httpVersion = _HttpVersion.UNDETERMINED;
               if (!_requestParser) {
                 throw HttpException("Invalid response line");
@@ -509,7 +516,7 @@
                 byte == _CharCode.LF) {
               throw HttpException("Invalid request method");
             }
-            _method.add(byte);
+            _addWithValidation(_method, byte);
           }
           break;
 
@@ -524,7 +531,7 @@
             if (byte == _CharCode.CR || byte == _CharCode.LF) {
               throw HttpException("Invalid request, unexpected $byte in URI");
             }
-            _uriOrReasonPhrase.add(byte);
+            _addWithValidation(_uriOrReasonPhrase, byte);
           }
           break;
 
@@ -591,7 +598,7 @@
               throw HttpException(
                   "Invalid response, unexpected $byte in reason phrase");
             }
-            _uriOrReasonPhrase.add(byte);
+            _addWithValidation(_uriOrReasonPhrase, byte);
           }
           break;
 
@@ -614,7 +621,7 @@
             _index--; // Make the new state see the LF again.
           } else {
             // Start of new header field.
-            _headerField.add(_toLowerCaseByte(byte));
+            _addWithValidation(_headerField, _toLowerCaseByte(byte));
             _state = _State.HEADER_FIELD;
           }
           break;
@@ -626,7 +633,7 @@
             if (!_isTokenChar(byte)) {
               throw HttpException("Invalid header field name, with $byte");
             }
-            _headerField.add(_toLowerCaseByte(byte));
+            _addWithValidation(_headerField, _toLowerCaseByte(byte));
           }
           break;
 
@@ -637,7 +644,7 @@
             _state = _State.HEADER_VALUE_FOLD_OR_END;
           } else if (byte != _CharCode.SP && byte != _CharCode.HT) {
             // Start of new header value.
-            _headerValue.add(byte);
+            _addWithValidation(_headerValue, byte);
             _state = _State.HEADER_VALUE;
           }
           break;
@@ -648,7 +655,7 @@
           } else if (byte == _CharCode.LF) {
             _state = _State.HEADER_VALUE_FOLD_OR_END;
           } else {
-            _headerValue.add(byte);
+            _addWithValidation(_headerValue, byte);
           }
           break;
 
@@ -663,9 +670,21 @@
           } else {
             String headerField = new String.fromCharCodes(_headerField);
             String headerValue = new String.fromCharCodes(_headerValue);
-            if (headerField == HttpHeaders.transferEncodingHeader &&
-                _caseInsensitiveCompare("chunked".codeUnits, _headerValue)) {
-              _chunked = true;
+            if (headerField == HttpHeaders.contentLengthHeader) {
+              // Content Length header should not have more than one occurance
+              // or coexist with Transfer Encoding header.
+              if (_contentLength || _transferEncoding) {
+                _statusCode = HttpStatus.badRequest;
+              }
+              _contentLength = true;
+            } else if (headerField == HttpHeaders.transferEncodingHeader) {
+              _transferEncoding = true;
+              if (_caseInsensitiveCompare("chunked".codeUnits, _headerValue)) {
+                _chunked = true;
+              }
+              if (_contentLength) {
+                _statusCode = HttpStatus.badRequest;
+              }
             }
             if (headerField == HttpHeaders.connectionHeader) {
               List<String> tokens = _tokenizeFieldValue(headerValue);
@@ -680,10 +699,10 @@
                     (isUpgrade && isResponse && isUpgradeCode)) {
                   _connectionUpgrade = true;
                 }
-                _headers._add(headerField, tokens[i]);
+                _headers.add(headerField, tokens[i]);
               }
             } else {
-              _headers._add(headerField, headerValue);
+              _headers.add(headerField, headerValue);
             }
             _headerField.clear();
             _headerValue.clear();
@@ -695,8 +714,8 @@
               _index--; // Make the new state see the LF again.
             } else {
               // Start of new header field.
-              _headerField.add(_toLowerCaseByte(byte));
               _state = _State.HEADER_FIELD;
+              _addWithValidation(_headerField, _toLowerCaseByte(byte));
             }
           }
           break;
@@ -725,6 +744,10 @@
             _state = _State.CHUNK_SIZE_EXTENSION;
           } else {
             int value = _expectHexDigit(byte);
+            // Checks whether (_remaingingContent * 16 + value) overflows.
+            if (_remainingContent > _chunkSizeLimit >> 4) {
+              throw HttpException('Chunk size overflows the integer');
+            }
             _remainingContent = _remainingContent * 16 + value;
           }
           break;
@@ -918,6 +941,9 @@
     _noMessageBody = false;
     _remainingContent = -1;
 
+    _contentLength = false;
+    _transferEncoding = false;
+
     _headers = null;
   }
 
@@ -990,6 +1016,48 @@
     }
   }
 
+  void _addWithValidation(List<int> list, int byte) {
+    if (list.length < _headerSizeLimit) {
+      list.add(byte);
+    } else {
+      _reportSizeLimitError();
+    }
+  }
+
+  void _reportSizeLimitError() {
+    String method = "";
+    switch (_state) {
+      case _State.START:
+      case _State.METHOD_OR_RESPONSE_HTTP_VERSION:
+      case _State.REQUEST_LINE_METHOD:
+        method = "Method";
+        break;
+
+      case _State.REQUEST_LINE_URI:
+        method = "URI";
+        break;
+
+      case _State.RESPONSE_LINE_REASON_PHRASE:
+        method = "Reason phrase";
+        break;
+
+      case _State.HEADER_START:
+      case _State.HEADER_FIELD:
+        method = "Header field";
+        break;
+
+      case _State.HEADER_VALUE_START:
+      case _State.HEADER_VALUE:
+        method = "Header value";
+        break;
+
+      default:
+        throw UnsupportedError("Unexpected state: $_state");
+        break;
+    }
+    throw HttpException("$method exceeds the $_headerSizeLimit size limit");
+  }
+
   void _createIncoming(int transferLength) {
     assert(_incoming == null);
     assert(_bodyController == null);
diff --git a/sdk/lib/_http/websocket.dart b/sdk/lib/_http/websocket.dart
index 77b5008..45cc5117 100644
--- a/sdk/lib/_http/websocket.dart
+++ b/sdk/lib/_http/websocket.dart
@@ -331,11 +331,14 @@
   static const int CLOSED = closed;
 
   /**
-   * Set and get the interval for sending ping signals. If a ping message is not
-   * answered by a pong message from the peer, the `WebSocket` is assumed
-   * disconnected and the connection is closed with a
-   * [WebSocketStatus.goingAway] close code. When a ping signal is sent, the
-   * pong message must be received within [pingInterval].
+   * The interval between ping signals.
+   *
+   * A ping message is sent every [pingInterval], starting at the first
+   * [pingInterval] after a new value has been assigned or a pong message has
+   * been received. If a ping message is not answered by a pong message from the
+   * peer, the `WebSocket` is assumed disconnected and the connection is closed
+   * with a [WebSocketStatus.goingAway] close code. When a ping signal is sent,
+   * the pong message must be received within [pingInterval].
    *
    * There are never two outstanding pings at any given time, and the next ping
    * timer starts when the pong is received.
diff --git a/sdk/lib/_http/websocket_impl.dart b/sdk/lib/_http/websocket_impl.dart
index ce015bb..820dd69 100644
--- a/sdk/lib/_http/websocket_impl.dart
+++ b/sdk/lib/_http/websocket_impl.dart
@@ -1205,8 +1205,12 @@
       if (_writeClosed) return;
       _consumer.add(new _WebSocketPing());
       _pingTimer = new Timer(_pingInterval, () {
+        _closeTimer?.cancel();
         // No pong received.
         _close(WebSocketStatus.goingAway);
+        _closeCode = _outCloseCode;
+        _closeReason = _outCloseReason;
+        _controller.close();
       });
     });
   }
diff --git a/sdk/lib/_internal/js_dev_runtime/patch/core_patch.dart b/sdk/lib/_internal/js_dev_runtime/patch/core_patch.dart
index 2e1587c..0000252 100644
--- a/sdk/lib/_internal/js_dev_runtime/patch/core_patch.dart
+++ b/sdk/lib/_internal/js_dev_runtime/patch/core_patch.dart
@@ -72,9 +72,6 @@
 
   @JSExportName('as')
   static Object _as_Object(Object o) => o;
-
-  @JSExportName('_check')
-  static Object _check_Object(Object o) => o;
 }
 
 @patch
@@ -89,14 +86,7 @@
   static Object _as_Null(Object o) {
     // Avoid extra function call to core.Null.is() by manually inlining.
     if (o == null) return o;
-    return dart.cast(o, dart.unwrapType(Null), false);
-  }
-
-  @JSExportName('_check')
-  static Object _check_Null(Object o) {
-    // Avoid extra function call to core.Null.is() by manually inlining.
-    if (o == null) return o;
-    return dart.cast(o, dart.unwrapType(Null), true);
+    return dart.cast(o, dart.unwrapType(Null));
   }
 }
 
@@ -135,14 +125,7 @@
   static Object _as_Function(Object o) {
     // Avoid extra function call to core.Function.is() by manually inlining.
     if (JS<Object>('!', 'typeof $o == "function"') || o == null) return o;
-    return dart.cast(o, dart.unwrapType(Function), false);
-  }
-
-  @JSExportName('_check')
-  static Object _check_Function(Object o) {
-    // Avoid extra function call to core.Function.is() by manually inlining.
-    if (JS<Object>('!', 'typeof $o == "function"') || o == null) return o;
-    return dart.cast(o, dart.unwrapType(Function), true);
+    return dart.cast(o, dart.unwrapType(Function));
   }
 }
 
@@ -217,17 +200,7 @@
         o == null) {
       return o;
     }
-    return dart.cast(o, dart.unwrapType(int), false);
-  }
-
-  @JSExportName('_check')
-  static Object _check_int(Object o) {
-    // Avoid extra function call to core.int.is() by manually inlining.
-    if (JS<bool>('!', '(typeof $o == "number" && Math.floor($o) == $o)') ||
-        o == null) {
-      return o;
-    }
-    return dart.cast(o, dart.unwrapType(int), true);
+    return dart.cast(o, dart.unwrapType(int));
   }
 }
 
@@ -253,14 +226,7 @@
   static Object _as_double(o) {
     // Avoid extra function call to core.double.is() by manually inlining.
     if (JS<bool>('!', 'typeof $o == "number"') || o == null) return o;
-    return dart.cast(o, dart.unwrapType(double), false);
-  }
-
-  @JSExportName('_check')
-  static Object _check_double(o) {
-    // Avoid extra function call to core.double.is() by manually inlining.
-    if (JS<bool>('!', 'typeof $o == "number"') || o == null) return o;
-    return dart.cast(o, dart.unwrapType(double), true);
+    return dart.cast(o, dart.unwrapType(double));
   }
 }
 
@@ -275,14 +241,7 @@
   static Object _as_num(o) {
     // Avoid extra function call to core.num.is() by manually inlining.
     if (JS<bool>('!', 'typeof $o == "number"') || o == null) return o;
-    return dart.cast(o, dart.unwrapType(num), false);
-  }
-
-  @JSExportName('_check')
-  static Object _check_num(o) {
-    // Avoid extra function call to core.num.is() by manually inlining.
-    if (JS<bool>('!', 'typeof $o == "number"') || o == null) return o;
-    return dart.cast(o, dart.unwrapType(num), true);
+    return dart.cast(o, dart.unwrapType(num));
   }
 }
 
@@ -657,14 +616,7 @@
   static Object _as_String(Object o) {
     // Avoid extra function call to core.String.is() by manually inlining.
     if (JS<bool>('!', 'typeof $o == "string"') || o == null) return o;
-    return dart.cast(o, dart.unwrapType(String), false);
-  }
-
-  @JSExportName('_check')
-  static Object _check_String(Object o) {
-    // Avoid extra function call to core.String.is() by manually inlining.
-    if (JS<bool>('!', 'typeof $o == "string"') || o == null) return o;
-    return dart.cast(o, dart.unwrapType(String), true);
+    return dart.cast(o, dart.unwrapType(String));
   }
 }
 
@@ -695,14 +647,7 @@
   static Object _as_bool(Object o) {
     // Avoid extra function call to core.bool.is() by manually inlining.
     if (JS<bool>("!", '$o === true || $o === false') || o == null) return o;
-    return dart.cast(o, dart.unwrapType(bool), false);
-  }
-
-  @JSExportName('_check')
-  static Object _check_bool(Object o) {
-    // Avoid extra function call to core.bool.is() by manually inlining.
-    if (JS<bool>("!", '$o === true || $o === false') || o == null) return o;
-    return dart.cast(o, dart.unwrapType(bool), true);
+    return dart.cast(o, dart.unwrapType(bool));
   }
 }
 
diff --git a/sdk/lib/_internal/js_dev_runtime/patch/io_patch.dart b/sdk/lib/_internal/js_dev_runtime/patch/io_patch.dart
index 514ffcb..48a0969 100644
--- a/sdk/lib/_internal/js_dev_runtime/patch/io_patch.dart
+++ b/sdk/lib/_internal/js_dev_runtime/patch/io_patch.dart
@@ -406,9 +406,16 @@
   }
 
   @patch
-  factory InternetAddress(String address) {
+  factory InternetAddress(String address, {InternetAddressType type}) {
     throw UnsupportedError("InternetAddress");
   }
+
+  @patch
+  factory InternetAddress.fromRawAddress(Uint8List rawAddress,
+      {InternetAddressType type}) {
+    throw new UnsupportedError("InternetAddress.fromRawAddress");
+  }
+
   @patch
   static Future<List<InternetAddress>> lookup(String host,
       {InternetAddressType type = InternetAddressType.any}) {
diff --git a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/classes.dart b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/classes.dart
index 862dd7e..04b4f2f 100644
--- a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/classes.dart
+++ b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/classes.dart
@@ -535,16 +535,7 @@
       '',
       '''#.as = function as_C(obj) {
     if (obj == null || obj[#]) return obj;
-    return #(obj, this, false);
-  }''',
-      ctor,
-      isClass,
-      cast);
-  JS(
-      '',
-      '''#._check = function check_C(obj) {
-    if (obj == null || obj[#]) return obj;
-    return #(obj, this, true);
+    return #(obj, this);
   }''',
       ctor,
       isClass,
diff --git a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart
index 4a5813d..699f415 100644
--- a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart
+++ b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart
@@ -38,11 +38,10 @@
       null, Symbol('<Unexpected Null Value>'), null, null, null);
 }
 
-castError(obj, expectedType, [@notNull bool isImplicit = false]) {
+castError(obj, expectedType) {
   var actualType = getReifiedType(obj);
   var message = _castErrorMessage(actualType, expectedType);
-  var error = isImplicit ? TypeErrorImpl(message) : CastErrorImpl(message);
-  throw error;
+  throw TypeErrorImpl(message);
 }
 
 String _castErrorMessage(from, to) {
diff --git a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart
index 2bd044b..a89ec92 100644
--- a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart
+++ b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart
@@ -134,7 +134,7 @@
   if (f != null) {
     var setterType = getSetterType(getType(obj), f);
     if (setterType != null) {
-      return JS('', '#[#] = #._check(#)', obj, f, setterType, value);
+      return JS('', '#[#] = #.as(#)', obj, f, setterType, value);
     }
     // Always allow for JS interop objects.
     if (isJsInterop(obj)) return JS('', '#[#] = #', obj, f, value);
@@ -179,14 +179,14 @@
   }
   // Now that we know the signature matches, we can perform type checks.
   for (var i = 0; i < requiredCount; ++i) {
-    JS('', '#[#]._check(#[#])', required, i, actuals, i);
+    JS('', '#[#].as(#[#])', required, i, actuals, i);
   }
   for (var i = 0; i < extras; ++i) {
-    JS('', '#[#]._check(#[#])', optionals, i, actuals, i + requiredCount);
+    JS('', '#[#].as(#[#])', optionals, i, actuals, i + requiredCount);
   }
   if (names != null) {
     for (var name in names) {
-      JS('', '#[#]._check(#[#])', named, name, namedActuals, name);
+      JS('', '#[#].as(#[#])', named, name, namedActuals, name);
     }
   }
   return null;
@@ -397,13 +397,13 @@
 }
 
 @JSExportName('as')
-cast(obj, type, @notNull bool isImplicit) {
+cast(obj, type) {
   if (obj == null) return obj;
   var actual = getReifiedType(obj);
   if (isSubtypeOf(actual, type)) {
     return obj;
   }
-  return castError(obj, type, isImplicit);
+  return castError(obj, type);
 }
 
 bool test(bool obj) {
@@ -419,7 +419,7 @@
 void _throwBooleanConversionError() => throw BooleanConversionAssertionError();
 
 void booleanConversionFailed(obj) {
-  var actual = typeName(getReifiedType(test(obj)));
+  var actual = typeName(getReifiedType(obj));
   throw TypeErrorImpl("type '$actual' is not a 'bool' in boolean expression");
 }
 
@@ -427,7 +427,7 @@
   if (obj == null) return null;
 
   if (JS('!', 'Math.floor(#) != #', obj, obj)) {
-    castError(obj, JS('', '#', int), false);
+    castError(obj, JS('', '#', int));
   }
   return obj;
 }
@@ -448,7 +448,7 @@
 }
 
 /// No-op without null safety enabled.
-nullCast(x, type, [@notNull bool isImplicit = false]) => x;
+nullCast(x, type) => x;
 
 /// The global constant map table.
 final constantMaps = JS('', 'new Map()');
diff --git a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart
index a6d17de..b3fad43 100644
--- a/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart
+++ b/sdk/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart
@@ -46,10 +46,9 @@
 ///
 ///     T.is(o): Implements 'o is T'.
 ///     T.as(o): Implements 'o as T'.
-///     T._check(o): Implements the type assertion of 'T x = o;'
 ///
 /// By convention, we used named JavaScript functions for these methods with the
-/// name 'is_X', 'as_X' and 'check_X' for various X to indicate the type or the
+/// name 'is_X' and 'as_X' for various X to indicate the type or the
 /// implementation strategy for the test (e.g 'is_String', 'is_G' for generic
 /// types, etc.)
 // TODO(jmesserly): we shouldn't implement Type here. It should be moved down
@@ -63,10 +62,7 @@
   bool is_T(object) => instanceOf(object, this);
 
   @JSExportName('as')
-  as_T(object) => cast(object, this, false);
-
-  @JSExportName('_check')
-  check_T(object) => cast(object, this, true);
+  as_T(object) => cast(object, this);
 }
 
 class DynamicType extends DartType {
@@ -77,9 +73,6 @@
 
   @JSExportName('as')
   as_T(object) => object;
-
-  @JSExportName('_check')
-  check_T(object) => object;
 }
 
 @notNull
@@ -178,10 +171,7 @@
   bool is_T(obj) => isRawJSType(obj) || instanceOf(obj, this);
 
   @JSExportName('as')
-  as_T(obj) => obj == null || is_T(obj) ? obj : castError(obj, this, false);
-
-  @JSExportName('_check')
-  check_T(obj) => obj == null || is_T(obj) ? obj : castError(obj, this, true);
+  as_T(obj) => obj == null || is_T(obj) ? obj : castError(obj, this);
 }
 
 /// An anonymous JS type
@@ -196,10 +186,7 @@
   bool is_T(obj) => _isJsObject(obj) || instanceOf(obj, this);
 
   @JSExportName('as')
-  as_T(obj) => obj == null || _isJsObject(obj) ? obj : cast(obj, this, false);
-
-  @JSExportName('_check')
-  check_T(obj) => obj == null || _isJsObject(obj) ? obj : cast(obj, this, true);
+  as_T(obj) => obj == null || _isJsObject(obj) ? obj : cast(obj, this);
 }
 
 void _warn(arg) {
@@ -486,7 +473,7 @@
   }
 
   @JSExportName('as')
-  as_T(obj, [@notNull bool isImplicit = false]) {
+  as_T(obj) {
     if (obj == null) return obj;
     if (JS('!', 'typeof # == "function"', obj)) {
       var actual = JS('', '#[#]', obj, _runtimeType);
@@ -496,11 +483,8 @@
         return obj;
       }
     }
-    return castError(obj, this, isImplicit);
+    return castError(obj, this);
   }
-
-  @JSExportName('_check')
-  check_T(obj) => as_T(obj, true);
 }
 
 /// A type variable, used by [GenericFunctionType] to represent a type formal.
@@ -677,13 +661,7 @@
   @JSExportName('as')
   as_T(obj) {
     if (obj == null || is_T(obj)) return obj;
-    return castError(obj, this, false);
-  }
-
-  @JSExportName('_check')
-  check_T(obj) {
-    if (obj == null || is_T(obj)) return obj;
-    return castError(obj, this, true);
+    return castError(obj, this);
   }
 }
 
diff --git a/sdk/lib/_internal/js_runtime/lib/async_patch.dart b/sdk/lib/_internal/js_runtime/lib/async_patch.dart
index 480a17b..3da215e 100644
--- a/sdk/lib/_internal/js_runtime/lib/async_patch.dart
+++ b/sdk/lib/_internal/js_runtime/lib/async_patch.dart
@@ -205,7 +205,8 @@
     }
   }
 
-  void completeError(e, [st]) {
+  void completeError(Object e, [StackTrace st]) {
+    st ??= AsyncError.defaultStackTrace(e);
     if (isSync) {
       _future._completeError(e, st);
     } else {
diff --git a/sdk/lib/_internal/js_runtime/lib/io_patch.dart b/sdk/lib/_internal/js_runtime/lib/io_patch.dart
index 37aa15c..146776c 100644
--- a/sdk/lib/_internal/js_runtime/lib/io_patch.dart
+++ b/sdk/lib/_internal/js_runtime/lib/io_patch.dart
@@ -406,9 +406,16 @@
   }
 
   @patch
-  factory InternetAddress(String address) {
+  factory InternetAddress(String address, {InternetAddressType type}) {
     throw new UnsupportedError("InternetAddress");
   }
+
+  @patch
+  factory InternetAddress.fromRawAddress(Uint8List rawAddress,
+      {InternetAddressType type}) {
+    throw new UnsupportedError("InternetAddress.fromRawAddress");
+  }
+
   @patch
   static Future<List<InternetAddress>> lookup(String host,
       {InternetAddressType type: InternetAddressType.any}) {
diff --git a/sdk/lib/_internal/js_runtime/lib/rti.dart b/sdk/lib/_internal/js_runtime/lib/rti.dart
index d7764df..22af777 100644
--- a/sdk/lib/_internal/js_runtime/lib/rti.dart
+++ b/sdk/lib/_internal/js_runtime/lib/rti.dart
@@ -55,12 +55,6 @@
   @pragma('dart2js:noElision')
   dynamic _as;
 
-  /// JavaScript method for type check.  The method is called from generated
-  /// code, e.g. parameter check for `T param` generates something like
-  /// `rtiForT._check(param)`.
-  @pragma('dart2js:noElision')
-  dynamic _check;
-
   /// JavaScript method for 'is' test.  The method is called from generated
   /// code, e.g. `o is T` generates something like `rtiForT._is(o)`.
   @pragma('dart2js:noElision')
@@ -70,10 +64,6 @@
     rti._as = fn;
   }
 
-  static void _setTypeCheckFunction(Rti rti, fn) {
-    rti._check = fn;
-  }
-
   static void _setIsTestFunction(Rti rti, fn) {
     rti._is = fn;
   }
@@ -837,12 +827,10 @@
   if (isObjectType(testRti)) {
     isFn = RAW_DART_FUNCTION_REF(_isObject);
     Rti._setAsCheckFunction(testRti, RAW_DART_FUNCTION_REF(_asObject));
-    Rti._setTypeCheckFunction(testRti, RAW_DART_FUNCTION_REF(_checkObject));
   } else if (isTopType(testRti)) {
     isFn = RAW_DART_FUNCTION_REF(_isTop);
     var asFn = RAW_DART_FUNCTION_REF(_asTop);
     Rti._setAsCheckFunction(testRti, asFn);
-    Rti._setTypeCheckFunction(testRti, asFn);
   } else if (_Utils.isIdentical(testRti, TYPE_REF<int>())) {
     isFn = RAW_DART_FUNCTION_REF(_isInt);
   } else if (_Utils.isIdentical(testRti, TYPE_REF<double>())) {
@@ -924,23 +912,6 @@
   Rti objectRti = instanceOrFunctionType(object, testRti);
   String message =
       _Error.compose(object, objectRti, _rtiToString(testRti, null));
-  throw _CastError.fromMessage(message);
-}
-
-/// Called from generated code.
-_generalTypeCheckImplementation(object) {
-  // This static method is installed on an Rti object as a JavaScript instance
-  // method. The Rti object is 'this'.
-  Rti testRti = _castToRti(JS('', 'this'));
-  if (object == null) {
-    if (JS_GET_FLAG('LEGACY') || isNullable(testRti)) return object;
-  } else {
-    if (Rti._isCheck(testRti, object)) return object;
-  }
-
-  Rti objectRti = instanceOrFunctionType(object, testRti);
-  String message =
-      _Error.compose(object, objectRti, _rtiToString(testRti, null));
   throw _TypeError.fromMessage(message);
 }
 
@@ -953,7 +924,7 @@
   throw _TypeError.fromMessage(message);
 }
 
-/// Base class to _CastError and _TypeError.
+/// Base class to _TypeError.
 class _Error extends Error {
   final String _message;
   _Error(this._message);
@@ -971,14 +942,6 @@
   String toString() => _message;
 }
 
-class _CastError extends _Error implements CastError, TypeError {
-  _CastError.fromMessage(String message) : super('TypeError: $message');
-
-  factory _CastError.forType(object, String type) {
-    return _CastError.fromMessage(_Error.compose(object, null, type));
-  }
-}
-
 class _TypeError extends _Error implements TypeError, CastError {
   _TypeError.fromMessage(String message) : super('TypeError: $message');
 
@@ -992,7 +955,7 @@
 
 // Specializations.
 //
-// Specializations can be placed on Rti objects as the _as, _check and _is
+// Specializations can be placed on Rti objects as the _as and _is
 // 'methods'. They can also be called directly called from generated code.
 
 /// Specialization for 'is Object'.
@@ -1005,13 +968,6 @@
 /// Called from generated code via Rti `_as` method.
 dynamic _asObject(object) {
   if (JS_GET_FLAG('LEGACY') || object != null) return object;
-  throw _CastError.forType(object, 'Object');
-}
-
-/// Specialization for check on 'Object'.
-/// Called from generated code via Rti `_check` method.
-dynamic _checkObject(object) {
-  if (JS_GET_FLAG('LEGACY') || object != null) return object;
   throw _TypeError.forType(object, 'Object');
 }
 
@@ -1022,7 +978,7 @@
 }
 
 /// Specialization for 'as dynamic' and other top types.
-/// Called from generated code via Rti `_as` and `_check` methods.
+/// Called from generated code via Rti `_as` methods.
 dynamic _asTop(object) {
   return object;
 }
@@ -1038,14 +994,6 @@
 bool /*?*/ _asBoolNullable(object) {
   if (_isBool(object)) return _Utils.asBool(object);
   if (object == null) return object;
-  throw _CastError.forType(object, 'bool');
-}
-
-/// Specialization for check on 'bool?'.
-/// Called from generated code.
-bool /*?*/ _checkBoolNullable(object) {
-  if (_isBool(object)) return _Utils.asBool(object);
-  if (object == null) return object;
   throw _TypeError.forType(object, 'bool');
 }
 
@@ -1054,14 +1002,6 @@
 double /*?*/ _asDoubleNullable(object) {
   if (_isNum(object)) return _Utils.asDouble(object);
   if (object == null) return object;
-  throw _CastError.forType(object, 'double');
-}
-
-/// Specialization for check on 'double?'.
-/// Called from generated code.
-double /*?*/ _checkDoubleNullable(object) {
-  if (_isNum(object)) return _Utils.asDouble(object);
-  if (object == null) return object;
   throw _TypeError.forType(object, 'double');
 }
 
@@ -1077,14 +1017,6 @@
 int /*?*/ _asIntNullable(object) {
   if (_isInt(object)) return _Utils.asInt(object);
   if (object == null) return object;
-  throw _CastError.forType(object, 'int');
-}
-
-/// Specialization for check on 'int?'.
-/// Called from generated code.
-int /*?*/ _checkIntNullable(object) {
-  if (_isInt(object)) return _Utils.asInt(object);
-  if (object == null) return object;
   throw _TypeError.forType(object, 'int');
 }
 
@@ -1099,14 +1031,6 @@
 num /*?*/ _asNumNullable(object) {
   if (_isNum(object)) return _Utils.asNum(object);
   if (object == null) return object;
-  throw _CastError.forType(object, 'num');
-}
-
-/// Specialization for check on 'num?'.
-/// Called from generated code.
-num /*?*/ _checkNumNullable(object) {
-  if (_isNum(object)) return _Utils.asNum(object);
-  if (object == null) return object;
   throw _TypeError.forType(object, 'num');
 }
 
@@ -1121,14 +1045,6 @@
 String /*?*/ _asStringNullable(object) {
   if (_isString(object)) return _Utils.asString(object);
   if (object == null) return object;
-  throw _CastError.forType(object, 'String');
-}
-
-/// Specialization for check on 'String?'.
-/// Called from generated code.
-String /*?*/ _checkStringNullable(object) {
-  if (_isString(object)) return _Utils.asString(object);
-  if (object == null) return object;
   throw _TypeError.forType(object, 'String');
 }
 
@@ -1596,15 +1512,12 @@
   }
 
   static Rti _installTypeTests(Object universe, Rti rti) {
-    // Set up methods to perform type tests. The general as-check / type-check
-    // methods use the is-test method. The is-test method on first use
-    // overwrites itself, and possibly the as-check / type-check methods, with a
-    // specialized version.
-    var checkFn = RAW_DART_FUNCTION_REF(_generalTypeCheckImplementation);
+    // Set up methods to perform type tests. The general as-check methods use
+    // the is-test method. The is-test method on first use overwrites itself,
+    // and possibly the as-check method, with a specialized version.
     var asFn = RAW_DART_FUNCTION_REF(_generalAsCheckImplementation);
     var isFn = RAW_DART_FUNCTION_REF(_installSpecializedIsTest);
     Rti._setAsCheckFunction(rti, asFn);
-    Rti._setTypeCheckFunction(rti, checkFn);
     Rti._setIsTestFunction(rti, isFn);
     return rti;
   }
diff --git a/sdk/lib/_internal/vm/bin/socket_patch.dart b/sdk/lib/_internal/vm/bin/socket_patch.dart
index 8d5bbe3..3fe415d 100644
--- a/sdk/lib/_internal/vm/bin/socket_patch.dart
+++ b/sdk/lib/_internal/vm/bin/socket_patch.dart
@@ -71,8 +71,14 @@
   }
 
   @patch
-  factory InternetAddress(String address) {
-    return new _InternetAddress.parse(address);
+  factory InternetAddress(String address, {InternetAddressType type}) {
+    return _InternetAddress.fromString(address, type: type);
+  }
+
+  @patch
+  factory InternetAddress.fromRawAddress(Uint8List rawAddress,
+      {InternetAddressType type}) {
+    return _InternetAddress.fromRawAddress(rawAddress, type: type);
   }
 
   @patch
@@ -140,10 +146,7 @@
   final String _host;
   final Uint8List _in_addr;
   final int _scope_id;
-
-  InternetAddressType get type => _in_addr.length == _IPv4AddrLength
-      ? InternetAddressType.IPv4
-      : InternetAddressType.IPv6;
+  final InternetAddressType type;
 
   String get host => _host != null ? _host : address;
 
@@ -159,6 +162,9 @@
           if (_in_addr[i] != 0) return false;
         }
         return _in_addr[_IPv6AddrLength - 1] == 1;
+
+      case InternetAddressType.unix:
+        return false;
     }
   }
 
@@ -171,6 +177,9 @@
       case InternetAddressType.IPv6:
         // Checking for fe80::/10.
         return _in_addr[0] == 0xFE && (_in_addr[1] & 0xB0) == 0x80;
+
+      case InternetAddressType.unix:
+        return false;
     }
   }
 
@@ -183,57 +192,103 @@
       case InternetAddressType.IPv6:
         // Checking for ff00::/8.
         return _in_addr[0] == 0xFF;
+
+      case InternetAddressType.unix:
+        return false;
     }
   }
 
-  Future<InternetAddress> reverse() => _NativeSocket.reverseLookup(this);
+  Future<InternetAddress> reverse() {
+    if (type == InternetAddressType.unix) {
+      return Future.value(this);
+    }
+    return _NativeSocket.reverseLookup(this);
+  }
 
-  _InternetAddress(this.address, this._host, this._in_addr,
+  _InternetAddress(this.type, this.address, this._host, this._in_addr,
       [this._scope_id = 0]);
 
-  factory _InternetAddress.parse(String address) {
-    if (address is! String) {
-      throw new ArgumentError("Invalid internet address $address");
+  factory _InternetAddress.fromString(String address,
+      {InternetAddressType type}) {
+    if (type == InternetAddressType.unix) {
+      ArgumentError.checkNotNull(address, 'address');
+      var rawAddress = FileSystemEntity._toUtf8Array(address);
+      return _InternetAddress(
+          InternetAddressType.unix, address, null, rawAddress);
+    } else {
+      if (address is! String) {
+        throw ArgumentError("Invalid internet address $address");
+      }
+      var in_addr = _parse(address);
+      if (in_addr == null) {
+        throw ArgumentError("Invalid internet address $address");
+      }
+      InternetAddressType type = in_addr.length == _IPv4AddrLength
+          ? InternetAddressType.IPv4
+          : InternetAddressType.IPv6;
+      return _InternetAddress(type, address, null, in_addr);
     }
-    var in_addr = _parse(address);
-    if (in_addr == null) {
-      throw new ArgumentError("Invalid internet address $address");
+  }
+
+  factory _InternetAddress.fromRawAddress(Uint8List rawAddress,
+      {InternetAddressType type}) {
+    if (type == InternetAddressType.unix) {
+      ArgumentError.checkNotNull(rawAddress, 'rawAddress');
+      var rawPath = FileSystemEntity._toNullTerminatedUtf8Array(rawAddress);
+      var address = FileSystemEntity._toStringFromUtf8Array(rawAddress);
+      return _InternetAddress(InternetAddressType.unix, address, null, rawPath);
+    } else {
+      int type = -1;
+      if (rawAddress.length == _IPv4AddrLength) {
+        type = 0;
+      } else {
+        if (rawAddress.length != _IPv6AddrLength) {
+          throw ArgumentError("Invalid internet address ${rawAddress}");
+        }
+        type = 1;
+      }
+      var address = _rawAddrToString(rawAddress);
+      return _InternetAddress(
+          InternetAddressType._from(type), address, null, rawAddress);
     }
-    return new _InternetAddress(address, null, in_addr);
   }
 
   factory _InternetAddress.fixed(int id) {
     switch (id) {
       case _addressLoopbackIPv4:
-        var in_addr = new Uint8List(_IPv4AddrLength);
+        var in_addr = Uint8List(_IPv4AddrLength);
         in_addr[0] = 127;
         in_addr[_IPv4AddrLength - 1] = 1;
-        return new _InternetAddress("127.0.0.1", null, in_addr);
+        return _InternetAddress(
+            InternetAddressType.IPv4, "127.0.0.1", null, in_addr);
       case _addressLoopbackIPv6:
-        var in_addr = new Uint8List(_IPv6AddrLength);
+        var in_addr = Uint8List(_IPv6AddrLength);
         in_addr[_IPv6AddrLength - 1] = 1;
-        return new _InternetAddress("::1", null, in_addr);
+        return _InternetAddress(InternetAddressType.IPv6, "::1", null, in_addr);
       case _addressAnyIPv4:
-        var in_addr = new Uint8List(_IPv4AddrLength);
-        return new _InternetAddress("0.0.0.0", "0.0.0.0", in_addr);
+        var in_addr = Uint8List(_IPv4AddrLength);
+        return _InternetAddress(
+            InternetAddressType.IPv4, "0.0.0.0", "0.0.0.0", in_addr);
       case _addressAnyIPv6:
-        var in_addr = new Uint8List(_IPv6AddrLength);
-        return new _InternetAddress("::", "::", in_addr);
+        var in_addr = Uint8List(_IPv6AddrLength);
+        return _InternetAddress(InternetAddressType.IPv6, "::", "::", in_addr);
       default:
         assert(false);
-        throw new ArgumentError();
+        throw ArgumentError();
     }
   }
 
   // Create a clone of this _InternetAddress replacing the host.
   _InternetAddress _cloneWithNewHost(String host) {
-    return new _InternetAddress(
-        address, host, new Uint8List.fromList(_in_addr));
+    return _InternetAddress(type, address, host, Uint8List.fromList(_in_addr));
   }
 
   bool operator ==(other) {
     if (!(other is _InternetAddress)) return false;
     if (other.type != type) return false;
+    if (type == InternetAddressType.unix) {
+      return address == other.address;
+    }
     bool equals = true;
     for (int i = 0; i < _in_addr.length && equals; i++) {
       equals = other._in_addr[i] == _in_addr[i];
@@ -242,6 +297,9 @@
   }
 
   int get hashCode {
+    if (type == InternetAddressType.unix) {
+      return address.hashCode;
+    }
     int result = 1;
     for (int i = 0; i < _in_addr.length; i++) {
       result = (result * 31 + _in_addr[i]) & 0x3FFFFFFF;
@@ -253,6 +311,9 @@
     return "InternetAddress('$address', ${type.name})";
   }
 
+  static String _rawAddrToString(Uint8List address)
+      native "InternetAddress_RawAddrToString";
+
   static Uint8List _parse(String address) native "InternetAddress_Parse";
 }
 
@@ -394,8 +455,8 @@
         throw createError(response, "Failed host lookup: '$host'");
       } else {
         return response.skip(1).map<InternetAddress>((result) {
-          var type = new InternetAddressType._from(result[0]);
-          return new _InternetAddress(result[1], host, result[2], result[3]);
+          var type = InternetAddressType._from(result[0]);
+          return _InternetAddress(type, result[1], host, result[2], result[3]);
         }).toList();
       }
     });
@@ -423,10 +484,10 @@
       } else {
         var map = response.skip(1).fold(new Map<String, NetworkInterface>(),
             (map, result) {
-          var type = new InternetAddressType._from(result[0]);
+          var type = InternetAddressType._from(result[0]);
           var name = result[3];
           var index = result[4];
-          var address = new _InternetAddress(result[1], "", result[2]);
+          var address = _InternetAddress(type, result[1], "", result[2]);
           if (!includeLinkLocal && address.isLinkLocal) return map;
           if (!includeLoopback && address.isLoopback) return map;
           map.putIfAbsent(name, () => new _NetworkInterface(name, index));
@@ -505,12 +566,23 @@
         socket.localAddress = address;
         var result;
         if (sourceAddress == null) {
-          result = socket.nativeCreateConnect(
-              address._in_addr, port, address._scope_id);
+          if (address.type == InternetAddressType.unix) {
+            result = socket.nativeCreateUnixDomainConnect(
+                address.address, _Namespace._namespace);
+          } else {
+            result = socket.nativeCreateConnect(
+                address._in_addr, port, address._scope_id);
+          }
         } else {
           assert(sourceAddress is _InternetAddress);
-          result = socket.nativeCreateBindConnect(address._in_addr, port,
-              sourceAddress._in_addr, address._scope_id);
+          if (address.type == InternetAddressType.unix) {
+            assert(sourceAddress.type == InternetAddressType.unix);
+            result = socket.nativeCreateUnixDomainBindConnect(
+                address.address, sourceAddress.address, _Namespace._namespace);
+          } else {
+            result = socket.nativeCreateBindConnect(address._in_addr, port,
+                sourceAddress._in_addr, address._scope_id);
+          }
         }
         if (result is OSError) {
           // Keep first error, if present.
@@ -642,8 +714,18 @@
 
     var socket = new _NativeSocket.listen();
     socket.localAddress = address;
-    var result = socket.nativeCreateBindListen(
-        address._in_addr, port, backlog, v6Only, shared, address._scope_id);
+    var result;
+    if (address.type == InternetAddressType.unix) {
+      var path = address.address;
+      if (FileSystemEntity.isLinkSync(path)) {
+        path = Link(path).targetSync();
+      }
+      result = socket.nativeCreateUnixDomainBindListen(
+          path, backlog, shared, _Namespace._namespace);
+    } else {
+      result = socket.nativeCreateBindListen(
+          address._in_addr, port, backlog, v6Only, shared, address._scope_id);
+    }
     if (result is OSError) {
       throw new SocketException("Failed to create server socket",
           osError: result, address: address, port: port);
@@ -885,12 +967,14 @@
   }
 
   int get port {
+    if (localAddress.type == InternetAddressType.unix) return 0;
     if (localPort != 0) return localPort;
     if (isClosing || isClosed) throw const SocketException.closed();
     return localPort = nativeGetPort();
   }
 
   int get remotePort {
+    if (localAddress.type == InternetAddressType.unix) return 0;
     if (isClosing || isClosed) throw const SocketException.closed();
     return nativeGetRemotePeer()[1];
   }
@@ -902,7 +986,11 @@
     var result = nativeGetRemotePeer();
     var addr = result[0];
     var type = new InternetAddressType._from(addr[0]);
-    return new _InternetAddress(addr[1], null, addr[2]);
+    if (type == InternetAddressType.unix) {
+      return _InternetAddress.fromString(addr[1],
+          type: InternetAddressType.unix);
+    }
+    return _InternetAddress(type, addr[1], null, addr[2]);
   }
 
   void issueReadEvent() {
@@ -1247,11 +1335,17 @@
       int port) native "Socket_SendTo";
   nativeCreateConnect(Uint8List addr, int port, int scope_id)
       native "Socket_CreateConnect";
+  nativeCreateUnixDomainConnect(String addr, _Namespace namespace)
+      native "Socket_CreateUnixDomainConnect";
   nativeCreateBindConnect(Uint8List addr, int port, Uint8List sourceAddr,
       int scope_id) native "Socket_CreateBindConnect";
+  nativeCreateUnixDomainBindConnect(String addr, String sourceAddr,
+      _Namespace namespace) native "Socket_CreateUnixDomainBindConnect";
   bool isBindError(int errorNumber) native "SocketBase_IsBindError";
   nativeCreateBindListen(Uint8List addr, int port, int backlog, bool v6Only,
       bool shared, int scope_id) native "ServerSocket_CreateBindListen";
+  nativeCreateUnixDomainBindListen(String addr, int backlog, bool shared,
+      _Namespace namespace) native "ServerSocket_CreateUnixDomainBindListen";
   nativeCreateBindDatagram(Uint8List addr, int port, bool reuseAddress,
       bool reusePort, int ttl) native "Socket_CreateBindDatagram";
   bool nativeAccept(_NativeSocket socket) native "ServerSocket_Accept";
@@ -2090,6 +2184,9 @@
 
 @pragma("vm:entry-point", "call")
 Datagram _makeDatagram(
-    Uint8List data, String address, Uint8List in_addr, int port) {
-  return new Datagram(data, new _InternetAddress(address, null, in_addr), port);
+    Uint8List data, String address, Uint8List in_addr, int port, int type) {
+  return new Datagram(
+      data,
+      _InternetAddress(InternetAddressType._from(type), address, null, in_addr),
+      port);
 }
diff --git a/sdk/lib/_internal/vm/bin/sync_socket_patch.dart b/sdk/lib/_internal/vm/bin/sync_socket_patch.dart
index d98649e..bccdd4f 100644
--- a/sdk/lib/_internal/vm/bin/sync_socket_patch.dart
+++ b/sdk/lib/_internal/vm/bin/sync_socket_patch.dart
@@ -144,7 +144,12 @@
       throw result;
     }
     var addr = result[0];
-    return new _InternetAddress(addr[1], null, addr[2]);
+    var type = InternetAddressType._from(addr[0]);
+    if (type == InternetAddressType.unix) {
+      return _InternetAddress.fromString(addr[1],
+          type: InternetAddressType.unix);
+    }
+    return _InternetAddress(type, addr[1], null, addr[2]);
   }
 
   int get remotePort {
@@ -188,7 +193,8 @@
         new List<_InternetAddress>(response.length);
     for (int i = 0; i < response.length; ++i) {
       var result = response[i];
-      addresses[i] = new _InternetAddress(result[1], host, result[2]);
+      var type = InternetAddressType._from(result[0]);
+      addresses[i] = _InternetAddress(type, result[1], host, result[2]);
     }
     return addresses;
   }
diff --git a/sdk/lib/_internal/vm/lib/async_patch.dart b/sdk/lib/_internal/vm/lib/async_patch.dart
index 85de9dc..9d730ab 100644
--- a/sdk/lib/_internal/vm/lib/async_patch.dart
+++ b/sdk/lib/_internal/vm/lib/async_patch.dart
@@ -35,7 +35,8 @@
     }
   }
 
-  void completeError(e, [st]) {
+  void completeError(Object e, [StackTrace st]) {
+    st ??= AsyncError.defaultStackTrace(e);
     if (isSync) {
       _future._completeError(e, st);
     } else {
@@ -79,7 +80,7 @@
 // parameter to the continuation.  See vm/ast_transformer.cc for usage.
 Function _asyncErrorWrapperHelper(continuation) {
   // See comments of `_asyncThenWrapperHelper`.
-  var errorCallback = (e, s) => continuation(null, e, s);
+  void errorCallback(Object e, StackTrace s) => continuation(null, e, s);
   if (Zone.current == Zone.root) return errorCallback;
   return Zone.current.registerBinaryCallback(errorCallback);
 }
diff --git a/sdk/lib/_internal/vm/lib/compact_hash.dart b/sdk/lib/_internal/vm/lib/compact_hash.dart
index 112b9ba..da431134 100644
--- a/sdk/lib/_internal/vm/lib/compact_hash.dart
+++ b/sdk/lib/_internal/vm/lib/compact_hash.dart
@@ -468,6 +468,7 @@
 }
 
 // Set implementation, analogous to _CompactLinkedHashMap.
+@pragma('vm:entry-point')
 class _CompactLinkedHashSet<E> extends _HashFieldBase
     with _HashBase, _OperatorEqualsAndHashCode, SetMixin<E>
     implements LinkedHashSet<E> {
diff --git a/sdk/lib/async/broadcast_stream_controller.dart b/sdk/lib/async/broadcast_stream_controller.dart
index 09ab783..6a62e0b 100644
--- a/sdk/lib/async/broadcast_stream_controller.dart
+++ b/sdk/lib/async/broadcast_stream_controller.dart
@@ -260,6 +260,7 @@
       error = _nonNullError(replacement.error);
       stackTrace = replacement.stackTrace;
     }
+    stackTrace ??= AsyncError.defaultStackTrace(error);
     _sendError(error, stackTrace);
   }
 
@@ -481,6 +482,7 @@
 
   void addError(Object error, [StackTrace stackTrace]) {
     ArgumentError.checkNotNull(error, "error");
+    stackTrace ??= AsyncError.defaultStackTrace(error);
     if (!isClosed && _isFiring) {
       _addPendingEvent(new _DelayedError(error, stackTrace));
       return;
diff --git a/sdk/lib/async/future.dart b/sdk/lib/async/future.dart
index a0e35b5..19bb7c4 100644
--- a/sdk/lib/async/future.dart
+++ b/sdk/lib/async/future.dart
@@ -280,6 +280,7 @@
         stackTrace = replacement.stackTrace;
       }
     }
+    stackTrace ??= AsyncError.defaultStackTrace(error);
     return new _Future<T>.immediateError(error, stackTrace);
   }
 
@@ -363,7 +364,7 @@
     // Handle an error from any of the futures.
     // TODO(jmesserly): use `void` return type once it can be inferred for the
     // `then` call below.
-    handleError(theError, StackTrace theStackTrace) {
+    handleError(Object theError, StackTrace theStackTrace) {
       remaining--;
       if (values != null) {
         if (cleanUp != null) {
@@ -905,13 +906,14 @@
 }
 
 // Helper function completing a _Future with error, but checking the zone
-// for error replacement first.
+// for error replacement first and missing stack trace.
 void _completeWithErrorCallback(_Future result, error, StackTrace stackTrace) {
   AsyncError replacement = Zone.current.errorCallback(error, stackTrace);
   if (replacement != null) {
     error = _nonNullError(replacement.error);
     stackTrace = replacement.stackTrace;
   }
+  stackTrace ??= AsyncError.defaultStackTrace(error);
   result._completeError(error, stackTrace);
 }
 
@@ -923,6 +925,7 @@
     error = _nonNullError(replacement.error);
     stackTrace = replacement.stackTrace;
   }
+  stackTrace ??= AsyncError.defaultStackTrace(error);
   result._asyncCompleteError(error, stackTrace);
 }
 
diff --git a/sdk/lib/async/future_impl.dart b/sdk/lib/async/future_impl.dart
index e2b548b..c7cefce 100644
--- a/sdk/lib/async/future_impl.dart
+++ b/sdk/lib/async/future_impl.dart
@@ -26,6 +26,7 @@
       error = _nonNullError(replacement.error);
       stackTrace = replacement.stackTrace;
     }
+    stackTrace ??= AsyncError.defaultStackTrace(error);
     _completeError(error, stackTrace);
   }
 
@@ -229,7 +230,7 @@
     _setValue(value);
   }
 
-  _Future.immediateError(var error, [StackTrace stackTrace])
+  _Future.immediateError(var error, StackTrace stackTrace)
       : _zone = Zone.current {
     _asyncCompleteError(error, stackTrace);
   }
diff --git a/sdk/lib/async/stream.dart b/sdk/lib/async/stream.dart
index 203178a..21bc370 100644
--- a/sdk/lib/async/stream.dart
+++ b/sdk/lib/async/stream.dart
@@ -156,7 +156,7 @@
   factory Stream.error(Object error, [StackTrace stackTrace]) {
     ArgumentError.checkNotNull(error, "error");
     return (_AsyncStreamController<T>(null, null, null, null)
-          .._addError(error, stackTrace)
+          .._addError(error, stackTrace ?? AsyncError.defaultStackTrace(error))
           .._closeUnchecked())
         .stream;
   }
diff --git a/sdk/lib/async/stream_controller.dart b/sdk/lib/async/stream_controller.dart
index b54ddac..3b5694f 100644
--- a/sdk/lib/async/stream_controller.dart
+++ b/sdk/lib/async/stream_controller.dart
@@ -611,6 +611,7 @@
       error = _nonNullError(replacement.error);
       stackTrace = replacement.stackTrace;
     }
+    stackTrace ??= AsyncError.defaultStackTrace(error);
     _addError(error, stackTrace);
   }
 
diff --git a/sdk/lib/async/stream_transformers.dart b/sdk/lib/async/stream_transformers.dart
index 41c963f..243e934 100644
--- a/sdk/lib/async/stream_transformers.dart
+++ b/sdk/lib/async/stream_transformers.dart
@@ -18,7 +18,7 @@
   }
 
   void addError(error, [StackTrace stackTrace]) {
-    _sink._addError(error, stackTrace);
+    _sink._addError(error, stackTrace ?? AsyncError.defaultStackTrace(error));
   }
 
   void close() {
@@ -239,6 +239,7 @@
       throw StateError("Sink is closed");
     }
     if (_handleError != null) {
+      stackTrace ??= AsyncError.defaultStackTrace(error);
       _handleError(error, stackTrace, _sink);
     } else {
       _sink.addError(error, stackTrace);
diff --git a/sdk/lib/async/zone.dart b/sdk/lib/async/zone.dart
index 83c0a80..82626a6 100644
--- a/sdk/lib/async/zone.dart
+++ b/sdk/lib/async/zone.dart
@@ -43,10 +43,24 @@
   final Object error;
   final StackTrace stackTrace;
 
-  AsyncError(this.error, this.stackTrace) {
+  AsyncError(this.error, StackTrace stackTrace)
+      : stackTrace = stackTrace ?? defaultStackTrace(error) {
     ArgumentError.checkNotNull(error, "error");
   }
 
+  /// A default stack trace for an error.
+  ///
+  /// If [error] is an [Error] and it has an [Error.stackTrace],
+  /// that stack trace is returned.
+  /// If not, the [StackTrace.empty] default stack trace is returned.
+  static StackTrace defaultStackTrace(Object error) {
+    if (error is Error) {
+      var stackTrace = error.stackTrace;
+      if (stackTrace != null) return stackTrace;
+    }
+    return StackTrace.empty;
+  }
+
   String toString() => '$error';
 }
 
diff --git a/sdk/lib/core/errors.dart b/sdk/lib/core/errors.dart
index bb12431..e1a2672 100644
--- a/sdk/lib/core/errors.dart
+++ b/sdk/lib/core/errors.dart
@@ -184,10 +184,16 @@
 
   /**
    * Throws if [argument] is `null`.
+   *
+   * If [name] is supplied, it is used as the parameter name
+   * in the error message.
+   *
+   * Returns the [argument] if it is not null.
    */
   @Since("2.1")
-  static void checkNotNull(Object argument, [String name]) {
+  static T checkNotNull<@Since("2.8") T>(T argument, [String name]) {
     if (argument == null) throw ArgumentError.notNull(name);
+    return argument;
   }
 
   // Helper functions for toString overridden in subclasses.
@@ -279,30 +285,42 @@
       [String name, String message, int length]) = IndexError;
 
   /**
-   * Check that a [value] lies in a specific interval.
+   * Check that an integer [value] lies in a specific interval.
    *
    * Throws if [value] is not in the interval.
    * The interval is from [minValue] to [maxValue], both inclusive.
+   *
+   * If [name] or [message] are provided, they are used as the parameter
+   * name and message text of the thrown error.
+   *
+   * Returns [value] if it is in the interval.
    */
-  static void checkValueInInterval(int value, int minValue, int maxValue,
+  static int checkValueInInterval(int value, int minValue, int maxValue,
       [String name, String message]) {
     if (value < minValue || value > maxValue) {
       throw RangeError.range(value, minValue, maxValue, name, message);
     }
+    return value;
   }
 
   /**
-   * Check that a value is a valid index into an indexable object.
+   * Check that [index] is a valid index into an indexable object.
    *
    * Throws if [index] is not a valid index into [indexable].
    *
    * An indexable object is one that has a `length` and a and index-operator
    * `[]` that accepts an index if `0 <= index < length`.
    *
+   * If [name] or [message] are provided, they are used as the parameter
+   * name and message text of the thrown error. If [name] is omitted, it
+   * defaults to `"index"`.
+   *
    * If [length] is provided, it is used as the length of the indexable object,
    * otherwise the length is found as `indexable.length`.
+   *
+   * Returns [index] if it is a valid index.
    */
-  static void checkValidIndex(int index, dynamic indexable,
+  static int checkValidIndex(int index, dynamic indexable,
       [String name, int length, String message]) {
     length ??= indexable.length;
     // Comparing with `0` as receiver produces better dart2js type inference.
@@ -310,6 +328,7 @@
       name ??= "index";
       throw RangeError.index(index, indexable, name, message, length);
     }
+    return index;
   }
 
   /**
@@ -347,12 +366,19 @@
   }
 
   /**
-   * Check that an integer value isn't negative.
+   * Check that an integer value is non-negative.
    *
    * Throws if the value is negative.
+   *
+   * If [name] or [message] are provided, they are used as the parameter
+   * name and message text of the thrown error. If [name] is omitted, it
+   * defaults to `index`.
+   *
+   * Returns [value] if it is not negative.
    */
-  static void checkNotNegative(int value, [String name, String message]) {
+  static int checkNotNegative(int value, [String name, String message]) {
     if (value < 0) throw RangeError.range(value, 0, null, name, message);
+    return value;
   }
 
   String get _errorName => "RangeError";
diff --git a/sdk/lib/core/stacktrace.dart b/sdk/lib/core/stacktrace.dart
index ed5f85d..3715730 100644
--- a/sdk/lib/core/stacktrace.dart
+++ b/sdk/lib/core/stacktrace.dart
@@ -16,6 +16,13 @@
  * them programmatically.
  */
 abstract class StackTrace {
+  /// A stack trace object with no information.
+  ///
+  /// This stack trace is used as the default in situations where
+  /// a stack trace is required, but the user has not supplied one.
+  @Since("2.8")
+  static const empty = const _StringStackTrace("");
+
   StackTrace(); // In case existing classes extend StackTrace.
 
   /**
@@ -57,6 +64,6 @@
 
 class _StringStackTrace implements StackTrace {
   final String _stackTrace;
-  _StringStackTrace(this._stackTrace);
+  const _StringStackTrace(this._stackTrace);
   String toString() => _stackTrace;
 }
diff --git a/sdk/lib/html/dart2js/html_dart2js.dart b/sdk/lib/html/dart2js/html_dart2js.dart
index e09b761..3f8332f 100644
--- a/sdk/lib/html/dart2js/html_dart2js.dart
+++ b/sdk/lib/html/dart2js/html_dart2js.dart
@@ -13770,6 +13770,14 @@
          if (!(element.attributes instanceof NamedNodeMap)) {
 	   return true;
 	 }
+         // If something has corrupted the traversal we want to detect
+         // these on not only the children (tested below) but on the node itself
+         // in case it was bypassed.
+         if (element["id"] == 'lastChild' || element["name"] == 'lastChild' ||
+             element["id"] == 'previousSibling' || element["name"] == 'previousSibling' ||
+             element["id"] == 'children' || element["name"] == 'children') {
+           return true;
+         }
 	 var childNodes = element.childNodes;
 	 if (element.lastChild &&
 	     element.lastChild !== childNodes[childNodes.length -1]) {
@@ -13795,6 +13803,7 @@
            // allowing us to check for clobbering that may show up in other accesses.
            if (child["id"] == 'attributes' || child["name"] == 'attributes' ||
                child["id"] == 'lastChild'  || child["name"] == 'lastChild' ||
+               child["id"] == 'previousSibling'  || child["name"] == 'previousSibling' ||
                child["id"] == 'children' || child["name"] == 'children') {
              return true;
            }
@@ -40773,6 +40782,9 @@
  */
 class _ValidatingTreeSanitizer implements NodeTreeSanitizer {
   NodeValidator validator;
+
+  /// Did we modify the tree by removing anything.
+  bool modifiedTree = false;
   _ValidatingTreeSanitizer(this.validator) {}
 
   void sanitizeTree(Node node) {
@@ -40781,11 +40793,15 @@
 
       var child = node.lastChild;
       while (null != child) {
-        var nextChild;
+        Node nextChild;
         try {
-          // Child may be removed during the walk, and we may not
-          // even be able to get its previousNode.
+          // Child may be removed during the walk, and we may not even be able
+          // to get its previousNode. But it's also possible that previousNode
+          // (i.e. previousSibling) is being spoofed, so double-check it.
           nextChild = child.previousNode;
+          if (nextChild != null && nextChild.nextNode != child) {
+            throw StateError("Corrupt HTML");
+          }
         } catch (e) {
           // Child appears bad, remove it. We want to check the rest of the
           // children of node and, but we have no way of getting to the next
@@ -40799,7 +40815,12 @@
       }
     }
 
+    modifiedTree = false;
     walk(node, null);
+    while (modifiedTree) {
+      modifiedTree = false;
+      walk(node, null);
+    }
   }
 
   /// Aggressively try to remove node.
@@ -40807,7 +40828,8 @@
     // If we have the parent, it's presumably already passed more sanitization
     // or is the fragment, so ask it to remove the child. And if that fails
     // try to set the outer html.
-    if (parent == null) {
+    modifiedTree = true;
+    if (parent == null || parent != node.parentNode) {
       node.remove();
     } else {
       parent._removeChild(node);
diff --git a/sdk/lib/io/socket.dart b/sdk/lib/io/socket.dart
index 2b7edeb..283a30a 100644
--- a/sdk/lib/io/socket.dart
+++ b/sdk/lib/io/socket.dart
@@ -8,11 +8,15 @@
 
 /**
  * [InternetAddressType] is the type an [InternetAddress]. Currently,
- * IP version 4 (IPv4) and IP version 6 (IPv6) are supported.
+ * IP version 4 (IPv4), IP version 6 (IPv6) and Unix domain address are
+ * supported. Unix domain sockets are available only on Linux, MacOS and
+ * Android.
  */
 class InternetAddressType {
   static const InternetAddressType IPv4 = const InternetAddressType._(0);
   static const InternetAddressType IPv6 = const InternetAddressType._(1);
+  @Since("2.8")
+  static const InternetAddressType unix = const InternetAddressType._(2);
   static const InternetAddressType any = const InternetAddressType._(-1);
 
   @Deprecated("Use IPv4 instead")
@@ -27,8 +31,9 @@
   const InternetAddressType._(this._value);
 
   factory InternetAddressType._from(int value) {
-    if (value == 0) return IPv4;
-    if (value == 1) return IPv6;
+    if (value == IPv4._value) return IPv4;
+    if (value == IPv6._value) return IPv6;
+    if (value == unix._value) return unix;
     throw new ArgumentError("Invalid type: $value");
   }
 
@@ -43,6 +48,8 @@
         return "IPv4";
       case 1:
         return "IPv6";
+      case 2:
+        return "Unix";
       default:
         throw new ArgumentError("Invalid InternetAddress");
     }
@@ -52,7 +59,7 @@
 }
 
 /**
- * An internet address.
+ * An internet address or a Unix domain address.
  *
  * This object holds an internet address. If this internet address
  * is the result of a DNS lookup, the address also holds the hostname
@@ -95,27 +102,35 @@
   external static InternetAddress get ANY_IP_V6;
 
   /**
-   * The [type] of the [InternetAddress] specified what IP protocol.
+   * The address family of the [InternetAddress].
    */
   InternetAddressType get type;
 
   /**
-   * The numeric address of the host. For IPv4 addresses this is using
-   * the dotted-decimal notation. For IPv6 it is using the
-   * hexadecimal representation.
+   * The numeric address of the host.
+   *
+   * For IPv4 addresses this is using the dotted-decimal notation.
+   * For IPv6 it is using the hexadecimal representation.
+   * For Unix domain addresses, this is a file path.
    */
   String get address;
 
   /**
-   * The host used to lookup the address. If there is no host
-   * associated with the address this returns the numeric address.
+   * The host used to lookup the address.
+   *
+   * If there is no host associated with the address this returns the [address].
    */
   String get host;
 
   /**
-   * Get the raw address of this [InternetAddress]. The result is either a
-   * 4 or 16 byte long list. The returned list is a copy, making it possible
-   * to change the list without modifying the [InternetAddress].
+   * The raw address of this [InternetAddress].
+   *
+   * For an IP address, the result is either a 4 or 16 byte long list.
+   * For a Unix domain address, UTF-8 encoded byte sequences that represents
+   * [address] is returned.
+   *
+   * The returned list is a fresh copy, making it possible to change the list without
+   * modifying the [InternetAddress].
    */
   Uint8List get rawAddress;
 
@@ -135,17 +150,48 @@
   bool get isMulticast;
 
   /**
-   * Creates a new [InternetAddress] from a numeric address.
+   * Creates a new [InternetAddress] from a numeric address or a file path.
    *
-   * If the address in [address] is not a numeric IPv4
-   * (dotted-decimal notation) or IPv6 (hexadecimal representation).
-   * address [ArgumentError] is thrown.
+   * If [type] is [InternetAddressType.IPv4], [address] must be a numeric IPv4
+   * address (dotted-decimal notation).
+   * If [type] is [InternetAddressType.IPv6], [address] must be a numeric IPv6
+   * address (hexadecimal notation).
+   * If [type] is [InternetAddressType.unix], [address] must be a a valid file
+   * path.
+   * If [type] is omitted, [address] must be either a numeric IPv4 or IPv6
+   * address and the type is inferred from the format.
+   *
+   * To create a Unix domain address, [type] should be
+   * [InternetAddressType.unix] and [address] should be a string.
    */
-  external factory InternetAddress(String address);
+  external factory InternetAddress(String address,
+      {@Since("2.8") InternetAddressType type});
 
   /**
-   * Perform a reverse dns lookup on the [address], creating a new
-   * [InternetAddress] where the host field set to the result.
+   * Creates a new [InternetAddress] from the provided raw address bytes.
+   *
+   * If the [type] is [InternetAddressType.IPv4], the [rawAddress] must have
+   * length 4.
+   * If the [type] is [InternetAddressType.IPv6], the [rawAddress] must have
+   * length 16.
+   * If the [type] is [InternetAddressType.IPv4], the [rawAddress] must be a
+   * valid UTF-8 encoded file path.
+   *
+   * If [type] is omitted, the [rawAddress] must have a length of either 4 or
+   * 16, in which case the type defaults to [InternetAddress.IPv4] or
+   * [InternetAddress.IPv6] respectively.
+   */
+  external factory InternetAddress.fromRawAddress(Uint8List rawAddress,
+      {@Since("2.8") InternetAddressType type});
+
+  /**
+   * Perform a reverse DNS lookup on this [address]
+   *
+   * Returns a new [InternetAddress] with the same address, but where the [host]
+   * field set to the result of the lookup.
+   *
+   * If this address is Unix domain addresses, no lookup is performed and this
+   * address is returned directly.
    */
   Future<InternetAddress> reverse();
 
@@ -826,28 +872,30 @@
   void setRawOption(RawSocketOption option);
 
   /**
-   * Returns the port used by this socket.
+   * The port used by this socket.
    *
    * Throws a [SocketException] if the socket is closed.
+   * The port is 0 if the socket is a Unix domain socket.
    */
   int get port;
 
   /**
-   * Returns the remote port connected to by this socket.
+   * The remote port connected to by this socket.
    *
    * Throws a [SocketException] if the socket is closed.
+   * The port is 0 if the socket is a Unix domain socket.
    */
   int get remotePort;
 
   /**
-   * Returns the [InternetAddress] used to connect this socket.
+   * The [InternetAddress] used to connect this socket.
    *
    * Throws a [SocketException] if the socket is closed.
    */
   InternetAddress get address;
 
   /**
-   * Returns the remote [InternetAddress] connected to by this socket.
+   * The remote [InternetAddress] connected to by this socket.
    *
    * Throws a [SocketException] if the socket is closed.
    */
diff --git a/sdk_nnbd/lib/_http/http.dart b/sdk_nnbd/lib/_http/http.dart
index fb662c6..551ab65 100644
--- a/sdk_nnbd/lib/_http/http.dart
+++ b/sdk_nnbd/lib/_http/http.dart
@@ -142,7 +142,8 @@
    *
    * The default value is `null`.
    */
-  String? serverHeader;
+  String? get serverHeader;
+  void set serverHeader(String? newServerHeader);
 
   /**
    * Default set of headers added to all response objects.
@@ -169,7 +170,8 @@
    * The default value is `false` (compression disabled).
    * To enable, set `autoCompress` to `true`.
    */
-  bool autoCompress;
+  bool get autoCompress;
+  void set autoCompress(bool newAutoCompress);
 
   /**
    * Gets or sets the timeout used for idle keep-alive connections. If no
@@ -183,7 +185,8 @@
    *
    * To disable, set [idleTimeout] to `null`.
    */
-  Duration? idleTimeout;
+  Duration? get idleTimeout;
+  void set idleTimeout(Duration? newIdleTimeout);
 
   /**
    * Starts listening for HTTP requests on the specified [address] and
@@ -772,6 +775,11 @@
  * [HeaderValue] can be used to conveniently build and parse header
  * values on this form.
  *
+ * Parameter values can be omitted, in which case the value is parsed as `null`.
+ * Values can be doubled quoted to allow characters outside of the RFC 7230
+ * token characters and backslash sequences can be used to represent the double
+ * quote and backslash characters themselves.
+ *
  * To build an "accepts" header with the value
  *
  *     text/plain; q=0.3, text/html
@@ -798,7 +806,8 @@
   /**
    * Creates a new header value object setting the value and parameters.
    */
-  factory HeaderValue([String value = "", Map<String, String>? parameters]) {
+  factory HeaderValue(
+      [String value = "", Map<String, String?> parameters = const {}]) {
     return new _HeaderValue(value, parameters);
   }
 
@@ -826,7 +835,7 @@
    *
    * This map cannot be modified.
    */
-  Map<String, String> get parameters;
+  Map<String, String?> get parameters;
 
   /**
    * Returns the formatted string representation in the form:
@@ -916,7 +925,7 @@
    * or in `parameters`, will have its value converted to lower-case.
    */
   factory ContentType(String primaryType, String subType,
-      {String? charset, Map<String, String>? parameters}) {
+      {String? charset, Map<String, String?> parameters = const {}}) {
     return new _ContentType(primaryType, subType, charset, parameters);
   }
 
@@ -988,7 +997,8 @@
    * `(`, `)`, `<`, `>`, `@`, `,`, `;`, `:`, `\`, `"`, `/`, `[`, `]`, `?`, `=`,
    * `{`, and `}`.
    */
-  String name;
+  String get name;
+  void set name(String newName);
 
   /**
    * The value of the cookie.
@@ -1001,39 +1011,46 @@
    * Cookie values may be wrapped in a single pair of double quotes
    * (U+0022, `"`).
    */
-  String value;
+  String get value;
+  void set value(String newValue);
 
   /**
    * The time at which the cookie expires.
    */
-  DateTime? expires;
+  DateTime? get expires;
+  void set expires(DateTime? newExpires);
 
   /**
    * The number of seconds until the cookie expires. A zero or negative value
    * means the cookie has expired.
    */
-  int? maxAge;
+  int? get maxAge;
+  void set maxAge(int? newMaxAge);
 
   /**
    * The domain that the cookie applies to.
    */
-  String? domain;
+  String? get domain;
+  void set domain(String? newDomain);
 
   /**
    * The path within the [domain] that the cookie applies to.
    */
-  String? path;
+  String? get path;
+  void set path(String? newPath);
 
   /**
    * Whether to only send this cookie on secure connections.
    */
-  bool secure;
+  bool get secure;
+  void set secure(bool newSecure);
 
   /**
    * Whether the cookie is only sent in the HTTP request and is not made
    * available to client side scripts.
    */
-  bool httpOnly;
+  bool get httpOnly;
+  void set httpOnly(bool newHttpOnly);
 
   /**
    * Creates a new cookie setting the name and value.
@@ -1490,7 +1507,8 @@
   /// connections.
   ///
   /// The default value is 15 seconds.
-  Duration idleTimeout;
+  Duration get idleTimeout;
+  void set idleTimeout(Duration newIdleTimeout);
 
   /// Gets and sets the connection timeout.
   ///
@@ -1500,7 +1518,8 @@
   ///
   /// When this is `null`, the OS default timeout is used. The default is
   /// `null`.
-  Duration? connectionTimeout;
+  Duration? get connectionTimeout;
+  void set connectionTimeout(Duration? newConnectionTimeout);
 
   /**
    * Gets and sets the maximum number of live connections, to a single host.
@@ -1512,7 +1531,8 @@
    *
    * Default is `null`.
    */
-  int? maxConnectionsPerHost;
+  int? get maxConnectionsPerHost;
+  void set maxConnectionsPerHost(int? newMaxConnectionsPerHost);
 
   /**
    * Gets and sets whether the body of a response will be automatically
@@ -1540,7 +1560,8 @@
    *
    * Default is `true`.
    */
-  bool autoUncompress;
+  bool get autoUncompress;
+  void set autoUncompress(bool newAutoUncompress);
 
   /// Gets and sets the default value of the `User-Agent` header for all requests
   /// generated by this [HttpClient].
@@ -1549,7 +1570,8 @@
   ///
   /// If the userAgent is set to `null`, no default `User-Agent` header will be
   /// added to each request.
-  String? userAgent;
+  String? get userAgent;
+  void set userAgent(String? newUserAgent);
 
   factory HttpClient({SecurityContext? context}) {
     HttpOverrides? overrides = HttpOverrides.current;
diff --git a/sdk_nnbd/lib/_http/http_headers.dart b/sdk_nnbd/lib/_http/http_headers.dart
index 3fcdbe7..db3d7aa 100644
--- a/sdk_nnbd/lib/_http/http_headers.dart
+++ b/sdk_nnbd/lib/_http/http_headers.dart
@@ -648,12 +648,14 @@
 
 class _HeaderValue implements HeaderValue {
   String _value;
-  Map<String, String>? _parameters;
-  Map<String, String>? _unmodifiableParameters;
+  Map<String, String?>? _parameters;
+  Map<String, String?>? _unmodifiableParameters;
 
-  _HeaderValue([this._value = "", Map<String, String>? parameters]) {
-    if (parameters != null) {
-      _parameters = new HashMap<String, String>.from(parameters);
+  _HeaderValue([this._value = "", Map<String, String?> parameters = const {}]) {
+    // TODO(40614): Remove once non-nullability is sound.
+    Map<String, String?>? nullableParameters = parameters;
+    if (nullableParameters != null && nullableParameters.isNotEmpty) {
+      _parameters = new HashMap<String, String?>.from(nullableParameters);
     }
   }
 
@@ -669,23 +671,55 @@
 
   String get value => _value;
 
-  Map<String, String> _ensureParameters() =>
-      _parameters ??= HashMap<String, String>();
+  Map<String, String?> _ensureParameters() =>
+      _parameters ??= <String, String?>{};
 
-  Map<String, String> get parameters =>
+  Map<String, String?> get parameters =>
       _unmodifiableParameters ??= UnmodifiableMapView(_ensureParameters());
 
+  static bool _isToken(String token) {
+    if (token.isEmpty) {
+      return false;
+    }
+    final delimiters = "\"(),/:;<=>?@[\]{}";
+    for (int i = 0; i < token.length; i++) {
+      int codeUnit = token.codeUnitAt(i);
+      if (codeUnit <= 32 ||
+          codeUnit >= 127 ||
+          delimiters.indexOf(token[i]) >= 0) {
+        return false;
+      }
+    }
+    return true;
+  }
+
   String toString() {
     StringBuffer sb = new StringBuffer();
     sb.write(_value);
     var parameters = this._parameters;
     if (parameters != null && parameters.length > 0) {
-      parameters.forEach((String name, String value) {
-        sb
-          ..write("; ")
-          ..write(name)
-          ..write("=")
-          ..write(value == "" ? '""' : value);
+      parameters.forEach((String name, String? value) {
+        sb..write("; ")..write(name);
+        if (value != null) {
+          sb.write("=");
+          if (_isToken(value)) {
+            sb.write(value);
+          } else {
+            sb.write('"');
+            int start = 0;
+            for (int i = 0; i < value.length; i++) {
+              // Can use codeUnitAt here instead.
+              int codeUnit = value.codeUnitAt(i);
+              if (codeUnit == 92 /* backslash */ ||
+                  codeUnit == 34 /* double quote */) {
+                sb.write(value.substring(start, i));
+                sb.write(r'\');
+                start = i;
+              }
+            }
+            sb..write(value.substring(start))..write('"');
+          }
+        }
       });
     }
     return sb.toString();
@@ -724,8 +758,12 @@
       index++;
     }
 
-    void maybeExpect(String expected) {
-      if (s[index] == expected) index++;
+    bool maybeExpect(String expected) {
+      if (done() || !s.startsWith(expected, index)) {
+        return false;
+      }
+      index++;
+      return true;
     }
 
     void parseParameters() {
@@ -762,13 +800,13 @@
               index++;
             } else if (char == "\"") {
               index++;
-              break;
+              return sb.toString();
             }
             char = s[index];
             sb.write(char);
             index++;
           }
-          return sb.toString();
+          throw new HttpException("Failed to parse header value");
         } else {
           // Parse non-quoted value.
           return parseValue();
@@ -780,23 +818,18 @@
         if (done()) return;
         String name = parseParameterName();
         skipWS();
-        if (done()) {
-          parameters[name] = "";
-          return;
+        if (maybeExpect("=")) {
+          skipWS();
+          String value = parseParameterValue();
+          if (name == 'charset' && this is _ContentType) {
+            // Charset parameter of ContentTypes are always lower-case.
+            value = value.toLowerCase();
+          }
+          parameters[name] = value;
+          skipWS();
+        } else if (name.isNotEmpty) {
+          parameters[name] = null;
         }
-        maybeExpect("=");
-        skipWS();
-        if (done()) {
-          parameters[name] = "";
-          return;
-        }
-        String value = parseParameterValue();
-        if (name == 'charset' && this is _ContentType) {
-          // Charset parameter of ContentTypes are always lower-case.
-          value = value.toLowerCase();
-        }
-        parameters[name] = value;
-        skipWS();
         if (done()) return;
         // TODO: Implement support for multi-valued parameters.
         if (s[index] == valueSeparator) return;
@@ -805,7 +838,7 @@
     }
 
     skipWS();
-    _value = parseValue(); // TODO(39784): No _validateValue?
+    _value = parseValue();
     skipWS();
     if (done()) return;
     maybeExpect(parameterSeparator);
@@ -818,17 +851,23 @@
   String _subType = "";
 
   _ContentType(String primaryType, String subType, String? charset,
-      Map<String, String>? parameters)
+      Map<String, String?> parameters)
       : _primaryType = primaryType,
         _subType = subType,
         super("") {
+    // TODO(40614): Remove once non-nullability is sound.
+    String emptyIfNull(String? string) => string ?? "";
+    _primaryType = emptyIfNull(_primaryType);
+    _subType = emptyIfNull(_subType);
     _value = "$_primaryType/$_subType";
-    if (parameters != null) {
+    // TODO(40614): Remove once non-nullability is sound.
+    Map<String, String?>? nullableParameters = parameters;
+    if (nullableParameters != null) {
       var parameterMap = _ensureParameters();
-      parameters.forEach((String key, String value) {
+      nullableParameters.forEach((String key, String? value) {
         String lowerCaseKey = key.toLowerCase();
         if (lowerCaseKey == "charset") {
-          value = value.toLowerCase();
+          value = value?.toLowerCase();
         }
         parameterMap[lowerCaseKey] = value;
       });
diff --git a/sdk_nnbd/lib/_http/http_impl.dart b/sdk_nnbd/lib/_http/http_impl.dart
index 5b9782a..aeacfa3 100644
--- a/sdk_nnbd/lib/_http/http_impl.dart
+++ b/sdk_nnbd/lib/_http/http_impl.dart
@@ -666,7 +666,7 @@
     }
   }
 
-  void _completeDoneError(Object error, StackTrace? stackTrace) {
+  void _completeDoneError(Object error, StackTrace stackTrace) {
     if (!_doneCompleter.isCompleted) {
       _hasError = true;
       _doneCompleter.completeError(error, stackTrace);
@@ -693,7 +693,7 @@
           // No new stream, .close was called. Close _target.
           _closeTarget();
         }
-      }, onError: (Object error, StackTrace? stackTrace) {
+      }, onError: (Object error, StackTrace stackTrace) {
         if (_isBound) {
           // A new stream takes over - forward errors to that stream.
           _controllerCompleter!.completeError(error, stackTrace);
@@ -1715,7 +1715,7 @@
       if (incoming.statusCode == 100) {
         incoming.drain().then((_) {
           _subscription!.resume();
-        }).catchError((error, [StackTrace? stackTrace]) {
+        }).catchError((dynamic error, StackTrace stackTrace) {
           _nextResponseCompleter!.completeError(
               new HttpException(error.message, uri: _currentUri), stackTrace);
           _nextResponseCompleter = null;
@@ -1724,7 +1724,7 @@
         _nextResponseCompleter!.complete(incoming);
         _nextResponseCompleter = null;
       }
-    }, onError: (error, [StackTrace? stackTrace]) {
+    }, onError: (dynamic error, StackTrace stackTrace) {
       _nextResponseCompleter?.completeError(
           new HttpException(error.message, uri: _currentUri), stackTrace);
       _nextResponseCompleter = null;
@@ -1758,9 +1758,9 @@
     request.headers
       ..host = host
       ..port = port
-      .._add(HttpHeaders.acceptEncodingHeader, "gzip");
+      ..add(HttpHeaders.acceptEncodingHeader, "gzip");
     if (_httpClient.userAgent != null) {
-      request.headers._add(HttpHeaders.userAgentHeader, _httpClient.userAgent);
+      request.headers.add(HttpHeaders.userAgentHeader, _httpClient.userAgent!);
     }
     if (proxy.isAuthenticated) {
       // If the proxy configuration contains user information use that
@@ -2557,6 +2557,10 @@
           outgoing,
           _httpServer.defaultResponseHeaders,
           _httpServer.serverHeader);
+      // Parser found badRequest and sent out Response.
+      if (incoming.statusCode == HttpStatus.badRequest) {
+        response.statusCode = HttpStatus.badRequest;
+      }
       var request = new _HttpRequest(response, incoming, _httpServer, this);
       _streamFuture = outgoing.done.then((_) {
         response.deadline = null;
diff --git a/sdk_nnbd/lib/_http/http_parser.dart b/sdk_nnbd/lib/_http/http_parser.dart
index c5a480c..36a8a1a 100644
--- a/sdk_nnbd/lib/_http/http_parser.dart
+++ b/sdk_nnbd/lib/_http/http_parser.dart
@@ -246,6 +246,8 @@
   final List<int> _uriOrReasonPhrase = [];
   final List<int> _headerField = [];
   final List<int> _headerValue = [];
+  // The limit for method, uriOrReasonPhrase, header field and value
+  int _headerSizeLimit = 8 * 1024;
 
   int _httpVersion = _HttpVersion.UNDETERMINED;
   int _transferLength = -1;
@@ -255,9 +257,14 @@
 
   bool _noMessageBody = false;
   int _remainingContent = -1;
+  bool _contentLength = false;
+  bool _transferEncoding = false;
 
   _HttpHeaders? _headers;
 
+  // The limit for parsing chunk size
+  int _chunkSizeLimit = 0x7FFFFFFF;
+
   // The current incoming connection.
   _HttpIncoming? _incoming;
   StreamSubscription<Uint8List>? _socketSubscription;
@@ -429,7 +436,7 @@
             if (!_isTokenChar(byte)) {
               throw HttpException("Invalid request method");
             }
-            _method.add(byte);
+            _addWithValidation(_method, byte);
             if (!_requestParser) {
               throw HttpException("Invalid response line");
             }
@@ -455,12 +462,12 @@
           } else {
             // Did not parse HTTP version. Expect method instead.
             for (int i = 0; i < httpVersionIndex; i++) {
-              _method.add(_Const.HTTP[i]);
+              _addWithValidation(_method, _Const.HTTP[i]);
             }
             if (byte == _CharCode.SP) {
               _state = _State.REQUEST_LINE_URI;
             } else {
-              _method.add(byte);
+              _addWithValidation(_method, byte);
               _httpVersion = _HttpVersion.UNDETERMINED;
               if (!_requestParser) {
                 throw HttpException("Invalid response line");
@@ -507,7 +514,7 @@
                 byte == _CharCode.LF) {
               throw HttpException("Invalid request method");
             }
-            _method.add(byte);
+            _addWithValidation(_method, byte);
           }
           break;
 
@@ -522,7 +529,7 @@
             if (byte == _CharCode.CR || byte == _CharCode.LF) {
               throw HttpException("Invalid request, unexpected $byte in URI");
             }
-            _uriOrReasonPhrase.add(byte);
+            _addWithValidation(_uriOrReasonPhrase, byte);
           }
           break;
 
@@ -590,7 +597,7 @@
               throw HttpException(
                   "Invalid response, unexpected $byte in reason phrase");
             }
-            _uriOrReasonPhrase.add(byte);
+            _addWithValidation(_uriOrReasonPhrase, byte);
           }
           break;
 
@@ -613,7 +620,7 @@
             _index = _index - 1; // Make the new state see the LF again.
           } else {
             // Start of new header field.
-            _headerField.add(_toLowerCaseByte(byte));
+            _addWithValidation(_headerField, _toLowerCaseByte(byte));
             _state = _State.HEADER_FIELD;
           }
           break;
@@ -625,7 +632,7 @@
             if (!_isTokenChar(byte)) {
               throw HttpException("Invalid header field name, with $byte");
             }
-            _headerField.add(_toLowerCaseByte(byte));
+            _addWithValidation(_headerField, _toLowerCaseByte(byte));
           }
           break;
 
@@ -636,7 +643,7 @@
             _state = _State.HEADER_VALUE_FOLD_OR_END;
           } else if (byte != _CharCode.SP && byte != _CharCode.HT) {
             // Start of new header value.
-            _headerValue.add(byte);
+            _addWithValidation(_headerValue, byte);
             _state = _State.HEADER_VALUE;
           }
           break;
@@ -647,7 +654,7 @@
           } else if (byte == _CharCode.LF) {
             _state = _State.HEADER_VALUE_FOLD_OR_END;
           } else {
-            _headerValue.add(byte);
+            _addWithValidation(_headerValue, byte);
           }
           break;
 
@@ -662,9 +669,21 @@
           } else {
             String headerField = new String.fromCharCodes(_headerField);
             String headerValue = new String.fromCharCodes(_headerValue);
-            if (headerField == HttpHeaders.transferEncodingHeader &&
-                _caseInsensitiveCompare("chunked".codeUnits, _headerValue)) {
-              _chunked = true;
+            if (headerField == HttpHeaders.contentLengthHeader) {
+              // Content Length header should not have more than one occurance
+              // or coexist with Transfer Encoding header.
+              if (_contentLength || _transferEncoding) {
+                _statusCode = HttpStatus.badRequest;
+              }
+              _contentLength = true;
+            } else if (headerField == HttpHeaders.transferEncodingHeader) {
+              _transferEncoding = true;
+              if (_caseInsensitiveCompare("chunked".codeUnits, _headerValue)) {
+                _chunked = true;
+              }
+              if (_contentLength) {
+                _statusCode = HttpStatus.badRequest;
+              }
             }
             var headers = _headers!;
             if (headerField == HttpHeaders.connectionHeader) {
@@ -680,10 +699,10 @@
                     (isUpgrade && isResponse && isUpgradeCode)) {
                   _connectionUpgrade = true;
                 }
-                headers._add(headerField, tokens[i]);
+                headers.add(headerField, tokens[i]);
               }
             } else {
-              headers._add(headerField, headerValue);
+              headers.add(headerField, headerValue);
             }
             _headerField.clear();
             _headerValue.clear();
@@ -695,8 +714,8 @@
               _index = _index - 1; // Make the new state see the LF again.
             } else {
               // Start of new header field.
-              _headerField.add(_toLowerCaseByte(byte));
               _state = _State.HEADER_FIELD;
+              _addWithValidation(_headerField, _toLowerCaseByte(byte));
             }
           }
           break;
@@ -725,6 +744,10 @@
             _state = _State.CHUNK_SIZE_EXTENSION;
           } else {
             int value = _expectHexDigit(byte);
+            // Checks whether (_remaingingContent * 16 + value) overflows.
+            if (_remainingContent > _chunkSizeLimit >> 4) {
+              throw HttpException('Chunk size overflows the integer');
+            }
             _remainingContent = _remainingContent * 16 + value;
           }
           break;
@@ -924,6 +947,9 @@
     _noMessageBody = false;
     _remainingContent = -1;
 
+    _contentLength = false;
+    _transferEncoding = false;
+
     _headers = null;
   }
 
@@ -996,6 +1022,48 @@
     }
   }
 
+  void _addWithValidation(List<int> list, int byte) {
+    if (list.length < _headerSizeLimit) {
+      list.add(byte);
+    } else {
+      _reportSizeLimitError();
+    }
+  }
+
+  void _reportSizeLimitError() {
+    String method = "";
+    switch (_state) {
+      case _State.START:
+      case _State.METHOD_OR_RESPONSE_HTTP_VERSION:
+      case _State.REQUEST_LINE_METHOD:
+        method = "Method";
+        break;
+
+      case _State.REQUEST_LINE_URI:
+        method = "URI";
+        break;
+
+      case _State.RESPONSE_LINE_REASON_PHRASE:
+        method = "Reason phrase";
+        break;
+
+      case _State.HEADER_START:
+      case _State.HEADER_FIELD:
+        method = "Header field";
+        break;
+
+      case _State.HEADER_VALUE_START:
+      case _State.HEADER_VALUE:
+        method = "Header value";
+        break;
+
+      default:
+        throw UnsupportedError("Unexpected state: $_state");
+        break;
+    }
+    throw HttpException("$method exceeds the $_headerSizeLimit size limit");
+  }
+
   _HttpIncoming _createIncoming(int transferLength) {
     assert(_incoming == null);
     assert(_bodyController == null);
diff --git a/sdk_nnbd/lib/_http/websocket.dart b/sdk_nnbd/lib/_http/websocket.dart
index 5e6ec02..c9c6246 100644
--- a/sdk_nnbd/lib/_http/websocket.dart
+++ b/sdk_nnbd/lib/_http/websocket.dart
@@ -326,11 +326,14 @@
   static const int CLOSED = closed;
 
   /**
-   * Set and get the interval for sending ping signals. If a ping message is not
-   * answered by a pong message from the peer, the `WebSocket` is assumed
-   * disconnected and the connection is closed with a
-   * [WebSocketStatus.goingAway] close code. When a ping signal is sent, the
-   * pong message must be received within [pingInterval].
+   * The interval between ping signals.
+   *
+   * A ping message is sent every [pingInterval], starting at the first
+   * [pingInterval] after a new value has been assigned or a pong message has
+   * been received. If a ping message is not answered by a pong message from the
+   * peer, the `WebSocket` is assumed disconnected and the connection is closed
+   * with a [WebSocketStatus.goingAway] close code. When a ping signal is sent,
+   * the pong message must be received within [pingInterval].
    *
    * There are never two outstanding pings at any given time, and the next ping
    * timer starts when the pong is received.
diff --git a/sdk_nnbd/lib/_http/websocket_impl.dart b/sdk_nnbd/lib/_http/websocket_impl.dart
index 64eb1eb..68d0f29 100644
--- a/sdk_nnbd/lib/_http/websocket_impl.dart
+++ b/sdk_nnbd/lib/_http/websocket_impl.dart
@@ -901,7 +901,7 @@
     socket.addStream(stream).then((_) {
       _done();
       _closeCompleter.complete(webSocket);
-    }, onError: (Object error, StackTrace? stackTrace) {
+    }, onError: (Object error, StackTrace stackTrace) {
       _closed = true;
       _cancel();
       if (error is ArgumentError) {
@@ -1144,7 +1144,7 @@
       } else {
         _controller.add(data);
       }
-    }, onError: (Object error, StackTrace? stackTrace) {
+    }, onError: (Object error, StackTrace stackTrace) {
       _closeTimer?.cancel();
       if (error is FormatException) {
         _close(WebSocketStatus.invalidFramePayloadData);
@@ -1203,8 +1203,12 @@
       if (_writeClosed) return;
       _consumer.add(new _WebSocketPing());
       _pingTimer = new Timer(interval, () {
+        _closeTimer?.cancel();
         // No pong received.
         _close(WebSocketStatus.goingAway);
+        _closeCode = _outCloseCode;
+        _closeReason = _outCloseReason;
+        _controller.close();
       });
     });
   }
diff --git a/sdk_nnbd/lib/_internal/js_dev_runtime/patch/async_patch.dart b/sdk_nnbd/lib/_internal/js_dev_runtime/patch/async_patch.dart
index dbba91e..64f3983 100644
--- a/sdk_nnbd/lib/_internal/js_dev_runtime/patch/async_patch.dart
+++ b/sdk_nnbd/lib/_internal/js_dev_runtime/patch/async_patch.dart
@@ -196,7 +196,7 @@
 }
 
 @patch
-void _rethrow(Object error, StackTrace? stackTrace) {
+void _rethrow(Object error, StackTrace stackTrace) {
   JS('', 'throw #', dart.createErrorWithStack(error, stackTrace));
 }
 
diff --git a/sdk_nnbd/lib/_internal/js_dev_runtime/patch/core_patch.dart b/sdk_nnbd/lib/_internal/js_dev_runtime/patch/core_patch.dart
index 13c2f4c..d2c62cf 100644
--- a/sdk_nnbd/lib/_internal/js_dev_runtime/patch/core_patch.dart
+++ b/sdk_nnbd/lib/_internal/js_dev_runtime/patch/core_patch.dart
@@ -69,12 +69,8 @@
   static bool _is_Object(Object? o) => o != null;
 
   @JSExportName('as')
-  static Object _as_Object(Object? o) =>
-      o == null ? dart.cast(o, dart.unwrapType(Object), false) : o;
-
-  @JSExportName('_check')
-  static Object _check_Object(Object? o) =>
-      o == null ? dart.cast(o, dart.unwrapType(Object), true) : o;
+  static Object? _as_Object(Object? o) =>
+      o == null ? dart.cast(o, dart.unwrapType(Object)) : o;
 }
 
 @patch
@@ -89,14 +85,7 @@
   static Object? _as_Null(Object? o) {
     // Avoid extra function call to core.Null.is() by manually inlining.
     if (o == null) return o;
-    return dart.cast(o, dart.unwrapType(Null), false);
-  }
-
-  @JSExportName('_check')
-  static Object? _check_Null(Object? o) {
-    // Avoid extra function call to core.Null.is() by manually inlining.
-    if (o == null) return o;
-    return dart.cast(o, dart.unwrapType(Null), true);
+    return dart.cast(o, dart.unwrapType(Null));
   }
 }
 
@@ -135,14 +124,7 @@
   static Object? _as_Function(Object? o) {
     // Avoid extra function call to core.Function.is() by manually inlining.
     if (JS<bool>('!', 'typeof $o == "function"')) return o;
-    return dart.cast(o, dart.unwrapType(Function), false);
-  }
-
-  @JSExportName('_check')
-  static Object? _check_Function(Object? o) {
-    // Avoid extra function call to core.Function.is() by manually inlining.
-    if (JS<bool>('!', 'typeof $o == "function"')) return o;
-    return dart.cast(o, dart.unwrapType(Function), true);
+    return dart.cast(o, dart.unwrapType(Function));
   }
 }
 
@@ -218,16 +200,7 @@
     if (JS<bool>('!', '(typeof $o == "number" && Math.floor($o) == $o)')) {
       return o;
     }
-    return dart.cast(o, dart.unwrapType(int), false);
-  }
-
-  @JSExportName('_check')
-  static Object? _check_int(Object? o) {
-    // Avoid extra function call to core.int.is() by manually inlining.
-    if (JS<bool>('!', '(typeof $o == "number" && Math.floor($o) == $o)')) {
-      return o;
-    }
-    return dart.cast(o, dart.unwrapType(int), true);
+    return dart.cast(o, dart.unwrapType(int));
   }
 }
 
@@ -253,14 +226,7 @@
   static Object? _as_double(Object? o) {
     // Avoid extra function call to core.double.is() by manually inlining.
     if (JS<bool>('!', 'typeof $o == "number"')) return o;
-    return dart.cast(o, dart.unwrapType(double), false);
-  }
-
-  @JSExportName('_check')
-  static Object? _check_double(Object? o) {
-    // Avoid extra function call to core.double.is() by manually inlining.
-    if (JS<bool>('!', 'typeof $o == "number"')) return o;
-    return dart.cast(o, dart.unwrapType(double), true);
+    return dart.cast(o, dart.unwrapType(double));
   }
 }
 
@@ -275,14 +241,7 @@
   static Object? _as_num(Object? o) {
     // Avoid extra function call to core.num.is() by manually inlining.
     if (JS<bool>('!', 'typeof $o == "number"')) return o;
-    return dart.cast(o, dart.unwrapType(num), false);
-  }
-
-  @JSExportName('_check')
-  static Object? _check_num(Object? o) {
-    // Avoid extra function call to core.num.is() by manually inlining.
-    if (JS<bool>('!', 'typeof $o == "number"')) return o;
-    return dart.cast(o, dart.unwrapType(num), true);
+    return dart.cast(o, dart.unwrapType(num));
   }
 }
 
@@ -672,14 +631,7 @@
   static Object? _as_String(Object? o) {
     // Avoid extra function call to core.String.is() by manually inlining.
     if (JS<bool>('!', 'typeof $o == "string"')) return o;
-    return dart.cast(o, dart.unwrapType(String), false);
-  }
-
-  @JSExportName('_check')
-  static Object? _check_String(Object? o) {
-    // Avoid extra function call to core.String.is() by manually inlining.
-    if (JS<bool>('!', 'typeof $o == "string"')) return o;
-    return dart.cast(o, dart.unwrapType(String), true);
+    return dart.cast(o, dart.unwrapType(String));
   }
 }
 
@@ -710,14 +662,7 @@
   static Object? _as_bool(Object? o) {
     // Avoid extra function call to core.bool.is() by manually inlining.
     if (JS<bool>("!", '$o === true || $o === false')) return o;
-    return dart.cast(o, dart.unwrapType(bool), false);
-  }
-
-  @JSExportName('_check')
-  static Object? _check_bool(Object? o) {
-    // Avoid extra function call to core.bool.is() by manually inlining.
-    if (JS<bool>("!", '$o === true || $o === false')) return o;
-    return dart.cast(o, dart.unwrapType(bool), true);
+    return dart.cast(o, dart.unwrapType(bool));
   }
 }
 
diff --git a/sdk_nnbd/lib/_internal/js_dev_runtime/patch/io_patch.dart b/sdk_nnbd/lib/_internal/js_dev_runtime/patch/io_patch.dart
index cd854ce..ceee3d4 100644
--- a/sdk_nnbd/lib/_internal/js_dev_runtime/patch/io_patch.dart
+++ b/sdk_nnbd/lib/_internal/js_dev_runtime/patch/io_patch.dart
@@ -404,9 +404,16 @@
   }
 
   @patch
-  factory InternetAddress(String address) {
+  factory InternetAddress(String address, {InternetAddressType? type}) {
     throw UnsupportedError("InternetAddress");
   }
+
+  @patch
+  factory InternetAddress.fromRawAddress(Uint8List rawAddress,
+      {InternetAddressType? type}) {
+    throw new UnsupportedError("InternetAddress.fromRawAddress");
+  }
+
   @patch
   static Future<List<InternetAddress>> lookup(String host,
       {InternetAddressType type = InternetAddressType.any}) {
diff --git a/sdk_nnbd/lib/_internal/js_dev_runtime/private/ddc_runtime/classes.dart b/sdk_nnbd/lib/_internal/js_dev_runtime/private/ddc_runtime/classes.dart
index 48d41f9..bb58063 100644
--- a/sdk_nnbd/lib/_internal/js_dev_runtime/private/ddc_runtime/classes.dart
+++ b/sdk_nnbd/lib/_internal/js_dev_runtime/private/ddc_runtime/classes.dart
@@ -551,16 +551,7 @@
       '',
       '''#.as = function as_C(obj) {
     if (obj != null && obj[#]) return obj;
-    return #(obj, this, false);
-  }''',
-      ctor,
-      isClass,
-      cast);
-  JS(
-      '',
-      '''#._check = function check_C(obj) {
-    if (obj != null && obj[#]) return obj;
-    return #(obj, this, true);
+    return #(obj, this);
   }''',
       ctor,
       isClass,
diff --git a/sdk_nnbd/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart b/sdk_nnbd/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart
index 0d62265..5696d69 100644
--- a/sdk_nnbd/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart
+++ b/sdk_nnbd/lib/_internal/js_dev_runtime/private/ddc_runtime/errors.dart
@@ -56,30 +56,30 @@
   throw NoSuchMethodError(null, Symbol('<Unexpected Null Value>'), null, null);
 }
 
-castError(obj, expectedType, [@notNull bool isImplicit = false]) {
+castError(obj, expectedType) {
   var actualType = getReifiedType(obj);
   var message = _castErrorMessage(actualType, expectedType);
-  var error = isImplicit ? TypeErrorImpl(message) : CastErrorImpl(message);
-  throw error;
+  throw TypeErrorImpl(message);
 }
 
 String _castErrorMessage(from, to) {
   // If both types are generic classes, see if we can infer generic type
   // arguments for `from` that would allow the subtype relation to work.
-  var fromClass = getGenericClass(from);
-  if (fromClass != null) {
-    var fromTypeFormals = getGenericTypeFormals(fromClass);
-    var fromType = instantiateClass(fromClass, fromTypeFormals);
-    var inferrer = _TypeInferrer(fromTypeFormals);
-    if (inferrer.trySubtypeMatch(fromType, to)) {
-      var inferredTypes = inferrer.getInferredTypes();
-      if (inferredTypes != null) {
-        var inferred = instantiateClass(fromClass, inferredTypes);
-        return "Type '${typeName(from)}' should be '${typeName(inferred)}' "
-            "to implement expected type '${typeName(to)}'.";
-      }
-    }
-  }
+  // TODO(#40326) Fix suggested type or remove this code if no longer needed.
+  // var fromClass = getGenericClass(from);
+  // if (fromClass != null) {
+  //   var fromTypeFormals = getGenericTypeFormals(fromClass);
+  //   var fromType = instantiateClass(fromClass, fromTypeFormals);
+  //   var inferrer = _TypeInferrer(fromTypeFormals);
+  //   if (inferrer.trySubtypeMatch(fromType, to)) {
+  //     var inferredTypes = inferrer.getInferredTypes();
+  //     if (inferredTypes != null) {
+  //       var inferred = instantiateClass(fromClass, inferredTypes);
+  //       return "Type '${typeName(from)}' should be '${typeName(inferred)}' "
+  //           "to implement expected type '${typeName(to)}'.";
+  //     }
+  //   }
+  // }
   return "Expected a value of type '${typeName(to)}', "
       "but got one of type '${typeName(from)}'";
 }
diff --git a/sdk_nnbd/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart b/sdk_nnbd/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart
index 12a41a0..20555fb 100644
--- a/sdk_nnbd/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart
+++ b/sdk_nnbd/lib/_internal/js_dev_runtime/private/ddc_runtime/operations.dart
@@ -130,7 +130,7 @@
   if (f != null) {
     var setterType = getSetterType(getType(obj), f);
     if (setterType != null) {
-      return JS('', '#[#] = #._check(#)', obj, f, setterType, value);
+      return JS('', '#[#] = #.as(#)', obj, f, setterType, value);
     }
     // Always allow for JS interop objects.
     if (isJsInterop(obj)) return JS('', '#[#] = #', obj, f, value);
@@ -194,14 +194,14 @@
   }
   // Now that we know the signature matches, we can perform type checks.
   for (var i = 0; i < requiredCount; ++i) {
-    JS('', '#[#]._check(#[#])', required, i, actuals, i);
+    JS('', '#[#].as(#[#])', required, i, actuals, i);
   }
   for (var i = 0; i < extras; ++i) {
-    JS('', '#[#]._check(#[#])', optionals, i, actuals, i + requiredCount);
+    JS('', '#[#].as(#[#])', optionals, i, actuals, i + requiredCount);
   }
   if (names != null) {
     for (var name in names) {
-      JS('', '(#[#] || #[#])._check(#[#])', named, name, requiredNamed, name,
+      JS('', '(#[#] || #[#]).as(#[#])', named, name, requiredNamed, name,
           namedActuals, name);
     }
   }
@@ -427,7 +427,7 @@
 /// directly on types, but any query that requires checking subtyping relations
 /// is handled here.
 @JSExportName('as')
-cast(obj, type, @notNull bool isImplicit) {
+cast(obj, type) {
   // We hoist the common case where null is checked against another type here
   // for better performance.
   if (obj == null && !_strictSubtypeChecks) {
@@ -439,7 +439,7 @@
     if (isSubtypeOf(actual, type)) return obj;
   }
 
-  return castError(obj, type, isImplicit);
+  return castError(obj, type);
 }
 
 bool test(bool? obj) {
@@ -455,7 +455,7 @@
 void _throwBooleanConversionError() => throw BooleanConversionAssertionError();
 
 void booleanConversionFailed(obj) {
-  var actual = typeName(getReifiedType(test(obj)));
+  var actual = typeName(getReifiedType(obj));
   throw TypeErrorImpl("type '$actual' is not a 'bool' in boolean expression");
 }
 
@@ -466,7 +466,7 @@
       _nullWarnOnType(JS('', '#', int));
       return null;
     } else {
-      castError(obj, JS('', '#', int), false);
+      castError(obj, JS('', '#', int));
     }
   }
   return obj;
@@ -493,12 +493,12 @@
 /// or emits a runtime warning (otherwise).  This is only used by the
 /// compiler when casting from nullable to non-nullable variants of the
 /// same type.
-nullCast(x, type, [@notNull bool isImplicit = false]) {
+nullCast(x, type) {
   if (x == null) {
     if (!_strictSubtypeChecks) {
       _nullWarnOnType(type);
     } else {
-      castError(x, type, isImplicit);
+      castError(x, type);
     }
   }
   return x;
diff --git a/sdk_nnbd/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart b/sdk_nnbd/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart
index d424a31..d71922a 100644
--- a/sdk_nnbd/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart
+++ b/sdk_nnbd/lib/_internal/js_dev_runtime/private/ddc_runtime/types.dart
@@ -54,10 +54,9 @@
 ///
 ///     T.is(o): Implements 'o is T'.
 ///     T.as(o): Implements 'o as T'.
-///     T._check(o): Implements the type assertion of 'T x = o;'
 ///
 /// By convention, we used named JavaScript functions for these methods with the
-/// name 'is_X', 'as_X' and 'check_X' for various X to indicate the type or the
+/// name 'is_X' and 'as_X' for various X to indicate the type or the
 /// implementation strategy for the test (e.g 'is_String', 'is_G' for generic
 /// types, etc.)
 // TODO(jmesserly): we shouldn't implement Type here. It should be moved down
@@ -71,10 +70,7 @@
   bool is_T(object) => instanceOf(object, this);
 
   @JSExportName('as')
-  as_T(object) => cast(object, this, false);
-
-  @JSExportName('_check')
-  check_T(object) => cast(object, this, true);
+  as_T(object) => cast(object, this);
 
   DartType() {
     // Every instance of a DartType requires a set of type caches.
@@ -91,9 +87,6 @@
 
   @JSExportName('as')
   Object? as_T(Object? object) => object;
-
-  @JSExportName('_check')
-  Object? check_T(Object? object) => object;
 }
 
 @notNull
@@ -119,10 +112,10 @@
 Expando<Function> _assertInteropExpando = Expando<Function>();
 
 @NoReifyGeneric()
-F tearoffInterop<F extends Function>(F f) {
+F tearoffInterop<F extends Function?>(F f) {
   // Wrap a JS function with a closure that ensures all function arguments are
   // native JS functions.
-  if (!_isJsObject(f)) return f;
+  if (!_isJsObject(f) || f == null) return f;
   var ret = _assertInteropExpando[f];
   if (ret == null) {
     ret = JS(
@@ -194,10 +187,7 @@
   bool is_T(obj) => isRawJSType(obj) || instanceOf(obj, this);
 
   @JSExportName('as')
-  as_T(obj) => obj == null || is_T(obj) ? obj : castError(obj, this, false);
-
-  @JSExportName('_check')
-  check_T(obj) => obj == null || is_T(obj) ? obj : castError(obj, this, true);
+  as_T(obj) => obj == null || is_T(obj) ? obj : castError(obj, this);
 }
 
 /// An anonymous JS type
@@ -212,10 +202,7 @@
   bool is_T(obj) => _isJsObject(obj) || instanceOf(obj, this);
 
   @JSExportName('as')
-  as_T(obj) => obj == null || _isJsObject(obj) ? obj : cast(obj, this, false);
-
-  @JSExportName('_check')
-  check_T(obj) => obj == null || _isJsObject(obj) ? obj : cast(obj, this, true);
+  as_T(obj) => obj == null || _isJsObject(obj) ? obj : cast(obj, this);
 }
 
 void _warn(arg) {
@@ -362,12 +349,7 @@
   @JSExportName('as')
   as_T(obj) => obj == null || JS<bool>('!', '#.is(#)', type, obj)
       ? obj
-      : cast(obj, this, false);
-
-  @JSExportName('_check')
-  check_T(obj) => obj == null || JS<bool>('!', '#.is(#)', type, obj)
-      ? obj
-      : cast(obj, this, true);
+      : cast(obj, this);
 }
 
 /// A wrapper to identify a legacy (star, *) type of the form [type]*.
@@ -395,15 +377,10 @@
   @JSExportName('as')
   as_T(obj) => obj == null || JS<bool>('!', '#.is(#)', type, obj)
       ? obj
-      : cast(obj, this, false);
-
-  @JSExportName('_check')
-  check_T(obj) => obj == null || JS<bool>('!', '#.is(#)', type, obj)
-      ? obj
-      : cast(obj, this, true);
+      : cast(obj, this);
 }
 
-// TODO(nshahan) Add override optimizations for is, as and _check?
+// TODO(nshahan) Add override optimizations for is and as?
 class NeverType extends DartType {
   @override
   toString() => 'Never';
@@ -424,9 +401,6 @@
 
   @JSExportName('as')
   Object? as_T(Object? object) => object;
-
-  @JSExportName('_check')
-  Object? check_T(Object? object) => object;
 }
 
 @JSExportName('void')
@@ -786,7 +760,8 @@
         var typeNameString = typeName(JS('', '#[#[#]]', named, names, i));
         buffer += '$typeNameString ${JS('', '#[#]', names, i)}';
       }
-      if (JS('!', 'Object.keys(#).length > 0', requiredNamed)) buffer += ', ';
+      if (JS('!', 'Object.keys(#).length > 0 && #.length > 0', requiredNamed,
+          names)) buffer += ', ';
       names = getOwnPropertyNames(requiredNamed);
       JS('', '#.sort()', names);
       for (var i = 0; JS<bool>('!', '# < #.length', i, names); i++) {
@@ -817,7 +792,7 @@
   }
 
   @JSExportName('as')
-  as_T(obj, [@notNull bool isImplicit = false]) {
+  as_T(obj) {
     if (JS('!', 'typeof # == "function"', obj)) {
       var actual = JS('', '#[#]', obj, _runtimeType);
       // If there's no actual type, it's a JS function.
@@ -826,11 +801,8 @@
         return obj;
       }
     }
-    return castError(obj, this, isImplicit);
+    return castError(obj, this);
   }
-
-  @JSExportName('_check')
-  check_T(obj) => as_T(obj, true);
 }
 
 /// A type variable, used by [GenericFunctionType] to represent a type formal.
@@ -1047,13 +1019,7 @@
   @JSExportName('as')
   as_T(obj) {
     if (is_T(obj)) return obj;
-    return castError(obj, this, false);
-  }
-
-  @JSExportName('_check')
-  check_T(obj) {
-    if (is_T(obj)) return obj;
-    return castError(obj, this, true);
+    return castError(obj, this);
   }
 }
 
diff --git a/sdk_nnbd/lib/_internal/js_dev_runtime/private/foreign_helper.dart b/sdk_nnbd/lib/_internal/js_dev_runtime/private/foreign_helper.dart
index 357047e..7f11505 100644
--- a/sdk_nnbd/lib/_internal/js_dev_runtime/private/foreign_helper.dart
+++ b/sdk_nnbd/lib/_internal/js_dev_runtime/private/foreign_helper.dart
@@ -106,7 +106,7 @@
  */
 // Add additional optional arguments if needed. The method is treated internally
 // as a variable argument method.
-T JS<T extends Object?>(String typeDescription, String codeTemplate,
+external T JS<T extends Object?>(String typeDescription, String codeTemplate,
     [arg0,
     arg1,
     arg2,
@@ -126,7 +126,7 @@
     arg16,
     arg17,
     arg18,
-    arg19]) {}
+    arg19]);
 
 /// Annotates the compiled Js name for fields and methods.
 /// Similar behaviour to `JS` from `package:js/js.dart` (but usable from runtime
@@ -159,73 +159,73 @@
 /**
  * Returns the prefix used for generated is checks on classes.
  */
-String JS_OPERATOR_IS_PREFIX() {}
+external String JS_OPERATOR_IS_PREFIX();
 
 /**
  * Returns the prefix used for generated type argument substitutions on classes.
  */
-String JS_OPERATOR_AS_PREFIX() {}
+external String JS_OPERATOR_AS_PREFIX();
 
 /// Returns the name of the class `Object` in the generated code.
-String JS_OBJECT_CLASS_NAME() {}
+external String JS_OBJECT_CLASS_NAME();
 
 /// Returns the name of the class `Null` in the generated code.
-String JS_NULL_CLASS_NAME() {}
+external String JS_NULL_CLASS_NAME();
 
 /// Returns the name of the class `Function` in the generated code.
-String JS_FUNCTION_CLASS_NAME() {}
+external String JS_FUNCTION_CLASS_NAME();
 
 /**
  * Returns the field name used for determining if an object or its
  * interceptor has JavaScript indexing behavior.
  */
-String JS_IS_INDEXABLE_FIELD_NAME() {}
+external String JS_IS_INDEXABLE_FIELD_NAME();
 
 /// Returns the name used for generated function types on classes and methods.
-String JS_SIGNATURE_NAME() {}
+external String JS_SIGNATURE_NAME();
 
 /// Returns the name used to tag typedefs.
-String JS_TYPEDEF_TAG() {}
+external String JS_TYPEDEF_TAG();
 
 /// Returns the name used to tag function type representations in JavaScript.
-String JS_FUNCTION_TYPE_TAG() {}
+external String JS_FUNCTION_TYPE_TAG();
 
 /**
  * Returns the name used to tag void return in function type representations
  * in JavaScript.
  */
-String JS_FUNCTION_TYPE_VOID_RETURN_TAG() {}
+external String JS_FUNCTION_TYPE_VOID_RETURN_TAG();
 
 /**
  * Returns the name used to tag return types in function type representations
  * in JavaScript.
  */
-String JS_FUNCTION_TYPE_RETURN_TYPE_TAG() {}
+external String JS_FUNCTION_TYPE_RETURN_TYPE_TAG();
 
 /**
  * Returns the name used to tag required parameters in function type
  * representations in JavaScript.
  */
-String JS_FUNCTION_TYPE_REQUIRED_PARAMETERS_TAG() {}
+external String JS_FUNCTION_TYPE_REQUIRED_PARAMETERS_TAG();
 
 /**
  * Returns the name used to tag optional parameters in function type
  * representations in JavaScript.
  */
-String JS_FUNCTION_TYPE_OPTIONAL_PARAMETERS_TAG() {}
+external String JS_FUNCTION_TYPE_OPTIONAL_PARAMETERS_TAG();
 
 /**
  * Returns the name used to tag named parameters in function type
  * representations in JavaScript.
  */
-String JS_FUNCTION_TYPE_NAMED_PARAMETERS_TAG() {}
+external String JS_FUNCTION_TYPE_NAMED_PARAMETERS_TAG();
 
 /// Returns the JS name for [name] from the Namer.
-String JS_GET_NAME(String name) {}
+external String JS_GET_NAME(String name);
 
 /// Returns the state of a flag that is determined by the state of the compiler
 /// when the program has been analyzed.
-bool JS_GET_FLAG(String name) {}
+external bool JS_GET_FLAG(String name);
 
 /**
  * Pretend [code] is executed.  Generates no executable code.  This is used to
diff --git a/sdk_nnbd/lib/_internal/js_runtime/lib/async_patch.dart b/sdk_nnbd/lib/_internal/js_runtime/lib/async_patch.dart
index 15f64ac..dfc4707 100644
--- a/sdk_nnbd/lib/_internal/js_runtime/lib/async_patch.dart
+++ b/sdk_nnbd/lib/_internal/js_runtime/lib/async_patch.dart
@@ -203,7 +203,8 @@
     }
   }
 
-  void completeError(e, [st]) {
+  void completeError(Object e, [StackTrace? st]) {
+    st ??= AsyncError.defaultStackTrace(e);
     if (isSync) {
       _future._completeError(e, st);
     } else {
diff --git a/sdk_nnbd/lib/_internal/js_runtime/lib/constant_map.dart b/sdk_nnbd/lib/_internal/js_runtime/lib/constant_map.dart
index 347b20b..0f673d8 100644
--- a/sdk_nnbd/lib/_internal/js_runtime/lib/constant_map.dart
+++ b/sdk_nnbd/lib/_internal/js_runtime/lib/constant_map.dart
@@ -54,7 +54,7 @@
 
   String toString() => MapBase.mapToString(this);
 
-  static void _throwUnmodifiable() {
+  static Never _throwUnmodifiable() {
     throw new UnsupportedError('Cannot modify unmodifiable Map');
   }
 
diff --git a/sdk_nnbd/lib/_internal/js_runtime/lib/io_patch.dart b/sdk_nnbd/lib/_internal/js_runtime/lib/io_patch.dart
index a6121c9..da7ebc7 100644
--- a/sdk_nnbd/lib/_internal/js_runtime/lib/io_patch.dart
+++ b/sdk_nnbd/lib/_internal/js_runtime/lib/io_patch.dart
@@ -404,9 +404,16 @@
   }
 
   @patch
-  factory InternetAddress(String address) {
+  factory InternetAddress(String address, {InternetAddressType? type}) {
     throw new UnsupportedError("InternetAddress");
   }
+
+  @patch
+  factory InternetAddress.fromRawAddress(Uint8List rawAddress,
+      {InternetAddressType? type}) {
+    throw new UnsupportedError("InternetAddress.fromRawAddress");
+  }
+
   @patch
   static Future<List<InternetAddress>> lookup(String host,
       {InternetAddressType type: InternetAddressType.any}) {
diff --git a/sdk_nnbd/lib/_internal/js_runtime/lib/js_helper.dart b/sdk_nnbd/lib/_internal/js_runtime/lib/js_helper.dart
index 0a8a274..36a0510 100644
--- a/sdk_nnbd/lib/_internal/js_runtime/lib/js_helper.dart
+++ b/sdk_nnbd/lib/_internal/js_runtime/lib/js_helper.dart
@@ -2696,6 +2696,7 @@
         return JS('String', '#', name);
       }
     }
+    throw new ArgumentError("Field name $fieldName not found.");
   }
 }
 
diff --git a/sdk_nnbd/lib/_internal/js_runtime/lib/js_patch.dart b/sdk_nnbd/lib/_internal/js_runtime/lib/js_patch.dart
index 99f9016..1ff2e55 100644
--- a/sdk_nnbd/lib/_internal/js_runtime/lib/js_patch.dart
+++ b/sdk_nnbd/lib/_internal/js_runtime/lib/js_patch.dart
@@ -14,7 +14,7 @@
 @patch
 JsObject get context => _context;
 
-final JsObject _context = _wrapToDart(JS('', 'self'));
+final JsObject _context = _castToJsObject(_wrapToDart(JS('', 'self')));
 
 _convertDartFunction(Function f, {bool captureThis: false}) {
   return JS(
@@ -54,37 +54,39 @@
   factory JsObject(JsFunction constructor, [List? arguments]) {
     var ctor = _convertToJS(constructor);
     if (arguments == null) {
-      return _wrapToDart(JS('', 'new #()', ctor));
+      return _castToJsObject(_wrapToDart(JS('', 'new #()', ctor)));
     }
 
     if (JS('bool', '# instanceof Array', arguments)) {
       int argumentCount = JS('int', '#.length', arguments);
       switch (argumentCount) {
         case 0:
-          return _wrapToDart(JS('', 'new #()', ctor));
+          return _castToJsObject(_wrapToDart(JS('', 'new #()', ctor)));
 
         case 1:
           var arg0 = _convertToJS(JS('', '#[0]', arguments));
-          return _wrapToDart(JS('', 'new #(#)', ctor, arg0));
+          return _castToJsObject(_wrapToDart(JS('', 'new #(#)', ctor, arg0)));
 
         case 2:
           var arg0 = _convertToJS(JS('', '#[0]', arguments));
           var arg1 = _convertToJS(JS('', '#[1]', arguments));
-          return _wrapToDart(JS('', 'new #(#, #)', ctor, arg0, arg1));
+          return _castToJsObject(
+              _wrapToDart(JS('', 'new #(#, #)', ctor, arg0, arg1)));
 
         case 3:
           var arg0 = _convertToJS(JS('', '#[0]', arguments));
           var arg1 = _convertToJS(JS('', '#[1]', arguments));
           var arg2 = _convertToJS(JS('', '#[2]', arguments));
-          return _wrapToDart(JS('', 'new #(#, #, #)', ctor, arg0, arg1, arg2));
+          return _castToJsObject(
+              _wrapToDart(JS('', 'new #(#, #, #)', ctor, arg0, arg1, arg2)));
 
         case 4:
           var arg0 = _convertToJS(JS('', '#[0]', arguments));
           var arg1 = _convertToJS(JS('', '#[1]', arguments));
           var arg2 = _convertToJS(JS('', '#[2]', arguments));
           var arg3 = _convertToJS(JS('', '#[3]', arguments));
-          return _wrapToDart(
-              JS('', 'new #(#, #, #, #)', ctor, arg0, arg1, arg2, arg3));
+          return _castToJsObject(_wrapToDart(
+              JS('', 'new #(#, #, #, #)', ctor, arg0, arg1, arg2, arg3)));
       }
     }
 
@@ -103,7 +105,7 @@
     // object for which there is an interceptor
     var jsObj = JS('', 'new #()', factoryFunction);
 
-    return _wrapToDart(jsObj);
+    return _castToJsObject(_wrapToDart(jsObj));
 
     // TODO(sra): Investigate:
     //
@@ -118,7 +120,7 @@
     if (object is num || object is String || object is bool || object == null) {
       throw ArgumentError("object cannot be a num, string, bool, or null");
     }
-    return _wrapToDart(_convertToJS(object));
+    return _castToJsObject(_wrapToDart(_convertToJS(object)));
   }
 
   @patch
@@ -126,7 +128,7 @@
     if ((object is! Map) && (object is! Iterable)) {
       throw ArgumentError("object must be a Map or Iterable");
     }
-    return _wrapToDart(_convertDataTree(object));
+    return _castToJsObject(_wrapToDart(_convertDataTree(object)));
   }
 
   static _convertDataTree(Object data) {
@@ -367,6 +369,9 @@
 const _JS_FUNCTION_PROPERTY_NAME = r'$dart_jsFunction';
 const _JS_FUNCTION_PROPERTY_NAME_CAPTURE_THIS = r'_$dart_jsFunctionCaptureThis';
 
+@pragma('dart2js:tryInline')
+JsObject _castToJsObject(o) => JS<JsObject>('', '#', o);
+
 bool _defineProperty(o, String name, value) {
   try {
     if (_isExtensible(o) &&
@@ -445,7 +450,7 @@
 
 // converts a Dart object to a reference to a native JS object
 // which might be a DartObject JS->Dart proxy
-Object _convertToDart(o) {
+Object? _convertToDart(o) {
   if (JS('bool', '# == null', o) ||
       JS('bool', 'typeof # == "string"', o) ||
       JS('bool', 'typeof # == "number"', o) ||
@@ -465,7 +470,7 @@
   }
 }
 
-JsObject _wrapToDart(o) {
+Object _wrapToDart(o) {
   if (JS('bool', 'typeof # == "function"', o)) {
     return _getDartProxy(
         o, DART_CLOSURE_PROPERTY_NAME, (o) => JsFunction._fromJs(o));
@@ -478,8 +483,8 @@
       o, _DART_OBJECT_PROPERTY_NAME, (o) => JsObject._fromJs(o));
 }
 
-JsObject _getDartProxy(o, String propertyName, JsObject createProxy(o)) {
-  var dartProxy = _getOwnProperty(o, propertyName) as JsObject;
+Object _getDartProxy(o, String propertyName, JsObject createProxy(o)) {
+  var dartProxy = _getOwnProperty(o, propertyName);
   // Temporary fix for dartbug.com/15193
   // In some cases it's possible to see a JavaScript object that
   // came from a different context and was previously proxied to
diff --git a/sdk_nnbd/lib/_internal/js_runtime/lib/rti.dart b/sdk_nnbd/lib/_internal/js_runtime/lib/rti.dart
index 690efb3..a3494f2 100644
--- a/sdk_nnbd/lib/_internal/js_runtime/lib/rti.dart
+++ b/sdk_nnbd/lib/_internal/js_runtime/lib/rti.dart
@@ -53,12 +53,6 @@
   @pragma('dart2js:noElision')
   dynamic _as;
 
-  /// JavaScript method for type check.  The method is called from generated
-  /// code, e.g. parameter check for `T param` generates something like
-  /// `rtiForT._check(param)`.
-  @pragma('dart2js:noElision')
-  dynamic _check;
-
   /// JavaScript method for 'is' test.  The method is called from generated
   /// code, e.g. `o is T` generates something like `rtiForT._is(o)`.
   @pragma('dart2js:noElision')
@@ -68,10 +62,6 @@
     rti._as = fn;
   }
 
-  static void _setTypeCheckFunction(Rti rti, fn) {
-    rti._check = fn;
-  }
-
   static void _setIsTestFunction(Rti rti, fn) {
     rti._is = fn;
   }
@@ -835,12 +825,10 @@
   if (isObjectType(testRti)) {
     isFn = RAW_DART_FUNCTION_REF(_isObject);
     Rti._setAsCheckFunction(testRti, RAW_DART_FUNCTION_REF(_asObject));
-    Rti._setTypeCheckFunction(testRti, RAW_DART_FUNCTION_REF(_checkObject));
   } else if (isTopType(testRti)) {
     isFn = RAW_DART_FUNCTION_REF(_isTop);
     var asFn = RAW_DART_FUNCTION_REF(_asTop);
     Rti._setAsCheckFunction(testRti, asFn);
-    Rti._setTypeCheckFunction(testRti, asFn);
   } else if (_Utils.isIdentical(testRti, TYPE_REF<int>())) {
     isFn = RAW_DART_FUNCTION_REF(_isInt);
   } else if (_Utils.isIdentical(testRti, TYPE_REF<double>())) {
@@ -921,23 +909,6 @@
   Rti objectRti = instanceOrFunctionType(object, testRti);
   String message =
       _Error.compose(object, objectRti, _rtiToString(testRti, null));
-  throw _CastError.fromMessage(message);
-}
-
-/// Called from generated code.
-_generalTypeCheckImplementation(object) {
-  // This static method is installed on an Rti object as a JavaScript instance
-  // method. The Rti object is 'this'.
-  Rti testRti = _castToRti(JS('', 'this'));
-  if (object == null) {
-    if (JS_GET_FLAG('LEGACY') || isNullable(testRti)) return object;
-  } else {
-    if (Rti._isCheck(testRti, object)) return object;
-  }
-
-  Rti objectRti = instanceOrFunctionType(object, testRti);
-  String message =
-      _Error.compose(object, objectRti, _rtiToString(testRti, null));
   throw _TypeError.fromMessage(message);
 }
 
@@ -950,7 +921,7 @@
   throw _TypeError.fromMessage(message);
 }
 
-/// Base class to _CastError and _TypeError.
+/// Base class to _TypeError.
 class _Error extends Error {
   final String _message;
   _Error(this._message);
@@ -968,14 +939,6 @@
   String toString() => _message;
 }
 
-class _CastError extends _Error implements CastError, TypeError {
-  _CastError.fromMessage(String message) : super('TypeError: $message');
-
-  factory _CastError.forType(object, String type) {
-    return _CastError.fromMessage(_Error.compose(object, null, type));
-  }
-}
-
 class _TypeError extends _Error implements TypeError, CastError {
   _TypeError.fromMessage(String message) : super('TypeError: $message');
 
@@ -989,7 +952,7 @@
 
 // Specializations.
 //
-// Specializations can be placed on Rti objects as the _as, _check and _is
+// Specializations can be placed on Rti objects as the _as and _is
 // 'methods'. They can also be called directly called from generated code.
 
 /// Specialization for 'is Object'.
@@ -1002,13 +965,6 @@
 /// Called from generated code via Rti `_as` method.
 dynamic _asObject(object) {
   if (JS_GET_FLAG('LEGACY') || object != null) return object;
-  throw _CastError.forType(object, 'Object');
-}
-
-/// Specialization for check on 'Object'.
-/// Called from generated code via Rti `_check` method.
-dynamic _checkObject(object) {
-  if (JS_GET_FLAG('LEGACY') || object != null) return object;
   throw _TypeError.forType(object, 'Object');
 }
 
@@ -1019,7 +975,7 @@
 }
 
 /// Specialization for 'as dynamic' and other top types.
-/// Called from generated code via Rti `_as` and `_check` methods.
+/// Called from generated code via Rti `_as` methods.
 dynamic _asTop(object) {
   return object;
 }
@@ -1035,14 +991,6 @@
 bool? _asBoolNullable(object) {
   if (_isBool(object)) return _Utils.asBool(object);
   if (object == null) return object;
-  throw _CastError.forType(object, 'bool');
-}
-
-/// Specialization for check on 'bool?'.
-/// Called from generated code.
-bool? _checkBoolNullable(object) {
-  if (_isBool(object)) return _Utils.asBool(object);
-  if (object == null) return object;
   throw _TypeError.forType(object, 'bool');
 }
 
@@ -1051,14 +999,6 @@
 double? _asDoubleNullable(object) {
   if (_isNum(object)) return _Utils.asDouble(object);
   if (object == null) return object;
-  throw _CastError.forType(object, 'double');
-}
-
-/// Specialization for check on 'double?'.
-/// Called from generated code.
-double? _checkDoubleNullable(object) {
-  if (_isNum(object)) return _Utils.asDouble(object);
-  if (object == null) return object;
   throw _TypeError.forType(object, 'double');
 }
 
@@ -1074,14 +1014,6 @@
 int? _asIntNullable(object) {
   if (_isInt(object)) return _Utils.asInt(object);
   if (object == null) return object;
-  throw _CastError.forType(object, 'int');
-}
-
-/// Specialization for check on 'int?'.
-/// Called from generated code.
-int? _checkIntNullable(object) {
-  if (_isInt(object)) return _Utils.asInt(object);
-  if (object == null) return object;
   throw _TypeError.forType(object, 'int');
 }
 
@@ -1096,14 +1028,6 @@
 num? _asNumNullable(object) {
   if (_isNum(object)) return _Utils.asNum(object);
   if (object == null) return object;
-  throw _CastError.forType(object, 'num');
-}
-
-/// Specialization for check on 'num?'.
-/// Called from generated code.
-num? _checkNumNullable(object) {
-  if (_isNum(object)) return _Utils.asNum(object);
-  if (object == null) return object;
   throw _TypeError.forType(object, 'num');
 }
 
@@ -1118,14 +1042,6 @@
 String? _asStringNullable(object) {
   if (_isString(object)) return _Utils.asString(object);
   if (object == null) return object;
-  throw _CastError.forType(object, 'String');
-}
-
-/// Specialization for check on 'String?'.
-/// Called from generated code.
-String? _checkStringNullable(object) {
-  if (_isString(object)) return _Utils.asString(object);
-  if (object == null) return object;
   throw _TypeError.forType(object, 'String');
 }
 
@@ -1594,15 +1510,12 @@
   }
 
   static Rti _installTypeTests(Object universe, Rti rti) {
-    // Set up methods to perform type tests. The general as-check / type-check
-    // methods use the is-test method. The is-test method on first use
-    // overwrites itself, and possibly the as-check / type-check methods, with a
-    // specialized version.
-    var checkFn = RAW_DART_FUNCTION_REF(_generalTypeCheckImplementation);
+    // Set up methods to perform type tests. The general as-check methods use
+    // the is-test method. The is-test method on first use overwrites itself,
+    // and possibly the as-check methods, with a specialized version.
     var asFn = RAW_DART_FUNCTION_REF(_generalAsCheckImplementation);
     var isFn = RAW_DART_FUNCTION_REF(_installSpecializedIsTest);
     Rti._setAsCheckFunction(rti, asFn);
-    Rti._setTypeCheckFunction(rti, checkFn);
     Rti._setIsTestFunction(rti, isFn);
     return rti;
   }
diff --git a/sdk_nnbd/lib/_internal/vm/bin/file_patch.dart b/sdk_nnbd/lib/_internal/vm/bin/file_patch.dart
index 8c50129..354f809 100644
--- a/sdk_nnbd/lib/_internal/vm/bin/file_patch.dart
+++ b/sdk_nnbd/lib/_internal/vm/bin/file_patch.dart
@@ -193,7 +193,7 @@
   // Called when a watcher is no longer needed.
   void _doneWatcher() {}
   // Called when a new path is being watched.
-  Stream _pathWatched() {}
+  Stream _pathWatched();
   // Called when a path is no longer being watched.
   void _donePathWatched() {}
 
diff --git a/sdk_nnbd/lib/_internal/vm/bin/process_patch.dart b/sdk_nnbd/lib/_internal/vm/bin/process_patch.dart
index 2df7ef9..467bdc6 100644
--- a/sdk_nnbd/lib/_internal/vm/bin/process_patch.dart
+++ b/sdk_nnbd/lib/_internal/vm/bin/process_patch.dart
@@ -76,7 +76,7 @@
 
   @patch
   static bool killPid(int pid, [ProcessSignal signal = ProcessSignal.sigterm]) {
-    // TODO: Remove once non-nullability is sound.
+    // TODO(40614): Remove once non-nullability is sound.
     ArgumentError.checkNotNull(signal, "signal");
     return _ProcessUtils._killPid(pid, signal._signalNumber);
   }
@@ -216,7 +216,7 @@
       bool runInShell,
       this._mode)
       : super() {
-    // TODO: Remove once non-nullability is sound.
+    // TODO(40614): Remove once non-nullability is sound.
     ArgumentError.checkNotNull(path, "path");
     ArgumentError.checkNotNull(arguments, "arguments");
     for (int i = 0; i < arguments.length; i++) {
@@ -518,7 +518,7 @@
       _exitCode?.future ?? (throw StateError("Process is detached"));
 
   bool kill([ProcessSignal signal = ProcessSignal.sigterm]) {
-    // TODO: Remove once non-nullability is sound.
+    // TODO(40614): Remove once non-nullability is sound.
     ArgumentError.checkNotNull(kill, "kill");
     assert(_started);
     if (_ended) return false;
diff --git a/sdk_nnbd/lib/_internal/vm/bin/socket_patch.dart b/sdk_nnbd/lib/_internal/vm/bin/socket_patch.dart
index 8b5638d..8a954e8 100644
--- a/sdk_nnbd/lib/_internal/vm/bin/socket_patch.dart
+++ b/sdk_nnbd/lib/_internal/vm/bin/socket_patch.dart
@@ -68,8 +68,14 @@
   }
 
   @patch
-  factory InternetAddress(String address) {
-    return new _InternetAddress.parse(address);
+  factory InternetAddress(String address, {InternetAddressType? type}) {
+    return _InternetAddress.fromString(address, type: type);
+  }
+
+  @patch
+  factory InternetAddress.fromRawAddress(Uint8List rawAddress,
+      {InternetAddressType? type}) {
+    return _InternetAddress.fromRawAddress(rawAddress, type: type);
   }
 
   @patch
@@ -107,7 +113,7 @@
 }
 
 void _throwOnBadPort(int port) {
-  // TODO: Remove once non-nullability is sound.
+  // TODO(40614): Remove once non-nullability is sound.
   ArgumentError.checkNotNull(port, "port");
   if ((port < 0) || (port > 0xFFFF)) {
     throw new ArgumentError("Invalid port $port");
@@ -115,7 +121,7 @@
 }
 
 void _throwOnBadTtl(int ttl) {
-  // TODO: Remove once non-nullability is sound.
+  // TODO(40614): Remove once non-nullability is sound.
   ArgumentError.checkNotNull(ttl, "ttl");
   if (ttl < 1 || ttl > 255) {
     throw new ArgumentError('Invalid ttl $ttl');
@@ -141,10 +147,7 @@
   final String? _host;
   final Uint8List _in_addr;
   final int _scope_id;
-
-  InternetAddressType get type => _in_addr.length == _IPv4AddrLength
-      ? InternetAddressType.IPv4
-      : InternetAddressType.IPv6;
+  final InternetAddressType type;
 
   String get host => _host ?? address;
 
@@ -160,7 +163,11 @@
           if (_in_addr[i] != 0) return false;
         }
         return _in_addr[_IPv6AddrLength - 1] == 1;
+
+      case InternetAddressType.unix:
+        return false;
     }
+    throw new UnsupportedError("Unexpected address type $type");
   }
 
   bool get isLinkLocal {
@@ -172,7 +179,11 @@
       case InternetAddressType.IPv6:
         // Checking for fe80::/10.
         return _in_addr[0] == 0xFE && (_in_addr[1] & 0xB0) == 0x80;
+
+      case InternetAddressType.unix:
+        return false;
     }
+    throw new UnsupportedError("Unexpected address type $type");
   }
 
   bool get isMulticast {
@@ -184,56 +195,102 @@
       case InternetAddressType.IPv6:
         // Checking for ff00::/8.
         return _in_addr[0] == 0xFF;
+
+      case InternetAddressType.unix:
+        return false;
+    }
+    throw new UnsupportedError("Unexpected address type $type");
+  }
+
+  Future<InternetAddress> reverse() {
+    if (type == InternetAddressType.unix) {
+      return Future.value(this);
+    }
+    return _NativeSocket.reverseLookup(this);
+  }
+
+  _InternetAddress(this.type, this.address, this._host, this._in_addr,
+      [this._scope_id = 0]);
+
+  factory _InternetAddress.fromString(String address,
+      {InternetAddressType? type}) {
+    // TODO(40614): Remove once non-nullability is sound.
+    ArgumentError.checkNotNull(address, 'address');
+    if (type == InternetAddressType.unix) {
+      var rawAddress = FileSystemEntity._toUtf8Array(address);
+      return _InternetAddress(
+          InternetAddressType.unix, address, null, rawAddress);
+    } else {
+      var in_addr = _parse(address);
+      if (in_addr == null) {
+        throw ArgumentError("Invalid internet address $address");
+      }
+      InternetAddressType type = in_addr.length == _IPv4AddrLength
+          ? InternetAddressType.IPv4
+          : InternetAddressType.IPv6;
+      return _InternetAddress(type, address, null, in_addr);
     }
   }
 
-  Future<InternetAddress> reverse() => _NativeSocket.reverseLookup(this);
-
-  _InternetAddress(this.address, this._host, this._in_addr,
-      [this._scope_id = 0]);
-
-  factory _InternetAddress.parse(String address) {
-    // TODO: Remove once non-nullability is sound.
-    ArgumentError.checkNotNull(address, "address");
-    var in_addr = _parse(address);
-    if (in_addr == null) {
-      throw new ArgumentError("Invalid internet address $address");
+  factory _InternetAddress.fromRawAddress(Uint8List rawAddress,
+      {InternetAddressType? type}) {
+    if (type == InternetAddressType.unix) {
+      ArgumentError.checkNotNull(rawAddress, 'rawAddress');
+      var rawPath = FileSystemEntity._toNullTerminatedUtf8Array(rawAddress);
+      var address = FileSystemEntity._toStringFromUtf8Array(rawAddress);
+      return _InternetAddress(InternetAddressType.unix, address, null, rawPath);
+    } else {
+      int type = -1;
+      if (rawAddress.length == _IPv4AddrLength) {
+        type = 0;
+      } else {
+        if (rawAddress.length != _IPv6AddrLength) {
+          throw ArgumentError("Invalid internet address ${rawAddress}");
+        }
+        type = 1;
+      }
+      var address = _rawAddrToString(rawAddress);
+      return _InternetAddress(
+          InternetAddressType._from(type), address, null, rawAddress);
     }
-    return new _InternetAddress(address, null, in_addr);
   }
 
   factory _InternetAddress.fixed(int id) {
     switch (id) {
       case _addressLoopbackIPv4:
-        var in_addr = new Uint8List(_IPv4AddrLength);
+        var in_addr = Uint8List(_IPv4AddrLength);
         in_addr[0] = 127;
         in_addr[_IPv4AddrLength - 1] = 1;
-        return new _InternetAddress("127.0.0.1", null, in_addr);
+        return _InternetAddress(
+            InternetAddressType.IPv4, "127.0.0.1", null, in_addr);
       case _addressLoopbackIPv6:
-        var in_addr = new Uint8List(_IPv6AddrLength);
+        var in_addr = Uint8List(_IPv6AddrLength);
         in_addr[_IPv6AddrLength - 1] = 1;
-        return new _InternetAddress("::1", null, in_addr);
+        return _InternetAddress(InternetAddressType.IPv6, "::1", null, in_addr);
       case _addressAnyIPv4:
-        var in_addr = new Uint8List(_IPv4AddrLength);
-        return new _InternetAddress("0.0.0.0", "0.0.0.0", in_addr);
+        var in_addr = Uint8List(_IPv4AddrLength);
+        return _InternetAddress(
+            InternetAddressType.IPv4, "0.0.0.0", "0.0.0.0", in_addr);
       case _addressAnyIPv6:
-        var in_addr = new Uint8List(_IPv6AddrLength);
-        return new _InternetAddress("::", "::", in_addr);
+        var in_addr = Uint8List(_IPv6AddrLength);
+        return _InternetAddress(InternetAddressType.IPv6, "::", "::", in_addr);
       default:
         assert(false);
-        throw new ArgumentError();
+        throw ArgumentError();
     }
   }
 
   // Create a clone of this _InternetAddress replacing the host.
   _InternetAddress _cloneWithNewHost(String host) {
-    return new _InternetAddress(
-        address, host, new Uint8List.fromList(_in_addr));
+    return _InternetAddress(type, address, host, Uint8List.fromList(_in_addr));
   }
 
   bool operator ==(other) {
     if (!(other is _InternetAddress)) return false;
     if (other.type != type) return false;
+    if (type == InternetAddressType.unix) {
+      return address == other.address;
+    }
     bool equals = true;
     for (int i = 0; i < _in_addr.length && equals; i++) {
       equals = other._in_addr[i] == _in_addr[i];
@@ -242,6 +299,9 @@
   }
 
   int get hashCode {
+    if (type == InternetAddressType.unix) {
+      return address.hashCode;
+    }
     int result = 1;
     for (int i = 0; i < _in_addr.length; i++) {
       result = (result * 31 + _in_addr[i]) & 0x3FFFFFFF;
@@ -253,6 +313,9 @@
     return "InternetAddress('$address', ${type.name})";
   }
 
+  static String _rawAddrToString(Uint8List address)
+      native "InternetAddress_RawAddrToString";
+
   static Uint8List? _parse(String address) native "InternetAddress_Parse";
 }
 
@@ -394,8 +457,8 @@
         throw createError(response, "Failed host lookup: '$host'");
       } else {
         return response.skip(1).map<InternetAddress>((result) {
-          var type = new InternetAddressType._from(result[0]);
-          return new _InternetAddress(result[1], host, result[2], result[3]);
+          var type = InternetAddressType._from(result[0]);
+          return _InternetAddress(type, result[1], host, result[2], result[3]);
         }).toList();
       }
     });
@@ -423,10 +486,10 @@
       } else {
         var map = response.skip(1).fold(new Map<String, NetworkInterface>(),
             (map, result) {
-          var type = new InternetAddressType._from(result[0]);
+          var type = InternetAddressType._from(result[0]);
           var name = result[3];
           var index = result[4];
-          var address = new _InternetAddress(result[1], "", result[2]);
+          var address = _InternetAddress(type, result[1], "", result[2]);
           if (!includeLinkLocal && address.isLinkLocal) return map;
           if (!includeLoopback && address.isLoopback) return map;
           map.putIfAbsent(name, () => new _NetworkInterface(name, index));
@@ -505,12 +568,23 @@
         socket.localAddress = address;
         var result;
         if (sourceAddress == null) {
-          result = socket.nativeCreateConnect(
-              address._in_addr, port, address._scope_id);
+          if (address.type == InternetAddressType.unix) {
+            result = socket.nativeCreateUnixDomainConnect(
+                address.address, _Namespace._namespace);
+          } else {
+            result = socket.nativeCreateConnect(
+                address._in_addr, port, address._scope_id);
+          }
         } else {
           assert(sourceAddress is _InternetAddress);
-          result = socket.nativeCreateBindConnect(address._in_addr, port,
-              sourceAddress._in_addr, address._scope_id);
+          if (address.type == InternetAddressType.unix) {
+            assert(sourceAddress.type == InternetAddressType.unix);
+            result = socket.nativeCreateUnixDomainBindConnect(
+                address.address, sourceAddress.address, _Namespace._namespace);
+          } else {
+            result = socket.nativeCreateBindConnect(address._in_addr, port,
+                sourceAddress._in_addr, address._scope_id);
+          }
         }
         if (result is OSError) {
           // Keep first error, if present.
@@ -641,8 +715,18 @@
 
     var socket = new _NativeSocket.listen();
     socket.localAddress = address;
-    var result = socket.nativeCreateBindListen(
-        address._in_addr, port, backlog, v6Only, shared, address._scope_id);
+    var result;
+    if (address.type == InternetAddressType.unix) {
+      var path = address.address;
+      if (FileSystemEntity.isLinkSync(path)) {
+        path = Link(path).targetSync();
+      }
+      result = socket.nativeCreateUnixDomainBindListen(
+          path, backlog, shared, _Namespace._namespace);
+    } else {
+      result = socket.nativeCreateBindListen(
+          address._in_addr, port, backlog, v6Only, shared, address._scope_id);
+    }
     if (result is OSError) {
       throw new SocketException("Failed to create server socket",
           osError: result, address: address, port: port);
@@ -799,7 +883,7 @@
   static int _fixOffset(int? offset) => offset ?? 0;
 
   int write(List<int> buffer, int offset, int? bytes) {
-    // TODO: Remove once non-nullability is sound.
+    // TODO(40614): Remove once non-nullability is sound.
     offset = _fixOffset(offset);
     if (bytes == null) {
       if (offset > buffer.length) {
@@ -905,12 +989,14 @@
   }
 
   int get port {
+    if (localAddress.type == InternetAddressType.unix) return 0;
     if (localPort != 0) return localPort;
     if (isClosing || isClosed) throw const SocketException.closed();
     return localPort = nativeGetPort();
   }
 
   int get remotePort {
+    if (localAddress.type == InternetAddressType.unix) return 0;
     if (isClosing || isClosed) throw const SocketException.closed();
     return nativeGetRemotePeer()[1];
   }
@@ -922,7 +1008,11 @@
     var result = nativeGetRemotePeer();
     var addr = result[0];
     var type = new InternetAddressType._from(addr[0]);
-    return new _InternetAddress(addr[1], null, addr[2]);
+    if (type == InternetAddressType.unix) {
+      return _InternetAddress.fromString(addr[1],
+          type: InternetAddressType.unix);
+    }
+    return _InternetAddress(type, addr[1], null, addr[2]);
   }
 
   void issueReadEvent() {
@@ -1195,7 +1285,7 @@
   }
 
   dynamic getOption(SocketOption option) {
-    // TODO: Remove once non-nullability is sound.
+    // TODO(40614): Remove once non-nullability is sound.
     ArgumentError.checkNotNull(option, "option");
     var result = nativeGetOption(option._value, address.type._value);
     if (result is OSError) throw result;
@@ -1203,14 +1293,14 @@
   }
 
   bool setOption(SocketOption option, value) {
-    // TODO: Remove once non-nullability is sound.
+    // TODO(40614): Remove once non-nullability is sound.
     ArgumentError.checkNotNull(option, "option");
     nativeSetOption(option._value, address.type._value, value);
     return true;
   }
 
   Uint8List getRawOption(RawSocketOption option) {
-    // TODO: Remove once non-nullability is sound.
+    // TODO(40614): Remove once non-nullability is sound.
     ArgumentError.checkNotNull(option, "option");
     ArgumentError.checkNotNull(option.value, "option.value");
     nativeGetRawOption(option.level, option.option, option.value);
@@ -1218,7 +1308,7 @@
   }
 
   void setRawOption(RawSocketOption option) {
-    // TODO: Remove once non-nullability is sound.
+    // TODO(40614): Remove once non-nullability is sound.
     ArgumentError.checkNotNull(option, "option");
     ArgumentError.checkNotNull(option.value, "option.value");
     nativeSetRawOption(option.level, option.option, option.value);
@@ -1274,11 +1364,17 @@
       int port) native "Socket_SendTo";
   nativeCreateConnect(Uint8List addr, int port, int scope_id)
       native "Socket_CreateConnect";
+  nativeCreateUnixDomainConnect(String addr, _Namespace namespace)
+      native "Socket_CreateUnixDomainConnect";
   nativeCreateBindConnect(Uint8List addr, int port, Uint8List sourceAddr,
       int scope_id) native "Socket_CreateBindConnect";
+  nativeCreateUnixDomainBindConnect(String addr, String sourceAddr,
+      _Namespace namespace) native "Socket_CreateUnixDomainBindConnect";
   bool isBindError(int errorNumber) native "SocketBase_IsBindError";
   nativeCreateBindListen(Uint8List addr, int port, int backlog, bool v6Only,
       bool shared, int scope_id) native "ServerSocket_CreateBindListen";
+  nativeCreateUnixDomainBindListen(String addr, int backlog, bool shared,
+      _Namespace namespace) native "ServerSocket_CreateUnixDomainBindListen";
   nativeCreateBindDatagram(Uint8List addr, int port, bool reuseAddress,
       bool reusePort, int ttl) native "Socket_CreateBindDatagram";
   bool nativeAccept(_NativeSocket socket) native "ServerSocket_Accept";
@@ -2122,6 +2218,9 @@
 
 @pragma("vm:entry-point", "call")
 Datagram _makeDatagram(
-    Uint8List data, String address, Uint8List in_addr, int port) {
-  return new Datagram(data, new _InternetAddress(address, null, in_addr), port);
+    Uint8List data, String address, Uint8List in_addr, int port, int type) {
+  return new Datagram(
+      data,
+      _InternetAddress(InternetAddressType._from(type), address, null, in_addr),
+      port);
 }
diff --git a/sdk_nnbd/lib/_internal/vm/bin/stdio_patch.dart b/sdk_nnbd/lib/_internal/vm/bin/stdio_patch.dart
index d820733..bc32221 100644
--- a/sdk_nnbd/lib/_internal/vm/bin/stdio_patch.dart
+++ b/sdk_nnbd/lib/_internal/vm/bin/stdio_patch.dart
@@ -22,6 +22,7 @@
       case _stdioHandleTypeFile:
         return new Stdin._(new _FileStream.forStdin(), fd);
     }
+    throw new UnsupportedError("Unexpected handle type $type");
   }
 
   @patch
diff --git a/sdk_nnbd/lib/_internal/vm/bin/sync_socket_patch.dart b/sdk_nnbd/lib/_internal/vm/bin/sync_socket_patch.dart
index cf16b88..e2ced70 100644
--- a/sdk_nnbd/lib/_internal/vm/bin/sync_socket_patch.dart
+++ b/sdk_nnbd/lib/_internal/vm/bin/sync_socket_patch.dart
@@ -142,7 +142,12 @@
       throw result;
     }
     var addr = result[0];
-    return new _InternetAddress(addr[1], null, addr[2]);
+    var type = InternetAddressType._from(addr[0]);
+    if (type == InternetAddressType.unix) {
+      return _InternetAddress.fromString(addr[1],
+          type: InternetAddressType.unix);
+    }
+    return _InternetAddress(type, addr[1], null, addr[2]);
   }
 
   int get remotePort {
@@ -184,12 +189,13 @@
     }
     return <_InternetAddress>[
       for (int i = 0; i < response.length; ++i)
-        new _InternetAddress(response[i][1], host, response[i][2]),
+        new _InternetAddress(InternetAddressType._from(response[i][0]),
+            response[i][1], host, response[i][2]),
     ];
   }
 
   int readIntoSync(List<int> buffer, int start, int? end) {
-    // TODO: Remove once non-nullability is sound.
+    // TODO(40614): Remove once non-nullability is sound.
     ArgumentError.checkNotNull(buffer, "buffer");
     ArgumentError.checkNotNull(start, "start");
     _checkAvailable();
@@ -279,7 +285,7 @@
   }
 
   void writeFromSync(List<int> buffer, int start, int? end) {
-    // TODO: Remove once non-nullability is sound.
+    // TODO(40614): Remove once non-nullability is sound.
     ArgumentError.checkNotNull(buffer, "buffer");
     ArgumentError.checkNotNull(start, "start");
     _checkAvailable();
diff --git a/sdk_nnbd/lib/_internal/vm/lib/async_patch.dart b/sdk_nnbd/lib/_internal/vm/lib/async_patch.dart
index 9e180a2..1de3219 100644
--- a/sdk_nnbd/lib/_internal/vm/lib/async_patch.dart
+++ b/sdk_nnbd/lib/_internal/vm/lib/async_patch.dart
@@ -33,7 +33,8 @@
     }
   }
 
-  void completeError(e, [st]) {
+  void completeError(Object e, [StackTrace? st]) {
+    st ??= AsyncError.defaultStackTrace(e);
     if (isSync) {
       _future._completeError(e, st);
     } else {
@@ -77,7 +78,7 @@
 // parameter to the continuation.  See vm/ast_transformer.cc for usage.
 Function _asyncErrorWrapperHelper(continuation) {
   // See comments of `_asyncThenWrapperHelper`.
-  var errorCallback = (e, s) => continuation(null, e, s);
+  void errorCallback(Object e, StackTrace s) => continuation(null, e, s);
   if (Zone.current == Zone.root) return errorCallback;
   return Zone.current.registerBinaryCallback(errorCallback);
 }
diff --git a/sdk_nnbd/lib/_internal/vm/lib/compact_hash.dart b/sdk_nnbd/lib/_internal/vm/lib/compact_hash.dart
index 7f3984d..64fff0b 100644
--- a/sdk_nnbd/lib/_internal/vm/lib/compact_hash.dart
+++ b/sdk_nnbd/lib/_internal/vm/lib/compact_hash.dart
@@ -471,6 +471,7 @@
 }
 
 // Set implementation, analogous to _CompactLinkedHashMap.
+@pragma('vm:entry-point')
 class _CompactLinkedHashSet<E> extends _HashFieldBase
     with _HashBase, _OperatorEqualsAndHashCode, SetMixin<E>
     implements LinkedHashSet<E> {
diff --git a/sdk_nnbd/lib/_internal/vm/lib/identical_patch.dart b/sdk_nnbd/lib/_internal/vm/lib/identical_patch.dart
index 9847491..4b57430 100644
--- a/sdk_nnbd/lib/_internal/vm/lib/identical_patch.dart
+++ b/sdk_nnbd/lib/_internal/vm/lib/identical_patch.dart
@@ -10,5 +10,4 @@
 
 @patch
 @pragma("vm:entry-point", "call")
-int identityHashCode(Object? object) =>
-    object == null ? null.hashCode : object._identityHashCode;
+int identityHashCode(Object? object) => object._identityHashCode;
diff --git a/sdk_nnbd/lib/_internal/vm/lib/invocation_mirror_patch.dart b/sdk_nnbd/lib/_internal/vm/lib/invocation_mirror_patch.dart
index e4000a4..075e001 100644
--- a/sdk_nnbd/lib/_internal/vm/lib/invocation_mirror_patch.dart
+++ b/sdk_nnbd/lib/_internal/vm/lib/invocation_mirror_patch.dart
@@ -60,7 +60,7 @@
     _namedArguments ??= const {};
   }
 
-  Symbol _setMemberNameAndType() {
+  void _setMemberNameAndType() {
     final funcName = _functionName!;
     if (_type == _UNINITIALIZED) {
       _type = 0;
diff --git a/sdk_nnbd/lib/_internal/vm/lib/mirror_reference.dart b/sdk_nnbd/lib/_internal/vm/lib/mirror_reference.dart
index d203953..0cb1e37 100644
--- a/sdk_nnbd/lib/_internal/vm/lib/mirror_reference.dart
+++ b/sdk_nnbd/lib/_internal/vm/lib/mirror_reference.dart
@@ -10,5 +10,5 @@
     throw "Unreachable";
   }
 
-  bool operator ==(other) native "MirrorReference_equals";
+  bool operator ==(Object other) native "MirrorReference_equals";
 }
diff --git a/sdk_nnbd/lib/async/async_error.dart b/sdk_nnbd/lib/async/async_error.dart
index 17abfed..a7172bd 100644
--- a/sdk_nnbd/lib/async/async_error.dart
+++ b/sdk_nnbd/lib/async/async_error.dart
@@ -5,7 +5,7 @@
 part of dart.async;
 
 _invokeErrorHandler(
-    Function errorHandler, Object error, StackTrace? stackTrace) {
+    Function errorHandler, Object error, StackTrace stackTrace) {
   var handler = errorHandler; // Rename to avoid promotion.
   if (handler is ZoneBinaryCallback<dynamic, Never, Never>) {
     // Dynamic invocation because we don't know the actual type of the
diff --git a/sdk_nnbd/lib/async/broadcast_stream_controller.dart b/sdk_nnbd/lib/async/broadcast_stream_controller.dart
index 9a80aab..3684a7c 100644
--- a/sdk_nnbd/lib/async/broadcast_stream_controller.dart
+++ b/sdk_nnbd/lib/async/broadcast_stream_controller.dart
@@ -23,8 +23,11 @@
   _BroadcastSubscription<T>? _next;
   _BroadcastSubscription<T>? _previous;
 
-  _BroadcastSubscription(_StreamControllerLifecycle<T> controller,
-      void onData(T data)?, Function? onError, void onDone()?,
+  _BroadcastSubscription(
+      _StreamControllerLifecycle<T> controller,
+      void onData(T data)?,
+      Function? onError,
+      void onDone()?,
       bool cancelOnError)
       : super(controller, onData, onError, onDone, cancelOnError) {
     _next = _previous = this;
@@ -255,7 +258,10 @@
     if (replacement != null) {
       error = replacement.error;
       stackTrace = replacement.stackTrace;
+    } else {
+      stackTrace ??= AsyncError.defaultStackTrace(error);
     }
+    if (stackTrace == null) throw "unreachable"; // TODO(40088)
     _sendError(error, stackTrace);
   }
 
@@ -287,7 +293,7 @@
     _sendData(data);
   }
 
-  void _addError(Object error, StackTrace? stackTrace) {
+  void _addError(Object error, StackTrace stackTrace) {
     _sendError(error, stackTrace);
   }
 
@@ -386,7 +392,7 @@
     });
   }
 
-  void _sendError(Object error, StackTrace? stackTrace) {
+  void _sendError(Object error, StackTrace stackTrace) {
     if (_isEmpty) return;
     _forEachListener((_BufferingStreamSubscription<T> subscription) {
       subscription._addError(error, stackTrace);
@@ -419,7 +425,7 @@
     }
   }
 
-  void _sendError(Object error, StackTrace? stackTrace) {
+  void _sendError(Object error, StackTrace stackTrace) {
     for (var subscription = _firstSubscription;
         subscription != null;
         subscription = subscription._next) {
@@ -480,6 +486,7 @@
   void addError(Object error, [StackTrace? stackTrace]) {
     // TODO(40614): Remove once non-nullability is sound.
     ArgumentError.checkNotNull(error, "error");
+    stackTrace ??= AsyncError.defaultStackTrace(error);
     if (!isClosed && _isFiring) {
       _addPendingEvent(new _DelayedError(error, stackTrace));
       return;
diff --git a/sdk_nnbd/lib/async/future.dart b/sdk_nnbd/lib/async/future.dart
index 62aef45..d1273aa 100644
--- a/sdk_nnbd/lib/async/future.dart
+++ b/sdk_nnbd/lib/async/future.dart
@@ -282,6 +282,7 @@
         stackTrace = replacement.stackTrace;
       }
     }
+    stackTrace ??= AsyncError.defaultStackTrace(error);
     return new _Future<T>.immediateError(error, stackTrace);
   }
 
@@ -364,13 +365,13 @@
     final _Future<List<T>> result = new _Future<List<T>>();
     List<T?>? values; // Collects the values. Set to null on error.
     int remaining = 0; // How many futures are we waiting for.
-    Object? error; // The first error from a future.
-    StackTrace? stackTrace; // The stackTrace that came with the error.
+    late Object error; // The first error from a future.
+    late StackTrace stackTrace; // The stackTrace that came with the error.
 
     // Handle an error from any of the futures.
     // TODO(jmesserly): use `void` return type once it can be inferred for the
     // `then` call below.
-    handleError(theError, StackTrace? theStackTrace) {
+    handleError(Object theError, StackTrace theStackTrace) {
       remaining--;
       List<T?>? valueList = values;
       if (valueList != null) {
@@ -393,7 +394,7 @@
           stackTrace = theStackTrace;
         }
       } else if (remaining == 0 && !eagerError) {
-        result._completeError(error!, stackTrace);
+        result._completeError(error, stackTrace);
       }
     }
 
@@ -411,7 +412,7 @@
               result._completeWithValue(List<T>.from(valueList));
             }
           } else {
-            // An error has occurred earlier.
+            // Forced read of error to assert that it has occurred earlier.
             assert(error != null);
             if (cleanUp != null && value != null) {
               // Ensure errors from cleanUp are uncaught.
@@ -420,7 +421,7 @@
               });
             }
             if (remaining == 0 && !eagerError) {
-              result._completeError(error!, stackTrace);
+              result._completeError(error, stackTrace);
             }
           }
         }, onError: handleError);
@@ -470,12 +471,14 @@
    */
   static Future<T> any<T>(Iterable<Future<T>> futures) {
     var completer = new Completer<T>.sync();
-    var onValue = (T value) {
+    void onValue(T value) {
       if (!completer.isCompleted) completer.complete(value);
-    };
-    var onError = (Object error, StackTrace? stack) {
+    }
+
+    void onError(Object error, StackTrace stack) {
       if (!completer.isCompleted) completer.completeError(error, stack);
-    };
+    }
+
     for (var future in futures) {
       future.then(onValue, onError: onError);
     }
@@ -649,7 +652,7 @@
    */
   // The `Function` below stands for one of two types:
   // - (dynamic) -> FutureOr<T>
-  // - (dynamic, StackTrace?) -> FutureOr<T>
+  // - (dynamic, StackTrace) -> FutureOr<T>
   // Given that there is a `test` function that is usually used to do an
   // `isCheck` we should also expect functions that take a specific argument.
   Future<T> catchError(Function onError, {bool test(Object error)?});
@@ -919,14 +922,17 @@
 }
 
 // Helper function completing a _Future with error, but checking the zone
-// for error replacement first.
+// for error replacement and missing stack trace first.
 void _completeWithErrorCallback(
     _Future result, Object error, StackTrace? stackTrace) {
   AsyncError? replacement = Zone.current.errorCallback(error, stackTrace);
   if (replacement != null) {
     error = replacement.error;
     stackTrace = replacement.stackTrace;
+  } else {
+    stackTrace ??= AsyncError.defaultStackTrace(error);
   }
+  if (stackTrace == null) throw "unreachable"; // TODO(40088).
   result._completeError(error, stackTrace);
 }
 
@@ -937,6 +943,11 @@
   if (replacement != null) {
     error = replacement.error;
     stackTrace = replacement.stackTrace;
+  } else {
+    stackTrace ??= AsyncError.defaultStackTrace(error);
+  }
+  if (stackTrace == null) {
+    throw "unreachable"; // TODO(lrn): Remove when type promotion works.
   }
   result._asyncCompleteError(error, stackTrace);
 }
diff --git a/sdk_nnbd/lib/async/future_impl.dart b/sdk_nnbd/lib/async/future_impl.dart
index e469175..b23bfdb0 100644
--- a/sdk_nnbd/lib/async/future_impl.dart
+++ b/sdk_nnbd/lib/async/future_impl.dart
@@ -24,11 +24,14 @@
     if (replacement != null) {
       error = replacement.error;
       stackTrace = replacement.stackTrace;
+    } else {
+      stackTrace ??= AsyncError.defaultStackTrace(error);
     }
+    if (stackTrace == null) throw "unreachable"; // TODO(40088)
     _completeError(error, stackTrace);
   }
 
-  void _completeError(Object error, StackTrace? stackTrace);
+  void _completeError(Object error, StackTrace stackTrace);
 
   // The future's _isComplete doesn't take into account pending completions.
   // We therefore use _mayComplete.
@@ -41,7 +44,7 @@
     future._asyncComplete(value as FutureOr<T>);
   }
 
-  void _completeError(Object error, StackTrace? stackTrace) {
+  void _completeError(Object error, StackTrace stackTrace) {
     future._asyncCompleteError(error, stackTrace);
   }
 }
@@ -52,7 +55,7 @@
     future._complete(value as FutureOr<T>);
   }
 
-  void _completeError(Object error, StackTrace? stackTrace) {
+  void _completeError(Object error, StackTrace stackTrace) {
     future._completeError(error, stackTrace);
   }
 }
@@ -150,8 +153,8 @@
     var errorCallback = this.errorCallback; // To enable promotion.
     // If the errorCallback returns something which is not a FutureOr<T>,
     // this return statement throws, and the caller handles the error.
-    if (errorCallback is dynamic Function(Object, StackTrace?)) {
-      return _zone.runBinary<dynamic, Object, StackTrace?>(
+    if (errorCallback is dynamic Function(Object, StackTrace)) {
+      return _zone.runBinary<dynamic, Object, StackTrace>(
           errorCallback, asyncError.error, asyncError.stackTrace);
     } else {
       return _zone.runUnary<dynamic, Object>(
@@ -229,7 +232,7 @@
     _setValue(value);
   }
 
-  _Future.immediateError(var error, [StackTrace? stackTrace])
+  _Future.immediateError(var error, StackTrace stackTrace)
       : _zone = Zone._current {
     _asyncCompleteError(error, stackTrace);
   }
@@ -353,7 +356,7 @@
     _resultOrListeners = error;
   }
 
-  void _setError(Object error, StackTrace? stackTrace) {
+  void _setError(Object error, StackTrace stackTrace) {
     _setErrorObject(new AsyncError(error, stackTrace));
   }
 
@@ -465,12 +468,7 @@
         // so use _complete instead of _completeWithValue.
         target._clearPendingComplete(); // Clear this first, it's set again.
         target._complete(value);
-      },
-          // TODO(floitsch): eventually we would like to make this non-optional
-          // and dependent on the listeners of the target future. If none of
-          // the target future's listeners want to have the stack trace we don't
-          // need a trace.
-          onError: (Object error, [StackTrace? stackTrace]) {
+      }, onError: (Object error, StackTrace stackTrace) {
         assert(target._isPendingComplete);
         target._completeError(error, stackTrace);
       });
@@ -528,7 +526,7 @@
     _propagateToListeners(this, listeners);
   }
 
-  void _completeError(Object error, [StackTrace? stackTrace]) {
+  void _completeError(Object error, StackTrace stackTrace) {
     assert(!_isComplete);
 
     _FutureListener? listeners = _removeListeners();
@@ -577,7 +575,7 @@
     _chainForeignFuture(value, this);
   }
 
-  void _asyncCompleteError(Object error, StackTrace? stackTrace) {
+  void _asyncCompleteError(Object error, StackTrace stackTrace) {
     assert(!_isComplete);
 
     _setPendingComplete();
@@ -767,7 +765,8 @@
     if (onTimeout == null) {
       timer = new Timer(timeLimit, () {
         result._completeError(
-            new TimeoutException("Future not completed", timeLimit));
+            new TimeoutException("Future not completed", timeLimit),
+            StackTrace.empty);
       });
     } else {
       Zone zone = Zone.current;
@@ -787,7 +786,7 @@
         timer.cancel();
         result._completeWithValue(v);
       }
-    }, onError: (Object e, StackTrace? s) {
+    }, onError: (Object e, StackTrace s) {
       if (timer.isActive) {
         timer.cancel();
         result._completeError(e, s);
diff --git a/sdk_nnbd/lib/async/stream.dart b/sdk_nnbd/lib/async/stream.dart
index c35d8a8..d504a42 100644
--- a/sdk_nnbd/lib/async/stream.dart
+++ b/sdk_nnbd/lib/async/stream.dart
@@ -154,7 +154,7 @@
     // TODO(40614): Remove once non-nullability is sound.
     ArgumentError.checkNotNull(error, "error");
     return (_AsyncStreamController<T>(null, null, null, null)
-          .._addError(error, stackTrace)
+          .._addError(error, stackTrace ?? AsyncError.defaultStackTrace(error))
           .._closeUnchecked())
         .stream;
   }
@@ -203,18 +203,20 @@
     // Declare these as variables holding closures instead of as
     // function declarations.
     // This avoids creating a new closure from the functions for each future.
-    var onValue = (T value) {
+    void onValue(T value) {
       if (!controller.isClosed) {
         controller._add(value);
         if (--count == 0) controller._closeUnchecked();
       }
-    };
-    var onError = (Object error, StackTrace? stack) {
+    }
+
+    void onError(Object error, StackTrace stack) {
       if (!controller.isClosed) {
         controller._addError(error, stack);
         if (--count == 0) controller._closeUnchecked();
       }
-    };
+    }
+
     // The futures are already running, so start listening to them immediately
     // (instead of waiting for the stream to be listened on).
     // If we wait, we might not catch errors in the futures in time.
@@ -411,7 +413,7 @@
    * error object and possibly a stack trace.
    *
    * The [onError] callback must be of type `void onError(Object error)` or
-   * `void onError(Object error, StackTrace? stackTrace)`. If [onError] accepts
+   * `void onError(Object error, StackTrace stackTrace)`. If [onError] accepts
    * two arguments it is called with the error object and the stack trace
    * (which could be `null` if this stream itself received an error without
    * stack trace).
@@ -508,6 +510,7 @@
       }
 
       final addError = controller._addError;
+      final resume = subscription.resume;
       subscription.onData((T event) {
         FutureOr<E> newValue;
         try {
@@ -518,9 +521,7 @@
         }
         if (newValue is Future<E>) {
           subscription.pause();
-          newValue
-              .then(add, onError: addError)
-              .whenComplete(subscription.resume);
+          newValue.then(add, onError: addError).whenComplete(resume);
         } else {
           if (newValue is! E) {
             throw "unreachable"; // TODO(lrn): Remove when type promotion works.
@@ -532,7 +533,7 @@
       if (!isBroadcast) {
         controller
           ..onPause = subscription.pause
-          ..onResume = subscription.resume;
+          ..onResume = resume;
       }
     };
     return controller.stream;
@@ -598,7 +599,7 @@
    * by the [onError] function.
    *
    * The [onError] callback must be of type `void onError(Object error)` or
-   * `void onError(Object error, StackTrace? stackTrace)`.
+   * `void onError(Object error, StackTrace stackTrace)`.
    * The function type determines whether [onError] is invoked with a stack
    * trace argument.
    * The stack trace argument may be `null` if this stream received an error
@@ -1471,7 +1472,8 @@
     subscription =
         this.listen(null, onError: result._completeError, onDone: () {
       result._completeError(
-          new RangeError.index(index, this, "index", null, elementIndex));
+          new RangeError.index(index, this, "index", null, elementIndex),
+          StackTrace.empty);
     }, cancelOnError: true);
     subscription.onData((T value) {
       if (index == elementIndex) {
@@ -1555,7 +1557,7 @@
           // issue: https://github.com/dart-lang/sdk/issues/37565
           controller.add(event);
         })
-        ..onError((Object error, StackTrace? stackTrace) {
+        ..onError((Object error, StackTrace stackTrace) {
           timer.cancel();
           timer = zone.createTimer(timeLimit, timeoutCallback);
           controller._addError(
@@ -2048,8 +2050,7 @@
    */
   factory StreamTransformer.fromHandlers(
       {void handleData(S data, EventSink<T> sink)?,
-      void handleError(
-          Object error, StackTrace? stackTrace, EventSink<T> sink)?,
+      void handleError(Object error, StackTrace stackTrace, EventSink<T> sink)?,
       void handleDone(EventSink<T> sink)?}) = _StreamHandlerTransformer<S, T>;
 
   /**
diff --git a/sdk_nnbd/lib/async/stream_controller.dart b/sdk_nnbd/lib/async/stream_controller.dart
index 3f3f461..8b7d786 100644
--- a/sdk_nnbd/lib/async/stream_controller.dart
+++ b/sdk_nnbd/lib/async/stream_controller.dart
@@ -607,7 +607,10 @@
     if (replacement != null) {
       error = replacement.error;
       stackTrace = replacement.stackTrace;
+    } else {
+      stackTrace ??= AsyncError.defaultStackTrace(error);
     }
+    if (stackTrace == null) throw "unreachable"; // TODO(40088)
     _addError(error, stackTrace);
   }
 
@@ -654,7 +657,7 @@
     }
   }
 
-  void _addError(Object error, StackTrace? stackTrace) {
+  void _addError(Object error, StackTrace stackTrace) {
     if (hasListener) {
       _sendError(error, stackTrace);
     } else if (_isInitialState) {
@@ -780,7 +783,7 @@
     _subscription._add(data);
   }
 
-  void _sendError(Object error, StackTrace? stackTrace) {
+  void _sendError(Object error, StackTrace stackTrace) {
     _subscription._addError(error, stackTrace);
   }
 
@@ -795,7 +798,7 @@
     _subscription._addPending(_DelayedData<T>(data));
   }
 
-  void _sendError(Object error, StackTrace? stackTrace) {
+  void _sendError(Object error, StackTrace stackTrace) {
     _subscription._addPending(_DelayedError(error, stackTrace));
   }
 
@@ -903,7 +906,7 @@
             onDone: controller._close,
             cancelOnError: cancelOnError);
 
-  static makeErrorHandler(_EventSink controller) => (Object e, StackTrace? s) {
+  static makeErrorHandler(_EventSink controller) => (Object e, StackTrace s) {
         controller._addError(e, s);
         controller._close();
       };
diff --git a/sdk_nnbd/lib/async/stream_impl.dart b/sdk_nnbd/lib/async/stream_impl.dart
index a817ac9..4404d78 100644
--- a/sdk_nnbd/lib/async/stream_impl.dart
+++ b/sdk_nnbd/lib/async/stream_impl.dart
@@ -7,7 +7,7 @@
 /** Abstract and private interface for a place to put events. */
 abstract class _EventSink<T> {
   void _add(T data);
-  void _addError(Object error, StackTrace? stackTrace);
+  void _addError(Object error, StackTrace stackTrace);
   void _close();
 }
 
@@ -20,7 +20,7 @@
  */
 abstract class _EventDispatch<T> {
   void _sendData(T data);
-  void _sendError(Object error, StackTrace? stackTrace);
+  void _sendError(Object error, StackTrace stackTrace);
   void _sendDone();
 }
 
@@ -153,9 +153,9 @@
   static Function _registerErrorHandler(Zone zone, Function? handleError) {
     // TODO(lrn): Consider whether we need to register the null handler.
     handleError ??= _nullErrorHandler;
-    if (handleError is void Function(Object, StackTrace?)) {
+    if (handleError is void Function(Object, StackTrace)) {
       return zone
-          .registerBinaryCallback<dynamic, Object, StackTrace?>(handleError);
+          .registerBinaryCallback<dynamic, Object, StackTrace>(handleError);
     }
     if (handleError is void Function(Object)) {
       return zone.registerUnaryCallback<dynamic, Object>(handleError);
@@ -220,7 +220,7 @@
       _onDone = () {
         result._complete(resultValue);
       };
-      _onError = (Object error, StackTrace? stackTrace) {
+      _onError = (Object error, StackTrace stackTrace) {
         Future cancelFuture = cancel();
         if (!identical(cancelFuture, Future._nullFuture)) {
           cancelFuture.whenComplete(() {
@@ -283,7 +283,7 @@
     }
   }
 
-  void _addError(Object error, StackTrace? stackTrace) {
+  void _addError(Object error, StackTrace stackTrace) {
     if (_isCanceled) return;
     if (_canFire) {
       _sendError(error, stackTrace); // Reports cancel after sending.
@@ -352,7 +352,7 @@
     _checkState(wasInputPaused);
   }
 
-  void _sendError(Object error, StackTrace? stackTrace) {
+  void _sendError(Object error, StackTrace stackTrace) {
     assert(!_isCanceled);
     assert(!_isPaused);
     assert(!_inCallback);
@@ -365,8 +365,8 @@
       _state |= _STATE_IN_CALLBACK;
       // TODO(floitsch): this dynamic should be 'void'.
       var onError = _onError;
-      if (onError is void Function(Object, StackTrace?)) {
-        _zone.runBinaryGuarded<Object, StackTrace?>(onError, error, stackTrace);
+      if (onError is void Function(Object, StackTrace)) {
+        _zone.runBinaryGuarded<Object, StackTrace>(onError, error, stackTrace);
       } else {
         _zone.runUnaryGuarded<Object>(_onError as void Function(Object), error);
       }
@@ -581,7 +581,7 @@
 void _nullDataHandler(dynamic value) {}
 
 /** Default error handler, reports the error to the current zone's handler. */
-void _nullErrorHandler(Object error, [StackTrace? stackTrace]) {
+void _nullErrorHandler(Object error, StackTrace stackTrace) {
   Zone.current.handleUncaughtError(error, stackTrace);
 }
 
@@ -608,7 +608,7 @@
 /** A delayed error event. */
 class _DelayedError extends _DelayedEvent {
   final Object error;
-  final StackTrace? stackTrace;
+  final StackTrace stackTrace;
 
   _DelayedError(this.error, this.stackTrace);
   void perform(_EventDispatch dispatch) {
@@ -990,8 +990,7 @@
   /// completed.
   bool _isPaused = false;
 
-  _StreamIterator(final Stream<T> stream)
-      : _stateData = stream {
+  _StreamIterator(final Stream<T> stream) : _stateData = stream {
     ArgumentError.checkNotNull(stream, "stream");
   }
 
@@ -1060,7 +1059,7 @@
     if (_isPaused) _subscription?.pause();
   }
 
-  void _onError(Object error, [StackTrace? stackTrace]) {
+  void _onError(Object error, StackTrace stackTrace) {
     assert(_subscription != null && !_isPaused);
     var moveNextFuture = _stateData as _Future<bool>;
     _subscription = null;
diff --git a/sdk_nnbd/lib/async/stream_pipe.dart b/sdk_nnbd/lib/async/stream_pipe.dart
index b307ed6..fd20228 100644
--- a/sdk_nnbd/lib/async/stream_pipe.dart
+++ b/sdk_nnbd/lib/async/stream_pipe.dart
@@ -5,8 +5,8 @@
 part of dart.async;
 
 /** Runs user code and takes actions depending on success or failure. */
-_runUserCode<T>(
-    T userCode(), onSuccess(T value), onError(Object error, StackTrace? stackTrace)) {
+_runUserCode<T>(T userCode(), onSuccess(T value),
+    onError(Object error, StackTrace stackTrace)) {
   try {
     onSuccess(userCode());
   } catch (e, s) {
@@ -24,7 +24,7 @@
 /** Helper function to cancel a subscription and wait for the potential future,
   before completing with an error. */
 void _cancelAndError(StreamSubscription subscription, _Future future,
-    Object error, StackTrace? stackTrace) {
+    Object error, StackTrace stackTrace) {
   var cancelFuture = subscription.cancel();
   if (cancelFuture != null && !identical(cancelFuture, Future._nullFuture)) {
     cancelFuture.whenComplete(() => future._completeError(error, stackTrace));
@@ -34,7 +34,7 @@
 }
 
 void _cancelAndErrorWithReplacement(StreamSubscription subscription,
-    _Future future, Object error, StackTrace? stackTrace) {
+    _Future future, Object error, StackTrace stackTrace) {
   AsyncError? replacement = Zone.current.errorCallback(error, stackTrace);
   if (replacement != null) {
     error = replacement.error;
@@ -43,12 +43,10 @@
   _cancelAndError(subscription, future, error, stackTrace);
 }
 
-typedef void _ErrorCallback(Object error, StackTrace? stackTrace);
-
 /** Helper function to make an onError argument to [_runUserCode]. */
-_ErrorCallback _cancelAndErrorClosure(
+void Function(Object error, StackTrace stackTrace) _cancelAndErrorClosure(
     StreamSubscription subscription, _Future future) {
-  return (Object error, StackTrace? stackTrace) {
+  return (Object error, StackTrace stackTrace) {
     _cancelAndError(subscription, future, error, stackTrace);
   };
 }
@@ -95,7 +93,7 @@
 
   void _handleData(S data, _EventSink<T> sink);
 
-  void _handleError(Object error, StackTrace? stackTrace, _EventSink<T> sink) {
+  void _handleError(Object error, StackTrace stackTrace, _EventSink<T> sink) {
     sink._addError(error, stackTrace);
   }
 
@@ -129,7 +127,7 @@
     super._add(data);
   }
 
-  void _addError(Object error, StackTrace? stackTrace) {
+  void _addError(Object error, StackTrace stackTrace) {
     if (_isClosed) return;
     super._addError(error, stackTrace);
   }
@@ -159,7 +157,7 @@
     _stream._handleData(data, this);
   }
 
-  void _handleError(error, StackTrace? stackTrace) {
+  void _handleError(error, StackTrace stackTrace) {
     _stream._handleError(error, stackTrace, this);
   }
 
@@ -173,7 +171,7 @@
 // -------------------------------------------------------------------
 
 void _addErrorWithReplacement(
-    _EventSink sink, Object error, StackTrace? stackTrace) {
+    _EventSink sink, Object error, StackTrace stackTrace) {
   AsyncError? replacement = Zone.current.errorCallback(error, stackTrace);
   if (replacement != null) {
     error = replacement.error;
@@ -268,7 +266,7 @@
     sink._add(data);
   }
 
-  void _handleError(Object error, StackTrace? stackTrace, _EventSink<T> sink) {
+  void _handleError(Object error, StackTrace stackTrace, _EventSink<T> sink) {
     bool matches = true;
     var test = _test;
     if (test != null) {
diff --git a/sdk_nnbd/lib/async/stream_transformers.dart b/sdk_nnbd/lib/async/stream_transformers.dart
index b445d66..ca7934c 100644
--- a/sdk_nnbd/lib/async/stream_transformers.dart
+++ b/sdk_nnbd/lib/async/stream_transformers.dart
@@ -16,7 +16,7 @@
   }
 
   void addError(Object error, [StackTrace? stackTrace]) {
-    _sink._addError(error, stackTrace);
+    _sink._addError(error, stackTrace ?? AsyncError.defaultStackTrace(error));
   }
 
   void close() {
@@ -76,7 +76,7 @@
    * events when the stream is already closed. Report them as state
    * error.
    */
-  void _addError(Object error, StackTrace? stackTrace) {
+  void _addError(Object error, StackTrace stackTrace) {
     if (_isClosed) {
       throw new StateError("Stream is already closed");
     }
@@ -124,7 +124,7 @@
     }
   }
 
-  void _handleError(Object error, StackTrace? stackTrace) {
+  void _handleError(Object error, StackTrace stackTrace) {
     try {
       _transformerSink.addError(error, stackTrace);
     } catch (e, s) {
@@ -193,7 +193,7 @@
 
 /// Error-handler coming from [StreamTransformer.fromHandlers].
 typedef void _TransformErrorHandler<T>(
-    Object error, StackTrace? stackTrace, EventSink<T> sink);
+    Object error, StackTrace stackTrace, EventSink<T> sink);
 
 /// Done-handler coming from [StreamTransformer.fromHandlers].
 typedef void _TransformDoneHandler<T>(EventSink<T> sink);
@@ -236,6 +236,7 @@
       throw StateError("Sink is closed");
     }
     var handleError = _handleError;
+    stackTrace ??= AsyncError.defaultStackTrace(error);
     if (handleError != null) {
       handleError(error, stackTrace, sink);
     } else {
@@ -264,8 +265,7 @@
 class _StreamHandlerTransformer<S, T> extends _StreamSinkTransformer<S, T> {
   _StreamHandlerTransformer(
       {void handleData(S data, EventSink<T> sink)?,
-      void handleError(
-          Object error, StackTrace? stackTrace, EventSink<T> sink)?,
+      void handleError(Object error, StackTrace stackTrace, EventSink<T> sink)?,
       void handleDone(EventSink<T> sink)?})
       : super((EventSink<T> outputSink) {
           return new _HandlerEventSink<S, T>(
diff --git a/sdk_nnbd/lib/async/zone.dart b/sdk_nnbd/lib/async/zone.dart
index 2fc47b8..53ad166 100644
--- a/sdk_nnbd/lib/async/zone.dart
+++ b/sdk_nnbd/lib/async/zone.dart
@@ -9,7 +9,7 @@
 typedef R ZoneBinaryCallback<R, T1, T2>(T1 arg1, T2 arg2);
 
 typedef HandleUncaughtErrorHandler = void Function(Zone self,
-    ZoneDelegate parent, Zone zone, Object error, StackTrace? stackTrace);
+    ZoneDelegate parent, Zone zone, Object error, StackTrace stackTrace);
 typedef RunHandler = R Function<R>(
     Zone self, ZoneDelegate parent, Zone zone, R Function() f);
 typedef RunUnaryHandler = R Function<R, T>(
@@ -39,13 +39,27 @@
 /** Pair of error and stack trace. Returned by [Zone.errorCallback]. */
 class AsyncError implements Error {
   final Object error;
-  final StackTrace? stackTrace;
+  final StackTrace stackTrace;
 
-  AsyncError(this.error, this.stackTrace) {
+  AsyncError(this.error, StackTrace? stackTrace)
+      : stackTrace = stackTrace ?? defaultStackTrace(error) {
     // TODO(40614): Remove once non-nullability is sound.
     ArgumentError.checkNotNull(error, "error");
   }
 
+  /// A default stack trace for an error.
+  ///
+  /// If [error] is an [Error] and it has an [Error.stackTrace],
+  /// that stack trace is returned.
+  /// If not, the [StackTrace.empty] default stack trace is returned.
+  static StackTrace defaultStackTrace(Object error) {
+    if (error is Error) {
+      var stackTrace = error.stackTrace;
+      if (stackTrace != null) return stackTrace;
+    }
+    return StackTrace.empty;
+  }
+
   String toString() => '$error';
 }
 
@@ -205,7 +219,7 @@
  *   to skip zones that would just delegate to their parents.
  */
 abstract class ZoneDelegate {
-  void handleUncaughtError(Zone zone, Object error, StackTrace? stackTrace);
+  void handleUncaughtError(Zone zone, Object error, StackTrace stackTrace);
   R run<R>(Zone zone, R f());
   R runUnary<R, T>(Zone zone, R f(T arg), T arg);
   R runBinary<R, T1, T2>(Zone zone, R f(T1 arg1, T2 arg2), T1 arg1, T2 arg2);
@@ -312,7 +326,7 @@
    * By default, when handled by the root zone, uncaught asynchronous errors are
    * treated like uncaught synchronous exceptions.
    */
-  void handleUncaughtError(Object error, StackTrace? stackTrace);
+  void handleUncaughtError(Object error, StackTrace stackTrace);
 
   /**
    * The parent zone of the this zone.
@@ -694,7 +708,7 @@
 
   _ZoneDelegate(this._delegationTarget);
 
-  void handleUncaughtError(Zone zone, Object error, StackTrace? stackTrace) {
+  void handleUncaughtError(Zone zone, Object error, StackTrace stackTrace) {
     var implementation = _delegationTarget._handleUncaughtError;
     _Zone implZone = implementation.zone;
     HandleUncaughtErrorHandler handler = implementation.function;
@@ -1019,7 +1033,7 @@
 
   // Methods that can be customized by the zone specification.
 
-  void handleUncaughtError(Object error, StackTrace? stackTrace) {
+  void handleUncaughtError(Object error, StackTrace stackTrace) {
     var implementation = this._handleUncaughtError;
     ZoneDelegate parentDelegate = implementation.zone._parentDelegate;
     HandleUncaughtErrorHandler handler = implementation.function;
@@ -1120,14 +1134,13 @@
 }
 
 void _rootHandleUncaughtError(Zone? self, ZoneDelegate? parent, Zone zone,
-    Object error, StackTrace? stackTrace) {
+    Object error, StackTrace stackTrace) {
   _schedulePriorityAsyncCallback(() {
-    if (stackTrace == null) throw error;
     _rethrow(error, stackTrace);
   });
 }
 
-external void _rethrow(Object error, StackTrace? stackTrace);
+external void _rethrow(Object error, StackTrace stackTrace);
 
 R _rootRun<R>(Zone? self, ZoneDelegate? parent, Zone zone, R f()) {
   if (identical(Zone._current, zone)) return f();
@@ -1383,7 +1396,7 @@
 
   // Methods that can be customized by the zone specification.
 
-  void handleUncaughtError(Object error, StackTrace? stackTrace) {
+  void handleUncaughtError(Object error, StackTrace stackTrace) {
     _rootHandleUncaughtError(null, null, this, error, stackTrace);
   }
 
@@ -1487,8 +1500,8 @@
     return _runZoned<R>(body, zoneValues, zoneSpecification);
   }
   void Function(Object)? unaryOnError;
-  void Function(Object, StackTrace?)? binaryOnError;
-  if (onError is void Function(Object, StackTrace?)) {
+  void Function(Object, StackTrace)? binaryOnError;
+  if (onError is void Function(Object, StackTrace)) {
     binaryOnError = onError;
   } else if (onError is void Function(Object)) {
     unaryOnError = onError;
@@ -1498,7 +1511,7 @@
   }
   _Zone parentZone = Zone._current;
   HandleUncaughtErrorHandler errorHandler = (Zone self, ZoneDelegate parent,
-      Zone zone, Object error, StackTrace? stackTrace) {
+      Zone zone, Object error, StackTrace stackTrace) {
     try {
       if (binaryOnError != null) {
         parentZone.runBinary(binaryOnError, error, stackTrace);
diff --git a/sdk_nnbd/lib/collection/list.dart b/sdk_nnbd/lib/collection/list.dart
index a47ca1b..94124c5 100644
--- a/sdk_nnbd/lib/collection/list.dart
+++ b/sdk_nnbd/lib/collection/list.dart
@@ -358,12 +358,7 @@
     return ListMapView<E>(this);
   }
 
-  List<E> operator +(List<E> other) {
-    var result = <E>[]..length = (this.length + other.length);
-    result.setRange(0, this.length, this);
-    result.setRange(this.length, result.length, other);
-    return result;
-  }
+  List<E> operator +(List<E> other) => [...this, ...other];
 
   List<E> sublist(int start, [int? end]) {
     int listLength = this.length;
diff --git a/sdk_nnbd/lib/collection/splay_tree.dart b/sdk_nnbd/lib/collection/splay_tree.dart
index 6eda337..b81a034 100644
--- a/sdk_nnbd/lib/collection/splay_tree.dart
+++ b/sdk_nnbd/lib/collection/splay_tree.dart
@@ -6,36 +6,38 @@
 
 typedef _Predicate<T> = bool Function(T value);
 
-class _SplayTreeNodeBase<K> {
-  _SplayTreeNode<K>? left;
-  _SplayTreeNode<K>? right;
-}
-
 /// A node in a splay tree. It holds the sorting key and the left
 /// and right children in the tree.
-class _SplayTreeNode<K> extends _SplayTreeNodeBase<K> {
-  final K key;
+class _SplayTreeNode<K> {
+  // The key is nullable to be able to create a dummy node.
+  final K? _key;
 
-  _SplayTreeNode(this.key);
-}
+  _SplayTreeNode<K>? left;
+  _SplayTreeNode<K>? right;
 
-class _DummySplayTreeNode<K> extends _SplayTreeNodeBase<K>
-    implements _SplayTreeNode<K> {
-  K get key => throw UnsupportedError("");
+  _SplayTreeNode(this._key);
+
+  K get key {
+    // TODO(dartbug.com/40892): replace with '_key as K'
+    K? localKey = _key;
+    return (localKey != null) ? localKey : localKey as K;
+  }
 }
 
 /// A node in a splay tree based map.
 ///
 /// A [_SplayTreeNode] that also contains a value
 class _SplayTreeMapNode<K, V> extends _SplayTreeNode<K> {
-  V value;
-  _SplayTreeMapNode(K key, this.value) : super(key);
-}
+  // The value is nullable to be able to create a dummy node.
+  V? _value;
 
-class _DummySplayTreeMapNode<K, V> extends _DummySplayTreeNode<K>
-    implements _SplayTreeMapNode<K, V> {
-  V get value => throw UnsupportedError("");
-  set value(V v) => throw UnsupportedError("");
+  _SplayTreeMapNode(K? key, this._value) : super(key);
+
+  V get value {
+    // TODO(dartbug.com/40892): replace with '_value as V'
+    V? localValue = _value;
+    return (localValue != null) ? localValue : localValue as V;
+  }
 }
 
 /// A splay tree is a self-balancing binary search tree.
@@ -264,7 +266,7 @@
 class SplayTreeMap<K, V> extends _SplayTree<K, _SplayTreeMapNode<K, V>>
     with MapMixin<K, V> {
   _SplayTreeMapNode<K, V>? _root;
-  final _SplayTreeMapNode<K, V> _dummy = _DummySplayTreeMapNode<K, V>();
+  final _SplayTreeMapNode<K, V> _dummy = _SplayTreeMapNode<K, V>(null, null);
 
   Comparator<K> _comparator;
   _Predicate _validKey;
@@ -359,7 +361,7 @@
     // the key to the root of the tree.
     int comp = _splay(key);
     if (comp == 0) {
-      _root!.value = value;
+      _root!._value = value;
       return;
     }
     _addNewRoot(_SplayTreeMapNode(key, value), comp);
@@ -652,7 +654,7 @@
 class SplayTreeSet<E> extends _SplayTree<E, _SplayTreeNode<E>>
     with IterableMixin<E>, SetMixin<E> {
   _SplayTreeNode<E>? _root;
-  final _SplayTreeNode<E> _dummy = _DummySplayTreeNode<E>();
+  final _SplayTreeNode<E> _dummy = _SplayTreeNode<E>(null);
 
   Comparator<E> _comparator;
   _Predicate _validKey;
diff --git a/sdk_nnbd/lib/core/errors.dart b/sdk_nnbd/lib/core/errors.dart
index 8a87c8b..005cb84 100644
--- a/sdk_nnbd/lib/core/errors.dart
+++ b/sdk_nnbd/lib/core/errors.dart
@@ -182,10 +182,16 @@
 
   /**
    * Throws if [argument] is `null`.
+   *
+   * If [name] is supplied, it is used as the parameter name
+   * in the error message.
+   *
+   * Returns the [argument] if it is not null.
    */
   @Since("2.1")
-  static void checkNotNull(Object? argument, [String? name]) {
+  static T checkNotNull<@Since("2.8") T>(T? argument, [String? name]) {
     if (argument == null) throw ArgumentError.notNull(name);
+    return argument;
   }
 
   // Helper functions for toString overridden in subclasses.
@@ -274,30 +280,42 @@
       [String? name, String? message, int? length]) = IndexError;
 
   /**
-   * Check that a [value] lies in a specific interval.
+   * Check that an integer [value] lies in a specific interval.
    *
    * Throws if [value] is not in the interval.
    * The interval is from [minValue] to [maxValue], both inclusive.
+   *
+   * If [name] or [message] are provided, they are used as the parameter
+   * name and message text of the thrown error.
+   *
+   * Returns [value] if it is in the interval.
    */
-  static void checkValueInInterval(int value, int minValue, int maxValue,
+  static int checkValueInInterval(int value, int minValue, int maxValue,
       [String? name, String? message]) {
     if (value < minValue || value > maxValue) {
       throw RangeError.range(value, minValue, maxValue, name, message);
     }
+    return value;
   }
 
   /**
-   * Check that a value is a valid index into an indexable object.
+   * Check that [index] is a valid index into an indexable object.
    *
    * Throws if [index] is not a valid index into [indexable].
    *
    * An indexable object is one that has a `length` and a and index-operator
    * `[]` that accepts an index if `0 <= index < length`.
    *
+   * If [name] or [message] are provided, they are used as the parameter
+   * name and message text of the thrown error. If [name] is omitted, it
+   * defaults to `"index"`.
+   *
    * If [length] is provided, it is used as the length of the indexable object,
    * otherwise the length is found as `indexable.length`.
+   *
+   * Returns [index] if it is a valid index.
    */
-  static void checkValidIndex(int index, dynamic indexable,
+  static int checkValidIndex(int index, dynamic indexable,
       [String? name, int? length, String? message]) {
     length ??= (indexable.length as int);
     // Comparing with `0` as receiver produces better dart2js type inference.
@@ -305,6 +323,7 @@
       name ??= "index";
       throw RangeError.index(index, indexable, name, message, length);
     }
+    return index;
   }
 
   /**
@@ -342,12 +361,19 @@
   }
 
   /**
-   * Check that an integer value isn't negative.
+   * Check that an integer value is non-negative.
    *
    * Throws if the value is negative.
+   *
+   * If [name] or [message] are provided, they are used as the parameter
+   * name and message text of the thrown error. If [name] is omitted, it
+   * defaults to `index`.
+   *
+   * Returns [value] if it is not negative.
    */
-  static void checkNotNegative(int value, [String? name, String? message]) {
+  static int checkNotNegative(int value, [String? name, String? message]) {
     if (value < 0) throw RangeError.range(value, 0, null, name, message);
+    return value;
   }
 
   String get _errorName => "RangeError";
diff --git a/sdk_nnbd/lib/core/stacktrace.dart b/sdk_nnbd/lib/core/stacktrace.dart
index 2eb1493..ef08f71 100644
--- a/sdk_nnbd/lib/core/stacktrace.dart
+++ b/sdk_nnbd/lib/core/stacktrace.dart
@@ -14,6 +14,13 @@
  * them programmatically.
  */
 abstract class StackTrace {
+  /// A stack trace object with no information.
+  ///
+  /// This stack trace is used as the default in situations where
+  /// a stack trace is required, but the user has not supplied one.
+  @Since("2.8")
+  static const empty = const _StringStackTrace("");
+
   StackTrace(); // In case existing classes extend StackTrace.
 
   /**
@@ -55,6 +62,6 @@
 
 class _StringStackTrace implements StackTrace {
   final String _stackTrace;
-  _StringStackTrace(this._stackTrace);
+  const _StringStackTrace(this._stackTrace);
   String toString() => _stackTrace;
 }
diff --git a/sdk_nnbd/lib/html/dart2js/html_dart2js.dart b/sdk_nnbd/lib/html/dart2js/html_dart2js.dart
index c16628a..f8ed144 100644
--- a/sdk_nnbd/lib/html/dart2js/html_dart2js.dart
+++ b/sdk_nnbd/lib/html/dart2js/html_dart2js.dart
@@ -13788,6 +13788,14 @@
          if (!(element.attributes instanceof NamedNodeMap)) {
 	   return true;
 	 }
+         // If something has corrupted the traversal we want to detect
+         // these on not only the children (tested below) but on the node itself
+         // in case it was bypassed.
+         if (element["id"] == 'lastChild' || element["name"] == 'lastChild' ||
+             element["id"] == 'previousSibling' || element["name"] == 'previousSibling' ||
+             element["id"] == 'children' || element["name"] == 'children') {
+           return true;
+         }
 	 var childNodes = element.childNodes;
 	 if (element.lastChild &&
 	     element.lastChild !== childNodes[childNodes.length -1]) {
@@ -13813,6 +13821,7 @@
            // allowing us to check for clobbering that may show up in other accesses.
            if (child["id"] == 'attributes' || child["name"] == 'attributes' ||
                child["id"] == 'lastChild'  || child["name"] == 'lastChild' ||
+               child["id"] == 'previousSibling'  || child["name"] == 'previousSibling' ||
                child["id"] == 'children' || child["name"] == 'children') {
              return true;
            }
@@ -40830,6 +40839,9 @@
  */
 class _ValidatingTreeSanitizer implements NodeTreeSanitizer {
   NodeValidator validator;
+
+  /// Did we modify the tree by removing anything.
+  bool modifiedTree = false;
   _ValidatingTreeSanitizer(this.validator) {}
 
   void sanitizeTree(Node node) {
@@ -40838,11 +40850,15 @@
 
       var child = node.lastChild;
       while (null != child) {
-        var nextChild;
+        Node? nextChild;
         try {
-          // Child may be removed during the walk, and we may not
-          // even be able to get its previousNode.
+          // Child may be removed during the walk, and we may not even be able
+          // to get its previousNode. But it's also possible that previousNode
+          // (i.e. previousSibling) is being spoofed, so double-check it.
           nextChild = child.previousNode;
+          if (nextChild != null && nextChild.nextNode != child) {
+            throw StateError("Corrupt HTML");
+          }
         } catch (e) {
           // Child appears bad, remove it. We want to check the rest of the
           // children of node and, but we have no way of getting to the next
@@ -40856,7 +40872,12 @@
       }
     }
 
+    modifiedTree = false;
     walk(node, null);
+    while (modifiedTree) {
+      modifiedTree = false;
+      walk(node, null);
+    }
   }
 
   /// Aggressively try to remove node.
@@ -40864,7 +40885,8 @@
     // If we have the parent, it's presumably already passed more sanitization
     // or is the fragment, so ask it to remove the child. And if that fails
     // try to set the outer html.
-    if (parent == null) {
+    modifiedTree = true;
+    if (parent == null || parent != node.parentNode) {
       node.remove();
     } else {
       parent._removeChild(node);
diff --git a/sdk_nnbd/lib/internal/async_cast.dart b/sdk_nnbd/lib/internal/async_cast.dart
index 677f303..306ada8 100644
--- a/sdk_nnbd/lib/internal/async_cast.dart
+++ b/sdk_nnbd/lib/internal/async_cast.dart
@@ -50,9 +50,9 @@
     _source.onError(handleError);
     if (handleError == null) {
       _handleError = null;
-    } else if (handleError is void Function(Object, StackTrace?)) {
+    } else if (handleError is void Function(Object, StackTrace)) {
       _handleError = _zone
-          .registerBinaryCallback<dynamic, Object, StackTrace?>(handleError);
+          .registerBinaryCallback<dynamic, Object, StackTrace>(handleError);
     } else if (handleError is void Function(Object)) {
       _handleError = _zone.registerUnaryCallback<dynamic, Object>(handleError);
     } else {
@@ -74,8 +74,8 @@
       var handleError = _handleError;
       if (handleError == null) {
         _zone.handleUncaughtError(error, stack);
-      } else if (handleError is void Function(Object, StackTrace?)) {
-        _zone.runBinaryGuarded<Object, StackTrace?>(handleError, error, stack);
+      } else if (handleError is void Function(Object, StackTrace)) {
+        _zone.runBinaryGuarded<Object, StackTrace>(handleError, error, stack);
       } else {
         _zone.runUnaryGuarded<Object>(
             handleError as void Function(Object), error);
diff --git a/sdk_nnbd/lib/io/common.dart b/sdk_nnbd/lib/io/common.dart
index f8fda15..e6a56bc 100644
--- a/sdk_nnbd/lib/io/common.dart
+++ b/sdk_nnbd/lib/io/common.dart
@@ -105,7 +105,7 @@
   int j = start;
   for (int i = 0; i < length; i++) {
     int value = buffer[j];
-    // TODO: Remove once non-nullability is sound.
+    // TODO(40614): Remove once non-nullability is sound.
     ArgumentError.checkNotNull(value, "buffer[]");
     newBuffer[i] = value;
     j++;
diff --git a/sdk_nnbd/lib/io/data_transformer.dart b/sdk_nnbd/lib/io/data_transformer.dart
index 81fe195..4346a1a 100644
--- a/sdk_nnbd/lib/io/data_transformer.dart
+++ b/sdk_nnbd/lib/io/data_transformer.dart
@@ -598,7 +598,7 @@
   }
 
   void addSlice(List<int> data, int start, int end, bool isLast) {
-    // TODO: Remove once non-nullability is sound.
+    // TODO(40614): Remove once non-nullability is sound.
     ArgumentError.checkNotNull(end, "end");
     if (_closed) return;
     RangeError.checkValidRange(start, end, data.length);
diff --git a/sdk_nnbd/lib/io/directory_impl.dart b/sdk_nnbd/lib/io/directory_impl.dart
index 06777e7..9ca5b6c 100644
--- a/sdk_nnbd/lib/io/directory_impl.dart
+++ b/sdk_nnbd/lib/io/directory_impl.dart
@@ -213,7 +213,7 @@
   }
 
   Directory renameSync(String newPath) {
-    // TODO: Remove once non-nullability is sound.
+    // TODO(40614): Remove once non-nullability is sound.
     ArgumentError.checkNotNull(newPath, "newPath");
     var result = _rename(_Namespace._namespace, _rawPath, newPath);
     if (result is OSError) {
@@ -236,7 +236,7 @@
 
   List<FileSystemEntity> listSync(
       {bool recursive: false, bool followLinks: true}) {
-    // TODO: Remove once non-nullability is sound.
+    // TODO(40614): Remove once non-nullability is sound.
     ArgumentError.checkNotNull(recursive, "recursive");
     ArgumentError.checkNotNull(followLinks, "followLinks");
     var result = <FileSystemEntity>[];
diff --git a/sdk_nnbd/lib/io/file_system_entity.dart b/sdk_nnbd/lib/io/file_system_entity.dart
index 737d673..0741583 100644
--- a/sdk_nnbd/lib/io/file_system_entity.dart
+++ b/sdk_nnbd/lib/io/file_system_entity.dart
@@ -825,7 +825,7 @@
 
   // TODO(bkonyi): find a way to do this with raw paths.
   static String _trimTrailingPathSeparators(String path) {
-    // TODO: Remove once non-nullability is sound.
+    // TODO(40614): Remove once non-nullability is sound.
     ArgumentError.checkNotNull(path, "path");
     if (Platform.isWindows) {
       while (path.length > 1 &&
diff --git a/sdk_nnbd/lib/io/io_sink.dart b/sdk_nnbd/lib/io/io_sink.dart
index 38296b8..d4a3ec8 100644
--- a/sdk_nnbd/lib/io/io_sink.dart
+++ b/sdk_nnbd/lib/io/io_sink.dart
@@ -31,7 +31,8 @@
    * The [Encoding] used when writing strings. Depending on the
    * underlying consumer this property might be mutable.
    */
-  Encoding encoding;
+  Encoding get encoding;
+  void set encoding(Encoding newEncoding);
 
   /**
    * Adds byte [data] to the target consumer, ignoring [encoding].
diff --git a/sdk_nnbd/lib/io/secure_socket.dart b/sdk_nnbd/lib/io/secure_socket.dart
index 857d8b2..fef9d16 100644
--- a/sdk_nnbd/lib/io/secure_socket.dart
+++ b/sdk_nnbd/lib/io/secure_socket.dart
@@ -581,12 +581,12 @@
     if (host is! String && host is! InternetAddress) {
       throw new ArgumentError("host is not a String or an InternetAddress");
     }
-    // TODO: Remove once non-nullability is sound.
+    // TODO(40614): Remove once non-nullability is sound.
     ArgumentError.checkNotNull(requestedPort, "requestedPort");
     if (requestedPort < 0 || requestedPort > 65535) {
       throw ArgumentError("requestedPort is not in the range 0..65535");
     }
-    // TODO: Remove once non-nullability is sound.
+    // TODO(40614): Remove once non-nullability is sound.
     ArgumentError.checkNotNull(
         requestClientCertificate, "requestClientCertificate");
     ArgumentError.checkNotNull(
@@ -698,7 +698,7 @@
       throw new ArgumentError(
           "Invalid bytes parameter in SecureSocket.read (bytes: $bytes)");
     }
-    // TODO: Remove once non-nullability is sound.
+    // TODO(40614): Remove once non-nullability is sound.
     offset = _fixOffset(offset);
     if (offset < 0) {
       throw new ArgumentError(
diff --git a/sdk_nnbd/lib/io/socket.dart b/sdk_nnbd/lib/io/socket.dart
index dc92d8b..bf1e209 100644
--- a/sdk_nnbd/lib/io/socket.dart
+++ b/sdk_nnbd/lib/io/socket.dart
@@ -6,11 +6,15 @@
 
 /**
  * [InternetAddressType] is the type an [InternetAddress]. Currently,
- * IP version 4 (IPv4) and IP version 6 (IPv6) are supported.
+ * IP version 4 (IPv4), IP version 6 (IPv6) and Unix domain address are
+ * supported. Unix domain sockets are available only on Linux, MacOS and
+ * Android.
  */
 class InternetAddressType {
   static const InternetAddressType IPv4 = const InternetAddressType._(0);
   static const InternetAddressType IPv6 = const InternetAddressType._(1);
+  @Since("2.8")
+  static const InternetAddressType unix = const InternetAddressType._(2);
   static const InternetAddressType any = const InternetAddressType._(-1);
 
   @Deprecated("Use IPv4 instead")
@@ -25,8 +29,9 @@
   const InternetAddressType._(this._value);
 
   factory InternetAddressType._from(int value) {
-    if (value == 0) return IPv4;
-    if (value == 1) return IPv6;
+    if (value == IPv4._value) return IPv4;
+    if (value == IPv6._value) return IPv6;
+    if (value == unix._value) return unix;
     throw new ArgumentError("Invalid type: $value");
   }
 
@@ -41,6 +46,8 @@
         return "IPv4";
       case 1:
         return "IPv6";
+      case 2:
+        return "Unix";
       default:
         throw new ArgumentError("Invalid InternetAddress");
     }
@@ -50,7 +57,7 @@
 }
 
 /**
- * An internet address.
+ * An internet address or a Unix domain address.
  *
  * This object holds an internet address. If this internet address
  * is the result of a DNS lookup, the address also holds the hostname
@@ -93,27 +100,35 @@
   external static InternetAddress get ANY_IP_V6;
 
   /**
-   * The [type] of the [InternetAddress] specified what IP protocol.
+   * The address family of the [InternetAddress].
    */
   InternetAddressType get type;
 
   /**
-   * The numeric address of the host. For IPv4 addresses this is using
-   * the dotted-decimal notation. For IPv6 it is using the
-   * hexadecimal representation.
+   * The numeric address of the host.
+   *
+   * For IPv4 addresses this is using the dotted-decimal notation.
+   * For IPv6 it is using the hexadecimal representation.
+   * For Unix domain addresses, this is a file path.
    */
   String get address;
 
   /**
-   * The host used to lookup the address. If there is no host
-   * associated with the address this returns the numeric address.
+   * The host used to lookup the address.
+   *
+   * If there is no host associated with the address this returns the [address].
    */
   String get host;
 
   /**
-   * Get the raw address of this [InternetAddress]. The result is either a
-   * 4 or 16 byte long list. The returned list is a copy, making it possible
-   * to change the list without modifying the [InternetAddress].
+   * The raw address of this [InternetAddress].
+   *
+   * For an IP address, the result is either a 4 or 16 byte long list.
+   * For a Unix domain address, UTF-8 encoded byte sequences that represents
+   * [address] is returned.
+   *
+   * The returned list is a fresh copy, making it possible to change the list without
+   * modifying the [InternetAddress].
    */
   Uint8List get rawAddress;
 
@@ -133,17 +148,48 @@
   bool get isMulticast;
 
   /**
-   * Creates a new [InternetAddress] from a numeric address.
+   * Creates a new [InternetAddress] from a numeric address or a file path.
    *
-   * If the address in [address] is not a numeric IPv4
-   * (dotted-decimal notation) or IPv6 (hexadecimal representation).
-   * address [ArgumentError] is thrown.
+   * If [type] is [InternetAddressType.IPv4], [address] must be a numeric IPv4
+   * address (dotted-decimal notation).
+   * If [type] is [InternetAddressType.IPv6], [address] must be a numeric IPv6
+   * address (hexadecimal notation).
+   * If [type] is [InternetAddressType.unix], [address] must be a a valid file
+   * path.
+   * If [type] is omitted, [address] must be either a numeric IPv4 or IPv6
+   * address and the type is inferred from the format.
+   *
+   * To create a Unix domain address, [type] should be
+   * [InternetAddressType.unix] and [address] should be a string.
    */
-  external factory InternetAddress(String address);
+  external factory InternetAddress(String address,
+      {@Since("2.8") InternetAddressType? type});
 
   /**
-   * Perform a reverse dns lookup on the [address], creating a new
-   * [InternetAddress] where the host field set to the result.
+   * Creates a new [InternetAddress] from the provided raw address bytes.
+   *
+   * If the [type] is [InternetAddressType.IPv4], the [rawAddress] must have
+   * length 4.
+   * If the [type] is [InternetAddressType.IPv6], the [rawAddress] must have
+   * length 16.
+   * If the [type] is [InternetAddressType.IPv4], the [rawAddress] must be a
+   * valid UTF-8 encoded file path.
+   *
+   * If [type] is omitted, the [rawAddress] must have a length of either 4 or
+   * 16, in which case the type defaults to [InternetAddress.IPv4] or
+   * [InternetAddress.IPv6] respectively.
+   */
+  external factory InternetAddress.fromRawAddress(Uint8List rawAddress,
+      {@Since("2.8") InternetAddressType? type});
+
+  /**
+   * Perform a reverse DNS lookup on this [address]
+   *
+   * Returns a new [InternetAddress] with the same address, but where the [host]
+   * field set to the result of the lookup.
+   *
+   * If this address is Unix domain addresses, no lookup is performed and this
+   * address is returned directly.
    */
   Future<InternetAddress> reverse();
 
@@ -817,28 +863,30 @@
   void setRawOption(RawSocketOption option);
 
   /**
-   * Returns the port used by this socket.
+   * The port used by this socket.
    *
    * Throws a [SocketException] if the socket is closed.
+   * The port is 0 if the socket is a Unix domain socket.
    */
   int get port;
 
   /**
-   * Returns the remote port connected to by this socket.
+   * The remote port connected to by this socket.
    *
    * Throws a [SocketException] if the socket is closed.
+   * The port is 0 if the socket is a Unix domain socket.
    */
   int get remotePort;
 
   /**
-   * Returns the [InternetAddress] used to connect this socket.
+   * The [InternetAddress] used to connect this socket.
    *
    * Throws a [SocketException] if the socket is closed.
    */
   InternetAddress get address;
 
   /**
-   * Returns the remote [InternetAddress] connected to by this socket.
+   * The remote [InternetAddress] connected to by this socket.
    *
    * Throws a [SocketException] if the socket is closed.
    */
diff --git a/sdk_nnbd/lib/mirrors/mirrors.dart b/sdk_nnbd/lib/mirrors/mirrors.dart
index baec2f4..95a8aff 100644
--- a/sdk_nnbd/lib/mirrors/mirrors.dart
+++ b/sdk_nnbd/lib/mirrors/mirrors.dart
@@ -226,7 +226,7 @@
    * 2. the isolate being reflected by this mirror is the same isolate being
    *    reflected by [other].
    */
-  bool operator ==(other);
+  bool operator ==(Object other);
 
   /**
    * Loads the library at the given uri into this isolate.
@@ -545,7 +545,7 @@
    *    b. the remote objects reflected by this mirror and by [other] are
    *    identical.
    */
-  bool operator ==(other);
+  bool operator ==(Object other);
 }
 
 /**
@@ -630,7 +630,7 @@
    * 2. The library being reflected by this mirror and the library being
    *    reflected by [other] are the same library in the same isolate.
    */
-  bool operator ==(other);
+  bool operator ==(Object other);
 
   /**
    * Returns a list of the imports and exports in this library;
@@ -888,7 +888,7 @@
    * Note that if the reflected class is an invocation of a generic class, 2.
    * implies that the reflected class and [other] have equal type arguments.
    */
-  bool operator ==(other);
+  bool operator ==(Object other);
 
   /**
    * Returns whether the class denoted by the receiver is a subclass of the
@@ -948,7 +948,7 @@
    * 1. [other] is a mirror of the same kind, and
    * 2. [:simpleName == other.simpleName:] and [:owner == other.owner:].
    */
-  bool operator ==(other);
+  bool operator ==(Object other);
 }
 
 /**
@@ -1081,7 +1081,7 @@
    * 1. [other] is a mirror of the same kind, and
    * 2. [:simpleName == other.simpleName:] and [:owner == other.owner:].
    */
-  bool operator ==(other);
+  bool operator ==(Object other);
 }
 
 /**
@@ -1127,7 +1127,7 @@
    * 1. [other] is a mirror of the same kind, and
    * 2. [:simpleName == other.simpleName:] and [:owner == other.owner:].
    */
-  bool operator ==(other);
+  bool operator ==(Object other);
 }
 
 /**
diff --git a/tests/angular/.blazeproject b/tests/angular/.blazeproject
deleted file mode 100644
index 8ca3309..0000000
--- a/tests/angular/.blazeproject
+++ /dev/null
@@ -1,7 +0,0 @@
-directories:
-  ads/acx2/testing/angular
-
-targets:
-  //ads/acx2/testing/angular/...:all
-additional_languages:
-  dart
\ No newline at end of file
diff --git a/tests/compiler/dart2js/analyses/analysis_helper.dart b/tests/compiler/dart2js/analyses/analysis_helper.dart
index b422f84..d70a4bc 100644
--- a/tests/compiler/dart2js/analyses/analysis_helper.dart
+++ b/tests/compiler/dart2js/analyses/analysis_helper.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:convert' as json;
 import 'dart:io';
 
diff --git a/tests/compiler/dart2js/analyses/analyze_test.dart b/tests/compiler/dart2js/analyses/analyze_test.dart
index 27e50dd..b0f6832 100644
--- a/tests/compiler/dart2js/analyses/analyze_test.dart
+++ b/tests/compiler/dart2js/analyses/analyze_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:testing/src/run_tests.dart" as testing show main;
 
 main() {
diff --git a/tests/compiler/dart2js/analyses/api_dynamic_test.dart b/tests/compiler/dart2js/analyses/api_dynamic_test.dart
index e06471d..d9a0bf7 100644
--- a/tests/compiler/dart2js/analyses/api_dynamic_test.dart
+++ b/tests/compiler/dart2js/analyses/api_dynamic_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'analysis_helper.dart';
 
diff --git a/tests/compiler/dart2js/analyses/dart2js_dynamic_test.dart b/tests/compiler/dart2js/analyses/dart2js_dynamic_test.dart
index b65a57f..e435e6d 100644
--- a/tests/compiler/dart2js/analyses/dart2js_dynamic_test.dart
+++ b/tests/compiler/dart2js/analyses/dart2js_dynamic_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'analysis_helper.dart';
 
diff --git a/tests/compiler/dart2js/analyses/static_type_visitor_test.dart b/tests/compiler/dart2js/analyses/static_type_visitor_test.dart
index 6d59f72..9fb7a2b 100644
--- a/tests/compiler/dart2js/analyses/static_type_visitor_test.dart
+++ b/tests/compiler/dart2js/analyses/static_type_visitor_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/ir/static_type.dart';
diff --git a/tests/compiler/dart2js/annotations/annotations_test.dart b/tests/compiler/dart2js/annotations/annotations_test.dart
index 38b6bf5..82c35a0 100644
--- a/tests/compiler/dart2js/annotations/annotations_test.dart
+++ b/tests/compiler/dart2js/annotations/annotations_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:io';
 import 'package:_fe_analyzer_shared/src/testing/features.dart';
 import 'package:async_helper/async_helper.dart';
diff --git a/tests/compiler/dart2js/annotations/data/basic.dart b/tests/compiler/dart2js/annotations/data/basic.dart
index c60693b..c7f29c9 100644
--- a/tests/compiler/dart2js/annotations/data/basic.dart
+++ b/tests/compiler/dart2js/annotations/data/basic.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   noInline();
   tryInline();
diff --git a/tests/compiler/dart2js/annotations/data/directives.dart b/tests/compiler/dart2js/annotations/data/directives.dart
index dbebee2..fadf7d8 100644
--- a/tests/compiler/dart2js/annotations/data/directives.dart
+++ b/tests/compiler/dart2js/annotations/data/directives.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   typesTrust();
   typesCheck();
diff --git a/tests/compiler/dart2js/annotations/data/errors.dart b/tests/compiler/dart2js/annotations/data/errors.dart
index c170331..ce12b6b 100644
--- a/tests/compiler/dart2js/annotations/data/errors.dart
+++ b/tests/compiler/dart2js/annotations/data/errors.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   unknown();
   noInlineField;
diff --git a/tests/compiler/dart2js/async_await/async_await_js_transform_test.dart b/tests/compiler/dart2js/async_await/async_await_js_transform_test.dart
index 111e57d..2307c08 100644
--- a/tests/compiler/dart2js/async_await/async_await_js_transform_test.dart
+++ b/tests/compiler/dart2js/async_await/async_await_js_transform_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 import "package:compiler/src/js/js.dart";
 import "package:compiler/src/js/rewrite_async.dart";
diff --git a/tests/compiler/dart2js/closure/closure_test.dart b/tests/compiler/dart2js/closure/closure_test.dart
index a92c1dc..0701d19 100644
--- a/tests/compiler/dart2js/closure/closure_test.dart
+++ b/tests/compiler/dart2js/closure/closure_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:io' hide Link;
 import 'package:_fe_analyzer_shared/src/testing/features.dart';
 import 'package:_fe_analyzer_shared/src/util/link.dart' show Link;
diff --git a/tests/compiler/dart2js/closure/data/captured_variable.dart b/tests/compiler/dart2js/closure/data/captured_variable.dart
index 409184d..edc1add 100644
--- a/tests/compiler/dart2js/closure/data/captured_variable.dart
+++ b/tests/compiler/dart2js/closure/data/captured_variable.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: boxedLoopVariableExample:*/
 boxedLoopVariableExample() {
   var input = [1, 2, 3];
diff --git a/tests/compiler/dart2js/closure/data/generic.dart b/tests/compiler/dart2js/closure/data/generic.dart
index c1a3f5d..a2f552d 100644
--- a/tests/compiler/dart2js/closure/data/generic.dart
+++ b/tests/compiler/dart2js/closure/data/generic.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class Class1<T> {
   /*member: Class1.field:hasThis*/
   var field = /*fields=[T],free=[T],hasThis*/ () => T;
diff --git a/tests/compiler/dart2js/closure/data/instantiation.dart b/tests/compiler/dart2js/closure/data/instantiation.dart
index 8f95b60..19949ff 100644
--- a/tests/compiler/dart2js/closure/data/instantiation.dart
+++ b/tests/compiler/dart2js/closure/data/instantiation.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 T id<T>(T t) => t;
 
 method<S>(S s) {
diff --git a/tests/compiler/dart2js/closure/data/instantiation1.dart b/tests/compiler/dart2js/closure/data/instantiation1.dart
index e8ba217..3f31e41 100644
--- a/tests/compiler/dart2js/closure/data/instantiation1.dart
+++ b/tests/compiler/dart2js/closure/data/instantiation1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 int f<T>(T a) => null;
 
 typedef int F<R>(R a);
diff --git a/tests/compiler/dart2js/closure/data/instantiation2.dart b/tests/compiler/dart2js/closure/data/instantiation2.dart
index d3a616f..8e75f09 100644
--- a/tests/compiler/dart2js/closure/data/instantiation2.dart
+++ b/tests/compiler/dart2js/closure/data/instantiation2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 bool f<T>(T a) => a is T;
 
 typedef bool F<R>(R a);
diff --git a/tests/compiler/dart2js/closure/data/instantiation3.dart b/tests/compiler/dart2js/closure/data/instantiation3.dart
index aeeee92..2157d67 100644
--- a/tests/compiler/dart2js/closure/data/instantiation3.dart
+++ b/tests/compiler/dart2js/closure/data/instantiation3.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 int f<T>(T a) => null;
 
 typedef int F<R>(R a);
diff --git a/tests/compiler/dart2js/closure/data/instantiation4.dart b/tests/compiler/dart2js/closure/data/instantiation4.dart
index 957eca0..05b8caf 100644
--- a/tests/compiler/dart2js/closure/data/instantiation4.dart
+++ b/tests/compiler/dart2js/closure/data/instantiation4.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 bool f<T>(T a) => a is T;
 
 typedef bool F<R>(R a);
diff --git a/tests/compiler/dart2js/closure/data/list_literal_class.dart b/tests/compiler/dart2js/closure/data/list_literal_class.dart
index 080bb77..8ce3e2e 100644
--- a/tests/compiler/dart2js/closure/data/list_literal_class.dart
+++ b/tests/compiler/dart2js/closure/data/list_literal_class.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*member: A.:hasThis*/
diff --git a/tests/compiler/dart2js/closure/data/list_literal_method.dart b/tests/compiler/dart2js/closure/data/list_literal_method.dart
index 03a05c8..2a93a2d 100644
--- a/tests/compiler/dart2js/closure/data/list_literal_method.dart
+++ b/tests/compiler/dart2js/closure/data/list_literal_method.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 @pragma('dart2js:noInline')
diff --git a/tests/compiler/dart2js/closure/data/list_literal_untested_class.dart b/tests/compiler/dart2js/closure/data/list_literal_untested_class.dart
index a20f0b8..516b390 100644
--- a/tests/compiler/dart2js/closure/data/list_literal_untested_class.dart
+++ b/tests/compiler/dart2js/closure/data/list_literal_untested_class.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*member: A.:hasThis*/
diff --git a/tests/compiler/dart2js/closure/data/list_literal_untested_method.dart b/tests/compiler/dart2js/closure/data/list_literal_untested_method.dart
index 87a5673..42e8cf2 100644
--- a/tests/compiler/dart2js/closure/data/list_literal_untested_method.dart
+++ b/tests/compiler/dart2js/closure/data/list_literal_untested_method.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 @pragma('dart2js:noInline')
diff --git a/tests/compiler/dart2js/closure/data/map_literal_class.dart b/tests/compiler/dart2js/closure/data/map_literal_class.dart
index f6f1f0c..f41747b 100644
--- a/tests/compiler/dart2js/closure/data/map_literal_class.dart
+++ b/tests/compiler/dart2js/closure/data/map_literal_class.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*member: A.:hasThis*/
diff --git a/tests/compiler/dart2js/closure/data/map_literal_method.dart b/tests/compiler/dart2js/closure/data/map_literal_method.dart
index 51f99a9..de83643 100644
--- a/tests/compiler/dart2js/closure/data/map_literal_method.dart
+++ b/tests/compiler/dart2js/closure/data/map_literal_method.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 @pragma('dart2js:noInline')
diff --git a/tests/compiler/dart2js/closure/data/map_literal_untested_class.dart b/tests/compiler/dart2js/closure/data/map_literal_untested_class.dart
index da671a3..6ee00d3 100644
--- a/tests/compiler/dart2js/closure/data/map_literal_untested_class.dart
+++ b/tests/compiler/dart2js/closure/data/map_literal_untested_class.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*member: A.:hasThis*/
diff --git a/tests/compiler/dart2js/closure/data/map_literal_untested_method.dart b/tests/compiler/dart2js/closure/data/map_literal_untested_method.dart
index 27c33a2..d2adfbb 100644
--- a/tests/compiler/dart2js/closure/data/map_literal_untested_method.dart
+++ b/tests/compiler/dart2js/closure/data/map_literal_untested_method.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 @pragma('dart2js:noInline')
diff --git a/tests/compiler/dart2js/closure/data/mixed.dart b/tests/compiler/dart2js/closure/data/mixed.dart
index 20fdcbe..a9a0635 100644
--- a/tests/compiler/dart2js/closure/data/mixed.dart
+++ b/tests/compiler/dart2js/closure/data/mixed.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that free variables aren't mixed between capturing and non-capturing
 // closures.
 
diff --git a/tests/compiler/dart2js/closure/data/mutations.dart b/tests/compiler/dart2js/closure/data/mutations.dart
index 8516ba3..03597b5 100644
--- a/tests/compiler/dart2js/closure/data/mutations.dart
+++ b/tests/compiler/dart2js/closure/data/mutations.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that captured variables are boxed regardless of where they are mutated.
 
 /*member: mutateUnused:*/
diff --git a/tests/compiler/dart2js/closure/data/nested_closures.dart b/tests/compiler/dart2js/closure/data/nested_closures.dart
index 2f2cb12..c061cb6 100644
--- a/tests/compiler/dart2js/closure/data/nested_closures.dart
+++ b/tests/compiler/dart2js/closure/data/nested_closures.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Test boxing/captures for nested closures.
 
 /*member: useOne:box=(box0 which holds [b1])*/ useOne(/*boxed*/ b1) {
diff --git a/tests/compiler/dart2js/closure/data/parameter_in_try.dart b/tests/compiler/dart2js/closure/data/parameter_in_try.dart
index bf4cb90..65a4e81 100644
--- a/tests/compiler/dart2js/closure/data/parameter_in_try.dart
+++ b/tests/compiler/dart2js/closure/data/parameter_in_try.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 readParameterInFinally(/*inTry*/ parameter) {
   try {
     if (parameter) {
diff --git a/tests/compiler/dart2js/closure/data/test_type_class.dart b/tests/compiler/dart2js/closure/data/test_type_class.dart
index 222ca14..ead1797 100644
--- a/tests/compiler/dart2js/closure/data/test_type_class.dart
+++ b/tests/compiler/dart2js/closure/data/test_type_class.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 ////////////////////////////////////////////////////////////////////////////////
 /// Explicit is-test is always required.
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/tests/compiler/dart2js/closure/data/test_type_method.dart b/tests/compiler/dart2js/closure/data/test_type_method.dart
index bab82c3..faad952 100644
--- a/tests/compiler/dart2js/closure/data/test_type_method.dart
+++ b/tests/compiler/dart2js/closure/data/test_type_method.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 ////////////////////////////////////////////////////////////////////////////////
 /// Explicit is-test is always required.
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/tests/compiler/dart2js/closure/data/two_local_functions.dart b/tests/compiler/dart2js/closure/data/two_local_functions.dart
index a7ecf9c..b90d407 100644
--- a/tests/compiler/dart2js/closure/data/two_local_functions.dart
+++ b/tests/compiler/dart2js/closure/data/two_local_functions.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   /**/ local1() {}
   /*fields=[local1],free=[local1]*/ local2() => local1();
diff --git a/tests/compiler/dart2js/closure/data/type_annotations_class.dart b/tests/compiler/dart2js/closure/data/type_annotations_class.dart
index 853ffd6..1732242 100644
--- a/tests/compiler/dart2js/closure/data/type_annotations_class.dart
+++ b/tests/compiler/dart2js/closure/data/type_annotations_class.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 ////////////////////////////////////////////////////////////////////////////////
 /// A sound initialization of a local variable doesn't capture the type
 /// variable.
diff --git a/tests/compiler/dart2js/closure/data/type_annotations_method.dart b/tests/compiler/dart2js/closure/data/type_annotations_method.dart
index 878e3bd..4bf4396 100644
--- a/tests/compiler/dart2js/closure/data/type_annotations_method.dart
+++ b/tests/compiler/dart2js/closure/data/type_annotations_method.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 ////////////////////////////////////////////////////////////////////////////////
 /// A sound assignment to a local variable doesn't capture the type variable.
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/tests/compiler/dart2js/closure/data/type_arguments_class.dart b/tests/compiler/dart2js/closure/data/type_arguments_class.dart
index 2340013..4ba386d 100644
--- a/tests/compiler/dart2js/closure/data/type_arguments_class.dart
+++ b/tests/compiler/dart2js/closure/data/type_arguments_class.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 ////////////////////////////////////////////////////////////////////////////////
 /// A constructor invocation to a class that needs type arguments captures the
 /// type variables.
diff --git a/tests/compiler/dart2js/closure/data/type_arguments_method.dart b/tests/compiler/dart2js/closure/data/type_arguments_method.dart
index ad35ada..21bf745 100644
--- a/tests/compiler/dart2js/closure/data/type_arguments_method.dart
+++ b/tests/compiler/dart2js/closure/data/type_arguments_method.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 ////////////////////////////////////////////////////////////////////////////////
 /// A constructor invocation for a class that needs type arguments captures the
 /// type variables.
diff --git a/tests/compiler/dart2js/closure/data/type_variables.dart b/tests/compiler/dart2js/closure/data/type_variables.dart
index 1521b3a..ea99255 100644
--- a/tests/compiler/dart2js/closure/data/type_variables.dart
+++ b/tests/compiler/dart2js/closure/data/type_variables.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class Class1<T> {
   /*member: Class1.field:hasThis*/
   var field = /*fields=[T],free=[T],hasThis*/ () => T;
diff --git a/tests/compiler/dart2js/closure/show.dart b/tests/compiler/dart2js/closure/show.dart
index e300f74..535a18b 100644
--- a/tests/compiler/dart2js/closure/show.dart
+++ b/tests/compiler/dart2js/closure/show.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Helper program that shows the closure data on a dart program.
 
 import 'package:args/args.dart';
diff --git a/tests/compiler/dart2js/codegen/arithmetic_simplification_test.dart b/tests/compiler/dart2js/codegen/arithmetic_simplification_test.dart
index 35f344f..210f2f1 100644
--- a/tests/compiler/dart2js/codegen/arithmetic_simplification_test.dart
+++ b/tests/compiler/dart2js/codegen/arithmetic_simplification_test.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
 // Test constant folding on numbers.
 
 import 'package:async_helper/async_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/array_static_intercept_test.dart b/tests/compiler/dart2js/codegen/array_static_intercept_test.dart
index ee3c87a..4f02ed5 100644
--- a/tests/compiler/dart2js/codegen/array_static_intercept_test.dart
+++ b/tests/compiler/dart2js/codegen/array_static_intercept_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/builtin_equals_test.dart b/tests/compiler/dart2js/codegen/builtin_equals_test.dart
index 29d1577..d5281f8 100644
--- a/tests/compiler/dart2js/codegen/builtin_equals_test.dart
+++ b/tests/compiler/dart2js/codegen/builtin_equals_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/builtin_interceptor_test.dart b/tests/compiler/dart2js/codegen/builtin_interceptor_test.dart
index 36e15f7..b1c6312 100644
--- a/tests/compiler/dart2js/codegen/builtin_interceptor_test.dart
+++ b/tests/compiler/dart2js/codegen/builtin_interceptor_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/class_codegen2_test.dart b/tests/compiler/dart2js/codegen/class_codegen2_test.dart
index 213c5f3..788ba2d 100644
--- a/tests/compiler/dart2js/codegen/class_codegen2_test.dart
+++ b/tests/compiler/dart2js/codegen/class_codegen2_test.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
 // Test that parameters keep their names in the output.
 
 import 'dart:async';
diff --git a/tests/compiler/dart2js/codegen/class_codegen_test.dart b/tests/compiler/dart2js/codegen/class_codegen_test.dart
index d46135e..a4f0c3d 100644
--- a/tests/compiler/dart2js/codegen/class_codegen_test.dart
+++ b/tests/compiler/dart2js/codegen/class_codegen_test.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
 // Test that parameters keep their names in the output.
 
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js/codegen/class_order_test.dart b/tests/compiler/dart2js/codegen/class_order_test.dart
index 28fc7f2..b5f8b8d 100644
--- a/tests/compiler/dart2js/codegen/class_order_test.dart
+++ b/tests/compiler/dart2js/codegen/class_order_test.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
 // Test that parameters keep their names in the output.
 
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js/codegen/closure_call_of_static_reduction_test.dart b/tests/compiler/dart2js/codegen/closure_call_of_static_reduction_test.dart
index 74d86f6..9695510 100644
--- a/tests/compiler/dart2js/codegen/closure_call_of_static_reduction_test.dart
+++ b/tests/compiler/dart2js/codegen/closure_call_of_static_reduction_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:async';
 import 'package:async_helper/async_helper.dart';
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/closure_codegen_test.dart b/tests/compiler/dart2js/codegen/closure_codegen_test.dart
index 83119ac..516d526 100644
--- a/tests/compiler/dart2js/codegen/closure_codegen_test.dart
+++ b/tests/compiler/dart2js/codegen/closure_codegen_test.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
 // Test that parameters keep their names in the output.
 
 import 'dart:async';
diff --git a/tests/compiler/dart2js/codegen/code_motion_test.dart b/tests/compiler/dart2js/codegen/code_motion_test.dart
index d0f1e59..bd374f0 100644
--- a/tests/compiler/dart2js/codegen/code_motion_test.dart
+++ b/tests/compiler/dart2js/codegen/code_motion_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/constant_folding_codeUnitAt_test.dart b/tests/compiler/dart2js/codegen/constant_folding_codeUnitAt_test.dart
index 465bc32..a821884 100644
--- a/tests/compiler/dart2js/codegen/constant_folding_codeUnitAt_test.dart
+++ b/tests/compiler/dart2js/codegen/constant_folding_codeUnitAt_test.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
 // Test constant folding on numbers.
 
 import 'package:async_helper/async_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/constant_folding_test.dart b/tests/compiler/dart2js/codegen/constant_folding_test.dart
index 227d97b..06d09ad 100644
--- a/tests/compiler/dart2js/codegen/constant_folding_test.dart
+++ b/tests/compiler/dart2js/codegen/constant_folding_test.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
 // Test constant folding on numbers.
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js/codegen/constant_namer_test.dart b/tests/compiler/dart2js/codegen/constant_namer_test.dart
index 8893422..b24c281 100644
--- a/tests/compiler/dart2js/codegen/constant_namer_test.dart
+++ b/tests/compiler/dart2js/codegen/constant_namer_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/dead_code_test.dart b/tests/compiler/dart2js/codegen/dead_code_test.dart
index c7ffd88..9b7f749 100644
--- a/tests/compiler/dart2js/codegen/dead_code_test.dart
+++ b/tests/compiler/dart2js/codegen/dead_code_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 import "package:async_helper/async_helper.dart";
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/dead_phi_eliminator_test.dart b/tests/compiler/dart2js/codegen/dead_phi_eliminator_test.dart
index 49de078..dc56466 100644
--- a/tests/compiler/dart2js/codegen/dead_phi_eliminator_test.dart
+++ b/tests/compiler/dart2js/codegen/dead_phi_eliminator_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/declare_once_test.dart b/tests/compiler/dart2js/codegen/declare_once_test.dart
index 849b1bf..9e8be8d 100644
--- a/tests/compiler/dart2js/codegen/declare_once_test.dart
+++ b/tests/compiler/dart2js/codegen/declare_once_test.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
 // Test that parameters keep their names in the output.
 
 import 'package:async_helper/async_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/elide_callthrough_stub_test.dart b/tests/compiler/dart2js/codegen/elide_callthrough_stub_test.dart
index 67102fe..a7aaaa9 100644
--- a/tests/compiler/dart2js/codegen/elide_callthrough_stub_test.dart
+++ b/tests/compiler/dart2js/codegen/elide_callthrough_stub_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Check that calls through fields elide the call-through stub.  This
 // optimization is done by the simplifier, so inlining does not need to be
 // enabled.
diff --git a/tests/compiler/dart2js/codegen/emit_const_fields_test.dart b/tests/compiler/dart2js/codegen/emit_const_fields_test.dart
index fbfa9f4..82c8571 100644
--- a/tests/compiler/dart2js/codegen/emit_const_fields_test.dart
+++ b/tests/compiler/dart2js/codegen/emit_const_fields_test.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
 // Test that unused static consts are not emitted.
 
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js/codegen/equals_test.dart b/tests/compiler/dart2js/codegen/equals_test.dart
index 45bbf50..7aa71ad 100644
--- a/tests/compiler/dart2js/codegen/equals_test.dart
+++ b/tests/compiler/dart2js/codegen/equals_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library equals_test;
 
 import 'dart:async';
diff --git a/tests/compiler/dart2js/codegen/expect_annotations2_test.dart b/tests/compiler/dart2js/codegen/expect_annotations2_test.dart
index fad77c6..b4d1338 100644
--- a/tests/compiler/dart2js/codegen/expect_annotations2_test.dart
+++ b/tests/compiler/dart2js/codegen/expect_annotations2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 import "package:async_helper/async_helper.dart";
 import 'package:compiler/compiler_new.dart';
diff --git a/tests/compiler/dart2js/codegen/expect_annotations_test.dart b/tests/compiler/dart2js/codegen/expect_annotations_test.dart
index 8775d9c..f25bec8 100644
--- a/tests/compiler/dart2js/codegen/expect_annotations_test.dart
+++ b/tests/compiler/dart2js/codegen/expect_annotations_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/compiler.dart';
diff --git a/tests/compiler/dart2js/codegen/field_codegen_test.dart b/tests/compiler/dart2js/codegen/field_codegen_test.dart
index 76eea98..eeb446c7b 100644
--- a/tests/compiler/dart2js/codegen/field_codegen_test.dart
+++ b/tests/compiler/dart2js/codegen/field_codegen_test.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
 // Test that parameters keep their names in the output.
 
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js/codegen/field_update_test.dart b/tests/compiler/dart2js/codegen/field_update_test.dart
index 995ce95..81c5e53 100644
--- a/tests/compiler/dart2js/codegen/field_update_test.dart
+++ b/tests/compiler/dart2js/codegen/field_update_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 import "package:async_helper/async_helper.dart";
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/for_in_test.dart b/tests/compiler/dart2js/codegen/for_in_test.dart
index 6c5cb0e..340ffc0 100644
--- a/tests/compiler/dart2js/codegen/for_in_test.dart
+++ b/tests/compiler/dart2js/codegen/for_in_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/forloop_box_test.dart b/tests/compiler/dart2js/codegen/forloop_box_test.dart
index aa90153..486e862 100644
--- a/tests/compiler/dart2js/codegen/forloop_box_test.dart
+++ b/tests/compiler/dart2js/codegen/forloop_box_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 import "package:async_helper/async_helper.dart";
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/generate_at_use_site_test.dart b/tests/compiler/dart2js/codegen/generate_at_use_site_test.dart
index 334ecc4..77acbf8 100644
--- a/tests/compiler/dart2js/codegen/generate_at_use_site_test.dart
+++ b/tests/compiler/dart2js/codegen/generate_at_use_site_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/gvn_dynamic_field_get_test.dart b/tests/compiler/dart2js/codegen/gvn_dynamic_field_get_test.dart
index 6695ad2..48ceec8 100644
--- a/tests/compiler/dart2js/codegen/gvn_dynamic_field_get_test.dart
+++ b/tests/compiler/dart2js/codegen/gvn_dynamic_field_get_test.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
 // Test that dart2js gvns dynamic getters that don't have side
 // effects.
 
diff --git a/tests/compiler/dart2js/codegen/gvn_test.dart b/tests/compiler/dart2js/codegen/gvn_test.dart
index f8ce1a1..d359896 100644
--- a/tests/compiler/dart2js/codegen/gvn_test.dart
+++ b/tests/compiler/dart2js/codegen/gvn_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/identity_test.dart b/tests/compiler/dart2js/codegen/identity_test.dart
index 03ef1ba..26f9dd9 100644
--- a/tests/compiler/dart2js/codegen/identity_test.dart
+++ b/tests/compiler/dart2js/codegen/identity_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/if_do_while_test.dart b/tests/compiler/dart2js/codegen/if_do_while_test.dart
index 06c963c..e8688b6 100644
--- a/tests/compiler/dart2js/codegen/if_do_while_test.dart
+++ b/tests/compiler/dart2js/codegen/if_do_while_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/interceptor_almost_constant_test.dart b/tests/compiler/dart2js/codegen/interceptor_almost_constant_test.dart
index ee6c404..53bc1f5 100644
--- a/tests/compiler/dart2js/codegen/interceptor_almost_constant_test.dart
+++ b/tests/compiler/dart2js/codegen/interceptor_almost_constant_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/interceptor_test.dart b/tests/compiler/dart2js/codegen/interceptor_test.dart
index cba680f..beb8ba3 100644
--- a/tests/compiler/dart2js/codegen/interceptor_test.dart
+++ b/tests/compiler/dart2js/codegen/interceptor_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/interpolation_folding_test.dart b/tests/compiler/dart2js/codegen/interpolation_folding_test.dart
index 4b88d9d..1877ff8 100644
--- a/tests/compiler/dart2js/codegen/interpolation_folding_test.dart
+++ b/tests/compiler/dart2js/codegen/interpolation_folding_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/inverse_operator_test.dart b/tests/compiler/dart2js/codegen/inverse_operator_test.dart
index 5d5e1d2..e9c45c0 100644
--- a/tests/compiler/dart2js/codegen/inverse_operator_test.dart
+++ b/tests/compiler/dart2js/codegen/inverse_operator_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import '../helpers/compiler_helper.dart';
 
diff --git a/tests/compiler/dart2js/codegen/is_function_test.dart b/tests/compiler/dart2js/codegen/is_function_test.dart
index 73b2d2f..aa03396 100644
--- a/tests/compiler/dart2js/codegen/is_function_test.dart
+++ b/tests/compiler/dart2js/codegen/is_function_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Test that checks that we are not added $isFunction properties on closure
 /// classes.
 
diff --git a/tests/compiler/dart2js/codegen/is_inference2_test.dart b/tests/compiler/dart2js/codegen/is_inference2_test.dart
index 4117a99..c524a8a 100644
--- a/tests/compiler/dart2js/codegen/is_inference2_test.dart
+++ b/tests/compiler/dart2js/codegen/is_inference2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/is_inference_test.dart b/tests/compiler/dart2js/codegen/is_inference_test.dart
index 195e02c..8ea721b 100644
--- a/tests/compiler/dart2js/codegen/is_inference_test.dart
+++ b/tests/compiler/dart2js/codegen/is_inference_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:async';
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/jsarray_indexof_test.dart b/tests/compiler/dart2js/codegen/jsarray_indexof_test.dart
index f24357b..4b75ecd 100644
--- a/tests/compiler/dart2js/codegen/jsarray_indexof_test.dart
+++ b/tests/compiler/dart2js/codegen/jsarray_indexof_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that `length` access in JSArray.indexOf is encoding using `.length` and
 // not `.get$length()`.
 
diff --git a/tests/compiler/dart2js/codegen/licm_test.dart b/tests/compiler/dart2js/codegen/licm_test.dart
index 32f889c..4ee5013 100644
--- a/tests/compiler/dart2js/codegen/licm_test.dart
+++ b/tests/compiler/dart2js/codegen/licm_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Check that we hoist instructions in a loop condition, even if that
 // condition involves control flow.
 
diff --git a/tests/compiler/dart2js/codegen/list_tracer_length_test.dart b/tests/compiler/dart2js/codegen/list_tracer_length_test.dart
index 7f97bb9..7b81c20 100644
--- a/tests/compiler/dart2js/codegen/list_tracer_length_test.dart
+++ b/tests/compiler/dart2js/codegen/list_tracer_length_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// TODO(johnniwinther): Currently this only works with the mock compiler.
 
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js/codegen/list_tracer_node_type_test.dart b/tests/compiler/dart2js/codegen/list_tracer_node_type_test.dart
index 1aa5c2a..b192a95 100644
--- a/tests/compiler/dart2js/codegen/list_tracer_node_type_test.dart
+++ b/tests/compiler/dart2js/codegen/list_tracer_node_type_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 import "package:async_helper/async_helper.dart";
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/literal_list_test.dart b/tests/compiler/dart2js/codegen/literal_list_test.dart
index ae346c3..e514901 100644
--- a/tests/compiler/dart2js/codegen/literal_list_test.dart
+++ b/tests/compiler/dart2js/codegen/literal_list_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/literal_map_test.dart b/tests/compiler/dart2js/codegen/literal_map_test.dart
index b5db2aa..99c7d0c 100644
--- a/tests/compiler/dart2js/codegen/literal_map_test.dart
+++ b/tests/compiler/dart2js/codegen/literal_map_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/load_elimination_test.dart b/tests/compiler/dart2js/codegen/load_elimination_test.dart
index 822a582..16305c0 100644
--- a/tests/compiler/dart2js/codegen/load_elimination_test.dart
+++ b/tests/compiler/dart2js/codegen/load_elimination_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 import "package:async_helper/async_helper.dart";
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/logical_expression_test.dart b/tests/compiler/dart2js/codegen/logical_expression_test.dart
index 2108602..90dba52 100644
--- a/tests/compiler/dart2js/codegen/logical_expression_test.dart
+++ b/tests/compiler/dart2js/codegen/logical_expression_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that logical or-expressions don't introduce unnecessary nots.
 
 import 'package:async_helper/async_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/loop_test.dart b/tests/compiler/dart2js/codegen/loop_test.dart
index acd1d88..5fdc5e8 100644
--- a/tests/compiler/dart2js/codegen/loop_test.dart
+++ b/tests/compiler/dart2js/codegen/loop_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/minify_many_locals_test.dart b/tests/compiler/dart2js/codegen/minify_many_locals_test.dart
index 197f77c..aee5156 100644
--- a/tests/compiler/dart2js/codegen/minify_many_locals_test.dart
+++ b/tests/compiler/dart2js/codegen/minify_many_locals_test.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
 // Test that parameters keep their names in the output.
 
 import 'package:async_helper/async_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/model_data/capture.dart b/tests/compiler/dart2js/codegen/model_data/capture.dart
index 251c751..7e47ed8 100644
--- a/tests/compiler/dart2js/codegen/model_data/capture.dart
+++ b/tests/compiler/dart2js/codegen/model_data/capture.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: method1:params=0*/
 @pragma('dart2js:noInline')
 method1([a]) => /*access=[a],params=0*/ () => a;
diff --git a/tests/compiler/dart2js/codegen/model_data/constant_folding.dart b/tests/compiler/dart2js/codegen/model_data/constant_folding.dart
index ce74ab7..4b0d8c2 100644
--- a/tests/compiler/dart2js/codegen/model_data/constant_folding.dart
+++ b/tests/compiler/dart2js/codegen/model_data/constant_folding.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Derived from dart2js_extra/constant_folding_test
 
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js/codegen/model_data/constructors.dart b/tests/compiler/dart2js/codegen/model_data/constructors.dart
index 6d25ce6..d5b81b4 100644
--- a/tests/compiler/dart2js/codegen/model_data/constructors.dart
+++ b/tests/compiler/dart2js/codegen/model_data/constructors.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class Class {
   /*member: Class.constructor1:params=0*/
   @pragma('dart2js:noInline')
diff --git a/tests/compiler/dart2js/codegen/model_data/dynamic_get.dart b/tests/compiler/dart2js/codegen/model_data/dynamic_get.dart
index 427eb7a..8a32b6e 100644
--- a/tests/compiler/dart2js/codegen/model_data/dynamic_get.dart
+++ b/tests/compiler/dart2js/codegen/model_data/dynamic_get.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:calls=*,params=0*/
 main() {
   method1(new Class1a());
diff --git a/tests/compiler/dart2js/codegen/model_data/dynamic_set.dart b/tests/compiler/dart2js/codegen/model_data/dynamic_set.dart
index 546d97c..e5afcba 100644
--- a/tests/compiler/dart2js/codegen/model_data/dynamic_set.dart
+++ b/tests/compiler/dart2js/codegen/model_data/dynamic_set.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:calls=*,params=0*/
 main() {
   method1(new Class1a()..field1);
diff --git a/tests/compiler/dart2js/codegen/model_data/dynamic_set_unread.dart b/tests/compiler/dart2js/codegen/model_data/dynamic_set_unread.dart
index 0c1fa05..053a59c 100644
--- a/tests/compiler/dart2js/codegen/model_data/dynamic_set_unread.dart
+++ b/tests/compiler/dart2js/codegen/model_data/dynamic_set_unread.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:calls=*,params=0*/
 main() {
   method1(new Class1a());
diff --git a/tests/compiler/dart2js/codegen/model_data/effectively_constant_fields.dart b/tests/compiler/dart2js/codegen/model_data/effectively_constant_fields.dart
index 39e6f1e..aab00a0 100644
--- a/tests/compiler/dart2js/codegen/model_data/effectively_constant_fields.dart
+++ b/tests/compiler/dart2js/codegen/model_data/effectively_constant_fields.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*member: _field4:params=0*/
diff --git a/tests/compiler/dart2js/codegen/model_data/effectively_constant_state.dart b/tests/compiler/dart2js/codegen/model_data/effectively_constant_state.dart
index ec053ae..311b717 100644
--- a/tests/compiler/dart2js/codegen/model_data/effectively_constant_state.dart
+++ b/tests/compiler/dart2js/codegen/model_data/effectively_constant_state.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 enum Enum {
   a,
   b,
diff --git a/tests/compiler/dart2js/codegen/model_data/field_set.dart b/tests/compiler/dart2js/codegen/model_data/field_set.dart
index 1bc4366..d5df0bd 100644
--- a/tests/compiler/dart2js/codegen/model_data/field_set.dart
+++ b/tests/compiler/dart2js/codegen/model_data/field_set.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:access=*,calls=*,params=0*/
 main() {
   method1(new Class1a());
diff --git a/tests/compiler/dart2js/codegen/model_data/fields.dart b/tests/compiler/dart2js/codegen/model_data/fields.dart
index 5f08845..187ca78 100644
--- a/tests/compiler/dart2js/codegen/model_data/fields.dart
+++ b/tests/compiler/dart2js/codegen/model_data/fields.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 var field1a;
 
 var field1b;
diff --git a/tests/compiler/dart2js/codegen/model_data/instance_method_parameters.dart b/tests/compiler/dart2js/codegen/model_data/instance_method_parameters.dart
index 4834159..d70dadf 100644
--- a/tests/compiler/dart2js/codegen/model_data/instance_method_parameters.dart
+++ b/tests/compiler/dart2js/codegen/model_data/instance_method_parameters.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class Class {
   /*member: Class.method1:params=0*/
   @pragma('dart2js:noInline')
diff --git a/tests/compiler/dart2js/codegen/model_data/native.dart b/tests/compiler/dart2js/codegen/model_data/native.dart
index 02cae6f..366dd16 100644
--- a/tests/compiler/dart2js/codegen/model_data/native.dart
+++ b/tests/compiler/dart2js/codegen/model_data/native.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // ignore: import_internal_library
 import 'dart:_js_helper';
 
diff --git a/tests/compiler/dart2js/codegen/model_data/native_inlined.dart b/tests/compiler/dart2js/codegen/model_data/native_inlined.dart
index 63d5cd6..5e13fba 100644
--- a/tests/compiler/dart2js/codegen/model_data/native_inlined.dart
+++ b/tests/compiler/dart2js/codegen/model_data/native_inlined.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // ignore: import_internal_library
 import 'dart:_js_helper';
 
diff --git a/tests/compiler/dart2js/codegen/model_data/native_unused_parameters.dart b/tests/compiler/dart2js/codegen/model_data/native_unused_parameters.dart
index 33e8453..ddc05ff 100644
--- a/tests/compiler/dart2js/codegen/model_data/native_unused_parameters.dart
+++ b/tests/compiler/dart2js/codegen/model_data/native_unused_parameters.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // ignore: import_internal_library
 import 'dart:_js_helper';
 
diff --git a/tests/compiler/dart2js/codegen/model_data/regress_36222.dart b/tests/compiler/dart2js/codegen/model_data/regress_36222.dart
index 6b2143d..6a5dbe9 100644
--- a/tests/compiler/dart2js/codegen/model_data/regress_36222.dart
+++ b/tests/compiler/dart2js/codegen/model_data/regress_36222.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 typedef int BinaryFunc(int x, int y);
 
 class A {
diff --git a/tests/compiler/dart2js/codegen/model_data/static_method_parameters.dart b/tests/compiler/dart2js/codegen/model_data/static_method_parameters.dart
index 31b2433..31a25e2 100644
--- a/tests/compiler/dart2js/codegen/model_data/static_method_parameters.dart
+++ b/tests/compiler/dart2js/codegen/model_data/static_method_parameters.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: method1:params=0*/
 @pragma('dart2js:noInline')
 method1() {}
diff --git a/tests/compiler/dart2js/codegen/model_data/static_tearoff.dart b/tests/compiler/dart2js/codegen/model_data/static_tearoff.dart
index 5720592..e26d48d 100644
--- a/tests/compiler/dart2js/codegen/model_data/static_tearoff.dart
+++ b/tests/compiler/dart2js/codegen/model_data/static_tearoff.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class I1 {}
 
 class I2 {}
diff --git a/tests/compiler/dart2js/codegen/model_test.dart b/tests/compiler/dart2js/codegen/model_test.dart
index 34aaff1..95dedea 100644
--- a/tests/compiler/dart2js/codegen/model_test.dart
+++ b/tests/compiler/dart2js/codegen/model_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:io';
 import 'package:_fe_analyzer_shared/src/testing/features.dart';
 import 'package:async_helper/async_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/modulo_remainder_test.dart b/tests/compiler/dart2js/codegen/modulo_remainder_test.dart
index 7faffa0..68b5b74 100644
--- a/tests/compiler/dart2js/codegen/modulo_remainder_test.dart
+++ b/tests/compiler/dart2js/codegen/modulo_remainder_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import '../helpers/compiler_helper.dart';
 
diff --git a/tests/compiler/dart2js/codegen/negation_shift_regression_test.dart b/tests/compiler/dart2js/codegen/negation_shift_regression_test.dart
index f3ac6fd..417887d 100644
--- a/tests/compiler/dart2js/codegen/negation_shift_regression_test.dart
+++ b/tests/compiler/dart2js/codegen/negation_shift_regression_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import '../helpers/compiler_helper.dart';
 
diff --git a/tests/compiler/dart2js/codegen/new_rti_is_test.dart b/tests/compiler/dart2js/codegen/new_rti_is_test.dart
index 06a3604..b22f311 100644
--- a/tests/compiler/dart2js/codegen/new_rti_is_test.dart
+++ b/tests/compiler/dart2js/codegen/new_rti_is_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library new_rti_is_test;
 
 import 'dart:async';
diff --git a/tests/compiler/dart2js/codegen/no_constructor_body_test.dart b/tests/compiler/dart2js/codegen/no_constructor_body_test.dart
index 7edc700..ae1a9f6 100644
--- a/tests/compiler/dart2js/codegen/no_constructor_body_test.dart
+++ b/tests/compiler/dart2js/codegen/no_constructor_body_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 import "package:async_helper/async_helper.dart";
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/no_duplicate_constructor_body2_test.dart b/tests/compiler/dart2js/codegen/no_duplicate_constructor_body2_test.dart
index cd9f5a7..b92f872 100644
--- a/tests/compiler/dart2js/codegen/no_duplicate_constructor_body2_test.dart
+++ b/tests/compiler/dart2js/codegen/no_duplicate_constructor_body2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import '../helpers/compiler_helper.dart';
 import "package:async_helper/async_helper.dart";
 
diff --git a/tests/compiler/dart2js/codegen/no_duplicate_constructor_body_test.dart b/tests/compiler/dart2js/codegen/no_duplicate_constructor_body_test.dart
index 8d18091..a69550c 100644
--- a/tests/compiler/dart2js/codegen/no_duplicate_constructor_body_test.dart
+++ b/tests/compiler/dart2js/codegen/no_duplicate_constructor_body_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:async_helper/async_helper.dart";
 import '../helpers/compiler_helper.dart';
 
diff --git a/tests/compiler/dart2js/codegen/no_duplicate_stub_test.dart b/tests/compiler/dart2js/codegen/no_duplicate_stub_test.dart
index 98db5e4..c414ad0 100644
--- a/tests/compiler/dart2js/codegen/no_duplicate_stub_test.dart
+++ b/tests/compiler/dart2js/codegen/no_duplicate_stub_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:async_helper/async_helper.dart";
 import '../helpers/compiler_helper.dart';
 
diff --git a/tests/compiler/dart2js/codegen/null_check_test.dart b/tests/compiler/dart2js/codegen/null_check_test.dart
index 63d226e..e97d18a 100644
--- a/tests/compiler/dart2js/codegen/null_check_test.dart
+++ b/tests/compiler/dart2js/codegen/null_check_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 import '../helpers/compiler_helper.dart';
 import "package:async_helper/async_helper.dart";
diff --git a/tests/compiler/dart2js/codegen/null_type_test.dart b/tests/compiler/dart2js/codegen/null_type_test.dart
index 0a23eaf..c3b54ed 100644
--- a/tests/compiler/dart2js/codegen/null_type_test.dart
+++ b/tests/compiler/dart2js/codegen/null_type_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/number_output_test.dart b/tests/compiler/dart2js/codegen/number_output_test.dart
index 317b5ad..fa212c9 100644
--- a/tests/compiler/dart2js/codegen/number_output_test.dart
+++ b/tests/compiler/dart2js/codegen/number_output_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:async';
 import 'package:expect/expect.dart';
 import 'package:compiler/compiler_new.dart';
diff --git a/tests/compiler/dart2js/codegen/parameter_phi_elimination_test.dart b/tests/compiler/dart2js/codegen/parameter_phi_elimination_test.dart
index 5c9aa95..c15c58d 100644
--- a/tests/compiler/dart2js/codegen/parameter_phi_elimination_test.dart
+++ b/tests/compiler/dart2js/codegen/parameter_phi_elimination_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test. Failed due to trying to detach an HLocal twice.
 
 // VMOptions=--enable_asserts
diff --git a/tests/compiler/dart2js/codegen/pragma_annotations_test.dart b/tests/compiler/dart2js/codegen/pragma_annotations_test.dart
index a4487ec..6dc0c9c 100644
--- a/tests/compiler/dart2js/codegen/pragma_annotations_test.dart
+++ b/tests/compiler/dart2js/codegen/pragma_annotations_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/compiler.dart';
diff --git a/tests/compiler/dart2js/codegen/pretty_parameter_test.dart b/tests/compiler/dart2js/codegen/pretty_parameter_test.dart
index 882be84..1e2257d 100644
--- a/tests/compiler/dart2js/codegen/pretty_parameter_test.dart
+++ b/tests/compiler/dart2js/codegen/pretty_parameter_test.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
 // Test that parameters keep their names in the output.
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js/codegen/redundant_phi_eliminator_test.dart b/tests/compiler/dart2js/codegen/redundant_phi_eliminator_test.dart
index 210c142..a27d420 100644
--- a/tests/compiler/dart2js/codegen/redundant_phi_eliminator_test.dart
+++ b/tests/compiler/dart2js/codegen/redundant_phi_eliminator_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/regress_10231_test.dart b/tests/compiler/dart2js/codegen/regress_10231_test.dart
index 9133791..7c795ff 100644
--- a/tests/compiler/dart2js/codegen/regress_10231_test.dart
+++ b/tests/compiler/dart2js/codegen/regress_10231_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for http://dartbug.com/10231.
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js/codegen/side_effect_tdiv_regression_test.dart b/tests/compiler/dart2js/codegen/side_effect_tdiv_regression_test.dart
index 2648985..aed03d0 100644
--- a/tests/compiler/dart2js/codegen/side_effect_tdiv_regression_test.dart
+++ b/tests/compiler/dart2js/codegen/side_effect_tdiv_regression_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import "package:async_helper/async_helper.dart";
 
diff --git a/tests/compiler/dart2js/codegen/simple_function_subtype_test.dart b/tests/compiler/dart2js/codegen/simple_function_subtype_test.dart
index eece082..dd2bdaf 100644
--- a/tests/compiler/dart2js/codegen/simple_function_subtype_test.dart
+++ b/tests/compiler/dart2js/codegen/simple_function_subtype_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that simple function subtype checks use predicates.
 
 library simple_function_subtype_test;
diff --git a/tests/compiler/dart2js/codegen/simple_inferrer_relations_test.dart b/tests/compiler/dart2js/codegen/simple_inferrer_relations_test.dart
index 21bb5d0..319c652 100644
--- a/tests/compiler/dart2js/codegen/simple_inferrer_relations_test.dart
+++ b/tests/compiler/dart2js/codegen/simple_inferrer_relations_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// TODO(johnniwinther): Port this test to use the equivalence framework.
 
 import 'package:async_helper/async_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/ssa_phi_codegen_test.dart b/tests/compiler/dart2js/codegen/ssa_phi_codegen_test.dart
index 7799586..6814800 100644
--- a/tests/compiler/dart2js/codegen/ssa_phi_codegen_test.dart
+++ b/tests/compiler/dart2js/codegen/ssa_phi_codegen_test.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
 // Test that parameters keep their names in the output.
 
 import 'package:async_helper/async_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/static_closure_test.dart b/tests/compiler/dart2js/codegen/static_closure_test.dart
index 7b3947d..b1697c2 100644
--- a/tests/compiler/dart2js/codegen/static_closure_test.dart
+++ b/tests/compiler/dart2js/codegen/static_closure_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that static functions are closurized as expected.
 
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js/codegen/strength_eq_test.dart b/tests/compiler/dart2js/codegen/strength_eq_test.dart
index 196776b..9db0cc4 100644
--- a/tests/compiler/dart2js/codegen/strength_eq_test.dart
+++ b/tests/compiler/dart2js/codegen/strength_eq_test.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
 // Test constant folding on numbers.
 
 import 'package:async_helper/async_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/string_add_test.dart b/tests/compiler/dart2js/codegen/string_add_test.dart
index 2b64f35..656b94d 100644
--- a/tests/compiler/dart2js/codegen/string_add_test.dart
+++ b/tests/compiler/dart2js/codegen/string_add_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 import "package:async_helper/async_helper.dart";
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/string_escapes_test.dart b/tests/compiler/dart2js/codegen/string_escapes_test.dart
index 9e774d2..d51d3e2 100644
--- a/tests/compiler/dart2js/codegen/string_escapes_test.dart
+++ b/tests/compiler/dart2js/codegen/string_escapes_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:async';
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js/codegen/string_interpolation_test.dart b/tests/compiler/dart2js/codegen/string_interpolation_test.dart
index c36f45e..712b35c 100644
--- a/tests/compiler/dart2js/codegen/string_interpolation_test.dart
+++ b/tests/compiler/dart2js/codegen/string_interpolation_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 import "package:async_helper/async_helper.dart";
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/switch_empty_default_test.dart b/tests/compiler/dart2js/codegen/switch_empty_default_test.dart
index 0ba4272..e4c9759 100644
--- a/tests/compiler/dart2js/codegen/switch_empty_default_test.dart
+++ b/tests/compiler/dart2js/codegen/switch_empty_default_test.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
 // Test constant folding on numbers.
 
 import 'package:async_helper/async_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/tdiv_test.dart b/tests/compiler/dart2js/codegen/tdiv_test.dart
index 2a212c7..ff52396 100644
--- a/tests/compiler/dart2js/codegen/tdiv_test.dart
+++ b/tests/compiler/dart2js/codegen/tdiv_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library tdiv_test;
 
 import 'dart:async';
diff --git a/tests/compiler/dart2js/codegen/top_level_closure_tree_shake_test.dart b/tests/compiler/dart2js/codegen/top_level_closure_tree_shake_test.dart
index 5868d23..0437ea1 100644
--- a/tests/compiler/dart2js/codegen/top_level_closure_tree_shake_test.dart
+++ b/tests/compiler/dart2js/codegen/top_level_closure_tree_shake_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/tree_shaking_test.dart b/tests/compiler/dart2js/codegen/tree_shaking_test.dart
index 518851d..3b17476 100644
--- a/tests/compiler/dart2js/codegen/tree_shaking_test.dart
+++ b/tests/compiler/dart2js/codegen/tree_shaking_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 import "package:async_helper/async_helper.dart";
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/trust_type_annotations2_test.dart b/tests/compiler/dart2js/codegen/trust_type_annotations2_test.dart
index 6cd1e63..09b1437 100644
--- a/tests/compiler/dart2js/codegen/trust_type_annotations2_test.dart
+++ b/tests/compiler/dart2js/codegen/trust_type_annotations2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import "package:async_helper/async_helper.dart";
 import '../helpers/memory_compiler.dart';
diff --git a/tests/compiler/dart2js/codegen/trust_type_annotations_test.dart b/tests/compiler/dart2js/codegen/trust_type_annotations_test.dart
index 5937b0d..99ac443 100644
--- a/tests/compiler/dart2js/codegen/trust_type_annotations_test.dart
+++ b/tests/compiler/dart2js/codegen/trust_type_annotations_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import "package:async_helper/async_helper.dart";
 import 'package:compiler/src/commandline_options.dart';
diff --git a/tests/compiler/dart2js/codegen/type_guard_unuser_test.dart b/tests/compiler/dart2js/codegen/type_guard_unuser_test.dart
index 35f1617..28b06c9 100644
--- a/tests/compiler/dart2js/codegen/type_guard_unuser_test.dart
+++ b/tests/compiler/dart2js/codegen/type_guard_unuser_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/type_inference2_test.dart b/tests/compiler/dart2js/codegen/type_inference2_test.dart
index 77366de..549c627 100644
--- a/tests/compiler/dart2js/codegen/type_inference2_test.dart
+++ b/tests/compiler/dart2js/codegen/type_inference2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import '../helpers/compiler_helper.dart';
 
diff --git a/tests/compiler/dart2js/codegen/type_inference3_test.dart b/tests/compiler/dart2js/codegen/type_inference3_test.dart
index 0580e9e..b8e7ebf 100644
--- a/tests/compiler/dart2js/codegen/type_inference3_test.dart
+++ b/tests/compiler/dart2js/codegen/type_inference3_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/type_inference4_test.dart b/tests/compiler/dart2js/codegen/type_inference4_test.dart
index 754f094..7b63410 100644
--- a/tests/compiler/dart2js/codegen/type_inference4_test.dart
+++ b/tests/compiler/dart2js/codegen/type_inference4_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/type_inference5_test.dart b/tests/compiler/dart2js/codegen/type_inference5_test.dart
index e478856..7b70e4b 100644
--- a/tests/compiler/dart2js/codegen/type_inference5_test.dart
+++ b/tests/compiler/dart2js/codegen/type_inference5_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/type_inference8_test.dart b/tests/compiler/dart2js/codegen/type_inference8_test.dart
index 9150a65..382ef35 100644
--- a/tests/compiler/dart2js/codegen/type_inference8_test.dart
+++ b/tests/compiler/dart2js/codegen/type_inference8_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// TODO(johnniwinther): Move this test to the codegen folder.
 
 import "package:async_helper/async_helper.dart";
diff --git a/tests/compiler/dart2js/codegen/types_of_captured_variables_test.dart b/tests/compiler/dart2js/codegen/types_of_captured_variables_test.dart
index d327223..b6d0db1 100644
--- a/tests/compiler/dart2js/codegen/types_of_captured_variables_test.dart
+++ b/tests/compiler/dart2js/codegen/types_of_captured_variables_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import "package:async_helper/async_helper.dart";
 import '../helpers/compiler_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/unused_empty_map_test.dart b/tests/compiler/dart2js/codegen/unused_empty_map_test.dart
index cf3fa88..c705b09 100644
--- a/tests/compiler/dart2js/codegen/unused_empty_map_test.dart
+++ b/tests/compiler/dart2js/codegen/unused_empty_map_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Ensure that unused empty HashMap nodes are dropped from the output.
 
 import 'package:async_helper/async_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/use_checks_test.dart b/tests/compiler/dart2js/codegen/use_checks_test.dart
index 6f95ee9..69fc215 100644
--- a/tests/compiler/dart2js/codegen/use_checks_test.dart
+++ b/tests/compiler/dart2js/codegen/use_checks_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/commandline_options.dart';
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js/codegen/use_strict_test.dart b/tests/compiler/dart2js/codegen/use_strict_test.dart
index 9dfe0f5..4407f33 100644
--- a/tests/compiler/dart2js/codegen/use_strict_test.dart
+++ b/tests/compiler/dart2js/codegen/use_strict_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/compiler_new.dart';
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js/codegen/value_range2_test.dart b/tests/compiler/dart2js/codegen/value_range2_test.dart
index d8738ea..2cb17b7 100644
--- a/tests/compiler/dart2js/codegen/value_range2_test.dart
+++ b/tests/compiler/dart2js/codegen/value_range2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 import "package:compiler/src/inferrer/abstract_value_domain.dart";
 import "package:compiler/src/ssa/nodes.dart";
diff --git a/tests/compiler/dart2js/codegen/value_range3_test.dart b/tests/compiler/dart2js/codegen/value_range3_test.dart
index 73491c1..3ccce34 100644
--- a/tests/compiler/dart2js/codegen/value_range3_test.dart
+++ b/tests/compiler/dart2js/codegen/value_range3_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that global analysis in dart2js propagates positive integers.
 
 import 'package:async_helper/async_helper.dart';
diff --git a/tests/compiler/dart2js/codegen/value_range_test.dart b/tests/compiler/dart2js/codegen/value_range_test.dart
index a50b20e..0676cd7 100644
--- a/tests/compiler/dart2js/codegen/value_range_test.dart
+++ b/tests/compiler/dart2js/codegen/value_range_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:async';
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js/codegen/variance_subtype_cast_test.dart b/tests/compiler/dart2js/codegen/variance_subtype_cast_test.dart
index fcf0d17..f77cd3b 100644
--- a/tests/compiler/dart2js/codegen/variance_subtype_cast_test.dart
+++ b/tests/compiler/dart2js/codegen/variance_subtype_cast_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import '../helpers/compiler_helper.dart';
 
diff --git a/tests/compiler/dart2js/deferred/closures_test.dart b/tests/compiler/dart2js/deferred/closures_test.dart
index 3f6d36d..5969125 100644
--- a/tests/compiler/dart2js/deferred/closures_test.dart
+++ b/tests/compiler/dart2js/deferred/closures_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Ensures that closures are in the output unit of their enclosing element.
 
 import 'package:async_helper/async_helper.dart';
diff --git a/tests/compiler/dart2js/deferred/constant_emission_test_helper.dart b/tests/compiler/dart2js/deferred/constant_emission_test_helper.dart
index 7f8b97e..ce54b1b 100644
--- a/tests/compiler/dart2js/deferred/constant_emission_test_helper.dart
+++ b/tests/compiler/dart2js/deferred/constant_emission_test_helper.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that the additional runtime type support is output to the right
 // Files when using deferred loading.
 
diff --git a/tests/compiler/dart2js/deferred/custom_element_test.dart b/tests/compiler/dart2js/deferred/custom_element_test.dart
index 46acd96..3d363b8 100644
--- a/tests/compiler/dart2js/deferred/custom_element_test.dart
+++ b/tests/compiler/dart2js/deferred/custom_element_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test of the graph segmentation algorithm used by deferred loading
 // to determine which elements can be deferred and which libraries
 // much be included in the initial download (loaded eagerly).
diff --git a/tests/compiler/dart2js/deferred/data/deferred_helper.dart b/tests/compiler/dart2js/deferred/data/deferred_helper.dart
index 9df96ab..b2e8813 100644
--- a/tests/compiler/dart2js/deferred/data/deferred_helper.dart
+++ b/tests/compiler/dart2js/deferred/data/deferred_helper.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'deferred_lib.dart' deferred as lib;
 
 main() async {
diff --git a/tests/compiler/dart2js/deferred/data/deferred_lib.dart b/tests/compiler/dart2js/deferred/data/deferred_lib.dart
index 7a88c95..cc5015c 100644
--- a/tests/compiler/dart2js/deferred/data/deferred_lib.dart
+++ b/tests/compiler/dart2js/deferred/data/deferred_lib.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class Class {
   method() => 'Class.method';
 }
diff --git a/tests/compiler/dart2js/deferred/deferred_constant3_test.dart b/tests/compiler/dart2js/deferred/deferred_constant3_test.dart
index 7dda970..ab08819 100644
--- a/tests/compiler/dart2js/deferred/deferred_constant3_test.dart
+++ b/tests/compiler/dart2js/deferred/deferred_constant3_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that the additional runtime type support is output to the right
 // Files when using deferred loading.
 
diff --git a/tests/compiler/dart2js/deferred/dont_inline_deferred_constants_test.dart b/tests/compiler/dart2js/deferred/dont_inline_deferred_constants_test.dart
index 0bac9fa..284a1f5 100644
--- a/tests/compiler/dart2js/deferred/dont_inline_deferred_constants_test.dart
+++ b/tests/compiler/dart2js/deferred/dont_inline_deferred_constants_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that the additional runtime type support is output to the right
 // Files when using deferred loading.
 
diff --git a/tests/compiler/dart2js/deferred/dont_inline_deferred_globals_test.dart b/tests/compiler/dart2js/deferred/dont_inline_deferred_globals_test.dart
index 3948747..1c3ac30 100644
--- a/tests/compiler/dart2js/deferred/dont_inline_deferred_globals_test.dart
+++ b/tests/compiler/dart2js/deferred/dont_inline_deferred_globals_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that the additional runtime type support is output to the right
 // Files when using deferred loading.
 
diff --git a/tests/compiler/dart2js/deferred/emit_type_checks_test.dart b/tests/compiler/dart2js/deferred/emit_type_checks_test.dart
index b26555b..38150fc 100644
--- a/tests/compiler/dart2js/deferred/emit_type_checks_test.dart
+++ b/tests/compiler/dart2js/deferred/emit_type_checks_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that the additional runtime type support is output to the right
 // Files when using deferred loading.
 
diff --git a/tests/compiler/dart2js/deferred/follow_constant_dependencies_test.dart b/tests/compiler/dart2js/deferred/follow_constant_dependencies_test.dart
index e4b5593..b277092 100644
--- a/tests/compiler/dart2js/deferred/follow_constant_dependencies_test.dart
+++ b/tests/compiler/dart2js/deferred/follow_constant_dependencies_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that constants depended on by other constants are correctly deferred.
 
 import 'package:async_helper/async_helper.dart';
diff --git a/tests/compiler/dart2js/deferred/follow_implicit_super_regression_test.dart b/tests/compiler/dart2js/deferred/follow_implicit_super_regression_test.dart
index c2ce726..600d455 100644
--- a/tests/compiler/dart2js/deferred/follow_implicit_super_regression_test.dart
+++ b/tests/compiler/dart2js/deferred/follow_implicit_super_regression_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/compiler.dart' as dart2js;
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js/deferred/inline_restrictions_test.dart b/tests/compiler/dart2js/deferred/inline_restrictions_test.dart
index 70df323..7432ea3 100644
--- a/tests/compiler/dart2js/deferred/inline_restrictions_test.dart
+++ b/tests/compiler/dart2js/deferred/inline_restrictions_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that we do not accidentally leak code from deferred libraries but do
 // allow inlining of empty functions and from main.
 
diff --git a/tests/compiler/dart2js/deferred/load_graph_segmentation2_test.dart b/tests/compiler/dart2js/deferred/load_graph_segmentation2_test.dart
index 07b6308..e579680 100644
--- a/tests/compiler/dart2js/deferred/load_graph_segmentation2_test.dart
+++ b/tests/compiler/dart2js/deferred/load_graph_segmentation2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test of the graph segmentation algorithm used by deferred loading
 // to determine which elements can be deferred and which libraries
 // much be included in the initial download (loaded eagerly).
diff --git a/tests/compiler/dart2js/deferred/load_graph_segmentation_test.dart b/tests/compiler/dart2js/deferred/load_graph_segmentation_test.dart
index 4d0589c..3dc7942 100644
--- a/tests/compiler/dart2js/deferred/load_graph_segmentation_test.dart
+++ b/tests/compiler/dart2js/deferred/load_graph_segmentation_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test of the graph segmentation algorithm used by deferred loading
 // to determine which elements can be deferred and which libraries
 // much be included in the initial download (loaded eagerly).
diff --git a/tests/compiler/dart2js/deferred/load_mapping_test.dart b/tests/compiler/dart2js/deferred/load_mapping_test.dart
index 74c0c43..4e6e9af 100644
--- a/tests/compiler/dart2js/deferred/load_mapping_test.dart
+++ b/tests/compiler/dart2js/deferred/load_mapping_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/compiler_new.dart';
diff --git a/tests/compiler/dart2js/deferred/not_in_main_test.dart b/tests/compiler/dart2js/deferred/not_in_main_test.dart
index 35ac334..d66079a 100644
--- a/tests/compiler/dart2js/deferred/not_in_main_test.dart
+++ b/tests/compiler/dart2js/deferred/not_in_main_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test of the graph segmentation algorithm used by deferred loading
 // to determine which elements can be deferred and which libraries
 // much be included in the initial download (loaded eagerly).
diff --git a/tests/compiler/dart2js/deferred/unneeded_part_js_test.dart b/tests/compiler/dart2js/deferred/unneeded_part_js_test.dart
index 7f5ccaa..c097f10 100644
--- a/tests/compiler/dart2js/deferred/unneeded_part_js_test.dart
+++ b/tests/compiler/dart2js/deferred/unneeded_part_js_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that no parts are emitted when deferred loading isn't used.
 
 import 'package:async_helper/async_helper.dart';
diff --git a/tests/compiler/dart2js/deferred_loading/data/basic_deferred/lib.dart b/tests/compiler/dart2js/deferred_loading/data/basic_deferred/lib.dart
index d0d4c5d..3120bea 100644
--- a/tests/compiler/dart2js/deferred_loading/data/basic_deferred/lib.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/basic_deferred/lib.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: defaultArg:OutputUnit(1, {lib})*/
 defaultArg() => "";
 
diff --git a/tests/compiler/dart2js/deferred_loading/data/basic_deferred/main.dart b/tests/compiler/dart2js/deferred_loading/data/basic_deferred/main.dart
index 2e1b3d3..11d445d 100644
--- a/tests/compiler/dart2js/deferred_loading/data/basic_deferred/main.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/basic_deferred/main.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'lib.dart' deferred as lib;
 
 /*member: main:
diff --git a/tests/compiler/dart2js/deferred_loading/data/deferred_class/lib.dart b/tests/compiler/dart2js/deferred_loading/data/deferred_class/lib.dart
index 73a68a9..7e98e7b 100644
--- a/tests/compiler/dart2js/deferred_loading/data/deferred_class/lib.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/deferred_class/lib.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Imported by main.dart.
 
 library deferred_class_library;
diff --git a/tests/compiler/dart2js/deferred_loading/data/deferred_class/main.dart b/tests/compiler/dart2js/deferred_loading/data/deferred_class/main.dart
index 0656d4a..90fd81f 100644
--- a/tests/compiler/dart2js/deferred_loading/data/deferred_class/main.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/deferred_class/main.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'lib.dart' deferred as lib;
 
 /*member: main:OutputUnit(main, {})*/
diff --git a/tests/compiler/dart2js/deferred_loading/data/deferred_constant1/lib1.dart b/tests/compiler/dart2js/deferred_loading/data/deferred_constant1/lib1.dart
index 6843b34..8687ed6 100644
--- a/tests/compiler/dart2js/deferred_loading/data/deferred_constant1/lib1.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/deferred_constant1/lib1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library deferred_constants1_lib1;
 
 export 'lib3.dart' show C, C1;
diff --git a/tests/compiler/dart2js/deferred_loading/data/deferred_constant1/lib2.dart b/tests/compiler/dart2js/deferred_loading/data/deferred_constant1/lib2.dart
index ed8ffce..7897534 100644
--- a/tests/compiler/dart2js/deferred_loading/data/deferred_constant1/lib2.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/deferred_constant1/lib2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library deferred_constants1_lib2;
 
 export 'lib3.dart' show C2, C3, C4, C5, C6, C7;
diff --git a/tests/compiler/dart2js/deferred_loading/data/deferred_constant1/lib3.dart b/tests/compiler/dart2js/deferred_loading/data/deferred_constant1/lib3.dart
index 297fe55..8283665 100644
--- a/tests/compiler/dart2js/deferred_loading/data/deferred_constant1/lib3.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/deferred_constant1/lib3.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library deferred_constants1_lib3;
 
 /*class: C:OutputUnit(main, {})*/
diff --git a/tests/compiler/dart2js/deferred_loading/data/deferred_constant1/main.dart b/tests/compiler/dart2js/deferred_loading/data/deferred_constant1/main.dart
index 721461b..0f40d1c 100644
--- a/tests/compiler/dart2js/deferred_loading/data/deferred_constant1/main.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/deferred_constant1/main.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'lib1.dart';
 import 'lib2.dart' deferred as lib2;
 
diff --git a/tests/compiler/dart2js/deferred_loading/data/deferred_constant2/lib.dart b/tests/compiler/dart2js/deferred_loading/data/deferred_constant2/lib.dart
index 1e897c6..db36de5 100644
--- a/tests/compiler/dart2js/deferred_loading/data/deferred_constant2/lib.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/deferred_constant2/lib.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library deferred_constants2_lib;
 
 /*class: Constant:OutputUnit(1, {lib})*/
diff --git a/tests/compiler/dart2js/deferred_loading/data/deferred_constant2/main.dart b/tests/compiler/dart2js/deferred_loading/data/deferred_constant2/main.dart
index 96002d1..a35addc 100644
--- a/tests/compiler/dart2js/deferred_loading/data/deferred_constant2/main.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/deferred_constant2/main.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 import 'lib.dart' deferred as lib;
diff --git a/tests/compiler/dart2js/deferred_loading/data/deferred_constant3/lib1.dart b/tests/compiler/dart2js/deferred_loading/data/deferred_constant3/lib1.dart
index 1b52c4b..061d9d1 100644
--- a/tests/compiler/dart2js/deferred_loading/data/deferred_constant3/lib1.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/deferred_constant3/lib1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'shared.dart';
 import 'lib2.dart' deferred as l2;
 
diff --git a/tests/compiler/dart2js/deferred_loading/data/deferred_constant3/lib2.dart b/tests/compiler/dart2js/deferred_loading/data/deferred_constant3/lib2.dart
index 44df89d..71db665 100644
--- a/tests/compiler/dart2js/deferred_loading/data/deferred_constant3/lib2.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/deferred_constant3/lib2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'shared.dart';
 
 const c3 = const C(1);
diff --git a/tests/compiler/dart2js/deferred_loading/data/deferred_constant3/main.dart b/tests/compiler/dart2js/deferred_loading/data/deferred_constant3/main.dart
index b006d1e..da731a5 100644
--- a/tests/compiler/dart2js/deferred_loading/data/deferred_constant3/main.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/deferred_constant3/main.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'shared.dart';
 import 'lib1.dart' deferred as l1;
 
diff --git a/tests/compiler/dart2js/deferred_loading/data/deferred_constant3/shared.dart b/tests/compiler/dart2js/deferred_loading/data/deferred_constant3/shared.dart
index 5ce79ac..401e946 100644
--- a/tests/compiler/dart2js/deferred_loading/data/deferred_constant3/shared.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/deferred_constant3/shared.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: C:OutputUnit(main, {})*/
 class C {
   const C(this.x);
diff --git a/tests/compiler/dart2js/deferred_loading/data/deferred_fail_and_retry/lib.dart b/tests/compiler/dart2js/deferred_loading/data/deferred_fail_and_retry/lib.dart
index e2bccb3..8cab462 100644
--- a/tests/compiler/dart2js/deferred_loading/data/deferred_fail_and_retry/lib.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/deferred_fail_and_retry/lib.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: foo:OutputUnit(1, {lib})*/
 foo() {
   return "loaded";
diff --git a/tests/compiler/dart2js/deferred_loading/data/deferred_fail_and_retry/main.dart b/tests/compiler/dart2js/deferred_loading/data/deferred_fail_and_retry/main.dart
index 2d2d2bb..67201ca 100644
--- a/tests/compiler/dart2js/deferred_loading/data/deferred_fail_and_retry/main.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/deferred_fail_and_retry/main.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that when a deferred import fails to load, it is possible to retry.
 
 import 'lib.dart' deferred as lib;
diff --git a/tests/compiler/dart2js/deferred_loading/data/deferred_function/lib.dart b/tests/compiler/dart2js/deferred_loading/data/deferred_function/lib.dart
index 5f88684..8406ca6 100644
--- a/tests/compiler/dart2js/deferred_loading/data/deferred_function/lib.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/deferred_function/lib.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Imported by main.dart and
 
 library deferred_function_library;
diff --git a/tests/compiler/dart2js/deferred_loading/data/deferred_function/main.dart b/tests/compiler/dart2js/deferred_loading/data/deferred_function/main.dart
index 19a41af..cf774ed 100644
--- a/tests/compiler/dart2js/deferred_loading/data/deferred_function/main.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/deferred_function/main.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that loading of a library (with top-level functions only) can
 // be deferred.
 
diff --git a/tests/compiler/dart2js/deferred_loading/data/deferred_overlapping/deferred_overlapping_lib3.dart b/tests/compiler/dart2js/deferred_loading/data/deferred_overlapping/deferred_overlapping_lib3.dart
index 43a1071..839af93 100644
--- a/tests/compiler/dart2js/deferred_loading/data/deferred_overlapping/deferred_overlapping_lib3.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/deferred_overlapping/deferred_overlapping_lib3.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: C3:OutputUnit(1, {lib1, lib2})*/
 /*member: C3.:OutputUnit(1, {lib1, lib2})*/
 class C3 {}
diff --git a/tests/compiler/dart2js/deferred_loading/data/deferred_overlapping/lib1.dart b/tests/compiler/dart2js/deferred_loading/data/deferred_overlapping/lib1.dart
index 47d7393..6172db7 100644
--- a/tests/compiler/dart2js/deferred_loading/data/deferred_overlapping/lib1.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/deferred_overlapping/lib1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "deferred_overlapping_lib3.dart";
 
 /*class: C1:OutputUnit(2, {lib1})*/
diff --git a/tests/compiler/dart2js/deferred_loading/data/deferred_overlapping/lib2.dart b/tests/compiler/dart2js/deferred_loading/data/deferred_overlapping/lib2.dart
index 10073a0..c8cd0e6 100644
--- a/tests/compiler/dart2js/deferred_loading/data/deferred_overlapping/lib2.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/deferred_overlapping/lib2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "deferred_overlapping_lib3.dart";
 
 /*class: C2:OutputUnit(3, {lib2})*/
diff --git a/tests/compiler/dart2js/deferred_loading/data/deferred_overlapping/main.dart b/tests/compiler/dart2js/deferred_loading/data/deferred_overlapping/main.dart
index ce926d1..b766437 100644
--- a/tests/compiler/dart2js/deferred_loading/data/deferred_overlapping/main.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/deferred_overlapping/main.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'lib1.dart' deferred as lib1;
 import 'lib2.dart' deferred as lib2;
 
diff --git a/tests/compiler/dart2js/deferred_loading/data/deferred_typed_map/lib1.dart b/tests/compiler/dart2js/deferred_loading/data/deferred_typed_map/lib1.dart
index da54242..f5a9c26 100644
--- a/tests/compiler/dart2js/deferred_loading/data/deferred_typed_map/lib1.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/deferred_typed_map/lib1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: M:OutputUnit(1, {lib})*/
 class M {}
 
diff --git a/tests/compiler/dart2js/deferred_loading/data/deferred_typed_map/main.dart b/tests/compiler/dart2js/deferred_loading/data/deferred_typed_map/main.dart
index 109f67e..f31c25c 100644
--- a/tests/compiler/dart2js/deferred_loading/data/deferred_typed_map/main.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/deferred_typed_map/main.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'lib1.dart' deferred as lib;
 
 /*member: main:
diff --git a/tests/compiler/dart2js/deferred_loading/data/deferred_typedef/lib1.dart b/tests/compiler/dart2js/deferred_loading/data/deferred_typedef/lib1.dart
index c219ae7..a5bc5f9 100644
--- a/tests/compiler/dart2js/deferred_loading/data/deferred_typedef/lib1.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/deferred_typedef/lib1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library deferred_typedef_lib1;
 
 /*class: C:OutputUnit(1, {lib1})*/
diff --git a/tests/compiler/dart2js/deferred_loading/data/deferred_typedef/main.dart b/tests/compiler/dart2js/deferred_loading/data/deferred_typedef/main.dart
index b6bd66b..a5bccc8 100644
--- a/tests/compiler/dart2js/deferred_loading/data/deferred_typedef/main.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/deferred_typedef/main.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'lib1.dart' deferred as lib1;
 
 /*member: main:OutputUnit(main, {}),constants=[ConstructedConstant(C(a=TypeConstant(void Function()),b=FunctionConstant(topLevelMethod)))=OutputUnit(1, {lib1}),TypeConstant(void Function())=OutputUnit(1, {lib1})]*/
diff --git a/tests/compiler/dart2js/deferred_loading/data/dont_inline_deferred_constants/exported_main.dart b/tests/compiler/dart2js/deferred_loading/data/dont_inline_deferred_constants/exported_main.dart
index 6a9d208..35834d4 100644
--- a/tests/compiler/dart2js/deferred_loading/data/dont_inline_deferred_constants/exported_main.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/dont_inline_deferred_constants/exported_main.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'lib1.dart' deferred as lib1;
 import 'lib2.dart' deferred as lib2;
 
diff --git a/tests/compiler/dart2js/deferred_loading/data/dont_inline_deferred_constants/lib1.dart b/tests/compiler/dart2js/deferred_loading/data/dont_inline_deferred_constants/lib1.dart
index b0aacb1..8e5690c 100644
--- a/tests/compiler/dart2js/deferred_loading/data/dont_inline_deferred_constants/lib1.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/dont_inline_deferred_constants/lib1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'exported_main.dart' show C;
 import 'exported_main.dart' as main;
 
diff --git a/tests/compiler/dart2js/deferred_loading/data/dont_inline_deferred_constants/lib2.dart b/tests/compiler/dart2js/deferred_loading/data/dont_inline_deferred_constants/lib2.dart
index 050070b..cacae15 100644
--- a/tests/compiler/dart2js/deferred_loading/data/dont_inline_deferred_constants/lib2.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/dont_inline_deferred_constants/lib2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'exported_main.dart' show C;
 import 'exported_main.dart' as main;
 
diff --git a/tests/compiler/dart2js/deferred_loading/data/dont_inline_deferred_constants/main.dart b/tests/compiler/dart2js/deferred_loading/data/dont_inline_deferred_constants/main.dart
index 6afae7d..e55be81 100644
--- a/tests/compiler/dart2js/deferred_loading/data/dont_inline_deferred_constants/main.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/dont_inline_deferred_constants/main.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // TODO(sigmund): remove this indirection and move the main code here. This is
 // needed because of the id-equivalence frameworks overrides the entrypoint URI.
 export 'exported_main.dart';
diff --git a/tests/compiler/dart2js/deferred_loading/data/dont_inline_deferred_global/lib.dart b/tests/compiler/dart2js/deferred_loading/data/dont_inline_deferred_global/lib.dart
index 262c084..18fced0 100644
--- a/tests/compiler/dart2js/deferred_loading/data/dont_inline_deferred_global/lib.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/dont_inline_deferred_global/lib.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: finalVar:OutputUnit(1, {lib})*/
 final finalVar = "string1";
 
diff --git a/tests/compiler/dart2js/deferred_loading/data/dont_inline_deferred_global/main.dart b/tests/compiler/dart2js/deferred_loading/data/dont_inline_deferred_global/main.dart
index 964342f..22cbcb4 100644
--- a/tests/compiler/dart2js/deferred_loading/data/dont_inline_deferred_global/main.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/dont_inline_deferred_global/main.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'lib.dart' deferred as lib;
 
 /*member: main:OutputUnit(main, {})*/
diff --git a/tests/compiler/dart2js/deferred_loading/data/future_or/lib1.dart b/tests/compiler/dart2js/deferred_loading/data/future_or/lib1.dart
index 63d79e5..9c001ff 100644
--- a/tests/compiler/dart2js/deferred_loading/data/future_or/lib1.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/future_or/lib1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'lib2.dart';
 
 const dynamic field = const A();
diff --git a/tests/compiler/dart2js/deferred_loading/data/future_or/lib2.dart b/tests/compiler/dart2js/deferred_loading/data/future_or/lib2.dart
index d8401d3..fde4bbc 100644
--- a/tests/compiler/dart2js/deferred_loading/data/future_or/lib2.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/future_or/lib2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A:OutputUnit(main, {})*/
 class A {
   const A();
diff --git a/tests/compiler/dart2js/deferred_loading/data/future_or/main.dart b/tests/compiler/dart2js/deferred_loading/data/future_or/main.dart
index 9b185a1..deb3dc9 100644
--- a/tests/compiler/dart2js/deferred_loading/data/future_or/main.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/future_or/main.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:async';
 import 'lib1.dart' deferred as lib1;
 import 'lib2.dart' as lib2;
diff --git a/tests/compiler/dart2js/deferred_loading/data/instantiation0/lib1.dart b/tests/compiler/dart2js/deferred_loading/data/instantiation0/lib1.dart
index fee884e..6828e57 100644
--- a/tests/compiler/dart2js/deferred_loading/data/instantiation0/lib1.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/instantiation0/lib1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: getFoo:OutputUnit(1, {b})*/
 T getFoo<T>(T v) => v;
 
diff --git a/tests/compiler/dart2js/deferred_loading/data/instantiation0/main.dart b/tests/compiler/dart2js/deferred_loading/data/instantiation0/main.dart
index aac590a..07c483a 100644
--- a/tests/compiler/dart2js/deferred_loading/data/instantiation0/main.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/instantiation0/main.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test instantiation used only in a deferred library.
 
 /*class: global#Instantiation:OutputUnit(1, {b})*/
diff --git a/tests/compiler/dart2js/deferred_loading/data/instantiation1/lib1.dart b/tests/compiler/dart2js/deferred_loading/data/instantiation1/lib1.dart
index b9d2704..4ca1497 100644
--- a/tests/compiler/dart2js/deferred_loading/data/instantiation1/lib1.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/instantiation1/lib1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: getFoo:OutputUnit(1, {b})*/
 T getFoo<T>(T v) => v;
 
diff --git a/tests/compiler/dart2js/deferred_loading/data/instantiation1/lib2.dart b/tests/compiler/dart2js/deferred_loading/data/instantiation1/lib2.dart
index 3836503..00caeb1 100644
--- a/tests/compiler/dart2js/deferred_loading/data/instantiation1/lib2.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/instantiation1/lib2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: getFoo:OutputUnit(3, {c})*/
 T getFoo<T, S>(T v, S w) => v;
 
diff --git a/tests/compiler/dart2js/deferred_loading/data/instantiation1/main.dart b/tests/compiler/dart2js/deferred_loading/data/instantiation1/main.dart
index 8478533..8f40a89 100644
--- a/tests/compiler/dart2js/deferred_loading/data/instantiation1/main.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/instantiation1/main.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test instantiations with different type argument count used only in two
 // deferred libraries.
 
diff --git a/tests/compiler/dart2js/deferred_loading/data/instantiation2/lib1.dart b/tests/compiler/dart2js/deferred_loading/data/instantiation2/lib1.dart
index 449b9d5..89d5d6d 100644
--- a/tests/compiler/dart2js/deferred_loading/data/instantiation2/lib1.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/instantiation2/lib1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: getFoo:OutputUnit(2, {b})*/
 T getFoo<T>(T v) => v;
 
diff --git a/tests/compiler/dart2js/deferred_loading/data/instantiation2/lib2.dart b/tests/compiler/dart2js/deferred_loading/data/instantiation2/lib2.dart
index 9263737..d7a9c46 100644
--- a/tests/compiler/dart2js/deferred_loading/data/instantiation2/lib2.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/instantiation2/lib2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: getFoo:OutputUnit(3, {c})*/
 T getFoo<T>(T v) => v;
 
diff --git a/tests/compiler/dart2js/deferred_loading/data/instantiation2/main.dart b/tests/compiler/dart2js/deferred_loading/data/instantiation2/main.dart
index b2b6cfc..9c4fb76 100644
--- a/tests/compiler/dart2js/deferred_loading/data/instantiation2/main.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/instantiation2/main.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test instantiations with the same type argument count used only in two
 // deferred libraries.
 
diff --git a/tests/compiler/dart2js/deferred_loading/data/instantiation3/lib1.dart b/tests/compiler/dart2js/deferred_loading/data/instantiation3/lib1.dart
index a49b089..7f641b8 100644
--- a/tests/compiler/dart2js/deferred_loading/data/instantiation3/lib1.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/instantiation3/lib1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: getFoo:OutputUnit(1, {b})*/
 T getFoo<T>(T v) => v;
 
diff --git a/tests/compiler/dart2js/deferred_loading/data/instantiation3/main.dart b/tests/compiler/dart2js/deferred_loading/data/instantiation3/main.dart
index 6d22b9a..dad30c1 100644
--- a/tests/compiler/dart2js/deferred_loading/data/instantiation3/main.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/instantiation3/main.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test instantiation used only in a deferred library.
 
 /*class: global#Instantiation:OutputUnit(1, {b})*/
diff --git a/tests/compiler/dart2js/deferred_loading/data/instantiation4/lib1.dart b/tests/compiler/dart2js/deferred_loading/data/instantiation4/lib1.dart
index a49b089..7f641b8 100644
--- a/tests/compiler/dart2js/deferred_loading/data/instantiation4/lib1.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/instantiation4/lib1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: getFoo:OutputUnit(1, {b})*/
 T getFoo<T>(T v) => v;
 
diff --git a/tests/compiler/dart2js/deferred_loading/data/instantiation4/lib2.dart b/tests/compiler/dart2js/deferred_loading/data/instantiation4/lib2.dart
index 3c506bb..b346bb4 100644
--- a/tests/compiler/dart2js/deferred_loading/data/instantiation4/lib2.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/instantiation4/lib2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: getFoo:OutputUnit(3, {c})*/
 T getFoo<T, S>(T v, S w) => v;
 
diff --git a/tests/compiler/dart2js/deferred_loading/data/instantiation4/main.dart b/tests/compiler/dart2js/deferred_loading/data/instantiation4/main.dart
index 6bcbdc5..302e331 100644
--- a/tests/compiler/dart2js/deferred_loading/data/instantiation4/main.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/instantiation4/main.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test instantiations with different type argument count used only in two
 // deferred libraries.
 
diff --git a/tests/compiler/dart2js/deferred_loading/data/instantiation5/lib1.dart b/tests/compiler/dart2js/deferred_loading/data/instantiation5/lib1.dart
index fc0d440..76cebb1 100644
--- a/tests/compiler/dart2js/deferred_loading/data/instantiation5/lib1.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/instantiation5/lib1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: getFoo:OutputUnit(2, {b})*/
 T getFoo<T>(T v) => v;
 
diff --git a/tests/compiler/dart2js/deferred_loading/data/instantiation5/lib2.dart b/tests/compiler/dart2js/deferred_loading/data/instantiation5/lib2.dart
index a30cb28..ee8d5ab 100644
--- a/tests/compiler/dart2js/deferred_loading/data/instantiation5/lib2.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/instantiation5/lib2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: getFoo:OutputUnit(3, {c})*/
 T getFoo<T>(T v) => v;
 
diff --git a/tests/compiler/dart2js/deferred_loading/data/instantiation5/main.dart b/tests/compiler/dart2js/deferred_loading/data/instantiation5/main.dart
index b3730ff..ba9004e 100644
--- a/tests/compiler/dart2js/deferred_loading/data/instantiation5/main.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/instantiation5/main.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test instantiations with the same type argument count used only in two
 // deferred libraries.
 
diff --git a/tests/compiler/dart2js/deferred_loading/data/shared_constant/lib_a.dart b/tests/compiler/dart2js/deferred_loading/data/shared_constant/lib_a.dart
index a2bd8dc..174c5a5 100644
--- a/tests/compiler/dart2js/deferred_loading/data/shared_constant/lib_a.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/shared_constant/lib_a.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'shared.dart' deferred as s1;
 
 /*member: doA:
diff --git a/tests/compiler/dart2js/deferred_loading/data/shared_constant/lib_b.dart b/tests/compiler/dart2js/deferred_loading/data/shared_constant/lib_b.dart
index aa58162..814bff6 100644
--- a/tests/compiler/dart2js/deferred_loading/data/shared_constant/lib_b.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/shared_constant/lib_b.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'shared.dart' deferred as s2;
 
 /*member: doB:
diff --git a/tests/compiler/dart2js/deferred_loading/data/shared_constant/lib_c.dart b/tests/compiler/dart2js/deferred_loading/data/shared_constant/lib_c.dart
index f6b3783..ffc3796 100644
--- a/tests/compiler/dart2js/deferred_loading/data/shared_constant/lib_c.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/shared_constant/lib_c.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: C:OutputUnit(1, {s1, s2})*/
 class C {
   const C();
diff --git a/tests/compiler/dart2js/deferred_loading/data/shared_constant/main.dart b/tests/compiler/dart2js/deferred_loading/data/shared_constant/main.dart
index 6cdd211..00dffbc 100644
--- a/tests/compiler/dart2js/deferred_loading/data/shared_constant/main.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/shared_constant/main.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Regression test for issue https://github.com/dart-lang/sdk/issues/31306.
 ///
 /// When 1 constant was imported in two libraries by using the same exact
diff --git a/tests/compiler/dart2js/deferred_loading/data/shared_constant/shared.dart b/tests/compiler/dart2js/deferred_loading/data/shared_constant/shared.dart
index 1281b4b..be86a09 100644
--- a/tests/compiler/dart2js/deferred_loading/data/shared_constant/shared.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/shared_constant/shared.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'lib_c.dart';
 
 const constant = const C();
diff --git a/tests/compiler/dart2js/deferred_loading/data/static_separate/lib1.dart b/tests/compiler/dart2js/deferred_loading/data/static_separate/lib1.dart
index 00ab4d3..c9489f7 100644
--- a/tests/compiler/dart2js/deferred_loading/data/static_separate/lib1.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/static_separate/lib1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library lib1;
 
 /*class: ConstClass:OutputUnit(2, {lib1, lib2})*/
diff --git a/tests/compiler/dart2js/deferred_loading/data/static_separate/lib2.dart b/tests/compiler/dart2js/deferred_loading/data/static_separate/lib2.dart
index f5f029d..016ba07 100644
--- a/tests/compiler/dart2js/deferred_loading/data/static_separate/lib2.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/static_separate/lib2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library lib2;
 
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js/deferred_loading/data/static_separate/main.dart b/tests/compiler/dart2js/deferred_loading/data/static_separate/main.dart
index 0ba29ee..eb82cbf 100644
--- a/tests/compiler/dart2js/deferred_loading/data/static_separate/main.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/static_separate/main.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // The class lib1.C is referenced via lib1
 // The static function lib1.C.foo is referenced via lib2
 // Dart2js will put them in separate hunks.
diff --git a/tests/compiler/dart2js/deferred_loading/data/type_argument_dependency/lib1.dart b/tests/compiler/dart2js/deferred_loading/data/type_argument_dependency/lib1.dart
index d905a5e..4ef7683 100644
--- a/tests/compiler/dart2js/deferred_loading/data/type_argument_dependency/lib1.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/type_argument_dependency/lib1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'lib2.dart';
 
 /*member: doCast:OutputUnit(main, {})*/
diff --git a/tests/compiler/dart2js/deferred_loading/data/type_argument_dependency/lib2.dart b/tests/compiler/dart2js/deferred_loading/data/type_argument_dependency/lib2.dart
index 452d66e..bfa82bf 100644
--- a/tests/compiler/dart2js/deferred_loading/data/type_argument_dependency/lib2.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/type_argument_dependency/lib2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A:OutputUnit(main, {})*/
 class A {
   /*member: A.:OutputUnit(1, {c})*/
diff --git a/tests/compiler/dart2js/deferred_loading/data/type_argument_dependency/main.dart b/tests/compiler/dart2js/deferred_loading/data/type_argument_dependency/main.dart
index 1e231be..70024a3 100644
--- a/tests/compiler/dart2js/deferred_loading/data/type_argument_dependency/main.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/type_argument_dependency/main.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'lib1.dart';
 import 'lib2.dart' deferred as c;
 
diff --git a/tests/compiler/dart2js/deferred_loading/data/type_arguments/lib1.dart b/tests/compiler/dart2js/deferred_loading/data/type_arguments/lib1.dart
index a55af13..052d852 100644
--- a/tests/compiler/dart2js/deferred_loading/data/type_arguments/lib1.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/type_arguments/lib1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'lib3.dart';
 
 /*class: A:OutputUnit(1, {lib1})*/
diff --git a/tests/compiler/dart2js/deferred_loading/data/type_arguments/lib2.dart b/tests/compiler/dart2js/deferred_loading/data/type_arguments/lib2.dart
index c7672bb..f2d4c91 100644
--- a/tests/compiler/dart2js/deferred_loading/data/type_arguments/lib2.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/type_arguments/lib2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: C:OutputUnit(main, {})*/
 class C<T> {
   const C();
diff --git a/tests/compiler/dart2js/deferred_loading/data/type_arguments/lib3.dart b/tests/compiler/dart2js/deferred_loading/data/type_arguments/lib3.dart
index c7aad0d..d9e5e24 100644
--- a/tests/compiler/dart2js/deferred_loading/data/type_arguments/lib3.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/type_arguments/lib3.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: E:OutputUnit(3, {lib3})*/
 class E<T> {
   const E();
diff --git a/tests/compiler/dart2js/deferred_loading/data/type_arguments/main.dart b/tests/compiler/dart2js/deferred_loading/data/type_arguments/main.dart
index 2f6795e..d9b4bac 100644
--- a/tests/compiler/dart2js/deferred_loading/data/type_arguments/main.dart
+++ b/tests/compiler/dart2js/deferred_loading/data/type_arguments/main.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'lib1.dart' deferred as lib1;
 import 'lib2.dart' as lib2;
 import 'lib3.dart' deferred as lib3;
diff --git a/tests/compiler/dart2js/deferred_loading/deferred_loading_test.dart b/tests/compiler/dart2js/deferred_loading/deferred_loading_test.dart
index 2a1c31c..96b7600 100644
--- a/tests/compiler/dart2js/deferred_loading/deferred_loading_test.dart
+++ b/tests/compiler/dart2js/deferred_loading/deferred_loading_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:io' hide Link;
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/closure.dart';
diff --git a/tests/compiler/dart2js/end_to_end/all_native_test.dart b/tests/compiler/dart2js/end_to_end/all_native_test.dart
index f85b144..3917078 100644
--- a/tests/compiler/dart2js/end_to_end/all_native_test.dart
+++ b/tests/compiler/dart2js/end_to_end/all_native_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/commandline_options.dart';
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js/end_to_end/async_compiler_input_provider_test.dart b/tests/compiler/dart2js/end_to_end/async_compiler_input_provider_test.dart
index c03dfd1..404b675 100644
--- a/tests/compiler/dart2js/end_to_end/async_compiler_input_provider_test.dart
+++ b/tests/compiler/dart2js/end_to_end/async_compiler_input_provider_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "dart:async";
 import "dart:io";
 
diff --git a/tests/compiler/dart2js/end_to_end/bad_output_io_test.dart b/tests/compiler/dart2js/end_to_end/bad_output_io_test.dart
index ba55341..ccacc18 100644
--- a/tests/compiler/dart2js/end_to_end/bad_output_io_test.dart
+++ b/tests/compiler/dart2js/end_to_end/bad_output_io_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // TODO(johnniwinther): Port this test to use '--use-kernel'.
 
 // Test that the compiler can handle imports when package root has not been set.
diff --git a/tests/compiler/dart2js/end_to_end/command_line_split_test.dart b/tests/compiler/dart2js/end_to_end/command_line_split_test.dart
index f4a2f43..74f41e2 100644
--- a/tests/compiler/dart2js/end_to_end/command_line_split_test.dart
+++ b/tests/compiler/dart2js/end_to_end/command_line_split_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 import 'package:compiler/src/util/command_line.dart';
 
diff --git a/tests/compiler/dart2js/end_to_end/command_line_test.dart b/tests/compiler/dart2js/end_to_end/command_line_test.dart
index 076b918..57d4161 100644
--- a/tests/compiler/dart2js/end_to_end/command_line_test.dart
+++ b/tests/compiler/dart2js/end_to_end/command_line_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test the command line options of dart2js.
 
 import 'dart:async';
diff --git a/tests/compiler/dart2js/end_to_end/dart2js_batch2_test.dart b/tests/compiler/dart2js/end_to_end/dart2js_batch2_test.dart
index 96717ad..0f00751 100644
--- a/tests/compiler/dart2js/end_to_end/dart2js_batch2_test.dart
+++ b/tests/compiler/dart2js/end_to_end/dart2js_batch2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:async';
 import 'dart:convert';
 import 'dart:io';
diff --git a/tests/compiler/dart2js/end_to_end/dart2js_batch_test.dart b/tests/compiler/dart2js/end_to_end/dart2js_batch_test.dart
index 9447b3a..ade191a 100644
--- a/tests/compiler/dart2js/end_to_end/dart2js_batch_test.dart
+++ b/tests/compiler/dart2js/end_to_end/dart2js_batch_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:async';
 import 'dart:convert';
 import 'dart:io';
diff --git a/tests/compiler/dart2js/end_to_end/data/dart2js_batch2_run.dart b/tests/compiler/dart2js/end_to_end/data/dart2js_batch2_run.dart
index e63be3b..6dee480 100644
--- a/tests/compiler/dart2js/end_to_end/data/dart2js_batch2_run.dart
+++ b/tests/compiler/dart2js/end_to_end/data/dart2js_batch2_run.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // ignore: UNDEFINED_ANNOTATION
 @notExisting
 var x;
diff --git a/tests/compiler/dart2js/end_to_end/data/hello_world.dart b/tests/compiler/dart2js/end_to_end/data/hello_world.dart
index 3e3c4d4..435410d 100644
--- a/tests/compiler/dart2js/end_to_end/data/hello_world.dart
+++ b/tests/compiler/dart2js/end_to_end/data/hello_world.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   print("Hello World!");
 }
diff --git a/tests/compiler/dart2js/end_to_end/diagnostic_reporter_helper.dart b/tests/compiler/dart2js/end_to_end/diagnostic_reporter_helper.dart
index a04734f..15fb27e 100644
--- a/tests/compiler/dart2js/end_to_end/diagnostic_reporter_helper.dart
+++ b/tests/compiler/dart2js/end_to_end/diagnostic_reporter_helper.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library dart2js.diagnostic_reporter.helper;
 
 import 'package:compiler/src/diagnostics/diagnostic_listener.dart';
diff --git a/tests/compiler/dart2js/end_to_end/dill_loader_test.dart b/tests/compiler/dart2js/end_to_end/dill_loader_test.dart
index 92ea4ef..81cbfb7 100644
--- a/tests/compiler/dart2js/end_to_end/dill_loader_test.dart
+++ b/tests/compiler/dart2js/end_to_end/dill_loader_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import '../helpers/memory_compiler.dart';
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/apiimpl.dart' show CompilerImpl;
diff --git a/tests/compiler/dart2js/end_to_end/dump_info2_test.dart b/tests/compiler/dart2js/end_to_end/dump_info2_test.dart
index 7d27bf0..d7c74d6 100644
--- a/tests/compiler/dart2js/end_to_end/dump_info2_test.dart
+++ b/tests/compiler/dart2js/end_to_end/dump_info2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:convert';
 
 import 'package:compiler/compiler_new.dart';
diff --git a/tests/compiler/dart2js/end_to_end/dump_info_test.dart b/tests/compiler/dart2js/end_to_end/dump_info_test.dart
index 19a4cfe..642bb2d 100644
--- a/tests/compiler/dart2js/end_to_end/dump_info_test.dart
+++ b/tests/compiler/dart2js/end_to_end/dump_info_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that dump-info has no effect on the compiler output.
 
 import 'dart:io';
diff --git a/tests/compiler/dart2js/end_to_end/exit_code_test.dart b/tests/compiler/dart2js/end_to_end/exit_code_test.dart
index 969a3fe..4a045ee 100644
--- a/tests/compiler/dart2js/end_to_end/exit_code_test.dart
+++ b/tests/compiler/dart2js/end_to_end/exit_code_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test the exit code of dart2js in case of exceptions, errors, warnings, etc.
 
 import 'dart:async';
diff --git a/tests/compiler/dart2js/end_to_end/generate_code_with_compile_time_errors_test.dart b/tests/compiler/dart2js/end_to_end/generate_code_with_compile_time_errors_test.dart
index 8521dd5..d195707 100644
--- a/tests/compiler/dart2js/end_to_end/generate_code_with_compile_time_errors_test.dart
+++ b/tests/compiler/dart2js/end_to_end/generate_code_with_compile_time_errors_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that the compiler can generates code with compile time error according
 // to the compiler options.
 
diff --git a/tests/compiler/dart2js/end_to_end/launch_helper.dart b/tests/compiler/dart2js/end_to_end/launch_helper.dart
index 4e4df85..7d5a2c5 100644
--- a/tests/compiler/dart2js/end_to_end/launch_helper.dart
+++ b/tests/compiler/dart2js/end_to_end/launch_helper.dart
@@ -1,3 +1,9 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
+
 import 'dart:async';
 import 'dart:io';
 import 'package:path/path.dart' as path;
diff --git a/tests/compiler/dart2js/end_to_end/library_env_test.dart b/tests/compiler/dart2js/end_to_end/library_env_test.dart
index 45421c4..996bedf 100644
--- a/tests/compiler/dart2js/end_to_end/library_env_test.dart
+++ b/tests/compiler/dart2js/end_to_end/library_env_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Check that 'dart:' libraries have their corresponding dart.library.X
 /// environment variable set.
 
diff --git a/tests/compiler/dart2js/end_to_end/modular_loader_test.dart b/tests/compiler/dart2js/end_to_end/modular_loader_test.dart
index 1f79ed0..506d5de 100644
--- a/tests/compiler/dart2js/end_to_end/modular_loader_test.dart
+++ b/tests/compiler/dart2js/end_to_end/modular_loader_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import '../helpers/memory_compiler.dart';
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/apiimpl.dart' show CompilerImpl;
diff --git a/tests/compiler/dart2js/end_to_end/no_platform_test.dart b/tests/compiler/dart2js/end_to_end/no_platform_test.dart
index cf6766d..5699366 100644
--- a/tests/compiler/dart2js/end_to_end/no_platform_test.dart
+++ b/tests/compiler/dart2js/end_to_end/no_platform_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
 import 'package:compiler/src/kernel/dart2js_target.dart' show Dart2jsTarget;
diff --git a/tests/compiler/dart2js/end_to_end/output_type_test.dart b/tests/compiler/dart2js/end_to_end/output_type_test.dart
index 93726a9..150e8f4 100644
--- a/tests/compiler/dart2js/end_to_end/output_type_test.dart
+++ b/tests/compiler/dart2js/end_to_end/output_type_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Test that the expected output targets are generated for various compiler
 /// options.
 
diff --git a/tests/compiler/dart2js/end_to_end/show_package_warnings_test.dart b/tests/compiler/dart2js/end_to_end/show_package_warnings_test.dart
index 3811a01..dd7c73b 100644
--- a/tests/compiler/dart2js/end_to_end/show_package_warnings_test.dart
+++ b/tests/compiler/dart2js/end_to_end/show_package_warnings_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that the '--show-package-warnings' option works as intended.
 
 import 'dart:async';
diff --git a/tests/compiler/dart2js/end_to_end/user_crash_test.dart b/tests/compiler/dart2js/end_to_end/user_crash_test.dart
index 1f21642..3154873 100644
--- a/tests/compiler/dart2js/end_to_end/user_crash_test.dart
+++ b/tests/compiler/dart2js/end_to_end/user_crash_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:async';
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js/equivalence/check_functions.dart b/tests/compiler/dart2js/equivalence/check_functions.dart
index 149894a..0059119 100644
--- a/tests/compiler/dart2js/equivalence/check_functions.dart
+++ b/tests/compiler/dart2js/equivalence/check_functions.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Equivalence test functions for data objects.
 
 library dart2js.equivalence.functions;
diff --git a/tests/compiler/dart2js/equivalence/check_helpers.dart b/tests/compiler/dart2js/equivalence/check_helpers.dart
index 08e6379..ea9cf9b 100644
--- a/tests/compiler/dart2js/equivalence/check_helpers.dart
+++ b/tests/compiler/dart2js/equivalence/check_helpers.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// General equivalence test functions.
 
 library dart2js.equivalence.helpers;
diff --git a/tests/compiler/dart2js/equivalence/id_equivalence.dart b/tests/compiler/dart2js/equivalence/id_equivalence.dart
index a78c587..31ece9d 100644
--- a/tests/compiler/dart2js/equivalence/id_equivalence.dart
+++ b/tests/compiler/dart2js/equivalence/id_equivalence.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:_fe_analyzer_shared/src/testing/id.dart';
 import 'package:compiler/src/common.dart';
 import 'package:compiler/src/ir/util.dart';
diff --git a/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart b/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart
index 341dd6e..20e6173 100644
--- a/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart
+++ b/tests/compiler/dart2js/equivalence/id_equivalence_helper.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:async';
 import 'dart:io';
 
diff --git a/tests/compiler/dart2js/equivalence/id_testing_test.dart b/tests/compiler/dart2js/equivalence/id_testing_test.dart
index e8c4022..bf8b007 100644
--- a/tests/compiler/dart2js/equivalence/id_testing_test.dart
+++ b/tests/compiler/dart2js/equivalence/id_testing_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:io';
 import 'package:_fe_analyzer_shared/src/testing/id_testing.dart';
 import 'package:async_helper/async_helper.dart';
diff --git a/tests/compiler/dart2js/equivalence/show_helper.dart b/tests/compiler/dart2js/equivalence/show_helper.dart
index eb9a4f3..754f2e2 100644
--- a/tests/compiler/dart2js/equivalence/show_helper.dart
+++ b/tests/compiler/dart2js/equivalence/show_helper.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Helper program that shows the equivalence-based data on a dart program.
 
 import 'dart:io';
diff --git a/tests/compiler/dart2js/field_analysis/jdata/constant_fields.dart b/tests/compiler/dart2js/field_analysis/jdata/constant_fields.dart
index c25d59e..4c7031d 100644
--- a/tests/compiler/dart2js/field_analysis/jdata/constant_fields.dart
+++ b/tests/compiler/dart2js/field_analysis/jdata/constant_fields.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   print(const Class1().field1);
   print(const Class2(field2: true).field2);
diff --git a/tests/compiler/dart2js/field_analysis/jdata/dynamic_set.dart b/tests/compiler/dart2js/field_analysis/jdata/dynamic_set.dart
index fad3d3b..6548d67 100644
--- a/tests/compiler/dart2js/field_analysis/jdata/dynamic_set.dart
+++ b/tests/compiler/dart2js/field_analysis/jdata/dynamic_set.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   method1(new Class1a());
   method2(new Class2a<int>());
diff --git a/tests/compiler/dart2js/field_analysis/jdata/effectively_constant_state.dart b/tests/compiler/dart2js/field_analysis/jdata/effectively_constant_state.dart
index 22c3126..1bb9851 100644
--- a/tests/compiler/dart2js/field_analysis/jdata/effectively_constant_state.dart
+++ b/tests/compiler/dart2js/field_analysis/jdata/effectively_constant_state.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 enum Enum {
   a,
 
diff --git a/tests/compiler/dart2js/field_analysis/jdata/multi_initializers.dart b/tests/compiler/dart2js/field_analysis/jdata/multi_initializers.dart
index f56c73f..fd6efb2 100644
--- a/tests/compiler/dart2js/field_analysis/jdata/multi_initializers.dart
+++ b/tests/compiler/dart2js/field_analysis/jdata/multi_initializers.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   var c = new Class1.a();
   c.field3a = null;
diff --git a/tests/compiler/dart2js/field_analysis/jdata/optional_parameters.dart b/tests/compiler/dart2js/field_analysis/jdata/optional_parameters.dart
index 3e0cbf5..1cc064b 100644
--- a/tests/compiler/dart2js/field_analysis/jdata/optional_parameters.dart
+++ b/tests/compiler/dart2js/field_analysis/jdata/optional_parameters.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   var c1a = new Class1a(0);
   new Class1a(0, 1);
diff --git a/tests/compiler/dart2js/field_analysis/jdata/regress_36222.dart b/tests/compiler/dart2js/field_analysis/jdata/regress_36222.dart
index a719c2e..2fcbc02 100644
--- a/tests/compiler/dart2js/field_analysis/jdata/regress_36222.dart
+++ b/tests/compiler/dart2js/field_analysis/jdata/regress_36222.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 typedef int BinaryFunc(int x, int y);
 
 class A {
diff --git a/tests/compiler/dart2js/field_analysis/jdata/simple_initializers.dart b/tests/compiler/dart2js/field_analysis/jdata/simple_initializers.dart
index 0a7fe28..63c45ec 100644
--- a/tests/compiler/dart2js/field_analysis/jdata/simple_initializers.dart
+++ b/tests/compiler/dart2js/field_analysis/jdata/simple_initializers.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   use1(new Class1());
   use2(new Class2());
diff --git a/tests/compiler/dart2js/field_analysis/jdata/static_initializers.dart b/tests/compiler/dart2js/field_analysis/jdata/static_initializers.dart
index 831dd9c..1b4fdf6 100644
--- a/tests/compiler/dart2js/field_analysis/jdata/static_initializers.dart
+++ b/tests/compiler/dart2js/field_analysis/jdata/static_initializers.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   print(field1a);
   print(field1b);
diff --git a/tests/compiler/dart2js/field_analysis/jdata/unused_constructors.dart b/tests/compiler/dart2js/field_analysis/jdata/unused_constructors.dart
index cc189f1..848d3c1 100644
--- a/tests/compiler/dart2js/field_analysis/jdata/unused_constructors.dart
+++ b/tests/compiler/dart2js/field_analysis/jdata/unused_constructors.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class Class1 {
   /*member: Class1.field:constant=IntConstant(87)*/
   final int field;
diff --git a/tests/compiler/dart2js/field_analysis/jfield_analysis_test.dart b/tests/compiler/dart2js/field_analysis/jfield_analysis_test.dart
index 55f3014..e301643 100644
--- a/tests/compiler/dart2js/field_analysis/jfield_analysis_test.dart
+++ b/tests/compiler/dart2js/field_analysis/jfield_analysis_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:io';
 import 'package:_fe_analyzer_shared/src/testing/features.dart';
 import 'package:async_helper/async_helper.dart';
diff --git a/tests/compiler/dart2js/field_analysis/kdata/constant_fields.dart b/tests/compiler/dart2js/field_analysis/kdata/constant_fields.dart
index a8fd083..6adc061 100644
--- a/tests/compiler/dart2js/field_analysis/kdata/constant_fields.dart
+++ b/tests/compiler/dart2js/field_analysis/kdata/constant_fields.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   print(const Class1().field1);
   print(const Class2(field2: true).field2);
diff --git a/tests/compiler/dart2js/field_analysis/kdata/multi_initializers.dart b/tests/compiler/dart2js/field_analysis/kdata/multi_initializers.dart
index e00b39c..0c09f02 100644
--- a/tests/compiler/dart2js/field_analysis/kdata/multi_initializers.dart
+++ b/tests/compiler/dart2js/field_analysis/kdata/multi_initializers.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   new Class1.a();
   new Class1.b();
diff --git a/tests/compiler/dart2js/field_analysis/kdata/optional_parameters.dart b/tests/compiler/dart2js/field_analysis/kdata/optional_parameters.dart
index 8a9d632..b31c78a 100644
--- a/tests/compiler/dart2js/field_analysis/kdata/optional_parameters.dart
+++ b/tests/compiler/dart2js/field_analysis/kdata/optional_parameters.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   new Class1(0);
   new Class1(0, 1);
diff --git a/tests/compiler/dart2js/field_analysis/kdata/regress_36222.dart b/tests/compiler/dart2js/field_analysis/kdata/regress_36222.dart
index 2641396..4341b32 100644
--- a/tests/compiler/dart2js/field_analysis/kdata/regress_36222.dart
+++ b/tests/compiler/dart2js/field_analysis/kdata/regress_36222.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 typedef int BinaryFunc(int x, int y);
 
 class A {
diff --git a/tests/compiler/dart2js/field_analysis/kdata/side_effects.dart b/tests/compiler/dart2js/field_analysis/kdata/side_effects.dart
index e65028c..129a600 100644
--- a/tests/compiler/dart2js/field_analysis/kdata/side_effects.dart
+++ b/tests/compiler/dart2js/field_analysis/kdata/side_effects.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   new Class1();
 }
diff --git a/tests/compiler/dart2js/field_analysis/kdata/simple_initializers.dart b/tests/compiler/dart2js/field_analysis/kdata/simple_initializers.dart
index 24d5f93..929cb4c 100644
--- a/tests/compiler/dart2js/field_analysis/kdata/simple_initializers.dart
+++ b/tests/compiler/dart2js/field_analysis/kdata/simple_initializers.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   new Class1();
   new Class2();
diff --git a/tests/compiler/dart2js/field_analysis/kdata/static_initializers.dart b/tests/compiler/dart2js/field_analysis/kdata/static_initializers.dart
index 9da6e56..c8f2471 100644
--- a/tests/compiler/dart2js/field_analysis/kdata/static_initializers.dart
+++ b/tests/compiler/dart2js/field_analysis/kdata/static_initializers.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   print(field1a);
   print(field1b);
diff --git a/tests/compiler/dart2js/field_analysis/kfield_analysis_test.dart b/tests/compiler/dart2js/field_analysis/kfield_analysis_test.dart
index 7e3d8de..3a8f113 100644
--- a/tests/compiler/dart2js/field_analysis/kfield_analysis_test.dart
+++ b/tests/compiler/dart2js/field_analysis/kfield_analysis_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:io';
 import 'package:_fe_analyzer_shared/src/testing/features.dart';
 import 'package:async_helper/async_helper.dart';
diff --git a/tests/compiler/dart2js/generic_methods/function_type_variable_test.dart b/tests/compiler/dart2js/generic_methods/function_type_variable_test.dart
index a8cfd0e..b82a36d1 100644
--- a/tests/compiler/dart2js/generic_methods/function_type_variable_test.dart
+++ b/tests/compiler/dart2js/generic_methods/function_type_variable_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/elements/types.dart';
diff --git a/tests/compiler/dart2js/generic_methods/generic_method_test.dart b/tests/compiler/dart2js/generic_methods/generic_method_test.dart
index 76ef8a7..e9cd93a 100644
--- a/tests/compiler/dart2js/generic_methods/generic_method_test.dart
+++ b/tests/compiler/dart2js/generic_methods/generic_method_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/commandline_options.dart';
 import 'package:compiler/src/common_elements.dart';
diff --git a/tests/compiler/dart2js/generic_methods/generic_method_type_test.dart b/tests/compiler/dart2js/generic_methods/generic_method_type_test.dart
index 410f5fc..ef4dfc5 100644
--- a/tests/compiler/dart2js/generic_methods/generic_method_type_test.dart
+++ b/tests/compiler/dart2js/generic_methods/generic_method_type_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/elements/types.dart';
diff --git a/tests/compiler/dart2js/generic_methods/instantiation_stub_test.dart b/tests/compiler/dart2js/generic_methods/instantiation_stub_test.dart
index f8c3281..8c9f5fe 100644
--- a/tests/compiler/dart2js/generic_methods/instantiation_stub_test.dart
+++ b/tests/compiler/dart2js/generic_methods/instantiation_stub_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/commandline_options.dart';
 import 'package:compiler/src/compiler.dart';
diff --git a/tests/compiler/dart2js/generic_methods/world_test.dart b/tests/compiler/dart2js/generic_methods/world_test.dart
index d0edbe1..05cf5da 100644
--- a/tests/compiler/dart2js/generic_methods/world_test.dart
+++ b/tests/compiler/dart2js/generic_methods/world_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/universe/call_structure.dart';
diff --git a/tests/compiler/dart2js/helpers/args_helper.dart b/tests/compiler/dart2js/helpers/args_helper.dart
index 0a63876..b4b4883 100644
--- a/tests/compiler/dart2js/helpers/args_helper.dart
+++ b/tests/compiler/dart2js/helpers/args_helper.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:_fe_analyzer_shared/src/util/filenames.dart';
 import 'package:args/args.dart';
 import 'package:compiler/src/commandline_options.dart';
diff --git a/tests/compiler/dart2js/helpers/compiler_helper.dart b/tests/compiler/dart2js/helpers/compiler_helper.dart
index c19cda5..9c40a59 100644
--- a/tests/compiler/dart2js/helpers/compiler_helper.dart
+++ b/tests/compiler/dart2js/helpers/compiler_helper.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library compiler_helper;
 
 import 'dart:async';
diff --git a/tests/compiler/dart2js/helpers/d8_helper.dart b/tests/compiler/dart2js/helpers/d8_helper.dart
index f358775..50edff3 100644
--- a/tests/compiler/dart2js/helpers/d8_helper.dart
+++ b/tests/compiler/dart2js/helpers/d8_helper.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Partial test that the closed world computed from [WorldImpact]s derived from
 // kernel is equivalent to the original computed from resolution.
 library dart2js.kernel.compiler_helper;
diff --git a/tests/compiler/dart2js/helpers/diagnostic_helper.dart b/tests/compiler/dart2js/helpers/diagnostic_helper.dart
index d45306a..68a34ff 100644
--- a/tests/compiler/dart2js/helpers/diagnostic_helper.dart
+++ b/tests/compiler/dart2js/helpers/diagnostic_helper.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library dart2js.test.diagnostic_helper;
 
 import 'dart:collection';
diff --git a/tests/compiler/dart2js/helpers/element_lookup.dart b/tests/compiler/dart2js/helpers/element_lookup.dart
index a0c97ba..e72f0f6 100644
--- a/tests/compiler/dart2js/helpers/element_lookup.dart
+++ b/tests/compiler/dart2js/helpers/element_lookup.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:compiler/src/common_elements.dart' show JElementEnvironment;
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/elements/types.dart';
diff --git a/tests/compiler/dart2js/helpers/ir_types.dart b/tests/compiler/dart2js/helpers/ir_types.dart
index 64f44a4..a777fab 100644
--- a/tests/compiler/dart2js/helpers/ir_types.dart
+++ b/tests/compiler/dart2js/helpers/ir_types.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:kernel/ast.dart' as ir;
 import 'package:kernel/class_hierarchy.dart' as ir;
 import 'package:kernel/core_types.dart' as ir;
diff --git a/tests/compiler/dart2js/helpers/link_helper.dart b/tests/compiler/dart2js/helpers/link_helper.dart
index 53d20d4..2290e63 100644
--- a/tests/compiler/dart2js/helpers/link_helper.dart
+++ b/tests/compiler/dart2js/helpers/link_helper.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library link_helper;
 
 import 'package:_fe_analyzer_shared/src/util/link.dart';
diff --git a/tests/compiler/dart2js/helpers/memory_compiler.dart b/tests/compiler/dart2js/helpers/memory_compiler.dart
index 4f7b01f..fb7a7da 100644
--- a/tests/compiler/dart2js/helpers/memory_compiler.dart
+++ b/tests/compiler/dart2js/helpers/memory_compiler.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library dart2js.test.memory_compiler;
 
 import 'dart:async';
diff --git a/tests/compiler/dart2js/helpers/memory_source_file_helper.dart b/tests/compiler/dart2js/helpers/memory_source_file_helper.dart
index 7fada85..865d20e 100644
--- a/tests/compiler/dart2js/helpers/memory_source_file_helper.dart
+++ b/tests/compiler/dart2js/helpers/memory_source_file_helper.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library dart2js.test.memory_source_file_helper;
 
 import 'dart:async' show Future;
diff --git a/tests/compiler/dart2js/helpers/output_collector.dart b/tests/compiler/dart2js/helpers/output_collector.dart
index 30b62be..3b47963 100644
--- a/tests/compiler/dart2js/helpers/output_collector.dart
+++ b/tests/compiler/dart2js/helpers/output_collector.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Output provider that collects the output in string buffers.
 
 library output_collector;
diff --git a/tests/compiler/dart2js/helpers/program_lookup.dart b/tests/compiler/dart2js/helpers/program_lookup.dart
index 54124aa..0ded799 100644
--- a/tests/compiler/dart2js/helpers/program_lookup.dart
+++ b/tests/compiler/dart2js/helpers/program_lookup.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:compiler/src/common_elements.dart';
 import 'package:compiler/src/deferred_load.dart';
diff --git a/tests/compiler/dart2js/helpers/shared_helper.dart b/tests/compiler/dart2js/helpers/shared_helper.dart
index 7f69eda..65ca216 100644
--- a/tests/compiler/dart2js/helpers/shared_helper.dart
+++ b/tests/compiler/dart2js/helpers/shared_helper.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:compiler/src/constants/values.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/elements/types.dart';
diff --git a/tests/compiler/dart2js/helpers/stats_test.dart b/tests/compiler/dart2js/helpers/stats_test.dart
index 9254ee9..af0e96a 100644
--- a/tests/compiler/dart2js/helpers/stats_test.dart
+++ b/tests/compiler/dart2js/helpers/stats_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:compiler/src/helpers/helpers.dart';
 
diff --git a/tests/compiler/dart2js/helpers/text_helpers.dart b/tests/compiler/dart2js/helpers/text_helpers.dart
index e9723d2..cab50ac 100644
--- a/tests/compiler/dart2js/helpers/text_helpers.dart
+++ b/tests/compiler/dart2js/helpers/text_helpers.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Compares [text1] and [text2] line-by-line. If a mismatch is found, a diff
 /// of the [windowSize] lines before and after are printed and the mismatch line
 /// number is returned. If identical, nothing is printed and `null` is returned.
diff --git a/tests/compiler/dart2js/helpers/type_test_helper.dart b/tests/compiler/dart2js/helpers/type_test_helper.dart
index 35b4dbe..92ce751 100644
--- a/tests/compiler/dart2js/helpers/type_test_helper.dart
+++ b/tests/compiler/dart2js/helpers/type_test_helper.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library type_test_helper;
 
 import 'dart:async';
diff --git a/tests/compiler/dart2js/impact/data/as.dart b/tests/compiler/dart2js/impact/data/as.dart
index 80bbc69f..059a86a 100644
--- a/tests/compiler/dart2js/impact/data/as.dart
+++ b/tests/compiler/dart2js/impact/data/as.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:static=[explicitAs(1),implicitAs(1),promoted(1)],type=[inst:JSNull]*/
 main() {
   explicitAs(null);
@@ -9,14 +11,14 @@
   promoted(null);
 }
 
-/*member: explicitAs:dynamic=[String.length],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:String]*/
+/*member: explicitAs:dynamic=[String.length],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:String]*/
 explicitAs(String i) {
   i.length;
   // ignore: unnecessary_cast
   return i as String;
 }
 
-/*member: implicitAs:dynamic=[String.length],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:String]*/
+/*member: implicitAs:dynamic=[String.length],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:String]*/
 String implicitAs(String i) {
   dynamic j = i;
   i.length;
@@ -24,7 +26,7 @@
   return j;
 }
 
-/*member: promoted:dynamic=[String.length],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,is:String]*/
+/*member: promoted:dynamic=[String.length],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,is:String]*/
 String promoted(dynamic i) {
   if (i is! String) return null;
   i.length;
diff --git a/tests/compiler/dart2js/impact/data/async.dart b/tests/compiler/dart2js/impact/data/async.dart
index 41172c1..2cc6b7d 100644
--- a/tests/compiler/dart2js/impact/data/async.dart
+++ b/tests/compiler/dart2js/impact/data/async.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:
  static=[
   testAnonymousAsync(0),
@@ -217,13 +219,13 @@
   return () async* {};
 }
 
-/*member: testAsyncForIn:dynamic=[_StreamIterator.cancel(0),_StreamIterator.current,_StreamIterator.moveNext(0)],static=[Rti._bind(1),Rti._eval(1),StreamIterator.(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_asyncAwait(2),_asyncRethrow(2),_asyncReturn(2),_asyncStartSync(2),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),_makeAsyncAwaitCompleter<dynamic>(0),_wrapJsFunctionForAsync(1),findType(1),instanceType(1)],type=[impl:Stream<dynamic>,inst:Closure,inst:JSBool,inst:JSNull,inst:Null]*/
+/*member: testAsyncForIn:dynamic=[_StreamIterator.cancel(0),_StreamIterator.current,_StreamIterator.moveNext(0)],static=[Rti._bind(1),Rti._eval(1),StreamIterator.(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_asyncAwait(2),_asyncRethrow(2),_asyncReturn(2),_asyncStartSync(2),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),_makeAsyncAwaitCompleter<dynamic>(0),_wrapJsFunctionForAsync(1),findType(1),instanceType(1)],type=[impl:Stream<dynamic>,inst:Closure,inst:JSBool,inst:JSNull,inst:Null]*/
 testAsyncForIn(o) async {
   // ignore: UNUSED_LOCAL_VARIABLE
   await for (var e in o) {}
 }
 
-/*member: testAsyncForInTyped:dynamic=[_StreamIterator.cancel(0),_StreamIterator.current,_StreamIterator.moveNext(0)],static=[Rti._bind(1),Rti._eval(1),StreamIterator.(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_asyncAwait(2),_asyncRethrow(2),_asyncReturn(2),_asyncStartSync(2),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),_makeAsyncAwaitCompleter<dynamic>(0),_wrapJsFunctionForAsync(1),findType(1),instanceType(1)],type=[impl:Stream<dynamic>,impl:int,inst:Closure,inst:JSBool,inst:JSNull,inst:Null]*/
+/*member: testAsyncForInTyped:dynamic=[_StreamIterator.cancel(0),_StreamIterator.current,_StreamIterator.moveNext(0)],static=[Rti._bind(1),Rti._eval(1),StreamIterator.(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_asyncAwait(2),_asyncRethrow(2),_asyncReturn(2),_asyncStartSync(2),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),_makeAsyncAwaitCompleter<dynamic>(0),_wrapJsFunctionForAsync(1),findType(1),instanceType(1)],type=[impl:Stream<dynamic>,impl:int,inst:Closure,inst:JSBool,inst:JSNull,inst:Null]*/
 testAsyncForInTyped(o) async {
   // ignore: UNUSED_LOCAL_VARIABLE
   await for (int e in o) {}
diff --git a/tests/compiler/dart2js/impact/data/classes.dart b/tests/compiler/dart2js/impact/data/classes.dart
index 925f979..09be0cd 100644
--- a/tests/compiler/dart2js/impact/data/classes.dart
+++ b/tests/compiler/dart2js/impact/data/classes.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:
  static=[
   testAbstractClassWithField(0),
@@ -137,7 +139,7 @@
 testForwardingConstructor() => new ForwardingConstructorClass(null);
 
 class ForwardingConstructorTypedSuperClass {
-  /*member: ForwardingConstructorTypedSuperClass.:static=[Object.(0),Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:int]*/
+  /*member: ForwardingConstructorTypedSuperClass.:static=[Object.(0),Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:int]*/
   ForwardingConstructorTypedSuperClass(int arg);
 }
 
@@ -151,7 +153,7 @@
 testForwardingConstructorTyped() => new ForwardingConstructorTypedClass(null);
 
 class ForwardingConstructorGenericSuperClass<T> {
-  /*member: ForwardingConstructorGenericSuperClass.:static=[Object.(0),Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),checkSubtypeOfRuntimeType(2),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,param:ForwardingConstructorGenericSuperClass.T]*/
+  /*member: ForwardingConstructorGenericSuperClass.:static=[Object.(0),Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),checkSubtypeOfRuntimeType(2),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,param:ForwardingConstructorGenericSuperClass.T]*/
   ForwardingConstructorGenericSuperClass(T arg);
 }
 
@@ -181,7 +183,7 @@
 */
 testEnum() => Enum.A;
 
-/*member: staticGenericMethod:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),checkSubtypeOfRuntimeType(2),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,inst:List<staticGenericMethod.T>,param:Object,param:staticGenericMethod.T]*/
+/*member: staticGenericMethod:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),checkSubtypeOfRuntimeType(2),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,inst:List<staticGenericMethod.T>,param:Object,param:staticGenericMethod.T]*/
 List<T> staticGenericMethod<T>(T arg) => [arg];
 
 /*member: testStaticGenericMethod:
@@ -228,7 +230,7 @@
 class GenericClass<X, Y> {
   const GenericClass.generative();
 
-  /*member: GenericClass.genericMethod:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),checkSubtypeOfRuntimeType(2),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,inst:Map<GenericClass.X,genericMethod.T>,param:Object,param:genericMethod.T]*/
+  /*member: GenericClass.genericMethod:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),checkSubtypeOfRuntimeType(2),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,inst:Map<GenericClass.X,genericMethod.T>,param:Object,param:genericMethod.T]*/
   Map<X, T> genericMethod<T>(T arg) => {null: arg};
 }
 
diff --git a/tests/compiler/dart2js/impact/data/constants/lib.dart b/tests/compiler/dart2js/impact/data/constants/lib.dart
index 5e0bb96..1eeb5d1 100644
--- a/tests/compiler/dart2js/impact/data/constants/lib.dart
+++ b/tests/compiler/dart2js/impact/data/constants/lib.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 const dynamic nullLiteralField = null;
 
 const dynamic boolLiteralField = true;
@@ -42,7 +44,7 @@
 
 const typeLiteralField = String;
 
-/*member: id:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),checkSubtypeOfRuntimeType(2),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,param:Object,param:id.T]*/
+/*member: id:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),checkSubtypeOfRuntimeType(2),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,param:Object,param:id.T]*/
 T id<T>(T t) => t;
 
 const int Function(int) _instantiation = id;
diff --git a/tests/compiler/dart2js/impact/data/constants/main.dart b/tests/compiler/dart2js/impact/data/constants/main.dart
index 81913aa..1b959de 100644
--- a/tests/compiler/dart2js/impact/data/constants/main.dart
+++ b/tests/compiler/dart2js/impact/data/constants/main.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'lib.dart';
 import 'lib.dart' deferred as defer;
 
diff --git a/tests/compiler/dart2js/impact/data/constructors.dart b/tests/compiler/dart2js/impact/data/constructors.dart
index a56a258..c3262ba 100644
--- a/tests/compiler/dart2js/impact/data/constructors.dart
+++ b/tests/compiler/dart2js/impact/data/constructors.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:
  static=[
   testConstRedirectingFactoryInvoke(0),
@@ -152,7 +154,7 @@
   /*member: GenericClass.generative:static=[Object.(0)]*/
   const GenericClass.generative();
 
-  /*member: GenericClass.fact:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Object]*/
+  /*member: GenericClass.fact:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Object]*/
   factory GenericClass.fact() => null;
 
   const factory GenericClass.redirect() = GenericClass<X, Y>.generative;
diff --git a/tests/compiler/dart2js/impact/data/effectively_final.dart b/tests/compiler/dart2js/impact/data/effectively_final.dart
index 281b098..9384140 100644
--- a/tests/compiler/dart2js/impact/data/effectively_final.dart
+++ b/tests/compiler/dart2js/impact/data/effectively_final.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:
  static=[
   effectivelyFinalList(0),
@@ -67,7 +69,7 @@
 /*member: _method1:type=[inst:JSNull]*/
 num _method1() => null;
 
-/*member: effectivelyFinalPromoted:dynamic=[int.+,num.+],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),_method1(0),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSDouble,inst:JSInt,inst:JSNumber,inst:JSPositiveInt,inst:JSUInt31,inst:JSUInt32,is:int]*/
+/*member: effectivelyFinalPromoted:dynamic=[int.+,num.+],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),_method1(0),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSDouble,inst:JSInt,inst:JSNumber,inst:JSPositiveInt,inst:JSUInt31,inst:JSUInt32,is:int]*/
 effectivelyFinalPromoted() {
   dynamic c = _method1();
   c + 0;
@@ -79,7 +81,7 @@
 /*member: _method2:type=[inst:JSNull]*/
 String _method2() => null;
 
-/*member: effectivelyFinalPromotedInvalid:dynamic=[String.+,int.+],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),_method2(0),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSDouble,inst:JSInt,inst:JSNumber,inst:JSPositiveInt,inst:JSString,inst:JSUInt31,inst:JSUInt32,is:int]*/
+/*member: effectivelyFinalPromotedInvalid:dynamic=[String.+,int.+],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),_method2(0),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSDouble,inst:JSInt,inst:JSNumber,inst:JSPositiveInt,inst:JSString,inst:JSUInt31,inst:JSUInt32,is:int]*/
 effectivelyFinalPromotedInvalid() {
   dynamic c = _method2();
   c + '';
diff --git a/tests/compiler/dart2js/impact/data/exact.dart b/tests/compiler/dart2js/impact/data/exact.dart
index 1c6a6aa..19e18c6 100644
--- a/tests/compiler/dart2js/impact/data/exact.dart
+++ b/tests/compiler/dart2js/impact/data/exact.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: A.:static=[Object.(0)]*/
 class A {
   method1() {}
diff --git a/tests/compiler/dart2js/impact/data/expressions.dart b/tests/compiler/dart2js/impact/data/expressions.dart
index 3976aee..c15c49c 100644
--- a/tests/compiler/dart2js/impact/data/expressions.dart
+++ b/tests/compiler/dart2js/impact/data/expressions.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:static=[
   testAs(1),
   testAsGeneric(1),
@@ -105,58 +107,58 @@
 */
 testPreDec(o) => --o;
 
-/*member: testIs:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,is:Class]*/
+/*member: testIs:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,is:Class]*/
 testIs() => null is Class;
 
-/*member: testIsGeneric:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,is:GenericClass<int,String>]*/
+/*member: testIsGeneric:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,is:GenericClass<int,String>]*/
 testIsGeneric() => null is GenericClass<int, String>;
 
-/*member: testIsGenericRaw:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,is:GenericClass<dynamic,dynamic>]*/
+/*member: testIsGenericRaw:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,is:GenericClass<dynamic,dynamic>]*/
 testIsGenericRaw() => null is GenericClass;
 
-/*member: testIsGenericDynamic:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,is:GenericClass<dynamic,dynamic>]*/
+/*member: testIsGenericDynamic:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,is:GenericClass<dynamic,dynamic>]*/
 testIsGenericDynamic() => null is GenericClass<dynamic, dynamic>;
 
-/*member: testIsNot:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,is:Class]*/
+/*member: testIsNot:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,is:Class]*/
 testIsNot() => null is! Class;
 
-/*member: testIsNotGeneric:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,is:GenericClass<int,String>]*/
+/*member: testIsNotGeneric:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,is:GenericClass<int,String>]*/
 testIsNotGeneric() => null is! GenericClass<int, String>;
 
-/*member: testIsNotGenericRaw:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,is:GenericClass<dynamic,dynamic>]*/
+/*member: testIsNotGenericRaw:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,is:GenericClass<dynamic,dynamic>]*/
 testIsNotGenericRaw() => null is! GenericClass;
 
-/*member: testIsNotGenericDynamic:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,is:GenericClass<dynamic,dynamic>]*/
+/*member: testIsNotGenericDynamic:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,is:GenericClass<dynamic,dynamic>]*/
 testIsNotGenericDynamic() => null is! GenericClass<dynamic, dynamic>;
 
-/*member: testIsTypedef:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,is:dynamic Function()]*/
+/*member: testIsTypedef:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,is:dynamic Function()]*/
 testIsTypedef() => null is Typedef;
 
-/*member: testIsTypedefGeneric:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,is:int Function(String)]*/
+/*member: testIsTypedefGeneric:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,is:int Function(String)]*/
 testIsTypedefGeneric() => null is GenericTypedef<int, String>;
 
-/*member: testIsTypedefGenericRaw:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,is:dynamic Function(dynamic)]*/
+/*member: testIsTypedefGenericRaw:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,is:dynamic Function(dynamic)]*/
 testIsTypedefGenericRaw() => null is GenericTypedef;
 
-/*member: testIsTypedefGenericDynamic:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,is:dynamic Function(dynamic)]*/
+/*member: testIsTypedefGenericDynamic:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,is:dynamic Function(dynamic)]*/
 testIsTypedefGenericDynamic() => null is GenericTypedef<dynamic, dynamic>;
 
-/*member: testIsTypedefDeep:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,is:List<int Function(dynamic Function(dynamic))>]*/
+/*member: testIsTypedefDeep:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,is:List<int Function(dynamic Function(dynamic))>]*/
 testIsTypedefDeep() => null is List<GenericTypedef<int, GenericTypedef>>;
 
-/*member: testAs:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1),throwRuntimeError(1)],type=[as:Class,inst:Closure,inst:JSBool]*/
+/*member: testAs:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1),throwRuntimeError(1)],type=[as:Class,inst:Closure,inst:JSBool]*/
 // ignore: UNNECESSARY_CAST
 testAs(dynamic o) => o as Class;
 
-/*member: testAsGeneric:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2),throwRuntimeError(1)],type=[as:GenericClass<int,String>,inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>]*/
+/*member: testAsGeneric:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2),throwRuntimeError(1)],type=[as:GenericClass<int,String>,inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>]*/
 // ignore: UNNECESSARY_CAST
 testAsGeneric(dynamic o) => o as GenericClass<int, String>;
 
-/*member: testAsGenericRaw:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1),throwRuntimeError(1)],type=[as:GenericClass<dynamic,dynamic>,inst:Closure,inst:JSBool]*/
+/*member: testAsGenericRaw:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1),throwRuntimeError(1)],type=[as:GenericClass<dynamic,dynamic>,inst:Closure,inst:JSBool]*/
 // ignore: UNNECESSARY_CAST
 testAsGenericRaw(dynamic o) => o as GenericClass;
 
-/*member: testAsGenericDynamic:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1),throwRuntimeError(1)],type=[as:GenericClass<dynamic,dynamic>,inst:Closure,inst:JSBool]*/
+/*member: testAsGenericDynamic:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1),throwRuntimeError(1)],type=[as:GenericClass<dynamic,dynamic>,inst:Closure,inst:JSBool]*/
 // ignore: UNNECESSARY_CAST
 testAsGenericDynamic(dynamic o) => o as GenericClass<dynamic, dynamic>;
 
@@ -168,7 +170,7 @@
 /*member: testIfNotNull:dynamic=[Object.==,foo],type=[inst:JSNull]*/
 testIfNotNull(o) => o?.foo;
 
-/*member: testTypedIfNotNull:dynamic=[Class.==,Class.field],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class]*/
+/*member: testTypedIfNotNull:dynamic=[Class.==,Class.field],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class]*/
 testTypedIfNotNull(Class o) => o?.field;
 
 /*member: testIfNotNullSet:dynamic=[Object.==,foo=],type=[inst:JSBool,inst:JSNull]*/
diff --git a/tests/compiler/dart2js/impact/data/extract_type_arguments.dart b/tests/compiler/dart2js/impact/data/extract_type_arguments.dart
index d498017..3c9b8f3 100644
--- a/tests/compiler/dart2js/impact/data/extract_type_arguments.dart
+++ b/tests/compiler/dart2js/impact/data/extract_type_arguments.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// ignore: IMPORT_INTERNAL_LIBRARY
 import 'dart:_internal';
 
@@ -12,10 +14,10 @@
 /*member: C.:static=[Object.(0)]*/
 class C implements A<int>, B<String, bool> {}
 
-/*member: testA:dynamic=[call<A.T>(0)],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),extractTypeArguments<A<dynamic>>(2),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[impl:A<dynamic>,impl:Function,inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,is:A<A.T>]*/
+/*member: testA:dynamic=[call<A.T>(0)],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),extractTypeArguments<A<dynamic>>(2),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[impl:A<dynamic>,impl:Function,inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,is:A<A.T>]*/
 testA(c, f) => extractTypeArguments<A>(c, f);
 
-/*member: testB:dynamic=[call<B.S,B.U>(0)],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),extractTypeArguments<B<dynamic,dynamic>>(2),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[impl:B<dynamic,dynamic>,impl:Function,inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,is:B<B.S,B.U>]*/
+/*member: testB:dynamic=[call<B.S,B.U>(0)],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),extractTypeArguments<B<dynamic,dynamic>>(2),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[impl:B<dynamic,dynamic>,impl:Function,inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,is:B<B.S,B.U>]*/
 testB(c, f) => extractTypeArguments<B>(c, f);
 
 /*member: main:static=[C.(0),testA(2),testB(2)],type=[inst:JSNull]*/
diff --git a/tests/compiler/dart2js/impact/data/future_or.dart b/tests/compiler/dart2js/impact/data/future_or.dart
index acf5373..336fdef 100644
--- a/tests/compiler/dart2js/impact/data/future_or.dart
+++ b/tests/compiler/dart2js/impact/data/future_or.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "dart:async";
 
 /*member: main:dynamic=[runtimeType],runtimeType=[unknown:FutureOr<int>],static=[Future.value(1),checkTypeBound(4),print(1),throwTypeError(1)],type=[inst:JSDouble,inst:JSInt,inst:JSNumber,inst:JSPositiveInt,inst:JSUInt31,inst:JSUInt32]*/
diff --git a/tests/compiler/dart2js/impact/data/initializers.dart b/tests/compiler/dart2js/impact/data/initializers.dart
index 778c065..631eb49 100644
--- a/tests/compiler/dart2js/impact/data/initializers.dart
+++ b/tests/compiler/dart2js/impact/data/initializers.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:
  static=[
   testDefaultValuesNamed(0),
@@ -28,10 +30,10 @@
   testGenericClass();
 }
 
-/*member: testDefaultValuesPositional:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:bool]*/
+/*member: testDefaultValuesPositional:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:bool]*/
 testDefaultValuesPositional([bool value = false]) {}
 
-/*member: testDefaultValuesNamed:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:bool]*/
+/*member: testDefaultValuesNamed:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:bool]*/
 testDefaultValuesNamed({bool value: false}) {}
 
 class ClassFieldInitializer1 {
@@ -84,7 +86,7 @@
 
 /*member: ClassInstanceFieldWithInitializer.:static=[Object.(0)]*/
 class ClassInstanceFieldWithInitializer {
-  /*member: ClassInstanceFieldWithInitializer.field:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:bool]*/
+  /*member: ClassInstanceFieldWithInitializer.field:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:bool]*/
   var field = false;
 }
 
@@ -93,7 +95,7 @@
 
 /*member: ClassInstanceFieldTyped.:static=[Object.(0)]*/
 class ClassInstanceFieldTyped {
-  /*member: ClassInstanceFieldTyped.field:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:int]*/
+  /*member: ClassInstanceFieldTyped.field:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:int]*/
   int field;
 }
 
@@ -120,7 +122,7 @@
 testSuperInitializer() => new ClassSuperInitializer();
 
 class ClassGeneric<T> {
-  /*member: ClassGeneric.:static=[Object.(0),Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),checkSubtypeOfRuntimeType(2),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,param:ClassGeneric.T]*/
+  /*member: ClassGeneric.:static=[Object.(0),Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),checkSubtypeOfRuntimeType(2),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,param:ClassGeneric.T]*/
   ClassGeneric(T arg);
 }
 
diff --git a/tests/compiler/dart2js/impact/data/injected_cast.dart b/tests/compiler/dart2js/impact/data/injected_cast.dart
index 7ff1527..a1ced47 100644
--- a/tests/compiler/dart2js/impact/data/injected_cast.dart
+++ b/tests/compiler/dart2js/impact/data/injected_cast.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class A {}
 
 class B {}
@@ -14,11 +16,11 @@
 
 /*member: Class1.:static=[Object.(0)]*/
 class Class1 {
-  /*member: Class1.field1:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:A]*/
+  /*member: Class1.field1:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:A]*/
   A field1;
 }
 
-/*member: method1:dynamic=[Class1.field1=],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[impl:A,inst:Closure,inst:JSBool,is:Class1]*/
+/*member: method1:dynamic=[Class1.field1=],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[impl:A,inst:Closure,inst:JSBool,is:Class1]*/
 method1(dynamic o, dynamic value) {
   if (o is! Class1) return;
   o.field1 = value;
@@ -48,11 +50,11 @@
 
 /*member: Class3.:static=[Object.(0)]*/
 class Class3 {
-  /*member: Class3.method3:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:A,param:B,param:C]*/
+  /*member: Class3.method3:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:A,param:B,param:C]*/
   method3(A a, [B b, C c]) {}
 }
 
-/*member: method3:dynamic=[Class3.method3(3)],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[impl:A,impl:C,inst:Closure,inst:JSBool,is:Class3,param:B]*/
+/*member: method3:dynamic=[Class3.method3(3)],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[impl:A,impl:C,inst:Closure,inst:JSBool,is:Class3,param:B]*/
 method3(dynamic o, dynamic a, B b, dynamic c) {
   if (o is! Class3) return;
   o.method3(a, b, c);
@@ -60,11 +62,11 @@
 
 /*member: Class4.:static=[Object.(0)]*/
 class Class4 {
-  /*member: Class4.method4:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:A,param:B,param:C]*/
+  /*member: Class4.method4:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:A,param:B,param:C]*/
   method4(A a, {B b, C c}) {}
 }
 
-/*member: method4:dynamic=[Class4.method4(1,b,c)],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[impl:A,impl:C,inst:Closure,inst:JSBool,is:Class4,param:B]*/
+/*member: method4:dynamic=[Class4.method4(1,b,c)],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[impl:A,impl:C,inst:Closure,inst:JSBool,is:Class4,param:B]*/
 method4(dynamic o, dynamic a, B b, dynamic c) {
   if (o is! Class4) return;
   o.method4(a, c: c, b: b);
@@ -142,7 +144,7 @@
   A Function(A) get f => null;
 }
 
-/*member: method7:dynamic=[Class7.f(1),call(1)],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[impl:A,inst:Closure,inst:JSBool,is:Class7]*/
+/*member: method7:dynamic=[Class7.f(1),call(1)],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[impl:A,inst:Closure,inst:JSBool,is:Class7]*/
 method7(dynamic o, dynamic a) {
   if (o is! Class7) return;
   o.f(a);
@@ -170,7 +172,7 @@
   return g.method(iterable);
 }
 
-/*member: method9:dynamic=[G.field=],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[impl:int,inst:Closure,inst:JSBool,inst:JSNull,is:G,param:num]*/
+/*member: method9:dynamic=[G.field=],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[impl:int,inst:Closure,inst:JSBool,inst:JSNull,is:G,param:num]*/
 method9(dynamic g, num value) {
   if (g is! G) return null;
   return g.field = value;
diff --git a/tests/compiler/dart2js/impact/data/invokes.dart b/tests/compiler/dart2js/impact/data/invokes.dart
index ec1ce07..2e93818 100644
--- a/tests/compiler/dart2js/impact/data/invokes.dart
+++ b/tests/compiler/dart2js/impact/data/invokes.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:
  static=[
   testClosure(0),
@@ -115,13 +117,13 @@
   topLevelFunction3(15, c: 16, b: 17);
 }
 
-/*member: topLevelFunction1Typed:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:int]*/
+/*member: topLevelFunction1Typed:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:int]*/
 void topLevelFunction1Typed(int a) {}
 
-/*member: topLevelFunction2Typed:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:String,param:double,param:num]*/
+/*member: topLevelFunction2Typed:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:String,param:double,param:num]*/
 int topLevelFunction2Typed(String a, [num b, double c]) => null;
 
-/*member: topLevelFunction3Typed:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,param:List<int>,param:Map<String,bool>,param:bool]*/
+/*member: topLevelFunction3Typed:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,param:List<int>,param:Map<String,bool>,param:bool]*/
 double topLevelFunction3Typed(bool a, {List<int> b, Map<String, bool> c}) {
   return null;
 }
@@ -162,16 +164,16 @@
   topLevelFunction3Typed(false, c: {'16': false}, b: [17]);
 }
 
-/*member: topLevelFunctionTyped1:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,param:void Function(num)]*/
+/*member: topLevelFunctionTyped1:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,param:void Function(num)]*/
 topLevelFunctionTyped1(void a(num b)) {}
 
-/*member: topLevelFunctionTyped2:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,param:void Function(num,[String])]*/
+/*member: topLevelFunctionTyped2:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,param:void Function(num,[String])]*/
 topLevelFunctionTyped2(void a(num b, [String c])) {}
 
-/*member: topLevelFunctionTyped3:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,param:void Function(num,{String c,int d})]*/
+/*member: topLevelFunctionTyped3:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,param:void Function(num,{String c,int d})]*/
 topLevelFunctionTyped3(void a(num b, {String c, int d})) {}
 
-/*member: topLevelFunctionTyped4:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,param:void Function(num,{int c,String d})]*/
+/*member: topLevelFunctionTyped4:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,param:void Function(num,{int c,String d})]*/
 topLevelFunctionTyped4(void a(num b, {String d, int c})) {}
 
 /*member: testTopLevelFunctionTyped:
@@ -210,7 +212,7 @@
 /*member: testTopLevelSetterSet:static=[set:topLevelSetter],type=[inst:JSNull]*/
 testTopLevelSetterSet() => topLevelSetter = null;
 
-/*member: topLevelSetterTyped=:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:int]*/
+/*member: topLevelSetterTyped=:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:int]*/
 void set topLevelSetterTyped(int value) {}
 
 /*member: testTopLevelSetterSetTyped:static=[set:topLevelSetterTyped],type=[inst:JSNull]*/
@@ -239,25 +241,25 @@
 /*member: testTopLevelFieldFinal:static=[topLevelFieldFinal]*/
 testTopLevelFieldFinal() => topLevelFieldFinal;
 
-/*member: topLevelFieldTyped:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:int]*/
+/*member: topLevelFieldTyped:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:int]*/
 int topLevelFieldTyped;
 
 /*member: testTopLevelFieldTyped:static=[topLevelFieldTyped]*/
 testTopLevelFieldTyped() => topLevelFieldTyped;
 
-/*member: topLevelFieldGeneric1:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:GenericClass<dynamic,dynamic>]*/
+/*member: topLevelFieldGeneric1:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:GenericClass<dynamic,dynamic>]*/
 GenericClass topLevelFieldGeneric1;
 
 /*member: testTopLevelFieldGeneric1:static=[topLevelFieldGeneric1]*/
 testTopLevelFieldGeneric1() => topLevelFieldGeneric1;
 
-/*member: topLevelFieldGeneric2:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:GenericClass<dynamic,dynamic>]*/
+/*member: topLevelFieldGeneric2:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:GenericClass<dynamic,dynamic>]*/
 GenericClass<dynamic, dynamic> topLevelFieldGeneric2;
 
 /*member: testTopLevelFieldGeneric2:static=[topLevelFieldGeneric2]*/
 testTopLevelFieldGeneric2() => topLevelFieldGeneric2;
 
-/*member: topLevelFieldGeneric3:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,param:GenericClass<int,String>]*/
+/*member: topLevelFieldGeneric3:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,param:GenericClass<int,String>]*/
 GenericClass<int, String> topLevelFieldGeneric3;
 
 /*member: testTopLevelFieldGeneric3:static=[topLevelFieldGeneric3]*/
@@ -382,7 +384,7 @@
   localFunction() {}
 }
 
-/*member: testLocalFunctionTyped:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),computeSignature(3),def:localFunction,findType(1),getRuntimeTypeArguments(3),getRuntimeTypeInfo(1),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:Function,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,param:String]*/
+/*member: testLocalFunctionTyped:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),computeSignature(3),def:localFunction,findType(1),getRuntimeTypeArguments(3),getRuntimeTypeInfo(1),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:Function,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,param:String]*/
 testLocalFunctionTyped() {
   // ignore: UNUSED_ELEMENT
   int localFunction(String a) => null;
diff --git a/tests/compiler/dart2js/impact/data/jsinterop.dart b/tests/compiler/dart2js/impact/data/jsinterop.dart
index 6dce2cd..efddfaa 100644
--- a/tests/compiler/dart2js/impact/data/jsinterop.dart
+++ b/tests/compiler/dart2js/impact/data/jsinterop.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 @JS()
 library jsinterop;
 
@@ -59,7 +61,7 @@
 /*member: GenericClass.:static=[JavaScriptObject.(0)]*/
 @JS()
 class GenericClass<T> {
-  /*member: GenericClass.method:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,param:void Function(GenericClass.T)]*/
+  /*member: GenericClass.method:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,param:void Function(GenericClass.T)]*/
   external GenericClass method([Callback<T> callback]);
 }
 
diff --git a/tests/compiler/dart2js/impact/data/jsinterop_setter1.dart b/tests/compiler/dart2js/impact/data/jsinterop_setter1.dart
index 379e8e9..d60cd83 100644
--- a/tests/compiler/dart2js/impact/data/jsinterop_setter1.dart
+++ b/tests/compiler/dart2js/impact/data/jsinterop_setter1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 @JS()
 library main;
 
@@ -9,11 +11,11 @@
 
 import 'package:js/js.dart';
 
-/*member: foo=:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,native:ApplicationCacheErrorEvent,native:DomError,native:DomException,native:ErrorEvent,native:MediaError,native:NavigatorUserMediaError,native:OverconstrainedError,native:PositionError,native:SensorErrorEvent,native:SpeechRecognitionError,native:SqlError,param:Function]*/
+/*member: foo=:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,native:ApplicationCacheErrorEvent,native:DomError,native:DomException,native:ErrorEvent,native:MediaError,native:NavigatorUserMediaError,native:OverconstrainedError,native:PositionError,native:SensorErrorEvent,native:SpeechRecognitionError,native:SqlError,param:Function]*/
 @JS()
 external set foo(Function f);
 
-/*member: _doStuff:dynamic=[File.==,File.name],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),defineProperty(3),findType(1),instanceType(1),print(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,inst:JSString,param:File,param:String]*/
+/*member: _doStuff:dynamic=[File.==,File.name],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),defineProperty(3),findType(1),instanceType(1),print(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,inst:JSString,param:File,param:String]*/
 void _doStuff(String name, File file) {
   if (file == null) {
     print('OK');
diff --git a/tests/compiler/dart2js/impact/data/jsinterop_setter2.dart b/tests/compiler/dart2js/impact/data/jsinterop_setter2.dart
index 4fdac09..2d7eb7f 100644
--- a/tests/compiler/dart2js/impact/data/jsinterop_setter2.dart
+++ b/tests/compiler/dart2js/impact/data/jsinterop_setter2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 @JS()
 library main;
 
@@ -9,11 +11,11 @@
 
 import 'package:js/js.dart';
 
-/*member: foo=:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,native:ApplicationCacheErrorEvent,native:DomError,native:DomException,native:ErrorEvent,native:File,native:MediaError,native:NavigatorUserMediaError,native:OverconstrainedError,native:PositionError,native:SensorErrorEvent,native:SpeechRecognitionError,native:SqlError,param:void Function(String,File)]*/
+/*member: foo=:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,native:ApplicationCacheErrorEvent,native:DomError,native:DomException,native:ErrorEvent,native:File,native:MediaError,native:NavigatorUserMediaError,native:OverconstrainedError,native:PositionError,native:SensorErrorEvent,native:SpeechRecognitionError,native:SqlError,param:void Function(String,File)]*/
 @JS()
 external set foo(void Function(String, File) f);
 
-/*member: _doStuff:dynamic=[File.==,File.name],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),defineProperty(3),findType(1),instanceType(1),print(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,inst:JSString,param:File,param:String]*/
+/*member: _doStuff:dynamic=[File.==,File.name],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),defineProperty(3),findType(1),instanceType(1),print(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,inst:JSString,param:File,param:String]*/
 void _doStuff(String name, File file) {
   if (file == null) {
     print('OK');
diff --git a/tests/compiler/dart2js/impact/data/literals.dart b/tests/compiler/dart2js/impact/data/literals.dart
index 987e646..4edd315 100644
--- a/tests/compiler/dart2js/impact/data/literals.dart
+++ b/tests/compiler/dart2js/impact/data/literals.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:static=[
  testBoolFromEnvironment(0),
  testComplexConstSymbol(0),
diff --git a/tests/compiler/dart2js/impact/data/native.dart b/tests/compiler/dart2js/impact/data/native.dart
index a759f7f..ecbaf89 100644
--- a/tests/compiler/dart2js/impact/data/native.dart
+++ b/tests/compiler/dart2js/impact/data/native.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // ignore: IMPORT_INTERNAL_LIBRARY
 import 'dart:_foreign_helper' as foreign show JS;
 // ignore: IMPORT_INTERNAL_LIBRARY
@@ -56,7 +58,7 @@
 
 @Native("NativeClass")
 class NativeClass {
-  /*member: NativeClass.field:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,native:JSExtendableArray<JSExtendableArray.E>,native:Object,native:String,native:bool,native:double,native:int,param:Object]*/
+  /*member: NativeClass.field:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,native:JSExtendableArray<JSExtendableArray.E>,native:Object,native:String,native:bool,native:double,native:int,param:Object]*/
   @annotation_Creates_SerializedScriptValue
   final Object field;
 
@@ -65,5 +67,5 @@
   }
 }
 
-/*member: testNativeField:dynamic=[NativeClass.field],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),defineProperty(3),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:NativeClass]*/
+/*member: testNativeField:dynamic=[NativeClass.field],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),defineProperty(3),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:NativeClass]*/
 testNativeField(NativeClass c) => c.field;
diff --git a/tests/compiler/dart2js/impact/data/promotion.dart b/tests/compiler/dart2js/impact/data/promotion.dart
index e0513e7..69a6b93 100644
--- a/tests/compiler/dart2js/impact/data/promotion.dart
+++ b/tests/compiler/dart2js/impact/data/promotion.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class Class {}
 
 class SubClass extends Class {
@@ -37,17 +39,17 @@
   dynamicToNoSuchMethodTearOff(null);
 }
 
-/*member: positiveTyped:dynamic=[SubClass.method(0)],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,is:SubClass,param:Class]*/
+/*member: positiveTyped:dynamic=[SubClass.method(0)],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,is:SubClass,param:Class]*/
 positiveTyped(Class cls) {
   if (cls is SubClass) cls.method();
 }
 
-/*member: positiveDynamic:dynamic=[SubClass.method(0)],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,is:SubClass]*/
+/*member: positiveDynamic:dynamic=[SubClass.method(0)],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,is:SubClass]*/
 positiveDynamic(dynamic cls) {
   if (cls is SubClass) cls.method();
 }
 
-/*member: negativeDynamic:dynamic=[SubClass.method(0)],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,is:SubClass]*/
+/*member: negativeDynamic:dynamic=[SubClass.method(0)],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,is:SubClass]*/
 negativeDynamic(dynamic cls) {
   if (cls is! SubClass) return;
   cls.method();
diff --git a/tests/compiler/dart2js/impact/data/runtime_type.dart b/tests/compiler/dart2js/impact/data/runtime_type.dart
index 7b1ca18..204aadf 100644
--- a/tests/compiler/dart2js/impact/data/runtime_type.dart
+++ b/tests/compiler/dart2js/impact/data/runtime_type.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: Class1a.:static=[Object.(0)]*/
 class Class1a<T> {
   /*member: Class1a.==:
@@ -60,88 +62,88 @@
 /*member: Class4.:static=[Object.(0)]*/
 class Class4 {}
 
-/*member: toString1:dynamic=[Class2.runtimeType,toString(0)],runtimeType=[string:Class2<int>],static=[Rti._bind(1),Rti._eval(1),S(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSString,inst:JSUnmodifiableArray<dynamic>,param:Class2<int>]*/
+/*member: toString1:dynamic=[Class2.runtimeType,toString(0)],runtimeType=[string:Class2<int>],static=[Rti._bind(1),Rti._eval(1),S(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSString,inst:JSUnmodifiableArray<dynamic>,param:Class2<int>]*/
 toString1(Class2<int> c) => '${c.runtimeType}';
 
-/*member: toString2:dynamic=[Class2.==,Class2.runtimeType,toString(0)],runtimeType=[string:Class2<int>],static=[Rti._bind(1),Rti._eval(1),S(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSString,inst:JSUnmodifiableArray<dynamic>,param:Class2<int>]*/
+/*member: toString2:dynamic=[Class2.==,Class2.runtimeType,toString(0)],runtimeType=[string:Class2<int>],static=[Rti._bind(1),Rti._eval(1),S(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSString,inst:JSUnmodifiableArray<dynamic>,param:Class2<int>]*/
 toString2(Class2<int> c) => '${c?.runtimeType}';
 
-/*member: toString3:dynamic=[Class2.runtimeType,Type.toString(0)],runtimeType=[string:Class2<int>],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,param:Class2<int>]*/
+/*member: toString3:dynamic=[Class2.runtimeType,Type.toString(0)],runtimeType=[string:Class2<int>],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,param:Class2<int>]*/
 toString3(Class2<int> c) => c.runtimeType.toString();
 
-/*member: toString4:dynamic=[Class2.runtimeType,Type.==,Type.toString(0)],runtimeType=[string:Class2<int>],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,param:Class2<int>]*/
+/*member: toString4:dynamic=[Class2.runtimeType,Type.==,Type.toString(0)],runtimeType=[string:Class2<int>],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,param:Class2<int>]*/
 toString4(Class2<int> c) => c.runtimeType?.toString();
 
-/*member: toString5:dynamic=[Class2.==,Class2.runtimeType,Type.==,Type.toString(0)],runtimeType=[string:Class2<int>],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,param:Class2<int>]*/
+/*member: toString5:dynamic=[Class2.==,Class2.runtimeType,Type.==,Type.toString(0)],runtimeType=[string:Class2<int>],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,param:Class2<int>]*/
 toString5(Class2<int> c) => c?.runtimeType?.toString();
 
-/*member: toString6:dynamic=[Class2.==,Class2.runtimeType,Type.toString(0)],runtimeType=[string:Class2<int>],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,param:Class2<int>]*/
+/*member: toString6:dynamic=[Class2.==,Class2.runtimeType,Type.toString(0)],runtimeType=[string:Class2<int>],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,param:Class2<int>]*/
 toString6(Class2<int> c) => c?.runtimeType.toString();
 
-/*member: unknown:dynamic=[Class2.runtimeType],runtimeType=[unknown:Class2<int>],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,param:Class2<int>]*/
+/*member: unknown:dynamic=[Class2.runtimeType],runtimeType=[unknown:Class2<int>],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSUnmodifiableArray<dynamic>,param:Class2<int>]*/
 unknown(Class2<int> c) => c.runtimeType;
 
-/*member: equals1:dynamic=[Class1a.==,Class1a.runtimeType,Class1d.==,Class1d.runtimeType,Type.==],runtimeType=[equals:Class1a<int>/Class1d<int>],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,param:Class1a<int>,param:Class1d<int>]*/
+/*member: equals1:dynamic=[Class1a.==,Class1a.runtimeType,Class1d.==,Class1d.runtimeType,Type.==],runtimeType=[equals:Class1a<int>/Class1d<int>],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkSubtype(4),findType(1),getRuntimeTypeArgument(3),getRuntimeTypeArgumentIntercepted(4),getRuntimeTypeInfo(1),getTypeArgumentByIndex(2),instanceType(1),setRuntimeTypeInfo(2)],type=[inst:Closure,inst:JSArray<dynamic>,inst:JSBool,inst:JSExtendableArray<dynamic>,inst:JSFixedArray<dynamic>,inst:JSMutableArray<dynamic>,inst:JSNull,inst:JSUnmodifiableArray<dynamic>,param:Class1a<int>,param:Class1d<int>]*/
 equals1(Class1a<int> a, Class1d<int> b) => a?.runtimeType == b?.runtimeType;
 
-/*member: almostEquals1:dynamic=[Class3.runtimeType,Type.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
+/*member: almostEquals1:dynamic=[Class3.runtimeType,Type.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
 almostEquals1(Class3 a) => a.runtimeType == null;
 
-/*member: almostEquals2:dynamic=[Class3.==,Class3.runtimeType,Type.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
+/*member: almostEquals2:dynamic=[Class3.==,Class3.runtimeType,Type.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
 almostEquals2(Class3 a) => a?.runtimeType == null;
 
-/*member: almostEquals3:dynamic=[Class3.runtimeType,Null.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
+/*member: almostEquals3:dynamic=[Class3.runtimeType,Null.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
 almostEquals3(Class3 a) => null == a.runtimeType;
 
-/*member: almostEquals4:dynamic=[Class3.==,Class3.runtimeType,Null.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
+/*member: almostEquals4:dynamic=[Class3.==,Class3.runtimeType,Null.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
 almostEquals4(Class3 a) => null == a?.runtimeType;
 
-/*member: almostEquals5:dynamic=[Class3.field,Class3.runtimeType,Type.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:Class3]*/
+/*member: almostEquals5:dynamic=[Class3.field,Class3.runtimeType,Type.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:Class3]*/
 almostEquals5(Class3 a) => a.runtimeType == a.field;
 
-/*member: almostEquals6:dynamic=[Class3.==,Class3.field,Class3.runtimeType,Type.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
+/*member: almostEquals6:dynamic=[Class3.==,Class3.field,Class3.runtimeType,Type.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
 almostEquals6(Class3 a) => a?.runtimeType == a.field;
 
-/*member: almostEquals7:dynamic=[Class3.==,Class3.field,Class3.runtimeType,Type.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
+/*member: almostEquals7:dynamic=[Class3.==,Class3.field,Class3.runtimeType,Type.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
 almostEquals7(Class3 a) => a.runtimeType == a?.field;
 
-/*member: almostEquals8:dynamic=[Class3.==,Class3.field,Class3.runtimeType,Type.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
+/*member: almostEquals8:dynamic=[Class3.==,Class3.field,Class3.runtimeType,Type.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
 almostEquals8(Class3 a) => a?.runtimeType == a?.field;
 
-/*member: almostEquals9:dynamic=[Class3.field,Class3.runtimeType,Object.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:Class3]*/
+/*member: almostEquals9:dynamic=[Class3.field,Class3.runtimeType,Object.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:Class3]*/
 almostEquals9(Class3 a) => a.field == a.runtimeType;
 
-/*member: almostEquals10:dynamic=[Class3.==,Class3.field,Class3.runtimeType,Object.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
+/*member: almostEquals10:dynamic=[Class3.==,Class3.field,Class3.runtimeType,Object.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
 almostEquals10(Class3 a) => a?.field == a.runtimeType;
 
-/*member: almostEquals11:dynamic=[Class3.==,Class3.field,Class3.runtimeType,Object.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
+/*member: almostEquals11:dynamic=[Class3.==,Class3.field,Class3.runtimeType,Object.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
 almostEquals11(Class3 a) => a.field == a?.runtimeType;
 
-/*member: almostEquals12:dynamic=[Class3.==,Class3.field,Class3.runtimeType,Object.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
+/*member: almostEquals12:dynamic=[Class3.==,Class3.field,Class3.runtimeType,Object.==],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
 almostEquals12(Class3 a) => a?.field == a?.runtimeType;
 
-/*member: almostToString1:dynamic=[Class3.runtimeType,Type.toString],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:Class3]*/
+/*member: almostToString1:dynamic=[Class3.runtimeType,Type.toString],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:Class3]*/
 almostToString1(Class3 a) => a.runtimeType.toString;
 
-/*member: almostToString2:dynamic=[Class3.==,Class3.runtimeType,Type.==,Type.toString],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
+/*member: almostToString2:dynamic=[Class3.==,Class3.runtimeType,Type.==,Type.toString],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
 almostToString2(Class3 a) => a?.runtimeType?.toString;
 
-/*member: almostToString3:dynamic=[Class3.runtimeType,Type.noSuchMethod(1)],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
+/*member: almostToString3:dynamic=[Class3.runtimeType,Type.noSuchMethod(1)],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
 almostToString3(Class3 a) => a.runtimeType.noSuchMethod(null);
 
-/*member: almostToString4:dynamic=[Class3.==,Class3.runtimeType,Type.noSuchMethod(1)],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
+/*member: almostToString4:dynamic=[Class3.==,Class3.runtimeType,Type.noSuchMethod(1)],runtimeType=[unknown:Class3],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3]*/
 almostToString4(Class3 a) => a?.runtimeType.noSuchMethod(null);
 
-/*member: notEquals1:dynamic=[Class3.runtimeType,Class4.runtimeType,Type.==],runtimeType=[equals:Class3/Class4],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:Class3,param:Class4]*/
+/*member: notEquals1:dynamic=[Class3.runtimeType,Class4.runtimeType,Type.==],runtimeType=[equals:Class3/Class4],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,param:Class3,param:Class4]*/
 notEquals1(Class3 a, Class4 b) => a.runtimeType != b.runtimeType;
 
-/*member: notEquals2:dynamic=[Class3.==,Class3.runtimeType,Class4.runtimeType,Type.==],runtimeType=[equals:Class3/Class4],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3,param:Class4]*/
+/*member: notEquals2:dynamic=[Class3.==,Class3.runtimeType,Class4.runtimeType,Type.==],runtimeType=[equals:Class3/Class4],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3,param:Class4]*/
 notEquals2(Class3 a, Class4 b) => a?.runtimeType != b.runtimeType;
 
-/*member: notEquals3:dynamic=[Class3.runtimeType,Class4.==,Class4.runtimeType,Type.==],runtimeType=[equals:Class3/Class4],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3,param:Class4]*/
+/*member: notEquals3:dynamic=[Class3.runtimeType,Class4.==,Class4.runtimeType,Type.==],runtimeType=[equals:Class3/Class4],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3,param:Class4]*/
 notEquals3(Class3 a, Class4 b) => a.runtimeType != b?.runtimeType;
 
-/*member: notEquals4:dynamic=[Class3.==,Class3.runtimeType,Class4.==,Class4.runtimeType,Type.==],runtimeType=[equals:Class3/Class4],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3,param:Class4]*/
+/*member: notEquals4:dynamic=[Class3.==,Class3.runtimeType,Class4.==,Class4.runtimeType,Type.==],runtimeType=[equals:Class3/Class4],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1)],type=[inst:Closure,inst:JSBool,inst:JSNull,param:Class3,param:Class4]*/
 notEquals4(Class3 a, Class4 b) => a?.runtimeType != b?.runtimeType;
 
 /*member: main:dynamic=[exact:Class1a.==],static=[Class1a.(0),Class1b.(0),Class1c.(0),Class1d.(0),Class2.(0),Class3.(0),Class4.(0),almostEquals1(1),almostEquals10(1),almostEquals11(1),almostEquals12(1),almostEquals2(1),almostEquals3(1),almostEquals4(1),almostEquals5(1),almostEquals6(1),almostEquals7(1),almostEquals8(1),almostEquals9(1),almostToString1(1),almostToString2(1),almostToString3(1),almostToString4(1),checkTypeBound(4),equals1(2),notEquals1(2),notEquals2(2),notEquals3(2),notEquals4(2),print(1),throwTypeError(1),toString1(1),toString2(1),toString3(1),toString4(1),toString5(1),toString6(1),unknown(1)]*/
diff --git a/tests/compiler/dart2js/impact/data/statements.dart b/tests/compiler/dart2js/impact/data/statements.dart
index 15a28cf..f5b41a2 100644
--- a/tests/compiler/dart2js/impact/data/statements.dart
+++ b/tests/compiler/dart2js/impact/data/statements.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:
  static=[
   testAssert(0),
@@ -65,13 +67,13 @@
     return 1;
 }
 
-/*member: testForIn:dynamic=[Iterator.current,Iterator.iterator,Iterator.moveNext(0)],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkConcurrentModificationError(2),findType(1),instanceType(1)],type=[impl:Iterable<dynamic>,inst:Closure,inst:JSBool,inst:JSNull,inst:Null]*/
+/*member: testForIn:dynamic=[Iterator.current,Iterator.iterator,Iterator.moveNext(0)],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkConcurrentModificationError(2),findType(1),instanceType(1)],type=[impl:Iterable<dynamic>,inst:Closure,inst:JSBool,inst:JSNull,inst:Null]*/
 testForIn(o) {
   // ignore: UNUSED_LOCAL_VARIABLE
   for (var e in o) {}
 }
 
-/*member: testForInTyped:dynamic=[Iterator.current,Iterator.iterator,Iterator.moveNext(0)],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkConcurrentModificationError(2),findType(1),instanceType(1)],type=[impl:Iterable<dynamic>,impl:int,inst:Closure,inst:JSBool,inst:JSNull,inst:Null]*/
+/*member: testForInTyped:dynamic=[Iterator.current,Iterator.iterator,Iterator.moveNext(0)],static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),checkConcurrentModificationError(2),findType(1),instanceType(1)],type=[impl:Iterable<dynamic>,impl:int,inst:Closure,inst:JSBool,inst:JSNull,inst:Null]*/
 testForInTyped(o) {
   // ignore: UNUSED_LOCAL_VARIABLE
   for (int e in o) {}
@@ -87,7 +89,7 @@
   try {} catch (e) {}
 }
 
-/*member: testTryCatchOn:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_checkBoolNullable(1),_checkDoubleNullable(1),_checkIntNullable(1),_checkNumNullable(1),_checkObject(1),_checkStringNullable(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_generalTypeCheckImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1),unwrapException(1)],type=[catch:String,inst:Closure,inst:JSBool,inst:PlainJavaScriptObject,inst:UnknownJavaScriptObject]*/
+/*member: testTryCatchOn:static=[Rti._bind(1),Rti._eval(1),_arrayInstanceType(1),_asBoolNullable(1),_asDoubleNullable(1),_asIntNullable(1),_asNumNullable(1),_asObject(1),_asStringNullable(1),_asTop(1),_generalAsCheckImplementation(1),_generalIsTestImplementation(1),_instanceType(1),_isBool(1),_isInt(1),_isNum(1),_isObject(1),_isString(1),_isTop(1),findType(1),instanceType(1),unwrapException(1)],type=[catch:String,inst:Closure,inst:JSBool,inst:PlainJavaScriptObject,inst:UnknownJavaScriptObject]*/
 testTryCatchOn() {
   // ignore: UNUSED_CATCH_CLAUSE
   try {} on String catch (e) {}
diff --git a/tests/compiler/dart2js/impact/data/this.dart b/tests/compiler/dart2js/impact/data/this.dart
index f06504e..d526987 100644
--- a/tests/compiler/dart2js/impact/data/this.dart
+++ b/tests/compiler/dart2js/impact/data/this.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: Class.:static=[Object.(0)]*/
 class Class {
   /*member: Class.field1:type=[inst:JSNull]*/
diff --git a/tests/compiler/dart2js/impact/impact_test.dart b/tests/compiler/dart2js/impact/impact_test.dart
index 09a1566..1ae3981 100644
--- a/tests/compiler/dart2js/impact/impact_test.dart
+++ b/tests/compiler/dart2js/impact/impact_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:io';
 import 'package:_fe_analyzer_shared/src/testing/features.dart';
 import 'package:async_helper/async_helper.dart';
diff --git a/tests/compiler/dart2js/inference/callers/field_access.dart b/tests/compiler/dart2js/inference/callers/field_access.dart
index 4cad4a1..403a14f 100644
--- a/tests/compiler/dart2js/inference/callers/field_access.dart
+++ b/tests/compiler/dart2js/inference/callers/field_access.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: B.:[main]*/
 class A {
   /*member: A.field:[main]*/
diff --git a/tests/compiler/dart2js/inference/callers_test.dart b/tests/compiler/dart2js/inference/callers_test.dart
index 5a6a719..421ff24 100644
--- a/tests/compiler/dart2js/inference/callers_test.dart
+++ b/tests/compiler/dart2js/inference/callers_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:io';
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/closure.dart';
diff --git a/tests/compiler/dart2js/inference/data/abstract_method.dart b/tests/compiler/dart2js/inference/data/abstract_method.dart
index b6076c4..81dd471 100644
--- a/tests/compiler/dart2js/inference/data/abstract_method.dart
+++ b/tests/compiler/dart2js/inference/data/abstract_method.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   abstractEquals();
diff --git a/tests/compiler/dart2js/inference/data/and_or.dart b/tests/compiler/dart2js/inference/data/and_or.dart
index 1f51c64..a312110 100644
--- a/tests/compiler/dart2js/inference/data/and_or.dart
+++ b/tests/compiler/dart2js/inference/data/and_or.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: X.:[exact=X]*/
 class X {}
 
diff --git a/tests/compiler/dart2js/inference/data/as.dart b/tests/compiler/dart2js/inference/data/as.dart
index 3a66972..319f83f 100644
--- a/tests/compiler/dart2js/inference/data/as.dart
+++ b/tests/compiler/dart2js/inference/data/as.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   asIntWithString();
diff --git a/tests/compiler/dart2js/inference/data/assert.dart b/tests/compiler/dart2js/inference/data/assert.dart
index 8f470ae..ff409e0 100644
--- a/tests/compiler/dart2js/inference/data/assert.dart
+++ b/tests/compiler/dart2js/inference/data/assert.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// This file contains tests of assertions when assertions are _disabled_. The
 /// file 'assert_ea.dart' contains similar tests for when assertions are
 /// _enabled_.
diff --git a/tests/compiler/dart2js/inference/data/assert_ea.dart b/tests/compiler/dart2js/inference/data/assert_ea.dart
index 5faff4e..99f4550 100644
--- a/tests/compiler/dart2js/inference/data/assert_ea.dart
+++ b/tests/compiler/dart2js/inference/data/assert_ea.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// This file contains tests of assertions when assertions are _enabled_. The
 /// file 'assert.dart' contains similar tests for when assertions are
 /// _disabled_.
diff --git a/tests/compiler/dart2js/inference/data/assert_message_throw.dart b/tests/compiler/dart2js/inference/data/assert_message_throw.dart
index 1115952..095a1a3 100644
--- a/tests/compiler/dart2js/inference/data/assert_message_throw.dart
+++ b/tests/compiler/dart2js/inference/data/assert_message_throw.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// This file contains tests of assertions when assertions are _disabled_. The
 /// file 'assert_message_throw_ea.dart' contains similar tests for when
 /// assertions are _enabled_.
diff --git a/tests/compiler/dart2js/inference/data/assert_message_throw_ea.dart b/tests/compiler/dart2js/inference/data/assert_message_throw_ea.dart
index 72e4618..ed29bb3 100644
--- a/tests/compiler/dart2js/inference/data/assert_message_throw_ea.dart
+++ b/tests/compiler/dart2js/inference/data/assert_message_throw_ea.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// This file contains tests of assertions when assertions are _enabled_. The
 /// file 'assert_message_throw.dart' contains similar tests for when assertions
 /// are _disabled_.
diff --git a/tests/compiler/dart2js/inference/data/assign_op.dart b/tests/compiler/dart2js/inference/data/assign_op.dart
index 94d63dc..d658ac3 100644
--- a/tests/compiler/dart2js/inference/data/assign_op.dart
+++ b/tests/compiler/dart2js/inference/data/assign_op.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   assignPlus();
diff --git a/tests/compiler/dart2js/inference/data/async_marker.dart b/tests/compiler/dart2js/inference/data/async_marker.dart
index 97a9464..001fed5 100644
--- a/tests/compiler/dart2js/inference/data/async_marker.dart
+++ b/tests/compiler/dart2js/inference/data/async_marker.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   asyncMethod();
diff --git a/tests/compiler/dart2js/inference/data/await.dart b/tests/compiler/dart2js/inference/data/await.dart
index 1f7bfea..5fb5d91 100644
--- a/tests/compiler/dart2js/inference/data/await.dart
+++ b/tests/compiler/dart2js/inference/data/await.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:async';
 
 /*member: main:[null]*/
diff --git a/tests/compiler/dart2js/inference/data/break_continue.dart b/tests/compiler/dart2js/inference/data/break_continue.dart
index 989c474..9fbb86e 100644
--- a/tests/compiler/dart2js/inference/data/break_continue.dart
+++ b/tests/compiler/dart2js/inference/data/break_continue.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   breakInWhile();
diff --git a/tests/compiler/dart2js/inference/data/call_in_loop.dart b/tests/compiler/dart2js/inference/data/call_in_loop.dart
index b948889..5827401 100644
--- a/tests/compiler/dart2js/inference/data/call_in_loop.dart
+++ b/tests/compiler/dart2js/inference/data/call_in_loop.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Regression test for [ClosureCallSiteTypeInformation] in loops.
 
 /*member: Class.:[exact=Class]*/
diff --git a/tests/compiler/dart2js/inference/data/call_method_function_typed_value.dart b/tests/compiler/dart2js/inference/data/call_method_function_typed_value.dart
index 52d6d13..23487e5 100644
--- a/tests/compiler/dart2js/inference/data/call_method_function_typed_value.dart
+++ b/tests/compiler/dart2js/inference/data/call_method_function_typed_value.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test based on language_2/call_method_function_typed_value_test/04
 
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js/inference/data/call_site.dart b/tests/compiler/dart2js/inference/data/call_site.dart
index c945208..ac2b579 100644
--- a/tests/compiler/dart2js/inference/data/call_site.dart
+++ b/tests/compiler/dart2js/inference/data/call_site.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   test1();
diff --git a/tests/compiler/dart2js/inference/data/catch.dart b/tests/compiler/dart2js/inference/data/catch.dart
index d87f53a..243100d 100644
--- a/tests/compiler/dart2js/inference/data/catch.dart
+++ b/tests/compiler/dart2js/inference/data/catch.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   catchUntyped();
diff --git a/tests/compiler/dart2js/inference/data/closure.dart b/tests/compiler/dart2js/inference/data/closure.dart
index e4f2243..2e14eff 100644
--- a/tests/compiler/dart2js/inference/data/closure.dart
+++ b/tests/compiler/dart2js/inference/data/closure.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   returnInClosure();
diff --git a/tests/compiler/dart2js/inference/data/closure2.dart b/tests/compiler/dart2js/inference/data/closure2.dart
index 5d03f44..0e6335d 100644
--- a/tests/compiler/dart2js/inference/data/closure2.dart
+++ b/tests/compiler/dart2js/inference/data/closure2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: returnInt1:[exact=JSUInt31]*/
 returnInt1() {
   var a = 42;
diff --git a/tests/compiler/dart2js/inference/data/closure_tracer.dart b/tests/compiler/dart2js/inference/data/closure_tracer.dart
index 7aa62d9..08105f7 100644
--- a/tests/compiler/dart2js/inference/data/closure_tracer.dart
+++ b/tests/compiler/dart2js/inference/data/closure_tracer.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: testFunctionStatement:[null|exact=JSUInt31]*/
 testFunctionStatement() {
   var res;
@@ -45,7 +47,7 @@
   var res;
   /*[exact=JSUInt31]*/ closure(/*[exact=JSUInt31]*/ a) => res = a;
   var a = new A(closure);
-  a. /*invoke: [exact=A]*/ field(42);
+  a.field /*invoke: [exact=A]*/ (42);
   return res;
 }
 
diff --git a/tests/compiler/dart2js/inference/data/closure_tracer_28919.dart b/tests/compiler/dart2js/inference/data/closure_tracer_28919.dart
index 011b9ed..b93f472 100644
--- a/tests/compiler/dart2js/inference/data/closure_tracer_28919.dart
+++ b/tests/compiler/dart2js/inference/data/closure_tracer_28919.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for issue 28919.
 
 /*member: foo1:[null]*/
diff --git a/tests/compiler/dart2js/inference/data/closurization_instance.dart b/tests/compiler/dart2js/inference/data/closurization_instance.dart
index 810e71f..5ffcc5d 100644
--- a/tests/compiler/dart2js/inference/data/closurization_instance.dart
+++ b/tests/compiler/dart2js/inference/data/closurization_instance.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   closurizedCallToString();
diff --git a/tests/compiler/dart2js/inference/data/closurization_instance_call.dart b/tests/compiler/dart2js/inference/data/closurization_instance_call.dart
index d5eabac..f716040 100644
--- a/tests/compiler/dart2js/inference/data/closurization_instance_call.dart
+++ b/tests/compiler/dart2js/inference/data/closurization_instance_call.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   closurizedCallToString();
diff --git a/tests/compiler/dart2js/inference/data/closurization_local_call.dart b/tests/compiler/dart2js/inference/data/closurization_local_call.dart
index 19c5758..2b5c6fc 100644
--- a/tests/compiler/dart2js/inference/data/closurization_local_call.dart
+++ b/tests/compiler/dart2js/inference/data/closurization_local_call.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   closurizedCallToString();
diff --git a/tests/compiler/dart2js/inference/data/closurization_static.dart b/tests/compiler/dart2js/inference/data/closurization_static.dart
index deea1db..f053673 100644
--- a/tests/compiler/dart2js/inference/data/closurization_static.dart
+++ b/tests/compiler/dart2js/inference/data/closurization_static.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   closurizedCallToString();
diff --git a/tests/compiler/dart2js/inference/data/closurization_static_call.dart b/tests/compiler/dart2js/inference/data/closurization_static_call.dart
index 575f68d..1da1648 100644
--- a/tests/compiler/dart2js/inference/data/closurization_static_call.dart
+++ b/tests/compiler/dart2js/inference/data/closurization_static_call.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   closurizedCallToString();
diff --git a/tests/compiler/dart2js/inference/data/conditional.dart b/tests/compiler/dart2js/inference/data/conditional.dart
index e8af4fe..3e16c64 100644
--- a/tests/compiler/dart2js/inference/data/conditional.dart
+++ b/tests/compiler/dart2js/inference/data/conditional.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   simpleConditional();
diff --git a/tests/compiler/dart2js/inference/data/const_closure.dart b/tests/compiler/dart2js/inference/data/const_closure.dart
index ca22d2e..24ef0af 100644
--- a/tests/compiler/dart2js/inference/data/const_closure.dart
+++ b/tests/compiler/dart2js/inference/data/const_closure.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: method1:[exact=JSUInt31]*/
 method1() {
   return 42;
diff --git a/tests/compiler/dart2js/inference/data/const_closure2.dart b/tests/compiler/dart2js/inference/data/const_closure2.dart
index 64f75e3..d647115 100644
--- a/tests/compiler/dart2js/inference/data/const_closure2.dart
+++ b/tests/compiler/dart2js/inference/data/const_closure2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: method:Union([exact=JSDouble], [exact=JSUInt31])*/
 // Called via [foo] with integer then double.
 method(/*Union([exact=JSDouble], [exact=JSUInt31])*/ a) {
diff --git a/tests/compiler/dart2js/inference/data/const_closure3.dart b/tests/compiler/dart2js/inference/data/const_closure3.dart
index 31bcc35..f0ce02b 100644
--- a/tests/compiler/dart2js/inference/data/const_closure3.dart
+++ b/tests/compiler/dart2js/inference/data/const_closure3.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: method:[exact=JSUInt31]*/
 // Called only via [foo2] with a small integer.
 method(/*[exact=JSUInt31]*/ a) {
diff --git a/tests/compiler/dart2js/inference/data/const_closure4.dart b/tests/compiler/dart2js/inference/data/const_closure4.dart
index 64f75e3..d647115 100644
--- a/tests/compiler/dart2js/inference/data/const_closure4.dart
+++ b/tests/compiler/dart2js/inference/data/const_closure4.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: method:Union([exact=JSDouble], [exact=JSUInt31])*/
 // Called via [foo] with integer then double.
 method(/*Union([exact=JSDouble], [exact=JSUInt31])*/ a) {
diff --git a/tests/compiler/dart2js/inference/data/const_closure5.dart b/tests/compiler/dart2js/inference/data/const_closure5.dart
index 36b822d..76887e5 100644
--- a/tests/compiler/dart2js/inference/data/const_closure5.dart
+++ b/tests/compiler/dart2js/inference/data/const_closure5.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: method:Union([exact=JSDouble], [exact=JSUInt31])*/
 // Called only via [foo2] with a small integer.
 method(/*Union([exact=JSDouble], [exact=JSUInt31])*/ a) {
diff --git a/tests/compiler/dart2js/inference/data/const_closure_default.dart b/tests/compiler/dart2js/inference/data/const_closure_default.dart
index 135ed2a..5b60f7b 100644
--- a/tests/compiler/dart2js/inference/data/const_closure_default.dart
+++ b/tests/compiler/dart2js/inference/data/const_closure_default.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // [defaultFn_i] is called only via [foo_i]'s default value with a small integer.
 
 /*member: defaultFn1:[exact=JSUInt31]*/
diff --git a/tests/compiler/dart2js/inference/data/container_mask_equal.dart b/tests/compiler/dart2js/inference/data/container_mask_equal.dart
index c4830df..e1bde05 100644
--- a/tests/compiler/dart2js/inference/data/container_mask_equal.dart
+++ b/tests/compiler/dart2js/inference/data/container_mask_equal.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for dart2js that used to have a bogus
 // implementation of var.== and var.hashCode.
 
diff --git a/tests/compiler/dart2js/inference/data/default_value.dart b/tests/compiler/dart2js/inference/data/default_value.dart
index b08d14f..ac5aea5 100644
--- a/tests/compiler/dart2js/inference/data/default_value.dart
+++ b/tests/compiler/dart2js/inference/data/default_value.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   positionalWithoutDefaultOnLocal();
diff --git a/tests/compiler/dart2js/inference/data/deferred_load.dart b/tests/compiler/dart2js/inference/data/deferred_load.dart
index 41ee085..9d7caf1 100644
--- a/tests/compiler/dart2js/inference/data/deferred_load.dart
+++ b/tests/compiler/dart2js/inference/data/deferred_load.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart' deferred as expect;
 
 /*member: main:[null]*/
diff --git a/tests/compiler/dart2js/inference/data/deferred_load_get.dart b/tests/compiler/dart2js/inference/data/deferred_load_get.dart
index d77937c..1e46768 100644
--- a/tests/compiler/dart2js/inference/data/deferred_load_get.dart
+++ b/tests/compiler/dart2js/inference/data/deferred_load_get.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart' deferred as expect;
 
 // Synthetic getter added by kernel.
diff --git a/tests/compiler/dart2js/inference/data/dictionary_types.dart b/tests/compiler/dart2js/inference/data/dictionary_types.dart
index c514566..b2c5aa1 100644
--- a/tests/compiler/dart2js/inference/data/dictionary_types.dart
+++ b/tests/compiler/dart2js/inference/data/dictionary_types.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   test1();
diff --git a/tests/compiler/dart2js/inference/data/do.dart b/tests/compiler/dart2js/inference/data/do.dart
index 5a7ffac..47c116f 100644
--- a/tests/compiler/dart2js/inference/data/do.dart
+++ b/tests/compiler/dart2js/inference/data/do.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   simpleDo();
diff --git a/tests/compiler/dart2js/inference/data/enum.dart b/tests/compiler/dart2js/inference/data/enum.dart
index 6e288fa..5f650f3 100644
--- a/tests/compiler/dart2js/inference/data/enum.dart
+++ b/tests/compiler/dart2js/inference/data/enum.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   enumValue();
diff --git a/tests/compiler/dart2js/inference/data/expose_this.dart b/tests/compiler/dart2js/inference/data/expose_this.dart
index 26a5d7a..1c7ec3f 100644
--- a/tests/compiler/dart2js/inference/data/expose_this.dart
+++ b/tests/compiler/dart2js/inference/data/expose_this.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   exposeThis1();
diff --git a/tests/compiler/dart2js/inference/data/expose_this_closure.dart b/tests/compiler/dart2js/inference/data/expose_this_closure.dart
index da43183..f042cbb 100644
--- a/tests/compiler/dart2js/inference/data/expose_this_closure.dart
+++ b/tests/compiler/dart2js/inference/data/expose_this_closure.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   exposeThis1();
diff --git a/tests/compiler/dart2js/inference/data/expose_this_field.dart b/tests/compiler/dart2js/inference/data/expose_this_field.dart
index aa3b384..de31884 100644
--- a/tests/compiler/dart2js/inference/data/expose_this_field.dart
+++ b/tests/compiler/dart2js/inference/data/expose_this_field.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   exposeThis1();
diff --git a/tests/compiler/dart2js/inference/data/expose_this_mask.dart b/tests/compiler/dart2js/inference/data/expose_this_mask.dart
index 7dd84bb..693de3c 100644
--- a/tests/compiler/dart2js/inference/data/expose_this_mask.dart
+++ b/tests/compiler/dart2js/inference/data/expose_this_mask.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Check that exposure of this is correctly restricted through the receiver
 /// mask.
 
@@ -243,7 +245,7 @@
 
   /*member: Class7.:[exact=Class7]*/
   Class7() : field7a = 42 {
-    /*invoke: [subclass=Class7]*/ field7b(/*[subclass=Class7]*/ field7a);
+    field7b /*invoke: [subclass=Class7]*/ (/*[subclass=Class7]*/ field7a);
   }
 }
 
diff --git a/tests/compiler/dart2js/inference/data/expose_this_super.dart b/tests/compiler/dart2js/inference/data/expose_this_super.dart
index cb7b1cc..73116b8 100644
--- a/tests/compiler/dart2js/inference/data/expose_this_super.dart
+++ b/tests/compiler/dart2js/inference/data/expose_this_super.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   exposeThis1();
diff --git a/tests/compiler/dart2js/inference/data/factory.dart b/tests/compiler/dart2js/inference/data/factory.dart
index 60a789c..c7ef2d0 100644
--- a/tests/compiler/dart2js/inference/data/factory.dart
+++ b/tests/compiler/dart2js/inference/data/factory.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class A {
   /*member: A.generative:[exact=A]*/
   A.generative();
diff --git a/tests/compiler/dart2js/inference/data/field_type.dart b/tests/compiler/dart2js/inference/data/field_type.dart
index 48ec69b..e74c6e5 100644
--- a/tests/compiler/dart2js/inference/data/field_type.dart
+++ b/tests/compiler/dart2js/inference/data/field_type.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   test1();
diff --git a/tests/compiler/dart2js/inference/data/fields.dart b/tests/compiler/dart2js/inference/data/fields.dart
index 3fbf03a..14eff79 100644
--- a/tests/compiler/dart2js/inference/data/fields.dart
+++ b/tests/compiler/dart2js/inference/data/fields.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   fieldGetUnset();
diff --git a/tests/compiler/dart2js/inference/data/final_field.dart b/tests/compiler/dart2js/inference/data/final_field.dart
index c0558d0..ef65501 100644
--- a/tests/compiler/dart2js/inference/data/final_field.dart
+++ b/tests/compiler/dart2js/inference/data/final_field.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class A {
   /*member: A.intField:[exact=JSUInt31]*/
   final intField;
diff --git a/tests/compiler/dart2js/inference/data/final_field2.dart b/tests/compiler/dart2js/inference/data/final_field2.dart
index d4ee03f..6e1e01d 100644
--- a/tests/compiler/dart2js/inference/data/final_field2.dart
+++ b/tests/compiler/dart2js/inference/data/final_field2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that a non-used generative constructor does not prevent
 // inferring types for fields.
 
diff --git a/tests/compiler/dart2js/inference/data/final_field3.dart b/tests/compiler/dart2js/inference/data/final_field3.dart
index 87925cb..a87aa96 100644
--- a/tests/compiler/dart2js/inference/data/final_field3.dart
+++ b/tests/compiler/dart2js/inference/data/final_field3.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that we are analyzing field parameters correctly.
 
 class A {
diff --git a/tests/compiler/dart2js/inference/data/finalized_type_variable.dart b/tests/compiler/dart2js/inference/data/finalized_type_variable.dart
index a3eb54c..1d81014 100644
--- a/tests/compiler/dart2js/inference/data/finalized_type_variable.dart
+++ b/tests/compiler/dart2js/inference/data/finalized_type_variable.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: AppView.:[subclass=AppView]*/
 abstract class AppView<T> {
   /*member: AppView.ctx:Union(null, [exact=CardComponent2], [exact=CardComponent])*/
diff --git a/tests/compiler/dart2js/inference/data/for.dart b/tests/compiler/dart2js/inference/data/for.dart
index 5af242e..e36b2ca 100644
--- a/tests/compiler/dart2js/inference/data/for.dart
+++ b/tests/compiler/dart2js/inference/data/for.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   simpleFor();
diff --git a/tests/compiler/dart2js/inference/data/for_in.dart b/tests/compiler/dart2js/inference/data/for_in.dart
index 301bcf7..b57661a 100644
--- a/tests/compiler/dart2js/inference/data/for_in.dart
+++ b/tests/compiler/dart2js/inference/data/for_in.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   forInDirect();
diff --git a/tests/compiler/dart2js/inference/data/foreign.dart b/tests/compiler/dart2js/inference/data/foreign.dart
index 8c07276..2f304f7 100644
--- a/tests/compiler/dart2js/inference/data/foreign.dart
+++ b/tests/compiler/dart2js/inference/data/foreign.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// ignore: IMPORT_INTERNAL_LIBRARY
 import 'dart:_foreign_helper';
 
diff --git a/tests/compiler/dart2js/inference/data/general.dart b/tests/compiler/dart2js/inference/data/general.dart
index f858024..209f884 100644
--- a/tests/compiler/dart2js/inference/data/general.dart
+++ b/tests/compiler/dart2js/inference/data/general.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: returnNum1:Union([exact=JSDouble], [exact=JSUInt31])*/
 returnNum1(/*Value([exact=JSBool], value: true)*/ a) {
   if (a)
@@ -654,7 +656,7 @@
 }
 
 /*member: testReturnInvokeDynamicGetter:[null|subclass=Object]*/
-testReturnInvokeDynamicGetter() => new A(). /*invoke: [exact=A]*/ myFactory();
+testReturnInvokeDynamicGetter() => new A().myFactory /*invoke: [exact=A]*/ ();
 
 /*member: topLevelConstList:Container([exact=JSUnmodifiableArray], element: [exact=JSUInt31], length: 1)*/
 var topLevelConstList = const [42];
diff --git a/tests/compiler/dart2js/inference/data/general6.dart b/tests/compiler/dart2js/inference/data/general6.dart
index fab306e..b6c045c 100644
--- a/tests/compiler/dart2js/inference/data/general6.dart
+++ b/tests/compiler/dart2js/inference/data/general6.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: foo:[exact=JSUInt31]*/
 foo() {
   var a = [1, 2, 3];
diff --git a/tests/compiler/dart2js/inference/data/general7.dart b/tests/compiler/dart2js/inference/data/general7.dart
index bd8da3f3..80bfbf8 100644
--- a/tests/compiler/dart2js/inference/data/general7.dart
+++ b/tests/compiler/dart2js/inference/data/general7.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// This file contains tests of assertions when assertions are _disabled_. The
 /// file 'general7_ea.dart' contains similar tests for when assertions are
 /// _enabled_.
diff --git a/tests/compiler/dart2js/inference/data/general7_ea.dart b/tests/compiler/dart2js/inference/data/general7_ea.dart
index 733c016..fe01ac9 100644
--- a/tests/compiler/dart2js/inference/data/general7_ea.dart
+++ b/tests/compiler/dart2js/inference/data/general7_ea.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// This file contains tests of assertions when assertions are _enabled_. The
 /// file 'general7.dart' contains similar tests for when assertions are
 /// _disabled_.
diff --git a/tests/compiler/dart2js/inference/data/general8a.dart b/tests/compiler/dart2js/inference/data/general8a.dart
index 8f3815a..c21a00d 100644
--- a/tests/compiler/dart2js/inference/data/general8a.dart
+++ b/tests/compiler/dart2js/inference/data/general8a.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: foo:Value([exact=JSBool], value: false)*/
 foo(/*Value([exact=JSBool], value: false)*/ x) {
   return x;
diff --git a/tests/compiler/dart2js/inference/data/general8b.dart b/tests/compiler/dart2js/inference/data/general8b.dart
index baed070..2fd6381 100644
--- a/tests/compiler/dart2js/inference/data/general8b.dart
+++ b/tests/compiler/dart2js/inference/data/general8b.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: foo:[exact=JSBool]*/
 foo(/*[exact=JSUInt31]*/ x) {
   if (x /*invoke: [exact=JSUInt31]*/ > 3) return true;
diff --git a/tests/compiler/dart2js/inference/data/global_field_closure.dart b/tests/compiler/dart2js/inference/data/global_field_closure.dart
index 616c6f1..cdd3751 100644
--- a/tests/compiler/dart2js/inference/data/global_field_closure.dart
+++ b/tests/compiler/dart2js/inference/data/global_field_closure.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: method1:[exact=JSUInt31]*/
 method1() {
   return 42;
diff --git a/tests/compiler/dart2js/inference/data/global_field_closure2.dart b/tests/compiler/dart2js/inference/data/global_field_closure2.dart
index 42991dc..15a70d3 100644
--- a/tests/compiler/dart2js/inference/data/global_field_closure2.dart
+++ b/tests/compiler/dart2js/inference/data/global_field_closure2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: method:[exact=JSUInt31]*/
 // Called only via [foo] with a small integer.
 method(/*[exact=JSUInt31]*/ a) {
diff --git a/tests/compiler/dart2js/inference/data/if.dart b/tests/compiler/dart2js/inference/data/if.dart
index ecb1a6f..b9ffbb7 100644
--- a/tests/compiler/dart2js/inference/data/if.dart
+++ b/tests/compiler/dart2js/inference/data/if.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   simpleIfThen();
diff --git a/tests/compiler/dart2js/inference/data/if_null.dart b/tests/compiler/dart2js/inference/data/if_null.dart
index 988f649..a079f65 100644
--- a/tests/compiler/dart2js/inference/data/if_null.dart
+++ b/tests/compiler/dart2js/inference/data/if_null.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   ifNull();
diff --git a/tests/compiler/dart2js/inference/data/index.dart b/tests/compiler/dart2js/inference/data/index.dart
index 255a5be..4a00271 100644
--- a/tests/compiler/dart2js/inference/data/index.dart
+++ b/tests/compiler/dart2js/inference/data/index.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 ////////////////////////////////////////////////////////////////////////////////
 // Lookup into a singleton list.
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/tests/compiler/dart2js/inference/data/index_call.dart b/tests/compiler/dart2js/inference/data/index_call.dart
index a2c6006..4454632 100644
--- a/tests/compiler/dart2js/inference/data/index_call.dart
+++ b/tests/compiler/dart2js/inference/data/index_call.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   listIndexCall();
diff --git a/tests/compiler/dart2js/inference/data/index_postfix.dart b/tests/compiler/dart2js/inference/data/index_postfix.dart
index a861cfb..157177a 100644
--- a/tests/compiler/dart2js/inference/data/index_postfix.dart
+++ b/tests/compiler/dart2js/inference/data/index_postfix.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   listIndexPostfixIncrement();
diff --git a/tests/compiler/dart2js/inference/data/index_set.dart b/tests/compiler/dart2js/inference/data/index_set.dart
index b31b947..883962c 100644
--- a/tests/compiler/dart2js/inference/data/index_set.dart
+++ b/tests/compiler/dart2js/inference/data/index_set.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 ////////////////////////////////////////////////////////////////////////////////
 // Update to a singleton list.
 ////////////////////////////////////////////////////////////////////////////////
diff --git a/tests/compiler/dart2js/inference/data/init_get.dart b/tests/compiler/dart2js/inference/data/init_get.dart
index e940e1e..949a313 100644
--- a/tests/compiler/dart2js/inference/data/init_get.dart
+++ b/tests/compiler/dart2js/inference/data/init_get.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: getter:[exact=JSUInt31]*/
 get getter => 42;
 
diff --git a/tests/compiler/dart2js/inference/data/initializer.dart b/tests/compiler/dart2js/inference/data/initializer.dart
index b059fef..df596c8 100644
--- a/tests/compiler/dart2js/inference/data/initializer.dart
+++ b/tests/compiler/dart2js/inference/data/initializer.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   initializingFormal();
diff --git a/tests/compiler/dart2js/inference/data/instance.dart b/tests/compiler/dart2js/inference/data/instance.dart
index 9559f1ba..d883fea 100644
--- a/tests/compiler/dart2js/inference/data/instance.dart
+++ b/tests/compiler/dart2js/inference/data/instance.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   thisExact();
diff --git a/tests/compiler/dart2js/inference/data/issue13354.dart b/tests/compiler/dart2js/inference/data/issue13354.dart
index a0c669e..ab10e3a 100644
--- a/tests/compiler/dart2js/inference/data/issue13354.dart
+++ b/tests/compiler/dart2js/inference/data/issue13354.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for issue 13354.
 
 /*member: bar:[exact=JSUInt31]*/
diff --git a/tests/compiler/dart2js/inference/data/js_interop.dart b/tests/compiler/dart2js/inference/data/js_interop.dart
index 2a0f3f9..bc4f653 100644
--- a/tests/compiler/dart2js/inference/data/js_interop.dart
+++ b/tests/compiler/dart2js/inference/data/js_interop.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 @JS()
 library js_interop;
 
diff --git a/tests/compiler/dart2js/inference/data/list.dart b/tests/compiler/dart2js/inference/data/list.dart
index eb14295..aa419a3 100644
--- a/tests/compiler/dart2js/inference/data/list.dart
+++ b/tests/compiler/dart2js/inference/data/list.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:typed_data';
 
 /*member: main:[null]*/
diff --git a/tests/compiler/dart2js/inference/data/list_huge.dart b/tests/compiler/dart2js/inference/data/list_huge.dart
index d2a23ce..967b704 100644
--- a/tests/compiler/dart2js/inference/data/list_huge.dart
+++ b/tests/compiler/dart2js/inference/data/list_huge.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test for Container type for Lists with huge or negative sizes.
 
 /*member: main:[null]*/
diff --git a/tests/compiler/dart2js/inference/data/list_tracer2.dart b/tests/compiler/dart2js/inference/data/list_tracer2.dart
index 37e2e2c..001ebc6 100644
--- a/tests/compiler/dart2js/inference/data/list_tracer2.dart
+++ b/tests/compiler/dart2js/inference/data/list_tracer2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // We used to always nullify the element type of a list we are tracing in
 // the presence of a fixed length list constructor call.
 
diff --git a/tests/compiler/dart2js/inference/data/list_tracer3.dart b/tests/compiler/dart2js/inference/data/list_tracer3.dart
index 2c56101..a8212aa 100644
--- a/tests/compiler/dart2js/inference/data/list_tracer3.dart
+++ b/tests/compiler/dart2js/inference/data/list_tracer3.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // We used to always nullify the element type of a list we are tracing in
 // the presence of a fixed length list constructor call.
 
diff --git a/tests/compiler/dart2js/inference/data/list_tracer_typed_data_length.dart b/tests/compiler/dart2js/inference/data/list_tracer_typed_data_length.dart
index 460ca33..9624438 100644
--- a/tests/compiler/dart2js/inference/data/list_tracer_typed_data_length.dart
+++ b/tests/compiler/dart2js/inference/data/list_tracer_typed_data_length.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:typed_data';
 
 // TODO(johnniwinther): Fix inference for strong mode. List elements should not
diff --git a/tests/compiler/dart2js/inference/data/local_functions.dart b/tests/compiler/dart2js/inference/data/local_functions.dart
index 6d08b0a..b5f06cb 100644
--- a/tests/compiler/dart2js/inference/data/local_functions.dart
+++ b/tests/compiler/dart2js/inference/data/local_functions.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   namedLocalFunctionInvoke();
diff --git a/tests/compiler/dart2js/inference/data/local_functions_call.dart b/tests/compiler/dart2js/inference/data/local_functions_call.dart
index 42cc5b1..cd55038 100644
--- a/tests/compiler/dart2js/inference/data/local_functions_call.dart
+++ b/tests/compiler/dart2js/inference/data/local_functions_call.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // This is the same test as `closureCallToString` in 'local_functions.dart' but
 // with a different expectancy because the closed world contains less '.call'
 // methods.
diff --git a/tests/compiler/dart2js/inference/data/locals.dart b/tests/compiler/dart2js/inference/data/locals.dart
index bf0f271..92d1021 100644
--- a/tests/compiler/dart2js/inference/data/locals.dart
+++ b/tests/compiler/dart2js/inference/data/locals.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   uninitializedLocal();
diff --git a/tests/compiler/dart2js/inference/data/locals_trust.dart b/tests/compiler/dart2js/inference/data/locals_trust.dart
index 0580621..a391bd5 100644
--- a/tests/compiler/dart2js/inference/data/locals_trust.dart
+++ b/tests/compiler/dart2js/inference/data/locals_trust.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   trustLocals();
diff --git a/tests/compiler/dart2js/inference/data/logical.dart b/tests/compiler/dart2js/inference/data/logical.dart
index ed24935..6503fd9f0 100644
--- a/tests/compiler/dart2js/inference/data/logical.dart
+++ b/tests/compiler/dart2js/inference/data/logical.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   returnTrue();
diff --git a/tests/compiler/dart2js/inference/data/logical_if.dart b/tests/compiler/dart2js/inference/data/logical_if.dart
index ba19f3a..613dde8 100644
--- a/tests/compiler/dart2js/inference/data/logical_if.dart
+++ b/tests/compiler/dart2js/inference/data/logical_if.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   promotedIfThen();
diff --git a/tests/compiler/dart2js/inference/data/map.dart b/tests/compiler/dart2js/inference/data/map.dart
index bef703b..d39c7eb 100644
--- a/tests/compiler/dart2js/inference/data/map.dart
+++ b/tests/compiler/dart2js/inference/data/map.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   emptyMap();
diff --git a/tests/compiler/dart2js/inference/data/map_tracer_const.dart b/tests/compiler/dart2js/inference/data/map_tracer_const.dart
index f238ad0..3ff4fbb 100644
--- a/tests/compiler/dart2js/inference/data/map_tracer_const.dart
+++ b/tests/compiler/dart2js/inference/data/map_tracer_const.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: closure:[exact=JSUInt31]*/
 int closure(
     int
diff --git a/tests/compiler/dart2js/inference/data/map_tracer_keys.dart b/tests/compiler/dart2js/inference/data/map_tracer_keys.dart
index 0b817a2..20e469e 100644
--- a/tests/compiler/dart2js/inference/data/map_tracer_keys.dart
+++ b/tests/compiler/dart2js/inference/data/map_tracer_keys.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   test1();
diff --git a/tests/compiler/dart2js/inference/data/mixin_constructor_default_parameter_values/lib.dart b/tests/compiler/dart2js/inference/data/mixin_constructor_default_parameter_values/lib.dart
index f734696..b759f52 100644
--- a/tests/compiler/dart2js/inference/data/mixin_constructor_default_parameter_values/lib.dart
+++ b/tests/compiler/dart2js/inference/data/mixin_constructor_default_parameter_values/lib.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class _SECRET {
   /*member: _SECRET.:[exact=_SECRET]*/
   const _SECRET();
diff --git a/tests/compiler/dart2js/inference/data/mixin_constructor_default_parameter_values/main.dart b/tests/compiler/dart2js/inference/data/mixin_constructor_default_parameter_values/main.dart
index eb3692a..5138cbb 100644
--- a/tests/compiler/dart2js/inference/data/mixin_constructor_default_parameter_values/main.dart
+++ b/tests/compiler/dart2js/inference/data/mixin_constructor_default_parameter_values/main.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Ensure that the inferrer looks at default values for parameters in
 // synthetic constructors using the correct context. If the constructor call
 // to D without optional parameters is inferred using D's context, the default
diff --git a/tests/compiler/dart2js/inference/data/narrowing.dart b/tests/compiler/dart2js/inference/data/narrowing.dart
index 27c041d..04545e9 100644
--- a/tests/compiler/dart2js/inference/data/narrowing.dart
+++ b/tests/compiler/dart2js/inference/data/narrowing.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Regression test for Issue #33761: is-checks and null-checks were assumed to
 /// be true even in nested non-condition contexts.
 
diff --git a/tests/compiler/dart2js/inference/data/native.dart b/tests/compiler/dart2js/inference/data/native.dart
index a1bfd75..4cca54b 100644
--- a/tests/compiler/dart2js/inference/data/native.dart
+++ b/tests/compiler/dart2js/inference/data/native.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   nativeMethod();
diff --git a/tests/compiler/dart2js/inference/data/native2.dart b/tests/compiler/dart2js/inference/data/native2.dart
index e9b712c..88ae547 100644
--- a/tests/compiler/dart2js/inference/data/native2.dart
+++ b/tests/compiler/dart2js/inference/data/native2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // ignore: IMPORT_INTERNAL_LIBRARY
 import 'dart:_foreign_helper' as foreign show JS;
 import 'dart:html';
diff --git a/tests/compiler/dart2js/inference/data/native3.dart b/tests/compiler/dart2js/inference/data/native3.dart
index f2e7167..9ce9612 100644
--- a/tests/compiler/dart2js/inference/data/native3.dart
+++ b/tests/compiler/dart2js/inference/data/native3.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:html';
 
 /*member: main:[null]*/
diff --git a/tests/compiler/dart2js/inference/data/new.dart b/tests/compiler/dart2js/inference/data/new.dart
index fb9e9ff..aea17cd 100644
--- a/tests/compiler/dart2js/inference/data/new.dart
+++ b/tests/compiler/dart2js/inference/data/new.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   generativeConstructorCall();
diff --git a/tests/compiler/dart2js/inference/data/no_such_method.dart b/tests/compiler/dart2js/inference/data/no_such_method.dart
index af9d00a..daa1bdd 100644
--- a/tests/compiler/dart2js/inference/data/no_such_method.dart
+++ b/tests/compiler/dart2js/inference/data/no_such_method.dart
@@ -1,6 +1,8 @@
 /*member: main:[null]*/
 main() {
   missingGetter();
+
+// @dart = 2.7
   missingMethod();
   closureThroughMissingMethod();
   closureThroughMissingSetter();
diff --git a/tests/compiler/dart2js/inference/data/no_such_method1.dart b/tests/compiler/dart2js/inference/data/no_such_method1.dart
index 0c38fde..f2bac32 100644
--- a/tests/compiler/dart2js/inference/data/no_such_method1.dart
+++ b/tests/compiler/dart2js/inference/data/no_such_method1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: A.:[exact=A]*/
 class A {
   /*member: A.noSuchMethod:[exact=JSUInt31]*/
diff --git a/tests/compiler/dart2js/inference/data/no_such_method2.dart b/tests/compiler/dart2js/inference/data/no_such_method2.dart
index 6b1c548..8f56a10 100644
--- a/tests/compiler/dart2js/inference/data/no_such_method2.dart
+++ b/tests/compiler/dart2js/inference/data/no_such_method2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: A.:[subclass=B]*/
 abstract class A {
   /*member: A.noSuchMethod:[exact=JSUInt31]*/
diff --git a/tests/compiler/dart2js/inference/data/no_such_method3.dart b/tests/compiler/dart2js/inference/data/no_such_method3.dart
index 0ba1d1e..06a8679 100644
--- a/tests/compiler/dart2js/inference/data/no_such_method3.dart
+++ b/tests/compiler/dart2js/inference/data/no_such_method3.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: A.:[exact=A]*/
 class A {
   // We may ignore this for type inference because syntactically it always
diff --git a/tests/compiler/dart2js/inference/data/no_such_method4.dart b/tests/compiler/dart2js/inference/data/no_such_method4.dart
index 7e489ec..0538869 100644
--- a/tests/compiler/dart2js/inference/data/no_such_method4.dart
+++ b/tests/compiler/dart2js/inference/data/no_such_method4.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: A.:[exact=A]*/
 class A {
   // We may ignore this for type inference because it forwards to a default
diff --git a/tests/compiler/dart2js/inference/data/non_null.dart b/tests/compiler/dart2js/inference/data/non_null.dart
index 96be59d..d93cd29 100644
--- a/tests/compiler/dart2js/inference/data/non_null.dart
+++ b/tests/compiler/dart2js/inference/data/non_null.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   nonNullStaticField();
diff --git a/tests/compiler/dart2js/inference/data/null.dart b/tests/compiler/dart2js/inference/data/null.dart
index 05fd76b..985c372 100644
--- a/tests/compiler/dart2js/inference/data/null.dart
+++ b/tests/compiler/dart2js/inference/data/null.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   ifThenNullCheck(0);
diff --git a/tests/compiler/dart2js/inference/data/optimizer_hints.dart b/tests/compiler/dart2js/inference/data/optimizer_hints.dart
index c51ce4f..673b6a4 100644
--- a/tests/compiler/dart2js/inference/data/optimizer_hints.dart
+++ b/tests/compiler/dart2js/inference/data/optimizer_hints.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   assumeDynamic();
diff --git a/tests/compiler/dart2js/inference/data/parameters_trust.dart b/tests/compiler/dart2js/inference/data/parameters_trust.dart
index 63fbb49..3cdb9d4 100644
--- a/tests/compiler/dart2js/inference/data/parameters_trust.dart
+++ b/tests/compiler/dart2js/inference/data/parameters_trust.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*member: main:[null]*/
diff --git a/tests/compiler/dart2js/inference/data/postfix.dart b/tests/compiler/dart2js/inference/data/postfix.dart
index 8cba579..8059eac 100644
--- a/tests/compiler/dart2js/inference/data/postfix.dart
+++ b/tests/compiler/dart2js/inference/data/postfix.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   localPostfixInc();
diff --git a/tests/compiler/dart2js/inference/data/postfix_prefix.dart b/tests/compiler/dart2js/inference/data/postfix_prefix.dart
index 9342997..881b489 100644
--- a/tests/compiler/dart2js/inference/data/postfix_prefix.dart
+++ b/tests/compiler/dart2js/inference/data/postfix_prefix.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: index:[empty]*/
 dynamic get index => throw '';
 
diff --git a/tests/compiler/dart2js/inference/data/prefix.dart b/tests/compiler/dart2js/inference/data/prefix.dart
index 544ae70..bb1cfb1 100644
--- a/tests/compiler/dart2js/inference/data/prefix.dart
+++ b/tests/compiler/dart2js/inference/data/prefix.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   localPrefixInc();
diff --git a/tests/compiler/dart2js/inference/data/refine_captured_locals.dart b/tests/compiler/dart2js/inference/data/refine_captured_locals.dart
index 5a13864..fcaecf2 100644
--- a/tests/compiler/dart2js/inference/data/refine_captured_locals.dart
+++ b/tests/compiler/dart2js/inference/data/refine_captured_locals.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   refineBeforeCapture();
diff --git a/tests/compiler/dart2js/inference/data/refine_locals.dart b/tests/compiler/dart2js/inference/data/refine_locals.dart
index 1da00f4..6dd425a 100644
--- a/tests/compiler/dart2js/inference/data/refine_locals.dart
+++ b/tests/compiler/dart2js/inference/data/refine_locals.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   refineToClass();
diff --git a/tests/compiler/dart2js/inference/data/refine_order.dart b/tests/compiler/dart2js/inference/data/refine_order.dart
index 1a0b93e..cef03af 100644
--- a/tests/compiler/dart2js/inference/data/refine_order.dart
+++ b/tests/compiler/dart2js/inference/data/refine_order.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: Class.:[exact=Class]*/
 class Class {
   /*member: Class.field:[exact=JSUInt31]*/
diff --git a/tests/compiler/dart2js/inference/data/return.dart b/tests/compiler/dart2js/inference/data/return.dart
index 01a574f..72bef6f 100644
--- a/tests/compiler/dart2js/inference/data/return.dart
+++ b/tests/compiler/dart2js/inference/data/return.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   return null;
diff --git a/tests/compiler/dart2js/inference/data/simple.dart b/tests/compiler/dart2js/inference/data/simple.dart
index ada01a1..0fc4b6f 100644
--- a/tests/compiler/dart2js/inference/data/simple.dart
+++ b/tests/compiler/dart2js/inference/data/simple.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   zero();
diff --git a/tests/compiler/dart2js/inference/data/static.dart b/tests/compiler/dart2js/inference/data/static.dart
index e3edc37..f641d1a 100644
--- a/tests/compiler/dart2js/inference/data/static.dart
+++ b/tests/compiler/dart2js/inference/data/static.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   simpleStaticCall();
diff --git a/tests/compiler/dart2js/inference/data/static_get.dart b/tests/compiler/dart2js/inference/data/static_get.dart
index 0a3bf8a..4228594 100644
--- a/tests/compiler/dart2js/inference/data/static_get.dart
+++ b/tests/compiler/dart2js/inference/data/static_get.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   getTopLevelFieldUninitialized();
diff --git a/tests/compiler/dart2js/inference/data/static_set.dart b/tests/compiler/dart2js/inference/data/static_set.dart
index 80c95eb..f585a7a 100644
--- a/tests/compiler/dart2js/inference/data/static_set.dart
+++ b/tests/compiler/dart2js/inference/data/static_set.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   setTopLevelFieldUninitialized();
diff --git a/tests/compiler/dart2js/inference/data/static_type.dart b/tests/compiler/dart2js/inference/data/static_type.dart
index d9b0e0b..3e698f1 100644
--- a/tests/compiler/dart2js/inference/data/static_type.dart
+++ b/tests/compiler/dart2js/inference/data/static_type.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class C<T> {
   /*member: C.field:Union([exact=JSString], [exact=JSUInt31])*/
   final T field;
@@ -237,19 +239,19 @@
 /*member: fixedFieldInvoke:[null|subclass=JSInt]*/
 fixedFieldInvoke() {
   C<int> c = new C<int>(0);
-  return c. /*invoke: [exact=C]*/ fixedFunctionField();
+  return c.fixedFunctionField /*invoke: [exact=C]*/ ();
 }
 
 /*member: fieldInvoke1:[null|subclass=JSInt]*/
 fieldInvoke1() {
   C<int> c = new C<int>(0);
-  return c. /*invoke: [exact=C]*/ functionField();
+  return c.functionField /*invoke: [exact=C]*/ ();
 }
 
 /*member: fieldInvoke2:[null|exact=JSString]*/
 fieldInvoke2() {
   C<String> c = new C<String>('');
-  return c. /*invoke: [exact=C]*/ functionField();
+  return c.functionField /*invoke: [exact=C]*/ ();
 }
 
 /*member: methodInvoke1:[exact=JSUInt31]*/
@@ -279,7 +281,7 @@
 /*member: fixedGetterInvoke:[null|subclass=JSInt]*/
 fixedGetterInvoke() {
   C<int> c = new C<int>(0);
-  return c. /*invoke: [exact=C]*/ fixedFunctionGetter();
+  return c.fixedFunctionGetter /*invoke: [exact=C]*/ ();
 }
 
 /*member: getterAccess1:[exact=JSUInt31]*/
@@ -297,25 +299,25 @@
 /*member: getterInvoke1:[null|subclass=JSInt]*/
 getterInvoke1() {
   C<int> c = new C<int>(0);
-  return c. /*invoke: [exact=C]*/ functionGetter();
+  return c.functionGetter /*invoke: [exact=C]*/ ();
 }
 
 /*member: getterInvoke2:[null|exact=JSString]*/
 getterInvoke2() {
   C<String> c = new C<String>('');
-  return c. /*invoke: [exact=C]*/ functionGetter();
+  return c.functionGetter /*invoke: [exact=C]*/ ();
 }
 
 /*member: genericFieldInvoke1:[null|exact=JSString]*/
 genericFieldInvoke1() {
   C<int> c = new C<int>(0);
-  return c. /*invoke: [exact=C]*/ genericFunctionField('');
+  return c.genericFunctionField /*invoke: [exact=C]*/ ('');
 }
 
 /*member: genericFieldInvoke2:[null|subclass=JSInt]*/
 genericFieldInvoke2() {
   C<String> c = new C<String>('');
-  return c. /*invoke: [exact=C]*/ genericFunctionField(0);
+  return c.genericFunctionField /*invoke: [exact=C]*/ (0);
 }
 
 /*member: genericMethodInvoke1:[exact=JSString]*/
@@ -333,11 +335,11 @@
 /*member: genericGetterInvoke1:[null|exact=JSString]*/
 genericGetterInvoke1() {
   C<int> c = new C<int>(0);
-  return c. /*invoke: [exact=C]*/ genericFunctionGetter('');
+  return c.genericFunctionGetter /*invoke: [exact=C]*/ ('');
 }
 
 /*member: genericGetterInvoke2:[null|subclass=JSInt]*/
 genericGetterInvoke2() {
   C<String> c = new C<String>('');
-  return c. /*invoke: [exact=C]*/ genericFunctionGetter(0);
+  return c.genericFunctionGetter /*invoke: [exact=C]*/ (0);
 }
diff --git a/tests/compiler/dart2js/inference/data/super_get.dart b/tests/compiler/dart2js/inference/data/super_get.dart
index 680d080..ed04287 100644
--- a/tests/compiler/dart2js/inference/data/super_get.dart
+++ b/tests/compiler/dart2js/inference/data/super_get.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   superFieldAccess();
diff --git a/tests/compiler/dart2js/inference/data/super_invoke.dart b/tests/compiler/dart2js/inference/data/super_invoke.dart
index 8392f1d..9521e0b 100644
--- a/tests/compiler/dart2js/inference/data/super_invoke.dart
+++ b/tests/compiler/dart2js/inference/data/super_invoke.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   superMethodInvoke();
diff --git a/tests/compiler/dart2js/inference/data/super_set.dart b/tests/compiler/dart2js/inference/data/super_set.dart
index 1365c01..ffa6c73 100644
--- a/tests/compiler/dart2js/inference/data/super_set.dart
+++ b/tests/compiler/dart2js/inference/data/super_set.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   superFieldUpdate();
diff --git a/tests/compiler/dart2js/inference/data/switch.dart b/tests/compiler/dart2js/inference/data/switch.dart
index 83468c6..df79306 100644
--- a/tests/compiler/dart2js/inference/data/switch.dart
+++ b/tests/compiler/dart2js/inference/data/switch.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   switchWithoutDefault();
diff --git a/tests/compiler/dart2js/inference/data/switch1.dart b/tests/compiler/dart2js/inference/data/switch1.dart
index a9f9e32..3d5f76d 100644
--- a/tests/compiler/dart2js/inference/data/switch1.dart
+++ b/tests/compiler/dart2js/inference/data/switch1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: foo:[exact=JSString]*/
 foo(int /*[subclass=JSInt]*/ x) {
   var a = "one";
diff --git a/tests/compiler/dart2js/inference/data/switch2.dart b/tests/compiler/dart2js/inference/data/switch2.dart
index c2aaa71..7783107 100644
--- a/tests/compiler/dart2js/inference/data/switch2.dart
+++ b/tests/compiler/dart2js/inference/data/switch2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: foo:Value([null|exact=JSString], value: "two")*/
 foo(int /*[subclass=JSInt]*/ x) {
   var a;
diff --git a/tests/compiler/dart2js/inference/data/switch5.dart b/tests/compiler/dart2js/inference/data/switch5.dart
index 3263b55..666a285 100644
--- a/tests/compiler/dart2js/inference/data/switch5.dart
+++ b/tests/compiler/dart2js/inference/data/switch5.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: foo:[null|exact=JSUInt31]*/
 foo(int /*[subclass=JSInt]*/ x) {
   var a;
diff --git a/tests/compiler/dart2js/inference/data/switch6.dart b/tests/compiler/dart2js/inference/data/switch6.dart
index 2155d6f..cb2f0ae 100644
--- a/tests/compiler/dart2js/inference/data/switch6.dart
+++ b/tests/compiler/dart2js/inference/data/switch6.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: foo:[null|exact=JSUInt31]*/
 foo(int /*[subclass=JSInt]*/ x) {
   var a;
diff --git a/tests/compiler/dart2js/inference/data/throw.dart b/tests/compiler/dart2js/inference/data/throw.dart
index e844463..b40e3d8 100644
--- a/tests/compiler/dart2js/inference/data/throw.dart
+++ b/tests/compiler/dart2js/inference/data/throw.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   unconditionalThrow();
diff --git a/tests/compiler/dart2js/inference/data/try.dart b/tests/compiler/dart2js/inference/data/try.dart
index 2668f73..5f43edf 100644
--- a/tests/compiler/dart2js/inference/data/try.dart
+++ b/tests/compiler/dart2js/inference/data/try.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   emptyTryCatch();
diff --git a/tests/compiler/dart2js/inference/data/try_catch.dart b/tests/compiler/dart2js/inference/data/try_catch.dart
index 9dfe310..0a41400 100644
--- a/tests/compiler/dart2js/inference/data/try_catch.dart
+++ b/tests/compiler/dart2js/inference/data/try_catch.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: returnInt1:[exact=JSUInt31]*/
 returnInt1() {
   var a = 42;
diff --git a/tests/compiler/dart2js/inference/data/type_literal.dart b/tests/compiler/dart2js/inference/data/type_literal.dart
index 48f1ce8..ab67c1c 100644
--- a/tests/compiler/dart2js/inference/data/type_literal.dart
+++ b/tests/compiler/dart2js/inference/data/type_literal.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   typeLiteral();
diff --git a/tests/compiler/dart2js/inference/data/unregister_call.dart b/tests/compiler/dart2js/inference/data/unregister_call.dart
index b07989b..00bbbed 100644
--- a/tests/compiler/dart2js/inference/data/unregister_call.dart
+++ b/tests/compiler/dart2js/inference/data/unregister_call.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: a:Value([exact=JSString], value: "")*/
 var a = '';
 
diff --git a/tests/compiler/dart2js/inference/data/use_static_types.dart b/tests/compiler/dart2js/inference/data/use_static_types.dart
index f701b6d..2011369 100644
--- a/tests/compiler/dart2js/inference/data/use_static_types.dart
+++ b/tests/compiler/dart2js/inference/data/use_static_types.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: A.:[exact=A]*/
 class A {}
 
@@ -224,29 +226,29 @@
 /*member: invokeFunctionTypedInstanceGetter1:[null|subclass=A]*/
 invokeFunctionTypedInstanceGetter1(
         GenericClass<A> /*[exact=GenericClass]*/ c) =>
-    c. /*invoke: [exact=GenericClass]*/ functionTypedGetter();
+    c.functionTypedGetter /*invoke: [exact=GenericClass]*/ ();
 
 /*member: invokeFunctionTypedInstanceGetter2:[null|exact=B]*/
 invokeFunctionTypedInstanceGetter2(
         GenericClass<B> /*[exact=GenericClass]*/ c) =>
-    c. /*invoke: [exact=GenericClass]*/ functionTypedGetter();
+    c.functionTypedGetter /*invoke: [exact=GenericClass]*/ ();
 
 /*member: invokeFunctionTypedInstanceGetter3:[null|exact=C]*/
 invokeFunctionTypedInstanceGetter3(
         GenericClass<C> /*[exact=GenericClass]*/ c) =>
-    c. /*invoke: [exact=GenericClass]*/ functionTypedGetter();
+    c.functionTypedGetter /*invoke: [exact=GenericClass]*/ ();
 
 /*member: invokeFunctionTypedInstanceField1:[null|subclass=A]*/
 invokeFunctionTypedInstanceField1(GenericClass<A> /*[exact=GenericClass]*/ c) =>
-    c. /*invoke: [exact=GenericClass]*/ functionTypedField();
+    c.functionTypedField /*invoke: [exact=GenericClass]*/ ();
 
 /*member: invokeFunctionTypedInstanceField2:[null|exact=B]*/
 invokeFunctionTypedInstanceField2(GenericClass<B> /*[exact=GenericClass]*/ c) =>
-    c. /*invoke: [exact=GenericClass]*/ functionTypedField();
+    c.functionTypedField /*invoke: [exact=GenericClass]*/ ();
 
 /*member: invokeFunctionTypedInstanceField3:[null|exact=C]*/
 invokeFunctionTypedInstanceField3(GenericClass<C> /*[exact=GenericClass]*/ c) =>
-    c. /*invoke: [exact=GenericClass]*/ functionTypedField();
+    c.functionTypedField /*invoke: [exact=GenericClass]*/ ();
 
 /*member: invokeFunctionTypedSuperMethod1:[null|subclass=Object]*/
 invokeFunctionTypedSuperMethod1(
diff --git a/tests/compiler/dart2js/inference/data/while.dart b/tests/compiler/dart2js/inference/data/while.dart
index 73b214e..9fe86ef 100644
--- a/tests/compiler/dart2js/inference/data/while.dart
+++ b/tests/compiler/dart2js/inference/data/while.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   simpleWhile();
diff --git a/tests/compiler/dart2js/inference/data/yield.dart b/tests/compiler/dart2js/inference/data/yield.dart
index 3f89f21..0575c7a 100644
--- a/tests/compiler/dart2js/inference/data/yield.dart
+++ b/tests/compiler/dart2js/inference/data/yield.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[null]*/
 main() {
   yieldZero();
diff --git a/tests/compiler/dart2js/inference/inference0_test.dart b/tests/compiler/dart2js/inference/inference0_test.dart
index 3f3ae82..7871c11 100644
--- a/tests/compiler/dart2js/inference/inference0_test.dart
+++ b/tests/compiler/dart2js/inference/inference0_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'inference_test_helper.dart';
 
 main(List<String> args) {
diff --git a/tests/compiler/dart2js/inference/inference1_test.dart b/tests/compiler/dart2js/inference/inference1_test.dart
index ba475ac..7da4878 100644
--- a/tests/compiler/dart2js/inference/inference1_test.dart
+++ b/tests/compiler/dart2js/inference/inference1_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'inference_test_helper.dart';
 
 main(List<String> args) {
diff --git a/tests/compiler/dart2js/inference/inference2_test.dart b/tests/compiler/dart2js/inference/inference2_test.dart
index 68b3c20..2f38c10 100644
--- a/tests/compiler/dart2js/inference/inference2_test.dart
+++ b/tests/compiler/dart2js/inference/inference2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'inference_test_helper.dart';
 
 main(List<String> args) {
diff --git a/tests/compiler/dart2js/inference/inference3_test.dart b/tests/compiler/dart2js/inference/inference3_test.dart
index 6161412..596df54 100644
--- a/tests/compiler/dart2js/inference/inference3_test.dart
+++ b/tests/compiler/dart2js/inference/inference3_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'inference_test_helper.dart';
 
 main(List<String> args) {
diff --git a/tests/compiler/dart2js/inference/inference_data/called_in_loop.dart b/tests/compiler/dart2js/inference/inference_data/called_in_loop.dart
index 884773e..7c98ca6 100644
--- a/tests/compiler/dart2js/inference/inference_data/called_in_loop.dart
+++ b/tests/compiler/dart2js/inference/inference_data/called_in_loop.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   staticCalledInForLoop();
   staticCalledInForInLoop();
diff --git a/tests/compiler/dart2js/inference/inference_data/cannot_throw.dart b/tests/compiler/dart2js/inference/inference_data/cannot_throw.dart
index 9c516ba..51862bd 100644
--- a/tests/compiler/dart2js/inference/inference_data/cannot_throw.dart
+++ b/tests/compiler/dart2js/inference/inference_data/cannot_throw.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   noThrows();
   noInline();
diff --git a/tests/compiler/dart2js/inference/inference_data/function_apply.dart b/tests/compiler/dart2js/inference/inference_data/function_apply.dart
index a74ae06..a253f10 100644
--- a/tests/compiler/dart2js/inference/inference_data/function_apply.dart
+++ b/tests/compiler/dart2js/inference/inference_data/function_apply.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   directCall();
   indirectCall();
diff --git a/tests/compiler/dart2js/inference/inference_data_test.dart b/tests/compiler/dart2js/inference/inference_data_test.dart
index e89e33e..48392cd 100644
--- a/tests/compiler/dart2js/inference/inference_data_test.dart
+++ b/tests/compiler/dart2js/inference/inference_data_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:io';
 import 'package:_fe_analyzer_shared/src/testing/features.dart';
 import 'package:async_helper/async_helper.dart';
diff --git a/tests/compiler/dart2js/inference/inference_test_helper.dart b/tests/compiler/dart2js/inference/inference_test_helper.dart
index d0b6caa..5e70947 100644
--- a/tests/compiler/dart2js/inference/inference_test_helper.dart
+++ b/tests/compiler/dart2js/inference/inference_test_helper.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:io';
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/closure.dart';
diff --git a/tests/compiler/dart2js/inference/list_tracer_test.dart b/tests/compiler/dart2js/inference/list_tracer_test.dart
index 9377f4b..f63d8c1 100644
--- a/tests/compiler/dart2js/inference/list_tracer_test.dart
+++ b/tests/compiler/dart2js/inference/list_tracer_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/inferrer/typemasks/masks.dart';
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js/inference/load_deferred_library_test.dart b/tests/compiler/dart2js/inference/load_deferred_library_test.dart
index 716d334..aad3724 100644
--- a/tests/compiler/dart2js/inference/load_deferred_library_test.dart
+++ b/tests/compiler/dart2js/inference/load_deferred_library_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/commandline_options.dart';
 import 'package:compiler/src/common_elements.dart';
diff --git a/tests/compiler/dart2js/inference/map_tracer_test.dart b/tests/compiler/dart2js/inference/map_tracer_test.dart
index 7e2b849..77f899e 100644
--- a/tests/compiler/dart2js/inference/map_tracer_test.dart
+++ b/tests/compiler/dart2js/inference/map_tracer_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/elements/entities.dart';
diff --git a/tests/compiler/dart2js/inference/show.dart b/tests/compiler/dart2js/inference/show.dart
index 725f6dc..d0ab85f 100644
--- a/tests/compiler/dart2js/inference/show.dart
+++ b/tests/compiler/dart2js/inference/show.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Helper program that shows the inferrer data on a dart program.
 
 import 'package:args/args.dart';
diff --git a/tests/compiler/dart2js/inference/side_effects/annotations.dart b/tests/compiler/dart2js/inference/side_effects/annotations.dart
index a7d5f65..293ccdc 100644
--- a/tests/compiler/dart2js/inference/side_effects/annotations.dart
+++ b/tests/compiler/dart2js/inference/side_effects/annotations.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Static field used in tests below.
 var field;
 
diff --git a/tests/compiler/dart2js/inference/side_effects/foreign.dart b/tests/compiler/dart2js/inference/side_effects/foreign.dart
index ab10b35..d73e3a4 100644
--- a/tests/compiler/dart2js/inference/side_effects/foreign.dart
+++ b/tests/compiler/dart2js/inference/side_effects/foreign.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// ignore: IMPORT_INTERNAL_LIBRARY
 import 'dart:_foreign_helper';
 
diff --git a/tests/compiler/dart2js/inference/side_effects/local_functions.dart b/tests/compiler/dart2js/inference/side_effects/local_functions.dart
index b6a53a0..01ff04a 100644
--- a/tests/compiler/dart2js/inference/side_effects/local_functions.dart
+++ b/tests/compiler/dart2js/inference/side_effects/local_functions.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 var field;
 
 /*member: anonymousClosureUnused:SideEffects(reads nothing; writes nothing)*/
diff --git a/tests/compiler/dart2js/inference/side_effects/methods.dart b/tests/compiler/dart2js/inference/side_effects/methods.dart
index 99a0278..c1e33a7 100644
--- a/tests/compiler/dart2js/inference/side_effects/methods.dart
+++ b/tests/compiler/dart2js/inference/side_effects/methods.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Static field used in tests below.
 var field;
 
diff --git a/tests/compiler/dart2js/inference/side_effects/out_of_order.dart b/tests/compiler/dart2js/inference/side_effects/out_of_order.dart
index c8501e3..58f4f3d 100644
--- a/tests/compiler/dart2js/inference/side_effects/out_of_order.dart
+++ b/tests/compiler/dart2js/inference/side_effects/out_of_order.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test the capability of the side effects computation based on
 // [SideEffectsBuilder].
 //
diff --git a/tests/compiler/dart2js/inference/side_effects/string_interpolation.dart b/tests/compiler/dart2js/inference/side_effects/string_interpolation.dart
index e85be1f..444f3f1 100644
--- a/tests/compiler/dart2js/inference/side_effects/string_interpolation.dart
+++ b/tests/compiler/dart2js/inference/side_effects/string_interpolation.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: stringInterpolation:SideEffects(reads nothing; writes anything)*/
 stringInterpolation() => '${null}';
 
diff --git a/tests/compiler/dart2js/inference/side_effects_test.dart b/tests/compiler/dart2js/inference/side_effects_test.dart
index 09f0bb4..f6b92f1 100644
--- a/tests/compiler/dart2js/inference/side_effects_test.dart
+++ b/tests/compiler/dart2js/inference/side_effects_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:io';
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/closure.dart';
diff --git a/tests/compiler/dart2js/inference/trivial_abstract_value_domain_test.dart b/tests/compiler/dart2js/inference/trivial_abstract_value_domain_test.dart
index 6a8f389..6929dfd 100644
--- a/tests/compiler/dart2js/inference/trivial_abstract_value_domain_test.dart
+++ b/tests/compiler/dart2js/inference/trivial_abstract_value_domain_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:args/args.dart';
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/commandline_options.dart';
diff --git a/tests/compiler/dart2js/inference/type_combination_test.dart b/tests/compiler/dart2js/inference/type_combination_test.dart
index cc65647..e7f96a5 100644
--- a/tests/compiler/dart2js/inference/type_combination_test.dart
+++ b/tests/compiler/dart2js/inference/type_combination_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
 import 'package:compiler/src/common_elements.dart';
diff --git a/tests/compiler/dart2js/inference/type_mask2_test.dart b/tests/compiler/dart2js/inference/type_mask2_test.dart
index ac8afe8..c4d5bef 100644
--- a/tests/compiler/dart2js/inference/type_mask2_test.dart
+++ b/tests/compiler/dart2js/inference/type_mask2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library type_mask2_test;
 
 import 'dart:async';
diff --git a/tests/compiler/dart2js/inference/type_mask_disjoint_test.dart b/tests/compiler/dart2js/inference/type_mask_disjoint_test.dart
index ab1ab7a..13732c5 100644
--- a/tests/compiler/dart2js/inference/type_mask_disjoint_test.dart
+++ b/tests/compiler/dart2js/inference/type_mask_disjoint_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
 import 'package:compiler/src/common_elements.dart';
diff --git a/tests/compiler/dart2js/inference/type_mask_test.dart b/tests/compiler/dart2js/inference/type_mask_test.dart
index 53e6077..d11d26d 100644
--- a/tests/compiler/dart2js/inference/type_mask_test.dart
+++ b/tests/compiler/dart2js/inference/type_mask_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/common.dart';
 import 'package:compiler/src/common_elements.dart';
diff --git a/tests/compiler/dart2js/inference/type_mask_test_helper.dart b/tests/compiler/dart2js/inference/type_mask_test_helper.dart
index 6da6a0d..3225032 100644
--- a/tests/compiler/dart2js/inference/type_mask_test_helper.dart
+++ b/tests/compiler/dart2js/inference/type_mask_test_helper.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library type_mask_test_helper;
 
 import 'package:compiler/src/inferrer/typemasks/masks.dart';
diff --git a/tests/compiler/dart2js/inference/union_type_test.dart b/tests/compiler/dart2js/inference/union_type_test.dart
index e938293..83e86fd 100644
--- a/tests/compiler/dart2js/inference/union_type_test.dart
+++ b/tests/compiler/dart2js/inference/union_type_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:async_helper/async_helper.dart";
 import "package:expect/expect.dart";
 import 'package:compiler/src/inferrer/typemasks/masks.dart';
diff --git a/tests/compiler/dart2js/inlining/data/conditional.dart b/tests/compiler/dart2js/inlining/data/conditional.dart
index c19404f..1e08d9c 100644
--- a/tests/compiler/dart2js/inlining/data/conditional.dart
+++ b/tests/compiler/dart2js/inlining/data/conditional.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Tests for the heuristics on conditional expression whose condition is a
 // parameter for which the max, instead of the sum, of the branch sizes is used.
 
diff --git a/tests/compiler/dart2js/inlining/data/constructor.dart b/tests/compiler/dart2js/inlining/data/constructor.dart
index d60a569..f9e0070 100644
--- a/tests/compiler/dart2js/inlining/data/constructor.dart
+++ b/tests/compiler/dart2js/inlining/data/constructor.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[]*/
 main() {
   forceInlineConstructor();
diff --git a/tests/compiler/dart2js/inlining/data/dynamic.dart b/tests/compiler/dart2js/inlining/data/dynamic.dart
index 0810edd..c3b0eff 100644
--- a/tests/compiler/dart2js/inlining/data/dynamic.dart
+++ b/tests/compiler/dart2js/inlining/data/dynamic.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[]*/
 main() {
   forceInlineDynamic();
diff --git a/tests/compiler/dart2js/inlining/data/external.dart b/tests/compiler/dart2js/inlining/data/external.dart
index e943165..b144d42 100644
--- a/tests/compiler/dart2js/inlining/data/external.dart
+++ b/tests/compiler/dart2js/inlining/data/external.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 @JS()
 library lib;
 
diff --git a/tests/compiler/dart2js/inlining/data/force_inline.dart b/tests/compiler/dart2js/inlining/data/force_inline.dart
index 4bc1627..3e83f54 100644
--- a/tests/compiler/dart2js/inlining/data/force_inline.dart
+++ b/tests/compiler/dart2js/inlining/data/force_inline.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[]*/
 main() {
   forceInlineOnce();
diff --git a/tests/compiler/dart2js/inlining/data/force_inline_loops.dart b/tests/compiler/dart2js/inlining/data/force_inline_loops.dart
index c9c09a7..9c21b25 100644
--- a/tests/compiler/dart2js/inlining/data/force_inline_loops.dart
+++ b/tests/compiler/dart2js/inlining/data/force_inline_loops.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[]*/
 main() {
   forceInlineLoops();
diff --git a/tests/compiler/dart2js/inlining/data/heuristics.dart b/tests/compiler/dart2js/inlining/data/heuristics.dart
index d9f0c2c..c4a30d8 100644
--- a/tests/compiler/dart2js/inlining/data/heuristics.dart
+++ b/tests/compiler/dart2js/inlining/data/heuristics.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[]*/
 main() {
   outsideLoopNoArgsCalledOnce();
diff --git a/tests/compiler/dart2js/inlining/data/map.dart b/tests/compiler/dart2js/inlining/data/map.dart
index 9063caa..4187816 100644
--- a/tests/compiler/dart2js/inlining/data/map.dart
+++ b/tests/compiler/dart2js/inlining/data/map.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[]*/
 main() {
   passMapToNull();
diff --git a/tests/compiler/dart2js/inlining/data/meta.dart b/tests/compiler/dart2js/inlining/data/meta.dart
index fe47d1d..ee65e0d 100644
--- a/tests/compiler/dart2js/inlining/data/meta.dart
+++ b/tests/compiler/dart2js/inlining/data/meta.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[]*/
 main() {
   tryInlineOnce();
diff --git a/tests/compiler/dart2js/inlining/data/native.dart b/tests/compiler/dart2js/inlining/data/native.dart
index 8b4c1cff..761e40d 100644
--- a/tests/compiler/dart2js/inlining/data/native.dart
+++ b/tests/compiler/dart2js/inlining/data/native.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:html';
 
 /*member: main:[]*/
diff --git a/tests/compiler/dart2js/inlining/data/nested.dart b/tests/compiler/dart2js/inlining/data/nested.dart
index 0c98ef2..e735510 100644
--- a/tests/compiler/dart2js/inlining/data/nested.dart
+++ b/tests/compiler/dart2js/inlining/data/nested.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[]*/
 main() {
   nestedGenericInlining();
diff --git a/tests/compiler/dart2js/inlining/data/setter.dart b/tests/compiler/dart2js/inlining/data/setter.dart
index 2c255fba..fa56868 100644
--- a/tests/compiler/dart2js/inlining/data/setter.dart
+++ b/tests/compiler/dart2js/inlining/data/setter.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[]*/
 main() {
   inlineSetter();
diff --git a/tests/compiler/dart2js/inlining/data/static_initializer.dart b/tests/compiler/dart2js/inlining/data/static_initializer.dart
index 9c812c3..91880ca 100644
--- a/tests/compiler/dart2js/inlining/data/static_initializer.dart
+++ b/tests/compiler/dart2js/inlining/data/static_initializer.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[]*/
 main() {
   _var1;
diff --git a/tests/compiler/dart2js/inlining/data/switch.dart b/tests/compiler/dart2js/inlining/data/switch.dart
index 37a0c3d..ab91910 100644
--- a/tests/compiler/dart2js/inlining/data/switch.dart
+++ b/tests/compiler/dart2js/inlining/data/switch.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[]*/
 main() {
   switchThrowing();
diff --git a/tests/compiler/dart2js/inlining/data/too_difficult.dart b/tests/compiler/dart2js/inlining/data/too_difficult.dart
index b545095..013d844 100644
--- a/tests/compiler/dart2js/inlining/data/too_difficult.dart
+++ b/tests/compiler/dart2js/inlining/data/too_difficult.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[]*/
 main() {
   asyncMethod();
diff --git a/tests/compiler/dart2js/inlining/data/type_variables.dart b/tests/compiler/dart2js/inlining/data/type_variables.dart
index 93c0c21..14a1ce3 100644
--- a/tests/compiler/dart2js/inlining/data/type_variables.dart
+++ b/tests/compiler/dart2js/inlining/data/type_variables.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: main:[]*/
 main() {
   inlineTypeTests();
diff --git a/tests/compiler/dart2js/inlining/inlining_test.dart b/tests/compiler/dart2js/inlining/inlining_test.dart
index bb4dcd2..717045f 100644
--- a/tests/compiler/dart2js/inlining/inlining_test.dart
+++ b/tests/compiler/dart2js/inlining/inlining_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:io';
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/closure.dart';
diff --git a/tests/compiler/dart2js/inlining/inlining_viewer.dart b/tests/compiler/dart2js/inlining/inlining_viewer.dart
index 902deaf..8fdcb62 100644
--- a/tests/compiler/dart2js/inlining/inlining_viewer.dart
+++ b/tests/compiler/dart2js/inlining/inlining_viewer.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Helper program that shows the inlining data on a dart program.
 
 import '../equivalence/show_helper.dart';
diff --git a/tests/compiler/dart2js/inlining/meta_annotations2_test.dart b/tests/compiler/dart2js/inlining/meta_annotations2_test.dart
index d809601..8c3d0da 100644
--- a/tests/compiler/dart2js/inlining/meta_annotations2_test.dart
+++ b/tests/compiler/dart2js/inlining/meta_annotations2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Functional test of 'noInline' annotation from package:meta/dart2js.dart.
 
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js/inlining/meta_annotations3_test.dart b/tests/compiler/dart2js/inlining/meta_annotations3_test.dart
index ca5024a..ad71d47 100644
--- a/tests/compiler/dart2js/inlining/meta_annotations3_test.dart
+++ b/tests/compiler/dart2js/inlining/meta_annotations3_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Functional test of 'tryInline' annotation from package:meta/dart2js.dart.
 
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js/inlining/meta_annotations_test.dart b/tests/compiler/dart2js/inlining/meta_annotations_test.dart
index 074e384..4d59a1d 100644
--- a/tests/compiler/dart2js/inlining/meta_annotations_test.dart
+++ b/tests/compiler/dart2js/inlining/meta_annotations_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/common_elements.dart';
diff --git a/tests/compiler/dart2js/js/js_constant_test.dart b/tests/compiler/dart2js/js/js_constant_test.dart
index 6d0613e..872c58b 100644
--- a/tests/compiler/dart2js/js/js_constant_test.dart
+++ b/tests/compiler/dart2js/js/js_constant_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js/js/js_parser_statements_test.dart b/tests/compiler/dart2js/js/js_parser_statements_test.dart
index cc8c378..195b38b 100644
--- a/tests/compiler/dart2js/js/js_parser_statements_test.dart
+++ b/tests/compiler/dart2js/js/js_parser_statements_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:compiler/src/js/js.dart' as jsAst;
 import 'package:compiler/src/js/js.dart' show js;
diff --git a/tests/compiler/dart2js/js/js_parser_test.dart b/tests/compiler/dart2js/js/js_parser_test.dart
index 8c82b34..7e7ac3f 100644
--- a/tests/compiler/dart2js/js/js_parser_test.dart
+++ b/tests/compiler/dart2js/js/js_parser_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:compiler/src/js/js.dart' as jsAst;
 import 'package:compiler/src/js/js.dart' show js;
diff --git a/tests/compiler/dart2js/js/js_safety_test.dart b/tests/compiler/dart2js/js/js_safety_test.dart
index 9a2df54..8620bec 100644
--- a/tests/compiler/dart2js/js/js_safety_test.dart
+++ b/tests/compiler/dart2js/js/js_safety_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:compiler/src/js/js.dart' as js;
 import 'package:compiler/src/js/placeholder_safety.dart';
diff --git a/tests/compiler/dart2js/js/js_spec_optimization_test.dart b/tests/compiler/dart2js/js/js_spec_optimization_test.dart
index 004030c..c7c928d 100644
--- a/tests/compiler/dart2js/js/js_spec_optimization_test.dart
+++ b/tests/compiler/dart2js/js/js_spec_optimization_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js/js/js_spec_string_test.dart b/tests/compiler/dart2js/js/js_spec_string_test.dart
index a3245e4..8332491 100644
--- a/tests/compiler/dart2js/js/js_spec_string_test.dart
+++ b/tests/compiler/dart2js/js/js_spec_string_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Unit test of the [NativeBehavior.processSpecString] method.
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js/js/js_throw_behavior_test.dart b/tests/compiler/dart2js/js/js_throw_behavior_test.dart
index 0c3ecea..21872e1 100644
--- a/tests/compiler/dart2js/js/js_throw_behavior_test.dart
+++ b/tests/compiler/dart2js/js/js_throw_behavior_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:compiler/src/native/behavior.dart';
 import 'package:compiler/src/native/js.dart';
diff --git a/tests/compiler/dart2js/jsinterop/declaration_test.dart b/tests/compiler/dart2js/jsinterop/declaration_test.dart
index 6c94aab..72c7d23 100644
--- a/tests/compiler/dart2js/jsinterop/declaration_test.dart
+++ b/tests/compiler/dart2js/jsinterop/declaration_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library jsinterop.abstract_test;
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js/jsinterop/interop_anonymous_unreachable_test.dart b/tests/compiler/dart2js/jsinterop/interop_anonymous_unreachable_test.dart
index 62512f6..ded9c90 100644
--- a/tests/compiler/dart2js/jsinterop/interop_anonymous_unreachable_test.dart
+++ b/tests/compiler/dart2js/jsinterop/interop_anonymous_unreachable_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library tests.dart2js.interop_anonymous_unreachable_test;
 
 import 'package:async_helper/async_helper.dart';
diff --git a/tests/compiler/dart2js/jsinterop/world_test.dart b/tests/compiler/dart2js/jsinterop/world_test.dart
index d1626de..bc495ac 100644
--- a/tests/compiler/dart2js/jsinterop/world_test.dart
+++ b/tests/compiler/dart2js/jsinterop/world_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library jsinterop.world_test;
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js/jumps/data/complex_loops.dart b/tests/compiler/dart2js/jumps/data/complex_loops.dart
index d5f73e2..7c43054 100644
--- a/tests/compiler/dart2js/jumps/data/complex_loops.dart
+++ b/tests/compiler/dart2js/jumps/data/complex_loops.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 simpleForInLoopWithContinue(list) {
   /*0@continue*/ for (int i in list) {
     if (i % 2 == 0) /*target=0*/ continue;
diff --git a/tests/compiler/dart2js/jumps/data/labeled_statements.dart b/tests/compiler/dart2js/jumps/data/labeled_statements.dart
index 0d430c7..465060d 100644
--- a/tests/compiler/dart2js/jumps/data/labeled_statements.dart
+++ b/tests/compiler/dart2js/jumps/data/labeled_statements.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   breakFromIf(true);
   breakFromBlock(true);
diff --git a/tests/compiler/dart2js/jumps/data/nested_loops.dart b/tests/compiler/dart2js/jumps/data/nested_loops.dart
index 2b1783d..146de48 100644
--- a/tests/compiler/dart2js/jumps/data/nested_loops.dart
+++ b/tests/compiler/dart2js/jumps/data/nested_loops.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 nestedForLoopWithBreakAndContinue(count) {
   /*0@continue*/ for (int i = 0; i < count; i = i + 1) {
     /*1@break*/ for (int j = 0; j < count; j = j + 1) {
diff --git a/tests/compiler/dart2js/jumps/data/simple_loops.dart b/tests/compiler/dart2js/jumps/data/simple_loops.dart
index 3e683ba..e77341b 100644
--- a/tests/compiler/dart2js/jumps/data/simple_loops.dart
+++ b/tests/compiler/dart2js/jumps/data/simple_loops.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 simpleForLoop(count) {
   for (int i = 0; i < count; i++) {
     print(i);
diff --git a/tests/compiler/dart2js/jumps/data/switch.dart b/tests/compiler/dart2js/jumps/data/switch.dart
index ec716cd..7ea9ccb 100644
--- a/tests/compiler/dart2js/jumps/data/switch.dart
+++ b/tests/compiler/dart2js/jumps/data/switch.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 void simpleSwitch(e) {
   /*0@break*/ switch (e) {
     case 0:
diff --git a/tests/compiler/dart2js/jumps/jump_test.dart b/tests/compiler/dart2js/jumps/jump_test.dart
index 5d3320a..35b67d1 100644
--- a/tests/compiler/dart2js/jumps/jump_test.dart
+++ b/tests/compiler/dart2js/jumps/jump_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:io';
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/common.dart';
diff --git a/tests/compiler/dart2js/member_usage/data/constant_folding.dart b/tests/compiler/dart2js/member_usage/data/constant_folding.dart
index 4c601de..89dd97f 100644
--- a/tests/compiler/dart2js/member_usage/data/constant_folding.dart
+++ b/tests/compiler/dart2js/member_usage/data/constant_folding.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Derived from dart2js_extra/constant_folding_test
 
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js/member_usage/data/constructors.dart b/tests/compiler/dart2js/member_usage/data/constructors.dart
index 39d4566..e568cb2 100644
--- a/tests/compiler/dart2js/member_usage/data/constructors.dart
+++ b/tests/compiler/dart2js/member_usage/data/constructors.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class Class {
   /*member: Class.constructor1:invoke*/
   Class.constructor1() {}
diff --git a/tests/compiler/dart2js/member_usage/data/fields.dart b/tests/compiler/dart2js/member_usage/data/fields.dart
index 9bdacad..7ec7120 100644
--- a/tests/compiler/dart2js/member_usage/data/fields.dart
+++ b/tests/compiler/dart2js/member_usage/data/fields.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: field1a:init,read*/
 var field1a;
 
diff --git a/tests/compiler/dart2js/member_usage/data/general.dart b/tests/compiler/dart2js/member_usage/data/general.dart
index 8e86d99..a8b6f61 100644
--- a/tests/compiler/dart2js/member_usage/data/general.dart
+++ b/tests/compiler/dart2js/member_usage/data/general.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: A.:invoke*/
 class A {
   /*member: A.method1:invoke*/
diff --git a/tests/compiler/dart2js/member_usage/data/generic.dart b/tests/compiler/dart2js/member_usage/data/generic.dart
index 7ae48a3..ebe650f 100644
--- a/tests/compiler/dart2js/member_usage/data/generic.dart
+++ b/tests/compiler/dart2js/member_usage/data/generic.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: Class.:invoke*/
 class Class {
   // The type parameter is never provided but needed nonetheless.
diff --git a/tests/compiler/dart2js/member_usage/data/instance_method_parameters.dart b/tests/compiler/dart2js/member_usage/data/instance_method_parameters.dart
index 0e9ad65..1f658fa 100644
--- a/tests/compiler/dart2js/member_usage/data/instance_method_parameters.dart
+++ b/tests/compiler/dart2js/member_usage/data/instance_method_parameters.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: Class.:invoke*/
 class Class {
   /*member: Class.method1:invoke*/
diff --git a/tests/compiler/dart2js/member_usage/data/native.dart b/tests/compiler/dart2js/member_usage/data/native.dart
index 691562b..b4a4875c 100644
--- a/tests/compiler/dart2js/member_usage/data/native.dart
+++ b/tests/compiler/dart2js/member_usage/data/native.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // ignore: import_internal_library
 import 'dart:_js_helper';
 
diff --git a/tests/compiler/dart2js/member_usage/data/static_method_parameters.dart b/tests/compiler/dart2js/member_usage/data/static_method_parameters.dart
index 5548810..c5ab899 100644
--- a/tests/compiler/dart2js/member_usage/data/static_method_parameters.dart
+++ b/tests/compiler/dart2js/member_usage/data/static_method_parameters.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: method1:invoke*/
 method1() {}
 
diff --git a/tests/compiler/dart2js/member_usage/data/super.dart b/tests/compiler/dart2js/member_usage/data/super.dart
index 50e3547..4ff349c 100644
--- a/tests/compiler/dart2js/member_usage/data/super.dart
+++ b/tests/compiler/dart2js/member_usage/data/super.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class Super {
   /*member: Super.field1:init,read=super*/
   var field1;
diff --git a/tests/compiler/dart2js/member_usage/member_usage_test.dart b/tests/compiler/dart2js/member_usage/member_usage_test.dart
index 2e09a07..834cd14 100644
--- a/tests/compiler/dart2js/member_usage/member_usage_test.dart
+++ b/tests/compiler/dart2js/member_usage/member_usage_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:io';
 import 'package:_fe_analyzer_shared/src/testing/features.dart';
 import 'package:async_helper/async_helper.dart';
diff --git a/tests/compiler/dart2js/model/call_structure_namer_test.dart b/tests/compiler/dart2js/model/call_structure_namer_test.dart
index 4c1826a..4bc9a7b 100644
--- a/tests/compiler/dart2js/model/call_structure_namer_test.dart
+++ b/tests/compiler/dart2js/model/call_structure_namer_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/js_backend/namer.dart';
 import 'package:compiler/src/universe/call_structure.dart';
diff --git a/tests/compiler/dart2js/model/cfe_annotations_test.dart b/tests/compiler/dart2js/model/cfe_annotations_test.dart
index c82f0c5..2dde603 100644
--- a/tests/compiler/dart2js/model/cfe_annotations_test.dart
+++ b/tests/compiler/dart2js/model/cfe_annotations_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:args/args.dart';
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/compiler.dart';
diff --git a/tests/compiler/dart2js/model/cfe_constant_evaluation_test.dart b/tests/compiler/dart2js/model/cfe_constant_evaluation_test.dart
index eddb490..a3c182f 100644
--- a/tests/compiler/dart2js/model/cfe_constant_evaluation_test.dart
+++ b/tests/compiler/dart2js/model/cfe_constant_evaluation_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library dart2js.constants.expressions.evaluate_test;
 
 import 'dart:async';
diff --git a/tests/compiler/dart2js/model/cfe_constant_swarm_test.dart b/tests/compiler/dart2js/model/cfe_constant_swarm_test.dart
index 5a8997b..474766e 100644
--- a/tests/compiler/dart2js/model/cfe_constant_swarm_test.dart
+++ b/tests/compiler/dart2js/model/cfe_constant_swarm_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:args/args.dart';
 import 'package:async_helper/async_helper.dart';
 
diff --git a/tests/compiler/dart2js/model/cfe_constant_test.dart b/tests/compiler/dart2js/model/cfe_constant_test.dart
index 3430988..ab872b3 100644
--- a/tests/compiler/dart2js/model/cfe_constant_test.dart
+++ b/tests/compiler/dart2js/model/cfe_constant_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:io';
 import 'package:_fe_analyzer_shared/src/testing/id_testing.dart';
 import 'package:async_helper/async_helper.dart';
diff --git a/tests/compiler/dart2js/model/class_set_test.dart b/tests/compiler/dart2js/model/class_set_test.dart
index ea78222..d884344 100644
--- a/tests/compiler/dart2js/model/class_set_test.dart
+++ b/tests/compiler/dart2js/model/class_set_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test for iterators on for [SubclassNode].
 
 library class_set_test;
diff --git a/tests/compiler/dart2js/model/constant_value_test.dart b/tests/compiler/dart2js/model/constant_value_test.dart
index aebfbb3..9822945 100644
--- a/tests/compiler/dart2js/model/constant_value_test.dart
+++ b/tests/compiler/dart2js/model/constant_value_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library dart2js.constants.values.test;
 
 import 'package:async_helper/async_helper.dart';
diff --git a/tests/compiler/dart2js/model/enqueuer_test.dart b/tests/compiler/dart2js/model/enqueuer_test.dart
index 99f5f4d..797896c 100644
--- a/tests/compiler/dart2js/model/enqueuer_test.dart
+++ b/tests/compiler/dart2js/model/enqueuer_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that the enqueuers are not dependent upon in which order impacts are
 // applied.
 
diff --git a/tests/compiler/dart2js/model/enumset_test.dart b/tests/compiler/dart2js/model/enumset_test.dart
index 92ab39c..1664113 100644
--- a/tests/compiler/dart2js/model/enumset_test.dart
+++ b/tests/compiler/dart2js/model/enumset_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library enumset.test;
 
 import 'package:compiler/src/util/enumset.dart';
diff --git a/tests/compiler/dart2js/model/forwarding_stub_test.dart b/tests/compiler/dart2js/model/forwarding_stub_test.dart
index 1784cf3..0035c58 100644
--- a/tests/compiler/dart2js/model/forwarding_stub_test.dart
+++ b/tests/compiler/dart2js/model/forwarding_stub_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/common_elements.dart';
 import 'package:compiler/src/compiler.dart';
diff --git a/tests/compiler/dart2js/model/future_or_test.dart b/tests/compiler/dart2js/model/future_or_test.dart
index 9dc81d5..87d52be 100644
--- a/tests/compiler/dart2js/model/future_or_test.dart
+++ b/tests/compiler/dart2js/model/future_or_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/elements/entities.dart';
 import 'package:compiler/src/elements/types.dart';
diff --git a/tests/compiler/dart2js/model/in_user_code_test.dart b/tests/compiler/dart2js/model/in_user_code_test.dart
index 1e65ecb..81bee9c 100644
--- a/tests/compiler/dart2js/model/in_user_code_test.dart
+++ b/tests/compiler/dart2js/model/in_user_code_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that the helper [Compiler.inUserCode] works as intended.
 
 import 'dart:async';
diff --git a/tests/compiler/dart2js/model/indentation_test.dart b/tests/compiler/dart2js/model/indentation_test.dart
index 1730fd1..98a4f41 100644
--- a/tests/compiler/dart2js/model/indentation_test.dart
+++ b/tests/compiler/dart2js/model/indentation_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 import 'package:compiler/src/util/util.dart' show Indentation;
 
diff --git a/tests/compiler/dart2js/model/instantiated_classes_test.dart b/tests/compiler/dart2js/model/instantiated_classes_test.dart
index 60cb1cc..610d9b1 100644
--- a/tests/compiler/dart2js/model/instantiated_classes_test.dart
+++ b/tests/compiler/dart2js/model/instantiated_classes_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library instantiated_classes_test;
 
 import 'dart:async';
diff --git a/tests/compiler/dart2js/model/link_test.dart b/tests/compiler/dart2js/model/link_test.dart
index 9b2b00e..1854db3 100644
--- a/tests/compiler/dart2js/model/link_test.dart
+++ b/tests/compiler/dart2js/model/link_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:_fe_analyzer_shared/src/util/link.dart' show Link;
 import "package:expect/expect.dart";
 import '../helpers/link_helper.dart';
diff --git a/tests/compiler/dart2js/model/maplet_test.dart b/tests/compiler/dart2js/model/maplet_test.dart
index 687622e..1a6e66e 100644
--- a/tests/compiler/dart2js/model/maplet_test.dart
+++ b/tests/compiler/dart2js/model/maplet_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 import "package:compiler/src/util/maplet.dart";
 
diff --git a/tests/compiler/dart2js/model/mixin_typevariable_test.dart b/tests/compiler/dart2js/model/mixin_typevariable_test.dart
index 01c7a90..c2d4e4d 100644
--- a/tests/compiler/dart2js/model/mixin_typevariable_test.dart
+++ b/tests/compiler/dart2js/model/mixin_typevariable_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library mixin_typevariable_test;
 
 import 'package:async_helper/async_helper.dart';
diff --git a/tests/compiler/dart2js/model/native_test.dart b/tests/compiler/dart2js/model/native_test.dart
index b0b227a..fda3805 100644
--- a/tests/compiler/dart2js/model/native_test.dart
+++ b/tests/compiler/dart2js/model/native_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:io';
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/common_elements.dart';
diff --git a/tests/compiler/dart2js/model/needs_no_such_method_test.dart b/tests/compiler/dart2js/model/needs_no_such_method_test.dart
index 219d946..a9311a2 100644
--- a/tests/compiler/dart2js/model/needs_no_such_method_test.dart
+++ b/tests/compiler/dart2js/model/needs_no_such_method_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:async';
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js/model/no_such_method_enabled_test.dart b/tests/compiler/dart2js/model/no_such_method_enabled_test.dart
index 7e45417..df08980 100644
--- a/tests/compiler/dart2js/model/no_such_method_enabled_test.dart
+++ b/tests/compiler/dart2js/model/no_such_method_enabled_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/common_elements.dart';
 import 'package:compiler/src/compiler.dart';
diff --git a/tests/compiler/dart2js/model/no_such_method_forwarders_test.dart b/tests/compiler/dart2js/model/no_such_method_forwarders_test.dart
index 27bece5..7535b2d 100644
--- a/tests/compiler/dart2js/model/no_such_method_forwarders_test.dart
+++ b/tests/compiler/dart2js/model/no_such_method_forwarders_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/elements/entities.dart';
diff --git a/tests/compiler/dart2js/model/open_world_test.dart b/tests/compiler/dart2js/model/open_world_test.dart
index 35e992d..49c37fb 100644
--- a/tests/compiler/dart2js/model/open_world_test.dart
+++ b/tests/compiler/dart2js/model/open_world_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/compiler.dart';
diff --git a/tests/compiler/dart2js/model/receiver_type_test.dart b/tests/compiler/dart2js/model/receiver_type_test.dart
index 3ad5042..d7567dc 100644
--- a/tests/compiler/dart2js/model/receiver_type_test.dart
+++ b/tests/compiler/dart2js/model/receiver_type_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:async';
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/elements/entities.dart';
diff --git a/tests/compiler/dart2js/model/setlet_test.dart b/tests/compiler/dart2js/model/setlet_test.dart
index f27cbcb..a58f6ce 100644
--- a/tests/compiler/dart2js/model/setlet_test.dart
+++ b/tests/compiler/dart2js/model/setlet_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 import 'dart:collection';
 import 'package:compiler/src/util/setlet.dart';
diff --git a/tests/compiler/dart2js/model/strong_mode_closed_world_test.dart b/tests/compiler/dart2js/model/strong_mode_closed_world_test.dart
index a94eaad..6ee0535 100644
--- a/tests/compiler/dart2js/model/strong_mode_closed_world_test.dart
+++ b/tests/compiler/dart2js/model/strong_mode_closed_world_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/compiler.dart';
diff --git a/tests/compiler/dart2js/model/strong_mode_impact_test.dart b/tests/compiler/dart2js/model/strong_mode_impact_test.dart
index 79fc030..bb7c914 100644
--- a/tests/compiler/dart2js/model/strong_mode_impact_test.dart
+++ b/tests/compiler/dart2js/model/strong_mode_impact_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/common.dart';
diff --git a/tests/compiler/dart2js/model/subtype_test.dart b/tests/compiler/dart2js/model/subtype_test.dart
index 914d75a..f166770 100644
--- a/tests/compiler/dart2js/model/subtype_test.dart
+++ b/tests/compiler/dart2js/model/subtype_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library subtype_test;
 
 import 'dart:async';
diff --git a/tests/compiler/dart2js/model/subtypeset_test.dart b/tests/compiler/dart2js/model/subtypeset_test.dart
index dda257b..f16f4c9 100644
--- a/tests/compiler/dart2js/model/subtypeset_test.dart
+++ b/tests/compiler/dart2js/model/subtypeset_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test for iterators on for [SubclassNode].
 
 library subtypeset_test;
diff --git a/tests/compiler/dart2js/model/supermixin_test.dart b/tests/compiler/dart2js/model/supermixin_test.dart
index fab668d..f1fed6e 100644
--- a/tests/compiler/dart2js/model/supermixin_test.dart
+++ b/tests/compiler/dart2js/model/supermixin_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/commandline_options.dart';
 import 'package:compiler/src/common_elements.dart';
diff --git a/tests/compiler/dart2js/model/token_naming_test.dart b/tests/compiler/dart2js/model/token_naming_test.dart
index 03702d0..beb5f66 100644
--- a/tests/compiler/dart2js/model/token_naming_test.dart
+++ b/tests/compiler/dart2js/model/token_naming_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:compiler/src/js_backend/js_backend.dart" show TokenScope;
 
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js/model/type_substitution_test.dart b/tests/compiler/dart2js/model/type_substitution_test.dart
index 9c25617..d5db6b3 100644
--- a/tests/compiler/dart2js/model/type_substitution_test.dart
+++ b/tests/compiler/dart2js/model/type_substitution_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library type_substitution_test;
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js/model/world_test.dart b/tests/compiler/dart2js/model/world_test.dart
index b2106a8..bf49a4f 100644
--- a/tests/compiler/dart2js/model/world_test.dart
+++ b/tests/compiler/dart2js/model/world_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library world_test;
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js/optimization/data/arithmetic.dart b/tests/compiler/dart2js/optimization/data/arithmetic.dart
index cd984e6..bc1843b 100644
--- a/tests/compiler/dart2js/optimization/data/arithmetic.dart
+++ b/tests/compiler/dart2js/optimization/data/arithmetic.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   negate(1);
   negateNum(1);
diff --git a/tests/compiler/dart2js/optimization/data/arithmetic_simplification.dart b/tests/compiler/dart2js/optimization/data/arithmetic_simplification.dart
index dad0dcc..71b6f09 100644
--- a/tests/compiler/dart2js/optimization/data/arithmetic_simplification.dart
+++ b/tests/compiler/dart2js/optimization/data/arithmetic_simplification.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test constant folding on numbers.
 
 @pragma('dart2js:assumeDynamic')
diff --git a/tests/compiler/dart2js/optimization/data/bit.dart b/tests/compiler/dart2js/optimization/data/bit.dart
index 49364cf..fb42214 100644
--- a/tests/compiler/dart2js/optimization/data/bit.dart
+++ b/tests/compiler/dart2js/optimization/data/bit.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   bitNot(1);
   bitNotNum(1);
diff --git a/tests/compiler/dart2js/optimization/data/effectively_constant_fields.dart b/tests/compiler/dart2js/optimization/data/effectively_constant_fields.dart
index 6e14bb9..55f7152 100644
--- a/tests/compiler/dart2js/optimization/data/effectively_constant_fields.dart
+++ b/tests/compiler/dart2js/optimization/data/effectively_constant_fields.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 class Class1 {
diff --git a/tests/compiler/dart2js/optimization/data/field_get.dart b/tests/compiler/dart2js/optimization/data/field_get.dart
index 301efeb..eb78b81 100644
--- a/tests/compiler/dart2js/optimization/data/field_get.dart
+++ b/tests/compiler/dart2js/optimization/data/field_get.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   method1(new Class1a());
   method2(new Class2a());
diff --git a/tests/compiler/dart2js/optimization/data/field_set.dart b/tests/compiler/dart2js/optimization/data/field_set.dart
index a7e1cbb..d21b818 100644
--- a/tests/compiler/dart2js/optimization/data/field_set.dart
+++ b/tests/compiler/dart2js/optimization/data/field_set.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   method1(new Class1a());
   method2(new Class2a());
diff --git a/tests/compiler/dart2js/optimization/data/finalized_type_variable.dart b/tests/compiler/dart2js/optimization/data/finalized_type_variable.dart
index 9b64132..865a2d0 100644
--- a/tests/compiler/dart2js/optimization/data/finalized_type_variable.dart
+++ b/tests/compiler/dart2js/optimization/data/finalized_type_variable.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 abstract class AppView<T> {
   T ctx;
 }
diff --git a/tests/compiler/dart2js/optimization/data/index.dart b/tests/compiler/dart2js/optimization/data/index.dart
index a38b22c..7b95043 100644
--- a/tests/compiler/dart2js/optimization/data/index.dart
+++ b/tests/compiler/dart2js/optimization/data/index.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:collection';
 
 /*member: dynamicIndex:Specializer=[!Index]*/
diff --git a/tests/compiler/dart2js/optimization/data/index_assign.dart b/tests/compiler/dart2js/optimization/data/index_assign.dart
index d2ac26d..45a88e4 100644
--- a/tests/compiler/dart2js/optimization/data/index_assign.dart
+++ b/tests/compiler/dart2js/optimization/data/index_assign.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: dynamicIndexAssign:Specializer=[!IndexAssign]*/
 @pragma('dart2js:noInline')
 dynamicIndexAssign(var list) {
diff --git a/tests/compiler/dart2js/optimization/data/modulo_remainder.dart b/tests/compiler/dart2js/optimization/data/modulo_remainder.dart
index d2d909cc..57da5b3 100644
--- a/tests/compiler/dart2js/optimization/data/modulo_remainder.dart
+++ b/tests/compiler/dart2js/optimization/data/modulo_remainder.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: mod1:Specializer=[Modulo]*/
 @pragma('dart2js:noInline')
 mod1(param) {
diff --git a/tests/compiler/dart2js/optimization/optimization_test.dart b/tests/compiler/dart2js/optimization/optimization_test.dart
index ed894c7..e2687f6 100644
--- a/tests/compiler/dart2js/optimization/optimization_test.dart
+++ b/tests/compiler/dart2js/optimization/optimization_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:io';
 import 'package:_fe_analyzer_shared/src/testing/features.dart';
 import 'package:async_helper/async_helper.dart';
diff --git a/tests/compiler/dart2js/rti/backend_type_helper_test.dart b/tests/compiler/dart2js/rti/backend_type_helper_test.dart
index 95dc812..53ec0ad 100644
--- a/tests/compiler/dart2js/rti/backend_type_helper_test.dart
+++ b/tests/compiler/dart2js/rti/backend_type_helper_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:io';
 
 import 'package:async_helper/async_helper.dart';
diff --git a/tests/compiler/dart2js/rti/bound_check_test.dart b/tests/compiler/dart2js/rti/bound_check_test.dart
index b0729aa..ce5f817 100644
--- a/tests/compiler/dart2js/rti/bound_check_test.dart
+++ b/tests/compiler/dart2js/rti/bound_check_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import '../helpers/d8_helper.dart';
 
diff --git a/tests/compiler/dart2js/rti/data/as.dart b/tests/compiler/dart2js/rti/data/as.dart
index b84f239..1b2e5b5 100644
--- a/tests/compiler/dart2js/rti/data/as.dart
+++ b/tests/compiler/dart2js/rti/data/as.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Derived from dart2js_extra/generic_type_error_message_test.
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js/rti/data/async_foreach.dart b/tests/compiler/dart2js/rti/data/async_foreach.dart
index b847743..22efbe0 100644
--- a/tests/compiler/dart2js/rti/data/async_foreach.dart
+++ b/tests/compiler/dart2js/rti/data/async_foreach.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.class: Class:direct,explicit=[Class.T],implicit=[Class.T],needsArgs*/
 /*omit.class: Class:needsArgs*/
 class Class<T> {
diff --git a/tests/compiler/dart2js/rti/data/async_foreach_nonasync.dart b/tests/compiler/dart2js/rti/data/async_foreach_nonasync.dart
index 4afe488..7c27624 100644
--- a/tests/compiler/dart2js/rti/data/async_foreach_nonasync.dart
+++ b/tests/compiler/dart2js/rti/data/async_foreach_nonasync.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.class: Class:direct,explicit=[Class.T],implicit=[Class.T],needsArgs*/
 /*omit.class: Class:*/
 class Class<T> {
diff --git a/tests/compiler/dart2js/rti/data/async_local.dart b/tests/compiler/dart2js/rti/data/async_local.dart
index 10f865a..14bd0d2 100644
--- a/tests/compiler/dart2js/rti/data/async_local.dart
+++ b/tests/compiler/dart2js/rti/data/async_local.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() async {
   // With the `is dynamic Function(Object,StackTrace)` test in the async
   // implementation the closure, with type `dynamic Function(dynamic, dynamic)`,
diff --git a/tests/compiler/dart2js/rti/data/async_local_nonasync.dart b/tests/compiler/dart2js/rti/data/async_local_nonasync.dart
index b18d28a..e07c33e7 100644
--- a/tests/compiler/dart2js/rti/data/async_local_nonasync.dart
+++ b/tests/compiler/dart2js/rti/data/async_local_nonasync.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   // If any method was `async`, this would have triggered the need for the
   // signature on this closure. See the 'async_local.dart' test.
diff --git a/tests/compiler/dart2js/rti/data/async_local_typed.dart b/tests/compiler/dart2js/rti/data/async_local_typed.dart
index 5d4c863..5154e91 100644
--- a/tests/compiler/dart2js/rti/data/async_local_typed.dart
+++ b/tests/compiler/dart2js/rti/data/async_local_typed.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.class: Class:explicit=[Class<int>],needsArgs*/
 /*omit.class: Class:*/
 class Class<T> {}
diff --git a/tests/compiler/dart2js/rti/data/call_typed.dart b/tests/compiler/dart2js/rti/data/call_typed.dart
index 7de1bdc..720048e 100644
--- a/tests/compiler/dart2js/rti/data/call_typed.dart
+++ b/tests/compiler/dart2js/rti/data/call_typed.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 class A {
diff --git a/tests/compiler/dart2js/rti/data/call_typed_generic.dart b/tests/compiler/dart2js/rti/data/call_typed_generic.dart
index 6e7e075..3cf8ad8 100644
--- a/tests/compiler/dart2js/rti/data/call_typed_generic.dart
+++ b/tests/compiler/dart2js/rti/data/call_typed_generic.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*strong.class: A:direct,explicit=[A.T],needsArgs*/
diff --git a/tests/compiler/dart2js/rti/data/closure.dart b/tests/compiler/dart2js/rti/data/closure.dart
index aeb2742..4804c14 100644
--- a/tests/compiler/dart2js/rti/data/closure.dart
+++ b/tests/compiler/dart2js/rti/data/closure.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*omit.class: A:needsArgs*/
 /*strong.class: A:direct,explicit=[A.T],needsArgs*/
 class A<T> {
diff --git a/tests/compiler/dart2js/rti/data/closure_generic_unneeded.dart b/tests/compiler/dart2js/rti/data/closure_generic_unneeded.dart
index ec6a531..6fd577d 100644
--- a/tests/compiler/dart2js/rti/data/closure_generic_unneeded.dart
+++ b/tests/compiler/dart2js/rti/data/closure_generic_unneeded.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*omit.class: A:*/
 /*strong.class: A:direct,explicit=[A.T],needsArgs*/
 class A<T> {
diff --git a/tests/compiler/dart2js/rti/data/closure_unneeded.dart b/tests/compiler/dart2js/rti/data/closure_unneeded.dart
index ec6a531..6fd577d 100644
--- a/tests/compiler/dart2js/rti/data/closure_unneeded.dart
+++ b/tests/compiler/dart2js/rti/data/closure_unneeded.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*omit.class: A:*/
 /*strong.class: A:direct,explicit=[A.T],needsArgs*/
 class A<T> {
diff --git a/tests/compiler/dart2js/rti/data/dependency.dart b/tests/compiler/dart2js/rti/data/dependency.dart
index 8dac33c..4c2ff6f 100644
--- a/tests/compiler/dart2js/rti/data/dependency.dart
+++ b/tests/compiler/dart2js/rti/data/dependency.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class A<T> {
   m() => new B<T>();
 }
diff --git a/tests/compiler/dart2js/rti/data/direct.dart b/tests/compiler/dart2js/rti/data/direct.dart
index f2069f6..e7a05cf 100644
--- a/tests/compiler/dart2js/rti/data/direct.dart
+++ b/tests/compiler/dart2js/rti/data/direct.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A:explicit=[A<int>],needsArgs*/
 class A<T> {}
 
diff --git a/tests/compiler/dart2js/rti/data/dynamic_is.dart b/tests/compiler/dart2js/rti/data/dynamic_is.dart
index 3918c53..9edf610 100644
--- a/tests/compiler/dart2js/rti/data/dynamic_is.dart
+++ b/tests/compiler/dart2js/rti/data/dynamic_is.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class A {
   /*member: A.instanceMethod:direct,explicit=[instanceMethod.T],needsArgs,selectors=[Selector(call, instanceMethod, arity=1, types=1)]*/
   instanceMethod<T>(t) => t is T;
diff --git a/tests/compiler/dart2js/rti/data/dynamic_is2.dart b/tests/compiler/dart2js/rti/data/dynamic_is2.dart
index b9c6996..09f291b 100644
--- a/tests/compiler/dart2js/rti/data/dynamic_is2.dart
+++ b/tests/compiler/dart2js/rti/data/dynamic_is2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*omit.class: A:*/
 /*strong.class: A:explicit=[A]*/
 class A {
diff --git a/tests/compiler/dart2js/rti/data/dynamic_is_closure.dart b/tests/compiler/dart2js/rti/data/dynamic_is_closure.dart
index 100e0b6..e224bf8 100644
--- a/tests/compiler/dart2js/rti/data/dynamic_is_closure.dart
+++ b/tests/compiler/dart2js/rti/data/dynamic_is_closure.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class A {
   /*member: A.instanceMethod:direct,explicit=[instanceMethod.T],needsArgs,selectors=[Selector(call, instanceMethod, arity=1, types=1)]*/
   instanceMethod<T>(t) => t is T;
diff --git a/tests/compiler/dart2js/rti/data/dynamic_is_closure2.dart b/tests/compiler/dart2js/rti/data/dynamic_is_closure2.dart
index 95b4516..26842e1 100644
--- a/tests/compiler/dart2js/rti/data/dynamic_is_closure2.dart
+++ b/tests/compiler/dart2js/rti/data/dynamic_is_closure2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class A {
   /*member: A.instanceMethod:deps=[local],direct,explicit=[instanceMethod.T],needsArgs,selectors=[Selector(call, instanceMethod, arity=1, types=1)]*/
   instanceMethod<T>(t) => t is T;
diff --git a/tests/compiler/dart2js/rti/data/dynamic_not.dart b/tests/compiler/dart2js/rti/data/dynamic_not.dart
index 15e708a..b4db411 100644
--- a/tests/compiler/dart2js/rti/data/dynamic_not.dart
+++ b/tests/compiler/dart2js/rti/data/dynamic_not.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class A {
   /*member: A.instanceMethod:*/
   instanceMethod<T>(t) => t;
diff --git a/tests/compiler/dart2js/rti/data/dynamic_not2.dart b/tests/compiler/dart2js/rti/data/dynamic_not2.dart
index aa043a6..c8f9f6e 100644
--- a/tests/compiler/dart2js/rti/data/dynamic_not2.dart
+++ b/tests/compiler/dart2js/rti/data/dynamic_not2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.class: A:explicit=[A]*/
 class A {
   /*member: A.instanceMethod:deps=[B.instanceMethod]*/
diff --git a/tests/compiler/dart2js/rti/data/dynamic_not_closure.dart b/tests/compiler/dart2js/rti/data/dynamic_not_closure.dart
index 9049c26..add82db 100644
--- a/tests/compiler/dart2js/rti/data/dynamic_not_closure.dart
+++ b/tests/compiler/dart2js/rti/data/dynamic_not_closure.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class A {
   /*member: A.instanceMethod:*/
   instanceMethod<T>(t) => t;
diff --git a/tests/compiler/dart2js/rti/data/dynamic_not_closure2.dart b/tests/compiler/dart2js/rti/data/dynamic_not_closure2.dart
index d06c360..e37987e 100644
--- a/tests/compiler/dart2js/rti/data/dynamic_not_closure2.dart
+++ b/tests/compiler/dart2js/rti/data/dynamic_not_closure2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class A {
   /*member: A.instanceMethod:deps=[local]*/
   instanceMethod<T>(t) => t;
diff --git a/tests/compiler/dart2js/rti/data/dynamic_tear_off.dart b/tests/compiler/dart2js/rti/data/dynamic_tear_off.dart
index 191ab7a..d69f33e 100644
--- a/tests/compiler/dart2js/rti/data/dynamic_tear_off.dart
+++ b/tests/compiler/dart2js/rti/data/dynamic_tear_off.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: staticMethod:direct,explicit=[staticMethod.T],needsArgs,selectors=[Selector(call, call, arity=1, types=1)]*/
 staticMethod<T>(t) => t is T;
 
diff --git a/tests/compiler/dart2js/rti/data/dynamic_tear_off2.dart b/tests/compiler/dart2js/rti/data/dynamic_tear_off2.dart
index b018072..af93d70 100644
--- a/tests/compiler/dart2js/rti/data/dynamic_tear_off2.dart
+++ b/tests/compiler/dart2js/rti/data/dynamic_tear_off2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: staticMethod:deps=[B.instanceMethod],direct,explicit=[staticMethod.T],needsArgs,selectors=[Selector(call, call, arity=1, types=1)]*/
 staticMethod<T>(t) => t is T;
 
diff --git a/tests/compiler/dart2js/rti/data/dynamic_tear_off3.dart b/tests/compiler/dart2js/rti/data/dynamic_tear_off3.dart
index 807f356..74625dd 100644
--- a/tests/compiler/dart2js/rti/data/dynamic_tear_off3.dart
+++ b/tests/compiler/dart2js/rti/data/dynamic_tear_off3.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*omit.class: A:*/
 /*strong.class: A:explicit=[A]*/
 class A {
diff --git a/tests/compiler/dart2js/rti/data/dynamic_tear_off4.dart b/tests/compiler/dart2js/rti/data/dynamic_tear_off4.dart
index 2f04620..a7a7b5e 100644
--- a/tests/compiler/dart2js/rti/data/dynamic_tear_off4.dart
+++ b/tests/compiler/dart2js/rti/data/dynamic_tear_off4.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: staticMethod1:deps=[staticMethod2],direct,explicit=[staticMethod1.T],needsArgs,selectors=[Selector(call, call, arity=1, types=1)]*/
 staticMethod1<T>(t) => t is T;
 
diff --git a/tests/compiler/dart2js/rti/data/dynamic_type_literal.dart b/tests/compiler/dart2js/rti/data/dynamic_type_literal.dart
index b13dccd..df04a74 100644
--- a/tests/compiler/dart2js/rti/data/dynamic_type_literal.dart
+++ b/tests/compiler/dart2js/rti/data/dynamic_type_literal.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class A {
   /*member: A.instanceMethod:exp,needsArgs,selectors=[Selector(call, instanceMethod, arity=0, types=1)]*/
   instanceMethod<T>() => T;
diff --git a/tests/compiler/dart2js/rti/data/dynamic_type_literal2.dart b/tests/compiler/dart2js/rti/data/dynamic_type_literal2.dart
index 2f0ab7a..7bf6ce1 100644
--- a/tests/compiler/dart2js/rti/data/dynamic_type_literal2.dart
+++ b/tests/compiler/dart2js/rti/data/dynamic_type_literal2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.class: A:explicit=[A]*/
 class A {
   /*member: A.instanceMethod:deps=[B.instanceMethod],exp,needsArgs,selectors=[Selector(call, instanceMethod, arity=0, types=1)]*/
diff --git a/tests/compiler/dart2js/rti/data/explicit_as.dart b/tests/compiler/dart2js/rti/data/explicit_as.dart
index a90140a..8bb7f30 100644
--- a/tests/compiler/dart2js/rti/data/explicit_as.dart
+++ b/tests/compiler/dart2js/rti/data/explicit_as.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.class: C:direct,explicit=[C.T,C<String>],needsArgs*/
 /*omit.class: C:*/
 class C<T> {
diff --git a/tests/compiler/dart2js/rti/data/function_subtype_local5.dart b/tests/compiler/dart2js/rti/data/function_subtype_local5.dart
index 3d1b80c..8d429b8 100644
--- a/tests/compiler/dart2js/rti/data/function_subtype_local5.dart
+++ b/tests/compiler/dart2js/rti/data/function_subtype_local5.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
 // Dart test program for constructors and initializers.
 
 // Check function subtyping for local functions on generic type against generic
diff --git a/tests/compiler/dart2js/rti/data/future_or.dart b/tests/compiler/dart2js/rti/data/future_or.dart
index f39c148..bffc174 100644
--- a/tests/compiler/dart2js/rti/data/future_or.dart
+++ b/tests/compiler/dart2js/rti/data/future_or.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:async';
 
 /*class: global#Future:implicit=[Future<A>],indirect,needsArgs*/
diff --git a/tests/compiler/dart2js/rti/data/future_or_future_or.dart b/tests/compiler/dart2js/rti/data/future_or_future_or.dart
index 4f825b0..095ea3d 100644
--- a/tests/compiler/dart2js/rti/data/future_or_future_or.dart
+++ b/tests/compiler/dart2js/rti/data/future_or_future_or.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:async';
 
 /*class: global#Future:implicit=[Future<A>,Future<FutureOr<A>>],indirect,needsArgs*/
diff --git a/tests/compiler/dart2js/rti/data/future_or_future_or_generic.dart b/tests/compiler/dart2js/rti/data/future_or_future_or_generic.dart
index 32b28d9..3cc54d6e 100644
--- a/tests/compiler/dart2js/rti/data/future_or_future_or_generic.dart
+++ b/tests/compiler/dart2js/rti/data/future_or_future_or_generic.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:async';
 
 /*class: global#Future:deps=[A],implicit=[Future<B<A.T>>,Future<C>],indirect,needsArgs*/
diff --git a/tests/compiler/dart2js/rti/data/future_or_generic.dart b/tests/compiler/dart2js/rti/data/future_or_generic.dart
index 84291b90..901b5bf 100644
--- a/tests/compiler/dart2js/rti/data/future_or_generic.dart
+++ b/tests/compiler/dart2js/rti/data/future_or_generic.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:async';
 
 /*class: global#Future:deps=[A],implicit=[Future<A.T>],indirect,needsArgs*/
diff --git a/tests/compiler/dart2js/rti/data/future_or_generic2.dart b/tests/compiler/dart2js/rti/data/future_or_generic2.dart
index 8e588cf..e80d9a0 100644
--- a/tests/compiler/dart2js/rti/data/future_or_generic2.dart
+++ b/tests/compiler/dart2js/rti/data/future_or_generic2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:async';
 
 /*class: global#Future:deps=[A],implicit=[Future<B<A.T>>],indirect,needsArgs*/
diff --git a/tests/compiler/dart2js/rti/data/generic_bounds.dart b/tests/compiler/dart2js/rti/data/generic_bounds.dart
index 4bbc2de..dcfdfbc 100644
--- a/tests/compiler/dart2js/rti/data/generic_bounds.dart
+++ b/tests/compiler/dart2js/rti/data/generic_bounds.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*strong.class: Class1a:explicit=[Class1a]*/
diff --git a/tests/compiler/dart2js/rti/data/generic_class_instantiate.dart b/tests/compiler/dart2js/rti/data/generic_class_instantiate.dart
index 65a7e4d..937ee3e 100644
--- a/tests/compiler/dart2js/rti/data/generic_class_instantiate.dart
+++ b/tests/compiler/dart2js/rti/data/generic_class_instantiate.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A:explicit=[B<A>]*/
 class A {}
 
diff --git a/tests/compiler/dart2js/rti/data/generic_class_is.dart b/tests/compiler/dart2js/rti/data/generic_class_is.dart
index fce7f39..46f569d 100644
--- a/tests/compiler/dart2js/rti/data/generic_class_is.dart
+++ b/tests/compiler/dart2js/rti/data/generic_class_is.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A:implicit=[A]*/
 class A {}
 
diff --git a/tests/compiler/dart2js/rti/data/generic_class_is2.dart b/tests/compiler/dart2js/rti/data/generic_class_is2.dart
index 7c15011..1f60af6 100644
--- a/tests/compiler/dart2js/rti/data/generic_class_is2.dart
+++ b/tests/compiler/dart2js/rti/data/generic_class_is2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*class: A:implicit=[List<A<C2>>,List<A<C>>]*/
diff --git a/tests/compiler/dart2js/rti/data/generic_closure_instantiate.dart b/tests/compiler/dart2js/rti/data/generic_closure_instantiate.dart
index cf9db9c..907fc44 100644
--- a/tests/compiler/dart2js/rti/data/generic_closure_instantiate.dart
+++ b/tests/compiler/dart2js/rti/data/generic_closure_instantiate.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A:explicit=[B<A>]*/
 class A {}
 
diff --git a/tests/compiler/dart2js/rti/data/generic_creation.dart b/tests/compiler/dart2js/rti/data/generic_creation.dart
index b46fc2f..d0a90fa 100644
--- a/tests/compiler/dart2js/rti/data/generic_creation.dart
+++ b/tests/compiler/dart2js/rti/data/generic_creation.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 /*class: A:needsArgs*/
diff --git a/tests/compiler/dart2js/rti/data/generic_instanceof4.dart b/tests/compiler/dart2js/rti/data/generic_instanceof4.dart
index 84470da..afc5297 100644
--- a/tests/compiler/dart2js/rti/data/generic_instanceof4.dart
+++ b/tests/compiler/dart2js/rti/data/generic_instanceof4.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A:deps=[B],direct,explicit=[A.T],needsArgs*/
 class A<T> {
   @pragma('dart2js:noInline')
diff --git a/tests/compiler/dart2js/rti/data/generic_instanceof4_unused.dart b/tests/compiler/dart2js/rti/data/generic_instanceof4_unused.dart
index 7efc3c1..54d013f 100644
--- a/tests/compiler/dart2js/rti/data/generic_instanceof4_unused.dart
+++ b/tests/compiler/dart2js/rti/data/generic_instanceof4_unused.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A:deps=[B],direct,explicit=[A.T],needsArgs*/
 class A<T> {
   @pragma('dart2js:noInline')
diff --git a/tests/compiler/dart2js/rti/data/generic_method1.dart b/tests/compiler/dart2js/rti/data/generic_method1.dart
index bad6514..6af8aa1 100644
--- a/tests/compiler/dart2js/rti/data/generic_method1.dart
+++ b/tests/compiler/dart2js/rti/data/generic_method1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 /*class: A:deps=[method2],direct,explicit=[A.T],needsArgs*/
diff --git a/tests/compiler/dart2js/rti/data/generic_method2.dart b/tests/compiler/dart2js/rti/data/generic_method2.dart
index bfa88fd..7d4afea 100644
--- a/tests/compiler/dart2js/rti/data/generic_method2.dart
+++ b/tests/compiler/dart2js/rti/data/generic_method2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 /*class: A:deps=[B],direct,explicit=[A.T],needsArgs*/
diff --git a/tests/compiler/dart2js/rti/data/generic_method3.dart b/tests/compiler/dart2js/rti/data/generic_method3.dart
index 8fceecc..9aa3794 100644
--- a/tests/compiler/dart2js/rti/data/generic_method3.dart
+++ b/tests/compiler/dart2js/rti/data/generic_method3.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 /*class: A:deps=[method2],direct,explicit=[A.T],needsArgs*/
diff --git a/tests/compiler/dart2js/rti/data/generic_method4.dart b/tests/compiler/dart2js/rti/data/generic_method4.dart
index 7c7fa24..2f6f471 100644
--- a/tests/compiler/dart2js/rti/data/generic_method4.dart
+++ b/tests/compiler/dart2js/rti/data/generic_method4.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 /*class: A:deps=[C.method2],direct,explicit=[A.T],needsArgs*/
diff --git a/tests/compiler/dart2js/rti/data/generic_method_instantiate.dart b/tests/compiler/dart2js/rti/data/generic_method_instantiate.dart
index 8404071..3599e85 100644
--- a/tests/compiler/dart2js/rti/data/generic_method_instantiate.dart
+++ b/tests/compiler/dart2js/rti/data/generic_method_instantiate.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A:explicit=[B<A>]*/
 class A {}
 
diff --git a/tests/compiler/dart2js/rti/data/generic_method_is.dart b/tests/compiler/dart2js/rti/data/generic_method_is.dart
index 2012cdf..8f24a5d 100644
--- a/tests/compiler/dart2js/rti/data/generic_method_is.dart
+++ b/tests/compiler/dart2js/rti/data/generic_method_is.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.member: method:direct,explicit=[method.T],needsArgs*/
 /*omit.member: method:direct,explicit=[method.T],needsArgs*/
 method<T>(T t) => t is T;
diff --git a/tests/compiler/dart2js/rti/data/generic_method_is2.dart b/tests/compiler/dart2js/rti/data/generic_method_is2.dart
index a415e06..de364f3 100644
--- a/tests/compiler/dart2js/rti/data/generic_method_is2.dart
+++ b/tests/compiler/dart2js/rti/data/generic_method_is2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A1:implicit=[A1]*/
 class A1 {}
 
diff --git a/tests/compiler/dart2js/rti/data/generic_method_tearoff.dart b/tests/compiler/dart2js/rti/data/generic_method_tearoff.dart
index 421d6bd..5fff48f 100644
--- a/tests/compiler/dart2js/rti/data/generic_method_tearoff.dart
+++ b/tests/compiler/dart2js/rti/data/generic_method_tearoff.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 T method1a<T>() => null;
 T method1b<T>() => null;
 
diff --git a/tests/compiler/dart2js/rti/data/generic_methods_dynamic_05.dart b/tests/compiler/dart2js/rti/data/generic_methods_dynamic_05.dart
index 4a666a0..13c5edd 100644
--- a/tests/compiler/dart2js/rti/data/generic_methods_dynamic_05.dart
+++ b/tests/compiler/dart2js/rti/data/generic_methods_dynamic_05.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test derived from language_2/generic_methods_dynamic_test/05
 
 /*omit.class: global#JSArray:deps=[List],explicit=[JSArray],needsArgs*/
diff --git a/tests/compiler/dart2js/rti/data/generic_methods_dynamic_05a.dart b/tests/compiler/dart2js/rti/data/generic_methods_dynamic_05a.dart
index ea8041b..e0575e5 100644
--- a/tests/compiler/dart2js/rti/data/generic_methods_dynamic_05a.dart
+++ b/tests/compiler/dart2js/rti/data/generic_methods_dynamic_05a.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Reduced version of generic_methods_dynamic_05a_strong.
 
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js/rti/data/implicit_as.dart b/tests/compiler/dart2js/rti/data/implicit_as.dart
index 59db5dc..6c76287 100644
--- a/tests/compiler/dart2js/rti/data/implicit_as.dart
+++ b/tests/compiler/dart2js/rti/data/implicit_as.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.class: C:direct,explicit=[C.T,C<String>],needsArgs*/
 /*omit.class: C:*/
 class C<T> {
diff --git a/tests/compiler/dart2js/rti/data/indirect_through_static.dart b/tests/compiler/dart2js/rti/data/indirect_through_static.dart
index 95fb0c3..f1cc990 100644
--- a/tests/compiler/dart2js/rti/data/indirect_through_static.dart
+++ b/tests/compiler/dart2js/rti/data/indirect_through_static.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.class: A:implicit=[A]*/
 /*omit.class: A:implicit=[A]*/
 abstract class A {}
diff --git a/tests/compiler/dart2js/rti/data/indirect_type_literal.dart b/tests/compiler/dart2js/rti/data/indirect_type_literal.dart
index bd9a39f..087d10f 100644
--- a/tests/compiler/dart2js/rti/data/indirect_type_literal.dart
+++ b/tests/compiler/dart2js/rti/data/indirect_type_literal.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class A<T> {}
diff --git a/tests/compiler/dart2js/rti/data/instantiation1.dart b/tests/compiler/dart2js/rti/data/instantiation1.dart
index 930c1ff..bd638dc 100644
--- a/tests/compiler/dart2js/rti/data/instantiation1.dart
+++ b/tests/compiler/dart2js/rti/data/instantiation1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.member: f:deps=[B],direct,explicit=[f.T],needsArgs,needsInst=[<B.S>]*/
 /*omit.member: f:deps=[B]*/
 int f<T>(T a) => null;
diff --git a/tests/compiler/dart2js/rti/data/instantiation2.dart b/tests/compiler/dart2js/rti/data/instantiation2.dart
index 777fcc0..8c040bc 100644
--- a/tests/compiler/dart2js/rti/data/instantiation2.dart
+++ b/tests/compiler/dart2js/rti/data/instantiation2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.member: f:deps=[B],direct,explicit=[f.T],needsArgs,needsInst=[<B.S>]*/
 /*omit.member: f:deps=[B],direct,explicit=[f.T],needsArgs,needsInst=[<B.S>]*/
 bool f<T>(T a) => a is T;
diff --git a/tests/compiler/dart2js/rti/data/instantiation3.dart b/tests/compiler/dart2js/rti/data/instantiation3.dart
index f426821..19899d9 100644
--- a/tests/compiler/dart2js/rti/data/instantiation3.dart
+++ b/tests/compiler/dart2js/rti/data/instantiation3.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.member: f:deps=[B],direct,explicit=[f.T],needsArgs,needsInst=[<B.S>]*/
 /*omit.member: f:deps=[B]*/
 int f<T>(T a) => null;
diff --git a/tests/compiler/dart2js/rti/data/instantiation4.dart b/tests/compiler/dart2js/rti/data/instantiation4.dart
index 34948b9..c40ca9c 100644
--- a/tests/compiler/dart2js/rti/data/instantiation4.dart
+++ b/tests/compiler/dart2js/rti/data/instantiation4.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.member: f:deps=[B],direct,explicit=[f.T],needsArgs,needsInst=[<B.S>]*/
 /*omit.member: f:deps=[B],direct,explicit=[f.T],needsArgs,needsInst=[<B.S>]*/
 bool f<T>(T a) => a is T;
diff --git a/tests/compiler/dart2js/rti/data/instantiation5.dart b/tests/compiler/dart2js/rti/data/instantiation5.dart
index 5cde8c6..8f3fb60 100644
--- a/tests/compiler/dart2js/rti/data/instantiation5.dart
+++ b/tests/compiler/dart2js/rti/data/instantiation5.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.member: f:deps=[method],direct,explicit=[f.T],needsArgs,needsInst=[<method.S>]*/
 /*omit.member: f:deps=[method]*/
 int f<T>(T a) => null;
diff --git a/tests/compiler/dart2js/rti/data/instantiation6.dart b/tests/compiler/dart2js/rti/data/instantiation6.dart
index 3ce71b5..212557f 100644
--- a/tests/compiler/dart2js/rti/data/instantiation6.dart
+++ b/tests/compiler/dart2js/rti/data/instantiation6.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.member: f:deps=[method],direct,explicit=[f.T],needsArgs,needsInst=[<method.S>]*/
 /*omit.member: f:deps=[method],direct,explicit=[f.T],needsArgs,needsInst=[<method.S>]*/
 bool f<T>(T a) => a is T;
diff --git a/tests/compiler/dart2js/rti/data/instantiation7.dart b/tests/compiler/dart2js/rti/data/instantiation7.dart
index 87aabd6..2786071 100644
--- a/tests/compiler/dart2js/rti/data/instantiation7.dart
+++ b/tests/compiler/dart2js/rti/data/instantiation7.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.member: f1:deps=[method],direct,explicit=[f1.T],needsArgs,needsInst=[<method.X>]*/
 /*omit.member: f1:deps=[method]*/
 int f1<T>(T a, T b, T c) => null;
diff --git a/tests/compiler/dart2js/rti/data/is_type_variable.dart b/tests/compiler/dart2js/rti/data/is_type_variable.dart
index 7002e52..7d38ee1 100644
--- a/tests/compiler/dart2js/rti/data/is_type_variable.dart
+++ b/tests/compiler/dart2js/rti/data/is_type_variable.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A:direct,explicit=[A.T],needsArgs*/
 class A<T> {
   m(T t) => t is T;
diff --git a/tests/compiler/dart2js/rti/data/is_type_variable_super.dart b/tests/compiler/dart2js/rti/data/is_type_variable_super.dart
index 912c9df..6f168e3 100644
--- a/tests/compiler/dart2js/rti/data/is_type_variable_super.dart
+++ b/tests/compiler/dart2js/rti/data/is_type_variable_super.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class A<T> {}
 
 /*class: B:direct,explicit=[B.T],needsArgs*/
diff --git a/tests/compiler/dart2js/rti/data/is_type_variable_super_complex.dart b/tests/compiler/dart2js/rti/data/is_type_variable_super_complex.dart
index 6c526d7..fd30e1b 100644
--- a/tests/compiler/dart2js/rti/data/is_type_variable_super_complex.dart
+++ b/tests/compiler/dart2js/rti/data/is_type_variable_super_complex.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class A<T> {}
 
 /*class: B:direct,explicit=[B.T],needsArgs*/
diff --git a/tests/compiler/dart2js/rti/data/list_literal.dart b/tests/compiler/dart2js/rti/data/list_literal.dart
index 1b2d499..b5caf11 100644
--- a/tests/compiler/dart2js/rti/data/list_literal.dart
+++ b/tests/compiler/dart2js/rti/data/list_literal.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.class: global#List:deps=[Class.m],explicit=[List,List<String>],indirect,needsArgs*/
 /*omit.class: global#List:deps=[Class.m],explicit=[List],indirect,needsArgs*/
 
diff --git a/tests/compiler/dart2js/rti/data/list_to_set.dart b/tests/compiler/dart2js/rti/data/list_to_set.dart
index c448ab9..d5457ee 100644
--- a/tests/compiler/dart2js/rti/data/list_to_set.dart
+++ b/tests/compiler/dart2js/rti/data/list_to_set.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.class: global#List:deps=[Class],explicit=[List,List<String>],indirect,needsArgs*/
 /*omit.class: global#List:deps=[Class],explicit=[List],indirect,needsArgs*/
 
diff --git a/tests/compiler/dart2js/rti/data/local_function_generic.dart b/tests/compiler/dart2js/rti/data/local_function_generic.dart
index 10e9a2f..99ea166 100644
--- a/tests/compiler/dart2js/rti/data/local_function_generic.dart
+++ b/tests/compiler/dart2js/rti/data/local_function_generic.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 method1() {
diff --git a/tests/compiler/dart2js/rti/data/local_function_list_literal.dart b/tests/compiler/dart2js/rti/data/local_function_list_literal.dart
index 190c4c5..585ab8b 100644
--- a/tests/compiler/dart2js/rti/data/local_function_list_literal.dart
+++ b/tests/compiler/dart2js/rti/data/local_function_list_literal.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*strong.member: method:implicit=[method.T],indirect,needsArgs*/
diff --git a/tests/compiler/dart2js/rti/data/local_function_map_literal.dart b/tests/compiler/dart2js/rti/data/local_function_map_literal.dart
index 6edee72..2aea2bb 100644
--- a/tests/compiler/dart2js/rti/data/local_function_map_literal.dart
+++ b/tests/compiler/dart2js/rti/data/local_function_map_literal.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*strong.class: global#LinkedHashMap:deps=[Map],direct,explicit=[LinkedHashMap<LinkedHashMap.K,LinkedHashMap.V>],implicit=[LinkedHashMap.K,LinkedHashMap.V],needsArgs*/
diff --git a/tests/compiler/dart2js/rti/data/local_function_signature2.dart b/tests/compiler/dart2js/rti/data/local_function_signature2.dart
index dd0c838..9d38877 100644
--- a/tests/compiler/dart2js/rti/data/local_function_signature2.dart
+++ b/tests/compiler/dart2js/rti/data/local_function_signature2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 class Class1 {
diff --git a/tests/compiler/dart2js/rti/data/local_function_signatures.dart b/tests/compiler/dart2js/rti/data/local_function_signatures.dart
index 705a077..f963ae0 100644
--- a/tests/compiler/dart2js/rti/data/local_function_signatures.dart
+++ b/tests/compiler/dart2js/rti/data/local_function_signatures.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 class Class1 {
diff --git a/tests/compiler/dart2js/rti/data/local_function_signatures_generic.dart b/tests/compiler/dart2js/rti/data/local_function_signatures_generic.dart
index 80eed74..0f38f17 100644
--- a/tests/compiler/dart2js/rti/data/local_function_signatures_generic.dart
+++ b/tests/compiler/dart2js/rti/data/local_function_signatures_generic.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 class Class1 {
diff --git a/tests/compiler/dart2js/rti/data/map_literal.dart b/tests/compiler/dart2js/rti/data/map_literal.dart
index 2c7349d..3472e19 100644
--- a/tests/compiler/dart2js/rti/data/map_literal.dart
+++ b/tests/compiler/dart2js/rti/data/map_literal.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*omit.class: global#Map:*/
 /*strong.class: global#Map:explicit=[Map],indirect,needsArgs*/
 
diff --git a/tests/compiler/dart2js/rti/data/map_to_set.dart b/tests/compiler/dart2js/rti/data/map_to_set.dart
index 28e5bf2..127552a 100644
--- a/tests/compiler/dart2js/rti/data/map_to_set.dart
+++ b/tests/compiler/dart2js/rti/data/map_to_set.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*omit.class: global#Map:deps=[Class],needsArgs*/
 /*strong.class: global#Map:deps=[Class],explicit=[Map],indirect,needsArgs*/
 
diff --git a/tests/compiler/dart2js/rti/data/method_signatures.dart b/tests/compiler/dart2js/rti/data/method_signatures.dart
index e393181..b8332d1 100644
--- a/tests/compiler/dart2js/rti/data/method_signatures.dart
+++ b/tests/compiler/dart2js/rti/data/method_signatures.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 class Class1 {
diff --git a/tests/compiler/dart2js/rti/data/method_signatures_generic.dart b/tests/compiler/dart2js/rti/data/method_signatures_generic.dart
index e356581..eb0efc1 100644
--- a/tests/compiler/dart2js/rti/data/method_signatures_generic.dart
+++ b/tests/compiler/dart2js/rti/data/method_signatures_generic.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 class Class1 {
diff --git a/tests/compiler/dart2js/rti/data/no_such_method1.dart b/tests/compiler/dart2js/rti/data/no_such_method1.dart
index da65384..93be16b 100644
--- a/tests/compiler/dart2js/rti/data/no_such_method1.dart
+++ b/tests/compiler/dart2js/rti/data/no_such_method1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class C {
   /*member: C.noSuchMethod:needsArgs,selectors=[Selector(call, call, arity=0, types=2),Selector(call, foo, arity=0, types=2)]*/
   noSuchMethod(i) => i.typeArguments;
diff --git a/tests/compiler/dart2js/rti/data/no_such_method2.dart b/tests/compiler/dart2js/rti/data/no_such_method2.dart
index 8b27c38..0d22825 100644
--- a/tests/compiler/dart2js/rti/data/no_such_method2.dart
+++ b/tests/compiler/dart2js/rti/data/no_such_method2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class C {
   /*member: C.noSuchMethod:needsArgs,selectors=[Selector(call, call, arity=0, types=2),Selector(call, foo, arity=0, types=2)]*/
   noSuchMethod(i) => i.typeArguments;
diff --git a/tests/compiler/dart2js/rti/data/no_such_method3.dart b/tests/compiler/dart2js/rti/data/no_such_method3.dart
index a6ba3c7..f25295b 100644
--- a/tests/compiler/dart2js/rti/data/no_such_method3.dart
+++ b/tests/compiler/dart2js/rti/data/no_such_method3.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class C {
   /*member: C.noSuchMethod:*/
   noSuchMethod(i) => null;
diff --git a/tests/compiler/dart2js/rti/data/pragma_directives_instance.dart b/tests/compiler/dart2js/rti/data/pragma_directives_instance.dart
index 1d245c1..51c3d8b 100644
--- a/tests/compiler/dart2js/rti/data/pragma_directives_instance.dart
+++ b/tests/compiler/dart2js/rti/data/pragma_directives_instance.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   var c = new Class();
   c.method1a(null);
diff --git a/tests/compiler/dart2js/rti/data/pragma_directives_static.dart b/tests/compiler/dart2js/rti/data/pragma_directives_static.dart
index b923edb..4a44a16 100644
--- a/tests/compiler/dart2js/rti/data/pragma_directives_static.dart
+++ b/tests/compiler/dart2js/rti/data/pragma_directives_static.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   method1a(null);
   method1b(null);
diff --git a/tests/compiler/dart2js/rti/data/private_dynamic.dart b/tests/compiler/dart2js/rti/data/private_dynamic.dart
index fb5ca94..135d54c 100644
--- a/tests/compiler/dart2js/rti/data/private_dynamic.dart
+++ b/tests/compiler/dart2js/rti/data/private_dynamic.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class C {
   /*member: C._private:direct,explicit=[_private.T],needsArgs,selectors=[Selector(call, _private, arity=1, types=1)]*/
   _private<T>(t) => t is T;
diff --git a/tests/compiler/dart2js/rti/data/private_dynamic2.dart b/tests/compiler/dart2js/rti/data/private_dynamic2.dart
index 5612fbf..d682df3 100644
--- a/tests/compiler/dart2js/rti/data/private_dynamic2.dart
+++ b/tests/compiler/dart2js/rti/data/private_dynamic2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class C {
   /*member: C._private:deps=[D._private2],direct,explicit=[_private.T],needsArgs,selectors=[Selector(call, _private, arity=1, types=1)]*/
   _private<T>(t) => t is T;
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals1.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals1.dart
index 08cc7bf..a42deee 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals1.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*strong.class: Class:*/
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals2.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals2.dart
index c7cc1f4..c44c1f7 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals2.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*strong.class: Class:*/
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals3.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals3.dart
index e586484..230f46f 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals3.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals3.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 String method() => null;
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals4.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals4.dart
index d219396..43358cb 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals4.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals4.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*strong.class: Class1:*/
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals5.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals5.dart
index 62858b0..e2cd3bd 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals5.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals5.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*omit.class: Class1:needsArgs*/
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals6.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals6.dart
index f469a25..77593d4 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals6.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals6.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*strong.member: method1a:*/
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals7.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals7.dart
index db76621..198424c 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals7.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals7.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*member: method1a:*/
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals8.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals8.dart
index a7b639a..5656b34 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_closure_equals8.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_equals8.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*strong.class: Class1:*/
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string1.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string1.dart
index a1acdd3..cc64617 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string1.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.class: Class:*/
 /*omit.class: Class:*/
 class Class<T> {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string2.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string2.dart
index 041b311..e79d08a 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string2.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.class: Class:*/
 /*omit.class: Class:*/
 class Class<T> {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string3.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string3.dart
index 9d80812..d1d3744 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string3.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string3.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.class: Class1:needsArgs*/
 /*omit.class: Class1:*/
 class Class1<T> {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string4.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string4.dart
index f4511ea..cb5ab6e 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string4.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string4.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: Class1:*/
 class Class1 {
   /*member: Class1.:*/
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string5.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string5.dart
index 20026ba..ef8ea71 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string5.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string5.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.class: Class:*/
 /*omit.class: Class:*/
 class Class<T> {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string6.dart b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string6.dart
index fa6db4d..1e1bce8 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string6.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_closure_to_string6.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: Class:*/
 class Class<T> {
   /*member: Class.:*/
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_equals1.dart b/tests/compiler/dart2js/rti/data/runtime_type_equals1.dart
index bf0d3e2..cc6dfc5 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_equals1.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_equals1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*class: Class1a:needsArgs*/
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_equals2.dart b/tests/compiler/dart2js/rti/data/runtime_type_equals2.dart
index 77b9099..77abea4 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_equals2.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_equals2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*class: Class1a:needsArgs*/
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_equals3.dart b/tests/compiler/dart2js/rti/data/runtime_type_equals3.dart
index c290ac6..5b030ba 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_equals3.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_equals3.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*class: Class1a:needsArgs*/
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_equals4.dart b/tests/compiler/dart2js/rti/data/runtime_type_equals4.dart
index 5e77f79..9892440 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_equals4.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_equals4.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*class: Class1a:needsArgs*/
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_equals5.dart b/tests/compiler/dart2js/rti/data/runtime_type_equals5.dart
index c1db9ed..b7b1d2c 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_equals5.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_equals5.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*strong.class: Class1a:explicit=[Class1a]*/
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_equals6.dart b/tests/compiler/dart2js/rti/data/runtime_type_equals6.dart
index f0cca27..8482f3d 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_equals6.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_equals6.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*strong.class: Class1a:explicit=[Class1a],needsArgs*/
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_equals7.dart b/tests/compiler/dart2js/rti/data/runtime_type_equals7.dart
index 8639733..980f832 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_equals7.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_equals7.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*strong.class: Class1a:explicit=[Class1a]*/
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_instantiate_to_string1.dart b/tests/compiler/dart2js/rti/data/runtime_type_instantiate_to_string1.dart
index 282d501..36de144 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_instantiate_to_string1.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_instantiate_to_string1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: global#instantiate1:needsArgs*/
 
 main() {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_instantiate_to_string2.dart b/tests/compiler/dart2js/rti/data/runtime_type_instantiate_to_string2.dart
index 22ddfb3..2b1fc09 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_instantiate_to_string2.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_instantiate_to_string2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: global#instantiate1:needsArgs*/
 
 /*strong.member: id:direct,explicit=[id.T],needsArgs,needsInst=[<int>]*/
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_instantiate_to_string3.dart b/tests/compiler/dart2js/rti/data/runtime_type_instantiate_to_string3.dart
index 222eb2b..0060b4c 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_instantiate_to_string3.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_instantiate_to_string3.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*member: global#instantiate1:needsArgs*/
 
 class Class {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_to_string1.dart b/tests/compiler/dart2js/rti/data/runtime_type_to_string1.dart
index 70f0f95..33499d6 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_to_string1.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_to_string1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.class: Class1:*/
 /*omit.class: Class1:*/
 class Class1 {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_to_string2.dart b/tests/compiler/dart2js/rti/data/runtime_type_to_string2.dart
index d8efa16..b2f2adb 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_to_string2.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_to_string2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.class: Class1:needsArgs*/
 /*omit.class: Class1:*/
 class Class1<T> {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_to_string3.dart b/tests/compiler/dart2js/rti/data/runtime_type_to_string3.dart
index baf98d4..2fa2623 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_to_string3.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_to_string3.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.class: Class1:needsArgs*/
 /*omit.class: Class1:*/
 class Class1<T> {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_to_string4.dart b/tests/compiler/dart2js/rti/data/runtime_type_to_string4.dart
index 77babb9..75ce88e 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_to_string4.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_to_string4.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.class: Class1:needsArgs*/
 /*omit.class: Class1:*/
 class Class1<T> {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_to_string5.dart b/tests/compiler/dart2js/rti/data/runtime_type_to_string5.dart
index 235b8be..520fbb6 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_to_string5.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_to_string5.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.class: Class1:needsArgs*/
 /*omit.class: Class1:*/
 class Class1<T> {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_to_string6.dart b/tests/compiler/dart2js/rti/data/runtime_type_to_string6.dart
index b312960..8272616 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_to_string6.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_to_string6.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.class: Class1:needsArgs*/
 /*omit.class: Class1:*/
 class Class1<T> {
diff --git a/tests/compiler/dart2js/rti/data/runtime_type_to_string7.dart b/tests/compiler/dart2js/rti/data/runtime_type_to_string7.dart
index 70f0f95..33499d6 100644
--- a/tests/compiler/dart2js/rti/data/runtime_type_to_string7.dart
+++ b/tests/compiler/dart2js/rti/data/runtime_type_to_string7.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.class: Class1:*/
 /*omit.class: Class1:*/
 class Class1 {
diff --git a/tests/compiler/dart2js/rti/data/subclass.dart b/tests/compiler/dart2js/rti/data/subclass.dart
index 2631e8e..d6b8a6e 100644
--- a/tests/compiler/dart2js/rti/data/subclass.dart
+++ b/tests/compiler/dart2js/rti/data/subclass.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A:explicit=[A<int>],needsArgs*/
 class A<T> {}
 
diff --git a/tests/compiler/dart2js/rti/data/subclass_fixed.dart b/tests/compiler/dart2js/rti/data/subclass_fixed.dart
index 3dcf303..df179af 100644
--- a/tests/compiler/dart2js/rti/data/subclass_fixed.dart
+++ b/tests/compiler/dart2js/rti/data/subclass_fixed.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A:explicit=[A<int>],needsArgs*/
 class A<T> {}
 
diff --git a/tests/compiler/dart2js/rti/data/subtype_named_args.dart b/tests/compiler/dart2js/rti/data/subtype_named_args.dart
index 5e6bbe2..905ab05 100644
--- a/tests/compiler/dart2js/rti/data/subtype_named_args.dart
+++ b/tests/compiler/dart2js/rti/data/subtype_named_args.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // From co19/Language/Types/Function_Types/subtype_named_args_t02.
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js/rti/data/subtype_named_args1.dart b/tests/compiler/dart2js/rti/data/subtype_named_args1.dart
index 5af335e..dc140e4 100644
--- a/tests/compiler/dart2js/rti/data/subtype_named_args1.dart
+++ b/tests/compiler/dart2js/rti/data/subtype_named_args1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // From co19/Language/Types/Function_Types/subtype_named_args_t01.
 
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js/rti/data/superclass.dart b/tests/compiler/dart2js/rti/data/superclass.dart
index bc3c6ff..9dfda6e 100644
--- a/tests/compiler/dart2js/rti/data/superclass.dart
+++ b/tests/compiler/dart2js/rti/data/superclass.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class A<T> {}
 
 /*class: B:explicit=[B<int>],needsArgs*/
diff --git a/tests/compiler/dart2js/rti/data/tear_off.dart b/tests/compiler/dart2js/rti/data/tear_off.dart
index f2c56b1..b2ae3a3 100644
--- a/tests/compiler/dart2js/rti/data/tear_off.dart
+++ b/tests/compiler/dart2js/rti/data/tear_off.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A:*/
 class A<T> {
   /*member: A.m:*/
diff --git a/tests/compiler/dart2js/rti/data/tear_off_generic.dart b/tests/compiler/dart2js/rti/data/tear_off_generic.dart
index b3689bb..fea635a 100644
--- a/tests/compiler/dart2js/rti/data/tear_off_generic.dart
+++ b/tests/compiler/dart2js/rti/data/tear_off_generic.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.class: A:direct,explicit=[A.T],needsArgs*/
 /*omit.class: A:*/
 class A<T> {
diff --git a/tests/compiler/dart2js/rti/data/type_argument_substitution.dart b/tests/compiler/dart2js/rti/data/type_argument_substitution.dart
index 635ad13..869bbdf 100644
--- a/tests/compiler/dart2js/rti/data/type_argument_substitution.dart
+++ b/tests/compiler/dart2js/rti/data/type_argument_substitution.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that substitutions are emitted for classes that are only used as
 // type arguments.
 
diff --git a/tests/compiler/dart2js/rti/data/type_literal.dart b/tests/compiler/dart2js/rti/data/type_literal.dart
index 972268e..fcce34e 100644
--- a/tests/compiler/dart2js/rti/data/type_literal.dart
+++ b/tests/compiler/dart2js/rti/data/type_literal.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A:exp,needsArgs*/
 class A<T> {
   instanceMethod() => T;
diff --git a/tests/compiler/dart2js/rti/data/type_literal2.dart b/tests/compiler/dart2js/rti/data/type_literal2.dart
index a1e3e6b..687bca2 100644
--- a/tests/compiler/dart2js/rti/data/type_literal2.dart
+++ b/tests/compiler/dart2js/rti/data/type_literal2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A:deps=[B],exp,needsArgs*/
 class A<T> {
   method1() => T;
diff --git a/tests/compiler/dart2js/rti/data/type_literal_generic.dart b/tests/compiler/dart2js/rti/data/type_literal_generic.dart
index dde4860..66d98f0 100644
--- a/tests/compiler/dart2js/rti/data/type_literal_generic.dart
+++ b/tests/compiler/dart2js/rti/data/type_literal_generic.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A:exp,needsArgs*/
 class A<T> {
   instanceMethod() => T;
diff --git a/tests/compiler/dart2js/rti/data/type_variable_function_type.dart b/tests/compiler/dart2js/rti/data/type_variable_function_type.dart
index b4a7f70..e40a848 100644
--- a/tests/compiler/dart2js/rti/data/type_variable_function_type.dart
+++ b/tests/compiler/dart2js/rti/data/type_variable_function_type.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Based on tests\language_2\type_variable_function_type_test.dart
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js/rti/disable_rti_test.dart b/tests/compiler/dart2js/rti/disable_rti_test.dart
index e02891c..6bbeb2f 100644
--- a/tests/compiler/dart2js/rti/disable_rti_test.dart
+++ b/tests/compiler/dart2js/rti/disable_rti_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/commandline_options.dart';
 import 'package:compiler/src/common_elements.dart';
diff --git a/tests/compiler/dart2js/rti/emission/arguments.dart b/tests/compiler/dart2js/rti/emission/arguments.dart
index 04e10ed..215e20c 100644
--- a/tests/compiler/dart2js/rti/emission/arguments.dart
+++ b/tests/compiler/dart2js/rti/emission/arguments.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A:checkedTypeArgument,checks=[],typeArgument*/
 class A {}
 
diff --git a/tests/compiler/dart2js/rti/emission/call.dart b/tests/compiler/dart2js/rti/emission/call.dart
index 44f562a..921de31 100644
--- a/tests/compiler/dart2js/rti/emission/call.dart
+++ b/tests/compiler/dart2js/rti/emission/call.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*class: A:checks=[],instance*/
diff --git a/tests/compiler/dart2js/rti/emission/call_typed.dart b/tests/compiler/dart2js/rti/emission/call_typed.dart
index 9688991..ab3dbfe 100644
--- a/tests/compiler/dart2js/rti/emission/call_typed.dart
+++ b/tests/compiler/dart2js/rti/emission/call_typed.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*class: A:checks=[],instance*/
diff --git a/tests/compiler/dart2js/rti/emission/call_typed_generic.dart b/tests/compiler/dart2js/rti/emission/call_typed_generic.dart
index 1d3bfea..c80f395 100644
--- a/tests/compiler/dart2js/rti/emission/call_typed_generic.dart
+++ b/tests/compiler/dart2js/rti/emission/call_typed_generic.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*class: A:checks=[],instance*/
diff --git a/tests/compiler/dart2js/rti/emission/closure_function.dart b/tests/compiler/dart2js/rti/emission/closure_function.dart
index 86101d9..d478691 100644
--- a/tests/compiler/dart2js/rti/emission/closure_function.dart
+++ b/tests/compiler/dart2js/rti/emission/closure_function.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 @pragma('dart2js:noInline')
 test(o) => o is Function;
 
diff --git a/tests/compiler/dart2js/rti/emission/closure_function_type.dart b/tests/compiler/dart2js/rti/emission/closure_function_type.dart
index 374d99e..6436a12 100644
--- a/tests/compiler/dart2js/rti/emission/closure_function_type.dart
+++ b/tests/compiler/dart2js/rti/emission/closure_function_type.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 @pragma('dart2js:noInline')
 test(o) => o is Function();
 
diff --git a/tests/compiler/dart2js/rti/emission/closure_signature.dart b/tests/compiler/dart2js/rti/emission/closure_signature.dart
index 8a4589a..ca68239 100644
--- a/tests/compiler/dart2js/rti/emission/closure_signature.dart
+++ b/tests/compiler/dart2js/rti/emission/closure_signature.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A:checks=[],instance*/
 class A<T> {
   @pragma('dart2js:noInline')
diff --git a/tests/compiler/dart2js/rti/emission/closure_signature_unneeded.dart b/tests/compiler/dart2js/rti/emission/closure_signature_unneeded.dart
index c292b18..28e2660 100644
--- a/tests/compiler/dart2js/rti/emission/closure_signature_unneeded.dart
+++ b/tests/compiler/dart2js/rti/emission/closure_signature_unneeded.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A:checks=[],instance*/
 class A<T> {
   @pragma('dart2js:noInline')
diff --git a/tests/compiler/dart2js/rti/emission/constructor_argument_static.dart b/tests/compiler/dart2js/rti/emission/constructor_argument_static.dart
index 97c2abe..097a0ce9 100644
--- a/tests/compiler/dart2js/rti/emission/constructor_argument_static.dart
+++ b/tests/compiler/dart2js/rti/emission/constructor_argument_static.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.class: A1:checkedInstance,checks=[],instance*/
 /*omit.class: A1:checks=[],instance*/
 class A1 {}
diff --git a/tests/compiler/dart2js/rti/emission/dynamic_instance.dart b/tests/compiler/dart2js/rti/emission/dynamic_instance.dart
index 3f455c0..0f3a503 100644
--- a/tests/compiler/dart2js/rti/emission/dynamic_instance.dart
+++ b/tests/compiler/dart2js/rti/emission/dynamic_instance.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*class: B:checkedInstance,checks=[],typeArgument*/
diff --git a/tests/compiler/dart2js/rti/emission/dynamic_type_argument.dart b/tests/compiler/dart2js/rti/emission/dynamic_type_argument.dart
index c3270bb..6837723 100644
--- a/tests/compiler/dart2js/rti/emission/dynamic_type_argument.dart
+++ b/tests/compiler/dart2js/rti/emission/dynamic_type_argument.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*class: A:checkedInstance,checks=[],instance*/
diff --git a/tests/compiler/dart2js/rti/emission/dynamic_type_literal.dart b/tests/compiler/dart2js/rti/emission/dynamic_type_literal.dart
index 66d91cf..0d26a10 100644
--- a/tests/compiler/dart2js/rti/emission/dynamic_type_literal.dart
+++ b/tests/compiler/dart2js/rti/emission/dynamic_type_literal.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: global#Type:checks=[],instance,typeLiteral*/
 
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js/rti/emission/event_callback.dart b/tests/compiler/dart2js/rti/emission/event_callback.dart
index 4273b86..288d1da 100644
--- a/tests/compiler/dart2js/rti/emission/event_callback.dart
+++ b/tests/compiler/dart2js/rti/emission/event_callback.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:html';
 
 /*strong.class: global#Event:checkedInstance,checkedTypeArgument,checks=[$isEvent],instance,typeArgument*/
diff --git a/tests/compiler/dart2js/rti/emission/fixed_type_argument.dart b/tests/compiler/dart2js/rti/emission/fixed_type_argument.dart
index 0d862eb..e636027 100644
--- a/tests/compiler/dart2js/rti/emission/fixed_type_argument.dart
+++ b/tests/compiler/dart2js/rti/emission/fixed_type_argument.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.class: A:checkedInstance,checkedTypeArgument,checks=[],typeArgument*/
 /*omit.class: A:checkedTypeArgument,checks=[],typeArgument*/
 class A {}
diff --git a/tests/compiler/dart2js/rti/emission/fixed_type_argument_implements.dart b/tests/compiler/dart2js/rti/emission/fixed_type_argument_implements.dart
index a7f3624..b5bdbee 100644
--- a/tests/compiler/dart2js/rti/emission/fixed_type_argument_implements.dart
+++ b/tests/compiler/dart2js/rti/emission/fixed_type_argument_implements.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that we emit the relation between B and A even when B is only live
 // as a type argument through the supertype of D.
 
diff --git a/tests/compiler/dart2js/rti/emission/function_type_argument.dart b/tests/compiler/dart2js/rti/emission/function_type_argument.dart
index 3b1ae5d..f674415 100644
--- a/tests/compiler/dart2js/rti/emission/function_type_argument.dart
+++ b/tests/compiler/dart2js/rti/emission/function_type_argument.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*strong.class: C:checkedInstance,checks=[],instance,typeArgument*/
diff --git a/tests/compiler/dart2js/rti/emission/function_typed_arguments.dart b/tests/compiler/dart2js/rti/emission/function_typed_arguments.dart
index 60796eb..58d5f14 100644
--- a/tests/compiler/dart2js/rti/emission/function_typed_arguments.dart
+++ b/tests/compiler/dart2js/rti/emission/function_typed_arguments.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*class: A:checkedInstance,checks=[],instance*/
diff --git a/tests/compiler/dart2js/rti/emission/future_or.dart b/tests/compiler/dart2js/rti/emission/future_or.dart
index 4e5bf95..61a2b8d 100644
--- a/tests/compiler/dart2js/rti/emission/future_or.dart
+++ b/tests/compiler/dart2js/rti/emission/future_or.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:async';
 import 'package:expect/expect.dart';
 
diff --git a/tests/compiler/dart2js/rti/emission/future_or_as_type_argument.dart b/tests/compiler/dart2js/rti/emission/future_or_as_type_argument.dart
index 837f824..2b718e3 100644
--- a/tests/compiler/dart2js/rti/emission/future_or_as_type_argument.dart
+++ b/tests/compiler/dart2js/rti/emission/future_or_as_type_argument.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:async';
 
 /*class: global#Future:checks=[],typeArgument*/
diff --git a/tests/compiler/dart2js/rti/emission/future_or_future_or.dart b/tests/compiler/dart2js/rti/emission/future_or_future_or.dart
index dfd18b3..55abe4b 100644
--- a/tests/compiler/dart2js/rti/emission/future_or_future_or.dart
+++ b/tests/compiler/dart2js/rti/emission/future_or_future_or.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:async';
 import 'package:expect/expect.dart';
 
diff --git a/tests/compiler/dart2js/rti/emission/future_or_future_or_generic.dart b/tests/compiler/dart2js/rti/emission/future_or_future_or_generic.dart
index 5a6b425..db1eceb 100644
--- a/tests/compiler/dart2js/rti/emission/future_or_future_or_generic.dart
+++ b/tests/compiler/dart2js/rti/emission/future_or_future_or_generic.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:async';
 import 'package:expect/expect.dart';
 
diff --git a/tests/compiler/dart2js/rti/emission/future_or_generic.dart b/tests/compiler/dart2js/rti/emission/future_or_generic.dart
index b97e5e2..95dd12f 100644
--- a/tests/compiler/dart2js/rti/emission/future_or_generic.dart
+++ b/tests/compiler/dart2js/rti/emission/future_or_generic.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:async';
 import 'package:expect/expect.dart';
 
diff --git a/tests/compiler/dart2js/rti/emission/future_or_generic2.dart b/tests/compiler/dart2js/rti/emission/future_or_generic2.dart
index 68eca4a..bd21431 100644
--- a/tests/compiler/dart2js/rti/emission/future_or_generic2.dart
+++ b/tests/compiler/dart2js/rti/emission/future_or_generic2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:async';
 import 'package:expect/expect.dart';
 
diff --git a/tests/compiler/dart2js/rti/emission/future_or_type_argument.dart b/tests/compiler/dart2js/rti/emission/future_or_type_argument.dart
index 756d26f..e5db913 100644
--- a/tests/compiler/dart2js/rti/emission/future_or_type_argument.dart
+++ b/tests/compiler/dart2js/rti/emission/future_or_type_argument.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:async';
 import 'package:expect/expect.dart';
 
diff --git a/tests/compiler/dart2js/rti/emission/generic_instanceof4.dart b/tests/compiler/dart2js/rti/emission/generic_instanceof4.dart
index 6d2b263..c228394 100644
--- a/tests/compiler/dart2js/rti/emission/generic_instanceof4.dart
+++ b/tests/compiler/dart2js/rti/emission/generic_instanceof4.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A:checks=[],instance*/
 class A<T> {
   @pragma('dart2js:noInline')
diff --git a/tests/compiler/dart2js/rti/emission/generic_methods_dynamic_02.dart b/tests/compiler/dart2js/rti/emission/generic_methods_dynamic_02.dart
index 947dcca..0241ff4 100644
--- a/tests/compiler/dart2js/rti/emission/generic_methods_dynamic_02.dart
+++ b/tests/compiler/dart2js/rti/emission/generic_methods_dynamic_02.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Based on language/generic_methods_dynamic_test/02
 
 library generic_methods_dynamic_test;
diff --git a/tests/compiler/dart2js/rti/emission/indirect_through_static.dart b/tests/compiler/dart2js/rti/emission/indirect_through_static.dart
index 3571daa..5a70d24 100644
--- a/tests/compiler/dart2js/rti/emission/indirect_through_static.dart
+++ b/tests/compiler/dart2js/rti/emission/indirect_through_static.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.class: A:checkedInstance,checks=[],typeArgument*/
 /*omit.class: A:checkedInstance,checks=[],typeArgument*/
 abstract class A {}
diff --git a/tests/compiler/dart2js/rti/emission/inherited_is.dart b/tests/compiler/dart2js/rti/emission/inherited_is.dart
index e240c7d..608ae74 100644
--- a/tests/compiler/dart2js/rti/emission/inherited_is.dart
+++ b/tests/compiler/dart2js/rti/emission/inherited_is.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*class: A:checkedInstance*/
diff --git a/tests/compiler/dart2js/rti/emission/inherited_is2.dart b/tests/compiler/dart2js/rti/emission/inherited_is2.dart
index 95c1993..c63bcad 100644
--- a/tests/compiler/dart2js/rti/emission/inherited_is2.dart
+++ b/tests/compiler/dart2js/rti/emission/inherited_is2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*class: A:checkedInstance*/
diff --git a/tests/compiler/dart2js/rti/emission/jsinterop.dart b/tests/compiler/dart2js/rti/emission/jsinterop.dart
index 9cadf45..422ece1 100644
--- a/tests/compiler/dart2js/rti/emission/jsinterop.dart
+++ b/tests/compiler/dart2js/rti/emission/jsinterop.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 @JS()
 library jsinterop;
 
diff --git a/tests/compiler/dart2js/rti/emission/jsinterop_generic.dart b/tests/compiler/dart2js/rti/emission/jsinterop_generic.dart
index 1a38ffe..60ab4ae 100644
--- a/tests/compiler/dart2js/rti/emission/jsinterop_generic.dart
+++ b/tests/compiler/dart2js/rti/emission/jsinterop_generic.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 @JS()
diff --git a/tests/compiler/dart2js/rti/emission/jsinterop_generic_factory_args.dart b/tests/compiler/dart2js/rti/emission/jsinterop_generic_factory_args.dart
index cd2577a..65a16f8 100644
--- a/tests/compiler/dart2js/rti/emission/jsinterop_generic_factory_args.dart
+++ b/tests/compiler/dart2js/rti/emission/jsinterop_generic_factory_args.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 @JS()
diff --git a/tests/compiler/dart2js/rti/emission/list.dart b/tests/compiler/dart2js/rti/emission/list.dart
index 6dc93d8..6efdf08 100644
--- a/tests/compiler/dart2js/rti/emission/list.dart
+++ b/tests/compiler/dart2js/rti/emission/list.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.class: A:checkedInstance,checkedTypeArgument,checks=[],typeArgument*/
 /*omit.class: A:checkedTypeArgument,checks=[],typeArgument*/
 /*strong.class: global#JSArray:checkedInstance,checks=[$isIterable],instance*/
diff --git a/tests/compiler/dart2js/rti/emission/local_function_list_literal.dart b/tests/compiler/dart2js/rti/emission/local_function_list_literal.dart
index a873118..7573410 100644
--- a/tests/compiler/dart2js/rti/emission/local_function_list_literal.dart
+++ b/tests/compiler/dart2js/rti/emission/local_function_list_literal.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*strong.class: global#JSArray:checkedInstance,checks=[$isIterable,$isList],instance*/
diff --git a/tests/compiler/dart2js/rti/emission/local_function_map_literal.dart b/tests/compiler/dart2js/rti/emission/local_function_map_literal.dart
index 080f72b..03ec2a1 100644
--- a/tests/compiler/dart2js/rti/emission/local_function_map_literal.dart
+++ b/tests/compiler/dart2js/rti/emission/local_function_map_literal.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*class: global#JsLinkedHashMap:checks=[],instance*/
diff --git a/tests/compiler/dart2js/rti/emission/map_literal.dart b/tests/compiler/dart2js/rti/emission/map_literal.dart
index 66a1309..273331d 100644
--- a/tests/compiler/dart2js/rti/emission/map_literal.dart
+++ b/tests/compiler/dart2js/rti/emission/map_literal.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.class: global#Map:instance*/
 
 /*class: global#LinkedHashMap:*/
diff --git a/tests/compiler/dart2js/rti/emission/mixin_mixin2.dart b/tests/compiler/dart2js/rti/emission/mixin_mixin2.dart
index 578d0e1..fb95f94 100644
--- a/tests/compiler/dart2js/rti/emission/mixin_mixin2.dart
+++ b/tests/compiler/dart2js/rti/emission/mixin_mixin2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 /*class: M:checks=[]*/
diff --git a/tests/compiler/dart2js/rti/emission/mixin_mixin4.dart b/tests/compiler/dart2js/rti/emission/mixin_mixin4.dart
index 0831234..e77b220 100644
--- a/tests/compiler/dart2js/rti/emission/mixin_mixin4.dart
+++ b/tests/compiler/dart2js/rti/emission/mixin_mixin4.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 /*class: I:checkedInstance*/
diff --git a/tests/compiler/dart2js/rti/emission/mixin_subtype.dart b/tests/compiler/dart2js/rti/emission/mixin_subtype.dart
index 2fe7a05..168c6da 100644
--- a/tests/compiler/dart2js/rti/emission/mixin_subtype.dart
+++ b/tests/compiler/dart2js/rti/emission/mixin_subtype.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Derived from language_2/mixin_declaration/mixin_declaration_subtype_test.
 
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js/rti/emission/mixin_type_arguments.dart b/tests/compiler/dart2js/rti/emission/mixin_type_arguments.dart
index 044ba38..8a62cab 100644
--- a/tests/compiler/dart2js/rti/emission/mixin_type_arguments.dart
+++ b/tests/compiler/dart2js/rti/emission/mixin_type_arguments.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart' show Expect;
 
 /*class: A:checks=[],typeArgument*/
diff --git a/tests/compiler/dart2js/rti/emission/native.dart b/tests/compiler/dart2js/rti/emission/native.dart
index 02698ba..6e75a73 100644
--- a/tests/compiler/dart2js/rti/emission/native.dart
+++ b/tests/compiler/dart2js/rti/emission/native.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 // ignore: import_internal_library
 import 'dart:_js_helper' show Native;
diff --git a/tests/compiler/dart2js/rti/emission/pragma_directives_instance.dart b/tests/compiler/dart2js/rti/emission/pragma_directives_instance.dart
index c241513..08e2dbbd 100644
--- a/tests/compiler/dart2js/rti/emission/pragma_directives_instance.dart
+++ b/tests/compiler/dart2js/rti/emission/pragma_directives_instance.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 @pragma('dart2js:noInline')
 @pragma('dart2js:assumeDynamic')
 value(o) => o;
diff --git a/tests/compiler/dart2js/rti/emission/pragma_directives_static.dart b/tests/compiler/dart2js/rti/emission/pragma_directives_static.dart
index 379ea28..36f671d 100644
--- a/tests/compiler/dart2js/rti/emission/pragma_directives_static.dart
+++ b/tests/compiler/dart2js/rti/emission/pragma_directives_static.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 @pragma('dart2js:noInline')
 @pragma('dart2js:assumeDynamic')
 value(o) => o;
diff --git a/tests/compiler/dart2js/rti/emission/regress_18713.dart b/tests/compiler/dart2js/rti/emission/regress_18713.dart
index 212e67b..6bd17d3 100644
--- a/tests/compiler/dart2js/rti/emission/regress_18713.dart
+++ b/tests/compiler/dart2js/rti/emission/regress_18713.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 /*class: T:checks=[],indirectInstance*/
diff --git a/tests/compiler/dart2js/rti/emission/replaced_type_variable.dart b/tests/compiler/dart2js/rti/emission/replaced_type_variable.dart
index 778a75e..6d75642 100644
--- a/tests/compiler/dart2js/rti/emission/replaced_type_variable.dart
+++ b/tests/compiler/dart2js/rti/emission/replaced_type_variable.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 // This class is inlined away.
diff --git a/tests/compiler/dart2js/rti/emission/runtime_type.dart b/tests/compiler/dart2js/rti/emission/runtime_type.dart
index 8e7fd19..2d2b913 100644
--- a/tests/compiler/dart2js/rti/emission/runtime_type.dart
+++ b/tests/compiler/dart2js/rti/emission/runtime_type.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A:checks=[],instance*/
 class A<T> {}
 
diff --git a/tests/compiler/dart2js/rti/emission/runtime_type_instantiate_to_string1.dart b/tests/compiler/dart2js/rti/emission/runtime_type_instantiate_to_string1.dart
index dc43c4b..668a859 100644
--- a/tests/compiler/dart2js/rti/emission/runtime_type_instantiate_to_string1.dart
+++ b/tests/compiler/dart2js/rti/emission/runtime_type_instantiate_to_string1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   /*strong.checks=[$signature],instance*/
   /*omit.checks=[],instance*/
diff --git a/tests/compiler/dart2js/rti/emission/runtime_type_instantiate_to_string2.dart b/tests/compiler/dart2js/rti/emission/runtime_type_instantiate_to_string2.dart
index 2847c31..ab00cba 100644
--- a/tests/compiler/dart2js/rti/emission/runtime_type_instantiate_to_string2.dart
+++ b/tests/compiler/dart2js/rti/emission/runtime_type_instantiate_to_string2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 T id<T>(T t) => t;
 
 main() {
diff --git a/tests/compiler/dart2js/rti/emission/runtime_type_instantiate_to_string3.dart b/tests/compiler/dart2js/rti/emission/runtime_type_instantiate_to_string3.dart
index df259f2..326ed8f 100644
--- a/tests/compiler/dart2js/rti/emission/runtime_type_instantiate_to_string3.dart
+++ b/tests/compiler/dart2js/rti/emission/runtime_type_instantiate_to_string3.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: Class:checks=[],instance*/
 class Class {
   T id<T>(T t) => t;
diff --git a/tests/compiler/dart2js/rti/emission/self.dart b/tests/compiler/dart2js/rti/emission/self.dart
index 07fdeea..bab2585 100644
--- a/tests/compiler/dart2js/rti/emission/self.dart
+++ b/tests/compiler/dart2js/rti/emission/self.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: C:checks=[],instance,typeLiteral*/
 class C {}
 
diff --git a/tests/compiler/dart2js/rti/emission/self_generic.dart b/tests/compiler/dart2js/rti/emission/self_generic.dart
index 0d45939..3deb93e 100644
--- a/tests/compiler/dart2js/rti/emission/self_generic.dart
+++ b/tests/compiler/dart2js/rti/emission/self_generic.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: C:checkedInstance,checks=[],instance*/
 class C<T> {}
 
diff --git a/tests/compiler/dart2js/rti/emission/static_argument.dart b/tests/compiler/dart2js/rti/emission/static_argument.dart
index f90c477..4230400 100644
--- a/tests/compiler/dart2js/rti/emission/static_argument.dart
+++ b/tests/compiler/dart2js/rti/emission/static_argument.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*strong.class: I1:*/
 /*omit.class: I1:*/
 class I1 {}
diff --git a/tests/compiler/dart2js/rti/emission/subtype_named_args.dart b/tests/compiler/dart2js/rti/emission/subtype_named_args.dart
index cb83d5e..def20ab 100644
--- a/tests/compiler/dart2js/rti/emission/subtype_named_args.dart
+++ b/tests/compiler/dart2js/rti/emission/subtype_named_args.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // From co19/Language/Types/Function_Types/subtype_named_args_t02.
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js/rti/emission/superclass.dart b/tests/compiler/dart2js/rti/emission/superclass.dart
index 0559160..74aa29f 100644
--- a/tests/compiler/dart2js/rti/emission/superclass.dart
+++ b/tests/compiler/dart2js/rti/emission/superclass.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: B:checks=[],indirectInstance,typeLiteral*/
 class B {}
 
diff --git a/tests/compiler/dart2js/rti/emission/superclass_as.dart b/tests/compiler/dart2js/rti/emission/superclass_as.dart
index d6366d3..01f4a3e 100644
--- a/tests/compiler/dart2js/rti/emission/superclass_as.dart
+++ b/tests/compiler/dart2js/rti/emission/superclass_as.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*class: A:checkedInstance,checks=[],instance*/
diff --git a/tests/compiler/dart2js/rti/emission/superclass_complex.dart b/tests/compiler/dart2js/rti/emission/superclass_complex.dart
index d7c93bd..4513fda 100644
--- a/tests/compiler/dart2js/rti/emission/superclass_complex.dart
+++ b/tests/compiler/dart2js/rti/emission/superclass_complex.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A:checkedTypeArgument,checks=[],typeArgument*/
 class A<T> {}
 
diff --git a/tests/compiler/dart2js/rti/emission/superclass_fixed.dart b/tests/compiler/dart2js/rti/emission/superclass_fixed.dart
index 8470cd4..1e5c3cf 100644
--- a/tests/compiler/dart2js/rti/emission/superclass_fixed.dart
+++ b/tests/compiler/dart2js/rti/emission/superclass_fixed.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: B:checkedInstance,checks=[],indirectInstance*/
 class B<T> {}
 
diff --git a/tests/compiler/dart2js/rti/emission/superclass_supertype.dart b/tests/compiler/dart2js/rti/emission/superclass_supertype.dart
index c9ffe06..3f5b8e6 100644
--- a/tests/compiler/dart2js/rti/emission/superclass_supertype.dart
+++ b/tests/compiler/dart2js/rti/emission/superclass_supertype.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A:checks=[],indirectInstance*/
 class A {}
 
diff --git a/tests/compiler/dart2js/rti/emission/superclass_supertype_complex.dart b/tests/compiler/dart2js/rti/emission/superclass_supertype_complex.dart
index d69c0d4..b6a325b 100644
--- a/tests/compiler/dart2js/rti/emission/superclass_supertype_complex.dart
+++ b/tests/compiler/dart2js/rti/emission/superclass_supertype_complex.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A:checkedTypeArgument,checks=[],typeArgument*/
 class A<T> {}
 
diff --git a/tests/compiler/dart2js/rti/emission/superclass_supertype_fixed.dart b/tests/compiler/dart2js/rti/emission/superclass_supertype_fixed.dart
index b6ee559..af0c86f 100644
--- a/tests/compiler/dart2js/rti/emission/superclass_supertype_fixed.dart
+++ b/tests/compiler/dart2js/rti/emission/superclass_supertype_fixed.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A:checks=[],indirectInstance*/
 class A {}
 
diff --git a/tests/compiler/dart2js/rti/emission/superclass_supertype_trivial.dart b/tests/compiler/dart2js/rti/emission/superclass_supertype_trivial.dart
index 9affb57..26f33ee 100644
--- a/tests/compiler/dart2js/rti/emission/superclass_supertype_trivial.dart
+++ b/tests/compiler/dart2js/rti/emission/superclass_supertype_trivial.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A:checks=[],indirectInstance*/
 class A<T> {}
 
diff --git a/tests/compiler/dart2js/rti/emission/superclass_trivial.dart b/tests/compiler/dart2js/rti/emission/superclass_trivial.dart
index d89f74f..ec80fe7 100644
--- a/tests/compiler/dart2js/rti/emission/superclass_trivial.dart
+++ b/tests/compiler/dart2js/rti/emission/superclass_trivial.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: B:checkedInstance,checks=[],indirectInstance*/
 class B<T> {}
 
diff --git a/tests/compiler/dart2js/rti/emission/superclasses_non_trivial.dart b/tests/compiler/dart2js/rti/emission/superclasses_non_trivial.dart
index 3d58258..8f50450 100644
--- a/tests/compiler/dart2js/rti/emission/superclasses_non_trivial.dart
+++ b/tests/compiler/dart2js/rti/emission/superclasses_non_trivial.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A:checkedInstance,checks=[],indirectInstance*/
 class A<T> {}
 
diff --git a/tests/compiler/dart2js/rti/emission/superclasses_trivial.dart b/tests/compiler/dart2js/rti/emission/superclasses_trivial.dart
index 19ba5cf..b2f9615 100644
--- a/tests/compiler/dart2js/rti/emission/superclasses_trivial.dart
+++ b/tests/compiler/dart2js/rti/emission/superclasses_trivial.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A:checkedInstance,checks=[],indirectInstance*/
 class A<T> {}
 
diff --git a/tests/compiler/dart2js/rti/emission/supertype.dart b/tests/compiler/dart2js/rti/emission/supertype.dart
index 9eb815b..a1d2918 100644
--- a/tests/compiler/dart2js/rti/emission/supertype.dart
+++ b/tests/compiler/dart2js/rti/emission/supertype.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: B:checkedInstance*/
 class B {}
 
diff --git a/tests/compiler/dart2js/rti/emission/supertype_complex.dart b/tests/compiler/dart2js/rti/emission/supertype_complex.dart
index 5a4b458..d51cf38 100644
--- a/tests/compiler/dart2js/rti/emission/supertype_complex.dart
+++ b/tests/compiler/dart2js/rti/emission/supertype_complex.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A:checkedTypeArgument,checks=[],typeArgument*/
 class A<T> {}
 
diff --git a/tests/compiler/dart2js/rti/emission/supertype_fixed.dart b/tests/compiler/dart2js/rti/emission/supertype_fixed.dart
index 2470677..ae2b93a 100644
--- a/tests/compiler/dart2js/rti/emission/supertype_fixed.dart
+++ b/tests/compiler/dart2js/rti/emission/supertype_fixed.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: B:checkedInstance*/
 class B<T> {}
 
diff --git a/tests/compiler/dart2js/rti/emission/supertype_trivial.dart b/tests/compiler/dart2js/rti/emission/supertype_trivial.dart
index 6f44e13..241fa50 100644
--- a/tests/compiler/dart2js/rti/emission/supertype_trivial.dart
+++ b/tests/compiler/dart2js/rti/emission/supertype_trivial.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: B:checkedInstance*/
 class B<T> {}
 
diff --git a/tests/compiler/dart2js/rti/emission/supertypes_extends.dart b/tests/compiler/dart2js/rti/emission/supertypes_extends.dart
index 2629ef4..08420e0 100644
--- a/tests/compiler/dart2js/rti/emission/supertypes_extends.dart
+++ b/tests/compiler/dart2js/rti/emission/supertypes_extends.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A:checkedInstance*/
 class A {}
 
diff --git a/tests/compiler/dart2js/rti/emission/supertypes_extends2.dart b/tests/compiler/dart2js/rti/emission/supertypes_extends2.dart
index 0c59cc3..d109f6c 100644
--- a/tests/compiler/dart2js/rti/emission/supertypes_extends2.dart
+++ b/tests/compiler/dart2js/rti/emission/supertypes_extends2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A:checkedInstance*/
 class A {}
 
diff --git a/tests/compiler/dart2js/rti/emission/supertypes_extends3.dart b/tests/compiler/dart2js/rti/emission/supertypes_extends3.dart
index 77dc0cb..060f825 100644
--- a/tests/compiler/dart2js/rti/emission/supertypes_extends3.dart
+++ b/tests/compiler/dart2js/rti/emission/supertypes_extends3.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A:checkedInstance*/
 class A {}
 
diff --git a/tests/compiler/dart2js/rti/emission/supertypes_implements.dart b/tests/compiler/dart2js/rti/emission/supertypes_implements.dart
index f481105..12578da 100644
--- a/tests/compiler/dart2js/rti/emission/supertypes_implements.dart
+++ b/tests/compiler/dart2js/rti/emission/supertypes_implements.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A:checkedInstance*/
 class A {}
 
diff --git a/tests/compiler/dart2js/rti/emission/supertypes_non_trivial.dart b/tests/compiler/dart2js/rti/emission/supertypes_non_trivial.dart
index 04106c5..465a34e 100644
--- a/tests/compiler/dart2js/rti/emission/supertypes_non_trivial.dart
+++ b/tests/compiler/dart2js/rti/emission/supertypes_non_trivial.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A:checkedInstance,checks=[],indirectInstance*/
 class A<T> {}
 
diff --git a/tests/compiler/dart2js/rti/emission/supertypes_trivial.dart b/tests/compiler/dart2js/rti/emission/supertypes_trivial.dart
index 04429d2..e1f7976 100644
--- a/tests/compiler/dart2js/rti/emission/supertypes_trivial.dart
+++ b/tests/compiler/dart2js/rti/emission/supertypes_trivial.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*class: A:checkedInstance,checks=[],indirectInstance*/
 class A<T> {}
 
diff --git a/tests/compiler/dart2js/rti/emission/tear_off_types.dart b/tests/compiler/dart2js/rti/emission/tear_off_types.dart
index e3b0d2c..4381d93 100644
--- a/tests/compiler/dart2js/rti/emission/tear_off_types.dart
+++ b/tests/compiler/dart2js/rti/emission/tear_off_types.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 main() {
diff --git a/tests/compiler/dart2js/rti/emission/type_argument_dynamic.dart b/tests/compiler/dart2js/rti/emission/type_argument_dynamic.dart
index 1d38ef6..8ff02c5 100644
--- a/tests/compiler/dart2js/rti/emission/type_argument_dynamic.dart
+++ b/tests/compiler/dart2js/rti/emission/type_argument_dynamic.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*class: A:checkedTypeArgument,checks=[],typeArgument*/
diff --git a/tests/compiler/dart2js/rti/emission/type_argument_static.dart b/tests/compiler/dart2js/rti/emission/type_argument_static.dart
index f1c6b64..d4d889b 100644
--- a/tests/compiler/dart2js/rti/emission/type_argument_static.dart
+++ b/tests/compiler/dart2js/rti/emission/type_argument_static.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*class: A:checkedTypeArgument,checks=[],typeArgument*/
diff --git a/tests/compiler/dart2js/rti/emission/type_literal.dart b/tests/compiler/dart2js/rti/emission/type_literal.dart
index e46e083..f14bb65 100644
--- a/tests/compiler/dart2js/rti/emission/type_literal.dart
+++ b/tests/compiler/dart2js/rti/emission/type_literal.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /*class: Class1:checks=[],typeLiteral*/
diff --git a/tests/compiler/dart2js/rti/emission/type_variable_function_type.dart b/tests/compiler/dart2js/rti/emission/type_variable_function_type.dart
index 44d0e88..5509423 100644
--- a/tests/compiler/dart2js/rti/emission/type_variable_function_type.dart
+++ b/tests/compiler/dart2js/rti/emission/type_variable_function_type.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Based on tests/language_2/type_variable_function_type_test.dart
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js/rti/factory_call_test.dart b/tests/compiler/dart2js/rti/factory_call_test.dart
index 803b0be..e77adc2 100644
--- a/tests/compiler/dart2js/rti/factory_call_test.dart
+++ b/tests/compiler/dart2js/rti/factory_call_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/common_elements.dart';
 import 'package:compiler/src/compiler.dart';
diff --git a/tests/compiler/dart2js/rti/instance_call_test.dart b/tests/compiler/dart2js/rti/instance_call_test.dart
index 16f5538..6b123c3 100644
--- a/tests/compiler/dart2js/rti/instance_call_test.dart
+++ b/tests/compiler/dart2js/rti/instance_call_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/commandline_options.dart';
 import 'package:compiler/src/common_elements.dart';
diff --git a/tests/compiler/dart2js/rti/is_test_with_type_parameters_test.dart b/tests/compiler/dart2js/rti/is_test_with_type_parameters_test.dart
index aeb8c3d..d174f9a 100644
--- a/tests/compiler/dart2js/rti/is_test_with_type_parameters_test.dart
+++ b/tests/compiler/dart2js/rti/is_test_with_type_parameters_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 // Tests that is-tests are also available for superclasses if the class is
diff --git a/tests/compiler/dart2js/rti/rti_emission_test.dart b/tests/compiler/dart2js/rti/rti_emission_test.dart
index 6a920a4..66364a9 100644
--- a/tests/compiler/dart2js/rti/rti_emission_test.dart
+++ b/tests/compiler/dart2js/rti/rti_emission_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:io';
 import 'package:_fe_analyzer_shared/src/testing/features.dart';
 import 'package:async_helper/async_helper.dart';
diff --git a/tests/compiler/dart2js/rti/rti_need0_test.dart b/tests/compiler/dart2js/rti/rti_need0_test.dart
index 1ffa110..43c8681 100644
--- a/tests/compiler/dart2js/rti/rti_need0_test.dart
+++ b/tests/compiler/dart2js/rti/rti_need0_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'rti_need_test_helper.dart';
 
 main(List<String> args) {
diff --git a/tests/compiler/dart2js/rti/rti_need1_test.dart b/tests/compiler/dart2js/rti/rti_need1_test.dart
index a2d42f4..6c181e7 100644
--- a/tests/compiler/dart2js/rti/rti_need1_test.dart
+++ b/tests/compiler/dart2js/rti/rti_need1_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'rti_need_test_helper.dart';
 
 main(List<String> args) {
diff --git a/tests/compiler/dart2js/rti/rti_need_test_helper.dart b/tests/compiler/dart2js/rti/rti_need_test_helper.dart
index 168a383..faa8983 100644
--- a/tests/compiler/dart2js/rti/rti_need_test_helper.dart
+++ b/tests/compiler/dart2js/rti/rti_need_test_helper.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:io';
 import 'package:_fe_analyzer_shared/src/testing/features.dart';
 import 'package:async_helper/async_helper.dart';
diff --git a/tests/compiler/dart2js/rti/runtime_type_hint_test.dart b/tests/compiler/dart2js/rti/runtime_type_hint_test.dart
index 99b6e00..b261627 100644
--- a/tests/compiler/dart2js/rti/runtime_type_hint_test.dart
+++ b/tests/compiler/dart2js/rti/runtime_type_hint_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/commandline_options.dart';
 import 'package:compiler/src/diagnostics/messages.dart';
diff --git a/tests/compiler/dart2js/rti/show.dart b/tests/compiler/dart2js/rti/show.dart
index a2e9056..f6ffb3a 100644
--- a/tests/compiler/dart2js/rti/show.dart
+++ b/tests/compiler/dart2js/rti/show.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Helper program that shows the rti data on a dart program.
 
 import 'package:args/args.dart';
diff --git a/tests/compiler/dart2js/rti/type_representation_test.dart b/tests/compiler/dart2js/rti/type_representation_test.dart
index c2f1a34..5258d04 100644
--- a/tests/compiler/dart2js/rti/type_representation_test.dart
+++ b/tests/compiler/dart2js/rti/type_representation_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // TODO(johnniwinther): Port this test to be frontend agnostic.
 
 library type_representation_test;
diff --git a/tests/compiler/dart2js/serialization/data/const_literals.dart b/tests/compiler/dart2js/serialization/data/const_literals.dart
index fb8128a..80443cb 100644
--- a/tests/compiler/dart2js/serialization/data/const_literals.dart
+++ b/tests/compiler/dart2js/serialization/data/const_literals.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   mapConstLiteral();
   dictionaryConstLiteral();
diff --git a/tests/compiler/dart2js/serialization/data/constructor_name.dart b/tests/compiler/dart2js/serialization/data/constructor_name.dart
index dc1e3b2..f7f66f7 100644
--- a/tests/compiler/dart2js/serialization/data/constructor_name.dart
+++ b/tests/compiler/dart2js/serialization/data/constructor_name.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class Class1 {
   var foo;
   Class1.foo();
diff --git a/tests/compiler/dart2js/serialization/data/continue.dart b/tests/compiler/dart2js/serialization/data/continue.dart
index 5d8c3ec..e5bc2c9 100644
--- a/tests/compiler/dart2js/serialization/data/continue.dart
+++ b/tests/compiler/dart2js/serialization/data/continue.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   continueInClosure();
 }
diff --git a/tests/compiler/dart2js/serialization/data/custom_types.dart b/tests/compiler/dart2js/serialization/data/custom_types.dart
index a301473..1190293 100644
--- a/tests/compiler/dart2js/serialization/data/custom_types.dart
+++ b/tests/compiler/dart2js/serialization/data/custom_types.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class A {
   method() {
     Object c = this;
diff --git a/tests/compiler/dart2js/serialization/data/deferred.dart b/tests/compiler/dart2js/serialization/data/deferred.dart
index b0ea93c..a161d36 100644
--- a/tests/compiler/dart2js/serialization/data/deferred.dart
+++ b/tests/compiler/dart2js/serialization/data/deferred.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import '../libs/deferred_lib1.dart';
 import '../libs/deferred_lib2.dart' deferred as lib2;
 
diff --git a/tests/compiler/dart2js/serialization/data/jsinterop.dart b/tests/compiler/dart2js/serialization/data/jsinterop.dart
index 208b2a9..eef8fd6 100644
--- a/tests/compiler/dart2js/serialization/data/jsinterop.dart
+++ b/tests/compiler/dart2js/serialization/data/jsinterop.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 @JS()
 library lib;
 
diff --git a/tests/compiler/dart2js/serialization/data/labels.dart b/tests/compiler/dart2js/serialization/data/labels.dart
index 4ba9f05..7919351 100644
--- a/tests/compiler/dart2js/serialization/data/labels.dart
+++ b/tests/compiler/dart2js/serialization/data/labels.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   label:
   {
diff --git a/tests/compiler/dart2js/serialization/data/maps.dart b/tests/compiler/dart2js/serialization/data/maps.dart
index ca45d28..3226303 100644
--- a/tests/compiler/dart2js/serialization/data/maps.dart
+++ b/tests/compiler/dart2js/serialization/data/maps.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   createMap();
   createDictionary();
diff --git a/tests/compiler/dart2js/serialization/data/switch.dart b/tests/compiler/dart2js/serialization/data/switch.dart
index fc9bc83..035db96 100644
--- a/tests/compiler/dart2js/serialization/data/switch.dart
+++ b/tests/compiler/dart2js/serialization/data/switch.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   switchCaseWithContinue(null);
 }
diff --git a/tests/compiler/dart2js/serialization/data/typedef.dart b/tests/compiler/dart2js/serialization/data/typedef.dart
index 01d991b..9036918 100644
--- a/tests/compiler/dart2js/serialization/data/typedef.dart
+++ b/tests/compiler/dart2js/serialization/data/typedef.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   c;
 }
diff --git a/tests/compiler/dart2js/serialization/in_memory_split_test.dart b/tests/compiler/dart2js/serialization/in_memory_split_test.dart
index 33a7912..7f4be63 100644
--- a/tests/compiler/dart2js/serialization/in_memory_split_test.dart
+++ b/tests/compiler/dart2js/serialization/in_memory_split_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:args/args.dart';
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/serialization/strategies.dart';
diff --git a/tests/compiler/dart2js/serialization/libs/deferred_lib1.dart b/tests/compiler/dart2js/serialization/libs/deferred_lib1.dart
index 361b0fd..d34fd39 100644
--- a/tests/compiler/dart2js/serialization/libs/deferred_lib1.dart
+++ b/tests/compiler/dart2js/serialization/libs/deferred_lib1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library deferred_constants1_lib1;
 
 export 'deferred_lib3.dart' show C, C1;
diff --git a/tests/compiler/dart2js/serialization/libs/deferred_lib2.dart b/tests/compiler/dart2js/serialization/libs/deferred_lib2.dart
index 379239d..081d463 100644
--- a/tests/compiler/dart2js/serialization/libs/deferred_lib2.dart
+++ b/tests/compiler/dart2js/serialization/libs/deferred_lib2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library deferred_constants1_lib2;
 
 export 'deferred_lib3.dart' show C2, C3, C4, C5, C6, C7;
diff --git a/tests/compiler/dart2js/serialization/libs/deferred_lib3.dart b/tests/compiler/dart2js/serialization/libs/deferred_lib3.dart
index 708a79a..4309703 100644
--- a/tests/compiler/dart2js/serialization/libs/deferred_lib3.dart
+++ b/tests/compiler/dart2js/serialization/libs/deferred_lib3.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library deferred_constants1_lib3;
 
 import 'dart:async';
diff --git a/tests/compiler/dart2js/serialization/on_disk_split_test.dart b/tests/compiler/dart2js/serialization/on_disk_split_test.dart
index 163efa5..618eeb9 100644
--- a/tests/compiler/dart2js/serialization/on_disk_split_test.dart
+++ b/tests/compiler/dart2js/serialization/on_disk_split_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:io';
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/commandline_options.dart';
diff --git a/tests/compiler/dart2js/serialization/serialization_test.dart b/tests/compiler/dart2js/serialization/serialization_test.dart
index 75dcb9a..139dde5 100644
--- a/tests/compiler/dart2js/serialization/serialization_test.dart
+++ b/tests/compiler/dart2js/serialization/serialization_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:io';
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/commandline_options.dart';
diff --git a/tests/compiler/dart2js/serialization/serialization_test_helper.dart b/tests/compiler/dart2js/serialization/serialization_test_helper.dart
index 9f48d01..389d370 100644
--- a/tests/compiler/dart2js/serialization/serialization_test_helper.dart
+++ b/tests/compiler/dart2js/serialization/serialization_test_helper.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:compiler/compiler_new.dart';
 import 'package:compiler/src/compiler.dart';
 import 'package:compiler/src/inferrer/types.dart';
diff --git a/tests/compiler/dart2js/sourcemaps/d2js_validity_test.dart b/tests/compiler/dart2js/sourcemaps/d2js_validity_test.dart
index 36ab917..0c93e47 100644
--- a/tests/compiler/dart2js/sourcemaps/d2js_validity_test.dart
+++ b/tests/compiler/dart2js/sourcemaps/d2js_validity_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:async';
 import 'dart:io';
 
diff --git a/tests/compiler/dart2js/sourcemaps/data/async.dart b/tests/compiler/dart2js/sourcemaps/data/async.dart
index 1cbc013..14a3b30 100644
--- a/tests/compiler/dart2js/sourcemaps/data/async.dart
+++ b/tests/compiler/dart2js/sourcemaps/data/async.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   asyncReturn();
   asyncThrow();
diff --git a/tests/compiler/dart2js/sourcemaps/data/invokes.dart b/tests/compiler/dart2js/sourcemaps/data/invokes.dart
index 11fad4d..37f04ff 100644
--- a/tests/compiler/dart2js/sourcemaps/data/invokes.dart
+++ b/tests/compiler/dart2js/sourcemaps/data/invokes.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test file for testing source mappings of invocations.
 
 var counter = 0;
diff --git a/tests/compiler/dart2js/sourcemaps/data/operators.dart b/tests/compiler/dart2js/sourcemaps/data/operators.dart
index 11888e110..66ce0d4 100644
--- a/tests/compiler/dart2js/sourcemaps/data/operators.dart
+++ b/tests/compiler/dart2js/sourcemaps/data/operators.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test file for testing source mappings of operations.
 
 var counter = 0;
diff --git a/tests/compiler/dart2js/sourcemaps/data/others.dart b/tests/compiler/dart2js/sourcemaps/data/others.dart
index 86ead71..76e2756 100644
--- a/tests/compiler/dart2js/sourcemaps/data/others.dart
+++ b/tests/compiler/dart2js/sourcemaps/data/others.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test file for testing source mappings of various expression and statements.
 
 main() {
diff --git a/tests/compiler/dart2js/sourcemaps/data/super.dart b/tests/compiler/dart2js/sourcemaps/data/super.dart
index e94a564..3b8e30c 100644
--- a/tests/compiler/dart2js/sourcemaps/data/super.dart
+++ b/tests/compiler/dart2js/sourcemaps/data/super.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class Super {
   var field = 0;
 
diff --git a/tests/compiler/dart2js/sourcemaps/deferred_d2js_validity_test.dart b/tests/compiler/dart2js/sourcemaps/deferred_d2js_validity_test.dart
index 12d983d..3da203d 100644
--- a/tests/compiler/dart2js/sourcemaps/deferred_d2js_validity_test.dart
+++ b/tests/compiler/dart2js/sourcemaps/deferred_d2js_validity_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:io';
 
 import 'package:async_helper/async_helper.dart';
diff --git a/tests/compiler/dart2js/sourcemaps/helpers/colors.dart b/tests/compiler/dart2js/sourcemaps/helpers/colors.dart
index f3d435d..70578aa 100644
--- a/tests/compiler/dart2js/sourcemaps/helpers/colors.dart
+++ b/tests/compiler/dart2js/sourcemaps/helpers/colors.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Utility library for creating web colors.
 
 library sourcemaps.colors;
diff --git a/tests/compiler/dart2js/sourcemaps/helpers/diff.dart b/tests/compiler/dart2js/sourcemaps/helpers/diff.dart
index 012679e..1f5ed6a 100644
--- a/tests/compiler/dart2js/sourcemaps/helpers/diff.dart
+++ b/tests/compiler/dart2js/sourcemaps/helpers/diff.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library sourcemap.diff;
 
 import 'package:compiler/src/io/source_file.dart';
diff --git a/tests/compiler/dart2js/sourcemaps/helpers/html_parts.dart b/tests/compiler/dart2js/sourcemaps/helpers/html_parts.dart
index ad951bc..eae6992 100644
--- a/tests/compiler/dart2js/sourcemaps/helpers/html_parts.dart
+++ b/tests/compiler/dart2js/sourcemaps/helpers/html_parts.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library sourcemap.html_parts;
 
 import 'sourcemap_html_helper.dart';
diff --git a/tests/compiler/dart2js/sourcemaps/helpers/js_tracer.dart b/tests/compiler/dart2js/sourcemaps/helpers/js_tracer.dart
index aa234a1..f515b73 100644
--- a/tests/compiler/dart2js/sourcemaps/helpers/js_tracer.dart
+++ b/tests/compiler/dart2js/sourcemaps/helpers/js_tracer.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library sourcemap.js_tracer;
 
 import 'package:compiler/src/io/source_information.dart';
diff --git a/tests/compiler/dart2js/sourcemaps/helpers/lax_json.dart b/tests/compiler/dart2js/sourcemaps/helpers/lax_json.dart
index 405ecfb..58e5f6c 100644
--- a/tests/compiler/dart2js/sourcemaps/helpers/lax_json.dart
+++ b/tests/compiler/dart2js/sourcemaps/helpers/lax_json.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Decode a lax JSON encoded text, that is, JSON with Dart-like comments and
 /// trailing commas.
 ///
diff --git a/tests/compiler/dart2js/sourcemaps/helpers/output_structure.dart b/tests/compiler/dart2js/sourcemaps/helpers/output_structure.dart
index ddfd8c9..be586f6 100644
--- a/tests/compiler/dart2js/sourcemaps/helpers/output_structure.dart
+++ b/tests/compiler/dart2js/sourcemaps/helpers/output_structure.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library sourcemap.output_structure;
 
 import 'dart:math' as Math;
diff --git a/tests/compiler/dart2js/sourcemaps/helpers/source_map_validator_helper.dart b/tests/compiler/dart2js/sourcemaps/helpers/source_map_validator_helper.dart
index aab0969..158276b 100644
--- a/tests/compiler/dart2js/sourcemaps/helpers/source_map_validator_helper.dart
+++ b/tests/compiler/dart2js/sourcemaps/helpers/source_map_validator_helper.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:io';
 import 'dart:convert';
 import 'dart:async';
diff --git a/tests/compiler/dart2js/sourcemaps/helpers/sourcemap_helper.dart b/tests/compiler/dart2js/sourcemaps/helpers/sourcemap_helper.dart
index 058750c..f5e0509 100644
--- a/tests/compiler/dart2js/sourcemaps/helpers/sourcemap_helper.dart
+++ b/tests/compiler/dart2js/sourcemaps/helpers/sourcemap_helper.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library sourcemap.helper;
 
 import 'dart:async';
diff --git a/tests/compiler/dart2js/sourcemaps/helpers/sourcemap_html_helper.dart b/tests/compiler/dart2js/sourcemaps/helpers/sourcemap_html_helper.dart
index 57869ca..9f312d4 100644
--- a/tests/compiler/dart2js/sourcemaps/helpers/sourcemap_html_helper.dart
+++ b/tests/compiler/dart2js/sourcemaps/helpers/sourcemap_html_helper.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Helper for creating HTML visualization of the source map information
 /// generated by a [SourceMapProcessor].
 
diff --git a/tests/compiler/dart2js/sourcemaps/helpers/sourcemap_html_templates.dart b/tests/compiler/dart2js/sourcemaps/helpers/sourcemap_html_templates.dart
index e99ec4e..f0b53f0 100644
--- a/tests/compiler/dart2js/sourcemaps/helpers/sourcemap_html_templates.dart
+++ b/tests/compiler/dart2js/sourcemaps/helpers/sourcemap_html_templates.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Templates used for the HTML visualization of source map information.
 
 library sourcemap.html.templates;
diff --git a/tests/compiler/dart2js/sourcemaps/helpers/trace_graph.dart b/tests/compiler/dart2js/sourcemaps/helpers/trace_graph.dart
index d4481f8..31d5d31b 100644
--- a/tests/compiler/dart2js/sourcemaps/helpers/trace_graph.dart
+++ b/tests/compiler/dart2js/sourcemaps/helpers/trace_graph.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library sourcemap.trace_graph;
 
 import 'dart:collection';
diff --git a/tests/compiler/dart2js/sourcemaps/lax_json_test.dart b/tests/compiler/dart2js/sourcemaps/lax_json_test.dart
index ac532c7..abbbea1 100644
--- a/tests/compiler/dart2js/sourcemaps/lax_json_test.dart
+++ b/tests/compiler/dart2js/sourcemaps/lax_json_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'helpers/lax_json.dart';
 
diff --git a/tests/compiler/dart2js/sourcemaps/load_save_test.dart b/tests/compiler/dart2js/sourcemaps/load_save_test.dart
index 3666fb1..3355040 100644
--- a/tests/compiler/dart2js/sourcemaps/load_save_test.dart
+++ b/tests/compiler/dart2js/sourcemaps/load_save_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:convert';
 import 'package:expect/expect.dart';
 import 'package:source_maps/source_maps.dart';
diff --git a/tests/compiler/dart2js/sourcemaps/location_collector_test.dart b/tests/compiler/dart2js/sourcemaps/location_collector_test.dart
index b5ebf2a..7352c31 100644
--- a/tests/compiler/dart2js/sourcemaps/location_collector_test.dart
+++ b/tests/compiler/dart2js/sourcemaps/location_collector_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Unittest for the [LocationCollector].
 
 import 'package:compiler/src/io/code_output.dart';
diff --git a/tests/compiler/dart2js/sourcemaps/mapping_test.dart b/tests/compiler/dart2js/sourcemaps/mapping_test.dart
index ada9f65..bbff333 100644
--- a/tests/compiler/dart2js/sourcemaps/mapping_test.dart
+++ b/tests/compiler/dart2js/sourcemaps/mapping_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:async';
 import 'dart:io';
 
diff --git a/tests/compiler/dart2js/sourcemaps/minified/cannot_read_property.dart b/tests/compiler/dart2js/sourcemaps/minified/cannot_read_property.dart
index 497cfd2..aecd6b6 100644
--- a/tests/compiler/dart2js/sourcemaps/minified/cannot_read_property.dart
+++ b/tests/compiler/dart2js/sourcemaps/minified/cannot_read_property.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Error pattern: Cannot read property '([^']*)' of null
 // Kind of minified name: instance
 // Expected deobfuscated name: method
diff --git a/tests/compiler/dart2js/sourcemaps/minified/cannot_read_property2.dart b/tests/compiler/dart2js/sourcemaps/minified/cannot_read_property2.dart
index b1321a4..b189bf8 100644
--- a/tests/compiler/dart2js/sourcemaps/minified/cannot_read_property2.dart
+++ b/tests/compiler/dart2js/sourcemaps/minified/cannot_read_property2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Error pattern: Cannot read property '([^']*)' of null
 // Kind of minified name: instance
 // Expected deobfuscated name: method
diff --git a/tests/compiler/dart2js/sourcemaps/minified/instance.dart b/tests/compiler/dart2js/sourcemaps/minified/instance.dart
index 6a2f831..798c249 100644
--- a/tests/compiler/dart2js/sourcemaps/minified/instance.dart
+++ b/tests/compiler/dart2js/sourcemaps/minified/instance.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Error pattern: Instance of '([^']*)'
 // Kind of minified name: global
 // Expected deobfuscated name: MyClass
diff --git a/tests/compiler/dart2js/sourcemaps/minified/is_not_a_function.dart b/tests/compiler/dart2js/sourcemaps/minified/is_not_a_function.dart
index 92087cd..01a3a36 100644
--- a/tests/compiler/dart2js/sourcemaps/minified/is_not_a_function.dart
+++ b/tests/compiler/dart2js/sourcemaps/minified/is_not_a_function.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // TODO(sigmund): should this be handled as "other"? (the identifier appears
 // direclty in the line producing the error).
 //
diff --git a/tests/compiler/dart2js/sourcemaps/minified/no_such_method.dart b/tests/compiler/dart2js/sourcemaps/minified/no_such_method.dart
index 88383df..115a11b 100644
--- a/tests/compiler/dart2js/sourcemaps/minified/no_such_method.dart
+++ b/tests/compiler/dart2js/sourcemaps/minified/no_such_method.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Error pattern: NoSuchMethodError: method not found: '([^']*)'\r?\nReceiver: Instance of '[^']*'
 // Kind of minified name: instance
 // Expected deobfuscated name: m1
diff --git a/tests/compiler/dart2js/sourcemaps/minified/no_such_method2.dart b/tests/compiler/dart2js/sourcemaps/minified/no_such_method2.dart
index c169326..5d18472 100644
--- a/tests/compiler/dart2js/sourcemaps/minified/no_such_method2.dart
+++ b/tests/compiler/dart2js/sourcemaps/minified/no_such_method2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Error pattern: NoSuchMethodError: method not found: '[^']*'\r?\nReceiver: Instance of '([^']*)'
 // Kind of minified name: global
 // Expected deobfuscated name: B
diff --git a/tests/compiler/dart2js/sourcemaps/minified/no_such_method3.dart b/tests/compiler/dart2js/sourcemaps/minified/no_such_method3.dart
index 5ba0000..c5a7c5d 100644
--- a/tests/compiler/dart2js/sourcemaps/minified/no_such_method3.dart
+++ b/tests/compiler/dart2js/sourcemaps/minified/no_such_method3.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Error pattern: NoSuchMethodError: method not found: '([^']*)' .*
 // Kind of minified name: instance
 // Expected deobfuscated name: g1
diff --git a/tests/compiler/dart2js/sourcemaps/minified/no_such_method4.dart b/tests/compiler/dart2js/sourcemaps/minified/no_such_method4.dart
index 9a4fdf6..83fb952 100644
--- a/tests/compiler/dart2js/sourcemaps/minified/no_such_method4.dart
+++ b/tests/compiler/dart2js/sourcemaps/minified/no_such_method4.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Error pattern: NoSuchMethodError: method not found: '([^']*)' .*
 // Kind of minified name: instance
 // Expected deobfuscated name: g1=
diff --git a/tests/compiler/dart2js/sourcemaps/minified_names_test.dart b/tests/compiler/dart2js/sourcemaps/minified_names_test.dart
index 8761edc..674f151 100644
--- a/tests/compiler/dart2js/sourcemaps/minified_names_test.dart
+++ b/tests/compiler/dart2js/sourcemaps/minified_names_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:async';
 import 'dart:io';
 import 'dart:convert';
diff --git a/tests/compiler/dart2js/sourcemaps/name_test.dart b/tests/compiler/dart2js/sourcemaps/name_test.dart
index b6ecce8..5f2e197 100644
--- a/tests/compiler/dart2js/sourcemaps/name_test.dart
+++ b/tests/compiler/dart2js/sourcemaps/name_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library source_map_name_test;
 
 import 'package:async_helper/async_helper.dart';
diff --git a/tests/compiler/dart2js/sourcemaps/nomapping_test.dart b/tests/compiler/dart2js/sourcemaps/nomapping_test.dart
index b38c1c6..7889b64 100644
--- a/tests/compiler/dart2js/sourcemaps/nomapping_test.dart
+++ b/tests/compiler/dart2js/sourcemaps/nomapping_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:async';
 import 'dart:io';
 
diff --git a/tests/compiler/dart2js/sourcemaps/source_map_test.dart b/tests/compiler/dart2js/sourcemaps/source_map_test.dart
index ddb75bf..2afead7 100644
--- a/tests/compiler/dart2js/sourcemaps/source_map_test.dart
+++ b/tests/compiler/dart2js/sourcemaps/source_map_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that options '--source-map' and '--out' correctly adds
 // `sourceMappingURL` and "file" attributes to source file and source map file.
 
diff --git a/tests/compiler/dart2js/sourcemaps/source_mapping_invokes_test.dart b/tests/compiler/dart2js/sourcemaps/source_mapping_invokes_test.dart
index 2aa8ee8e..77fbf1a 100644
--- a/tests/compiler/dart2js/sourcemaps/source_mapping_invokes_test.dart
+++ b/tests/compiler/dart2js/sourcemaps/source_mapping_invokes_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'tools/source_mapping_tester.dart';
 
 void main() {
diff --git a/tests/compiler/dart2js/sourcemaps/source_mapping_operators_test.dart b/tests/compiler/dart2js/sourcemaps/source_mapping_operators_test.dart
index cbddf96..8c2ee61 100644
--- a/tests/compiler/dart2js/sourcemaps/source_mapping_operators_test.dart
+++ b/tests/compiler/dart2js/sourcemaps/source_mapping_operators_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'tools/source_mapping_tester.dart';
 
 void main() {
diff --git a/tests/compiler/dart2js/sourcemaps/source_mapping_test.dart b/tests/compiler/dart2js/sourcemaps/source_mapping_test.dart
index 78c9d5e..fa6d5f9 100644
--- a/tests/compiler/dart2js/sourcemaps/source_mapping_test.dart
+++ b/tests/compiler/dart2js/sourcemaps/source_mapping_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'helpers/sourcemap_helper.dart';
 import 'tools/source_mapping_tester.dart';
 
diff --git a/tests/compiler/dart2js/sourcemaps/stacktrace/deep_inlining.dart b/tests/compiler/dart2js/sourcemaps/stacktrace/deep_inlining.dart
index 1b30119..0e969bb 100644
--- a/tests/compiler/dart2js/sourcemaps/stacktrace/deep_inlining.dart
+++ b/tests/compiler/dart2js/sourcemaps/stacktrace/deep_inlining.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class MyClass {}
 
 @pragma('dart2js:noInline')
diff --git a/tests/compiler/dart2js/sourcemaps/stacktrace/extension_method.dart b/tests/compiler/dart2js/sourcemaps/stacktrace/extension_method.dart
index b2fe04f..1da9d2f 100644
--- a/tests/compiler/dart2js/sourcemaps/stacktrace/extension_method.dart
+++ b/tests/compiler/dart2js/sourcemaps/stacktrace/extension_method.dart
@@ -1,6 +1,8 @@
 class MyClass {
   MyClass();
 
+
+// @dart = 2.7
   @pragma('dart2js:noInline')
   set internalSetter(int v) {
     /*7:MyClass.internalSetter*/ throw "error";
diff --git a/tests/compiler/dart2js/sourcemaps/stacktrace/getter_inlining.dart b/tests/compiler/dart2js/sourcemaps/stacktrace/getter_inlining.dart
index 4e7aec1..c5ab11c 100644
--- a/tests/compiler/dart2js/sourcemaps/stacktrace/getter_inlining.dart
+++ b/tests/compiler/dart2js/sourcemaps/stacktrace/getter_inlining.dart
@@ -1,3 +1,9 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
+
 class MyClass {
   int fieldName;
 
diff --git a/tests/compiler/dart2js/sourcemaps/stacktrace/getter_inlining_1.dart b/tests/compiler/dart2js/sourcemaps/stacktrace/getter_inlining_1.dart
index 40d9dc5..95a5bac 100644
--- a/tests/compiler/dart2js/sourcemaps/stacktrace/getter_inlining_1.dart
+++ b/tests/compiler/dart2js/sourcemaps/stacktrace/getter_inlining_1.dart
@@ -1,3 +1,9 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
+
 class MyClass {
   int fieldName;
 
diff --git a/tests/compiler/dart2js/sourcemaps/stacktrace/getter_inlining_2.dart b/tests/compiler/dart2js/sourcemaps/stacktrace/getter_inlining_2.dart
index 9fc9e55..609c7c7 100644
--- a/tests/compiler/dart2js/sourcemaps/stacktrace/getter_inlining_2.dart
+++ b/tests/compiler/dart2js/sourcemaps/stacktrace/getter_inlining_2.dart
@@ -1,3 +1,9 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
+
 @pragma('dart2js:noInline')
 String confuse(String x) => x;
 
diff --git a/tests/compiler/dart2js/sourcemaps/stacktrace/getter_inlining_3.dart b/tests/compiler/dart2js/sourcemaps/stacktrace/getter_inlining_3.dart
index 82996ca..f29039b 100644
--- a/tests/compiler/dart2js/sourcemaps/stacktrace/getter_inlining_3.dart
+++ b/tests/compiler/dart2js/sourcemaps/stacktrace/getter_inlining_3.dart
@@ -1,3 +1,9 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
+
 class MyClass {
   int fieldName;
 
diff --git a/tests/compiler/dart2js/sourcemaps/stacktrace/getter_inlining_baseline_1.dart b/tests/compiler/dart2js/sourcemaps/stacktrace/getter_inlining_baseline_1.dart
index 67fa7e9..aeb32d0 100644
--- a/tests/compiler/dart2js/sourcemaps/stacktrace/getter_inlining_baseline_1.dart
+++ b/tests/compiler/dart2js/sourcemaps/stacktrace/getter_inlining_baseline_1.dart
@@ -1,3 +1,9 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
+
 class MyClass {
   int fieldName;
 
diff --git a/tests/compiler/dart2js/sourcemaps/stacktrace/getter_inlining_baseline_2.dart b/tests/compiler/dart2js/sourcemaps/stacktrace/getter_inlining_baseline_2.dart
index 383d27d..8dc3a73 100644
--- a/tests/compiler/dart2js/sourcemaps/stacktrace/getter_inlining_baseline_2.dart
+++ b/tests/compiler/dart2js/sourcemaps/stacktrace/getter_inlining_baseline_2.dart
@@ -1,3 +1,9 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
+
 class MyClass {
   int fieldName;
 
diff --git a/tests/compiler/dart2js/sourcemaps/stacktrace/null_instance_field.dart b/tests/compiler/dart2js/sourcemaps/stacktrace/null_instance_field.dart
index b9a347f..f47dcaa 100644
--- a/tests/compiler/dart2js/sourcemaps/stacktrace/null_instance_field.dart
+++ b/tests/compiler/dart2js/sourcemaps/stacktrace/null_instance_field.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   /*1:main*/ test(new Class());
 }
diff --git a/tests/compiler/dart2js/sourcemaps/stacktrace/null_instance_field_elided.dart b/tests/compiler/dart2js/sourcemaps/stacktrace/null_instance_field_elided.dart
index 768d1f0..6089cd8 100644
--- a/tests/compiler/dart2js/sourcemaps/stacktrace/null_instance_field_elided.dart
+++ b/tests/compiler/dart2js/sourcemaps/stacktrace/null_instance_field_elided.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   /*1:main*/ test(new Class());
 }
diff --git a/tests/compiler/dart2js/sourcemaps/stacktrace/null_interceptor_field.dart b/tests/compiler/dart2js/sourcemaps/stacktrace/null_interceptor_field.dart
index 08a8072..c91a150 100644
--- a/tests/compiler/dart2js/sourcemaps/stacktrace/null_interceptor_field.dart
+++ b/tests/compiler/dart2js/sourcemaps/stacktrace/null_interceptor_field.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class MyType {
   get length => 3; // ensures we build an interceptor for `.length`
 }
diff --git a/tests/compiler/dart2js/sourcemaps/stacktrace/null_receiver_inlining.dart b/tests/compiler/dart2js/sourcemaps/stacktrace/null_receiver_inlining.dart
index f822e35..9684ef0 100644
--- a/tests/compiler/dart2js/sourcemaps/stacktrace/null_receiver_inlining.dart
+++ b/tests/compiler/dart2js/sourcemaps/stacktrace/null_receiver_inlining.dart
@@ -1,3 +1,9 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file
+
+// @dart = 2.7
+
 class MyClass {
   int fieldName;
 
diff --git a/tests/compiler/dart2js/sourcemaps/stacktrace/parameters.dart b/tests/compiler/dart2js/sourcemaps/stacktrace/parameters.dart
index 4321fea..9a85e70 100644
--- a/tests/compiler/dart2js/sourcemaps/stacktrace/parameters.dart
+++ b/tests/compiler/dart2js/sourcemaps/stacktrace/parameters.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   var c = new Class();
   c. /*1:main*/ instancePositional1(0);
diff --git a/tests/compiler/dart2js/sourcemaps/stacktrace/parameters_elided.dart b/tests/compiler/dart2js/sourcemaps/stacktrace/parameters_elided.dart
index b8cbd75..26b944d 100644
--- a/tests/compiler/dart2js/sourcemaps/stacktrace/parameters_elided.dart
+++ b/tests/compiler/dart2js/sourcemaps/stacktrace/parameters_elided.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   var c = new Class();
   c. /*1:main*/ instancePositional1(0);
diff --git a/tests/compiler/dart2js/sourcemaps/stacktrace/rethrow.dart b/tests/compiler/dart2js/sourcemaps/stacktrace/rethrow.dart
index d1edabc..c6d733c 100644
--- a/tests/compiler/dart2js/sourcemaps/stacktrace/rethrow.dart
+++ b/tests/compiler/dart2js/sourcemaps/stacktrace/rethrow.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   /*1:main*/ test();
 }
diff --git a/tests/compiler/dart2js/sourcemaps/stacktrace/setter_inlining.dart b/tests/compiler/dart2js/sourcemaps/stacktrace/setter_inlining.dart
index fa567c1..ed9b291 100644
--- a/tests/compiler/dart2js/sourcemaps/stacktrace/setter_inlining.dart
+++ b/tests/compiler/dart2js/sourcemaps/stacktrace/setter_inlining.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class MyClass {
   int fieldName;
 
diff --git a/tests/compiler/dart2js/sourcemaps/stacktrace/sync_throw_in_async.dart b/tests/compiler/dart2js/sourcemaps/stacktrace/sync_throw_in_async.dart
index 3c17f40..f89ba6d 100644
--- a/tests/compiler/dart2js/sourcemaps/stacktrace/sync_throw_in_async.dart
+++ b/tests/compiler/dart2js/sourcemaps/stacktrace/sync_throw_in_async.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   // This call is on the stack when the error is thrown.
   /*1:main*/ test();
diff --git a/tests/compiler/dart2js/sourcemaps/stacktrace/sync_throw_in_awaited_async.dart b/tests/compiler/dart2js/sourcemaps/stacktrace/sync_throw_in_awaited_async.dart
index 46ec972..8d1ae16 100644
--- a/tests/compiler/dart2js/sourcemaps/stacktrace/sync_throw_in_awaited_async.dart
+++ b/tests/compiler/dart2js/sourcemaps/stacktrace/sync_throw_in_awaited_async.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   // This call is on the stack when the error is thrown.
   /*1:main*/ test1();
diff --git a/tests/compiler/dart2js/sourcemaps/stacktrace/sync_throw_in_constructor_from_async.dart b/tests/compiler/dart2js/sourcemaps/stacktrace/sync_throw_in_constructor_from_async.dart
index be6c6b18..d9af125 100644
--- a/tests/compiler/dart2js/sourcemaps/stacktrace/sync_throw_in_constructor_from_async.dart
+++ b/tests/compiler/dart2js/sourcemaps/stacktrace/sync_throw_in_constructor_from_async.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   /*1:main*/ test();
 }
diff --git a/tests/compiler/dart2js/sourcemaps/stacktrace/sync_throw_in_top_level_method_from_async.dart b/tests/compiler/dart2js/sourcemaps/stacktrace/sync_throw_in_top_level_method_from_async.dart
index 1ed8fd4..23b08e9 100644
--- a/tests/compiler/dart2js/sourcemaps/stacktrace/sync_throw_in_top_level_method_from_async.dart
+++ b/tests/compiler/dart2js/sourcemaps/stacktrace/sync_throw_in_top_level_method_from_async.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   /*1:main*/ test1();
 }
diff --git a/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_async.dart b/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_async.dart
index fe10b93..24cfc8b 100644
--- a/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_async.dart
+++ b/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_async.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   // This call is no longer on the stack when the error is thrown.
   /*:main*/ test();
diff --git a/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_awaited_async.dart b/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_awaited_async.dart
index b9762fd..552ab2b 100644
--- a/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_awaited_async.dart
+++ b/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_awaited_async.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   test1();
 }
diff --git a/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_constructor.dart b/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_constructor.dart
index 6912e7c..95eb4e5 100644
--- a/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_constructor.dart
+++ b/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_constructor.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   // ignore: UNUSED_LOCAL_VARIABLE
   var c = new /*1:main*/ Class();
diff --git a/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_constructor_from_async.dart b/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_constructor_from_async.dart
index ae6b2aa..aecbdb8 100644
--- a/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_constructor_from_async.dart
+++ b/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_constructor_from_async.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   // This call is no longer on the stack when the error is thrown.
   /*:main*/ test();
diff --git a/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_instance_method.dart b/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_instance_method.dart
index 1accc99..f55170f 100644
--- a/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_instance_method.dart
+++ b/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_instance_method.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   var c = new Class();
   c. /*1:main*/ test();
diff --git a/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_main.dart b/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_main.dart
index f43b4d4..24cfa64 100644
--- a/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_main.dart
+++ b/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_main.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   /*1:main*/ throw '>ExceptionMarker<';
 }
diff --git a/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_static_method.dart b/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_static_method.dart
index a86c5df..53c814b 100644
--- a/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_static_method.dart
+++ b/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_static_method.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   Class. /*1:main*/ test();
 }
diff --git a/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_top_level_method.dart b/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_top_level_method.dart
index e740ca8..778fae8 100644
--- a/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_top_level_method.dart
+++ b/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_top_level_method.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   /*1:main*/ test();
 }
diff --git a/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_top_level_method_from_async.dart b/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_top_level_method_from_async.dart
index 5b315c6..ff81e33 100644
--- a/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_top_level_method_from_async.dart
+++ b/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_top_level_method_from_async.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   test1();
 }
diff --git a/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_try_catch.dart b/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_try_catch.dart
index 59ff684..107681e 100644
--- a/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_try_catch.dart
+++ b/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_try_catch.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   /*1:main*/ test();
 }
diff --git a/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_try_finally.dart b/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_try_finally.dart
index c802027..6277450 100644
--- a/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_try_finally.dart
+++ b/tests/compiler/dart2js/sourcemaps/stacktrace/throw_in_try_finally.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   /*1:main*/ test();
 }
diff --git a/tests/compiler/dart2js/sourcemaps/stacktrace_test.dart b/tests/compiler/dart2js/sourcemaps/stacktrace_test.dart
index b38553d..6006fb4 100644
--- a/tests/compiler/dart2js/sourcemaps/stacktrace_test.dart
+++ b/tests/compiler/dart2js/sourcemaps/stacktrace_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:async';
 import 'dart:io';
 
diff --git a/tests/compiler/dart2js/sourcemaps/stepping/print.dart b/tests/compiler/dart2js/sourcemaps/stepping/print.dart
index 934bbc9..84d3cee 100644
--- a/tests/compiler/dart2js/sourcemaps/stepping/print.dart
+++ b/tests/compiler/dart2js/sourcemaps/stepping/print.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   /*bl*/
   /*s:1*/ print("Hello, World!");
diff --git a/tests/compiler/dart2js/sourcemaps/stepping/print_class_fields.dart b/tests/compiler/dart2js/sourcemaps/stepping/print_class_fields.dart
index dec796a..9fec4d5 100644
--- a/tests/compiler/dart2js/sourcemaps/stepping/print_class_fields.dart
+++ b/tests/compiler/dart2js/sourcemaps/stepping/print_class_fields.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /*Debugger:stepOver*/
 main() {
   /*bl*/
diff --git a/tests/compiler/dart2js/sourcemaps/stepping/print_top_level_invoke.dart b/tests/compiler/dart2js/sourcemaps/stepping/print_top_level_invoke.dart
index 147fa73..affce87 100644
--- a/tests/compiler/dart2js/sourcemaps/stepping/print_top_level_invoke.dart
+++ b/tests/compiler/dart2js/sourcemaps/stepping/print_top_level_invoke.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   print(/*bc:1*/ foo());
 }
diff --git a/tests/compiler/dart2js/sourcemaps/stepping/top_level_invoke.dart b/tests/compiler/dart2js/sourcemaps/stepping/top_level_invoke.dart
index 7108d8e..a336da4 100644
--- a/tests/compiler/dart2js/sourcemaps/stepping/top_level_invoke.dart
+++ b/tests/compiler/dart2js/sourcemaps/stepping/top_level_invoke.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   /*bl*/
   /*s:1*/ foo();
diff --git a/tests/compiler/dart2js/sourcemaps/stepping_test.dart b/tests/compiler/dart2js/sourcemaps/stepping_test.dart
index e1688e1..311d462 100644
--- a/tests/compiler/dart2js/sourcemaps/stepping_test.dart
+++ b/tests/compiler/dart2js/sourcemaps/stepping_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:async';
 import 'dart:io';
 
diff --git a/tests/compiler/dart2js/sourcemaps/test_files/deferred_validator_test_file.dart b/tests/compiler/dart2js/sourcemaps/test_files/deferred_validator_test_file.dart
index 7a0202e..3740e93 100644
--- a/tests/compiler/dart2js/sourcemaps/test_files/deferred_validator_test_file.dart
+++ b/tests/compiler/dart2js/sourcemaps/test_files/deferred_validator_test_file.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'deferred_validator_test_lib.dart' deferred as def;
 
 void main() {
diff --git a/tests/compiler/dart2js/sourcemaps/test_files/deferred_validator_test_lib.dart b/tests/compiler/dart2js/sourcemaps/test_files/deferred_validator_test_lib.dart
index 9ce7323..6b2dd89 100644
--- a/tests/compiler/dart2js/sourcemaps/test_files/deferred_validator_test_lib.dart
+++ b/tests/compiler/dart2js/sourcemaps/test_files/deferred_validator_test_lib.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class HelloClass {
   void printHello() {
     () {
diff --git a/tests/compiler/dart2js/sourcemaps/test_files/validator_test_file.dart b/tests/compiler/dart2js/sourcemaps/test_files/validator_test_file.dart
index 4df2443..8dfd626 100644
--- a/tests/compiler/dart2js/sourcemaps/test_files/validator_test_file.dart
+++ b/tests/compiler/dart2js/sourcemaps/test_files/validator_test_file.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class HelloClass {
   void printHello() {
     () {
diff --git a/tests/compiler/dart2js/sourcemaps/tools/diff_view.dart b/tests/compiler/dart2js/sourcemaps/tools/diff_view.dart
index 945604cd..9f68323 100644
--- a/tests/compiler/dart2js/sourcemaps/tools/diff_view.dart
+++ b/tests/compiler/dart2js/sourcemaps/tools/diff_view.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library sourcemap.diff_view;
 
 import 'dart:async';
diff --git a/tests/compiler/dart2js/sourcemaps/tools/load.dart b/tests/compiler/dart2js/sourcemaps/tools/load.dart
index a5acb30..bc8a460 100644
--- a/tests/compiler/dart2js/sourcemaps/tools/load.dart
+++ b/tests/compiler/dart2js/sourcemaps/tools/load.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Loads a source map file and outputs a human-readable version of it.
 
 library load;
diff --git a/tests/compiler/dart2js/sourcemaps/tools/save.dart b/tests/compiler/dart2js/sourcemaps/tools/save.dart
index be09f20..ac860f4 100644
--- a/tests/compiler/dart2js/sourcemaps/tools/save.dart
+++ b/tests/compiler/dart2js/sourcemaps/tools/save.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Loads a human-readable source map and outputs the source map file for it.
 
 library save;
diff --git a/tests/compiler/dart2js/sourcemaps/tools/source_mapping_test_viewer.dart b/tests/compiler/dart2js/sourcemaps/tools/source_mapping_test_viewer.dart
index 5d617fe..903a260 100644
--- a/tests/compiler/dart2js/sourcemaps/tools/source_mapping_test_viewer.dart
+++ b/tests/compiler/dart2js/sourcemaps/tools/source_mapping_test_viewer.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Visualization of source mappings generated and tested in
 /// 'source_mapping_test.dart'.
 
diff --git a/tests/compiler/dart2js/sourcemaps/tools/source_mapping_tester.dart b/tests/compiler/dart2js/sourcemaps/tools/source_mapping_tester.dart
index 9b49361..7041370 100644
--- a/tests/compiler/dart2js/sourcemaps/tools/source_mapping_tester.dart
+++ b/tests/compiler/dart2js/sourcemaps/tools/source_mapping_tester.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:async';
 import 'dart:io';
 import 'package:_fe_analyzer_shared/src/util/filenames.dart';
diff --git a/tests/compiler/dart2js/sourcemaps/tools/sourcemap_visualizer.dart b/tests/compiler/dart2js/sourcemaps/tools/sourcemap_visualizer.dart
index b4761af..7919e58 100644
--- a/tests/compiler/dart2js/sourcemaps/tools/sourcemap_visualizer.dart
+++ b/tests/compiler/dart2js/sourcemaps/tools/sourcemap_visualizer.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Tool for visualizing the source mapped parts of a generated JS file.
 
 import 'dart:convert';
diff --git a/tests/compiler/dart2js/sourcemaps/tools/translate_dart2js_stacktrace.dart b/tests/compiler/dart2js/sourcemaps/tools/translate_dart2js_stacktrace.dart
index 3ed514e..c54f9a3 100644
--- a/tests/compiler/dart2js/sourcemaps/tools/translate_dart2js_stacktrace.dart
+++ b/tests/compiler/dart2js/sourcemaps/tools/translate_dart2js_stacktrace.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:io';
 import 'package:args/args.dart';
 import 'package:http/http.dart' as http;
diff --git a/tests/compiler/dart2js/static_type/data/assert.dart b/tests/compiler/dart2js/static_type/data/assert.dart
index 54f2a34..39ecf52 100644
--- a/tests/compiler/dart2js/static_type/data/assert.dart
+++ b/tests/compiler/dart2js/static_type/data/assert.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class Class {
   Class next;
 }
diff --git a/tests/compiler/dart2js/static_type/data/assert_ea.dart b/tests/compiler/dart2js/static_type/data/assert_ea.dart
index c28215d..e178bbc 100644
--- a/tests/compiler/dart2js/static_type/data/assert_ea.dart
+++ b/tests/compiler/dart2js/static_type/data/assert_ea.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class Class {
   Class next;
 }
diff --git a/tests/compiler/dart2js/static_type/data/cascade.dart b/tests/compiler/dart2js/static_type/data/cascade.dart
index 4f2f6a5..2b06eb3 100644
--- a/tests/compiler/dart2js/static_type/data/cascade.dart
+++ b/tests/compiler/dart2js/static_type/data/cascade.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   promotedCascade(null);
 }
diff --git a/tests/compiler/dart2js/static_type/data/closure.dart b/tests/compiler/dart2js/static_type/data/closure.dart
index f24f209..9c3eff8 100644
--- a/tests/compiler/dart2js/static_type/data/closure.dart
+++ b/tests/compiler/dart2js/static_type/data/closure.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class Class {
   Class next;
 }
diff --git a/tests/compiler/dart2js/static_type/data/do.dart b/tests/compiler/dart2js/static_type/data/do.dart
index 0d0952b..072fb39 100644
--- a/tests/compiler/dart2js/static_type/data/do.dart
+++ b/tests/compiler/dart2js/static_type/data/do.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class Class {
   Class next;
 }
diff --git a/tests/compiler/dart2js/static_type/data/effectively_final.dart b/tests/compiler/dart2js/static_type/data/effectively_final.dart
index a50cdaf..1dde98e 100644
--- a/tests/compiler/dart2js/static_type/data/effectively_final.dart
+++ b/tests/compiler/dart2js/static_type/data/effectively_final.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   effectivelyFinalList();
   notEffectivelyFinalList();
diff --git a/tests/compiler/dart2js/static_type/data/for.dart b/tests/compiler/dart2js/static_type/data/for.dart
index 3d4bb82..1128ac9 100644
--- a/tests/compiler/dart2js/static_type/data/for.dart
+++ b/tests/compiler/dart2js/static_type/data/for.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class Class {
   Class next;
 }
diff --git a/tests/compiler/dart2js/static_type/data/for_in.dart b/tests/compiler/dart2js/static_type/data/for_in.dart
index a97c74b..c8072cc 100644
--- a/tests/compiler/dart2js/static_type/data/for_in.dart
+++ b/tests/compiler/dart2js/static_type/data/for_in.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class Class {
   Iterable<Class> next;
 }
diff --git a/tests/compiler/dart2js/static_type/data/generic_method.dart b/tests/compiler/dart2js/static_type/data/generic_method.dart
index 8026b3c..4474f55 100644
--- a/tests/compiler/dart2js/static_type/data/generic_method.dart
+++ b/tests/compiler/dart2js/static_type/data/generic_method.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class Class1 {
   T method<T>(T t) => t;
 }
diff --git a/tests/compiler/dart2js/static_type/data/if.dart b/tests/compiler/dart2js/static_type/data/if.dart
index 20c3f9b..d3bd63f 100644
--- a/tests/compiler/dart2js/static_type/data/if.dart
+++ b/tests/compiler/dart2js/static_type/data/if.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class Class {
   Class next;
 }
diff --git a/tests/compiler/dart2js/static_type/data/null.dart b/tests/compiler/dart2js/static_type/data/null.dart
index dcbe522..5fd9622 100644
--- a/tests/compiler/dart2js/static_type/data/null.dart
+++ b/tests/compiler/dart2js/static_type/data/null.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class Class {
   Class next;
 }
diff --git a/tests/compiler/dart2js/static_type/data/null_access.dart b/tests/compiler/dart2js/static_type/data/null_access.dart
index c21b149..b1cdab4 100644
--- a/tests/compiler/dart2js/static_type/data/null_access.dart
+++ b/tests/compiler/dart2js/static_type/data/null_access.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   test1();
   test2();
diff --git a/tests/compiler/dart2js/static_type/data/switch.dart b/tests/compiler/dart2js/static_type/data/switch.dart
index 7b88d11..d25b1a4 100644
--- a/tests/compiler/dart2js/static_type/data/switch.dart
+++ b/tests/compiler/dart2js/static_type/data/switch.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class Class {
   Class next;
 }
diff --git a/tests/compiler/dart2js/static_type/data/try_catch.dart b/tests/compiler/dart2js/static_type/data/try_catch.dart
index b4680d7..06992f9 100644
--- a/tests/compiler/dart2js/static_type/data/try_catch.dart
+++ b/tests/compiler/dart2js/static_type/data/try_catch.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class Class {
   Iterable<Class> next;
 }
diff --git a/tests/compiler/dart2js/static_type/data/try_finally.dart b/tests/compiler/dart2js/static_type/data/try_finally.dart
index 62d0822..98ede49 100644
--- a/tests/compiler/dart2js/static_type/data/try_finally.dart
+++ b/tests/compiler/dart2js/static_type/data/try_finally.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class Class {
   Iterable<Class> next;
 }
diff --git a/tests/compiler/dart2js/static_type/data/while.dart b/tests/compiler/dart2js/static_type/data/while.dart
index b21dee0..671d6da 100644
--- a/tests/compiler/dart2js/static_type/data/while.dart
+++ b/tests/compiler/dart2js/static_type/data/while.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class Class {
   Class next;
 }
diff --git a/tests/compiler/dart2js/static_type/show.dart b/tests/compiler/dart2js/static_type/show.dart
index 59f85ee..a9e34bd 100644
--- a/tests/compiler/dart2js/static_type/show.dart
+++ b/tests/compiler/dart2js/static_type/show.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Helper program that shows the static type data on a dart program.
 
 import 'package:args/args.dart';
diff --git a/tests/compiler/dart2js/static_type/static_type_test.dart b/tests/compiler/dart2js/static_type/static_type_test.dart
index 18ab90c..250f450 100644
--- a/tests/compiler/dart2js/static_type/static_type_test.dart
+++ b/tests/compiler/dart2js/static_type/static_type_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:io';
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/compiler.dart';
diff --git a/tests/compiler/dart2js/static_type/type_promotion_data/bottom.dart b/tests/compiler/dart2js/static_type/type_promotion_data/bottom.dart
index 1c94829..3388fab 100644
--- a/tests/compiler/dart2js/static_type/type_promotion_data/bottom.dart
+++ b/tests/compiler/dart2js/static_type/type_promotion_data/bottom.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class A {}
 
 main() {
diff --git a/tests/compiler/dart2js/static_type/type_promotion_data/closure.dart b/tests/compiler/dart2js/static_type/type_promotion_data/closure.dart
index f50db9d..9fc2835 100644
--- a/tests/compiler/dart2js/static_type/type_promotion_data/closure.dart
+++ b/tests/compiler/dart2js/static_type/type_promotion_data/closure.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   closure6(null);
   closure7();
diff --git a/tests/compiler/dart2js/static_type/type_promotion_data/equals.dart b/tests/compiler/dart2js/static_type/type_promotion_data/equals.dart
index 17df94a..cd6ec3c 100644
--- a/tests/compiler/dart2js/static_type/type_promotion_data/equals.dart
+++ b/tests/compiler/dart2js/static_type/type_promotion_data/equals.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 bool equals(e1, e2, bool unordered) {
   if (/*{}*/ e1 is Set) {
     return /*{e1:[{true:Set<dynamic>}|Set<dynamic>]}*/
diff --git a/tests/compiler/dart2js/static_type/type_promotion_data/if.dart b/tests/compiler/dart2js/static_type/type_promotion_data/if.dart
index 5c54faa..b12571b 100644
--- a/tests/compiler/dart2js/static_type/type_promotion_data/if.dart
+++ b/tests/compiler/dart2js/static_type/type_promotion_data/if.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class A {}
 
 class B {}
diff --git a/tests/compiler/dart2js/static_type/type_promotion_data/null.dart b/tests/compiler/dart2js/static_type/type_promotion_data/null.dart
index 02a3697..40d6e7a 100644
--- a/tests/compiler/dart2js/static_type/type_promotion_data/null.dart
+++ b/tests/compiler/dart2js/static_type/type_promotion_data/null.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   ifNull(null);
   ifNullElse(null);
diff --git a/tests/compiler/dart2js/static_type/type_promotion_data/sequence.dart b/tests/compiler/dart2js/static_type/type_promotion_data/sequence.dart
index 71cc004..ebb2549 100644
--- a/tests/compiler/dart2js/static_type/type_promotion_data/sequence.dart
+++ b/tests/compiler/dart2js/static_type/type_promotion_data/sequence.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class A {}
 
 class B {}
diff --git a/tests/compiler/dart2js/static_type/type_promotion_test.dart b/tests/compiler/dart2js/static_type/type_promotion_test.dart
index fe2b259..06c6bf3 100644
--- a/tests/compiler/dart2js/static_type/type_promotion_test.dart
+++ b/tests/compiler/dart2js/static_type/type_promotion_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:io';
 import 'package:async_helper/async_helper.dart';
 import 'package:compiler/src/compiler.dart';
diff --git a/tests/compiler/dart2js_extra/10216a_test.dart b/tests/compiler/dart2js_extra/10216a_test.dart
index 5032123..f3d151cb 100644
--- a/tests/compiler/dart2js_extra/10216a_test.dart
+++ b/tests/compiler/dart2js_extra/10216a_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 // Tests codegen of methods reached only via mixin.
diff --git a/tests/compiler/dart2js_extra/10216b_test.dart b/tests/compiler/dart2js_extra/10216b_test.dart
index a2ad8bb..cf8031b 100644
--- a/tests/compiler/dart2js_extra/10216b_test.dart
+++ b/tests/compiler/dart2js_extra/10216b_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 // Tests codegen of methods reached only via mixin.
diff --git a/tests/compiler/dart2js_extra/11673_test.dart b/tests/compiler/dart2js_extra/11673_test.dart
index 47aa416..3be867a 100644
--- a/tests/compiler/dart2js_extra/11673_test.dart
+++ b/tests/compiler/dart2js_extra/11673_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 // Tests codegen of methods reached only via interface implemented by mixin
diff --git a/tests/compiler/dart2js_extra/12320_test.dart b/tests/compiler/dart2js_extra/12320_test.dart
index d47c05a..9be0b41 100644
--- a/tests/compiler/dart2js_extra/12320_test.dart
+++ b/tests/compiler/dart2js_extra/12320_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 // Regression test for Issue 12320, Issue 12363.
diff --git a/tests/compiler/dart2js_extra/12_test.dart b/tests/compiler/dart2js_extra/12_test.dart
index 80a758a..069d26c 100644
--- a/tests/compiler/dart2js_extra/12_test.dart
+++ b/tests/compiler/dart2js_extra/12_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 void main() {
   print(3 + 4 + 5);
 }
diff --git a/tests/compiler/dart2js_extra/16400_test.dart b/tests/compiler/dart2js_extra/16400_test.dart
index 7902f07..64b820b 100644
--- a/tests/compiler/dart2js_extra/16400_test.dart
+++ b/tests/compiler/dart2js_extra/16400_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   L:
   {
diff --git a/tests/compiler/dart2js_extra/16407_test.dart b/tests/compiler/dart2js_extra/16407_test.dart
index aff1ba3..a84b9a4 100644
--- a/tests/compiler/dart2js_extra/16407_test.dart
+++ b/tests/compiler/dart2js_extra/16407_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 // Regression test for Issue 16407.
diff --git a/tests/compiler/dart2js_extra/16967_test.dart b/tests/compiler/dart2js_extra/16967_test.dart
index 26d9df7..6185102 100644
--- a/tests/compiler/dart2js_extra/16967_test.dart
+++ b/tests/compiler/dart2js_extra/16967_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 // Regression test for http://dartbug.com/16967
diff --git a/tests/compiler/dart2js_extra/17094_test.dart b/tests/compiler/dart2js_extra/17094_test.dart
index 41fba87..66fe00e 100644
--- a/tests/compiler/dart2js_extra/17094_test.dart
+++ b/tests/compiler/dart2js_extra/17094_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 //  Interpolation effect analysis test.
diff --git a/tests/compiler/dart2js_extra/17645_test.dart b/tests/compiler/dart2js_extra/17645_test.dart
index 7469a6c..15f7e15 100644
--- a/tests/compiler/dart2js_extra/17645_test.dart
+++ b/tests/compiler/dart2js_extra/17645_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 //  Regression test for issue 17645.
diff --git a/tests/compiler/dart2js_extra/17856_test.dart b/tests/compiler/dart2js_extra/17856_test.dart
index aa5a243..4b0f552 100644
--- a/tests/compiler/dart2js_extra/17856_test.dart
+++ b/tests/compiler/dart2js_extra/17856_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 // Regression test for Issue 17856.
diff --git a/tests/compiler/dart2js_extra/18383_test.dart b/tests/compiler/dart2js_extra/18383_test.dart
index e15526b..a059dc4 100644
--- a/tests/compiler/dart2js_extra/18383_test.dart
+++ b/tests/compiler/dart2js_extra/18383_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for http://dartbug.com/18383
 
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js_extra/19191_test.dart b/tests/compiler/dart2js_extra/19191_test.dart
index cf2bd24..f986781 100644
--- a/tests/compiler/dart2js_extra/19191_test.dart
+++ b/tests/compiler/dart2js_extra/19191_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for http://dartbug.com/19191
 
 class A {
diff --git a/tests/compiler/dart2js_extra/21351_test.dart b/tests/compiler/dart2js_extra/21351_test.dart
index f3c0e53..e9538b6 100644
--- a/tests/compiler/dart2js_extra/21351_test.dart
+++ b/tests/compiler/dart2js_extra/21351_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class A {
   bool _flag = false;
   bool get flag => _flag;
diff --git a/tests/compiler/dart2js_extra/21579_test.dart b/tests/compiler/dart2js_extra/21579_test.dart
index a7b3079..13869b7 100644
--- a/tests/compiler/dart2js_extra/21579_test.dart
+++ b/tests/compiler/dart2js_extra/21579_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for http://dartbug.com/21579
 //
 // Fails for --trust-type-annotations:
diff --git a/tests/compiler/dart2js_extra/22487_test.dart b/tests/compiler/dart2js_extra/22487_test.dart
index 4bf5426..8e60015 100644
--- a/tests/compiler/dart2js_extra/22487_test.dart
+++ b/tests/compiler/dart2js_extra/22487_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for http://dartbug.com/22487
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/22776_test.dart b/tests/compiler/dart2js_extra/22776_test.dart
index 135f505..62d7f8a 100644
--- a/tests/compiler/dart2js_extra/22776_test.dart
+++ b/tests/compiler/dart2js_extra/22776_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for http://dartbug.com/22776
 
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js_extra/22868_test.dart b/tests/compiler/dart2js_extra/22868_test.dart
index 71907def..62b4837 100644
--- a/tests/compiler/dart2js_extra/22868_test.dart
+++ b/tests/compiler/dart2js_extra/22868_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for http://dartbug.com/22868 and http://dartbug.com/22895
 // Ensure that the closure tracer properly handles await.
 
diff --git a/tests/compiler/dart2js_extra/22917_test.dart b/tests/compiler/dart2js_extra/22917_test.dart
index 35a629a..0619095 100644
--- a/tests/compiler/dart2js_extra/22917_test.dart
+++ b/tests/compiler/dart2js_extra/22917_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for http://dartbug.com/22917
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/23404_test.dart b/tests/compiler/dart2js_extra/23404_test.dart
index 699e63d..a3080c1 100644
--- a/tests/compiler/dart2js_extra/23404_test.dart
+++ b/tests/compiler/dart2js_extra/23404_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for http://dartbug.com/23404
 //
 // Dart2js crashed when the global metadata had escaped characters. That
diff --git a/tests/compiler/dart2js_extra/23432_test.dart b/tests/compiler/dart2js_extra/23432_test.dart
index bbb32ff..e8bdff6 100644
--- a/tests/compiler/dart2js_extra/23432_test.dart
+++ b/tests/compiler/dart2js_extra/23432_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for http://dartbug.com/23432.  Test that the receiver of a
 // NoSuchMethodError is correct on an intercepted method.  The bug (issue 23432)
 // is that the interceptor is captured instead of the receiver.
diff --git a/tests/compiler/dart2js_extra/23486_helper.dart b/tests/compiler/dart2js_extra/23486_helper.dart
index c15d826..7822865 100644
--- a/tests/compiler/dart2js_extra/23486_helper.dart
+++ b/tests/compiler/dart2js_extra/23486_helper.dart
@@ -2,4 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 int x = 1;
diff --git a/tests/compiler/dart2js_extra/23486_test.dart b/tests/compiler/dart2js_extra/23486_test.dart
index 1d41e26..cff32df 100644
--- a/tests/compiler/dart2js_extra/23486_test.dart
+++ b/tests/compiler/dart2js_extra/23486_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for http://dartbug.com/23486
 //
 // Dart2js used to crash when using `super` and prefixes inside parenthesized
diff --git a/tests/compiler/dart2js_extra/23804_test.dart b/tests/compiler/dart2js_extra/23804_test.dart
index 32bb00b..843af23 100644
--- a/tests/compiler/dart2js_extra/23804_test.dart
+++ b/tests/compiler/dart2js_extra/23804_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for http://dartbug.com/23804
 //
 // Inference incorrectly assumed that `any` and `every` didn't escape the values
diff --git a/tests/compiler/dart2js_extra/23828_test.dart b/tests/compiler/dart2js_extra/23828_test.dart
index e2fbf7d..eb5f0c2 100644
--- a/tests/compiler/dart2js_extra/23828_test.dart
+++ b/tests/compiler/dart2js_extra/23828_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for http://dartbug.com/23828
 // Used to fail when methods contain a name starting with `get`
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/26243_test.dart b/tests/compiler/dart2js_extra/26243_test.dart
index 7f09cf3..d637c03 100644
--- a/tests/compiler/dart2js_extra/26243_test.dart
+++ b/tests/compiler/dart2js_extra/26243_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 var trace = [];
diff --git a/tests/compiler/dart2js_extra/27198_test.dart b/tests/compiler/dart2js_extra/27198_test.dart
index 721476e..bab3d07 100644
--- a/tests/compiler/dart2js_extra/27198_test.dart
+++ b/tests/compiler/dart2js_extra/27198_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // From co19/Language/Types/Parameterized_Types/Actual_Type_of_Declaration/actual_type_t05.dart
 import "package:expect/expect.dart";
 
diff --git a/tests/compiler/dart2js_extra/27199_test.dart b/tests/compiler/dart2js_extra/27199_test.dart
index b2d2fd5..8ac518d 100644
--- a/tests/compiler/dart2js_extra/27199_test.dart
+++ b/tests/compiler/dart2js_extra/27199_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for http://dartbug.com/27199 in --checked mode.
 
 // Typedefs must be unaliased at some point before codegen to have the correct
diff --git a/tests/compiler/dart2js_extra/27323_test.dart b/tests/compiler/dart2js_extra/27323_test.dart
index c8439ec..7186e29 100644
--- a/tests/compiler/dart2js_extra/27323_test.dart
+++ b/tests/compiler/dart2js_extra/27323_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/27354_test.dart b/tests/compiler/dart2js_extra/27354_test.dart
index 942dc49..c64a621 100644
--- a/tests/compiler/dart2js_extra/27354_test.dart
+++ b/tests/compiler/dart2js_extra/27354_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for Issue 27354.
 
 int total = 1;
diff --git a/tests/compiler/dart2js_extra/28749_test.dart b/tests/compiler/dart2js_extra/28749_test.dart
index 0735aa7..8b151d8 100644
--- a/tests/compiler/dart2js_extra/28749_test.dart
+++ b/tests/compiler/dart2js_extra/28749_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 // Regression test for http://dartbug.com/28749.
diff --git a/tests/compiler/dart2js_extra/28919_test.dart b/tests/compiler/dart2js_extra/28919_test.dart
index e9b7106..e95f996 100644
--- a/tests/compiler/dart2js_extra/28919_test.dart
+++ b/tests/compiler/dart2js_extra/28919_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for http://dartbug.com/28919.
 //
 // This would crash at runtime because the type of closure parameter 'x' was
diff --git a/tests/compiler/dart2js_extra/29130_test.dart b/tests/compiler/dart2js_extra/29130_test.dart
index e4daa34..76f91c7 100644
--- a/tests/compiler/dart2js_extra/29130_test.dart
+++ b/tests/compiler/dart2js_extra/29130_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// This is a regression test from issue #29310. The global type-inferrer does
 /// tracing of closures including allocated classes that implement a `call`
 /// method. We incorrectly considered also classes with invoked factory
diff --git a/tests/compiler/dart2js_extra/31803_test.dart b/tests/compiler/dart2js_extra/31803_test.dart
index 03c1f7c..88403e3 100644
--- a/tests/compiler/dart2js_extra/31803_test.dart
+++ b/tests/compiler/dart2js_extra/31803_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 // Tests that the compiler doesn't crash on an annotation with fields
diff --git a/tests/compiler/dart2js_extra/32770a_test.dart b/tests/compiler/dart2js_extra/32770a_test.dart
index 24aeb60..adc3bd6 100644
--- a/tests/compiler/dart2js_extra/32770a_test.dart
+++ b/tests/compiler/dart2js_extra/32770a_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 // Regression test for issue 32770.
diff --git a/tests/compiler/dart2js_extra/32770b_test.dart b/tests/compiler/dart2js_extra/32770b_test.dart
index f58bcf5..beac842 100644
--- a/tests/compiler/dart2js_extra/32770b_test.dart
+++ b/tests/compiler/dart2js_extra/32770b_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 // Regression test for issue 32770.
diff --git a/tests/compiler/dart2js_extra/32770c_test.dart b/tests/compiler/dart2js_extra/32770c_test.dart
index 15ac166..fefd82b 100644
--- a/tests/compiler/dart2js_extra/32770c_test.dart
+++ b/tests/compiler/dart2js_extra/32770c_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 // Regression test for issue 32770.
diff --git a/tests/compiler/dart2js_extra/32774_test.dart b/tests/compiler/dart2js_extra/32774_test.dart
index fbf3199..a117d86 100644
--- a/tests/compiler/dart2js_extra/32774_test.dart
+++ b/tests/compiler/dart2js_extra/32774_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/32828_test.dart b/tests/compiler/dart2js_extra/32828_test.dart
index c56a904..7e0b22b 100644
--- a/tests/compiler/dart2js_extra/32828_test.dart
+++ b/tests/compiler/dart2js_extra/32828_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 class A {
diff --git a/tests/compiler/dart2js_extra/32853_test.dart b/tests/compiler/dart2js_extra/32853_test.dart
index ccf8dab..f90fb71 100644
--- a/tests/compiler/dart2js_extra/32853_test.dart
+++ b/tests/compiler/dart2js_extra/32853_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 // Regression test for issue 32853.
diff --git a/tests/compiler/dart2js_extra/32928_test.dart b/tests/compiler/dart2js_extra/32928_test.dart
index 549909b..ef392df 100644
--- a/tests/compiler/dart2js_extra/32928_test.dart
+++ b/tests/compiler/dart2js_extra/32928_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 /// Regression test for issue 32928.
diff --git a/tests/compiler/dart2js_extra/32969_test.dart b/tests/compiler/dart2js_extra/32969_test.dart
index 8599b3f..8f1e892 100644
--- a/tests/compiler/dart2js_extra/32969_test.dart
+++ b/tests/compiler/dart2js_extra/32969_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 @JS()
diff --git a/tests/compiler/dart2js_extra/32997a_lib.dart b/tests/compiler/dart2js_extra/32997a_lib.dart
index 54e4f54..5c7566d 100644
--- a/tests/compiler/dart2js_extra/32997a_lib.dart
+++ b/tests/compiler/dart2js_extra/32997a_lib.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 T getFoo<T>(T v) => v;
 
 typedef dynamic G<T>(T v);
diff --git a/tests/compiler/dart2js_extra/32997a_test.dart b/tests/compiler/dart2js_extra/32997a_test.dart
index 4e2b00a..6a0ec97 100644
--- a/tests/compiler/dart2js_extra/32997a_test.dart
+++ b/tests/compiler/dart2js_extra/32997a_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import '32997a_lib.dart' deferred as b;
diff --git a/tests/compiler/dart2js_extra/32997b_lib.dart b/tests/compiler/dart2js_extra/32997b_lib.dart
index 62eee11..4d532d0 100644
--- a/tests/compiler/dart2js_extra/32997b_lib.dart
+++ b/tests/compiler/dart2js_extra/32997b_lib.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 T getFoo<T>(T v) => v;
 
 typedef dynamic G<T>(T v);
diff --git a/tests/compiler/dart2js_extra/32997b_test.dart b/tests/compiler/dart2js_extra/32997b_test.dart
index 7783285..3041932 100644
--- a/tests/compiler/dart2js_extra/32997b_test.dart
+++ b/tests/compiler/dart2js_extra/32997b_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import '32997b_lib.dart' deferred as b; //# 01: compile-time error
diff --git a/tests/compiler/dart2js_extra/33296_test.dart b/tests/compiler/dart2js_extra/33296_test.dart
index 7d06619..0b8e814 100644
--- a/tests/compiler/dart2js_extra/33296_test.dart
+++ b/tests/compiler/dart2js_extra/33296_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:js';
 import 'dart:html'; // TODO(33316): Remove.
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js_extra/33572_test.dart b/tests/compiler/dart2js_extra/33572_test.dart
index 2721bf7..4ae5b51 100644
--- a/tests/compiler/dart2js_extra/33572_test.dart
+++ b/tests/compiler/dart2js_extra/33572_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for issue 32853.
 
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js_extra/33_test.dart b/tests/compiler/dart2js_extra/33_test.dart
index 0d55209..286ff35 100644
--- a/tests/compiler/dart2js_extra/33_test.dart
+++ b/tests/compiler/dart2js_extra/33_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 void main() {
   print(3 + 4 * 10 - 8 / 2 - 19 ~/ 3);
 }
diff --git a/tests/compiler/dart2js_extra/34156_test.dart b/tests/compiler/dart2js_extra/34156_test.dart
index f4dbb81..2d216aa 100644
--- a/tests/compiler/dart2js_extra/34156_test.dart
+++ b/tests/compiler/dart2js_extra/34156_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 @pragma('dart2js:tryInline')
diff --git a/tests/compiler/dart2js_extra/34701_test.dart b/tests/compiler/dart2js_extra/34701_test.dart
index 708024f..10f83ee 100644
--- a/tests/compiler/dart2js_extra/34701_test.dart
+++ b/tests/compiler/dart2js_extra/34701_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--omit-implicit-checks
 
 /// Regression test for issue 34701.
diff --git a/tests/compiler/dart2js_extra/35341_test.dart b/tests/compiler/dart2js_extra/35341_test.dart
index 80310f0..ce527af 100644
--- a/tests/compiler/dart2js_extra/35341_test.dart
+++ b/tests/compiler/dart2js_extra/35341_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for issue 35341.
 
 import "dart:async";
diff --git a/tests/compiler/dart2js_extra/35356_test.dart b/tests/compiler/dart2js_extra/35356_test.dart
index 13dc082..a6b768b 100644
--- a/tests/compiler/dart2js_extra/35356_test.dart
+++ b/tests/compiler/dart2js_extra/35356_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   bool b = true & true;
   b |= true;
diff --git a/tests/compiler/dart2js_extra/35853_test.dart b/tests/compiler/dart2js_extra/35853_test.dart
index 3fe033ac..e3cebb6 100644
--- a/tests/compiler/dart2js_extra/35853_test.dart
+++ b/tests/compiler/dart2js_extra/35853_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 typedef F1 = int Function(int);
diff --git a/tests/compiler/dart2js_extra/35965a_test.dart b/tests/compiler/dart2js_extra/35965a_test.dart
index 56a3d7a..332aa20 100644
--- a/tests/compiler/dart2js_extra/35965a_test.dart
+++ b/tests/compiler/dart2js_extra/35965a_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for issue 35965.
 //
 // The combination of generator bodies on mixin methods with super-calls caused
diff --git a/tests/compiler/dart2js_extra/37494_test.dart b/tests/compiler/dart2js_extra/37494_test.dart
index d2d8283..a0abceb 100644
--- a/tests/compiler/dart2js_extra/37494_test.dart
+++ b/tests/compiler/dart2js_extra/37494_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for http://dartbug.com/37494
 
 import 'dart:collection';
diff --git a/tests/compiler/dart2js_extra/37576_test.dart b/tests/compiler/dart2js_extra/37576_test.dart
index b243963..4d797e8 100644
--- a/tests/compiler/dart2js_extra/37576_test.dart
+++ b/tests/compiler/dart2js_extra/37576_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:js/js.dart';
 
 @JS('jsFun')
diff --git a/tests/compiler/dart2js_extra/38005_test.dart b/tests/compiler/dart2js_extra/38005_test.dart
index 2789b31..e5a4bb5 100644
--- a/tests/compiler/dart2js_extra/38005_test.dart
+++ b/tests/compiler/dart2js_extra/38005_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class A {}
diff --git a/tests/compiler/dart2js_extra/38949_test.dart b/tests/compiler/dart2js_extra/38949_test.dart
index 4b0ceba..814b004 100644
--- a/tests/compiler/dart2js_extra/38949_test.dart
+++ b/tests/compiler/dart2js_extra/38949_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 abstract class Foo<A, B> {
diff --git a/tests/compiler/dart2js_extra/3_test.dart b/tests/compiler/dart2js_extra/3_test.dart
index 520d8a8..aad263a 100644
--- a/tests/compiler/dart2js_extra/3_test.dart
+++ b/tests/compiler/dart2js_extra/3_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 int main() {
   return 3;
 }
diff --git a/tests/compiler/dart2js_extra/40152a_test.dart b/tests/compiler/dart2js_extra/40152a_test.dart
index 76e0698..68dc8ae 100644
--- a/tests/compiler/dart2js_extra/40152a_test.dart
+++ b/tests/compiler/dart2js_extra/40152a_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Partial regression test for #40152.
 
 import 'package:js/js.dart';
diff --git a/tests/compiler/dart2js_extra/40296_test.dart b/tests/compiler/dart2js_extra/40296_test.dart
index 989b6f7..4e40bcc 100644
--- a/tests/compiler/dart2js_extra/40296_test.dart
+++ b/tests/compiler/dart2js_extra/40296_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 @JS()
 library test;
 
diff --git a/tests/compiler/dart2js_extra/40902_test.dart b/tests/compiler/dart2js_extra/40902_test.dart
index d62c769..e992476 100644
--- a/tests/compiler/dart2js_extra/40902_test.dart
+++ b/tests/compiler/dart2js_extra/40902_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class Foo {
diff --git a/tests/compiler/dart2js_extra/43_test.dart b/tests/compiler/dart2js_extra/43_test.dart
index 2a85bb1..055815e 100644
--- a/tests/compiler/dart2js_extra/43_test.dart
+++ b/tests/compiler/dart2js_extra/43_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 void main() {
   print(3 + 4 * 10);
 }
diff --git a/tests/compiler/dart2js_extra/7_test.dart b/tests/compiler/dart2js_extra/7_test.dart
index 742ca65..48631e0f 100644
--- a/tests/compiler/dart2js_extra/7_test.dart
+++ b/tests/compiler/dart2js_extra/7_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 void main() {
   print(3 + 4);
 }
diff --git a/tests/compiler/dart2js_extra/881_test.dart b/tests/compiler/dart2js_extra/881_test.dart
index 5be849c..04a8f10 100644
--- a/tests/compiler/dart2js_extra/881_test.dart
+++ b/tests/compiler/dart2js_extra/881_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for DartPad issue 881.
 
 @pragma('dart2js:disableFinal')
diff --git a/tests/compiler/dart2js_extra/LayoutTests_fast_mediastream_getusermedia_t01_test.dart b/tests/compiler/dart2js_extra/LayoutTests_fast_mediastream_getusermedia_t01_test.dart
index 3ca943b..31703f8 100644
--- a/tests/compiler/dart2js_extra/LayoutTests_fast_mediastream_getusermedia_t01_test.dart
+++ b/tests/compiler/dart2js_extra/LayoutTests_fast_mediastream_getusermedia_t01_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Test derived from a broken co19 test
 /// (LayoutTests/fast/mediastream/getusermedia_t01.dart). Caused dart2js to
 /// crash.
diff --git a/tests/compiler/dart2js_extra/assert_with_message_test.dart b/tests/compiler/dart2js_extra/assert_with_message_test.dart
index 993ab11..4cda95f 100644
--- a/tests/compiler/dart2js_extra/assert_with_message_test.dart
+++ b/tests/compiler/dart2js_extra/assert_with_message_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 @pragma('dart2js:assumeDynamic')
diff --git a/tests/compiler/dart2js_extra/async_helper.dart b/tests/compiler/dart2js_extra/async_helper.dart
index b7ee2fd..72418f7 100644
--- a/tests/compiler/dart2js_extra/async_helper.dart
+++ b/tests/compiler/dart2js_extra/async_helper.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library async_helper;
 
 /**
diff --git a/tests/compiler/dart2js_extra/async_stacktrace_test.dart b/tests/compiler/dart2js_extra/async_stacktrace_test.dart
index 708706b..1e2733a 100644
--- a/tests/compiler/dart2js_extra/async_stacktrace_test.dart
+++ b/tests/compiler/dart2js_extra/async_stacktrace_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "dart:async";
 
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js_extra/big_allocation_expression_test.dart b/tests/compiler/dart2js_extra/big_allocation_expression_test.dart
index 30653a3..d405a4d 100644
--- a/tests/compiler/dart2js_extra/big_allocation_expression_test.dart
+++ b/tests/compiler/dart2js_extra/big_allocation_expression_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // This program crashes the SSA backend. http://dartbug.com/24635.
 
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js_extra/block_expression_on_field_test.dart b/tests/compiler/dart2js_extra/block_expression_on_field_test.dart
index 7b6449f..7e4f1e4 100644
--- a/tests/compiler/dart2js_extra/block_expression_on_field_test.dart
+++ b/tests/compiler/dart2js_extra/block_expression_on_field_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Regression test for #36864
 ///
 /// Block expressions in top-level fields used to crash the compiler.
diff --git a/tests/compiler/dart2js_extra/boolean_conversion_test.dart b/tests/compiler/dart2js_extra/boolean_conversion_test.dart
index 64cd441..2c51dfc 100644
--- a/tests/compiler/dart2js_extra/boolean_conversion_test.dart
+++ b/tests/compiler/dart2js_extra/boolean_conversion_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--omit-implicit-checks
 
 // Note: --omit-implicit-checks causes Expect.isNull to misbehave, so we use
diff --git a/tests/compiler/dart2js_extra/bound_closure_interceptor_methods_test.dart b/tests/compiler/dart2js_extra/bound_closure_interceptor_methods_test.dart
index f17b647..45c1b78 100644
--- a/tests/compiler/dart2js_extra/bound_closure_interceptor_methods_test.dart
+++ b/tests/compiler/dart2js_extra/bound_closure_interceptor_methods_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class A {
diff --git a/tests/compiler/dart2js_extra/bound_closure_interceptor_type_test.dart b/tests/compiler/dart2js_extra/bound_closure_interceptor_type_test.dart
index 7d4ea10..39271c3 100644
--- a/tests/compiler/dart2js_extra/bound_closure_interceptor_type_test.dart
+++ b/tests/compiler/dart2js_extra/bound_closure_interceptor_type_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 // Test for type checks against tear-off closures generated in different
diff --git a/tests/compiler/dart2js_extra/bounded_type_literal_test.dart b/tests/compiler/dart2js_extra/bounded_type_literal_test.dart
index ad0fbe8..c5683d6 100644
--- a/tests/compiler/dart2js_extra/bounded_type_literal_test.dart
+++ b/tests/compiler/dart2js_extra/bounded_type_literal_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/bounds_check1a_test.dart b/tests/compiler/dart2js_extra/bounds_check1a_test.dart
index b42ca0d..781f088 100644
--- a/tests/compiler/dart2js_extra/bounds_check1a_test.dart
+++ b/tests/compiler/dart2js_extra/bounds_check1a_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/bounds_check1b_test.dart b/tests/compiler/dart2js_extra/bounds_check1b_test.dart
index 8fad189..739449e 100644
--- a/tests/compiler/dart2js_extra/bounds_check1b_test.dart
+++ b/tests/compiler/dart2js_extra/bounds_check1b_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/bounds_check2a_test.dart b/tests/compiler/dart2js_extra/bounds_check2a_test.dart
index 654c71b..f2000f6 100644
--- a/tests/compiler/dart2js_extra/bounds_check2a_test.dart
+++ b/tests/compiler/dart2js_extra/bounds_check2a_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/bounds_check2b_test.dart b/tests/compiler/dart2js_extra/bounds_check2b_test.dart
index 07cd595..373fa7c 100644
--- a/tests/compiler/dart2js_extra/bounds_check2b_test.dart
+++ b/tests/compiler/dart2js_extra/bounds_check2b_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/bounds_check3a_test.dart b/tests/compiler/dart2js_extra/bounds_check3a_test.dart
index 482b8ed..64c9a52 100644
--- a/tests/compiler/dart2js_extra/bounds_check3a_test.dart
+++ b/tests/compiler/dart2js_extra/bounds_check3a_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/bounds_check3b_test.dart b/tests/compiler/dart2js_extra/bounds_check3b_test.dart
index af34397..fba0553 100644
--- a/tests/compiler/dart2js_extra/bounds_check3b_test.dart
+++ b/tests/compiler/dart2js_extra/bounds_check3b_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/bounds_check3c_test.dart b/tests/compiler/dart2js_extra/bounds_check3c_test.dart
index 696afdd..54a5ddb 100644
--- a/tests/compiler/dart2js_extra/bounds_check3c_test.dart
+++ b/tests/compiler/dart2js_extra/bounds_check3c_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 main() {
diff --git a/tests/compiler/dart2js_extra/bounds_check4a_test.dart b/tests/compiler/dart2js_extra/bounds_check4a_test.dart
index 49e8d42..7b8af1d 100644
--- a/tests/compiler/dart2js_extra/bounds_check4a_test.dart
+++ b/tests/compiler/dart2js_extra/bounds_check4a_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/bounds_check4b_test.dart b/tests/compiler/dart2js_extra/bounds_check4b_test.dart
index fdb7863..06d3056 100644
--- a/tests/compiler/dart2js_extra/bounds_check4b_test.dart
+++ b/tests/compiler/dart2js_extra/bounds_check4b_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/bounds_check_test.dart b/tests/compiler/dart2js_extra/bounds_check_test.dart
index 99223c8..50ed0f1 100644
--- a/tests/compiler/dart2js_extra/bounds_check_test.dart
+++ b/tests/compiler/dart2js_extra/bounds_check_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   var a = [0, 1];
   a[-1]; //                         //# 01: runtime error
diff --git a/tests/compiler/dart2js_extra/break_test.dart b/tests/compiler/dart2js_extra/break_test.dart
index 830fe73..8758d05 100644
--- a/tests/compiler/dart2js_extra/break_test.dart
+++ b/tests/compiler/dart2js_extra/break_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 break1(int x, int y, int ew, int ez) {
diff --git a/tests/compiler/dart2js_extra/call_is_function_test.dart b/tests/compiler/dart2js_extra/call_is_function_test.dart
index 8907cad..d824b04 100644
--- a/tests/compiler/dart2js_extra/call_is_function_test.dart
+++ b/tests/compiler/dart2js_extra/call_is_function_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 class A {
diff --git a/tests/compiler/dart2js_extra/call_signature_test.dart b/tests/compiler/dart2js_extra/call_signature_test.dart
index 20978d5..014d136 100644
--- a/tests/compiler/dart2js_extra/call_signature_test.dart
+++ b/tests/compiler/dart2js_extra/call_signature_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test. Crash occurred when trying to create a signature function
 // for the non-live 'call' method on the live class 'A'.
 
diff --git a/tests/compiler/dart2js_extra/call_uninlined_test.dart b/tests/compiler/dart2js_extra/call_uninlined_test.dart
index ab0e750..3cdeaa7 100644
--- a/tests/compiler/dart2js_extra/call_uninlined_test.dart
+++ b/tests/compiler/dart2js_extra/call_uninlined_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 class H {
diff --git a/tests/compiler/dart2js_extra/cfe_instance_constant_test.dart b/tests/compiler/dart2js_extra/cfe_instance_constant_test.dart
index 0c202c1..187b91a 100644
--- a/tests/compiler/dart2js_extra/cfe_instance_constant_test.dart
+++ b/tests/compiler/dart2js_extra/cfe_instance_constant_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for CFE constant evaluation. The evaluation of [Class9.field]
 // assumed that its initializer did not hold an unevaluated constant.
 
diff --git a/tests/compiler/dart2js_extra/checked_setter_test.dart b/tests/compiler/dart2js_extra/checked_setter_test.dart
index 60ca4fa..4b0e323 100644
--- a/tests/compiler/dart2js_extra/checked_setter_test.dart
+++ b/tests/compiler/dart2js_extra/checked_setter_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 class A {
diff --git a/tests/compiler/dart2js_extra/class_hierarchy_extends_clause_test.dart b/tests/compiler/dart2js_extra/class_hierarchy_extends_clause_test.dart
index 1cd8ebb..ef71e57 100644
--- a/tests/compiler/dart2js_extra/class_hierarchy_extends_clause_test.dart
+++ b/tests/compiler/dart2js_extra/class_hierarchy_extends_clause_test.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
 import 'package:expect/expect.dart';
 
 class A {}
diff --git a/tests/compiler/dart2js_extra/closure2_test.dart b/tests/compiler/dart2js_extra/closure2_test.dart
index fd8e726..22a577f 100644
--- a/tests/compiler/dart2js_extra/closure2_test.dart
+++ b/tests/compiler/dart2js_extra/closure2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 closure0() {
diff --git a/tests/compiler/dart2js_extra/closure3_test.dart b/tests/compiler/dart2js_extra/closure3_test.dart
index daea300..fcd846a 100644
--- a/tests/compiler/dart2js_extra/closure3_test.dart
+++ b/tests/compiler/dart2js_extra/closure3_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 main() {
diff --git a/tests/compiler/dart2js_extra/closure4_test.dart b/tests/compiler/dart2js_extra/closure4_test.dart
index 08e00bd..2824079 100644
--- a/tests/compiler/dart2js_extra/closure4_test.dart
+++ b/tests/compiler/dart2js_extra/closure4_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 closure0() {
diff --git a/tests/compiler/dart2js_extra/closure5_test.dart b/tests/compiler/dart2js_extra/closure5_test.dart
index f135346..b241a97 100644
--- a/tests/compiler/dart2js_extra/closure5_test.dart
+++ b/tests/compiler/dart2js_extra/closure5_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class A {
diff --git a/tests/compiler/dart2js_extra/closure6_test.dart b/tests/compiler/dart2js_extra/closure6_test.dart
index a49b187..168c570 100644
--- a/tests/compiler/dart2js_extra/closure6_test.dart
+++ b/tests/compiler/dart2js_extra/closure6_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class A {
diff --git a/tests/compiler/dart2js_extra/closure7_test.dart b/tests/compiler/dart2js_extra/closure7_test.dart
index bae471e..8d8fc62 100644
--- a/tests/compiler/dart2js_extra/closure7_test.dart
+++ b/tests/compiler/dart2js_extra/closure7_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 var foo;
diff --git a/tests/compiler/dart2js_extra/closure_capture2_test.dart b/tests/compiler/dart2js_extra/closure_capture2_test.dart
index 4d22b10..3a11798 100644
--- a/tests/compiler/dart2js_extra/closure_capture2_test.dart
+++ b/tests/compiler/dart2js_extra/closure_capture2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 closure0() {
diff --git a/tests/compiler/dart2js_extra/closure_capture3_test.dart b/tests/compiler/dart2js_extra/closure_capture3_test.dart
index f74f7f5..63b10c5 100644
--- a/tests/compiler/dart2js_extra/closure_capture3_test.dart
+++ b/tests/compiler/dart2js_extra/closure_capture3_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class Closure {
diff --git a/tests/compiler/dart2js_extra/closure_capture4_test.dart b/tests/compiler/dart2js_extra/closure_capture4_test.dart
index a16cb07..be66533 100644
--- a/tests/compiler/dart2js_extra/closure_capture4_test.dart
+++ b/tests/compiler/dart2js_extra/closure_capture4_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 closure0() {
diff --git a/tests/compiler/dart2js_extra/closure_capture5_test.dart b/tests/compiler/dart2js_extra/closure_capture5_test.dart
index c95bbc6..f01d655 100644
--- a/tests/compiler/dart2js_extra/closure_capture5_test.dart
+++ b/tests/compiler/dart2js_extra/closure_capture5_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 closure0() {
diff --git a/tests/compiler/dart2js_extra/closure_capture6_test.dart b/tests/compiler/dart2js_extra/closure_capture6_test.dart
index 06f593f..547d9e7 100644
--- a/tests/compiler/dart2js_extra/closure_capture6_test.dart
+++ b/tests/compiler/dart2js_extra/closure_capture6_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 // Simple test for free variable in two nested scopes.
diff --git a/tests/compiler/dart2js_extra/closure_capture7_test.dart b/tests/compiler/dart2js_extra/closure_capture7_test.dart
index 045f6a5..5ec52d4 100644
--- a/tests/compiler/dart2js_extra/closure_capture7_test.dart
+++ b/tests/compiler/dart2js_extra/closure_capture7_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class A<T> {
   List<List> xs;
 
diff --git a/tests/compiler/dart2js_extra/closure_capture_test.dart b/tests/compiler/dart2js_extra/closure_capture_test.dart
index cc12c58..acea026 100644
--- a/tests/compiler/dart2js_extra/closure_capture_test.dart
+++ b/tests/compiler/dart2js_extra/closure_capture_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 closure0() {
diff --git a/tests/compiler/dart2js_extra/closure_signature_unneeded_test.dart b/tests/compiler/dart2js_extra/closure_signature_unneeded_test.dart
index 88534c7..037743a 100644
--- a/tests/compiler/dart2js_extra/closure_signature_unneeded_test.dart
+++ b/tests/compiler/dart2js_extra/closure_signature_unneeded_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 class A<T> {
diff --git a/tests/compiler/dart2js_extra/closure_test.dart b/tests/compiler/dart2js_extra/closure_test.dart
index 5ad4247..c3f1448 100644
--- a/tests/compiler/dart2js_extra/closure_test.dart
+++ b/tests/compiler/dart2js_extra/closure_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 closure0() {
diff --git a/tests/compiler/dart2js_extra/code_motion_exception_test.dart b/tests/compiler/dart2js_extra/code_motion_exception_test.dart
index 95ed395..0bd675bd 100644
--- a/tests/compiler/dart2js_extra/code_motion_exception_test.dart
+++ b/tests/compiler/dart2js_extra/code_motion_exception_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 // Test for correct order of exceptions in code with checks that could be moved
diff --git a/tests/compiler/dart2js_extra/compile_time_constant4_test.dart b/tests/compiler/dart2js_extra/compile_time_constant4_test.dart
index 2349dc1..f2497bf 100644
--- a/tests/compiler/dart2js_extra/compile_time_constant4_test.dart
+++ b/tests/compiler/dart2js_extra/compile_time_constant4_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 const x = "foo";
diff --git a/tests/compiler/dart2js_extra/compound_operator_index_test.dart b/tests/compiler/dart2js_extra/compound_operator_index_test.dart
index 508a9e0..4c3d6f3 100644
--- a/tests/compiler/dart2js_extra/compound_operator_index_test.dart
+++ b/tests/compiler/dart2js_extra/compound_operator_index_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class A {
diff --git a/tests/compiler/dart2js_extra/conditional_rewrite_test.dart b/tests/compiler/dart2js_extra/conditional_rewrite_test.dart
index 57b0a42..936e03c 100644
--- a/tests/compiler/dart2js_extra/conditional_rewrite_test.dart
+++ b/tests/compiler/dart2js_extra/conditional_rewrite_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 // Test that dart2js does not rewrite conditional into logical operators
diff --git a/tests/compiler/dart2js_extra/conditional_send_test.dart b/tests/compiler/dart2js_extra/conditional_send_test.dart
index d1a27c1..86c29f0c 100644
--- a/tests/compiler/dart2js_extra/conditional_send_test.dart
+++ b/tests/compiler/dart2js_extra/conditional_send_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // SharedOptions=--enable-null-aware-operators
 import "package:expect/expect.dart";
 
diff --git a/tests/compiler/dart2js_extra/conditional_test.dart b/tests/compiler/dart2js_extra/conditional_test.dart
index 13cf988..0cbbd7d 100644
--- a/tests/compiler/dart2js_extra/conditional_test.dart
+++ b/tests/compiler/dart2js_extra/conditional_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 getZero() {
diff --git a/tests/compiler/dart2js_extra/conflict_index_test.dart b/tests/compiler/dart2js_extra/conflict_index_test.dart
index 46c74ea..e0ed5f0 100644
--- a/tests/compiler/dart2js_extra/conflict_index_test.dart
+++ b/tests/compiler/dart2js_extra/conflict_index_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 main() {
diff --git a/tests/compiler/dart2js_extra/consistent_add_error_test.dart b/tests/compiler/dart2js_extra/consistent_add_error_test.dart
index fd5840f..792fabd 100644
--- a/tests/compiler/dart2js_extra/consistent_add_error_test.dart
+++ b/tests/compiler/dart2js_extra/consistent_add_error_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 // Test that optimized '+' and slow path '+' produce the same error.
diff --git a/tests/compiler/dart2js_extra/consistent_codeUnitAt_error_test.dart b/tests/compiler/dart2js_extra/consistent_codeUnitAt_error_test.dart
index 536279b..e43c0c4 100644
--- a/tests/compiler/dart2js_extra/consistent_codeUnitAt_error_test.dart
+++ b/tests/compiler/dart2js_extra/consistent_codeUnitAt_error_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 // Test that optimized codeUnitAt and slow path codeUnitAt produce the same
diff --git a/tests/compiler/dart2js_extra/consistent_index_error_array_test.dart b/tests/compiler/dart2js_extra/consistent_index_error_array_test.dart
index 6afa8a9..aba6fbe 100644
--- a/tests/compiler/dart2js_extra/consistent_index_error_array_test.dart
+++ b/tests/compiler/dart2js_extra/consistent_index_error_array_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 import "dart:typed_data";
 
diff --git a/tests/compiler/dart2js_extra/consistent_index_error_string_test.dart b/tests/compiler/dart2js_extra/consistent_index_error_string_test.dart
index 45155ff..935de54 100644
--- a/tests/compiler/dart2js_extra/consistent_index_error_string_test.dart
+++ b/tests/compiler/dart2js_extra/consistent_index_error_string_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 import "dart:typed_data";
 
diff --git a/tests/compiler/dart2js_extra/consistent_index_error_typed_list_test.dart b/tests/compiler/dart2js_extra/consistent_index_error_typed_list_test.dart
index bf198c6..7646c4a 100644
--- a/tests/compiler/dart2js_extra/consistent_index_error_typed_list_test.dart
+++ b/tests/compiler/dart2js_extra/consistent_index_error_typed_list_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 import "dart:typed_data";
 
diff --git a/tests/compiler/dart2js_extra/consistent_null_add_error_test.dart b/tests/compiler/dart2js_extra/consistent_null_add_error_test.dart
index 64ad07d..2ab6ce5 100644
--- a/tests/compiler/dart2js_extra/consistent_null_add_error_test.dart
+++ b/tests/compiler/dart2js_extra/consistent_null_add_error_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 // Test that optimized 'null + x' and slow path '+' produce the same error.
diff --git a/tests/compiler/dart2js_extra/consistent_subtract_error_test.dart b/tests/compiler/dart2js_extra/consistent_subtract_error_test.dart
index a847937..6cba5c8 100644
--- a/tests/compiler/dart2js_extra/consistent_subtract_error_test.dart
+++ b/tests/compiler/dart2js_extra/consistent_subtract_error_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// dart2jsOptions=--omit-implicit-checks
 
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js_extra/consistent_type_error_test.dart b/tests/compiler/dart2js_extra/consistent_type_error_test.dart
index e687ba4..d8287aa 100644
--- a/tests/compiler/dart2js_extra/consistent_type_error_test.dart
+++ b/tests/compiler/dart2js_extra/consistent_type_error_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that type checks give consistent errors for the same types. In minified
 // mode this checks that the minified class names are consistently tagged.
 
diff --git a/tests/compiler/dart2js_extra/constant_fold_number_dart2_j_s_test.dart b/tests/compiler/dart2js_extra/constant_fold_number_dart2_j_s_test.dart
index aab61d7..bb3057d 100644
--- a/tests/compiler/dart2js_extra/constant_fold_number_dart2_j_s_test.dart
+++ b/tests/compiler/dart2js_extra/constant_fold_number_dart2_j_s_test.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
 // This test is making sure we don't try to constant fold numbers
 // where the semantics differ at compile-time (Dart) and runtime (JS).
 
diff --git a/tests/compiler/dart2js_extra/constant_folding_test.dart b/tests/compiler/dart2js_extra/constant_folding_test.dart
index b9b050b..927ac28 100644
--- a/tests/compiler/dart2js_extra/constant_folding_test.dart
+++ b/tests/compiler/dart2js_extra/constant_folding_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 void main() {
diff --git a/tests/compiler/dart2js_extra/constant_javascript_semantics2_test.dart b/tests/compiler/dart2js_extra/constant_javascript_semantics2_test.dart
index 6ca6693..858d88b 100644
--- a/tests/compiler/dart2js_extra/constant_javascript_semantics2_test.dart
+++ b/tests/compiler/dart2js_extra/constant_javascript_semantics2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 // Make sure we use JavaScript semantics when compiling compile-time constants.
diff --git a/tests/compiler/dart2js_extra/constant_javascript_semantics3_test.dart b/tests/compiler/dart2js_extra/constant_javascript_semantics3_test.dart
index 2cdf6b0..bfbfd8c 100644
--- a/tests/compiler/dart2js_extra/constant_javascript_semantics3_test.dart
+++ b/tests/compiler/dart2js_extra/constant_javascript_semantics3_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 // Make sure we use JavaScript semantics when compiling compile-time constants.
diff --git a/tests/compiler/dart2js_extra/constant_javascript_semantics4_test.dart b/tests/compiler/dart2js_extra/constant_javascript_semantics4_test.dart
index 9d19957..a3b26d4 100644
--- a/tests/compiler/dart2js_extra/constant_javascript_semantics4_test.dart
+++ b/tests/compiler/dart2js_extra/constant_javascript_semantics4_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Make sure we use JavaScript semantics when compiling compile-time constants.
 
 // In checked mode, this return will not fail. If the compiler thinks
diff --git a/tests/compiler/dart2js_extra/constant_javascript_semantics_test.dart b/tests/compiler/dart2js_extra/constant_javascript_semantics_test.dart
index 1a09423..5f31542 100644
--- a/tests/compiler/dart2js_extra/constant_javascript_semantics_test.dart
+++ b/tests/compiler/dart2js_extra/constant_javascript_semantics_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 // Make sure we use JavaScript semantics when compiling compile-time constants.
diff --git a/tests/compiler/dart2js_extra/constant_javascript_semantics_test5.dart b/tests/compiler/dart2js_extra/constant_javascript_semantics_test5.dart
index e2275ea..94041a4 100644
--- a/tests/compiler/dart2js_extra/constant_javascript_semantics_test5.dart
+++ b/tests/compiler/dart2js_extra/constant_javascript_semantics_test5.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 // Make sure we can assert(const Foo() != null) in const initializers.
diff --git a/tests/compiler/dart2js_extra/crash_library_metadata.dart b/tests/compiler/dart2js_extra/crash_library_metadata.dart
index b274687..5b74d23 100644
--- a/tests/compiler/dart2js_extra/crash_library_metadata.dart
+++ b/tests/compiler/dart2js_extra/crash_library_metadata.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 @Constant()
 library foo;
 
diff --git a/tests/compiler/dart2js_extra/data_uri_test.dart b/tests/compiler/dart2js_extra/data_uri_test.dart
index 90191c2..1d1ef1e 100644
--- a/tests/compiler/dart2js_extra/data_uri_test.dart
+++ b/tests/compiler/dart2js_extra/data_uri_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "data:,var%20x=#_a._b;var%20y=#a._b;var%20z=#_b;";
 
 main() {
diff --git a/tests/compiler/dart2js_extra/deferred/34219_bounds_lib1.dart b/tests/compiler/dart2js_extra/deferred/34219_bounds_lib1.dart
index 81bf0ae..7b7c8b8 100644
--- a/tests/compiler/dart2js_extra/deferred/34219_bounds_lib1.dart
+++ b/tests/compiler/dart2js_extra/deferred/34219_bounds_lib1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Part of 34219_bounds_test.dart
 
 import '34219_bounds_lib2.dart';
diff --git a/tests/compiler/dart2js_extra/deferred/34219_bounds_lib2.dart b/tests/compiler/dart2js_extra/deferred/34219_bounds_lib2.dart
index 7726460..cb96b0e 100644
--- a/tests/compiler/dart2js_extra/deferred/34219_bounds_lib2.dart
+++ b/tests/compiler/dart2js_extra/deferred/34219_bounds_lib2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Part of 34219_bounds_test.dart
 
 class GeneratedMessage {}
diff --git a/tests/compiler/dart2js_extra/deferred/34219_bounds_lib3.dart b/tests/compiler/dart2js_extra/deferred/34219_bounds_lib3.dart
index a567162..4221d51 100644
--- a/tests/compiler/dart2js_extra/deferred/34219_bounds_lib3.dart
+++ b/tests/compiler/dart2js_extra/deferred/34219_bounds_lib3.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Part of 34219_bounds_test.dart
 //
 // This library places GeneratedMessage into a different partition to
diff --git a/tests/compiler/dart2js_extra/deferred/34219_bounds_test.dart b/tests/compiler/dart2js_extra/deferred/34219_bounds_test.dart
index 67b77d9..1247f33 100644
--- a/tests/compiler/dart2js_extra/deferred/34219_bounds_test.dart
+++ b/tests/compiler/dart2js_extra/deferred/34219_bounds_test.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
 // dart2jsOptions=--omit-implicit-checks
 
 // Tests that generic function type bounds are walked as dependencies of a
diff --git a/tests/compiler/dart2js_extra/deferred/34219_signature_lib1.dart b/tests/compiler/dart2js_extra/deferred/34219_signature_lib1.dart
index b3493bd..8788765 100644
--- a/tests/compiler/dart2js_extra/deferred/34219_signature_lib1.dart
+++ b/tests/compiler/dart2js_extra/deferred/34219_signature_lib1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Part of 34219_signature_test.dart
 
 import '34219_signature_lib2.dart';
diff --git a/tests/compiler/dart2js_extra/deferred/34219_signature_lib2.dart b/tests/compiler/dart2js_extra/deferred/34219_signature_lib2.dart
index e702fe6..b801bb9 100644
--- a/tests/compiler/dart2js_extra/deferred/34219_signature_lib2.dart
+++ b/tests/compiler/dart2js_extra/deferred/34219_signature_lib2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Part of 34219_signature_test.dart
 
 class GeneratedMessage {}
diff --git a/tests/compiler/dart2js_extra/deferred/34219_signature_lib3.dart b/tests/compiler/dart2js_extra/deferred/34219_signature_lib3.dart
index 35915d5..1d12aa6 100644
--- a/tests/compiler/dart2js_extra/deferred/34219_signature_lib3.dart
+++ b/tests/compiler/dart2js_extra/deferred/34219_signature_lib3.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Part of 34219_signature_test.dart
 //
 // This library places GeneratedMessage into a different partition to
diff --git a/tests/compiler/dart2js_extra/deferred/34219_signature_test.dart b/tests/compiler/dart2js_extra/deferred/34219_signature_test.dart
index d6c2c05..fc5d240 100644
--- a/tests/compiler/dart2js_extra/deferred/34219_signature_test.dart
+++ b/tests/compiler/dart2js_extra/deferred/34219_signature_test.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
 // dart2jsOptions=--omit-implicit-checks
 
 // Tests that closure signatures are walked as dependencies of a closure. If the
diff --git a/tests/compiler/dart2js_extra/deferred/default_arg_is_tearoff_lib.dart b/tests/compiler/dart2js_extra/deferred/default_arg_is_tearoff_lib.dart
index b3e8677..6be58fd 100644
--- a/tests/compiler/dart2js_extra/deferred/default_arg_is_tearoff_lib.dart
+++ b/tests/compiler/dart2js_extra/deferred/default_arg_is_tearoff_lib.dart
@@ -2,5 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 defaultArg() => "";
 myFunction([argumentName = defaultArg]) => argumentName();
diff --git a/tests/compiler/dart2js_extra/deferred/default_arg_is_tearoff_test.dart b/tests/compiler/dart2js_extra/deferred/default_arg_is_tearoff_test.dart
index 64c0c20..7e3d96c 100644
--- a/tests/compiler/dart2js_extra/deferred/default_arg_is_tearoff_test.dart
+++ b/tests/compiler/dart2js_extra/deferred/default_arg_is_tearoff_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Regression test for https://github.com/dart-lang/sdk/issues/30002.
 ///
 /// The compiler used to keep all metadata (other than type information) in one
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_class_library.dart b/tests/compiler/dart2js_extra/deferred/deferred_class_library.dart
index 03dad35..46ee69d 100644
--- a/tests/compiler/dart2js_extra/deferred/deferred_class_library.dart
+++ b/tests/compiler/dart2js_extra/deferred/deferred_class_library.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Imported by deferred_class_test.dart.
 
 library deferred_class_library;
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_class_library2.dart b/tests/compiler/dart2js_extra/deferred/deferred_class_library2.dart
index fecca53..e09654f 100644
--- a/tests/compiler/dart2js_extra/deferred/deferred_class_library2.dart
+++ b/tests/compiler/dart2js_extra/deferred/deferred_class_library2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Imported by deferred_class_test.dart.
 
 library deferred_class_library2;
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_class_test.dart b/tests/compiler/dart2js_extra/deferred/deferred_class_test.dart
index eb6c836..15698aa 100644
--- a/tests/compiler/dart2js_extra/deferred/deferred_class_test.dart
+++ b/tests/compiler/dart2js_extra/deferred/deferred_class_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
 
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_constant2_test.dart b/tests/compiler/dart2js_extra/deferred/deferred_constant2_test.dart
index 6ea3752..d8f0f11 100644
--- a/tests/compiler/dart2js_extra/deferred/deferred_constant2_test.dart
+++ b/tests/compiler/dart2js_extra/deferred/deferred_constant2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
 
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_constant3_test.dart b/tests/compiler/dart2js_extra/deferred/deferred_constant3_test.dart
index 14add53..b91934f 100644
--- a/tests/compiler/dart2js_extra/deferred/deferred_constant3_test.dart
+++ b/tests/compiler/dart2js_extra/deferred/deferred_constant3_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
 
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_constant4_test.dart b/tests/compiler/dart2js_extra/deferred/deferred_constant4_test.dart
index af903f4..b14f649 100644
--- a/tests/compiler/dart2js_extra/deferred/deferred_constant4_test.dart
+++ b/tests/compiler/dart2js_extra/deferred/deferred_constant4_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
 
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_constant_dependency_evaluation_test.dart b/tests/compiler/dart2js_extra/deferred/deferred_constant_dependency_evaluation_test.dart
index 49d9558..449773b 100644
--- a/tests/compiler/dart2js_extra/deferred/deferred_constant_dependency_evaluation_test.dart
+++ b/tests/compiler/dart2js_extra/deferred/deferred_constant_dependency_evaluation_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // This is a regression test for dartbug.com/26406. We test that the deferred
 // loader analyzer doesn't trip over constant expression evaluation.
 //
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_function_library.dart b/tests/compiler/dart2js_extra/deferred/deferred_function_library.dart
index 0eaebc7..120c4a3 100644
--- a/tests/compiler/dart2js_extra/deferred/deferred_function_library.dart
+++ b/tests/compiler/dart2js_extra/deferred/deferred_function_library.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Imported by deferred_function_test.dart and
 // deferred_semantics_test.dart.
 
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_function_test.dart b/tests/compiler/dart2js_extra/deferred/deferred_function_test.dart
index 88fcbaf..d8e550c 100644
--- a/tests/compiler/dart2js_extra/deferred/deferred_function_test.dart
+++ b/tests/compiler/dart2js_extra/deferred/deferred_function_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that loading of a library (with top-level functions only) can
 // be deferred.
 
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_metadata_lib.dart b/tests/compiler/dart2js_extra/deferred/deferred_metadata_lib.dart
index 2bb5573..b973458 100644
--- a/tests/compiler/dart2js_extra/deferred/deferred_metadata_lib.dart
+++ b/tests/compiler/dart2js_extra/deferred/deferred_metadata_lib.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class Annotation {
   final annotationField;
   const Annotation([this.annotationField]);
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_metadata_test.dart b/tests/compiler/dart2js_extra/deferred/deferred_metadata_test.dart
index 03c1b50..62cac10 100644
--- a/tests/compiler/dart2js_extra/deferred/deferred_metadata_test.dart
+++ b/tests/compiler/dart2js_extra/deferred/deferred_metadata_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Regression tests to ensure that member metadata is not considered by the
 /// deferred loading algorithm, unless mirrors are available.
 ///
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_mirrors2_lib2.dart b/tests/compiler/dart2js_extra/deferred/deferred_mirrors2_lib2.dart
index 93f32a0..2e3a238 100644
--- a/tests/compiler/dart2js_extra/deferred/deferred_mirrors2_lib2.dart
+++ b/tests/compiler/dart2js_extra/deferred/deferred_mirrors2_lib2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library lib2;
 
 import 'deferred_mirrors2_lazy.dart' deferred as admin;
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_mirrors2_lib4.dart b/tests/compiler/dart2js_extra/deferred/deferred_mirrors2_lib4.dart
index 2ab9a2a..accf125 100644
--- a/tests/compiler/dart2js_extra/deferred/deferred_mirrors2_lib4.dart
+++ b/tests/compiler/dart2js_extra/deferred/deferred_mirrors2_lib4.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'deferred_mirrors2_lib5.dart' show Injectable;
 
 @Injectable()
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_mirrors2_lib5.dart b/tests/compiler/dart2js_extra/deferred/deferred_mirrors2_lib5.dart
index f970ed0..f449e4d 100644
--- a/tests/compiler/dart2js_extra/deferred/deferred_mirrors2_lib5.dart
+++ b/tests/compiler/dart2js_extra/deferred/deferred_mirrors2_lib5.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class Injectable {
   const Injectable();
 }
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_overlapping_lib1.dart b/tests/compiler/dart2js_extra/deferred/deferred_overlapping_lib1.dart
index 7b2bac9..53b0e50 100644
--- a/tests/compiler/dart2js_extra/deferred/deferred_overlapping_lib1.dart
+++ b/tests/compiler/dart2js_extra/deferred/deferred_overlapping_lib1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "deferred_overlapping_lib3.dart";
 
 class C1 extends C3 {}
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_overlapping_lib2.dart b/tests/compiler/dart2js_extra/deferred/deferred_overlapping_lib2.dart
index 5937171..1771c90 100644
--- a/tests/compiler/dart2js_extra/deferred/deferred_overlapping_lib2.dart
+++ b/tests/compiler/dart2js_extra/deferred/deferred_overlapping_lib2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "deferred_overlapping_lib3.dart";
 
 class C2 extends C3 {}
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_overlapping_lib3.dart b/tests/compiler/dart2js_extra/deferred/deferred_overlapping_lib3.dart
index 7a87b7b..5f2e7c7 100644
--- a/tests/compiler/dart2js_extra/deferred/deferred_overlapping_lib3.dart
+++ b/tests/compiler/dart2js_extra/deferred/deferred_overlapping_lib3.dart
@@ -2,4 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class C3 {}
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_overlapping_test.dart b/tests/compiler/dart2js_extra/deferred/deferred_overlapping_test.dart
index f626d58..4703ba7 100644
--- a/tests/compiler/dart2js_extra/deferred/deferred_overlapping_test.dart
+++ b/tests/compiler/dart2js_extra/deferred/deferred_overlapping_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "deferred_overlapping_lib1.dart" deferred as lib1;
 import "deferred_overlapping_lib2.dart" deferred as lib2;
 
diff --git a/tests/compiler/dart2js_extra/deferred/deferred_unused_classes_test.dart b/tests/compiler/dart2js_extra/deferred/deferred_unused_classes_test.dart
index 95da996..3719601 100644
--- a/tests/compiler/dart2js_extra/deferred/deferred_unused_classes_test.dart
+++ b/tests/compiler/dart2js_extra/deferred/deferred_unused_classes_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that deferred loader analyzer doesn't trip over unused classes.
 
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js_extra/deferred/interface_type_variable_lib.dart b/tests/compiler/dart2js_extra/deferred/interface_type_variable_lib.dart
index fb18b05..fecdc82 100644
--- a/tests/compiler/dart2js_extra/deferred/interface_type_variable_lib.dart
+++ b/tests/compiler/dart2js_extra/deferred/interface_type_variable_lib.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class A {}
 
 class I<T> {}
diff --git a/tests/compiler/dart2js_extra/deferred/interface_type_variable_test.dart b/tests/compiler/dart2js_extra/deferred/interface_type_variable_test.dart
index db4b4f2..98af6f7 100644
--- a/tests/compiler/dart2js_extra/deferred/interface_type_variable_test.dart
+++ b/tests/compiler/dart2js_extra/deferred/interface_type_variable_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'interface_type_variable_lib.dart' deferred as lib;
 
diff --git a/tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib1.dart b/tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib1.dart
index 01480aa..3b9163d 100644
--- a/tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib1.dart
+++ b/tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib1.dart
@@ -2,6 +2,8 @@
 import 'load_in_correct_order_lib5.dart';
 import 'load_in_correct_order_lib7.dart';
 
+// @dart = 2.7
+
 class C1 {
   final a;
   final b;
diff --git a/tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib2.dart b/tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib2.dart
index 4beadab..92b26b4 100644
--- a/tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib2.dart
+++ b/tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib2.dart
@@ -2,6 +2,8 @@
 import 'load_in_correct_order_lib6.dart';
 import 'load_in_correct_order_lib7.dart';
 
+// @dart = 2.7
+
 class C2 {
   final c;
   final d;
diff --git a/tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib3.dart b/tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib3.dart
index 1676e8f..1320396 100644
--- a/tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib3.dart
+++ b/tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib3.dart
@@ -2,6 +2,8 @@
 import 'load_in_correct_order_lib6.dart';
 import 'load_in_correct_order_lib7.dart';
 
+// @dart = 2.7
+
 class C3 {
   final e;
   final f;
diff --git a/tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib4.dart b/tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib4.dart
index eed0c5b..e94a037 100644
--- a/tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib4.dart
+++ b/tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib4.dart
@@ -1,6 +1,8 @@
 class C4 {
   final value = 499;
   const C4();
+
+// @dart = 2.7
 }
 
 const c4 = const C4();
diff --git a/tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib5.dart b/tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib5.dart
index 2212525..ca4085f 100644
--- a/tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib5.dart
+++ b/tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib5.dart
@@ -1,6 +1,8 @@
 class C5 {
   final value = 500;
   const C5();
+
+// @dart = 2.7
 }
 
 const c5 = const C5();
diff --git a/tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib6.dart b/tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib6.dart
index 8ee64e7..32f0093 100644
--- a/tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib6.dart
+++ b/tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib6.dart
@@ -1,6 +1,8 @@
 class C6 {
   final value = 501;
   const C6();
+
+// @dart = 2.7
 }
 
 const c6 = const C6();
diff --git a/tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib7.dart b/tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib7.dart
index 8c6f9b5..8056e2f 100644
--- a/tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib7.dart
+++ b/tests/compiler/dart2js_extra/deferred/load_in_correct_order_lib7.dart
@@ -1,6 +1,8 @@
 class C7 {
   final value = 502;
   const C7();
+
+// @dart = 2.7
 }
 
 const c7 = const C7();
diff --git a/tests/compiler/dart2js_extra/deferred/load_in_correct_order_test.dart b/tests/compiler/dart2js_extra/deferred/load_in_correct_order_test.dart
index dc6727d..9bbf5f9 100644
--- a/tests/compiler/dart2js_extra/deferred/load_in_correct_order_test.dart
+++ b/tests/compiler/dart2js_extra/deferred/load_in_correct_order_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// This test creates a scenario to simulate what happens if hunks are loaded
 /// out of order. The compiler should initialize hunks in order regardless, but
 /// may do so in parallel while some hunks are not loaded yet.
diff --git a/tests/compiler/dart2js_extra/deferred/multiple_default_arg_lib1.dart b/tests/compiler/dart2js_extra/deferred/multiple_default_arg_lib1.dart
index 32ed7e6..2f654fe 100644
--- a/tests/compiler/dart2js_extra/deferred/multiple_default_arg_lib1.dart
+++ b/tests/compiler/dart2js_extra/deferred/multiple_default_arg_lib1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 defaultArg1() => 1;
 defaultArg2() => 2;
 myFunction1({argumentName1: defaultArg1, argumentName2: defaultArg2}) =>
diff --git a/tests/compiler/dart2js_extra/deferred/multiple_default_arg_lib2.dart b/tests/compiler/dart2js_extra/deferred/multiple_default_arg_lib2.dart
index eff81f4..62b487e 100644
--- a/tests/compiler/dart2js_extra/deferred/multiple_default_arg_lib2.dart
+++ b/tests/compiler/dart2js_extra/deferred/multiple_default_arg_lib2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 defaultArg3() => 3;
 defaultArg4() => 4;
 myFunction2({argumentName3: defaultArg3, argumentName4: defaultArg4}) =>
diff --git a/tests/compiler/dart2js_extra/deferred/multiple_default_arg_lib3.dart b/tests/compiler/dart2js_extra/deferred/multiple_default_arg_lib3.dart
index dab89a4..1fb289c 100644
--- a/tests/compiler/dart2js_extra/deferred/multiple_default_arg_lib3.dart
+++ b/tests/compiler/dart2js_extra/deferred/multiple_default_arg_lib3.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 defaultArg3() => "3b";
 defaultArg4() => "4b";
 myFunction3(positional1, positional2,
diff --git a/tests/compiler/dart2js_extra/deferred/multiple_default_arg_test.dart b/tests/compiler/dart2js_extra/deferred/multiple_default_arg_test.dart
index 37681b9..f356e77 100644
--- a/tests/compiler/dart2js_extra/deferred/multiple_default_arg_test.dart
+++ b/tests/compiler/dart2js_extra/deferred/multiple_default_arg_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// This test is indirectly testing invariants of the generated code of dart2js.
 /// It ensures that indices to metadata information from **multiple** deferred
 /// fragments is kept separate, but that when they are loaded (and the metadata
diff --git a/tests/compiler/dart2js_extra/deferred/reflect_multiple_annotations_lib1.dart b/tests/compiler/dart2js_extra/deferred/reflect_multiple_annotations_lib1.dart
index 89e8e90..5ae2bbc 100644
--- a/tests/compiler/dart2js_extra/deferred/reflect_multiple_annotations_lib1.dart
+++ b/tests/compiler/dart2js_extra/deferred/reflect_multiple_annotations_lib1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 topLevelF() => 1;
 
 @MetaA("one")
diff --git a/tests/compiler/dart2js_extra/deferred/reflect_multiple_annotations_lib2.dart b/tests/compiler/dart2js_extra/deferred/reflect_multiple_annotations_lib2.dart
index 1c46957..930436f 100644
--- a/tests/compiler/dart2js_extra/deferred/reflect_multiple_annotations_lib2.dart
+++ b/tests/compiler/dart2js_extra/deferred/reflect_multiple_annotations_lib2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 @MetaB("lib")
 library foo;
 
diff --git a/tests/compiler/dart2js_extra/deferred/reflect_multiple_default_arg_lib1.dart b/tests/compiler/dart2js_extra/deferred/reflect_multiple_default_arg_lib1.dart
index e87a387..7f4aba9 100644
--- a/tests/compiler/dart2js_extra/deferred/reflect_multiple_default_arg_lib1.dart
+++ b/tests/compiler/dart2js_extra/deferred/reflect_multiple_default_arg_lib1.dart
@@ -2,5 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 defaultArg1() => 1;
 myFunction1([argumentName1 = defaultArg1]) => argumentName1();
diff --git a/tests/compiler/dart2js_extra/deferred/reflect_multiple_default_arg_lib2.dart b/tests/compiler/dart2js_extra/deferred/reflect_multiple_default_arg_lib2.dart
index f35642a..22cfd11 100644
--- a/tests/compiler/dart2js_extra/deferred/reflect_multiple_default_arg_lib2.dart
+++ b/tests/compiler/dart2js_extra/deferred/reflect_multiple_default_arg_lib2.dart
@@ -2,5 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 defaultArg2() => 2;
 myFunction2([argumentName2 = defaultArg2]) => argumentName2();
diff --git a/tests/compiler/dart2js_extra/deferred/shared_constant_a.dart b/tests/compiler/dart2js_extra/deferred/shared_constant_a.dart
index 388f0d3..d5520d5 100644
--- a/tests/compiler/dart2js_extra/deferred/shared_constant_a.dart
+++ b/tests/compiler/dart2js_extra/deferred/shared_constant_a.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'shared_constant_shared.dart' deferred as d;
 
 doA() async {
diff --git a/tests/compiler/dart2js_extra/deferred/shared_constant_b.dart b/tests/compiler/dart2js_extra/deferred/shared_constant_b.dart
index 177f50e..655a93b 100644
--- a/tests/compiler/dart2js_extra/deferred/shared_constant_b.dart
+++ b/tests/compiler/dart2js_extra/deferred/shared_constant_b.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'shared_constant_shared.dart' deferred as d;
 
 doB() async {
diff --git a/tests/compiler/dart2js_extra/deferred/shared_constant_c.dart b/tests/compiler/dart2js_extra/deferred/shared_constant_c.dart
index b64972e..aef7eff 100644
--- a/tests/compiler/dart2js_extra/deferred/shared_constant_c.dart
+++ b/tests/compiler/dart2js_extra/deferred/shared_constant_c.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class C {
   const C();
   method() => print("1");
diff --git a/tests/compiler/dart2js_extra/deferred/shared_constant_shared.dart b/tests/compiler/dart2js_extra/deferred/shared_constant_shared.dart
index a801718..cc3bc23 100644
--- a/tests/compiler/dart2js_extra/deferred/shared_constant_shared.dart
+++ b/tests/compiler/dart2js_extra/deferred/shared_constant_shared.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'shared_constant_c.dart';
 
 const constant = const C(); // using `var` eludes the problem.
diff --git a/tests/compiler/dart2js_extra/deferred/shared_constant_test.dart b/tests/compiler/dart2js_extra/deferred/shared_constant_test.dart
index 3614147..d01b67f 100644
--- a/tests/compiler/dart2js_extra/deferred/shared_constant_test.dart
+++ b/tests/compiler/dart2js_extra/deferred/shared_constant_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Regression test for issue https://github.com/dart-lang/sdk/issues/31306.
 ///
 /// When 1 constant was imported in two libraries by using the same exact
diff --git a/tests/compiler/dart2js_extra/deferred/type_literal_lib.dart b/tests/compiler/dart2js_extra/deferred/type_literal_lib.dart
index 867c399..105162f 100644
--- a/tests/compiler/dart2js_extra/deferred/type_literal_lib.dart
+++ b/tests/compiler/dart2js_extra/deferred/type_literal_lib.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class A {}
 
 class B {}
diff --git a/tests/compiler/dart2js_extra/deferred/type_literal_test.dart b/tests/compiler/dart2js_extra/deferred/type_literal_test.dart
index 25e2c32..79c7b29 100644
--- a/tests/compiler/dart2js_extra/deferred/type_literal_test.dart
+++ b/tests/compiler/dart2js_extra/deferred/type_literal_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for Issue #33890.
 //
 // This fails if type literal constants are not deferred, but their RTI
diff --git a/tests/compiler/dart2js_extra/deferred/typedef_lib.dart b/tests/compiler/dart2js_extra/deferred/typedef_lib.dart
index 2bccab5..70b7740 100644
--- a/tests/compiler/dart2js_extra/deferred/typedef_lib.dart
+++ b/tests/compiler/dart2js_extra/deferred/typedef_lib.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class A {}
 
 class B {}
diff --git a/tests/compiler/dart2js_extra/deferred/typedef_test.dart b/tests/compiler/dart2js_extra/deferred/typedef_test.dart
index fa4cc1f..3c45d81 100644
--- a/tests/compiler/dart2js_extra/deferred/typedef_test.dart
+++ b/tests/compiler/dart2js_extra/deferred/typedef_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for Issue #33890.
 //
 // This fails if type literal constants are not deferred, but their RTI
diff --git a/tests/compiler/dart2js_extra/deferred/uninstantiated_type_variable_lib.dart b/tests/compiler/dart2js_extra/deferred/uninstantiated_type_variable_lib.dart
index 2af788d..4780e81 100644
--- a/tests/compiler/dart2js_extra/deferred/uninstantiated_type_variable_lib.dart
+++ b/tests/compiler/dart2js_extra/deferred/uninstantiated_type_variable_lib.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // All of these types are considered instantiated because we create an instance
 // of [C].
 
diff --git a/tests/compiler/dart2js_extra/deferred/uninstantiated_type_variable_test.dart b/tests/compiler/dart2js_extra/deferred/uninstantiated_type_variable_test.dart
index 3bd8b77..1d6c2f2 100644
--- a/tests/compiler/dart2js_extra/deferred/uninstantiated_type_variable_test.dart
+++ b/tests/compiler/dart2js_extra/deferred/uninstantiated_type_variable_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 import 'uninstantiated_type_variable_lib.dart' deferred as lib;
 
diff --git a/tests/compiler/dart2js_extra/deferred_custom_loader_lib.dart b/tests/compiler/dart2js_extra/deferred_custom_loader_lib.dart
index e863607..4cf1b9d 100644
--- a/tests/compiler/dart2js_extra/deferred_custom_loader_lib.dart
+++ b/tests/compiler/dart2js_extra/deferred_custom_loader_lib.dart
@@ -2,4 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 foo() => 499;
diff --git a/tests/compiler/dart2js_extra/deferred_custom_loader_test.dart b/tests/compiler/dart2js_extra/deferred_custom_loader_test.dart
index d1f358e..50c9e97 100644
--- a/tests/compiler/dart2js_extra/deferred_custom_loader_test.dart
+++ b/tests/compiler/dart2js_extra/deferred_custom_loader_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:async_helper/async_helper.dart';
 import 'package:expect/expect.dart';
 import 'dart:_foreign_helper' show JS;
diff --git a/tests/compiler/dart2js_extra/deferred_fail_and_retry_lib.dart b/tests/compiler/dart2js_extra/deferred_fail_and_retry_lib.dart
index 48fbce6..606c26e 100644
--- a/tests/compiler/dart2js_extra/deferred_fail_and_retry_lib.dart
+++ b/tests/compiler/dart2js_extra/deferred_fail_and_retry_lib.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 foo() {
   return "loaded";
 }
diff --git a/tests/compiler/dart2js_extra/deferred_fail_and_retry_test.dart b/tests/compiler/dart2js_extra/deferred_fail_and_retry_test.dart
index 5dc34c5..23a6caa 100644
--- a/tests/compiler/dart2js_extra/deferred_fail_and_retry_test.dart
+++ b/tests/compiler/dart2js_extra/deferred_fail_and_retry_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that when a deferred import fails to load, it is possible to retry.
 
 import "deferred_fail_and_retry_lib.dart" deferred as lib;
diff --git a/tests/compiler/dart2js_extra/deferred_function_types1_test.dart b/tests/compiler/dart2js_extra/deferred_function_types1_test.dart
index 91c9075..2e853e1 100644
--- a/tests/compiler/dart2js_extra/deferred_function_types1_test.dart
+++ b/tests/compiler/dart2js_extra/deferred_function_types1_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/deferred_function_types2_test.dart b/tests/compiler/dart2js_extra/deferred_function_types2_test.dart
index 4336421..586e1b8 100644
--- a/tests/compiler/dart2js_extra/deferred_function_types2_test.dart
+++ b/tests/compiler/dart2js_extra/deferred_function_types2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/deferred_function_types3_test.dart b/tests/compiler/dart2js_extra/deferred_function_types3_test.dart
index 98a6de8..10d69f4 100644
--- a/tests/compiler/dart2js_extra/deferred_function_types3_test.dart
+++ b/tests/compiler/dart2js_extra/deferred_function_types3_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/deferred_function_types4_test.dart b/tests/compiler/dart2js_extra/deferred_function_types4_test.dart
index fc78d96..27fedbc 100644
--- a/tests/compiler/dart2js_extra/deferred_function_types4_test.dart
+++ b/tests/compiler/dart2js_extra/deferred_function_types4_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/deferred_function_types5_test.dart b/tests/compiler/dart2js_extra/deferred_function_types5_test.dart
index 998d678..75b04e3 100644
--- a/tests/compiler/dart2js_extra/deferred_function_types5_test.dart
+++ b/tests/compiler/dart2js_extra/deferred_function_types5_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/deferred_function_types6_test.dart b/tests/compiler/dart2js_extra/deferred_function_types6_test.dart
index 2423b52..0a1b2a7 100644
--- a/tests/compiler/dart2js_extra/deferred_function_types6_test.dart
+++ b/tests/compiler/dart2js_extra/deferred_function_types6_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/deferred_function_types7_test.dart b/tests/compiler/dart2js_extra/deferred_function_types7_test.dart
index fe7c49e..ba16f2e 100644
--- a/tests/compiler/dart2js_extra/deferred_function_types7_test.dart
+++ b/tests/compiler/dart2js_extra/deferred_function_types7_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/deferred_function_types8_test.dart b/tests/compiler/dart2js_extra/deferred_function_types8_test.dart
index 7222ef5..f6624a1 100644
--- a/tests/compiler/dart2js_extra/deferred_function_types8_test.dart
+++ b/tests/compiler/dart2js_extra/deferred_function_types8_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/deferred_function_types_lib1.dart b/tests/compiler/dart2js_extra/deferred_function_types_lib1.dart
index 8a3a06f..da32827 100644
--- a/tests/compiler/dart2js_extra/deferred_function_types_lib1.dart
+++ b/tests/compiler/dart2js_extra/deferred_function_types_lib1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 method1() {
   return (int i) => i;
 }
diff --git a/tests/compiler/dart2js_extra/deferred_function_types_lib2.dart b/tests/compiler/dart2js_extra/deferred_function_types_lib2.dart
index a209dac..2ab9a1c 100644
--- a/tests/compiler/dart2js_extra/deferred_function_types_lib2.dart
+++ b/tests/compiler/dart2js_extra/deferred_function_types_lib2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 method2() {
   return (String s) => s;
 }
diff --git a/tests/compiler/dart2js_extra/deferred_inheritance_test.dart b/tests/compiler/dart2js_extra/deferred_inheritance_test.dart
index 2443682..0373907 100644
--- a/tests/compiler/dart2js_extra/deferred_inheritance_test.dart
+++ b/tests/compiler/dart2js_extra/deferred_inheritance_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Regression test for --fast-startup. The compiler used to emit inherit calls
 /// on each fragment even for classes that were already loaded on a different
 /// fragment. As a result, the inheritance chain was overwritten in non-chrome
diff --git a/tests/compiler/dart2js_extra/deferred_split_lib1.dart b/tests/compiler/dart2js_extra/deferred_split_lib1.dart
index 195357a..9f80990 100644
--- a/tests/compiler/dart2js_extra/deferred_split_lib1.dart
+++ b/tests/compiler/dart2js_extra/deferred_split_lib1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Library loaded eagerly by deferred_split_test.dart
 
 class A<T> {}
diff --git a/tests/compiler/dart2js_extra/deferred_split_lib2.dart b/tests/compiler/dart2js_extra/deferred_split_lib2.dart
index d690e31..a97fef1 100644
--- a/tests/compiler/dart2js_extra/deferred_split_lib2.dart
+++ b/tests/compiler/dart2js_extra/deferred_split_lib2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Deferred library loaded by deferred_split_test.dart
 
 import 'deferred_split_lib1.dart';
diff --git a/tests/compiler/dart2js_extra/deferred_split_test.dart b/tests/compiler/dart2js_extra/deferred_split_test.dart
index 0459349..9b47f7d 100644
--- a/tests/compiler/dart2js_extra/deferred_split_test.dart
+++ b/tests/compiler/dart2js_extra/deferred_split_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Regression for issue 23853: we used to incorrectly split and put a type in a
 /// deferred hunk if the type was used explicitly in the deferred library and
 /// was used only in a generic type in the main library.
diff --git a/tests/compiler/dart2js_extra/deferred_tearoff_load_library_lib.dart b/tests/compiler/dart2js_extra/deferred_tearoff_load_library_lib.dart
index 472c977..76dc8d1 100644
--- a/tests/compiler/dart2js_extra/deferred_tearoff_load_library_lib.dart
+++ b/tests/compiler/dart2js_extra/deferred_tearoff_load_library_lib.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 foo() {
   return "loaded";
 }
diff --git a/tests/compiler/dart2js_extra/deferred_tearoff_load_library_test.dart b/tests/compiler/dart2js_extra/deferred_tearoff_load_library_test.dart
index 5dbcf88..f4510e9 100644
--- a/tests/compiler/dart2js_extra/deferred_tearoff_load_library_test.dart
+++ b/tests/compiler/dart2js_extra/deferred_tearoff_load_library_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that tearoffs of `loadLibrary` work properly.
 //
 // The CFE chooses a non identifier name for `loadLibrary` methods, this test
diff --git a/tests/compiler/dart2js_extra/deferred_with_cross_origin_lib.dart b/tests/compiler/dart2js_extra/deferred_with_cross_origin_lib.dart
index 48fbce6..606c26e 100644
--- a/tests/compiler/dart2js_extra/deferred_with_cross_origin_lib.dart
+++ b/tests/compiler/dart2js_extra/deferred_with_cross_origin_lib.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 foo() {
   return "loaded";
 }
diff --git a/tests/compiler/dart2js_extra/deferred_with_cross_origin_test.dart b/tests/compiler/dart2js_extra/deferred_with_cross_origin_test.dart
index 51c10cf..76a85b4 100644
--- a/tests/compiler/dart2js_extra/deferred_with_cross_origin_test.dart
+++ b/tests/compiler/dart2js_extra/deferred_with_cross_origin_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that code loaded via deferred imports uses the same crossorigin value as
 // the main page.
 
diff --git a/tests/compiler/dart2js_extra/deferred_with_csp_nonce2_test.dart b/tests/compiler/dart2js_extra/deferred_with_csp_nonce2_test.dart
index 5d6f596..b21858e 100644
--- a/tests/compiler/dart2js_extra/deferred_with_csp_nonce2_test.dart
+++ b/tests/compiler/dart2js_extra/deferred_with_csp_nonce2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that code loaded via deferred imports uses the same nonce value as the
 // main page.
 
diff --git a/tests/compiler/dart2js_extra/deferred_with_csp_nonce_lib.dart b/tests/compiler/dart2js_extra/deferred_with_csp_nonce_lib.dart
index 48fbce6..606c26e 100644
--- a/tests/compiler/dart2js_extra/deferred_with_csp_nonce_lib.dart
+++ b/tests/compiler/dart2js_extra/deferred_with_csp_nonce_lib.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 foo() {
   return "loaded";
 }
diff --git a/tests/compiler/dart2js_extra/deferred_with_csp_nonce_test.dart b/tests/compiler/dart2js_extra/deferred_with_csp_nonce_test.dart
index 2725df8..8409c2b 100644
--- a/tests/compiler/dart2js_extra/deferred_with_csp_nonce_test.dart
+++ b/tests/compiler/dart2js_extra/deferred_with_csp_nonce_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that code loaded via deferred imports uses the same nonce value as the
 // main page.
 
diff --git a/tests/compiler/dart2js_extra/do_test.dart b/tests/compiler/dart2js_extra/do_test.dart
index 2b7abc0..ecc3ce9 100644
--- a/tests/compiler/dart2js_extra/do_test.dart
+++ b/tests/compiler/dart2js_extra/do_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 void do1() {
diff --git a/tests/compiler/dart2js_extra/dummy_compiler_test.dart b/tests/compiler/dart2js_extra/dummy_compiler_test.dart
index 0c13dbb..0505deb 100644
--- a/tests/compiler/dart2js_extra/dummy_compiler_test.dart
+++ b/tests/compiler/dart2js_extra/dummy_compiler_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Tests that the dart2js compiler can be run in a js engine.  This ensures that
 // the internal compiler APIs have no dependency on dart:io.
 library dummy_compiler;
diff --git a/tests/compiler/dart2js_extra/dynamic_bounds_check_test.dart b/tests/compiler/dart2js_extra/dynamic_bounds_check_test.dart
index 9593aea..fb443f8 100644
--- a/tests/compiler/dart2js_extra/dynamic_bounds_check_test.dart
+++ b/tests/compiler/dart2js_extra/dynamic_bounds_check_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class Foo {}
diff --git a/tests/compiler/dart2js_extra/dynamic_invocation_test.dart b/tests/compiler/dart2js_extra/dynamic_invocation_test.dart
index 28bfdb3..a234108 100644
--- a/tests/compiler/dart2js_extra/dynamic_invocation_test.dart
+++ b/tests/compiler/dart2js_extra/dynamic_invocation_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class C1 {
diff --git a/tests/compiler/dart2js_extra/dynamic_type_literal_test.dart b/tests/compiler/dart2js_extra/dynamic_type_literal_test.dart
index 3231717..e78d113 100644
--- a/tests/compiler/dart2js_extra/dynamic_type_literal_test.dart
+++ b/tests/compiler/dart2js_extra/dynamic_type_literal_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong --omit-implicit-checks
 
 // Test generation of 'dynamic' type literals.
diff --git a/tests/compiler/dart2js_extra/effectively_constant_fields_test.dart b/tests/compiler/dart2js_extra/effectively_constant_fields_test.dart
index 6c9c18b..78a87bb 100644
--- a/tests/compiler/dart2js_extra/effectively_constant_fields_test.dart
+++ b/tests/compiler/dart2js_extra/effectively_constant_fields_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 _field4() => 4;
diff --git a/tests/compiler/dart2js_extra/effectively_constant_instance_field_test.dart b/tests/compiler/dart2js_extra/effectively_constant_instance_field_test.dart
index 94020a2..fa1b315 100644
--- a/tests/compiler/dart2js_extra/effectively_constant_instance_field_test.dart
+++ b/tests/compiler/dart2js_extra/effectively_constant_instance_field_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--omit-implicit-checks
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/empty_method_test.dart b/tests/compiler/dart2js_extra/empty_method_test.dart
index 7bd2791..7bc26bb 100644
--- a/tests/compiler/dart2js_extra/empty_method_test.dart
+++ b/tests/compiler/dart2js_extra/empty_method_test.dart
@@ -2,4 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 void main() {}
diff --git a/tests/compiler/dart2js_extra/eof_line_ending_test.dart b/tests/compiler/dart2js_extra/eof_line_ending_test.dart
index dafba6c..6ff3098 100644
--- a/tests/compiler/dart2js_extra/eof_line_ending_test.dart
+++ b/tests/compiler/dart2js_extra/eof_line_ending_test.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
 
 // Regression test derived from language/issue_1578_test.dart with Windows
 // line encoding.
diff --git a/tests/compiler/dart2js_extra/equals_test.dart b/tests/compiler/dart2js_extra/equals_test.dart
index c4a5309..e19f6df 100644
--- a/tests/compiler/dart2js_extra/equals_test.dart
+++ b/tests/compiler/dart2js_extra/equals_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 void main() {
   var x = 3;
   if (x == x) {
diff --git a/tests/compiler/dart2js_extra/expose_this1_test.dart b/tests/compiler/dart2js_extra/expose_this1_test.dart
index 84d3e70..363820e 100644
--- a/tests/compiler/dart2js_extra/expose_this1_test.dart
+++ b/tests/compiler/dart2js_extra/expose_this1_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for dart2js inference. Class.field6b should be known to be
 // potentially `null`.
 
diff --git a/tests/compiler/dart2js_extra/expose_this2_test.dart b/tests/compiler/dart2js_extra/expose_this2_test.dart
index d83abda..cc1424d 100644
--- a/tests/compiler/dart2js_extra/expose_this2_test.dart
+++ b/tests/compiler/dart2js_extra/expose_this2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for dart2js inference. Class9.field9b should be known to be
 // potentially `null`.
 
diff --git a/tests/compiler/dart2js_extra/extract_type_arguments_1_test.dart b/tests/compiler/dart2js_extra/extract_type_arguments_1_test.dart
index 74d5081..16852f0 100644
--- a/tests/compiler/dart2js_extra/extract_type_arguments_1_test.dart
+++ b/tests/compiler/dart2js_extra/extract_type_arguments_1_test.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
 // dart2jsOptions=--omit-implicit-checks
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/extract_type_arguments_2_test.dart b/tests/compiler/dart2js_extra/extract_type_arguments_2_test.dart
index bf8c2f9..da7548c 100644
--- a/tests/compiler/dart2js_extra/extract_type_arguments_2_test.dart
+++ b/tests/compiler/dart2js_extra/extract_type_arguments_2_test.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
 // dart2jsOptions=--omit-implicit-checks
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/extract_type_arguments_3_test.dart b/tests/compiler/dart2js_extra/extract_type_arguments_3_test.dart
index 10fa04a..c6ef560 100644
--- a/tests/compiler/dart2js_extra/extract_type_arguments_3_test.dart
+++ b/tests/compiler/dart2js_extra/extract_type_arguments_3_test.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
 // dart2jsOptions=--omit-implicit-checks
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/field_access_test.dart b/tests/compiler/dart2js_extra/field_access_test.dart
index 044baf4..18ec93a 100644
--- a/tests/compiler/dart2js_extra/field_access_test.dart
+++ b/tests/compiler/dart2js_extra/field_access_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test the all variants of field/property access/update are emitted.
 //
 // This is needed because getter/setters are now registered as read from and
diff --git a/tests/compiler/dart2js_extra/field_in_constructor_test.dart b/tests/compiler/dart2js_extra/field_in_constructor_test.dart
index 29d1d66..895a80e 100644
--- a/tests/compiler/dart2js_extra/field_in_constructor_test.dart
+++ b/tests/compiler/dart2js_extra/field_in_constructor_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class A {
diff --git a/tests/compiler/dart2js_extra/field_initializer_test.dart b/tests/compiler/dart2js_extra/field_initializer_test.dart
index b06f763..31efa81 100644
--- a/tests/compiler/dart2js_extra/field_initializer_test.dart
+++ b/tests/compiler/dart2js_extra/field_initializer_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class A {
diff --git a/tests/compiler/dart2js_extra/fields_test.dart b/tests/compiler/dart2js_extra/fields_test.dart
index 95c2ca3..bb773d7 100644
--- a/tests/compiler/dart2js_extra/fields_test.dart
+++ b/tests/compiler/dart2js_extra/fields_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class A {
diff --git a/tests/compiler/dart2js_extra/first_class_types_hashcode_test.dart b/tests/compiler/dart2js_extra/first_class_types_hashcode_test.dart
index 06e43bd..92637ae 100644
--- a/tests/compiler/dart2js_extra/first_class_types_hashcode_test.dart
+++ b/tests/compiler/dart2js_extra/first_class_types_hashcode_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 // Check that Type instances work with maps. This behavior is not required by
diff --git a/tests/compiler/dart2js_extra/fixed_type_argument_implements_test.dart b/tests/compiler/dart2js_extra/fixed_type_argument_implements_test.dart
index f0c397e..cd3b180 100644
--- a/tests/compiler/dart2js_extra/fixed_type_argument_implements_test.dart
+++ b/tests/compiler/dart2js_extra/fixed_type_argument_implements_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that we emit the relation between B and A even when B is only live
 // as a type argument through the supertype of D.
 
diff --git a/tests/compiler/dart2js_extra/fixed_type_argument_test.dart b/tests/compiler/dart2js_extra/fixed_type_argument_test.dart
index 74ac892..384c76b 100644
--- a/tests/compiler/dart2js_extra/fixed_type_argument_test.dart
+++ b/tests/compiler/dart2js_extra/fixed_type_argument_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that we emit the relation between B and A even when B is only live
 // as a type argument through the superclass of D.
 
diff --git a/tests/compiler/dart2js_extra/foo7_test.dart b/tests/compiler/dart2js_extra/foo7_test.dart
index dc93acf..97dcbfd 100644
--- a/tests/compiler/dart2js_extra/foo7_test.dart
+++ b/tests/compiler/dart2js_extra/foo7_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 void main() {
   print(foo());
 }
diff --git a/tests/compiler/dart2js_extra/for_in_test.dart b/tests/compiler/dart2js_extra/for_in_test.dart
index 8f0eb15..023d5ae 100644
--- a/tests/compiler/dart2js_extra/for_in_test.dart
+++ b/tests/compiler/dart2js_extra/for_in_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "dart:collection";
 import "package:expect/expect.dart";
 
diff --git a/tests/compiler/dart2js_extra/for_test.dart b/tests/compiler/dart2js_extra/for_test.dart
index fc910be..a585bfb 100644
--- a/tests/compiler/dart2js_extra/for_test.dart
+++ b/tests/compiler/dart2js_extra/for_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 void for1() {
diff --git a/tests/compiler/dart2js_extra/function_parameters_test.dart b/tests/compiler/dart2js_extra/function_parameters_test.dart
index 1632fb6..377fc66 100644
--- a/tests/compiler/dart2js_extra/function_parameters_test.dart
+++ b/tests/compiler/dart2js_extra/function_parameters_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 void main() {
   print(foo(3) + foo(4));
 }
diff --git a/tests/compiler/dart2js_extra/function_typed_arguments_test.dart b/tests/compiler/dart2js_extra/function_typed_arguments_test.dart
index f18daee..a441003 100644
--- a/tests/compiler/dart2js_extra/function_typed_arguments_test.dart
+++ b/tests/compiler/dart2js_extra/function_typed_arguments_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--omit-implicit-checks
 
 // Test type tests of function types used a type argument.
diff --git a/tests/compiler/dart2js_extra/generator_elided_parameter_test.dart b/tests/compiler/dart2js_extra/generator_elided_parameter_test.dart
index 60bf18b..169940d 100644
--- a/tests/compiler/dart2js_extra/generator_elided_parameter_test.dart
+++ b/tests/compiler/dart2js_extra/generator_elided_parameter_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Test that optional arguments of methods with a generator are forwarded
 /// properly when optional parameters are elided.
 ///
diff --git a/tests/compiler/dart2js_extra/generic_bounds_test.dart b/tests/compiler/dart2js_extra/generic_bounds_test.dart
index 0b9cacb..b23d8df 100644
--- a/tests/compiler/dart2js_extra/generic_bounds_test.dart
+++ b/tests/compiler/dart2js_extra/generic_bounds_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/generic_class_is_test.dart b/tests/compiler/dart2js_extra/generic_class_is_test.dart
index 6026b8d..3db6f87 100644
--- a/tests/compiler/dart2js_extra/generic_class_is_test.dart
+++ b/tests/compiler/dart2js_extra/generic_class_is_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 class A<T> {}
diff --git a/tests/compiler/dart2js_extra/generic_in_mixin_field_test.dart b/tests/compiler/dart2js_extra/generic_in_mixin_field_test.dart
index 6018432..045d314 100644
--- a/tests/compiler/dart2js_extra/generic_in_mixin_field_test.dart
+++ b/tests/compiler/dart2js_extra/generic_in_mixin_field_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Ensure that we prepare type variables for inlined mixin fields.
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/generic_in_redirect_test.dart b/tests/compiler/dart2js_extra/generic_in_redirect_test.dart
index 35e4564..fd289bf 100644
--- a/tests/compiler/dart2js_extra/generic_in_redirect_test.dart
+++ b/tests/compiler/dart2js_extra/generic_in_redirect_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Ensure that we prepare type variables for inlined redirecting constructor
 // calls.
 
diff --git a/tests/compiler/dart2js_extra/generic_in_super_test.dart b/tests/compiler/dart2js_extra/generic_in_super_test.dart
index 79bc8c9..77f6856 100644
--- a/tests/compiler/dart2js_extra/generic_in_super_test.dart
+++ b/tests/compiler/dart2js_extra/generic_in_super_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Ensure that we prepare type variables for inlined super constructor calls.
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/generic_instantiation1_test.dart b/tests/compiler/dart2js_extra/generic_instantiation1_test.dart
index fcfb79f..c790136 100644
--- a/tests/compiler/dart2js_extra/generic_instantiation1_test.dart
+++ b/tests/compiler/dart2js_extra/generic_instantiation1_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 int f<T>(T a) => null;
diff --git a/tests/compiler/dart2js_extra/generic_instantiation2_test.dart b/tests/compiler/dart2js_extra/generic_instantiation2_test.dart
index 047d221..886b69a 100644
--- a/tests/compiler/dart2js_extra/generic_instantiation2_test.dart
+++ b/tests/compiler/dart2js_extra/generic_instantiation2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong --omit-implicit-checks
 
 int f<T>(T a) => null;
diff --git a/tests/compiler/dart2js_extra/generic_instantiation3_test.dart b/tests/compiler/dart2js_extra/generic_instantiation3_test.dart
index 3152565..8ab46fd 100644
--- a/tests/compiler/dart2js_extra/generic_instantiation3_test.dart
+++ b/tests/compiler/dart2js_extra/generic_instantiation3_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/generic_instantiation4_test.dart b/tests/compiler/dart2js_extra/generic_instantiation4_test.dart
index d5f8eb9..3091874 100644
--- a/tests/compiler/dart2js_extra/generic_instantiation4_test.dart
+++ b/tests/compiler/dart2js_extra/generic_instantiation4_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong --omit-implicit-checks
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/generic_method_dynamic_is_test.dart b/tests/compiler/dart2js_extra/generic_method_dynamic_is_test.dart
index ff95b2b..474114a 100644
--- a/tests/compiler/dart2js_extra/generic_method_dynamic_is_test.dart
+++ b/tests/compiler/dart2js_extra/generic_method_dynamic_is_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 class A {}
diff --git a/tests/compiler/dart2js_extra/generic_method_dynamic_type_test.dart b/tests/compiler/dart2js_extra/generic_method_dynamic_type_test.dart
index ab7221d..6912246 100644
--- a/tests/compiler/dart2js_extra/generic_method_dynamic_type_test.dart
+++ b/tests/compiler/dart2js_extra/generic_method_dynamic_type_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 class C<CT> {
diff --git a/tests/compiler/dart2js_extra/generic_method_static_is_test.dart b/tests/compiler/dart2js_extra/generic_method_static_is_test.dart
index c05be8c..dfa6211 100644
--- a/tests/compiler/dart2js_extra/generic_method_static_is_test.dart
+++ b/tests/compiler/dart2js_extra/generic_method_static_is_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 class A {}
diff --git a/tests/compiler/dart2js_extra/generic_type_error_message_test.dart b/tests/compiler/dart2js_extra/generic_type_error_message_test.dart
index e9ff104..c09fbf0 100644
--- a/tests/compiler/dart2js_extra/generic_type_error_message_test.dart
+++ b/tests/compiler/dart2js_extra/generic_type_error_message_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/generics_factories_test.dart b/tests/compiler/dart2js_extra/generics_factories_test.dart
index 5ca2d59..e36626e 100644
--- a/tests/compiler/dart2js_extra/generics_factories_test.dart
+++ b/tests/compiler/dart2js_extra/generics_factories_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that factories are marked as needing rti.
 
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js_extra/generics_is_check1_test.dart b/tests/compiler/dart2js_extra/generics_is_check1_test.dart
index 24d01e5..6921c3f 100644
--- a/tests/compiler/dart2js_extra/generics_is_check1_test.dart
+++ b/tests/compiler/dart2js_extra/generics_is_check1_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class Hest<X> {}
diff --git a/tests/compiler/dart2js_extra/getter_element_test.dart b/tests/compiler/dart2js_extra/getter_element_test.dart
index 9238e8f..92939c0 100644
--- a/tests/compiler/dart2js_extra/getter_element_test.dart
+++ b/tests/compiler/dart2js_extra/getter_element_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class A {
diff --git a/tests/compiler/dart2js_extra/getters_setters_test.dart b/tests/compiler/dart2js_extra/getters_setters_test.dart
index 139f366..7a43760 100644
--- a/tests/compiler/dart2js_extra/getters_setters_test.dart
+++ b/tests/compiler/dart2js_extra/getters_setters_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class GettersSettersTest {
diff --git a/tests/compiler/dart2js_extra/hash_code_test.dart b/tests/compiler/dart2js_extra/hash_code_test.dart
index cb6789c..219fe34 100644
--- a/tests/compiler/dart2js_extra/hash_code_test.dart
+++ b/tests/compiler/dart2js_extra/hash_code_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 // dart2js specific test to make sure hashCode on intercepted types behaves as
diff --git a/tests/compiler/dart2js_extra/identical_trace_test.dart b/tests/compiler/dart2js_extra/identical_trace_test.dart
index 8fc86cb..6b24f02f 100644
--- a/tests/compiler/dart2js_extra/identical_trace_test.dart
+++ b/tests/compiler/dart2js_extra/identical_trace_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 main() {
diff --git a/tests/compiler/dart2js_extra/if_in_loop_test.dart b/tests/compiler/dart2js_extra/if_in_loop_test.dart
index af3590d..98603bd 100644
--- a/tests/compiler/dart2js_extra/if_in_loop_test.dart
+++ b/tests/compiler/dart2js_extra/if_in_loop_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 // Test for bug in code generation of if-with-aborting-branch-inside-loop.
diff --git a/tests/compiler/dart2js_extra/if_null2_test.dart b/tests/compiler/dart2js_extra/if_null2_test.dart
index a9923a8..907799a 100644
--- a/tests/compiler/dart2js_extra/if_null2_test.dart
+++ b/tests/compiler/dart2js_extra/if_null2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Regression for #24134: inference was not tracking ??= correctly.
 library tests.compiler.dart2js_extra.if_null2_test;
 
diff --git a/tests/compiler/dart2js_extra/if_null3_test.dart b/tests/compiler/dart2js_extra/if_null3_test.dart
index dac99e0..49383c1 100644
--- a/tests/compiler/dart2js_extra/if_null3_test.dart
+++ b/tests/compiler/dart2js_extra/if_null3_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Regression for #24135: inference was not tracking `[]??=` correctly.
 library tests.compiler.dart2js_extra.if_null3_test;
 
diff --git a/tests/compiler/dart2js_extra/if_null_test.dart b/tests/compiler/dart2js_extra/if_null_test.dart
index 8b16c6b..b7f28a9 100644
--- a/tests/compiler/dart2js_extra/if_null_test.dart
+++ b/tests/compiler/dart2js_extra/if_null_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 @pragma('dart2js:noInline')
diff --git a/tests/compiler/dart2js_extra/if_test.dart b/tests/compiler/dart2js_extra/if_test.dart
index 3c1670b..cead13c 100644
--- a/tests/compiler/dart2js_extra/if_test.dart
+++ b/tests/compiler/dart2js_extra/if_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 int if1() {
diff --git a/tests/compiler/dart2js_extra/index_test.dart b/tests/compiler/dart2js_extra/index_test.dart
index 890d71a..5e7af77 100644
--- a/tests/compiler/dart2js_extra/index_test.dart
+++ b/tests/compiler/dart2js_extra/index_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 main() {
diff --git a/tests/compiler/dart2js_extra/indirect_type_literal_test.dart b/tests/compiler/dart2js_extra/indirect_type_literal_test.dart
index 8929796..c1b27cb 100644
--- a/tests/compiler/dart2js_extra/indirect_type_literal_test.dart
+++ b/tests/compiler/dart2js_extra/indirect_type_literal_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js_extra/inference_super_set_call_test.dart b/tests/compiler/dart2js_extra/inference_super_set_call_test.dart
index 19e1a06..be138ad 100644
--- a/tests/compiler/dart2js_extra/inference_super_set_call_test.dart
+++ b/tests/compiler/dart2js_extra/inference_super_set_call_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for dart2js: we incorrectly modeled `super.x = rhs` as a
 // call and not an assignment, so the type of the expression was incorrectly
 // assumed to be the return type of the setter rather than the type of the rhs.
diff --git a/tests/compiler/dart2js_extra/inferrer_is_int_test.dart b/tests/compiler/dart2js_extra/inferrer_is_int_test.dart
index fe3e397..056fec6 100644
--- a/tests/compiler/dart2js_extra/inferrer_is_int_test.dart
+++ b/tests/compiler/dart2js_extra/inferrer_is_int_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that dart2js's inferrer and code optimizers know a double
 // literal might become an int at runtime.
 
diff --git a/tests/compiler/dart2js_extra/injected_cast_test.dart b/tests/compiler/dart2js_extra/injected_cast_test.dart
index 3ab671c..b2c8334 100644
--- a/tests/compiler/dart2js_extra/injected_cast_test.dart
+++ b/tests/compiler/dart2js_extra/injected_cast_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 var field;
diff --git a/tests/compiler/dart2js_extra/inline_generic_test.dart b/tests/compiler/dart2js_extra/inline_generic_test.dart
index a5a8c38..aa621b6 100644
--- a/tests/compiler/dart2js_extra/inline_generic_test.dart
+++ b/tests/compiler/dart2js_extra/inline_generic_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Test that inlining of constructors with `double` as type argument registers
 /// that double is need for checking passed values.
 
diff --git a/tests/compiler/dart2js_extra/inline_position_crash_source.dart b/tests/compiler/dart2js_extra/inline_position_crash_source.dart
index 67194b8..ca43679 100644
--- a/tests/compiler/dart2js_extra/inline_position_crash_source.dart
+++ b/tests/compiler/dart2js_extra/inline_position_crash_source.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 part of inline_position_crash_test;
 
 /*******************************************************************************
diff --git a/tests/compiler/dart2js_extra/inline_position_crash_test.dart b/tests/compiler/dart2js_extra/inline_position_crash_test.dart
index 54f58b2..6f5d182 100644
--- a/tests/compiler/dart2js_extra/inline_position_crash_test.dart
+++ b/tests/compiler/dart2js_extra/inline_position_crash_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library inline_position_crash_test;
 
 part 'inline_position_crash_source.dart';
diff --git a/tests/compiler/dart2js_extra/instantiation_stub_2_test.dart b/tests/compiler/dart2js_extra/instantiation_stub_2_test.dart
index 49dfcaf..7c83a4c 100644
--- a/tests/compiler/dart2js_extra/instantiation_stub_2_test.dart
+++ b/tests/compiler/dart2js_extra/instantiation_stub_2_test.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/instantiation_stub_test.dart b/tests/compiler/dart2js_extra/instantiation_stub_test.dart
index 23003bc..8522498 100644
--- a/tests/compiler/dart2js_extra/instantiation_stub_test.dart
+++ b/tests/compiler/dart2js_extra/instantiation_stub_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/int_index_test.dart b/tests/compiler/dart2js_extra/int_index_test.dart
index 629338b..d3f07e6 100644
--- a/tests/compiler/dart2js_extra/int_index_test.dart
+++ b/tests/compiler/dart2js_extra/int_index_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 main() {
   var a = [0, 1];
   a[1.2]; //                      //# 01: compile-time error
diff --git a/tests/compiler/dart2js_extra/interceptor_named_arguments_test.dart b/tests/compiler/dart2js_extra/interceptor_named_arguments_test.dart
index 407ac93..46d709c 100644
--- a/tests/compiler/dart2js_extra/interceptor_named_arguments_test.dart
+++ b/tests/compiler/dart2js_extra/interceptor_named_arguments_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that the proper one-shot interceptor is used for different
 // combinations of named arguments.
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js_extra/interface_type_optimization_test.dart b/tests/compiler/dart2js_extra/interface_type_optimization_test.dart
index 0beb4f4..a2963a9 100644
--- a/tests/compiler/dart2js_extra/interface_type_optimization_test.dart
+++ b/tests/compiler/dart2js_extra/interface_type_optimization_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 main() {
diff --git a/tests/compiler/dart2js_extra/invalid_annotation_test.dart b/tests/compiler/dart2js_extra/invalid_annotation_test.dart
index fe68503..0e23538 100644
--- a/tests/compiler/dart2js_extra/invalid_annotation_test.dart
+++ b/tests/compiler/dart2js_extra/invalid_annotation_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for http://dartbug.com/23893
 //
 // Because annotations are parsed lazily, dart2js used to crash when an
diff --git a/tests/compiler/dart2js_extra/invoke_dynamic_test.dart b/tests/compiler/dart2js_extra/invoke_dynamic_test.dart
index 65239f6..26616b2 100644
--- a/tests/compiler/dart2js_extra/invoke_dynamic_test.dart
+++ b/tests/compiler/dart2js_extra/invoke_dynamic_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class A {
diff --git a/tests/compiler/dart2js_extra/is_check_instanceof_test.dart b/tests/compiler/dart2js_extra/is_check_instanceof_test.dart
index 7e9c8a4..8db9f12 100644
--- a/tests/compiler/dart2js_extra/is_check_instanceof_test.dart
+++ b/tests/compiler/dart2js_extra/is_check_instanceof_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 // It is sometimes possible to compile is-checks to 'instanceof', when the class
diff --git a/tests/compiler/dart2js_extra/is_operator_test.dart b/tests/compiler/dart2js_extra/is_operator_test.dart
index bc18d7b9..8c4c714 100644
--- a/tests/compiler/dart2js_extra/is_operator_test.dart
+++ b/tests/compiler/dart2js_extra/is_operator_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class A {}
diff --git a/tests/compiler/dart2js_extra/issue36562_test.dart b/tests/compiler/dart2js_extra/issue36562_test.dart
index cd43f16..eac7cb4 100644
--- a/tests/compiler/dart2js_extra/issue36562_test.dart
+++ b/tests/compiler/dart2js_extra/issue36562_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 const int x = 0;
 
 const List<int> l = const [
diff --git a/tests/compiler/dart2js_extra/js_array_index_error_test.dart b/tests/compiler/dart2js_extra/js_array_index_error_test.dart
index 8af893a..5975a0b 100644
--- a/tests/compiler/dart2js_extra/js_array_index_error_test.dart
+++ b/tests/compiler/dart2js_extra/js_array_index_error_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that optimized JSArray indexers generate the same error as dynamically
 // dispatched calls.
 
diff --git a/tests/compiler/dart2js_extra/js_array_removeLast_error_test.dart b/tests/compiler/dart2js_extra/js_array_removeLast_error_test.dart
index 5241f55..9ea4d8e 100644
--- a/tests/compiler/dart2js_extra/js_array_removeLast_error_test.dart
+++ b/tests/compiler/dart2js_extra/js_array_removeLast_error_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that optimized JSArray removeLast() calls generate the same error as
 // dynamically dispatched calls.
 
diff --git a/tests/compiler/dart2js_extra/js_array_sort_default_test.dart b/tests/compiler/dart2js_extra/js_array_sort_default_test.dart
index 8f4e161..94f2a4d 100644
--- a/tests/compiler/dart2js_extra/js_array_sort_default_test.dart
+++ b/tests/compiler/dart2js_extra/js_array_sort_default_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Tests that the default comparable function in JSArray.sort has a valid
 /// strong-mode type.
 void main() {
diff --git a/tests/compiler/dart2js_extra/js_interop_cast_test.dart b/tests/compiler/dart2js_extra/js_interop_cast_test.dart
index 28c018a..7ce0d63 100644
--- a/tests/compiler/dart2js_extra/js_interop_cast_test.dart
+++ b/tests/compiler/dart2js_extra/js_interop_cast_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that we don't crash on computing js-interop classes when metadata
 // constants contain implicit casts.
 //
diff --git a/tests/compiler/dart2js_extra/js_interop_implements_test.dart b/tests/compiler/dart2js_extra/js_interop_implements_test.dart
index a4c8a72..6c22db8 100644
--- a/tests/compiler/dart2js_extra/js_interop_implements_test.dart
+++ b/tests/compiler/dart2js_extra/js_interop_implements_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that methods implemented (not extended) in js-interop classes are still
 // considered live.
 
diff --git a/tests/compiler/dart2js_extra/js_interop_no_elide_optional_arg_test.dart b/tests/compiler/dart2js_extra/js_interop_no_elide_optional_arg_test.dart
index 5d6d913..aa43f70 100644
--- a/tests/compiler/dart2js_extra/js_interop_no_elide_optional_arg_test.dart
+++ b/tests/compiler/dart2js_extra/js_interop_no_elide_optional_arg_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Test that optional arguments of js-interop factory constructors are not
 /// elided.
 /// This is a regression test for issue 35916
diff --git a/tests/compiler/dart2js_extra/js_interop_optional_arg_test.dart b/tests/compiler/dart2js_extra/js_interop_optional_arg_test.dart
index 4c50389..9547374 100644
--- a/tests/compiler/dart2js_extra/js_interop_optional_arg_test.dart
+++ b/tests/compiler/dart2js_extra/js_interop_optional_arg_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Test that optional arguments of js-interop constructors are not passed
 /// explicitly when missing.
 ///
diff --git a/tests/compiler/dart2js_extra/js_interop_test.dart b/tests/compiler/dart2js_extra/js_interop_test.dart
index 77478b1..9de19d3 100644
--- a/tests/compiler/dart2js_extra/js_interop_test.dart
+++ b/tests/compiler/dart2js_extra/js_interop_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:js/js.dart";
 import "package:expect/expect.dart";
 import "dart:js" as js;
diff --git a/tests/compiler/dart2js_extra/jsinterop_test.dart b/tests/compiler/dart2js_extra/jsinterop_test.dart
index 07798e5..b9fb820 100644
--- a/tests/compiler/dart2js_extra/jsinterop_test.dart
+++ b/tests/compiler/dart2js_extra/jsinterop_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // TODO(johnniwinther): Share this test with ddc.
 
 // Test for positive and negative uses of js-interop declarations in a library
diff --git a/tests/compiler/dart2js_extra/label_test.dart b/tests/compiler/dart2js_extra/label_test.dart
index d31cb35..3fbd81d 100644
--- a/tests/compiler/dart2js_extra/label_test.dart
+++ b/tests/compiler/dart2js_extra/label_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // A break label must be declared where it's used.
 undeclaredBreakLabel1() {
   foo: { break bar; break foo; } // //# 01: compile-time error
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals1_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals1_test.dart
index 8f9836f..5c5fc20 100644
--- a/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals1_test.dart
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals1_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals2_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals2_test.dart
index 56afe25..2471193 100644
--- a/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals2_test.dart
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals3_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals3_test.dart
index 673211e..1db6646 100644
--- a/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals3_test.dart
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals3_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals4_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals4_test.dart
index 73b72b3..2a7eee3 100644
--- a/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals4_test.dart
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals4_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals5_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals5_test.dart
index ecad991..91a02a9 100644
--- a/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals5_test.dart
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals5_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals6_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals6_test.dart
index 23641eb..1283d49 100644
--- a/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals6_test.dart
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals6_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals7_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals7_test.dart
index 129dcca..5677d21 100644
--- a/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals7_test.dart
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals7_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals8_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals8_test.dart
index 7a1142d..578f043 100644
--- a/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals8_test.dart
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_closure_equals8_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string1_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string1_test.dart
index 40b9f69..fccddbf 100644
--- a/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string1_test.dart
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string1_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string2_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string2_test.dart
index 6425113..1fb26ab 100644
--- a/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string2_test.dart
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string3_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string3_test.dart
index 1d244c0..bc1f41e 100644
--- a/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string3_test.dart
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string3_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string --experiment-new-rti
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string4_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string4_test.dart
index c95cf29..1dc36ae 100644
--- a/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string4_test.dart
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string4_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string5_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string5_test.dart
index cd87fa4..98d2063 100644
--- a/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string5_test.dart
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string5_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string6_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string6_test.dart
index 899a217..c197058 100644
--- a/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string6_test.dart
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string6_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string7_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string7_test.dart
index 6d77543..2fe0294 100644
--- a/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string7_test.dart
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_closure_to_string7_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--omit-implicit-checks --lax-runtime-type-to-string
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_equals1_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_equals1_test.dart
index 6ef574d..02638dc 100644
--- a/tests/compiler/dart2js_extra/lax_runtime_type_equals1_test.dart
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_equals1_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_equals2_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_equals2_test.dart
index 0883581..c37c733 100644
--- a/tests/compiler/dart2js_extra/lax_runtime_type_equals2_test.dart
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_equals2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_equals3_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_equals3_test.dart
index c9911a5..92fc4af 100644
--- a/tests/compiler/dart2js_extra/lax_runtime_type_equals3_test.dart
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_equals3_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_equals4_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_equals4_test.dart
index bf77141..99218fb 100644
--- a/tests/compiler/dart2js_extra/lax_runtime_type_equals4_test.dart
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_equals4_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/lax_runtime_type_instantiate_to_string_test.dart b/tests/compiler/dart2js_extra/lax_runtime_type_instantiate_to_string_test.dart
index 26ba4e8..0e4d623 100644
--- a/tests/compiler/dart2js_extra/lax_runtime_type_instantiate_to_string_test.dart
+++ b/tests/compiler/dart2js_extra/lax_runtime_type_instantiate_to_string_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/list_factory_test.dart b/tests/compiler/dart2js_extra/list_factory_test.dart
index b58c925..3f1885d 100644
--- a/tests/compiler/dart2js_extra/list_factory_test.dart
+++ b/tests/compiler/dart2js_extra/list_factory_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 main() {
diff --git a/tests/compiler/dart2js_extra/literal_string_juxtaposition_test.dart b/tests/compiler/dart2js_extra/literal_string_juxtaposition_test.dart
index e30bce9..737b2ab 100644
--- a/tests/compiler/dart2js_extra/literal_string_juxtaposition_test.dart
+++ b/tests/compiler/dart2js_extra/literal_string_juxtaposition_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Note: This test relies on LF line endings in the source file.
 
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js_extra/literals_test.dart b/tests/compiler/dart2js_extra/literals_test.dart
index 0de857c..b77b5cc 100644
--- a/tests/compiler/dart2js_extra/literals_test.dart
+++ b/tests/compiler/dart2js_extra/literals_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 void main() {
   print(3 + 4 + 5);
   print(3.0 + 4.0 + 5.0);
diff --git a/tests/compiler/dart2js_extra/local_function_call2_test.dart b/tests/compiler/dart2js_extra/local_function_call2_test.dart
index 3199e66..8c6f373 100644
--- a/tests/compiler/dart2js_extra/local_function_call2_test.dart
+++ b/tests/compiler/dart2js_extra/local_function_call2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for issue 31333.
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/local_function_call_test.dart b/tests/compiler/dart2js_extra/local_function_call_test.dart
index 8075492..fa1d126 100644
--- a/tests/compiler/dart2js_extra/local_function_call_test.dart
+++ b/tests/compiler/dart2js_extra/local_function_call_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that global type inference computes the correct type for .call on
 // a closure.
 
diff --git a/tests/compiler/dart2js_extra/local_function_generic_strong_test.dart b/tests/compiler/dart2js_extra/local_function_generic_strong_test.dart
index b622a6a..c299c04 100644
--- a/tests/compiler/dart2js_extra/local_function_generic_strong_test.dart
+++ b/tests/compiler/dart2js_extra/local_function_generic_strong_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/local_function_signatures_strong_test.dart b/tests/compiler/dart2js_extra/local_function_signatures_strong_test.dart
index f1df515..f49cf52 100644
--- a/tests/compiler/dart2js_extra/local_function_signatures_strong_test.dart
+++ b/tests/compiler/dart2js_extra/local_function_signatures_strong_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/local_function_signatures_test.dart b/tests/compiler/dart2js_extra/local_function_signatures_test.dart
index 11bfb83..af68ab9 100644
--- a/tests/compiler/dart2js_extra/local_function_signatures_test.dart
+++ b/tests/compiler/dart2js_extra/local_function_signatures_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/local_signature_test.dart b/tests/compiler/dart2js_extra/local_signature_test.dart
index eac7ab0..b47f40a 100644
--- a/tests/compiler/dart2js_extra/local_signature_test.dart
+++ b/tests/compiler/dart2js_extra/local_signature_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 @pragma('dart2js:noInline')
diff --git a/tests/compiler/dart2js_extra/locals_test.dart b/tests/compiler/dart2js_extra/locals_test.dart
index 3169124..a635995 100644
--- a/tests/compiler/dart2js_extra/locals_test.dart
+++ b/tests/compiler/dart2js_extra/locals_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 void main() {
   dynamic hello = 'Hello';
   dynamic world = 'world';
diff --git a/tests/compiler/dart2js_extra/logical_and_test.dart b/tests/compiler/dart2js_extra/logical_and_test.dart
index 6337969..14a3fbb 100644
--- a/tests/compiler/dart2js_extra/logical_and_test.dart
+++ b/tests/compiler/dart2js_extra/logical_and_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 void and1() {
diff --git a/tests/compiler/dart2js_extra/logical_or_test.dart b/tests/compiler/dart2js_extra/logical_or_test.dart
index b5923f0..f844613 100644
--- a/tests/compiler/dart2js_extra/logical_or_test.dart
+++ b/tests/compiler/dart2js_extra/logical_or_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 void or1() {
diff --git a/tests/compiler/dart2js_extra/loop_if_phi_test.dart b/tests/compiler/dart2js_extra/loop_if_phi_test.dart
index 044c40a..a209873 100644
--- a/tests/compiler/dart2js_extra/loop_if_phi_test.dart
+++ b/tests/compiler/dart2js_extra/loop_if_phi_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 void main() {
diff --git a/tests/compiler/dart2js_extra/many_constants_test.dart b/tests/compiler/dart2js_extra/many_constants_test.dart
index f28e2ff..43157c2 100644
--- a/tests/compiler/dart2js_extra/many_constants_test.dart
+++ b/tests/compiler/dart2js_extra/many_constants_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // This program has many similar constants that should all have distinct
 // identities. They are sufficiently similar to have name collisions and need
 // ordering by constant value.
diff --git a/tests/compiler/dart2js_extra/many_fields_test.dart b/tests/compiler/dart2js_extra/many_fields_test.dart
index 360ae34..5a25590 100644
--- a/tests/compiler/dart2js_extra/many_fields_test.dart
+++ b/tests/compiler/dart2js_extra/many_fields_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 // A plain class that implements many fields.
diff --git a/tests/compiler/dart2js_extra/many_instantiations_test.dart b/tests/compiler/dart2js_extra/many_instantiations_test.dart
index 9ba578a..90f3d81 100644
--- a/tests/compiler/dart2js_extra/many_instantiations_test.dart
+++ b/tests/compiler/dart2js_extra/many_instantiations_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test generic instantiation with many type arguments.
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/map_to_set_test.dart b/tests/compiler/dart2js_extra/map_to_set_test.dart
index 1bad856..b4bc1b7 100644
--- a/tests/compiler/dart2js_extra/map_to_set_test.dart
+++ b/tests/compiler/dart2js_extra/map_to_set_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for a missing RTI dependency between Map and JsLinkedHashMap.
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/math_lib_prefix_test.dart b/tests/compiler/dart2js_extra/math_lib_prefix_test.dart
index 318c0cf..7399764 100644
--- a/tests/compiler/dart2js_extra/math_lib_prefix_test.dart
+++ b/tests/compiler/dart2js_extra/math_lib_prefix_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library math_lib_prefix_test;
 
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js_extra/math_lib_test.dart b/tests/compiler/dart2js_extra/math_lib_test.dart
index a8124d1..a6531e9 100644
--- a/tests/compiler/dart2js_extra/math_lib_test.dart
+++ b/tests/compiler/dart2js_extra/math_lib_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library math_lib_test;
 
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js_extra/member_namespace_test.dart b/tests/compiler/dart2js_extra/member_namespace_test.dart
index ff65d20..892cb9d 100644
--- a/tests/compiler/dart2js_extra/member_namespace_test.dart
+++ b/tests/compiler/dart2js_extra/member_namespace_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class A {
diff --git a/tests/compiler/dart2js_extra/method_signatures_strong_test.dart b/tests/compiler/dart2js_extra/method_signatures_strong_test.dart
index 3e3f256..7d18fe3 100644
--- a/tests/compiler/dart2js_extra/method_signatures_strong_test.dart
+++ b/tests/compiler/dart2js_extra/method_signatures_strong_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/method_signatures_test.dart b/tests/compiler/dart2js_extra/method_signatures_test.dart
index 79d0c7f..0126fc4 100644
--- a/tests/compiler/dart2js_extra/method_signatures_test.dart
+++ b/tests/compiler/dart2js_extra/method_signatures_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/minus_zero2_test.dart b/tests/compiler/dart2js_extra/minus_zero2_test.dart
index 02cf9f0..88c9502 100644
--- a/tests/compiler/dart2js_extra/minus_zero2_test.dart
+++ b/tests/compiler/dart2js_extra/minus_zero2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for issue 17210.
 
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js_extra/minus_zero_test.dart b/tests/compiler/dart2js_extra/minus_zero_test.dart
index bc3c0b6..0a4d5b4 100644
--- a/tests/compiler/dart2js_extra/minus_zero_test.dart
+++ b/tests/compiler/dart2js_extra/minus_zero_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for issue 17210.
 
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js_extra/mixin_subtype_test.dart b/tests/compiler/dart2js_extra/mixin_subtype_test.dart
index 287776c..2509513c 100644
--- a/tests/compiler/dart2js_extra/mixin_subtype_test.dart
+++ b/tests/compiler/dart2js_extra/mixin_subtype_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class A {}
diff --git a/tests/compiler/dart2js_extra/mixin_type_variable_test.dart b/tests/compiler/dart2js_extra/mixin_type_variable_test.dart
index 750e58d..407e9a0 100644
--- a/tests/compiler/dart2js_extra/mixin_type_variable_test.dart
+++ b/tests/compiler/dart2js_extra/mixin_type_variable_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 abstract class Bar<C> {
   final List<C> _one = new List<C>();
 
diff --git a/tests/compiler/dart2js_extra/mock_libraries.dart b/tests/compiler/dart2js_extra/mock_libraries.dart
index 1667032..b05e665 100644
--- a/tests/compiler/dart2js_extra/mock_libraries.dart
+++ b/tests/compiler/dart2js_extra/mock_libraries.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Library for creating mock versions of platform and internal libraries.
 
 library mock_libraries;
diff --git a/tests/compiler/dart2js_extra/multi_global_def_single_instantiation_test.dart b/tests/compiler/dart2js_extra/multi_global_def_single_instantiation_test.dart
index f118b61..e296868 100644
--- a/tests/compiler/dart2js_extra/multi_global_def_single_instantiation_test.dart
+++ b/tests/compiler/dart2js_extra/multi_global_def_single_instantiation_test.dart
@@ -2,5 +2,7 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 var y, w, z, x = [], q, r = [];
 main() => [x, r];
diff --git a/tests/compiler/dart2js_extra/named_mixin_runtime_type_test.dart b/tests/compiler/dart2js_extra/named_mixin_runtime_type_test.dart
index 9059803..96c0dcb 100644
--- a/tests/compiler/dart2js_extra/named_mixin_runtime_type_test.dart
+++ b/tests/compiler/dart2js_extra/named_mixin_runtime_type_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 abstract class A {}
diff --git a/tests/compiler/dart2js_extra/named_parameter_for_static_test.dart b/tests/compiler/dart2js_extra/named_parameter_for_static_test.dart
index 4a4f817..688894c 100644
--- a/tests/compiler/dart2js_extra/named_parameter_for_static_test.dart
+++ b/tests/compiler/dart2js_extra/named_parameter_for_static_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 oneOptionalArgument(a, {b}) {
diff --git a/tests/compiler/dart2js_extra/named_parameter_test.dart b/tests/compiler/dart2js_extra/named_parameter_test.dart
index a5f0cf8..b9cbc47 100644
--- a/tests/compiler/dart2js_extra/named_parameter_test.dart
+++ b/tests/compiler/dart2js_extra/named_parameter_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class A {
diff --git a/tests/compiler/dart2js_extra/nan_negate_test.dart b/tests/compiler/dart2js_extra/nan_negate_test.dart
index 06adfd1..e1ef301 100644
--- a/tests/compiler/dart2js_extra/nan_negate_test.dart
+++ b/tests/compiler/dart2js_extra/nan_negate_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 // Don't convert !(a op b) to (a neg-op b) when a or b might be NaN.
diff --git a/tests/compiler/dart2js_extra/new_from_env_test.dart b/tests/compiler/dart2js_extra/new_from_env_test.dart
index 86f62dd..7138c6b 100644
--- a/tests/compiler/dart2js_extra/new_from_env_test.dart
+++ b/tests/compiler/dart2js_extra/new_from_env_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 /// Dart2js only supports the const constructor for `?.fromEnvironment`. The
@@ -9,7 +11,7 @@
 /// `new` instead of `const`.
 main() {
   Expect.isFalse(const bool.fromEnvironment('X'));
-  Expect.isNull(const String.fromEnvironment('X'));
+  Expect.equals('', const String.fromEnvironment('X', defaultValue: ''));
   Expect.equals(const int.fromEnvironment('X', defaultValue: 0), 0);
 
   Expect.throws(() => new bool.fromEnvironment('X'));
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong10_test.dart b/tests/compiler/dart2js_extra/no_such_method_strong10_test.dart
index c09441f..095d383 100644
--- a/tests/compiler/dart2js_extra/no_such_method_strong10_test.dart
+++ b/tests/compiler/dart2js_extra/no_such_method_strong10_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong11_lib.dart b/tests/compiler/dart2js_extra/no_such_method_strong11_lib.dart
index a1f1e15..7d8d5d4 100644
--- a/tests/compiler/dart2js_extra/no_such_method_strong11_lib.dart
+++ b/tests/compiler/dart2js_extra/no_such_method_strong11_lib.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 abstract class I {
   // ignore: unused_element
   int _m1();
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong11_test.dart b/tests/compiler/dart2js_extra/no_such_method_strong11_test.dart
index d16c31c..0631e598 100644
--- a/tests/compiler/dart2js_extra/no_such_method_strong11_test.dart
+++ b/tests/compiler/dart2js_extra/no_such_method_strong11_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 // Regression test checking that nsm-forwarders do not get installed for private
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong12_test.dart b/tests/compiler/dart2js_extra/no_such_method_strong12_test.dart
index b097966..c90e8bb 100644
--- a/tests/compiler/dart2js_extra/no_such_method_strong12_test.dart
+++ b/tests/compiler/dart2js_extra/no_such_method_strong12_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong1_test.dart b/tests/compiler/dart2js_extra/no_such_method_strong1_test.dart
index 62b6c60..6d6251d 100644
--- a/tests/compiler/dart2js_extra/no_such_method_strong1_test.dart
+++ b/tests/compiler/dart2js_extra/no_such_method_strong1_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong2_test.dart b/tests/compiler/dart2js_extra/no_such_method_strong2_test.dart
index e42f388..fdd7adc 100644
--- a/tests/compiler/dart2js_extra/no_such_method_strong2_test.dart
+++ b/tests/compiler/dart2js_extra/no_such_method_strong2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong3_test.dart b/tests/compiler/dart2js_extra/no_such_method_strong3_test.dart
index 5353d7b..53fbcc1 100644
--- a/tests/compiler/dart2js_extra/no_such_method_strong3_test.dart
+++ b/tests/compiler/dart2js_extra/no_such_method_strong3_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong4_test.dart b/tests/compiler/dart2js_extra/no_such_method_strong4_test.dart
index 1ec9499..e491795 100644
--- a/tests/compiler/dart2js_extra/no_such_method_strong4_test.dart
+++ b/tests/compiler/dart2js_extra/no_such_method_strong4_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong5_test.dart b/tests/compiler/dart2js_extra/no_such_method_strong5_test.dart
index 94f1531..63f04e8 100644
--- a/tests/compiler/dart2js_extra/no_such_method_strong5_test.dart
+++ b/tests/compiler/dart2js_extra/no_such_method_strong5_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong6_test.dart b/tests/compiler/dart2js_extra/no_such_method_strong6_test.dart
index 0018b85..a9e4741fb 100644
--- a/tests/compiler/dart2js_extra/no_such_method_strong6_test.dart
+++ b/tests/compiler/dart2js_extra/no_such_method_strong6_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong7_test.dart b/tests/compiler/dart2js_extra/no_such_method_strong7_test.dart
index 7f3925f..d389d99 100644
--- a/tests/compiler/dart2js_extra/no_such_method_strong7_test.dart
+++ b/tests/compiler/dart2js_extra/no_such_method_strong7_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong8_test.dart b/tests/compiler/dart2js_extra/no_such_method_strong8_test.dart
index a98447b..f87769d 100644
--- a/tests/compiler/dart2js_extra/no_such_method_strong8_test.dart
+++ b/tests/compiler/dart2js_extra/no_such_method_strong8_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/no_such_method_strong9_test.dart b/tests/compiler/dart2js_extra/no_such_method_strong9_test.dart
index 25ccc7e..9303797 100644
--- a/tests/compiler/dart2js_extra/no_such_method_strong9_test.dart
+++ b/tests/compiler/dart2js_extra/no_such_method_strong9_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/no_such_method_test.dart b/tests/compiler/dart2js_extra/no_such_method_test.dart
index 38375d3..f5d3f33 100644
--- a/tests/compiler/dart2js_extra/no_such_method_test.dart
+++ b/tests/compiler/dart2js_extra/no_such_method_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class NoSuchMethodInfo {
diff --git a/tests/compiler/dart2js_extra/non_jsinterop_test.dart b/tests/compiler/dart2js_extra/non_jsinterop_test.dart
index e66c5d5..abf7672 100644
--- a/tests/compiler/dart2js_extra/non_jsinterop_test.dart
+++ b/tests/compiler/dart2js_extra/non_jsinterop_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // TODO(johnniwinther): Share this test with ddc.
 
 // Test for positive and negative uses of js-interop declarations in a library
diff --git a/tests/compiler/dart2js_extra/non_trivial_substitution_test.dart b/tests/compiler/dart2js_extra/non_trivial_substitution_test.dart
index 2a4ebf00..6c4fd3e 100644
--- a/tests/compiler/dart2js_extra/non_trivial_substitution_test.dart
+++ b/tests/compiler/dart2js_extra/non_trivial_substitution_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class A {}
diff --git a/tests/compiler/dart2js_extra/not_equals_test.dart b/tests/compiler/dart2js_extra/not_equals_test.dart
index 58003d6..6546736 100644
--- a/tests/compiler/dart2js_extra/not_equals_test.dart
+++ b/tests/compiler/dart2js_extra/not_equals_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 void main() {
   var x = 3;
   if (x != x) {
diff --git a/tests/compiler/dart2js_extra/not_test.dart b/tests/compiler/dart2js_extra/not_test.dart
index e75f2ca..250838c 100644
--- a/tests/compiler/dart2js_extra/not_test.dart
+++ b/tests/compiler/dart2js_extra/not_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 void not1() {
diff --git a/tests/compiler/dart2js_extra/null_stacktrace_test.dart b/tests/compiler/dart2js_extra/null_stacktrace_test.dart
index 6e95443..fa4e7b1 100644
--- a/tests/compiler/dart2js_extra/null_stacktrace_test.dart
+++ b/tests/compiler/dart2js_extra/null_stacktrace_test.dart
@@ -2,14 +2,16 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-/// Regression test: stack trace can be null when using async-await.
+// @dart = 2.7
+
+/// Regression test: stack trace could be null when using async-await.
 import 'dart:async';
 
 import 'package:expect/expect.dart';
 
 main() async {
   C value = await test();
-  Expect.equals("[[null]]", "$value");
+  Expect.identical(StackTrace.empty, value._s);
 }
 
 Future<C> test() async {
@@ -17,7 +19,7 @@
     await throwInFuture();
     return C(StackTrace.fromString("no-throw"));
   } on MyException catch (e, s) {
-    return C(s); // Note: s is null
+    return C(s); // Note: s is *no longer* null
   }
 }
 
diff --git a/tests/compiler/dart2js_extra/null_test.dart b/tests/compiler/dart2js_extra/null_test.dart
index 2378a91..c0a4670 100644
--- a/tests/compiler/dart2js_extra/null_test.dart
+++ b/tests/compiler/dart2js_extra/null_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 null1() {
diff --git a/tests/compiler/dart2js_extra/operator2_test.dart b/tests/compiler/dart2js_extra/operator2_test.dart
index 7d43fb0..f187e7e 100644
--- a/tests/compiler/dart2js_extra/operator2_test.dart
+++ b/tests/compiler/dart2js_extra/operator2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 int zero() {
diff --git a/tests/compiler/dart2js_extra/operator3_test.dart b/tests/compiler/dart2js_extra/operator3_test.dart
index 04ceec8..be9ec13 100644
--- a/tests/compiler/dart2js_extra/operator3_test.dart
+++ b/tests/compiler/dart2js_extra/operator3_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 int zero() {
diff --git a/tests/compiler/dart2js_extra/operator_equals_test.dart b/tests/compiler/dart2js_extra/operator_equals_test.dart
index 6d73309..595775a 100644
--- a/tests/compiler/dart2js_extra/operator_equals_test.dart
+++ b/tests/compiler/dart2js_extra/operator_equals_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class AlwaysTrue {
diff --git a/tests/compiler/dart2js_extra/operator_test.dart b/tests/compiler/dart2js_extra/operator_test.dart
index 65edd95..5664537 100644
--- a/tests/compiler/dart2js_extra/operator_test.dart
+++ b/tests/compiler/dart2js_extra/operator_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 @pragma('dart2js:noInline')
diff --git a/tests/compiler/dart2js_extra/optional_parameter_test.dart b/tests/compiler/dart2js_extra/optional_parameter_test.dart
index 48418fb..790f638 100644
--- a/tests/compiler/dart2js_extra/optional_parameter_test.dart
+++ b/tests/compiler/dart2js_extra/optional_parameter_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class A {
diff --git a/tests/compiler/dart2js_extra/panda_lib.dart b/tests/compiler/dart2js_extra/panda_lib.dart
index 1d20b03..9210361 100644
--- a/tests/compiler/dart2js_extra/panda_lib.dart
+++ b/tests/compiler/dart2js_extra/panda_lib.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library panda_lib;
 
 class Panda {
diff --git a/tests/compiler/dart2js_extra/panda_test.dart b/tests/compiler/dart2js_extra/panda_test.dart
index 2afaee6..a825aa7 100644
--- a/tests/compiler/dart2js_extra/panda_test.dart
+++ b/tests/compiler/dart2js_extra/panda_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library panda_test;
 
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js_extra/phi_elimination_test.dart b/tests/compiler/dart2js_extra/phi_elimination_test.dart
index fe3f33f..8584939 100644
--- a/tests/compiler/dart2js_extra/phi_elimination_test.dart
+++ b/tests/compiler/dart2js_extra/phi_elimination_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 void bar() {
diff --git a/tests/compiler/dart2js_extra/phi_gvn_test.dart b/tests/compiler/dart2js_extra/phi_gvn_test.dart
index 558ce8b..e2cf05f 100644
--- a/tests/compiler/dart2js_extra/phi_gvn_test.dart
+++ b/tests/compiler/dart2js_extra/phi_gvn_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 foo(x) {}
diff --git a/tests/compiler/dart2js_extra/phi_test.dart b/tests/compiler/dart2js_extra/phi_test.dart
index 14ca2be..f9b5dda 100644
--- a/tests/compiler/dart2js_extra/phi_test.dart
+++ b/tests/compiler/dart2js_extra/phi_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 void phi1() {
diff --git a/tests/compiler/dart2js_extra/private_symbol_literal_test.dart b/tests/compiler/dart2js_extra/private_symbol_literal_test.dart
index 1f12b06..0b1a3c3 100644
--- a/tests/compiler/dart2js_extra/private_symbol_literal_test.dart
+++ b/tests/compiler/dart2js_extra/private_symbol_literal_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test symbol literals with underscores.
 // These are currently unsupported by dart2js.
 
diff --git a/tests/compiler/dart2js_extra/recursive_metadata_test.dart b/tests/compiler/dart2js_extra/recursive_metadata_test.dart
index 1c46209..0172403 100644
--- a/tests/compiler/dart2js_extra/recursive_metadata_test.dart
+++ b/tests/compiler/dart2js_extra/recursive_metadata_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 // Tests that the compiler doesn't crash resolving annotations that refer
diff --git a/tests/compiler/dart2js_extra/regress/4434_lib.dart b/tests/compiler/dart2js_extra/regress/4434_lib.dart
index a2ac7c4..f2ecb97 100644
--- a/tests/compiler/dart2js_extra/regress/4434_lib.dart
+++ b/tests/compiler/dart2js_extra/regress/4434_lib.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library lib_a;
 
 class A {
diff --git a/tests/compiler/dart2js_extra/regress/4434_test.dart b/tests/compiler/dart2js_extra/regress/4434_test.dart
index 72582f7..fea2b7a 100644
--- a/tests/compiler/dart2js_extra/regress/4434_test.dart
+++ b/tests/compiler/dart2js_extra/regress/4434_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library lib_b;
 
 import '4434_lib.dart';
diff --git a/tests/compiler/dart2js_extra/regress/4492_test.dart b/tests/compiler/dart2js_extra/regress/4492_test.dart
index 2b3d6c8..ec93b4d 100644
--- a/tests/compiler/dart2js_extra/regress/4492_test.dart
+++ b/tests/compiler/dart2js_extra/regress/4492_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class A {
diff --git a/tests/compiler/dart2js_extra/regress/4515_1_test.dart b/tests/compiler/dart2js_extra/regress/4515_1_test.dart
index 8c758b0..08c00f1 100644
--- a/tests/compiler/dart2js_extra/regress/4515_1_test.dart
+++ b/tests/compiler/dart2js_extra/regress/4515_1_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class A {
diff --git a/tests/compiler/dart2js_extra/regress/4515_2_test.dart b/tests/compiler/dart2js_extra/regress/4515_2_test.dart
index 3411648..580a676 100644
--- a/tests/compiler/dart2js_extra/regress/4515_2_test.dart
+++ b/tests/compiler/dart2js_extra/regress/4515_2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class A {
diff --git a/tests/compiler/dart2js_extra/regress/4515_3_test.dart b/tests/compiler/dart2js_extra/regress/4515_3_test.dart
index 23438ad..80c7f57 100644
--- a/tests/compiler/dart2js_extra/regress/4515_3_test.dart
+++ b/tests/compiler/dart2js_extra/regress/4515_3_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class A {
diff --git a/tests/compiler/dart2js_extra/regress/4562_test.dart b/tests/compiler/dart2js_extra/regress/4562_test.dart
index 61ba859..ba1b145 100644
--- a/tests/compiler/dart2js_extra/regress/4562_test.dart
+++ b/tests/compiler/dart2js_extra/regress/4562_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 void main() {
   var foo = new Foo();
   var bar = new Bar(); //# 01: compile-time error
diff --git a/tests/compiler/dart2js_extra/regress/4639_test.dart b/tests/compiler/dart2js_extra/regress/4639_test.dart
index 2aa9308..87dde61 100644
--- a/tests/compiler/dart2js_extra/regress/4639_test.dart
+++ b/tests/compiler/dart2js_extra/regress/4639_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class A {
diff --git a/tests/compiler/dart2js_extra/regress/regression_type_variables_is_test.dart b/tests/compiler/dart2js_extra/regress/regression_type_variables_is_test.dart
index 9826cf4..c511808 100644
--- a/tests/compiler/dart2js_extra/regress/regression_type_variables_is_test.dart
+++ b/tests/compiler/dart2js_extra/regress/regression_type_variables_is_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class Bar<X> implements Baz {}
diff --git a/tests/compiler/dart2js_extra/regress_32069_test.dart b/tests/compiler/dart2js_extra/regress_32069_test.dart
index 23a0aff..05499c8 100644
--- a/tests/compiler/dart2js_extra/regress_32069_test.dart
+++ b/tests/compiler/dart2js_extra/regress_32069_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 main() {
diff --git a/tests/compiler/dart2js_extra/regress_36222_test.dart b/tests/compiler/dart2js_extra/regress_36222_test.dart
index f030833..97ac586 100644
--- a/tests/compiler/dart2js_extra/regress_36222_test.dart
+++ b/tests/compiler/dart2js_extra/regress_36222_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 typedef int BinaryFunc(int x, int y);
 
 class A {
diff --git a/tests/compiler/dart2js_extra/regress_40349_test.dart b/tests/compiler/dart2js_extra/regress_40349_test.dart
index 796688d..50316bc 100644
--- a/tests/compiler/dart2js_extra/regress_40349_test.dart
+++ b/tests/compiler/dart2js_extra/regress_40349_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Regression test for Issue #40349:
 ///
 /// Before the fix, this code was accidentally generating a type check twice.
diff --git a/tests/compiler/dart2js_extra/regress_null_aware_test.dart b/tests/compiler/dart2js_extra/regress_null_aware_test.dart
index 4ef8dc3..68cbcdc 100644
--- a/tests/compiler/dart2js_extra/regress_null_aware_test.dart
+++ b/tests/compiler/dart2js_extra/regress_null_aware_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE.md file.
 
+// @dart = 2.7
+
 // Regression test for failure on CFE null-aware encoding.
 
 class Class {
diff --git a/tests/compiler/dart2js_extra/regression_2913_test.dart b/tests/compiler/dart2js_extra/regression_2913_test.dart
index 85b0916..51a9902 100644
--- a/tests/compiler/dart2js_extra/regression_2913_test.dart
+++ b/tests/compiler/dart2js_extra/regression_2913_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 main() {
diff --git a/tests/compiler/dart2js_extra/replaced_type_variable_test.dart b/tests/compiler/dart2js_extra/replaced_type_variable_test.dart
index e95ea81..f9c7e7e 100644
--- a/tests/compiler/dart2js_extra/replaced_type_variable_test.dart
+++ b/tests/compiler/dart2js_extra/replaced_type_variable_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 // This class is inlined away.
diff --git a/tests/compiler/dart2js_extra/return_setter_test.dart b/tests/compiler/dart2js_extra/return_setter_test.dart
index a938b71..2d56e67 100644
--- a/tests/compiler/dart2js_extra/return_setter_test.dart
+++ b/tests/compiler/dart2js_extra/return_setter_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class A {
diff --git a/tests/compiler/dart2js_extra/round_constant_folding_test.dart b/tests/compiler/dart2js_extra/round_constant_folding_test.dart
index 2c786dd..8303723 100644
--- a/tests/compiler/dart2js_extra/round_constant_folding_test.dart
+++ b/tests/compiler/dart2js_extra/round_constant_folding_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 const double PD1 = 0.0;
diff --git a/tests/compiler/dart2js_extra/rti/bind_test.dart b/tests/compiler/dart2js_extra/rti/bind_test.dart
index 4e38ba6..f2b8bab 100644
--- a/tests/compiler/dart2js_extra/rti/bind_test.dart
+++ b/tests/compiler/dart2js_extra/rti/bind_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:_rti' as rti;
 import "package:expect/expect.dart";
 
diff --git a/tests/compiler/dart2js_extra/rti/bound_environment_test.dart b/tests/compiler/dart2js_extra/rti/bound_environment_test.dart
index 67f8ec3..6545b43 100644
--- a/tests/compiler/dart2js_extra/rti/bound_environment_test.dart
+++ b/tests/compiler/dart2js_extra/rti/bound_environment_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:_rti' as rti;
 import "package:expect/expect.dart";
 
diff --git a/tests/compiler/dart2js_extra/rti/canonical_recipe_test.dart b/tests/compiler/dart2js_extra/rti/canonical_recipe_test.dart
index 856ca7a..3be6427 100644
--- a/tests/compiler/dart2js_extra/rti/canonical_recipe_test.dart
+++ b/tests/compiler/dart2js_extra/rti/canonical_recipe_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:_rti' as rti;
 import "package:expect/expect.dart";
 
diff --git a/tests/compiler/dart2js_extra/rti/class_environment_test.dart b/tests/compiler/dart2js_extra/rti/class_environment_test.dart
index 4cf7d9e..aa1079b 100644
--- a/tests/compiler/dart2js_extra/rti/class_environment_test.dart
+++ b/tests/compiler/dart2js_extra/rti/class_environment_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:_rti' as rti;
 import "package:expect/expect.dart";
 
diff --git a/tests/compiler/dart2js_extra/rti/constant_type_test.dart b/tests/compiler/dart2js_extra/rti/constant_type_test.dart
index 6281f06..fa2d560 100644
--- a/tests/compiler/dart2js_extra/rti/constant_type_test.dart
+++ b/tests/compiler/dart2js_extra/rti/constant_type_test.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
 //
 // dart2jsOptions=--experiment-new-rti --no-minify
 
diff --git a/tests/compiler/dart2js_extra/rti/recipe_syntax_test.dart b/tests/compiler/dart2js_extra/rti/recipe_syntax_test.dart
index 7d4be33..bb7979d 100644
--- a/tests/compiler/dart2js_extra/rti/recipe_syntax_test.dart
+++ b/tests/compiler/dart2js_extra/rti/recipe_syntax_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:_recipe_syntax';
 
 main() {
diff --git a/tests/compiler/dart2js_extra/rti/runtime_type_1_test.dart b/tests/compiler/dart2js_extra/rti/runtime_type_1_test.dart
index 1eb67ab..acf914b 100644
--- a/tests/compiler/dart2js_extra/rti/runtime_type_1_test.dart
+++ b/tests/compiler/dart2js_extra/rti/runtime_type_1_test.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
 //
 // dart2jsOptions=--experiment-new-rti --no-minify
 
diff --git a/tests/compiler/dart2js_extra/rti/runtime_type_2_test.dart b/tests/compiler/dart2js_extra/rti/runtime_type_2_test.dart
index 69b352a..9a3511b 100644
--- a/tests/compiler/dart2js_extra/rti/runtime_type_2_test.dart
+++ b/tests/compiler/dart2js_extra/rti/runtime_type_2_test.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
 //
 // dart2jsOptions=--experiment-new-rti --no-minify
 
diff --git a/tests/compiler/dart2js_extra/rti/runtime_type_3_test.dart b/tests/compiler/dart2js_extra/rti/runtime_type_3_test.dart
index 7d8d51e..1423ff4 100644
--- a/tests/compiler/dart2js_extra/rti/runtime_type_3_test.dart
+++ b/tests/compiler/dart2js_extra/rti/runtime_type_3_test.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
 //
 // dart2jsOptions=--experiment-new-rti --no-minify
 
diff --git a/tests/compiler/dart2js_extra/rti/simple_2_test.dart b/tests/compiler/dart2js_extra/rti/simple_2_test.dart
index e195451..1ea3c71 100644
--- a/tests/compiler/dart2js_extra/rti/simple_2_test.dart
+++ b/tests/compiler/dart2js_extra/rti/simple_2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:_rti' as rti;
 import "package:expect/expect.dart";
 
diff --git a/tests/compiler/dart2js_extra/rti/simple_is_function_type2_test.dart b/tests/compiler/dart2js_extra/rti/simple_is_function_type2_test.dart
index 1ed2045..44603a0 100644
--- a/tests/compiler/dart2js_extra/rti/simple_is_function_type2_test.dart
+++ b/tests/compiler/dart2js_extra/rti/simple_is_function_type2_test.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
 //
 // dart2jsOptions=--experiment-new-rti
 
diff --git a/tests/compiler/dart2js_extra/rti/simple_is_function_type3_test.dart b/tests/compiler/dart2js_extra/rti/simple_is_function_type3_test.dart
index 9843216..747d5f8 100644
--- a/tests/compiler/dart2js_extra/rti/simple_is_function_type3_test.dart
+++ b/tests/compiler/dart2js_extra/rti/simple_is_function_type3_test.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
 //
 // dart2jsOptions=--experiment-new-rti
 
diff --git a/tests/compiler/dart2js_extra/rti/simple_is_function_type_test.dart b/tests/compiler/dart2js_extra/rti/simple_is_function_type_test.dart
index d87c89c..e63e4b5 100644
--- a/tests/compiler/dart2js_extra/rti/simple_is_function_type_test.dart
+++ b/tests/compiler/dart2js_extra/rti/simple_is_function_type_test.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
 //
 // dart2jsOptions=--experiment-new-rti
 
diff --git a/tests/compiler/dart2js_extra/rti/simple_is_test.dart b/tests/compiler/dart2js_extra/rti/simple_is_test.dart
index 7c7aafa..2d27065 100644
--- a/tests/compiler/dart2js_extra/rti/simple_is_test.dart
+++ b/tests/compiler/dart2js_extra/rti/simple_is_test.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
 //
 // dart2jsOptions=--experiment-new-rti --no-minify
 
diff --git a/tests/compiler/dart2js_extra/rti/simple_test.dart b/tests/compiler/dart2js_extra/rti/simple_test.dart
index 13a893e..4d9c956 100644
--- a/tests/compiler/dart2js_extra/rti/simple_test.dart
+++ b/tests/compiler/dart2js_extra/rti/simple_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:_rti' as rti;
 import "package:expect/expect.dart";
 
diff --git a/tests/compiler/dart2js_extra/rti/simple_type_bound_test.dart b/tests/compiler/dart2js_extra/rti/simple_type_bound_test.dart
index 064327f..cc0a860 100644
--- a/tests/compiler/dart2js_extra/rti/simple_type_bound_test.dart
+++ b/tests/compiler/dart2js_extra/rti/simple_type_bound_test.dart
@@ -1,6 +1,8 @@
 // Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
+
+// @dart = 2.7
 //
 // dart2jsOptions=--experiment-new-rti
 
diff --git a/tests/compiler/dart2js_extra/rti/subtype_test.dart b/tests/compiler/dart2js_extra/rti/subtype_test.dart
index e7fff6d..0d34f3f 100644
--- a/tests/compiler/dart2js_extra/rti/subtype_test.dart
+++ b/tests/compiler/dart2js_extra/rti/subtype_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:_foreign_helper' show JS, JS_GET_NAME, TYPE_REF;
 import 'dart:_js_embedded_names' show JsGetName;
 import 'dart:_rti' as rti;
diff --git a/tests/compiler/dart2js_extra/rti/subtype_utils.dart b/tests/compiler/dart2js_extra/rti/subtype_utils.dart
index dc4f608..e520a86 100644
--- a/tests/compiler/dart2js_extra/rti/subtype_utils.dart
+++ b/tests/compiler/dart2js_extra/rti/subtype_utils.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:_rti' as rti;
 import "package:expect/expect.dart";
 
diff --git a/tests/compiler/dart2js_extra/rti/variance_subtype_test.dart b/tests/compiler/dart2js_extra/rti/variance_subtype_test.dart
index a42ab3f..e0d3258 100644
--- a/tests/compiler/dart2js_extra/rti/variance_subtype_test.dart
+++ b/tests/compiler/dart2js_extra/rti/variance_subtype_test.dart
@@ -2,7 +2,9 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// dart2jsOptions= --enable-experiment=variance
+// @dart = 2.7
+
+// SharedOptions=--enable-experiment=variance
 
 import 'dart:_foreign_helper' show JS;
 import 'dart:_rti' as rti;
diff --git a/tests/compiler/dart2js_extra/rti_need_for_closure_signature_test.dart b/tests/compiler/dart2js_extra/rti_need_for_closure_signature_test.dart
index 61fda79..362930f 100644
--- a/tests/compiler/dart2js_extra/rti_need_for_closure_signature_test.dart
+++ b/tests/compiler/dart2js_extra/rti_need_for_closure_signature_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// User-facing regression test: ensure we correctly record when a closure needs
 /// runtime type information for a type parameter that may be used or
 /// .runtimeType.
diff --git a/tests/compiler/dart2js_extra/rti_need_for_runtime_type_test.dart b/tests/compiler/dart2js_extra/rti_need_for_runtime_type_test.dart
index 48c20e4..d4697ae 100644
--- a/tests/compiler/dart2js_extra/rti_need_for_runtime_type_test.dart
+++ b/tests/compiler/dart2js_extra/rti_need_for_runtime_type_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// User-facing regression test: ensure we correctly record when a closure needs
 /// runtime type information for a type parameter that may be used or
 /// .runtimeType.
diff --git a/tests/compiler/dart2js_extra/runtime_type_closure_equals1_test.dart b/tests/compiler/dart2js_extra/runtime_type_closure_equals1_test.dart
index 5defc5e..7a0d823 100644
--- a/tests/compiler/dart2js_extra/runtime_type_closure_equals1_test.dart
+++ b/tests/compiler/dart2js_extra/runtime_type_closure_equals1_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/runtime_type_closure_equals2_test.dart b/tests/compiler/dart2js_extra/runtime_type_closure_equals2_test.dart
index 86fe4b2..22aa514 100644
--- a/tests/compiler/dart2js_extra/runtime_type_closure_equals2_test.dart
+++ b/tests/compiler/dart2js_extra/runtime_type_closure_equals2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/runtime_type_closure_equals3_test.dart b/tests/compiler/dart2js_extra/runtime_type_closure_equals3_test.dart
index ffcd03f..6ed0c0d 100644
--- a/tests/compiler/dart2js_extra/runtime_type_closure_equals3_test.dart
+++ b/tests/compiler/dart2js_extra/runtime_type_closure_equals3_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/runtime_type_closure_equals4_test.dart b/tests/compiler/dart2js_extra/runtime_type_closure_equals4_test.dart
index 967b5f6..7b17bb1 100644
--- a/tests/compiler/dart2js_extra/runtime_type_closure_equals4_test.dart
+++ b/tests/compiler/dart2js_extra/runtime_type_closure_equals4_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/runtime_type_closure_equals5_test.dart b/tests/compiler/dart2js_extra/runtime_type_closure_equals5_test.dart
index 1b19f8d..fd2616e 100644
--- a/tests/compiler/dart2js_extra/runtime_type_closure_equals5_test.dart
+++ b/tests/compiler/dart2js_extra/runtime_type_closure_equals5_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/runtime_type_closure_equals6_test.dart b/tests/compiler/dart2js_extra/runtime_type_closure_equals6_test.dart
index 5090f04..3cb0589 100644
--- a/tests/compiler/dart2js_extra/runtime_type_closure_equals6_test.dart
+++ b/tests/compiler/dart2js_extra/runtime_type_closure_equals6_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/runtime_type_closure_equals7_test.dart b/tests/compiler/dart2js_extra/runtime_type_closure_equals7_test.dart
index 73348c9..860f25c 100644
--- a/tests/compiler/dart2js_extra/runtime_type_closure_equals7_test.dart
+++ b/tests/compiler/dart2js_extra/runtime_type_closure_equals7_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/runtime_type_closure_equals8_test.dart b/tests/compiler/dart2js_extra/runtime_type_closure_equals8_test.dart
index 5f03539..9cfe492 100644
--- a/tests/compiler/dart2js_extra/runtime_type_closure_equals8_test.dart
+++ b/tests/compiler/dart2js_extra/runtime_type_closure_equals8_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/runtime_type_equals1_test.dart b/tests/compiler/dart2js_extra/runtime_type_equals1_test.dart
index f625055..5f20dfa 100644
--- a/tests/compiler/dart2js_extra/runtime_type_equals1_test.dart
+++ b/tests/compiler/dart2js_extra/runtime_type_equals1_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/runtime_type_equals2_test.dart b/tests/compiler/dart2js_extra/runtime_type_equals2_test.dart
index ce93178..f73ced5 100644
--- a/tests/compiler/dart2js_extra/runtime_type_equals2_test.dart
+++ b/tests/compiler/dart2js_extra/runtime_type_equals2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/runtime_type_equals3_test.dart b/tests/compiler/dart2js_extra/runtime_type_equals3_test.dart
index f412f86..3d909c4 100644
--- a/tests/compiler/dart2js_extra/runtime_type_equals3_test.dart
+++ b/tests/compiler/dart2js_extra/runtime_type_equals3_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/runtime_type_equals4_test.dart b/tests/compiler/dart2js_extra/runtime_type_equals4_test.dart
index 4a1c8d9..8aa0647 100644
--- a/tests/compiler/dart2js_extra/runtime_type_equals4_test.dart
+++ b/tests/compiler/dart2js_extra/runtime_type_equals4_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/runtime_type_equals5_test.dart b/tests/compiler/dart2js_extra/runtime_type_equals5_test.dart
index cd6926e..532deb9 100644
--- a/tests/compiler/dart2js_extra/runtime_type_equals5_test.dart
+++ b/tests/compiler/dart2js_extra/runtime_type_equals5_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 class Class1 {
diff --git a/tests/compiler/dart2js_extra/runtime_type_equals6_test.dart b/tests/compiler/dart2js_extra/runtime_type_equals6_test.dart
index af98ea6..f71999f 100644
--- a/tests/compiler/dart2js_extra/runtime_type_equals6_test.dart
+++ b/tests/compiler/dart2js_extra/runtime_type_equals6_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/runtime_type_equals7_test.dart b/tests/compiler/dart2js_extra/runtime_type_equals7_test.dart
index 0d2727b..bf1460f 100644
--- a/tests/compiler/dart2js_extra/runtime_type_equals7_test.dart
+++ b/tests/compiler/dart2js_extra/runtime_type_equals7_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/runtime_type_equals8_test.dart b/tests/compiler/dart2js_extra/runtime_type_equals8_test.dart
index 145ceae..31f9f8e 100644
--- a/tests/compiler/dart2js_extra/runtime_type_equals8_test.dart
+++ b/tests/compiler/dart2js_extra/runtime_type_equals8_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/runtime_type_int_test.dart b/tests/compiler/dart2js_extra/runtime_type_int_test.dart
index d98484a..71ac242 100644
--- a/tests/compiler/dart2js_extra/runtime_type_int_test.dart
+++ b/tests/compiler/dart2js_extra/runtime_type_int_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that in dart2js, the constant system matches the runtime
 // handling of numbers.
 
diff --git a/tests/compiler/dart2js_extra/runtime_type_test.dart b/tests/compiler/dart2js_extra/runtime_type_test.dart
index f127dbe..9cd1bee 100644
--- a/tests/compiler/dart2js_extra/runtime_type_test.dart
+++ b/tests/compiler/dart2js_extra/runtime_type_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 // Test that Type.toString returns nice strings for native classes with
diff --git a/tests/compiler/dart2js_extra/runtime_type_to_string1_test.dart b/tests/compiler/dart2js_extra/runtime_type_to_string1_test.dart
index d61335f..611c16f 100644
--- a/tests/compiler/dart2js_extra/runtime_type_to_string1_test.dart
+++ b/tests/compiler/dart2js_extra/runtime_type_to_string1_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong --omit-implicit-checks --lax-runtime-type-to-string --experiment-new-rti
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/send_test.dart b/tests/compiler/dart2js_extra/send_test.dart
index 3c98c51..c37b5eb 100644
--- a/tests/compiler/dart2js_extra/send_test.dart
+++ b/tests/compiler/dart2js_extra/send_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class A {
   int foo() {
     return 42;
diff --git a/tests/compiler/dart2js_extra/simple_string_constant_test.dart b/tests/compiler/dart2js_extra/simple_string_constant_test.dart
index 746e4d2..51b980b 100644
--- a/tests/compiler/dart2js_extra/simple_string_constant_test.dart
+++ b/tests/compiler/dart2js_extra/simple_string_constant_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 const String m = "\u{21}";
diff --git a/tests/compiler/dart2js_extra/source_mapping_crash_source.dart b/tests/compiler/dart2js_extra/source_mapping_crash_source.dart
index 78f15e3..470204de 100644
--- a/tests/compiler/dart2js_extra/source_mapping_crash_source.dart
+++ b/tests/compiler/dart2js_extra/source_mapping_crash_source.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 part of source_mapping_crash_test;
 
 /*******************************************************************************
diff --git a/tests/compiler/dart2js_extra/source_mapping_crash_test.dart b/tests/compiler/dart2js_extra/source_mapping_crash_test.dart
index 38ca4c6..8700f37 100644
--- a/tests/compiler/dart2js_extra/source_mapping_crash_test.dart
+++ b/tests/compiler/dart2js_extra/source_mapping_crash_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library source_mapping_crash_test;
 
 part 'source_mapping_crash_source.dart';
diff --git a/tests/compiler/dart2js_extra/statements_test.dart b/tests/compiler/dart2js_extra/statements_test.dart
index 7e45397..8bc5323 100644
--- a/tests/compiler/dart2js_extra/statements_test.dart
+++ b/tests/compiler/dart2js_extra/statements_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 void main() {
   print(3);
   print(4);
diff --git a/tests/compiler/dart2js_extra/static_field2_test.dart b/tests/compiler/dart2js_extra/static_field2_test.dart
index d2f5cc7..fe0b891 100644
--- a/tests/compiler/dart2js_extra/static_field2_test.dart
+++ b/tests/compiler/dart2js_extra/static_field2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class A {
diff --git a/tests/compiler/dart2js_extra/static_field_test.dart b/tests/compiler/dart2js_extra/static_field_test.dart
index 63c96af..a449c5d 100644
--- a/tests/compiler/dart2js_extra/static_field_test.dart
+++ b/tests/compiler/dart2js_extra/static_field_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class A {
diff --git a/tests/compiler/dart2js_extra/static_method2_test.dart b/tests/compiler/dart2js_extra/static_method2_test.dart
index ab6517f..43c55dd 100644
--- a/tests/compiler/dart2js_extra/static_method2_test.dart
+++ b/tests/compiler/dart2js_extra/static_method2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class A {
diff --git a/tests/compiler/dart2js_extra/static_method_test.dart b/tests/compiler/dart2js_extra/static_method_test.dart
index a65e0b6..aa14749 100644
--- a/tests/compiler/dart2js_extra/static_method_test.dart
+++ b/tests/compiler/dart2js_extra/static_method_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class A {
diff --git a/tests/compiler/dart2js_extra/static_var_no_initializer_test.dart b/tests/compiler/dart2js_extra/static_var_no_initializer_test.dart
index e6cb720..d03a222 100644
--- a/tests/compiler/dart2js_extra/static_var_no_initializer_test.dart
+++ b/tests/compiler/dart2js_extra/static_var_no_initializer_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 int one;
diff --git a/tests/compiler/dart2js_extra/static_var_test.dart b/tests/compiler/dart2js_extra/static_var_test.dart
index 1b3a9fc..56c2591 100644
--- a/tests/compiler/dart2js_extra/static_var_test.dart
+++ b/tests/compiler/dart2js_extra/static_var_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 int one = 1;
diff --git a/tests/compiler/dart2js_extra/string_escape_test.dart b/tests/compiler/dart2js_extra/string_escape_test.dart
index 3bd1b99..0ee8d16 100644
--- a/tests/compiler/dart2js_extra/string_escape_test.dart
+++ b/tests/compiler/dart2js_extra/string_escape_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 // Test that string escapes work correctly.
diff --git a/tests/compiler/dart2js_extra/string_interpolation_dynamic_test.dart b/tests/compiler/dart2js_extra/string_interpolation_dynamic_test.dart
index 115f070..304f024 100644
--- a/tests/compiler/dart2js_extra/string_interpolation_dynamic_test.dart
+++ b/tests/compiler/dart2js_extra/string_interpolation_dynamic_test.dart
Binary files differ
diff --git a/tests/compiler/dart2js_extra/string_interpolation_opt1_test.dart b/tests/compiler/dart2js_extra/string_interpolation_opt1_test.dart
index 60e92d4..e0a63dd 100644
--- a/tests/compiler/dart2js_extra/string_interpolation_opt1_test.dart
+++ b/tests/compiler/dart2js_extra/string_interpolation_opt1_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 import 'dart:math';
 
diff --git a/tests/compiler/dart2js_extra/string_interpolation_test.dart b/tests/compiler/dart2js_extra/string_interpolation_test.dart
index 027128a..e6c9562 100644
--- a/tests/compiler/dart2js_extra/string_interpolation_test.dart
+++ b/tests/compiler/dart2js_extra/string_interpolation_test.dart
Binary files differ
diff --git a/tests/compiler/dart2js_extra/super_call_test.dart b/tests/compiler/dart2js_extra/super_call_test.dart
index c9f777f..a5b46da 100644
--- a/tests/compiler/dart2js_extra/super_call_test.dart
+++ b/tests/compiler/dart2js_extra/super_call_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class A {
diff --git a/tests/compiler/dart2js_extra/super_constructor1_test.dart b/tests/compiler/dart2js_extra/super_constructor1_test.dart
index a0aaf86..8c5a760 100644
--- a/tests/compiler/dart2js_extra/super_constructor1_test.dart
+++ b/tests/compiler/dart2js_extra/super_constructor1_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 String message;
diff --git a/tests/compiler/dart2js_extra/super_constructor2_test.dart b/tests/compiler/dart2js_extra/super_constructor2_test.dart
index 73ac20a..8fbe812 100644
--- a/tests/compiler/dart2js_extra/super_constructor2_test.dart
+++ b/tests/compiler/dart2js_extra/super_constructor2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class A {
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin10_test.dart b/tests/compiler/dart2js_extra/supermixin/supermixin10_test.dart
index 361e98b..f0ac915 100644
--- a/tests/compiler/dart2js_extra/supermixin/supermixin10_test.dart
+++ b/tests/compiler/dart2js_extra/supermixin/supermixin10_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 class SuperA {
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin11_test.dart b/tests/compiler/dart2js_extra/supermixin/supermixin11_test.dart
index efd86c0..538391f 100644
--- a/tests/compiler/dart2js_extra/supermixin/supermixin11_test.dart
+++ b/tests/compiler/dart2js_extra/supermixin/supermixin11_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 class SuperA1 {
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin12_test.dart b/tests/compiler/dart2js_extra/supermixin/supermixin12_test.dart
index 81fa7f29..2765557 100644
--- a/tests/compiler/dart2js_extra/supermixin/supermixin12_test.dart
+++ b/tests/compiler/dart2js_extra/supermixin/supermixin12_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 class SuperA {
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin13_test.dart b/tests/compiler/dart2js_extra/supermixin/supermixin13_test.dart
index 142e893..99311fe 100644
--- a/tests/compiler/dart2js_extra/supermixin/supermixin13_test.dart
+++ b/tests/compiler/dart2js_extra/supermixin/supermixin13_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 class SuperA {
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin14_test.dart b/tests/compiler/dart2js_extra/supermixin/supermixin14_test.dart
index 224baa4..4e10577 100644
--- a/tests/compiler/dart2js_extra/supermixin/supermixin14_test.dart
+++ b/tests/compiler/dart2js_extra/supermixin/supermixin14_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 class SuperA {
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin15_test.dart b/tests/compiler/dart2js_extra/supermixin/supermixin15_test.dart
index a2df040..006d1c9 100644
--- a/tests/compiler/dart2js_extra/supermixin/supermixin15_test.dart
+++ b/tests/compiler/dart2js_extra/supermixin/supermixin15_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 class SuperA {
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin16_test.dart b/tests/compiler/dart2js_extra/supermixin/supermixin16_test.dart
index 09e0267..612990e 100644
--- a/tests/compiler/dart2js_extra/supermixin/supermixin16_test.dart
+++ b/tests/compiler/dart2js_extra/supermixin/supermixin16_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 class SuperA1 {}
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin17_test.dart b/tests/compiler/dart2js_extra/supermixin/supermixin17_test.dart
index 14aa9e3..f85910c 100644
--- a/tests/compiler/dart2js_extra/supermixin/supermixin17_test.dart
+++ b/tests/compiler/dart2js_extra/supermixin/supermixin17_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 class S {}
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin18_test.dart b/tests/compiler/dart2js_extra/supermixin/supermixin18_test.dart
index d29409c..bd52195 100644
--- a/tests/compiler/dart2js_extra/supermixin/supermixin18_test.dart
+++ b/tests/compiler/dart2js_extra/supermixin/supermixin18_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 class S {}
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin1_test.dart b/tests/compiler/dart2js_extra/supermixin/supermixin1_test.dart
index 6f6d16a..23fb6be 100644
--- a/tests/compiler/dart2js_extra/supermixin/supermixin1_test.dart
+++ b/tests/compiler/dart2js_extra/supermixin/supermixin1_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 class SuperA {
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin2_test.dart b/tests/compiler/dart2js_extra/supermixin/supermixin2_test.dart
index 846fe88..edf6d4a 100644
--- a/tests/compiler/dart2js_extra/supermixin/supermixin2_test.dart
+++ b/tests/compiler/dart2js_extra/supermixin/supermixin2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 class SuperA {
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin3_test.dart b/tests/compiler/dart2js_extra/supermixin/supermixin3_test.dart
index c5bfca0..f5d2ac5 100644
--- a/tests/compiler/dart2js_extra/supermixin/supermixin3_test.dart
+++ b/tests/compiler/dart2js_extra/supermixin/supermixin3_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 class SuperA {
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin4_test.dart b/tests/compiler/dart2js_extra/supermixin/supermixin4_test.dart
index a450c76..0f9e418 100644
--- a/tests/compiler/dart2js_extra/supermixin/supermixin4_test.dart
+++ b/tests/compiler/dart2js_extra/supermixin/supermixin4_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 class SuperA {
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin5_test.dart b/tests/compiler/dart2js_extra/supermixin/supermixin5_test.dart
index 41ea90c..316ab8d 100644
--- a/tests/compiler/dart2js_extra/supermixin/supermixin5_test.dart
+++ b/tests/compiler/dart2js_extra/supermixin/supermixin5_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 class SuperA {
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin6_test.dart b/tests/compiler/dart2js_extra/supermixin/supermixin6_test.dart
index 86a998f..1d94b58 100644
--- a/tests/compiler/dart2js_extra/supermixin/supermixin6_test.dart
+++ b/tests/compiler/dart2js_extra/supermixin/supermixin6_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 class SuperA {
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin7_test.dart b/tests/compiler/dart2js_extra/supermixin/supermixin7_test.dart
index 80e0a17..b9ab301 100644
--- a/tests/compiler/dart2js_extra/supermixin/supermixin7_test.dart
+++ b/tests/compiler/dart2js_extra/supermixin/supermixin7_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 class SuperA<T> {
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin8_test.dart b/tests/compiler/dart2js_extra/supermixin/supermixin8_test.dart
index 42af785..b93aac6 100644
--- a/tests/compiler/dart2js_extra/supermixin/supermixin8_test.dart
+++ b/tests/compiler/dart2js_extra/supermixin/supermixin8_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 class SuperA<T, S> {
diff --git a/tests/compiler/dart2js_extra/supermixin/supermixin9_test.dart b/tests/compiler/dart2js_extra/supermixin/supermixin9_test.dart
index 41a688f..24c6b12 100644
--- a/tests/compiler/dart2js_extra/supermixin/supermixin9_test.dart
+++ b/tests/compiler/dart2js_extra/supermixin/supermixin9_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 class SuperA<T> {
diff --git a/tests/compiler/dart2js_extra/switch_equals_test.dart b/tests/compiler/dart2js_extra/switch_equals_test.dart
index 72030e6..b628863 100644
--- a/tests/compiler/dart2js_extra/switch_equals_test.dart
+++ b/tests/compiler/dart2js_extra/switch_equals_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class SuperClass {
   const SuperClass();
 
@@ -21,19 +23,29 @@
 }
 
 main() {
-  switch (null) {
+  // This test verifies that when overriding `==` it is a compile time error to
+  // use that class as a key in a switch, but only if the override provides a
+  // body. However, with NNBD, all of these switches became compile time errors
+  // so now we cast `null` as `dynamic` to get these first two switches past
+  // the compiler.
+  switch (null as dynamic) {
     case const SuperClass():
       break;
     default:
   }
-  switch (null) {
+  switch (null as dynamic) {
     case const Class():
       break;
     default:
   }
-  switch (null) {
+  switch (null as dynamic) {
     case const SubClass(): //# 01: compile-time error
       break; //# 01: continued
     default:
   }
+  switch (null) {
+    case null:
+      break;
+    default:
+  }
 }
diff --git a/tests/compiler/dart2js_extra/switch_test.dart b/tests/compiler/dart2js_extra/switch_test.dart
index 9e5eef1..517d4eb 100644
--- a/tests/compiler/dart2js_extra/switch_test.dart
+++ b/tests/compiler/dart2js_extra/switch_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 switcher(val) {
diff --git a/tests/compiler/dart2js_extra/tear_off_types_test.dart b/tests/compiler/dart2js_extra/tear_off_types_test.dart
index d7f6c41..59aef28 100644
--- a/tests/compiler/dart2js_extra/tear_off_types_test.dart
+++ b/tests/compiler/dart2js_extra/tear_off_types_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--omit-implicit-checks
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/this_phi_elimination_test.dart b/tests/compiler/dart2js_extra/this_phi_elimination_test.dart
index 80f7bb0..95679f8 100644
--- a/tests/compiler/dart2js_extra/this_phi_elimination_test.dart
+++ b/tests/compiler/dart2js_extra/this_phi_elimination_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class A {
diff --git a/tests/compiler/dart2js_extra/this_redirecting_constructor_test.dart b/tests/compiler/dart2js_extra/this_redirecting_constructor_test.dart
index feeedd4..32a5fce 100644
--- a/tests/compiler/dart2js_extra/this_redirecting_constructor_test.dart
+++ b/tests/compiler/dart2js_extra/this_redirecting_constructor_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 // Confirm that redirecting named constructors are properly resolved.
diff --git a/tests/compiler/dart2js_extra/this_test.dart b/tests/compiler/dart2js_extra/this_test.dart
index e0804e7..3bc167a 100644
--- a/tests/compiler/dart2js_extra/this_test.dart
+++ b/tests/compiler/dart2js_extra/this_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class A {
diff --git a/tests/compiler/dart2js_extra/throw1_test.dart b/tests/compiler/dart2js_extra/throw1_test.dart
index b91485c..aa79f9f 100644
--- a/tests/compiler/dart2js_extra/throw1_test.dart
+++ b/tests/compiler/dart2js_extra/throw1_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 void main() {
   throw "foo"; // //# 01: runtime error
 }
diff --git a/tests/compiler/dart2js_extra/throw2_test.dart b/tests/compiler/dart2js_extra/throw2_test.dart
index 350ec72..89c7c45 100644
--- a/tests/compiler/dart2js_extra/throw2_test.dart
+++ b/tests/compiler/dart2js_extra/throw2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 void throw1() {
   throw "foo";
 }
diff --git a/tests/compiler/dart2js_extra/timer_test.dart b/tests/compiler/dart2js_extra/timer_test.dart
index 818a6ae..578b5b3 100644
--- a/tests/compiler/dart2js_extra/timer_test.dart
+++ b/tests/compiler/dart2js_extra/timer_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:async';
 import 'dart:isolate';
 
diff --git a/tests/compiler/dart2js_extra/to_string_test.dart b/tests/compiler/dart2js_extra/to_string_test.dart
index 7157548..de328f1 100644
--- a/tests/compiler/dart2js_extra/to_string_test.dart
+++ b/tests/compiler/dart2js_extra/to_string_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 class A extends Object {}
diff --git a/tests/compiler/dart2js_extra/truncation_errors_test.dart b/tests/compiler/dart2js_extra/truncation_errors_test.dart
index 92532f2..a4b24f7 100644
--- a/tests/compiler/dart2js_extra/truncation_errors_test.dart
+++ b/tests/compiler/dart2js_extra/truncation_errors_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Check that exception messages for truncating operations contains the
 // operands.
 
diff --git a/tests/compiler/dart2js_extra/type_argument_factory_crash_test.dart b/tests/compiler/dart2js_extra/type_argument_factory_crash_test.dart
index 36dd8eb..8726cf3 100644
--- a/tests/compiler/dart2js_extra/type_argument_factory_crash_test.dart
+++ b/tests/compiler/dart2js_extra/type_argument_factory_crash_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // A regression test for a dart2js crash.
 library type.argument.factory.crash.test;
 
diff --git a/tests/compiler/dart2js_extra/type_argument_factory_nocrash_test.dart b/tests/compiler/dart2js_extra/type_argument_factory_nocrash_test.dart
index 1708b04..580cebd 100644
--- a/tests/compiler/dart2js_extra/type_argument_factory_nocrash_test.dart
+++ b/tests/compiler/dart2js_extra/type_argument_factory_nocrash_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // A regression test for a dart2js crash.
 library type.argument.factory.nocrash.test;
 
diff --git a/tests/compiler/dart2js_extra/type_argument_optimization_test.dart b/tests/compiler/dart2js_extra/type_argument_optimization_test.dart
index 21b41c5..a80b370 100644
--- a/tests/compiler/dart2js_extra/type_argument_optimization_test.dart
+++ b/tests/compiler/dart2js_extra/type_argument_optimization_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for issue 37267.
 
 typedef UpdateShouldNotify<T> = bool Function(T previous, T current);
diff --git a/tests/compiler/dart2js_extra/type_constant_switch_test.dart b/tests/compiler/dart2js_extra/type_constant_switch_test.dart
index 875c9d8..f3a45b0 100644
--- a/tests/compiler/dart2js_extra/type_constant_switch_test.dart
+++ b/tests/compiler/dart2js_extra/type_constant_switch_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that switching on type literals leads to a compile time error in
 // dart2js since its implementation of [Type] implements 'operator =='.
 
diff --git a/tests/compiler/dart2js_extra/type_error_message_test.dart b/tests/compiler/dart2js_extra/type_error_message_test.dart
index 6f34931..30de186 100644
--- a/tests/compiler/dart2js_extra/type_error_message_test.dart
+++ b/tests/compiler/dart2js_extra/type_error_message_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that the error message for a failing subtype test includes type
 // arguments.
 
diff --git a/tests/compiler/dart2js_extra/type_literal2_test.dart b/tests/compiler/dart2js_extra/type_literal2_test.dart
index 53d06a3..dd0580c 100644
--- a/tests/compiler/dart2js_extra/type_literal2_test.dart
+++ b/tests/compiler/dart2js_extra/type_literal2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:async';
 import 'package:expect/expect.dart';
 
diff --git a/tests/compiler/dart2js_extra/type_literal_test.dart b/tests/compiler/dart2js_extra/type_literal_test.dart
index 4426847..3712300 100644
--- a/tests/compiler/dart2js_extra/type_literal_test.dart
+++ b/tests/compiler/dart2js_extra/type_literal_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--strong
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_extra/typevariable_factory_test.dart b/tests/compiler/dart2js_extra/typevariable_factory_test.dart
index 2f977cf..3c51f03 100644
--- a/tests/compiler/dart2js_extra/typevariable_factory_test.dart
+++ b/tests/compiler/dart2js_extra/typevariable_factory_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test to ensure that we can use type variable in factories.
 
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js_extra/typevariable_substitution_test.dart b/tests/compiler/dart2js_extra/typevariable_substitution_test.dart
index dd5e75f..723b098 100644
--- a/tests/compiler/dart2js_extra/typevariable_substitution_test.dart
+++ b/tests/compiler/dart2js_extra/typevariable_substitution_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test to ensure that we substitute type variables in is-tests.
 
 import "package:expect/expect.dart";
diff --git a/tests/compiler/dart2js_extra/typevariable_typedef_test.dart b/tests/compiler/dart2js_extra/typevariable_typedef_test.dart
index 5dc6d2b..6ac736e 100644
--- a/tests/compiler/dart2js_extra/typevariable_typedef_test.dart
+++ b/tests/compiler/dart2js_extra/typevariable_typedef_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 typedef T Func<T>(T x);
diff --git a/tests/compiler/dart2js_extra/unconditional_dartio_import_test.dart b/tests/compiler/dart2js_extra/unconditional_dartio_import_test.dart
index d6c869a..fd07b70 100644
--- a/tests/compiler/dart2js_extra/unconditional_dartio_import_test.dart
+++ b/tests/compiler/dart2js_extra/unconditional_dartio_import_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 /// Tests that dart2js allows to import dart:io for web clients, but it
 /// continues to indicate that it is not supported (so config-specific imports
 /// continue to have the same semantics as before).
diff --git a/tests/compiler/dart2js_extra/unused_local_const_test.dart b/tests/compiler/dart2js_extra/unused_local_const_test.dart
index 5829129..77ef3f1 100644
--- a/tests/compiler/dart2js_extra/unused_local_const_test.dart
+++ b/tests/compiler/dart2js_extra/unused_local_const_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 class A {
   const A();
 
diff --git a/tests/compiler/dart2js_extra/useful_error_message_1_test.dart b/tests/compiler/dart2js_extra/useful_error_message_1_test.dart
index 7fbaa6b..07e8dcd 100644
--- a/tests/compiler/dart2js_extra/useful_error_message_1_test.dart
+++ b/tests/compiler/dart2js_extra/useful_error_message_1_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that closures have a useful string that identifies the function by name
 // in error messages.
 
diff --git a/tests/compiler/dart2js_extra/while_test.dart b/tests/compiler/dart2js_extra/while_test.dart
index 4ac3ec3..ce18e73 100644
--- a/tests/compiler/dart2js_extra/while_test.dart
+++ b/tests/compiler/dart2js_extra/while_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 
 void while1() {
diff --git a/tests/compiler/dart2js_native/abstract_class_test.dart b/tests/compiler/dart2js_native/abstract_class_test.dart
index 6773385..988157c 100644
--- a/tests/compiler/dart2js_native/abstract_class_test.dart
+++ b/tests/compiler/dart2js_native/abstract_class_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 // Native classes can have subclasses that are not declared to the program.  The
diff --git a/tests/compiler/dart2js_native/bound_closure_super_test.dart b/tests/compiler/dart2js_native/bound_closure_super_test.dart
index d97d8e1..67c36ed 100644
--- a/tests/compiler/dart2js_native/bound_closure_super_test.dart
+++ b/tests/compiler/dart2js_native/bound_closure_super_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test calling convention of property extraction closures (super edition).
 library bound_closure_super_test;
 
diff --git a/tests/compiler/dart2js_native/bound_closure_test.dart b/tests/compiler/dart2js_native/bound_closure_test.dart
index 3509722..09bc341 100644
--- a/tests/compiler/dart2js_native/bound_closure_test.dart
+++ b/tests/compiler/dart2js_native/bound_closure_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'native_testing.dart';
 
 // Test calling convention of property extraction closures.
diff --git a/tests/compiler/dart2js_native/browser_compat_1_prepatched_test.dart b/tests/compiler/dart2js_native/browser_compat_1_prepatched_test.dart
index bfd62f5..01fb0fe 100644
--- a/tests/compiler/dart2js_native/browser_compat_1_prepatched_test.dart
+++ b/tests/compiler/dart2js_native/browser_compat_1_prepatched_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 // Test for dartNativeDispatchHooksTransformer, getTag hook.
diff --git a/tests/compiler/dart2js_native/browser_compat_1_unpatched_test.dart b/tests/compiler/dart2js_native/browser_compat_1_unpatched_test.dart
index 779b72a..1f1e0fc 100644
--- a/tests/compiler/dart2js_native/browser_compat_1_unpatched_test.dart
+++ b/tests/compiler/dart2js_native/browser_compat_1_unpatched_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 // Test for dartNativeDispatchHooksTransformer, getTag hook.
diff --git a/tests/compiler/dart2js_native/browser_compat_2_test.dart b/tests/compiler/dart2js_native/browser_compat_2_test.dart
index aa8f131..349c9a7 100644
--- a/tests/compiler/dart2js_native/browser_compat_2_test.dart
+++ b/tests/compiler/dart2js_native/browser_compat_2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 // Test for dartNativeDispatchHooksTransformer
diff --git a/tests/compiler/dart2js_native/catch_javascript_null_stack_trace_test.dart b/tests/compiler/dart2js_native/catch_javascript_null_stack_trace_test.dart
index cf9f528..e9b4ad1 100644
--- a/tests/compiler/dart2js_native/catch_javascript_null_stack_trace_test.dart
+++ b/tests/compiler/dart2js_native/catch_javascript_null_stack_trace_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'native_testing.dart';
 
 // Try throwing a javascript null, and getting a stack-trace from it.
diff --git a/tests/compiler/dart2js_native/compiler_test_internals.dart b/tests/compiler/dart2js_native/compiler_test_internals.dart
index 08e96d0..c7b0218 100644
--- a/tests/compiler/dart2js_native/compiler_test_internals.dart
+++ b/tests/compiler/dart2js_native/compiler_test_internals.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library compiler_test_internals;
 
 export 'dart:_js_helper' show NoSideEffects, NoThrows, NoInline;
diff --git a/tests/compiler/dart2js_native/compute_this_script_test.dart b/tests/compiler/dart2js_native/compute_this_script_test.dart
index ee5c855..45f26cc 100644
--- a/tests/compiler/dart2js_native/compute_this_script_test.dart
+++ b/tests/compiler/dart2js_native/compute_this_script_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test of _computeThisScript().
 
 import 'dart:_js_helper' show thisScript;
diff --git a/tests/compiler/dart2js_native/core_type_check_native_test.dart b/tests/compiler/dart2js_native/core_type_check_native_test.dart
index 6356192..a7b6d8b 100644
--- a/tests/compiler/dart2js_native/core_type_check_native_test.dart
+++ b/tests/compiler/dart2js_native/core_type_check_native_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 @Native("A")
diff --git a/tests/compiler/dart2js_native/dispatch_property_initialization_test.dart b/tests/compiler/dart2js_native/dispatch_property_initialization_test.dart
index 4e4ed95..d5c90b7 100644
--- a/tests/compiler/dart2js_native/dispatch_property_initialization_test.dart
+++ b/tests/compiler/dart2js_native/dispatch_property_initialization_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test for initialization of dispatchPropertyName.
 
 import 'native_testing.dart';
diff --git a/tests/compiler/dart2js_native/downcast_test.dart b/tests/compiler/dart2js_native/downcast_test.dart
index ab74f5f..f479b77 100644
--- a/tests/compiler/dart2js_native/downcast_test.dart
+++ b/tests/compiler/dart2js_native/downcast_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test for downcasts on native classes.
 
 import "native_testing.dart";
diff --git a/tests/compiler/dart2js_native/error_safeToString_test.dart b/tests/compiler/dart2js_native/error_safeToString_test.dart
index 115c908..8b9acce0 100644
--- a/tests/compiler/dart2js_native/error_safeToString_test.dart
+++ b/tests/compiler/dart2js_native/error_safeToString_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 import 'dart:_foreign_helper' show JS_INTERCEPTOR_CONSTANT;
 import 'dart:_interceptors'
diff --git a/tests/compiler/dart2js_native/event_loop_test.dart b/tests/compiler/dart2js_native/event_loop_test.dart
index e69d542..1fc7b1d 100644
--- a/tests/compiler/dart2js_native/event_loop_test.dart
+++ b/tests/compiler/dart2js_native/event_loop_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "dart:async";
 import "package:async_helper/async_helper.dart";
 import "native_testing.dart";
diff --git a/tests/compiler/dart2js_native/fake_thing_2_test.dart b/tests/compiler/dart2js_native/fake_thing_2_test.dart
index f630746..7209073 100644
--- a/tests/compiler/dart2js_native/fake_thing_2_test.dart
+++ b/tests/compiler/dart2js_native/fake_thing_2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'native_testing.dart';
 
 // Test that native objects cannot accidentally or maliciously be mistaken for
diff --git a/tests/compiler/dart2js_native/fake_thing_test.dart b/tests/compiler/dart2js_native/fake_thing_test.dart
index 0131821..8e1ca18 100644
--- a/tests/compiler/dart2js_native/fake_thing_test.dart
+++ b/tests/compiler/dart2js_native/fake_thing_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "package:expect/expect.dart";
 import "dart:_foreign_helper" show JS;
 
diff --git a/tests/compiler/dart2js_native/field_type2_test.dart b/tests/compiler/dart2js_native/field_type2_test.dart
index 3bc2e10..abf0d94 100644
--- a/tests/compiler/dart2js_native/field_type2_test.dart
+++ b/tests/compiler/dart2js_native/field_type2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that a closure call on a native field is recognized by the
 // type inferrer.
 
diff --git a/tests/compiler/dart2js_native/field_type_test.dart b/tests/compiler/dart2js_native/field_type_test.dart
index 8e2e83d..e59ad72 100644
--- a/tests/compiler/dart2js_native/field_type_test.dart
+++ b/tests/compiler/dart2js_native/field_type_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // A native class has no defined constructor.
 // This regression test verifies that compiler accounts for hidden constructor
 // when analysing field values.
diff --git a/tests/compiler/dart2js_native/fixup_get_tag_test.dart b/tests/compiler/dart2js_native/fixup_get_tag_test.dart
index e4e1ab8..8853041 100644
--- a/tests/compiler/dart2js_native/fixup_get_tag_test.dart
+++ b/tests/compiler/dart2js_native/fixup_get_tag_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 // Test for dartExperimentalFixupGetTag.
diff --git a/tests/compiler/dart2js_native/foreign_test.dart b/tests/compiler/dart2js_native/foreign_test.dart
index 31ab23b..3553d28 100644
--- a/tests/compiler/dart2js_native/foreign_test.dart
+++ b/tests/compiler/dart2js_native/foreign_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 foreign1(var a, var b) {
diff --git a/tests/compiler/dart2js_native/hash_code_test.dart b/tests/compiler/dart2js_native/hash_code_test.dart
index 137be8f..9024625 100644
--- a/tests/compiler/dart2js_native/hash_code_test.dart
+++ b/tests/compiler/dart2js_native/hash_code_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'native_testing.dart';
 
 @Native("A")
diff --git a/tests/compiler/dart2js_native/inference_of_helper_methods_test.dart b/tests/compiler/dart2js_native/inference_of_helper_methods_test.dart
index 3185f05..f0d426c 100644
--- a/tests/compiler/dart2js_native/inference_of_helper_methods_test.dart
+++ b/tests/compiler/dart2js_native/inference_of_helper_methods_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'native_testing.dart';
 import 'dart:_js_helper' show intTypeCheck;
 
diff --git a/tests/compiler/dart2js_native/internal_library_test.dart b/tests/compiler/dart2js_native/internal_library_test.dart
index 7f81f6c..e08339c 100644
--- a/tests/compiler/dart2js_native/internal_library_test.dart
+++ b/tests/compiler/dart2js_native/internal_library_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that a private library can be accessed from libraries in this special
 // test folder.
 
diff --git a/tests/compiler/dart2js_native/is_check_test.dart b/tests/compiler/dart2js_native/is_check_test.dart
index ec1d703..13d2599 100644
--- a/tests/compiler/dart2js_native/is_check_test.dart
+++ b/tests/compiler/dart2js_native/is_check_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'native_testing.dart';
 
 @Native("A")
diff --git a/tests/compiler/dart2js_native/issue9182_test.dart b/tests/compiler/dart2js_native/issue9182_test.dart
index 62a0a60..cfbb2b2 100644
--- a/tests/compiler/dart2js_native/issue9182_test.dart
+++ b/tests/compiler/dart2js_native/issue9182_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for Issue 9182.  The generative constructor body function
 // should not have the interceptor calling convention.
 
diff --git a/tests/compiler/dart2js_native/js_const_test.dart b/tests/compiler/dart2js_native/js_const_test.dart
index d777e1e..a119f54 100644
--- a/tests/compiler/dart2js_native/js_const_test.dart
+++ b/tests/compiler/dart2js_native/js_const_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'package:expect/expect.dart';
 
 import 'dart:_foreign_helper' show JS, JS_CONST;
diff --git a/tests/compiler/dart2js_native/js_constant_test.dart b/tests/compiler/dart2js_native/js_constant_test.dart
index 40ce27c..1ff176a 100644
--- a/tests/compiler/dart2js_native/js_constant_test.dart
+++ b/tests/compiler/dart2js_native/js_constant_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'native_testing.dart';
 
 // Negative constant numbers must be generated as negation, not just a literal
diff --git a/tests/compiler/dart2js_native/jsobject_test.dart b/tests/compiler/dart2js_native/jsobject_test.dart
index dd0ec8e..f5febe0 100644
--- a/tests/compiler/dart2js_native/jsobject_test.dart
+++ b/tests/compiler/dart2js_native/jsobject_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'native_testing.dart';
 import 'dart:_js_helper' show setNativeSubclassDispatchRecord;
 import 'dart:_interceptors'
diff --git a/tests/compiler/dart2js_native/load_elim_refinement_test.dart b/tests/compiler/dart2js_native/load_elim_refinement_test.dart
index ee9dfee..a4ed700 100644
--- a/tests/compiler/dart2js_native/load_elim_refinement_test.dart
+++ b/tests/compiler/dart2js_native/load_elim_refinement_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'native_testing.dart';
 
 class A {
diff --git a/tests/compiler/dart2js_native/native_call_arity1_frog_test.dart b/tests/compiler/dart2js_native/native_call_arity1_frog_test.dart
index f590001..c7041fd 100644
--- a/tests/compiler/dart2js_native/native_call_arity1_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_call_arity1_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 // Test that native methods with unnamed* optional arguments are called with the
diff --git a/tests/compiler/dart2js_native/native_call_arity2_frog_test.dart b/tests/compiler/dart2js_native/native_call_arity2_frog_test.dart
index 1646809..b66ddce 100644
--- a/tests/compiler/dart2js_native/native_call_arity2_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_call_arity2_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 // This is a similar test to NativeCallArity1FrogTest, but makes sure
diff --git a/tests/compiler/dart2js_native/native_call_arity3_frog_test.dart b/tests/compiler/dart2js_native/native_call_arity3_frog_test.dart
index 3be4585..28e0412 100644
--- a/tests/compiler/dart2js_native/native_call_arity3_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_call_arity3_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 // Test similar to NativeCallArity1FrogTest, but with default values to
diff --git a/tests/compiler/dart2js_native/native_checked_arguments1_frog_test.dart b/tests/compiler/dart2js_native/native_checked_arguments1_frog_test.dart
index ddce60e..ff52fa3 100644
--- a/tests/compiler/dart2js_native/native_checked_arguments1_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_checked_arguments1_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'native_testing.dart';
 
 // Test that type checks occur on native methods.
diff --git a/tests/compiler/dart2js_native/native_checked_fields_frog_test.dart b/tests/compiler/dart2js_native/native_checked_fields_frog_test.dart
index f9fdece..76f512d 100644
--- a/tests/compiler/dart2js_native/native_checked_fields_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_checked_fields_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'native_testing.dart';
 
 // Test that type checks occur on assignment to fields of native methods.
diff --git a/tests/compiler/dart2js_native/native_class_avoids_hidden_name_frog_test.dart b/tests/compiler/dart2js_native/native_class_avoids_hidden_name_frog_test.dart
index 6e4a95c..488cd67 100644
--- a/tests/compiler/dart2js_native/native_class_avoids_hidden_name_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_class_avoids_hidden_name_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 // Test that hidden native class names are not used by generated code.
diff --git a/tests/compiler/dart2js_native/native_class_fields_2_test.dart b/tests/compiler/dart2js_native/native_class_fields_2_test.dart
index 3b3d265..b8b031e 100644
--- a/tests/compiler/dart2js_native/native_class_fields_2_test.dart
+++ b/tests/compiler/dart2js_native/native_class_fields_2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 // Verify that methods are not renamed to clash with native field names
diff --git a/tests/compiler/dart2js_native/native_class_fields_3_test.dart b/tests/compiler/dart2js_native/native_class_fields_3_test.dart
index 4812292..ad96532 100644
--- a/tests/compiler/dart2js_native/native_class_fields_3_test.dart
+++ b/tests/compiler/dart2js_native/native_class_fields_3_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 // Verify that we can have fields with names that start with g and s even
diff --git a/tests/compiler/dart2js_native/native_class_fields_test.dart b/tests/compiler/dart2js_native/native_class_fields_test.dart
index e37adbe..a960803 100644
--- a/tests/compiler/dart2js_native/native_class_fields_test.dart
+++ b/tests/compiler/dart2js_native/native_class_fields_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 // Verify that native fields on classes are not renamed by the minifier.
diff --git a/tests/compiler/dart2js_native/native_class_inheritance1_frog_test.dart b/tests/compiler/dart2js_native/native_class_inheritance1_frog_test.dart
index 322dcba..298a5f7 100644
--- a/tests/compiler/dart2js_native/native_class_inheritance1_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_class_inheritance1_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 // Test to see if resolving a hidden native class's method interferes with
diff --git a/tests/compiler/dart2js_native/native_class_inheritance2_frog_test.dart b/tests/compiler/dart2js_native/native_class_inheritance2_frog_test.dart
index 8fa4b67..865ff93 100644
--- a/tests/compiler/dart2js_native/native_class_inheritance2_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_class_inheritance2_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 // Test to see if resolving a hidden native class's method interferes with
diff --git a/tests/compiler/dart2js_native/native_class_inheritance3_frog_test.dart b/tests/compiler/dart2js_native/native_class_inheritance3_frog_test.dart
index af5a8e3..d6bc323 100644
--- a/tests/compiler/dart2js_native/native_class_inheritance3_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_class_inheritance3_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 // Test to see if resolving a hidden native class's method to noSuchMethod
diff --git a/tests/compiler/dart2js_native/native_class_inheritance4_frog_test.dart b/tests/compiler/dart2js_native/native_class_inheritance4_frog_test.dart
index 25f8fcd..c230a0e 100644
--- a/tests/compiler/dart2js_native/native_class_inheritance4_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_class_inheritance4_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 // Additional Dart code may be 'placed on' hidden native classes.  With
diff --git a/tests/compiler/dart2js_native/native_class_is_check1_frog_test.dart b/tests/compiler/dart2js_native/native_class_is_check1_frog_test.dart
index 6b8bb37..0294507 100644
--- a/tests/compiler/dart2js_native/native_class_is_check1_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_class_is_check1_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 // Test for correct simple is-checks on hidden native classes.
diff --git a/tests/compiler/dart2js_native/native_class_is_check3_frog_test.dart b/tests/compiler/dart2js_native/native_class_is_check3_frog_test.dart
index 98cbf91..fdd225a 100644
--- a/tests/compiler/dart2js_native/native_class_is_check3_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_class_is_check3_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 // Test for correct simple is-checks on hidden native classes.
diff --git a/tests/compiler/dart2js_native/native_class_with_dart_methods_frog_test.dart b/tests/compiler/dart2js_native/native_class_with_dart_methods_frog_test.dart
index 574e684..c3061d8 100644
--- a/tests/compiler/dart2js_native/native_class_with_dart_methods_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_class_with_dart_methods_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'native_testing.dart';
 
 // Additional Dart code may be 'placed on' hidden native classes.
diff --git a/tests/compiler/dart2js_native/native_closure_identity_frog_test.dart b/tests/compiler/dart2js_native/native_closure_identity_frog_test.dart
index c5f5084..2f85058 100644
--- a/tests/compiler/dart2js_native/native_closure_identity_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_closure_identity_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'native_testing.dart';
 
 typedef MyFunctionType();
diff --git a/tests/compiler/dart2js_native/native_constructor_name_test.dart b/tests/compiler/dart2js_native/native_constructor_name_test.dart
index 9d60a40..1dc6d6c 100644
--- a/tests/compiler/dart2js_native/native_constructor_name_test.dart
+++ b/tests/compiler/dart2js_native/native_constructor_name_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test to see if a Dart class name is confused with dispatch tag.  Both class A
 // and class Z have a JavaScript constructor named "A".  The dynamic native
 // class dispatch hook on Object.prototype should avoid patching the Dart class
diff --git a/tests/compiler/dart2js_native/native_equals_frog_test.dart b/tests/compiler/dart2js_native/native_equals_frog_test.dart
index 0b460b9..1b5b38b 100644
--- a/tests/compiler/dart2js_native/native_equals_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_equals_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'native_testing.dart';
 
 @Native("A")
diff --git a/tests/compiler/dart2js_native/native_exception2_test.dart b/tests/compiler/dart2js_native/native_exception2_test.dart
index 59cf5b0..4bbc029 100644
--- a/tests/compiler/dart2js_native/native_exception2_test.dart
+++ b/tests/compiler/dart2js_native/native_exception2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Similar to native_exception_test.dart but also defines a native
 // class.  This exercises a different code path in emitter.dart.
 
diff --git a/tests/compiler/dart2js_native/native_exception_test.dart b/tests/compiler/dart2js_native/native_exception_test.dart
index e3e4a98..c3684b4 100644
--- a/tests/compiler/dart2js_native/native_exception_test.dart
+++ b/tests/compiler/dart2js_native/native_exception_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that dart2js can handle unexpected exception types.
 
 library native_exception_test;
diff --git a/tests/compiler/dart2js_native/native_exceptions1_frog_test.dart b/tests/compiler/dart2js_native/native_exceptions1_frog_test.dart
index 497a80c..084075e 100644
--- a/tests/compiler/dart2js_native/native_exceptions1_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_exceptions1_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'native_testing.dart';
 
 // Test that hidden native exception classes can be marked as existing.
diff --git a/tests/compiler/dart2js_native/native_field_invocation2_test.dart b/tests/compiler/dart2js_native/native_field_invocation2_test.dart
index 9c150687..2a4d013 100644
--- a/tests/compiler/dart2js_native/native_field_invocation2_test.dart
+++ b/tests/compiler/dart2js_native/native_field_invocation2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 @Native("NNative")
diff --git a/tests/compiler/dart2js_native/native_field_invocation3_test.dart b/tests/compiler/dart2js_native/native_field_invocation3_test.dart
index 9ed3d9c..8e0d918 100644
--- a/tests/compiler/dart2js_native/native_field_invocation3_test.dart
+++ b/tests/compiler/dart2js_native/native_field_invocation3_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 makeCC() native;
diff --git a/tests/compiler/dart2js_native/native_field_invocation4_test.dart b/tests/compiler/dart2js_native/native_field_invocation4_test.dart
index afce3c09..7e5b0d4 100644
--- a/tests/compiler/dart2js_native/native_field_invocation4_test.dart
+++ b/tests/compiler/dart2js_native/native_field_invocation4_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 @Native("A")
diff --git a/tests/compiler/dart2js_native/native_field_invocation5_test.dart b/tests/compiler/dart2js_native/native_field_invocation5_test.dart
index abd0169..5e9e853 100644
--- a/tests/compiler/dart2js_native/native_field_invocation5_test.dart
+++ b/tests/compiler/dart2js_native/native_field_invocation5_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 makeCC() native;
diff --git a/tests/compiler/dart2js_native/native_field_invocation6_test.dart b/tests/compiler/dart2js_native/native_field_invocation6_test.dart
index 17ed660..3ca229f 100644
--- a/tests/compiler/dart2js_native/native_field_invocation6_test.dart
+++ b/tests/compiler/dart2js_native/native_field_invocation6_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 makeA() native;
diff --git a/tests/compiler/dart2js_native/native_field_invocation_test.dart b/tests/compiler/dart2js_native/native_field_invocation_test.dart
index e6f13b6..65077fe 100644
--- a/tests/compiler/dart2js_native/native_field_invocation_test.dart
+++ b/tests/compiler/dart2js_native/native_field_invocation_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 @Native("A")
diff --git a/tests/compiler/dart2js_native/native_field_name_test.dart b/tests/compiler/dart2js_native/native_field_name_test.dart
index 66e25ac..c03a88d 100644
--- a/tests/compiler/dart2js_native/native_field_name_test.dart
+++ b/tests/compiler/dart2js_native/native_field_name_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'native_testing.dart';
 
 // Check that native fields are not incorrectly renamed.
diff --git a/tests/compiler/dart2js_native/native_field_optimization_test.dart b/tests/compiler/dart2js_native/native_field_optimization_test.dart
index 5b7e061..6b5a976 100644
--- a/tests/compiler/dart2js_native/native_field_optimization_test.dart
+++ b/tests/compiler/dart2js_native/native_field_optimization_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'native_testing.dart';
 
 // Test that compiler is cautious with optimizations on native fields.  The
diff --git a/tests/compiler/dart2js_native/native_field_rename_1_frog_test.dart b/tests/compiler/dart2js_native/native_field_rename_1_frog_test.dart
index 5fd6602..11420c4 100644
--- a/tests/compiler/dart2js_native/native_field_rename_1_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_field_rename_1_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // A native method prevents other members from having that name, including
 // fields.  However, native fields keep their name.  The implication: a getter
 // for the field must be based on the field's name, not the field's jsname.
diff --git a/tests/compiler/dart2js_native/native_field_rename_2_frog_test.dart b/tests/compiler/dart2js_native/native_field_rename_2_frog_test.dart
index 2c44d54..1591a28 100644
--- a/tests/compiler/dart2js_native/native_field_rename_2_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_field_rename_2_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // A native method prevents other members from having that name, including
 // fields.  However, native fields keep their name.  The implication: a getter
 // for the field must be based on the field's name, not the field's jsname.
diff --git a/tests/compiler/dart2js_native/native_library_same_name_used_frog_test.dart b/tests/compiler/dart2js_native/native_library_same_name_used_frog_test.dart
index 4909b7f..974bf07 100644
--- a/tests/compiler/dart2js_native/native_library_same_name_used_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_library_same_name_used_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test for correct hidden native class when abstract class has same name.
 
 library main;
diff --git a/tests/compiler/dart2js_native/native_library_same_name_used_lib1.dart b/tests/compiler/dart2js_native/native_library_same_name_used_lib1.dart
index 5046ff7..9e21adf 100644
--- a/tests/compiler/dart2js_native/native_library_same_name_used_lib1.dart
+++ b/tests/compiler/dart2js_native/native_library_same_name_used_lib1.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // 'I' is the name of an abstract class and the name of the native class.
 
 library native_library_same_name_used_lib1;
diff --git a/tests/compiler/dart2js_native/native_library_same_name_used_lib2.dart b/tests/compiler/dart2js_native/native_library_same_name_used_lib2.dart
index feec6bb..bec6852 100644
--- a/tests/compiler/dart2js_native/native_library_same_name_used_lib2.dart
+++ b/tests/compiler/dart2js_native/native_library_same_name_used_lib2.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Native implementation.
 
 library lib2;
diff --git a/tests/compiler/dart2js_native/native_method_inlining_test.dart b/tests/compiler/dart2js_native/native_method_inlining_test.dart
index ba0ee3b..0df556d 100644
--- a/tests/compiler/dart2js_native/native_method_inlining_test.dart
+++ b/tests/compiler/dart2js_native/native_method_inlining_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2jsOptions=--omit-implicit-checks
 
 // Test that native methods with unnamed optional arguments are called with the
diff --git a/tests/compiler/dart2js_native/native_method_rename1_frog_test.dart b/tests/compiler/dart2js_native/native_method_rename1_frog_test.dart
index 5d05694..65d0741 100644
--- a/tests/compiler/dart2js_native/native_method_rename1_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_method_rename1_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test the feature where the native string declares the native method's name.
 
 import 'native_testing.dart';
diff --git a/tests/compiler/dart2js_native/native_method_rename2_frog_test.dart b/tests/compiler/dart2js_native/native_method_rename2_frog_test.dart
index 35713a2..d2c5b49 100644
--- a/tests/compiler/dart2js_native/native_method_rename2_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_method_rename2_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test the feature where the native string declares the native method's name.
 
 import "native_testing.dart";
diff --git a/tests/compiler/dart2js_native/native_method_rename3_frog_test.dart b/tests/compiler/dart2js_native/native_method_rename3_frog_test.dart
index c5759b2..b2875a9 100644
--- a/tests/compiler/dart2js_native/native_method_rename3_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_method_rename3_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test the feature where the native string declares the native method's name.
 // #3. The name does not get
 
diff --git a/tests/compiler/dart2js_native/native_method_with_keyword_name_test.dart b/tests/compiler/dart2js_native/native_method_with_keyword_name_test.dart
index c535d90..1245550 100644
--- a/tests/compiler/dart2js_native/native_method_with_keyword_name_test.dart
+++ b/tests/compiler/dart2js_native/native_method_with_keyword_name_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'native_testing.dart';
 
 // Make sure we can have a native with a name that is a JavaScript keyword.
diff --git a/tests/compiler/dart2js_native/native_missing_method1_frog_test.dart b/tests/compiler/dart2js_native/native_missing_method1_frog_test.dart
index d0595f6..e083b17 100644
--- a/tests/compiler/dart2js_native/native_missing_method1_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_missing_method1_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'native_testing.dart';
 
 @Native("A")
diff --git a/tests/compiler/dart2js_native/native_missing_method2_frog_test.dart b/tests/compiler/dart2js_native/native_missing_method2_frog_test.dart
index ae5799f..7b96c87 100644
--- a/tests/compiler/dart2js_native/native_missing_method2_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_missing_method2_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'native_testing.dart';
 
 @Native("A")
diff --git a/tests/compiler/dart2js_native/native_mixin_field2_test.dart b/tests/compiler/dart2js_native/native_mixin_field2_test.dart
index 4612391..a2b9062 100644
--- a/tests/compiler/dart2js_native/native_mixin_field2_test.dart
+++ b/tests/compiler/dart2js_native/native_mixin_field2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 // Test that native classes can use ordinary Dart classes with fields
diff --git a/tests/compiler/dart2js_native/native_mixin_field_test.dart b/tests/compiler/dart2js_native/native_mixin_field_test.dart
index 7f1aebb..bc7d36c 100644
--- a/tests/compiler/dart2js_native/native_mixin_field_test.dart
+++ b/tests/compiler/dart2js_native/native_mixin_field_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 // Test that native classes can use ordinary Dart classes with fields
diff --git a/tests/compiler/dart2js_native/native_mixin_multiple2_test.dart b/tests/compiler/dart2js_native/native_mixin_multiple2_test.dart
index 0747e6b..aa95f87 100644
--- a/tests/compiler/dart2js_native/native_mixin_multiple2_test.dart
+++ b/tests/compiler/dart2js_native/native_mixin_multiple2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 // Test that native classes can access methods defined only by mixins.
diff --git a/tests/compiler/dart2js_native/native_mixin_multiple3_test.dart b/tests/compiler/dart2js_native/native_mixin_multiple3_test.dart
index 1963186..9992295 100644
--- a/tests/compiler/dart2js_native/native_mixin_multiple3_test.dart
+++ b/tests/compiler/dart2js_native/native_mixin_multiple3_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 // Test that native classes and plain classes can access methods defined only by
diff --git a/tests/compiler/dart2js_native/native_mixin_multiple_test.dart b/tests/compiler/dart2js_native/native_mixin_multiple_test.dart
index 310d75b..377353c 100644
--- a/tests/compiler/dart2js_native/native_mixin_multiple_test.dart
+++ b/tests/compiler/dart2js_native/native_mixin_multiple_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 // Test that native classes can use ordinary Dart classes as mixins.
diff --git a/tests/compiler/dart2js_native/native_mixin_test.dart b/tests/compiler/dart2js_native/native_mixin_test.dart
index 64bd3e4..096f39e 100644
--- a/tests/compiler/dart2js_native/native_mixin_test.dart
+++ b/tests/compiler/dart2js_native/native_mixin_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 // Test that native classes can use ordinary Dart classes as mixins.
diff --git a/tests/compiler/dart2js_native/native_mixin_with_plain_test.dart b/tests/compiler/dart2js_native/native_mixin_with_plain_test.dart
index aea5e67..d3ad80c 100644
--- a/tests/compiler/dart2js_native/native_mixin_with_plain_test.dart
+++ b/tests/compiler/dart2js_native/native_mixin_with_plain_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 // Test that native classes and ordinary Dart classes can both use the same
diff --git a/tests/compiler/dart2js_native/native_named_constructors2_frog_test.dart b/tests/compiler/dart2js_native/native_named_constructors2_frog_test.dart
index b200628..916b9ec 100644
--- a/tests/compiler/dart2js_native/native_named_constructors2_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_named_constructors2_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 // Native class with named constructors and static methods.
diff --git a/tests/compiler/dart2js_native/native_named_constructors3_frog_test.dart b/tests/compiler/dart2js_native/native_named_constructors3_frog_test.dart
index 949a405..d90df20 100644
--- a/tests/compiler/dart2js_native/native_named_constructors3_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_named_constructors3_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 // Hidden native class with factory constructors and NO static methods.
diff --git a/tests/compiler/dart2js_native/native_no_such_method_exception2_frog_test.dart b/tests/compiler/dart2js_native/native_no_such_method_exception2_frog_test.dart
index 5df3c12..b562085 100644
--- a/tests/compiler/dart2js_native/native_no_such_method_exception2_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_no_such_method_exception2_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 @Native("A")
diff --git a/tests/compiler/dart2js_native/native_no_such_method_exception_frog_test.dart b/tests/compiler/dart2js_native/native_no_such_method_exception_frog_test.dart
index c4a7951..857bf54 100644
--- a/tests/compiler/dart2js_native/native_no_such_method_exception_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_no_such_method_exception_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 @Native("A")
diff --git a/tests/compiler/dart2js_native/native_novel_html_test.dart b/tests/compiler/dart2js_native/native_novel_html_test.dart
index 19f9eca..fdd3e1f 100644
--- a/tests/compiler/dart2js_native/native_novel_html_test.dart
+++ b/tests/compiler/dart2js_native/native_novel_html_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'native_testing.dart';
 
 // Test to see if novel HTML tags are interpreted as HTMLElement.
diff --git a/tests/compiler/dart2js_native/native_null_closure_frog_test.dart b/tests/compiler/dart2js_native/native_null_closure_frog_test.dart
index 1768cac..a7c83a3 100644
--- a/tests/compiler/dart2js_native/native_null_closure_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_null_closure_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test that exception unwrapping handle cases like ({foo:null}).foo().
 
 import "native_testing.dart";
diff --git a/tests/compiler/dart2js_native/native_null_frog_test.dart b/tests/compiler/dart2js_native/native_null_frog_test.dart
index 0abdd35..9cf083d 100644
--- a/tests/compiler/dart2js_native/native_null_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_null_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 // Test for values of some basic types.
diff --git a/tests/compiler/dart2js_native/native_property_frog_test.dart b/tests/compiler/dart2js_native/native_property_frog_test.dart
index 0c4d3ef..2deeed5 100644
--- a/tests/compiler/dart2js_native/native_property_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_property_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Properties on hidden native classes.
 
 import 'native_testing.dart';
diff --git a/tests/compiler/dart2js_native/native_test.dart b/tests/compiler/dart2js_native/native_test.dart
index 0eb52d6..dc14fe6 100644
--- a/tests/compiler/dart2js_native/native_test.dart
+++ b/tests/compiler/dart2js_native/native_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Test for positive and negative uses of named declarations. This file is
 // also used in tests/compiler/dart2js/model/native_test.dart.
 
diff --git a/tests/compiler/dart2js_native/native_testing.dart b/tests/compiler/dart2js_native/native_testing.dart
index 5dcaa24..9eb9246 100644
--- a/tests/compiler/dart2js_native/native_testing.dart
+++ b/tests/compiler/dart2js_native/native_testing.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Native testing library. Provides support for mock @Native classes and
 // collects common imports.
 
diff --git a/tests/compiler/dart2js_native/native_to_string_frog_test.dart b/tests/compiler/dart2js_native/native_to_string_frog_test.dart
index 6fdca6f..f17ad7b 100644
--- a/tests/compiler/dart2js_native/native_to_string_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_to_string_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'native_testing.dart';
 
 @Native("A")
diff --git a/tests/compiler/dart2js_native/native_use_native_name_in_table_frog_test.dart b/tests/compiler/dart2js_native/native_use_native_name_in_table_frog_test.dart
index 0bd930a..ef7b2a7 100644
--- a/tests/compiler/dart2js_native/native_use_native_name_in_table_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_use_native_name_in_table_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'native_testing.dart';
 
 // Test that we put native names and not Dart names into the dynamic
diff --git a/tests/compiler/dart2js_native/native_window1_frog_test.dart b/tests/compiler/dart2js_native/native_window1_frog_test.dart
index f47b66d..add29bc 100644
--- a/tests/compiler/dart2js_native/native_window1_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_window1_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 abstract class Window {
diff --git a/tests/compiler/dart2js_native/native_window2_frog_test.dart b/tests/compiler/dart2js_native/native_window2_frog_test.dart
index 143c1e6..5593517 100644
--- a/tests/compiler/dart2js_native/native_window2_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_window2_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 abstract class Window {
diff --git a/tests/compiler/dart2js_native/native_wrapping_function3_frog_test.dart b/tests/compiler/dart2js_native/native_wrapping_function3_frog_test.dart
index 111e2f5..e3de1ed 100644
--- a/tests/compiler/dart2js_native/native_wrapping_function3_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_wrapping_function3_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 typedef void Callback0();
diff --git a/tests/compiler/dart2js_native/native_wrapping_function_frog_test.dart b/tests/compiler/dart2js_native/native_wrapping_function_frog_test.dart
index 53473b8..e05b809 100644
--- a/tests/compiler/dart2js_native/native_wrapping_function_frog_test.dart
+++ b/tests/compiler/dart2js_native/native_wrapping_function_frog_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 typedef void Callback0();
diff --git a/tests/compiler/dart2js_native/oddly_named_fields_test.dart b/tests/compiler/dart2js_native/oddly_named_fields_test.dart
index 54d9bd4..e59f247 100644
--- a/tests/compiler/dart2js_native/oddly_named_fields_test.dart
+++ b/tests/compiler/dart2js_native/oddly_named_fields_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'native_testing.dart';
 
 // JavaScript reserved words:
diff --git a/tests/compiler/dart2js_native/optimization_hints_test.dart b/tests/compiler/dart2js_native/optimization_hints_test.dart
index 45ee3ad..5b73d79 100644
--- a/tests/compiler/dart2js_native/optimization_hints_test.dart
+++ b/tests/compiler/dart2js_native/optimization_hints_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'dart:_foreign_helper' show JS;
 
 import 'package:expect/expect.dart';
diff --git a/tests/compiler/dart2js_native/rti_only_native_test.dart b/tests/compiler/dart2js_native/rti_only_native_test.dart
index ec2fa525..71d5e90 100644
--- a/tests/compiler/dart2js_native/rti_only_native_test.dart
+++ b/tests/compiler/dart2js_native/rti_only_native_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Regression test for a bug that was caused by uninstantiated classes being
 // added to emitted classes by runtime-type system.
 // See my explanation in https://codereview.chromium.org/14018036/.
diff --git a/tests/compiler/dart2js_native/runtimetype_test.dart b/tests/compiler/dart2js_native/runtimetype_test.dart
index 558f7ee..4465ae1 100644
--- a/tests/compiler/dart2js_native/runtimetype_test.dart
+++ b/tests/compiler/dart2js_native/runtimetype_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'native_testing.dart';
 
 // Test to see runtimeType works on native classes and does not use the native
diff --git a/tests/compiler/dart2js_native/static_methods_test.dart b/tests/compiler/dart2js_native/static_methods_test.dart
index d356c25..3b1b31c 100644
--- a/tests/compiler/dart2js_native/static_methods_test.dart
+++ b/tests/compiler/dart2js_native/static_methods_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // Accessing static native methods names:
 //   plain declaration ->  use @Native tag as 'scope' for declared name.
 //   identifier @JSName -> use @Native tag as 'scope' for @JSName.
diff --git a/tests/compiler/dart2js_native/subclassing_1_test.dart b/tests/compiler/dart2js_native/subclassing_1_test.dart
index 77a636f..fd3dc84 100644
--- a/tests/compiler/dart2js_native/subclassing_1_test.dart
+++ b/tests/compiler/dart2js_native/subclassing_1_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 import 'dart:_js_helper' show setNativeSubclassDispatchRecord;
 import 'dart:_interceptors' show findInterceptorForType;
diff --git a/tests/compiler/dart2js_native/subclassing_2_test.dart b/tests/compiler/dart2js_native/subclassing_2_test.dart
index 66c8d68..63f3711 100644
--- a/tests/compiler/dart2js_native/subclassing_2_test.dart
+++ b/tests/compiler/dart2js_native/subclassing_2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'native_testing.dart';
 import 'dart:_js_helper' show setNativeSubclassDispatchRecord;
 import 'dart:_interceptors' show findInterceptorForType;
diff --git a/tests/compiler/dart2js_native/subclassing_3_test.dart b/tests/compiler/dart2js_native/subclassing_3_test.dart
index 5a2c3d9..fb7a794 100644
--- a/tests/compiler/dart2js_native/subclassing_3_test.dart
+++ b/tests/compiler/dart2js_native/subclassing_3_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'native_testing.dart';
 import 'dart:_js_helper' show setNativeSubclassDispatchRecord;
 import 'dart:_interceptors' show Interceptor, findInterceptorForType;
diff --git a/tests/compiler/dart2js_native/subclassing_4_test.dart b/tests/compiler/dart2js_native/subclassing_4_test.dart
index 07a2d4c..089f134 100644
--- a/tests/compiler/dart2js_native/subclassing_4_test.dart
+++ b/tests/compiler/dart2js_native/subclassing_4_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'native_testing.dart';
 import 'dart:_js_helper' show setNativeSubclassDispatchRecord;
 import 'dart:_interceptors' show Interceptor, findInterceptorForType;
diff --git a/tests/compiler/dart2js_native/subclassing_5_test.dart b/tests/compiler/dart2js_native/subclassing_5_test.dart
index 220563b..3ae3859 100644
--- a/tests/compiler/dart2js_native/subclassing_5_test.dart
+++ b/tests/compiler/dart2js_native/subclassing_5_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'native_testing.dart';
 import 'dart:_js_helper' show setNativeSubclassDispatchRecord;
 import 'dart:_interceptors' show Interceptor, findInterceptorForType;
diff --git a/tests/compiler/dart2js_native/subclassing_constructor_1_test.dart b/tests/compiler/dart2js_native/subclassing_constructor_1_test.dart
index bf989a7..ebf8929 100644
--- a/tests/compiler/dart2js_native/subclassing_constructor_1_test.dart
+++ b/tests/compiler/dart2js_native/subclassing_constructor_1_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 import 'dart:_js_helper' show setNativeSubclassDispatchRecord;
 import 'dart:_interceptors'
diff --git a/tests/compiler/dart2js_native/subclassing_constructor_2_test.dart b/tests/compiler/dart2js_native/subclassing_constructor_2_test.dart
index f1c8dd1..9228a85 100644
--- a/tests/compiler/dart2js_native/subclassing_constructor_2_test.dart
+++ b/tests/compiler/dart2js_native/subclassing_constructor_2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 // Test that native classes and subclasses of native classes cannot be directly
diff --git a/tests/compiler/dart2js_native/subclassing_super_call_test.dart b/tests/compiler/dart2js_native/subclassing_super_call_test.dart
index 61e3fc1..71a77e5 100644
--- a/tests/compiler/dart2js_native/subclassing_super_call_test.dart
+++ b/tests/compiler/dart2js_native/subclassing_super_call_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 import 'dart:_js_helper' show setNativeSubclassDispatchRecord;
 import 'dart:_interceptors'
diff --git a/tests/compiler/dart2js_native/subclassing_super_field_1_test.dart b/tests/compiler/dart2js_native/subclassing_super_field_1_test.dart
index 827cb358..a1e3c2a 100644
--- a/tests/compiler/dart2js_native/subclassing_super_field_1_test.dart
+++ b/tests/compiler/dart2js_native/subclassing_super_field_1_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 import 'dart:_js_helper' show setNativeSubclassDispatchRecord;
 import 'dart:_interceptors'
diff --git a/tests/compiler/dart2js_native/subclassing_super_field_2_test.dart b/tests/compiler/dart2js_native/subclassing_super_field_2_test.dart
index 837568a..efd1bf6 100644
--- a/tests/compiler/dart2js_native/subclassing_super_field_2_test.dart
+++ b/tests/compiler/dart2js_native/subclassing_super_field_2_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 import 'dart:_js_helper' show setNativeSubclassDispatchRecord;
 import 'dart:_interceptors'
diff --git a/tests/compiler/dart2js_native/subclassing_type_test.dart b/tests/compiler/dart2js_native/subclassing_type_test.dart
index b99872e..3abc875 100644
--- a/tests/compiler/dart2js_native/subclassing_type_test.dart
+++ b/tests/compiler/dart2js_native/subclassing_type_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import 'native_testing.dart';
 import 'dart:_js_helper' show setNativeSubclassDispatchRecord;
 import 'dart:_interceptors' show Interceptor, findInterceptorForType;
diff --git a/tests/compiler/dart2js_native/super_call_test.dart b/tests/compiler/dart2js_native/super_call_test.dart
index 5238bb5..2dfff1a 100644
--- a/tests/compiler/dart2js_native/super_call_test.dart
+++ b/tests/compiler/dart2js_native/super_call_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 // Test to see if resolving a hidden native class's method interferes with
diff --git a/tests/compiler/dart2js_native/super_property_test.dart b/tests/compiler/dart2js_native/super_property_test.dart
index 68e815a..5efcf62 100644
--- a/tests/compiler/dart2js_native/super_property_test.dart
+++ b/tests/compiler/dart2js_native/super_property_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 // Tests super setter where the HInvokeSuper is using interceptor aka
diff --git a/tests/compiler/dart2js_native/type_error_decode_test.dart b/tests/compiler/dart2js_native/type_error_decode_test.dart
index ba97210..c61c84d 100644
--- a/tests/compiler/dart2js_native/type_error_decode_test.dart
+++ b/tests/compiler/dart2js_native/type_error_decode_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 library test.type_error_decode_test;
 
 import 'native_testing.dart';
diff --git a/tests/compiler/dart2js_native/undefined_bailout_test.dart b/tests/compiler/dart2js_native/undefined_bailout_test.dart
index feff806..1fb021c 100644
--- a/tests/compiler/dart2js_native/undefined_bailout_test.dart
+++ b/tests/compiler/dart2js_native/undefined_bailout_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 // dart2js regression test where the SSA backend would use the wrong
 // type for an instruction: when doing a speculative type propagation,
 // if an instruction gets analyzed multiple times, we used to save the
diff --git a/tests/compiler/dart2js_native/uninstantiated_type_parameter_test.dart b/tests/compiler/dart2js_native/uninstantiated_type_parameter_test.dart
index 158063c..968ca87 100644
--- a/tests/compiler/dart2js_native/uninstantiated_type_parameter_test.dart
+++ b/tests/compiler/dart2js_native/uninstantiated_type_parameter_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.7
+
 import "native_testing.dart";
 
 // Test for uninstantiated native classes as type parameters.
diff --git a/tests/compiler/dartdevc_native/assertion_failure_message_test.dart b/tests/compiler/dartdevc_native/assertion_failure_message_test.dart
index 4a7fe7b..f85d05e 100644
--- a/tests/compiler/dartdevc_native/assertion_failure_message_test.dart
+++ b/tests/compiler/dartdevc_native/assertion_failure_message_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.6
+
 import "utils.dart";
 
 void main() {
@@ -10,7 +12,7 @@
   } on AssertionError catch (error) {
     var message = error.toString();
     expectStringContains('Assertion failed:', message);
-    expectStringContains('assertion_failure_message_test.dart:9:12', message);
+    expectStringContains('assertion_failure_message_test.dart:11:12', message);
     expectStringContains('false', message);
     expectStringContains('failure message', message);
   }
@@ -22,7 +24,7 @@
   } on AssertionError catch (error) {
     var message = error.toString();
     expectStringContains('Assertion failed:', message);
-    expectStringContains('assertion_failure_message_test.dart:21:12', message);
+    expectStringContains('assertion_failure_message_test.dart:23:12', message);
     expectStringContains('false', message);
     expectStringContains('after a non-UTF8 character', message);
   }
diff --git a/tests/compiler/dartdevc_native/const_test.dart b/tests/compiler/dartdevc_native/const_test.dart
index b2dbf27..63394cf 100644
--- a/tests/compiler/dartdevc_native/const_test.dart
+++ b/tests/compiler/dartdevc_native/const_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.6
+
 import "package:expect/expect.dart";
 import 'dart:_foreign_helper' show JS;
 import 'dart:_runtime' as dart;
diff --git a/tests/compiler/dartdevc_native/debugger/debugger_test.dart b/tests/compiler/dartdevc_native/debugger/debugger_test.dart
index da2e982..e02bd53 100644
--- a/tests/compiler/dartdevc_native/debugger/debugger_test.dart
+++ b/tests/compiler/dartdevc_native/debugger/debugger_test.dart
@@ -1,3 +1,5 @@
+// @dart = 2.6
+
 /// Debugger custom formatter tests.
 /// If the tests fail, paste the expected output into the [expectedGolden]
 /// string literal in this file and audit the diff to ensure changes are
@@ -84,7 +86,7 @@
 String format(value) {
   // Avoid double-escaping strings.
   if (value is String) return value;
-  return stringify(value, replacer, 4);
+  return stringify(value, allowInterop(replacer), 4);
 }
 
 class FormattedObject {
diff --git a/tests/compiler/dartdevc_native/hot_restart_test.dart b/tests/compiler/dartdevc_native/hot_restart_test.dart
index 37f01ba..c34f5d9 100644
--- a/tests/compiler/dartdevc_native/hot_restart_test.dart
+++ b/tests/compiler/dartdevc_native/hot_restart_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.6
+
 import 'package:expect/expect.dart';
 import 'dart:_foreign_helper' show JS;
 import 'dart:_runtime' as dart;
diff --git a/tests/compiler/dartdevc_native/hot_restart_timer_test.dart b/tests/compiler/dartdevc_native/hot_restart_timer_test.dart
index 9685f51..2a8d6df 100644
--- a/tests/compiler/dartdevc_native/hot_restart_timer_test.dart
+++ b/tests/compiler/dartdevc_native/hot_restart_timer_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.6
+
 import 'package:expect/expect.dart';
 import 'dart:async';
 import 'dart:_runtime' as dart;
diff --git a/tests/compiler/dartdevc_native/js_interop_test.dart b/tests/compiler/dartdevc_native/js_interop_test.dart
index 4303dfc..f067d17 100644
--- a/tests/compiler/dartdevc_native/js_interop_test.dart
+++ b/tests/compiler/dartdevc_native/js_interop_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.6
+
 @JS()
 library js_interop_test;
 
diff --git a/tests/compiler/dartdevc_native/libraries_part.dart b/tests/compiler/dartdevc_native/libraries_part.dart
index d5ac766..c26498e 100644
--- a/tests/compiler/dartdevc_native/libraries_part.dart
+++ b/tests/compiler/dartdevc_native/libraries_part.dart
@@ -2,4 +2,6 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.6
+
 part of 'libraries_test.dart';
diff --git a/tests/compiler/dartdevc_native/libraries_test.dart b/tests/compiler/dartdevc_native/libraries_test.dart
index 533eb5d..d22324f 100644
--- a/tests/compiler/dartdevc_native/libraries_test.dart
+++ b/tests/compiler/dartdevc_native/libraries_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.6
+
 import 'package:expect/expect.dart';
 import 'dart:_foreign_helper' show JS;
 import 'dart:_runtime' as dart;
diff --git a/tests/compiler/dartdevc_native/nnbd_basic_assignment.dart b/tests/compiler/dartdevc_native/nnbd_basic_assignment.dart
index 5bc08a7..f9f7fb8 100644
--- a/tests/compiler/dartdevc_native/nnbd_basic_assignment.dart
+++ b/tests/compiler/dartdevc_native/nnbd_basic_assignment.dart
@@ -1,10 +1,11 @@
 // Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
-import 'package:expect/expect.dart';
 
 // Requirements=nnbd
 
+import 'package:expect/expect.dart';
+
 void main() {
   int x = 42;
   int? y;
diff --git a/tests/compiler/dartdevc_native/nnbd_js_interop_test.dart b/tests/compiler/dartdevc_native/nnbd_js_interop_test.dart
index 56ce33f..ef7f6b3 100644
--- a/tests/compiler/dartdevc_native/nnbd_js_interop_test.dart
+++ b/tests/compiler/dartdevc_native/nnbd_js_interop_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// Requirements=nnbd
+
 @JS()
 library js_interop_test;
 
@@ -12,8 +14,6 @@
 import 'package:expect/expect.dart';
 import 'package:js/js.dart';
 
-// Requirements=nnbd
-
 @JS()
 class Console {
   @JS()
@@ -53,7 +53,7 @@
 @JS()
 @anonymous
 class NestedJs {
-  external factory NestedJs({String Function() constructorArg});
+  external factory NestedJs({required String Function() constructorArg});
   external String get stringField;
 }
 
@@ -96,10 +96,10 @@
     _jsStaticVariable = localNonNull;
   });
   Expect.throws(() {
-    _jsStaticVariable = localNullableLegacy;
+    _jsStaticVariable = localNullableLegacy!;
   });
   Expect.throws(() {
-    _jsStaticVariable = localNullable;
+    _jsStaticVariable = localNullable!;
   });
   _jsStaticVariable = allowInterop(dartStaticMethod);
   _jsStaticVariable = wrappedDartStaticMethod;
@@ -114,16 +114,16 @@
     jsStaticFunction(dartStaticMethod);
   });
   Expect.throws(() {
-    jsStaticFunction(localNonNullLegacy);
+    jsStaticFunction(localNonNullLegacy as String Function());
   });
   Expect.throws(() {
     jsStaticFunction(localNonNull);
   });
   Expect.throws(() {
-    jsStaticFunction(localNullableLegacy);
+    jsStaticFunction(localNullableLegacy as String Function());
   });
   Expect.throws(() {
-    jsStaticFunction(localNullable);
+    jsStaticFunction(localNullable!);
   });
   jsStaticFunction(allowInterop(() => 'hello'));
   jsStaticFunction(wrappedDartStaticMethod);
@@ -143,10 +143,10 @@
     method(localNonNull);
   });
   Expect.throws(() {
-    method(localNullableLegacy);
+    method(localNullableLegacy!);
   });
   Expect.throws(() {
-    method(localNullable);
+    method(localNullable!);
   });
   method(allowInterop(() => 'hello'));
   method(wrappedDartStaticMethod);
@@ -164,16 +164,16 @@
     someClass.jsFunctionFieldSetter = dartStaticMethod;
   }));
   Expect.throws((() {
-    someClass.jsFunctionFieldSetter = localNonNullLegacy;
+    someClass.jsFunctionFieldSetter = localNonNullLegacy as String Function();
   }));
   Expect.throws((() {
     someClass.jsFunctionFieldSetter = localNonNull;
   }));
   Expect.throws((() {
-    someClass.jsFunctionFieldSetter = localNullableLegacy;
+    someClass.jsFunctionFieldSetter = localNullableLegacy as String Function();
   }));
   Expect.throws((() {
-    someClass.jsFunctionFieldSetter = localNullable;
+    someClass.jsFunctionFieldSetter = localNullable!;
   }));
   someClass.jsFunctionFieldSetter = allowInterop(() => 'hello');
   someClass.jsFunctionFieldSetter = wrappedDartStaticMethod;
@@ -186,16 +186,16 @@
     someClass.jsInstanceMethod(dartStaticMethod);
   });
   Expect.throws(() {
-    someClass.jsInstanceMethod(localNonNullLegacy);
+    someClass.jsInstanceMethod(localNonNullLegacy as String Function());
   });
   Expect.throws(() {
     someClass.jsInstanceMethod(localNonNull);
   });
   Expect.throws(() {
-    someClass.jsInstanceMethod(localNullableLegacy);
+    someClass.jsInstanceMethod(localNullableLegacy as String Function());
   });
   Expect.throws(() {
-    someClass.jsInstanceMethod(localNullable);
+    someClass.jsInstanceMethod(localNullable!);
   });
   someClass.jsInstanceMethod(allowInterop(() => 'hello'));
   someClass.jsInstanceMethod(wrappedDartStaticMethod);
@@ -209,16 +209,16 @@
     SomeClass(dartStaticMethod);
   });
   Expect.throws(() {
-    SomeClass(localNonNullLegacy);
+    SomeClass(localNonNullLegacy as String Function());
   });
   Expect.throws(() {
     SomeClass(localNonNull);
   });
   Expect.throws(() {
-    SomeClass(localNullableLegacy);
+    SomeClass(localNullableLegacy as String Function());
   });
   Expect.throws(() {
-    SomeClass(localNullable);
+    SomeClass(localNullable!);
   });
   SomeClass(allowInterop(() => 'hello'));
   SomeClass(wrappedDartStaticMethod);
@@ -231,16 +231,16 @@
     NestedJs(constructorArg: dartStaticMethod);
   });
   Expect.throws(() {
-    NestedJs(constructorArg: localNonNullLegacy);
+    NestedJs(constructorArg: localNonNullLegacy as String Function());
   });
   Expect.throws(() {
     NestedJs(constructorArg: localNonNull);
   });
   Expect.throws(() {
-    NestedJs(constructorArg: localNullableLegacy);
+    NestedJs(constructorArg: localNullableLegacy as String Function());
   });
   Expect.throws(() {
-    NestedJs(constructorArg: localNullable);
+    NestedJs(constructorArg: localNullable!);
   });
   NestedJs(constructorArg: allowInterop(() => 'hello'));
   NestedJs(constructorArg: wrappedDartStaticMethod);
@@ -260,10 +260,10 @@
     method(localNonNull);
   });
   Expect.throws(() {
-    method(localNullableLegacy);
+    method(localNullableLegacy!);
   });
   Expect.throws(() {
-    method(localNullable);
+    method(localNullable!);
   });
   method(allowInterop(() => 'hello'));
   method(wrappedDartStaticMethod);
@@ -276,16 +276,16 @@
     someClass.jsFunctionFieldGetter(dartStaticMethod);
   });
   Expect.throws(() {
-    someClass.jsFunctionFieldGetter(localNonNullLegacy);
+    someClass.jsFunctionFieldGetter(localNonNullLegacy as String Function());
   });
   Expect.throws(() {
     someClass.jsFunctionFieldGetter(localNonNull);
   });
   Expect.throws(() {
-    someClass.jsFunctionFieldGetter(localNullableLegacy);
+    someClass.jsFunctionFieldGetter(localNullableLegacy as String Function());
   });
   Expect.throws(() {
-    someClass.jsFunctionFieldGetter(localNullable);
+    someClass.jsFunctionFieldGetter(localNullable!);
   });
   someClass.jsFunctionFieldGetter(allowInterop(() => 'hello'));
   someClass.jsFunctionFieldGetter(wrappedDartStaticMethod);
@@ -309,10 +309,10 @@
   //  method(localNonNull);
   //});
   //Expect.throws(() {
-  //  method(localNullableLegacy);
+  //  method(localNullableLegacy as String Function());
   //});
   //Expect.throws(() {
-  //  method(localNullable);
+  //  method(localNullable!);
   //});
   method(allowInterop(() => 'hello'));
   method(wrappedDartStaticMethod);
diff --git a/tests/compiler/dartdevc_native/nnbd_strong_subtype_test.dart b/tests/compiler/dartdevc_native/nnbd_strong_subtype_test.dart
index afe9afa..9bc25d9 100644
--- a/tests/compiler/dartdevc_native/nnbd_strong_subtype_test.dart
+++ b/tests/compiler/dartdevc_native/nnbd_strong_subtype_test.dart
@@ -4,7 +4,7 @@
 
 // Requirements=nnbd-strong
 
-import 'dart:async';
+import 'dart:async' show Future;
 
 import 'runtime_utils.dart' show futureOrOf, voidType;
 import 'runtime_utils_nnbd.dart';
diff --git a/tests/compiler/dartdevc_native/no_such_method_errors_test.dart b/tests/compiler/dartdevc_native/no_such_method_errors_test.dart
index 1edcf7e..64d3302 100644
--- a/tests/compiler/dartdevc_native/no_such_method_errors_test.dart
+++ b/tests/compiler/dartdevc_native/no_such_method_errors_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.6
+
 import "utils.dart";
 
 class A {
diff --git a/tests/compiler/dartdevc_native/runtime_utils.dart b/tests/compiler/dartdevc_native/runtime_utils.dart
index 79134c3..b5a32c0 100644
--- a/tests/compiler/dartdevc_native/runtime_utils.dart
+++ b/tests/compiler/dartdevc_native/runtime_utils.dart
@@ -5,7 +5,7 @@
 import 'dart:_foreign_helper' show JS;
 import 'dart:_runtime' as dart;
 
-import 'dart:async';
+import 'dart:async' show FutureOr;
 import 'package:expect/expect.dart';
 
 // Function type used to extract the FutureOr now that a raw FutureOr gets
diff --git a/tests/compiler/dartdevc_native/subtype_test.dart b/tests/compiler/dartdevc_native/subtype_test.dart
index e8c0534..93d7ebc7 100644
--- a/tests/compiler/dartdevc_native/subtype_test.dart
+++ b/tests/compiler/dartdevc_native/subtype_test.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.6
+
 import 'dart:async';
 
 import 'runtime_utils.dart';
diff --git a/tests/compiler/dartdevc_native/utils.dart b/tests/compiler/dartdevc_native/utils.dart
index 79440f7..dff17dc 100644
--- a/tests/compiler/dartdevc_native/utils.dart
+++ b/tests/compiler/dartdevc_native/utils.dart
@@ -2,6 +2,8 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
+// @dart = 2.6
+
 import "package:expect/expect.dart";
 
 /// Expects that [expected] appears as a substring in [actual].
diff --git a/tests/compiler/dartdevc_native/variance_subtype_test.dart b/tests/compiler/dartdevc_native/variance_subtype_test.dart
index 6b993bc..96090bb 100644
--- a/tests/compiler/dartdevc_native/variance_subtype_test.dart
+++ b/tests/compiler/dartdevc_native/variance_subtype_test.dart
@@ -2,10 +2,12 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// Tests runtime subtyping with explicit variance modifiers.
+// @dart = 2.6
 
 // SharedOptions=--enable-experiment=variance
 
+// Tests runtime subtyping with explicit variance modifiers.
+
 import 'dart:async';
 
 import 'runtime_utils.dart';
diff --git a/tests/compiler/dartdevc_native/variance_test.dart b/tests/compiler/dartdevc_native/variance_test.dart
index ec4fca2..b649ca3 100644
--- a/tests/compiler/dartdevc_native/variance_test.dart
+++ b/tests/compiler/dartdevc_native/variance_test.dart
@@ -2,10 +2,12 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-// Tests the emission of explicit variance modifiers.
+// @dart = 2.6
 
 // SharedOptions=--enable-experiment=variance
 
+// Tests the emission of explicit variance modifiers.
+
 import 'dart:_runtime' as dart;
 
 import 'package:expect/expect.dart';
diff --git a/tests/corelib/errors_test.dart b/tests/corelib/errors_test.dart
index 763b486..9d040c9 100644
--- a/tests/corelib/errors_test.dart
+++ b/tests/corelib/errors_test.dart
@@ -74,4 +74,27 @@
       "RangeError: Index out of range: "
       "index must not be negative: -5",
       new RangeError.index(-5, [1, 2, 3]).toString());
+
+  Expect.equals(42, ArgumentError.checkNotNull(42));
+  Expect.equals(42, ArgumentError.checkNotNull(42, "name"));
+  Expect.throwsArgumentError(() => ArgumentError.checkNotNull(null));
+
+  Expect.equals(1, RangeError.checkNotNegative(1));
+  Expect.equals(0, RangeError.checkNotNegative(0));
+  Expect.throwsRangeError(() => RangeError.checkNotNegative(-1));
+
+  Expect.equals(1, RangeError.checkValueInInterval(1, 0, 2));
+  Expect.equals(1, RangeError.checkValueInInterval(1, 1, 2));
+  Expect.equals(1, RangeError.checkValueInInterval(1, 0, 1));
+  Expect.equals(1, RangeError.checkValueInInterval(1, 1, 1));
+  Expect.throwsRangeError(() => RangeError.checkValueInInterval(1, 2, 3));
+  Expect.throwsRangeError(() => RangeError.checkValueInInterval(1, 1, 0));
+  Expect.throwsRangeError(() => RangeError.checkValueInInterval(0, 1, 0));
+
+  Expect.equals(1, RangeError.checkValidIndex(1, [1, 2]));
+  Expect.equals(1, RangeError.checkValidIndex(1, null, null, 2));
+  Expect.throwsRangeError(() => RangeError.checkValidIndex(1, []));
+  Expect.throwsRangeError(() => RangeError.checkValidIndex(1, null, null, 1));
+  Expect.throwsRangeError(() => RangeError.checkValidIndex(-1, [1, 2, 3]));
+  Expect.throwsRangeError(() => RangeError.checkValidIndex(-1, null, null, 3));
 }
diff --git a/tests/corelib/map_entry_test.dart b/tests/corelib/map_entry_test.dart
index 640b8cc..152fd6b 100644
--- a/tests/corelib/map_entry_test.dart
+++ b/tests/corelib/map_entry_test.dart
@@ -27,18 +27,18 @@
   checkEntries(baseMap, baseMap);
   checkEntries(baseMap, new Map<String, Object>.unmodifiable(baseMap));
   checkMap({"x": 0, "y": 1});
-  checkMap(new Map<String, Object>.from(baseMap));
-  checkMap(new HashMap<String, Object>.from(baseMap));
-  checkMap(new LinkedHashMap<String, Object>.from(baseMap));
-  checkMap(new SplayTreeMap<String, Object>.from(baseMap));
+  checkMap(new Map<String, dynamic>.from(baseMap));
+  checkMap(new HashMap<String, dynamic>.from(baseMap));
+  checkMap(new LinkedHashMap<String, dynamic>.from(baseMap));
+  checkMap(new SplayTreeMap<String, dynamic>.from(baseMap));
   checkMap(json.decode('{"x":0,"y":1}'));
 }
 
-void checkMap(Map<String, Object> map) {
+void checkMap(Map<String, dynamic> map) {
   checkEntries(baseMap, map);
-  map.addEntries([new MapEntry<String, Object>("z", 2)]);
+  map.addEntries([new MapEntry<String, dynamic>("z", 2)]);
   checkEntries({"x": 0, "y": 1, "z": 2}, map);
-  map.addEntries(<MapEntry<String, Object>>[
+  map.addEntries(<MapEntry<String, dynamic>>[
     new MapEntry("y", 11),
     new MapEntry("v", 3),
     new MapEntry("w", 4)
diff --git a/tests/corelib/map_set_undefined_test.dart b/tests/corelib/map_set_undefined_test.dart
index 338259e..22f7e71 100644
--- a/tests/corelib/map_set_undefined_test.dart
+++ b/tests/corelib/map_set_undefined_test.dart
@@ -23,7 +23,7 @@
       isValidKey: (_) => true));
 }
 
-testMap(Map<Object, Object> map) {
+testMap(Map<Object, Object?> map) {
   var t = map.runtimeType.toString();
   var s = ' (length ${map.length})';
   checkUndefined('$t.[]$s', map['hi']);
diff --git a/tests/corelib/map_test.dart b/tests/corelib/map_test.dart
index a768aa3..74f0577 100644
--- a/tests/corelib/map_test.dart
+++ b/tests/corelib/map_test.dart
@@ -382,7 +382,7 @@
   Map m = {"a": 1, "b": 2, "c": 3};
   Expect.equals(3, m.length);
   int sum = 0;
-  m.forEach((a, int b) {
+  m.forEach((a, b) {
     sum += b;
   });
   Expect.equals(6, sum);
diff --git a/tests/corelib/queue_iterator_test.dart b/tests/corelib/queue_iterator_test.dart
index c42e7b7..d7da61f 100644
--- a/tests/corelib/queue_iterator_test.dart
+++ b/tests/corelib/queue_iterator_test.dart
@@ -14,7 +14,7 @@
     testEmptyQueue();
   }
 
-  static int sum(int expected, Iterator<int> it) {
+  static void sum(int expected, Iterator<int> it) {
     int count = 0;
     while (it.moveNext()) {
       count += it.current;
diff --git a/tests/corelib/set_iterator_test.dart b/tests/corelib/set_iterator_test.dart
index 4b36545..17bf821 100644
--- a/tests/corelib/set_iterator_test.dart
+++ b/tests/corelib/set_iterator_test.dart
@@ -23,7 +23,7 @@
     testDifferentHashCodes();
   }
 
-  static int sum(int expected, Iterator<int> it) {
+  static void sum(int expected, Iterator<int> it) {
     int count = 0;
     while (it.moveNext()) {
       count += it.current;
diff --git a/tests/corelib_2/errors_test.dart b/tests/corelib_2/errors_test.dart
index 763b486..9d040c9 100644
--- a/tests/corelib_2/errors_test.dart
+++ b/tests/corelib_2/errors_test.dart
@@ -74,4 +74,27 @@
       "RangeError: Index out of range: "
       "index must not be negative: -5",
       new RangeError.index(-5, [1, 2, 3]).toString());
+
+  Expect.equals(42, ArgumentError.checkNotNull(42));
+  Expect.equals(42, ArgumentError.checkNotNull(42, "name"));
+  Expect.throwsArgumentError(() => ArgumentError.checkNotNull(null));
+
+  Expect.equals(1, RangeError.checkNotNegative(1));
+  Expect.equals(0, RangeError.checkNotNegative(0));
+  Expect.throwsRangeError(() => RangeError.checkNotNegative(-1));
+
+  Expect.equals(1, RangeError.checkValueInInterval(1, 0, 2));
+  Expect.equals(1, RangeError.checkValueInInterval(1, 1, 2));
+  Expect.equals(1, RangeError.checkValueInInterval(1, 0, 1));
+  Expect.equals(1, RangeError.checkValueInInterval(1, 1, 1));
+  Expect.throwsRangeError(() => RangeError.checkValueInInterval(1, 2, 3));
+  Expect.throwsRangeError(() => RangeError.checkValueInInterval(1, 1, 0));
+  Expect.throwsRangeError(() => RangeError.checkValueInInterval(0, 1, 0));
+
+  Expect.equals(1, RangeError.checkValidIndex(1, [1, 2]));
+  Expect.equals(1, RangeError.checkValidIndex(1, null, null, 2));
+  Expect.throwsRangeError(() => RangeError.checkValidIndex(1, []));
+  Expect.throwsRangeError(() => RangeError.checkValidIndex(1, null, null, 1));
+  Expect.throwsRangeError(() => RangeError.checkValidIndex(-1, [1, 2, 3]));
+  Expect.throwsRangeError(() => RangeError.checkValidIndex(-1, null, null, 3));
 }
diff --git a/tests/corelib_2/from_environment_const_type_undefined_test.dart b/tests/corelib_2/from_environment_const_type_undefined_test.dart
index c2e90ef..d63d75f 100644
--- a/tests/corelib_2/from_environment_const_type_undefined_test.dart
+++ b/tests/corelib_2/from_environment_const_type_undefined_test.dart
@@ -25,14 +25,14 @@
     int //   //# 10: ok
     String //# 11: compile-time error
     Foo //   //# 12: compile-time error
-    c = const int.fromEnvironment('c');
+    c = const int.fromEnvironment('c', defaultValue: 0);
 
 const
     bool //  //# 13: compile-time error
     int //   //# 14: compile-time error
     String //# 15: ok
     Foo //   //# 16: compile-time error
-    d = const String.fromEnvironment('d');
+    d = const String.fromEnvironment('d', defaultValue: '');
 
 main() {
   Expect.equals(false, a);
diff --git a/tests/corelib_2/map_entry_test.dart b/tests/corelib_2/map_entry_test.dart
index 59c1cc9..98628d2 100644
--- a/tests/corelib_2/map_entry_test.dart
+++ b/tests/corelib_2/map_entry_test.dart
@@ -27,18 +27,18 @@
   checkEntries(baseMap, baseMap);
   checkEntries(baseMap, new Map<String, Object>.unmodifiable(baseMap));
   checkMap({"x": 0, "y": 1});
-  checkMap(new Map<String, Object>.from(baseMap));
-  checkMap(new HashMap<String, Object>.from(baseMap));
-  checkMap(new LinkedHashMap<String, Object>.from(baseMap));
-  checkMap(new SplayTreeMap<String, Object>.from(baseMap));
+  checkMap(new Map<String, dynamic>.from(baseMap));
+  checkMap(new HashMap<String, dynamic>.from(baseMap));
+  checkMap(new LinkedHashMap<String, dynamic>.from(baseMap));
+  checkMap(new SplayTreeMap<String, dynamic>.from(baseMap));
   checkMap(json.decode('{"x":0,"y":1}'));
 }
 
-void checkMap(Map<String, Object> map) {
+void checkMap(Map<String, dynamic> map) {
   checkEntries(baseMap, map);
-  map.addEntries([new MapEntry<String, Object>("z", 2)]);
+  map.addEntries([new MapEntry<String, dynamic>("z", 2)]);
   checkEntries({"x": 0, "y": 1, "z": 2}, map);
-  map.addEntries(<MapEntry<String, Object>>[
+  map.addEntries(<MapEntry<String, dynamic>>[
     new MapEntry("y", 11),
     new MapEntry("v", 3),
     new MapEntry("w", 4)
diff --git a/tests/dart/.blazeproject b/tests/dart/.blazeproject
deleted file mode 100644
index 6877be6..0000000
--- a/tests/dart/.blazeproject
+++ /dev/null
@@ -1,10 +0,0 @@
-
-directories:
-  # Add the directories you want added as source here
-  experimental/users/jcollins/dart
-
-targets:
-  # Add targets that reach the source code that you want to resolve here
-  //experimental/users/jcollins/dart:deep_nesting1_negative_test
-additional_languages:
-  dart
\ No newline at end of file
diff --git a/tests/ffi_2/ffi_2.status b/tests/ffi_2/ffi_2.status
index 8db64fb..c138d83 100644
--- a/tests/ffi_2/ffi_2.status
+++ b/tests/ffi_2/ffi_2.status
@@ -2,9 +2,6 @@
 # for details. All rights reserved. Use of this source code is governed by a
 # BSD-style license that can be found in the LICENSE file.
 
-[ $builder_tag == asan ]
-data_not_asan_test: SkipByDesign # This test tries to allocate too much memory on purpose.
-
 [ $system == android ]
 *: Pass, Slow # https://github.com/dart-lang/sdk/issues/38489
 
@@ -17,6 +14,9 @@
 [ $arch == simarm || $arch == simarm64 ]
 *: Skip # FFI not yet supported on the arm simulator.
 
+[ $builder_tag == asan || $builder_tag == msan || $builder_tag == tsan ]
+data_not_asan_test: SkipByDesign # This test tries to allocate too much memory on purpose.
+
 # These tests trigger and catch an abort (intentionally) and terminate the VM.
 # They're incompatible with ASAN because not all memory is freed when aborting and
 # with AppJit because the abort the VM before it can generate a snapshot.
diff --git a/tests/language/assert/initializer_test.dart b/tests/language/assert/initializer_test.dart
index b2fe755..b5de1eb 100644
--- a/tests/language/assert/initializer_test.dart
+++ b/tests/language/assert/initializer_test.dart
@@ -82,7 +82,7 @@
   bool assertionsEnabled = false;
   assert(assertionsEnabled = true);
 
-  bool Function(C Function()) doTest = (assertionsEnabled && x >= y)
+  void Function(C Function()) doTest = (assertionsEnabled && x >= y)
     ? (f) { Expect.throwsAssertionError(f); }
     : (f) { Expect.equals(x, f().x); };
 
diff --git a/tests/language/async/await_test.dart b/tests/language/async/await_test.dart
index 6803b91..de063c9 100644
--- a/tests/language/async/await_test.dart
+++ b/tests/language/async/await_test.dart
@@ -2248,7 +2248,8 @@
   Future timeout(Duration duration, {onTimeout()?}) => this;
 }
 
-typedef BinaryFunction(a, b);
+typedef OnErrorCallback2 = dynamic Function(Object, StackTrace);
+typedef OnErrorCallback1 = dynamic Function(Object);
 
 /**
  * A non-standard implementation of Future with an error.
@@ -2258,10 +2259,17 @@
   FakeErrorFuture(this._error);
   Future<S> then<S>(callback(value), {Function? onError}) {
     if (onError != null) {
-      if (onError is BinaryFunction) {
-        return new Future<S>.microtask(() => onError(_error, null));
+      if (onError is OnErrorCallback2) {
+        return new Future<S>.microtask(() => onError(_error, StackTrace.empty));
+      } else if (onError is OnErrorCallback1) {
+        return new Future<S>.microtask(() => onError(_error));
+      } else {
+        throw new ArgumentError.value(
+          onError,
+          "onError",
+          "Error handler must accept one Object or one Object and a StackTrace"
+          " as arguments, and return a valid result");
       }
-      return new Future<S>.microtask(() => onError(_error));
     }
     return new Future<S>.error(_error);
   }
@@ -2275,10 +2283,17 @@
   Future catchError(Function onError, {bool test(Object error)?}) {
     return new Future.microtask(() {
       if (test != null && !test(_error)) return this;
-      if (onError is BinaryFunction) {
-        return onError(_error, null);
+      if (onError is OnErrorCallback2) {
+        return onError(_error, StackTrace.empty);
+      } else if (onError is OnErrorCallback1) {
+        return onError(_error);
+      } else {
+        throw new ArgumentError.value(
+          onError,
+          "onError",
+          "Error handler must accept one Object or one Object and a StackTrace"
+          " as arguments, and return a valid result");
       }
-      return onError(_error);
     });
   }
 
diff --git a/tests/language/async/or_generator_return_type_stacktrace_test.dart b/tests/language/async/or_generator_return_type_stacktrace_test.dart
index 39fdb56..35f1f2d 100644
--- a/tests/language/async/or_generator_return_type_stacktrace_test.dart
+++ b/tests/language/async/or_generator_return_type_stacktrace_test.dart
@@ -4,7 +4,7 @@
 
 import "package:expect/expect.dart";
 
-int badReturnTypeAsync() async {}
+int badReturnTypeAsync() async => 0;
 // [error line 7, column 1, length 3]
 // [analyzer] STATIC_TYPE_WARNING.ILLEGAL_ASYNC_RETURN_TYPE
 //  ^
diff --git a/tests/language/bool/has_environment_not_new_test.dart b/tests/language/bool/has_environment_not_new_test.dart
new file mode 100644
index 0000000..947c6be
--- /dev/null
+++ b/tests/language/bool/has_environment_not_new_test.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import "package:expect/expect.dart";
+
+main() {
+  Expect.throws(() => new bool.hasEnvironment("Anything"));
+}
diff --git a/tests/language/bool/has_environment_test.dart b/tests/language/bool/has_environment_test.dart
new file mode 100644
index 0000000..df593f1
--- /dev/null
+++ b/tests/language/bool/has_environment_test.dart
@@ -0,0 +1,15 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// SharedOptions=-Da= -Db=b -Dc=Something
+
+import 'package:expect/expect.dart';
+
+main() {
+  Expect.isTrue(const bool.hasEnvironment('dart.library.core'));
+  Expect.isTrue(const bool.hasEnvironment('a'));
+  Expect.isTrue(const bool.hasEnvironment('b'));
+  Expect.isTrue(const bool.hasEnvironment('c'));
+  Expect.isFalse(const bool.hasEnvironment('d'));
+}
diff --git a/tests/language/call/non_method_field_test.dart b/tests/language/call/non_method_field_test.dart
index 83a022d..6d30f27 100644
--- a/tests/language/call/non_method_field_test.dart
+++ b/tests/language/call/non_method_field_test.dart
@@ -15,13 +15,13 @@
   x1.i();
 //^^^^
 // [analyzer] STATIC_TYPE_WARNING.INVOCATION_OF_NON_FUNCTION_EXPRESSION
-//   ^
+//    ^
 // [cfe] 'i' isn't a function or method and can't be invoked.
 
   Hest x2 = new Hest();
   x2.i();
 //^^^^
 // [analyzer] STATIC_TYPE_WARNING.INVOCATION_OF_NON_FUNCTION_EXPRESSION
-//   ^
+//    ^
 // [cfe] 'i' isn't a function or method and can't be invoked.
 }
diff --git a/tests/language_2/async/await_test.dart b/tests/language_2/async/await_test.dart
index d434da9..8c7bf2f 100644
--- a/tests/language_2/async/await_test.dart
+++ b/tests/language_2/async/await_test.dart
@@ -2247,7 +2247,8 @@
   Future timeout(Duration duration, {onTimeout()}) => this;
 }
 
-typedef BinaryFunction(a, b);
+typedef OnErrorCallback2 = dynamic Function(Object, StackTrace);
+typedef OnErrorCallback1 = dynamic Function(Object);
 
 /**
  * A non-standard implementation of Future with an error.
@@ -2257,10 +2258,17 @@
   FakeErrorFuture(this._error);
   Future<S> then<S>(callback(value), {Function onError}) {
     if (onError != null) {
-      if (onError is BinaryFunction) {
+      if (onError is OnErrorCallback2) {
         return new Future<S>.microtask(() => onError(_error, null));
+      } else if (onError is OnErrorCallback1) {
+        return new Future<S>.microtask(() => onError(_error));
+      } else {
+        throw new ArgumentError.value(
+          onError,
+          "onError",
+          "Error handler must accept one Object or one Object and a StackTrace"
+          " as arguments, and return a valid result");
       }
-      return new Future<S>.microtask(() => onError(_error));
     }
     return new Future<S>.error(_error);
   }
@@ -2274,10 +2282,17 @@
   Future catchError(Function onError, {bool test(error)}) {
     return new Future.microtask(() {
       if (test != null && !test(_error)) return this;
-      if (onError is BinaryFunction) {
+      if (onError is OnErrorCallback2) {
         return onError(_error, null);
+      } else if (onError is OnErrorCallback1) {
+        return onError(_error);
+      } else {
+        throw new ArgumentError.value(
+          onError,
+          "onError",
+          "Error handler must accept one Object or one Object and a StackTrace"
+          " as arguments, and return a valid result");
       }
-      return onError(_error);
     });
   }
 
diff --git a/tests/language_2/call/non_method_field_test.dart b/tests/language_2/call/non_method_field_test.dart
index 7bd4490..8fbd2a9 100644
--- a/tests/language_2/call/non_method_field_test.dart
+++ b/tests/language_2/call/non_method_field_test.dart
@@ -15,13 +15,13 @@
   x1.i();
 //^^^^
 // [analyzer] STATIC_TYPE_WARNING.INVOCATION_OF_NON_FUNCTION_EXPRESSION
-//   ^
+//    ^
 // [cfe] 'i' isn't a function or method and can't be invoked.
 
   Hest x2 = new Hest();
   x2.i();
 //^^^^
 // [analyzer] STATIC_TYPE_WARNING.INVOCATION_OF_NON_FUNCTION_EXPRESSION
-//   ^
+//    ^
 // [cfe] 'i' isn't a function or method and can't be invoked.
 }
diff --git a/tests/language_2/extension_methods/static_extension_getter_setter_conflicts_test.dart b/tests/language_2/extension_methods/static_extension_getter_setter_conflicts_test.dart
index a2aea8c..5cf5c20 100644
--- a/tests/language_2/extension_methods/static_extension_getter_setter_conflicts_test.dart
+++ b/tests/language_2/extension_methods/static_extension_getter_setter_conflicts_test.dart
@@ -63,7 +63,7 @@
   c0[0] = 0;
   //^^^
   // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
-  // [cfe] The method '[]=' isn't defined for the class 'C0'.
+  // [cfe] The operator '[]=' isn't defined for the class 'C0'.
   E0(c0)[0];
   //    ^^^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_EXTENSION_OPERATOR
@@ -73,20 +73,20 @@
   c0[0] += 0;
   //^^^
   // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
-  // [cfe] The method '[]=' isn't defined for the class 'C0'.
+  // [cfe] The operator '[]=' isn't defined for the class 'C0'.
   c0[0]++;
   //^^^
   // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
-  // [cfe] The method '[]=' isn't defined for the class 'C0'.
+  // [cfe] The operator '[]=' isn't defined for the class 'C0'.
 
   E0(c0)[0] += 0;
   //    ^^^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_EXTENSION_OPERATOR
-  // [cfe] The method '[]' isn't defined for the class 'C0'.
+  // [cfe] The operator '[]' isn't defined for the class 'C0'.
   E0(c0)[0]++;
   //    ^^^
   // [analyzer] COMPILE_TIME_ERROR.UNDEFINED_EXTENSION_OPERATOR
-  // [cfe] The method '[]' isn't defined for the class 'C0'.
+  // [cfe] The operator '[]' isn't defined for the class 'C0'.
 }
 
 // Conflicting extensions.
@@ -124,17 +124,17 @@
   c1a[0] = 0;
   // ^^^
   // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
-  // [cfe] The method '[]=' isn't defined for the class 'C1<int>'.
+  // [cfe] The operator '[]=' isn't defined for the class 'C1<int>'.
 
   c1a[0] += 0;
   // ^^^
   // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
-  // [cfe] The method '[]=' isn't defined for the class 'C1<int>'.
+  // [cfe] The operator '[]=' isn't defined for the class 'C1<int>'.
 
   c1a[0]++;
   // ^^^
   // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
-  // [cfe] The method '[]=' isn't defined for the class 'C1<int>'.
+  // [cfe] The operator '[]=' isn't defined for the class 'C1<int>'.
 
   c1a[0];
 
@@ -143,59 +143,55 @@
   c1b.m1;
   //  ^^
   // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-  // [cfe] The getter 'm1' isn't defined for the class 'C1<Object>'.
+  // [cfe] The property 'm1' is defined in multiple extensions for 'C1<Object>' and neither is more specific.
 
   c1b.m1 = 0;
   //  ^^
   // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-  // [cfe] The setter 'm1' isn't defined for the class 'C1<Object>'.
+  // [cfe] The property 'm1' is defined in multiple extensions for 'C1<Object>' and neither is more specific.
 
   c1b.m1 += 0;
   //  ^^
   // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-  // [cfe] The getter 'm1' isn't defined for the class 'C1<Object>'.
-  //  ^
-  // [cfe] The setter 'm1' isn't defined for the class 'C1<Object>'.
+  // [cfe] The property 'm1' is defined in multiple extensions for 'C1<Object>' and neither is more specific.
 
   c1b.m1++;
   //  ^^
   // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-  // [cfe] The getter 'm1' isn't defined for the class 'C1<Object>'.
-  //  ^
-  // [cfe] The setter 'm1' isn't defined for the class 'C1<Object>'.
+  // [cfe] The property 'm1' is defined in multiple extensions for 'C1<Object>' and neither is more specific.
 
   c1b.m2;
   //  ^^
   // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-  // [cfe] The getter 'm2' isn't defined for the class 'C1<Object>'.
+  // [cfe] The property 'm2' is defined in multiple extensions for 'C1<Object>' and neither is more specific.
 
   c1b[0];
 //^^^
 // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-  // ^
-  // [cfe] The method '[]' isn't defined for the class 'C1<Object>'.
+//   ^
+// [cfe] The operator '[]' is defined in multiple extensions for 'C1<Object>' and neither is more specific.
 
   c1b[0] = 0;
 //^^^
 // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-  // ^
-  // [cfe] The method '[]=' isn't defined for the class 'C1<Object>'.
+//   ^
+// [cfe] The operator '[]=' is defined in multiple extensions for 'C1<Object>' and neither is more specific.
 
   c1b[0] += 0;
 //^^^
 // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-  // ^
-  // [cfe] The method '[]' isn't defined for the class 'C1<Object>'.
-  // ^
-  // [cfe] The method '[]=' isn't defined for the class 'C1<Object>'.
+//   ^
+// [cfe] The operator '[]' is defined in multiple extensions for 'C1<Object>' and neither is more specific.
+//   ^
+// [cfe] The operator '[]=' is defined in multiple extensions for 'C1<Object>' and neither is more specific.
 
   c1b[0]++;
 //^^^
 // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-  // ^
-  // [cfe] The method '[]' isn't defined for the class 'C1<Object>'.
-  // ^
-  // [cfe] The method '[]=' isn't defined for the class 'C1<Object>'.
+//   ^
+// [cfe] The operator '[]' is defined in multiple extensions for 'C1<Object>' and neither is more specific.
+//   ^
+// [cfe] The operator '[]=' is defined in multiple extensions for 'C1<Object>' and neither is more specific.
 }
 
 // Getter on the extension itself.
@@ -231,17 +227,17 @@
     this[0];
     //  ^^^
     // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
-    // [cfe] The method '[]' isn't defined for the class 'C2'.
+    // [cfe] The operator '[]' isn't defined for the class 'C2'.
 
     this[0] += 0;
     //  ^^^
     // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
-    // [cfe] The method '[]' isn't defined for the class 'C2'.
+    // [cfe] The operator '[]' isn't defined for the class 'C2'.
 
     this[0]++;
     //  ^^^
     // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
-    // [cfe] The method '[]' isn't defined for the class 'C2'.
+    // [cfe] The operator '[]' isn't defined for the class 'C2'.
 
     // Check that `this.mc` refers to `C2.mc`.
     this.mc.toRadixString(16);
diff --git a/tests/language_2/extension_methods/static_extension_internal_basename_shadowing_error_test.dart b/tests/language_2/extension_methods/static_extension_internal_basename_shadowing_error_test.dart
index 04d90b6..5c5c1c7 100644
--- a/tests/language_2/extension_methods/static_extension_internal_basename_shadowing_error_test.dart
+++ b/tests/language_2/extension_methods/static_extension_internal_basename_shadowing_error_test.dart
@@ -259,6 +259,7 @@
     extensionMethod(4);
 //  ^^^^^^^^^^^^^^^
 // [analyzer] STATIC_TYPE_WARNING.INVOCATION_OF_NON_FUNCTION_EXPRESSION
+//                 ^
 // [cfe] 'extensionMethod' isn't a function or method and can't be invoked.
   }
 }
diff --git a/tests/language_2/extension_methods/static_extension_internal_resolution_3_error_test.dart b/tests/language_2/extension_methods/static_extension_internal_resolution_3_error_test.dart
index 01886be..b0409f9 100644
--- a/tests/language_2/extension_methods/static_extension_internal_resolution_3_error_test.dart
+++ b/tests/language_2/extension_methods/static_extension_internal_resolution_3_error_test.dart
@@ -96,21 +96,21 @@
       bool t0 = this.fieldInGlobalScope;
       //             ^^^^^^^^^^^^^^^^^^
       // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-      // [cfe] The getter 'fieldInGlobalScope' isn't defined for the class 'A'.
+      // [cfe] The property 'fieldInGlobalScope' is defined in multiple extensions for 'A' and neither is more specific.
       checkExtensionValue(t0);
       bool t1 = this.getterInGlobalScope;
       //             ^^^^^^^^^^^^^^^^^^^
       // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-      // [cfe] The getter 'getterInGlobalScope' isn't defined for the class 'A'.
+      // [cfe] The property 'getterInGlobalScope' is defined in multiple extensions for 'A' and neither is more specific.
       checkExtensionValue(t1);
       this.setterInGlobalScope = extensionValue;
       //   ^^^^^^^^^^^^^^^^^^^
       // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-      // [cfe] The setter 'setterInGlobalScope' isn't defined for the class 'A'.
+      // [cfe] The property 'setterInGlobalScope' is defined in multiple extensions for 'A' and neither is more specific.
       bool t2 = this.methodInGlobalScope();
       //             ^^^^^^^^^^^^^^^^^^^
       // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-      // [cfe] The method 'methodInGlobalScope' isn't defined for the class 'A'.
+      // [cfe] The method 'methodInGlobalScope' is defined in multiple extensions for 'A' and neither is more specific.
       checkExtensionValue(t2);
     }
 
@@ -140,21 +140,21 @@
       bool t0 = self.fieldInGlobalScope;
       //             ^^^^^^^^^^^^^^^^^^
       // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-      // [cfe] The getter 'fieldInGlobalScope' isn't defined for the class 'A'.
+      // [cfe] The property 'fieldInGlobalScope' is defined in multiple extensions for 'A' and neither is more specific.
       checkExtensionValue(t0);
       bool t1 = self.getterInGlobalScope;
       //             ^^^^^^^^^^^^^^^^^^^
       // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-      // [cfe] The getter 'getterInGlobalScope' isn't defined for the class 'A'.
+      // [cfe] The property 'getterInGlobalScope' is defined in multiple extensions for 'A' and neither is more specific.
       checkExtensionValue(t1);
       self.setterInGlobalScope = extensionValue;
       //   ^^^^^^^^^^^^^^^^^^^
       // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-      // [cfe] The setter 'setterInGlobalScope' isn't defined for the class 'A'.
+      // [cfe] The property 'setterInGlobalScope' is defined in multiple extensions for 'A' and neither is more specific.
       bool t2 = self.methodInGlobalScope();
       //             ^^^^^^^^^^^^^^^^^^^
       // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-      // [cfe] The method 'methodInGlobalScope' isn't defined for the class 'A'.
+      // [cfe] The method 'methodInGlobalScope' is defined in multiple extensions for 'A' and neither is more specific.
       checkExtensionValue(t2);
     }
 
@@ -224,21 +224,21 @@
     bool t0 = a.fieldInGlobalScope;
     //          ^^^^^^^^^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-    // [cfe] The getter 'fieldInGlobalScope' isn't defined for the class 'A'.
+    // [cfe] The property 'fieldInGlobalScope' is defined in multiple extensions for 'A' and neither is more specific.
     checkExtensionValue(t0);
     bool t1 = a.getterInGlobalScope;
     //          ^^^^^^^^^^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-    // [cfe] The getter 'getterInGlobalScope' isn't defined for the class 'A'.
+    // [cfe] The property 'getterInGlobalScope' is defined in multiple extensions for 'A' and neither is more specific.
     checkExtensionValue(t1);
     a.setterInGlobalScope = extensionValue;
     //^^^^^^^^^^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-    // [cfe] The setter 'setterInGlobalScope' isn't defined for the class 'A'.
+    // [cfe] The property 'setterInGlobalScope' is defined in multiple extensions for 'A' and neither is more specific.
     bool t2 = a.methodInGlobalScope();
     //          ^^^^^^^^^^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-    // [cfe] The method 'methodInGlobalScope' isn't defined for the class 'A'.
+    // [cfe] The method 'methodInGlobalScope' is defined in multiple extensions for 'A' and neither is more specific.
     checkExtensionValue(t2);
   }
 
diff --git a/tests/language_2/extension_methods/static_extension_internal_resolution_4_error_test.dart b/tests/language_2/extension_methods/static_extension_internal_resolution_4_error_test.dart
index dcb362a..6cd8d4b 100644
--- a/tests/language_2/extension_methods/static_extension_internal_resolution_4_error_test.dart
+++ b/tests/language_2/extension_methods/static_extension_internal_resolution_4_error_test.dart
@@ -96,21 +96,21 @@
       bool t0 = this.fieldInGlobalScope;
       //             ^^^^^^^^^^^^^^^^^^
       // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-      // [cfe] The getter 'fieldInGlobalScope' isn't defined for the class 'A'.
+      // [cfe] The property 'fieldInGlobalScope' is defined in multiple extensions for 'A' and neither is more specific.
       checkExtensionValue(t0);
       bool t1 = this.getterInGlobalScope;
       //             ^^^^^^^^^^^^^^^^^^^
       // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-      // [cfe] The getter 'getterInGlobalScope' isn't defined for the class 'A'.
+      // [cfe] The property 'getterInGlobalScope' is defined in multiple extensions for 'A' and neither is more specific.
       checkExtensionValue(t1);
       this.setterInGlobalScope = extensionValue;
       //   ^^^^^^^^^^^^^^^^^^^
       // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-      // [cfe] The setter 'setterInGlobalScope' isn't defined for the class 'A'.
+      // [cfe] The property 'setterInGlobalScope' is defined in multiple extensions for 'A' and neither is more specific.
       bool t2 = this.methodInGlobalScope();
       //             ^^^^^^^^^^^^^^^^^^^
       // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-      // [cfe] The method 'methodInGlobalScope' isn't defined for the class 'A'.
+      // [cfe] The method 'methodInGlobalScope' is defined in multiple extensions for 'A' and neither is more specific.
       checkExtensionValue(t2);
     }
 
@@ -125,21 +125,21 @@
       bool t0 = this.fieldInExtensionScope;
       //             ^^^^^^^^^^^^^^^^^^^^^
       // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-      // [cfe] The getter 'fieldInExtensionScope' isn't defined for the class 'A'.
+      // [cfe] The property 'fieldInExtensionScope' is defined in multiple extensions for 'A' and neither is more specific.
       checkExtensionValue(t0);
       bool t1 = this.getterInExtensionScope;
       //             ^^^^^^^^^^^^^^^^^^^^^^
       // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-      // [cfe] The getter 'getterInExtensionScope' isn't defined for the class 'A'.
+      // [cfe] The property 'getterInExtensionScope' is defined in multiple extensions for 'A' and neither is more specific.
       checkExtensionValue(t1);
       this.setterInExtensionScope = extensionValue;
       //   ^^^^^^^^^^^^^^^^^^^^^^
       // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-      // [cfe] The setter 'setterInExtensionScope' isn't defined for the class 'A'.
+      // [cfe] The property 'setterInExtensionScope' is defined in multiple extensions for 'A' and neither is more specific.
       bool t2 = this.methodInExtensionScope();
       //             ^^^^^^^^^^^^^^^^^^^^^^
       // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-      // [cfe] The method 'methodInExtensionScope' isn't defined for the class 'A'.
+      // [cfe] The method 'methodInExtensionScope' is defined in multiple extensions for 'A' and neither is more specific.
       checkExtensionValue(t2);
     }
 
@@ -158,21 +158,21 @@
       bool t0 = self.fieldInGlobalScope;
       //             ^^^^^^^^^^^^^^^^^^
       // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-      // [cfe] The getter 'fieldInGlobalScope' isn't defined for the class 'A'.
+      // [cfe] The property 'fieldInGlobalScope' is defined in multiple extensions for 'A' and neither is more specific.
       checkExtensionValue(t0);
       bool t1 = self.getterInGlobalScope;
       //             ^^^^^^^^^^^^^^^^^^^
       // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-      // [cfe] The getter 'getterInGlobalScope' isn't defined for the class 'A'.
+      // [cfe] The property 'getterInGlobalScope' is defined in multiple extensions for 'A' and neither is more specific.
       checkExtensionValue(t1);
       self.setterInGlobalScope = extensionValue;
       //   ^^^^^^^^^^^^^^^^^^^
       // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-      // [cfe] The setter 'setterInGlobalScope' isn't defined for the class 'A'.
+      // [cfe] The property 'setterInGlobalScope' is defined in multiple extensions for 'A' and neither is more specific.
       bool t2 = self.methodInGlobalScope();
       //             ^^^^^^^^^^^^^^^^^^^
       // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-      // [cfe] The method 'methodInGlobalScope' isn't defined for the class 'A'.
+      // [cfe] The method 'methodInGlobalScope' is defined in multiple extensions for 'A' and neither is more specific.
       checkExtensionValue(t2);
     }
 
@@ -187,21 +187,21 @@
       bool t0 = self.fieldInExtensionScope;
       //             ^^^^^^^^^^^^^^^^^^^^^
       // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-      // [cfe] The getter 'fieldInExtensionScope' isn't defined for the class 'A'.
+      // [cfe] The property 'fieldInExtensionScope' is defined in multiple extensions for 'A' and neither is more specific.
       checkExtensionValue(t0);
       bool t1 = self.getterInExtensionScope;
       //             ^^^^^^^^^^^^^^^^^^^^^^
       // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-      // [cfe] The getter 'getterInExtensionScope' isn't defined for the class 'A'.
+      // [cfe] The property 'getterInExtensionScope' is defined in multiple extensions for 'A' and neither is more specific.
       checkExtensionValue(t1);
       self.setterInExtensionScope = extensionValue;
       //   ^^^^^^^^^^^^^^^^^^^^^^
       // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-      // [cfe] The setter 'setterInExtensionScope' isn't defined for the class 'A'.
+      // [cfe] The property 'setterInExtensionScope' is defined in multiple extensions for 'A' and neither is more specific.
       bool t2 = self.methodInExtensionScope();
       //             ^^^^^^^^^^^^^^^^^^^^^^
       // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-      // [cfe] The method 'methodInExtensionScope' isn't defined for the class 'A'.
+      // [cfe] The method 'methodInExtensionScope' is defined in multiple extensions for 'A' and neither is more specific.
       checkExtensionValue(t2);
     }
 
@@ -238,27 +238,27 @@
       bool t0 = fieldInExtensionScope;
       //        ^^^^^^^^^^^^^^^^^^^^^
       // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-      // [cfe] The getter 'fieldInExtensionScope' isn't defined for the class 'B'.
+      // [cfe] The property 'fieldInExtensionScope' is defined in multiple extensions for 'B' and neither is more specific.
       //        ^^^^^^^^^^^^^^^^^^^^^
       // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
       checkExtensionValue(t0);
       bool t1 = getterInExtensionScope;
       //        ^^^^^^^^^^^^^^^^^^^^^^
       // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-      // [cfe] The getter 'getterInExtensionScope' isn't defined for the class 'B'.
+      // [cfe] The property 'getterInExtensionScope' is defined in multiple extensions for 'B' and neither is more specific.
       //        ^^^^^^^^^^^^^^^^^^^^^^
       // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
       checkExtensionValue(t1);
       setterInExtensionScope = extensionValue;
 //    ^^^^^^^^^^^^^^^^^^^^^^
 // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-// [cfe] The setter 'setterInExtensionScope' isn't defined for the class 'B'.
+// [cfe] The property 'setterInExtensionScope' is defined in multiple extensions for 'B' and neither is more specific.
 //    ^^^^^^^^^^^^^^^^^^^^^^
 // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
       bool t2 = methodInExtensionScope();
       //        ^^^^^^^^^^^^^^^^^^^^^^
       // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-      // [cfe] The method 'methodInExtensionScope' isn't defined for the class 'B'.
+      // [cfe] The method 'methodInExtensionScope' is defined in multiple extensions for 'B' and neither is more specific.
       checkExtensionValue(t2);
     }
 
@@ -283,21 +283,21 @@
     bool t0 = a.fieldInGlobalScope;
     //          ^^^^^^^^^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-    // [cfe] The getter 'fieldInGlobalScope' isn't defined for the class 'A'.
+    // [cfe] The property 'fieldInGlobalScope' is defined in multiple extensions for 'A' and neither is more specific.
     checkExtensionValue(t0);
     bool t1 = a.getterInGlobalScope;
     //          ^^^^^^^^^^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-    // [cfe] The getter 'getterInGlobalScope' isn't defined for the class 'A'.
+    // [cfe] The property 'getterInGlobalScope' is defined in multiple extensions for 'A' and neither is more specific.
     checkExtensionValue(t1);
     a.setterInGlobalScope = extensionValue;
     //^^^^^^^^^^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-    // [cfe] The setter 'setterInGlobalScope' isn't defined for the class 'A'.
+    // [cfe] The property 'setterInGlobalScope' is defined in multiple extensions for 'A' and neither is more specific.
     bool t2 = a.methodInGlobalScope();
     //          ^^^^^^^^^^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-    // [cfe] The method 'methodInGlobalScope' isn't defined for the class 'A'.
+    // [cfe] The method 'methodInGlobalScope' is defined in multiple extensions for 'A' and neither is more specific.
     checkExtensionValue(t2);
   }
 
@@ -312,21 +312,21 @@
     bool t0 = a.fieldInExtensionScope;
     //          ^^^^^^^^^^^^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-    // [cfe] The getter 'fieldInExtensionScope' isn't defined for the class 'A'.
+    // [cfe] The property 'fieldInExtensionScope' is defined in multiple extensions for 'A' and neither is more specific.
     checkExtensionValue(t0);
     bool t1 = a.getterInExtensionScope;
     //          ^^^^^^^^^^^^^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-    // [cfe] The getter 'getterInExtensionScope' isn't defined for the class 'A'.
+    // [cfe] The property 'getterInExtensionScope' is defined in multiple extensions for 'A' and neither is more specific.
     checkExtensionValue(t1);
     a.setterInExtensionScope = extensionValue;
     //^^^^^^^^^^^^^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-    // [cfe] The setter 'setterInExtensionScope' isn't defined for the class 'A'.
+    // [cfe] The property 'setterInExtensionScope' is defined in multiple extensions for 'A' and neither is more specific.
     bool t2 = a.methodInExtensionScope();
     //          ^^^^^^^^^^^^^^^^^^^^^^
     // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-    // [cfe] The method 'methodInExtensionScope' isn't defined for the class 'A'.
+    // [cfe] The method 'methodInExtensionScope' is defined in multiple extensions for 'A' and neither is more specific.
     checkExtensionValue(t2);
   }
 
diff --git a/tests/language_2/extension_methods/static_extension_prefix_import_conflict_test.dart b/tests/language_2/extension_methods/static_extension_prefix_import_conflict_test.dart
index 666fbcf7..7f3993f 100644
--- a/tests/language_2/extension_methods/static_extension_prefix_import_conflict_test.dart
+++ b/tests/language_2/extension_methods/static_extension_prefix_import_conflict_test.dart
@@ -12,5 +12,5 @@
   o.onObject;
   //^^^^^^^^
   // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-  // [cfe] The getter 'onObject' isn't defined for the class 'Object'.
+  // [cfe] The property 'onObject' is defined in multiple extensions for 'Object' and neither is more specific.
 }
diff --git a/tests/language_2/extension_methods/static_extension_resolution_failures_test.dart b/tests/language_2/extension_methods/static_extension_resolution_failures_test.dart
index dc9b18c..f68d72b 100644
--- a/tests/language_2/extension_methods/static_extension_resolution_failures_test.dart
+++ b/tests/language_2/extension_methods/static_extension_resolution_failures_test.dart
@@ -26,7 +26,7 @@
   c.v2;
   //^^
   // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-  // [cfe] The getter 'v2' isn't defined for the class 'C'.
+  // [cfe] The property 'v2' is defined in multiple extensions for 'C' and neither is more specific.
 
   Expect.equals("EA.v3", a.v3);
   Expect.equals("EA.v3", b1.v3);
@@ -51,20 +51,20 @@
   li.i_num;
   // ^^^^^
   // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-  // [cfe] The getter 'i_num' isn't defined for the class 'List<int>'.
+  // [cfe] The property 'i_num' is defined in multiple extensions for 'List<int>' and neither is more specific.
 
   // no most specific because both are equally specific.
   c.cs;
   //^^
   // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-  // [cfe] The getter 'cs' isn't defined for the class 'C'.
+  // [cfe] The property 'cs' is defined in multiple extensions for 'C' and neither is more specific.
 
   // Both EIT.e1 and ELO.e1 apply, but their instantiated on
   // types are incomparable, and hence this is an error.
   ln.e1();
   // ^^
   // [analyzer] COMPILE_TIME_ERROR.AMBIGUOUS_EXTENSION_MEMBER_ACCESS
-  // [cfe] The method 'e1' isn't defined for the class 'List<num>'.
+  // [cfe] The method 'e1' is defined in multiple extensions for 'List<num>' and neither is more specific.
 }
 
 // Diamond class hierarchy.
diff --git a/tests/language_2/string/const_interpolation2_test.dart b/tests/language_2/string/const_interpolation2_test.dart
index 968d2c2..c9c373c 100644
--- a/tests/language_2/string/const_interpolation2_test.dart
+++ b/tests/language_2/string/const_interpolation2_test.dart
@@ -9,9 +9,15 @@
 const u1 = null;
 const int u2 = null;
 const List u3 = null;
-const u4 = const String.fromEnvironment("XXXXX");
-const u5 = const int.fromEnvironment("XXXXX");
-const u6 = const bool.fromEnvironment("XXXXX", defaultValue: null);
+const u4 = const bool.hasEnvironment("XXXXX")
+    ? const String.fromEnvironment("XXXXX")
+    : null;
+const u5 = const bool.hasEnvironment("XXXXX")
+    ? const int.fromEnvironment("XXXXX")
+    : null;
+const u6 = bool.hasEnvironment("XXXXX")
+    ? const bool.fromEnvironment("XXXXX")
+    : null;
 const n1 = 42;
 const n2 = 3.1415;
 const int n3 = 37;
@@ -88,7 +94,7 @@
   Expect.equals(b2.toString(), sb2);
   Expect.equals(b3.toString(), sb3);
   Expect.equals(b4.toString(), sb4);
-  var expect = "null null null  0 null 42 3.1415 37 4.6692 2.71828 87 "
+  var expect = "null null null null null null 42 3.1415 37 4.6692 2.71828 87 "
       "s1 s2 s1s2 s4 true false false true";
   Expect.equals(expect, interpolation1);
   Expect.equals(expect, interpolation2);
diff --git a/tests/language_2/string/no_operator_test.dart b/tests/language_2/string/no_operator_test.dart
index e6bf231..e6da249 100644
--- a/tests/language_2/string/no_operator_test.dart
+++ b/tests/language_2/string/no_operator_test.dart
@@ -10,23 +10,23 @@
   Expect.throws(() => x < y);
   //                    ^
   // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
-  // [cfe] The method '<' isn't defined for the class 'String'.
+  // [cfe] The operator '<' isn't defined for the class 'String'.
   Expect.throws(() => x <= y);
   //                    ^^
   // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
-  // [cfe] The method '<=' isn't defined for the class 'String'.
+  // [cfe] The operator '<=' isn't defined for the class 'String'.
   Expect.throws(() => x > y);
   //                    ^
   // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
-  // [cfe] The method '>' isn't defined for the class 'String'.
+  // [cfe] The operator '>' isn't defined for the class 'String'.
   Expect.throws(() => x >= y);
   //                    ^^
   // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
-  // [cfe] The method '>=' isn't defined for the class 'String'.
+  // [cfe] The operator '>=' isn't defined for the class 'String'.
   Expect.throws(() => x - y);
   //                    ^
   // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
-  // [cfe] The method '-' isn't defined for the class 'String'.
+  // [cfe] The operator '-' isn't defined for the class 'String'.
   Expect.throws(() => x * y);
   //                      ^
   // [analyzer] STATIC_WARNING.ARGUMENT_TYPE_NOT_ASSIGNABLE
@@ -34,41 +34,41 @@
   Expect.throws(() => x / y);
   //                    ^
   // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
-  // [cfe] The method '/' isn't defined for the class 'String'.
+  // [cfe] The operator '/' isn't defined for the class 'String'.
   Expect.throws(() => x ~/ y);
   //                    ^^
   // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
-  // [cfe] The method '~/' isn't defined for the class 'String'.
+  // [cfe] The operator '~/' isn't defined for the class 'String'.
   Expect.throws(() => x % y);
   //                    ^
   // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
-  // [cfe] The method '%' isn't defined for the class 'String'.
+  // [cfe] The operator '%' isn't defined for the class 'String'.
   Expect.throws(() => x >> y);
   //                    ^^
   // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
-  // [cfe] The method '>>' isn't defined for the class 'String'.
+  // [cfe] The operator '>>' isn't defined for the class 'String'.
   Expect.throws(() => x << y);
   //                    ^^
   // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
-  // [cfe] The method '<<' isn't defined for the class 'String'.
+  // [cfe] The operator '<<' isn't defined for the class 'String'.
   Expect.throws(() => x & y);
   //                    ^
   // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
-  // [cfe] The method '&' isn't defined for the class 'String'.
+  // [cfe] The operator '&' isn't defined for the class 'String'.
   Expect.throws(() => x | y);
   //                    ^
   // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
-  // [cfe] The method '|' isn't defined for the class 'String'.
+  // [cfe] The operator '|' isn't defined for the class 'String'.
   Expect.throws(() => x ^ y);
   //                    ^
   // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
-  // [cfe] The method '^' isn't defined for the class 'String'.
+  // [cfe] The operator '^' isn't defined for the class 'String'.
   Expect.throws(() => -x);
   //                  ^
   // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
-  // [cfe] The method 'unary-' isn't defined for the class 'String'.
+  // [cfe] The operator 'unary-' isn't defined for the class 'String'.
   Expect.throws(() => ~x);
   //                  ^
   // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
-  // [cfe] The method '~' isn't defined for the class 'String'.
+  // [cfe] The operator '~' isn't defined for the class 'String'.
 }
diff --git a/tests/language_2/string/string_test.dart b/tests/language_2/string/string_test.dart
index 275d888..da6d40a 100644
--- a/tests/language_2/string/string_test.dart
+++ b/tests/language_2/string/string_test.dart
@@ -34,7 +34,7 @@
     a[1] = 12;
 //   ^^^
 // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
-// [cfe] The method '[]=' isn't defined for the class 'String'.
+// [cfe] The operator '[]=' isn't defined for the class 'String'.
   }
 
   static testCharCodes() {
diff --git a/tests/language_2/type_object/first_class_types_literals_test.dart b/tests/language_2/type_object/first_class_types_literals_test.dart
index e256332..77cf8b6 100644
--- a/tests/language_2/type_object/first_class_types_literals_test.dart
+++ b/tests/language_2/type_object/first_class_types_literals_test.dart
@@ -64,15 +64,15 @@
   Expect.throwsNoSuchMethodError(() => C + 1);
   //                                     ^
   // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
-  // [cfe] The method '+' isn't defined for the class 'Type'.
+  // [cfe] The operator '+' isn't defined for the class 'Type'.
   Expect.throwsNoSuchMethodError(() => C[2]);
   //                                    ^^^
   // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
-  // [cfe] The method '[]' isn't defined for the class 'Type'.
+  // [cfe] The operator '[]' isn't defined for the class 'Type'.
   Expect.throwsNoSuchMethodError(() => C[2] = 'hest');
   //                                    ^^^
   // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
-  // [cfe] The method '[]=' isn't defined for the class 'Type'.
+  // [cfe] The operator '[]=' isn't defined for the class 'Type'.
   Expect.throwsNoSuchMethodError(() => dynamic = 1);
   //                                   ^
   // [cfe] Setter not found: 'dynamic'.
@@ -86,15 +86,15 @@
   Expect.throwsNoSuchMethodError(() => dynamic + 1);
   //                                           ^
   // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
-  // [cfe] The method '+' isn't defined for the class 'Type'.
+  // [cfe] The operator '+' isn't defined for the class 'Type'.
   Expect.throwsNoSuchMethodError(() => dynamic[2]);
   //                                          ^^^
   // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
-  // [cfe] The method '[]' isn't defined for the class 'Type'.
+  // [cfe] The operator '[]' isn't defined for the class 'Type'.
   Expect.throwsNoSuchMethodError(() => dynamic[2] = 'hest');
   //                                          ^^^
   // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
-  // [cfe] The method '[]=' isn't defined for the class 'Type'.
+  // [cfe] The operator '[]=' isn't defined for the class 'Type'.
 
   Expect.equals((dynamic).toString(), 'dynamic');
 }
diff --git a/tests/language_2/type_variable/conflict2_test.dart b/tests/language_2/type_variable/conflict2_test.dart
index c164e5d..4a03e01 100644
--- a/tests/language_2/type_variable/conflict2_test.dart
+++ b/tests/language_2/type_variable/conflict2_test.dart
@@ -58,7 +58,7 @@
   grault() => T[0];
   //           ^^^
   // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
-  // [cfe] The method '[]' isn't defined for the class 'Type'.
+  // [cfe] The operator '[]' isn't defined for the class 'Type'.
 
   // Runtime type T not accessible from static context. Compile-time error.
   static garply() => T[0];
@@ -67,7 +67,7 @@
   // [cfe] Type variables can't be used in static members.
   //                  ^^^
   // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
-  // [cfe] The method '[]' isn't defined for the class 'Type'.
+  // [cfe] The operator '[]' isn't defined for the class 'Type'.
 
   // Class '_Type' has no member m: NoSuchMethodError.
   waldo() => T.m;
diff --git a/tests/language_2/unsorted/unevaluated_field.dart b/tests/language_2/unsorted/unevaluated_field.dart
index 3567a7c..5c701db 100644
--- a/tests/language_2/unsorted/unevaluated_field.dart
+++ b/tests/language_2/unsorted/unevaluated_field.dart
@@ -6,11 +6,13 @@
 
 import "package:expect/expect.dart";
 
-const int gx = const int.fromEnvironment("x");
+const int gx =
+    const bool.hasEnvironment("x") ? const int.fromEnvironment("x") : null;
 
 class A {
   final int x = gx;
-  final int y = const int.fromEnvironment("y");
+  final int y =
+      const bool.hasEnvironment("y") ? const int.fromEnvironment("y") : null;
   const A();
 }
 
diff --git a/tests/language_2/variance/syntax/variance_type_parameter_error_syntax_test.dart b/tests/language_2/variance/syntax/variance_type_parameter_error_syntax_test.dart
index 38c1d84..28c1add 100644
--- a/tests/language_2/variance/syntax/variance_type_parameter_error_syntax_test.dart
+++ b/tests/language_2/variance/syntax/variance_type_parameter_error_syntax_test.dart
@@ -18,7 +18,7 @@
   List<out String> bar;
   //  ^
   // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
-  // [cfe] The method '<' isn't defined for the class 'Type'.
+  // [cfe] The operator '<' isn't defined for the class 'Type'.
   //   ^^^
   // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
   // [cfe] Expected ';' after this.
@@ -27,7 +27,7 @@
   // [cfe] Getter not found: 'out'.
   //             ^
   // [analyzer] STATIC_TYPE_WARNING.UNDEFINED_OPERATOR
-  // [cfe] The method '>' isn't defined for the class 'Type'.
+  // [cfe] The operator '>' isn't defined for the class 'Type'.
   //               ^^^
   // [analyzer] STATIC_WARNING.UNDEFINED_IDENTIFIER
   // [cfe] Getter not found: 'bar'.
diff --git a/tests/language_2/vm/regress_28325_test.dart b/tests/language_2/vm/regress_28325_test.dart
deleted file mode 100644
index 95791ac..0000000
--- a/tests/language_2/vm/regress_28325_test.dart
+++ /dev/null
@@ -1,20 +0,0 @@
-// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Test source positions in async errors.
-
-import "package:expect/expect.dart";
-import "dart:io";
-
-main() async {
-  try {
-    await Socket.connect("localhost", 0);
-    Expect.isTrue(false); // Unreachable.
-  } catch (e, s) {
-    Expect.isTrue(e is SocketException);
-    Expect.isTrue(s.toString().contains("regress_28325_test.dart"));
-    print(s);
-    Expect.isTrue(s.toString().contains(":12")); // Line number of "await".
-  }
-}
diff --git a/tests/lib/async/future_foreach_test.dart b/tests/lib/async/future_foreach_test.dart
index 904ae80..af5426f 100644
--- a/tests/lib/async/future_foreach_test.dart
+++ b/tests/lib/async/future_foreach_test.dart
@@ -67,6 +67,7 @@
         case 2:
           return new Future.microtask(() {});
       }
+      return new Future.value();
     }).then((_) {
       Expect.fail("Did not throw");
     }, onError: (e) {
@@ -101,6 +102,7 @@
         case 2:
           return new Future.microtask(() {});
       }
+      return new Future.value();
     }).then((_) {
       Expect.fail("Did not throw");
     }, onError: (e) {
diff --git a/tests/lib/async/futures_test.dart b/tests/lib/async/futures_test.dart
index 6dd4311..1fd0648 100644
--- a/tests/lib/async/futures_test.dart
+++ b/tests/lib/async/futures_test.dart
@@ -56,7 +56,7 @@
     throw 'incorrect error';
   }).catchError((error, stackTrace) {
     Expect.equals('correct error', error);
-    Expect.isNull(stackTrace);
+    Expect.isNotNull(stackTrace);
   });
 }
 
@@ -73,7 +73,7 @@
     throw 'incorrect error 2';
   }).catchError((error, stackTrace) {
     Expect.equals('correct error', error);
-    Expect.isNull(stackTrace);
+    Expect.isNotNull(stackTrace);
   });
 }
 
@@ -90,7 +90,7 @@
     throw 'incorrect error 2';
   }).catchError((error, stackTrace) {
     Expect.equals('correct error', error);
-    Expect.isNull(stackTrace);
+    Expect.isNotNull(stackTrace);
   });
 }
 
@@ -192,8 +192,8 @@
 
 Future testForEachSync() {
   final seen = <int>[];
-  return Future.forEach([1, 2, 3, 4, 5], seen.add).then(
-      (_) => Expect.listEquals([1, 2, 3, 4, 5], seen));
+  return Future.forEach([1, 2, 3, 4, 5], seen.add)
+      .then((_) => Expect.listEquals([1, 2, 3, 4, 5], seen));
 }
 
 Future testForEachWithException() {
diff --git a/tests/lib/async/schedule_microtask_test.dart b/tests/lib/async/schedule_microtask_test.dart
index 8e12f4e..7ee540a 100644
--- a/tests/lib/async/schedule_microtask_test.dart
+++ b/tests/lib/async/schedule_microtask_test.dart
@@ -71,7 +71,7 @@
       Expect.equals(TOTAL, scheduleMicrotaskDone);
       completer.complete();
     });
-    Future scheduleMicrotaskCallback() {
+    void scheduleMicrotaskCallback() {
       scheduleMicrotaskDone++;
       if (scheduleMicrotaskDone != TOTAL) {
         scheduleMicrotask(scheduleMicrotaskCallback);
diff --git a/tests/lib/async/stream_timeout_test.dart b/tests/lib/async/stream_timeout_test.dart
index eb33ad2..d0ddc0d 100644
--- a/tests/lib/async/stream_timeout_test.dart
+++ b/tests/lib/async/stream_timeout_test.dart
@@ -16,7 +16,7 @@
     expect(tos.isBroadcast, false);
     tos.handleError(expectAsync((e, s) {
       expect(e, new isInstanceOf<TimeoutException>());
-      expect(s, null);
+      expect(s, StackTrace.empty);
     })).listen((v) {
       fail("Unexpected event");
     });
@@ -77,7 +77,7 @@
     expect(tos.isBroadcast, true);
     tos.handleError(expectAsync((e, s) {
       expect(e, new isInstanceOf<TimeoutException>());
-      expect(s, null);
+      expect(s, StackTrace.empty);
     })).listen((v) {
       fail("Unexpected event");
     });
@@ -89,7 +89,7 @@
     expect(tos.isBroadcast, true);
     tos.handleError(expectAsync((e, s) {
       expect(e, new isInstanceOf<TimeoutException>());
-      expect(s, null);
+      expect(s, StackTrace.empty);
     })).listen((v) {
       fail("Unexpected event");
     });
@@ -101,7 +101,7 @@
     expect(tos.isBroadcast, false);
     tos.handleError(expectAsync((e, s) {
       expect(e, new isInstanceOf<TimeoutException>());
-      expect(s, null);
+      expect(s, StackTrace.empty);
     })).listen((v) {
       fail("Unexpected event");
     });
diff --git a/tests/lib/async/stream_type_test.dart b/tests/lib/async/stream_type_test.dart
index 2a76d73..f13f0f3 100644
--- a/tests/lib/async/stream_type_test.dart
+++ b/tests/lib/async/stream_type_test.dart
@@ -26,7 +26,7 @@
   // Generic function used as parameter for, e.g., `skipWhile` and `reduce`.
   f([_1, _2]) => throw "unreachable";
 
-  bool testIntStream(stream(), name, int recursionDepth) {
+  void testIntStream(stream(), name, int recursionDepth) {
     checkIntStream(stream(), name);
     if (recursionDepth > 0) {
       checkIntSubscription(stream().listen(null), "$name.listen");
diff --git a/tests/lib/async/zone_run_test.dart b/tests/lib/async/zone_run_test.dart
index 5c319d0..508060e 100644
--- a/tests/lib/async/zone_run_test.dart
+++ b/tests/lib/async/zone_run_test.dart
@@ -35,6 +35,7 @@
   shouldForward = false;
   result = forked.run(() {
     Expect.fail("should not be invoked");
+    return -1;
   });
   Expect.equals(42, result);
   events.add("executed run2");
diff --git a/tests/lib/async/zone_run_unary_test.dart b/tests/lib/async/zone_run_unary_test.dart
index ebf78ee..b505bc5d 100644
--- a/tests/lib/async/zone_run_unary_test.dart
+++ b/tests/lib/async/zone_run_unary_test.dart
@@ -36,6 +36,7 @@
   shouldForward = false;
   result = forked.runUnary<int, int>((arg) {
     Expect.fail("should not be invoked");
+    return -1;
   }, 99);
   Expect.equals(42, result);
   events.add("executed run2");
diff --git a/tests/lib/isolate/bool_from_environment_default_value_test.dart b/tests/lib/isolate/bool_from_environment_default_value_test.dart
new file mode 100644
index 0000000..fb9d49b
--- /dev/null
+++ b/tests/lib/isolate/bool_from_environment_default_value_test.dart
@@ -0,0 +1,24 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import "dart:isolate";
+
+import "package:expect/expect.dart";
+
+void test(port) {
+  Expect.isFalse(const bool.fromEnvironment('NOT_FOUND'));
+  Expect.isTrue(const bool.fromEnvironment('NOT_FOUND', defaultValue: true));
+  Expect.isFalse(const bool.fromEnvironment('NOT_FOUND', defaultValue: false));
+  if (port != null) port.send(null);
+}
+
+main() {
+  test(null);
+  var port = new ReceivePort();
+  Isolate.spawn(test, port.sendPort);
+  port.listen((_) => port.close());
+}
diff --git a/tests/lib/isolate/capability_test.dart b/tests/lib/isolate/capability_test.dart
new file mode 100644
index 0000000..fd6c4d3
--- /dev/null
+++ b/tests/lib/isolate/capability_test.dart
@@ -0,0 +1,36 @@
+// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import "dart:isolate";
+import "package:expect/expect.dart";
+import "package:async_helper/async_helper.dart";
+
+void main() {
+  asyncStart();
+
+  test(c1, c2) {
+    asyncStart();
+    Expect.notEquals(c1, c2);
+    var receive = new RawReceivePort();
+    receive.sendPort.send(c1);
+    receive.handler = (c3) {
+      Expect.equals(c3, c1);
+      Expect.notEquals(c3, c2);
+      receive.close();
+      asyncEnd();
+    };
+  }
+
+  Capability c1 = new Capability();
+  Capability c2 = new Capability();
+  Capability c3 = (new RawReceivePort()..close()).sendPort;
+  Capability c4 = (new RawReceivePort()..close()).sendPort;
+  test(c1, c2);
+  test(c3, c4);
+  test(c1, c3);
+  asyncEnd();
+}
diff --git a/tests/lib/isolate/compile_time_error_test.dart b/tests/lib/isolate/compile_time_error_test.dart
new file mode 100644
index 0000000..21197fa
--- /dev/null
+++ b/tests/lib/isolate/compile_time_error_test.dart
@@ -0,0 +1,39 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+// Dart test program for testing that errors thrown from isolates are
+// processed correctly and don't result in crashes.
+
+library Isolate3NegativeTest;
+
+import 'dart:isolate';
+import 'dart:async';
+import "package:async_helper/async_helper.dart";
+
+class TestClass {
+  TestClass.named(num this.fld1)
+  // Should cause a compilation error (for the spawned isolate). It is a
+  // runtime error for the test.
+    : fld2 = this.fld1 // //# 01: compile-time error
+  ;
+  late num fld1;
+  late num fld2;
+}
+
+void entry(SendPort replyTo) {
+  var tmp = new TestClass.named(10);
+  replyTo.send("done");
+}
+
+main() {
+  asyncStart();
+  ReceivePort response = new ReceivePort();
+  Isolate.spawn(entry, response.sendPort);
+  response.first.then((_) {
+    asyncEnd();
+  });
+}
diff --git a/tests/lib/isolate/count_test.dart b/tests/lib/isolate/count_test.dart
new file mode 100644
index 0000000..6a7de3b
--- /dev/null
+++ b/tests/lib/isolate/count_test.dart
@@ -0,0 +1,63 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+library CountTest;
+
+import 'dart:isolate';
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
+
+void countMessages(replyTo) {
+  int count = 0;
+  var port = new ReceivePort();
+  replyTo.send(["init", port.sendPort]);
+  port.listen((_message) {
+    int message = _message;
+    if (message == -1) {
+      Expect.equals(count, 10);
+      replyTo.send(["done"]);
+      port.close();
+      return;
+    }
+    count++;
+    Expect.equals(message, count);
+    replyTo.send(["count", message * 2]);
+  });
+}
+
+void main([args, port]) {
+  //testRemote(main, port);
+  ReceivePort local = new ReceivePort();
+  Isolate.spawn(countMessages, local.sendPort);
+  SendPort? remote;
+  int count = 0;
+  asyncStart();
+  local.listen((msg) {
+    switch (msg[0]) {
+      case "init":
+        Expect.equals(remote, null);
+        remote = msg[1];
+        remote!.send(++count);
+        break;
+      case "count":
+        Expect.equals(msg[1], count * 2);
+        if (count == 10) {
+          remote!.send(-1);
+        } else {
+          remote!.send(++count);
+        }
+        break;
+      case "done":
+        Expect.equals(count, 10);
+        local.close();
+        asyncEnd();
+        break;
+      default:
+        Expect.fail("unreachable: ${msg[0]}");
+    }
+  });
+}
diff --git a/tests/lib/isolate/cross_isolate_message_test.dart b/tests/lib/isolate/cross_isolate_message_test.dart
new file mode 100644
index 0000000..ede3792
--- /dev/null
+++ b/tests/lib/isolate/cross_isolate_message_test.dart
@@ -0,0 +1,61 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+// Dart test program for testing that isolates can communicate to isolates
+// other than the main isolate.
+
+library CrossIsolateMessageTest;
+
+import 'dart:isolate';
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
+
+/*
+ * Everything starts in the main-isolate (in the main-method).
+ * The main isolate spawns two isolates: isolate1 (with entry point
+ * 'crossIsolate1') and isolate2 (with entry point 'crossIsolate2').
+ *
+ * The main isolate creates two isolates, isolate1 and isolate2.
+ * The second isolate is created with a send-port being listened on by
+ * isolate1. A message is passed along this from isolate2 to isolate1.
+ * Isolate1 then sends the result back to the main isolate for final checking.
+ */
+
+void crossIsolate1(SendPort mainIsolate) {
+  ReceivePort local = new ReceivePort();
+  mainIsolate.send(["ready1", local.sendPort]);
+  local.first.then((msg) {
+    // Message from crossIsolate2
+    Expect.equals(msg[0], "fromIsolate2");
+    mainIsolate.send(["fromIsolate1", msg[1] + 58]); // 100.
+  });
+}
+
+void crossIsolate2(SendPort toIsolate1) {
+  toIsolate1.send(["fromIsolate2", 42]);
+}
+
+void main([args, port]) {
+  ReceivePort fromIsolate1 = new ReceivePort();
+  Isolate.spawn(crossIsolate1, fromIsolate1.sendPort);
+
+  asyncStart();
+  fromIsolate1.listen((msg) {
+    switch (msg[0]) {
+      case "ready1":
+        SendPort toIsolate1 = msg[1];
+        Isolate.spawn(crossIsolate2, toIsolate1);
+        break;
+      case "fromIsolate1":
+        Expect.equals(msg[1], 100);
+        fromIsolate1.close();
+        break;
+      default:
+        Expect.fail("unreachable! Tag: ${msg[0]}");
+    }
+  }, onDone: asyncEnd);
+}
diff --git a/tests/lib/isolate/deferred_in_isolate2_lib.dart b/tests/lib/isolate/deferred_in_isolate2_lib.dart
new file mode 100644
index 0000000..e3fea39
--- /dev/null
+++ b/tests/lib/isolate/deferred_in_isolate2_lib.dart
@@ -0,0 +1,8 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Used by deferred_in_isolate2_test.
+library deferred_in_isolate2_lib;
+
+String f() => "hi";
diff --git a/tests/lib/isolate/deferred_in_isolate2_test.dart b/tests/lib/isolate/deferred_in_isolate2_test.dart
new file mode 100644
index 0000000..52e5428
--- /dev/null
+++ b/tests/lib/isolate/deferred_in_isolate2_test.dart
@@ -0,0 +1,30 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+library deferred_in_isolate2_test;
+
+import 'dart:isolate';
+import 'dart:async';
+import 'package:async_helper/async_minitest.dart';
+
+import 'deferred_in_isolate2_lib.dart' deferred as lib;
+
+loadDeferred(port) {
+  lib.loadLibrary().then((_) {
+    port.send(lib.f());
+  });
+}
+
+main() {
+  test("Deferred loading in isolate", () {
+    ReceivePort port = new ReceivePort();
+    port.first.then(expectAsync((msg) {
+      expect(msg, equals("hi"));
+    }));
+    Isolate.spawn(loadDeferred, port.sendPort);
+  });
+}
diff --git a/tests/lib/isolate/deferred_in_isolate_app.dart b/tests/lib/isolate/deferred_in_isolate_app.dart
new file mode 100644
index 0000000..3c1f9dc
--- /dev/null
+++ b/tests/lib/isolate/deferred_in_isolate_app.dart
@@ -0,0 +1,28 @@
+// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'deferred_in_isolate_lib.dart' deferred as test;
+
+void main(args, msg) {
+  assert(args != null);
+  assert(args.length == 1);
+  assert(msg != null);
+  assert(msg.length == 1);
+
+  var expectedMsg = args[0];
+  var replyPort = msg[0];
+
+  try {
+    print("BeforeLibraryLoading");
+
+    test.loadLibrary().then((_) {
+      var obj = new test.DeferredObj(expectedMsg);
+      replyPort.send(obj.toString());
+    }).catchError((error) {
+      replyPort.send("Error from isolate:\n$error");
+    });
+  } catch (exception, stacktrace) {
+    replyPort.send("Exception from isolate:\n$exception\n$stacktrace");
+  }
+}
diff --git a/tests/lib/isolate/deferred_in_isolate_lib.dart b/tests/lib/isolate/deferred_in_isolate_lib.dart
new file mode 100644
index 0000000..ed7e475
--- /dev/null
+++ b/tests/lib/isolate/deferred_in_isolate_lib.dart
@@ -0,0 +1,12 @@
+// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library deferred_in_isolate_lib;
+
+class DeferredObj {
+  DeferredObj(this._val);
+  toString() => "$_val";
+
+  var _val;
+}
diff --git a/tests/lib/isolate/deferred_in_isolate_test.dart b/tests/lib/isolate/deferred_in_isolate_test.dart
new file mode 100644
index 0000000..d44f075
--- /dev/null
+++ b/tests/lib/isolate/deferred_in_isolate_test.dart
@@ -0,0 +1,40 @@
+// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+// Test that deferred libraries are supported from isolates other than the root
+// isolate.
+
+import 'dart:isolate';
+
+main() {
+  try {
+    var receivePort = new RawReceivePort();
+    var expectedMsg = "Deferred Loaded.";
+
+    receivePort.handler = (msg) {
+      if (msg != expectedMsg) {
+        print("Test failed.");
+        throw msg; // Fail the test if the message is not expected.
+      }
+      print('Test done.');
+      receivePort.close();
+    };
+
+    var stopwatch = new Stopwatch()..start();
+    Isolate.spawnUri(new Uri(path: 'deferred_in_isolate_app.dart'),
+        [expectedMsg], [receivePort.sendPort]).then((isolate) {
+      print('Isolate spawn: ${stopwatch.elapsedMilliseconds}ms');
+    }).catchError((error) {
+      print(error);
+    });
+  } catch (exception, stackTrace) {
+    print('Test failed.');
+    print(exception);
+    print(stackTrace);
+    rethrow;
+  }
+}
diff --git a/tests/lib/isolate/deferred_loaded_lib.dart b/tests/lib/isolate/deferred_loaded_lib.dart
new file mode 100644
index 0000000..4fcc2d0
--- /dev/null
+++ b/tests/lib/isolate/deferred_loaded_lib.dart
@@ -0,0 +1,8 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+class FromChildIsolate {
+  String toString() => 'from child isolate';
+  int get fld => 10;
+}
diff --git a/tests/lib/isolate/enum_const_test.dart b/tests/lib/isolate/enum_const_test.dart
new file mode 100644
index 0000000..0a57f13
--- /dev/null
+++ b/tests/lib/isolate/enum_const_test.dart
@@ -0,0 +1,31 @@
+// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import "dart:isolate";
+import "package:expect/expect.dart";
+
+enum Foo { BAR, BAZ }
+
+verify(val) {
+  Expect.identical(Foo.BAR, val);
+}
+
+main() {
+  test1(); //# 01: ok
+  test2(); //# 02: ok
+}
+
+test1() => verify(Foo.BAR);
+
+test2() {
+  var rp;
+  rp = new RawReceivePort((val) {
+    verify(val);
+    rp.close();
+  });
+  rp.sendPort.send(Foo.BAR);
+}
diff --git a/tests/lib/isolate/error_at_spawn_test.dart b/tests/lib/isolate/error_at_spawn_test.dart
new file mode 100644
index 0000000..c22f41e
--- /dev/null
+++ b/tests/lib/isolate/error_at_spawn_test.dart
@@ -0,0 +1,36 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+library error_at_spawn;
+
+import "dart:isolate";
+import "dart:async";
+import "package:async_helper/async_helper.dart";
+import "package:expect/expect.dart";
+
+isomain(args) {
+  throw new ArgumentError("fast error");
+}
+
+main() {
+  asyncStart();
+
+  // Capture errors from other isolate as raw messages.
+  RawReceivePort errorPort = new RawReceivePort();
+  errorPort.handler = (message) {
+    String error = message[0];
+    String stack = message[1];
+    Expect.equals(new ArgumentError("fast error").toString(), "$error");
+    errorPort.close();
+    asyncEnd();
+  };
+
+  Isolate.spawn(isomain, null,
+      // Setup handler as part of spawn.
+      errorsAreFatal: false,
+      onError: errorPort.sendPort);
+}
diff --git a/tests/lib/isolate/error_at_spawnuri_iso.dart b/tests/lib/isolate/error_at_spawnuri_iso.dart
new file mode 100644
index 0000000..b165051
--- /dev/null
+++ b/tests/lib/isolate/error_at_spawnuri_iso.dart
@@ -0,0 +1,9 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library error_at_spawnuri_iso;
+
+main() {
+  throw new ArgumentError("fast error");
+}
diff --git a/tests/lib/isolate/error_at_spawnuri_test.dart b/tests/lib/isolate/error_at_spawnuri_test.dart
new file mode 100644
index 0000000..6d0e073
--- /dev/null
+++ b/tests/lib/isolate/error_at_spawnuri_test.dart
@@ -0,0 +1,32 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+library error_at_spawnuri;
+
+import "dart:isolate";
+import "dart:async";
+import "package:async_helper/async_helper.dart";
+import "package:expect/expect.dart";
+
+main() {
+  asyncStart();
+
+  // Capture errors from other isolate as raw messages.
+  RawReceivePort errorPort = new RawReceivePort();
+  errorPort.handler = (message) {
+    String error = message[0];
+    String stack = message[1];
+    Expect.equals(new ArgumentError("fast error").toString(), "$error");
+    errorPort.close();
+    asyncEnd();
+  };
+
+  Isolate.spawnUri(Uri.parse("error_at_spawnuri_iso.dart"), [], null,
+      // Setup handler as part of spawn.
+      errorsAreFatal: false,
+      onError: errorPort.sendPort);
+}
diff --git a/tests/lib/isolate/error_exit_at_spawn_test.dart b/tests/lib/isolate/error_exit_at_spawn_test.dart
new file mode 100644
index 0000000..9543025
--- /dev/null
+++ b/tests/lib/isolate/error_exit_at_spawn_test.dart
@@ -0,0 +1,22 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+library error_exit_at_spawn;
+
+import "dart:isolate";
+
+import 'error_exit_at_spawning_shared.dart';
+
+main() {
+  testIsolate((SendPort replyPort, SendPort errorPort, SendPort exitPort) {
+    Isolate.spawn(isomain, replyPort,
+        // Setup handlers as part of spawn.
+        errorsAreFatal: false,
+        onError: errorPort,
+        onExit: exitPort);
+  });
+}
diff --git a/tests/lib/isolate/error_exit_at_spawning_shared.dart b/tests/lib/isolate/error_exit_at_spawning_shared.dart
new file mode 100644
index 0000000..d59140e
--- /dev/null
+++ b/tests/lib/isolate/error_exit_at_spawning_shared.dart
@@ -0,0 +1,91 @@
+// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library error_exit_at_spawning_shared;
+
+import "dart:isolate";
+
+import "package:async_helper/async_helper.dart";
+import "package:expect/expect.dart";
+
+// Used by
+//   isolate/error_exit_at_spawn_test.dart
+//   isolate/error_exit_at_spawnuri_test.dart
+
+isomain(replyPort) {
+  final RawReceivePort port = new RawReceivePort();
+  port.handler = (v) {
+    switch (v) {
+      case 0:
+        replyPort.send(42);
+        break;
+      case 1:
+        throw new ArgumentError("whoops");
+      case 2:
+        throw new RangeError.value(37);
+      case 3:
+        port.close();
+    }
+  };
+  replyPort.send(port.sendPort);
+}
+
+testIsolate(
+    void spawnIsolate(SendPort reply, SendPort errorPort, SendPort exitPort)) {
+  asyncStart();
+  // Setup the port for communication with the newly spawned isolate.
+  RawReceivePort reply = new RawReceivePort(null);
+  late SendPort sendPort;
+  int state = 0;
+  reply.handler = (port) {
+    sendPort = port;
+    port.send(state);
+    reply.handler = (v) {
+      Expect.equals(0, state);
+      Expect.equals(42, v);
+      state++;
+      sendPort.send(state);
+    };
+  };
+
+  // Capture errors from other isolate as raw messages.
+  RawReceivePort errorPort = new RawReceivePort();
+  errorPort.handler = (List errorStackTuple) {
+    String error = errorStackTuple[0];
+    switch (state) {
+      case 1:
+        Expect.equals(new ArgumentError("whoops").toString(), "$error");
+        state++;
+        sendPort.send(state);
+        break;
+      case 2:
+        Expect.equals(new RangeError.value(37).toString(), "$error");
+        state++;
+        sendPort.send(state);
+        reply.close();
+        errorPort.close();
+        break;
+      default:
+        throw "Bad state for error: $state: $error";
+    }
+  };
+
+  // Get exit notifications from other isolate as raw messages.
+  RawReceivePort exitPort = new RawReceivePort();
+  exitPort.handler = (message) {
+    // onExit ports registered at spawn cannot have a particular message
+    // associated.
+    Expect.equals(null, message);
+    // Only exit after sending the termination message.
+    Expect.equals(3, state);
+    exitPort.close();
+    asyncEnd();
+  };
+
+  spawnIsolate(reply.sendPort, errorPort.sendPort, exitPort.sendPort);
+}
+
+// Used by
+//    isolate/error_exit_at_spawnuri_test.dart
+main(args, replyPort) => isomain(replyPort);
diff --git a/tests/lib/isolate/error_exit_at_spawnuri_test.dart b/tests/lib/isolate/error_exit_at_spawnuri_test.dart
new file mode 100644
index 0000000..cf32b98
--- /dev/null
+++ b/tests/lib/isolate/error_exit_at_spawnuri_test.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+library error_exit_at_spawnuri;
+
+import "dart:isolate";
+
+import 'error_exit_at_spawning_shared.dart';
+
+main() {
+  testIsolate((SendPort replyPort, SendPort errorPort, SendPort exitPort) {
+    Isolate.spawnUri(
+        Uri.parse("error_exit_at_spawning_shared.dart"), [], replyPort,
+        // Setup handlers as part of spawn.
+        errorsAreFatal: false,
+        onError: errorPort,
+        onExit: exitPort);
+  });
+}
diff --git a/tests/lib/isolate/exit_at_spawn_test.dart b/tests/lib/isolate/exit_at_spawn_test.dart
new file mode 100644
index 0000000..4a2574e
--- /dev/null
+++ b/tests/lib/isolate/exit_at_spawn_test.dart
@@ -0,0 +1,53 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+library exit_at_spawn;
+
+import "dart:isolate";
+import "dart:async";
+import "package:async_helper/async_helper.dart";
+import "package:expect/expect.dart";
+
+// Isolate exiting immediately.
+isomain(args) {}
+
+// Isolate exiting after running microtasks.
+isomain2(args) {
+  scheduleMicrotask(() {});
+}
+
+// Isolate exiting after running timers.
+isomain3(args) {
+  new Timer(Duration.zero, () {});
+}
+
+main() {
+  asyncStart();
+
+  test(isomain);
+  test(isomain2);
+  test(isomain3);
+
+  asyncEnd();
+}
+
+void test(mainFunction) {
+  asyncStart();
+
+  RawReceivePort exitPort = new RawReceivePort();
+  exitPort.handler = (message) {
+    Expect.equals(null, message);
+    exitPort.close();
+    asyncEnd();
+  };
+
+  // Ignore returned Future.
+  Isolate.spawn(mainFunction, null,
+      // Setup handler as part of spawn.
+      errorsAreFatal: false,
+      onExit: exitPort.sendPort);
+}
diff --git a/tests/lib/isolate/exit_at_spawnuri_iso.dart b/tests/lib/isolate/exit_at_spawnuri_iso.dart
new file mode 100644
index 0000000..9bc892e
--- /dev/null
+++ b/tests/lib/isolate/exit_at_spawnuri_iso.dart
@@ -0,0 +1,7 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library exit_at_spawn_iso;
+
+main() {}
diff --git a/tests/lib/isolate/exit_at_spawnuri_test.dart b/tests/lib/isolate/exit_at_spawnuri_test.dart
new file mode 100644
index 0000000..5bb9ed8
--- /dev/null
+++ b/tests/lib/isolate/exit_at_spawnuri_test.dart
@@ -0,0 +1,29 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+library exit_at_spawn;
+
+import "dart:isolate";
+import "package:async_helper/async_helper.dart";
+import "package:expect/expect.dart";
+
+main() {
+  asyncStart();
+
+  RawReceivePort exitPort = new RawReceivePort();
+  exitPort.handler = (message) {
+    Expect.equals(null, message);
+    exitPort.close();
+    asyncEnd();
+  };
+
+  // Ignore returned Future.
+  Isolate.spawnUri(Uri.parse("exit_at_spawnuri_iso.dart"), [], null,
+      // Setup handler as part of spawn.
+      errorsAreFatal: false,
+      onExit: exitPort.sendPort);
+}
diff --git a/tests/lib/isolate/function_send1_test.dart b/tests/lib/isolate/function_send1_test.dart
new file mode 100644
index 0000000..b25042e
--- /dev/null
+++ b/tests/lib/isolate/function_send1_test.dart
@@ -0,0 +1,150 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import "dart:isolate";
+import "dart:async";
+import "package:expect/expect.dart";
+import "package:async_helper/async_helper.dart";
+
+void toplevel(port, message) {
+  port.send("toplevel:$message");
+}
+
+Function createFuncToplevel() => (p, m) {
+      p.send(m);
+    };
+
+class C {
+  Function initializer;
+  Function body;
+  C()
+      : initializer = ((p, m) {
+          throw "initializer";
+        }),
+        body = ((p, m) {
+          throw "body";
+        }) {}
+  static void staticFunc(port, message) {
+    port.send("static:$message");
+  }
+
+  static Function createFuncStatic() => (p, m) {
+        throw "static expr";
+      };
+  void instanceMethod(p, m) {
+    throw "instanceMethod";
+  }
+
+  Function createFuncMember() => (p, m) {
+        throw "instance expr";
+      };
+  void call(n, p) {
+    throw "C";
+  }
+}
+
+class Callable {
+  void call(p, m) {
+    p.send(["callable", m]);
+  }
+}
+
+void main() {
+  asyncStart();
+
+  // top-level functions, static functions, closures, instance methods
+  // or function expressions are not sendable to an isolate spawned using
+  // spawnUri.
+  testUnsendable("toplevel", toplevel);
+  testUnsendable("static", C.staticFunc);
+  var c = new C();
+  testUnsendable("instance method", c.instanceMethod);
+  testUnsendable("static context expression", createFuncToplevel());
+  testUnsendable("static context expression", C.createFuncStatic());
+  testUnsendable("initializer context expression", c.initializer);
+  testUnsendable("constructor context expression", c.body);
+  testUnsendable("instance method context expression", c.createFuncMember());
+  testUnsendable("toplevel", toplevel.call);
+  testUnsendable("static", C.staticFunc.call);
+  testUnsendable("callable object", new Callable().call);
+
+  asyncEnd();
+  return;
+}
+
+// Create a receive port that expects exactly one message.
+// Pass the message to `callback` and return the sendPort.
+SendPort singleMessagePort(callback) {
+  var p;
+  p = new RawReceivePort((v) {
+    p.close();
+    callback(v);
+  });
+  return p.sendPort;
+}
+
+// A singleMessagePort that expects the message to be a specific value.
+SendPort expectMessagePort(message) {
+  asyncStart();
+  return singleMessagePort((v) {
+    Expect.equals(message, v);
+    asyncEnd();
+  });
+}
+
+// Creates a new isolate and a pair of ports that expect a single message
+// to be sent to the other isolate and back to the callback function.
+Future<SendPort> echoPort(callback(value)) {
+  Completer<SendPort> completer = new Completer<SendPort>();
+  SendPort replyPort = singleMessagePort(callback);
+  late RawReceivePort initPort;
+  initPort = new RawReceivePort((p) {
+    completer.complete(p);
+    initPort.close();
+  });
+  return Isolate.spawn(_echo, [replyPort, initPort.sendPort])
+      .then((isolate) => completer.future);
+}
+
+void _echo(msg) {
+  var replyPort = msg[0];
+  late RawReceivePort requestPort;
+  requestPort = new RawReceivePort((msg) {
+    replyPort.send(msg);
+    requestPort.close(); // Single echo only.
+  });
+  msg[1].send(requestPort.sendPort);
+}
+
+// Creates other isolate that waits for a single message, `msg`, on the returned
+// port, and executes it as `msg[0](msg[1],msg[2])` in the other isolate.
+Future<SendPort> callPort() {
+  Completer<SendPort> completer = new Completer<SendPort>();
+  SendPort initPort = singleMessagePort(completer.complete);
+  return Isolate.spawn(_call, initPort).then((_) => completer.future);
+}
+
+void _call(initPort) {
+  initPort.send(singleMessagePort(callFunc));
+}
+
+void testUnsendable(name, func) {
+  asyncStart();
+  Isolate.spawnUri(Uri.parse("function_send_test.dart"), [], func)
+      .then((v) => throw "allowed spawn direct?", onError: (e, s) {
+    asyncEnd();
+  });
+  asyncStart();
+  Isolate.spawnUri(Uri.parse("function_send_test.dart"), [], [func])
+      .then((v) => throw "allowed spawn wrapped?", onError: (e, s) {
+    asyncEnd();
+  });
+}
+
+void callFunc(message) {
+  message[0](message[1], message[2]);
+}
diff --git a/tests/lib/isolate/function_send_test.dart b/tests/lib/isolate/function_send_test.dart
new file mode 100644
index 0000000..24e9d77
--- /dev/null
+++ b/tests/lib/isolate/function_send_test.dart
@@ -0,0 +1,222 @@
+// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import "dart:isolate";
+import "dart:async";
+import "package:expect/expect.dart";
+import "package:async_helper/async_helper.dart";
+
+void toplevel(port, message) {
+  port.send("toplevel:$message");
+}
+
+Function createFuncToplevel() => (p, m) {
+      p.send(m);
+    };
+
+class C {
+  Function initializer;
+  Function body;
+  C()
+      : initializer = ((p, m) {
+          throw "initializer";
+        }),
+        body = ((p, m) {
+          throw "body";
+        }) {}
+  static void staticFunc(port, message) {
+    port.send("static:$message");
+  }
+
+  static Function createFuncStatic() => (p, m) {
+        throw "static expr";
+      };
+  void instanceMethod(p, m) {
+    throw "instanceMethod";
+  }
+
+  Function createFuncMember() => (p, m) {
+        throw "instance expr";
+      };
+  void call(n, p) {
+    throw "C";
+  }
+}
+
+class Callable {
+  void call(p, m) {
+    p.send(["callable", m]);
+  }
+}
+
+void main() {
+  asyncStart();
+
+  // Sendables are top-level functions and static functions only.
+  testSendable("toplevel", toplevel);
+  testSendable("static", C.staticFunc);
+  // Unsendables are any closure - instance methods or function expression.
+  var c = new C();
+  testUnsendable("instance method", c.instanceMethod);
+  testUnsendable("static context expression", createFuncToplevel());
+  testUnsendable("static context expression", C.createFuncStatic());
+  testUnsendable("initializer context expression", c.initializer);
+  testUnsendable("constructor context expression", c.body);
+  testUnsendable("instance method context expression", c.createFuncMember());
+
+  // The result of `toplevel.call` and `staticFunc.call` may or may not be
+  // identical to `toplevel` and `staticFunc` respectively. If they are not
+  // equal, they may or may not be considered toplevel/static functions anyway,
+  // and therefore sendable. The VM and dart2js currently disagree on whether
+  // `toplevel` and `toplevel.call` are identical, both allow them to be sent.
+  // If this is ever specified to something else, use:
+  //     testUnsendable("toplevel.call", toplevel.call);
+  //     testUnsendable("static.call", C.staticFunc.call);
+  // instead.
+  // These two tests should be considered canaries for accidental behavior
+  // change rather than requirements.
+  testSendable("toplevel", toplevel.call);
+  testSendable("static", C.staticFunc.call);
+
+  // Callable objects are sendable if general objects are (VM yes, dart2js no).
+  // It's unspecified whether arbitrary objects can be sent. If it is specified,
+  // add a test that `new Callable()` is either sendable or unsendable.
+
+  // The call method of a callable object is a closure holding the object,
+  // not a top-level or static function, so it should be blocked, just as
+  // a normal method.
+  testUnsendable("callable object", new Callable().call);
+
+  asyncEnd();
+  return;
+}
+
+// Create a receive port that expects exactly one message.
+// Pass the message to `callback` and return the sendPort.
+SendPort singleMessagePort(callback) {
+  var p;
+  p = new RawReceivePort((v) {
+    p.close();
+    callback(v);
+  });
+  return p.sendPort;
+}
+
+// A singleMessagePort that expects the message to be a specific value.
+SendPort expectMessagePort(message) {
+  asyncStart();
+  return singleMessagePort((v) {
+    Expect.equals(message, v);
+    asyncEnd();
+  });
+}
+
+void testSendable(name, func) {
+  // Function as spawn message.
+  Isolate.spawn(callFunc, [func, expectMessagePort("$name:spawn"), "spawn"]);
+
+  // Send function to same isolate.
+  var reply = expectMessagePort("$name:direct");
+  singleMessagePort(callFunc).send([func, reply, "direct"]);
+
+  // Send function to other isolate, call it there.
+  reply = expectMessagePort("$name:other isolate");
+  callPort().then((p) {
+    p.send([func, reply, "other isolate"]);
+  });
+
+  // Round-trip function trough other isolate.
+  echoPort((roundtripFunc) {
+    Expect.identical(func, roundtripFunc, "$name:send through isolate");
+  }).then((port) {
+    port.send(func);
+  });
+}
+
+// Creates a new isolate and a pair of ports that expect a single message
+// to be sent to the other isolate and back to the callback function.
+Future<SendPort> echoPort(callback(value)) {
+  final completer = new Completer<SendPort>();
+  SendPort replyPort = singleMessagePort(callback);
+  late RawReceivePort initPort;
+  initPort = new RawReceivePort((p) {
+    completer.complete(p);
+    initPort.close();
+  });
+  return Isolate.spawn(_echo, [replyPort, initPort.sendPort])
+      .then((isolate) => completer.future);
+}
+
+void _echo(msg) {
+  var replyPort = msg[0];
+  late RawReceivePort requestPort;
+  requestPort = new RawReceivePort((msg) {
+    replyPort.send(msg);
+    requestPort.close(); // Single echo only.
+  });
+  msg[1].send(requestPort.sendPort);
+}
+
+// Creates other isolate that waits for a single message, `msg`, on the returned
+// port, and executes it as `msg[0](msg[1],msg[2])` in the other isolate.
+Future<SendPort> callPort() {
+  final completer = new Completer<SendPort>();
+  SendPort initPort = singleMessagePort(completer.complete);
+  return Isolate.spawn(_call, initPort).then((_) => completer.future);
+}
+
+void _call(initPort) {
+  initPort.send(singleMessagePort(callFunc));
+}
+
+void testUnsendable(name, func) {
+  asyncStart();
+  Isolate.spawn(nop, func).then((v) => throw "allowed spawn direct?",
+      onError: (e, s) {
+    asyncEnd();
+  });
+  asyncStart();
+  Isolate.spawn(nop, [func]).then((v) => throw "allowed spawn wrapped?",
+      onError: (e, s) {
+    asyncEnd();
+  });
+
+  asyncStart();
+  var noReply = new RawReceivePort((_) {
+    throw "Unexpected message: $_";
+  });
+  Expect.throws(() {
+    noReply.sendPort.send(func);
+  }, null, "send direct");
+  Expect.throws(() {
+    noReply.sendPort.send([func]);
+  }, null, "send wrapped");
+  scheduleMicrotask(() {
+    noReply.close();
+    asyncEnd();
+  });
+
+  // Try sending through other isolate.
+  asyncStart();
+  echoPort((v) {
+    Expect.equals(0, v);
+  }).then((p) {
+    try {
+      p.send(func);
+    } finally {
+      p.send(0); //   Closes echo port.
+    }
+  }).then((p) => throw "unreachable 2", onError: (e, s) {
+    asyncEnd();
+  });
+}
+
+void nop(_) {}
+
+void callFunc(message) {
+  message[0](message[1], message[2]);
+}
diff --git a/tests/lib/isolate/handle_error2_test.dart b/tests/lib/isolate/handle_error2_test.dart
new file mode 100644
index 0000000..8e36364
--- /dev/null
+++ b/tests/lib/isolate/handle_error2_test.dart
@@ -0,0 +1,90 @@
+// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+library handle_error_test;
+
+import "dart:isolate";
+import "dart:async";
+import "package:async_helper/async_helper.dart";
+import "package:expect/expect.dart";
+
+isomain1(replyPort) {
+  RawReceivePort port = new RawReceivePort();
+  port.handler = (v) {
+    switch (v) {
+      case 0:
+        replyPort.send(42);
+        break;
+      case 1:
+        throw new ArgumentError("whoops");
+      case 2:
+        throw new RangeError.value(37);
+      case 3:
+        port.close();
+    }
+  };
+  replyPort.send(port.sendPort);
+}
+
+/// Do Isolate.spawn(entry) and get a sendPort from the isolate that it
+/// expects commands on.
+/// The isolate has errors set to non-fatal.
+/// Returns a list of `[isolate, commandPort]` in a future.
+Future spawn(entry) {
+  ReceivePort reply = new ReceivePort();
+  var isolate = Isolate.spawn(entry, reply.sendPort, paused: true);
+  return isolate.then((Isolate isolate) {
+    isolate.setErrorsFatal(false);
+    isolate.resume(isolate.pauseCapability!);
+    Future result = reply.first.then((sendPort) {
+      return [isolate, sendPort];
+    });
+    return result;
+  });
+}
+
+main() {
+  asyncStart();
+  RawReceivePort reply = new RawReceivePort(null);
+  // Create two isolates waiting for commands, with errors non-fatal.
+  Future iso1 = spawn(isomain1);
+  Future iso2 = spawn(isomain1);
+  Future.wait([iso1, iso2]).then((l) {
+    var isolate1 = l[0][0];
+    var sendPort1 = l[0][1];
+    var isolate2 = l[1][0];
+    var sendPort2 = l[1][1];
+    Stream errors = isolate1.errors; // Broadcast stream, never a done message.
+    int state = 1;
+    var subscription;
+    subscription = errors.listen(null, onError: (error, stack) {
+      switch (state) {
+        case 1:
+          Expect.equals(new ArgumentError("whoops").toString(), "$error");
+          state++;
+          break;
+        case 2:
+          Expect.equals(new RangeError.value(37).toString(), "$error");
+          state++;
+          reply.close();
+          subscription.cancel();
+          asyncEnd();
+          break;
+        default:
+          throw "Bad state for error: $state: $error";
+      }
+    });
+    sendPort1.send(0);
+    sendPort2.send(0);
+    sendPort1.send(1);
+    sendPort2.send(1);
+    sendPort1.send(2);
+    sendPort2.send(2);
+    sendPort1.send(3);
+    sendPort2.send(3);
+  });
+}
diff --git a/tests/lib/isolate/handle_error3_test.dart b/tests/lib/isolate/handle_error3_test.dart
new file mode 100644
index 0000000..170f130
--- /dev/null
+++ b/tests/lib/isolate/handle_error3_test.dart
@@ -0,0 +1,118 @@
+// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+library handle_error_test;
+
+import "dart:isolate";
+import "dart:async";
+import "package:async_helper/async_helper.dart";
+import "package:expect/expect.dart";
+
+isomain1(replyPort) {
+  RawReceivePort port = new RawReceivePort();
+  port.handler = (v) {
+    switch (v) {
+      case 0:
+        replyPort.send(42);
+        break;
+      case 1:
+        throw new ArgumentError("whoops");
+      case 2:
+        throw new RangeError.value(37);
+      case 3:
+        port.close();
+    }
+  };
+  replyPort.send(port.sendPort);
+}
+
+/// Do Isolate.spawn(entry) and get a sendPort from the isolate that it
+/// expects commands on.
+/// The isolate has errors set to non-fatal.
+/// Returns a list of `[isolate, commandPort]` in a future.
+Future spawn(entry) {
+  ReceivePort reply = new ReceivePort();
+  var isolate = Isolate.spawn(entry, reply.sendPort, paused: true);
+  return isolate.then((Isolate isolate) {
+    isolate.setErrorsFatal(false);
+    isolate.resume(isolate.pauseCapability!);
+    Future result = reply.first.then((sendPort) {
+      return [isolate, sendPort];
+    });
+    return result;
+  });
+}
+
+main() {
+  asyncStart();
+  asyncStart();
+  RawReceivePort reply = new RawReceivePort(null);
+  RawReceivePort reply2 = new RawReceivePort(null);
+  // Create two isolates waiting for commands, with errors non-fatal.
+  Future iso1 = spawn(isomain1);
+  Future iso2 = spawn(isomain1);
+  Future.wait([iso1, iso2]).then((l) {
+    var isolate1 = l[0][0];
+    var sendPort1 = l[0][1];
+    var isolate2 = l[1][0];
+    var sendPort2 = l[1][1];
+    // Capture errors from one isolate as stream.
+    Stream errors = isolate1.errors; // Broadcast stream, never a done message.
+    int state = 1;
+    var subscription;
+    subscription = errors.listen(null, onError: (error, stack) {
+      switch (state) {
+        case 1:
+          Expect.equals(new ArgumentError("whoops").toString(), "$error");
+          state++;
+          break;
+        case 2:
+          Expect.equals(new RangeError.value(37).toString(), "$error");
+          state++;
+          reply.close();
+          subscription.cancel();
+          asyncEnd();
+          break;
+        default:
+          throw "Bad state for error: $state: $error";
+      }
+    });
+    // Capture errors from other isolate as raw messages.
+    RawReceivePort errorPort2 = new RawReceivePort();
+    int state2 = 1;
+    errorPort2.handler = (message) {
+      String error = message[0];
+      String stack = message[1];
+      switch (state2) {
+        case 1:
+          Expect.equals(new ArgumentError("whoops").toString(), "$error");
+          state2++;
+          break;
+        case 2:
+          Expect.equals(new RangeError.value(37).toString(), "$error");
+          state2++;
+          reply2.close();
+          isolate2.removeErrorListener(errorPort2.sendPort);
+          errorPort2.close();
+          asyncEnd();
+          break;
+        default:
+          throw "Bad state-2 for error: $state: $error";
+      }
+    };
+    isolate2.addErrorListener(errorPort2.sendPort);
+
+    sendPort1.send(0);
+    sendPort2.send(0);
+    sendPort1.send(1);
+    sendPort2.send(1);
+    sendPort1.send(2);
+    sendPort2.send(2);
+    sendPort1.send(3);
+    sendPort2.send(3);
+  });
+}
diff --git a/tests/lib/isolate/handle_error_test.dart b/tests/lib/isolate/handle_error_test.dart
new file mode 100644
index 0000000..a453072
--- /dev/null
+++ b/tests/lib/isolate/handle_error_test.dart
@@ -0,0 +1,74 @@
+// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+library handle_error_test;
+
+import "dart:isolate";
+import "dart:async";
+import "package:async_helper/async_helper.dart";
+import "package:expect/expect.dart";
+
+isomain1(replyPort) {
+  RawReceivePort port = new RawReceivePort();
+  port.handler = (v) {
+    switch (v) {
+      case 0:
+        replyPort.send(42);
+        break;
+      case 1:
+        throw new ArgumentError("whoops");
+      case 2:
+        throw new RangeError.value(37);
+      case 3:
+        port.close();
+    }
+  };
+  replyPort.send(port.sendPort);
+}
+
+main() {
+  asyncStart();
+  RawReceivePort reply = new RawReceivePort(null);
+  // Start paused so we have time to set up the error handler.
+  Isolate.spawn(isomain1, reply.sendPort, paused: true).then((Isolate isolate) {
+    isolate.setErrorsFatal(false);
+    Stream errors = isolate.errors; // Broadcast stream, never a done message.
+    late SendPort sendPort;
+    late StreamSubscription subscription;
+    int state = 0;
+    reply.handler = (port) {
+      sendPort = port;
+      port.send(state);
+      reply.handler = (v) {
+        Expect.equals(0, state);
+        Expect.equals(42, v);
+        state++;
+        sendPort.send(state);
+      };
+    };
+    subscription = errors.listen(null, onError: (error, stack) {
+      switch (state) {
+        case 1:
+          Expect.equals(new ArgumentError("whoops").toString(), "$error");
+          state++;
+          sendPort.send(state);
+          break;
+        case 2:
+          Expect.equals(new RangeError.value(37).toString(), "$error");
+          state++;
+          sendPort.send(state);
+          reply.close();
+          subscription.cancel();
+          asyncEnd();
+          break;
+        default:
+          throw "Bad state for error: $state: $error";
+      }
+    });
+    isolate.resume(isolate.pauseCapability!);
+  });
+}
diff --git a/tests/lib/isolate/illegal_msg_function_test.dart b/tests/lib/isolate/illegal_msg_function_test.dart
new file mode 100644
index 0000000..5b5aa45
--- /dev/null
+++ b/tests/lib/isolate/illegal_msg_function_test.dart
@@ -0,0 +1,44 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+library illegal_msg_function_test;
+
+import "dart:isolate";
+
+import "package:expect/expect.dart";
+import "package:async_helper/async_helper.dart";
+
+echo(sendPort) {
+  var port = new ReceivePort();
+  sendPort.send(port.sendPort);
+  port.listen((msg) {
+    sendPort.send("echoing ${msg(1)}}");
+  });
+}
+
+void main() {
+  asyncStart();
+
+  final port = new ReceivePort();
+
+  // Ignore returned Future.
+  Isolate.spawn(echo, port.sendPort);
+
+  port.first.then((_snd) {
+    SendPort snd = _snd;
+    int function(x) => x + 2;
+    try {
+      snd.send(function);
+    } catch (e) {
+      // Expected behavior.
+      port.close();
+      asyncEnd();
+      return;
+    }
+    Expect.fail("Should not be reached. Message sending didn't throw.");
+  });
+}
diff --git a/tests/lib/isolate/illegal_msg_mirror_test.dart b/tests/lib/isolate/illegal_msg_mirror_test.dart
new file mode 100644
index 0000000..a15572d
--- /dev/null
+++ b/tests/lib/isolate/illegal_msg_mirror_test.dart
@@ -0,0 +1,49 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+library illegal_msg_mirror_test;
+
+import "dart:isolate";
+import "dart:mirrors";
+
+import "package:expect/expect.dart";
+import "package:async_helper/async_helper.dart";
+
+class Class {
+  method() {}
+}
+
+echo(sendPort) {
+  final port = new ReceivePort();
+  sendPort.send(port.sendPort);
+  port.listen((msg) {
+    sendPort.send("echoing ${msg(1)}}");
+  });
+}
+
+void main([args, port]) {
+  asyncStart();
+
+  final ReceivePort port = new ReceivePort();
+
+  // Ignore returned Future.
+  Isolate.spawn(echo, port.sendPort);
+
+  port.first.then((_snd) {
+    SendPort snd = _snd;
+    final methodMirror = reflectClass(Class).declarations[#method];
+    try {
+      snd.send(methodMirror);
+    } catch (e) {
+      // Expected behavior.
+      port.close();
+      asyncEnd();
+      return;
+    }
+    Expect.fail("Should not be reached. Message sending didn't throw.");
+  });
+}
diff --git a/tests/lib/isolate/int32_length_overflow_test.dart b/tests/lib/isolate/int32_length_overflow_test.dart
new file mode 100644
index 0000000..85e2bd7
--- /dev/null
+++ b/tests/lib/isolate/int32_length_overflow_test.dart
@@ -0,0 +1,96 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import "dart:async";
+import "dart:isolate";
+import "dart:typed_data";
+import "package:expect/expect.dart";
+
+const large = 1 << 30;
+
+void child(replyPort) {
+  print("Child start");
+
+  print("Child Uint8List");
+  dynamic x = new Uint8List(large);
+  for (int i = 0; i < 4; i++) {
+    x[i] = i;
+  }
+  for (int i = x.length - 4; i < x.length; i++) {
+    x[i] = x.length - i;
+  }
+  replyPort.send(x);
+  x = null;
+
+  // Too slow.
+  // print("Child Array");
+  // x = new List(large);
+  // for (int i = 0; i < 4; i++) {
+  //   x[i] = i;
+  // }
+  // replyPort.send(x);
+  // x = null;
+
+  print("Child OneByteString");
+  x = null;
+  x = "Z";
+  while (x.length < large) {
+    x = x * 2;
+  }
+  replyPort.send(x);
+  x = null;
+
+  print("Child done");
+}
+
+Future<void> main(List<String> args) async {
+  print("Parent start");
+
+  ReceivePort port = new ReceivePort();
+  Isolate.spawn(child, port.sendPort);
+  StreamIterator<dynamic> incoming = new StreamIterator<dynamic>(port);
+
+  print("Parent Uint8");
+  Expect.isTrue(await incoming.moveNext());
+  dynamic x = incoming.current;
+  Expect.isTrue(x is Uint8List);
+  Expect.equals(large, x.length);
+  for (int i = 0; i < 4; i++) {
+    Expect.equals(i, x[i]);
+  }
+  for (int i = x.length - 4; i < x.length; i++) {
+    Expect.equals(x.length - i, x[i]);
+  }
+  x = null;
+
+  // Too slow.
+  // print("Parent Array");
+  // Expect.isTrue(await incoming.moveNext());
+  // x = incoming.current;
+  // Expect.isTrue(x is List);
+  // Expect.equals(large, x.length);
+  // for (int i = 0; i < 4; i++) {
+  //   Expect.equals(i, x[i]);
+  // }
+  // x = null;
+
+  print("Parent OneByteString");
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is String);
+  Expect.equals(large, x.length);
+  for (int i = 0; i < 4; i++) {
+    Expect.equals("Z", x[i]);
+  }
+  for (int i = x.length - 4; i < x.length; i++) {
+    Expect.equals("Z", x[i]);
+  }
+  x = null;
+
+  port.close();
+  print("Parent done");
+}
diff --git a/tests/lib/isolate/int_from_environment_default_value_test.dart b/tests/lib/isolate/int_from_environment_default_value_test.dart
new file mode 100644
index 0000000..af7ccac
--- /dev/null
+++ b/tests/lib/isolate/int_from_environment_default_value_test.dart
@@ -0,0 +1,30 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import "dart:isolate";
+
+import "package:async_helper/async_helper.dart";
+import "package:expect/expect.dart";
+
+void test(port) {
+  Expect.equals(0, const int.fromEnvironment('NOT_FOUND'));
+  Expect.equals(
+      12345, const int.fromEnvironment('NOT_FOUND', defaultValue: 12345));
+  if (port != null) port.send(null);
+}
+
+main() {
+  asyncStart();
+
+  test(null);
+  final port = new ReceivePort();
+  Isolate.spawn(test, port.sendPort);
+  port.forEach((_) {
+    port.close();
+    asyncEnd();
+  });
+}
diff --git a/tests/lib/isolate/isolate_complex_messages_test.dart b/tests/lib/isolate/isolate_complex_messages_test.dart
new file mode 100644
index 0000000..64992dc
--- /dev/null
+++ b/tests/lib/isolate/isolate_complex_messages_test.dart
@@ -0,0 +1,94 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+// Dart test program for testing isolate communication with
+// complex messages.
+
+library IsolateComplexMessagesTest;
+
+import 'dart:isolate';
+
+import "package:expect/expect.dart";
+import "package:async_helper/async_helper.dart";
+
+void main() {
+  asyncStart();
+
+  ReceivePort local = new ReceivePort();
+  Isolate.spawn(logMessages, local.sendPort);
+
+  int messagesReceived = 0;
+  local.listen((msg) {
+    switch (msg[0]) {
+      case "init":
+        messagesReceived++;
+        var remote = msg[1];
+        remote.send(1);
+        remote.send("Hello");
+        remote.send("World");
+        remote.send(const [null, 1, 2, 3, 4]);
+        remote.send(const [1, 2.0, true, false, 0xffffffffff]);
+        remote.send(const ["Hello", "World", 0xffffffffff]);
+        // Shutdown the LogRunner.
+        remote.send(-1);
+        break;
+      case "done":
+        messagesReceived++;
+        local.close();
+        Expect.equals(6, msg[1]);
+        Expect.equals(2, messagesReceived);
+        asyncEnd();
+    }
+  });
+}
+
+void logMessages(mainPort) {
+  int count = 0;
+  ReceivePort port = new ReceivePort();
+  mainPort.send(["init", port.sendPort]);
+  port.forEach((var message) {
+    if (message == -1) {
+      port.close();
+      mainPort.send(["done", count]);
+    } else {
+      switch (count) {
+        case 0:
+          Expect.equals(1, message);
+          break;
+        case 1:
+          Expect.equals("Hello", message);
+          break;
+        case 2:
+          Expect.equals("World", message);
+          break;
+        case 3:
+          Expect.equals(5, message.length);
+          Expect.equals(null, message[0]);
+          Expect.equals(1, message[1]);
+          Expect.equals(2, message[2]);
+          Expect.equals(3, message[3]);
+          Expect.equals(4, message[4]);
+          break;
+        case 4:
+          Expect.equals(5, message.length);
+          Expect.equals(1, message[0]);
+          Expect.equals(2.0, message[1]);
+          Expect.equals(true, message[2]);
+          Expect.equals(false, message[3]);
+          Expect.equals(0xffffffffff, message[4]);
+          break;
+        case 5:
+          Expect.equals(3, message.length);
+          Expect.equals("Hello", message[0]);
+          Expect.equals("World", message[1]);
+          Expect.equals(0xffffffffff, message[2]);
+          break;
+      }
+      count++;
+    }
+  });
+}
diff --git a/tests/lib/isolate/isolate_current_test.dart b/tests/lib/isolate/isolate_current_test.dart
new file mode 100644
index 0000000..908c42d
--- /dev/null
+++ b/tests/lib/isolate/isolate_current_test.dart
@@ -0,0 +1,138 @@
+// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+library isolate_current_test;
+
+import "dart:isolate";
+import "dart:async";
+import "package:expect/expect.dart";
+import "package:async_helper/async_helper.dart";
+
+void main() {
+  asyncStart();
+
+  Expect.isNotNull(Isolate.current);
+
+  // Sending controlPort and capabilities as list.
+  testSend(i2l, l2i);
+  testSpawnReturnVsCurrent(true);
+  testSpawnReturnVsCurrent2(true);
+
+  // Sending Isolate itself.
+  testSend(id, id);
+  testSpawnReturnVsCurrent(false);
+  testSpawnReturnVsCurrent2(false);
+
+  asyncEnd();
+}
+
+/** Test sending the isolate data or isolate through a [SendPort]. */
+void testSend(i2l, l2i) {
+  asyncStart();
+  RawReceivePort p = new RawReceivePort();
+  Isolate isolate = Isolate.current;
+  p.handler = (list) {
+    var isolate2 = l2i(list);
+    Expect.equals(isolate.controlPort, isolate2.controlPort);
+    Expect.equals(isolate.pauseCapability, isolate2.pauseCapability);
+    Expect.equals(isolate.terminateCapability, isolate2.terminateCapability);
+    p.close();
+    asyncEnd();
+  };
+  p.sendPort.send(i2l(isolate));
+}
+
+/**
+ * Test that the isolate returned by [Isolate.spawn] is the same as
+ * the one returned by [Isolate.current] in the spawned isolate.
+ * Checked in the spawning isolate.
+ */
+void testSpawnReturnVsCurrent(bool asList) {
+  asyncStart();
+  Function transform = asList ? l2i : id;
+  Completer response = new Completer();
+  var p = new RawReceivePort();
+  p.handler = (v) {
+    response.complete(transform(v));
+    p.close();
+  };
+
+  Isolate.spawn(replyCurrent, [p.sendPort, asList]).then((Isolate isolate) {
+    return response.future.then((isolate2) {
+      expectIsolateEquals(isolate, isolate2 as Isolate);
+      asyncEnd();
+    });
+  });
+}
+
+void replyCurrent(args) {
+  SendPort responsePort = args[0];
+  Function transform = args[1] ? i2l : id;
+  responsePort.send(transform(Isolate.current));
+}
+
+/**
+ * Test that the isolate returned by [Isolate.spawn] is the same as
+ * the one returned by [Isolate.current] in the spawned isolate.
+ * Checked in the spawned isolate.
+ */
+void testSpawnReturnVsCurrent2(bool asList) {
+  asyncStart();
+  Function transform = asList ? i2l : id;
+
+  Completer response = new Completer();
+  var p = new RawReceivePort();
+  int state = 0;
+  p.handler = (v) {
+    switch (state) {
+      case 0:
+        response.complete(v);
+        state++;
+        break;
+      case 1:
+        p.close();
+        Expect.isTrue(v);
+        asyncEnd();
+    }
+  };
+
+  Isolate.spawn(expectCurrent, [p.sendPort, asList]).then((Isolate isolate) {
+    return response.future.then((port) {
+      (port as SendPort).send(transform(isolate));
+    });
+  });
+}
+
+void expectCurrent(args) {
+  SendPort responsePort = args[0];
+  Function transform = args[1] ? l2i : id;
+  RawReceivePort port = new RawReceivePort();
+  port.handler = (isoData) {
+    Isolate isolate2 = transform(isoData);
+    port.close();
+    Isolate isolate = Isolate.current;
+    expectIsolateEquals(isolate, isolate2);
+    responsePort.send(true);
+  };
+  responsePort.send(port.sendPort);
+}
+
+/** Convert isolate to list (of control port and capabilities). */
+i2l(Isolate isolate) =>
+    [isolate.controlPort, isolate.pauseCapability, isolate.terminateCapability];
+/** Convert list to isolate. */
+l2i(List list) => new Isolate(list[0],
+    pauseCapability: list[1], terminateCapability: list[2]);
+
+/** Identity transformation. */
+id(Isolate isolate) => isolate;
+
+void expectIsolateEquals(Isolate expect, Isolate actual) {
+  Expect.equals(expect.controlPort, actual.controlPort);
+  Expect.equals(expect.pauseCapability, actual.pauseCapability);
+  Expect.equals(expect.terminateCapability, actual.terminateCapability);
+}
diff --git a/tests/lib/isolate/isolate_import_test.dart b/tests/lib/isolate/isolate_import_test.dart
new file mode 100644
index 0000000..211cced
--- /dev/null
+++ b/tests/lib/isolate/isolate_import_test.dart
@@ -0,0 +1,21 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+library IsolateImportNegativeTest;
+
+// Omitting the following import is an error:
+/* // //# 01: runtime error, compile-time error
+import 'dart:isolate';
+*/ // //# 01: continued
+import 'package:async_helper/async_helper.dart';
+
+void entry(msg) {}
+
+main() {
+  asyncStart();
+  Isolate.spawn(entry, null).whenComplete(asyncEnd);
+}
diff --git a/tests/lib/isolate/issue_21398_child_isolate.dart b/tests/lib/isolate/issue_21398_child_isolate.dart
new file mode 100644
index 0000000..c35fcb2
--- /dev/null
+++ b/tests/lib/isolate/issue_21398_child_isolate.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:isolate';
+import "package:expect/expect.dart";
+
+class FromChildIsolate {
+  String toString() => 'from child isolate';
+}
+
+main(List<String> args, message) {
+  var sendPort = message;
+  try {
+    sendPort.send(new FromChildIsolate());
+  } catch (error) {
+    Expect.isTrue(error is ArgumentError);
+    sendPort.send("Invalid Argument(s).");
+  }
+}
diff --git a/tests/lib/isolate/issue_21398_child_isolate1.dart b/tests/lib/isolate/issue_21398_child_isolate1.dart
new file mode 100644
index 0000000..9911733
--- /dev/null
+++ b/tests/lib/isolate/issue_21398_child_isolate1.dart
@@ -0,0 +1,12 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:isolate';
+import "package:expect/expect.dart";
+
+main(List<String> args, message) {
+  var sendPort1 = message[0] as SendPort;
+  var sendPort2 = message[1] as SendPort;
+  sendPort2.send(sendPort1);
+}
diff --git a/tests/lib/isolate/issue_21398_child_isolate11.dart b/tests/lib/isolate/issue_21398_child_isolate11.dart
new file mode 100644
index 0000000..fd19d60
--- /dev/null
+++ b/tests/lib/isolate/issue_21398_child_isolate11.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:isolate';
+import "package:expect/expect.dart";
+
+class FromChildIsolate {
+  String toString() => 'from child isolate';
+}
+
+main(List<String> args, message) {
+  var receivePort = new ReceivePort();
+  var sendPort = message;
+  sendPort.send(receivePort.sendPort);
+  receivePort.listen((msg) {
+    Expect.isTrue(msg is SendPort);
+    try {
+      msg.send(new FromChildIsolate());
+    } catch (error) {
+      Expect.isTrue(error is ArgumentError);
+      msg.send("Invalid Argument(s).");
+    }
+  }, onError: (e) => print('$e'));
+}
diff --git a/tests/lib/isolate/issue_21398_parent_isolate1_test.dart b/tests/lib/isolate/issue_21398_parent_isolate1_test.dart
new file mode 100644
index 0000000..6a0b458
--- /dev/null
+++ b/tests/lib/isolate/issue_21398_parent_isolate1_test.dart
@@ -0,0 +1,145 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import 'dart:isolate';
+import "package:expect/expect.dart";
+import 'package:async_helper/async_helper.dart';
+
+class FromMainIsolate {
+  String toString() => 'from main isolate';
+  int get fld => 10;
+}
+
+func1Child(args) {
+  var receivePort = new ReceivePort();
+  var sendPort = args[0];
+  sendPort.send(receivePort.sendPort);
+  receivePort.listen((msg) {
+    Expect.isTrue(msg is FromMainIsolate);
+    Expect.equals(10, msg.fld);
+    receivePort.close();
+    sendPort.send("done");
+  }, onError: (e) => print('$e'));
+}
+
+func2Child(args) {
+  var receivePort = new ReceivePort();
+  var sendPort = args[0];
+  sendPort.send(receivePort.sendPort);
+  receivePort.listen((msg) {
+    Expect.isTrue(msg is SendPort);
+    msg.send(new FromMainIsolate());
+    receivePort.close();
+  }, onError: (e) => print('$e'));
+}
+
+spawnFuncTest() {
+  var receive1 = new ReceivePort();
+  var receive2 = new ReceivePort();
+
+  var spawnFunctionIsolate1SendPort;
+  var spawnFunctionIsolate2SendPort;
+
+  // First spawn the first isolate using spawnFunction, this isolate will
+  // create a receivePort and send it's sendPort back and then it will just
+  // sit there listening for a message from the second isolate spawned
+  // using spawnFunction.
+  asyncStart();
+  return Isolate.spawn(func1Child, [receive1.sendPort]).then((isolate) {
+    receive1.listen((msg) {
+      if (msg is SendPort) {
+        spawnFunctionIsolate1SendPort = msg;
+
+        // Now spawn the second isolate using spawnFunction, this isolate
+        // will create a receivePort and send it's sendPort back and then
+        // wait for the third isolate spawned using spawnUri to send it
+        // a sendPort to which it will try and send a non "literal-like"
+        // object.
+        Isolate.spawn(func2Child, [receive2.sendPort]).then((isolate) {
+          receive2.listen((msg) {
+            spawnFunctionIsolate2SendPort = msg;
+            receive2.close();
+
+            // Now spawn an isolate using spawnUri and send these send
+            // ports over to it. This isolate will send one of the
+            // sendports over to the other.
+            Isolate.spawnUri(Uri.parse('issue_21398_child_isolate1.dart'), [],
+                [spawnFunctionIsolate1SendPort, spawnFunctionIsolate2SendPort]);
+          }, onError: (e) => print('$e'));
+        });
+      } else if (msg == "done") {
+        receive1.close();
+        asyncEnd();
+      } else {
+        Expect.fail("Invalid message received: $msg");
+      }
+    }, onError: (e) => print('$e'));
+  });
+}
+
+uriChild(args) {
+  var receivePort = new ReceivePort();
+  var sendPort = args[0];
+  sendPort.send(receivePort.sendPort);
+  receivePort.listen((msg) {
+    Expect.isTrue(msg is String);
+    Expect.equals("Invalid Argument(s).", msg);
+    receivePort.close();
+    sendPort.send("done");
+  }, onError: (e) => print('$e'));
+}
+
+spawnUriTest() {
+  var receive1 = new ReceivePort();
+  var receive2 = new ReceivePort();
+
+  var spawnFunctionIsolateSendPort;
+  var spawnUriIsolateSendPort;
+
+  // First spawn the first isolate using spawnFunction, this isolate will
+  // create a receivePort and send it's sendPort back and then it will just
+  // sit there listening for a message from the second isolate spawned
+  // using spawnFunction.
+  asyncStart();
+  Isolate.spawn(uriChild, [receive1.sendPort]).then((isolate) {
+    receive1.listen((msg) {
+      if (msg is SendPort) {
+        spawnFunctionIsolateSendPort = msg;
+
+        // Now spawn the second isolate using spawnUri, this isolate
+        // will create a receivePort and send it's sendPort back and then
+        // wait for the third isolate spawned using spawnUri to send it
+        // a sendPort to which it will try and send a non "literal-like"
+        // object.
+        Isolate.spawnUri(Uri.parse('issue_21398_child_isolate11.dart'), [],
+                receive2.sendPort)
+            .then((isolate) {
+          receive2.listen((msg) {
+            spawnUriIsolateSendPort = msg;
+            receive2.close();
+
+            // Now spawn an isolate using spawnUri and send these send
+            // ports over to it. This isolate will send one of the
+            // sendports over to the other.
+            Isolate.spawnUri(Uri.parse('issue_21398_child_isolate1.dart'), [],
+                [spawnFunctionIsolateSendPort, spawnUriIsolateSendPort]);
+          }, onError: (e) => print('$e'));
+        });
+      } else if (msg == "done") {
+        receive1.close();
+        asyncEnd();
+      } else {
+        Expect.fail("Invalid message received: $msg");
+      }
+    }, onError: (e) => print('$e'));
+  });
+}
+
+main() {
+  spawnFuncTest();
+  spawnUriTest();
+}
diff --git a/tests/lib/isolate/issue_21398_parent_isolate2_test.dart b/tests/lib/isolate/issue_21398_parent_isolate2_test.dart
new file mode 100644
index 0000000..feee51b
--- /dev/null
+++ b/tests/lib/isolate/issue_21398_parent_isolate2_test.dart
@@ -0,0 +1,50 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import 'dart:isolate';
+import "package:expect/expect.dart";
+import 'package:async_helper/async_helper.dart';
+
+import "deferred_loaded_lib.dart" deferred as lib;
+
+// In this test case we send an object created from a deferred library
+// that is loaded in the child isolate but not the parent isolate. The
+// parent isolate does not know about the type of this object and throws
+// an unhandled exception.
+funcChild(args) {
+  var replyPort = args[0];
+  // Deferred load a library, create an object from that library and send
+  // it over to the parent isolate which has not yet loaded that library.
+  lib.loadLibrary().then((_) {
+    replyPort.send(new lib.FromChildIsolate());
+  });
+}
+
+void helperFunction() {
+  var receivePort = new ReceivePort();
+  asyncStart();
+
+  // Spawn an isolate using spawnFunction.
+  Isolate.spawn(funcChild, [receivePort.sendPort]).then((isolate) {
+    receivePort.listen((msg) {
+      // We don't expect to receive any valid messages.
+      Expect.fail("We don't expect to receive any valid messages");
+      receivePort.close();
+      asyncEnd();
+    }, onError: (e) {
+      // We don't expect to receive any error messages, per spec listen
+      // does not receive an error object.
+      Expect.fail("We don't expect to receive any error messages");
+      receivePort.close();
+      asyncEnd();
+    });
+  });
+}
+
+main() {
+  helperFunction(); //# 01: runtime error
+}
diff --git a/tests/lib/isolate/issue_21398_parent_isolate_test.dart b/tests/lib/isolate/issue_21398_parent_isolate_test.dart
new file mode 100644
index 0000000..34e91de
--- /dev/null
+++ b/tests/lib/isolate/issue_21398_parent_isolate_test.dart
@@ -0,0 +1,61 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import 'dart:isolate';
+import "package:expect/expect.dart";
+import 'package:async_helper/async_helper.dart';
+
+class FromMainIsolate {
+  String toString() => 'from main isolate';
+  int get fld => 10;
+}
+
+funcChild(args) {
+  var reply = args[1];
+  var obj = args[0];
+  Expect.isTrue(obj is FromMainIsolate);
+  Expect.equals(10, obj.fld);
+  reply.send(new FromMainIsolate());
+}
+
+main() {
+  var receive1 = new ReceivePort();
+  var receive2 = new ReceivePort();
+
+  // First spawn an isolate using spawnURI and have it
+  // send back a "non-literal" like object.
+  asyncStart();
+  Isolate.spawnUri(Uri.parse('issue_21398_child_isolate.dart'), [],
+      [new FromMainIsolate(), receive1.sendPort]).catchError((error) {
+    Expect.isTrue(error is ArgumentError);
+    asyncEnd();
+  });
+  asyncStart();
+  Isolate.spawnUri(
+          Uri.parse('issue_21398_child_isolate.dart'), [], receive1.sendPort)
+      .then((isolate) {
+    receive1.listen((msg) {
+      Expect.stringEquals(msg, "Invalid Argument(s).");
+      receive1.close();
+      asyncEnd();
+    }, onError: (e) => print('$e'));
+  });
+
+  // Now spawn an isolate using spawnFunction and send it a "non-literal"
+  // like object and also have the child isolate send back a "non-literal"
+  // like object.
+  asyncStart();
+  Isolate.spawn(funcChild, [new FromMainIsolate(), receive2.sendPort])
+      .then((isolate) {
+    receive2.listen((msg) {
+      Expect.isTrue(msg is FromMainIsolate);
+      Expect.equals(10, msg.fld);
+      receive2.close();
+      asyncEnd();
+    }, onError: (e) => print('$e'));
+  });
+}
diff --git a/tests/lib/isolate/issue_22778_test.dart b/tests/lib/isolate/issue_22778_test.dart
new file mode 100644
index 0000000..28107cc
--- /dev/null
+++ b/tests/lib/isolate/issue_22778_test.dart
@@ -0,0 +1,20 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import "dart:isolate";
+import "package:expect/expect.dart";
+
+func() {}
+
+main() {
+  var r = new RawReceivePort();
+  r.handler = (v) {
+    Expect.isTrue(v[0] == v[1]);
+    r.close();
+  };
+  r.sendPort.send(<Function>[func, func]);
+}
diff --git a/tests/lib/isolate/issue_24243_child1_isolate.dart b/tests/lib/isolate/issue_24243_child1_isolate.dart
new file mode 100644
index 0000000..4565cd16
--- /dev/null
+++ b/tests/lib/isolate/issue_24243_child1_isolate.dart
@@ -0,0 +1,18 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:isolate';
+
+main(List<String> args, message) {
+  var sendPort = message;
+  try {
+    var list0 = <int>[1, 2, 3];
+    var list1 = <int>[4, 5, 6];
+    var list2 = <int>[7, 8, 9];
+    var list = new List<List<int>>.from([list0, list1, list2]);
+    sendPort.send(list);
+  } catch (error) {
+    sendPort.send("Invalid Argument(s).");
+  }
+}
diff --git a/tests/lib/isolate/issue_24243_child2_isolate.dart b/tests/lib/isolate/issue_24243_child2_isolate.dart
new file mode 100644
index 0000000..a603309
--- /dev/null
+++ b/tests/lib/isolate/issue_24243_child2_isolate.dart
@@ -0,0 +1,18 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:isolate';
+
+main(List<String> args, message) {
+  var sendPort = message;
+  try {
+    var map0 = <int, String>{1: 'one', 2: 'two', 3: 'three'};
+    var map1 = <int, String>{4: 'four', 5: 'five', 6: 'six'};
+    var map2 = <int, String>{7: 'seven', 8: 'eight', 9: 'nine'};
+    var map = new Map<int, Map<int, String>>.from({0: map0, 1: map1, 2: map2});
+    sendPort.send(map);
+  } catch (error) {
+    sendPort.send("Invalid Argument(s).");
+  }
+}
diff --git a/tests/lib/isolate/issue_24243_child3_isolate.dart b/tests/lib/isolate/issue_24243_child3_isolate.dart
new file mode 100644
index 0000000..e45930c
--- /dev/null
+++ b/tests/lib/isolate/issue_24243_child3_isolate.dart
@@ -0,0 +1,30 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:collection';
+import 'dart:isolate';
+
+main(List<String> args, message) {
+  var sendPort = message;
+  try {
+    var map0 = new LinkedHashMap<int, String>();
+    map0[1] = 'one';
+    map0[2] = 'two';
+    map0[3] = 'three';
+    var map1 = new LinkedHashMap<int, String>();
+    map1[4] = 'four';
+    map1[5] = 'five';
+    map1[6] = 'size';
+    var map2 = new LinkedHashMap<int, String>();
+    map2[7] = 'seven';
+    map2[8] = 'eight';
+    map2[9] = 'nine';
+
+    var map = new Map<int, LinkedHashMap<int, String>>.from(
+        {0: map0, 1: map1, 2: map2});
+    sendPort.send(map);
+  } catch (error) {
+    sendPort.send("Invalid Argument(s).");
+  }
+}
diff --git a/tests/lib/isolate/issue_24243_parent_isolate_test.dart b/tests/lib/isolate/issue_24243_parent_isolate_test.dart
new file mode 100644
index 0000000..c38e5e4
--- /dev/null
+++ b/tests/lib/isolate/issue_24243_parent_isolate_test.dart
@@ -0,0 +1,79 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import 'dart:collection';
+import 'dart:isolate';
+
+import "package:expect/expect.dart";
+
+main() {
+  // First spawn an isolate using spawnURI and have it
+  // send back a "literal" like list object.
+  var receive1 = new ReceivePort();
+  Isolate.spawnUri(
+          Uri.parse('issue_24243_child1_isolate.dart'), [], receive1.sendPort)
+      .then((isolate) {
+    receive1.listen((msg) {
+      var list0 = <int>[1, 2, 3];
+      var list1 = <int>[4, 5, 6];
+      var list2 = <int>[7, 8, 9];
+      Expect.isTrue(msg is List<List<int>>);
+      Expect.listEquals(msg[0], list0);
+      Expect.listEquals(msg[1], list1);
+      Expect.listEquals(msg[2], list2);
+      Expect.throws(() => msg[0] = "throw an exception");
+      receive1.close();
+    }, onError: (e) => print('$e'));
+  });
+
+  // Now spawn an isolate using spawnURI and have it
+  // send back a "literal" like map object.
+  var receive2 = new ReceivePort();
+  Isolate.spawnUri(
+          Uri.parse('issue_24243_child2_isolate.dart'), [], receive2.sendPort)
+      .then((isolate) {
+    receive2.listen((msg) {
+      var map0 = <int, String>{1: 'one', 2: 'two', 3: 'three'};
+      var map1 = <int, String>{4: 'four', 5: 'five', 6: 'six'};
+      var map2 = <int, String>{7: 'seven', 8: 'eight', 9: 'nine'};
+      Expect.isTrue(msg is Map<int, Map<int, String>>);
+      Expect.mapEquals(msg[0], map0);
+      Expect.mapEquals(msg[1], map1);
+      Expect.mapEquals(msg[2], map2);
+      Expect.throws(() => msg[0] = "throw an exception");
+      receive2.close();
+    }, onError: (e) => print('$e'));
+  });
+
+  // Now spawn an isolate using spawnURI and have it
+  // send back a "literal" like LinkedHashMap object.
+  var receive3 = new ReceivePort();
+  Isolate.spawnUri(
+          Uri.parse('issue_24243_child3_isolate.dart'), [], receive3.sendPort)
+      .then((isolate) {
+    receive3.listen((msg) {
+      var map0 = new LinkedHashMap<int, String>();
+      map0[1] = 'one';
+      map0[2] = 'two';
+      map0[3] = 'three';
+      var map1 = new LinkedHashMap<int, String>();
+      map1[4] = 'four';
+      map1[5] = 'five';
+      map1[6] = 'size';
+      var map2 = new LinkedHashMap<int, String>();
+      map2[7] = 'seven';
+      map2[8] = 'eight';
+      map2[9] = 'nine';
+      Expect.isTrue(msg is Map<int, LinkedHashMap<int, String>>);
+      Expect.mapEquals(msg[0], map0);
+      Expect.mapEquals(msg[1], map1);
+      Expect.mapEquals(msg[2], map2);
+      Expect.throws(() => msg[0] = "throw an exception");
+      receive3.close();
+    }, onError: (e) => print('$e'));
+  });
+}
diff --git a/tests/lib/isolate/issue_35626_test.dart b/tests/lib/isolate/issue_35626_test.dart
new file mode 100644
index 0000000..1563a8392
--- /dev/null
+++ b/tests/lib/isolate/issue_35626_test.dart
@@ -0,0 +1,36 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+// Tests that sets of enums can be set through ports.
+// https://github.com/dart-lang/sdk/issues/35626
+
+library spawn_tests;
+
+import "dart:io";
+import "dart:isolate";
+import "package:expect/expect.dart";
+
+enum MyEnum { foo, bar, baz }
+
+void sendSetOfEnums(SendPort port) {
+  Set<MyEnum> remoteSet = Set()..add(MyEnum.bar);
+  port.send(remoteSet);
+}
+
+void main() async {
+  Set<MyEnum> localSet = Set()..add(MyEnum.foo)..add(MyEnum.bar);
+  localSet.lookup(MyEnum.foo);
+
+  final port = ReceivePort();
+  await Isolate.spawn(sendSetOfEnums, port.sendPort);
+  Set<MyEnum> remoteSet = await port.first;
+
+  print(localSet);
+  print(remoteSet);
+  Expect.setEquals([MyEnum.bar], localSet.intersection(remoteSet));
+  Expect.setEquals([MyEnum.bar], remoteSet.intersection(localSet));
+}
diff --git a/tests/lib/isolate/issue_6610_test.dart b/tests/lib/isolate/issue_6610_test.dart
new file mode 100644
index 0000000..962955e
--- /dev/null
+++ b/tests/lib/isolate/issue_6610_test.dart
@@ -0,0 +1,77 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+// Testing that Isolate.spawn copies the source code of the parent isolate,
+// rather than rereading the parent's source URI.
+// https://github.com/dart-lang/sdk/issues/6610
+
+// Isolate structure:
+//     Root 1 -> Branch 1 -> Leaf 1
+//     /
+//  main
+//     \
+//     Root 2 -> Branch 2 -> Leaf 2
+
+library spawn_tests;
+
+import "dart:io";
+import 'dart:isolate';
+import 'package:expect/expect.dart';
+
+void main() {
+  HttpServer.bind("127.0.0.1", 0).then((server) {
+    var count = 0;
+    server.listen((HttpRequest request) {
+      ++count;
+      request.response.write("""
+        import 'dart:isolate';
+
+        void main(_, SendPort port) {
+          root(port);
+        }
+
+        void root(SendPort port) {
+          port.send("Root ${count}");
+          Isolate.spawn(branch, port);
+        }
+
+        void branch(SendPort port) {
+          port.send("Branch ${count}");
+          Isolate.spawn(leaf, port);
+        }
+
+        void leaf(SendPort port) {
+          port.send("Leaf ${count}");
+        }
+      """);
+      request.response.close();
+    });
+
+    ReceivePort port = new ReceivePort();
+    var messageSet = Set();
+    port.listen((message) {
+      messageSet.add(message);
+      if (messageSet.length >= 6) {
+        server.close();
+        port.close();
+        Expect.setEquals([
+          "Root 1",
+          "Root 2",
+          "Branch 1",
+          "Branch 2",
+          "Leaf 1",
+          "Leaf 2",
+        ], messageSet);
+      }
+    });
+
+    Isolate.spawnUri(
+        Uri.parse("http://127.0.0.1:${server.port}"), [], port.sendPort);
+    Isolate.spawnUri(
+        Uri.parse("http://127.0.0.1:${server.port}"), [], port.sendPort);
+  });
+}
diff --git a/tests/lib/isolate/kill2_test.dart b/tests/lib/isolate/kill2_test.dart
new file mode 100644
index 0000000..9391fc8
--- /dev/null
+++ b/tests/lib/isolate/kill2_test.dart
@@ -0,0 +1,47 @@
+// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import "dart:isolate";
+import "dart:async";
+import "package:expect/expect.dart";
+import "package:async_helper/async_helper.dart";
+
+isomain1(replyPort) {
+  RawReceivePort port = new RawReceivePort();
+  port.handler = (v) {
+    replyPort.send(v);
+    if (v == 0) port.close();
+  };
+  replyPort.send(port.sendPort);
+}
+
+void main() {
+  asyncStart();
+  var completer = new Completer(); // Completed by first reply from isolate.
+  RawReceivePort reply = new RawReceivePort(completer.complete);
+  Isolate.spawn(isomain1, reply.sendPort).then((Isolate isolate) {
+    List result = [];
+    completer.future.then((echoPort) {
+      reply.handler = (v) {
+        result.add(v);
+        if (v == 2) {
+          isolate.kill(priority: Isolate.beforeNextEvent);
+        }
+        echoPort.send(v - 1);
+      };
+      late RawReceivePort exitSignal;
+      exitSignal = new RawReceivePort((_) {
+        Expect.listEquals([4, 3, 2], result);
+        exitSignal.close();
+        reply.close();
+        asyncEnd();
+      });
+      isolate.addOnExitListener(exitSignal.sendPort);
+      echoPort.send(4);
+    });
+  });
+}
diff --git a/tests/lib/isolate/kill_self_synchronously_test.dart b/tests/lib/isolate/kill_self_synchronously_test.dart
new file mode 100644
index 0000000..19f3a2e
--- /dev/null
+++ b/tests/lib/isolate/kill_self_synchronously_test.dart
@@ -0,0 +1,36 @@
+// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import "dart:isolate";
+import "dart:io";
+
+void main(List<String> args) {
+  if (args.contains("--child")) {
+    new RawReceivePort(); // Hang if not killed.
+    Isolate.current.kill(priority: Isolate.immediate);
+    // No intervening call.
+    throw "QQQ Should not be reached";
+  } else {
+    var exec = Platform.resolvedExecutable;
+    var args = <String>[];
+    args.addAll(Platform.executableArguments);
+    args.add(Platform.script.toFilePath());
+    args.add("--child");
+    var result = Process.runSync(exec, args);
+    if (result.exitCode != 255) {
+      throw "Wrong exit code: ${result.exitCode}";
+    }
+    if (result.stderr.contains("QQQ Should not be reached")) {
+      print(result.stderr);
+      throw "Not killed synchronously";
+    }
+    if (!result.stderr.contains("isolate terminated by Isolate.kill")) {
+      print(result.stderr);
+      throw "Missing killed message";
+    }
+  }
+}
diff --git a/tests/lib/isolate/kill_self_test.dart b/tests/lib/isolate/kill_self_test.dart
new file mode 100644
index 0000000..157b30f
--- /dev/null
+++ b/tests/lib/isolate/kill_self_test.dart
@@ -0,0 +1,45 @@
+// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import "dart:isolate";
+import "dart:async";
+import "package:expect/expect.dart";
+import "package:async_helper/async_helper.dart";
+
+isomain1(replyPort) {
+  RawReceivePort port = new RawReceivePort();
+  bool firstEvent = true;
+  port.handler = (v) {
+    if (!firstEvent) {
+      throw "Survived suicide";
+    }
+    var controlPort = v[0];
+    var killCapability = v[1];
+    firstEvent = false;
+    var isolate = new Isolate(controlPort, terminateCapability: killCapability);
+    isolate.kill(priority: Isolate.immediate);
+  };
+  replyPort.send(port.sendPort);
+}
+
+void main() {
+  asyncStart();
+  var completer = new Completer(); // Completed by first reply from isolate.
+  RawReceivePort reply = new RawReceivePort(completer.complete);
+  Isolate.spawn(isomain1, reply.sendPort).then((Isolate isolate) {
+    completer.future.then((isolatePort) {
+      late RawReceivePort exitSignal;
+      exitSignal = new RawReceivePort((_) {
+        exitSignal.close();
+        asyncEnd();
+      });
+      isolate.addOnExitListener(exitSignal.sendPort);
+      isolatePort.send([isolate.controlPort, isolate.terminateCapability]);
+      reply.close();
+    });
+  });
+}
diff --git a/tests/lib/isolate/kill_test.dart b/tests/lib/isolate/kill_test.dart
new file mode 100644
index 0000000..07e0dfe8
--- /dev/null
+++ b/tests/lib/isolate/kill_test.dart
@@ -0,0 +1,48 @@
+// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import "dart:isolate";
+import "dart:async";
+import "package:expect/expect.dart";
+import "package:async_helper/async_helper.dart";
+
+isomain1(replyPort) {
+  RawReceivePort port = new RawReceivePort();
+  port.handler = (v) {
+    replyPort.send(v);
+    if (v == 0) port.close();
+  };
+  replyPort.send(port.sendPort);
+}
+
+void main() {
+  asyncStart();
+  var completer = new Completer(); // Completed by first reply from isolate.
+  RawReceivePort reply = new RawReceivePort(completer.complete);
+  Isolate.spawn(isomain1, reply.sendPort).then((Isolate isolate) {
+    completer.future.then((_echoPort) {
+      SendPort echoPort = _echoPort;
+      List result = [];
+      reply.handler = (v) {
+        result.add(v);
+        if (v == 2) {
+          isolate.kill(priority: Isolate.immediate);
+        }
+        echoPort.send(v - 1);
+      };
+      late RawReceivePort exitSignal;
+      exitSignal = new RawReceivePort((_) {
+        Expect.listEquals([4, 3, 2], result);
+        exitSignal.close();
+        reply.close();
+        asyncEnd();
+      });
+      isolate.addOnExitListener(exitSignal.sendPort);
+      echoPort.send(4);
+    });
+  });
+}
diff --git a/tests/lib/isolate/large_byte_data_leak_test.dart b/tests/lib/isolate/large_byte_data_leak_test.dart
new file mode 100644
index 0000000..1313519
--- /dev/null
+++ b/tests/lib/isolate/large_byte_data_leak_test.dart
@@ -0,0 +1,44 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import "dart:async";
+import "dart:developer" show UserTag;
+import "dart:isolate" show Isolate, ReceivePort;
+import "dart:typed_data" show ByteData;
+import "package:expect/expect.dart";
+
+const large = 2 * 1024 * 1024;
+
+void child(replyPort) {
+  print("Child start");
+
+  Expect.throws(() {
+    replyPort.send([
+      new ByteData(large),
+      new UserTag("User tags are not allowed in isolate messages"),
+      new ByteData(large),
+    ]);
+    replyPort.send("Not reached");
+  }, (e) {
+    return e.toString().contains("Illegal argument in isolate message");
+  });
+
+  replyPort.send("Done");
+
+  print("Child done");
+}
+
+Future<void> main(List<String> args) async {
+  print("Parent start");
+
+  ReceivePort port = new ReceivePort();
+  Isolate.spawn(child, port.sendPort);
+
+  Expect.equals("Done", await port.first);
+
+  print("Parent done");
+}
diff --git a/tests/lib/isolate/large_byte_data_test.dart b/tests/lib/isolate/large_byte_data_test.dart
new file mode 100644
index 0000000..8a78238
--- /dev/null
+++ b/tests/lib/isolate/large_byte_data_test.dart
@@ -0,0 +1,174 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import "dart:async";
+import "dart:isolate";
+import "dart:typed_data";
+import "package:expect/expect.dart";
+
+const large = 2 * 1024 * 1024;
+
+void child(replyPort) {
+  print("Child start");
+
+  print("Child ByteData");
+  dynamic x = new ByteData(large);
+  for (int i = 0; i < 4; i++) {
+    x.setInt8(i, i);
+  }
+  replyPort.send(x);
+
+  print("Child Uint8List");
+  x = new Uint8List(large);
+  for (int i = 0; i < 4; i++) {
+    x[i] = i;
+  }
+  replyPort.send(x);
+
+  print("Child Int8List");
+  x = new Int8List(large);
+  for (int i = 0; i < 4; i++) {
+    x[i] = i;
+  }
+  replyPort.send(x);
+
+  print("Child Uint16List");
+  x = new Uint16List(large);
+  for (int i = 0; i < 4; i++) {
+    x[i] = i;
+  }
+  replyPort.send(x);
+
+  print("Child Int16List");
+  x = new Int16List(large);
+  for (int i = 0; i < 4; i++) {
+    x[i] = i;
+  }
+  replyPort.send(x);
+
+  print("Child Uint32List");
+  x = new Uint32List(large);
+  for (int i = 0; i < 4; i++) {
+    x[i] = i;
+  }
+  replyPort.send(x);
+
+  print("Child Int32List");
+  x = new Int32List(large);
+  for (int i = 0; i < 4; i++) {
+    x[i] = i;
+  }
+  replyPort.send(x);
+
+  print("Child Uint64List");
+  x = new Uint64List(large);
+  for (int i = 0; i < 4; i++) {
+    x[i] = i;
+  }
+  replyPort.send(x);
+
+  print("Child Int64List");
+  x = new Int64List(large);
+  for (int i = 0; i < 4; i++) {
+    x[i] = i;
+  }
+  replyPort.send(x);
+
+  print("Child done");
+}
+
+Future<void> main(List<String> args) async {
+  print("Parent start");
+
+  ReceivePort port = new ReceivePort();
+  Isolate.spawn(child, port.sendPort);
+  StreamIterator<dynamic> incoming = new StreamIterator<dynamic>(port);
+
+  print("Parent ByteData");
+  Expect.isTrue(await incoming.moveNext());
+  dynamic x = incoming.current;
+  Expect.isTrue(x is ByteData);
+  Expect.equals(large, x.lengthInBytes);
+  for (int i = 0; i < 4; i++) {
+    Expect.equals(i, x.getUint8(i));
+  }
+
+  print("Parent Uint8");
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Uint8List);
+  Expect.equals(large, x.length);
+  for (int i = 0; i < 4; i++) {
+    Expect.equals(i, x[i]);
+  }
+
+  print("Parent Int8");
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Int8List);
+  Expect.equals(large, x.length);
+  for (int i = 0; i < 4; i++) {
+    Expect.equals(i, x[i]);
+  }
+
+  print("Parent Uint16");
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Uint16List);
+  Expect.equals(large, x.length);
+  for (int i = 0; i < 4; i++) {
+    Expect.equals(i, x[i]);
+  }
+
+  print("Parent Int16");
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Int16List);
+  Expect.equals(large, x.length);
+  for (int i = 0; i < 4; i++) {
+    Expect.equals(i, x[i]);
+  }
+
+  print("Parent Uint32");
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Uint32List);
+  Expect.equals(large, x.length);
+  for (int i = 0; i < 4; i++) {
+    Expect.equals(i, x[i]);
+  }
+
+  print("Parent Int32");
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Int32List);
+  Expect.equals(large, x.length);
+  for (int i = 0; i < 4; i++) {
+    Expect.equals(i, x[i]);
+  }
+
+  print("Parent Uint64");
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Uint64List);
+  Expect.equals(large, x.length);
+  for (int i = 0; i < 4; i++) {
+    Expect.equals(i, x[i]);
+  }
+
+  print("Parent Int64");
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Int64List);
+  Expect.equals(large, x.length);
+  for (int i = 0; i < 4; i++) {
+    Expect.equals(i, x[i]);
+  }
+
+  port.close();
+  print("Parent done");
+}
diff --git a/tests/lib/isolate/mandel_isolate_test.dart b/tests/lib/isolate/mandel_isolate_test.dart
new file mode 100644
index 0000000..50d564a
--- /dev/null
+++ b/tests/lib/isolate/mandel_isolate_test.dart
@@ -0,0 +1,159 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+library MandelIsolateTest;
+
+import 'dart:async';
+import 'dart:isolate';
+import 'dart:math';
+
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
+
+const TERMINATION_MESSAGE = -1;
+const N = 100;
+const ISOLATES = 20;
+
+void main([args, port]) {
+  final state = new MandelbrotState();
+  asyncStart();
+  state._validated.future.then((result) {
+    Expect.isTrue(result);
+    asyncEnd();
+  });
+  for (int i = 0; i < min(ISOLATES, N); i++) state.startClient(i);
+}
+
+class MandelbrotState {
+  MandelbrotState() {
+    _result = new List<List<int>>.filled(N, []);
+    _lineProcessedBy = new List<LineProcessorClient?>.filled(N, null);
+    _sent = 0;
+    _missing = N;
+    _validated = new Completer<bool>();
+  }
+
+  void startClient(int id) {
+    assert(_sent < N);
+    int line = _sent++;
+    LineProcessorClient.create(this, id).then((final client) {
+      client.processLine(line);
+    });
+  }
+
+  void notifyProcessedLine(LineProcessorClient client, int y, List<int> line) {
+    assert(_result[y].isEmpty);
+    _result[y] = line;
+    _lineProcessedBy[y] = client;
+
+    if (_sent != N) {
+      client.processLine(_sent++);
+    } else {
+      client.shutdown();
+    }
+
+    // If all lines have been computed, validate the result.
+    if (--_missing == 0) {
+      _printResult();
+      _validateResult();
+    }
+  }
+
+  void _validateResult() {
+    // TODO(ngeoffray): Implement this.
+    _validated.complete(true);
+  }
+
+  void _printResult() {
+    var output = new StringBuffer();
+    for (int i = 0; i < _result.length; i++) {
+      List<int> line = _result[i];
+      for (int j = 0; j < line.length; j++) {
+        if (line[j] < 10) output.write("0");
+        output.write(line[j]);
+      }
+      output.write("\n");
+    }
+    // print(output);
+  }
+
+  late List<List<int>> _result;
+  late List<LineProcessorClient?> _lineProcessedBy;
+  late int _sent;
+  late int _missing;
+  late Completer<bool> _validated;
+}
+
+class LineProcessorClient {
+  MandelbrotState _state;
+  int _id;
+  SendPort _port;
+
+  LineProcessorClient(this._state, this._id, this._port);
+
+  static Future<LineProcessorClient> create(MandelbrotState state, int id) {
+    ReceivePort reply = new ReceivePort();
+    return Isolate.spawn(processLines, reply.sendPort).then((_) {
+      return reply.first.then((port) {
+        return new LineProcessorClient(state, id, port);
+      });
+    });
+  }
+
+  void processLine(int y) {
+    ReceivePort reply = new ReceivePort();
+    _port.send([y, reply.sendPort]);
+    reply.first.then((message) {
+      _state.notifyProcessedLine(this, y, message as List<int>);
+    });
+  }
+
+  void shutdown() {
+    _port.send(TERMINATION_MESSAGE);
+  }
+}
+
+List<int> processLine(int y) {
+  double inverseN = 2.0 / N;
+  double Civ = y * inverseN - 1.0;
+  List<int> result = new List<int>.filled(N, 0);
+  for (int x = 0; x < N; x++) {
+    double Crv = x * inverseN - 1.5;
+
+    double Zrv = Crv;
+    double Ziv = Civ;
+
+    double Trv = Crv * Crv;
+    double Tiv = Civ * Civ;
+
+    int i = 49;
+    do {
+      Ziv = (Zrv * Ziv) + (Zrv * Ziv) + Civ;
+      Zrv = Trv - Tiv + Crv;
+
+      Trv = Zrv * Zrv;
+      Tiv = Ziv * Ziv;
+    } while (((Trv + Tiv) <= 4.0) && (--i > 0));
+
+    result[x] = i;
+  }
+  return result;
+}
+
+void processLines(SendPort replyPort) {
+  ReceivePort port = new ReceivePort();
+  port.listen((message) {
+    if (message != TERMINATION_MESSAGE) {
+      int line = message[0];
+      SendPort replyTo = message[1];
+      replyTo.send(processLine(line));
+    } else {
+      port.close();
+    }
+  });
+  replyPort.send(port.sendPort);
+}
diff --git a/tests/lib/isolate/message2_test.dart b/tests/lib/isolate/message2_test.dart
new file mode 100644
index 0000000..7c2e691
--- /dev/null
+++ b/tests/lib/isolate/message2_test.dart
@@ -0,0 +1,87 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+// Dart test program for testing serialization of messages.
+// VMOptions=--enable_type_checks --enable_asserts
+
+library Message2Test;
+
+import 'dart:isolate';
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
+
+// ---------------------------------------------------------------------------
+// Message passing test 2.
+// ---------------------------------------------------------------------------
+
+class MessageTest {
+  static void mapEqualsDeep(Map expected, Map actual) {
+    Expect.equals(actual.length, expected.length);
+    testForEachMap(key, value) {
+      if (value is List) {
+        listEqualsDeep(value, actual[key]);
+      } else {
+        Expect.equals(actual[key], value);
+      }
+    }
+
+    expected.forEach(testForEachMap);
+  }
+
+  static void listEqualsDeep(List expected, List actual) {
+    for (int i = 0; i < expected.length; i++) {
+      if (expected[i] is List) {
+        Expect.type<List>(actual[i]);
+        listEqualsDeep(expected[i], actual[i]);
+      } else if (expected[i] is Map) {
+        Expect.type<Map>(actual[i]);
+        mapEqualsDeep(expected[i], actual[i]);
+      } else {
+        Expect.equals(actual[i], expected[i]);
+      }
+    }
+  }
+}
+
+void pingPong(replyPort) {
+  ReceivePort port = new ReceivePort();
+  port.listen((message) {
+    if (message is SendPort) {
+      message.send('done');
+      port.close();
+    } else {
+      // Bounce the received object back so that the sender
+      // can make sure that the object matches.
+      message[1].send(message[0]);
+    }
+  });
+  replyPort.send(port.sendPort);
+}
+
+void main([args, port]) {
+  ReceivePort port = new ReceivePort();
+  Isolate.spawn(pingPong, port.sendPort);
+  asyncStart();
+  port.first.then((remote) {
+    Map m = new Map();
+    m[1] = "eins";
+    m[2] = "deux";
+    m[3] = "tre";
+    m[4] = "four";
+    ReceivePort replyPort = new ReceivePort();
+    remote.send([m, replyPort.sendPort]);
+    replyPort.listen((var received) {
+      if (received == 'done') {
+        replyPort.close();
+        asyncEnd();
+      } else {
+        MessageTest.mapEqualsDeep(m, received);
+        remote.send(replyPort.sendPort);
+      }
+    });
+  });
+}
diff --git a/tests/lib/isolate/message3_test.dart b/tests/lib/isolate/message3_test.dart
new file mode 100644
index 0000000..0bc63ff
--- /dev/null
+++ b/tests/lib/isolate/message3_test.dart
@@ -0,0 +1,503 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+// Dart test program for testing serialization of messages.
+// VMOptions=--enable_type_checks --enable_asserts
+
+library MessageTest;
+
+import 'dart:async';
+import 'dart:collection';
+import 'dart:isolate';
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
+import 'dart:typed_data';
+
+void echoMain(msg) {
+  SendPort replyTo = msg[0];
+  SendPort pong = msg[1];
+  ReceivePort port = new ReceivePort();
+  replyTo.send(port.sendPort);
+  port.listen((msg) {
+    if (msg == "halt") {
+      port.close();
+    } else {
+      pong.send(msg);
+    }
+  });
+}
+
+class A {
+  var field = 499;
+
+  A();
+  A.named(this.field);
+}
+
+class B extends A {
+  final field2;
+  B() : field2 = 99;
+  B.named(this.field2, x) : super.named(x);
+}
+
+class C extends B {
+  var field = 33;
+
+  get superField => super.field;
+  get superField2 => super.field2;
+}
+
+class M {
+  get field2 => 11;
+}
+
+class D extends C with M {
+  var gee = 123;
+}
+
+class E {
+  Function fun;
+  E(this.fun);
+
+  static fooFun() => 499;
+  instanceFun() => 1234;
+}
+
+barFun() => 42;
+
+class F {
+  final field = "field";
+  const F();
+}
+
+class G {
+  final field;
+  const G(this.field);
+}
+
+class Value {
+  final val;
+  Value(this.val);
+
+  operator ==(other) {
+    if (other is! Value) return false;
+    return other.val == val;
+  }
+
+  get hashCode => val;
+}
+
+void runTests(SendPort ping, Queue checks) {
+  ping.send("abc");
+  checks.add((x) => Expect.equals("abc", x));
+
+  ping.send([1, 2]);
+  checks.add((x) {
+    Expect.isTrue(x is List);
+    Expect.listEquals([1, 2], x);
+    // Make sure the list is mutable.
+    x[0] = 0;
+    Expect.equals(0, x[0]);
+    // List must be extendable.
+    x.add(3);
+    Expect.equals(3, x[2]);
+  });
+
+  var fixed = List.filled(2, 0);
+  fixed[0] = 0;
+  fixed[1] = 1;
+  ping.send(fixed);
+  checks.add((x) {
+    Expect.isTrue(x is List);
+    Expect.listEquals([0, 1], x);
+    // List must be mutable.
+    x[0] = 3;
+    Expect.equals(3, x[0]);
+    // List must be fixed length.
+    Expect.throws(() {
+      x.add(5);
+    });
+  });
+
+  List cyclic = [];
+  cyclic.add(cyclic);
+  ping.send(cyclic);
+  checks.add((x) {
+    Expect.isTrue(x is List);
+    Expect.equals(1, x.length);
+    Expect.identical(x, x[0]);
+    // List must be mutable.
+    x[0] = 55;
+    Expect.equals(55, x[0]);
+    // List must be extendable.
+    x.add(42);
+    Expect.equals(42, x[1]);
+  });
+
+  var cyclic2 = List<Object?>.filled(1, null);
+  cyclic2[0] = cyclic2;
+  ping.send(cyclic2);
+  checks.add((x) {
+    Expect.isTrue(x is List);
+    Expect.equals(1, x.length);
+    Expect.identical(x, x[0]);
+    // List must be mutable.
+    x[0] = 55;
+    Expect.equals(55, x[0]);
+    // List must be fixed.
+    Expect.throws(() => x.add(42));
+  });
+
+  List constList = const [1, 2];
+  ping.send(constList);
+  checks.add((x) {
+    Expect.isTrue(x is List);
+    Expect.listEquals([1, 2], x);
+    // Make sure the list is immutable.
+    Expect.throws(() => x[0] = 0); // //# constList: ok
+    // List must not be extendable.
+    Expect.throws(() => x.add(3));
+    Expect.identical(x, constList); // //# constList_identical: ok
+  });
+
+  Uint8List uint8 = new Uint8List(2);
+  uint8[0] = 0;
+  uint8[1] = 1;
+  ping.send(uint8);
+  checks.add((x) {
+    Expect.isTrue(x is Uint8List);
+    Expect.equals(2, x.length);
+    Expect.equals(0, x[0]);
+    Expect.equals(1, x[1]);
+  });
+
+  Uint16List uint16 = new Uint16List(2);
+  uint16[0] = 0;
+  uint16[1] = 1;
+  ByteBuffer byteBuffer = uint16.buffer;
+  ping.send(byteBuffer); // //# byteBuffer: ok
+  checks.add( //            //# byteBuffer: ok
+  (x) {
+    Expect.isTrue(x is ByteBuffer);
+    Uint16List uint16View = new Uint16List.view(x);
+    Expect.equals(2, uint16View.length);
+    Expect.equals(0, uint16View[0]);
+    Expect.equals(1, uint16View[1]);
+  }
+  ) //                      //# byteBuffer: ok
+      ;
+
+  Int32x4List list32x4 = new Int32x4List(2);
+  list32x4[0] = new Int32x4(1, 2, 3, 4);
+  list32x4[1] = new Int32x4(5, 6, 7, 8);
+  ping.send(list32x4);
+  checks.add(
+  (x) {
+    Expect.isTrue(x is Int32x4List);
+    Expect.equals(2, x.length);
+    Int32x4 entry1 = x[0];
+    Int32x4 entry2 = x[1];
+    Expect.equals(1, entry1.x);
+    Expect.equals(2, entry1.y);
+    Expect.equals(3, entry1.z);
+    Expect.equals(4, entry1.w);
+    Expect.equals(5, entry2.x);
+    Expect.equals(6, entry2.y);
+    Expect.equals(7, entry2.z);
+    Expect.equals(8, entry2.w);
+  });
+
+  Float32x4List flist32x4 = new Float32x4List(2);
+  flist32x4[0] = new Float32x4(1.5, 2.5, 3.5, 4.5);
+  flist32x4[1] = new Float32x4(5.5, 6.5, 7.5, 8.5);
+  ping.send(flist32x4);
+  checks.add(
+  (x) {
+    Expect.isTrue(x is Float32x4List);
+    Expect.equals(2, x.length);
+    Float32x4 entry1 = x[0];
+    Float32x4 entry2 = x[1];
+    Expect.equals(1.5, entry1.x);
+    Expect.equals(2.5, entry1.y);
+    Expect.equals(3.5, entry1.z);
+    Expect.equals(4.5, entry1.w);
+    Expect.equals(5.5, entry2.x);
+    Expect.equals(6.5, entry2.y);
+    Expect.equals(7.5, entry2.z);
+    Expect.equals(8.5, entry2.w);
+  });
+
+  Float64x2List flist64x2 = new Float64x2List(2);
+  flist64x2[0] = new Float64x2(1.5, 2.5);
+  flist64x2[1] = new Float64x2(5.5, 6.5);
+  ping.send(flist64x2);
+  checks.add(
+  (x) {
+    Expect.isTrue(x is Float64x2List);
+    Expect.equals(2, x.length);
+    Float64x2 entry1 = x[0];
+    Float64x2 entry2 = x[1];
+    Expect.equals(1.5, entry1.x);
+    Expect.equals(2.5, entry1.y);
+    Expect.equals(5.5, entry2.x);
+    Expect.equals(6.5, entry2.y);
+  });
+
+  ping.send({"foo": 499, "bar": 32});
+  checks.add((x) {
+    Expect.isTrue(x is LinkedHashMap);
+    Expect.listEquals(["foo", "bar"], x.keys.toList());
+    Expect.listEquals([499, 32], x.values.toList());
+    Expect.equals(499, x["foo"]);
+    Expect.equals(32, x["bar"]);
+    // Must be mutable.
+    x["foo"] = 22;
+    Expect.equals(22, x["foo"]);
+    // Must be extendable.
+    x["gee"] = 499;
+    Expect.equals(499, x["gee"]);
+  });
+
+  Map<String, int> mapWithRemovedKey = {"foo": 499, "bar": 32};
+  mapWithRemovedKey.remove("foo");
+  ping.send(mapWithRemovedKey);
+  checks.add((x) {
+    Expect.isTrue(x is LinkedHashMap);
+    Expect.listEquals(["bar"], x.keys.toList());
+    Expect.listEquals([32], x.values.toList());
+    Expect.equals(32, x["bar"]);
+  });
+
+  // Test map where a key does not define ==/hashCode.
+  Map<A, int> mapWithIdentityKey = new Map<A, int>();
+  mapWithIdentityKey[new A()] = 499;
+  ping.send(mapWithIdentityKey);
+  checks.add((x) {
+    Expect.isTrue(x is LinkedHashMap);
+    int value = x.values.first;
+    Expect.equals(499, value);
+    A key = x.keys.first;
+    Expect.equals(499, x[key]);
+  });
+
+  ping.send({0: 499, 1: 32});
+  checks.add((x) {
+    Expect.isTrue(x is LinkedHashMap);
+    Expect.listEquals([0, 1], x.keys.toList());
+    Expect.listEquals([499, 32], x.values.toList());
+    // Must be mutable.
+    x[0] = 22;
+    Expect.equals(22, x[0]);
+    // Must be extendable.
+    x[123] = 499;
+    Expect.equals(499, x[123]);
+  });
+
+  Map cyclicMap = {};
+  cyclicMap["cycle"] = cyclicMap;
+  ping.send(cyclicMap);
+  checks.add((x) {
+    Expect.isTrue(x is LinkedHashMap);
+    Expect.identical(x, x["cycle"]);
+    // Must be mutable.
+    x["cycle"] = 22;
+    Expect.equals(22, x["cycle"]);
+    // Must be extendable.
+    x["gee"] = 499;
+    Expect.equals(499, x["gee"]);
+  });
+
+  Map constMap = const {'foo': 499};
+  ping.send(constMap);
+  checks.add((x) {
+    Expect.isTrue(x is Map);
+    print(x.length);
+    Expect.equals(1, x.length);
+    Expect.equals(499, x['foo']);
+    Expect.identical(constMap, x); // //# constMap: ok
+    Expect.throws(() => constMap['bar'] = 42);
+  });
+
+  ping.send(new A());
+  checks.add((x) {
+    Expect.isTrue(x is A);
+    Expect.equals(499, x.field);
+  });
+
+  ping.send(new A.named(42));
+  checks.add((x) {
+    Expect.isTrue(x is A);
+    Expect.equals(42, x.field);
+  });
+
+  ping.send(new B());
+  checks.add((x) {
+    Expect.isTrue(x is A);
+    Expect.isTrue(x is B);
+    Expect.equals(499, x.field);
+    Expect.equals(99, x.field2);
+    Expect.throws(() => x.field2 = 22);
+  });
+
+  ping.send(new B.named(1, 2));
+  checks.add((x) {
+    Expect.isTrue(x is A);
+    Expect.isTrue(x is B);
+    Expect.equals(2, x.field);
+    Expect.equals(1, x.field2);
+    Expect.throws(() => x.field2 = 22);
+  });
+
+  ping.send(new C());
+  checks.add((x) {
+    Expect.isTrue(x is A);
+    Expect.isTrue(x is B);
+    Expect.isTrue(x is C);
+    Expect.equals(33, x.field);
+    Expect.equals(99, x.field2);
+    Expect.equals(499, x.superField);
+    Expect.throws(() => x.field2 = 22);
+  });
+
+  ping.send(new D());
+  checks.add((x) {
+    Expect.isTrue(x is A);
+    Expect.isTrue(x is B);
+    Expect.isTrue(x is C);
+    Expect.isTrue(x is D);
+    Expect.isTrue(x is M);
+    Expect.equals(33, x.field);
+    Expect.equals(11, x.field2);
+    Expect.equals(499, x.superField);
+    Expect.equals(99, x.superField2);
+    Expect.throws(() => x.field2 = 22);
+  });
+
+  D cyclicD = new D();
+  ping.send(cyclicD);
+  checks.add((x) {
+    Expect.isTrue(x is A);
+    Expect.isTrue(x is B);
+    Expect.isTrue(x is C);
+    Expect.isTrue(x is D);
+    Expect.isTrue(x is M);
+    Expect.equals(11, x.field2);
+    Expect.equals(499, x.superField);
+    Expect.equals(99, x.superField2);
+    Expect.throws(() => x.field2 = 22);
+  });
+
+  ping.send(new E(E.fooFun)); //       //# fun: ok
+  checks.add((x) { //                  //# fun: continued
+    Expect.equals(E.fooFun, x.fun); // //# fun: continued
+    Expect.equals(499, x.fun()); //    //# fun: continued
+  }); //                               //# fun: continued
+
+  ping.send(new E(barFun)); //         //# fun: continued
+  checks.add((x) { //                  //# fun: continued
+    Expect.equals(barFun, x.fun); //   //# fun: continued
+    Expect.equals(42, x.fun()); //     //# fun: continued
+  }); //                               //# fun: continued
+
+  Expect.throws(() => ping.send(new E(new E(E.fooFun).instanceFun)));
+
+  F nonConstF = new F();
+  ping.send(nonConstF);
+  checks.add((x) {
+    Expect.equals("field", x.field);
+    Expect.isFalse(identical(nonConstF, x));
+  });
+
+  const F constF = const F();
+  ping.send(constF);
+  checks.add((x) {
+    Expect.equals("field", x.field);
+    Expect.identical(constF, x); // //# constInstance: ok
+  });
+
+  G g1 = new G(nonConstF);
+  G g2 = new G(constF);
+  G g3 = const G(constF);
+  ping.send(g1);
+  ping.send(g2);
+  ping.send(g3);
+
+  checks.add((x) {
+    // g1.
+    Expect.isTrue(x is G);
+    Expect.isFalse(identical(g1, x));
+    F f = x.field;
+    Expect.equals("field", f.field);
+    Expect.isFalse(identical(nonConstF, f));
+  });
+  checks.add((x) {
+    // g2.
+    Expect.isTrue(x is G);
+    Expect.isFalse(identical(g1, x));
+    F f = x.field;
+    Expect.equals("field", f.field);
+    Expect.identical(constF, f); // //# constInstance: continued
+  });
+  checks.add((x) {
+    // g3.
+    Expect.isTrue(x is G);
+    Expect.identical(g3, x); // //# constInstance: continued
+    F f = x.field;
+    Expect.equals("field", f.field);
+    Expect.identical(constF, f); // //# constInstance: continued
+  });
+
+  // Make sure objects in a map are serialized and deserialized in the correct
+  // order.
+  Map m = new Map();
+  Value val1 = new Value(1);
+  Value val2 = new Value(2);
+  m[val1] = val2;
+  m[val2] = val1;
+  // Possible bug we want to catch:
+  // serializer runs through keys first, and then the values:
+  //    - id1 = val1, id2 = val2, ref[id2], ref[id1]
+  // deserializer runs through the keys and values in order:
+  //    - val1;  // id1.
+  //    - ref[id2];  // boom. Wasn't deserialized yet.
+  ping.send(m);
+  checks.add((x) {
+    Expect.isTrue(x is Map);
+    Expect.equals(2, x.length);
+    Expect.equals(val2, x[val1]);
+    Expect.equals(val1, x[val2]);
+    Expect.identical(x.keys.elementAt(0), x.values.elementAt(1));
+    Expect.identical(x.keys.elementAt(1), x.values.elementAt(0));
+  });
+}
+
+void main() {
+  asyncStart();
+  Queue checks = new Queue();
+  ReceivePort testPort = new ReceivePort();
+  Completer completer = new Completer();
+
+  testPort.listen((msg) {
+    Function check = checks.removeFirst();
+    check(msg);
+    if (checks.isEmpty) {
+      completer.complete();
+      testPort.close();
+    }
+  });
+
+  ReceivePort initialReplyPort = new ReceivePort();
+  Isolate
+      .spawn(echoMain, [initialReplyPort.sendPort, testPort.sendPort])
+      .then((_) => initialReplyPort.first)
+      .then((_ping) {
+        SendPort ping = _ping;
+        runTests(ping, checks);
+        Expect.isTrue(checks.length > 0);
+        completer.future.then((_) => ping.send("halt")).then((_) => asyncEnd());
+      });
+}
diff --git a/tests/lib/isolate/message4_test.dart b/tests/lib/isolate/message4_test.dart
new file mode 100644
index 0000000..4644ddb
--- /dev/null
+++ b/tests/lib/isolate/message4_test.dart
@@ -0,0 +1,72 @@
+// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+// Dart test program for testing serialization of messages with static
+// native functions.
+
+library MessageTest;
+
+import 'dart:async';
+import 'dart:collection';
+import 'dart:isolate';
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
+
+void echoMain(msg) {
+  SendPort replyTo = msg[0];
+  SendPort pong = msg[1];
+  ReceivePort port = new ReceivePort();
+  replyTo.send(port.sendPort);
+  port.listen((msg) {
+    if (msg == "halt") {
+      port.close();
+    } else {
+      pong.send(msg);
+    }
+  });
+}
+
+void runTests(SendPort ping, Queue checks) {
+  ping.send("abc");
+  checks.add((x) => Expect.equals("abc", x));
+
+  ping.send(int.parse);
+  checks.add((x) => Expect.identical(int.parse, x));
+
+  ping.send(identityHashCode);
+  checks.add((x) => Expect.identical(identityHashCode, x));
+
+  ping.send(identical);
+  checks.add((x) => Expect.identical(identical, x));
+}
+
+main() async {
+  asyncStart();
+  Queue checks = new Queue();
+  ReceivePort testPort = new ReceivePort();
+  Completer completer = new Completer();
+
+  testPort.listen((msg) {
+    Function check = checks.removeFirst();
+    check(msg);
+    if (checks.isEmpty) {
+      completer.complete();
+      testPort.close();
+    }
+  });
+
+  ReceivePort initialReplyPort = new ReceivePort();
+
+  Isolate i = await Isolate.spawn(
+      echoMain, [initialReplyPort.sendPort, testPort.sendPort]);
+  SendPort ping = await initialReplyPort.first;
+  runTests(ping, checks);
+  Expect.isTrue(checks.length > 0);
+  await completer.future;
+  ping.send("halt");
+  asyncEnd();
+}
diff --git a/tests/lib/isolate/message_const_type_arguments_1_test.dart b/tests/lib/isolate/message_const_type_arguments_1_test.dart
new file mode 100644
index 0000000..e5133aa
--- /dev/null
+++ b/tests/lib/isolate/message_const_type_arguments_1_test.dart
@@ -0,0 +1,410 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+// https://github.com/dart-lang/sdk/issues/35778
+
+import "dart:async";
+import "dart:isolate";
+import "dart:typed_data";
+import "package:expect/expect.dart";
+
+void child(replyPort) {
+  print("Child start");
+
+  replyPort.send(const <List>[]);
+  replyPort.send(const <Map>[]);
+  replyPort.send(const <Null>[]);
+  replyPort.send(const <Object>[]);
+  replyPort.send(const <String>[]);
+  replyPort.send(const <bool>[]);
+  replyPort.send(const <double>[]);
+  replyPort.send(const <int>[]);
+  replyPort.send(const <num>[]);
+
+  replyPort.send(const <List, List>{});
+  replyPort.send(const <List, Map>{});
+  replyPort.send(const <List, Null>{});
+  replyPort.send(const <List, Object>{});
+  replyPort.send(const <List, String>{});
+  replyPort.send(const <List, bool>{});
+  replyPort.send(const <List, double>{});
+  replyPort.send(const <List, int>{});
+  replyPort.send(const <List, num>{});
+
+  replyPort.send(const <Map, List>{});
+  replyPort.send(const <Map, Map>{});
+  replyPort.send(const <Map, Null>{});
+  replyPort.send(const <Map, Object>{});
+  replyPort.send(const <Map, String>{});
+  replyPort.send(const <Map, bool>{});
+  replyPort.send(const <Map, double>{});
+  replyPort.send(const <Map, int>{});
+  replyPort.send(const <Map, num>{});
+
+  replyPort.send(const <Null, List>{});
+  replyPort.send(const <Null, Map>{});
+  replyPort.send(const <Null, Null>{});
+  replyPort.send(const <Null, Object>{});
+  replyPort.send(const <Null, String>{});
+  replyPort.send(const <Null, bool>{});
+  replyPort.send(const <Null, double>{});
+  replyPort.send(const <Null, int>{});
+  replyPort.send(const <Null, num>{});
+
+  replyPort.send(const <Object, List>{});
+  replyPort.send(const <Object, Map>{});
+  replyPort.send(const <Object, Null>{});
+  replyPort.send(const <Object, Object>{});
+  replyPort.send(const <Object, String>{});
+  replyPort.send(const <Object, bool>{});
+  replyPort.send(const <Object, double>{});
+  replyPort.send(const <Object, int>{});
+  replyPort.send(const <Object, num>{});
+
+  replyPort.send(const <String, List>{});
+  replyPort.send(const <String, Map>{});
+  replyPort.send(const <String, Null>{});
+  replyPort.send(const <String, Object>{});
+  replyPort.send(const <String, String>{});
+  replyPort.send(const <String, bool>{});
+  replyPort.send(const <String, double>{});
+  replyPort.send(const <String, int>{});
+  replyPort.send(const <String, num>{});
+
+  replyPort.send(const <bool, List>{});
+  replyPort.send(const <bool, Map>{});
+  replyPort.send(const <bool, Null>{});
+  replyPort.send(const <bool, Object>{});
+  replyPort.send(const <bool, String>{});
+  replyPort.send(const <bool, bool>{});
+  replyPort.send(const <bool, double>{});
+  replyPort.send(const <bool, int>{});
+  replyPort.send(const <bool, num>{});
+
+  replyPort.send(const <double, List>{});
+  replyPort.send(const <double, Map>{});
+  replyPort.send(const <double, Null>{});
+  replyPort.send(const <double, Object>{});
+  replyPort.send(const <double, String>{});
+  replyPort.send(const <double, bool>{});
+  replyPort.send(const <double, double>{});
+  replyPort.send(const <double, int>{});
+  replyPort.send(const <double, num>{});
+
+  replyPort.send(const <int, List>{});
+  replyPort.send(const <int, Map>{});
+  replyPort.send(const <int, Null>{});
+  replyPort.send(const <int, Object>{});
+  replyPort.send(const <int, String>{});
+  replyPort.send(const <int, bool>{});
+  replyPort.send(const <int, double>{});
+  replyPort.send(const <int, int>{});
+  replyPort.send(const <int, num>{});
+
+  replyPort.send(const <num, List>{});
+  replyPort.send(const <num, Map>{});
+  replyPort.send(const <num, Null>{});
+  replyPort.send(const <num, Object>{});
+  replyPort.send(const <num, String>{});
+  replyPort.send(const <num, bool>{});
+  replyPort.send(const <num, double>{});
+  replyPort.send(const <num, int>{});
+  replyPort.send(const <num, num>{});
+
+  print("Child done");
+}
+
+Future<void> main(List<String> args) async {
+  print("Parent start");
+
+  ReceivePort port = new ReceivePort();
+  Isolate.spawn(child, port.sendPort);
+  StreamIterator<dynamic> incoming = new StreamIterator<dynamic>(port);
+
+  Expect.isTrue(await incoming.moveNext());
+  dynamic x = incoming.current;
+  Expect.isTrue(x is List<List>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is List<Map>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is List<Null>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is List<Object>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is List<String>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is List<bool>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is List<double>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is List<int>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is List<num>);
+
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<List, List>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<List, Map>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<List, Null>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<List, Object>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<List, String>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<List, bool>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<List, double>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<List, int>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<List, num>);
+
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<Map, List>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<Map, Map>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<Map, Null>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<Map, Object>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<Map, String>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<Map, bool>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<Map, double>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<Map, int>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<Map, num>);
+
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<Null, List>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<Null, Map>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<Null, Null>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<Null, Object>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<Null, String>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<Null, bool>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<Null, double>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<Null, int>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<Null, num>);
+
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<Object, List>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<Object, Map>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<Object, Null>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<Object, Object>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<Object, String>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<Object, bool>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<Object, double>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<Object, int>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<Object, num>);
+
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<String, List>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<String, Map>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<String, Null>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<String, Object>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<String, String>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<String, bool>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<String, double>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<String, int>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<String, num>);
+
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<bool, List>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<bool, Map>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<bool, Null>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<bool, Object>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<bool, String>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<bool, bool>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<bool, double>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<bool, int>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<bool, num>);
+
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<double, List>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<double, Map>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<double, Null>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<double, Object>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<double, String>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<double, bool>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<double, double>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<double, int>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<double, num>);
+
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<int, List>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<int, Map>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<int, Null>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<int, Object>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<int, String>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<int, bool>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<int, double>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<int, int>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<int, num>);
+
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<num, List>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<num, Map>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<num, Null>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<num, Object>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<num, String>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<num, bool>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<num, double>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<num, int>);
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current;
+  Expect.isTrue(x is Map<num, num>);
+
+  port.close();
+  print("Parent done");
+}
diff --git a/tests/lib/isolate/message_const_type_arguments_2_test.dart b/tests/lib/isolate/message_const_type_arguments_2_test.dart
new file mode 100644
index 0000000..002aa6e
--- /dev/null
+++ b/tests/lib/isolate/message_const_type_arguments_2_test.dart
@@ -0,0 +1,320 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+// https://github.com/dart-lang/sdk/issues/35778
+
+import "dart:async";
+import "dart:isolate";
+import "dart:typed_data";
+import "package:expect/expect.dart";
+
+void child(replyPort) {
+  print("Child start");
+
+  replyPort.send(const <List>[]);
+  replyPort.send(const <Map>[]);
+  replyPort.send(const <Null>[]);
+  replyPort.send(const <Object>[]);
+  replyPort.send(const <String>[]);
+  replyPort.send(const <bool>[]);
+  replyPort.send(const <double>[]);
+  replyPort.send(const <int>[]);
+  replyPort.send(const <num>[]);
+
+  replyPort.send(const <List, List>{});
+  replyPort.send(const <List, Map>{});
+  replyPort.send(const <List, Null>{});
+  replyPort.send(const <List, Object>{});
+  replyPort.send(const <List, String>{});
+  replyPort.send(const <List, bool>{});
+  replyPort.send(const <List, double>{});
+  replyPort.send(const <List, int>{});
+  replyPort.send(const <List, num>{});
+
+  replyPort.send(const <Map, List>{});
+  replyPort.send(const <Map, Map>{});
+  replyPort.send(const <Map, Null>{});
+  replyPort.send(const <Map, Object>{});
+  replyPort.send(const <Map, String>{});
+  replyPort.send(const <Map, bool>{});
+  replyPort.send(const <Map, double>{});
+  replyPort.send(const <Map, int>{});
+  replyPort.send(const <Map, num>{});
+
+  replyPort.send(const <Null, List>{});
+  replyPort.send(const <Null, Map>{});
+  replyPort.send(const <Null, Null>{});
+  replyPort.send(const <Null, Object>{});
+  replyPort.send(const <Null, String>{});
+  replyPort.send(const <Null, bool>{});
+  replyPort.send(const <Null, double>{});
+  replyPort.send(const <Null, int>{});
+  replyPort.send(const <Null, num>{});
+
+  replyPort.send(const <Object, List>{});
+  replyPort.send(const <Object, Map>{});
+  replyPort.send(const <Object, Null>{});
+  replyPort.send(const <Object, Object>{});
+  replyPort.send(const <Object, String>{});
+  replyPort.send(const <Object, bool>{});
+  replyPort.send(const <Object, double>{});
+  replyPort.send(const <Object, int>{});
+  replyPort.send(const <Object, num>{});
+
+  replyPort.send(const <String, List>{});
+  replyPort.send(const <String, Map>{});
+  replyPort.send(const <String, Null>{});
+  replyPort.send(const <String, Object>{});
+  replyPort.send(const <String, String>{});
+  replyPort.send(const <String, bool>{});
+  replyPort.send(const <String, double>{});
+  replyPort.send(const <String, int>{});
+  replyPort.send(const <String, num>{});
+
+  replyPort.send(const <bool, List>{});
+  replyPort.send(const <bool, Map>{});
+  replyPort.send(const <bool, Null>{});
+  replyPort.send(const <bool, Object>{});
+  replyPort.send(const <bool, String>{});
+  replyPort.send(const <bool, bool>{});
+  replyPort.send(const <bool, double>{});
+  replyPort.send(const <bool, int>{});
+  replyPort.send(const <bool, num>{});
+
+  replyPort.send(const <double, List>{});
+  replyPort.send(const <double, Map>{});
+  replyPort.send(const <double, Null>{});
+  replyPort.send(const <double, Object>{});
+  replyPort.send(const <double, String>{});
+  replyPort.send(const <double, bool>{});
+  replyPort.send(const <double, double>{});
+  replyPort.send(const <double, int>{});
+  replyPort.send(const <double, num>{});
+
+  replyPort.send(const <int, List>{});
+  replyPort.send(const <int, Map>{});
+  replyPort.send(const <int, Null>{});
+  replyPort.send(const <int, Object>{});
+  replyPort.send(const <int, String>{});
+  replyPort.send(const <int, bool>{});
+  replyPort.send(const <int, double>{});
+  replyPort.send(const <int, int>{});
+  replyPort.send(const <int, num>{});
+
+  replyPort.send(const <num, List>{});
+  replyPort.send(const <num, Map>{});
+  replyPort.send(const <num, Null>{});
+  replyPort.send(const <num, Object>{});
+  replyPort.send(const <num, String>{});
+  replyPort.send(const <num, bool>{});
+  replyPort.send(const <num, double>{});
+  replyPort.send(const <num, int>{});
+  replyPort.send(const <num, num>{});
+
+  print("Child done");
+}
+
+Future<void> main(List<String> args) async {
+  print("Parent start");
+
+  ReceivePort port = new ReceivePort();
+  Isolate.spawn(child, port.sendPort);
+  StreamIterator<dynamic> incoming = new StreamIterator<dynamic>(port);
+
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <List>[]));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <Map>[]));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <Null>[]));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <Object>[]));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <String>[]));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <bool>[]));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <double>[]));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <int>[]));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <num>[]));
+
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <List, List>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <List, Map>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <List, Null>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <List, Object>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <List, String>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <List, bool>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <List, double>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <List, int>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <List, num>{}));
+
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <Map, List>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <Map, Map>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <Map, Null>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <Map, Object>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <Map, String>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <Map, bool>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <Map, double>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <Map, int>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <Map, num>{}));
+
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <Null, List>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <Null, Map>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <Null, Null>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <Null, Object>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <Null, String>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <Null, bool>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <Null, double>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <Null, int>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <Null, num>{}));
+
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <Object, List>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <Object, Map>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <Object, Null>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <Object, Object>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <Object, String>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <Object, bool>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <Object, double>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <Object, int>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <Object, num>{}));
+
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <String, List>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <String, Map>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <String, Null>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <String, Object>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <String, String>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <String, bool>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <String, double>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <String, int>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <String, num>{}));
+
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <bool, List>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <bool, Map>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <bool, Null>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <bool, Object>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <bool, String>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <bool, bool>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <bool, double>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <bool, int>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <bool, num>{}));
+
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <double, List>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <double, Map>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <double, Null>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <double, Object>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <double, String>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <double, bool>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <double, double>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <double, int>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <double, num>{}));
+
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <int, List>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <int, Map>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <int, Null>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <int, Object>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <int, String>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <int, bool>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <int, double>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <int, int>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <int, num>{}));
+
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <num, List>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <num, Map>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <num, Null>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <num, Object>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <num, String>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <num, bool>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <num, double>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <num, int>{}));
+  Expect.isTrue(await incoming.moveNext());
+  Expect.isTrue(identical(incoming.current, const <num, num>{}));
+
+  port.close();
+  print("Parent done");
+}
diff --git a/tests/lib/isolate/message_enum_test.dart b/tests/lib/isolate/message_enum_test.dart
new file mode 100644
index 0000000..801afd4d
--- /dev/null
+++ b/tests/lib/isolate/message_enum_test.dart
@@ -0,0 +1,30 @@
+// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import 'package:expect/expect.dart';
+import 'package:async_helper/async_helper.dart';
+import "dart:isolate";
+
+enum Foo { BAR, BAZ }
+
+main() {
+  var p;
+  p = new RawReceivePort((map) {
+    Expect.equals(1, map.keys.length);
+    Expect.equals(42, map.values.first);
+    var key = map.keys.first;
+    Expect.equals(42, map[key]);
+    p.close();
+  });
+  asyncStart();
+  Isolate.spawn(sendIt, p.sendPort).whenComplete(asyncEnd);
+}
+
+void sendIt(port) {
+  var map = {Foo.BAR: 42};
+  port.send(map);
+}
diff --git a/tests/lib/isolate/message_test.dart b/tests/lib/isolate/message_test.dart
new file mode 100644
index 0000000..8a7ec69
--- /dev/null
+++ b/tests/lib/isolate/message_test.dart
@@ -0,0 +1,153 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+// Dart test program for testing serialization of messages.
+// VMOptions=--enable_type_checks --enable_asserts
+
+library MessageTest;
+
+import 'dart:async';
+import 'dart:isolate';
+
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
+
+// ---------------------------------------------------------------------------
+// Message passing test.
+// ---------------------------------------------------------------------------
+
+class MessageTest {
+  static const List list1 = const ["Hello", "World", "Hello", 0xfffffffffff];
+  static const List list2 = const [null, list1, list1, list1, list1];
+  static const List list3 = const [list2, 2.0, true, false, 0xfffffffffff];
+  static const Map map1 = const {
+    "a=1": 1,
+    "b=2": 2,
+    "c=3": 3,
+  };
+  static const Map map2 = const {
+    "list1": list1,
+    "list2": list2,
+    "list3": list3,
+  };
+  static const List list4 = const [map1, map2];
+  static const List elms = const [
+    list1,
+    list2,
+    list3,
+    list4,
+  ];
+
+  static void VerifyMap(Map expected, Map actual) {
+    Expect.equals(actual.length, expected.length);
+    testForEachMap(key, value) {
+      if (value is List) {
+        VerifyList(value, actual[key]);
+      } else {
+        Expect.equals(actual[key], value);
+      }
+    }
+
+    expected.forEach(testForEachMap);
+  }
+
+  static void VerifyList(List expected, List actual) {
+    for (int i = 0; i < expected.length; i++) {
+      if (expected[i] is List) {
+        VerifyList(expected[i], actual[i]);
+      } else if (expected[i] is Map) {
+        Expect.type<Map>(actual[i]);
+        VerifyMap(expected[i], actual[i]);
+      } else {
+        Expect.equals(actual[i], expected[i]);
+      }
+    }
+  }
+
+  static void VerifyObject(int index, var actual) {
+    var expected = elms[index];
+    Expect.type<List>(expected);
+    Expect.type<List>(actual);
+    Expect.equals(actual.length, expected.length);
+    VerifyList(expected, actual);
+  }
+}
+
+pingPong(replyTo) {
+  ReceivePort port = new ReceivePort();
+  int count = 0;
+  port.listen((pair) {
+    var message = pair[0];
+    var replyTo = pair[1];
+    if (message == -1) {
+      port.close();
+      replyTo.send(count);
+    } else {
+      // Check if the received object is correct.
+      if (count < MessageTest.elms.length) {
+        MessageTest.VerifyObject(count, message);
+      }
+      // Bounce the received object back so that the sender
+      // can make sure that the object matches.
+      replyTo.send(message);
+      count++;
+    }
+  });
+  replyTo.send(port.sendPort);
+}
+
+Future remoteCall(SendPort port, message) {
+  ReceivePort receivePort = new ReceivePort();
+  port.send([message, receivePort.sendPort]);
+  return receivePort.first;
+}
+
+void main([args, port]) {
+  ReceivePort port = new ReceivePort();
+  Isolate.spawn(pingPong, port.sendPort);
+  asyncStart();
+  port.first.then((remote) {
+    // Send objects and receive them back.
+    for (int i = 0; i < MessageTest.elms.length; i++) {
+      var sentObject = MessageTest.elms[i];
+      asyncStart();
+      remoteCall(remote, sentObject).then((receivedObject) {
+        MessageTest.VerifyObject(i, receivedObject);
+        asyncEnd();
+      });
+    }
+
+    // Send recursive objects and receive them back.
+    List local_list1 = ["Hello", "World", "Hello", 0xffffffffff];
+    List local_list2 = [null, local_list1, local_list1];
+    List local_list3 = [local_list2, 2.0, true, false, 0xffffffffff];
+    List sendObject = new List.filled(5, null);
+    sendObject[0] = local_list1;
+    sendObject[1] = sendObject;
+    sendObject[2] = local_list2;
+    sendObject[3] = sendObject;
+    sendObject[4] = local_list3;
+    remoteCall(remote, sendObject).then((var replyObject) {
+      Expect.type<List>(sendObject);
+      Expect.type<List>(replyObject);
+      Expect.equals(sendObject.length, replyObject.length);
+      Expect.identical(replyObject[1], replyObject);
+      Expect.identical(replyObject[3], replyObject);
+      Expect.identical(replyObject[0], replyObject[2][1]);
+      Expect.identical(replyObject[0], replyObject[2][2]);
+      Expect.identical(replyObject[2], replyObject[4][0]);
+      Expect.identical(replyObject[0][0], replyObject[0][2]);
+      Expect.equals(replyObject[0][3], replyObject[4][4]);
+    });
+
+    // Shutdown the MessageServer.
+    remoteCall(remote, -1).then((message) {
+      Expect.equals(message, MessageTest.elms.length + 1);
+      asyncEnd();
+    });
+  });
+}
diff --git a/tests/lib/isolate/mint_maker_test.dart b/tests/lib/isolate/mint_maker_test.dart
new file mode 100644
index 0000000..c4b25ec
--- /dev/null
+++ b/tests/lib/isolate/mint_maker_test.dart
@@ -0,0 +1,187 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+library MintMakerTest;
+
+import 'dart:async';
+import 'dart:isolate';
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
+
+class Mint {
+  Map<SendPort, Purse> _registry;
+  late SendPort port;
+
+  Mint() : _registry = new Map<SendPort, Purse>() {
+    ReceivePort mintPort = new ReceivePort();
+    port = mintPort.sendPort;
+    serveMint(mintPort);
+  }
+
+  void serveMint(ReceivePort port) {
+    port.listen((message) {
+      int balance = message[0];
+      Purse purse = createPurse(balance);
+      message[1].send(purse.port);
+    });
+  }
+
+  Purse createPurse(int balance) {
+    Purse purse = new Purse(this, balance);
+    _registry[purse.port] = purse;
+    return purse;
+  }
+
+  Purse lookupPurse(SendPort port) {
+    return (_registry[port])!;
+  }
+}
+
+class MintWrapper {
+  SendPort _mint;
+  MintWrapper(SendPort this._mint) {}
+
+  void createPurse(int balance, handlePurse(PurseWrapper purse)) {
+    ReceivePort reply = new ReceivePort();
+    reply.first.then((purse) {
+      handlePurse(new PurseWrapper(purse as SendPort));
+    });
+    _mint.send([balance, reply.sendPort]);
+  }
+}
+
+class Purse {
+  Mint mint;
+  int balance;
+  late SendPort port;
+
+  Purse(this.mint, this.balance) {
+    ReceivePort recipient = new ReceivePort();
+    port = recipient.sendPort;
+    servePurse(recipient);
+  }
+
+  void servePurse(ReceivePort recipient) {
+    recipient.listen((message) {
+      String command = message[0];
+      if (command == "balance") {
+        SendPort replyTo = message.last;
+        replyTo.send(queryBalance());
+      } else if (command == "deposit") {
+        Purse source = mint.lookupPurse(message[2]);
+        deposit(message[1], source);
+      } else if (command == "sprout") {
+        SendPort replyTo = message.last;
+        Purse result = sproutPurse();
+        replyTo.send(result.port);
+      } else {
+        // TODO: Send an exception back.
+        throw new UnsupportedError("Unsupported commend: $command");
+      }
+    });
+  }
+
+  int queryBalance() {
+    return balance;
+  }
+
+  Purse sproutPurse() {
+    return mint.createPurse(0);
+  }
+
+  void deposit(int amount, Purse source) {
+    // TODO: Throw an exception if the source purse doesn't hold
+    // enough dough.
+    balance += amount;
+    source.balance -= amount;
+  }
+}
+
+class PurseWrapper {
+  SendPort _purse;
+
+  PurseWrapper(this._purse) {}
+
+  void _sendReceive<T>(String message, replyHandler(T reply)) {
+    ReceivePort reply = new ReceivePort();
+    _purse.send([message, reply.sendPort]);
+    reply.first.then((a) => replyHandler(a as T));
+  }
+
+  void queryBalance(handleBalance(int balance)) {
+    _sendReceive("balance", handleBalance);
+  }
+
+  void sproutPurse(handleSprouted(PurseWrapper sprouted)) {
+    _sendReceive("sprout", (SendPort sprouted) {
+      handleSprouted(new PurseWrapper(sprouted));
+    });
+  }
+
+  void deposit(PurseWrapper source, int amount) {
+    _purse.send(["deposit", amount, source._purse]);
+  }
+}
+
+mintMakerWrapper(SendPort replyPort) {
+  ReceivePort receiver = new ReceivePort();
+  replyPort.send(receiver.sendPort);
+  receiver.listen((replyTo) {
+    Mint mint = new Mint();
+    (replyTo as SendPort).send(mint.port);
+  });
+}
+
+class MintMakerWrapper {
+  final SendPort _port;
+
+  static Future<MintMakerWrapper> create() {
+    ReceivePort reply = new ReceivePort();
+    return Isolate.spawn(mintMakerWrapper, reply.sendPort)
+        .then((_) => reply.first.then((port) => new MintMakerWrapper._(port)));
+  }
+
+  MintMakerWrapper._(this._port);
+
+  void makeMint(handleMint(MintWrapper mint)) {
+    ReceivePort reply = new ReceivePort();
+    reply.first.then((mint) {
+      handleMint(new MintWrapper(mint as SendPort));
+    });
+    _port.send(reply.sendPort);
+  }
+}
+
+_checkBalance(PurseWrapper wrapper, expected) {
+  wrapper.queryBalance((balance) {
+    Expect.equals(balance, expected);
+  });
+}
+
+void main([args, port]) {
+  asyncStart();
+  MintMakerWrapper.create().then((mintMaker) {
+    mintMaker.makeMint((mint) {
+      mint.createPurse(100, (purse) {
+        _checkBalance(purse, 100);
+        purse.sproutPurse((sprouted) {
+          _checkBalance(sprouted, 0);
+          _checkBalance(purse, 100);
+
+          sprouted.deposit(purse, 5);
+          _checkBalance(sprouted, 0 + 5);
+          _checkBalance(purse, 100 - 5);
+
+          sprouted.deposit(purse, 42);
+          _checkBalance(sprouted, 0 + 5 + 42);
+          _checkBalance(purse, 100 - 5 - 42);
+          asyncEnd();
+        });
+      });
+    });
+  });
+}
diff --git a/tests/lib/isolate/native_wrapper_message_test.dart b/tests/lib/isolate/native_wrapper_message_test.dart
new file mode 100644
index 0000000..2b663d5
--- /dev/null
+++ b/tests/lib/isolate/native_wrapper_message_test.dart
@@ -0,0 +1,37 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import 'dart:isolate';
+import 'dart:nativewrappers';
+import 'package:expect/expect.dart';
+import 'package:async_helper/async_helper.dart';
+
+echo(msg) {
+  var data = msg[0];
+  var reply = msg[1];
+  reply.send('echoing ${data(1)}}');
+}
+
+class Test extends NativeFieldWrapperClass2 {
+  Test(this.i, this.j);
+  int i, j;
+}
+
+main() {
+  var port = new RawReceivePort();
+  var obj = new Test(1, 2);
+  var msg = [obj, port.sendPort];
+  var snd = Isolate.spawn(echo, msg);
+
+  asyncStart();
+  snd.catchError((e) {
+    Expect.isTrue(e is ArgumentError);
+    Expect.isTrue("$e".contains("NativeWrapper"));
+    port.close();
+    asyncEnd();
+  });
+}
diff --git a/tests/lib/isolate/nested_spawn2_test.dart b/tests/lib/isolate/nested_spawn2_test.dart
new file mode 100644
index 0000000..d335909
--- /dev/null
+++ b/tests/lib/isolate/nested_spawn2_test.dart
@@ -0,0 +1,79 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+// Dart test program for testing that isolates can spawn other isolates and
+// that the nested isolates can communicate with the main once the spawner has
+// disappeared.
+
+library NestedSpawn2Test;
+
+import 'dart:isolate';
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
+
+void isolateA(SendPort init) {
+  ReceivePort port = new ReceivePort();
+  init.send(port.sendPort);
+  port.first.then((message) {
+    Expect.equals(message[0], "launch nested!");
+    SendPort replyTo = message[1];
+    Isolate.spawn(isolateB, replyTo);
+  });
+}
+
+String msg0 = "0 there?";
+String msg1 = "1 Yes.";
+String msg2 = "2 great. Think the other one is already dead?";
+String msg3 = "3 Give him some time.";
+String msg4 = "4 now?";
+String msg5 = "5 Now.";
+String msg6 = "6 Great. Bye";
+
+void _call(SendPort p, msg, void onreceive(m, replyTo)) {
+  final replyTo = new ReceivePort();
+  p.send([msg, replyTo.sendPort]);
+  replyTo.first.then((m) {
+    onreceive(m[0], m[1]);
+  });
+}
+
+void isolateB(SendPort mainPort) {
+  // Do a little ping-pong dance to give the intermediate isolate
+  // time to die.
+  _call(mainPort, msg0, ((msg, replyTo) {
+    Expect.equals(msg[0], "1");
+    _call(replyTo, msg2, ((msg, replyTo) {
+      Expect.equals(msg[0], "3");
+      _call(replyTo, msg4, ((msg, replyTo) {
+        Expect.equals(msg[0], "5");
+        replyTo.send([msg6, null]);
+      }));
+    }));
+  }));
+}
+
+void main([args, port]) {
+  // spawned isolate can spawn other isolates
+  ReceivePort init = new ReceivePort();
+  Isolate.spawn(isolateA, init.sendPort);
+  asyncStart();
+  init.first.then((port) {
+    _call(port, "launch nested!", (msg, replyTo) {
+      Expect.equals(msg[0], "0");
+      _call(replyTo, msg1, (msg, replyTo) {
+        Expect.equals(msg[0], "2");
+        _call(replyTo, msg3, (msg, replyTo) {
+          Expect.equals(msg[0], "4");
+          _call(replyTo, msg5, (msg, _) {
+            Expect.equals(msg[0], "6");
+            asyncEnd();
+          });
+        });
+      });
+    });
+  });
+}
diff --git a/tests/lib/isolate/nested_spawn_test.dart b/tests/lib/isolate/nested_spawn_test.dart
new file mode 100644
index 0000000..0bc8c77
--- /dev/null
+++ b/tests/lib/isolate/nested_spawn_test.dart
@@ -0,0 +1,37 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+// Dart test program for testing that isolates can spawn other isolates.
+
+library NestedSpawnTest;
+
+import 'dart:isolate';
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
+
+void isolateA(message) {
+  message.add("isolateA");
+  Isolate.spawn(isolateB, message);
+}
+
+void isolateB(message) {
+  message.add("isolateB");
+  message[0].send(message);
+}
+
+void main([args, port]) {
+  // spawned isolates can spawn nested isolates
+  ReceivePort port = new ReceivePort();
+  Isolate.spawn(isolateA, [port.sendPort, "main"]);
+  asyncStart();
+  port.first.then((message) {
+    Expect.equals("main", message[1]);
+    Expect.equals("isolateA", message[2]);
+    Expect.equals("isolateB", message[3]);
+    asyncEnd();
+  });
+}
diff --git a/tests/lib/isolate/non_fatal_exception_in_timer_callback_test.dart b/tests/lib/isolate/non_fatal_exception_in_timer_callback_test.dart
new file mode 100644
index 0000000..b361171
--- /dev/null
+++ b/tests/lib/isolate/non_fatal_exception_in_timer_callback_test.dart
@@ -0,0 +1,30 @@
+// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import 'dart:async';
+import 'dart:isolate';
+import 'dart:io';
+
+main() async {
+  Isolate.current.setErrorsFatal(false);
+
+  new Timer(const Duration(milliseconds: 10), () {
+    print("Timer 1");
+
+    // This unhandled exception should not prevent the second timer from firing.
+    throw "Oh no!";
+  });
+
+  new Timer.periodic(const Duration(milliseconds: 20), (_) {
+    print("Timer 2");
+    exit(0);
+  });
+
+  sleep(const Duration(milliseconds: 30)); //# sleep: ok
+  // With sleep: both timers are due at the same wakeup event.
+  // Without sleep: the timers get separate wakeup events.
+}
diff --git a/tests/lib/isolate/object_leak_test.dart b/tests/lib/isolate/object_leak_test.dart
new file mode 100644
index 0000000..b8b94b4
--- /dev/null
+++ b/tests/lib/isolate/object_leak_test.dart
@@ -0,0 +1,41 @@
+// Copyright (c) 2011, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+// Regression test for http://dartbug.com/18942
+
+library LeakTest;
+
+import "package:expect/expect.dart";
+import "package:async_helper/async_helper.dart";
+import 'dart:isolate';
+import 'dart:async';
+
+class A {
+  var x = 0;
+}
+
+fun(msg) {
+  var a = msg[0];
+  var replyTo = msg[1];
+  print("received: ${a.x}");
+  a.x = 1;
+  print("done updating: ${a.x}");
+  replyTo.send("done");
+}
+
+main() {
+  asyncStart();
+  var a = new A();
+  ReceivePort rp = new ReceivePort();
+  Isolate.spawn(fun, [a, rp.sendPort]);
+  rp.first.then((msg) {
+    Expect.equals("done", msg);
+    // Changes in other isolate must not reach here.
+    Expect.equals(0, a.x);
+    asyncEnd();
+  });
+}
diff --git a/tests/lib/isolate/ondone_test.dart b/tests/lib/isolate/ondone_test.dart
new file mode 100644
index 0000000..f378855
--- /dev/null
+++ b/tests/lib/isolate/ondone_test.dart
@@ -0,0 +1,127 @@
+// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import "dart:isolate";
+import "dart:async";
+import "package:async_helper/async_helper.dart";
+
+void isomain(SendPort replyPort) {
+  RawReceivePort port = new RawReceivePort();
+  port.handler = (v) {
+    if (v == 0) {
+      // Shut down when receiving the 0 message.
+      port.close();
+    } else {
+      replyPort.send(v);
+    }
+  };
+  replyPort.send(port.sendPort);
+}
+
+void main() {
+  testExit();
+  testCancelExit();
+  testOverrideResponse();
+}
+
+void testExit() {
+  bool mayComplete = false;
+  asyncStart();
+  var completer = new Completer(); // Completed by first reply from isolate.
+  RawReceivePort reply = new RawReceivePort(completer.complete);
+  late RawReceivePort onExitPort;
+  onExitPort = new RawReceivePort((v) {
+    if (v != "RESPONSE") throw "WRONG RESPONSE: $v";
+    reply.close();
+    onExitPort.close();
+    if (!mayComplete) throw "COMPLETED EARLY";
+    asyncEnd();
+  });
+  Isolate.spawn(isomain, reply.sendPort).then((Isolate isolate) {
+    isolate.addOnExitListener(onExitPort.sendPort, response: "RESPONSE");
+    return completer.future;
+  }).then((echoPort) {
+    int counter = 4;
+    reply.handler = (v) {
+      if (v != counter) throw "WRONG REPLY";
+      if (v == 0) throw "REPLY INSTEAD OF SHUTDOWN";
+      counter--;
+      mayComplete = (counter == 0);
+      echoPort.send(counter);
+    };
+    echoPort.send(counter);
+  });
+}
+
+void testCancelExit() {
+  bool mayComplete = false;
+  asyncStart();
+  var completer = new Completer(); // Completed by first reply from isolate.
+  RawReceivePort reply = new RawReceivePort(completer.complete);
+  RawReceivePort onExitPort2 = new RawReceivePort((_) {
+    throw "RECEIVED EXIT MESSAGE";
+  });
+  late RawReceivePort onExitPort1;
+  onExitPort1 = new RawReceivePort((_) {
+    reply.close();
+    onExitPort1.close();
+    if (!mayComplete) throw "COMPLETED EARLY";
+    new Timer(const Duration(milliseconds: 0), () {
+      onExitPort2.close();
+      asyncEnd();
+    });
+  });
+  Isolate.spawn(isomain, reply.sendPort).then((Isolate isolate) {
+    isolate.addOnExitListener(onExitPort2.sendPort);
+    isolate.addOnExitListener(onExitPort1.sendPort);
+    return completer.future.then((echoPort) {
+      int counter = 4;
+      reply.handler = (v) {
+        if (v != counter) throw "WRONG REPLY";
+        if (v == 0) throw "REPLY INSTEAD OF SHUTDOWN";
+        counter--;
+        mayComplete = (counter == 0);
+        if (counter == 1) {
+          // Remove listener 2, keep listener 1.
+          isolate.removeOnExitListener(onExitPort2.sendPort);
+        }
+        echoPort.send(counter);
+      };
+      echoPort.send(counter);
+    });
+  });
+}
+
+void testOverrideResponse() {
+  bool mayComplete = false;
+  asyncStart();
+  var completer = new Completer(); // Completed by first reply from isolate.
+  RawReceivePort reply = new RawReceivePort(completer.complete);
+  late RawReceivePort onExitPort;
+  onExitPort = new RawReceivePort((v) {
+    if (v != "RESPONSE2") throw "WRONG RESPONSE: $v";
+    reply.close();
+    onExitPort.close();
+    if (!mayComplete) throw "COMPLETED EARLY";
+    asyncEnd();
+  });
+  Isolate.spawn(isomain, reply.sendPort).then((Isolate isolate) {
+    isolate.addOnExitListener(onExitPort.sendPort, response: "RESPONSE");
+    isolate.addOnExitListener(onExitPort.sendPort, response: "RESPONSE2");
+    return completer.future;
+  }).then((echoPort) {
+    int counter = 4;
+    reply.handler = (v) {
+      if (v != counter) throw "WRONG REPLY";
+      if (v == 0) throw "REPLY INSTEAD OF SHUTDOWN";
+      counter--;
+      mayComplete = (counter == 0);
+      echoPort.send(counter);
+    };
+    echoPort.send(counter);
+  });
+}
diff --git a/tests/lib/isolate/package_config_test.dart b/tests/lib/isolate/package_config_test.dart
new file mode 100644
index 0000000..cc345ee
--- /dev/null
+++ b/tests/lib/isolate/package_config_test.dart
@@ -0,0 +1,40 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+// VMOptions=--trace_shutdown
+import 'dart:io';
+import 'dart:isolate';
+
+final SPAWN_PACKAGE_CONFIG = "foobar:///no/such/file/";
+
+main([args, port]) async {
+  if (port != null) {
+    testPackageConfig(port);
+    return;
+  }
+  var p = new RawReceivePort();
+  Isolate.spawnUri(Platform.script, [], p.sendPort,
+      packageConfig: Uri.parse(SPAWN_PACKAGE_CONFIG));
+  p.handler = (msg) {
+    p.close();
+    if (msg[0] != SPAWN_PACKAGE_CONFIG) {
+      throw "Bad package config in child isolate: ${msg[0]}";
+    }
+    if (msg[1] != null) {
+      throw "Non-null loaded package config in isolate: ${msg[1]}";
+    }
+    print("SUCCESS");
+  };
+  print("Spawning isolate's package config: ${await Isolate.packageConfig}");
+}
+
+testPackageConfig(port) async {
+  var packageConfigStr = Platform.packageConfig;
+  var packageConfig = await Isolate.packageConfig;
+  print("Spawned isolate's package config flag: $packageConfigStr");
+  print("Spawned isolate's loaded package config: $packageConfig");
+  port.send([packageConfigStr, packageConfig.toString()]);
+}
diff --git a/tests/lib/isolate/package_resolve_test.dart b/tests/lib/isolate/package_resolve_test.dart
new file mode 100644
index 0000000..241732e
--- /dev/null
+++ b/tests/lib/isolate/package_resolve_test.dart
@@ -0,0 +1,52 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import 'dart:io';
+import 'dart:isolate';
+
+final SPAWN_PACKAGE_ROOT = "file:///no/such/package/root/";
+final PACKAGE_URI = "package:foo/bar.dart";
+final PACKAGE_PATH = "file:///no/such/package/root/foo/bar.dart";
+
+main([args, port]) async {
+  if (port != null) {
+    testPackageResolution(port);
+    return;
+  }
+  var p = new RawReceivePort();
+  Isolate.spawnUri(Platform.script, [], p.sendPort,
+      packageRoot: Uri.parse(SPAWN_PACKAGE_ROOT));
+  p.handler = (msg) {
+    p.close();
+    if (msg is! List) {
+      print(msg.runtimeType);
+      throw "Failure return from spawned isolate:\n\n$msg";
+    }
+    if (msg[0] != null) {
+      throw "Bad package root in child isolate: ${msg[0]}";
+    }
+    if (msg[1] != null) {
+      throw "Package path not matching: ${msg[1]}";
+    }
+    print("SUCCESS");
+  };
+  print("Spawning isolate's package root: ${await Isolate.packageRoot}");
+}
+
+testPackageResolution(port) async {
+  try {
+    var packageRootStr = Platform.packageRoot;
+    var packageRoot = await Isolate.packageRoot;
+    var resolvedPkg = await Isolate.resolvePackageUri(Uri.parse(PACKAGE_URI));
+    print("Spawned isolate's package root flag: $packageRootStr");
+    print("Spawned isolate's loaded package root: $packageRoot");
+    print("Spawned isolate's resolved package path: $resolvedPkg");
+    port.send([packageRoot.toString(), resolvedPkg.toString()]);
+  } catch (e, s) {
+    port.send("$e\n$s\n");
+  }
+}
diff --git a/tests/lib/isolate/package_root_test.dart b/tests/lib/isolate/package_root_test.dart
new file mode 100644
index 0000000..390df69
--- /dev/null
+++ b/tests/lib/isolate/package_root_test.dart
@@ -0,0 +1,35 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import 'dart:io';
+import 'dart:isolate';
+
+final SPAWN_PACKAGE_ROOT = "file:///no/such/file/";
+
+main([args, port]) async {
+  if (port != null) {
+    testPackageRoot(port);
+    return;
+  }
+  var p = new RawReceivePort();
+  Isolate.spawnUri(Platform.script, [], p.sendPort,
+      packageRoot: Uri.parse(SPAWN_PACKAGE_ROOT));
+  p.handler = (msg) {
+    p.close();
+    if (msg != null) {
+      throw "Bad package root in child isolate: $msg";
+    }
+    print("SUCCESS");
+  };
+  print("Spawning isolate's package root: ${await Isolate.packageRoot}");
+}
+
+testPackageRoot(port) async {
+  var packageRoot = await Isolate.packageRoot;
+  print("Spawned isolate's package root: $packageRoot");
+  port.send(packageRoot);
+}
diff --git a/tests/lib/isolate/pause_test.dart b/tests/lib/isolate/pause_test.dart
new file mode 100644
index 0000000..1e97f00a
--- /dev/null
+++ b/tests/lib/isolate/pause_test.dart
@@ -0,0 +1,47 @@
+// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import "dart:isolate";
+import "dart:async";
+import "package:async_helper/async_helper.dart";
+
+isomain1(replyPort) {
+  RawReceivePort port = new RawReceivePort();
+  port.handler = (v) {
+    replyPort.send(v);
+    port.close();
+  };
+  replyPort.send(port.sendPort);
+}
+
+main() {
+  asyncStart();
+  RawReceivePort reply = new RawReceivePort();
+  late Isolate isolate;
+  late Capability resume;
+  var completer = new Completer(); // Completed by first reply from isolate.
+  reply.handler = completer.complete;
+  Isolate.spawn(isomain1, reply.sendPort).then((Isolate iso) {
+    isolate = iso;
+    return completer.future;
+  }).then((echoPort) {
+    // Isolate has been created, and first response has been returned.
+    resume = isolate.pause();
+    echoPort.send(24);
+    reply.handler = (v) {
+      throw "RESPONSE WHILE PAUSED?!?";
+    };
+    return new Future.delayed(const Duration(milliseconds: 250));
+  }).then((_) {
+    reply.handler = (v) {
+      if (v != 24) throw "WRONG ANSWER!";
+      reply.close();
+      asyncEnd();
+    };
+    isolate.resume(resume);
+  });
+}
diff --git a/tests/lib/isolate/ping_pause_test.dart b/tests/lib/isolate/ping_pause_test.dart
new file mode 100644
index 0000000..48ad135
--- /dev/null
+++ b/tests/lib/isolate/ping_pause_test.dart
@@ -0,0 +1,52 @@
+// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import "dart:isolate";
+import "dart:async";
+import "package:expect/expect.dart";
+import "package:async_helper/async_helper.dart";
+
+isomain1(replyPort) {
+  RawReceivePort port = new RawReceivePort();
+  port.handler = (v) {
+    replyPort.send(v);
+    if (v == 0) port.close();
+  };
+  replyPort.send(port.sendPort);
+}
+
+void main() {
+  asyncStart();
+  var completer = new Completer(); // Completed by first reply from isolate.
+  RawReceivePort reply = new RawReceivePort(completer.complete);
+  Isolate.spawn(isomain1, reply.sendPort).then((Isolate isolate) {
+    List result = [];
+    completer.future.then((echoPort) {
+      reply.handler = (v) {
+        result.add(v);
+        if (v == 0) {
+          Expect.listEquals([4, 3, 2, 1, 0], result);
+          reply.close();
+          asyncEnd();
+        }
+      };
+      echoPort.send(4);
+      echoPort.send(3);
+      Capability resume = isolate.pause();
+      var pingPort = new RawReceivePort();
+      pingPort.handler = (_) {
+        Expect.isTrue(result.length <= 2);
+        echoPort.send(0);
+        isolate.resume(resume);
+        pingPort.close();
+      };
+      isolate.ping(pingPort.sendPort, priority: Isolate.beforeNextEvent);
+      echoPort.send(2);
+      echoPort.send(1);
+    });
+  });
+}
diff --git a/tests/lib/isolate/ping_test.dart b/tests/lib/isolate/ping_test.dart
new file mode 100644
index 0000000..4371a4c0
--- /dev/null
+++ b/tests/lib/isolate/ping_test.dart
@@ -0,0 +1,63 @@
+// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import "dart:isolate";
+import "dart:async";
+import "package:expect/expect.dart";
+import "package:async_helper/async_helper.dart";
+
+isomain1(replyPort) {
+  RawReceivePort port = new RawReceivePort();
+  port.handler = (v) {
+    replyPort.send(v);
+    if (v == 0) port.close();
+  };
+  replyPort.send(port.sendPort);
+}
+
+void main() {
+  asyncStart();
+  var completer = new Completer(); // Completed by first reply from isolate.
+  RawReceivePort reply = new RawReceivePort(completer.complete);
+  Isolate.spawn(isomain1, reply.sendPort).then((Isolate isolate) {
+    List result = [];
+    completer.future.then((echoPort) {
+      reply.handler = (v) {
+        result.add(v);
+        if (v == 0) {
+          Expect.listEquals(["alive", "control"],
+              result.where((x) => x is String).toList(), "control events");
+          Expect.listEquals([3, 2, 1, 0],
+              result.where((x) => x is int).toList(), "data events");
+          Expect.isTrue(
+              result.indexOf("alive") < result.indexOf(2), "alive index < 2");
+          Expect.isTrue(result.indexOf("control") < result.indexOf(1),
+              "control index < 1");
+          reply.close();
+          asyncEnd();
+        }
+      };
+      var pingPort = new RawReceivePort();
+      int pingCount = 0;
+      pingPort.handler = (response) {
+        result.add(response);
+        pingCount++;
+        if (pingCount == 2) pingPort.close();
+      };
+      ping(message, priority) {
+        isolate.ping(pingPort.sendPort, response: message, priority: priority);
+      }
+
+      echoPort.send(3);
+      ping("alive", Isolate.immediate);
+      echoPort.send(2);
+      ping("control", Isolate.beforeNextEvent);
+      echoPort.send(1);
+      echoPort.send(0);
+    });
+  });
+}
diff --git a/tests/lib/isolate/port_test.dart b/tests/lib/isolate/port_test.dart
new file mode 100644
index 0000000..937d75e
--- /dev/null
+++ b/tests/lib/isolate/port_test.dart
@@ -0,0 +1,63 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+// Test properties of ports.
+
+library PortTest;
+
+import "package:expect/expect.dart";
+import 'dart:isolate';
+
+main() {
+  testHashCode();
+  testEquals();
+  testMap();
+}
+
+void testHashCode() {
+  ReceivePort rp0 = new ReceivePort();
+  ReceivePort rp1 = new ReceivePort();
+  Expect.equals(rp0.sendPort.hashCode, rp0.sendPort.hashCode);
+  Expect.equals(rp1.sendPort.hashCode, rp1.sendPort.hashCode);
+  rp0.close();
+  rp1.close();
+}
+
+void testEquals() {
+  ReceivePort rp0 = new ReceivePort();
+  ReceivePort rp1 = new ReceivePort();
+  Expect.equals(rp0.sendPort, rp0.sendPort);
+  Expect.equals(rp1.sendPort, rp1.sendPort);
+  Expect.isFalse(rp0.sendPort == rp1.sendPort);
+  rp0.close();
+  rp1.close();
+}
+
+void testMap() {
+  ReceivePort rp0 = new ReceivePort();
+  ReceivePort rp1 = new ReceivePort();
+  final map = new Map<SendPort, int>();
+  map[rp0.sendPort] = 42;
+  map[rp1.sendPort] = 87;
+  Expect.equals(map[rp0.sendPort], 42);
+  Expect.equals(map[rp1.sendPort], 87);
+
+  map[rp0.sendPort] = 99;
+  Expect.equals(map[rp0.sendPort], 99);
+  Expect.equals(map[rp1.sendPort], 87);
+
+  map.remove(rp0.sendPort);
+  Expect.isFalse(map.containsKey(rp0.sendPort));
+  Expect.equals(map[rp1.sendPort], 87);
+
+  map.remove(rp1.sendPort);
+  Expect.isFalse(map.containsKey(rp0.sendPort));
+  Expect.isFalse(map.containsKey(rp1.sendPort));
+
+  rp0.close();
+  rp1.close();
+}
diff --git a/tests/lib/isolate/raw_port_test.dart b/tests/lib/isolate/raw_port_test.dart
new file mode 100644
index 0000000..6f24212
--- /dev/null
+++ b/tests/lib/isolate/raw_port_test.dart
@@ -0,0 +1,85 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+// Test RawReceivePort.
+
+library raw_port_test;
+
+import 'dart:async';
+import 'dart:isolate';
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
+
+void remote(SendPort port) {
+  port.send("reply");
+}
+
+void remote2(SendPort port) {
+  port.send("reply 1");
+  port.send("reply 2");
+}
+
+main([args, port]) async {
+  // Raw receive
+  asyncTest(() {
+    final completer = Completer<void>();
+    RawReceivePort port = new RawReceivePort();
+    Isolate.spawn(remote, port.sendPort);
+    port.handler = (v) {
+      Expect.equals(v, "reply");
+      port.close();
+      completer.complete();
+    };
+    return completer.future;
+  });
+
+  // Raw receive hashCode
+  {
+    RawReceivePort port = new RawReceivePort();
+    Expect.isTrue(port.hashCode is int);
+    port.close();
+  }
+
+  // Raw receive twice - change handler
+  asyncTest(() {
+    final completer = Completer<void>();
+    RawReceivePort port = new RawReceivePort();
+    Isolate.spawn(remote2, port.sendPort);
+    port.handler = (v) {
+      Expect.equals(v, "reply 1");
+      port.handler = (v) {
+        Expect.equals(v, "reply 2");
+        port.close();
+        completer.complete();
+      };
+    };
+    return completer.future;
+  });
+
+  // From raw port
+  asyncTest(() {
+    final completer = Completer<void>();
+    RawReceivePort rawPort = new RawReceivePort();
+    Isolate.spawn(remote, rawPort.sendPort);
+    rawPort.handler = (v) {
+      Expect.equals(v, "reply");
+      ReceivePort port = new ReceivePort.fromRawReceivePort(rawPort);
+      Isolate.spawn(remote, rawPort.sendPort);
+      Isolate.spawn(remote, port.sendPort);
+      int ctr = 2;
+      port.listen(
+        (v) {
+          Expect.equals(v, "reply");
+          ctr--;
+          if (ctr == 0) port.close();
+        },
+        onDone: () => completer.complete(),
+      );
+    };
+    return completer.future;
+  });
+}
diff --git a/tests/lib/isolate/regress_34752_test.dart b/tests/lib/isolate/regress_34752_test.dart
new file mode 100644
index 0000000..dafff29
--- /dev/null
+++ b/tests/lib/isolate/regress_34752_test.dart
@@ -0,0 +1,39 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+// Verifies that large BigInt can be passed through a message port and
+// simple arithmetic operations still work after that.
+// This is a regression test for https://github.com/dart-lang/sdk/issues/34752.
+
+import 'dart:io';
+import 'dart:isolate';
+
+import "package:expect/expect.dart";
+
+const int kValue = 12345678;
+const int kShift = 8192 * 8;
+
+void verify(BigInt x) {
+  BigInt y = x >> kShift;
+  Expect.equals("$kValue", "$y");
+}
+
+void main() {
+  BigInt big = BigInt.from(kValue) << kShift;
+  verify(big);
+
+  final rp = new ReceivePort();
+  rp.listen((dynamic data) {
+    BigInt received = data as BigInt;
+    verify(received);
+    BigInt x = received + BigInt.one - BigInt.one;
+    verify(x);
+    print("ok");
+    exit(0);
+  });
+  rp.sendPort.send(big);
+}
diff --git a/tests/lib/isolate/regress_flutter_22796_test.dart b/tests/lib/isolate/regress_flutter_22796_test.dart
new file mode 100644
index 0000000..1cab5f1
--- /dev/null
+++ b/tests/lib/isolate/regress_flutter_22796_test.dart
@@ -0,0 +1,46 @@
+// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+// Verifies that large typed data can be passed in a field through message port.
+// This is a regression test for
+// https://github.com/flutter/flutter/issues/22796.
+
+import 'dart:io';
+import 'dart:isolate';
+import 'dart:typed_data';
+
+import "package:expect/expect.dart";
+
+class A {
+  // TFA thinks this field has type _Int32List but sending an object across
+  // a message port creates an instance that has _ExternalInt32List inside.
+  final _int32Array = new Int32List(5 * 1024);
+  A() {
+    _int32Array.setRange(
+        0, _int32Array.length, Iterable.generate(_int32Array.length));
+    verify();
+  }
+
+  void verify() {
+    for (var i = 0; i < _int32Array.length; i++) {
+      if (_int32Array[i] != i) {
+        print('_int32Array[$i]: ${_int32Array[i]} != ${i}');
+      }
+      Expect.equals(i, _int32Array[i]);
+    }
+  }
+}
+
+void main() {
+  final rp = new ReceivePort();
+  rp.listen((dynamic data) {
+    (data as A).verify();
+    print("ok");
+    exit(0);
+  });
+  rp.sendPort.send(A());
+}
diff --git a/tests/lib/isolate/request_reply_test.dart b/tests/lib/isolate/request_reply_test.dart
new file mode 100644
index 0000000..54d4d7c
--- /dev/null
+++ b/tests/lib/isolate/request_reply_test.dart
@@ -0,0 +1,38 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+library RequestReplyTest;
+
+import 'dart:isolate';
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
+
+void entry(initPort) {
+  ReceivePort port = new ReceivePort();
+  initPort.send(port.sendPort);
+  port.listen((pair) {
+    var message = pair[0];
+    SendPort replyTo = pair[1];
+    replyTo.send(message + 87);
+    port.close();
+  });
+}
+
+void main([args, port]) {
+  ReceivePort init = new ReceivePort();
+  Isolate.spawn(entry, init.sendPort);
+  asyncStart();
+  init.first.then((port) {
+    ReceivePort reply = new ReceivePort();
+    port.send([99, reply.sendPort]);
+    reply.listen((message) {
+      Expect.equals(message, 99 + 87);
+      reply.close();
+      asyncEnd();
+    });
+  });
+}
diff --git a/tests/lib/isolate/resolve_package_uri_test.dart b/tests/lib/isolate/resolve_package_uri_test.dart
new file mode 100644
index 0000000..9ea1d03
--- /dev/null
+++ b/tests/lib/isolate/resolve_package_uri_test.dart
@@ -0,0 +1,17 @@
+// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+// Regression test for faulty encoding of `Isolate.resolvePackageUri` by
+// dart2js.
+
+import 'dart:async';
+import 'dart:isolate';
+
+main() {
+  var uri = Isolate.resolvePackageUri(Uri.parse('memory:main.dart'));
+  print(uri);
+}
diff --git a/tests/lib/isolate/send_private_test.dart b/tests/lib/isolate/send_private_test.dart
new file mode 100644
index 0000000..8ed717f
--- /dev/null
+++ b/tests/lib/isolate/send_private_test.dart
@@ -0,0 +1,35 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import "dart:isolate";
+import "package:expect/expect.dart";
+
+class _Private {
+  String data;
+  _Private(this.data);
+}
+
+void child(message) {
+  print("Got message: $message");
+  SendPort replyPort = message[0];
+  _Private object = message[1];
+  Expect.isTrue(object is _Private);
+  Expect.equals("XYZ", object.data);
+  replyPort.send(object);
+}
+
+void main() {
+  var port;
+  port = new RawReceivePort((message) {
+    print("Got reply: $message");
+    Expect.isTrue(message is _Private);
+    Expect.equals("XYZ", message.data);
+    port.close();
+  });
+
+  Isolate.spawn(child, [port.sendPort, new _Private("XYZ")]);
+}
diff --git a/tests/lib/isolate/simple_message_test.dart b/tests/lib/isolate/simple_message_test.dart
new file mode 100644
index 0000000..f0310af
--- /dev/null
+++ b/tests/lib/isolate/simple_message_test.dart
@@ -0,0 +1,30 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+// Dart test program for testing that isolates are spawned.
+
+library IsolateNegativeTest;
+
+import "package:expect/expect.dart";
+import 'dart:isolate';
+import "package:async_helper/async_helper.dart";
+
+void entry(SendPort replyTo) {
+  var message = "foo";
+  message = "bar"; // //# 01: runtime error
+  replyTo.send(message);
+}
+
+main() {
+  asyncStart();
+  ReceivePort response = new ReceivePort();
+  Isolate.spawn(entry, response.sendPort);
+  response.first.then((message) {
+    Expect.equals("foo", message);
+    asyncEnd();
+  });
+}
diff --git a/tests/lib/isolate/spawn_function_custom_class_test.dart b/tests/lib/isolate/spawn_function_custom_class_test.dart
new file mode 100644
index 0000000..0046cef
--- /dev/null
+++ b/tests/lib/isolate/spawn_function_custom_class_test.dart
@@ -0,0 +1,48 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+// Create a user-defined class in a new isolate.
+//
+// Regression test for vm bug 2235: We were forgetting to finalize
+// classes in new isolates started using the v2 api.
+
+library spawn_tests;
+
+import 'dart:isolate';
+import 'package:expect/expect.dart';
+
+class MyClass {
+  final myVar = 'there';
+  myFunc(msg) {
+    return '$msg $myVar';
+  }
+}
+
+isolateEntryPoint(args) {
+  final reply = args[1];
+  final msg = args[0];
+  reply.send('re: ${new MyClass().myFunc(msg)}');
+}
+
+Future<void> main([args, port]) async {
+  // message - reply chain'
+  final exitPort = ReceivePort();
+  final replyPort = ReceivePort();
+
+  Isolate.spawn(isolateEntryPoint, ['hi', replyPort.sendPort],
+      onExit: exitPort.sendPort);
+
+  replyPort.listen((msg) {
+    replyPort.close();
+    Expect.equals(msg, 're: hi there');
+  });
+
+  // Explicitly await spawned isolate exit to enforce main isolate not
+  // completing (and the stand-alone runtime exiting) before the spawned
+  // isolate is done.
+  await exitPort.first;
+}
diff --git a/tests/lib/isolate/spawn_function_test.dart b/tests/lib/isolate/spawn_function_test.dart
new file mode 100644
index 0000000..bd8d1c1
--- /dev/null
+++ b/tests/lib/isolate/spawn_function_test.dart
@@ -0,0 +1,41 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+// Example of spawning an isolate from a function.
+library spawn_tests;
+
+import 'dart:isolate';
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
+
+isolateEntryPoint(args) {
+  var msg = args[0];
+  var sendPort = args[1];
+  sendPort.send('re: $msg');
+}
+
+Future<void> main([args, port]) async {
+  // message - reply chain
+  const String debugName = 'spawnedIsolate';
+
+  ReceivePort port = new ReceivePort();
+  asyncStart();
+  port.listen((msg) {
+    port.close();
+    Expect.equals(msg, 're: hi');
+    asyncEnd();
+  });
+
+  // Start new isolate; paused so it's alive till we read the debugName.
+  // If the isolate runs to completion, the isolate might get cleaned up
+  // and debugName might be null.
+  final isolate = await Isolate.spawn(isolateEntryPoint, ['hi', port.sendPort],
+      paused: true, debugName: debugName);
+
+  Expect.equals(isolate.debugName, debugName);
+  isolate.resume(isolate.pauseCapability!);
+}
diff --git a/tests/lib/isolate/spawn_generic_test.dart b/tests/lib/isolate/spawn_generic_test.dart
new file mode 100644
index 0000000..109f2a8
--- /dev/null
+++ b/tests/lib/isolate/spawn_generic_test.dart
@@ -0,0 +1,68 @@
+// Copyright (c) 2015, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+// Check that Isolate.spawn is generic.
+library spawn_generic;
+
+import "dart:isolate";
+import "dart:async";
+import "package:async_helper/async_helper.dart";
+import "package:expect/expect.dart";
+
+void isomain(num args) {
+  print(args);
+  // All is well. No throwing.
+}
+
+void isomain1(num? args) {
+  print(args);
+  // All is well. No throwing.
+}
+
+int _count = 0;
+void enter() {
+  asyncStart();
+  _count++;
+}
+
+bool exit() {
+  asyncEnd();
+  return --_count == 0;
+}
+
+main() {
+  var remotePort = new RawReceivePort();
+  remotePort.handler = (m) {
+    if (m == null) {
+      if (exit()) remotePort.close();
+    } else {
+      List list = m;
+      throw new AsyncError(m[0], new StackTrace.fromString(m[1]));
+    }
+  };
+  var port = remotePort.sendPort;
+
+  // Explicit type works.
+  enter();
+  Isolate.spawn<int>(isomain, 42, onExit: port, onError: port);
+  enter();
+  Isolate.spawn<num>(isomain, 42, onExit: port, onError: port);
+  enter();
+  Isolate.spawn<num>(isomain, 1.2, onExit: port, onError: port);
+  enter();
+  Isolate.spawn<double>(isomain, 1.2, onExit: port, onError: port);
+  enter();
+  Isolate.spawn<int?>(isomain1, null, onExit: port, onError: port);
+
+  // Inference gets it right.
+  enter();
+  Isolate.spawn(isomain, 42, onExit: port, onError: port);
+  enter();
+  Isolate.spawn(isomain, 1.2, onExit: port, onError: port);
+  enter();
+  Isolate.spawn(isomain1, null, onExit: port, onError: port);
+}
diff --git a/tests/lib/isolate/spawn_uri_child_isolate.dart b/tests/lib/isolate/spawn_uri_child_isolate.dart
new file mode 100644
index 0000000..81f40f9
--- /dev/null
+++ b/tests/lib/isolate/spawn_uri_child_isolate.dart
@@ -0,0 +1,11 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Child isolate code to be spawned from a URI to this file.
+library SpawnUriChildIsolate;
+
+void main(List<String> args, replyTo) {
+  var data = args[0];
+  replyTo.send('re: $data');
+}
diff --git a/tests/lib/isolate/spawn_uri_exported_main.dart b/tests/lib/isolate/spawn_uri_exported_main.dart
new file mode 100644
index 0000000..afd0122
--- /dev/null
+++ b/tests/lib/isolate/spawn_uri_exported_main.dart
@@ -0,0 +1,5 @@
+export "spawn_uri_exported_main_lib.dart";
+
+maine() {
+  print("This is not the maine you are looking for.");
+}
diff --git a/tests/lib/isolate/spawn_uri_exported_main_lib.dart b/tests/lib/isolate/spawn_uri_exported_main_lib.dart
new file mode 100644
index 0000000..7500465
--- /dev/null
+++ b/tests/lib/isolate/spawn_uri_exported_main_lib.dart
@@ -0,0 +1,6 @@
+library spawn_uri_exported_main_lib;
+
+main(args, msg) {
+  print("From main!");
+  msg.send(50);
+}
diff --git a/tests/lib/isolate/spawn_uri_exported_main_test.dart b/tests/lib/isolate/spawn_uri_exported_main_test.dart
new file mode 100644
index 0000000..837486e
--- /dev/null
+++ b/tests/lib/isolate/spawn_uri_exported_main_test.dart
@@ -0,0 +1,30 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import "dart:async";
+import "dart:isolate";
+import "package:expect/expect.dart";
+
+main() {
+  print("Spawning isolate.");
+  var t = new Timer(new Duration(seconds: 30), () {
+    // it might take some time for new isolate to get spawned from source since
+    // it needs to be compiled first.
+    Expect.fail("Isolate was not spawned successfully.");
+  });
+  var rp = new RawReceivePort();
+  rp.handler = (msg) {
+    print("Spawned main called.");
+    Expect.equals(msg, 50);
+    rp.close();
+  };
+  Isolate.spawnUri(Uri.parse("spawn_uri_exported_main.dart"), [], rp.sendPort)
+      .then((_) {
+    print("Loaded");
+    t.cancel();
+  });
+}
diff --git a/tests/lib/isolate/spawn_uri_fail_test.dart b/tests/lib/isolate/spawn_uri_fail_test.dart
new file mode 100644
index 0000000..6c9dc98
--- /dev/null
+++ b/tests/lib/isolate/spawn_uri_fail_test.dart
@@ -0,0 +1,45 @@
+// Copyright (c) 2016, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import "dart:io";
+import "dart:isolate";
+import "package:expect/expect.dart";
+
+main() async {
+  var pkgRoot = Uri.parse("file:///no/such/directory/");
+  var pkgConfig = Uri.parse("file:///no/such/.packages");
+  try {
+    var i = await Isolate.spawnUri(Platform.script, [], null,
+        packageRoot: pkgRoot, packageConfig: pkgConfig);
+  } catch (e) {
+    print(e);
+    Expect.isTrue(e is ArgumentError);
+  }
+  try {
+    var i = await Isolate.spawnUri(Platform.script, [], null,
+        packageRoot: pkgRoot, automaticPackageResolution: true);
+  } catch (e) {
+    print(e);
+    Expect.isTrue(e is ArgumentError);
+  }
+  try {
+    var i = await Isolate.spawnUri(Platform.script, [], null,
+        packageConfig: pkgConfig, automaticPackageResolution: true);
+  } catch (e) {
+    print(e);
+    Expect.isTrue(e is ArgumentError);
+  }
+  try {
+    var i = await Isolate.spawnUri(Platform.script, [], null,
+        packageRoot: pkgRoot,
+        packageConfig: pkgConfig,
+        automaticPackageResolution: true);
+  } catch (e) {
+    print(e);
+    Expect.isTrue(e is ArgumentError);
+  }
+}
diff --git a/tests/lib/isolate/spawn_uri_missing_from_isolate_test.dart b/tests/lib/isolate/spawn_uri_missing_from_isolate_test.dart
new file mode 100644
index 0000000..02521b6
--- /dev/null
+++ b/tests/lib/isolate/spawn_uri_missing_from_isolate_test.dart
@@ -0,0 +1,44 @@
+// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+/// Tests that Isolate.spawnUri completes with an error when the given URI
+/// doesn't resolve to an existing resource.
+///
+/// This test is similar to spawn_uri_missing_test.dart, but tests what happens
+/// when Isolate.spawnUri is called from an a spawned isolate.  In dart2js,
+/// these two situations are different.
+library test.isolate.spawn_uri_missing_from_isolate_test;
+
+import 'dart:isolate';
+
+import 'dart:async';
+
+import 'package:async_helper/async_helper.dart';
+
+import 'spawn_uri_missing_test.dart';
+
+const String SUCCESS = 'Test worked.';
+
+void isolate(SendPort port) {
+  doTest().then((_) => port.send(SUCCESS),
+      onError: (error, stack) => port.send('Test failed: $error\n$stack'));
+}
+
+main() {
+  ReceivePort port = new ReceivePort();
+  Isolate.spawn(isolate, port.sendPort);
+  Completer completer = new Completer();
+  port.first.then((message) {
+    if (message == SUCCESS) {
+      completer.complete(null);
+    } else {
+      completer.completeError(message);
+    }
+  });
+
+  asyncTest(() => completer.future);
+}
diff --git a/tests/lib/isolate/spawn_uri_missing_test.dart b/tests/lib/isolate/spawn_uri_missing_test.dart
new file mode 100644
index 0000000..e13ec06
--- /dev/null
+++ b/tests/lib/isolate/spawn_uri_missing_test.dart
@@ -0,0 +1,33 @@
+// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+/// Tests that Isolate.spanUri completes with an error when the given URI
+/// doesn't resolve to an existing resource.
+library test.isolate.spawn_uri_missing_test;
+
+import 'dart:isolate';
+
+import 'dart:async';
+
+import 'package:async_helper/async_helper.dart';
+
+const UNEXPECTED_MESSAGE = 'Created isolate from missing file.';
+
+Future doTest() {
+  return Isolate.spawnUri(Uri.base.resolve('no_such_file'), [], null)
+      .then((Isolate isolate) {
+    throw UNEXPECTED_MESSAGE;
+  }).catchError((error) {
+    if (error == UNEXPECTED_MESSAGE) throw error;
+    print('An error was thrown as expected');
+    return null;
+  });
+}
+
+main() {
+  asyncTest(doTest);
+}
diff --git a/tests/lib/isolate/spawn_uri_multi_test.dart b/tests/lib/isolate/spawn_uri_multi_test.dart
new file mode 100644
index 0000000..d5fdc46
--- /dev/null
+++ b/tests/lib/isolate/spawn_uri_multi_test.dart
@@ -0,0 +1,31 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+// Negative test to make sure that we are reaching all assertions.
+library spawn_tests;
+
+import 'dart:isolate';
+import 'package:async_helper/async_minitest.dart';
+
+/* Dummy import so multi-test copies the file.
+import 'spawn_uri_child_isolate.dart';
+*/
+
+main() {
+  test('isolate fromUri - negative test', () {
+    ReceivePort port = new ReceivePort();
+    port.first.then(expectAsync((msg) {
+      String expectedMessage = 're: hi';
+      // Should be hi, not hello.
+      expectedMessage = 're: hello'; //# 01: runtime error
+      expect(msg, equals(expectedMessage));
+    }));
+
+    Isolate.spawnUri(
+        Uri.parse('spawn_uri_child_isolate.dart'), ['hi'], port.sendPort);
+  });
+}
diff --git a/tests/lib/isolate/spawn_uri_nested_child1_vm_isolate.dart b/tests/lib/isolate/spawn_uri_nested_child1_vm_isolate.dart
new file mode 100644
index 0000000..6008357
--- /dev/null
+++ b/tests/lib/isolate/spawn_uri_nested_child1_vm_isolate.dart
@@ -0,0 +1,25 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Example of nested spawning of isolates from a URI
+// Note: the following comment is used by test.dart to additionally compile the
+// other isolate's code.
+library NestedSpawnUriChild1Library;
+
+import 'dart:isolate';
+
+main(List<String> args, message) {
+  ReceivePort port2 = new ReceivePort();
+  port2.listen((msg) {
+    if (msg != "re: hi") throw "Bad response: $msg";
+    port2.close();
+  });
+
+  Isolate.spawnUri(Uri.parse('spawn_uri_nested_child2_vm_isolate.dart'), ['hi'],
+      port2.sendPort);
+
+  var data = message[0];
+  var replyTo = message[1];
+  replyTo.send(data);
+}
diff --git a/tests/lib/isolate/spawn_uri_nested_child2_vm_isolate.dart b/tests/lib/isolate/spawn_uri_nested_child2_vm_isolate.dart
new file mode 100644
index 0000000..a6c90b8f
--- /dev/null
+++ b/tests/lib/isolate/spawn_uri_nested_child2_vm_isolate.dart
@@ -0,0 +1,13 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// Child isolate code to be spawned from a URI to this file.
+library NestedSpawnUriChild2Library;
+
+import 'dart:isolate';
+
+void main(List<String> args, SendPort replyTo) {
+  var data = args[0];
+  replyTo.send('re: $data');
+}
diff --git a/tests/lib/isolate/spawn_uri_nested_vm_test.dart b/tests/lib/isolate/spawn_uri_nested_vm_test.dart
new file mode 100644
index 0000000..087b5fc
--- /dev/null
+++ b/tests/lib/isolate/spawn_uri_nested_vm_test.dart
@@ -0,0 +1,23 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+// Example of nested spawning of isolates from a URI
+library NestedSpawnUriLibrary;
+
+import 'dart:isolate';
+import 'package:async_helper/async_minitest.dart';
+
+main() {
+  test('isolate fromUri - nested send and reply', () {
+    ReceivePort port = new ReceivePort();
+    Isolate.spawnUri(Uri.parse('spawn_uri_nested_child1_vm_isolate.dart'), [], [
+      [1, 2],
+      port.sendPort
+    ]);
+    port.first.then(expectAsync((result) => print(result)));
+  });
+}
diff --git a/tests/lib/isolate/spawn_uri_test.dart b/tests/lib/isolate/spawn_uri_test.dart
new file mode 100644
index 0000000..28d7bce
--- /dev/null
+++ b/tests/lib/isolate/spawn_uri_test.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+// Example of spawning an isolate from a URI
+library spawn_tests;
+
+import 'dart:isolate';
+import 'package:async_helper/async_minitest.dart';
+
+main() {
+  test('isolate fromUri - send and reply', () async {
+    const String debugName = 'spawnedIsolate';
+
+    final exitPort = ReceivePort();
+
+    final port = new ReceivePort();
+    port.listen(expectAsync((msg) {
+      expect(msg, equals('re: hi'));
+      port.close();
+    }));
+
+    // Start new isolate; paused so it's alive till we read the debugName.
+    // If the isolate runs to completion, the isolate might get cleaned up
+    // and debugName might be null.
+    final isolate = await Isolate.spawnUri(
+        Uri.parse('spawn_uri_child_isolate.dart'), ['hi'], port.sendPort,
+        paused: true, debugName: debugName, onExit: exitPort.sendPort);
+
+    expect(isolate.debugName, debugName);
+
+    isolate.resume(isolate.pauseCapability!);
+
+    // Explicitly await spawned isolate exit to enforce main isolate not
+    // completing (and the stand-alone runtime exiting) before the spawned
+    // isolate is done.
+    await exitPort.first;
+  });
+}
diff --git a/tests/lib/isolate/spawn_uri_vm_test.dart b/tests/lib/isolate/spawn_uri_vm_test.dart
new file mode 100644
index 0000000..3832b42
--- /dev/null
+++ b/tests/lib/isolate/spawn_uri_vm_test.dart
@@ -0,0 +1,24 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+// Example of spawning an isolate from a URI
+library spawn_tests;
+
+import 'dart:isolate';
+import 'package:async_helper/async_minitest.dart';
+
+main() {
+  test('isolate fromUri - send and reply', () {
+    ReceivePort port = new ReceivePort();
+    port.first.then(expectAsync((msg) {
+      expect(msg, equals('re: hi'));
+    }));
+
+    Isolate.spawnUri(
+        Uri.parse('spawn_uri_child_isolate.dart'), ['hi'], port.sendPort);
+  });
+}
diff --git a/tests/lib/isolate/stacktrace_message_test.dart b/tests/lib/isolate/stacktrace_message_test.dart
new file mode 100644
index 0000000..41a0820
--- /dev/null
+++ b/tests/lib/isolate/stacktrace_message_test.dart
@@ -0,0 +1,42 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:isolate';
+import "package:expect/expect.dart";
+import "package:async_helper/async_helper.dart";
+
+// Test that StackTrace objects can be sent between isolates spawned from
+// the same isolate using Isolate.spawn.
+
+void main() {
+  asyncStart();
+  ReceivePort reply = new ReceivePort();
+  Isolate.spawn(runTest, reply.sendPort);
+  reply.first.then((pair) {
+    StackTrace stack = pair[0];
+    String stackString = pair[1];
+    if (stack == null) {
+      print("Failed to send stack-trace");
+      print(stackString);
+      Expect.fail("Sending stack-trace");
+    }
+    Expect.equals(stackString, "!$stack");
+    print(stack);
+    asyncEnd();
+  });
+}
+
+runTest(SendPort sendport) {
+  try {
+    throw 'sorry';
+  } catch (e, stack) {
+    try {
+      sendport.send([stack, "$stack"]);
+      print("Stacktrace sent");
+    } catch (e, s) {
+      print("Stacktrace not sent");
+      sendport.send([null, "$e\n$s"]);
+    }
+  }
+}
diff --git a/tests/lib/isolate/start_paused_test.dart b/tests/lib/isolate/start_paused_test.dart
new file mode 100644
index 0000000..c9b2b57
--- /dev/null
+++ b/tests/lib/isolate/start_paused_test.dart
@@ -0,0 +1,82 @@
+// Copyright (c) 2014, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+library start_paused_test;
+
+import "dart:isolate";
+import "package:expect/expect.dart";
+import "package:async_helper/async_helper.dart";
+
+void isomain(SendPort p) {
+  p.send("DONE");
+}
+
+void notyet(_) {
+  throw "NOT YET";
+}
+
+void main() {
+  asyncStart();
+  test1();
+  test2();
+  asyncEnd();
+}
+
+void test1() {
+  // Test that a paused isolate doesn't send events.
+  // We start two isolates, one paused and one not.
+  // The unpaused one must send an event, after which
+  // we resume that paused isolate, and expect the second event.
+  // This is not a guaranteed test, since it can succeede even if the
+  // paused isolate isn't really paused.
+  // However, it must never fail, since that would mean that a paused
+  // isolate sends a message.
+  asyncStart();
+  RawReceivePort p1 = new RawReceivePort(notyet);
+  Isolate.spawn(isomain, p1.sendPort, paused: true).then((isolate) {
+    late RawReceivePort p2;
+    p2 = new RawReceivePort((x) {
+      Expect.equals("DONE", x);
+      p2.close();
+      p1.handler = (x) {
+        Expect.equals("DONE", x);
+        p1.close();
+        asyncEnd();
+      };
+      isolate.resume(isolate.pauseCapability!);
+    });
+    Isolate.spawn(isomain, p2.sendPort);
+  });
+}
+
+void test2() {
+  // Test that a paused isolate doesn't send events.
+  // Like the test above, except that we change the pause capability
+  // of the paused isolate by pausing it using another capability and
+  // then resuming the initial pause. This must not cause it to send
+  // a message before the second pause is resumed as well.
+  asyncStart();
+  RawReceivePort p1 = new RawReceivePort(notyet);
+  Isolate.spawn(isomain, p1.sendPort, paused: true).then((isolate) {
+    late RawReceivePort p2;
+    Capability c2 = new Capability();
+    // Switch to another pause capability.
+    isolate.pause(c2);
+    isolate.resume(isolate.pauseCapability!);
+    p2 = new RawReceivePort((x) {
+      Expect.equals("DONE", x);
+      p2.close();
+      p1.handler = (x) {
+        Expect.equals("DONE", x);
+        p1.close();
+        asyncEnd();
+      };
+      isolate.resume(c2);
+    });
+    Isolate.spawn(isomain, p2.sendPort);
+  });
+}
diff --git a/tests/lib/isolate/static_function_lib.dart b/tests/lib/isolate/static_function_lib.dart
new file mode 100644
index 0000000..886284f
--- /dev/null
+++ b/tests/lib/isolate/static_function_lib.dart
@@ -0,0 +1,44 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+library static_function_testlib;
+
+import "dart:isolate" show SendPort;
+
+// Used by static_function_test.dart.
+
+void function(port) {
+  port.send("LIBTOP");
+}
+
+void _function(port) {
+  port.send("_LIBTOP");
+}
+
+Function get privateFunction => _function;
+
+class C {
+  static void function(SendPort port) {
+    port.send("LIB");
+  }
+
+  static void _function(SendPort port) {
+    port.send("LIBPRIVATE");
+  }
+
+  static Function get privateFunction => _function;
+}
+
+Function get privateClassFunction => _C.function;
+Function get privateClassAndFunction => _C._function;
+
+class _C {
+  static void function(SendPort port) {
+    port.send("_LIB");
+  }
+
+  static void _function(SendPort port) {
+    port.send("_LIBPRIVATE");
+  }
+}
diff --git a/tests/lib/isolate/static_function_test.dart b/tests/lib/isolate/static_function_test.dart
new file mode 100644
index 0000000..e1ece06
--- /dev/null
+++ b/tests/lib/isolate/static_function_test.dart
@@ -0,0 +1,149 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+// Test starting isolate with static functions (and toplevel ones, for sanity).
+
+library static_function_test;
+
+import 'dart:isolate';
+import 'static_function_lib.dart' as lib;
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
+
+void function(SendPort port) {
+  port.send("TOP");
+}
+
+void _function(SendPort port) {
+  port.send("_TOP");
+}
+
+// A closure created at top-level (not inside a method), but not by a top-level
+// function declaration.
+var staticClosure = (SendPort port) {
+  port.send("WHAT?");
+};
+
+// An unnamed closure created inside a function.
+get dynamicClosure => (SendPort port) {
+      port.send("WHAT??");
+    };
+
+// A named closure created inside a function.
+get namedDynamicClosure {
+  void foo(SendPort port) {
+    port.send("WHAT FOO??");
+  }
+
+  ;
+  return foo;
+}
+
+class C {
+  // Unnamed closure created during object initialization, but not inside
+  // a method or constructor.
+  final Function instanceClosure = (SendPort port) {
+    port.send("C WHAT?");
+  };
+  // Unnamed closure created during object initializer list evaluation.
+  final Function constructorInitializerClosure;
+  // Unnamed closure created inside constructor body.
+  late Function constructorBodyClosure;
+  // Named closure created inside constructor body.
+  late Function namedConstructorBodyClosure;
+
+  C()
+      : constructorInitializerClosure = ((SendPort port) {
+          port.send("Init?");
+        }) {
+    constructorBodyClosure = (SendPort port) {
+      port.send("bodyClosure?");
+    };
+    void foo(SendPort port) {
+      port.send("namedBodyClosure?");
+    }
+
+    namedConstructorBodyClosure = foo;
+  }
+
+  static void function(SendPort port) {
+    port.send("YES");
+  }
+
+  static void _function(SendPort port) {
+    port.send("PRIVATE");
+  }
+
+  void instanceMethod(SendPort port) {
+    port.send("INSTANCE WHAT?");
+  }
+}
+
+class _C {
+  static void function(SendPort port) {
+    port.send("_YES");
+  }
+
+  static void _function(SendPort port) {
+    port.send("_PRIVATE");
+  }
+}
+
+void spawnTest(name, function, response) {
+  print(name);
+  ReceivePort r = new ReceivePort();
+  Isolate.spawn(function, r.sendPort);
+  asyncStart();
+  r.listen((v) {
+    Expect.equals(v, response);
+    r.close();
+    asyncEnd();
+  });
+}
+
+void functionFailTest(name, function) {
+  print("throws on $name");
+  asyncStart();
+  Isolate.spawn(function, null).catchError((e) {
+    /* do nothing */
+    asyncEnd();
+  });
+}
+
+void main([args, port]) {
+  asyncStart();
+  // Sanity check.
+  spawnTest("function", function, "TOP");
+  spawnTest("_function", _function, "_TOP");
+  spawnTest("lib.function", lib.function, "LIBTOP");
+  spawnTest("lib._function", lib.privateFunction, "_LIBTOP");
+
+  // Local static functions.
+  spawnTest("class.function", C.function, "YES");
+  spawnTest("class._function", C._function, "PRIVATE");
+  spawnTest("_class._function", _C.function, "_YES");
+  spawnTest("_class._function", _C._function, "_PRIVATE");
+
+  // Imported static functions.
+  spawnTest("lib.class.function", lib.C.function, "LIB");
+  spawnTest("lib.class._function", lib.C.privateFunction, "LIBPRIVATE");
+  spawnTest("lib._class._function", lib.privateClassFunction, "_LIB");
+  spawnTest("lib._class._function", lib.privateClassAndFunction, "_LIBPRIVATE");
+
+  // Negative tests
+  functionFailTest("static closure", staticClosure);
+  functionFailTest("dynamic closure", dynamicClosure);
+  functionFailTest("named dynamic closure", namedDynamicClosure);
+  functionFailTest("instance closure", new C().instanceClosure);
+  functionFailTest(
+      "initializer closure", new C().constructorInitializerClosure);
+  functionFailTest("constructor closure", new C().constructorBodyClosure);
+  functionFailTest(
+      "named constructor closure", new C().namedConstructorBodyClosure);
+  functionFailTest("instance method", new C().instanceMethod);
+  asyncEnd();
+}
diff --git a/tests/lib/isolate/string_from_environment_default_value_test.dart b/tests/lib/isolate/string_from_environment_default_value_test.dart
new file mode 100644
index 0000000..78b2feb
--- /dev/null
+++ b/tests/lib/isolate/string_from_environment_default_value_test.dart
@@ -0,0 +1,24 @@
+// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import "dart:isolate";
+
+import "package:expect/expect.dart";
+
+void test(port) {
+  Expect.equals('', const String.fromEnvironment('NOT_FOUND'));
+  Expect.equals(
+      'x', const String.fromEnvironment('NOT_FOUND', defaultValue: 'x'));
+  if (port != null) port.send(null);
+}
+
+main() {
+  test(null);
+  var port = new ReceivePort();
+  Isolate.spawn(test, port.sendPort);
+  port.listen((_) => port.close());
+}
diff --git a/tests/lib/isolate/timer_isolate_test.dart b/tests/lib/isolate/timer_isolate_test.dart
new file mode 100644
index 0000000..58e93c5
--- /dev/null
+++ b/tests/lib/isolate/timer_isolate_test.dart
@@ -0,0 +1,41 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+library multiple_timer_test;
+
+import 'dart:isolate';
+import 'dart:async';
+import 'package:async_helper/async_minitest.dart';
+
+const Duration TIMEOUT = const Duration(milliseconds: 100);
+
+// Some browsers (Firefox and IE so far) can trigger too early. Add a safety
+// margin. We use identical(1, 1.0) as an easy way to know if the test is
+// compiled by dart2js.
+int get safetyMargin => identical(1, 1.0) ? 100 : 0;
+
+createTimer(replyTo) {
+  new Timer(TIMEOUT, () {
+    replyTo.send("timer_fired");
+  });
+}
+
+main() {
+  test("timer in isolate", () {
+    Stopwatch stopwatch = new Stopwatch();
+    ReceivePort port = new ReceivePort();
+
+    port.first.then(expectAsync((msg) {
+      expect("timer_fired", msg);
+      expect(stopwatch.elapsedMilliseconds + safetyMargin,
+          greaterThanOrEqualTo(TIMEOUT.inMilliseconds));
+    }));
+
+    stopwatch.start();
+    var remote = Isolate.spawn(createTimer, port.sendPort);
+  });
+}
diff --git a/tests/lib/isolate/timer_multiple_isolates_test.dart b/tests/lib/isolate/timer_multiple_isolates_test.dart
new file mode 100644
index 0000000..3f7d8f3
--- /dev/null
+++ b/tests/lib/isolate/timer_multiple_isolates_test.dart
@@ -0,0 +1,45 @@
+// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+library timer_multiple_isolates_test;
+
+import 'dart:isolate';
+import 'dart:async';
+
+child(msg) {
+  var i = msg[0] as int;
+  var reponsePort = msg[1];
+  print("Starting child $i");
+
+  // Keep this isolate running to prevent its shutdown from touching the event
+  // handler.
+  new RawReceivePort();
+
+  // Try to get separate wakeups for each isolate.
+  new Timer(new Duration(milliseconds: 100 * (i + 1)), () {
+    print("Timer fired $i");
+    reponsePort.send(null);
+  });
+}
+
+main() {
+  var port;
+  var replies = 0;
+  var n = 3;
+  port = new RawReceivePort((reply) {
+    replies++;
+    print("Got reply $replies");
+    if (replies == n) {
+      print("Done");
+      port.close();
+    }
+  });
+
+  for (var i = 0; i < n; i++) {
+    Isolate.spawn(child, [i, port.sendPort]);
+  }
+}
diff --git a/tests/lib/isolate/transferable_failed_to_send_test.dart b/tests/lib/isolate/transferable_failed_to_send_test.dart
new file mode 100644
index 0000000..ac6f80e
--- /dev/null
+++ b/tests/lib/isolate/transferable_failed_to_send_test.dart
@@ -0,0 +1,86 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import "dart:io" show ServerSocket;
+import "dart:isolate";
+import "dart:typed_data" show ByteData;
+
+import "package:expect/expect.dart";
+import "package:async_helper/async_helper.dart";
+
+void main() async {
+  final port = new ReceivePort();
+
+  // Sending a socket object will result in an error.
+  final socket = await ServerSocket.bind('localhost', 0);
+
+  final x = new ByteData(4);
+  for (int i = 0; i < 4; i++) {
+    x.setUint8(i, i);
+  }
+  {
+    final transferableFirst = TransferableTypedData.fromList([x]);
+    Expect.throwsArgumentError(
+        () => port.sendPort.send(<dynamic>[transferableFirst, socket]));
+    // Once TransferableTypedData was sent even if attempt failed, it can't be
+    // materialized.
+    // This need to be changed so that on failed send we should not detach the
+    // buffer form the transferrable. The order should not matter (i.e. if the
+    // error happens before or after the serializer hits a transferrable object)
+
+    final data1 = transferableFirst.materialize().asUint8List();
+    Expect.equals(x.lengthInBytes, data1.length);
+    for (int i = 0; i < data1.length; i++) {
+      Expect.equals(i, data1[i]);
+    }
+  }
+  {
+    final transferableFirst = TransferableTypedData.fromList([x]);
+    Expect.throwsArgumentError(() => port.sendPort
+        .send(<dynamic>[transferableFirst, transferableFirst, socket]));
+    // Once TransferableTypedData was sent even if attempt failed, it can't be
+    // materialized.
+    // This need to be changed so that on failed send we should not detach the
+    // buffer form the transferrable. The order should not matter (i.e. if the
+    // error happens before or after the serializer hits a transferrable object)
+
+    final data1 = transferableFirst.materialize().asUint8List();
+    Expect.equals(x.lengthInBytes, data1.length);
+    for (int i = 0; i < data1.length; i++) {
+      Expect.equals(i, data1[i]);
+    }
+  }
+
+  {
+    final transferableSecond = TransferableTypedData.fromList([x]);
+    Expect.throwsArgumentError(
+        () => port.sendPort.send(<dynamic>[socket, transferableSecond]));
+    // Once TransferableTypedData was sent even if attempt failed, it can't be
+    // materialized.
+    final data2 = transferableSecond.materialize().asUint8List();
+    Expect.equals(x.lengthInBytes, data2.length);
+    for (int i = 0; i < data2.length; i++) {
+      Expect.equals(i, data2[i]);
+    }
+  }
+
+  {
+    final transferableSecond = TransferableTypedData.fromList([x]);
+    Expect.throwsArgumentError(() => port.sendPort
+        .send(<dynamic>[socket, transferableSecond, transferableSecond]));
+    // Once TransferableTypedData was sent even if attempt failed, it can't be
+    // materialized.
+    final data2 = transferableSecond.materialize().asUint8List();
+    Expect.equals(x.lengthInBytes, data2.length);
+    for (int i = 0; i < data2.length; i++) {
+      Expect.equals(i, data2[i]);
+    }
+  }
+
+  socket.close();
+  port.close();
+}
diff --git a/tests/lib/isolate/transferable_test.dart b/tests/lib/isolate/transferable_test.dart
new file mode 100644
index 0000000..8680828
--- /dev/null
+++ b/tests/lib/isolate/transferable_test.dart
@@ -0,0 +1,287 @@
+// Copyright (c) 2019, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import "dart:async";
+import "dart:collection";
+import "dart:isolate";
+import "dart:typed_data";
+import "package:expect/expect.dart";
+
+const large = 2 * 1024 * 1024;
+
+void child(replyPort) {
+  print("Child start");
+
+  print("Child ByteData");
+  dynamic x = new ByteData(large);
+  for (int i = 0; i < 4; i++) {
+    x.setInt8(i, i);
+  }
+  replyPort.send(TransferableTypedData.fromList([x.buffer.asUint8List()]));
+
+  print("Child Uint8List");
+  x = new Uint8List(large);
+  for (int i = 0; i < 4; i++) {
+    x[i] = i;
+  }
+  replyPort.send(TransferableTypedData.fromList([x]));
+
+  print("Child Uint8List.view");
+  x = new Uint8List.view(x.buffer, 1, 2);
+  replyPort.send(TransferableTypedData.fromList([x]));
+
+  print("Child Int8List");
+  x = new Int8List(large);
+  for (int i = 0; i < 4; i++) {
+    x[i] = i;
+  }
+  replyPort.send(TransferableTypedData.fromList([x]));
+
+  print("Child Uint16List");
+  x = new Uint16List(large);
+  for (int i = 0; i < 4; i++) {
+    x[i] = i;
+  }
+  replyPort.send(TransferableTypedData.fromList([x]));
+
+  print("Child Int16List");
+  x = new Int16List(large);
+  for (int i = 0; i < 4; i++) {
+    x[i] = i;
+  }
+  replyPort.send(TransferableTypedData.fromList([x]));
+
+  print("Child Uint32List");
+  x = new Uint32List(large);
+  for (int i = 0; i < 4; i++) {
+    x[i] = i;
+  }
+  replyPort.send(TransferableTypedData.fromList([x]));
+
+  print("Child Int32List");
+  x = new Int32List(large);
+  for (int i = 0; i < 4; i++) {
+    x[i] = i;
+  }
+  replyPort.send(TransferableTypedData.fromList([x]));
+
+  print("Child Uint64List");
+  x = new Uint64List(large);
+  for (int i = 0; i < 4; i++) {
+    x[i] = i;
+  }
+  replyPort.send(TransferableTypedData.fromList([x]));
+
+  print("Child Int64List");
+  x = new Int64List(large);
+  for (int i = 0; i < 4; i++) {
+    x[i] = i;
+  }
+  replyPort.send(TransferableTypedData.fromList([x]));
+
+  print("Child two Uint8Lists");
+  x = new Uint8List(large);
+  for (int i = 0; i < 4; i++) {
+    x[i] = i;
+  }
+  replyPort.send([
+    TransferableTypedData.fromList([x]),
+    TransferableTypedData.fromList([x])
+  ]);
+
+  print("Child same Uint8List twice - materialize first");
+  x = new Uint8List(large);
+  for (int i = 0; i < 4; i++) {
+    x[i] = i;
+  }
+  var tr = TransferableTypedData.fromList([x]);
+  replyPort.send([tr, tr]);
+
+  print("Child same Uint8List twice - materialize second");
+  x = new Uint8List(large);
+  for (int i = 0; i < 4; i++) {
+    x[i] = i;
+  }
+  tr = TransferableTypedData.fromList([x]);
+  replyPort.send([tr, tr]);
+
+  print("Child done");
+}
+
+Future<void> main(List<String> args) async {
+  print("Parent start");
+
+  ReceivePort port = new ReceivePort();
+  Isolate.spawn(child, port.sendPort);
+  StreamIterator<dynamic> incoming = new StreamIterator<dynamic>(port);
+
+  print("Parent ByteData");
+  Expect.isTrue(await incoming.moveNext());
+  dynamic x = incoming.current.materialize().asByteData();
+  Expect.isTrue(x is ByteData);
+  Expect.equals(large, x.length);
+  for (int i = 0; i < 4; i++) {
+    Expect.equals(i, x.getUint8(i));
+  }
+
+  print("Parent Uint8List");
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current.materialize();
+  Expect.isTrue(x is ByteBuffer);
+  x = x.asUint8List();
+  Expect.equals(large, x.length);
+  for (int i = 0; i < 4; i++) {
+    Expect.equals(i, x[i]);
+  }
+
+  print("Parent Uint8List view");
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current.materialize().asUint8List();
+  Expect.equals(1, x[0]);
+  Expect.equals(2, x[1]);
+
+  print("Parent Int8");
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current.materialize().asInt8List();
+  Expect.equals(large, x.length);
+  for (int i = 0; i < 4; i++) {
+    Expect.equals(i, x[i]);
+  }
+
+  print("Parent Uint16");
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current.materialize().asUint16List();
+  Expect.equals(large, x.length);
+  for (int i = 0; i < 4; i++) {
+    Expect.equals(i, x[i]);
+  }
+
+  print("Parent Int16");
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current.materialize().asInt16List();
+  Expect.equals(large, x.length);
+  for (int i = 0; i < 4; i++) {
+    Expect.equals(i, x[i]);
+  }
+
+  print("Parent Uint32");
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current.materialize().asUint32List();
+  Expect.equals(large, x.length);
+  for (int i = 0; i < 4; i++) {
+    Expect.equals(i, x[i]);
+  }
+
+  print("Parent Int32");
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current.materialize().asInt32List();
+  Expect.equals(large, x.length);
+  for (int i = 0; i < 4; i++) {
+    Expect.equals(i, x[i]);
+  }
+
+  print("Parent Uint64");
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current.materialize().asUint64List();
+  Expect.equals(large, x.length);
+  for (int i = 0; i < 4; i++) {
+    Expect.equals(i, x[i]);
+  }
+
+  print("Parent Int64");
+  Expect.isTrue(await incoming.moveNext());
+  x = incoming.current.materialize().asInt64List();
+  Expect.equals(large, x.length);
+  for (int i = 0; i < 4; i++) {
+    Expect.equals(i, x[i]);
+  }
+
+  print("Parent two Uint8Lists");
+  Expect.isTrue(await incoming.moveNext());
+  final x1 = incoming.current[0].materialize().asUint8List();
+  final x2 = incoming.current[1].materialize().asUint8List();
+  Expect.equals(large, x1.length);
+  Expect.equals(large, x2.length);
+  for (int i = 0; i < 4; i++) {
+    Expect.equals(i, x1[i]);
+    Expect.equals(i, x2[i]);
+  }
+
+  print("Parent same Uint8Lists twice, materialize first");
+  Expect.isTrue(await incoming.moveNext());
+  final tr0 = incoming.current[0].materialize().asUint8List();
+  Expect.throwsArgumentError(() => incoming.current[1].materialize());
+  Expect.equals(large, tr0.length);
+  for (int i = 0; i < 4; i++) {
+    Expect.equals(i, tr0[i]);
+  }
+
+  print("Parent same Uint8Lists twice, materialize second");
+  Expect.isTrue(await incoming.moveNext());
+  final tr1 = incoming.current[1].materialize().asUint8List();
+  Expect.throwsArgumentError(() => incoming.current[0].materialize());
+  Expect.equals(large, tr1.length);
+  for (int i = 0; i < 4; i++) {
+    Expect.equals(i, tr1[i]);
+  }
+
+  port.close();
+  print("Parent done");
+
+  testCreateMaterializeInSameIsolate();
+  testIterableToList();
+  testUserExtendedList();
+}
+
+testCreateMaterializeInSameIsolate() {
+  // Test same-isolate operation of TransferableTypedData.
+  final Uint8List bytes = new Uint8List(large);
+  for (int i = 0; i < bytes.length; ++i) {
+    bytes[i] = i % 256;
+  }
+  final tr = TransferableTypedData.fromList([bytes]);
+  Expect.listEquals(bytes, tr.materialize().asUint8List());
+}
+
+testIterableToList() {
+  // Test that iterable.toList() can be used as an argument.
+  final list1 = Uint8List(10);
+  for (int i = 0; i < list1.length; i++) {
+    list1[i] = i;
+  }
+  final list2 = Uint8List(20);
+  for (int i = 0; i < list2.length; i++) {
+    list2[i] = i + list1.length;
+  }
+  final map = {list1: true, list2: true};
+  Iterable<Uint8List> iterable = map.keys;
+  final result = TransferableTypedData.fromList(iterable.toList())
+      .materialize()
+      .asUint8List();
+  for (int i = 0; i < result.length; i++) {
+    Expect.equals(i, result[i]);
+  }
+}
+
+class MyList<E> extends ListBase<E> {
+  List<E> _source;
+  MyList(this._source);
+  int get length => _source.length;
+  void set length(int length) {
+    _source.length = length;
+  }
+
+  E operator [](int index) => _source[index];
+  void operator []=(int index, E value) {
+    _source[index] = value;
+  }
+}
+
+testUserExtendedList() {
+  final list = MyList<TypedData>([Uint8List(10)]);
+  TransferableTypedData.fromList(list);
+}
diff --git a/tests/lib/isolate/typed_message_test.dart b/tests/lib/isolate/typed_message_test.dart
new file mode 100644
index 0000000..38e24d0
--- /dev/null
+++ b/tests/lib/isolate/typed_message_test.dart
@@ -0,0 +1,51 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+// Dart test program for testing isolate communication with
+// typed objects.
+
+library TypedMessageTest;
+
+import "dart:async";
+import "package:expect/expect.dart";
+import "package:async_helper/async_helper.dart";
+import "dart:isolate";
+
+void logMessages(SendPort replyTo) {
+  print("Starting log server.");
+  ReceivePort port = new ReceivePort();
+  replyTo.send(port.sendPort);
+  port.first.then((_message) {
+    List<int> message = _message;
+    print("Log $message");
+    Expect.equals(5, message.length);
+    Expect.equals(0, message[0]);
+    Expect.equals(1, message[1]);
+    Expect.equals(2, message[2]);
+    Expect.equals(3, message[3]);
+    Expect.equals(4, message[4]);
+    port.close();
+    replyTo.send(1);
+    print("Stopping log server.");
+  });
+}
+
+main() {
+  asyncStart();
+  ReceivePort receivePort = new ReceivePort();
+  Future<Isolate> remote = Isolate.spawn(logMessages, receivePort.sendPort);
+  var msg = <int>[0, 1, 2, 3, 4];
+  StreamIterator iterator = new StreamIterator(receivePort);
+  iterator.moveNext().then((b) {
+    SendPort sendPort = iterator.current;
+    sendPort.send(msg);
+    return iterator.moveNext();
+  }).then((b) {
+    Expect.equals(1, iterator.current);
+    receivePort.close();
+    asyncEnd();
+  });
+}
diff --git a/tests/lib/isolate/unboxed_double_snapshot_writer_test.dart b/tests/lib/isolate/unboxed_double_snapshot_writer_test.dart
new file mode 100644
index 0000000..132ad6b
--- /dev/null
+++ b/tests/lib/isolate/unboxed_double_snapshot_writer_test.dart
@@ -0,0 +1,34 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:isolate';
+import 'dart:typed_data';
+
+import 'package:expect/expect.dart';
+
+double getDoubleWithHeapObjectTag() {
+  final bd = ByteData(8);
+  bd.setUint64(0, 0x8000000000000001, Endian.host);
+  final double v = bd.getFloat64(0, Endian.host);
+  return v;
+}
+
+class Foo {
+  final double x = getDoubleWithHeapObjectTag();
+  final String name = "Foo Class";
+  Foo();
+}
+
+main(args) async {
+  final receivePort = new ReceivePort();
+
+  receivePort.sendPort.send(Foo());
+  final it = StreamIterator(receivePort);
+  Expect.isTrue(await it.moveNext());
+  final Foo receivedFoo = it.current as Foo;
+  Expect.equals(receivedFoo.x, getDoubleWithHeapObjectTag());
+  Expect.equals(receivedFoo.name, "Foo Class");
+  await it.cancel();
+}
diff --git a/tests/lib/isolate/unresolved_ports_test.dart b/tests/lib/isolate/unresolved_ports_test.dart
new file mode 100644
index 0000000..7707fab
--- /dev/null
+++ b/tests/lib/isolate/unresolved_ports_test.dart
@@ -0,0 +1,83 @@
+// Copyright (c) 2012, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+// spawns multiple isolates and sends unresolved ports between them.
+library unresolved_ports;
+
+import 'dart:async';
+import 'dart:isolate';
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
+
+// This test does the following:
+//  - main spawns two isolates: 'tim' and 'beth'
+//  - 'tim' spawns an isolate: 'bob'
+//  - main starts a message chain:
+//       main -> beth -> tim -> bob -> main
+//    by giving 'beth' a send-port to 'tim'.
+
+bethIsolate(init) {
+  ReceivePort port = initIsolate(init);
+  // TODO(sigmund): use expectAsync when it is OK to use it within an isolate
+  // (issue #6856)
+  port.first.then((msg) => msg[1]
+      .send(['${msg[0]}\nBeth says: Tim are you coming? And Bob?', msg[2]]));
+}
+
+timIsolate(init) {
+  ReceivePort port = initIsolate(init);
+  spawnFunction(bobIsolate).then((bob) {
+    port.first.then((msg) => bob.send([
+          '${msg[0]}\nTim says: Can you tell "main" that we are all coming?',
+          msg[1]
+        ]));
+  });
+}
+
+bobIsolate(init) {
+  ReceivePort port = initIsolate(init);
+  port.first
+      .then((msg) => msg[1].send('${msg[0]}\nBob says: we are all coming!'));
+}
+
+Future spawnFunction(function) {
+  ReceivePort init = new ReceivePort();
+  Isolate.spawn(function, init.sendPort);
+  return init.first;
+}
+
+ReceivePort initIsolate(SendPort starter) {
+  ReceivePort port = new ReceivePort();
+  starter.send(port.sendPort);
+  return port;
+}
+
+baseTest({bool failForNegativeTest: false}) {
+  // Message chain with unresolved ports
+  ReceivePort port = new ReceivePort();
+  asyncStart();
+  port.listen((msg) {
+    Expect.equals(
+        msg,
+        'main says: Beth, find out if Tim is coming.'
+        '\nBeth says: Tim are you coming? And Bob?'
+        '\nTim says: Can you tell "main" that we are all coming?'
+        '\nBob says: we are all coming!');
+    Expect.isFalse(failForNegativeTest);
+    port.close();
+    asyncEnd();
+  });
+
+  spawnFunction(timIsolate).then((tim) {
+    spawnFunction(bethIsolate).then((beth) {
+      beth.send(
+          ['main says: Beth, find out if Tim is coming.', tim, port.sendPort]);
+    });
+  });
+}
+
+void main([args, port]) => baseTest();
diff --git a/tests/lib/isolate/vm_rehash_test.dart b/tests/lib/isolate/vm_rehash_test.dart
new file mode 100644
index 0000000..f5a0a73
--- /dev/null
+++ b/tests/lib/isolate/vm_rehash_test.dart
@@ -0,0 +1,62 @@
+// Copyright (c) 2017, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+// VMOptions=--enable-isolate-groups
+// VMOptions=--no-enable-isolate-groups
+
+import 'dart:async';
+import 'dart:isolate';
+
+int globalHash = 0;
+
+class A {
+  int get hashCode => globalHash;
+  bool operator ==(other) => true;
+}
+
+final key = new A();
+
+other(SendPort sendPort) async {
+  // We use a different hash than the main isolate, but the re-hashing on our
+  // side happens after this line and should therefore also deserialize the map
+  // with a new hash, so we should be able to find the value in the map.
+  globalHash = 4321;
+
+  final port = new ReceivePort();
+  sendPort.send(port.sendPort);
+
+  final Map map = await port.first;
+  sendPort.send(map[key]);
+  port.close();
+}
+
+void launchIsolate(argument) {
+  other(argument);
+}
+
+main() async {
+  final r = new ReceivePort();
+  final re = new ReceivePort();
+  final map = {};
+
+  globalHash = 1234;
+  map[key] = 1;
+
+  await Isolate.spawn(launchIsolate, r.sendPort, onError: re.sendPort);
+  re.listen((error) => throw 'Error $error');
+
+  final it = new StreamIterator(r);
+
+  await it.moveNext();
+  final SendPort port = it.current;
+
+  port.send(map);
+  await it.moveNext();
+  final otherIsolateMapEntry = await it.current;
+  if (map[key] != otherIsolateMapEntry) {
+    throw "test failed";
+  }
+  r.close();
+  re.close();
+}
diff --git a/tests/lib/lib_kernel.status b/tests/lib/lib_kernel.status
index 51d3d73..8151fcf 100644
--- a/tests/lib/lib_kernel.status
+++ b/tests/lib/lib_kernel.status
@@ -55,6 +55,7 @@
 isolate/static_function_test: Skip # Times out. Issue 31855. CompileTimeError. Issue 31402
 mirrors/invocation_fuzz_test: Crash
 mirrors/metadata_allowed_values_test/16: Skip # Flaky, crashes.
+mirrors/native_class_test: SkipByDesign # Imports dart:html
 
 [ $hot_reload_rollback && ($compiler == dartk || $compiler == dartkb) ]
 isolate/illegal_msg_function_test: Skip # Timeout
diff --git a/tests/lib/lib_vm.status b/tests/lib/lib_vm.status
index 4412dcf..c4207d9 100644
--- a/tests/lib/lib_vm.status
+++ b/tests/lib/lib_vm.status
@@ -80,5 +80,93 @@
 [ $runtime == vm && ($arch == simarm || $arch == simarmv6) ]
 convert/utf85_test: Skip # Pass, Slow Issue 12644.
 
+[ $arch == simarm || $arch == simarm64 || $hot_reload || $hot_reload_rollback ]
+convert/chunked_conversion_utf88_test: SkipSlow
+convert/streamed_conversion_json_utf8_decode_test: SkipSlow
+convert/utf85_test: SkipSlow
+
 [ $arch == simarmv6 || $arch == simarm && $runtime == vm ]
 convert/chunked_conversion_utf88_test: Skip # Pass, Slow Issue 12644.
+
+[ $hot_reload || $hot_reload_rollback ]
+isolate/bool_from_environment_default_value_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/capability_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/compile_time_error_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/count_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/cross_isolate_message_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/enum_const_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/error_at_spawn_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/error_at_spawnuri_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/error_exit_at_spawn_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/error_exit_at_spawnuri_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/exit_at_spawn_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/exit_at_spawnuri_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/function_send1_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/function_send_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/handle_error2_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/handle_error3_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/handle_error_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/illegal_msg_function_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/illegal_msg_mirror_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/int32_length_overflow_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/int_from_environment_default_value_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/isolate_complex_messages_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/isolate_current_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/isolate_import_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/issue_21398_parent_isolate1_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/issue_21398_parent_isolate2_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/issue_21398_parent_isolate_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/issue_22778_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/issue_35626_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/issue_6610_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/kill2_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/kill_self_synchronously_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/kill_self_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/kill_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/large_byte_data_leak_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/large_byte_data_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/mandel_isolate_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/message2_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/message3_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/message4_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/message_const_type_arguments_1_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/message_const_type_arguments_2_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/message_enum_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/message_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/mint_maker_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/native_wrapper_message_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/nested_spawn2_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/nested_spawn_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/non_fatal_exception_in_timer_callback_test/none: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/non_fatal_exception_in_timer_callback_test/sleep: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/object_leak_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/ondone_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/pause_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/ping_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/port_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/raw_port_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/regress_34752_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/regress_flutter_22796_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/request_reply_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/resolve_package_uri_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/send_private_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/simple_message_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/spawn_function_custom_class_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/spawn_function_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/spawn_generic_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/spawn_uri_exported_main_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/spawn_uri_missing_from_isolate_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/spawn_uri_missing_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/spawn_uri_multi_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/spawn_uri_nested_vm_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/spawn_uri_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/spawn_uri_vm_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/start_paused_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/string_from_environment_default_value_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/timer_isolate_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/timer_multiple_isolates_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/transferable_failed_to_send_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/transferable_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/typed_message_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/unresolved_ports_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
+isolate/vm_rehash_test: Skip # https://dartbug.com/36097: Ongoing concurrency work.
diff --git a/tests/lib/mirrors/abstract_class_test.dart b/tests/lib/mirrors/abstract_class_test.dart
index 285d032..17fd28f 100644
--- a/tests/lib/mirrors/abstract_class_test.dart
+++ b/tests/lib/mirrors/abstract_class_test.dart
@@ -53,11 +53,11 @@
 }
 
 abstract class GenericFoo<T> {
-  T genericFoo();
+  T genericFoo(T t);
 }
 
 class GenericBar<T> extends GenericFoo<T> {
-  T genericFoo() {}
+  T genericFoo(T t) => t;
 }
 
 testGeneric() {
diff --git a/tests/lib/mirrors/generic_local_function_test.dart b/tests/lib/mirrors/generic_local_function_test.dart
index bc56f29..c8bd0e8 100644
--- a/tests/lib/mirrors/generic_local_function_test.dart
+++ b/tests/lib/mirrors/generic_local_function_test.dart
@@ -12,13 +12,13 @@
 
 class C<T> {
   makeClosure1() {
-    T closure1(T t) {}
+    T closure1(T t) => t;
     return closure1;
   }
 
   makeClosure2() {
     enclosing() {
-      T closure2(T t) {}
+      T closure2(T t) => t;
       return closure2;
     }
 
diff --git a/tests/lib/mirrors/generics_dynamic_test.dart b/tests/lib/mirrors/generics_dynamic_test.dart
index 8a583da..152d0d8 100644
--- a/tests/lib/mirrors/generics_dynamic_test.dart
+++ b/tests/lib/mirrors/generics_dynamic_test.dart
@@ -8,7 +8,7 @@
 class A<T> {}
 
 class B<T extends A> extends A implements C {
-  A m(A a) {}
+  A m(A a) => a;
   late A field;
 }
 
diff --git a/tests/lib/mirrors/metadata_symbol_literal_test.dart b/tests/lib/mirrors/metadata_symbol_literal_test.dart
index 129d4cd..5709ecd 100644
--- a/tests/lib/mirrors/metadata_symbol_literal_test.dart
+++ b/tests/lib/mirrors/metadata_symbol_literal_test.dart
@@ -12,7 +12,7 @@
 
 class U {
   @T(#x)
-  int field;
+  int? field;
 }
 
 main() {
diff --git a/tests/lib/mirrors/method_mirror_source_test.dart b/tests/lib/mirrors/method_mirror_source_test.dart
index a55fbc7..5657efa 100644
--- a/tests/lib/mirrors/method_mirror_source_test.dart
+++ b/tests/lib/mirrors/method_mirror_source_test.dart
@@ -36,8 +36,8 @@
     : _y = y,
       super();
 
-  factory C.other(num z) {}
-  factory C.other2() {}
+  factory C.other(num z) => C(z, z);
+  factory C.other2() => C(0, 0);
   factory C.other3() = C.other2;
 
   static dynamic foo() {
@@ -87,7 +87,7 @@
       "    : _y = y,\n"
       "      super();");
   expectSource(cm.declarations[#C.other]!,
-      "factory C.other(num z) {}");
+      "factory C.other(num z) => C(z, z);");
   expectSource(cm.declarations[#C.other3]!,
       "factory C.other3() = C.other2;");
 
diff --git a/tests/lib/mirrors/mirror_in_static_init_test.dart b/tests/lib/mirrors/mirror_in_static_init_test.dart
index 4de3ef6..90afd5a 100644
--- a/tests/lib/mirrors/mirror_in_static_init_test.dart
+++ b/tests/lib/mirrors/mirror_in_static_init_test.dart
@@ -12,7 +12,7 @@
 
 // This class is only loaded during initialization of `staticField`.
 abstract class C {
-  int _a;
+  int? _a;
   // This is a syntax error on purpose.
   C([this._a: 0]); //# 01: compile-time error
 }
diff --git a/tests/lib/mirrors/operator_test.dart b/tests/lib/mirrors/operator_test.dart
index a7fafbc..c466775 100644
--- a/tests/lib/mirrors/operator_test.dart
+++ b/tests/lib/mirrors/operator_test.dart
@@ -12,26 +12,26 @@
 import 'stringify.dart';
 
 class Foo {
-  Foo operator ~() {}
-  Foo operator -() {}
+  Foo operator ~() => this;
+  Foo operator -() => this;
 
-  bool operator ==(a) {}
-  Foo operator [](int a) {}
-  Foo operator *(Foo a) {}
-  Foo operator /(Foo a) {}
-  Foo operator %(Foo a) {}
-  Foo operator ~/(Foo a) {}
-  Foo operator +(Foo a) {}
-  Foo operator <<(Foo a) {}
-  Foo operator >>(Foo a) {}
-  Foo operator >=(Foo a) {}
-  Foo operator >(Foo a) {}
-  Foo operator <=(Foo a) {}
-  Foo operator <(Foo a) {}
-  Foo operator &(Foo a) {}
-  Foo operator ^(Foo a) {}
-  Foo operator |(Foo a) {}
-  Foo operator -(Foo a) {}
+  bool operator ==(a) => false;
+  Foo operator [](int a) => this;
+  Foo operator *(Foo a) => this;
+  Foo operator /(Foo a) => this;
+  Foo operator %(Foo a) => this;
+  Foo operator ~/(Foo a) => this;
+  Foo operator +(Foo a) => this;
+  Foo operator <<(Foo a) => this;
+  Foo operator >>(Foo a) => this;
+  Foo operator >=(Foo a) => this;
+  Foo operator >(Foo a) => this;
+  Foo operator <=(Foo a) => this;
+  Foo operator <(Foo a) => this;
+  Foo operator &(Foo a) => this;
+  Foo operator ^(Foo a) => this;
+  Foo operator |(Foo a) => this;
+  Foo operator -(Foo a) => this;
 
   // TODO(ahe): use void when dart2js reifies that type.
   operator []=(int a, Foo b) {}
diff --git a/tests/lib/mirrors/parameter_metadata_test.dart b/tests/lib/mirrors/parameter_metadata_test.dart
index f875983..78e814f 100644
--- a/tests/lib/mirrors/parameter_metadata_test.dart
+++ b/tests/lib/mirrors/parameter_metadata_test.dart
@@ -20,7 +20,7 @@
 
 class B {
   B.foo(int x) {}
-  factory B.bar(@m3 @m2 int z, x) {}
+  factory B.bar(@m3 @m2 int z, x) => new B.foo(0);
 
   baz(@m1 final int x, @m2 int y, @m3 final int z) {}
   qux(int x, [@m3 @m2 @m1 int y = 3 + 1]) {}
diff --git a/tests/lib/mirrors/regress_14304_test.dart b/tests/lib/mirrors/regress_14304_test.dart
index 293fcea..072e791 100644
--- a/tests/lib/mirrors/regress_14304_test.dart
+++ b/tests/lib/mirrors/regress_14304_test.dart
@@ -8,7 +8,7 @@
 import "package:expect/expect.dart";
 
 class A<T> {
-  T m() {}
+  T m(T t) => t;
 }
 
 main() {
diff --git a/tests/lib/mirrors/return_type_test.dart b/tests/lib/mirrors/return_type_test.dart
index 65115bd..5a66dfe 100644
--- a/tests/lib/mirrors/return_type_test.dart
+++ b/tests/lib/mirrors/return_type_test.dart
@@ -11,9 +11,9 @@
 
 class B {
   f() {}
-  int g() {}
-  List h() {}
-  B i() {}
+  int g() => 0;
+  List h() => [];
+  B i() => new B();
 
   // TODO(ahe): Test this when dart2js handles parameterized types.
   // List<int> j() {}
diff --git a/tests/lib/mirrors/type_mirror_for_type_test.dart b/tests/lib/mirrors/type_mirror_for_type_test.dart
index 92e101f..8ae149b 100644
--- a/tests/lib/mirrors/type_mirror_for_type_test.dart
+++ b/tests/lib/mirrors/type_mirror_for_type_test.dart
@@ -13,7 +13,7 @@
 class C<T> {}
 
 class X {
-  Type foo() {}
+  Type foo() => Object;
 }
 
 main() {
diff --git a/tests/lib/typed_data/float32x4_test.dart b/tests/lib/typed_data/float32x4_test.dart
index c68ecc1..80600ff 100644
--- a/tests/lib/typed_data/float32x4_test.dart
+++ b/tests/lib/typed_data/float32x4_test.dart
@@ -397,19 +397,22 @@
   Expect.equals(4.0, f.w);
 }
 
+// TODO(eernst): Come pure null-safety, this can only be `TypeError`.
+bool isTypeError(e) => e is TypeError || e is ArgumentError;
+
 void testBadArguments() {
   dynamic dynamicNull = null;
-  Expect.throwsTypeError(() => new Float32x4(dynamicNull, 2.0, 3.0, 4.0));
-  Expect.throwsTypeError(() => new Float32x4(1.0, dynamicNull, 3.0, 4.0));
-  Expect.throwsTypeError(() => new Float32x4(1.0, 2.0, dynamicNull, 4.0));
-  Expect.throwsTypeError(() => new Float32x4(1.0, 2.0, 3.0, dynamicNull));
+  Expect.throws(() => new Float32x4(dynamicNull, 2.0, 3.0, 4.0), isTypeError);
+  Expect.throws(() => new Float32x4(1.0, dynamicNull, 3.0, 4.0), isTypeError);
+  Expect.throws(() => new Float32x4(1.0, 2.0, dynamicNull, 4.0), isTypeError);
+  Expect.throws(() => new Float32x4(1.0, 2.0, 3.0, dynamicNull), isTypeError);
 
   // Use local variable typed as "dynamic" to avoid static warnings.
   dynamic str = "foo";
-  Expect.throwsTypeError(() => new Float32x4(str, 2.0, 3.0, 4.0));
-  Expect.throwsTypeError(() => new Float32x4(1.0, str, 3.0, 4.0));
-  Expect.throwsTypeError(() => new Float32x4(1.0, 2.0, str, 4.0));
-  Expect.throwsTypeError(() => new Float32x4(1.0, 2.0, 3.0, str));
+  Expect.throws(() => new Float32x4(str, 2.0, 3.0, 4.0), isTypeError);
+  Expect.throws(() => new Float32x4(1.0, str, 3.0, 4.0), isTypeError);
+  Expect.throws(() => new Float32x4(1.0, 2.0, str, 4.0), isTypeError);
+  Expect.throws(() => new Float32x4(1.0, 2.0, 3.0, str), isTypeError);
 }
 
 void testSpecialValues() {
diff --git a/tests/lib/typed_data/int32x4_test.dart b/tests/lib/typed_data/int32x4_test.dart
index e9b2f4a..897c8a5 100644
--- a/tests/lib/typed_data/int32x4_test.dart
+++ b/tests/lib/typed_data/int32x4_test.dart
@@ -11,6 +11,9 @@
 import 'dart:typed_data';
 import 'package:expect/expect.dart';
 
+// TODO(eernst): Come pure null-safety, it can only be `TypeError`.
+bool isTypeError(e) => e is TypeError || e is ArgumentError;
+
 void testBadArguments() {
   // Check that the actual argument type error is detected and a dynamic
   // error is raised. This is not trivially covered by similar dynamic type
@@ -18,12 +21,10 @@
   // is a built-in type.
 
   dynamic dynamicNull = null;
-  Expect.throwsTypeError(() => new Int32x4(dynamicNull, 2, 3, 4));
-  Expect.throwsTypeError(() => new Int32x4(1, dynamicNull, 3, 4));
-  Expect.throwsTypeError(() => new Int32x4(1, 2, dynamicNull, 4));
-  Expect.throwsTypeError(() => new Int32x4(1, 2, 3, dynamicNull));
-
-  bool isTypeError(e) => e is TypeError;
+  Expect.throws(() => new Int32x4(dynamicNull, 2, 3, 4), isTypeError);
+  Expect.throws(() => new Int32x4(1, dynamicNull, 3, 4), isTypeError);
+  Expect.throws(() => new Int32x4(1, 2, dynamicNull, 4), isTypeError);
+  Expect.throws(() => new Int32x4(1, 2, 3, dynamicNull), isTypeError);
 
   // Use a local variable typed as dynamic to avoid static warnings.
   dynamic str = "foo";
diff --git a/tests/lib/typed_data/simd_type_null_params_test.dart b/tests/lib/typed_data/simd_type_null_params_test.dart
index 536b2be..0eb4737 100644
--- a/tests/lib/typed_data/simd_type_null_params_test.dart
+++ b/tests/lib/typed_data/simd_type_null_params_test.dart
@@ -11,7 +11,8 @@
   try {
     f();
   } catch (e) {
-    return e is TypeError;
+    // TODO(eernst): Come pure null-safety, this can only be `TypeError`.
+    return e is TypeError || e is ArgumentError;
   }
   return false;
 }
diff --git a/tests/lib_2/async/futures_test.dart b/tests/lib_2/async/futures_test.dart
index 51a3018..a98d612 100644
--- a/tests/lib_2/async/futures_test.dart
+++ b/tests/lib_2/async/futures_test.dart
@@ -56,7 +56,7 @@
     throw 'incorrect error';
   }).catchError((error, stackTrace) {
     Expect.equals('correct error', error);
-    Expect.isNull(stackTrace);
+    Expect.isNotNull(stackTrace);
   });
 }
 
@@ -73,7 +73,7 @@
     throw 'incorrect error 2';
   }).catchError((error, stackTrace) {
     Expect.equals('correct error', error);
-    Expect.isNull(stackTrace);
+    Expect.isNotNull(stackTrace);
   });
 }
 
@@ -90,7 +90,7 @@
     throw 'incorrect error 2';
   }).catchError((error, stackTrace) {
     Expect.equals('correct error', error);
-    Expect.isNull(stackTrace);
+    Expect.isNotNull(stackTrace);
   });
 }
 
@@ -100,7 +100,7 @@
   } catch (e, st) {
     return st;
   }
-  return null;
+  throw "unreachable";
 }
 
 Future testWaitWithSingleErrorWithStackTrace() {
@@ -193,8 +193,8 @@
 
 Future testForEachSync() {
   final seen = <int>[];
-  return Future.forEach([1, 2, 3, 4, 5], seen.add).then(
-      (_) => Expect.listEquals([1, 2, 3, 4, 5], seen));
+  return Future.forEach([1, 2, 3, 4, 5], seen.add)
+      .then((_) => Expect.listEquals([1, 2, 3, 4, 5], seen));
 }
 
 Future testForEachWithException() {
diff --git a/tests/lib_2/async/stream_timeout_test.dart b/tests/lib_2/async/stream_timeout_test.dart
index eb33ad2..d0ddc0d 100644
--- a/tests/lib_2/async/stream_timeout_test.dart
+++ b/tests/lib_2/async/stream_timeout_test.dart
@@ -16,7 +16,7 @@
     expect(tos.isBroadcast, false);
     tos.handleError(expectAsync((e, s) {
       expect(e, new isInstanceOf<TimeoutException>());
-      expect(s, null);
+      expect(s, StackTrace.empty);
     })).listen((v) {
       fail("Unexpected event");
     });
@@ -77,7 +77,7 @@
     expect(tos.isBroadcast, true);
     tos.handleError(expectAsync((e, s) {
       expect(e, new isInstanceOf<TimeoutException>());
-      expect(s, null);
+      expect(s, StackTrace.empty);
     })).listen((v) {
       fail("Unexpected event");
     });
@@ -89,7 +89,7 @@
     expect(tos.isBroadcast, true);
     tos.handleError(expectAsync((e, s) {
       expect(e, new isInstanceOf<TimeoutException>());
-      expect(s, null);
+      expect(s, StackTrace.empty);
     })).listen((v) {
       fail("Unexpected event");
     });
@@ -101,7 +101,7 @@
     expect(tos.isBroadcast, false);
     tos.handleError(expectAsync((e, s) {
       expect(e, new isInstanceOf<TimeoutException>());
-      expect(s, null);
+      expect(s, StackTrace.empty);
     })).listen((v) {
       fail("Unexpected event");
     });
diff --git a/tests/lib_2/html/node_validator_important_if_you_suppress_make_the_bug_critical_test.dart b/tests/lib_2/html/node_validator_important_if_you_suppress_make_the_bug_critical_test.dart
index 194e43a..1b3ea60 100644
--- a/tests/lib_2/html/node_validator_important_if_you_suppress_make_the_bug_critical_test.dart
+++ b/tests/lib_2/html/node_validator_important_if_you_suppress_make_the_bug_critical_test.dart
@@ -428,6 +428,31 @@
         "<form id='single_node_clobbering' onmouseover='alert(1)'><input name='attributes'>",
         "");
 
+    testHtml('DOM clobbering of previousSibling',
+      validator,
+      'https://example.com/<div><img/src="x"/onerror="alert();"/><form><input/name="previousSibling"></form></div>',
+      'https://example.com/<div><img src="x"></div>'
+    );
+
+    // The lastChild and childNodes clobbering corrupts iterating the tree. They
+    // get removed, but in the meantime the evil node has been skipped. Note
+    // that we end up deleting the entire form because the clobbering makes its
+    // lastChild incorrect and we detect this, but only on the second time
+    // through.
+    testHtml('DOM clobbering of both childNodes and lastChild',
+      validator,
+      "abc<form><div><img src='x' onerror='alert(document.domain)'></div><div><input name='childNodes'><input id='lastChild' name='childNodes'></div></form>",
+      'abc'
+    );
+
+    test('DOM clobbering of previousSibling via append', () {
+      var div = Element.div();
+      var bad =
+          'https://example.com/<div><img/src="x"/onerror="alert();"/><form><input/name="previousSibling"></form></div>';
+      div.innerHtml = bad;
+      expect(div.innerHtml, 'https://example.com/<div><img src="x"></div>');
+    });
+
     testHtml(
         'DOM clobbering of attributes with multiple nodes',
         validator,
diff --git a/tests/lib_2/isolate/count_test.dart b/tests/lib_2/isolate/count_test.dart
index 95e2e33..0095e60 100644
--- a/tests/lib_2/isolate/count_test.dart
+++ b/tests/lib_2/isolate/count_test.dart
@@ -8,8 +8,8 @@
 library CountTest;
 
 import 'dart:isolate';
-import 'package:unittest/unittest.dart';
-import "remote_unittest_helper.dart";
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
 
 void countMessages(replyTo) {
   int count = 0;
@@ -18,48 +18,46 @@
   port.listen((_message) {
     int message = _message;
     if (message == -1) {
-      expect(count, 10);
+      Expect.equals(count, 10);
       replyTo.send(["done"]);
       port.close();
       return;
     }
     count++;
-    expect(message, count);
+    Expect.equals(message, count);
     replyTo.send(["count", message * 2]);
   });
 }
 
 void main([args, port]) {
-  if (testRemote(main, port)) return;
-  test("count 10 consecutive messages", () {
-    ReceivePort local = new ReceivePort();
-    Isolate.spawn(countMessages, local.sendPort);
-    SendPort remote;
-    int count = 0;
-    var done = expectAsync(() {});
-    local.listen((msg) {
-      switch (msg[0]) {
-        case "init":
-          expect(remote, null);
-          remote = msg[1];
+  //testRemote(main, port);
+  ReceivePort local = new ReceivePort();
+  Isolate.spawn(countMessages, local.sendPort);
+  SendPort remote;
+  int count = 0;
+  asyncStart();
+  local.listen((msg) {
+    switch (msg[0]) {
+      case "init":
+        Expect.equals(remote, null);
+        remote = msg[1];
+        remote.send(++count);
+        break;
+      case "count":
+        Expect.equals(msg[1], count * 2);
+        if (count == 10) {
+          remote.send(-1);
+        } else {
           remote.send(++count);
-          break;
-        case "count":
-          expect(msg[1], count * 2);
-          if (count == 10) {
-            remote.send(-1);
-          } else {
-            remote.send(++count);
-          }
-          break;
-        case "done":
-          expect(count, 10);
-          local.close();
-          done();
-          break;
-        default:
-          fail("unreachable: ${msg[0]}");
-      }
-    });
+        }
+        break;
+      case "done":
+        Expect.equals(count, 10);
+        local.close();
+        asyncEnd();
+        break;
+      default:
+        Expect.fail("unreachable: ${msg[0]}");
+    }
   });
 }
diff --git a/tests/lib_2/isolate/cross_isolate_message_test.dart b/tests/lib_2/isolate/cross_isolate_message_test.dart
index 7bcdd8d..ede3792 100644
--- a/tests/lib_2/isolate/cross_isolate_message_test.dart
+++ b/tests/lib_2/isolate/cross_isolate_message_test.dart
@@ -11,8 +11,8 @@
 library CrossIsolateMessageTest;
 
 import 'dart:isolate';
-import 'package:unittest/unittest.dart';
-import "remote_unittest_helper.dart";
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
 
 /*
  * Everything starts in the main-isolate (in the main-method).
@@ -30,7 +30,7 @@
   mainIsolate.send(["ready1", local.sendPort]);
   local.first.then((msg) {
     // Message from crossIsolate2
-    expect(msg[0], "fromIsolate2");
+    Expect.equals(msg[0], "fromIsolate2");
     mainIsolate.send(["fromIsolate1", msg[1] + 58]); // 100.
   });
 }
@@ -40,24 +40,22 @@
 }
 
 void main([args, port]) {
-  if (testRemote(main, port)) return;
-  test("send message cross isolates ", () {
-    ReceivePort fromIsolate1 = new ReceivePort();
-    Isolate.spawn(crossIsolate1, fromIsolate1.sendPort);
-    var done = expectAsync(() {});
-    fromIsolate1.listen((msg) {
-      switch (msg[0]) {
-        case "ready1":
-          SendPort toIsolate1 = msg[1];
-          Isolate.spawn(crossIsolate2, toIsolate1);
-          break;
-        case "fromIsolate1":
-          expect(msg[1], 100);
-          fromIsolate1.close();
-          break;
-        default:
-          fail("unreachable! Tag: ${msg[0]}");
-      }
-    }, onDone: done);
-  });
+  ReceivePort fromIsolate1 = new ReceivePort();
+  Isolate.spawn(crossIsolate1, fromIsolate1.sendPort);
+
+  asyncStart();
+  fromIsolate1.listen((msg) {
+    switch (msg[0]) {
+      case "ready1":
+        SendPort toIsolate1 = msg[1];
+        Isolate.spawn(crossIsolate2, toIsolate1);
+        break;
+      case "fromIsolate1":
+        Expect.equals(msg[1], 100);
+        fromIsolate1.close();
+        break;
+      default:
+        Expect.fail("unreachable! Tag: ${msg[0]}");
+    }
+  }, onDone: asyncEnd);
 }
diff --git a/tests/lib_2/isolate/mandel_isolate_test.dart b/tests/lib_2/isolate/mandel_isolate_test.dart
index 84f7d14..99f5e48 100644
--- a/tests/lib_2/isolate/mandel_isolate_test.dart
+++ b/tests/lib_2/isolate/mandel_isolate_test.dart
@@ -10,25 +10,22 @@
 import 'dart:async';
 import 'dart:isolate';
 import 'dart:math';
-import 'package:unittest/unittest.dart';
-import "remote_unittest_helper.dart";
+
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
 
 const TERMINATION_MESSAGE = -1;
 const N = 100;
 const ISOLATES = 20;
 
 void main([args, port]) {
-  if (testRemote(main, port)) return;
-  // Test is really slow in debug builds of the VM.
-  var configuration = unittestConfiguration;
-  configuration.timeout = const Duration(seconds: 480);
-  test("Render Mandelbrot in parallel", () {
-    final state = new MandelbrotState();
-    state._validated.future.then(expectAsync((result) {
-      expect(result, isTrue);
-    }));
-    for (int i = 0; i < min(ISOLATES, N); i++) state.startClient(i);
+  final state = new MandelbrotState();
+  asyncStart();
+  state._validated.future.then((result) {
+    Expect.isTrue(result);
+    asyncEnd();
   });
+  for (int i = 0; i < min(ISOLATES, N); i++) state.startClient(i);
 }
 
 class MandelbrotState {
diff --git a/tests/lib_2/isolate/message2_test.dart b/tests/lib_2/isolate/message2_test.dart
index cb625a4..7c2e691 100644
--- a/tests/lib_2/isolate/message2_test.dart
+++ b/tests/lib_2/isolate/message2_test.dart
@@ -11,8 +11,8 @@
 library Message2Test;
 
 import 'dart:isolate';
-import 'package:unittest/unittest.dart';
-import "remote_unittest_helper.dart";
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
 
 // ---------------------------------------------------------------------------
 // Message passing test 2.
@@ -20,14 +20,12 @@
 
 class MessageTest {
   static void mapEqualsDeep(Map expected, Map actual) {
-    expect(expected, isMap);
-    expect(actual, isMap);
-    expect(actual.length, expected.length);
+    Expect.equals(actual.length, expected.length);
     testForEachMap(key, value) {
       if (value is List) {
         listEqualsDeep(value, actual[key]);
       } else {
-        expect(actual[key], value);
+        Expect.equals(actual[key], value);
       }
     }
 
@@ -37,11 +35,13 @@
   static void listEqualsDeep(List expected, List actual) {
     for (int i = 0; i < expected.length; i++) {
       if (expected[i] is List) {
+        Expect.type<List>(actual[i]);
         listEqualsDeep(expected[i], actual[i]);
       } else if (expected[i] is Map) {
+        Expect.type<Map>(actual[i]);
         mapEqualsDeep(expected[i], actual[i]);
       } else {
-        expect(actual[i], expected[i]);
+        Expect.equals(actual[i], expected[i]);
       }
     }
   }
@@ -50,7 +50,8 @@
 void pingPong(replyPort) {
   ReceivePort port = new ReceivePort();
   port.listen((message) {
-    if (message == null) {
+    if (message is SendPort) {
+      message.send('done');
       port.close();
     } else {
       // Bounce the received object back so that the sender
@@ -62,22 +63,25 @@
 }
 
 void main([args, port]) {
-  if (testRemote(main, port)) return;
-  test("map is equal after it is sent back and forth", () {
-    ReceivePort port = new ReceivePort();
-    Isolate.spawn(pingPong, port.sendPort);
-    port.first.then(expectAsync((remote) {
-      Map m = new Map();
-      m[1] = "eins";
-      m[2] = "deux";
-      m[3] = "tre";
-      m[4] = "four";
-      ReceivePort replyPort = new ReceivePort();
-      remote.send([m, replyPort.sendPort]);
-      replyPort.first.then(expectAsync((var received) {
+  ReceivePort port = new ReceivePort();
+  Isolate.spawn(pingPong, port.sendPort);
+  asyncStart();
+  port.first.then((remote) {
+    Map m = new Map();
+    m[1] = "eins";
+    m[2] = "deux";
+    m[3] = "tre";
+    m[4] = "four";
+    ReceivePort replyPort = new ReceivePort();
+    remote.send([m, replyPort.sendPort]);
+    replyPort.listen((var received) {
+      if (received == 'done') {
+        replyPort.close();
+        asyncEnd();
+      } else {
         MessageTest.mapEqualsDeep(m, received);
-        remote.send(null);
-      }));
-    }));
+        remote.send(replyPort.sendPort);
+      }
+    });
   });
 }
diff --git a/tests/lib_2/isolate/message_test.dart b/tests/lib_2/isolate/message_test.dart
index 73db18a..1d7cd78 100644
--- a/tests/lib_2/isolate/message_test.dart
+++ b/tests/lib_2/isolate/message_test.dart
@@ -10,10 +10,11 @@
 
 library MessageTest;
 
-import 'dart:isolate';
 import 'dart:async';
-import 'package:unittest/unittest.dart';
-import "remote_unittest_helper.dart";
+import 'dart:isolate';
+
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
 
 // ---------------------------------------------------------------------------
 // Message passing test.
@@ -42,14 +43,12 @@
   ];
 
   static void VerifyMap(Map expected, Map actual) {
-    expect(expected, isMap);
-    expect(actual, isMap);
-    expect(actual.length, expected.length);
+    Expect.equals(actual.length, expected.length);
     testForEachMap(key, value) {
       if (value is List) {
         VerifyList(value, actual[key]);
       } else {
-        expect(actual[key], value);
+        Expect.equals(actual[key], value);
       }
     }
 
@@ -61,18 +60,19 @@
       if (expected[i] is List) {
         VerifyList(expected[i], actual[i]);
       } else if (expected[i] is Map) {
+        Expect.type<Map>(actual[i]);
         VerifyMap(expected[i], actual[i]);
       } else {
-        expect(actual[i], expected[i]);
+        Expect.equals(actual[i], expected[i]);
       }
     }
   }
 
   static void VerifyObject(int index, var actual) {
     var expected = elms[index];
-    expect(expected, isList);
-    expect(actual, isList);
-    expect(actual.length, expected.length);
+    Expect.type<List>(expected);
+    Expect.type<List>(actual);
+    Expect.equals(actual.length, expected.length);
     VerifyList(expected, actual);
   }
 }
@@ -107,46 +107,47 @@
 }
 
 void main([args, port]) {
-  if (testRemote(main, port)) return;
-  test("send objects and receive them back", () {
-    ReceivePort port = new ReceivePort();
-    Isolate.spawn(pingPong, port.sendPort);
-    port.first.then(expectAsync1((remote) {
-      // Send objects and receive them back.
-      for (int i = 0; i < MessageTest.elms.length; i++) {
-        var sentObject = MessageTest.elms[i];
-        remoteCall(remote, sentObject).then(expectAsync1((receivedObject) {
-          MessageTest.VerifyObject(i, receivedObject);
-        }));
-      }
-
-      // Send recursive objects and receive them back.
-      List local_list1 = ["Hello", "World", "Hello", 0xffffffffff];
-      List local_list2 = [null, local_list1, local_list1];
-      List local_list3 = [local_list2, 2.0, true, false, 0xffffffffff];
-      List sendObject = new List(5);
-      sendObject[0] = local_list1;
-      sendObject[1] = sendObject;
-      sendObject[2] = local_list2;
-      sendObject[3] = sendObject;
-      sendObject[4] = local_list3;
-      remoteCall(remote, sendObject).then((var replyObject) {
-        expect(sendObject, isList);
-        expect(replyObject, isList);
-        expect(sendObject.length, equals(replyObject.length));
-        expect(replyObject[1], same(replyObject));
-        expect(replyObject[3], same(replyObject));
-        expect(replyObject[0], same(replyObject[2][1]));
-        expect(replyObject[0], same(replyObject[2][2]));
-        expect(replyObject[2], same(replyObject[4][0]));
-        expect(replyObject[0][0], same(replyObject[0][2]));
-        expect(replyObject[0][3], equals(replyObject[4][4]));
+  ReceivePort port = new ReceivePort();
+  Isolate.spawn(pingPong, port.sendPort);
+  asyncStart();
+  port.first.then((remote) {
+    // Send objects and receive them back.
+    for (int i = 0; i < MessageTest.elms.length; i++) {
+      var sentObject = MessageTest.elms[i];
+      asyncStart();
+      remoteCall(remote, sentObject).then((receivedObject) {
+        MessageTest.VerifyObject(i, receivedObject);
+        asyncEnd();
       });
+    }
 
-      // Shutdown the MessageServer.
-      remoteCall(remote, -1).then(expectAsync1((message) {
-        expect(message, MessageTest.elms.length + 1);
-      }));
-    }));
+    // Send recursive objects and receive them back.
+    List local_list1 = ["Hello", "World", "Hello", 0xffffffffff];
+    List local_list2 = [null, local_list1, local_list1];
+    List local_list3 = [local_list2, 2.0, true, false, 0xffffffffff];
+    List sendObject = new List(5);
+    sendObject[0] = local_list1;
+    sendObject[1] = sendObject;
+    sendObject[2] = local_list2;
+    sendObject[3] = sendObject;
+    sendObject[4] = local_list3;
+    remoteCall(remote, sendObject).then((var replyObject) {
+      Expect.type<List>(sendObject);
+      Expect.type<List>(replyObject);
+      Expect.equals(sendObject.length, replyObject.length);
+      Expect.identical(replyObject[1], replyObject);
+      Expect.identical(replyObject[3], replyObject);
+      Expect.identical(replyObject[0], replyObject[2][1]);
+      Expect.identical(replyObject[0], replyObject[2][2]);
+      Expect.identical(replyObject[2], replyObject[4][0]);
+      Expect.identical(replyObject[0][0], replyObject[0][2]);
+      Expect.equals(replyObject[0][3], replyObject[4][4]);
+    });
+
+    // Shutdown the MessageServer.
+    remoteCall(remote, -1).then((message) {
+      Expect.equals(message, MessageTest.elms.length + 1);
+      asyncEnd();
+    });
   });
 }
diff --git a/tests/lib_2/isolate/mint_maker_test.dart b/tests/lib_2/isolate/mint_maker_test.dart
index fb6eb87..18bbb91 100644
--- a/tests/lib_2/isolate/mint_maker_test.dart
+++ b/tests/lib_2/isolate/mint_maker_test.dart
@@ -9,8 +9,8 @@
 
 import 'dart:async';
 import 'dart:isolate';
-import 'package:unittest/unittest.dart';
-import "remote_unittest_helper.dart";
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
 
 class Mint {
   Map<SendPort, Purse> _registry;
@@ -141,8 +141,7 @@
 
   static Future<MintMakerWrapper> create() {
     ReceivePort reply = new ReceivePort();
-    return Isolate
-        .spawn(mintMakerWrapper, reply.sendPort)
+    return Isolate.spawn(mintMakerWrapper, reply.sendPort)
         .then((_) => reply.first.then((port) => new MintMakerWrapper._(port)));
   }
 
@@ -158,32 +157,31 @@
 }
 
 _checkBalance(PurseWrapper wrapper, expected) {
-  wrapper.queryBalance(expectAsync1((balance) {
-    expect(balance, equals(expected));
-  }));
+  wrapper.queryBalance((balance) {
+    Expect.equals(balance, expected);
+  });
 }
 
 void main([args, port]) {
-  if (testRemote(main, port)) return;
-  test("creating purse, deposit, and query balance", () {
-    MintMakerWrapper.create().then(expectAsync1((mintMaker) {
-      mintMaker.makeMint(expectAsync1((mint) {
-        mint.createPurse(100, expectAsync1((purse) {
+  asyncStart();
+  MintMakerWrapper.create().then((mintMaker) {
+    mintMaker.makeMint((mint) {
+      mint.createPurse(100, (purse) {
+        _checkBalance(purse, 100);
+        purse.sproutPurse((sprouted) {
+          _checkBalance(sprouted, 0);
           _checkBalance(purse, 100);
-          purse.sproutPurse(expectAsync1((sprouted) {
-            _checkBalance(sprouted, 0);
-            _checkBalance(purse, 100);
 
-            sprouted.deposit(purse, 5);
-            _checkBalance(sprouted, 0 + 5);
-            _checkBalance(purse, 100 - 5);
+          sprouted.deposit(purse, 5);
+          _checkBalance(sprouted, 0 + 5);
+          _checkBalance(purse, 100 - 5);
 
-            sprouted.deposit(purse, 42);
-            _checkBalance(sprouted, 0 + 5 + 42);
-            _checkBalance(purse, 100 - 5 - 42);
-          }));
-        }));
-      }));
-    }));
+          sprouted.deposit(purse, 42);
+          _checkBalance(sprouted, 0 + 5 + 42);
+          _checkBalance(purse, 100 - 5 - 42);
+          asyncEnd();
+        });
+      });
+    });
   });
 }
diff --git a/tests/lib_2/isolate/nested_spawn2_test.dart b/tests/lib_2/isolate/nested_spawn2_test.dart
index 1a9fa6a..d335909 100644
--- a/tests/lib_2/isolate/nested_spawn2_test.dart
+++ b/tests/lib_2/isolate/nested_spawn2_test.dart
@@ -12,14 +12,14 @@
 library NestedSpawn2Test;
 
 import 'dart:isolate';
-import 'package:unittest/unittest.dart';
-import "remote_unittest_helper.dart";
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
 
 void isolateA(SendPort init) {
   ReceivePort port = new ReceivePort();
   init.send(port.sendPort);
   port.first.then((message) {
-    expect(message[0], "launch nested!");
+    Expect.equals(message[0], "launch nested!");
     SendPort replyTo = message[1];
     Isolate.spawn(isolateB, replyTo);
   });
@@ -45,11 +45,11 @@
   // Do a little ping-pong dance to give the intermediate isolate
   // time to die.
   _call(mainPort, msg0, ((msg, replyTo) {
-    expect(msg[0], "1");
+    Expect.equals(msg[0], "1");
     _call(replyTo, msg2, ((msg, replyTo) {
-      expect(msg[0], "3");
+      Expect.equals(msg[0], "3");
       _call(replyTo, msg4, ((msg, replyTo) {
-        expect(msg[0], "5");
+        Expect.equals(msg[0], "5");
         replyTo.send([msg6, null]);
       }));
     }));
@@ -57,23 +57,23 @@
 }
 
 void main([args, port]) {
-  if (testRemote(main, port)) return;
-  test("spawned isolate can spawn other isolates", () {
-    ReceivePort init = new ReceivePort();
-    Isolate.spawn(isolateA, init.sendPort);
-    return init.first.then(expectAsync((port) {
-      _call(port, "launch nested!", expectAsync((msg, replyTo) {
-        expect(msg[0], "0");
-        _call(replyTo, msg1, expectAsync((msg, replyTo) {
-          expect(msg[0], "2");
-          _call(replyTo, msg3, expectAsync((msg, replyTo) {
-            expect(msg[0], "4");
-            _call(replyTo, msg5, expectAsync((msg, _) {
-              expect(msg[0], "6");
-            }));
-          }));
-        }));
-      }));
-    }));
+  // spawned isolate can spawn other isolates
+  ReceivePort init = new ReceivePort();
+  Isolate.spawn(isolateA, init.sendPort);
+  asyncStart();
+  init.first.then((port) {
+    _call(port, "launch nested!", (msg, replyTo) {
+      Expect.equals(msg[0], "0");
+      _call(replyTo, msg1, (msg, replyTo) {
+        Expect.equals(msg[0], "2");
+        _call(replyTo, msg3, (msg, replyTo) {
+          Expect.equals(msg[0], "4");
+          _call(replyTo, msg5, (msg, _) {
+            Expect.equals(msg[0], "6");
+            asyncEnd();
+          });
+        });
+      });
+    });
   });
 }
diff --git a/tests/lib_2/isolate/nested_spawn_test.dart b/tests/lib_2/isolate/nested_spawn_test.dart
index a1d6538..0bc8c77 100644
--- a/tests/lib_2/isolate/nested_spawn_test.dart
+++ b/tests/lib_2/isolate/nested_spawn_test.dart
@@ -10,8 +10,8 @@
 library NestedSpawnTest;
 
 import 'dart:isolate';
-import 'package:unittest/unittest.dart';
-import "remote_unittest_helper.dart";
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
 
 void isolateA(message) {
   message.add("isolateA");
@@ -24,14 +24,14 @@
 }
 
 void main([args, port]) {
-  if (testRemote(main, port)) return;
-  test("spawned isolates can spawn nested isolates", () {
-    ReceivePort port = new ReceivePort();
-    Isolate.spawn(isolateA, [port.sendPort, "main"]);
-    return port.first.then((message) {
-      expect("main", message[1]);
-      expect("isolateA", message[2]);
-      expect("isolateB", message[3]);
-    });
+  // spawned isolates can spawn nested isolates
+  ReceivePort port = new ReceivePort();
+  Isolate.spawn(isolateA, [port.sendPort, "main"]);
+  asyncStart();
+  port.first.then((message) {
+    Expect.equals("main", message[1]);
+    Expect.equals("isolateA", message[2]);
+    Expect.equals("isolateB", message[3]);
+    asyncEnd();
   });
 }
diff --git a/tests/lib_2/isolate/port_test.dart b/tests/lib_2/isolate/port_test.dart
index 5d70832..e946542 100644
--- a/tests/lib_2/isolate/port_test.dart
+++ b/tests/lib_2/isolate/port_test.dart
@@ -6,9 +6,6 @@
 // VMOptions=--no-enable-isolate-groups
 
 // Test properties of ports.
-// Note: unittest.dart depends on ports, in particular on the behaviour tested
-// here. To keep things simple, we don't use the unittest library here.
-
 library PortTest;
 
 import "package:expect/expect.dart";
diff --git a/tests/lib_2/isolate/raw_port_test.dart b/tests/lib_2/isolate/raw_port_test.dart
index 8b3463a..6f24212 100644
--- a/tests/lib_2/isolate/raw_port_test.dart
+++ b/tests/lib_2/isolate/raw_port_test.dart
@@ -9,9 +9,10 @@
 
 library raw_port_test;
 
+import 'dart:async';
 import 'dart:isolate';
-import 'package:unittest/unittest.dart';
-import 'remote_unittest_helper.dart';
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
 
 void remote(SendPort port) {
   port.send("reply");
@@ -22,52 +23,63 @@
   port.send("reply 2");
 }
 
-main([args, port]) {
-  if (testRemote(main, port)) return;
-
-  test("raw receive", () {
+main([args, port]) async {
+  // Raw receive
+  asyncTest(() {
+    final completer = Completer<void>();
     RawReceivePort port = new RawReceivePort();
     Isolate.spawn(remote, port.sendPort);
-    port.handler = expectAsync((v) {
-      expect(v, "reply");
+    port.handler = (v) {
+      Expect.equals(v, "reply");
       port.close();
-    });
+      completer.complete();
+    };
+    return completer.future;
   });
 
-  test("raw receive hashCode", () {
+  // Raw receive hashCode
+  {
     RawReceivePort port = new RawReceivePort();
-    expect(port.hashCode is int, true);
+    Expect.isTrue(port.hashCode is int);
     port.close();
-  });
+  }
 
-  test("raw receive twice - change handler", () {
+  // Raw receive twice - change handler
+  asyncTest(() {
+    final completer = Completer<void>();
     RawReceivePort port = new RawReceivePort();
     Isolate.spawn(remote2, port.sendPort);
-    port.handler = expectAsync((v) {
-      expect(v, "reply 1");
-      port.handler = expectAsync((v) {
-        expect(v, "reply 2");
+    port.handler = (v) {
+      Expect.equals(v, "reply 1");
+      port.handler = (v) {
+        Expect.equals(v, "reply 2");
         port.close();
-      });
-    });
+        completer.complete();
+      };
+    };
+    return completer.future;
   });
 
-  test("from-raw-port", () {
+  // From raw port
+  asyncTest(() {
+    final completer = Completer<void>();
     RawReceivePort rawPort = new RawReceivePort();
     Isolate.spawn(remote, rawPort.sendPort);
-    rawPort.handler = expectAsync((v) {
-      expect(v, "reply");
+    rawPort.handler = (v) {
+      Expect.equals(v, "reply");
       ReceivePort port = new ReceivePort.fromRawReceivePort(rawPort);
       Isolate.spawn(remote, rawPort.sendPort);
       Isolate.spawn(remote, port.sendPort);
       int ctr = 2;
       port.listen(
-          expectAsync((v) {
-            expect(v, "reply");
-            ctr--;
-            if (ctr == 0) port.close();
-          }, count: 2),
-          onDone: expectAsync(() {}));
-    });
+        (v) {
+          Expect.equals(v, "reply");
+          ctr--;
+          if (ctr == 0) port.close();
+        },
+        onDone: () => completer.complete(),
+      );
+    };
+    return completer.future;
   });
 }
diff --git a/tests/lib_2/isolate/remote_unittest_helper.dart b/tests/lib_2/isolate/remote_unittest_helper.dart
deleted file mode 100644
index ea440d1..0000000
--- a/tests/lib_2/isolate/remote_unittest_helper.dart
+++ /dev/null
@@ -1,141 +0,0 @@
-// Copyright (c) 2013, the Dart project authors.  Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-// Helper functions and classes for running a set of unittests in a
-// remote isolate.
-// Used to test Isolate.spawn because dartium/drt does not allow it in the DOM
-// isolate.
-
-import "dart:isolate";
-import "package:unittest/unittest.dart";
-import "dart:mirrors";
-
-/**
- * Use this function at the beginning of the main method:
- *
- *     void main([args, port]) {
- *       if (testRemote(main, port)) return;
- *       // the usual test.
- *     }
- *
- * Remember to import unittest using the URI `package:unittest/unittest.dart`.
- * Otherwise it won't be sharing the `unittestConfiguration` with this library,
- * and the override set below won't work.
- *
- * Returns `true` if the tests are being run remotely, and
- * `false` if the tests should be run locally.
- */
-bool testRemote(Function main, SendPort port) {
-  if (port != null) {
-    unittestConfiguration = new RemoteConfiguration(port);
-    return false;
-  }
-  var testResponses = new Map<String, List>();
-
-  ClosureMirror closure = reflect(main);
-  LibraryMirror library = closure.function.owner;
-
-  var receivePort = new ReceivePort();
-  void remoteAction(message) {
-    switch (message[0]) {
-      case "testStart":
-        String name = message[1];
-        testResponses[name] = null;
-        break;
-      case "testResult":
-      case "testResultChanged":
-        String name = message[1];
-        testResponses[name] = message;
-        break;
-      case "logMessage":
-        break; // Ignore.
-      case "summary":
-        throw message[1]; // Uncaught error.
-      case "done":
-        receivePort.close();
-        _simulateTests(testResponses);
-        break;
-    }
-  }
-
-  try {
-    Isolate.spawnUri(library.uri, null, receivePort.sendPort);
-    receivePort.listen(remoteAction);
-    return true;
-  } catch (e) {
-    // spawnUri is only supported by dart2js if web workers are available.
-    // If the spawnUri fails, run the tests locally instead, since we are
-    // not in a browser anyway.
-    //
-    // That is, we assume that either Isolate.spawn or Isolate.spawnUri must
-    // work, so if spawnUri doesn't work, we can run the tests directly.
-    receivePort.close();
-    return false;
-  }
-}
-
-class RemoteConfiguration implements Configuration {
-  final SendPort _port;
-  Duration timeout = const Duration(minutes: 2);
-
-  RemoteConfiguration(this._port);
-
-  bool get autoStart => true;
-
-  void onInit() {}
-
-  void onStart() {}
-
-  void onTestStart(TestCase testCase) {
-    _port.send(["testStart", testCase.description]);
-  }
-
-  void onTestResult(TestCase testCase) {
-    _port.send([
-      "testResult",
-      testCase.description,
-      testCase.result,
-      testCase.message
-    ]);
-  }
-
-  void onTestResultChanged(TestCase testCase) {
-    _port.send([
-      "testResultChanged",
-      testCase.description,
-      testCase.result,
-      testCase.message
-    ]);
-  }
-
-  void onLogMessage(TestCase testCase, String message) {
-    _port.send(["logMessage", testCase.description, message]);
-  }
-
-  void onDone(bool success) {
-    _port.send(["done", success]);
-  }
-
-  void onSummary(int passed, int failed, int errors, List<TestCase> results,
-      String uncaughtError) {
-    if (uncaughtError != null) {
-      _port.send(["summary", uncaughtError]);
-    }
-  }
-}
-
-void _simulateTests(Map<String, List> responses) {
-  // Start all unit tests in the same event.
-  responses.forEach((name, response) {
-    test(name, () {
-      var result = response[2];
-      var message = response[3];
-      if (result == FAIL) {
-        fail(message);
-      } else if (result == ERROR) {
-        throw message;
-      }
-    });
-  });
-}
diff --git a/tests/lib_2/isolate/request_reply_test.dart b/tests/lib_2/isolate/request_reply_test.dart
index 3c8aed0..54d4d7c 100644
--- a/tests/lib_2/isolate/request_reply_test.dart
+++ b/tests/lib_2/isolate/request_reply_test.dart
@@ -8,8 +8,8 @@
 library RequestReplyTest;
 
 import 'dart:isolate';
-import 'package:unittest/unittest.dart';
-import "remote_unittest_helper.dart";
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
 
 void entry(initPort) {
   ReceivePort port = new ReceivePort();
@@ -23,17 +23,16 @@
 }
 
 void main([args, port]) {
-  if (testRemote(main, port)) return;
-  test("send", () {
-    ReceivePort init = new ReceivePort();
-    Isolate.spawn(entry, init.sendPort);
-    init.first.then(expectAsync((port) {
-      ReceivePort reply = new ReceivePort();
-      port.send([99, reply.sendPort]);
-      reply.listen(expectAsync((message) {
-        expect(message, 99 + 87);
-        reply.close();
-      }));
-    }));
+  ReceivePort init = new ReceivePort();
+  Isolate.spawn(entry, init.sendPort);
+  asyncStart();
+  init.first.then((port) {
+    ReceivePort reply = new ReceivePort();
+    port.send([99, reply.sendPort]);
+    reply.listen((message) {
+      Expect.equals(message, 99 + 87);
+      reply.close();
+      asyncEnd();
+    });
   });
 }
diff --git a/tests/lib_2/isolate/spawn_function_custom_class_test.dart b/tests/lib_2/isolate/spawn_function_custom_class_test.dart
index 8ef17c4..0046cef 100644
--- a/tests/lib_2/isolate/spawn_function_custom_class_test.dart
+++ b/tests/lib_2/isolate/spawn_function_custom_class_test.dart
@@ -13,8 +13,7 @@
 library spawn_tests;
 
 import 'dart:isolate';
-import 'package:unittest/unittest.dart';
-import "remote_unittest_helper.dart";
+import 'package:expect/expect.dart';
 
 class MyClass {
   final myVar = 'there';
@@ -29,26 +28,21 @@
   reply.send('re: ${new MyClass().myFunc(msg)}');
 }
 
-void main([args, port]) {
-  if (testRemote(main, port)) {
-    return;
-  }
+Future<void> main([args, port]) async {
+  // message - reply chain'
+  final exitPort = ReceivePort();
+  final replyPort = ReceivePort();
 
-  test('message - reply chain', () async {
-    final exitPort = ReceivePort();
-    final replyPort = ReceivePort();
+  Isolate.spawn(isolateEntryPoint, ['hi', replyPort.sendPort],
+      onExit: exitPort.sendPort);
 
-    final isolate = Isolate.spawn(isolateEntryPoint, ['hi', replyPort.sendPort],
-        onExit: exitPort.sendPort);
-
-    replyPort.listen((msg) {
-      replyPort.close();
-      expect(msg, equals('re: hi there'));
-    });
-
-    // Explicitly await spawned isolate exit to enforce main isolate not
-    // completing (and the stand-alone runtime exiting) before the spawned
-    // isolate is done.
-    await exitPort.first;
+  replyPort.listen((msg) {
+    replyPort.close();
+    Expect.equals(msg, 're: hi there');
   });
+
+  // Explicitly await spawned isolate exit to enforce main isolate not
+  // completing (and the stand-alone runtime exiting) before the spawned
+  // isolate is done.
+  await exitPort.first;
 }
diff --git a/tests/lib_2/isolate/spawn_function_test.dart b/tests/lib_2/isolate/spawn_function_test.dart
index 31cb54c..fb90ba4 100644
--- a/tests/lib_2/isolate/spawn_function_test.dart
+++ b/tests/lib_2/isolate/spawn_function_test.dart
@@ -9,8 +9,8 @@
 library spawn_tests;
 
 import 'dart:isolate';
-import 'package:unittest/unittest.dart';
-import "remote_unittest_helper.dart";
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
 
 isolateEntryPoint(args) {
   var msg = args[0];
@@ -18,29 +18,24 @@
   sendPort.send('re: $msg');
 }
 
-void main([args, port]) {
-  if (testRemote(main, port)) {
-    return;
-  }
+Future<void> main([args, port]) async {
+  // message - reply chain
+  const String debugName = 'spawnedIsolate';
 
-  test('message - reply chain', () async {
-    const String debugName = 'spawnedIsolate';
-
-    ReceivePort port = new ReceivePort();
-    port.listen(expectAsync((msg) {
-      port.close();
-      expect(msg, equals('re: hi'));
-    }));
-
-    // Start new isolate; paused so it's alive till we read the debugName.
-    // If the isolate runs to completion, the isolate might get cleaned up
-    // and debugName might be null.
-    final isolate = await Isolate.spawn(
-        isolateEntryPoint, ['hi', port.sendPort],
-        paused: true, debugName: debugName);
-
-    expect(isolate.debugName, debugName);
-
-    isolate.resume(isolate.pauseCapability);
+  ReceivePort port = new ReceivePort();
+  asyncStart();
+  port.listen((msg) {
+    port.close();
+    Expect.equals(msg, 're: hi');
+    asyncEnd();
   });
+
+  // Start new isolate; paused so it's alive till we read the debugName.
+  // If the isolate runs to completion, the isolate might get cleaned up
+  // and debugName might be null.
+  final isolate = await Isolate.spawn(isolateEntryPoint, ['hi', port.sendPort],
+      paused: true, debugName: debugName);
+
+  Expect.equals(isolate.debugName, debugName);
+  isolate.resume(isolate.pauseCapability);
 }
diff --git a/tests/lib_2/isolate/static_function_test.dart b/tests/lib_2/isolate/static_function_test.dart
index b1e115e..1c785a5 100644
--- a/tests/lib_2/isolate/static_function_test.dart
+++ b/tests/lib_2/isolate/static_function_test.dart
@@ -10,10 +10,9 @@
 library static_function_test;
 
 import 'dart:isolate';
-import 'dart:async';
 import 'static_function_lib.dart' as lib;
-import 'package:unittest/unittest.dart';
-import 'remote_unittest_helper.dart';
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
 
 void function(SendPort port) {
   port.send("TOP");
@@ -95,26 +94,28 @@
 }
 
 void spawnTest(name, function, response) {
-  test(name, () {
-    ReceivePort r = new ReceivePort();
-    Isolate.spawn(function, r.sendPort);
-    r.listen(expectAsync((v) {
-      expect(v, response);
-      r.close();
-    }));
+  print(name);
+  ReceivePort r = new ReceivePort();
+  Isolate.spawn(function, r.sendPort);
+  asyncStart();
+  r.listen((v) {
+    Expect.equals(v, response);
+    r.close();
+    asyncEnd();
   });
 }
 
 void functionFailTest(name, function) {
-  test("throws on $name", () {
-    Isolate.spawn(function, null).catchError(expectAsync((e) {
-      /* do nothing */
-    }));
+  print("throws on $name");
+  asyncStart();
+  Isolate.spawn(function, null).catchError((e) {
+    /* do nothing */
+    asyncEnd();
   });
 }
 
 void main([args, port]) {
-  if (testRemote(main, port)) return;
+  asyncStart();
   // Sanity check.
   spawnTest("function", function, "TOP");
   spawnTest("_function", _function, "_TOP");
@@ -144,4 +145,5 @@
   functionFailTest(
       "named constructor closure", new C().namedConstructorBodyClosure);
   functionFailTest("instance method", new C().instanceMethod);
+  asyncEnd();
 }
diff --git a/tests/lib_2/isolate/unresolved_ports_test.dart b/tests/lib_2/isolate/unresolved_ports_test.dart
index 78bef1a..7707fab 100644
--- a/tests/lib_2/isolate/unresolved_ports_test.dart
+++ b/tests/lib_2/isolate/unresolved_ports_test.dart
@@ -10,8 +10,8 @@
 
 import 'dart:async';
 import 'dart:isolate';
-import 'package:unittest/unittest.dart';
-import "remote_unittest_helper.dart";
+import 'package:async_helper/async_helper.dart';
+import 'package:expect/expect.dart';
 
 // This test does the following:
 //  - main spawns two isolates: 'tim' and 'beth'
@@ -57,32 +57,27 @@
 }
 
 baseTest({bool failForNegativeTest: false}) {
-  test('Message chain with unresolved ports', () {
-    ReceivePort port = new ReceivePort();
-    port.listen(expectAsync((msg) {
-      expect(
-          msg,
-          equals('main says: Beth, find out if Tim is coming.'
-              '\nBeth says: Tim are you coming? And Bob?'
-              '\nTim says: Can you tell "main" that we are all coming?'
-              '\nBob says: we are all coming!'));
-      expect(failForNegativeTest, isFalse);
-      port.close();
-    }));
+  // Message chain with unresolved ports
+  ReceivePort port = new ReceivePort();
+  asyncStart();
+  port.listen((msg) {
+    Expect.equals(
+        msg,
+        'main says: Beth, find out if Tim is coming.'
+        '\nBeth says: Tim are you coming? And Bob?'
+        '\nTim says: Can you tell "main" that we are all coming?'
+        '\nBob says: we are all coming!');
+    Expect.isFalse(failForNegativeTest);
+    port.close();
+    asyncEnd();
+  });
 
-    spawnFunction(timIsolate).then((tim) {
-      spawnFunction(bethIsolate).then((beth) {
-        beth.send([
-          'main says: Beth, find out if Tim is coming.',
-          tim,
-          port.sendPort
-        ]);
-      });
+  spawnFunction(timIsolate).then((tim) {
+    spawnFunction(bethIsolate).then((beth) {
+      beth.send(
+          ['main says: Beth, find out if Tim is coming.', tim, port.sendPort]);
     });
   });
 }
 
-void main([args, port]) {
-  if (testRemote(main, port)) return;
-  baseTest();
-}
+void main([args, port]) => baseTest();
diff --git a/tests/search/.blazeproject b/tests/search/.blazeproject
deleted file mode 100644
index feb408a..0000000
--- a/tests/search/.blazeproject
+++ /dev/null
@@ -1,7 +0,0 @@
-directories:
-  crm/greentea/fe3/service/search
-
-targets:
-  //crm/greentea/fe3/service/search/...:all
-additional_languages:
-  dart
\ No newline at end of file
diff --git a/tests/standalone/io/addlatexhash_test.dart b/tests/standalone/io/addlatexhash_test.dart
index fe8c166..50c778a 100755
--- a/tests/standalone/io/addlatexhash_test.dart
+++ b/tests/standalone/io/addlatexhash_test.dart
@@ -73,8 +73,7 @@
   // file names/paths for file containing groups of 8 variants of a paragraph
   const par8timesName = "addlatexhash_test_src";
   const par8timesFileName = "$par8timesName.tex";
-  final par8timesDirPath =
-      path.join(dartRootDir, "tests", "standalone_2", "io");
+  final par8timesDirPath = path.join(dartRootDir, "tests", "standalone", "io");
   final par8timesPath = path.join(par8timesDirPath, par8timesFileName);
   final tmpPar8timesPath = path.join(tmpDirPath, par8timesFileName);
 
diff --git a/tests/standalone/io/dart_std_io_pipe_test.dart b/tests/standalone/io/dart_std_io_pipe_test.dart
index 7d3e6fc..3163d7e 100644
--- a/tests/standalone/io/dart_std_io_pipe_test.dart
+++ b/tests/standalone/io/dart_std_io_pipe_test.dart
@@ -105,16 +105,15 @@
 
   // Get the shell script for testing the Standalone Dart VM with
   // piping and redirections of stdio.
-  var shellScript = new File("tests/standalone_2/io/dart_std_io_pipe_test.sh");
+  var shellScript = new File("tests/standalone/io/dart_std_io_pipe_test.sh");
   if (!shellScript.existsSync()) {
-    shellScript = new File("../tests/standalone_2/io/dart_std_io_pipe_test.sh");
+    shellScript = new File("../tests/standalone/io/dart_std_io_pipe_test.sh");
   }
   // Get the Dart script file which echoes stdin to stdout or stderr or both.
-  var scriptFile =
-      new File("tests/standalone_2/io/dart_std_io_pipe_script.dart");
+  var scriptFile = new File("tests/standalone/io/dart_std_io_pipe_script.dart");
   if (!scriptFile.existsSync()) {
     scriptFile =
-        new File("../tests/standalone_2/io/dart_std_io_pipe_script.dart");
+        new File("../tests/standalone/io/dart_std_io_pipe_script.dart");
   }
 
   // Run the shell script.
diff --git a/tests/standalone/io/directory_fuzz_test.dart b/tests/standalone/io/directory_fuzz_test.dart
index f76fc79..358bcff 100644
--- a/tests/standalone/io/directory_fuzz_test.dart
+++ b/tests/standalone/io/directory_fuzz_test.dart
@@ -18,9 +18,10 @@
     doItSync(() {
       Directory.systemTemp.createTempSync(v as String?).deleteSync();
     });
-    late Directory d;
-    doItSync(() => d = new Directory(v as String));
-    if (d == null) return;
+    Directory? directory;
+    doItSync(() => directory = new Directory(v as String));
+    if (directory == null) return;
+    final d = directory!;
     doItSync(d.existsSync);
     doItSync(d.createSync);
     doItSync(d.deleteSync);
diff --git a/tests/standalone/io/file_fuzz_test.dart b/tests/standalone/io/file_fuzz_test.dart
index 82dd4ac..f7f89c8 100644
--- a/tests/standalone/io/file_fuzz_test.dart
+++ b/tests/standalone/io/file_fuzz_test.dart
@@ -15,9 +15,10 @@
 
 fuzzSyncMethods() {
   typeMapping.forEach((k, v) {
-    late File f;
-    doItSync(() => f = new File(v as String));
-    if (f == null) return;
+    File? file;
+    doItSync(() => file = new File(v as String));
+    if (file == null) return;
+    final f = file!;
     doItSync(f.existsSync);
     doItSync(f.createSync);
     doItSync(f.deleteSync);
@@ -41,9 +42,10 @@
   asyncStart();
   var futures = <Future>[];
   typeMapping.forEach((k, v) {
-    late File f;
-    doItSync(() => f = new File(v as String));
-    if (f == null) return;
+    File? file;
+    doItSync(() => file = new File(v as String));
+    if (file == null) return;
+    final f = file!;
     futures.add(doItAsync(f.exists));
     futures.add(doItAsync(f.delete));
     futures.add(doItAsync(() => f.parent));
diff --git a/tests/standalone/io/http_headers_test.dart b/tests/standalone/io/http_headers_test.dart
index d1d0b8c..5617498 100644
--- a/tests/standalone/io/http_headers_test.dart
+++ b/tests/standalone/io/http_headers_test.dart
@@ -259,6 +259,25 @@
   }
 
   HeaderValue headerValue;
+  headerValue = HeaderValue.parse("");
+  check(headerValue, "", {});
+  headerValue = HeaderValue.parse(";");
+  check(headerValue, "", {});
+  headerValue = HeaderValue.parse(";;");
+  check(headerValue, "", {});
+  headerValue = HeaderValue.parse("v;a");
+  check(headerValue, "v", {"a": null});
+  headerValue = HeaderValue.parse("v;a=");
+  check(headerValue, "v", {"a": ""});
+  Expect.throws(() => HeaderValue.parse("v;a=\""), (e) => e is HttpException);
+  headerValue = HeaderValue.parse("v;a=\"\"");
+  check(headerValue, "v", {"a": ""});
+  Expect.throws(() => HeaderValue.parse("v;a=\"\\"), (e) => e is HttpException);
+  Expect.throws(
+      () => HeaderValue.parse("v;a=\";b=\"c\""), (e) => e is HttpException);
+  Expect.throws(() => HeaderValue.parse("v;a=b c"), (e) => e is HttpException);
+  headerValue = HeaderValue.parse("æ;ø=å");
+  check(headerValue, "æ", {"ø": "å"});
   headerValue =
       HeaderValue.parse("xxx; aaa=bbb; ccc=\"\\\";\\a\"; ddd=\"    \"");
   check(headerValue, "xxx", {"aaa": "bbb", "ccc": '\";a', "ddd": "    "});
@@ -280,6 +299,24 @@
   check(headerValue, "attachment", parameters);
   headerValue = HeaderValue.parse("xxx; aaa; bbb; ccc");
   check(headerValue, "xxx", {"aaa": null, "bbb": null, "ccc": null});
+
+  Expect.equals("", HeaderValue().toString());
+  Expect.equals("", HeaderValue("").toString());
+  Expect.equals("v", HeaderValue("v").toString());
+  Expect.equals("v", HeaderValue("v", {}).toString());
+  Expect.equals("v; ", HeaderValue("v", {"": null}).toString());
+  Expect.equals("v; a", HeaderValue("v", {"a": null}).toString());
+  Expect.equals("v; a; b", HeaderValue("v", {"a": null, "b": null}).toString());
+  Expect.equals(
+      "v; a; b=c", HeaderValue("v", {"a": null, "b": "c"}).toString());
+  Expect.equals(
+      "v; a=c; b", HeaderValue("v", {"a": "c", "b": null}).toString());
+  Expect.equals("v; a=\"\"", HeaderValue("v", {"a": ""}).toString());
+  Expect.equals("v; a=\"b c\"", HeaderValue("v", {"a": "b c"}).toString());
+  Expect.equals("v; a=\",\"", HeaderValue("v", {"a": ","}).toString());
+  Expect.equals(
+      "v; a=\"\\\\\\\"\"", HeaderValue("v", {"a": "\\\""}).toString());
+  Expect.equals("v; a=\"ø\"", HeaderValue("v", {"a": "ø"}).toString());
 }
 
 void testContentType() {
@@ -352,7 +389,7 @@
   check(contentType, "text", "html", {"charset": "utf-8", "xxx": "yyy"});
 
   contentType = ContentType.parse("text/html; charset=;");
-  check(contentType, "text", "html", {"charset": null});
+  check(contentType, "text", "html", {"charset": ""});
   contentType = ContentType.parse("text/html; charset;");
   check(contentType, "text", "html", {"charset": null});
 
diff --git a/tests/standalone/io/internet_address_test.dart b/tests/standalone/io/internet_address_test.dart
index 1832207..493957e 100644
--- a/tests/standalone/io/internet_address_test.dart
+++ b/tests/standalone/io/internet_address_test.dart
@@ -3,6 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:io';
+import 'dart:convert';
+import 'dart:typed_data';
 
 import "package:expect/expect.dart";
 
@@ -131,10 +133,40 @@
   });
 }
 
+void testRawAddress() {
+  Uint8List addr = Uint8List.fromList([127, 0, 0, 1]);
+  var address = InternetAddress.fromRawAddress(addr);
+  Expect.equals('127.0.0.1', address.address);
+  Expect.equals(address.address, address.host);
+  Expect.equals(InternetAddressType.IPv4, address.type);
+}
+
+void testRawAddressIPv6() {
+  Uint8List addr =
+      Uint8List.fromList([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]);
+  var address = InternetAddress.fromRawAddress(addr);
+  Expect.equals('::1', address.address);
+  Expect.equals(address.address, address.host);
+  Expect.equals(InternetAddressType.IPv6, address.type);
+}
+
+void testRawPath() {
+  var name = 'test_raw_path';
+  Uint8List path = Uint8List.fromList(utf8.encode(name));
+  var address =
+      InternetAddress.fromRawAddress(path, type: InternetAddressType.unix);
+  Expect.equals(name, address.address);
+  Expect.equals(address.address, address.host);
+  Expect.equals(InternetAddressType.unix, address.type);
+}
+
 void main() {
   testDefaultAddresses();
   testConstructor();
   testEquality();
   testLookup();
   testReverseLookup();
+  testRawAddress();
+  testRawAddressIPv6();
+  testRawPath();
 }
diff --git a/tests/standalone/io/io_override_test.dart b/tests/standalone/io/io_override_test.dart
index aafa0ff..03c41af 100644
--- a/tests/standalone/io/io_override_test.dart
+++ b/tests/standalone/io/io_override_test.dart
@@ -7,6 +7,7 @@
 import 'dart:io';
 import 'dart:typed_data';
 
+import "package:async_helper/async_helper.dart";
 import "package:expect/expect.dart";
 
 class DirectoryMock extends FileSystemEntity implements Directory {
@@ -127,9 +128,12 @@
   }
 }
 
+final _mockFileSystemEvent = new Stream<FileSystemEvent>.empty();
+
 class FileSystemWatcherMock {
   static Stream<FileSystemEvent> watch(
-      String path, int events, bool recursive) async* {}
+          String path, int events, bool recursive) =>
+      _mockFileSystemEvent;
 
   static bool watchSupported() => false;
 }
@@ -187,11 +191,12 @@
       Expect.equals(
           FileSystemEntity.typeSync("file"), FileSystemEntityType.file);
       Expect.isFalse(FileSystemEntity.isWatchSupported);
-      Expect.isNull(new Directory("directory").watch());
+      Expect.identical(
+          _mockFileSystemEvent, new Directory("directory").watch());
       Expect.isTrue(new Link("link") is LinkMock);
-      Expect.isNull(Socket.connect(null, 0));
-      Expect.isNull(Socket.startConnect(null, 0));
-      Expect.isNull(ServerSocket.bind(null, 0));
+      asyncExpectThrows(() async => await Socket.connect(null, 0));
+      asyncExpectThrows(() async => await Socket.startConnect(null, 0));
+      asyncExpectThrows(() async => await ServerSocket.bind(null, 0));
     },
     createDirectory: DirectoryMock.createDirectory,
     getCurrentDirectory: DirectoryMock.getCurrent,
diff --git a/tests/standalone/io/platform_test.dart b/tests/standalone/io/platform_test.dart
index e337c5c..64ac7d0 100644
--- a/tests/standalone/io/platform_test.dart
+++ b/tests/standalone/io/platform_test.dart
@@ -46,8 +46,8 @@
   // Move directory to be sure script is correct.
   var oldDir = Directory.current;
   Directory.current = Directory.current.parent;
-  Expect.isTrue(Platform.script.path
-      .endsWith('tests/standalone_2/io/platform_test.dart'));
+  Expect.isTrue(
+      Platform.script.path.endsWith('tests/standalone/io/platform_test.dart'));
   Expect.isTrue(Platform.script.toFilePath().startsWith(oldDir.path));
   // Restore dir.
   Directory.current = oldDir;
@@ -87,8 +87,7 @@
     // SpawnFunction retains the script url of the parent which in this
     // case was a relative path.
     Expect.equals("file", uri.scheme);
-    Expect.isTrue(
-        uri.path.endsWith('tests/standalone_2/io/platform_test.dart'));
+    Expect.isTrue(uri.path.endsWith('tests/standalone/io/platform_test.dart'));
     Expect.equals(Platform.packageRoot, results["Platform.packageRoot"]);
     Expect.listEquals(
         Platform.executableArguments, results["Platform.executableArguments"]);
@@ -99,7 +98,10 @@
 testVersion() {
   checkValidVersion(String version) {
     RegExp re = new RegExp(r'(\d+)\.(\d+)\.(\d+)(-dev\.([^\.]*)\.([^\.]*))?');
-    var match = re.firstMatch(version)!;
+    var match = re.firstMatch(version);
+    if (match == null) {
+      throw new FormatException();
+    }
     var major = int.parse(match.group(1)!);
     // Major version.
     Expect.isTrue(major == 1 || major == 2);
diff --git a/tests/standalone/io/process_check_arguments_test.dart b/tests/standalone/io/process_check_arguments_test.dart
index c79c00e..f6bfd0b 100644
--- a/tests/standalone/io/process_check_arguments_test.dart
+++ b/tests/standalone/io/process_check_arguments_test.dart
@@ -22,10 +22,10 @@
 main() {
   // Get the Dart script file which checks arguments.
   var scriptFile =
-      new File("tests/standalone_2/io/process_check_arguments_script.dart");
+      new File("tests/standalone/io/process_check_arguments_script.dart");
   if (!scriptFile.existsSync()) {
-    scriptFile = new File(
-        "../tests/standalone_2/io/process_check_arguments_script.dart");
+    scriptFile =
+        new File("../tests/standalone/io/process_check_arguments_script.dart");
   }
   test([scriptFile.path, '3', '0', 'a']);
   test([scriptFile.path, '3', '0', 'a b']);
diff --git a/tests/standalone/io/process_environment_test.dart b/tests/standalone/io/process_environment_test.dart
index ca56130..8d46681 100644
--- a/tests/standalone/io/process_environment_test.dart
+++ b/tests/standalone/io/process_environment_test.dart
@@ -12,7 +12,7 @@
 runEnvironmentProcess(
     Map<String, String> environment, name, includeParent, callback) {
   var dartExecutable = Platform.executable;
-  var printEnv = 'tests/standalone_2/io/print_env.dart';
+  var printEnv = 'tests/standalone/io/print_env.dart';
   if (!new File(printEnv).existsSync()) {
     printEnv = '../$printEnv';
   }
diff --git a/tests/standalone/io/process_run_output_test.dart b/tests/standalone/io/process_run_output_test.dart
index 11b111a..c9fb7ae 100644
--- a/tests/standalone/io/process_run_output_test.dart
+++ b/tests/standalone/io/process_run_output_test.dart
@@ -55,11 +55,9 @@
 }
 
 main() {
-  var scriptFile =
-      new File("tests/standalone_2/io/process_std_io_script2.dart");
+  var scriptFile = new File("tests/standalone/io/process_std_io_script2.dart");
   if (!scriptFile.existsSync()) {
-    scriptFile =
-        new File("../tests/standalone_2/io/process_std_io_script2.dart");
+    scriptFile = new File("../tests/standalone/io/process_std_io_script2.dart");
   }
   Expect.isTrue(scriptFile.existsSync());
   test(scriptFile.path, 'ascii', 'stdout');
diff --git a/tests/standalone/io/process_stderr_test.dart b/tests/standalone/io/process_stderr_test.dart
index 0492fe2..904377c 100644
--- a/tests/standalone/io/process_stderr_test.dart
+++ b/tests/standalone/io/process_stderr_test.dart
@@ -61,10 +61,9 @@
 
   // Run the test using the dart binary with an echo script.
   // The test runner can be run from either the root or from runtime.
-  var scriptFile = new File("tests/standalone_2/io/process_std_io_script.dart");
+  var scriptFile = new File("tests/standalone/io/process_std_io_script.dart");
   if (!scriptFile.existsSync()) {
-    scriptFile =
-        new File("../tests/standalone_2/io/process_std_io_script.dart");
+    scriptFile = new File("../tests/standalone/io/process_std_io_script.dart");
   }
   Expect.isTrue(scriptFile.existsSync());
   test(
diff --git a/tests/standalone/io/process_stdin_transform_unsubscribe_test.dart b/tests/standalone/io/process_stdin_transform_unsubscribe_test.dart
index fa36a06..5d8b6e2 100644
--- a/tests/standalone/io/process_stdin_transform_unsubscribe_test.dart
+++ b/tests/standalone/io/process_stdin_transform_unsubscribe_test.dart
@@ -33,9 +33,9 @@
 
 main() {
   var scriptName = "process_stdin_transform_unsubscribe_script.dart";
-  var scriptFile = new File("tests/standalone_2/io/$scriptName");
+  var scriptFile = new File("tests/standalone/io/$scriptName");
   if (!scriptFile.existsSync()) {
-    scriptFile = new File("../tests/standalone_2/io/$scriptName");
+    scriptFile = new File("../tests/standalone/io/$scriptName");
   }
   Expect.isTrue(scriptFile.existsSync());
   test(
diff --git a/tests/standalone/io/process_stdout_test.dart b/tests/standalone/io/process_stdout_test.dart
index 7d3bc7f..10c27f7 100644
--- a/tests/standalone/io/process_stdout_test.dart
+++ b/tests/standalone/io/process_stdout_test.dart
@@ -59,10 +59,9 @@
 
   // Run the test using the dart binary with an echo script.
   // The test runner can be run from either the root or from runtime.
-  var scriptFile = new File("tests/standalone_2/io/process_std_io_script.dart");
+  var scriptFile = new File("tests/standalone/io/process_std_io_script.dart");
   if (!scriptFile.existsSync()) {
-    scriptFile =
-        new File("../tests/standalone_2/io/process_std_io_script.dart");
+    scriptFile = new File("../tests/standalone/io/process_std_io_script.dart");
   }
   Expect.isTrue(scriptFile.existsSync());
   test(
diff --git a/tests/standalone/io/raw_synchronous_socket_test.dart b/tests/standalone/io/raw_synchronous_socket_test.dart
index 74a82f2..50cb0f2 100644
--- a/tests/standalone/io/raw_synchronous_socket_test.dart
+++ b/tests/standalone/io/raw_synchronous_socket_test.dart
@@ -419,7 +419,7 @@
   asyncEnd();
 }
 
-Future testInvalidReadWriteOperations() {
+void testInvalidReadWriteOperations() {
   asyncStart();
   RawServerSocket.bind(InternetAddress.loopbackIPv4, 0).then((server) {
     server.listen((socket) {});
diff --git a/tests/standalone/io/resolve_symbolic_links_test.dart b/tests/standalone/io/resolve_symbolic_links_test.dart
index 57561db..9ff0e9e 100644
--- a/tests/standalone/io/resolve_symbolic_links_test.dart
+++ b/tests/standalone/io/resolve_symbolic_links_test.dart
@@ -16,16 +16,16 @@
   // All of these tests test that resolveSymbolicLinks gives a path
   // that points to the same place as the original, and that it removes
   // all links, .., and . segments, and that it produces an absolute path.
-  asyncTest(() => testFile(join(
-      testsDir, 'standalone_2', 'io', 'resolve_symbolic_links_test.dart')));
-  asyncTest(() => testFile(join(testsDir, 'standalone_2', 'io', '..', 'io',
+  asyncTest(() => testFile(
+      join(testsDir, 'standalone', 'io', 'resolve_symbolic_links_test.dart')));
+  asyncTest(() => testFile(join(testsDir, 'standalone', 'io', '..', 'io',
       'resolve_symbolic_links_test.dart')));
 
-  asyncTest(() => testDir(join(testsDir, 'standalone_2', 'io')));
-  asyncTest(() => testDir(join(testsDir, 'lib_2', '..', 'standalone_2', 'io')));
+  asyncTest(() => testDir(join(testsDir, 'standalone', 'io')));
+  asyncTest(() => testDir(join(testsDir, 'lib_2', '..', 'standalone', 'io')));
   // Test a relative path.
   if (Platform.isWindows) {
-    asyncTest(() => testFile(join('\\\\?\\$testsDir', 'standalone_2', 'io',
+    asyncTest(() => testFile(join('\\\\?\\$testsDir', 'standalone', 'io',
         'resolve_symbolic_links_test.dart')));
     asyncTest(() => testDir('\\\\?\\$testsDir'));
   }
diff --git a/tests/standalone/io/secure_server_client_certificate_test.dart b/tests/standalone/io/secure_server_client_certificate_test.dart
index 18ae856..2223d3e 100644
--- a/tests/standalone/io/secure_server_client_certificate_test.dart
+++ b/tests/standalone/io/secure_server_client_certificate_test.dart
@@ -67,7 +67,7 @@
       : clientNoCertContext(certType, password);
   var clientEndFuture =
       SecureSocket.connect(HOST, server.port, context: clientContext);
-  if (required && sendCert) {
+  if (required && !sendCert) {
     try {
       await server.first;
     } catch (e) {
diff --git a/tests/standalone/io/socket_from_raw_path_test.dart b/tests/standalone/io/socket_from_raw_path_test.dart
new file mode 100644
index 0000000..757bf37
--- /dev/null
+++ b/tests/standalone/io/socket_from_raw_path_test.dart
@@ -0,0 +1,73 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:convert';
+import 'dart:io';
+import 'dart:typed_data';
+
+import 'package:expect/expect.dart';
+
+Future testAddress(Uint8List name, String addr,
+    {InternetAddressType? type}) async {
+  var address = InternetAddress.fromRawAddress(name, type: type);
+  Expect.equals(address.address, addr);
+  var server = await ServerSocket.bind(address, 0);
+  var client = await Socket.connect(address, server.port);
+  var completer = Completer();
+  server.listen((socket) async {
+    Expect.equals(socket.port, server.port);
+    Expect.equals(client.port, socket.remotePort);
+    Expect.equals(client.remotePort, socket.port);
+
+    Expect.equals(client.remoteAddress, address);
+    socket.destroy();
+    client.destroy();
+    await server.close();
+    completer.complete();
+  });
+  await completer.future;
+}
+
+Future<void> testUnixAddress() async {
+  Directory dir = Directory.systemTemp.createTempSync();
+  var name = 'raw_path_test';
+  try {
+    final file = File('${dir.path}/$name');
+    Uint8List path = Uint8List.fromList(utf8.encode(file.path));
+    var address =
+        InternetAddress.fromRawAddress(path, type: InternetAddressType.unix);
+    Expect.isTrue(address.address.toString().endsWith(name));
+
+    // Test socket
+    var server = await ServerSocket.bind(address, 0);
+    var client = await Socket.connect(address, server.port);
+    var completer = Completer<void>();
+    server.listen((socket) async {
+      Expect.equals(socket.port, server.port);
+      Expect.equals(client.port, socket.remotePort);
+      Expect.equals(client.remotePort, socket.port);
+
+      Expect.equals(client.remoteAddress, address);
+      socket.destroy();
+      client.destroy();
+      await server.close();
+      completer.complete();
+    });
+    await completer.future;
+  } finally {
+    dir.deleteSync(recursive: true);
+  }
+}
+
+void main() async {
+  // Test for internet address ipv4 ('127.0.0.1').
+  Uint8List addr = Uint8List.fromList([127, 0, 0, 1]);
+  await testAddress(addr, '127.0.0.1');
+
+  // Test unix socket
+  if (Platform.isMacOS || Platform.isLinux || Platform.isAndroid) {
+    await testUnixAddress();
+  }
+}
diff --git a/tests/standalone/io/socket_info_ipv6_test.dart b/tests/standalone/io/socket_info_ipv6_test.dart
index 11920fb..7c15b7d 100644
--- a/tests/standalone/io/socket_info_ipv6_test.dart
+++ b/tests/standalone/io/socket_info_ipv6_test.dart
@@ -2,8 +2,11 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import "package:expect/expect.dart";
+import "dart:async";
 import "dart:io";
+import "dart:typed_data";
+
+import "package:expect/expect.dart";
 
 void testHostAndPort() {
   ServerSocket.bind("::1", 0).then((server) {
@@ -29,6 +32,30 @@
   });
 }
 
-void main() {
+Future<void> testRawAddress() async {
+  var list =
+      Uint8List.fromList([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]);
+  var addr = '::1';
+  var address = InternetAddress.fromRawAddress(list);
+  Expect.equals(address.address, addr);
+  var server = await ServerSocket.bind(address, 0);
+  var client = await Socket.connect(address, server.port);
+  var completer = Completer<void>();
+  server.listen((socket) async {
+    Expect.equals(socket.port, server.port);
+    Expect.equals(client.port, socket.remotePort);
+    Expect.equals(client.remotePort, socket.port);
+
+    Expect.equals(client.remoteAddress, address);
+    socket.destroy();
+    client.destroy();
+    await server.close();
+    completer.complete();
+  });
+  await completer.future;
+}
+
+void main() async {
   testHostAndPort();
+  await testRawAddress();
 }
diff --git a/tests/standalone/io/test_extension_test.dart b/tests/standalone/io/test_extension_test.dart
index e69ae28..fc7caef 100644
--- a/tests/standalone/io/test_extension_test.dart
+++ b/tests/standalone/io/test_extension_test.dart
@@ -21,6 +21,7 @@
     default:
       Expect.fail('Unknown operating system ${Platform.operatingSystem}');
   }
+  throw 'Unknown operating system ${Platform.operatingSystem}';
 }
 
 // Returns a list containing the source file name in the first element and the
@@ -37,6 +38,7 @@
     default:
       Expect.fail('Unknown operating system ${Platform.operatingSystem}');
   }
+  throw 'Unknown operating system ${Platform.operatingSystem}';
 }
 
 String getExtensionPath(String buildDirectory, String filename) {
diff --git a/tests/standalone/io/unix_socket_test.dart b/tests/standalone/io/unix_socket_test.dart
new file mode 100644
index 0000000..cc6ed79
--- /dev/null
+++ b/tests/standalone/io/unix_socket_test.dart
@@ -0,0 +1,174 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:io';
+
+import 'package:expect/expect.dart';
+
+Future testAddress(String name) async {
+  var address = InternetAddress('$name/sock', type: InternetAddressType.unix);
+  var server = await ServerSocket.bind(address, 0);
+
+  var type = FileSystemEntity.typeSync(address.address);
+
+  var client = await Socket.connect(address, server.port);
+  var completer = Completer<void>();
+  server.listen((socket) async {
+    Expect.equals(socket.port, 0);
+    Expect.equals(socket.port, server.port);
+    Expect.equals(client.port, socket.remotePort);
+    Expect.equals(client.remotePort, socket.port);
+
+    // Client has not bound to a path. This is an unnamed socket.
+    Expect.equals(socket.remoteAddress.toString(), "InternetAddress('', Unix)");
+    Expect.equals(client.remoteAddress.toString(), address.toString());
+    socket.destroy();
+    client.destroy();
+    await server.close();
+    completer.complete();
+  });
+  await completer.future;
+}
+
+testBindShared(String name) async {
+  var address = InternetAddress('$name/sock', type: InternetAddressType.unix);
+  var socket = await ServerSocket.bind(address, 0, shared: true);
+  Expect.isTrue(socket.port == 0);
+
+  // Same path
+  var socket2 = await ServerSocket.bind(address, 0, shared: true);
+  Expect.equals(socket.address.address, socket2.address.address);
+  Expect.equals(socket.port, socket2.port);
+
+  // Test relative path
+  var path = name.substring(name.lastIndexOf('/') + 1);
+  address = InternetAddress('${name}/../${path}/sock',
+      type: InternetAddressType.unix);
+
+  var socket3 = await ServerSocket.bind(address, 0, shared: true);
+  Expect.isTrue(FileSystemEntity.identicalSync(
+      socket.address.address, socket3.address.address));
+  Expect.equals(socket.port, socket2.port);
+  await socket.close();
+  await socket2.close();
+  await socket3.close();
+}
+
+testBind(String name) async {
+  var address = InternetAddress('$name/sock', type: InternetAddressType.unix);
+  var server = await ServerSocket.bind(address, 0, shared: false);
+  Expect.isTrue(server.address.toString().contains(name));
+  // Unix domain socket does not have a valid port number.
+  Expect.equals(server.port, 0);
+
+  var type = FileSystemEntity.typeSync(address.address);
+
+  var sub;
+  sub = server.listen((s) {
+    sub.cancel();
+    server.close();
+  });
+
+  var socket = await Socket.connect(address, server.port);
+  socket.write(" socket content");
+
+  await socket.destroy();
+  await server.close();
+}
+
+Future testListenCloseListenClose(String name) async {
+  var address = InternetAddress('$name/sock', type: InternetAddressType.unix);
+  ServerSocket socket = await ServerSocket.bind(address, 0, shared: true);
+  ServerSocket socket2 =
+      await ServerSocket.bind(address, socket.port, shared: true);
+
+  // The second socket should have kept the OS socket alive. We can therefore
+  // test if it is working correctly.
+  await socket.close();
+
+  var type = FileSystemEntity.typeSync(address.address);
+
+  // For robustness we ignore any clients unrelated to this test.
+  List<int> sendData = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
+  socket2.listen((Socket client) async {
+    client.add(sendData);
+    await Future.wait([client.drain(), client.close()]);
+  });
+
+  final client = await Socket.connect(address, socket2.port);
+  List<int> data = [];
+  var completer = Completer<void>();
+  client.listen(data.addAll, onDone: () {
+    Expect.listEquals(sendData, data);
+    completer.complete();
+  });
+  await completer.future;
+  await client.close();
+
+  // Close the second server socket.
+  await socket2.close();
+}
+
+Future testSourceAddressConnect(String name) async {
+  var address = InternetAddress('$name/sock', type: InternetAddressType.unix);
+  ServerSocket server = await ServerSocket.bind(address, 0);
+
+  var completer = Completer<void>();
+  var localAddress =
+      InternetAddress('$name/local', type: InternetAddressType.unix);
+  server.listen((Socket socket) async {
+    Expect.equals(socket.address.address, address.address);
+    Expect.equals(socket.remoteAddress.address, localAddress.address);
+    socket.drain();
+    socket.close();
+    completer.complete();
+  });
+
+  var type = FileSystemEntity.typeSync(address.address);
+
+  Socket client =
+      await Socket.connect(address, server.port, sourceAddress: localAddress);
+  Expect.equals(client.remoteAddress.address, address.address);
+  await completer.future;
+  await client.close();
+  await client.drain();
+  await server.close();
+}
+
+// Create socket in temp directory
+Future withTempDir(String prefix, void test(Directory dir)) async {
+  var tempDir = Directory.systemTemp.createTempSync(prefix);
+  try {
+    await test(tempDir);
+  } finally {
+    tempDir.deleteSync(recursive: true);
+  }
+}
+
+void main() async {
+  try {
+    await withTempDir('unix_socket_test', (Directory dir) async {
+      await testAddress('${dir.path}');
+    });
+    await withTempDir('unix_socket_test', (Directory dir) async {
+      await testBind('${dir.path}');
+    });
+    await withTempDir('unix_socket_test', (Directory dir) async {
+      await testBindShared('${dir.path}');
+    });
+    await withTempDir('unix_socket_test', (Directory dir) async {
+      await testListenCloseListenClose('${dir.path}');
+    });
+    await withTempDir('unix_socket_test', (Directory dir) async {
+      await testSourceAddressConnect('${dir.path}');
+    });
+  } catch (e) {
+    if (Platform.isMacOS || Platform.isLinux || Platform.isAndroid) {
+      Expect.fail("Unexpected exceptions are thrown");
+    } else {
+      Expect.isTrue(e is SocketException);
+    }
+  }
+}
diff --git a/tests/standalone/io/web_socket_ping_test.dart b/tests/standalone/io/web_socket_ping_test.dart
index 3960958..ef6169d 100644
--- a/tests/standalone/io/web_socket_ping_test.dart
+++ b/tests/standalone/io/web_socket_ping_test.dart
@@ -36,20 +36,22 @@
       response.headers.add("Sec-WebSocket-Accept", accept);
       response.headers.contentLength = 0;
       response.detachSocket().then((socket) {
-        socket.drain().then((_) {
-          socket.close();
-          closed++;
-          if (closed == totalConnections) {
-            server.close();
-          }
-        });
+        socket.destroy();
       });
     });
 
+    int closeCount = 0;
     for (int i = 0; i < totalConnections; i++) {
       WebSocket.connect('ws://localhost:${server.port}').then((webSocket) {
         webSocket.pingInterval = const Duration(milliseconds: 100);
-        webSocket.drain();
+        webSocket.listen((message) {
+          Expect.fail("unexpected message");
+        }, onDone: () {
+          closeCount++;
+          if (closeCount == totalConnections) {
+            server.close();
+          }
+        });
       });
     }
   });
diff --git a/tests/standalone_2/dwarf_stack_trace_obfuscate_test.dart b/tests/standalone_2/dwarf_stack_trace_obfuscate_test.dart
index 60f7bb7..37fd305 100644
--- a/tests/standalone_2/dwarf_stack_trace_obfuscate_test.dart
+++ b/tests/standalone_2/dwarf_stack_trace_obfuscate_test.dart
@@ -49,12 +49,12 @@
   // The first frame should correspond to the throw in bar, which was inlined
   // into foo (so we'll get information for two calls for that PC address).
   [
-    CallInfo(
+    DartCallInfo(
         function: "bar",
         filename: "dwarf_stack_trace_obfuscate_test.dart",
         line: 17,
         inlined: true),
-    CallInfo(
+    DartCallInfo(
         function: "foo",
         filename: "dwarf_stack_trace_obfuscate_test.dart",
         line: 23,
@@ -62,7 +62,7 @@
   ],
   // The second frame corresponds to call to foo in main.
   [
-    CallInfo(
+    DartCallInfo(
         function: "main",
         filename: "dwarf_stack_trace_obfuscate_test.dart",
         line: 29,
diff --git a/tests/standalone_2/dwarf_stack_trace_test.dart b/tests/standalone_2/dwarf_stack_trace_test.dart
index fd811ca..bed8cfa 100644
--- a/tests/standalone_2/dwarf_stack_trace_test.dart
+++ b/tests/standalone_2/dwarf_stack_trace_test.dart
@@ -143,12 +143,12 @@
   // The first frame should correspond to the throw in bar, which was inlined
   // into foo (so we'll get information for two calls for that PC address).
   [
-    CallInfo(
+    DartCallInfo(
         function: "bar",
         filename: "dwarf_stack_trace_test.dart",
         line: 17,
         inlined: true),
-    CallInfo(
+    DartCallInfo(
         function: "foo",
         filename: "dwarf_stack_trace_test.dart",
         line: 23,
@@ -156,7 +156,7 @@
   ],
   // The second frame corresponds to call to foo in main.
   [
-    CallInfo(
+    DartCallInfo(
         function: "main",
         filename: "dwarf_stack_trace_test.dart",
         line: 29,
@@ -168,14 +168,14 @@
 
 List<List<CallInfo>> removeInternalCalls(List<List<CallInfo>> original) =>
     original
-        .map((frame) => frame.where((call) => call.line > 0).toList())
+        .map((frame) => frame.where((call) => !call.isInternal).toList())
         .toList();
 
 void checkConsistency(
     List<List<CallInfo>> externalFrames, List<List<CallInfo>> allFrames) {
   // We should have the same number of frames for both external-only
   // and combined call information.
-  Expect.equals(externalFrames.length, allFrames.length);
+  Expect.equals(allFrames.length, externalFrames.length);
 
   for (var frame in externalFrames) {
     // There should be no frames in either version where we failed to look up
@@ -185,7 +185,7 @@
     // External-only call information should only include call information with
     // positive line numbers.
     for (var call in frame) {
-      Expect.isTrue(call.line > 0);
+      Expect.isTrue(!call.isInternal);
     }
   }
 
@@ -200,11 +200,10 @@
   }
 
   // The information in the external-only and combined call information should
-  // be consistent for external frames.
-  for (var i = 0; i < allFrames.length; i++) {
-    if (externalFrames[i].isNotEmpty) {
-      Expect.listEquals(externalFrames[i], allFrames[i]);
-    }
+  // be consistent for externally visible calls.
+  final allFramesStripped = removeInternalCalls(allFrames);
+  for (var i = 0; i < allFramesStripped.length; i++) {
+    Expect.listEquals(allFramesStripped[i], externalFrames[i]);
   }
 }
 
@@ -218,15 +217,15 @@
   // non-positive line numbers match, as long as they're both non-positive.
   for (var i = 0; i < expectedInfo.length; i++) {
     for (var j = 0; j < expectedInfo[i].length; j++) {
-      final got = framesInfo[i][j];
-      final expected = expectedInfo[i][j];
-      Expect.equals(got.function, expected.function);
-      Expect.equals(got.inlined, expected.inlined);
-      Expect.equals(path.basename(got.filename), expected.filename);
-      if (expected.line > 0) {
-        Expect.equals(got.line, expected.line);
+      final DartCallInfo got = framesInfo[i][j];
+      final DartCallInfo expected = expectedInfo[i][j];
+      Expect.equals(expected.function, got.function);
+      Expect.equals(expected.inlined, got.inlined);
+      Expect.equals(expected.filename, path.basename(got.filename));
+      if (expected.isInternal) {
+        Expect.isTrue(got.isInternal);
       } else {
-        Expect.isTrue(got.line <= 0);
+        Expect.equals(expected.line, got.line);
       }
     }
   }
@@ -236,11 +235,13 @@
   var ret = <String>[];
   for (final frame in expectedCalls) {
     for (final call in frame) {
-      ret.add(call.function);
-      if (call.line > 0) {
-        ret.add("${call.filename}:${call.line}");
-      } else {
-        ret.add("${call.filename}:??");
+      if (call is DartCallInfo) {
+        ret.add(call.function);
+        if (call.isInternal) {
+          ret.add("${call.filename}:??");
+        } else {
+          ret.add("${call.filename}:${call.line}");
+        }
       }
     }
   }
diff --git a/tests/standalone_2/io/http_headers_test.dart b/tests/standalone_2/io/http_headers_test.dart
index d1d0b8c..1213e85 100644
--- a/tests/standalone_2/io/http_headers_test.dart
+++ b/tests/standalone_2/io/http_headers_test.dart
@@ -259,6 +259,25 @@
   }
 
   HeaderValue headerValue;
+  headerValue = HeaderValue.parse("");
+  check(headerValue, "", {});
+  headerValue = HeaderValue.parse(";");
+  check(headerValue, "", {});
+  headerValue = HeaderValue.parse(";;");
+  check(headerValue, "", {});
+  headerValue = HeaderValue.parse("v;a");
+  check(headerValue, "v", {"a": null});
+  headerValue = HeaderValue.parse("v;a=");
+  check(headerValue, "v", {"a": ""});
+  Expect.throws(() => HeaderValue.parse("v;a=\""), (e) => e is HttpException);
+  headerValue = HeaderValue.parse("v;a=\"\"");
+  check(headerValue, "v", {"a": ""});
+  Expect.throws(() => HeaderValue.parse("v;a=\"\\"), (e) => e is HttpException);
+  Expect.throws(
+      () => HeaderValue.parse("v;a=\";b=\"c\""), (e) => e is HttpException);
+  Expect.throws(() => HeaderValue.parse("v;a=b c"), (e) => e is HttpException);
+  headerValue = HeaderValue.parse("æ;ø=å");
+  check(headerValue, "æ", {"ø": "å"});
   headerValue =
       HeaderValue.parse("xxx; aaa=bbb; ccc=\"\\\";\\a\"; ddd=\"    \"");
   check(headerValue, "xxx", {"aaa": "bbb", "ccc": '\";a', "ddd": "    "});
@@ -280,6 +299,25 @@
   check(headerValue, "attachment", parameters);
   headerValue = HeaderValue.parse("xxx; aaa; bbb; ccc");
   check(headerValue, "xxx", {"aaa": null, "bbb": null, "ccc": null});
+
+  Expect.equals("", HeaderValue().toString());
+  Expect.equals("", HeaderValue("").toString());
+  Expect.equals("v", HeaderValue("v").toString());
+  Expect.equals("v", HeaderValue("v", null).toString());
+  Expect.equals("v", HeaderValue("v", {}).toString());
+  Expect.equals("v; ", HeaderValue("v", {"": null}).toString());
+  Expect.equals("v; a", HeaderValue("v", {"a": null}).toString());
+  Expect.equals("v; a; b", HeaderValue("v", {"a": null, "b": null}).toString());
+  Expect.equals(
+      "v; a; b=c", HeaderValue("v", {"a": null, "b": "c"}).toString());
+  Expect.equals(
+      "v; a=c; b", HeaderValue("v", {"a": "c", "b": null}).toString());
+  Expect.equals("v; a=\"\"", HeaderValue("v", {"a": ""}).toString());
+  Expect.equals("v; a=\"b c\"", HeaderValue("v", {"a": "b c"}).toString());
+  Expect.equals("v; a=\",\"", HeaderValue("v", {"a": ","}).toString());
+  Expect.equals(
+      "v; a=\"\\\\\\\"\"", HeaderValue("v", {"a": "\\\""}).toString());
+  Expect.equals("v; a=\"ø\"", HeaderValue("v", {"a": "ø"}).toString());
 }
 
 void testContentType() {
@@ -352,7 +390,7 @@
   check(contentType, "text", "html", {"charset": "utf-8", "xxx": "yyy"});
 
   contentType = ContentType.parse("text/html; charset=;");
-  check(contentType, "text", "html", {"charset": null});
+  check(contentType, "text", "html", {"charset": ""});
   contentType = ContentType.parse("text/html; charset;");
   check(contentType, "text", "html", {"charset": null});
 
diff --git a/tests/standalone_2/io/internet_address_test.dart b/tests/standalone_2/io/internet_address_test.dart
index 1832207..d35e91c 100644
--- a/tests/standalone_2/io/internet_address_test.dart
+++ b/tests/standalone_2/io/internet_address_test.dart
@@ -3,6 +3,8 @@
 // BSD-style license that can be found in the LICENSE file.
 
 import 'dart:io';
+import 'dart:convert';
+import 'dart:typed_data';
 
 import "package:expect/expect.dart";
 
@@ -131,10 +133,39 @@
   });
 }
 
+void testRawAddress() {
+  Uint8List addr = Uint8List.fromList([127, 0, 0, 1]);
+  var address = InternetAddress.fromRawAddress(addr);
+  Expect.equals('127.0.0.1', address.address);
+  Expect.equals(address.address, address.host);
+  Expect.equals(InternetAddressType.IPv4, address.type);
+}
+
+void testRawAddressIPv6() {
+  Uint8List addr =
+      Uint8List.fromList([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]);
+  var address = InternetAddress.fromRawAddress(addr);
+  Expect.equals('::1', address.address);
+  Expect.equals(address.address, address.host);
+  Expect.equals(InternetAddressType.IPv6, address.type);
+}
+
+void testRawPath() {
+  var name = 'test_raw_path';
+  var address = InternetAddress.fromRawAddress(utf8.encode(name),
+      type: InternetAddressType.unix);
+  Expect.equals(name, address.address);
+  Expect.equals(address.address, address.host);
+  Expect.equals(InternetAddressType.unix, address.type);
+}
+
 void main() {
   testDefaultAddresses();
   testConstructor();
   testEquality();
   testLookup();
   testReverseLookup();
+  testRawAddress();
+  testRawAddressIPv6();
+  testRawPath();
 }
diff --git a/tests/standalone_2/io/socket_from_raw_path_test.dart b/tests/standalone_2/io/socket_from_raw_path_test.dart
new file mode 100644
index 0000000..794f075
--- /dev/null
+++ b/tests/standalone_2/io/socket_from_raw_path_test.dart
@@ -0,0 +1,72 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:convert';
+import 'dart:io';
+import 'dart:typed_data';
+
+import 'package:expect/expect.dart';
+
+Future testAddress(Uint8List name, String addr,
+    {InternetAddressType type}) async {
+  var address = InternetAddress.fromRawAddress(name, type: type);
+  Expect.equals(address.address, addr);
+  var server = await ServerSocket.bind(address, 0);
+  var client = await Socket.connect(address, server.port);
+  var completer = Completer();
+  server.listen((socket) async {
+    Expect.equals(socket.port, server.port);
+    Expect.equals(client.port, socket.remotePort);
+    Expect.equals(client.remotePort, socket.port);
+
+    Expect.equals(client.remoteAddress, address);
+    socket.destroy();
+    client.destroy();
+    await server.close();
+    completer.complete();
+  });
+  await completer.future;
+}
+
+Future<void> testUnixAddress() async {
+  Directory dir = Directory.systemTemp.createTempSync();
+  var name = 'raw_path_test';
+  try {
+    var file = File('${dir.path}/$name');
+    var address = InternetAddress.fromRawAddress(utf8.encode(file.path),
+        type: InternetAddressType.unix);
+    Expect.isTrue(address.address.toString().endsWith(name));
+
+    // Test socket
+    var server = await ServerSocket.bind(address, 0);
+    var client = await Socket.connect(address, server.port);
+    var completer = Completer<void>();
+    server.listen((socket) async {
+      Expect.equals(socket.port, server.port);
+      Expect.equals(client.port, socket.remotePort);
+      Expect.equals(client.remotePort, socket.port);
+
+      Expect.equals(client.remoteAddress, address);
+      socket.destroy();
+      client.destroy();
+      await server.close();
+      completer.complete();
+    });
+    await completer.future;
+  } finally {
+    dir.deleteSync(recursive: true);
+  }
+}
+
+void main() async {
+  // Test for internet address ipv4 ('127.0.0.1').
+  Uint8List addr = Uint8List.fromList([127, 0, 0, 1]);
+  await testAddress(addr, '127.0.0.1');
+
+  // Test unix socket
+  if (Platform.isMacOS || Platform.isLinux || Platform.isAndroid) {
+    await testUnixAddress();
+  }
+}
diff --git a/tests/standalone_2/io/socket_info_ipv6_test.dart b/tests/standalone_2/io/socket_info_ipv6_test.dart
index 11920fb..7c15b7d 100644
--- a/tests/standalone_2/io/socket_info_ipv6_test.dart
+++ b/tests/standalone_2/io/socket_info_ipv6_test.dart
@@ -2,8 +2,11 @@
 // for details. All rights reserved. Use of this source code is governed by a
 // BSD-style license that can be found in the LICENSE file.
 
-import "package:expect/expect.dart";
+import "dart:async";
 import "dart:io";
+import "dart:typed_data";
+
+import "package:expect/expect.dart";
 
 void testHostAndPort() {
   ServerSocket.bind("::1", 0).then((server) {
@@ -29,6 +32,30 @@
   });
 }
 
-void main() {
+Future<void> testRawAddress() async {
+  var list =
+      Uint8List.fromList([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1]);
+  var addr = '::1';
+  var address = InternetAddress.fromRawAddress(list);
+  Expect.equals(address.address, addr);
+  var server = await ServerSocket.bind(address, 0);
+  var client = await Socket.connect(address, server.port);
+  var completer = Completer<void>();
+  server.listen((socket) async {
+    Expect.equals(socket.port, server.port);
+    Expect.equals(client.port, socket.remotePort);
+    Expect.equals(client.remotePort, socket.port);
+
+    Expect.equals(client.remoteAddress, address);
+    socket.destroy();
+    client.destroy();
+    await server.close();
+    completer.complete();
+  });
+  await completer.future;
+}
+
+void main() async {
   testHostAndPort();
+  await testRawAddress();
 }
diff --git a/tests/standalone_2/io/unix_socket_test.dart b/tests/standalone_2/io/unix_socket_test.dart
new file mode 100644
index 0000000..cc6ed79
--- /dev/null
+++ b/tests/standalone_2/io/unix_socket_test.dart
@@ -0,0 +1,174 @@
+// Copyright (c) 2020, the Dart project authors.  Please see the AUTHORS file
+// for details. All rights reserved. Use of this source code is governed by a
+// BSD-style license that can be found in the LICENSE file.
+
+import 'dart:async';
+import 'dart:io';
+
+import 'package:expect/expect.dart';
+
+Future testAddress(String name) async {
+  var address = InternetAddress('$name/sock', type: InternetAddressType.unix);
+  var server = await ServerSocket.bind(address, 0);
+
+  var type = FileSystemEntity.typeSync(address.address);
+
+  var client = await Socket.connect(address, server.port);
+  var completer = Completer<void>();
+  server.listen((socket) async {
+    Expect.equals(socket.port, 0);
+    Expect.equals(socket.port, server.port);
+    Expect.equals(client.port, socket.remotePort);
+    Expect.equals(client.remotePort, socket.port);
+
+    // Client has not bound to a path. This is an unnamed socket.
+    Expect.equals(socket.remoteAddress.toString(), "InternetAddress('', Unix)");
+    Expect.equals(client.remoteAddress.toString(), address.toString());
+    socket.destroy();
+    client.destroy();
+    await server.close();
+    completer.complete();
+  });
+  await completer.future;
+}
+
+testBindShared(String name) async {
+  var address = InternetAddress('$name/sock', type: InternetAddressType.unix);
+  var socket = await ServerSocket.bind(address, 0, shared: true);
+  Expect.isTrue(socket.port == 0);
+
+  // Same path
+  var socket2 = await ServerSocket.bind(address, 0, shared: true);
+  Expect.equals(socket.address.address, socket2.address.address);
+  Expect.equals(socket.port, socket2.port);
+
+  // Test relative path
+  var path = name.substring(name.lastIndexOf('/') + 1);
+  address = InternetAddress('${name}/../${path}/sock',
+      type: InternetAddressType.unix);
+
+  var socket3 = await ServerSocket.bind(address, 0, shared: true);
+  Expect.isTrue(FileSystemEntity.identicalSync(
+      socket.address.address, socket3.address.address));
+  Expect.equals(socket.port, socket2.port);
+  await socket.close();
+  await socket2.close();
+  await socket3.close();
+}
+
+testBind(String name) async {
+  var address = InternetAddress('$name/sock', type: InternetAddressType.unix);
+  var server = await ServerSocket.bind(address, 0, shared: false);
+  Expect.isTrue(server.address.toString().contains(name));
+  // Unix domain socket does not have a valid port number.
+  Expect.equals(server.port, 0);
+
+  var type = FileSystemEntity.typeSync(address.address);
+
+  var sub;
+  sub = server.listen((s) {
+    sub.cancel();
+    server.close();
+  });
+
+  var socket = await Socket.connect(address, server.port);
+  socket.write(" socket content");
+
+  await socket.destroy();
+  await server.close();
+}
+
+Future testListenCloseListenClose(String name) async {
+  var address = InternetAddress('$name/sock', type: InternetAddressType.unix);
+  ServerSocket socket = await ServerSocket.bind(address, 0, shared: true);
+  ServerSocket socket2 =
+      await ServerSocket.bind(address, socket.port, shared: true);
+
+  // The second socket should have kept the OS socket alive. We can therefore
+  // test if it is working correctly.
+  await socket.close();
+
+  var type = FileSystemEntity.typeSync(address.address);
+
+  // For robustness we ignore any clients unrelated to this test.
+  List<int> sendData = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
+  socket2.listen((Socket client) async {
+    client.add(sendData);
+    await Future.wait([client.drain(), client.close()]);
+  });
+
+  final client = await Socket.connect(address, socket2.port);
+  List<int> data = [];
+  var completer = Completer<void>();
+  client.listen(data.addAll, onDone: () {
+    Expect.listEquals(sendData, data);
+    completer.complete();
+  });
+  await completer.future;
+  await client.close();
+
+  // Close the second server socket.
+  await socket2.close();
+}
+
+Future testSourceAddressConnect(String name) async {
+  var address = InternetAddress('$name/sock', type: InternetAddressType.unix);
+  ServerSocket server = await ServerSocket.bind(address, 0);
+
+  var completer = Completer<void>();
+  var localAddress =
+      InternetAddress('$name/local', type: InternetAddressType.unix);
+  server.listen((Socket socket) async {
+    Expect.equals(socket.address.address, address.address);
+    Expect.equals(socket.remoteAddress.address, localAddress.address);
+    socket.drain();
+    socket.close();
+    completer.complete();
+  });
+
+  var type = FileSystemEntity.typeSync(address.address);
+
+  Socket client =
+      await Socket.connect(address, server.port, sourceAddress: localAddress);
+  Expect.equals(client.remoteAddress.address, address.address);
+  await completer.future;
+  await client.close();
+  await client.drain();
+  await server.close();
+}
+
+// Create socket in temp directory
+Future withTempDir(String prefix, void test(Directory dir)) async {
+  var tempDir = Directory.systemTemp.createTempSync(prefix);
+  try {
+    await test(tempDir);
+  } finally {
+    tempDir.deleteSync(recursive: true);
+  }
+}
+
+void main() async {
+  try {
+    await withTempDir('unix_socket_test', (Directory dir) async {
+      await testAddress('${dir.path}');
+    });
+    await withTempDir('unix_socket_test', (Directory dir) async {
+      await testBind('${dir.path}');
+    });
+    await withTempDir('unix_socket_test', (Directory dir) async {
+      await testBindShared('${dir.path}');
+    });
+    await withTempDir('unix_socket_test', (Directory dir) async {
+      await testListenCloseListenClose('${dir.path}');
+    });
+    await withTempDir('unix_socket_test', (Directory dir) async {
+      await testSourceAddressConnect('${dir.path}');
+    });
+  } catch (e) {
+    if (Platform.isMacOS || Platform.isLinux || Platform.isAndroid) {
+      Expect.fail("Unexpected exceptions are thrown");
+    } else {
+      Expect.isTrue(e is SocketException);
+    }
+  }
+}
diff --git a/tests/standalone_2/io/web_socket_ping_test.dart b/tests/standalone_2/io/web_socket_ping_test.dart
index 3960958..ef6169d 100644
--- a/tests/standalone_2/io/web_socket_ping_test.dart
+++ b/tests/standalone_2/io/web_socket_ping_test.dart
@@ -36,20 +36,22 @@
       response.headers.add("Sec-WebSocket-Accept", accept);
       response.headers.contentLength = 0;
       response.detachSocket().then((socket) {
-        socket.drain().then((_) {
-          socket.close();
-          closed++;
-          if (closed == totalConnections) {
-            server.close();
-          }
-        });
+        socket.destroy();
       });
     });
 
+    int closeCount = 0;
     for (int i = 0; i < totalConnections; i++) {
       WebSocket.connect('ws://localhost:${server.port}').then((webSocket) {
         webSocket.pingInterval = const Duration(milliseconds: 100);
-        webSocket.drain();
+        webSocket.listen((message) {
+          Expect.fail("unexpected message");
+        }, onDone: () {
+          closeCount++;
+          if (closeCount == totalConnections) {
+            server.close();
+          }
+        });
       });
     }
   });
diff --git a/tools/VERSION b/tools/VERSION
index 4acf823..858a4ac 100644
--- a/tools/VERSION
+++ b/tools/VERSION
@@ -33,7 +33,7 @@
 MAJOR 2
 MINOR 8
 PATCH 0
-PRERELEASE 16
+PRERELEASE 17
 PRERELEASE_PATCH 0
-ABI_VERSION 29
-OLDEST_SUPPORTED_ABI_VERSION 29
+ABI_VERSION 30
+OLDEST_SUPPORTED_ABI_VERSION 30
diff --git a/tools/addlatexhash.dart b/tools/addlatexhash.dart
index 2354668..a3b2230 100755
--- a/tools/addlatexhash.dart
+++ b/tools/addlatexhash.dart
@@ -111,7 +111,7 @@
 multilineNormalize(lines) {
   var afterBlankLines = false; // Does [line] succeed >0 empty lines?
   var afterCommentLines = false; // Does [line] succeed >0 commentOnly lines?
-  var newLines = new List();
+  var newLines = [];
   for (var line in lines) {
     if (afterBlankLines && afterCommentLines) {
       // Previous line was both blank and a comment: not possible.
@@ -193,7 +193,7 @@
 /// and "interesting" lines may be characterized by [analysisFunc] via
 /// the returned event object.
 findEvents(lines, analyzer) {
-  var events = new List();
+  var events = [];
   for (var line in lines) {
     var event = analyzer.analyze(line);
     if (event != null) events.add(event);
@@ -543,7 +543,7 @@
 
   // Perform single-line normalization.
   var inDartCode = false;
-  var normalizedLines = new List();
+  var normalizedLines = [];
 
   for (var line in lines) {
     if (sispIsDartBegin(line)) {
diff --git a/tools/bots/bot_utils.py b/tools/bots/bot_utils.py
index 7e3c496..9e79caf 100755
--- a/tools/bots/bot_utils.py
+++ b/tools/bots/bot_utils.py
@@ -72,7 +72,7 @@
 
   For every (channel,revision,release-type) tuple we have a base path:
 
-    gs://dart-archive/channels/{be,dev,stable,try,integration}
+    gs://dart-archive/channels/{be,beta,dev,stable,try,integration}
                      /{raw,signed,release}/{revision,latest}/
 
   Under every base path, the following structure is used:
diff --git a/tools/bots/find_base_commit.dart b/tools/bots/find_base_commit.dart
index 5a0a741..5da2e31 100755
--- a/tools/bots/find_base_commit.dart
+++ b/tools/bots/find_base_commit.dart
@@ -89,8 +89,10 @@
   for (final build in builds) {
     final parameters = jsonDecode(build["parameters_json"]);
     final bot = parameters["builder_name"];
-    if (bot.endsWith("-dev") || bot.endsWith("-stable")) {
-      // Ignore the -dev and -stable builders. The -try builders aren't in the
+    if (bot.endsWith("-beta") ||
+        bot.endsWith("-dev") ||
+        bot.endsWith("-stable")) {
+      // Ignore the release builders. The -try builders aren't in the
       // bucket we're reading.
       continue;
     }
diff --git a/tools/bots/test_matrix.json b/tools/bots/test_matrix.json
index 6fac31d..f69d3e0 100644
--- a/tools/bots/test_matrix.json
+++ b/tools/bots/test_matrix.json
@@ -526,6 +526,36 @@
         "timeout": 240
       }
     },
+    "dartkp-asan-(linux|mac)-(debug|product|release)-x64": {
+      "options": {
+        "builder-tag": "asan",
+        "timeout": 240
+      }
+    },
+    "dartkp-lsan-(linux|mac)-(debug|product|release)-x64": {
+      "options": {
+        "builder-tag": "lsan",
+        "timeout": 240
+      }
+    },
+    "dartkp-msan-linux-(debug|product|release)-x64": {
+      "options": {
+        "builder-tag": "msan",
+        "timeout": 240
+      }
+    },
+    "dartkp-tsan-(linux|mac)-(debug|product|release)-x64": {
+      "options": {
+        "builder-tag": "tsan",
+        "timeout": 240
+      }
+    },
+    "dartkp-ubsan-(linux|mac)-(debug|product|release)-x64": {
+      "options": {
+        "builder-tag": "ubsan",
+        "timeout": 240
+      }
+    },
     "dart2js-(linux|mac|win)-chrome": {
       "options": {
         "use-sdk": true
@@ -1323,9 +1353,10 @@
           "name": "vm nnbd tests in weak mode with asserts",
           "arguments": [
             "-ndartkp-weak-asserts-${system}-${mode}-${arch}",
+            "corelib",
             "ffi",
             "language",
-            "lib/mirrors",
+            "lib",
             "standalone/io"
           ]
         },
@@ -1333,9 +1364,10 @@
           "name": "vm nnbd tests in strong mode",
           "arguments": [
             "-ndartkp-strong-${system}-${mode}-${arch}",
+            "corelib",
             "ffi",
             "language",
-            "lib/mirrors",
+            "lib",
             "standalone/io"
           ]
         }
@@ -1726,9 +1758,10 @@
           "name": "vm nnbd test in weak mode with asserts",
           "arguments": [
             "-ndartk-weak-asserts-${system}-${mode}-${arch}",
+            "corelib",
             "ffi",
             "language",
-            "lib/mirrors",
+            "lib",
             "standalone/io"
           ]
         },
@@ -1736,9 +1769,10 @@
           "name": "vm nnbd tests in strong mode",
           "arguments": [
             "-ndartk-strong-${system}-${mode}-${arch}",
+            "corelib",
             "ffi",
             "language",
-            "lib/mirrors",
+            "lib",
             "standalone/io"
           ]
         }
@@ -3207,6 +3241,14 @@
           ]
         },
         {
+          "name": "analyze pkg/dds",
+          "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
+          "arguments": [
+            "--fatal-warnings",
+            "pkg/dds"
+          ]
+        },
+        {
           "name": "analyze runtime/observatory",
           "script": "out/ReleaseX64/dart-sdk/bin/dartanalyzer",
           "arguments": [
@@ -3626,6 +3668,7 @@
   ],
   "sanitizer_options": {
     "ASAN_OPTIONS": "check_initialization_order=true:handle_segv=0:detect_leaks=1:detect_stack_use_after_return=0:disable_coredump=0:abort_on_error=1",
+    "LSAN_OPTIONS": "check_initialization_order=true:handle_segv=0:detect_leaks=1:detect_stack_use_after_return=0:disable_coredump=0:abort_on_error=1",
     "MSAN_OPTIONS": "check_initialization_order=true:handle_segv=0:detect_leaks=1:detect_stack_use_after_return=0:disable_coredump=0:abort_on_error=1",
     "TSAN_OPTIONS": "handle_segv=0:disable_coredump=0:abort_on_error=1",
     "UBSAN_OPTIONS": "handle_segv=0:disable_coredump=0:abort_on_error=1"
diff --git a/tools/bots/version_checker.py b/tools/bots/version_checker.py
index 6c72aaf..89c4cdd 100755
--- a/tools/bots/version_checker.py
+++ b/tools/bots/version_checker.py
@@ -73,7 +73,8 @@
             print 'No sanity checking on bleeding edge'
         else:
             assert (channel == bot_utils.Channel.STABLE or
-                    channel == bot_utils.Channel.DEV)
+                    channel == bot_utils.Channel.DEV or
+                    channel == bot_utils.Channel.BETA)
             latest_version = GetLatestVersionFromGCS(channel)
             version = utils.GetVersion()
             print 'Latests version on GCS: %s' % latest_version
diff --git a/tools/create_debian_chroot.sh b/tools/create_debian_chroot.sh
index 1cfcf1e..4f2f25e 100755
--- a/tools/create_debian_chroot.sh
+++ b/tools/create_debian_chroot.sh
@@ -9,7 +9,7 @@
 #
 
 function usage {
-  USAGE="Usage: $0 i386|amd64 [target dir] [be|dev|<stable version>]]\n
+  USAGE="Usage: $0 i386|amd64 [target dir] [be|beta|dev|<stable version>]]\n
 \n
 The first mandatory argument speciifies the CPU architecture using\n
 the Debian convention (e.g. i386 and amd64).\n
diff --git a/tools/dom/nnbd_src/Validators.dart b/tools/dom/nnbd_src/Validators.dart
index aca5628..26dac65 100644
--- a/tools/dom/nnbd_src/Validators.dart
+++ b/tools/dom/nnbd_src/Validators.dart
@@ -157,6 +157,9 @@
  */
 class _ValidatingTreeSanitizer implements NodeTreeSanitizer {
   NodeValidator validator;
+
+  /// Did we modify the tree by removing anything.
+  bool modifiedTree = false;
   _ValidatingTreeSanitizer(this.validator) {}
 
   void sanitizeTree(Node node) {
@@ -165,11 +168,15 @@
 
       var child = node.lastChild;
       while (null != child) {
-        var nextChild;
+        Node? nextChild;
         try {
-          // Child may be removed during the walk, and we may not
-          // even be able to get its previousNode.
+          // Child may be removed during the walk, and we may not even be able
+          // to get its previousNode. But it's also possible that previousNode
+          // (i.e. previousSibling) is being spoofed, so double-check it.
           nextChild = child.previousNode;
+          if (nextChild != null && nextChild.nextNode != child) {
+            throw StateError("Corrupt HTML");
+          }
         } catch (e) {
           // Child appears bad, remove it. We want to check the rest of the
           // children of node and, but we have no way of getting to the next
@@ -183,7 +190,12 @@
       }
     }
 
+    modifiedTree = false;
     walk(node, null);
+    while (modifiedTree) {
+      modifiedTree = false;
+      walk(node, null);
+    }
   }
 
   /// Aggressively try to remove node.
@@ -191,7 +203,8 @@
     // If we have the parent, it's presumably already passed more sanitization
     // or is the fragment, so ask it to remove the child. And if that fails
     // try to set the outer html.
-    if (parent == null) {
+    modifiedTree = true;
+    if (parent == null || parent != node.parentNode) {
       node.remove();
     } else {
       parent._removeChild(node);
diff --git a/tools/dom/src/Validators.dart b/tools/dom/src/Validators.dart
index ceb6968..ce706ef 100644
--- a/tools/dom/src/Validators.dart
+++ b/tools/dom/src/Validators.dart
@@ -157,6 +157,9 @@
  */
 class _ValidatingTreeSanitizer implements NodeTreeSanitizer {
   NodeValidator validator;
+
+  /// Did we modify the tree by removing anything.
+  bool modifiedTree = false;
   _ValidatingTreeSanitizer(this.validator) {}
 
   void sanitizeTree(Node node) {
@@ -165,11 +168,15 @@
 
       var child = node.lastChild;
       while (null != child) {
-        var nextChild;
+        Node nextChild;
         try {
-          // Child may be removed during the walk, and we may not
-          // even be able to get its previousNode.
+          // Child may be removed during the walk, and we may not even be able
+          // to get its previousNode. But it's also possible that previousNode
+          // (i.e. previousSibling) is being spoofed, so double-check it.
           nextChild = child.previousNode;
+          if (nextChild != null && nextChild.nextNode != child) {
+            throw StateError("Corrupt HTML");
+          }
         } catch (e) {
           // Child appears bad, remove it. We want to check the rest of the
           // children of node and, but we have no way of getting to the next
@@ -183,7 +190,12 @@
       }
     }
 
+    modifiedTree = false;
     walk(node, null);
+    while (modifiedTree) {
+      modifiedTree = false;
+      walk(node, null);
+    }
   }
 
   /// Aggressively try to remove node.
@@ -191,7 +203,8 @@
     // If we have the parent, it's presumably already passed more sanitization
     // or is the fragment, so ask it to remove the child. And if that fails
     // try to set the outer html.
-    if (parent == null) {
+    modifiedTree = true;
+    if (parent == null || parent != node.parentNode) {
       node.remove();
     } else {
       parent._removeChild(node);
diff --git a/tools/dom/templates/html/impl/impl_Element.darttemplate b/tools/dom/templates/html/impl/impl_Element.darttemplate
index d692342..76ddcde 100644
--- a/tools/dom/templates/html/impl/impl_Element.darttemplate
+++ b/tools/dom/templates/html/impl/impl_Element.darttemplate
@@ -1449,6 +1449,14 @@
          if (!(element.attributes instanceof NamedNodeMap)) {
 	   return true;
 	 }
+         // If something has corrupted the traversal we want to detect
+         // these on not only the children (tested below) but on the node itself
+         // in case it was bypassed.
+         if (element["id"] == 'lastChild' || element["name"] == 'lastChild' ||
+             element["id"] == 'previousSibling' || element["name"] == 'previousSibling' ||
+             element["id"] == 'children' || element["name"] == 'children') {
+           return true;
+         }
 	 var childNodes = element.childNodes;
 	 if (element.lastChild &&
 	     element.lastChild !== childNodes[childNodes.length -1]) {
@@ -1474,6 +1482,7 @@
            // allowing us to check for clobbering that may show up in other accesses.
            if (child["id"] == 'attributes' || child["name"] == 'attributes' ||
                child["id"] == 'lastChild'  || child["name"] == 'lastChild' ||
+               child["id"] == 'previousSibling'  || child["name"] == 'previousSibling' ||
                child["id"] == 'children' || child["name"] == 'children') {
              return true;
            }
diff --git a/tools/make_version.py b/tools/make_version.py
index 4b16d91..eb01d35 100755
--- a/tools/make_version.py
+++ b/tools/make_version.py
@@ -47,17 +47,6 @@
 
 def MakeVersionString(quiet, no_git_hash, custom_for_pub=None):
     channel = utils.GetChannel()
-    if custom_for_pub:
-        # TODO(athom): remove the custom 2.7.0 logic post release.
-        # For 2.7.0, we want flutter to claim Dart is 2.7.0 even before it is
-        # decided what exactly 2.7.0 will be. Dart & Flutter stable releases
-        # will be synced, so that what will be released as Dart 2.7.0 will also
-        # be what will be packaged with Flutter.
-        version = utils.ReadVersionFile()
-        custom_version_string = "%s.%s.%s" % (version.major, version.minor,
-                                              version.patch)
-        if custom_version_string == "2.7.0" and custom_for_pub == "flutter":
-            return "2.7.0"
 
     if custom_for_pub and channel == 'be':
         latest = utils.GetLatestDevTag()
@@ -98,6 +87,8 @@
 
     version_cc_text = open(input_file).read()
     version_cc_text = version_cc_text.replace("{{VERSION_STR}}", version_string)
+    channel = utils.GetChannel()
+    version_cc_text = version_cc_text.replace("{{CHANNEL}}", channel)
     version_time = utils.GetGitTimestamp()
     if no_git_hash or version_time == None:
         version_time = "Unknown timestamp"
diff --git a/tools/sdks/update.sh b/tools/sdks/update.sh
index 857c98f..6f1cc4e 100755
--- a/tools/sdks/update.sh
+++ b/tools/sdks/update.sh
@@ -8,9 +8,10 @@
   exit 1
 fi
 
-channel="stable"
 case "$1" in
-*-dev.*) channel="dev";;
+*-dev.*.0) channel="dev";;
+*-dev.*) channel="beta";;
+*) channel="stable";;
 esac
 
 tmpdir=$(mktemp -d)
diff --git a/tools/utils.py b/tools/utils.py
index 7fa9d73..fb26d28 100644
--- a/tools/utils.py
+++ b/tools/utils.py
@@ -378,7 +378,7 @@
 
     if version.channel == 'be':
         postfix = '-edge' if no_git_hash else '-edge.%s' % GetGitRevision()
-    elif version.channel == 'dev':
+    elif version.channel in ('beta', 'dev'):
         postfix = '-dev.%s.%s' % (version.prerelease, version.prerelease_patch)
     else:
         assert version.channel == 'stable'
diff --git a/utils/dartdevc/BUILD.gn b/utils/dartdevc/BUILD.gn
index 6925150..a0fa6b0 100644
--- a/utils/dartdevc/BUILD.gn
+++ b/utils/dartdevc/BUILD.gn
@@ -202,25 +202,14 @@
 group("dartdevc_test_kernel_pkg") {
   deps = [
     ":async_helper_js",
+    ":collection_js",
     ":expect_js",
     ":js_js",
+    ":matcher_js",
     ":meta_js",
+    ":path_js",
+    ":stack_trace_js",
   ]
-
-  # TODO(38701): Cleanup after merging the forked SDK into mainline.
-  if (!use_nnbd) {
-    # TODO(sigmund): Merge this list into above. We turned this off temporarily
-    # while the migration of libraries is in flux, this step otherwise fails
-    # with many nnbd-related compile-time errors because the packages are
-    # assumed to be nnbd compilant.
-    deps += [
-      ":collection_js",
-      ":matcher_js",
-      ":path_js",
-      ":stack_trace_js",
-      ":unittest_js",
-    ]
-  }
 }
 
 template("dartdevc_kernel_compile") {
@@ -329,21 +318,6 @@
   package_dependencies = [ "path" ]
 }
 
-# TODO(rnystrom): Remove this when unittest is no longer used. Also remove
-# any of the above packages that are only here because unittest uses them.
-dartdevc_kernel_compile("unittest_js") {
-  package = "unittest"
-  package_dependencies = [
-    "path",
-    "stack_trace",
-  ]
-  extra_libraries = [
-    "html_config",
-    "html_individual_config",
-    "html_enhanced_config",
-  ]
-}
-
 compile_platform("dartdevc_platform") {
   single_root_scheme = "org-dartlang-sdk"
   single_root_base = rebase_path("../../")
