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

static method main() → dynamic {
  lowered final core::int? #i;
  lowered core::bool #i#isSet = false;
  function #i#get() → core::int
    return #i#isSet ?{core::int} #i{core::int} : throw new _in::LateError::localNI("i");
  function #i#set(core::int i#param) → dynamic
    if(#i#isSet)
      throw new _in::LateError::localAI("i");
    else {
      #i#isSet = true;
      return #i = i#param;
    }
  #i#set(1){(core::int) → dynamic};
  core::print(#i#get(){() → core::int});
  lowered final core::int? #j;
  lowered core::bool #j#isSet = false;
  function #j#get() → core::int
    return #j#isSet ?{core::int} #j{core::int} : throw new _in::LateError::localNI("j");
  function #j#set(core::int j#param) → dynamic
    if(#j#isSet)
      throw new _in::LateError::localAI("j");
    else {
      #j#isSet = true;
      return #j = j#param;
    }
  block {
    core::int? #t1;
    final synthesized dynamic #0#0 = (2, "Hello");
    if(!(let final dynamic #t2 = #t1 = #0#0{(core::int, core::String)}.$1{core::int} in true))
      throw new core::StateError::•("Pattern matching error");
    #j#set(#t1){(core::int) → dynamic};
  } =>#0#0;
  core::print(#j#get(){() → core::int});
}
