{"size": 421696, "ext": "js", "max_stars_repo_path": "doc/client-static.js", "max_stars_repo_name": "blossom/gravatar", "max_stars_repo_stars_event_min_datetime": "2016-08-28T12:44:03.000Z", "max_stars_repo_stars_event_max_datetime": "2020-10-18T23:02:32.000Z", "max_issues_repo_path": "doc/client-static.js", "max_issues_repo_name": "blossom/gravatar", "max_issues_repo_issues_event_min_datetime": "2017-06-24T15:25:02.000Z", "max_issues_repo_issues_event_max_datetime": "2017-07-17T07:00:16.000Z", "max_forks_repo_path": "doc/client-static.js", "max_forks_repo_name": "blossom/gravatar", "max_forks_repo_forks_event_min_datetime": "2015-04-11T19:59:55.000Z", "max_forks_repo_forks_event_max_datetime": "2020-10-18T23:02:34.000Z"}
{"max_stars_count": 3, "max_issues_count": 1, "max_forks_count": 5, "avg_line_length": 32.6162889628, "max_line_length": 3507, "alphanum_fraction": 0.6041769426}
// Generated by dart2js, the Dart to JavaScript compiler.
// The code supports the following hooks:
// dartPrint(message)   - if this function is defined it is called
//                        instead of the Dart [print] method.
// dartMainRunner(main) - if this function is defined, the Dart [main]
//                        method will not be invoked directly.
//                        Instead, a closure that will invoke [main] is
//                        passed to [dartMainRunner].
function Isolate() {}
init();

var $$ = {};
var $ = Isolate.$isolateProperties;
$$.DartError = {"": "Object;",
  get$stack: function() {
    return this.stack;
  },
  toString$0: function() {
    var dartException = this.dartException;
    if (!!Error.captureStackTrace || this.get$stack() == null)
      return $.toString(dartException);
    else
      return $.S(dartException) + "\n" + $.S(this.get$stack());
  },
  DartError$1: function(dartException) {
    this.dartException = dartException;
    this.toString = $.DartError_toStringWrapper.call$0;
  }
};

$$.StackTrace = {"": "Object;stack",
  toString$0: function() {
    var t1 = this.stack;
    return !(t1 == null) ? t1 : "";
  }
};

$$.Closure = {"": "Object;",
  toString$0: function() {
    return "Closure";
  }
};

$$.Null = {"": "Object;"};

$$.MetaInfo = {"": "Object;_tag>,_tags,_set>"};

$$.JSSyntaxRegExp = {"": "Object;_pattern,_isMultiLine,_isCaseSensitive",
  firstMatch$1: function(str) {
    var m, matchStart, t1;
    m = $.regExpExec(this, $.checkString(str));
    if (m == null)
      return;
    matchStart = m.index;
    t1 = $.length($.$$index(m, 0));
    if (typeof t1 !== "number")
      throw $.iae(t1);
    return $._MatchImplementation$(this.get$pattern(), str, matchStart, matchStart + t1, m);
  },
  hasMatch$1: function(str) {
    return $.regExpTest(this, $.checkString(str));
  },
  allMatches$1: function(str) {
    $.checkString(str);
    return $._AllMatchesIterable$(this, str);
  },
  get$pattern: function() {
    return this._pattern;
  },
  get$isMultiLine: function() {
    return this._isMultiLine;
  },
  get$isCaseSensitive: function() {
    return this._isCaseSensitive;
  },
  $isJSSyntaxRegExp: true
};

$$._MatchImplementation = {"": "Object;pattern>,str,start,end,_groups",
  $index: function(index) {
    var t1 = this._groups;
    if (typeof t1 !== "string" && (typeof t1 !== "object" || t1 === null || t1.constructor !== Array && !t1.$isJavaScriptIndexingBehavior()))
      return this.$$index$bailout(1, index, t1);
    if (index !== (index | 0))
      throw $.iae(index);
    if (index < 0 || index >= t1.length)
      throw $.ioore(index);
    return t1[index];
  },
  $$index$bailout: function(state0, index, t1) {
    return $.$$index(t1, index);
  }
};

$$._AllMatchesIterable = {"": "Iterable;_re,_str",
  get$iterator: function() {
    return $._AllMatchesIterator$(this._re, this._str);
  }
};

$$._AllMatchesIterator = {"": "Object;_re,_str,_liblib3$_current",
  get$current: function() {
    return this._liblib3$_current;
  },
  moveNext$0: function() {
    this._liblib3$_current = this._re.firstMatch$1(this._str);
    return !(this._liblib3$_current == null);
  }
};

$$.StringMatch0 = {"": "Object;start,str,pattern>",
  $index: function(g) {
    return this.group$1(g);
  },
  group$1: function(group_) {
    if ($.$$eq(group_, 0) !== true)
      throw $.$$throw($.RangeError$value(group_));
    return this.pattern;
  }
};

$$.Collection = {"": "Iterable;",
  addAll$1: function(elements) {
    var t1, t2;
    for (t1 = $.iterator(elements), t2 = $.getInterceptor$JSArray(this); t1.moveNext$0() === true;)
      t2.add$1(this, t1.get$current());
  },
  removeAll$1: function(elements) {
    $.IterableMixinWorkaround_removeAll(this, elements);
  },
  clear$0: function() {
    $.IterableMixinWorkaround_removeMatching(this, new $.Collection_clear_anon());
  },
  $isCollection: function() {
    return true;
  },
  $asCollection: function() {
    return null;
  }
};

$$.Duration = {"": "Object;inMilliseconds>",
  $add: function(other) {
    var t1, t3;
    t1 = this.inMilliseconds;
    t3 = other.get$inMilliseconds();
    if (typeof t1 !== "number")
      return this.$$add$bailout(1, other, t1);
    if (typeof t3 !== "number")
      return this.$$add$bailout(2, 0, t1, t3);
    return $.Duration$(0, 0, t1 + t3, 0, 0);
  },
  $$add$bailout: function(state0, other, t1, t3) {
    switch (state0) {
      case 0:
        t1 = this.inMilliseconds;
      case 1:
        state0 = 0;
        t3 = other.get$inMilliseconds();
      case 2:
        state0 = 0;
        return $.Duration$(0, 0, $.$$add(t1, t3), 0, 0);
    }
  },
  $sub: function(other) {
    var t1, t3;
    t1 = this.inMilliseconds;
    t3 = other.get$inMilliseconds();
    if (typeof t1 !== "number")
      return this.$$sub$bailout(1, other, t1);
    if (typeof t3 !== "number")
      return this.$$sub$bailout(2, 0, t1, t3);
    return $.Duration$(0, 0, t1 - t3, 0, 0);
  },
  $$sub$bailout: function(state0, other, t1, t3) {
    switch (state0) {
      case 0:
        t1 = this.inMilliseconds;
      case 1:
        state0 = 0;
        t3 = other.get$inMilliseconds();
      case 2:
        state0 = 0;
        return $.Duration$(0, 0, $.$$sub(t1, t3), 0, 0);
    }
  },
  $mul: function(factor) {
    var t2 = this.inMilliseconds;
    if (typeof t2 !== "number")
      return this.$$mul$bailout(2, factor, t2);
    if (typeof factor !== "number")
      return this.$$mul$bailout(1, factor);
    return $.Duration$(0, 0, t2 * factor, 0, 0);
  },
  $$mul$bailout: function(state0, factor, t2) {
    switch (state0) {
      case 0:
      case 1:
        state0 = 0;
        t2 = this.inMilliseconds;
      case 2:
        state0 = 0;
        return $.Duration$(0, 0, $.$$mul(t2, factor), 0, 0);
    }
  },
  $tdiv: function(quotient) {
    if (quotient === 0)
      throw $.$$throw($.IntegerDivisionByZeroException$());
    return $.Duration$(0, 0, $.$$tdiv(this.inMilliseconds, quotient), 0, 0);
  },
  $lt: function(other) {
    var t1, t3;
    t1 = this.inMilliseconds;
    t3 = other.get$inMilliseconds();
    if (typeof t1 !== "number")
      return this.$$lt$bailout(1, other, t1);
    if (typeof t3 !== "number")
      return this.$$lt$bailout(2, 0, t1, t3);
    return t1 < t3;
  },
  $$lt$bailout: function(state0, other, t1, t3) {
    switch (state0) {
      case 0:
        t1 = this.inMilliseconds;
      case 1:
        state0 = 0;
        t3 = other.get$inMilliseconds();
      case 2:
        state0 = 0;
        return $.$$lt(t1, t3);
    }
  },
  $gt: function(other) {
    var t1, t3;
    t1 = this.inMilliseconds;
    t3 = other.get$inMilliseconds();
    if (typeof t1 !== "number")
      return this.$$gt$bailout(1, other, t1);
    if (typeof t3 !== "number")
      return this.$$gt$bailout(2, 0, t1, t3);
    return t1 > t3;
  },
  $$gt$bailout: function(state0, other, t1, t3) {
    switch (state0) {
      case 0:
        t1 = this.inMilliseconds;
      case 1:
        state0 = 0;
        t3 = other.get$inMilliseconds();
      case 2:
        state0 = 0;
        return $.$$gt(t1, t3);
    }
  },
  $le: function(other) {
    var t1, t3;
    t1 = this.inMilliseconds;
    t3 = other.get$inMilliseconds();
    if (typeof t1 !== "number")
      return this.$$le$bailout(1, other, t1);
    if (typeof t3 !== "number")
      return this.$$le$bailout(2, 0, t1, t3);
    return t1 <= t3;
  },
  $$le$bailout: function(state0, other, t1, t3) {
    switch (state0) {
      case 0:
        t1 = this.inMilliseconds;
      case 1:
        state0 = 0;
        t3 = other.get$inMilliseconds();
      case 2:
        state0 = 0;
        return $.$$le(t1, t3);
    }
  },
  $ge: function(other) {
    return $.$$ge(this.inMilliseconds, other.get$inMilliseconds());
  },
  get$inHours: function() {
    return $.$$tdiv(this.inMilliseconds, 3600000);
  },
  get$inMinutes: function() {
    return $.$$tdiv(this.inMilliseconds, 60000);
  },
  get$inSeconds: function() {
    return $.$$tdiv(this.inMilliseconds, 1000);
  },
  $eq: function(other) {
    if (other == null)
      return false;
    if (!(typeof other === "object" && other !== null && !!other.$isDuration))
      return false;
    return $.$$eq(this.inMilliseconds, other.inMilliseconds);
  },
  get$hashCode: function() {
    return $.hashCode(this.inMilliseconds);
  },
  compareTo$1: function(other) {
    return $.compareTo(this.inMilliseconds, other.get$inMilliseconds());
  },
  toString$0: function() {
    var t1, t2, t3, t4, twoDigitMinutes, twoDigitSeconds, threeDigitMs;
    t1 = new $.Duration_toString_threeDigits();
    t2 = new $.Duration_toString_twoDigits();
    t3 = this.inMilliseconds;
    t4 = $.getInterceptor$JSNumber(t3);
    if (t4.$lt(t3, 0) === true)
      return "-" + $.S($.Duration$(0, 0, t4.$negate(t3), 0, 0));
    twoDigitMinutes = t2.call$1($.remainder(this.get$inMinutes(), 60));
    twoDigitSeconds = t2.call$1($.remainder(this.get$inSeconds(), 60));
    threeDigitMs = t1.call$1(t4.remainder$1(t3, 1000));
    return $.S(this.get$inHours()) + ":" + $.S(twoDigitMinutes) + ":" + $.S(twoDigitSeconds) + "." + $.S(threeDigitMs);
  },
  $isDuration: true
};

$$.NullThrownError = {"": "Object;",
  toString$0: function() {
    return "Throw of null.";
  }
};

$$.ArgumentError = {"": "Object;message",
  toString$0: function() {
    var t1 = this.message;
    if (!(t1 == null))
      return "Illegal argument(s): " + $.S(t1);
    return "Illegal argument(s)";
  }
};

$$.RangeError = {"": "ArgumentError;message",
  toString$0: function() {
    return "RangeError: " + $.S(this.message);
  }
};

$$.NoSuchMethodError = {"": "Object;_receiver,_memberName,_arguments,_namedArguments,_existingArgumentNames",
  toString$0: function() {
    var t1, t2, t3, t4, actualParameters, i, formalParameters;
    t1 = {};
    t1.sb_0 = $.StringBuffer$("");
    t1.i_1 = 0;
    t2 = this._arguments;
    if (typeof t2 !== "string" && (typeof t2 !== "object" || t2 === null || t2.constructor !== Array && !t2.$isJavaScriptIndexingBehavior()))
      return this.toString$0$bailout1(1, t1, t2);
    for (; $.$$lt(t1.i_1, t2.length) === true; t1.i_1 = $.$$add(t1.i_1, 1)) {
      if ($.$$gt(t1.i_1, 0) === true)
        $.add(t1.sb_0, ", ");
      t3 = t1.sb_0;
      t4 = t1.i_1;
      if (t4 !== (t4 | 0))
        throw $.iae(t4);
      if (t4 < 0 || t4 >= t2.length)
        throw $.ioore(t4);
      $.add(t3, $.Error_safeToString(t2[t4]));
    }
    t2 = this._namedArguments;
    if (!(t2 == null))
      $.forEach(t2, new $.NoSuchMethodError_toString_anon(t1));
    t2 = this._existingArgumentNames;
    if (typeof t2 !== "string" && (typeof t2 !== "object" || t2 === null || t2.constructor !== Array && !t2.$isJavaScriptIndexingBehavior()))
      return this.toString$0$bailout1(2, t1, t2);
    actualParameters = $.toString(t1.sb_0);
    t1.sb_0 = $.StringBuffer$("");
    for (i = 0; i < t2.length; ++i) {
      if (i > 0)
        $.add(t1.sb_0, ", ");
      t3 = t1.sb_0;
      if (i >= t2.length)
        throw $.ioore(i);
      $.add(t3, t2[i]);
    }
    formalParameters = $.toString(t1.sb_0);
    t2 = this._memberName;
    return "NoSuchMethodError: incorrect number of arguments passed to method named '" + $.S(t2) + "'\n" + "Receiver: " + $.S($.Error_safeToString(this._receiver)) + "\n" + "Tried calling: " + $.S(t2) + "(" + $.S(actualParameters) + ")\n" + "Found: " + $.S(t2) + "(" + $.S(formalParameters) + ")";
  },
  toString$0$bailout1: function(state0, t1, t2) {
    switch (state0) {
      case 0:
        t1 = {};
        t1.sb_0 = $.StringBuffer$("");
        t1.i_1 = 0;
        t2 = this._arguments;
      case 1:
        state0 = 0;
        if (!(t2 == null))
          for (t3 = $.getInterceptor$JSArrayJSString(t2); $.$$lt(t1.i_1, t3.get$length(t2)) === true; t1.i_1 = $.$$add(t1.i_1, 1)) {
            if ($.$$gt(t1.i_1, 0) === true)
              $.add(t1.sb_0, ", ");
            $.add(t1.sb_0, $.Error_safeToString(t3.$index(t2, t1.i_1)));
          }
        t2 = this._namedArguments;
        if (!(t2 == null))
          $.forEach(t2, new $.NoSuchMethodError_toString_anon(t1));
        t2 = this._existingArgumentNames;
      case 2:
        var t3, actualParameters, i, formalParameters;
        state0 = 0;
        if (t2 == null)
          return "NoSuchMethodError : method not found: '" + $.S(this._memberName) + "'\n" + "Receiver: " + $.S($.Error_safeToString(this._receiver)) + "\n" + "Arguments: [" + $.S(t1.sb_0) + "]";
        else {
          actualParameters = $.toString(t1.sb_0);
          t1.sb_0 = $.StringBuffer$("");
          for (t3 = $.getInterceptor$JSArrayJSString(t2), i = 0; $.CONSTANT2.$lt(i, t3.get$length(t2)); ++i) {
            if (i > 0)
              $.add(t1.sb_0, ", ");
            $.add(t1.sb_0, t3.$index(t2, i));
          }
          formalParameters = $.toString(t1.sb_0);
          t2 = this._memberName;
          return "NoSuchMethodError: incorrect number of arguments passed to method named '" + $.S(t2) + "'\n" + "Receiver: " + $.S($.Error_safeToString(this._receiver)) + "\n" + "Tried calling: " + $.S(t2) + "(" + $.S(actualParameters) + ")\n" + "Found: " + $.S(t2) + "(" + $.S(formalParameters) + ")";
        }
    }
  }
};

$$.UnsupportedError = {"": "Object;message>",
  toString$0: function() {
    return "Unsupported operation: " + $.S(this.get$message());
  }
};

$$.UnimplementedError = {"": "Object;message",
  toString$0: function() {
    var t1 = this.message;
    return !(t1 == null) ? "UnimplementedError: " + $.S(t1) : "UnimplementedError";
  }
};

$$.StateError = {"": "Object;message",
  toString$0: function() {
    return "Bad state: " + this.message;
  }
};

$$.ConcurrentModificationError = {"": "Object;modifiedObject",
  toString$0: function() {
    var t1 = this.modifiedObject;
    if (t1 == null)
      return "Concurrent modification during iteration.";
    return "Concurrent modification during iteration: " + $.S($.Error_safeToString(t1)) + ".";
  }
};

$$.StackOverflowError = {"": "Object;",
  toString$0: function() {
    return "Stack Overflow";
  }
};

$$.RuntimeError = {"": "Object;message",
  toString$0: function() {
    return "RuntimeError: " + this.message;
  }
};

$$._ExceptionImplementation = {"": "Object;message",
  toString$0: function() {
    var t1 = this.message;
    if (t1 == null)
      return "Exception";
    return "Exception: " + $.S(t1);
  },
  $isException: true
};

$$.FormatException = {"": "Object;",
  toString$0: function() {
    return "FormatException: " + this.message;
  },
  $isException: true
};

$$.IllegalJSRegExpException = {"": "FormatException;message"};

$$.IntegerDivisionByZeroException = {"": "Object;",
  toString$0: function() {
    return "IntegerDivisionByZeroException";
  },
  $isException: true
};

$$.Iterable = {"": "Object;",
  where$1: function(f) {
    return $.WhereIterable$(this, f);
  },
  contains$1: function(element) {
    var t1;
    for (t1 = $.iterator(this); t1.moveNext$0() === true;)
      if ($.$$eq(t1.get$current(), element) === true)
        return true;
    return false;
  },
  get$contains: function() {
    return new $.BoundClosure$1(this, "contains$1");
  },
  forEach$1: function(f) {
    var t1;
    for (t1 = $.iterator(this); t1.moveNext$0() === true;)
      f.call$1(t1.get$current());
  },
  join$1: function(separator) {
    var iterator, buffer;
    if (typeof separator !== "string")
      return this.join$1$bailout(1, separator);
    iterator = $.iterator(this);
    if (iterator.moveNext$0() !== true)
      return "";
    buffer = $.StringBuffer$("");
    if (separator === "")
      do
        buffer.add$1($.S(iterator.get$current()));
      while (iterator.moveNext$0() === true);
    else {
      buffer.add$1($.S(iterator.get$current()));
      for (; iterator.moveNext$0() === true;) {
        buffer.add$1(separator);
        buffer.add$1($.S(iterator.get$current()));
      }
    }
    return buffer.toString$0();
  },
  join$1$bailout: function(state0, separator) {
    var iterator, buffer;
    iterator = $.iterator(this);
    if (iterator.moveNext$0() !== true)
      return "";
    buffer = $.StringBuffer$("");
    if (separator == null || $.$$eq(separator, "") === true)
      do
        buffer.add$1($.S(iterator.get$current()));
      while (iterator.moveNext$0() === true);
    else {
      buffer.add$1($.S(iterator.get$current()));
      for (; iterator.moveNext$0() === true;) {
        buffer.add$1(separator);
        buffer.add$1($.S(iterator.get$current()));
      }
    }
    return buffer.toString$0();
  },
  toList$0: function() {
    return $.List_List$from(this);
  },
  get$length: function() {
    var it, count;
    it = $.iterator(this);
    for (count = 0; it.moveNext$0() === true;)
      ++count;
    return count;
  },
  get$isEmpty: function() {
    return $.iterator(this).moveNext$0() !== true;
  },
  get$last: function() {
    var it, result;
    it = $.iterator(this);
    if (it.moveNext$0() !== true)
      throw $.$$throw($.StateError$("No elements"));
    do
      result = it.get$current();
    while (it.moveNext$0() === true);
    return result;
  },
  elementAt$1: function(index) {
    var t1, remaining, t2;
    if (typeof index !== "number")
      return this.elementAt$1$bailout(1, index);
    if (!(typeof index === "number" && Math.floor(index) === index) || index < 0)
      throw $.$$throw($.RangeError$value(index));
    for (t1 = $.iterator(this), remaining = index; t1.moveNext$0() === true;) {
      t2 = t1.get$current();
      if (remaining === 0)
        return t2;
      --remaining;
    }
    throw $.$$throw($.RangeError$value(index));
  },
  elementAt$1$bailout: function(state0, index) {
    var t1, remaining, t2, t3;
    if (!(typeof index === "number" && Math.floor(index) === index) || index < 0)
      throw $.$$throw($.RangeError$value(index));
    for (t1 = $.iterator(this), remaining = index; t1.moveNext$0() === true;) {
      t2 = t1.get$current();
      t3 = $.getInterceptor(remaining);
      if (t3.$eq(remaining, 0) === true)
        return t2;
      remaining = t3.$sub(remaining, 1);
    }
    throw $.$$throw($.RangeError$value(index));
  }
};

$$.Iterator = {"": "Object;"};

$$.Object = {"": ";",
  $eq: function(other) {
    if (other == null)
      return false;
    return this === other;
  },
  get$hashCode: function() {
    return $.Primitives_objectHashCode(this);
  },
  toString$0: function() {
    return "Instance of '" + $.S($.Primitives_objectTypeName(this)) + "'";
  }
};

$$.StringBuffer = {"": "Object;_contents",
  get$length: function() {
    return $.length(this._contents);
  },
  get$isEmpty: function() {
    var t1 = this.get$length();
    if (typeof t1 !== "number")
      return this.get$isEmpty$bailout(1, t1);
    return t1 === 0;
  },
  get$isEmpty$bailout: function(state0, t1) {
    return $.$$eq(t1, 0);
  },
  add$1: function(obj) {
    return this.write$1(obj);
  },
  write$1: function(obj) {
    var str = typeof obj === "string" ? obj : $.S(obj);
    this._contents = this._contents + str;
  },
  addAll$1: function(objects) {
    var t1;
    for (t1 = $.iterator(objects); t1.moveNext$0() === true;)
      this.write$1(t1.get$current());
  },
  clear$0: function() {
    this._contents = "";
  },
  toString$0: function() {
    return this._contents;
  },
  StringBuffer$1: function($content) {
    if (typeof $content === "string")
      this._contents = $content;
    else
      this.write$1($content);
  }
};

$$.ObjectInterceptor = {"": "Object;",
  $and: function(receiver, a0) {
    return receiver.$and(a0);
  },
  $mul: function(receiver, a0) {
    return receiver.$mul(a0);
  },
  $add: function(receiver, a0) {
    return receiver.$add(a0);
  },
  $sub: function(receiver, a0) {
    return receiver.$sub(a0);
  },
  $lt: function(receiver, a0) {
    return receiver.$lt(a0);
  },
  $shl: function(receiver, a0) {
    return receiver.$shl(a0);
  },
  $le: function(receiver, a0) {
    return receiver.$le(a0);
  },
  $eq: function(receiver, a0) {
    return receiver.$eq(a0);
  },
  $gt: function(receiver, a0) {
    return receiver.$gt(a0);
  },
  $ge: function(receiver, a0) {
    return receiver.$ge(a0);
  },
  $shr: function(receiver, a0) {
    return receiver.$shr(a0);
  },
  add$1: function(receiver, a0) {
    return receiver.add$1(a0);
  },
  addAll$1: function(receiver, a0) {
    return receiver.addAll$1(a0);
  },
  addLast$1: function(receiver, a0) {
    return receiver.addLast$1(a0);
  },
  allMatches$1: function(receiver, a0) {
    return receiver.allMatches$1(a0);
  },
  ceil$0: function(receiver) {
    return receiver.ceil$0();
  },
  charCodeAt$1: function(receiver, a0) {
    return receiver.charCodeAt$1(a0);
  },
  clear$0: function(receiver) {
    return receiver.clear$0();
  },
  codeUnitAt$1: function(receiver, a0) {
    return receiver.codeUnitAt$1(a0);
  },
  compareTo$1: function(receiver, a0) {
    return receiver.compareTo$1(a0);
  },
  get$contains: function(receiver) {
    return receiver.get$contains();
  },
  contains$1: function(receiver, a0) {
    return receiver.contains$1(a0);
  },
  elementAt$1: function(receiver, a0) {
    return receiver.elementAt$1(a0);
  },
  endsWith$1: function(receiver, a0) {
    return receiver.endsWith$1(a0);
  },
  floor$0: function(receiver) {
    return receiver.floor$0();
  },
  forEach$1: function(receiver, a0) {
    return receiver.forEach$1(a0);
  },
  getRange$2: function(receiver, a0, a1) {
    return receiver.getRange$2(a0, a1);
  },
  get$hashCode: function(receiver) {
    return receiver.get$hashCode();
  },
  indexOf$1: function(receiver, a0) {
    return receiver.indexOf$1(a0);
  },
  indexOf$2: function(receiver, a0, a1) {
    return receiver.indexOf$2(a0, a1);
  },
  get$isEmpty: function(receiver) {
    return receiver.get$isEmpty();
  },
  get$isNaN: function(receiver) {
    return receiver.get$isNaN();
  },
  get$isNegative: function(receiver) {
    return receiver.get$isNegative();
  },
  get$iterator: function(receiver) {
    return receiver.get$iterator();
  },
  join$1: function(receiver, a0) {
    return receiver.join$1(a0);
  },
  get$last: function(receiver) {
    return receiver.get$last();
  },
  get$length: function(receiver) {
    return receiver.get$length();
  },
  set$length: function(receiver, value) {
    return receiver.set$length(value);
  },
  remainder$1: function(receiver, a0) {
    return receiver.remainder$1(a0);
  },
  remove$1: function(receiver, a0) {
    return receiver.remove$1(a0);
  },
  removeAll$1: function(receiver, a0) {
    return receiver.removeAll$1(a0);
  },
  removeLast$0: function(receiver) {
    return receiver.removeLast$0();
  },
  replaceAll$2: function(receiver, a0, a1) {
    return receiver.replaceAll$2(a0, a1);
  },
  setRange$4: function(receiver, a0, a1, a2, a3) {
    return receiver.setRange$4(a0, a1, a2, a3);
  },
  sort$1: function(receiver, a0) {
    return receiver.sort$1(a0);
  },
  split$1: function(receiver, a0) {
    return receiver.split$1(a0);
  },
  substring$1: function(receiver, a0) {
    return receiver.substring$1(a0);
  },
  substring$2: function(receiver, a0, a1) {
    return receiver.substring$2(a0, a1);
  },
  toList$0: function(receiver) {
    return receiver.toList$0();
  },
  toLowerCase$0: function(receiver) {
    return receiver.toLowerCase$0();
  },
  toSet$0: function(receiver) {
    return receiver.toSet$0();
  },
  toString$0: function(receiver) {
    return receiver.toString$0();
  },
  toUpperCase$0: function(receiver) {
    return receiver.toUpperCase$0();
  },
  trim$0: function(receiver) {
    return receiver.trim$0();
  },
  truncate$0: function(receiver) {
    return receiver.truncate$0();
  },
  where$1: function(receiver, a0) {
    return receiver.where$1(a0);
  },
  $index: function(receiver, a0) {
    return receiver.$index(a0);
  },
  $indexSet: function(receiver, a0, a1) {
    return receiver.$indexSet(a0, a1);
  },
  $xor: function(receiver, a0) {
    return receiver.$xor(a0);
  },
  $negate: function(receiver) {
    return receiver.$negate();
  },
  $or: function(receiver, a0) {
    return receiver.$or(a0);
  },
  $tdiv: function(receiver, a0) {
    return receiver.$tdiv(a0);
  }
};

$$.JSFunction = {"": "Object;",
  toString$0: function(receiver) {
    return "Closure";
  },
  $eq: function(receiver, a) {
    return receiver === a;
  }
};

$$.JSBool = {"": "Object;",
  toString$0: function(receiver) {
    return String(receiver);
  },
  get$hashCode: function(receiver) {
    return receiver ? 519018 : 218159;
  },
  $isbool: true,
  $eq: function(receiver, a) {
    return receiver === a;
  }
};

$$.JSNull = {"": "Object;",
  toString$0: function(receiver) {
    return "null";
  },
  get$hashCode: function(receiver) {
    return 0;
  },
  $eq: function(receiver, a) {
    return receiver == a;
  }
};

$$.JSArray = {"": "Object;",
  add$1: function(receiver, value) {
    $.checkGrowable(receiver, "add");
    receiver.push(value);
  },
  removeLast$0: function(receiver) {
    $.checkGrowable(receiver, "removeLast");
    if (receiver.length === 0)
      throw $.$$throw($.RangeError$value(-1));
    return receiver.pop();
  },
  remove$1: function(receiver, element) {
    var i;
    $.checkGrowable(receiver, "remove");
    for (i = 0; i < receiver.length; ++i)
      if ($.$$eq(receiver[i], element) === true) {
        receiver.splice(i, 1);
        return;
      }
  },
  where$1: function(receiver, f) {
    return $.WhereIterable$(receiver, f);
  },
  addAll$1: function(receiver, collection) {
    var t1;
    for (t1 = $.iterator(collection); t1.moveNext$0() === true;)
      this.add$1(receiver, t1.get$current());
  },
  addLast$1: function(receiver, value) {
    $.checkGrowable(receiver, "addLast");
    receiver.push(value);
  },
  clear$0: function(receiver) {
    this.set$length(receiver, 0);
  },
  forEach$1: function(receiver, f) {
    var t1;
    for (t1 = this.get$iterator(receiver); t1.moveNext$0() === true;)
      f.call$1(t1.get$current());
    return;
  },
  join$1: function(receiver, separator) {
    var list, i, t1;
    if (separator == null)
      separator = "";
    list = $.List_List(receiver.length);
    for (i = 0; i < receiver.length; ++i) {
      t1 = $.S(receiver[i]);
      if (i >= list.length)
        throw $.ioore(i);
      list[i] = t1;
    }
    return list.join(separator);
  },
  elementAt$1: function(receiver, index) {
    if (index !== (index | 0))
      throw $.iae(index);
    if (index < 0 || index >= receiver.length)
      throw $.ioore(index);
    return receiver[index];
  },
  getRange$2: function(receiver, start, $length) {
    var t1, end;
    if (0 === $length)
      return [];
    $.checkNull(start);
    $.checkNull($length);
    t1 = $length < 0;
    if (t1)
      throw $.$$throw($.ArgumentError$($length));
    if (start < 0)
      throw $.$$throw($.RangeError$value(start));
    end = start + $length;
    if (end > receiver.length)
      throw $.$$throw($.RangeError$value($length));
    if (t1)
      throw $.$$throw($.ArgumentError$($length));
    return receiver.slice(start, end);
  },
  get$last: function(receiver) {
    var t1 = receiver.length;
    if (t1 > 0)
      return receiver[t1 - 1];
    throw $.$$throw($.StateError$("No elements"));
  },
  setRange$4: function(receiver, start, $length, from, startFrom) {
    var t1;
    $.checkMutable(receiver, "set range");
    if ($.$$eq($length, 0) === true)
      return;
    $.checkNull(start);
    $.checkNull($length);
    $.checkNull(from);
    $.checkNull(startFrom);
    if (!(typeof start === "number" && Math.floor(start) === start))
      throw $.$$throw($.ArgumentError$(start));
    if (!(typeof $length === "number" && Math.floor($length) === $length))
      throw $.$$throw($.ArgumentError$($length));
    if (!(typeof startFrom === "number" && Math.floor(startFrom) === startFrom))
      throw $.$$throw($.ArgumentError$(startFrom));
    if ($length < 0)
      throw $.$$throw($.ArgumentError$($length));
    if (start < 0)
      throw $.$$throw($.RangeError$value(start));
    t1 = start + $length;
    if (t1 > receiver.length)
      throw $.$$throw($.RangeError$value(t1));
    $.Arrays_copy(from, startFrom, receiver, start, $length);
  },
  sort$1: function(receiver, compare) {
    $.checkMutable(receiver, "sort");
    $.IterableMixinWorkaround_sortList(receiver, compare);
  },
  indexOf$2: function(receiver, element, start) {
    if (!(typeof start === "number" && Math.floor(start) === start))
      throw $.$$throw($.ArgumentError$(start));
    return $.Arrays_indexOf(receiver, element, start, receiver.length);
  },
  indexOf$1: function($receiver, element) {
    return this.indexOf$2($receiver, element, 0);
  },
  contains$1: function(receiver, other) {
    var t1, i;
    for (t1 = $.getInterceptor(other), i = 0; i < receiver.length; ++i)
      if (t1.$eq(other, receiver[i]) === true)
        return true;
    return false;
  },
  get$contains: function(receiver) {
    return new $.BoundClosure$i1(this, "contains$1", receiver);
  },
  get$isEmpty: function(receiver) {
    return receiver.length === 0;
  },
  toString$0: function(receiver) {
    return $.ToString_collectionToString(receiver);
  },
  toList$0: function(receiver) {
    return $.List_List$from(receiver);
  },
  toSet$0: function(receiver) {
    var t1 = $.HashSet$();
    t1.addAll$1(receiver);
    return t1;
  },
  get$iterator: function(receiver) {
    return $.ListIterator$(receiver);
  },
  get$hashCode: function(receiver) {
    return $.Primitives_objectHashCode(receiver);
  },
  get$length: function(receiver) {
    return receiver.length;
  },
  set$length: function(receiver, newLength) {
    if (!(typeof newLength === "number" && Math.floor(newLength) === newLength))
      throw $.$$throw($.ArgumentError$(newLength));
    if (newLength < 0)
      throw $.$$throw($.RangeError$value(newLength));
    $.checkGrowable(receiver, "set length");
    receiver.length = newLength;
  },
  $index: function(receiver, index) {
    if (!(typeof index === "number" && Math.floor(index) === index))
      throw $.$$throw($.ArgumentError$(index));
    if (index >= receiver.length || index < 0)
      throw $.$$throw($.RangeError$value(index));
    return receiver[index];
  },
  $indexSet: function(receiver, index, value) {
    $.checkMutable(receiver, "indexed set");
    if (!(typeof index === "number" && Math.floor(index) === index))
      throw $.$$throw($.ArgumentError$(index));
    if (index >= receiver.length || index < 0)
      throw $.$$throw($.RangeError$value(index));
    receiver[index] = value;
  },
  $isList: function() {
    return true;
  },
  $asList: function() {
    return null;
  },
  $isCollection: function() {
    return true;
  },
  $asCollection: function() {
    return null;
  },
  $eq: function(receiver, a) {
    return receiver === a;
  }
};

$$.JSNumber = {"": "Object;",
  compareTo$1: function(receiver, b) {
    var bIsNegative;
    if (!(typeof b === "number"))
      throw $.$$throw($.ArgumentError$(b));
    if (receiver < b)
      return -1;
    else if (receiver > b)
      return 1;
    else if (receiver === b) {
      if (receiver === 0) {
        bIsNegative = this.get$isNegative(b);
        if ($.$$eq(this.get$isNegative(receiver), bIsNegative) === true)
          return 0;
        if (this.get$isNegative(receiver) === true)
          return -1;
        return 1;
      }
      return 0;
    } else if (this.get$isNaN(receiver) === true) {
      if (this.get$isNaN(b) === true)
        return 0;
      return 1;
    } else
      return -1;
  },
  get$isNegative: function(receiver) {
    return receiver === 0 ? 1 / receiver < 0 : receiver < 0;
  },
  get$isNaN: function(receiver) {
    return isNaN(receiver);
  },
  remainder$1: function(receiver, b) {
    $.checkNull(b);
    return receiver % b;
  },
  ceil$0: function(receiver) {
    return Math.ceil(receiver);
  },
  floor$0: function(receiver) {
    return Math.floor(receiver);
  },
  truncate$0: function(receiver) {
    return receiver < 0 ? this.ceil$0(receiver) : this.floor$0(receiver);
  },
  toString$0: function(receiver) {
    if (receiver === 0 && (1 / receiver) < 0)
      return "-0.0";
    else
      return String(receiver);
  },
  get$hashCode: function(receiver) {
    return receiver & 0x1FFFFFFF;
  },
  $negate: function(receiver) {
    return -receiver;
  },
  $add: function(receiver, other) {
    if (!(typeof other === "number"))
      throw $.$$throw($.ArgumentError$(other));
    return receiver + other;
  },
  $sub: function(receiver, other) {
    if (!(typeof other === "number"))
      throw $.$$throw($.ArgumentError$(other));
    return receiver - other;
  },
  $mul: function(receiver, other) {
    if (!(typeof other === "number"))
      throw $.$$throw($.ArgumentError$(other));
    return receiver * other;
  },
  $tdiv: function(receiver, other) {
    return this.truncate$0(receiver / other);
  },
  $shl: function(receiver, other) {
    if (other < 0)
      throw $.$$throw($.ArgumentError$(other));
    if (other > 31)
      return 0;
    return (receiver << other) >>> 0;
  },
  $shr: function(receiver, other) {
    if (other < 0)
      throw $.$$throw($.ArgumentError$(other));
    if (receiver > 0) {
      if (other > 31)
        return 0;
      return receiver >>> other;
    }
    if (other > 31)
      other = 31;
    return (receiver >> other) >>> 0;
  },
  $and: function(receiver, other) {
    if (!(typeof other === "number"))
      throw $.$$throw($.ArgumentError$(other));
    return (receiver & other) >>> 0;
  },
  $or: function(receiver, other) {
    return (receiver | other) >>> 0;
  },
  $xor: function(receiver, other) {
    if (!(typeof other === "number"))
      throw $.$$throw($.ArgumentError$(other));
    return (receiver ^ other) >>> 0;
  },
  $lt: function(receiver, other) {
    if (!(typeof other === "number"))
      throw $.$$throw($.ArgumentError$(other));
    return receiver < other;
  },
  $gt: function(receiver, other) {
    if (!(typeof other === "number"))
      throw $.$$throw($.ArgumentError$(other));
    return receiver > other;
  },
  $le: function(receiver, other) {
    if (!(typeof other === "number"))
      throw $.$$throw($.ArgumentError$(other));
    return receiver <= other;
  },
  $ge: function(receiver, other) {
    if (!(typeof other === "number"))
      throw $.$$throw($.ArgumentError$(other));
    return receiver >= other;
  },
  $isJSNumber: true,
  $isnum: true,
  $eq: function(receiver, a) {
    return receiver === a;
  }
};

$$.JSInt = {"": "JSNumber;", $is$int: true, $isnum: true,
  $eq: function(receiver, a) {
    return receiver === a;
  }
};

$$.JSDouble = {"": "JSNumber;", $is$double: true, $isnum: true,
  $eq: function(receiver, a) {
    return receiver === a;
  }
};

$$.JSString = {"": "Object;",
  charCodeAt$1: function(receiver, index) {
    return this.codeUnitAt$1(receiver, index);
  },
  codeUnitAt$1: function(receiver, index) {
    if (!(typeof index === "number"))
      throw $.$$throw($.ArgumentError$(index));
    if (index < 0)
      throw $.$$throw($.RangeError$value(index));
    if (index >= receiver.length)
      throw $.$$throw($.RangeError$value(index));
    return receiver.charCodeAt(index);
  },
  allMatches$1: function(receiver, str) {
    $.checkString(str);
    return $.allMatchesInStringUnchecked(receiver, str);
  },
  endsWith$1: function(receiver, other) {
    var otherLength, t1;
    $.checkString(other);
    otherLength = other.length;
    t1 = receiver.length;
    if (otherLength > t1)
      return false;
    return other === this.substring$1(receiver, t1 - otherLength);
  },
  replaceAll$2: function(receiver, from, to) {
    $.checkString(to);
    return $.stringReplaceAllUnchecked(receiver, from, to);
  },
  split$1: function(receiver, pattern) {
    $.checkNull(pattern);
    return receiver.split(pattern);
  },
  substring$2: function(receiver, startIndex, endIndex) {
    var t1;
    $.checkNum(startIndex);
    if (endIndex == null)
      endIndex = receiver.length;
    $.checkNum(endIndex);
    t1 = $.getInterceptor$JSNumber(startIndex);
    if (t1.$lt(startIndex, 0) === true)
      throw $.$$throw($.RangeError$value(startIndex));
    if (t1.$gt(startIndex, endIndex) === true)
      throw $.$$throw($.RangeError$value(startIndex));
    if ($.$$gt(endIndex, receiver.length) === true)
      throw $.$$throw($.RangeError$value(endIndex));
    return receiver.substring(startIndex, endIndex);
  },
  substring$1: function($receiver, startIndex) {
    return this.substring$2($receiver, startIndex, null);
  },
  toLowerCase$0: function(receiver) {
    return receiver.toLowerCase();
  },
  toUpperCase$0: function(receiver) {
    return receiver.toUpperCase();
  },
  trim$0: function(receiver) {
    return receiver.trim();
  },
  indexOf$2: function(receiver, other, start) {
    $.checkNull(other);
    if (!(typeof start === "number" && Math.floor(start) === start))
      throw $.$$throw($.ArgumentError$(start));
    if (!(typeof other === "string"))
      throw $.$$throw($.ArgumentError$(other));
    if (start < 0)
      return -1;
    return receiver.indexOf(other, start);
  },
  indexOf$1: function($receiver, other) {
    return this.indexOf$2($receiver, other, 0);
  },
  contains$2: function(receiver, other, startIndex) {
    $.checkNull(other);
    return $.stringContainsUnchecked(receiver, other, startIndex);
  },
  contains$1: function($receiver, other) {
    return this.contains$2($receiver, other, 0);
  },
  get$contains: function(receiver) {
    return new $.Bound_contains_JSString(this, "contains$2", receiver);
  },
  get$isEmpty: function(receiver) {
    return receiver.length === 0;
  },
  compareTo$1: function(receiver, other) {
    var t1;
    if (!(typeof other === "string"))
      throw $.$$throw($.ArgumentError$(other));
    if (receiver === other)
      t1 = 0;
    else
      t1 = receiver < other ? -1 : 1;
    return t1;
  },
  toString$0: function(receiver) {
    return receiver;
  },
  get$hashCode: function(receiver) {
    var hash, i, hash0, hash1;
    for (hash = 0, i = 0; i < receiver.length; ++i, hash = hash1) {
      hash0 = 536870911 & hash + receiver.charCodeAt(i);
      hash1 = 536870911 & hash0 + ((524287 & hash0) << 10 >>> 0);
      hash1 = hash1 ^ (hash1 >> 6);
    }
    hash0 = 536870911 & hash + ((67108863 & hash) << 3 >>> 0);
    hash0 = hash0 ^ (hash0 >> 11);
    return 536870911 & hash0 + ((16383 & hash0) << 15 >>> 0);
  },
  get$length: function(receiver) {
    return receiver.length;
  },
  $index: function(receiver, index) {
    if (!(typeof index === "number" && Math.floor(index) === index))
      throw $.$$throw($.ArgumentError$(index));
    if (index >= receiver.length || index < 0)
      throw $.$$throw($.RangeError$value(index));
    return receiver[index];
  },
  $isString: true,
  $eq: function(receiver, a) {
    return receiver === a;
  }
};

$$.ListQueue = {"": "Collection;_table>,_head,_tail,_modificationCount>",
  get$iterator: function() {
    return $._ListQueueIterator$(this);
  },
  forEach$1: function(action) {
    var modificationCount, i, i0, t1;
    modificationCount = this._modificationCount;
    i = this._head;
    if (i !== (i | 0))
      return this.forEach$1$bailout1(1, action, modificationCount, i);
    for (; !(i === this._tail); i0 = (i + 1 & this._table.length - 1) >>> 0, i = i0) {
      t1 = this._table;
      if (i < 0 || i >= t1.length)
        throw $.ioore(i);
      action.call$1(t1[i]);
      this._checkModification$1(modificationCount);
    }
  },
  forEach$1$bailout1: function(state0, action, modificationCount, i) {
    var i0, t1;
    for (; !(i === this._tail); i0 = (i + 1 & this._table.length - 1) >>> 0, i = i0) {
      t1 = this._table;
      if (i !== (i | 0))
        throw $.iae(i);
      if (i < 0 || i >= t1.length)
        throw $.ioore(i);
      action.call$1(t1[i]);
      this._checkModification$1(modificationCount);
    }
  },
  get$isEmpty: function() {
    return this._head === this._tail;
  },
  get$length: function() {
    var t1, t3;
    t1 = this._tail;
    t3 = this._head;
    if (t1 !== (t1 | 0))
      return this.get$length$bailout1(1, t1);
    if (t3 !== (t3 | 0))
      return this.get$length$bailout1(2, t1, t3);
    return (t1 - t3 & this._table.length - 1) >>> 0;
  },
  get$length$bailout1: function(state0, t1, t3) {
    switch (state0) {
      case 0:
        t1 = this._tail;
      case 1:
        state0 = 0;
        t3 = this._head;
      case 2:
        state0 = 0;
        return $.$$and($.$$sub(t1, t3), this._table.length - 1);
    }
  },
  get$last: function() {
    var t1, t2, t3;
    t1 = this._head;
    t2 = this._tail;
    if (t1 === t2)
      throw $.$$throw($.StateError$("No elements"));
    t1 = this._table;
    t3 = $.$$and($.$$sub(t2, 1), this._table.length - 1);
    if (t3 !== (t3 | 0))
      throw $.iae(t3);
    if (t3 < 0 || t3 >= t1.length)
      throw $.ioore(t3);
    return t1[t3];
  },
  elementAt$1: function(index) {
    var t1, t2, t3, t4;
    t1 = $.getInterceptor$JSNumber(index);
    if (t1.$lt(index, 0) === true || t1.$gt(index, this.get$length()) === true)
      throw $.$$throw($.RangeError$range(index, 0, this.get$length()));
    t1 = this._table;
    t2 = this._head;
    if (typeof index !== "number")
      throw $.iae(index);
    t3 = t1.length;
    t4 = (t2 + index & t3 - 1) >>> 0;
    if (t4 < 0 || t4 >= t3)
      throw $.ioore(t4);
    return t1[t4];
  },
  toList$0: function() {
    var list = $.List_List(this.get$length());
    this._writeToList$1(list);
    return list;
  },
  add$1: function(element) {
    this._add$1(element);
  },
  addAll$1: function(elements) {
    var addCount, $length, t1, t2, endSpace, preSpace;
    if (typeof elements === "object" && elements !== null && (elements.constructor === Array || elements.$isList())) {
      addCount = $.length(elements);
      $length = this.get$length();
      t1 = $.getInterceptor$JSNumber($length);
      if ($.$$ge(t1.$add($length, addCount), this._table.length) === true) {
        this._preGrow$1(t1.$add($length, addCount));
        $.CONSTANT.setRange$4(this._table, $length, addCount, elements, 0);
        this._tail = $.$$add(this._tail, addCount);
      } else {
        t1 = this._table.length;
        t2 = this._tail;
        if (typeof t2 !== "number")
          throw $.iae(t2);
        endSpace = t1 - t2;
        t1 = $.getInterceptor$JSNumber(addCount);
        if (t1.$lt(addCount, endSpace) === true) {
          $.CONSTANT.setRange$4(this._table, this._tail, addCount, elements, 0);
          this._tail = $.$$add(this._tail, addCount);
        } else {
          preSpace = t1.$sub(addCount, endSpace);
          $.CONSTANT.setRange$4(this._table, this._tail, endSpace, elements, 0);
          $.CONSTANT.setRange$4(this._table, 0, preSpace, elements, endSpace);
          this._tail = preSpace;
        }
      }
      this._modificationCount = $.$$add(this._modificationCount, 1);
    } else
      for (t1 = $.iterator(elements); t1.moveNext$0() === true;)
        this._add$1(t1.get$current());
  },
  remove$1: function(object) {
    var i, i0, t1;
    i = this._head;
    if (i !== (i | 0))
      return this.remove$1$bailout1(1, object, i);
    for (; !(i === this._tail); i0 = (i + 1 & this._table.length - 1) >>> 0, i = i0) {
      t1 = this._table;
      if (i < 0 || i >= t1.length)
        throw $.ioore(i);
      if ($.$$eq(t1[i], object) === true) {
        this._remove$1(i);
        return;
      }
    }
    t1 = this._modificationCount;
    if (typeof t1 !== "number")
      return this.remove$1$bailout1(2, 0, 0, t1);
    this._modificationCount = t1 + 1;
  },
  remove$1$bailout1: function(state0, object, i, t1) {
    switch (state0) {
      case 0:
        i = this._head;
      case 1:
        state0 = 0;
        for (; !(i === this._tail); i0 = (i + 1 & this._table.length - 1) >>> 0, i = i0) {
          t1 = this._table;
          if (i !== (i | 0))
            throw $.iae(i);
          if (i < 0 || i >= t1.length)
            throw $.ioore(i);
          if ($.$$eq(t1[i], object) === true) {
            this._remove$1(i);
            return;
          }
        }
        t1 = this._modificationCount;
      case 2:
        var i0;
        state0 = 0;
        this._modificationCount = $.$$add(t1, 1);
    }
  },
  removeAll$1: function(objectsToRemove) {
    $.IterableMixinWorkaround_removeAllList(this, objectsToRemove);
  },
  _filterMatching$2: function(test, removeMatching) {
    var index, modificationCount, i, t1, remove, i0;
    index = this._head;
    if (index !== (index | 0))
      return this._filterMatching$2$bailout(1, test, removeMatching, index);
    modificationCount = this._modificationCount;
    if (typeof modificationCount !== "number")
      return this._filterMatching$2$bailout(2, test, removeMatching, index, modificationCount);
    for (i = index; $.$$eq(i, this._tail) !== true;) {
      t1 = this._table;
      if (i !== (i | 0))
        throw $.iae(i);
      if (i < 0 || i >= t1.length)
        throw $.ioore(i);
      remove = $.$$eq(test.call$1(t1[i]), removeMatching);
      this._checkModification$1(modificationCount);
      if (remove === true) {
        i = this._remove$1(i);
        modificationCount = $.$$add(this._modificationCount, 1);
        this._modificationCount = modificationCount;
      } else {
        i0 = (i + 1 & this._table.length - 1) >>> 0;
        i = i0;
      }
    }
  },
  _filterMatching$2$bailout: function(state0, test, removeMatching, index, modificationCount) {
    switch (state0) {
      case 0:
        index = this._head;
      case 1:
        state0 = 0;
        modificationCount = this._modificationCount;
      case 2:
        var i, t1, remove, i0;
        state0 = 0;
        for (i = index; $.$$eq(i, this._tail) !== true;) {
          t1 = this._table;
          if (i !== (i | 0))
            throw $.iae(i);
          if (i < 0 || i >= t1.length)
            throw $.ioore(i);
          remove = $.$$eq(test.call$1(t1[i]), removeMatching);
          this._checkModification$1(modificationCount);
          if (remove === true) {
            i = this._remove$1(i);
            modificationCount = $.$$add(this._modificationCount, 1);
            this._modificationCount = modificationCount;
          } else {
            i0 = (i + 1 & this._table.length - 1) >>> 0;
            i = i0;
          }
        }
    }
  },
  removeMatching$1: function(test) {
    this._filterMatching$2(test, true);
  },
  clear$0: function() {
    var t1, t3, t2, t4, t5, i, i0;
    t1 = this._head;
    if (t1 !== (t1 | 0))
      return this.clear$0$bailout1(1, t1);
    t3 = this._tail;
    if (!(t1 === t3)) {
      for (t2 = this._table, t4 = t2.length, t5 = t4 - 1, i = t1; !(i === t3); i0 = (i + 1 & t5) >>> 0, i = i0) {
        if (i < 0 || i >= t4)
          throw $.ioore(i);
        t2[i] = null;
      }
      this._tail = 0;
      this._head = 0;
      this._modificationCount = $.$$add(this._modificationCount, 1);
    }
  },
  clear$0$bailout1: function(state0, t1) {
    var t3, t2, t4, t5, i, i0;
    t3 = this._tail;
    if (!(t1 === t3)) {
      for (t2 = this._table, t4 = t2.length, t5 = t4 - 1, i = t1; !(i === t3); i0 = (i + 1 & t5) >>> 0, i = i0) {
        if (i !== (i | 0))
          throw $.iae(i);
        if (i < 0 || i >= t4)
          throw $.ioore(i);
        t2[i] = null;
      }
      this._tail = 0;
      this._head = 0;
      this._modificationCount = $.$$add(this._modificationCount, 1);
    }
  },
  toString$0: function() {
    return $.ToString_collectionToString(this);
  },
  addLast$1: function(element) {
    this._add$1(element);
  },
  removeFirst$0: function() {
    var t1, t2, t3, result;
    if (this._head === this._tail)
      throw $.$$throw($.StateError$("No elements"));
    this._modificationCount = $.$$add(this._modificationCount, 1);
    t1 = this._table;
    t2 = this._head;
    if (t2 !== (t2 | 0))
      throw $.iae(t2);
    t3 = t1.length;
    if (t2 < 0 || t2 >= t3)
      throw $.ioore(t2);
    result = t1[t2];
    this._head = (t2 + 1 & t3 - 1) >>> 0;
    return result;
  },
  removeLast$0: function() {
    var t1, t2;
    if (this._head === this._tail)
      throw $.$$throw($.StateError$("No elements"));
    this._modificationCount = $.$$add(this._modificationCount, 1);
    this._tail = $.$$and($.$$sub(this._tail, 1), this._table.length - 1);
    t1 = this._table;
    t2 = this._tail;
    if (t2 !== (t2 | 0))
      throw $.iae(t2);
    if (t2 < 0 || t2 >= t1.length)
      throw $.ioore(t2);
    return t1[t2];
  },
  _checkModification$1: function(expectedModificationCount) {
    if ($.$$eq(expectedModificationCount, this._modificationCount) !== true)
      throw $.$$throw($.ConcurrentModificationError$(this));
  },
  _add$1: function(element) {
    var t1, t2, t3;
    t1 = this._table;
    t2 = this._tail;
    if (t2 !== (t2 | 0))
      throw $.iae(t2);
    t3 = t1.length;
    if (t2 < 0 || t2 >= t3)
      throw $.ioore(t2);
    t1[t2] = element;
    this._tail = (t2 + 1 & t3 - 1) >>> 0;
    if (this._head === this._tail)
      this._grow$0();
    t1 = this._modificationCount;
    if (typeof t1 !== "number")
      return this._add$1$bailout(1, t1);
    this._modificationCount = t1 + 1;
  },
  _add$1$bailout: function(state0, t1) {
    this._modificationCount = $.$$add(t1, 1);
  },
  _remove$1: function(offset) {
    var t1, t2, mask, t3, startDistance, t5, i, prevOffset, t4, nextOffset;
    if (offset !== (offset | 0))
      return this._remove$1$bailout(1, offset);
    t1 = this._table;
    t2 = t1.length;
    mask = t2 - 1;
    t3 = this._head;
    if (t3 !== (t3 | 0))
      return this._remove$1$bailout(2, offset, mask, t3);
    startDistance = (offset - t3 & mask) >>> 0;
    t5 = this._tail;
    if (t5 !== (t5 | 0))
      return this._remove$1$bailout(3, offset, mask, 0, $.CONSTANT2, t5, startDistance);
    if (startDistance < (t5 - offset & mask) >>> 0) {
      for (i = offset; i !== t3; i = prevOffset) {
        prevOffset = (i - 1 & mask) >>> 0;
        if (prevOffset < 0 || prevOffset >= t2)
          throw $.ioore(prevOffset);
        t4 = t1[prevOffset];
        if (i < 0 || i >= t2)
          throw $.ioore(i);
        t1[i] = t4;
      }
      if (t3 < 0 || t3 >= t2)
        throw $.ioore(t3);
      t1[t3] = null;
      this._head = (t3 + 1 & mask) >>> 0;
      return (offset + 1 & mask) >>> 0;
    } else {
      this._tail = (t5 - 1 & mask) >>> 0;
      for (t1 = this._table, t2 = t1.length, i = offset; t3 = this._tail, !(i === t3); i = nextOffset) {
        nextOffset = (i + 1 & mask) >>> 0;
        if (nextOffset < 0 || nextOffset >= t2)
          throw $.ioore(nextOffset);
        t3 = t1[nextOffset];
        if (i < 0 || i >= t2)
          throw $.ioore(i);
        t1[i] = t3;
      }
      if (t3 !== (t3 | 0))
        throw $.iae(t3);
      if (t3 < 0 || t3 >= t2)
        throw $.ioore(t3);
      t1[t3] = null;
      return offset;
    }
  },
  _remove$1$bailout: function(state0, offset, mask, t1, t3, t4, startDistance, t2) {
    switch (state0) {
      case 0:
      case 1:
        state0 = 0;
        mask = this._table.length - 1;
        t1 = this._head;
      case 2:
        state0 = 0;
        t3 = $.getInterceptor$JSNumber(offset);
        startDistance = $.$$and(t3.$sub(offset, t1), mask);
        t4 = this._tail;
      case 3:
        state0 = 0;
      default:
        var i, prevOffset, t5, nextOffset;
        if (state0 === 4 || state0 === 0 && startDistance < $.$$and($.$$sub(t4, offset), mask))
          switch (state0) {
            case 0:
              for (i = offset; t1 = $.getInterceptor(i), t1.$eq(i, this._head) !== true; i = prevOffset) {
                prevOffset = $.$$and(t1.$sub(i, 1), mask);
                t2 = this._table;
                if (prevOffset !== (prevOffset | 0))
                  throw $.iae(prevOffset);
                t4 = t2.length;
                if (prevOffset < 0 || prevOffset >= t4)
                  throw $.ioore(prevOffset);
                t5 = t2[prevOffset];
                if (i !== (i | 0))
                  throw $.iae(i);
                if (i < 0 || i >= t4)
                  throw $.ioore(i);
                t2[i] = t5;
              }
              t1 = this._table;
              t2 = this._head;
            case 4:
              state0 = 0;
              if (t2 !== (t2 | 0))
                throw $.iae(t2);
              if (t2 < 0 || t2 >= t1.length)
                throw $.ioore(t2);
              t1[t2] = null;
              this._head = (t2 + 1 & mask) >>> 0;
              return $.$$and(t3.$add(offset, 1), mask);
          }
        else
          switch (state0) {
            case 0:
              t1 = this._tail;
            case 5:
              state0 = 0;
              this._tail = $.$$and($.$$sub(t1, 1), mask);
              for (i = offset; t1 = $.getInterceptor(i), t1.$eq(i, this._tail) !== true; i = nextOffset) {
                nextOffset = $.$$and(t1.$add(i, 1), mask);
                t2 = this._table;
                if (nextOffset !== (nextOffset | 0))
                  throw $.iae(nextOffset);
                t3 = t2.length;
                if (nextOffset < 0 || nextOffset >= t3)
                  throw $.ioore(nextOffset);
                t4 = t2[nextOffset];
                if (i !== (i | 0))
                  throw $.iae(i);
                if (i < 0 || i >= t3)
                  throw $.ioore(i);
                t2[i] = t4;
              }
              t1 = this._table;
              t2 = this._tail;
              if (t2 !== (t2 | 0))
                throw $.iae(t2);
              if (t2 < 0 || t2 >= t1.length)
                throw $.ioore(t2);
              t1[t2] = null;
              return offset;
          }
    }
  },
  _grow$0: function() {
    var newTable, t1, t2, t3, split;
    newTable = $.List_List$fixedLength(this._table.length * 2, null);
    t1 = this._table;
    t2 = t1.length;
    t3 = this._head;
    split = t2 - t3;
    $.CONSTANT.setRange$4(newTable, 0, split, t1, t3);
    $.CONSTANT.setRange$4(newTable, split, this._head, this._table, 0);
    this._head = 0;
    this._tail = this._table.length;
    this._table = newTable;
  },
  _writeToList$1: function(target) {
    var t1, t2, $length, firstPartSize;
    t1 = $.CONSTANT6.$le(this._head, this._tail);
    t2 = this._head;
    if (t1) {
      $length = $.$$sub(this._tail, t2);
      $.CONSTANT.setRange$4(target, 0, $length, this._table, this._head);
      return $length;
    } else {
      t1 = this._table;
      firstPartSize = t1.length - t2;
      $.CONSTANT.setRange$4(target, 0, firstPartSize, t1, t2);
      $.CONSTANT.setRange$4(target, firstPartSize, this._tail, this._table, 0);
      return $.$$add(this._tail, firstPartSize);
    }
  },
  _preGrow$1: function(newElementCount) {
    var newTable = $.List_List$fixedLength($.ListQueue__nextPowerOf2(newElementCount), null);
    this._tail = this._writeToList$1(newTable);
    this._table = newTable;
    this._head = 0;
  },
  ListQueue$1: function(initialCapacity) {
    if (initialCapacity == null || $.$$lt(initialCapacity, 8) === true)
      initialCapacity = 8;
    else if ($.ListQueue__isPowerOf2(initialCapacity) !== true)
      initialCapacity = $.ListQueue__nextPowerOf2(initialCapacity);
    this._table = $.List_List$fixedLength(initialCapacity, null);
  },
  $asCollection: function() {
    return null;
  },
  $isCollection: function() {
    return true;
  }
};

$$._ListQueueIterator = {"": "Object;_queue,_end,_modificationCount>,_liblib1$_position,_liblib1$_current",
  get$current: function() {
    return this._liblib1$_current;
  },
  moveNext$0: function() {
    var t1, t2, t3, t4;
    t1 = this._queue;
    t1._checkModification$1(this._modificationCount);
    if ($.$$eq(this._liblib1$_position, this._end) === true) {
      this._liblib1$_current = null;
      return false;
    }
    t2 = t1._table;
    t3 = this._liblib1$_position;
    if (t3 !== (t3 | 0))
      throw $.iae(t3);
    if (t3 < 0 || t3 >= t2.length)
      throw $.ioore(t3);
    this._liblib1$_current = t2[t3];
    t4 = this._liblib1$_position;
    if (t4 !== (t4 | 0))
      return this.moveNext$0$bailout(1, t4, t1);
    this._liblib1$_position = (t4 + 1 & t1._table.length - 1) >>> 0;
    return true;
  },
  moveNext$0$bailout: function(state0, t4, t1) {
    this._liblib1$_position = $.$$and($.$$add(t4, 1), t1._table.length - 1);
    return true;
  }
};

$$._DeadEntry = {"": "Object;"};

$$._NullKey = {"": "Object;",
  get$hashCode: function() {
    return $.CONSTANT5.get$hashCode(null);
  }
};

$$._HashTable = {"": "Object;_table>,_capacity,_entryCount=,_deletedCount=,_modificationCount>,_container",
  _key$1: function(offset) {
    var t1, key;
    t1 = this._table;
    if (typeof t1 !== "string" && (typeof t1 !== "object" || t1 === null || t1.constructor !== Array && !t1.$isJavaScriptIndexingBehavior()))
      return this._key$1$bailout(1, offset, t1);
    if (offset !== (offset | 0))
      throw $.iae(offset);
    if (offset < 0 || offset >= t1.length)
      throw $.ioore(offset);
    key = t1[offset];
    if (!(key === $.CONSTANT3))
      return key;
    return;
  },
  _key$1$bailout: function(state0, offset, t1) {
    var key = $.$$index(t1, offset);
    if (!(key === $.CONSTANT3))
      return key;
    return;
  },
  _setKey$2: function(offset, key) {
    if (key == null)
      key = $.CONSTANT3;
    $.$$indexSet(this._table, offset, key);
  },
  get$_elementCount: function() {
    return $.$$sub(this._entryCount, this._deletedCount);
  },
  get$_entrySize: function() {
    return 1;
  },
  _checkModification$1: function(expectedModificationCount) {
    if (!(this._modificationCount === expectedModificationCount))
      throw $.$$throw($.ConcurrentModificationError$(this._container));
  },
  _recordModification$0: function() {
    this._modificationCount = this._modificationCount + 1 & 1073741823;
  },
  _createTable$1: function(capacity) {
    return $.List_List$fixedLength($.$$mul(capacity, this.get$_entrySize()), null);
  },
  _firstProbe$2: function(hashCode, capacity) {
    return $.$$and(hashCode, $.$$sub(capacity, 1));
  },
  _nextProbe$3: function(previousIndex, probeCount, capacity) {
    if (typeof capacity !== "number")
      return this._nextProbe$3$bailout(1, previousIndex, probeCount, capacity);
    return (previousIndex + probeCount & capacity - 1) >>> 0;
  },
  _nextProbe$3$bailout: function(state0, previousIndex, probeCount, capacity) {
    var t2 = $.$$sub(capacity, 1);
    if (typeof t2 !== "number")
      throw $.iae(t2);
    return (previousIndex + probeCount & t2) >>> 0;
  },
  _isFree$1: function(marker) {
    return marker == null || marker === $.CONSTANT4;
  },
  _probeForAdd$2: function(hashCode, object) {
    var entrySize, index, firstTombstone, probeCount, offset, entry;
    entrySize = this.get$_entrySize();
    index = this._firstProbe$2(hashCode, this._capacity);
    for (firstTombstone = -1, probeCount = 0; true;) {
      if (typeof entrySize !== "number")
        throw $.iae(entrySize);
      offset = index * entrySize;
      entry = $.$$index(this._table, offset);
      if (entry === $.CONSTANT4) {
        if (firstTombstone < 0)
          firstTombstone = offset;
      } else if (entry == null) {
        if (firstTombstone < 0)
          return offset;
        return firstTombstone;
      } else if (($.CONSTANT3 === entry ? this._equals$2(null, object) : this._equals$2(entry, object)) === true)
        return offset;
      ++probeCount;
      index = this._nextProbe$3(index, probeCount, this._capacity);
    }
  },
  _probeForLookup$2: function(hashCode, object) {
    var entrySize, index, probeCount, offset, entry;
    entrySize = this.get$_entrySize();
    index = this._firstProbe$2(hashCode, this._capacity);
    for (probeCount = 0; true;) {
      if (typeof entrySize !== "number")
        throw $.iae(entrySize);
      offset = index * entrySize;
      entry = $.$$index(this._table, offset);
      if (entry == null)
        return -1;
      else if (!($.CONSTANT4 === entry))
        if (($.CONSTANT3 === entry ? this._equals$2(null, object) : this._equals$2(entry, object)) === true)
          return offset;
      ++probeCount;
      index = this._nextProbe$3(index, probeCount, this._capacity);
    }
  },
  _equals$2: function(element, other) {
    return $.$$eq(element, other);
  },
  _hashCodeOf$1: function(object) {
    return $.hashCode(object);
  },
  _checkCapacity$0: function() {
    var t1, t3, freeCount;
    t1 = this._capacity;
    t3 = this._entryCount;
    if (typeof t1 !== "number")
      return this._checkCapacity$0$bailout(1, t1);
    if (typeof t3 !== "number")
      return this._checkCapacity$0$bailout(2, t1, t3);
    freeCount = t1 - t3;
    if (!(freeCount * 4 < t1)) {
      t1 = this._deletedCount;
      if (typeof t1 !== "number")
        return this._checkCapacity$0$bailout(4, $.CONSTANT6, 0, t1, freeCount);
      t1 = freeCount < t1;
    } else
      t1 = true;
    if (t1) {
      t1 = this._deletedCount;
      if (typeof t1 !== "number")
        return this._checkCapacity$0$bailout(6, t3, t1);
      this._grow$1(t3 - t1);
    }
  },
  _checkCapacity$0$bailout: function(state0, t1, t3, t2, freeCount) {
    switch (state0) {
      case 0:
        t1 = this._capacity;
      case 1:
        state0 = 0;
        t3 = this._entryCount;
      case 2:
        state0 = 0;
        freeCount = $.$$sub(t1, t3);
        t1 = $.getInterceptor$JSNumber(freeCount);
        t2 = t1.$mul(freeCount, 4);
        t3 = this._capacity;
      case 3:
        state0 = 0;
      case 4:
        if (state0 === 4 || state0 === 0 && $.$$lt(t2, t3) !== true)
          switch (state0) {
            case 0:
              t2 = this._deletedCount;
            case 4:
              state0 = 0;
              t4 = t1.$lt(freeCount, t2) === true;
              t1 = t4;
          }
        else
          t1 = true;
      default:
        var t4;
        if (state0 === 6 || state0 === 5 || state0 === 0 && t1)
          switch (state0) {
            case 0:
              t1 = this._entryCount;
            case 5:
              state0 = 0;
              t3 = this._deletedCount;
            case 6:
              state0 = 0;
              this._grow$1($.$$sub(t1, t3));
          }
    }
  },
  _grow$1: function(contentCount) {
    var capacity, minCapacity, oldTable;
    capacity = this._capacity;
    if (typeof capacity !== "number")
      return this._grow$1$bailout(1, contentCount, capacity);
    minCapacity = $.$$mul(contentCount, 2);
    if (typeof minCapacity !== "number")
      return this._grow$1$bailout(2, 0, capacity, minCapacity);
    for (; capacity < minCapacity;)
      capacity *= 2;
    oldTable = this._table;
    this._table = this._createTable$1(capacity);
    this._capacity = capacity;
    this._entryCount = 0;
    this._deletedCount = 0;
    this._addAllEntries$1(oldTable);
    this._recordModification$0();
  },
  _grow$1$bailout: function(state0, contentCount, capacity, minCapacity) {
    switch (state0) {
      case 0:
        capacity = this._capacity;
      case 1:
        state0 = 0;
        minCapacity = $.$$mul(contentCount, 2);
      case 2:
        var t1, oldTable;
        state0 = 0;
        for (; t1 = $.getInterceptor$JSNumber(capacity), t1.$lt(capacity, minCapacity) === true;)
          capacity = t1.$mul(capacity, 2);
        oldTable = this._table;
        this._table = this._createTable$1(capacity);
        this._capacity = capacity;
        this._entryCount = 0;
        this._deletedCount = 0;
        this._addAllEntries$1(oldTable);
        this._recordModification$0();
    }
  },
  _addAllEntries$1: function(oldTable) {
    var i, t1, object;
    if (typeof oldTable !== "string" && (typeof oldTable !== "object" || oldTable === null || oldTable.constructor !== Array && !oldTable.$isJavaScriptIndexingBehavior()))
      return this._addAllEntries$1$bailout(1, oldTable);
    i = 0;
    while (t1 = oldTable.length, i < t1) {
      if (i !== (i | 0))
        throw $.iae(i);
      if (i < 0 || i >= t1)
        throw $.ioore(i);
      object = oldTable[i];
      if (!this._isFree$1(object))
        this._copyEntry$3(oldTable, i, this._put$1(object));
      t1 = this.get$_entrySize();
      if (typeof t1 !== "number")
        throw $.iae(t1);
      i += t1;
    }
  },
  _addAllEntries$1$bailout: function(state0, oldTable) {
    var t1, i, object, t2;
    t1 = $.getInterceptor$JSArrayJSString(oldTable);
    i = 0;
    while ($.CONSTANT6.$lt(i, t1.get$length(oldTable))) {
      object = t1.$index(oldTable, i);
      if (!this._isFree$1(object))
        this._copyEntry$3(oldTable, i, this._put$1(object));
      t2 = this.get$_entrySize();
      if (typeof t2 !== "number")
        throw $.iae(t2);
      i += t2;
    }
  },
  _copyEntry$3: function(fromTable, fromOffset, toOffset) {
  },
  _get$1: function(key) {
    return this._probeForLookup$2(this._hashCodeOf$1(key), key);
  },
  _put$1: function(key) {
    var offset, t1, oldEntry;
    offset = this._probeForAdd$2(this._hashCodeOf$1(key), key);
    t1 = this._table;
    if (typeof t1 !== "string" && (typeof t1 !== "object" || t1 === null || t1.constructor !== Array && !t1.$isJavaScriptIndexingBehavior()))
      return this._put$1$bailout(1, key, offset, t1);
    if (offset !== (offset | 0))
      throw $.iae(offset);
    if (offset < 0 || offset >= t1.length)
      throw $.ioore(offset);
    oldEntry = t1[offset];
    if (oldEntry == null) {
      t1 = this._entryCount;
      if (typeof t1 !== "number")
        return this._put$1$bailout(2, key, offset, t1);
      this._entryCount = t1 + 1;
    } else if (oldEntry === $.CONSTANT4) {
      t1 = this._deletedCount;
      if (typeof t1 !== "number")
        return this._put$1$bailout(3, key, offset, t1);
      this._deletedCount = t1 - 1;
    } else
      return offset;
    this._setKey$2(offset, key);
    this._recordModification$0();
    return offset;
  },
  _put$1$bailout: function(state0, key, offset, t1) {
    switch (state0) {
      case 0:
        offset = this._probeForAdd$2(this._hashCodeOf$1(key), key);
        t1 = this._table;
      case 1:
        state0 = 0;
        oldEntry = $.$$index(t1, offset);
      default:
        var oldEntry;
        if (state0 === 2 || state0 === 0 && oldEntry == null)
          switch (state0) {
            case 0:
              t1 = this._entryCount;
            case 2:
              state0 = 0;
              this._entryCount = $.$$add(t1, 1);
          }
        else
          switch (state0) {
            case 0:
            case 3:
              if (state0 === 3 || state0 === 0 && oldEntry === $.CONSTANT4)
                switch (state0) {
                  case 0:
                    t1 = this._deletedCount;
                  case 3:
                    state0 = 0;
                    this._deletedCount = $.$$sub(t1, 1);
                }
              else
                return offset;
          }
        this._setKey$2(offset, key);
        this._recordModification$0();
        return offset;
    }
  },
  _remove$1: function(key) {
    var offset = this._probeForLookup$2(this._hashCodeOf$1(key), key);
    if (typeof offset !== "number")
      return this._remove$1$bailout(1, offset);
    if (offset >= 0)
      this._deleteEntry$1(offset);
    return offset;
  },
  _remove$1$bailout: function(state0, offset) {
    if ($.$$ge(offset, 0) === true)
      this._deleteEntry$1(offset);
    return offset;
  },
  _clear$0: function() {
    var i;
    if ($.$$eq(this.get$_elementCount(), 0) === true)
      return;
    for (var i = 0; $.CONSTANT2.$lt(i, $.length(this._table)); ++i)
      $.$$indexSet(this._table, i, null);
    this._deletedCount = 0;
    this._entryCount = 0;
    this._recordModification$0();
  },
  _deleteEntry$1: function(offset) {
    this._setKey$2(offset, $.CONSTANT4);
    this._deletedCount = $.$$add(this._deletedCount, 1);
    this._recordModification$0();
  },
  _HashTable$1: function(initialCapacity) {
    this._table = this._createTable$1(initialCapacity);
  }
};

$$._HashTableIterable = {"": "Iterable;_hashTable>",
  get$length: function() {
    return this._hashTable.get$_elementCount();
  },
  get$isEmpty: function() {
    var t1 = this._hashTable.get$_elementCount();
    if (typeof t1 !== "number")
      return this.get$isEmpty$bailout1(1, t1);
    return t1 === 0;
  },
  get$isEmpty$bailout1: function(state0, t1) {
    return $.$$eq(t1, 0);
  },
  forEach$1: function(action) {
    var t1, entrySize, table, modificationCount, offset, t2, entry;
    t1 = this._hashTable;
    entrySize = t1.get$_entrySize();
    table = t1._table;
    if (typeof table !== "string" && (typeof table !== "object" || table === null || table.constructor !== Array && !table.$isJavaScriptIndexingBehavior()))
      return this.forEach$1$bailout1(1, action, entrySize, t1, table);
    modificationCount = t1._modificationCount;
    offset = 0;
    while (t2 = table.length, offset < t2) {
      if (offset !== (offset | 0))
        throw $.iae(offset);
      if (offset < 0 || offset >= t2)
        throw $.ioore(offset);
      entry = table[offset];
      if (!t1._isFree$1(entry))
        action.call$1(this._valueAt$2(offset, entry));
      t1._checkModification$1(modificationCount);
      if (typeof entrySize !== "number")
        throw $.iae(entrySize);
      offset += entrySize;
    }
  },
  forEach$1$bailout1: function(state0, action, entrySize, t1, table) {
    var modificationCount, t2, offset, entry;
    modificationCount = t1._modificationCount;
    t2 = $.getInterceptor$JSArrayJSString(table);
    offset = 0;
    while ($.CONSTANT6.$lt(offset, t2.get$length(table))) {
      entry = t2.$index(table, offset);
      if (!t1._isFree$1(entry))
        action.call$1(this._valueAt$2(offset, entry));
      t1._checkModification$1(modificationCount);
      if (typeof entrySize !== "number")
        throw $.iae(entrySize);
      offset += entrySize;
    }
  }
};

$$._HashTableIterator = {"": "Object;_hashTable>,_modificationCount>",
  moveNext$0: function() {
    var t1, table, entrySize, t2, t3, t5, entry;
    t1 = this._hashTable;
    t1._checkModification$1(this._modificationCount);
    table = t1.get$_table();
    if (typeof table !== "string" && (typeof table !== "object" || table === null || table.constructor !== Array && !table.$isJavaScriptIndexingBehavior()))
      return this.moveNext$0$bailout(1, t1, table);
    entrySize = t1.get$_entrySize();
    if (typeof entrySize !== "number")
      return this.moveNext$0$bailout(2, t1, table, entrySize);
    t2 = $.getInterceptor$JSArrayJSString(table);
    while (true) {
      t3 = this._offset;
      t5 = table.length;
      if (typeof t3 !== "number")
        return this.moveNext$0$bailout(3, t1, table, entrySize, t3, t2);
      if (!(t3 < t5))
        break;
      if (t3 !== (t3 | 0))
        throw $.iae(t3);
      if (t3 < 0 || t3 >= t5)
        throw $.ioore(t3);
      entry = table[t3];
      this._offset = t3 + entrySize;
      if (!t1._isFree$1(entry)) {
        this._liblib1$_current = this._valueAt$2(t3, entry);
        return true;
      }
    }
    this._liblib1$_current = null;
    return false;
  },
  moveNext$0$bailout: function(state0, t1, table, entrySize, t3, t2, t5, currentOffset) {
    switch (state0) {
      case 0:
        t1 = this._hashTable;
        t1._checkModification$1(this._modificationCount);
        table = t1.get$_table();
      case 1:
        state0 = 0;
        entrySize = t1.get$_entrySize();
      case 2:
        state0 = 0;
        t2 = $.getInterceptor$JSArrayJSString(table);
      default:
        var entry;
        L0:
          while (true)
            switch (state0) {
              case 0:
                t3 = this._offset;
              case 3:
                state0 = 0;
                t5 = t2.get$length(table);
              case 4:
                state0 = 0;
                if (!($.$$lt(t3, t5) === true))
                  break L0;
                currentOffset = this._offset;
              case 5:
                state0 = 0;
                entry = t2.$index(table, currentOffset);
                this._offset = $.$$add(currentOffset, entrySize);
                if (!t1._isFree$1(entry)) {
                  this._liblib1$_current = this._valueAt$2(currentOffset, entry);
                  return true;
                }
            }
        this._liblib1$_current = null;
        return false;
    }
  },
  get$current: function() {
    return this._liblib1$_current;
  }
};

$$._HashTableKeyIterable = {"": "_HashTableIterable;_hashTable",
  get$iterator: function() {
    return $._HashTableKeyIterator$(this._hashTable);
  },
  _valueAt$2: function(offset, key) {
    if (key === $.CONSTANT3)
      return;
    return key;
  },
  contains$1: function(value) {
    var t1 = this._hashTable._get$1(value);
    if (typeof t1 !== "number")
      return this.contains$1$bailout1(1, t1);
    return t1 >= 0;
  },
  contains$1$bailout1: function(state0, t1) {
    return $.$$ge(t1, 0);
  },
  get$contains: function() {
    return new $.BoundClosure$1(this, "contains$1");
  }
};

$$._HashTableKeyIterator = {"": "_HashTableIterator;_hashTable,_modificationCount,_offset,_liblib1$_current",
  _valueAt$2: function(offset, key) {
    if (key === $.CONSTANT3)
      return;
    return key;
  }
};

$$._HashTableValueIterable = {"": "_HashTableIterable;_entryIndex,_hashTable",
  get$iterator: function() {
    return $._HashTableValueIterator$(this._hashTable, this._entryIndex);
  },
  _valueAt$2: function(offset, key) {
    var t1, t3;
    t1 = this._hashTable._table;
    t3 = this._entryIndex;
    if (typeof t1 !== "string" && (typeof t1 !== "object" || t1 === null || t1.constructor !== Array && !t1.$isJavaScriptIndexingBehavior()))
      return this._valueAt$2$bailout1(1, offset, t1);
    t3 = offset + t3;
    if (t3 !== (t3 | 0))
      throw $.iae(t3);
    if (t3 < 0 || t3 >= t1.length)
      throw $.ioore(t3);
    return t1[t3];
  },
  _valueAt$2$bailout1: function(state0, offset, t1) {
    return $.$$index(t1, offset + this._entryIndex);
  }
};

$$._HashTableValueIterator = {"": "_HashTableIterator;_entryIndex,_hashTable,_modificationCount,_offset,_liblib1$_current",
  _valueAt$2: function(offset, key) {
    var t2, t4;
    t2 = this._hashTable.get$_table();
    t4 = this._entryIndex;
    if (typeof offset !== "number")
      return this._valueAt$2$bailout1(1, offset);
    if (typeof t4 !== "number")
      return this._valueAt$2$bailout1(3, offset, t2, t4);
    t4 = offset + t4;
    if (typeof t2 !== "string" && (typeof t2 !== "object" || t2 === null || t2.constructor !== Array && !t2.$isJavaScriptIndexingBehavior()))
      return this._valueAt$2$bailout1(2, offset, t2);
    if (t4 !== (t4 | 0))
      throw $.iae(t4);
    if (t4 < 0 || t4 >= t2.length)
      throw $.ioore(t4);
    return t2[t4];
  },
  _valueAt$2$bailout1: function(state0, offset, t2, t4) {
    switch (state0) {
      case 0:
      case 1:
        state0 = 0;
        t2 = this._hashTable.get$_table();
      case 2:
        state0 = 0;
        t4 = this._entryIndex;
      case 3:
        state0 = 0;
        return $.$$index(t2, $.$$add(offset, t4));
    }
  }
};

$$.HashSet = {"": "Collection;_table>",
  get$iterator: function() {
    return $._HashTableKeyIterator$(this._table);
  },
  get$isEmpty: function() {
    var t1 = this._table.get$_elementCount();
    if (typeof t1 !== "number")
      return this.get$isEmpty$bailout1(1, t1);
    return t1 === 0;
  },
  get$isEmpty$bailout1: function(state0, t1) {
    return $.$$eq(t1, 0);
  },
  contains$1: function(object) {
    return $.$$ge(this._table._get$1(object), 0);
  },
  get$contains: function() {
    return new $.BoundClosure$1(this, "contains$1");
  },
  add$1: function(element) {
    var t1 = this._table;
    t1._put$1(element);
    t1._checkCapacity$0();
  },
  addAll$1: function(objects) {
    var t1, t2;
    for (t1 = $.iterator(objects), t2 = this._table; t1.moveNext$0() === true;) {
      t2._put$1(t1.get$current());
      t2._checkCapacity$0();
    }
  },
  remove$1: function(object) {
    var t1, offset;
    t1 = this._table;
    offset = t1._remove$1(object);
    t1._checkCapacity$0();
    if (typeof offset !== "number")
      return this.remove$1$bailout1(1, offset, t1);
    return offset >= 0;
  },
  remove$1$bailout1: function(state0, offset, t1) {
    t1._checkCapacity$0();
    return $.$$ge(offset, 0);
  },
  removeAll$1: function(objectsToRemove) {
    var t1, t2;
    for (t1 = $.CONSTANT.get$iterator(objectsToRemove), t2 = this._table; t1.moveNext$0() === true;) {
      t2._remove$1(t1.get$current());
      t2._checkCapacity$0();
    }
  },
  clear$0: function() {
    this._table._clear$0();
  },
  toString$0: function() {
    return $.ToString_collectionToString(this);
  },
  HashSet$0: function() {
    this._table._container = this;
  },
  $asCollection: function() {
    return null;
  },
  $isCollection: function() {
    return true;
  }
};

$$._HashMapTable = {"": "_HashTable;_table,_capacity,_entryCount,_deletedCount,_modificationCount,_container",
  get$_entrySize: function() {
    return 2;
  },
  _value$1: function(offset) {
    var t2, t4;
    t2 = this._table;
    if (typeof offset !== "number")
      return this._value$1$bailout(1, offset);
    t4 = offset + 1;
    if (typeof t2 !== "string" && (typeof t2 !== "object" || t2 === null || t2.constructor !== Array && !t2.$isJavaScriptIndexingBehavior()))
      return this._value$1$bailout(2, offset, t2);
    if (t4 !== (t4 | 0))
      throw $.iae(t4);
    if (t4 < 0 || t4 >= t2.length)
      throw $.ioore(t4);
    return t2[t4];
  },
  _value$1$bailout: function(state0, offset, t2) {
    switch (state0) {
      case 0:
      case 1:
        state0 = 0;
        t2 = this._table;
      case 2:
        state0 = 0;
        return $.$$index(t2, $.$$add(offset, 1));
    }
  },
  _setValue$2: function(offset, value) {
    $.$$indexSet(this._table, $.$$add(offset, 1), value);
  },
  _copyEntry$3: function(fromTable, fromOffset, toOffset) {
    var t2, t4, t5;
    t2 = this._table;
    if (typeof toOffset !== "number")
      return this._copyEntry$3$bailout1(1, fromTable, fromOffset, toOffset);
    t4 = toOffset + 1;
    if (typeof fromTable !== "string" && (typeof fromTable !== "object" || fromTable === null || fromTable.constructor !== Array && !fromTable.$isJavaScriptIndexingBehavior()))
      return this._copyEntry$3$bailout1(1, fromTable, fromOffset, toOffset);
    t5 = fromOffset + 1;
    if (t5 !== (t5 | 0))
      throw $.iae(t5);
    if (t5 < 0 || t5 >= fromTable.length)
      throw $.ioore(t5);
    t5 = fromTable[t5];
    if (typeof t2 !== "object" || t2 === null || (t2.constructor !== Array || !!t2.immutable$list) && !t2.$isJavaScriptIndexingBehavior())
      return this._copyEntry$3$bailout1(2, fromTable, fromOffset, toOffset, t2);
    if (t4 !== (t4 | 0))
      throw $.iae(t4);
    if (t4 < 0 || t4 >= t2.length)
      throw $.ioore(t4);
    t2[t4] = t5;
  },
  _copyEntry$3$bailout1: function(state0, fromTable, fromOffset, toOffset, t2) {
    switch (state0) {
      case 0:
      case 1:
        state0 = 0;
        t2 = this._table;
      case 2:
        state0 = 0;
        $.$$indexSet(t2, $.$$add(toOffset, 1), $.$$index(fromTable, fromOffset + 1));
    }
  }
};

$$.HashMap = {"": "Object;_hashTable>",
  containsKey$1: function(key) {
    var t1 = this._hashTable._get$1(key);
    if (typeof t1 !== "number")
      return this.containsKey$1$bailout(1, t1);
    return t1 >= 0;
  },
  containsKey$1$bailout: function(state0, t1) {
    return $.$$ge(t1, 0);
  },
  addAll$1: function(other) {
    $.forEach(other, new $.HashMap_addAll_anon(this));
  },
  $index: function(key) {
    var t1, offset;
    t1 = this._hashTable;
    offset = t1._get$1(key);
    if (typeof offset !== "number")
      return this.$$index$bailout(1, t1, offset);
    if (offset >= 0)
      return t1._value$1(offset);
    return;
  },
  $$index$bailout: function(state0, t1, offset) {
    if ($.$$ge(offset, 0) === true)
      return t1._value$1(offset);
    return;
  },
  $indexSet: function(key, value) {
    var t1 = this._hashTable;
    t1._setValue$2(t1._put$1(key), value);
    t1._checkCapacity$0();
  },
  putIfAbsent$2: function(key, ifAbsent) {
    var t1, offset, entry, modificationCount, value;
    t1 = this._hashTable;
    offset = t1._probeForAdd$2(t1._hashCodeOf$1(key), key);
    entry = $.$$index(t1._table, offset);
    if (!t1._isFree$1(entry))
      return t1._value$1(offset);
    modificationCount = t1._modificationCount;
    value = ifAbsent.call$0();
    if (modificationCount === t1._modificationCount) {
      t1._setKey$2(offset, key);
      t1._setValue$2(offset, value);
      if (entry == null) {
        t1._entryCount = $.$$add(t1._entryCount, 1);
        t1._checkCapacity$0();
      } else
        t1._deletedCount = $.$$sub(t1._deletedCount, 1);
      t1._recordModification$0();
    } else {
      t1._setValue$2(t1._put$1(key), value);
      t1._checkCapacity$0();
    }
    return value;
  },
  remove$1: function(key) {
    var t1, offset, oldValue;
    t1 = this._hashTable;
    offset = t1._remove$1(key);
    if (typeof offset !== "number")
      return this.remove$1$bailout(1, offset, t1);
    if (offset < 0)
      return;
    oldValue = t1._value$1(offset);
    t1._setValue$2(offset, null);
    t1._checkCapacity$0();
    return oldValue;
  },
  remove$1$bailout: function(state0, offset, t1) {
    var oldValue;
    if ($.$$lt(offset, 0) === true)
      return;
    oldValue = t1._value$1(offset);
    t1._setValue$2(offset, null);
    t1._checkCapacity$0();
    return oldValue;
  },
  clear$0: function() {
    this._hashTable._clear$0();
  },
  forEach$1: function(action) {
    var t1, modificationCount, table, entrySize, offset, t2, entry;
    t1 = this._hashTable;
    modificationCount = t1._modificationCount;
    table = t1._table;
    if (typeof table !== "string" && (typeof table !== "object" || table === null || table.constructor !== Array && !table.$isJavaScriptIndexingBehavior()))
      return this.forEach$1$bailout(1, action, table, t1, modificationCount);
    entrySize = t1.get$_entrySize();
    offset = 0;
    while (t2 = table.length, offset < t2) {
      if (offset !== (offset | 0))
        throw $.iae(offset);
      if (offset < 0 || offset >= t2)
        throw $.ioore(offset);
      entry = table[offset];
      if (!t1._isFree$1(entry)) {
        action.call$2(entry, t1._value$1(offset));
        t1._checkModification$1(modificationCount);
      }
      if (typeof entrySize !== "number")
        throw $.iae(entrySize);
      offset += entrySize;
    }
  },
  forEach$1$bailout: function(state0, action, table, t1, modificationCount) {
    var entrySize, t2, offset, entry;
    entrySize = t1.get$_entrySize();
    t2 = $.getInterceptor$JSArrayJSString(table);
    offset = 0;
    while ($.CONSTANT6.$lt(offset, t2.get$length(table))) {
      entry = t2.$index(table, offset);
      if (!t1._isFree$1(entry)) {
        action.call$2(entry, t1._value$1(offset));
        t1._checkModification$1(modificationCount);
      }
      if (typeof entrySize !== "number")
        throw $.iae(entrySize);
      offset += entrySize;
    }
  },
  get$keys: function() {
    return $._HashTableKeyIterable$(this._hashTable);
  },
  get$values: function() {
    return $._HashTableValueIterable$(this._hashTable, 1);
  },
  get$length: function() {
    return this._hashTable.get$_elementCount();
  },
  get$isEmpty: function() {
    var t1 = this._hashTable.get$_elementCount();
    if (typeof t1 !== "number")
      return this.get$isEmpty$bailout(1, t1);
    return t1 === 0;
  },
  get$isEmpty$bailout: function(state0, t1) {
    return $.$$eq(t1, 0);
  },
  toString$0: function() {
    return $.ToString_mapToString(this);
  },
  HashMap$0: function() {
    this._hashTable._container = this;
  },
  $isMap: true
};

$$._LinkedHashTableHeadMarker = {"": "Object;"};

$$._LinkedHashTable = {"": "_HashTable;",
  get$_entrySize: function() {
    return 3;
  },
  _createTable$1: function(capacity) {
    var result, t1;
    result = $.List_List$fixedLength($.$$mul(capacity, this.get$_entrySize()), null);
    t1 = result.length;
    if (0 >= t1)
      throw $.ioore(0);
    result[0] = $.CONSTANT7;
    if (1 >= t1)
      throw $.ioore(1);
    result[1] = 0;
    if (2 >= t1)
      throw $.ioore(2);
    result[2] = 0;
    return result;
  },
  _next$1: function(offset) {
    var t2, t4;
    t2 = this._table;
    if (typeof offset !== "number")
      return this._next$1$bailout(1, offset);
    t4 = offset + 1;
    if (typeof t2 !== "string" && (typeof t2 !== "object" || t2 === null || t2.constructor !== Array && !t2.$isJavaScriptIndexingBehavior()))
      return this._next$1$bailout(2, offset, t2);
    if (t4 !== (t4 | 0))
      throw $.iae(t4);
    if (t4 < 0 || t4 >= t2.length)
      throw $.ioore(t4);
    return t2[t4];
  },
  _next$1$bailout: function(state0, offset, t2) {
    switch (state0) {
      case 0:
      case 1:
        state0 = 0;
        t2 = this._table;
      case 2:
        state0 = 0;
        return $.$$index(t2, $.$$add(offset, 1));
    }
  },
  _setNext$2: function(offset, to) {
    $.$$indexSet(this._table, $.$$add(offset, 1), to);
  },
  _prev$1: function(offset) {
    return $.$$index(this._table, $.$$add(offset, 2));
  },
  _setPrev$2: function(offset, to) {
    $.$$indexSet(this._table, $.$$add(offset, 2), to);
  },
  _linkLast$1: function(offset) {
    var last = this._prev$1(0);
    this._setNext$2(offset, 0);
    this._setPrev$2(offset, last);
    this._setNext$2(last, offset);
    this._setPrev$2(0, offset);
  },
  _unlink$1: function(offset) {
    var next, prev;
    next = this._next$1(offset);
    prev = this._prev$1(offset);
    this._setNext$2(offset, null);
    this._setPrev$2(offset, null);
    this._setNext$2(prev, next);
    this._setPrev$2(next, prev);
  },
  _addAllEntries$1: function(oldTable) {
    var t1, offset, object, t2, nextOffset;
    if (typeof oldTable !== "string" && (typeof oldTable !== "object" || oldTable === null || oldTable.constructor !== Array && !oldTable.$isJavaScriptIndexingBehavior()))
      return this._addAllEntries$1$bailout1(1, oldTable);
    t1 = $.getInterceptor$JSArrayJSString(oldTable);
    if (1 >= oldTable.length)
      throw $.ioore(1);
    offset = oldTable[1];
    if (typeof offset !== "number")
      return this._addAllEntries$1$bailout1(2, oldTable, offset, t1);
    for (; $.$$eq(offset, 0) !== true; offset = nextOffset) {
      if (offset !== (offset | 0))
        throw $.iae(offset);
      t1 = oldTable.length;
      if (offset < 0 || offset >= t1)
        throw $.ioore(offset);
      object = oldTable[offset];
      t2 = offset + 1;
      if (t2 >= t1)
        throw $.ioore(t2);
      nextOffset = oldTable[t2];
      this._copyEntry$3(oldTable, offset, this._put$1(object));
    }
  },
  _addAllEntries$1$bailout1: function(state0, oldTable, offset, t1) {
    switch (state0) {
      case 0:
      case 1:
        state0 = 0;
        t1 = $.getInterceptor$JSArrayJSString(oldTable);
        offset = t1.$index(oldTable, 1);
      case 2:
        var t2, object, nextOffset;
        state0 = 0;
        for (; t2 = $.getInterceptor(offset), t2.$eq(offset, 0) !== true; offset = nextOffset) {
          object = t1.$index(oldTable, offset);
          nextOffset = t1.$index(oldTable, t2.$add(offset, 1));
          this._copyEntry$3(oldTable, offset, this._put$1(object));
        }
    }
  },
  _clear$0: function() {
    var i;
    if ($.$$eq(this.get$_elementCount(), 0) === true)
      return;
    this._setNext$2(0, 0);
    this._setPrev$2(0, 0);
    i = this.get$_entrySize();
    if (typeof i !== "number")
      return this._clear$0$bailout1(1, i);
    for (; $.CONSTANT6.$lt(i, $.length(this._table)); ++i)
      $.$$indexSet(this._table, i, null);
    this._deletedCount = 0;
    this._entryCount = 0;
    this._recordModification$0();
  },
  _clear$0$bailout1: function(state0, i) {
    var t1;
    for (; t1 = $.getInterceptor$JSNumber(i), t1.$lt(i, $.length(this._table)) === true; i = t1.$add(i, 1))
      $.$$indexSet(this._table, i, null);
    this._deletedCount = 0;
    this._entryCount = 0;
    this._recordModification$0();
  },
  _put$1: function(key) {
    var offset, t1, oldEntry;
    offset = this._probeForAdd$2(this._hashCodeOf$1(key), key);
    t1 = this._table;
    if (typeof t1 !== "string" && (typeof t1 !== "object" || t1 === null || t1.constructor !== Array && !t1.$isJavaScriptIndexingBehavior()))
      return this._put$1$bailout1(1, key, offset, t1);
    if (offset !== (offset | 0))
      throw $.iae(offset);
    if (offset < 0 || offset >= t1.length)
      throw $.ioore(offset);
    oldEntry = t1[offset];
    if (oldEntry === $.CONSTANT4) {
      t1 = this._deletedCount;
      if (typeof t1 !== "number")
        return this._put$1$bailout1(2, key, offset, t1);
      this._deletedCount = t1 - 1;
    } else if (oldEntry == null) {
      t1 = this._entryCount;
      if (typeof t1 !== "number")
        return this._put$1$bailout1(3, key, offset, t1);
      this._entryCount = t1 + 1;
    } else
      return offset;
    this._recordModification$0();
    this._setKey$2(offset, key);
    this._linkLast$1(offset);
    return offset;
  },
  _put$1$bailout1: function(state0, key, offset, t1) {
    switch (state0) {
      case 0:
        offset = this._probeForAdd$2(this._hashCodeOf$1(key), key);
        t1 = this._table;
      case 1:
        state0 = 0;
        oldEntry = $.$$index(t1, offset);
      default:
        var oldEntry;
        if (state0 === 2 || state0 === 0 && oldEntry === $.CONSTANT4)
          switch (state0) {
            case 0:
              t1 = this._deletedCount;
            case 2:
              state0 = 0;
              this._deletedCount = $.$$sub(t1, 1);
          }
        else
          switch (state0) {
            case 0:
            case 3:
              if (state0 === 3 || state0 === 0 && oldEntry == null)
                switch (state0) {
                  case 0:
                    t1 = this._entryCount;
                  case 3:
                    state0 = 0;
                    this._entryCount = $.$$add(t1, 1);
                }
              else
                return offset;
          }
        this._recordModification$0();
        this._setKey$2(offset, key);
        this._linkLast$1(offset);
        return offset;
    }
  },
  _deleteEntry$1: function(offset) {
    this._unlink$1(offset);
    this._setKey$2(offset, $.CONSTANT4);
    this._deletedCount = $.$$add(this._deletedCount, 1);
    this._recordModification$0();
  }
};

$$._LinkedHashTableKeyIterable = {"": "Iterable;_table>",
  get$iterator: function() {
    return $._LinkedHashTableKeyIterator$(this._table);
  },
  contains$1: function(value) {
    var t1 = this._table._get$1(value);
    if (typeof t1 !== "number")
      return this.contains$1$bailout1(1, t1);
    return t1 >= 0;
  },
  contains$1$bailout1: function(state0, t1) {
    return $.$$ge(t1, 0);
  },
  get$contains: function() {
    return new $.BoundClosure$1(this, "contains$1");
  },
  get$length: function() {
    return this._table.get$_elementCount();
  }
};

$$._LinkedHashTableKeyIterator = {"": "_LinkedHashTableIterator;_hashTable,_modificationCount,_offset,_liblib1$_current",
  _getCurrent$1: function(offset) {
    return this._hashTable._key$1(offset);
  }
};

$$._LinkedHashTableValueIterable = {"": "Iterable;_hashTable>,_valueIndex",
  get$iterator: function() {
    return $._LinkedHashTableValueIterator$(this._hashTable, this._valueIndex);
  },
  get$length: function() {
    return this._hashTable.get$_elementCount();
  }
};

$$._LinkedHashTableValueIterator = {"": "_LinkedHashTableIterator;_valueIndex,_hashTable,_modificationCount,_offset,_liblib1$_current",
  _getCurrent$1: function(offset) {
    return $.$$index(this._hashTable.get$_table(), $.$$add(offset, this._valueIndex));
  }
};

$$._LinkedHashTableIterator = {"": "Object;_hashTable>,_modificationCount>",
  moveNext$0: function() {
    var t1, t2;
    t1 = this._hashTable;
    t1._checkModification$1(this._modificationCount);
    t2 = this._offset;
    if (typeof t2 !== "number")
      return this.moveNext$0$bailout(1, t1, t2);
    if (t2 === 0) {
      this._liblib1$_current = null;
      return false;
    }
    this._liblib1$_current = this._getCurrent$1(t2);
    this._offset = t1._next$1(this._offset);
    return true;
  },
  moveNext$0$bailout: function(state0, t1, t2) {
    if ($.$$eq(t2, 0) === true) {
      this._liblib1$_current = null;
      return false;
    }
    this._liblib1$_current = this._getCurrent$1(this._offset);
    this._offset = t1._next$1(this._offset);
    return true;
  },
  get$current: function() {
    return this._liblib1$_current;
  }
};

$$._LinkedHashMapTable = {"": "_LinkedHashTable;_table,_capacity,_entryCount,_deletedCount,_modificationCount,_container",
  get$_entrySize: function() {
    return 4;
  },
  _value$1: function(offset) {
    var t2, t4;
    t2 = this._table;
    if (typeof offset !== "number")
      return this._value$1$bailout(1, offset);
    t4 = offset + 3;
    if (typeof t2 !== "string" && (typeof t2 !== "object" || t2 === null || t2.constructor !== Array && !t2.$isJavaScriptIndexingBehavior()))
      return this._value$1$bailout(2, offset, t2);
    if (t4 !== (t4 | 0))
      throw $.iae(t4);
    if (t4 < 0 || t4 >= t2.length)
      throw $.ioore(t4);
    return t2[t4];
  },
  _value$1$bailout: function(state0, offset, t2) {
    switch (state0) {
      case 0:
      case 1:
        state0 = 0;
        t2 = this._table;
      case 2:
        state0 = 0;
        return $.$$index(t2, $.$$add(offset, 3));
    }
  },
  _setValue$2: function(offset, value) {
    $.$$indexSet(this._table, $.$$add(offset, 3), value);
  },
  _copyEntry$3: function(oldTable, fromOffset, toOffset) {
    var t2, t4, t5;
    t2 = this._table;
    if (typeof toOffset !== "number")
      return this._copyEntry$3$bailout1(1, oldTable, fromOffset, toOffset);
    t4 = toOffset + 3;
    if (typeof fromOffset !== "number")
      return this._copyEntry$3$bailout1(1, oldTable, fromOffset, toOffset);
    t5 = fromOffset + 3;
    if (typeof oldTable !== "string" && (typeof oldTable !== "object" || oldTable === null || oldTable.constructor !== Array && !oldTable.$isJavaScriptIndexingBehavior()))
      return this._copyEntry$3$bailout1(1, oldTable, fromOffset, toOffset);
    if (t5 !== (t5 | 0))
      throw $.iae(t5);
    if (t5 < 0 || t5 >= oldTable.length)
      throw $.ioore(t5);
    t5 = oldTable[t5];
    if (typeof t2 !== "object" || t2 === null || (t2.constructor !== Array || !!t2.immutable$list) && !t2.$isJavaScriptIndexingBehavior())
      return this._copyEntry$3$bailout1(2, oldTable, fromOffset, toOffset, t2);
    if (t4 !== (t4 | 0))
      throw $.iae(t4);
    if (t4 < 0 || t4 >= t2.length)
      throw $.ioore(t4);
    t2[t4] = t5;
  },
  _copyEntry$3$bailout1: function(state0, oldTable, fromOffset, toOffset, t2) {
    switch (state0) {
      case 0:
      case 1:
        state0 = 0;
        t2 = this._table;
      case 2:
        state0 = 0;
        $.$$indexSet(t2, $.$$add(toOffset, 3), $.$$index(oldTable, $.$$add(fromOffset, 3)));
    }
  }
};

$$.LinkedHashMap = {"": "Object;_hashTable>",
  containsKey$1: function(key) {
    var t1 = this._hashTable._get$1(key);
    if (typeof t1 !== "number")
      return this.containsKey$1$bailout(1, t1);
    return t1 >= 0;
  },
  containsKey$1$bailout: function(state0, t1) {
    return $.$$ge(t1, 0);
  },
  addAll$1: function(other) {
    $.forEach(other, new $.LinkedHashMap_addAll_anon(this));
  },
  $index: function(key) {
    var t1, offset;
    t1 = this._hashTable;
    offset = t1._get$1(key);
    if (typeof offset !== "number")
      return this.$$index$bailout(1, t1, offset);
    if (offset >= 0)
      return t1._value$1(offset);
    return;
  },
  $$index$bailout: function(state0, t1, offset) {
    if ($.$$ge(offset, 0) === true)
      return t1._value$1(offset);
    return;
  },
  $indexSet: function(key, value) {
    var t1 = this._hashTable;
    t1._setValue$2(t1._put$1(key), value);
    t1._checkCapacity$0();
  },
  putIfAbsent$2: function(key, ifAbsent) {
    var t1, offset, entry, modificationCount, value;
    t1 = this._hashTable;
    offset = t1._probeForAdd$2(t1._hashCodeOf$1(key), key);
    entry = $.$$index(t1._table, offset);
    if (!t1._isFree$1(entry))
      return t1._value$1(offset);
    modificationCount = t1._modificationCount;
    value = ifAbsent.call$0();
    if (modificationCount === t1._modificationCount) {
      t1._setKey$2(offset, key);
      t1._setValue$2(offset, value);
      t1._linkLast$1(offset);
      if (entry == null) {
        t1._entryCount = $.$$add(t1._entryCount, 1);
        t1._checkCapacity$0();
      } else
        t1._deletedCount = $.$$sub(t1._deletedCount, 1);
      t1._recordModification$0();
    } else {
      t1._setValue$2(t1._put$1(key), value);
      t1._checkCapacity$0();
    }
    return value;
  },
  remove$1: function(key) {
    var t1, offset, oldValue;
    t1 = this._hashTable;
    offset = t1._remove$1(key);
    if (typeof offset !== "number")
      return this.remove$1$bailout(1, offset, t1);
    if (offset < 0)
      return;
    oldValue = t1._value$1(offset);
    t1._setValue$2(offset, null);
    t1._checkCapacity$0();
    return oldValue;
  },
  remove$1$bailout: function(state0, offset, t1) {
    var oldValue;
    if ($.$$lt(offset, 0) === true)
      return;
    oldValue = t1._value$1(offset);
    t1._setValue$2(offset, null);
    t1._checkCapacity$0();
    return oldValue;
  },
  clear$0: function() {
    this._hashTable._clear$0();
  },
  forEach$1: function(action) {
    var t1, modificationCount, offset;
    t1 = this._hashTable;
    modificationCount = t1._modificationCount;
    offset = t1._next$1(0);
    if (typeof offset !== "number")
      return this.forEach$1$bailout(1, t1, modificationCount, action, offset);
    for (; $.$$eq(offset, 0) !== true; offset = t1._next$1(offset)) {
      action.call$2(t1._key$1(offset), t1._value$1(offset));
      t1._checkModification$1(modificationCount);
    }
  },
  forEach$1$bailout: function(state0, t1, modificationCount, action, offset) {
    for (; $.$$eq(offset, 0) !== true; offset = t1._next$1(offset)) {
      action.call$2(t1._key$1(offset), t1._value$1(offset));
      t1._checkModification$1(modificationCount);
    }
  },
  get$keys: function() {
    return $._LinkedHashTableKeyIterable$(this._hashTable);
  },
  get$values: function() {
    return $._LinkedHashTableValueIterable$(this._hashTable, 3);
  },
  get$length: function() {
    return this._hashTable.get$_elementCount();
  },
  get$isEmpty: function() {
    var t1 = this._hashTable.get$_elementCount();
    if (typeof t1 !== "number")
      return this.get$isEmpty$bailout(1, t1);
    return t1 === 0;
  },
  get$isEmpty$bailout: function(state0, t1) {
    return $.$$eq(t1, 0);
  },
  toString$0: function() {
    return $.ToString_mapToString(this);
  },
  LinkedHashMap$0: function() {
    this._hashTable._container = this;
  },
  $isMap: true
};

$$.ListIterator = {"": "Object;_iterable,_liblib$_length,_index,_liblib$_current",
  get$current: function() {
    return this._liblib$_current;
  },
  moveNext$0: function() {
    var t1, t2, t3;
    t1 = this._liblib$_length;
    t2 = this._iterable;
    if (t1 !== t2.length)
      throw $.$$throw($.ConcurrentModificationError$(t2));
    t3 = this._index;
    if (typeof t3 !== "number")
      return this.moveNext$0$bailout(1, t3, t1, t2);
    if (t3 === t1) {
      this._liblib$_current = null;
      return false;
    }
    this._liblib$_current = $.CONSTANT.elementAt$1(t2, t3);
    t1 = this._index;
    if (typeof t1 !== "number")
      return this.moveNext$0$bailout(2, 0, t1);
    this._index = t1 + 1;
    return true;
  },
  moveNext$0$bailout: function(state0, t3, t1, t2) {
    switch (state0) {
      case 0:
        t1 = this._liblib$_length;
        t2 = this._iterable;
        if (t1 !== t2.length)
          throw $.$$throw($.ConcurrentModificationError$(t2));
        t3 = this._index;
      case 1:
        state0 = 0;
        if ($.$$eq(t3, t1) === true) {
          this._liblib$_current = null;
          return false;
        }
        this._liblib$_current = $.CONSTANT.elementAt$1(t2, this._index);
        t1 = this._index;
      case 2:
        state0 = 0;
        this._index = $.$$add(t1, 1);
        return true;
    }
  }
};

$$.WhereIterable = {"": "Iterable;_iterable,_f",
  get$iterator: function() {
    return $.WhereIterator$($.iterator(this._iterable), this._f);
  }
};

$$.WhereIterator = {"": "Iterator;_iterator,_f",
  _f$1: function(arg0) {
    return this._f.call$1(arg0);
  },
  moveNext$0: function() {
    for (var t1 = this._iterator; t1.moveNext$0() === true;)
      if (this._f$1(t1.get$current()) === true)
        return true;
    return false;
  },
  get$current: function() {
    return this._iterator.get$current();
  }
};

$$._Manager = {"": "Object;nextIsolateId=,currentManagerId,nextManagerId,currentContext>,rootContext,topEventLoop>,fromCommandLine,isWorker>,supportsWorkers,isolates,mainManager,managers",
  get$useWorkers: function() {
    return this.supportsWorkers;
  },
  get$needSerialization: function() {
    return this.get$useWorkers();
  },
  _nativeDetectEnvironment$0: function() {
    var t1, t2;
    t1 = $.get$globalWindow() == null;
    this.isWorker = t1 && $.get$globalPostMessageDefined() === true;
    if (this.isWorker !== true)
      t2 = !($.get$globalWorker() == null) && !($.get$IsolateNatives_thisScript() == null);
    else
      t2 = true;
    this.supportsWorkers = t2;
    this.fromCommandLine = t1 && this.isWorker !== true;
  },
  _nativeInitWorkerMessageHandler$0: function() {
    var $function = function (e) { $.IsolateNatives__processWorkerMessage.call$2(this.mainManager, e); };
    $.get$globalThis().onmessage = $function;
    $.get$globalThis().dartPrint = function (object) {};
  },
  maybeCloseWorker$0: function() {
    if (this.isWorker === true && $.isEmpty(this.isolates) === true && $.$$eq(this.topEventLoop.get$activeTimerCount(), 0) === true)
      this.mainManager.postMessage$1($._serializeMessage($.makeLiteralMap(["command", "close"])));
  },
  _Manager$0: function() {
    this._nativeDetectEnvironment$0();
    this.topEventLoop = $._EventLoop$();
    this.isolates = $.Map_Map();
    this.managers = $.Map_Map();
    if (this.isWorker === true) {
      this.mainManager = $._MainManagerStub$();
      this._nativeInitWorkerMessageHandler$0();
    }
  }
};

$$._IsolateContext = {"": "Object;id>,ports>,isolateStatics",
  eval$1: function(code) {
    var old, result;
    old = $globalState.currentContext;
    $globalState.currentContext = this;
    this._setGlobals$0();
    result = null;
    try {
      result = code.call$0();
    } finally {
      $globalState.currentContext = old;
      if (!(old == null))
        old._setGlobals$0();
    }
    return result;
  },
  _setGlobals$0: function() {
    $ = this.isolateStatics;
  },
  lookup$1: function(portId) {
    return $.$$index(this.ports, portId);
  },
  register$2: function(portId, port) {
    if (this.ports.containsKey$1(portId) === true)
      throw $.$$throw($._ExceptionImplementation$("Registry: ports must be registered only once."));
    $.$$indexSet(this.ports, portId, port);
    $.$$indexSet($globalState.isolates, this.id, this);
  },
  unregister$1: function(portId) {
    $.remove(this.ports, portId);
    if ($.isEmpty(this.ports) === true)
      $.remove($globalState.isolates, this.id);
  },
  _IsolateContext$0: function() {
    var t1, t2;
    t1 = $._globalState();
    t2 = t1.get$nextIsolateId();
    t1.set$nextIsolateId($.$$add(t2, 1));
    this.id = t2;
    this.ports = $.Map_Map();
    this.isolateStatics = new Isolate;
  }
};

$$._EventLoop = {"": "Object;events,activeTimerCount=",
  enqueue$3: function(isolate, fn, msg) {
    $.addLast(this.events, $._IsolateEvent$(isolate, fn, msg));
  },
  dequeue$0: function() {
    var t1 = this.events;
    if ($.isEmpty(t1) === true)
      return;
    return t1.removeFirst$0();
  },
  checkOpenReceivePortsFromCommandLine$0: function() {
    if (!($globalState.rootContext == null) && $globalState.isolates.containsKey$1($globalState.rootContext.get$id()) === true && $globalState.fromCommandLine === true && $.isEmpty($globalState.rootContext.get$ports()) === true)
      throw $.$$throw($._ExceptionImplementation$("Program exited with open ReceivePorts."));
  },
  runIteration$0: function() {
    var $event = this.dequeue$0();
    if ($event == null) {
      this.checkOpenReceivePortsFromCommandLine$0();
      $globalState.maybeCloseWorker$0();
      return false;
    }
    $event.process$0();
    return true;
  },
  _runHelper$0: function() {
    if (!($.get$globalWindow() == null))
      new $._EventLoop__runHelper_next(this).call$0();
    else
      for (; this.runIteration$0();)
        ;
  },
  run$0: function() {
    var e, trace, exception, t1;
    if ($globalState.isWorker !== true)
      this._runHelper$0();
    else
      try {
        this._runHelper$0();
      } catch (exception) {
        t1 = $.unwrapException(exception);
        e = t1;
        trace = $.getTraceFromException(exception);
        $globalState.mainManager.postMessage$1($._serializeMessage($.makeLiteralMap(["command", "error", "msg", $.S(e) + "\n" + $.S(trace)])));
      }

  }
};

$$._IsolateEvent = {"": "Object;isolate,fn,message",
  process$0: function() {
    this.isolate.eval$1(this.fn);
  }
};

$$._MainManagerStub = {"": "Object;",
  get$id: function() {
    return 0;
  },
  postMessage$1: function(msg) {
    $.get$globalThis().postMessage(msg);
  },
  terminate$0: function() {
  }
};

$$._BaseSendPort = {"": "Object;_isolateId>",
  _checkReplyTo$1: function(replyTo) {
    if (!(replyTo == null) && !(typeof replyTo === "object" && replyTo !== null && !!replyTo.$is_NativeJsSendPort) && !(typeof replyTo === "object" && replyTo !== null && !!replyTo.$is_WorkerSendPort) && !(typeof replyTo === "object" && replyTo !== null && !!replyTo.$is_BufferingSendPort))
      throw $.$$throw($._ExceptionImplementation$("SendPort.send: Illegal replyTo port type"));
  },
  call$1: function(message) {
    var completer, port;
    completer = $._CompleterImpl$();
    port = $.ReceivePortImpl$();
    this.send$2(message, port.toSendPort$0());
    port.receive$1(new $._BaseSendPort_call_anon(completer, port));
    return completer.future;
  },
  $isSendPort: true
};

$$._NativeJsSendPort = {"": "_BaseSendPort;_receivePort>,_isolateId",
  send$2: function(message, replyTo) {
    $._waitForPendingPorts([message, replyTo], new $._NativeJsSendPort_send_anon(this, message, replyTo));
  },
  $eq: function(other) {
    if (other == null)
      return false;
    return typeof other === "object" && other !== null && !!other.$is_NativeJsSendPort && $.$$eq(this._receivePort, other._receivePort) === true;
  },
  get$hashCode: function() {
    return this._receivePort.get$_id();
  },
  $is_NativeJsSendPort: true,
  $isSendPort: true
};

$$._WorkerSendPort = {"": "_BaseSendPort;_workerId>,_receivePortId,_isolateId",
  send$2: function(message, replyTo) {
    $._waitForPendingPorts([message, replyTo], new $._WorkerSendPort_send_anon(this, message, replyTo));
  },
  $eq: function(other) {
    var t1;
    if (other == null)
      return false;
    if (typeof other === "object" && other !== null && !!other.$is_WorkerSendPort)
      t1 = $.$$eq(this._workerId, other._workerId) === true && $.$$eq(this._isolateId, other._isolateId) === true && $.$$eq(this._receivePortId, other._receivePortId) === true;
    else
      t1 = false;
    return t1;
  },
  get$hashCode: function() {
    var t1, t2;
    t1 = $.$$xor($.$$shl(this._workerId, 16), $.$$shl(this._isolateId, 8));
    t2 = this._receivePortId;
    if (typeof t2 !== "number")
      throw $.iae(t2);
    return (t1 ^ t2) >>> 0;
  },
  $is_WorkerSendPort: true,
  $isSendPort: true
};

$$.ReceivePortImpl = {"": "Object;_id>,_callback>",
  _callback$2: function(arg0, arg1) {
    return this._callback.call$2(arg0, arg1);
  },
  receive$1: function(onMessage) {
    this._callback = onMessage;
  },
  close$0: function() {
    this._callback = null;
    $globalState.currentContext.unregister$1(this._id);
  },
  toSendPort$0: function() {
    return $._NativeJsSendPort$(this, $globalState.currentContext.get$id());
  },
  ReceivePortImpl$0: function() {
    $._globalState().get$currentContext().register$2(this._id, this);
  }
};

$$._PendingSendPortFinder = {"": "_MessageTraverser;ports>,_visited",
  visitPrimitive$1: function(x) {
  },
  visitList$1: function(list) {
    if (!($.$$index(this._visited, list) == null))
      return;
    $.$$indexSet(this._visited, list, true);
    $.forEach(list, new $._PendingSendPortFinder_visitList_anon(this));
  },
  visitMap$1: function(map) {
    if (!($.$$index(this._visited, map) == null))
      return;
    $.$$indexSet(this._visited, map, true);
    $.forEach(map.get$values(), new $._PendingSendPortFinder_visitMap_anon(this));
  },
  visitSendPort$1: function(port) {
    if (!!port.$is_BufferingSendPort && port._port == null)
      this.ports.push(port.get$_futurePort());
  },
  _PendingSendPortFinder$0: function() {
    this._visited = $._JsVisitedMap$();
  }
};

$$._JsSerializer = {"": "_Serializer;_nextFreeRefId,_visited",
  visitSendPort$1: function(x) {
    if (typeof x === "object" && x !== null && !!x.$is_NativeJsSendPort)
      return this.visitNativeJsSendPort$1(x);
    if (typeof x === "object" && x !== null && !!x.$is_WorkerSendPort)
      return ["sendport", x._workerId, x._isolateId, x._receivePortId];
    if (typeof x === "object" && x !== null && !!x.$is_BufferingSendPort)
      return this.visitBufferingSendPort$1(x);
    throw $.$$throw("Illegal underlying port " + $.S(x));
  },
  visitNativeJsSendPort$1: function(port) {
    return ["sendport", $globalState.currentManagerId, port._isolateId, port._receivePort.get$_id()];
  },
  visitBufferingSendPort$1: function(port) {
    var t1 = port._port;
    if (!(t1 == null))
      return this.visitSendPort$1(t1);
    else
      throw $.$$throw("internal error: must call _waitForPendingPorts to ensure all ports are resolved at this point.");
  },
  _JsSerializer$0: function() {
    this._visited = $._JsVisitedMap$();
  }
};

$$._JsCopier = {"": "_Copier;_visited",
  visitSendPort$1: function(x) {
    if (typeof x === "object" && x !== null && !!x.$is_NativeJsSendPort)
      return this.visitNativeJsSendPort$1(x);
    if (typeof x === "object" && x !== null && !!x.$is_WorkerSendPort)
      return this.visitWorkerSendPort$1(x);
    if (typeof x === "object" && x !== null && !!x.$is_BufferingSendPort)
      return this.visitBufferingSendPort$1(x);
    throw $.$$throw("Illegal underlying port " + $.S(this.get$p()));
  },
  visitNativeJsSendPort$1: function(port) {
    return $._NativeJsSendPort$(port._receivePort, port._isolateId);
  },
  visitWorkerSendPort$1: function(port) {
    return $._WorkerSendPort$(port._workerId, port._isolateId, port._receivePortId);
  },
  visitBufferingSendPort$1: function(port) {
    var t1 = port._port;
    if (!(t1 == null))
      return this.visitSendPort$1(t1);
    else
      throw $.$$throw("internal error: must call _waitForPendingPorts to ensure all ports are resolved at this point.");
  },
  _JsCopier$0: function() {
    this._visited = $._JsVisitedMap$();
  }
};

$$._JsDeserializer = {"": "_Deserializer;_deserialized",
  deserializeSendPort$1: function(x) {
    var t1, managerId, isolateId, receivePortId, isolate, receivePort;
    t1 = $.getInterceptor$JSArrayJSString(x);
    managerId = t1.$index(x, 1);
    isolateId = t1.$index(x, 2);
    receivePortId = t1.$index(x, 3);
    if ($.$$eq(managerId, $globalState.currentManagerId) === true) {
      isolate = $.$$index($globalState.isolates, isolateId);
      if (isolate == null)
        return;
      receivePort = isolate.lookup$1(receivePortId);
      if (receivePort == null)
        return;
      return $._NativeJsSendPort$(receivePort, isolateId);
    } else
      return $._WorkerSendPort$(managerId, isolateId, receivePortId);
  }
};

$$._JsVisitedMap = {"": "Object;tagged",
  $index: function(object) {
    return object['__MessageTraverser__attached_info__'];
  },
  $indexSet: function(object, info) {
    $.add(this.tagged, object);
    object['__MessageTraverser__attached_info__'] = info;
  },
  reset$0: function() {
    this.tagged = $.List_List(0);
  },
  cleanup$0: function() {
    var $length, i;
    $length = $.length(this.tagged);
    if (typeof $length !== "number")
      return this.cleanup$0$bailout(1, $length);
    i = 0;
    for (; i < $length; ++i)
      $.$$index(this.tagged, i)['__MessageTraverser__attached_info__'] = null;
    this.tagged = null;
  },
  cleanup$0$bailout: function(state0, $length) {
    var i = 0;
    for (; $.CONSTANT2.$lt(i, $length); ++i)
      $.$$index(this.tagged, i)['__MessageTraverser__attached_info__'] = null;
    this.tagged = null;
  }
};

$$._MessageTraverserVisitedMap = {"": "Object;",
  $index: function(object) {
    return;
  },
  $indexSet: function(object, info) {
  },
  reset$0: function() {
  },
  cleanup$0: function() {
  }
};

$$._MessageTraverser = {"": "Object;",
  traverse$1: function(x) {
    var result, t1;
    t1 = x;
    if (t1 == null || typeof t1 === "string" || typeof t1 === "number" || typeof t1 === "boolean")
      return this.visitPrimitive$1(x);
    this._visited.reset$0();
    result = null;
    try {
      result = this._dispatch$1(x);
    } finally {
      this._visited.cleanup$0();
    }
    return result;
  },
  _dispatch$1: function(x) {
    if (x == null || typeof x === "string" || typeof x === "number" || typeof x === "boolean")
      return this.visitPrimitive$1(x);
    if (typeof x === "object" && x !== null && (x.constructor === Array || x.$isList()))
      return this.visitList$1(x);
    if (typeof x === "object" && x !== null && !!x.$isMap)
      return this.visitMap$1(x);
    if (typeof x === "object" && x !== null && !!x.$isSendPort)
      return this.visitSendPort$1(x);
    if (typeof x === "object" && x !== null && !!x.$isSendPortSync)
      return this.visitSendPortSync$1(x);
    return this.visitObject$1(x);
  },
  visitObject$1: function(x) {
    throw $.$$throw("Message serialization: Illegal value " + $.S(x) + " passed");
  }
};

$$._Copier = {"": "_MessageTraverser;",
  visitPrimitive$1: function(x) {
    return x;
  },
  visitList$1: function(list) {
    var copy, len, i, t1;
    if (typeof list !== "object" || list === null || list.constructor !== Array && !list.$isJavaScriptIndexingBehavior())
      return this.visitList$1$bailout1(1, list);
    copy = $.$$index(this._visited, list);
    if (!(copy == null))
      return copy;
    len = list.length;
    copy = $.List_List(len);
    $.$$indexSet(this._visited, list, copy);
    for (i = 0; i < len; ++i) {
      if (i >= list.length)
        throw $.ioore(i);
      t1 = this._dispatch$1(list[i]);
      if (i >= copy.length)
        throw $.ioore(i);
      copy[i] = t1;
    }
    return copy;
  },
  visitList$1$bailout1: function(state0, list, t1, len) {
    switch (state0) {
      case 0:
      case 1:
        state0 = 0;
        copy = $.$$index(this._visited, list);
        if (!(copy == null))
          return copy;
        t1 = $.getInterceptor$JSArrayJSString(list);
        len = t1.get$length(list);
      case 2:
        var copy, i, t2;
        state0 = 0;
        copy = $.List_List(len);
        $.$$indexSet(this._visited, list, copy);
        for (i = 0; $.CONSTANT2.$lt(i, len); ++i) {
          t2 = this._dispatch$1(t1.$index(list, i));
          if (i >= copy.length)
            throw $.ioore(i);
          copy[i] = t2;
        }
        return copy;
    }
  },
  visitMap$1: function(map) {
    var t1, t2;
    t1 = {};
    t1.copy_0 = $.$$index(this._visited, map);
    t2 = t1.copy_0;
    if (!(t2 == null))
      return t2;
    t1.copy_0 = $.HashMap$();
    $.$$indexSet(this._visited, map, t1.copy_0);
    map.forEach$1(new $._Copier_visitMap_anon(t1, this));
    return t1.copy_0;
  }
};

$$._Serializer = {"": "_MessageTraverser;",
  visitPrimitive$1: function(x) {
    return x;
  },
  visitList$1: function(list) {
    var copyId, id;
    copyId = $.$$index(this._visited, list);
    if (!(copyId == null))
      return ["ref", copyId];
    id = this._nextFreeRefId;
    this._nextFreeRefId = id + 1;
    $.$$indexSet(this._visited, list, id);
    return ["list", id, this._serializeList$1(list)];
  },
  visitMap$1: function(map) {
    var copyId, id;
    copyId = $.$$index(this._visited, map);
    if (!(copyId == null))
      return ["ref", copyId];
    id = this._nextFreeRefId;
    this._nextFreeRefId = id + 1;
    $.$$indexSet(this._visited, map, id);
    return ["map", id, this._serializeList$1($.toList(map.get$keys())), this._serializeList$1($.toList(map.get$values()))];
  },
  _serializeList$1: function(list) {
    var len, result, i, t1;
    if (typeof list !== "string" && (typeof list !== "object" || list === null || list.constructor !== Array && !list.$isJavaScriptIndexingBehavior()))
      return this._serializeList$1$bailout(1, list);
    len = list.length;
    result = $.List_List(len);
    for (i = 0; i < len; ++i) {
      if (i >= list.length)
        throw $.ioore(i);
      t1 = this._dispatch$1(list[i]);
      if (i >= result.length)
        throw $.ioore(i);
      result[i] = t1;
    }
    return result;
  },
  _serializeList$1$bailout: function(state0, list, t1, len) {
    switch (state0) {
      case 0:
      case 1:
        state0 = 0;
        t1 = $.getInterceptor$JSArrayJSString(list);
        len = t1.get$length(list);
      case 2:
        var result, i, t2;
        state0 = 0;
        result = $.List_List(len);
        for (i = 0; $.CONSTANT2.$lt(i, len); ++i) {
          t2 = this._dispatch$1(t1.$index(list, i));
          if (i >= result.length)
            throw $.ioore(i);
          result[i] = t2;
        }
        return result;
    }
  }
};

$$._Deserializer = {"": "Object;",
  deserialize$1: function(x) {
    if (x == null || typeof x === "string" || typeof x === "number" || typeof x === "boolean")
      return x;
    this._deserialized = $.HashMap$();
    return this._deserializeHelper$1(x);
  },
  _deserializeHelper$1: function(x) {
    if (x == null || typeof x === "string" || typeof x === "number" || typeof x === "boolean")
      return x;
    switch ($.$$index(x, 0)) {
      case "ref":
        return this._deserializeRef$1(x);
      case "list":
        return this._deserializeList$1(x);
      case "map":
        return this._deserializeMap$1(x);
      case "sendport":
        return this.deserializeSendPort$1(x);
      default:
        return this.deserializeObject$1(x);
    }
  },
  _deserializeRef$1: function(x) {
    var id = $.$$index(x, 1);
    return $.$$index(this._deserialized, id);
  },
  _deserializeList$1: function(x) {
    var t1, id, dartList, len, i;
    t1 = $.getInterceptor$JSArrayJSString(x);
    id = t1.$index(x, 1);
    dartList = t1.$index(x, 2);
    if (typeof dartList !== "object" || dartList === null || (dartList.constructor !== Array || !!dartList.immutable$list) && !dartList.$isJavaScriptIndexingBehavior())
      return this._deserializeList$1$bailout(1, dartList, id);
    $.$$indexSet(this._deserialized, id, dartList);
    len = dartList.length;
    for (i = 0; i < len; ++i) {
      if (i >= dartList.length)
        throw $.ioore(i);
      t1 = this._deserializeHelper$1(dartList[i]);
      if (i >= dartList.length)
        throw $.ioore(i);
      dartList[i] = t1;
    }
    return dartList;
  },
  _deserializeList$1$bailout: function(state0, dartList, id, t2, len) {
    switch (state0) {
      case 0:
        t1 = $.getInterceptor$JSArrayJSString(x);
        id = t1.$index(x, 1);
        dartList = t1.$index(x, 2);
      case 1:
        state0 = 0;
        $.$$indexSet(this._deserialized, id, dartList);
        t2 = $.getInterceptor$JSArrayJSString(dartList);
        len = t2.get$length(dartList);
      case 2:
        var t1, i;
        state0 = 0;
        for (i = 0; $.CONSTANT2.$lt(i, len); ++i)
          t2.$indexSet(dartList, i, this._deserializeHelper$1(t2.$index(dartList, i)));
        return dartList;
    }
  },
  _deserializeMap$1: function(x) {
    var result, t1, id, keys, values, len, i, key;
    result = $.HashMap$();
    t1 = $.getInterceptor$JSArrayJSString(x);
    id = t1.$index(x, 1);
    $.$$indexSet(this._deserialized, id, result);
    keys = t1.$index(x, 2);
    if (typeof keys !== "string" && (typeof keys !== "object" || keys === null || keys.constructor !== Array && !keys.$isJavaScriptIndexingBehavior()))
      return this._deserializeMap$1$bailout(1, x, result, keys, t1);
    values = t1.$index(x, 3);
    if (typeof values !== "string" && (typeof values !== "object" || values === null || values.constructor !== Array && !values.$isJavaScriptIndexingBehavior()))
      return this._deserializeMap$1$bailout(2, 0, result, keys, 0, values);
    len = keys.length;
    for (i = 0; i < len; ++i) {
      if (i >= keys.length)
        throw $.ioore(i);
      key = this._deserializeHelper$1(keys[i]);
      if (i >= values.length)
        throw $.ioore(i);
      result.$indexSet(key, this._deserializeHelper$1(values[i]));
    }
    return result;
  },
  _deserializeMap$1$bailout: function(state0, x, result, keys, t1, values, t3, len) {
    switch (state0) {
      case 0:
        result = $.HashMap$();
        t1 = $.getInterceptor$JSArrayJSString(x);
        id = t1.$index(x, 1);
        $.$$indexSet(this._deserialized, id, result);
        keys = t1.$index(x, 2);
      case 1:
        state0 = 0;
        values = t1.$index(x, 3);
      case 2:
        state0 = 0;
        t3 = $.getInterceptor$JSArrayJSString(keys);
        len = t3.get$length(keys);
      case 3:
        var id, i;
        state0 = 0;
        for (t1 = $.getInterceptor$JSArrayJSString(values), i = 0; $.CONSTANT2.$lt(i, len); ++i)
          result.$indexSet(this._deserializeHelper$1(t3.$index(keys, i)), this._deserializeHelper$1(t1.$index(values, i)));
        return result;
    }
  },
  deserializeObject$1: function(x) {
    throw $.$$throw("Unexpected serialized object");
  }
};

$$.TimerImpl = {"": "Object;_once,_inEventLoop,_handle<",
  cancel$0: function() {
    if (!($.get$globalThis().setTimeout == null)) {
      if (this._inEventLoop === true)
        throw $.$$throw($.UnsupportedError$("Timer in event loop cannot be canceled."));
      if (this._handle == null)
        return;
      var t1 = $globalState.topEventLoop;
      t1.set$activeTimerCount($.$$sub(t1.get$activeTimerCount(), 1));
      if (this._once)
        $.get$globalThis().clearTimeout(this._handle);
      else
        $.get$globalThis().clearInterval(this._handle);
      this._handle = null;
    } else
      throw $.$$throw($.UnsupportedError$("Canceling a timer."));
  },
  TimerImpl$2: function(milliseconds, callback) {
    var t1;
    if ($.$$eq(milliseconds, 0) === true)
      t1 = $.hasTimer() !== true || $._globalState().get$isWorker() === true;
    else
      t1 = false;
    if (t1) {
      $._globalState().get$topEventLoop().enqueue$3($._globalState().get$currentContext(), callback, "timer");
      this._inEventLoop = true;
    } else if ($.hasTimer() === true) {
      t1 = $._globalState().get$topEventLoop();
      t1.set$activeTimerCount($.$$add(t1.get$activeTimerCount(), 1));
      t1 = new $.internalCallback(this, callback);
      this._handle = $.get$globalThis().setTimeout($.convertDartClosureToJS(t1, 0), milliseconds);
    } else
      throw $.$$throw($.UnsupportedError$("Timer greater than 0."));
  }
};

$$.AsyncError = {"": "Object;error>,stackTrace>,cause>",
  _writeOn$1: function(buffer) {
    var message, exception, t1;
    buffer.add$1("'");
    message = null;
    try {
      message = $.toString(this.error);
    } catch (exception) {
      $.unwrapException(exception);
      message = $.Error_safeToString(this.error);
    }

    buffer.add$1(message);
    buffer.add$1("'\n");
    t1 = this.stackTrace;
    if (!(t1 == null)) {
      buffer.add$1("Stack trace:\n");
      buffer.add$1($.toString(t1));
      buffer.add$1("\n");
    }
  },
  toString$0: function() {
    var buffer, cause;
    buffer = $.StringBuffer$("");
    buffer.add$1("AsyncError: ");
    this._writeOn$1(buffer);
    cause = this.cause;
    for (; !(cause == null);) {
      buffer.add$1("Caused by: ");
      cause._writeOn$1(buffer);
      cause = cause.get$cause();
    }
    return buffer.toString$0();
  },
  throwDelayed$0: function() {
    var reportError, exception;
    reportError = new $.AsyncError_throwDelayed_reportError(this);
    try {
      $.Timer_Timer($.CONSTANT9, new $.AsyncError_throwDelayed_anon(this, reportError));
    } catch (exception) {
      $.unwrapException(exception);
      reportError.call$0();
    }

  },
  $isAsyncError: true
};

$$._CompleterImpl = {"": "Object;future>,_isComplete",
  complete$1: function(value) {
    if (this._isComplete)
      throw $.$$throw($.StateError$("Future already completed"));
    this._isComplete = true;
    this.future._liblib0$_setValue$1(value);
  },
  completeError$2: function(error, stackTrace) {
    var asyncError;
    if (this._isComplete)
      throw $.$$throw($.StateError$("Future already completed"));
    this._isComplete = true;
    asyncError = typeof error === "object" && error !== null && !!error.$isAsyncError ? error : $.AsyncError$(error, stackTrace);
    this.future._setError$1(asyncError);
  },
  completeError$1: function(error) {
    return this.completeError$2(error, null);
  }
};

$$._FutureListenerWrapper = {"": "Object;future>,_nextListener=",
  _sendValue$1: function(value) {
    this.future._liblib0$_setValue$1(value);
  },
  _sendError$1: function(error) {
    this.future._setError$1(error);
  }
};

$$._FutureImpl = {"": "Object;_state,_resultOrListeners>",
  get$_isComplete: function() {
    return $.$$eq(this._state, 0) !== true;
  },
  get$_hasValue: function() {
    return $.$$eq(this._state, 1);
  },
  get$_hasError: function() {
    return !($.$$and(this._state, 2) === 0);
  },
  get$_hasUnhandledError: function() {
    return !($.$$and(this._state, 4) === 0);
  },
  _clearUnhandledError$0: function() {
    this._state = $.$$and(this._state, 4294967291);
  },
  then$2$onError: function(f, onError) {
    var t1;
    if (this.get$_isComplete() !== true) {
      if (onError == null) {
        t1 = $._ThenFuture$(f);
        t1._subscribeTo$1(this);
        return t1;
      }
      t1 = $._SubscribeFuture$(f, onError);
      t1._subscribeTo$1(this);
      return t1;
    }
    if (this.get$_hasError() === true) {
      if (!(onError == null))
        return this._handleError$2(onError, null);
      return $._FutureWrapper$(this);
    } else
      return this._handleValue$1(f);
  },
  then$1: function(f) {
    return this.then$2$onError(f, null);
  },
  catchError$2$test: function(f, test) {
    var t1;
    if (this.get$_hasValue() === true)
      return $._FutureWrapper$(this);
    if (this.get$_isComplete() !== true) {
      t1 = $._CatchErrorFuture$(f, test);
      t1._subscribeTo$1(this);
      return t1;
    } else
      return this._handleError$2(f, test);
  },
  catchError$1: function(f) {
    return this.catchError$2$test(f, null);
  },
  _handleValue$1: function(onValue) {
    var thenFuture = $._ThenFuture$(onValue);
    $.Timer_Timer($.CONSTANT9, new $._FutureImpl__handleValue_anon(thenFuture, this._resultOrListeners));
    return thenFuture;
  },
  _handleError$2: function(onError, test) {
    var error, errorFuture;
    this._clearUnhandledError$0();
    error = this._resultOrListeners;
    errorFuture = $._CatchErrorFuture$(onError, test);
    $.Timer_Timer($.CONSTANT9, new $._FutureImpl__handleError_anon(error, errorFuture));
    return errorFuture;
  },
  _liblib0$_setValue$1: function(value) {
    var listeners, listeners0;
    if (this.get$_isComplete() === true)
      throw $.$$throw($.StateError$("Future already completed"));
    listeners = this._removeListeners$0();
    this._state = 1;
    this._resultOrListeners = value;
    for (; !(listeners == null); listeners = listeners0) {
      listeners0 = listeners.get$_nextListener();
      listeners.set$_nextListener(null);
      listeners._sendValue$1(value);
    }
  },
  get$_liblib0$_setValue: function() {
    return new $.BoundClosure$1(this, "_liblib0$_setValue$1");
  },
  _setError$1: function(error) {
    var listeners, listeners0;
    if (this.get$_isComplete() === true)
      throw $.$$throw($.StateError$("Future already completed"));
    listeners = this._removeListeners$0();
    this._state = 2;
    this._resultOrListeners = error;
    if (listeners == null) {
      this._scheduleUnhandledError$0();
      return;
    }
    do {
      listeners0 = listeners.get$_nextListener();
      listeners.set$_nextListener(null);
      listeners._sendError$1(error);
      if (!(listeners0 == null)) {
        listeners = listeners0;
        continue;
      } else
        break;
    } while (true);
  },
  get$_setError: function() {
    return new $.BoundClosure$1(this, "_setError$1");
  },
  _scheduleUnhandledError$0: function() {
    this._state = $.$$or(this._state, 4);
    $.Timer_Timer($.CONSTANT9, new $._FutureImpl__scheduleUnhandledError_anon(this));
  },
  _addListener$1: function(listener) {
    listener.set$_nextListener(this._resultOrListeners);
    this._resultOrListeners = listener;
  },
  _removeListeners$0: function() {
    var current, prev, next;
    current = this._resultOrListeners;
    this._resultOrListeners = null;
    for (prev = null; !(current == null); prev = current, current = next) {
      next = current.get$_nextListener();
      current.set$_nextListener(prev);
    }
    return prev;
  },
  _chain$1: function(future) {
    if (this.get$_isComplete() !== true)
      this._addListener$1(future._asListener$0());
    else if (this.get$_hasValue() === true)
      future._liblib0$_setValue$1(this._resultOrListeners);
    else {
      this._clearUnhandledError$0();
      future._setError$1(this._resultOrListeners);
    }
  },
  _setOrChainValue$1: function(result) {
    if (typeof result === "object" && result !== null && !!result.$isFuture)
      if (!!result.$is_FutureImpl) {
        result._chain$1(this);
        return;
      } else {
        result.then$2$onError(this.get$_liblib0$_setValue(), this.get$_setError());
        return;
      }
    else
      this._liblib0$_setValue$1(result);
  },
  _asListener$0: function() {
    return $._FutureListenerWrapper$(this);
  },
  _FutureImpl$immediate$1: function(value) {
    this._state = 1;
    this._resultOrListeners = value;
  },
  $is_FutureImpl: true,
  $isFuture: true
};

$$._TransformFuture = {"": "_FutureImpl;_nextListener=",
  _subscribeTo$1: function(future) {
    future._addListener$1(this);
  },
  $as_FutureImpl: function (S, T) { return [T]; },
  $asFuture: function (S, T) { return [T]; }
};

$$._ThenFuture = {"": "_TransformFuture;_onValue,_nextListener,_state,_resultOrListeners",
  _onValue$1: function(arg0) {
    return this._onValue.call$1(arg0);
  },
  _sendValue$1: function(value) {
    var result, e, e0, s, exception, t1;
    result = null;
    try {
      result = this._onValue$1(value);
    } catch (exception) {
      t1 = $.unwrapException(exception);
      if (typeof t1 === "object" && t1 !== null && !!t1.$isAsyncError) {
        e = t1;
        this._setError$1(e);
        return;
      } else {
        e0 = t1;
        s = $.getTraceFromException(exception);
        this._setError$1($.AsyncError$(e0, s));
        return;
      }
    }

    this._setOrChainValue$1(result);
  },
  _sendError$1: function(error) {
    this._setError$1(error);
  },
  $as_FutureImpl: function (S, T) { return [T]; },
  $asFuture: function (S, T) { return [T]; }
};

$$._CatchErrorFuture = {"": "_TransformFuture;_test,_onError,_nextListener,_state,_resultOrListeners",
  _test$1: function(arg0) {
    return this._test.call$1(arg0);
  },
  _onError$1: function(arg0) {
    return this._onError.call$1(arg0);
  },
  _sendValue$1: function(value) {
    this._liblib0$_setValue$1(value);
  },
  _sendError$1: function(error) {
    var matchesTest, e, s, result, e0, e1, s0, exception, t1;
    if (!(this._test == null)) {
      matchesTest = null;
      try {
        matchesTest = this._test$1(error.get$error());
      } catch (exception) {
        t1 = $.unwrapException(exception);
        e = t1;
        s = $.getTraceFromException(exception);
        this._setError$1($.AsyncError$withCause(e, s, error));
        return;
      }

      if (matchesTest !== true) {
        this._setError$1(error);
        return;
      }
    }
    result = null;
    try {
      result = this._onError$1(error);
    } catch (exception) {
      t1 = $.unwrapException(exception);
      if (typeof t1 === "object" && t1 !== null && !!t1.$isAsyncError) {
        e0 = t1;
        this._setError$1(e0);
        return;
      } else {
        e1 = t1;
        s0 = $.getTraceFromException(exception);
        this._setError$1($.AsyncError$withCause(e1, s0, error));
        return;
      }
    }

    this._setOrChainValue$1(result);
  },
  $as_FutureImpl: null,
  $asFuture: null
};

$$._SubscribeFuture = {"": "_ThenFuture;_onError,_onValue,_nextListener,_state,_resultOrListeners",
  _onError$1: function(arg0) {
    return this._onError.call$1(arg0);
  },
  _sendError$1: function(error) {
    var result, e, e0, s, exception, t1;
    result = null;
    try {
      result = this._onError$1(error);
    } catch (exception) {
      t1 = $.unwrapException(exception);
      if (typeof t1 === "object" && t1 !== null && !!t1.$isAsyncError) {
        e = t1;
        this._setError$1(e);
        return;
      } else {
        e0 = t1;
        s = $.getTraceFromException(exception);
        this._setError$1($.AsyncError$withCause(e0, s, error));
        return;
      }
    }

    this._setOrChainValue$1(result);
  },
  $as_FutureImpl: function (S, T) { return [T]; },
  $asFuture: function (S, T) { return [T]; }
};

$$._FutureWrapper = {"": "Object;_future",
  then$2$onError: function($function, onError) {
    return this._future.then$2$onError($function, onError);
  },
  then$1: function($function) {
    return this.then$2$onError($function, null);
  },
  catchError$2$test: function($function, test) {
    return this._future.catchError$2$test($function, test);
  },
  catchError$1: function($function) {
    return this.catchError$2$test($function, null);
  },
  $isFuture: true
};

$$.Stream = {"": "Object;",
  where$1: function(test) {
    return $._WhereStream$(this, test);
  },
  contains$1: function(match) {
    var t1, future, t2, t3;
    t1 = {};
    future = $._FutureImpl$();
    t1.subscription_0 = null;
    t2 = new $.Stream_contains_anon(t1, match, future);
    t3 = future.get$_setError();
    t1.subscription_0 = this.listen$4$onDone$onError$unsubscribeOnError(t2, new $.Stream_contains_anon0(future), t3, true);
    return future;
  },
  get$contains: function() {
    return new $.BoundClosure$1(this, "contains$1");
  },
  get$length: function() {
    var t1, future, t2, t3;
    t1 = {};
    future = $._FutureImpl$();
    t1.count_0 = 0;
    t2 = new $.Stream_length_anon(t1);
    t3 = future.get$_setError();
    this.listen$4$onDone$onError$unsubscribeOnError(t2, new $.Stream_length_anon0(t1, future), t3, true);
    return future;
  },
  get$isEmpty: function() {
    var t1, future, t2, t3;
    t1 = {};
    future = $._FutureImpl$();
    t1.subscription_0 = null;
    t2 = new $.Stream_isEmpty_anon(t1, future);
    t3 = future.get$_setError();
    t1.subscription_0 = this.listen$4$onDone$onError$unsubscribeOnError(t2, new $.Stream_isEmpty_anon0(future), t3, true);
    return future;
  },
  toList$0: function() {
    var result, future, t1, t2;
    result = [];
    future = $._FutureImpl$();
    t1 = new $.Stream_toList_anon(result);
    t2 = future.get$_setError();
    this.listen$4$onDone$onError$unsubscribeOnError(t1, new $.Stream_toList_anon0(result, future), t2, true);
    return future;
  },
  get$last: function() {
    var t1, future, t2, t3;
    t1 = {};
    future = $._FutureImpl$();
    t1.result_0 = null;
    t1.foundResult_1 = false;
    t2 = new $.Stream_last_anon(t1);
    t3 = future.get$_setError();
    this.listen$4$onDone$onError$unsubscribeOnError(t2, new $.Stream_last_anon0(t1, future), t3, true);
    return future;
  },
  elementAt$1: function(index) {
    var t1, t2, future, t3;
    t1 = {};
    t1.index_0 = index;
    t2 = t1.index_0;
    if (!(typeof t2 === "number" && Math.floor(t2) === t2) || $.$$lt(t2, 0) === true)
      throw $.$$throw($.ArgumentError$(t1.index_0));
    future = $._FutureImpl$();
    t1.subscription_1 = null;
    t2 = new $.Stream_elementAt_anon(t1, future);
    t3 = future.get$_setError();
    t1.subscription_1 = this.listen$4$onDone$onError$unsubscribeOnError(t2, new $.Stream_elementAt_anon0(future), t3, true);
    return future;
  }
};

$$.StreamSubscription = {"": "Object;"};

$$._ForwardingStream = {"": "Stream;",
  listen$4$onDone$onError$unsubscribeOnError: function(onData, onDone, onError, unsubscribeOnError) {
    if (onData == null)
      onData = $._nullDataHandler;
    if (onError == null)
      onError = $._nullErrorHandler;
    if (onDone == null)
      onDone = $._nullDoneHandler;
    return this._createSubscription$4(onData, onError, onDone, true === unsubscribeOnError);
  },
  listen$1: function(onData) {
    return this.listen$4$onDone$onError$unsubscribeOnError(onData, null, null, null);
  },
  listen$3$onDone$onError: function(onData, onDone, onError) {
    return this.listen$4$onDone$onError$unsubscribeOnError(onData, onDone, onError, null);
  },
  _createSubscription$4: function(onData, onError, onDone, unsubscribeOnError) {
    return $._ForwardingStreamSubscription$(this, onData, onError, onDone, unsubscribeOnError);
  },
  _handleData$2: function(data, sink) {
    sink._sendData$1(data);
  },
  _handleError$2: function(error, sink) {
    sink._sendError$1(error);
  },
  _handleDone$1: function(sink) {
    sink._sendDone$0();
  }
};

$$._BaseStreamSubscription = {"": "Object;",
  _liblib0$_onData$1: function(arg0) {
    return this._liblib0$_onData.call$1(arg0);
  },
  _onError$1: function(arg0) {
    return this._onError.call$1(arg0);
  },
  _onDone$0: function() {
    return this._onDone.call$0();
  },
  _BaseStreamSubscription$3: function(_onData, _onError, _onDone) {
    if (this._liblib0$_onData == null)
      this._liblib0$_onData = $._nullDataHandler;
    if (this._onError == null)
      this._onError = $._nullErrorHandler;
    if (this._onDone == null)
      this._onDone = $._nullDoneHandler;
  }
};

$$._ForwardingStreamSubscription = {"": "_BaseStreamSubscription;_stream,_unsubscribeOnError,_subscription,_liblib0$_onData,_onError,_onDone",
  cancel$0: function() {
    var t1 = this._subscription;
    if (t1 == null)
      throw $.$$throw($.StateError$("Subscription has been unsubscribed"));
    t1.cancel$0();
    this._subscription = null;
  },
  _sendData$1: function(data) {
    this._liblib0$_onData$1(data);
  },
  _sendError$1: function(error) {
    this._onError$1(error);
    if (this._unsubscribeOnError) {
      this._subscription.cancel$0();
      this._subscription = null;
    }
  },
  _sendDone$0: function() {
    var t1 = this._subscription;
    if (!(t1 == null)) {
      t1.cancel$0();
      this._subscription = null;
    }
    this._onDone$0();
  },
  _handleData$1: function(data) {
    this._stream._handleData$2(data, this);
  },
  get$_handleData: function() {
    return new $.Bound__handleData__ForwardingStreamSubscription(this, "_handleData$1");
  },
  _handleError$1: function(error) {
    this._stream._handleError$2(error, this);
  },
  get$_handleError: function() {
    return new $.BoundClosure$1(this, "_handleError$1");
  },
  _handleDone$0: function() {
    this._subscription = null;
    this._stream._handleDone$1(this);
  },
  get$_handleDone: function() {
    return new $.Bound__handleDone__ForwardingStreamSubscription(this, "_handleDone$0");
  },
  _ForwardingStreamSubscription$5: function(_stream, onData, onError, onDone, _unsubscribeOnError) {
    var t1, t2, t3;
    t1 = this._stream._source;
    t2 = this.get$_handleData();
    t3 = this.get$_handleError();
    this._subscription = t1.listen$3$onDone$onError(t2, this.get$_handleDone(), t3);
  }
};

$$._WhereStream = {"": "_ForwardingStream;_test,_source",
  _test$1: function(arg0) {
    return this._test.call$1(arg0);
  },
  _handleData$2: function(inputEvent, sink) {
    var satisfies, e, s, exception, t1;
    satisfies = null;
    try {
      satisfies = this._test$1(inputEvent);
    } catch (exception) {
      t1 = $.unwrapException(exception);
      e = t1;
      s = $.getTraceFromException(exception);
      sink._sendError$1($._asyncError(e, s, null));
      return;
    }

    if (satisfies === true)
      sink._sendData$1(inputEvent);
  }
};

$$._ChildrenElementList = {"": "Object;_element,_childElements",
  toList$0: function() {
    var t1, t3, output, len, i, t2;
    t1 = this._childElements;
    if (typeof t1 !== "string" && (typeof t1 !== "object" || t1 === null || t1.constructor !== Array && !t1.$isJavaScriptIndexingBehavior()))
      return this.toList$0$bailout(1, t1);
    t3 = t1.length;
    output = $.List_List$fixedLength(t3, null);
    for (len = t1.length, i = 0; i < len; ++i) {
      t2 = t1[i];
      if (i >= t3)
        throw $.ioore(i);
      output[i] = t2;
    }
    return output;
  },
  toList$0$bailout: function(state0, t1, t3, len, output) {
    switch (state0) {
      case 0:
        t1 = this._childElements;
      case 1:
        state0 = 0;
        t3 = $.getInterceptor$JSArrayJSString(t1);
        output = $.List_List$fixedLength(t3.get$length(t1), null);
        len = t3.get$length(t1);
      case 2:
        var i, t2;
        state0 = 0;
        i = 0;
        for (; $.CONSTANT2.$lt(i, len); ++i) {
          t2 = t3.$index(t1, i);
          if (i >= output.length)
            throw $.ioore(i);
          output[i] = t2;
        }
        return output;
    }
  },
  contains$1: function(element) {
    return $.contains(this._childElements, element);
  },
  get$contains: function() {
    return new $.BoundClosure$1(this, "contains$1");
  },
  forEach$1: function(f) {
    var t1;
    for (t1 = $.iterator(this._childElements); t1.moveNext$0() === true;)
      f.call$1(t1.get$current());
  },
  join$1: function(separator) {
    return $.IterableMixinWorkaround_joinList(this, separator);
  },
  where$1: function(f) {
    return $.WhereIterable$(this, f);
  },
  get$isEmpty: function() {
    return this._element.firstElementChild == null;
  },
  elementAt$1: function(index) {
    return this.$index(index);
  },
  get$length: function() {
    return $.length(this._childElements);
  },
  $index: function(index) {
    var t1 = this._childElements;
    if (typeof t1 !== "string" && (typeof t1 !== "object" || t1 === null || t1.constructor !== Array && !t1.$isJavaScriptIndexingBehavior()))
      return this.$$index$bailout(1, t1, index);
    if (index !== (index | 0))
      throw $.iae(index);
    if (index < 0 || index >= t1.length)
      throw $.ioore(index);
    return t1[index];
  },
  $$index$bailout: function(state0, t1, index) {
    return $.$$index(t1, index);
  },
  $indexSet: function(index, value) {
    var t1, t2;
    t1 = this._element;
    t2 = this._childElements;
    if (typeof t2 !== "string" && (typeof t2 !== "object" || t2 === null || t2.constructor !== Array && !t2.$isJavaScriptIndexingBehavior()))
      return this.$$indexSet$bailout(1, index, value, t1, t2);
    if (index !== (index | 0))
      throw $.iae(index);
    if (index < 0 || index >= t2.length)
      throw $.ioore(index);
    t1.$$dom_replaceChild$2(value, t2[index]);
  },
  $$indexSet$bailout: function(state0, index, value, t1, t2) {
    t1.$$dom_replaceChild$2(value, $.$$index(t2, index));
  },
  add$1: function(value) {
    this._element.$$dom_appendChild$1(value);
    return value;
  },
  addLast$1: function(value) {
    this._element.$$dom_appendChild$1(value);
    return value;
  },
  get$iterator: function() {
    return $.iterator(this.toList$0());
  },
  addAll$1: function(iterable) {
    var t1, t2;
    if (typeof iterable === "object" && iterable !== null && !!iterable.$is_ChildNodeListLazy)
      iterable = $.List_List$from(iterable);
    for (t1 = $.iterator(iterable), t2 = this._element; t1.moveNext$0() === true;)
      t2.$$dom_appendChild$1(t1.get$current());
  },
  setRange$4: function(start, rangeLength, from, startFrom) {
    throw $.$$throw($.UnimplementedError$(null));
  },
  remove$1: function(object) {
    var t1, t2;
    if (typeof object === "object" && object !== null && object.$isElement()) {
      t1 = object.parentNode;
      t2 = this._element;
      if (t1 === t2)
        t2.$$dom_removeChild$1(object);
    }
  },
  indexOf$2: function(element, start) {
    return $.Lists_indexOf(this, element, start, this.get$length());
  },
  indexOf$1: function(element) {
    return this.indexOf$2(element, 0);
  },
  clear$0: function() {
    this._element.textContent = "";
  },
  removeLast$0: function() {
    var result = this.get$last();
    if (!(result == null))
      this._element.$$dom_removeChild$1(result);
    return result;
  },
  get$last: function() {
    var result = this._element.lastElementChild;
    if (result == null)
      throw $.$$throw($.StateError$("No elements"));
    return result;
  },
  $isList: function() {
    return true;
  },
  $asList: function() {
    return function () { return [null]; };
  },
  $isCollection: function() {
    return true;
  },
  $asCollection: function() {
    return function () { return [null]; };
  }
};

$$._FrozenElementList = {"": "Object;_nodeList",
  contains$1: function(element) {
    var t1;
    for (t1 = this.get$iterator(); t1.moveNext$0() === true;)
      if ($.$$eq(t1.get$current(), element) === true)
        return true;
    return false;
  },
  get$contains: function() {
    return new $.BoundClosure$1(this, "contains$1");
  },
  forEach$1: function(f) {
    var t1;
    for (t1 = this.get$iterator(); t1.moveNext$0() === true;)
      f.call$1(t1.get$current());
  },
  join$1: function(separator) {
    return $.IterableMixinWorkaround_joinList(this, separator);
  },
  where$1: function(f) {
    return $.WhereIterable$(this, f);
  },
  toList$0: function() {
    return $.List_List$from(this);
  },
  elementAt$1: function(index) {
    return this.$index(index);
  },
  get$isEmpty: function() {
    return $.isEmpty(this._nodeList);
  },
  get$length: function() {
    return $.length(this._nodeList);
  },
  $index: function(index) {
    var t1 = this._nodeList;
    if (typeof t1 !== "string" && (typeof t1 !== "object" || t1 === null || t1.constructor !== Array && !t1.$isJavaScriptIndexingBehavior()))
      return this.$$index$bailout(1, t1, index);
    if (index !== (index | 0))
      throw $.iae(index);
    if (index < 0 || index >= t1.length)
      throw $.ioore(index);
    return t1[index];
  },
  $$index$bailout: function(state0, t1, index) {
    return $.$$index(t1, index);
  },
  $indexSet: function(index, value) {
    throw $.$$throw($.UnsupportedError$(""));
  },
  add$1: function(value) {
    throw $.$$throw($.UnsupportedError$(""));
  },
  addLast$1: function(value) {
    throw $.$$throw($.UnsupportedError$(""));
  },
  get$iterator: function() {
    return $._FrozenElementListIterator$(this);
  },
  addAll$1: function(iterable) {
    throw $.$$throw($.UnsupportedError$(""));
  },
  setRange$4: function(start, rangeLength, from, startFrom) {
    throw $.$$throw($.UnsupportedError$(""));
  },
  indexOf$2: function(element, start) {
    return $.indexOf(this._nodeList, element, start);
  },
  indexOf$1: function(element) {
    return this.indexOf$2(element, 0);
  },
  clear$0: function() {
    throw $.$$throw($.UnsupportedError$(""));
  },
  removeLast$0: function() {
    throw $.$$throw($.UnsupportedError$(""));
  },
  remove$1: function(element) {
    throw $.$$throw($.UnsupportedError$(""));
  },
  get$last: function() {
    return $.last(this._nodeList);
  },
  $isList: function() {
    return true;
  },
  $asList: function() {
    return function () { return [null]; };
  },
  $isCollection: function() {
    return true;
  },
  $asCollection: function() {
    return function () { return [null]; };
  }
};

$$._FrozenElementListIterator = {"": "Object;_list,_liblib4$_index,_current",
  moveNext$0: function() {
    var t1, nextIndex, t2;
    t1 = this._liblib4$_index;
    if (typeof t1 !== "number")
      return this.moveNext$0$bailout(1, t1);
    nextIndex = t1 + 1;
    t1 = this._list;
    t2 = t1.get$length();
    if (typeof t2 !== "number")
      return this.moveNext$0$bailout(2, t1, t2, nextIndex);
    if (nextIndex < t2) {
      this._current = t1.$index(nextIndex);
      this._liblib4$_index = nextIndex;
      return true;
    }
    this._liblib4$_index = t1.get$length();
    this._current = null;
    return false;
  },
  moveNext$0$bailout: function(state0, t1, t2, nextIndex) {
    switch (state0) {
      case 0:
        t1 = this._liblib4$_index;
      case 1:
        state0 = 0;
        nextIndex = $.$$add(t1, 1);
        t1 = this._list;
        t2 = t1.get$length();
      case 2:
        state0 = 0;
        if ($.$$lt(nextIndex, t2) === true) {
          this._current = t1.$index(nextIndex);
          this._liblib4$_index = nextIndex;
          return true;
        }
        this._liblib4$_index = t1.get$length();
        this._current = null;
        return false;
    }
  },
  get$current: function() {
    return this._current;
  }
};

$$._ElementCssClassSet = {"": "CssClassSet;_element",
  readClasses$0: function() {
    var s, t1, trimmed;
    s = $.HashSet$();
    for (t1 = $.CONSTANT.get$iterator($.split(this._element.className, " ")); t1.moveNext$0() === true;) {
      trimmed = $.trim(t1.get$current());
      if ($.CONSTANT1.get$isEmpty(trimmed) !== true)
        s.add$1(trimmed);
    }
    return s;
  },
  writeClasses$1: function(s) {
    var t1;
    $.List_List$from(s);
    t1 = $.join(s, " ");
    this._element.className = t1;
  }
};

$$._ChildNodeListLazy = {"": "Object;_this",
  get$last: function() {
    var result = this._this.lastChild;
    return result;
  },
  add$1: function(value) {
    this._this.$$dom_appendChild$1(value);
  },
  addLast$1: function(value) {
    this._this.$$dom_appendChild$1(value);
  },
  addAll$1: function(iterable) {
    var t1, t2;
    if (typeof iterable === "object" && iterable !== null && !!iterable.$is_ChildNodeListLazy)
      iterable = $.List_List$from(iterable);
    for (t1 = $.iterator(iterable), t2 = this._this; t1.moveNext$0() === true;)
      t2.$$dom_appendChild$1(t1.get$current());
  },
  removeLast$0: function() {
    var result = this.get$last();
    if (!(result == null))
      this._this.$$dom_removeChild$1(result);
    return result;
  },
  remove$1: function(object) {
    var t1;
    if (!(typeof object === "object" && object !== null && object.$isNode()))
      return;
    t1 = this._this;
    if (!(t1 === object.parentNode))
      return;
    t1.$$dom_removeChild$1(object);
  },
  clear$0: function() {
    this._this.textContent = "";
  },
  $indexSet: function(index, value) {
    this._this.$$dom_replaceChild$2(value, this.$index(index));
  },
  get$iterator: function() {
    return $.iterator(this._this.childNodes);
  },
  contains$1: function(element) {
    return $.IterableMixinWorkaround_contains(this, element);
  },
  get$contains: function() {
    return new $.BoundClosure$1(this, "contains$1");
  },
  forEach$1: function(f) {
    var t1;
    for (t1 = this.get$iterator(); t1.moveNext$0() === true;)
      f.call$1(t1.get$current());
    return;
  },
  join$1: function(separator) {
    return $.IterableMixinWorkaround_joinList(this, separator);
  },
  where$1: function(f) {
    return $.WhereIterable$(this, f);
  },
  toList$0: function() {
    return $.List_List$from(this);
  },
  get$isEmpty: function() {
    return $.$$eq(this.get$length(), 0);
  },
  elementAt$1: function(index) {
    return this.$index(index);
  },
  indexOf$2: function(element, start) {
    return $.Lists_indexOf(this, element, start, this.get$length());
  },
  indexOf$1: function(element) {
    return this.indexOf$2(element, 0);
  },
  setRange$4: function(start, rangeLength, from, startFrom) {
    throw $.$$throw($.UnsupportedError$("Cannot setRange on immutable List."));
  },
  get$length: function() {
    return $.length(this._this.childNodes);
  },
  $index: function(index) {
    var t1 = this._this.childNodes;
    if (typeof t1 !== "object" || t1 === null || t1.constructor !== Array && !t1.$isJavaScriptIndexingBehavior())
      return this.$$index$bailout(1, index, t1);
    if (index !== (index | 0))
      throw $.iae(index);
    if (index < 0 || index >= t1.length)
      throw $.ioore(index);
    return t1[index];
  },
  $$index$bailout: function(state0, index, t1) {
    return $.$$index(t1, index);
  },
  $is_ChildNodeListLazy: true,
  $isList: function() {
    return true;
  },
  $asList: function() {
    return function () { return [null]; };
  },
  $isCollection: function() {
    return true;
  },
  $asCollection: function() {
    return function () { return [null]; };
  }
};

$$._AttributeMap = {"": "Object;",
  putIfAbsent$2: function(key, ifAbsent) {
    if (this.containsKey$1(key) !== true)
      this.$indexSet(key, ifAbsent.call$0());
    return this.$index(key);
  },
  clear$0: function() {
    for (var t1 = $.iterator(this.get$keys()); t1.moveNext$0() === true;)
      this.remove$1(t1.get$current());
  },
  forEach$1: function(f) {
    var t1, t2;
    for (t1 = $.iterator(this.get$keys()); t1.moveNext$0() === true;) {
      t2 = t1.get$current();
      f.call$2(t2, this.$index(t2));
    }
  },
  get$keys: function() {
    var attributes, keys, len, i;
    attributes = this._element.attributes;
    keys = $.List_List(0);
    len = attributes.get$length();
    if (typeof len !== "number")
      return this.get$keys$bailout(1, attributes, len, keys);
    i = 0;
    for (; i < len; ++i)
      if (this._matches$1(attributes.$index(i)) === true)
        keys.push(attributes.$index(i).get$$$dom_localName());
    return keys;
  },
  get$keys$bailout: function(state0, attributes, len, keys) {
    var i = 0;
    for (; $.CONSTANT2.$lt(i, len); ++i)
      if (this._matches$1(attributes.$index(i)) === true)
        keys.push(attributes.$index(i).get$$$dom_localName());
    return keys;
  },
  get$values: function() {
    var attributes, values, len, i;
    attributes = this._element.attributes;
    values = $.List_List(0);
    len = attributes.get$length();
    if (typeof len !== "number")
      return this.get$values$bailout(1, attributes, len, values);
    i = 0;
    for (; i < len; ++i)
      if (this._matches$1(attributes.$index(i)) === true)
        values.push(attributes.$index(i).get$value());
    return values;
  },
  get$values$bailout: function(state0, attributes, len, values) {
    var i = 0;
    for (; $.CONSTANT2.$lt(i, len); ++i)
      if (this._matches$1(attributes.$index(i)) === true)
        values.push(attributes.$index(i).get$value());
    return values;
  },
  get$isEmpty: function() {
    var t1 = this.get$length();
    if (typeof t1 !== "number")
      return this.get$isEmpty$bailout(1, t1);
    return t1 === 0;
  },
  get$isEmpty$bailout: function(state0, t1) {
    return $.$$eq(t1, 0);
  },
  $isMap: true,
  $asMap: function () { return [$.String, $.String]; }
};

$$._ElementAttributeMap = {"": "_AttributeMap;_element",
  containsKey$1: function(key) {
    return this._element.$$dom_hasAttribute$1(key);
  },
  $index: function(key) {
    return this._element.$$dom_getAttribute$1(key);
  },
  $indexSet: function(key, value) {
    this._element.$$dom_setAttribute$2(key, $.S(value));
  },
  remove$1: function(key) {
    var t1, value;
    t1 = this._element;
    value = t1.$$dom_getAttribute$1(key);
    t1.$$dom_removeAttribute$1(key);
    return value;
  },
  get$length: function() {
    return $.length(this.get$keys());
  },
  _matches$1: function(node) {
    return node.get$$$dom_namespaceUri() == null;
  }
};

$$.CssClassSet = {"": "Object;",
  toString$0: function() {
    return $.join(this.readClasses$0(), " ");
  },
  get$iterator: function() {
    return $.iterator(this.readClasses$0());
  },
  forEach$1: function(f) {
    $.forEach(this.readClasses$0(), f);
  },
  join$1: function(separator) {
    return $.join(this.readClasses$0(), separator);
  },
  where$1: function(f) {
    return $.where(this.readClasses$0(), f);
  },
  get$isEmpty: function() {
    return $.isEmpty(this.readClasses$0());
  },
  get$length: function() {
    return $.length(this.readClasses$0());
  },
  contains$1: function(value) {
    return $.contains(this.readClasses$0(), value);
  },
  get$contains: function() {
    return new $.BoundClosure$1(this, "contains$1");
  },
  add$1: function(value) {
    this._modify$1(new $.CssClassSet_add_anon(value));
  },
  remove$1: function(value) {
    var s, result;
    if (!(typeof value === "string"))
      return false;
    s = this.readClasses$0();
    result = $.remove(s, value);
    this.writeClasses$1(s);
    return result;
  },
  addAll$1: function(iterable) {
    this._modify$1(new $.CssClassSet_addAll_anon(iterable));
  },
  get$last: function() {
    return $.last(this.readClasses$0());
  },
  toList$0: function() {
    return $.toList(this.readClasses$0());
  },
  elementAt$1: function(index) {
    return $.elementAt(this.readClasses$0(), index);
  },
  clear$0: function() {
    this._modify$1(new $.CssClassSet_clear_anon());
  },
  _modify$1: function(f) {
    var s = this.readClasses$0();
    f.call$1(s);
    this.writeClasses$1(s);
  },
  $isCollection: function() {
    return true;
  },
  $asCollection: function() {
    return function () { return [$.String]; };
  }
};

$$._EventStream = {"": "Stream;_target,_eventType,_useCapture",
  listen$4$onDone$onError$unsubscribeOnError: function(onData, onDone, onError, unsubscribeOnError) {
    return $._EventStreamSubscription$(this._target, this._eventType, onData, this._useCapture);
  },
  listen$1: function(onData) {
    return this.listen$4$onDone$onError$unsubscribeOnError(onData, null, null, null);
  },
  listen$3$onDone$onError: function(onData, onDone, onError) {
    return this.listen$4$onDone$onError$unsubscribeOnError(onData, onDone, onError, null);
  }
};

$$._EventStreamSubscription = {"": "StreamSubscription;_pauseCount,_target,_eventType,_onData,_useCapture",
  cancel$0: function() {
    if (this.get$_canceled() === true)
      throw $.$$throw($.StateError$("Subscription has been canceled."));
    var t1 = this._onData;
    if (!(t1 == null))
      this._target.$$dom_removeEventListener$3(this._eventType, t1, this._useCapture);
    this._target = null;
    this._onData = null;
  },
  get$_canceled: function() {
    return this._target == null;
  },
  get$_paused: function() {
    return this._pauseCount > 0;
  },
  _tryResume$0: function() {
    if (!(this._onData == null) && this.get$_paused() !== true)
      this._target.$$dom_addEventListener$3(this._eventType, this._onData, this._useCapture);
  },
  _EventStreamSubscription$4: function(_target, _eventType, _onData, _useCapture) {
    this._tryResume$0();
  }
};

$$.EventStreamProvider = {"": "Object;_eventType",
  forTarget$2$useCapture: function(e, useCapture) {
    return $._EventStream$(e, this._eventType, useCapture);
  },
  forTarget$1: function(e) {
    return this.forTarget$2$useCapture(e, false);
  }
};

$$._DOMWindowCrossFrame = {"": "Object;_window",
  close$0: function() {
    return this._window.close();
  }
};

$$._LocationWrapper = {"": "Object;_ptr",
  set$href: function(value) {
    $._LocationWrapper__set(this._ptr, "href", value);
  },
  toString$0: function() {
    return this._ptr.toString();
  },
  $isLocation: function() {
    return true;
  },
  $asLocation: function() {
    return null;
  }
};

$$.FixedSizeListIterator = {"": "Object;_array,_length,_position,_current",
  moveNext$0: function() {
    var t1, nextPosition;
    t1 = this._position;
    if (typeof t1 !== "number")
      return this.moveNext$0$bailout(1, t1);
    nextPosition = t1 + 1;
    t1 = this._length;
    if (typeof t1 !== "number")
      return this.moveNext$0$bailout(2, t1, nextPosition);
    if (nextPosition < t1) {
      t1 = this._array;
      if (typeof t1 !== "string" && (typeof t1 !== "object" || t1 === null || t1.constructor !== Array && !t1.$isJavaScriptIndexingBehavior()))
        return this.moveNext$0$bailout(3, t1, nextPosition);
      if (nextPosition !== (nextPosition | 0))
        throw $.iae(nextPosition);
      if (nextPosition < 0 || nextPosition >= t1.length)
        throw $.ioore(nextPosition);
      this._current = t1[nextPosition];
      this._position = nextPosition;
      return true;
    }
    this._current = null;
    this._position = t1;
    return false;
  },
  moveNext$0$bailout: function(state0, t1, nextPosition) {
    switch (state0) {
      case 0:
        t1 = this._position;
      case 1:
        state0 = 0;
        nextPosition = $.$$add(t1, 1);
        t1 = this._length;
      case 2:
        state0 = 0;
      case 3:
        if (state0 === 3 || state0 === 0 && $.$$lt(nextPosition, t1) === true)
          switch (state0) {
            case 0:
              t1 = this._array;
            case 3:
              state0 = 0;
              this._current = $.$$index(t1, nextPosition);
              this._position = nextPosition;
              return true;
          }
        this._current = null;
        this._position = t1;
        return false;
    }
  },
  get$current: function() {
    return this._current;
  }
};

$$.FilteredElementList = {"": "Object;_node,_childNodes",
  get$_filtered: function() {
    return $.List_List$from($.where(this._childNodes, new $.FilteredElementList__filtered_anon()));
  },
  forEach$1: function(f) {
    $.forEach(this.get$_filtered(), f);
  },
  $indexSet: function(index, value) {
    this.$index(index).replaceWith$1(value);
  },
  join$1: function(separator) {
    return $.join(this.get$_filtered(), separator);
  },
  add$1: function(value) {
    $.add(this._childNodes, value);
  },
  addAll$1: function(iterable) {
    var t1, t2, t3;
    for (t1 = $.iterator(iterable), t2 = this._childNodes, t3 = $.getInterceptor$JSArray(t2); t1.moveNext$0() === true;)
      t3.add$1(t2, t1.get$current());
  },
  addLast$1: function(value) {
    $.add(this._childNodes, value);
  },
  contains$1: function(element) {
    return typeof element === "object" && element !== null && element.$isElement() && $.contains(this._childNodes, element) === true;
  },
  get$contains: function() {
    return new $.BoundClosure$1(this, "contains$1");
  },
  setRange$4: function(start, rangeLength, from, startFrom) {
    throw $.$$throw($.UnimplementedError$(null));
  },
  clear$0: function() {
    $.clear(this._childNodes);
  },
  removeLast$0: function() {
    var result = this.get$last();
    if (!(result == null))
      result.remove$0();
    return result;
  },
  where$1: function(f) {
    return $.where(this.get$_filtered(), f);
  },
  remove$1: function(element) {
    var i, t1, indexElement;
    if (!(typeof element === "object" && element !== null && element.$isElement()))
      return;
    i = 0;
    while (true) {
      t1 = this.get$length();
      if (typeof t1 !== "number")
        return this.remove$1$bailout(1, element, i, t1);
      if (!(i < t1))
        break;
      indexElement = this.$index(i);
      if (indexElement === element) {
        indexElement.remove$0();
        return;
      }
      ++i;
    }
  },
  remove$1$bailout: function(state0, element, i, t1) {
    switch (state0) {
      case 0:
        if (!(typeof element === "object" && element !== null && element.$isElement()))
          return;
        i = 0;
      case 1:
        var indexElement;
        L0:
          while (true)
            switch (state0) {
              case 0:
                t1 = this.get$length();
              case 1:
                state0 = 0;
                if (!$.CONSTANT2.$lt(i, t1))
                  break L0;
                indexElement = this.$index(i);
                if (indexElement === element) {
                  indexElement.remove$0();
                  return;
                }
                ++i;
            }
    }
  },
  toList$0: function() {
    return $.List_List$from(this);
  },
  elementAt$1: function(index) {
    return this.$index(index);
  },
  get$isEmpty: function() {
    return $.isEmpty(this.get$_filtered());
  },
  get$length: function() {
    return $.length(this.get$_filtered());
  },
  $index: function(index) {
    var t1 = this.get$_filtered();
    if (typeof t1 !== "string" && (typeof t1 !== "object" || t1 === null || t1.constructor !== Array && !t1.$isJavaScriptIndexingBehavior()))
      return this.$$index$bailout(1, index, t1);
    if (index !== (index | 0))
      throw $.iae(index);
    if (index < 0 || index >= t1.length)
      throw $.ioore(index);
    return t1[index];
  },
  $$index$bailout: function(state0, index, t1) {
    return $.$$index(t1, index);
  },
  get$iterator: function() {
    return $.iterator(this.get$_filtered());
  },
  indexOf$2: function(element, start) {
    return $.indexOf(this.get$_filtered(), element, start);
  },
  indexOf$1: function(element) {
    return this.indexOf$2(element, 0);
  },
  get$last: function() {
    return $.last(this.get$_filtered());
  },
  $isList: function() {
    return true;
  },
  $asList: function() {
    return function () { return [null]; };
  },
  $isCollection: function() {
    return true;
  },
  $asCollection: function() {
    return function () { return [null]; };
  }
};

$$._AttributeClassSet = {"": "CssClassSet;_liblib2$_element",
  readClasses$0: function() {
    var classname, s, t1, trimmed;
    classname = $.$$index(this._liblib2$_element.get$attributes(), "class");
    s = $.HashSet$();
    if (classname == null)
      return s;
    for (t1 = $.CONSTANT.get$iterator($.split(classname, " ")); t1.moveNext$0() === true;) {
      trimmed = $.trim(t1.get$current());
      if ($.CONSTANT1.get$isEmpty(trimmed) !== true)
        s.add$1(trimmed);
    }
    return s;
  },
  writeClasses$1: function(s) {
    $.$$indexSet(this._liblib2$_element.get$attributes(), "class", $.join(s, " "));
  }
};

$$.SearchText = {"": "Object;text>,lowerCase,camelCase",
  get$length: function() {
    return $.length(this.text);
  },
  get$isEmpty: function() {
    var t1 = this.get$length();
    if (typeof t1 !== "number")
      return this.get$isEmpty$bailout(1, t1);
    return t1 === 0;
  },
  get$isEmpty$bailout: function(state0, t1) {
    return $.$$eq(t1, 0);
  }
};

$$.StringMatch = {"": "Object;searchText,text>,matchOffset>,matchEnd>",
  toHtml$0: function() {
    var t1, t2;
    t1 = this.text;
    t2 = $.getInterceptor$JSString(t1);
    return t2.substring$2(t1, 0, this.matchOffset) + "<span class=\"drop-down-link-highlight\">" + $.S(this.get$matchText()) + "</span>" + t2.substring$1(t1, this.matchEnd);
  },
  get$matchText: function() {
    return $.substring(this.text, this.matchOffset, this.matchEnd);
  },
  get$isFullMatch: function() {
    return $.$$eq(this.text, this.searchText.text);
  },
  get$isExactMatch: function() {
    return $.$$eq(this.get$matchText(), this.searchText.text);
  },
  get$isCamelCaseMatch: function() {
    return $.$$eq(this.get$matchText(), this.searchText.camelCase);
  }
};

$$.Result = {"": "Object;prefix>,match>,library,type>,args,kind>,url>,noargs,row>",
  get$isTopLevel: function() {
    return this.prefix == null && this.type == null;
  },
  addRow$1: function(table) {
    var t1, sb;
    if (!(this.row == null))
      return;
    t1 = new $.Result_addRow_clickHandler(this);
    this.row = table.insertRow$1($.length(table.get$rows()));
    $.add(this.row.get$classes(), "drop-down-link-tr");
    this.row.get$onMouseDown().listen$1(new $.Result_addRow_anon());
    this.row.get$onClick().listen$1(t1);
    this.row.get$onMouseUp().listen$1(new $.Result_addRow_anon0());
    sb = $.StringBuffer$("");
    sb.add$1("<td class=\"drop-down-link-td\">");
    sb.add$1("<table class=\"drop-down-table\"><tr><td colspan=\"2\">");
    t1 = this.kind;
    if (typeof t1 !== "string")
      return this.addRow$1$bailout(1, t1, sb);
    if (t1 === "getter")
      sb.add$1("get ");
    else if (t1 === "setter")
      sb.add$1("set ");
    sb.add$1(this.match.toHtml$0());
    if (t1 === "class" || t1 === "interface" || t1 === "typedef")
      sb.add$1(this.args);
    else if (t1 === "constructor" || t1 === "method")
      if (this.noargs === true)
        sb.add$1("()");
      else
        sb.add$1("(...)");
    sb.add$1("</td></tr><tr><td class=\"drop-down-link-kind\">");
    sb.add$1($.kindToString(t1));
    t1 = this.prefix;
    if (!(t1 == null)) {
      sb.add$1(" in ");
      sb.add$1(t1.toHtml$0());
      sb.add$1(this.args);
    } else {
      t1 = this.type;
      if (!(t1 == null)) {
        sb.add$1(" in ");
        sb.add$1(t1);
        sb.add$1(this.args);
      }
    }
    sb.add$1("</td><td class=\"drop-down-link-library\">");
    t1 = this.library;
    if (!(t1 == null))
      sb.add$1("library " + $.S(t1));
    sb.add$1("</td></tr></table></td>");
    t1 = sb.toString$0();
    this.row.set$innerHtml(t1);
  },
  addRow$1$bailout: function(state0, t1, sb) {
    var t3 = $.getInterceptor(t1);
    if (t3.$eq(t1, "getter") === true)
      sb.add$1("get ");
    else if (t3.$eq(t1, "setter") === true)
      sb.add$1("set ");
    sb.add$1(this.match.toHtml$0());
    if (t3.$eq(t1, "class") === true || t3.$eq(t1, "interface") === true || t3.$eq(t1, "typedef") === true)
      sb.add$1(this.args);
    else if (t3.$eq(t1, "constructor") === true || t3.$eq(t1, "method") === true)
      if (this.noargs === true)
        sb.add$1("()");
      else
        sb.add$1("(...)");
    sb.add$1("</td></tr><tr><td class=\"drop-down-link-kind\">");
    sb.add$1($.kindToString(t1));
    t1 = this.prefix;
    if (!(t1 == null)) {
      sb.add$1(" in ");
      sb.add$1(t1.toHtml$0());
      sb.add$1(this.args);
    } else {
      t1 = this.type;
      if (!(t1 == null)) {
        sb.add$1(" in ");
        sb.add$1(t1);
        sb.add$1(this.args);
      }
    }
    sb.add$1("</td><td class=\"drop-down-link-library\">");
    t1 = this.library;
    if (!(t1 == null))
      sb.add$1("library " + $.S(t1));
    sb.add$1("</td></tr></table></td>");
    t1 = sb.toString$0();
    this.row.set$innerHtml(t1);
  }
};

$$.Keyword = {"": "Iterable;syntax>,isPseudo,isBuiltIn,info>",
  get$hashCode: function() {
    return $.hashCode(this.syntax);
  },
  $eq: function(other) {
    if (other == null)
      return false;
    return typeof other === "object" && other !== null && !!other.$isSourceString && $.$$eq(this.syntax, other.slowToString$0()) === true;
  },
  get$iterator: function() {
    return $.StringCodeIterator$(this.syntax);
  },
  toString$0: function() {
    return this.syntax;
  },
  slowToString$0: function() {
    return this.syntax;
  },
  get$stringValue: function() {
    return this.syntax;
  },
  get$isEmpty: function() {
    return false;
  },
  $asSourceString: null,
  $isSourceString: true
};

$$.KeywordState = {"": "Object;keyword>"};

$$.ArrayKeywordState = {"": "KeywordState;table,keyword",
  next$1: function(c) {
    var t2, t3;
    t2 = this.table;
    if (c !== (c | 0))
      return this.next$1$bailout1(1, c);
    t3 = c - 97;
    if (t3 < 0 || t3 >= t2.length)
      throw $.ioore(t3);
    return t2[t3];
  },
  next$1$bailout1: function(state0, c) {
    var t2, t3;
    t2 = this.table;
    t3 = $.$$sub(c, 97);
    if (t3 !== (t3 | 0))
      throw $.iae(t3);
    if (t3 < 0 || t3 >= t2.length)
      throw $.ioore(t3);
    return t2[t3];
  },
  get$next: function() {
    return new $.BoundClosure$1(this, "next$1");
  },
  toString$0: function() {
    var sb, t1, foo, i;
    sb = $.StringBuffer$("");
    sb.add$1("[");
    t1 = this.keyword;
    if (!(t1 == null)) {
      sb.add$1("*");
      sb.add$1(t1);
      sb.add$1(" ");
    }
    foo = this.table;
    for (t1 = foo.length, i = 0; i < t1; ++i)
      if (!(foo[i] == null))
        sb.add$1($.S($.String_String$fromCharCodes([i + 97])) + ": " + $.S(foo[i]) + "; ");
    sb.add$1("]");
    return sb.toString$0();
  }
};

$$.LeafKeywordState = {"": "KeywordState;keyword",
  next$1: function(c) {
    return;
  },
  get$next: function() {
    return new $.BoundClosure$1(this, "next$1");
  },
  toString$0: function() {
    return this.keyword.get$syntax();
  }
};

$$.AbstractScanner = {"": "Object;",
  tokenize$0: function() {
    var next = this.advance$0();
    for (; !(next === 0);)
      next = this.bigSwitch$1(next);
    this.appendEofToken$0();
    return this.firstToken$0();
  },
  bigSwitch$1: function(next) {
    if (typeof next !== "number")
      return this.bigSwitch$1$bailout(1, next);
    this.beginToken$0();
    if (next === 32 || next === 9 || next === 10 || next === 13) {
      this.appendWhiteSpace$1(next);
      next = this.advance$0();
      for (; next === 32;) {
        this.appendWhiteSpace$1(next);
        next = this.advance$0();
      }
      return next;
    }
    if (97 <= next && next <= 122) {
      if (114 === next)
        return this.tokenizeRawStringKeywordOrIdentifier$1(next);
      return this.tokenizeKeywordOrIdentifier$2(next, true);
    }
    if (65 <= next && next <= 90 || next === 95 || next === 36)
      return this.tokenizeIdentifier$3(next, this.get$byteOffset(), true);
    if (next === 60)
      return this.tokenizeLessThan$1(next);
    if (next === 62)
      return this.tokenizeGreaterThan$1(next);
    if (next === 61)
      return this.tokenizeEquals$1(next);
    if (next === 33)
      return this.tokenizeExclamation$1(next);
    if (next === 43)
      return this.tokenizePlus$1(next);
    if (next === 45)
      return this.tokenizeMinus$1(next);
    if (next === 42)
      return this.tokenizeMultiply$1(next);
    if (next === 37)
      return this.tokenizePercent$1(next);
    if (next === 38)
      return this.tokenizeAmpersand$1(next);
    if (next === 124)
      return this.tokenizeBar$1(next);
    if (next === 94)
      return this.tokenizeCaret$1(next);
    if (next === 91)
      return this.tokenizeOpenSquareBracket$1(next);
    if (next === 126)
      return this.tokenizeTilde$1(next);
    if (next === 92) {
      this.appendPrecedenceToken$1($.CONSTANT20);
      return this.advance$0();
    }
    if (next === 35)
      return this.tokenizeTag$1(next);
    if (next === 40) {
      this.appendBeginGroup$2($.CONSTANT21, "(");
      return this.advance$0();
    }
    if (next === 41)
      return this.appendEndGroup$3($.CONSTANT22, ")", 40);
    if (next === 44) {
      this.appendPrecedenceToken$1($.CONSTANT23);
      return this.advance$0();
    }
    if (next === 58) {
      this.appendPrecedenceToken$1($.CONSTANT24);
      return this.advance$0();
    }
    if (next === 59) {
      this.appendPrecedenceToken$1($.CONSTANT25);
      this.discardOpenLt$0();
      return this.advance$0();
    }
    if (next === 63) {
      this.appendPrecedenceToken$1($.CONSTANT26);
      return this.advance$0();
    }
    if (next === 93)
      return this.appendEndGroup$3($.CONSTANT27, "]", 91);
    if (next === 96) {
      this.appendPrecedenceToken$1($.CONSTANT28);
      return this.advance$0();
    }
    if (next === 123) {
      this.appendBeginGroup$2($.CONSTANT29, "{");
      return this.advance$0();
    }
    if (next === 125)
      return this.appendEndGroup$3($.CONSTANT30, "}", 123);
    if (next === 47)
      return this.tokenizeSlashOrComment$1(next);
    if (next === 64)
      return this.tokenizeAt$1(next);
    if (next === 34 || next === 39)
      return this.tokenizeString$3(next, this.get$byteOffset(), false);
    if (next === 46)
      return this.tokenizeDotsOrNumber$1(next);
    if (next === 48)
      return this.tokenizeHexOrNumber$1(next);
    if (next === 49 || next === 50 || next === 51 || next === 52 || next === 53 || next === 54 || next === 55 || next === 56 || next === 57)
      return this.tokenizeNumber$1(next);
    if (next === 0)
      return 0;
    if (next < 31)
      return this.error$1($.StringWrapper$("unexpected character " + $.S(next)));
    if (next === 160) {
      this.appendWhiteSpace$1(next);
      return this.advance$0();
    }
    return this.tokenizeIdentifier$3(next, this.get$byteOffset(), true);
  },
  bigSwitch$1$bailout: function(state0, next) {
    this.beginToken$0();
    if (next === 32 || next === 9 || next === 10 || next === 13) {
      this.appendWhiteSpace$1(next);
      next = this.advance$0();
      for (; next === 32;) {
        this.appendWhiteSpace$1(next);
        next = this.advance$0();
      }
      return next;
    }
    if ($.CONSTANT2.$le(97, next) && $.$$le(next, 122) === true) {
      if (114 === next)
        return this.tokenizeRawStringKeywordOrIdentifier$1(next);
      return this.tokenizeKeywordOrIdentifier$2(next, true);
    }
    if ($.CONSTANT2.$le(65, next) && $.$$le(next, 90) === true || next === 95 || next === 36)
      return this.tokenizeIdentifier$3(next, this.get$byteOffset(), true);
    if (next === 60)
      return this.tokenizeLessThan$1(next);
    if (next === 62)
      return this.tokenizeGreaterThan$1(next);
    if (next === 61)
      return this.tokenizeEquals$1(next);
    if (next === 33)
      return this.tokenizeExclamation$1(next);
    if (next === 43)
      return this.tokenizePlus$1(next);
    if (next === 45)
      return this.tokenizeMinus$1(next);
    if (next === 42)
      return this.tokenizeMultiply$1(next);
    if (next === 37)
      return this.tokenizePercent$1(next);
    if (next === 38)
      return this.tokenizeAmpersand$1(next);
    if (next === 124)
      return this.tokenizeBar$1(next);
    if (next === 94)
      return this.tokenizeCaret$1(next);
    if (next === 91)
      return this.tokenizeOpenSquareBracket$1(next);
    if (next === 126)
      return this.tokenizeTilde$1(next);
    if (next === 92) {
      this.appendPrecedenceToken$1($.CONSTANT20);
      return this.advance$0();
    }
    if (next === 35)
      return this.tokenizeTag$1(next);
    if (next === 40) {
      this.appendBeginGroup$2($.CONSTANT21, "(");
      return this.advance$0();
    }
    if (next === 41)
      return this.appendEndGroup$3($.CONSTANT22, ")", 40);
    if (next === 44) {
      this.appendPrecedenceToken$1($.CONSTANT23);
      return this.advance$0();
    }
    if (next === 58) {
      this.appendPrecedenceToken$1($.CONSTANT24);
      return this.advance$0();
    }
    if (next === 59) {
      this.appendPrecedenceToken$1($.CONSTANT25);
      this.discardOpenLt$0();
      return this.advance$0();
    }
    if (next === 63) {
      this.appendPrecedenceToken$1($.CONSTANT26);
      return this.advance$0();
    }
    if (next === 93)
      return this.appendEndGroup$3($.CONSTANT27, "]", 91);
    if (next === 96) {
      this.appendPrecedenceToken$1($.CONSTANT28);
      return this.advance$0();
    }
    if (next === 123) {
      this.appendBeginGroup$2($.CONSTANT29, "{");
      return this.advance$0();
    }
    if (next === 125)
      return this.appendEndGroup$3($.CONSTANT30, "}", 123);
    if (next === 47)
      return this.tokenizeSlashOrComment$1(next);
    if (next === 64)
      return this.tokenizeAt$1(next);
    if (next === 34 || next === 39)
      return this.tokenizeString$3(next, this.get$byteOffset(), false);
    if (next === 46)
      return this.tokenizeDotsOrNumber$1(next);
    if (next === 48)
      return this.tokenizeHexOrNumber$1(next);
    if (next === 49 || next === 50 || next === 51 || next === 52 || next === 53 || next === 54 || next === 55 || next === 56 || next === 57)
      return this.tokenizeNumber$1(next);
    if (next === 0)
      return 0;
    if ($.$$lt(next, 31) === true)
      return this.error$1($.StringWrapper$("unexpected character " + $.S(next)));
    if (next === 160) {
      this.appendWhiteSpace$1(next);
      return this.advance$0();
    }
    return this.tokenizeIdentifier$3(next, this.get$byteOffset(), true);
  },
  tokenizeTag$1: function(next) {
    if ($.$$eq(this.get$byteOffset(), 0) === true)
      if (this.peek$0() === 33) {
        do
          next = this.advance$0();
        while (!(next === 10) && !(next === 13) && !(next === 0));
        return next;
      }
    this.appendPrecedenceToken$1($.CONSTANT47);
    return this.advance$0();
  },
  tokenizeTilde$1: function(next) {
    next = this.advance$0();
    if (next === 47)
      return this.select$3(61, $.CONSTANT48, $.CONSTANT49);
    else {
      this.appendPrecedenceToken$1($.CONSTANT50);
      return next;
    }
  },
  tokenizeOpenSquareBracket$1: function(next) {
    var token;
    next = this.advance$0();
    if (next === 93) {
      token = this.previousToken$0();
      if (typeof token === "object" && token !== null && !!token.$isKeywordToken && token.value.get$stringValue() === "operator")
        return this.select$3(61, $.CONSTANT51, $.CONSTANT52);
    }
    this.appendBeginGroup$2($.CONSTANT53, "[");
    return next;
  },
  tokenizeCaret$1: function(next) {
    return this.select$3(61, $.CONSTANT54, $.CONSTANT55);
  },
  tokenizeBar$1: function(next) {
    next = this.advance$0();
    if (next === 124) {
      this.appendPrecedenceToken$1($.CONSTANT56);
      return this.advance$0();
    } else if (next === 61) {
      this.appendPrecedenceToken$1($.CONSTANT57);
      return this.advance$0();
    } else {
      this.appendPrecedenceToken$1($.CONSTANT58);
      return next;
    }
  },
  tokenizeAmpersand$1: function(next) {
    next = this.advance$0();
    if (next === 38) {
      this.appendPrecedenceToken$1($.CONSTANT59);
      return this.advance$0();
    } else if (next === 61) {
      this.appendPrecedenceToken$1($.CONSTANT60);
      return this.advance$0();
    } else {
      this.appendPrecedenceToken$1($.CONSTANT61);
      return next;
    }
  },
  tokenizePercent$1: function(next) {
    return this.select$3(61, $.CONSTANT62, $.CONSTANT63);
  },
  tokenizeMultiply$1: function(next) {
    return this.select$3(61, $.CONSTANT64, $.CONSTANT65);
  },
  tokenizeMinus$1: function(next) {
    next = this.advance$0();
    if (next === 45) {
      this.appendPrecedenceToken$1($.CONSTANT66);
      return this.advance$0();
    } else if (next === 61) {
      this.appendPrecedenceToken$1($.CONSTANT67);
      return this.advance$0();
    } else {
      this.appendPrecedenceToken$1($.CONSTANT68);
      return next;
    }
  },
  tokenizePlus$1: function(next) {
    next = this.advance$0();
    if (43 === next) {
      this.appendPrecedenceToken$1($.CONSTANT69);
      return this.advance$0();
    } else if (61 === next) {
      this.appendPrecedenceToken$1($.CONSTANT70);
      return this.advance$0();
    } else {
      this.appendPrecedenceToken$1($.CONSTANT71);
      return next;
    }
  },
  tokenizeExclamation$1: function(next) {
    next = this.advance$0();
    if (next === 61)
      return this.select$3(61, $.CONSTANT72, $.CONSTANT73);
    this.appendPrecedenceToken$1($.CONSTANT74);
    return next;
  },
  tokenizeEquals$1: function(next) {
    this.discardOpenLt$0();
    next = this.advance$0();
    if (next === 61)
      return this.select$3(61, $.CONSTANT75, $.CONSTANT76);
    else if (next === 62) {
      this.appendPrecedenceToken$1($.CONSTANT77);
      return this.advance$0();
    }
    this.appendPrecedenceToken$1($.CONSTANT78);
    return next;
  },
  tokenizeGreaterThan$1: function(next) {
    next = this.advance$0();
    if (61 === next) {
      this.appendPrecedenceToken$1($.CONSTANT79);
      return this.advance$0();
    } else if (62 === next) {
      next = this.advance$0();
      if (61 === next) {
        this.appendPrecedenceToken$1($.CONSTANT80);
        return this.advance$0();
      } else {
        this.appendGtGt$2($.CONSTANT81, ">>");
        return next;
      }
    } else {
      this.appendGt$2($.CONSTANT82, ">");
      return next;
    }
  },
  tokenizeLessThan$1: function(next) {
    next = this.advance$0();
    if (61 === next) {
      this.appendPrecedenceToken$1($.CONSTANT83);
      return this.advance$0();
    } else if (60 === next)
      return this.select$3(61, $.CONSTANT84, $.CONSTANT85);
    else {
      this.appendBeginGroup$2($.CONSTANT86, "<");
      return next;
    }
  },
  tokenizeNumber$1: function(next) {
    var start = this.get$byteOffset();
    for (; true;) {
      next = this.advance$0();
      if ($.CONSTANT2.$le(48, next) && $.$$le(next, 57) === true)
        continue;
      else if (next === 46)
        return this.tokenizeFractionPart$2(this.advance$0(), start);
      else if (next === 101 || next === 69 || next === 100 || next === 68)
        return this.tokenizeFractionPart$2(next, start);
      else {
        this.appendByteStringToken$2($.CONSTANT31, this.asciiString$2(start, 0));
        return next;
      }
    }
  },
  tokenizeHexOrNumber$1: function(next) {
    var x = this.peek$0();
    if (x === 120 || x === 88) {
      this.advance$0();
      return this.tokenizeHex$1(x);
    }
    return this.tokenizeNumber$1(next);
  },
  tokenizeHex$1: function(next) {
    var start, hasDigits, t1;
    start = $.$$sub(this.get$byteOffset(), 1);
    for (hasDigits = false; true; hasDigits = true) {
      next = this.advance$0();
      if (!($.CONSTANT2.$le(48, next) && $.$$le(next, 57) === true))
        if (!($.CONSTANT2.$le(65, next) && $.$$le(next, 70) === true))
          t1 = $.CONSTANT2.$le(97, next) && $.$$le(next, 102) === true;
        else
          t1 = true;
      else
        t1 = true;
      if (t1)
        ;
      else {
        if (!hasDigits)
          return this.error$1($.CONSTANT37);
        this.appendByteStringToken$2($.CONSTANT38, this.asciiString$2(start, 0));
        return next;
      }
    }
  },
  tokenizeDotsOrNumber$1: function(next) {
    var start = this.get$byteOffset();
    next = this.advance$0();
    if ($.CONSTANT2.$le(48, next) && $.$$le(next, 57) === true)
      return this.tokenizeFractionPart$2(next, start);
    else if (46 === next)
      return this.select$3(46, $.CONSTANT32, $.CONSTANT33);
    else {
      this.appendPrecedenceToken$1($.CONSTANT34);
      return next;
    }
  },
  tokenizeFractionPart$2: function(next, start) {
    var done, hasDigit;
    if (typeof next !== "number")
      return this.tokenizeFractionPart$2$bailout(1, next, start);
    $LOOP$0:
      for (done = false, hasDigit = false; !done;) {
        if ($.CONSTANT2.$le(48, next) && $.$$le(next, 57) === true)
          ;
        else if (101 === next || 69 === next) {
          next = this.tokenizeExponent$1(this.advance$0());
          done = true;
          hasDigit = true;
          continue $LOOP$0;
        } else {
          done = true;
          continue $LOOP$0;
        }
        next = this.advance$0();
        hasDigit = true;
      }
    if (!hasDigit) {
      this.appendByteStringToken$2($.CONSTANT31, this.asciiString$2(start, -1));
      if (46 === next)
        return this.select$3(46, $.CONSTANT32, $.CONSTANT33);
      this.appendPrecedenceToken$1($.CONSTANT34);
      return this.bigSwitch$1(next);
    }
    if (next === 100 || next === 68)
      next = this.advance$0();
    this.appendByteStringToken$2($.CONSTANT35, this.asciiString$2(start, 0));
    return next;
  },
  tokenizeFractionPart$2$bailout: function(state0, next, start) {
    var done, hasDigit;
    $LOOP$0:
      for (done = false, hasDigit = false; !done;) {
        if ($.CONSTANT2.$le(48, next) && $.$$le(next, 57) === true)
          ;
        else if (101 === next || 69 === next) {
          next = this.tokenizeExponent$1(this.advance$0());
          done = true;
          hasDigit = true;
          continue $LOOP$0;
        } else {
          done = true;
          continue $LOOP$0;
        }
        next = this.advance$0();
        hasDigit = true;
      }
    if (!hasDigit) {
      this.appendByteStringToken$2($.CONSTANT31, this.asciiString$2(start, -1));
      if (46 === next)
        return this.select$3(46, $.CONSTANT32, $.CONSTANT33);
      this.appendPrecedenceToken$1($.CONSTANT34);
      return this.bigSwitch$1(next);
    }
    if (next === 100 || next === 68)
      next = this.advance$0();
    this.appendByteStringToken$2($.CONSTANT35, this.asciiString$2(start, 0));
    return next;
  },
  tokenizeExponent$1: function(next) {
    var hasDigits;
    if (typeof next !== "number")
      return this.tokenizeExponent$1$bailout(1, next);
    if (next === 43 || next === 45) {
      next = this.advance$0();
      if (typeof next !== "number")
        return this.tokenizeExponent$1$bailout(2, next);
    }
    for (hasDigits = false; true; hasDigits = true) {
      if (48 <= next && next <= 57)
        ;
      else {
        if (!hasDigits)
          return this.error$1($.CONSTANT36);
        return next;
      }
      next = this.advance$0();
      if (typeof next !== "number")
        return this.tokenizeExponent$1$bailout(3, next);
    }
  },
  tokenizeExponent$1$bailout: function(state0, next) {
    switch (state0) {
      case 0:
      case 1:
        state0 = 0;
      case 2:
        if (state0 === 2 || state0 === 0 && (next === 43 || next === 45))
          switch (state0) {
            case 0:
              next = this.advance$0();
            case 2:
              state0 = 0;
          }
        hasDigits = false;
      case 3:
        var hasDigits;
        L0:
          while (true)
            switch (state0) {
              case 0:
                if (!true)
                  break L0;
                if ($.CONSTANT2.$le(48, next) && $.$$le(next, 57) === true)
                  ;
                else {
                  if (!hasDigits)
                    return this.error$1($.CONSTANT36);
                  return next;
                }
                next = this.advance$0();
              case 3:
                state0 = 0;
                hasDigits = true;
            }
    }
  },
  tokenizeSlashOrComment$1: function(next) {
    next = this.advance$0();
    if (42 === next)
      return this.tokenizeMultiLineComment$1(next);
    else if (47 === next)
      return this.tokenizeSingleLineComment$1(next);
    else if (61 === next) {
      this.appendPrecedenceToken$1($.CONSTANT44);
      return this.advance$0();
    } else {
      this.appendPrecedenceToken$1($.CONSTANT45);
      return next;
    }
  },
  tokenizeSingleLineComment$1: function(next) {
    for (; true;) {
      next = this.advance$0();
      if (10 === next || 13 === next || 0 === next) {
        this.appendComment$0();
        return next;
      }
    }
  },
  tokenizeMultiLineComment$1: function(next) {
    var nesting;
    next = this.advance$0();
    for (nesting = 1; true;)
      if (0 === next)
        return next;
      else if (42 === next) {
        next = this.advance$0();
        if (47 === next) {
          --nesting;
          if (0 === nesting) {
            next = this.advance$0();
            this.appendComment$0();
            return next;
          } else
            next = this.advance$0();
        }
      } else if (47 === next) {
        next = this.advance$0();
        if (42 === next) {
          next = this.advance$0();
          ++nesting;
        }
      } else
        next = this.advance$0();
  },
  tokenizeRawStringKeywordOrIdentifier$1: function(next) {
    var nextnext, start;
    nextnext = this.peek$0();
    if (nextnext === 34 || nextnext === 39) {
      start = this.get$byteOffset();
      return this.tokenizeString$3(this.advance$0(), start, true);
    }
    return this.tokenizeKeywordOrIdentifier$2(next, true);
  },
  tokenizeKeywordOrIdentifier$2: function(next, allowDollar) {
    var state, start, t1;
    if (typeof next !== "number")
      return this.tokenizeKeywordOrIdentifier$2$bailout(1, next, allowDollar);
    state = $.KeywordState_KEYWORD_STATE();
    start = this.get$byteOffset();
    while (true) {
      t1 = !(state == null);
      if (!(t1 && $.CONSTANT2.$le(97, next) && $.$$le(next, 122) === true))
        break;
      state = state.next$1(next);
      next = this.advance$0();
    }
    if (state == null || state.get$keyword() == null)
      return this.tokenizeIdentifier$3(next, start, allowDollar);
    if (!($.CONSTANT2.$le(65, next) && $.$$le(next, 90) === true))
      t1 = $.CONSTANT2.$le(48, next) && $.$$le(next, 57) === true || next === 95 || next === 36;
    else
      t1 = true;
    if (t1)
      return this.tokenizeIdentifier$3(next, start, allowDollar);
    else if ($.$$lt(next, 128) === true) {
      this.appendKeywordToken$1(state.get$keyword());
      return next;
    } else
      return this.tokenizeIdentifier$3(next, start, allowDollar);
  },
  tokenizeKeywordOrIdentifier$2$bailout: function(state0, next, allowDollar) {
    var state, start, t1;
    state = $.KeywordState_KEYWORD_STATE();
    start = this.get$byteOffset();
    while (true) {
      t1 = !(state == null);
      if (!(t1 && $.CONSTANT2.$le(97, next) && $.$$le(next, 122) === true))
        break;
      state = state.next$1(next);
      next = this.advance$0();
    }
    if (state == null || state.get$keyword() == null)
      return this.tokenizeIdentifier$3(next, start, allowDollar);
    if (!($.CONSTANT2.$le(65, next) && $.$$le(next, 90) === true))
      t1 = $.CONSTANT2.$le(48, next) && $.$$le(next, 57) === true || next === 95 || next === 36;
    else
      t1 = true;
    if (t1)
      return this.tokenizeIdentifier$3(next, start, allowDollar);
    else if ($.$$lt(next, 128) === true) {
      this.appendKeywordToken$1(state.get$keyword());
      return next;
    } else
      return this.tokenizeIdentifier$3(next, start, allowDollar);
  },
  tokenizeIdentifier$3: function(next, start, allowDollar) {
    var isDynamicBuiltIn, isAscii, t1, nonAsciiStart, string, byteLength;
    if (typeof next !== "number")
      return this.tokenizeIdentifier$3$bailout(1, next, start, allowDollar);
    if (next === 68) {
      next = this.advance$0();
      if (next === 121) {
        next = this.advance$0();
        if (next === 110) {
          next = this.advance$0();
          if (next === 97) {
            next = this.advance$0();
            if (next === 109) {
              next = this.advance$0();
              if (next === 105) {
                next = this.advance$0();
                if (next === 99) {
                  next = this.advance$0();
                  isDynamicBuiltIn = true;
                } else
                  isDynamicBuiltIn = false;
              } else
                isDynamicBuiltIn = false;
            } else
              isDynamicBuiltIn = false;
          } else
            isDynamicBuiltIn = false;
        } else
          isDynamicBuiltIn = false;
      } else
        isDynamicBuiltIn = false;
    } else
      isDynamicBuiltIn = false;
    if (typeof next !== "number")
      return this.tokenizeIdentifier$3$bailout(2, next, start, allowDollar, isDynamicBuiltIn);
    for (isAscii = true; true; isDynamicBuiltIn = false) {
      if (!($.CONSTANT2.$le(97, next) && $.$$le(next, 122) === true))
        if (!($.CONSTANT2.$le(65, next) && $.$$le(next, 90) === true))
          if (!($.CONSTANT2.$le(48, next) && $.$$le(next, 57) === true))
            if (!(next === 95))
              t1 = next === 36 && allowDollar;
            else
              t1 = true;
          else
            t1 = true;
        else
          t1 = true;
      else
        t1 = true;
      if (t1)
        next = this.advance$0();
      else {
        if ($.$$lt(next, 128) === true || next === 160) {
          if ($.$$eq(start, this.get$byteOffset()) === true)
            return this.error$1($.CONSTANT87);
          else if (isDynamicBuiltIn)
            this.appendKeywordToken$1($.CONSTANT88);
          else if (isAscii)
            this.appendByteStringToken$2($.CONSTANT89, this.asciiString$2(start, 0));
          else
            this.appendByteStringToken$2($.CONSTANT19, this.utf8String$2(start, -1));
          return next;
        } else {
          nonAsciiStart = this.get$byteOffset();
          do {
            next = this.nextByte$0();
            if (next === 160)
              break;
          } while ($.$$gt(next, 127) === true);
          string = this.utf8String$2(nonAsciiStart, -1).slowToString$0();
          byteLength = $.$$sub(nonAsciiStart, this.get$byteOffset());
          this.addToCharOffset$1($.$$sub($.length(string), byteLength));
        }
        isAscii = false;
      }
    }
  },
  tokenizeIdentifier$3$bailout: function(state0, next, start, allowDollar, isDynamicBuiltIn) {
    switch (state0) {
      case 0:
      case 1:
        state0 = 0;
        if (next === 68) {
          next = this.advance$0();
          if (next === 121) {
            next = this.advance$0();
            if (next === 110) {
              next = this.advance$0();
              if (next === 97) {
                next = this.advance$0();
                if (next === 109) {
                  next = this.advance$0();
                  if (next === 105) {
                    next = this.advance$0();
                    if (next === 99) {
                      next = this.advance$0();
                      isDynamicBuiltIn = true;
                    } else
                      isDynamicBuiltIn = false;
                  } else
                    isDynamicBuiltIn = false;
                } else
                  isDynamicBuiltIn = false;
              } else
                isDynamicBuiltIn = false;
            } else
              isDynamicBuiltIn = false;
          } else
            isDynamicBuiltIn = false;
        } else
          isDynamicBuiltIn = false;
      case 2:
        var isAscii, t1, nonAsciiStart, string, byteLength;
        state0 = 0;
        for (isAscii = true; true; isDynamicBuiltIn = false) {
          if (!($.CONSTANT2.$le(97, next) && $.$$le(next, 122) === true))
            if (!($.CONSTANT2.$le(65, next) && $.$$le(next, 90) === true))
              if (!($.CONSTANT2.$le(48, next) && $.$$le(next, 57) === true))
                if (!(next === 95))
                  t1 = next === 36 && allowDollar;
                else
                  t1 = true;
              else
                t1 = true;
            else
              t1 = true;
          else
            t1 = true;
          if (t1)
            next = this.advance$0();
          else {
            if ($.$$lt(next, 128) === true || next === 160) {
              if ($.$$eq(start, this.get$byteOffset()) === true)
                return this.error$1($.CONSTANT87);
              else if (isDynamicBuiltIn)
                this.appendKeywordToken$1($.CONSTANT88);
              else if (isAscii)
                this.appendByteStringToken$2($.CONSTANT89, this.asciiString$2(start, 0));
              else
                this.appendByteStringToken$2($.CONSTANT19, this.utf8String$2(start, -1));
              return next;
            } else {
              nonAsciiStart = this.get$byteOffset();
              do {
                next = this.nextByte$0();
                if (next === 160)
                  break;
              } while ($.$$gt(next, 127) === true);
              string = this.utf8String$2(nonAsciiStart, -1).slowToString$0();
              byteLength = $.$$sub(nonAsciiStart, this.get$byteOffset());
              this.addToCharOffset$1($.$$sub($.length(string), byteLength));
            }
            isAscii = false;
          }
        }
    }
  },
  tokenizeAt$1: function(next) {
    this.get$byteOffset();
    next = this.advance$0();
    this.appendPrecedenceToken$1($.CONSTANT43);
    return next;
  },
  tokenizeString$3: function(next, start, raw) {
    var next0 = this.advance$0();
    if (next == null ? next0 == null : next === next0) {
      next0 = this.advance$0();
      if (next == null ? next0 == null : next === next0)
        return this.tokenizeMultiLineString$3(next, start, raw);
      else {
        this.appendByteStringToken$2($.CONSTANT39, this.utf8String$2(start, -1));
        return next0;
      }
    }
    if (raw)
      return this.tokenizeSingleLineRawString$3(next0, next, start);
    else
      return this.tokenizeSingleLineString$3(next0, next, start);
  },
  tokenizeSingleLineString$3: function(next, quoteChar, start) {
    var t1;
    if (typeof next !== "number")
      return this.tokenizeSingleLineString$3$bailout(1, next, quoteChar, start);
    for (; !(next == null ? quoteChar == null : next === quoteChar);) {
      if (next === 92)
        next = this.advance$0();
      else if (next === 36) {
        next = this.tokenizeStringInterpolation$1(start);
        start = this.get$byteOffset();
        continue;
      }
      if ($.$$le(next, 13) === true)
        t1 = next === 10 || next === 13 || next === 0;
      else
        t1 = false;
      if (t1)
        return this.error$1($.CONSTANT40);
      next = this.advance$0();
    }
    this.appendByteStringToken$2($.CONSTANT39, this.utf8String$2(start, 0));
    return this.advance$0();
  },
  tokenizeSingleLineString$3$bailout: function(state0, next, quoteChar, start) {
    var t1;
    for (; !(next == null ? quoteChar == null : next === quoteChar);) {
      if (next === 92)
        next = this.advance$0();
      else if (next === 36) {
        next = this.tokenizeStringInterpolation$1(start);
        start = this.get$byteOffset();
        continue;
      }
      if ($.$$le(next, 13) === true)
        t1 = next === 10 || next === 13 || next === 0;
      else
        t1 = false;
      if (t1)
        return this.error$1($.CONSTANT40);
      next = this.advance$0();
    }
    this.appendByteStringToken$2($.CONSTANT39, this.utf8String$2(start, 0));
    return this.advance$0();
  },
  tokenizeStringInterpolation$1: function(start) {
    var next;
    this.appendByteStringToken$2($.CONSTANT39, this.utf8String$2(start, -1));
    this.beginToken$0();
    next = this.advance$0();
    if (next === 123)
      return this.tokenizeInterpolatedExpression$2(next, start);
    else
      return this.tokenizeInterpolatedIdentifier$2(next, start);
  },
  tokenizeInterpolatedExpression$2: function(next, start) {
    var t1;
    this.appendBeginGroup$2($.CONSTANT42, "${");
    this.beginToken$0();
    next = this.advance$0();
    while (true) {
      t1 = next === 0;
      if (!(!t1 && !(next === 2)))
        break;
      next = this.bigSwitch$1(next);
    }
    if (t1)
      return next;
    next = this.advance$0();
    this.beginToken$0();
    return next;
  },
  tokenizeInterpolatedIdentifier$2: function(next, start) {
    this.appendPrecedenceToken$1($.CONSTANT41);
    this.beginToken$0();
    next = this.tokenizeKeywordOrIdentifier$2(next, false);
    this.beginToken$0();
    return next;
  },
  tokenizeSingleLineRawString$3: function(next, quoteChar, start) {
    next = this.advance$0();
    if (typeof next !== "number")
      return this.tokenizeSingleLineRawString$3$bailout(1, quoteChar, start, next);
    for (; $.$$eq(next, 0) !== true;) {
      if (next == null ? quoteChar == null : next === quoteChar) {
        this.appendByteStringToken$2($.CONSTANT39, this.utf8String$2(start, 0));
        return this.advance$0();
      } else if (next === 10 || next === 13)
        return this.error$1($.CONSTANT40);
      next = this.advance$0();
    }
    return this.error$1($.CONSTANT40);
  },
  tokenizeSingleLineRawString$3$bailout: function(state0, quoteChar, start, next) {
    for (; $.$$eq(next, 0) !== true;) {
      if (next == null ? quoteChar == null : next === quoteChar) {
        this.appendByteStringToken$2($.CONSTANT39, this.utf8String$2(start, 0));
        return this.advance$0();
      } else if (next === 10 || next === 13)
        return this.error$1($.CONSTANT40);
      next = this.advance$0();
    }
    return this.error$1($.CONSTANT40);
  },
  tokenizeMultiLineRawString$2: function(quoteChar, start) {
    var next = this.advance$0();
    $outer$0:
      for (; !(next === 0);) {
        for (; !(next == null ? quoteChar == null : next === quoteChar);) {
          next = this.advance$0();
          if (next === 0)
            break $outer$0;
        }
        next = this.advance$0();
        if (next == null ? quoteChar == null : next === quoteChar) {
          next = this.advance$0();
          if (next == null ? quoteChar == null : next === quoteChar) {
            this.appendByteStringToken$2($.CONSTANT39, this.utf8String$2(start, 0));
            return this.advance$0();
          }
        }
      }
    return this.error$1($.CONSTANT40);
  },
  tokenizeMultiLineString$3: function(quoteChar, start, raw) {
    var next;
    if (raw)
      return this.tokenizeMultiLineRawString$2(quoteChar, start);
    next = this.advance$0();
    for (; !(next === 0);) {
      if (next === 36) {
        next = this.tokenizeStringInterpolation$1(start);
        start = this.get$byteOffset();
        continue;
      }
      if (next == null ? quoteChar == null : next === quoteChar) {
        next = this.advance$0();
        if (next == null ? quoteChar == null : next === quoteChar) {
          next = this.advance$0();
          if (next == null ? quoteChar == null : next === quoteChar) {
            this.appendByteStringToken$2($.CONSTANT39, this.utf8String$2(start, 0));
            return this.advance$0();
          }
        }
        continue;
      }
      if (next === 92)
        if (this.advance$0() === 0)
          break;
      next = this.advance$0();
    }
    return this.error$1($.CONSTANT40);
  },
  error$1: function(message) {
    this.appendByteStringToken$2($.CONSTANT19, message);
    return this.advance$0();
  },
  get$error: function() {
    return new $.BoundClosure$1(this, "error$1");
  }
};

$$.StringScanner = {"": "ArrayBasedScanner;string,tokens,tail,tokenStart,byteOffset,includeComments,extraCharOffset,groupingStack",
  nextByte$0: function() {
    var t1, t2, t3;
    t1 = this.byteOffset;
    if (typeof t1 !== "number")
      return this.nextByte$0$bailout1(1, t1);
    ++t1;
    this.byteOffset = t1;
    t2 = this.string;
    t3 = $.length(t2);
    if (typeof t3 !== "number")
      return this.nextByte$0$bailout1(2, t1, t2, t3);
    if (t3 > t1) {
      t1 = $.codeUnitAt(t2, t1);
      if (typeof t1 !== "number")
        return this.nextByte$0$bailout1(3, t1);
    } else
      t1 = 0;
    return t1;
  },
  nextByte$0$bailout1: function(state0, t1, t2, t3) {
    switch (state0) {
      case 0:
        t1 = this.byteOffset;
      case 1:
        state0 = 0;
        t1 = $.$$add(t1, 1);
        this.byteOffset = t1;
        t2 = this.string;
        t3 = $.length(t2);
      case 2:
        state0 = 0;
      case 3:
        if (state0 === 3 || state0 === 0 && $.$$gt(t3, t1) === true)
          switch (state0) {
            case 0:
              t1 = $.codeUnitAt(t2, t1);
            case 3:
              state0 = 0;
          }
        else
          t1 = 0;
        return t1;
    }
  },
  peek$0: function() {
    var t1, t2;
    t1 = $.$$add(this.byteOffset, 1);
    t2 = this.string;
    return $.$$gt($.length(t2), t1) === true ? $.codeUnitAt(t2, t1) : 0;
  },
  asciiString$2: function(start, offset) {
    return $.SubstringWrapper$(this.string, start, $.$$add(this.byteOffset, offset));
  },
  utf8String$2: function(start, offset) {
    var t1, t2;
    t1 = this.string;
    t2 = this.byteOffset;
    if (typeof t2 !== "number")
      return this.utf8String$2$bailout1(1, start, t2, offset, t1);
    return $.SubstringWrapper$(t1, start, t2 + offset + 1);
  },
  utf8String$2$bailout1: function(state0, start, t2, offset, t1) {
    return $.SubstringWrapper$(t1, start, $.$$add($.$$add(t2, offset), 1));
  },
  appendByteStringToken$2: function(info, value) {
    var t1 = $.StringToken$fromSource(info, value, this.tokenStart);
    this.tail.set$next(t1);
    this.tail = this.tail.get$next();
  },
  unmatchedBeginGroup$1: function(begin) {
    var error, $close, next;
    error = $.StringWrapper$("unmatched \"" + $.S(begin.get$stringValue()) + "\"");
    $close = $.StringToken$fromSource($.CONSTANT19, error, begin.get$charOffset());
    next = $.StringToken$fromSource($.CONSTANT19, error, begin.get$charOffset());
    begin.set$endGroup($close);
    $close.next = next;
    next.next = begin.get$next();
  }
};

$$.SubstringWrapper = {"": "Iterable;internalString,begin,end,cashedHash,cachedSubString",
  get$hashCode: function() {
    if (0 === this.cashedHash)
      this.cashedHash = $.hashCode(this.slowToString$0());
    return this.cashedHash;
  },
  $eq: function(other) {
    if (other == null)
      return false;
    return typeof other === "object" && other !== null && !!other.$isSourceString && $.$$eq(this.slowToString$0(), other.slowToString$0()) === true;
  },
  slowToString$0: function() {
    if (this.cachedSubString == null)
      this.cachedSubString = $.substring(this.internalString, this.begin, this.end);
    return this.cachedSubString;
  },
  toString$0: function() {
    return "SubstringWrapper(" + $.S(this.slowToString$0()) + ")";
  },
  get$stringValue: function() {
    return;
  },
  get$iterator: function() {
    return $.StringCodeIterator$substring(this.internalString, this.begin, this.end);
  },
  get$isEmpty: function() {
    return $.$$eq(this.begin, this.end);
  },
  $asSourceString: null,
  $isSourceString: true
};

$$.Token = {"": "Object;info>,charOffset>,next=",
  next$1: function(arg0) {
    return this.next.call$1(arg0);
  },
  get$value: function() {
    return this.info.get$value();
  },
  get$stringValue: function() {
    return this.info.get$value().get$stringValue();
  },
  get$kind: function() {
    return this.info.get$kind();
  },
  toString$0: function() {
    return $.toString(this.info.get$value());
  },
  slowToString$0: function() {
    return this.toString$0();
  },
  get$slowCharCount: function() {
    if ($.$$eq(this.info, $.CONSTANT19) === true)
      return 1;
    else
      return $.length(this.slowToString$0());
  }
};

$$.KeywordToken = {"": "Token;value>,info,charOffset,next",
  get$stringValue: function() {
    return this.value.get$syntax();
  },
  toString$0: function() {
    return this.value.get$syntax();
  },
  $isKeywordToken: true
};

$$.StringToken = {"": "Token;value>,info,charOffset,next",
  get$stringValue: function() {
    return this.value.get$stringValue();
  },
  toString$0: function() {
    return "StringToken(" + $.S(this.value.slowToString$0()) + ")";
  },
  slowToString$0: function() {
    return this.value.slowToString$0();
  }
};

$$.StringWrapper = {"": "Iterable;stringValue>",
  get$hashCode: function() {
    return $.CONSTANT1.get$hashCode(this.stringValue);
  },
  $eq: function(other) {
    if (other == null)
      return false;
    return typeof other === "object" && other !== null && !!other.$isSourceString && this.stringValue === other.slowToString$0();
  },
  get$iterator: function() {
    return $.StringCodeIterator$(this.stringValue);
  },
  toString$0: function() {
    return this.stringValue;
  },
  slowToString$0: function() {
    return this.stringValue;
  },
  get$isEmpty: function() {
    return $.CONSTANT1.get$isEmpty(this.stringValue);
  },
  $asSourceString: null,
  $isSourceString: true
};

$$.StringCodeIterator = {"": "Object;string,index,end,_liblib5$_current",
  get$current: function() {
    return this._liblib5$_current;
  },
  moveNext$0: function() {
    var t1, t3, t2;
    this._liblib5$_current = null;
    t1 = this.index;
    t3 = this.end;
    if (typeof t1 !== "number")
      return this.moveNext$0$bailout(1, t1);
    if (typeof t3 !== "number")
      return this.moveNext$0$bailout(2, t1, t3);
    if (t1 >= t3)
      return false;
    t2 = this.string;
    this.index = t1 + 1;
    this._liblib5$_current = $.codeUnitAt(t2, t1);
    return true;
  },
  moveNext$0$bailout: function(state0, t1, t3, t2) {
    switch (state0) {
      case 0:
        this._liblib5$_current = null;
        t1 = this.index;
      case 1:
        state0 = 0;
        t3 = this.end;
      case 2:
        state0 = 0;
        if ($.$$ge(t1, t3) === true)
          return false;
        t1 = this.string;
        t2 = this.index;
      case 3:
        state0 = 0;
        this.index = $.$$add(t2, 1);
        this._liblib5$_current = $.codeUnitAt(t1, t2);
        return true;
    }
  },
  StringCodeIterator$substring$3: function(string, index, end) {
  }
};

$$.BeginGroupToken = {"": "StringToken;endGroup<,value,info,charOffset,next"};

$$.PrecedenceInfo = {"": "Object;value>,precedence,kind>",
  toString$0: function() {
    return "PrecedenceInfo(" + $.S(this.value) + ", " + $.S(this.precedence) + ", " + $.S(this.kind) + ")";
  }
};

$$.ArrayBasedScanner = {"": "AbstractScanner;tail>,byteOffset>",
  get$charOffset: function() {
    var t1, t3;
    t1 = this.byteOffset;
    t3 = this.extraCharOffset;
    if (typeof t1 !== "number")
      return this.get$charOffset$bailout1(1, t1);
    if (typeof t3 !== "number")
      return this.get$charOffset$bailout1(2, t1, t3);
    return t1 + t3;
  },
  get$charOffset$bailout1: function(state0, t1, t3) {
    switch (state0) {
      case 0:
        t1 = this.byteOffset;
      case 1:
        state0 = 0;
        t3 = this.extraCharOffset;
      case 2:
        state0 = 0;
        return $.$$add(t1, t3);
    }
  },
  advance$0: function() {
    return this.nextByte$0();
  },
  select$3: function(choice, yes, no) {
    var next = this.advance$0();
    if (next === choice) {
      this.appendPrecedenceToken$1(yes);
      return this.advance$0();
    } else {
      this.appendPrecedenceToken$1(no);
      return next;
    }
  },
  appendPrecedenceToken$1: function(info) {
    var t1 = $.Token$(info, this.tokenStart);
    this.tail.set$next(t1);
    this.tail = this.tail.get$next();
  },
  appendStringToken$2: function(info, value) {
    var t1 = $.StringToken$(info, value, this.tokenStart);
    this.tail.set$next(t1);
    this.tail = this.tail.get$next();
  },
  appendKeywordToken$1: function(keyword) {
    var syntax, t1;
    syntax = keyword.get$syntax();
    if (syntax === "this" || syntax === "super")
      this.discardOpenLt$0();
    t1 = $.KeywordToken$(keyword, this.tokenStart);
    this.tail.set$next(t1);
    this.tail = this.tail.get$next();
  },
  appendEofToken$0: function() {
    var t1 = $.Token$($.CONSTANT18, this.get$charOffset());
    this.tail.set$next(t1);
    this.tail = this.tail.get$next();
    t1 = this.tail;
    t1.set$next(t1);
    this.discardOpenLt$0();
    for (; $.isEmpty(this.groupingStack) !== true;) {
      this.unmatchedBeginGroup$1(this.groupingStack.get$head());
      this.groupingStack = this.groupingStack.get$tail();
    }
  },
  beginToken$0: function() {
    this.tokenStart = this.get$charOffset();
  },
  firstToken$0: function() {
    return this.tokens.next;
  },
  previousToken$0: function() {
    return this.tail;
  },
  addToCharOffset$1: function(offset) {
    var t2 = this.extraCharOffset;
    if (typeof t2 !== "number")
      return this.addToCharOffset$1$bailout1(2, offset, t2);
    if (typeof offset !== "number")
      return this.addToCharOffset$1$bailout1(1, offset);
    this.extraCharOffset = t2 + offset;
  },
  addToCharOffset$1$bailout1: function(state0, offset, t2) {
    switch (state0) {
      case 0:
      case 1:
        state0 = 0;
        t2 = this.extraCharOffset;
      case 2:
        state0 = 0;
        this.extraCharOffset = $.$$add(t2, offset);
    }
  },
  appendWhiteSpace$1: function(next) {
  },
  appendBeginGroup$2: function(info, value) {
    var token = $.BeginGroupToken$(info, value, this.tokenStart);
    this.tail.set$next(token);
    this.tail = this.tail.get$next();
    if (!(info.kind === 60))
      this.discardOpenLt$0();
    this.groupingStack = this.groupingStack.prepend$1(token);
  },
  appendEndGroup$3: function(info, value, openKind) {
    var begin;
    this.appendStringToken$2(info, value);
    this.discardOpenLt$0();
    if ($.isEmpty(this.groupingStack) === true)
      return this.advance$0();
    begin = this.groupingStack.get$head();
    if (!(begin.get$kind() === openKind)) {
      if (openKind !== 123 || !(begin.get$kind() === 128))
        return this.error$1($.StringWrapper$("Unmatched " + $.S(begin.get$stringValue())));
      begin.set$endGroup(this.tail);
      this.groupingStack = this.groupingStack.get$tail();
      return 2;
    }
    begin.set$endGroup(this.tail);
    this.groupingStack = this.groupingStack.get$tail();
    return this.advance$0();
  },
  appendGt$2: function(info, value) {
    var t1;
    this.appendStringToken$2(info, value);
    if ($.isEmpty(this.groupingStack) === true)
      return;
    if (this.groupingStack.get$head().get$kind() === 60) {
      t1 = this.tail;
      this.groupingStack.get$head().set$endGroup(t1);
      this.groupingStack = this.groupingStack.get$tail();
    }
  },
  appendGtGt$2: function(info, value) {
    var t1;
    this.appendStringToken$2(info, value);
    if ($.isEmpty(this.groupingStack) === true)
      return;
    if (this.groupingStack.get$head().get$kind() === 60)
      this.groupingStack = this.groupingStack.get$tail();
    if ($.isEmpty(this.groupingStack) === true)
      return;
    if (this.groupingStack.get$head().get$kind() === 60) {
      t1 = this.tail;
      this.groupingStack.get$head().set$endGroup(t1);
      this.groupingStack = this.groupingStack.get$tail();
    }
  },
  appendComment$0: function() {
    if (this.includeComments !== true)
      return;
    this.appendByteStringToken$2($.CONSTANT46, this.utf8String$2(this.tokenStart, -1));
  },
  discardOpenLt$0: function() {
    while (true) {
      if (!($.isEmpty(this.groupingStack) !== true && this.groupingStack.get$head().get$kind() === 60))
        break;
      this.groupingStack = this.groupingStack.get$tail();
    }
  },
  ArrayBasedScanner$1: function(includeComments) {
    this.tail = this.tokens;
  }
};

$$.Link = {"": "Iterable;",
  get$head: function() {
    return;
  },
  get$tail: function() {
    return;
  },
  prepend$1: function(element) {
    return $.LinkEntry$(element, this, $.getRuntimeTypeArgument(this, this["$asLink"], 0));
  },
  get$iterator: function() {
    return $.LinkIterator$(this);
  },
  toList$0: function() {
    return $.List_List$fixedLength(0, null);
  },
  get$isEmpty: function() {
    return true;
  },
  forEach$1: function(f) {
  },
  $eq: function(other) {
    var t1, t2, t3;
    if (other == null)
      return false;
    if (typeof other === "object" && other !== null && !!other.$isLink) {
      t1 = $.getRuntimeTypeInfo(other);
      t2 = $.getRuntimeTypeArgument(this, this["$asLink"], 0);
      t3 = $.checkArguments(other.$asLink, t1, [t2]) === true;
      t1 = t3;
    } else
      t1 = false;
    if (!t1)
      return false;
    return $.isEmpty(other);
  },
  toString$0: function() {
    return "[]";
  },
  get$length: function() {
    throw $.$$throw($.UnsupportedError$("get:length"));
  },
  $isLink: true,
  $asIterable: function() {
    return null;
  }
};

$$.LinkIterator = {"": "Object;_liblib6$_current,_link",
  get$current: function() {
    return this._liblib6$_current;
  },
  moveNext$0: function() {
    if ($.isEmpty(this._link) === true) {
      this._liblib6$_current = null;
      return false;
    }
    this._liblib6$_current = this._link.get$head();
    this._link = this._link.get$tail();
    return true;
  }
};

$$.LinkEntry = {"": "Link;head>,tail>",
  prepend$1: function(element) {
    return $.LinkEntry$(element, this, $.getRuntimeTypeArgument(this, this["$asLinkEntry"], 0));
  },
  printOn$2: function(buffer, separatedBy) {
    var t1, link;
    if (typeof separatedBy !== "string")
      return this.printOn$2$bailout1(1, buffer, separatedBy);
    t1 = $.getInterceptor$JSArray(buffer);
    t1.add$1(buffer, this.head);
    for (link = this.tail; $.isEmpty(link) !== true; link = link.get$tail()) {
      t1.add$1(buffer, separatedBy);
      t1.add$1(buffer, link.get$head());
    }
  },
  printOn$2$bailout1: function(state0, buffer, separatedBy) {
    var t1, link;
    t1 = $.getInterceptor$JSArray(buffer);
    t1.add$1(buffer, this.head);
    if (separatedBy == null)
      separatedBy = "";
    for (link = this.tail; $.isEmpty(link) !== true; link = link.get$tail()) {
      t1.add$1(buffer, separatedBy);
      t1.add$1(buffer, link.get$head());
    }
  },
  toString$0: function() {
    var buffer = $.StringBuffer$("");
    buffer.add$1("[ ");
    this.printOn$2(buffer, ", ");
    buffer.add$1(" ]");
    return buffer.toString$0();
  },
  get$isEmpty: function() {
    return false;
  },
  toList$0: function() {
    var list, link;
    list = $.List_List(0);
    for (link = this; $.isEmpty(link) !== true; link = link.get$tail())
      $.CONSTANT.addLast$1(list, link.get$head());
    return list;
  },
  forEach$1: function(f) {
    var link;
    for (link = this; $.isEmpty(link) !== true; link = link.get$tail())
      f.call$1(link.get$head());
  },
  $eq: function(other) {
    var t1, t2, t3, myElements;
    if (other == null)
      return false;
    if (typeof other === "object" && other !== null && !!other.$isLink) {
      t1 = $.getRuntimeTypeInfo(other);
      t2 = $.getRuntimeTypeArgument(this, this["$asLinkEntry"], 0);
      t3 = $.checkArguments(other.$asLink, t1, [t2]) === true;
      t1 = t3;
    } else
      t1 = false;
    if (!t1)
      return false;
    myElements = this;
    while (true) {
      t1 = $.getInterceptor$JSArrayJSString(myElements);
      if (!(t1.get$isEmpty(myElements) !== true && $.isEmpty(other) !== true))
        break;
      if ($.$$eq(myElements.get$head(), other.get$head()) !== true)
        return false;
      myElements = myElements.get$tail();
      other = other.get$tail();
    }
    return t1.get$isEmpty(myElements) === true && $.isEmpty(other) === true;
  },
  $asLink: null
};

$$.ToString__emitMap_anon = {"": "Closure;box_0,result_1,visiting_2",
  call$2: function(k, v) {
    var t1, t2;
    t1 = this.box_0;
    if (t1.first_0 !== true)
      $.add(this.result_1, ", ");
    t1.first_0 = false;
    t1 = this.result_1;
    t2 = this.visiting_2;
    $.ToString__emitObject(k, t1, t2);
    $.add(t1, ": ");
    $.ToString__emitObject(v, t1, t2);
  }
};

$$.NoSuchMethodError_toString_anon = {"": "Closure;box_0",
  call$2: function(key, value) {
    var t1 = this.box_0;
    if ($.$$gt(t1.i_1, 0) === true)
      $.add(t1.sb_0, ", ");
    $.add(t1.sb_0, key);
    $.add(t1.sb_0, ": ");
    $.add(t1.sb_0, $.Error_safeToString(value));
    t1.i_1 = $.$$add(t1.i_1, 1);
  }
};

$$.setupSearch_anon = {"": "Closure;",
  call$1: function($event) {
    return $.showDropDown();
  },
  $is_TimerCallback1: true
};

$$.setupSearch_anon0 = {"": "Closure;",
  call$1: function($event) {
    return $.hideDropDown();
  },
  $is_TimerCallback1: true
};

$$.Stream_elementAt_anon = {"": "Closure;box_0,future_1",
  call$1: function(value) {
    var t1 = this.box_0;
    if ($.$$eq(t1.index_0, 0) === true) {
      this.future_1._liblib0$_setValue$1(value);
      t1.subscription_1.cancel$0();
      return;
    }
    t1.index_0 = $.$$sub(t1.index_0, 1);
  },
  $is_TimerCallback1: true
};

$$.Stream_elementAt_anon0 = {"": "Closure;future_2",
  call$0: function() {
    this.future_2._setError$1($.AsyncError$($.StateError$("Not enough elements for elementAt"), null));
  },
  $is_TimerCallback0: true
};

$$._FutureImpl__scheduleUnhandledError_anon = {"": "Closure;this_0",
  call$0: function() {
    var t1, error;
    t1 = this.this_0;
    if (t1.get$_hasUnhandledError() === true) {
      t1._clearUnhandledError$0();
      error = t1.get$_resultOrListeners();
      $.Primitives_printString("Uncaught Error: " + $.S(error.get$error()));
      t1 = error.get$stackTrace();
      if (!(t1 == null))
        $.Primitives_printString("Stack Trace:\n" + $.S(t1) + "\n");
      throw $.$$throw(error.get$error());
    }
  },
  $is_TimerCallback0: true
};

$$.Timer_Timer_anon = {"": "Closure;box_0,callback_1",
  call$0: function() {
    return this.callback_1.call$1(this.box_0.timer_0);
  },
  $is_TimerCallback0: true
};

$$.internalCallback = {"": "Closure;this_0,callback_1",
  call$0: function() {
    this.callback_1.call$0();
    this.this_0.set$_handle(null);
    var t1 = $globalState.topEventLoop;
    t1.set$activeTimerCount($.$$sub(t1.get$activeTimerCount(), 1));
  },
  $is_TimerCallback0: true
};

$$.invokeClosure_anon = {"": "Closure;closure_0",
  call$0: function() {
    return this.closure_0.call$0();
  },
  $is_TimerCallback0: true
};

$$.invokeClosure_anon0 = {"": "Closure;closure_1,arg1_2",
  call$0: function() {
    return this.closure_1.call$1(this.arg1_2);
  },
  $is_TimerCallback0: true
};

$$.invokeClosure_anon1 = {"": "Closure;closure_3,arg1_4,arg2_5",
  call$0: function() {
    return this.closure_3.call$2(this.arg1_4, this.arg2_5);
  },
  $is_TimerCallback0: true
};

$$.Duration_toString_threeDigits = {"": "Closure;",
  call$1: function(n) {
    var t1 = $.getInterceptor$JSNumber(n);
    if (t1.$ge(n, 100) === true)
      return $.S(n);
    if (t1.$gt(n, 10) === true)
      return "0" + $.S(n);
    return "00" + $.S(n);
  }
};

$$.Duration_toString_twoDigits = {"": "Closure;",
  call$1: function(n) {
    if ($.$$ge(n, 10) === true)
      return $.S(n);
    return "0" + $.S(n);
  }
};

$$.Stream_length_anon = {"": "Closure;box_0",
  call$1: function(_) {
    var t1 = this.box_0;
    t1.count_0 = $.$$add(t1.count_0, 1);
  },
  $is_TimerCallback1: true
};

$$.Stream_length_anon0 = {"": "Closure;box_0,future_1",
  call$0: function() {
    this.future_1._liblib0$_setValue$1(this.box_0.count_0);
  },
  $is_TimerCallback0: true
};

$$.LinkedHashMap_addAll_anon = {"": "Closure;this_0",
  call$2: function(key, value) {
    var t1, offset;
    t1 = this.this_0;
    offset = t1.get$_hashTable()._put$1(key);
    t1.get$_hashTable()._setValue$2(offset, value);
    t1.get$_hashTable()._checkCapacity$0();
  }
};

$$.Collection_clear_anon = {"": "Closure;",
  call$1: function(e) {
    return true;
  }
};

$$.FilteredElementList__filtered_anon = {"": "Closure;",
  call$1: function(n) {
    return typeof n === "object" && n !== null && n.$isElement();
  },
  $is_TimerCallback1: true
};

$$.AsyncError_throwDelayed_reportError = {"": "Closure;this_0",
  call$0: function() {
    var t1 = this.this_0;
    $.Primitives_printString("Uncaught Error: " + $.S(t1.get$error()));
    t1 = t1.get$stackTrace();
    if (!(t1 == null))
      $.Primitives_printString("Stack Trace:\n" + $.S(t1) + "\n");
  },
  $is_TimerCallback0: true
};

$$.AsyncError_throwDelayed_anon = {"": "Closure;this_1,reportError_2",
  call$0: function() {
    this.reportError_2.call$0();
    throw $.$$throw(this.this_1.get$error());
  },
  $is_TimerCallback0: true
};

$$.Stream_last_anon = {"": "Closure;box_0",
  call$1: function(value) {
    var t1 = this.box_0;
    t1.foundResult_1 = true;
    t1.result_0 = value;
  },
  $is_TimerCallback1: true
};

$$.Stream_last_anon0 = {"": "Closure;box_0,future_1",
  call$0: function() {
    var t1 = this.box_0;
    if (t1.foundResult_1 === true) {
      this.future_1._liblib0$_setValue$1(t1.result_0);
      return;
    }
    this.future_1._setError$1($.AsyncError$($.StateError$("No elements"), null));
  },
  $is_TimerCallback0: true
};

$$.CssClassSet_clear_anon = {"": "Closure;",
  call$1: function(s) {
    return $.clear(s);
  },
  $is_TimerCallback1: true
};

$$.CssClassSet_addAll_anon = {"": "Closure;iterable_0",
  call$1: function(s) {
    return $.addAll(s, this.iterable_0);
  },
  $is_TimerCallback1: true
};

$$.CssClassSet_add_anon = {"": "Closure;value_0",
  call$1: function(s) {
    return $.add(s, this.value_0);
  },
  $is_TimerCallback1: true
};

$$.Result_addRow_clickHandler = {"": "Closure;this_0",
  call$1: function($event) {
    var t1 = this.this_0.get$url();
    window.get$location().set$href(t1);
    $.hideDropDown();
  }
};

$$.Result_addRow_anon = {"": "Closure;",
  call$1: function($event) {
    $.hideDropDownSuspend = true;
    return true;
  },
  $is_TimerCallback1: true
};

$$.Result_addRow_anon0 = {"": "Closure;",
  call$1: function($event) {
    $.hideDropDownSuspend = false;
    return false;
  },
  $is_TimerCallback1: true
};

$$.Stream_contains_anon = {"": "Closure;box_0,match_1,future_2",
  call$1: function(element) {
    var t1, t2, t3;
    t1 = new $.Stream_contains__anon(this.match_1, element);
    t2 = this.box_0;
    t3 = this.future_2;
    $._runUserCode(t1, new $.Stream_contains__anon0(t2, t3), $._cancelAndError(t2.subscription_0, t3), null);
  },
  $is_TimerCallback1: true
};

$$.Stream_contains__anon = {"": "Closure;match_3,element_4",
  call$0: function() {
    return $.$$eq(this.element_4, this.match_3);
  },
  $is_TimerCallback0: true
};

$$.Stream_contains__anon0 = {"": "Closure;box_0,future_5",
  call$1: function(isMatch) {
    if (isMatch === true) {
      this.box_0.subscription_0.cancel$0();
      this.future_5._liblib0$_setValue$1(true);
    }
  }
};

$$.Stream_contains_anon0 = {"": "Closure;future_6",
  call$0: function() {
    this.future_6._liblib0$_setValue$1(false);
  },
  $is_TimerCallback0: true
};

$$._cancelAndError_anon = {"": "Closure;subscription_0,future_1",
  call$1: function(error) {
    this.subscription_0.cancel$0();
    this.future_1._setError$1(error);
  }
};

$$.Stream_isEmpty_anon = {"": "Closure;box_0,future_1",
  call$1: function(_) {
    this.box_0.subscription_0.cancel$0();
    this.future_1._liblib0$_setValue$1(false);
  },
  $is_TimerCallback1: true
};

$$.Stream_isEmpty_anon0 = {"": "Closure;future_2",
  call$0: function() {
    this.future_2._liblib0$_setValue$1(true);
  },
  $is_TimerCallback0: true
};

$$.enableShowHideInherited_anon = {"": "Closure;",
  call$0: function() {
    return "block";
  },
  $is_TimerCallback0: true
};

$$.enableShowHideInherited_anon0 = {"": "Closure;showInherited_0",
  call$1: function(e) {
    var t1, display;
    t1 = this.showInherited_0;
    if ($.$$eq($.$$index(t1.get$dataAttributes(), "show-inherited"), "block") === true) {
      t1.set$innerHtml("Show inherited");
      display = "none";
    } else {
      t1.set$innerHtml("Hide inherited");
      display = "block";
    }
    $.$$indexSet(t1.get$dataAttributes(), "show-inherited", display);
    for (t1 = document.queryAll$1(".inherited").get$iterator(); t1.moveNext$0() === true;)
      t1.get$current().get$style().set$display(display);
  },
  $is_TimerCallback1: true
};

$$.enableCodeBlocks_anon = {"": "Closure;preList_0",
  call$1: function(e) {
    var t1, t2;
    for (t1 = $.iterator(this.preList_0); t1.moveNext$0() === true;) {
      t2 = t1.get$current();
      if ($.contains(t2.get$classes(), "expanded") === true)
        $.remove(t2.get$classes(), "expanded");
      else {
        if ($.contains(t2.get$classes(), "formatted") !== true) {
          t2.set$innerHtml($.classifySource(t2.get$text()));
          $.add(t2.get$classes(), "formatted");
        }
        $.add(t2.get$classes(), "expanded");
      }
    }
  },
  $is_TimerCallback1: true
};

$$.KeywordState_KEYWORD_STATE_anon = {"": "Closure;",
  call$2: function(a, b) {
    return $.compareTo(a, b);
  }
};

$$.HashMap_addAll_anon = {"": "Closure;this_0",
  call$2: function(key, value) {
    var t1, offset;
    t1 = this.this_0;
    offset = t1.get$_hashTable()._put$1(key);
    t1.get$_hashTable()._setValue$2(offset, value);
    t1.get$_hashTable()._checkCapacity$0();
  }
};

$$._EventLoop__runHelper_next = {"": "Closure;this_0",
  call$0: function() {
    if (!this.this_0.runIteration$0())
      return;
    $.Timer_Timer($.CONSTANT9, this);
  },
  $is_TimerCallback0: true
};

$$._BaseSendPort_call_anon = {"": "Closure;completer_0,port_1",
  call$2: function(value, ignoreReplyTo) {
    var t1;
    this.port_1.close$0();
    t1 = this.completer_0;
    if (typeof value === "object" && value !== null && !!value.$isException)
      t1.completeError$1(value);
    else
      t1.complete$1(value);
  }
};

$$._WorkerSendPort_send_anon = {"": "Closure;this_0,message_1,replyTo_2",
  call$0: function() {
    var t1, t2, workerMessage, manager;
    t1 = this.this_0;
    t2 = this.replyTo_2;
    t1._checkReplyTo$1(t2);
    workerMessage = $._serializeMessage($.makeLiteralMap(["command", "message", "port", t1, "msg", this.message_1, "replyTo", t2]));
    if ($globalState.isWorker === true)
      $globalState.mainManager.postMessage$1(workerMessage);
    else {
      manager = $.$$index($globalState.managers, t1.get$_workerId());
      if (!(manager == null))
        manager.postMessage$1(workerMessage);
    }
  },
  $is_TimerCallback0: true
};

$$._waitForPendingPorts_anon = {"": "Closure;callback_0",
  call$1: function(_) {
    return this.callback_0.call$0();
  },
  $is_TimerCallback1: true
};

$$._FutureImpl__handleValue_anon = {"": "Closure;thenFuture_0,value_1",
  call$0: function() {
    this.thenFuture_0._sendValue$1(this.value_1);
  },
  $is_TimerCallback0: true
};

$$._FutureImpl__handleError_anon = {"": "Closure;error_0,errorFuture_1",
  call$0: function() {
    this.errorFuture_1._sendError$1(this.error_0);
  },
  $is_TimerCallback0: true
};

$$._FutureImpl__FutureImpl$wait_handleError = {"": "Closure;box_0",
  call$1: function(error) {
    var t1 = this.box_0;
    if (!(t1.values_1 == null)) {
      t1.values_1 = null;
      t1.completer_0.completeError$2(error.get$error(), error.get$stackTrace());
    }
  },
  $is_TimerCallback1: true
};

$$._FutureImpl__FutureImpl$wait_anon = {"": "Closure;box_0,pos_1",
  call$1: function(value) {
    var t1, t2;
    t1 = this.box_0;
    t2 = t1.values_1;
    if (t2 == null)
      return;
    $.$$indexSet(t2, this.pos_1, value);
    t1.remaining_2 = $.$$sub(t1.remaining_2, 1);
    if ($.$$eq(t1.remaining_2, 0) === true)
      t1.completer_0.complete$1(t1.values_1);
  },
  $is_TimerCallback1: true
};

$$._NativeJsSendPort_send_anon = {"": "Closure;this_1,message_2,replyTo_3",
  call$0: function() {
    var t1, t2, t3, isolate, shouldSerialize, msg;
    t1 = {};
    t2 = this.this_1;
    t3 = this.replyTo_3;
    t2._checkReplyTo$1(t3);
    isolate = $.$$index($globalState.isolates, t2.get$_isolateId());
    if (isolate == null)
      return;
    if (t2.get$_receivePort().get$_callback() == null)
      return;
    shouldSerialize = !($globalState.currentContext == null) && $.$$eq($globalState.currentContext.get$id(), t2.get$_isolateId()) !== true;
    msg = this.message_2;
    t1.msg_0 = msg;
    t1.reply_1 = t3;
    if (shouldSerialize) {
      t1.msg_0 = $._serializeMessage(t1.msg_0);
      t1.reply_1 = $._serializeMessage(t1.reply_1);
    }
    $globalState.topEventLoop.enqueue$3(isolate, new $._NativeJsSendPort_send__anon(t1, t2, shouldSerialize), "receive " + $.S(msg));
  },
  $is_TimerCallback0: true
};

$$._NativeJsSendPort_send__anon = {"": "Closure;box_0,this_4,shouldSerialize_5",
  call$0: function() {
    var t1, t2;
    t1 = this.this_4;
    if (!(t1.get$_receivePort().get$_callback() == null)) {
      if (this.shouldSerialize_5 === true) {
        t2 = this.box_0;
        t2.msg_0 = $._deserializeMessage(t2.msg_0);
        t2.reply_1 = $._deserializeMessage(t2.reply_1);
      }
      t1 = t1.get$_receivePort();
      t2 = this.box_0;
      t1._callback$2(t2.msg_0, t2.reply_1);
    }
  },
  $is_TimerCallback0: true
};

$$._PendingSendPortFinder_visitMap_anon = {"": "Closure;this_0",
  call$1: function(e) {
    return this.this_0._dispatch$1(e);
  },
  $is_TimerCallback1: true
};

$$._PendingSendPortFinder_visitList_anon = {"": "Closure;this_0",
  call$1: function(e) {
    return this.this_0._dispatch$1(e);
  },
  $is_TimerCallback1: true
};

$$.Stream_toList_anon = {"": "Closure;result_0",
  call$1: function(data) {
    $.add(this.result_0, data);
  },
  $is_TimerCallback1: true
};

$$.Stream_toList_anon0 = {"": "Closure;result_1,future_2",
  call$0: function() {
    this.future_2._liblib0$_setValue$1(this.result_1);
  },
  $is_TimerCallback0: true
};

$$._Copier_visitMap_anon = {"": "Closure;box_0,this_1",
  call$2: function(key, val) {
    var t1, t2;
    t1 = this.box_0.copy_0;
    t2 = this.this_1;
    $.$$indexSet(t1, t2._dispatch$1(key), t2._dispatch$1(val));
  }
};

$$.IsolateNatives__processWorkerMessage_function = {"": "Closure;entryPoint_0,replyTo_1",
  call$0: function() {
    $.IsolateNatives__startIsolate(this.entryPoint_0, this.replyTo_1);
  },
  $is_TimerCallback0: true
};

$$.BoundClosure$1 = {"": "Closure;self,target",
  call$1: function(p0) {
    return this.self[this.target](p0);
  }
};
$$.BoundClosure$i1 = {"": "Closure;self,target,receiver",
  call$1: function(p0) {
    return this.self[this.target](this.receiver, p0);
  }
};
$$.Bound_contains_JSString = {"": "Closure;self,target,receiver",
  call$2: function(p0, p1) {
    return this.self[this.target](this.receiver, p0, p1);
  },
  call$1: function($receiver, other) {
    return this.call$2($receiver, other, 0);
  }
};
$$.Bound__handleData__ForwardingStreamSubscription = {"": "Closure;self,target",
  call$1: function(p0) {
    return this.self[this.target](p0);
  },
  $is_TimerCallback1: true
};
$$.Bound__handleDone__ForwardingStreamSubscription = {"": "Closure;self,target",
  call$0: function() {
    return this.self[this.target]();
  },
  $is_TimerCallback0: true
};
$.ListIterator$ = function(iterable) {
  return new $.ListIterator(iterable, iterable.length, 0, null);
};

$.WhereIterable$ = function(_iterable, _f) {
  return new $.WhereIterable(_iterable, _f);
};

$.WhereIterator$ = function(_iterator, _f) {
  return new $.WhereIterator(_iterator, _f);
};

$.Sort__doSort = function(a, left, right, compare) {
  if (right - left <= 32)
    $.Sort_insertionSort_(a, left, right, compare);
  else
    $.Sort__dualPivotQuicksort(a, left, right, compare);
};

$.Sort_insertionSort_ = function(a, left, right, compare) {
  var i, el, j, t1, t2, j0;
  if (typeof a !== "object" || a === null || (a.constructor !== Array || !!a.immutable$list) && !a.$isJavaScriptIndexingBehavior())
    return $.Sort_insertionSort_$bailout(1, a, left, right, compare);
  for (i = left + 1; i <= right; ++i) {
    if (i < 0 || i >= a.length)
      throw $.ioore(i);
    el = a[i];
    j = i;
    while (true) {
      if (j > left) {
        t1 = j - 1;
        if (t1 < 0 || t1 >= a.length)
          throw $.ioore(t1);
        t2 = $.$$gt(compare.call$2(a[t1], el), 0) === true;
        t1 = t2;
      } else
        t1 = false;
      t2 = a.length;
      if (!t1)
        break;
      j0 = j - 1;
      if (j0 < 0 || j0 >= t2)
        throw $.ioore(j0);
      t1 = a[j0];
      if (j < 0 || j >= t2)
        throw $.ioore(j);
      a[j] = t1;
      j = j0;
    }
    if (j < 0 || j >= t2)
      throw $.ioore(j);
    a[j] = el;
  }
};

$.Sort_insertionSort_$bailout = function(state0, a, left, right, compare) {
  var i, el, j, t1, t2, j0;
  for (i = left + 1; i <= right; ++i) {
    if (i < 0 || i >= a.length)
      throw $.ioore(i);
    el = a[i];
    j = i;
    while (true) {
      if (j > left) {
        t1 = j - 1;
        if (t1 < 0 || t1 >= a.length)
          throw $.ioore(t1);
        t2 = $.$$gt(compare.call$2(a[t1], el), 0) === true;
        t1 = t2;
      } else
        t1 = false;
      if (!t1)
        break;
      j0 = j - 1;
      if (j0 < 0 || j0 >= a.length)
        throw $.ioore(j0);
      $.CONSTANT.$indexSet(a, j, a[j0]);
      j = j0;
    }
    $.CONSTANT.$indexSet(a, j, el);
  }
};

$.Sort__dualPivotQuicksort = function(a, left, right, compare) {
  var sixth, index1, index5, index3, index2, index4, t1, el1, el2, el3, el4, el5, t0, t2, less, great, k, ak, comp, t3, great0, less0, t4;
  if (typeof a !== "object" || a === null || (a.constructor !== Array || !!a.immutable$list) && !a.$isJavaScriptIndexingBehavior())
    return $.Sort__dualPivotQuicksort$bailout(1, a, left, right, compare);
  sixth = $.CONSTANT2.$tdiv(right - left + 1, 6);
  index1 = left + sixth;
  index5 = right - sixth;
  index3 = $.CONSTANT2.$tdiv(left + right, 2);
  index2 = index3 - sixth;
  index4 = index3 + sixth;
  t1 = a.length;
  if (index1 < 0 || index1 >= t1)
    throw $.ioore(index1);
  el1 = a[index1];
  if (index2 < 0 || index2 >= t1)
    throw $.ioore(index2);
  el2 = a[index2];
  if (index3 < 0 || index3 >= t1)
    throw $.ioore(index3);
  el3 = a[index3];
  if (index4 < 0 || index4 >= t1)
    throw $.ioore(index4);
  el4 = a[index4];
  if (index5 < 0 || index5 >= t1)
    throw $.ioore(index5);
  el5 = a[index5];
  if ($.$$gt(compare.call$2(el1, el2), 0) === true) {
    t0 = el2;
    el2 = el1;
    el1 = t0;
  }
  if ($.$$gt(compare.call$2(el4, el5), 0) === true) {
    t0 = el5;
    el5 = el4;
    el4 = t0;
  }
  if ($.$$gt(compare.call$2(el1, el3), 0) === true) {
    t0 = el3;
    el3 = el1;
    el1 = t0;
  }
  if ($.$$gt(compare.call$2(el2, el3), 0) === true) {
    t0 = el3;
    el3 = el2;
    el2 = t0;
  }
  if ($.$$gt(compare.call$2(el1, el4), 0) === true) {
    t0 = el4;
    el4 = el1;
    el1 = t0;
  }
  if ($.$$gt(compare.call$2(el3, el4), 0) === true) {
    t0 = el4;
    el4 = el3;
    el3 = t0;
  }
  if ($.$$gt(compare.call$2(el2, el5), 0) === true) {
    t0 = el5;
    el5 = el2;
    el2 = t0;
  }
  if ($.$$gt(compare.call$2(el2, el3), 0) === true) {
    t0 = el3;
    el3 = el2;
    el2 = t0;
  }
  if ($.$$gt(compare.call$2(el4, el5), 0) === true) {
    t0 = el5;
    el5 = el4;
    el4 = t0;
  }
  t1 = a.length;
  if (index1 >= t1)
    throw $.ioore(index1);
  a[index1] = el1;
  if (index3 >= t1)
    throw $.ioore(index3);
  a[index3] = el3;
  if (index5 >= t1)
    throw $.ioore(index5);
  a[index5] = el5;
  if (left < 0 || left >= t1)
    throw $.ioore(left);
  t2 = a[left];
  if (index2 >= t1)
    throw $.ioore(index2);
  a[index2] = t2;
  if (right < 0 || right >= t1)
    throw $.ioore(right);
  t2 = a[right];
  if (index4 >= t1)
    throw $.ioore(index4);
  a[index4] = t2;
  less = left + 1;
  great = right - 1;
  t1 = $.$$eq(compare.call$2(el2, el4), 0) === true;
  if (t1)
    for (k = less; k <= great; ++k) {
      if (k >= a.length)
        throw $.ioore(k);
      ak = a[k];
      comp = compare.call$2(ak, el2);
      t2 = $.getInterceptor(comp);
      if (t2.$eq(comp, 0) === true)
        continue;
      if (t2.$lt(comp, 0) === true) {
        if (k !== less) {
          t2 = a.length;
          if (less >= t2)
            throw $.ioore(less);
          t3 = a[less];
          if (k >= t2)
            throw $.ioore(k);
          a[k] = t3;
          a[less] = ak;
        }
        ++less;
      } else
        for (; true;) {
          if (great < 0 || great >= a.length)
            throw $.ioore(great);
          comp = compare.call$2(a[great], el2);
          t2 = $.getInterceptor$JSNumber(comp);
          if (t2.$gt(comp, 0) === true) {
            --great;
            continue;
          } else {
            t2 = t2.$lt(comp, 0);
            t3 = a.length;
            great0 = great - 1;
            if (t2 === true) {
              if (less >= t3)
                throw $.ioore(less);
              t2 = a[less];
              if (k >= t3)
                throw $.ioore(k);
              a[k] = t2;
              less0 = less + 1;
              if (great >= t3)
                throw $.ioore(great);
              a[less] = a[great];
              a[great] = ak;
              great = great0;
              less = less0;
              break;
            } else {
              if (great >= t3)
                throw $.ioore(great);
              t2 = a[great];
              if (k >= t3)
                throw $.ioore(k);
              a[k] = t2;
              a[great] = ak;
              great = great0;
              break;
            }
          }
        }
    }
  else
    for (k = less; k <= great; ++k) {
      if (k >= a.length)
        throw $.ioore(k);
      ak = a[k];
      if ($.$$lt(compare.call$2(ak, el2), 0) === true) {
        if (k !== less) {
          t2 = a.length;
          if (less >= t2)
            throw $.ioore(less);
          t3 = a[less];
          if (k >= t2)
            throw $.ioore(k);
          a[k] = t3;
          a[less] = ak;
        }
        ++less;
      } else if ($.$$gt(compare.call$2(ak, el4), 0) === true)
        for (; true;) {
          if (great < 0 || great >= a.length)
            throw $.ioore(great);
          if ($.$$gt(compare.call$2(a[great], el4), 0) === true) {
            --great;
            if (great < k)
              break;
            continue;
          } else {
            if (great >= a.length)
              throw $.ioore(great);
            t2 = $.$$lt(compare.call$2(a[great], el2), 0);
            great0 = great - 1;
            t3 = a.length;
            if (t2 === true) {
              if (less >= t3)
                throw $.ioore(less);
              t2 = a[less];
              if (k >= t3)
                throw $.ioore(k);
              a[k] = t2;
              less0 = less + 1;
              if (great >= t3)
                throw $.ioore(great);
              a[less] = a[great];
              a[great] = ak;
              less = less0;
            } else {
              if (great >= t3)
                throw $.ioore(great);
              t2 = a[great];
              if (k >= t3)
                throw $.ioore(k);
              a[k] = t2;
              a[great] = ak;
            }
            great = great0;
            break;
          }
        }
    }
  t2 = less - 1;
  t3 = a.length;
  if (t2 >= t3)
    throw $.ioore(t2);
  t4 = a[t2];
  if (left >= t3)
    throw $.ioore(left);
  a[left] = t4;
  a[t2] = el2;
  t2 = great + 1;
  if (t2 < 0 || t2 >= t3)
    throw $.ioore(t2);
  t4 = a[t2];
  if (right >= t3)
    throw $.ioore(right);
  a[right] = t4;
  a[t2] = el4;
  $.Sort__doSort(a, left, less - 2, compare);
  $.Sort__doSort(a, great + 2, right, compare);
  if (t1)
    return;
  if (less < index1 && great > index5) {
    while (true) {
      if (less >= a.length)
        throw $.ioore(less);
      if (!($.$$eq(compare.call$2(a[less], el2), 0) === true))
        break;
      ++less;
    }
    while (true) {
      if (great < 0 || great >= a.length)
        throw $.ioore(great);
      if (!($.$$eq(compare.call$2(a[great], el4), 0) === true))
        break;
      --great;
    }
    for (k = less; k <= great; ++k) {
      if (k >= a.length)
        throw $.ioore(k);
      ak = a[k];
      if ($.$$eq(compare.call$2(ak, el2), 0) === true) {
        if (k !== less) {
          t1 = a.length;
          if (less >= t1)
            throw $.ioore(less);
          t2 = a[less];
          if (k >= t1)
            throw $.ioore(k);
          a[k] = t2;
          a[less] = ak;
        }
        ++less;
      } else if ($.$$eq(compare.call$2(ak, el4), 0) === true)
        for (; true;) {
          if (great < 0 || great >= a.length)
            throw $.ioore(great);
          if ($.$$eq(compare.call$2(a[great], el4), 0) === true) {
            --great;
            if (great < k)
              break;
            continue;
          } else {
            if (great >= a.length)
              throw $.ioore(great);
            t1 = $.$$lt(compare.call$2(a[great], el2), 0);
            great0 = great - 1;
            t2 = a.length;
            if (t1 === true) {
              if (less >= t2)
                throw $.ioore(less);
              t1 = a[less];
              if (k >= t2)
                throw $.ioore(k);
              a[k] = t1;
              less0 = less + 1;
              if (great >= t2)
                throw $.ioore(great);
              a[less] = a[great];
              a[great] = ak;
              less = less0;
            } else {
              if (great >= t2)
                throw $.ioore(great);
              t1 = a[great];
              if (k >= t2)
                throw $.ioore(k);
              a[k] = t1;
              a[great] = ak;
            }
            great = great0;
            break;
          }
        }
    }
    $.Sort__doSort(a, less, great, compare);
  } else
    $.Sort__doSort(a, less, great, compare);
};

$.Sort__dualPivotQuicksort$bailout = function(state0, a, left, right, compare) {
  var sixth, index1, index5, index3, index2, index4, t1, el1, el2, el3, el4, el5, t0, less, great, k, ak, comp, t2, t3, great0, less0;
  sixth = $.CONSTANT2.$tdiv(right - left + 1, 6);
  index1 = left + sixth;
  index5 = right - sixth;
  index3 = $.CONSTANT2.$tdiv(left + right, 2);
  index2 = index3 - sixth;
  index4 = index3 + sixth;
  t1 = a.length;
  if (index1 < 0 || index1 >= t1)
    throw $.ioore(index1);
  el1 = a[index1];
  if (index2 < 0 || index2 >= t1)
    throw $.ioore(index2);
  el2 = a[index2];
  if (index3 < 0 || index3 >= t1)
    throw $.ioore(index3);
  el3 = a[index3];
  if (index4 < 0 || index4 >= t1)
    throw $.ioore(index4);
  el4 = a[index4];
  if (index5 < 0 || index5 >= t1)
    throw $.ioore(index5);
  el5 = a[index5];
  if ($.$$gt(compare.call$2(el1, el2), 0) === true) {
    t0 = el2;
    el2 = el1;
    el1 = t0;
  }
  if ($.$$gt(compare.call$2(el4, el5), 0) === true) {
    t0 = el5;
    el5 = el4;
    el4 = t0;
  }
  if ($.$$gt(compare.call$2(el1, el3), 0) === true) {
    t0 = el3;
    el3 = el1;
    el1 = t0;
  }
  if ($.$$gt(compare.call$2(el2, el3), 0) === true) {
    t0 = el3;
    el3 = el2;
    el2 = t0;
  }
  if ($.$$gt(compare.call$2(el1, el4), 0) === true) {
    t0 = el4;
    el4 = el1;
    el1 = t0;
  }
  if ($.$$gt(compare.call$2(el3, el4), 0) === true) {
    t0 = el4;
    el4 = el3;
    el3 = t0;
  }
  if ($.$$gt(compare.call$2(el2, el5), 0) === true) {
    t0 = el5;
    el5 = el2;
    el2 = t0;
  }
  if ($.$$gt(compare.call$2(el2, el3), 0) === true) {
    t0 = el3;
    el3 = el2;
    el2 = t0;
  }
  if ($.$$gt(compare.call$2(el4, el5), 0) === true) {
    t0 = el5;
    el5 = el4;
    el4 = t0;
  }
  $.CONSTANT.$indexSet(a, index1, el1);
  $.CONSTANT.$indexSet(a, index3, el3);
  $.CONSTANT.$indexSet(a, index5, el5);
  if (left < 0 || left >= a.length)
    throw $.ioore(left);
  $.CONSTANT.$indexSet(a, index2, a[left]);
  if (right < 0 || right >= a.length)
    throw $.ioore(right);
  $.CONSTANT.$indexSet(a, index4, a[right]);
  less = left + 1;
  great = right - 1;
  t1 = $.$$eq(compare.call$2(el2, el4), 0) === true;
  if (t1)
    for (k = less; k <= great; ++k) {
      if (k >= a.length)
        throw $.ioore(k);
      ak = a[k];
      comp = compare.call$2(ak, el2);
      t2 = $.getInterceptor(comp);
      if (t2.$eq(comp, 0) === true)
        continue;
      if (t2.$lt(comp, 0) === true) {
        if (k !== less) {
          if (less >= a.length)
            throw $.ioore(less);
          $.CONSTANT.$indexSet(a, k, a[less]);
          $.CONSTANT.$indexSet(a, less, ak);
        }
        ++less;
      } else
        for (; true;) {
          if (great < 0 || great >= a.length)
            throw $.ioore(great);
          comp = compare.call$2(a[great], el2);
          t2 = $.getInterceptor$JSNumber(comp);
          if (t2.$gt(comp, 0) === true) {
            --great;
            continue;
          } else {
            t2 = t2.$lt(comp, 0);
            t3 = a.length;
            great0 = great - 1;
            if (t2 === true) {
              if (less >= t3)
                throw $.ioore(less);
              $.CONSTANT.$indexSet(a, k, a[less]);
              less0 = less + 1;
              if (great >= a.length)
                throw $.ioore(great);
              $.CONSTANT.$indexSet(a, less, a[great]);
              $.CONSTANT.$indexSet(a, great, ak);
              great = great0;
              less = less0;
              break;
            } else {
              if (great >= t3)
                throw $.ioore(great);
              $.CONSTANT.$indexSet(a, k, a[great]);
              $.CONSTANT.$indexSet(a, great, ak);
              great = great0;
              break;
            }
          }
        }
    }
  else
    for (k = less; k <= great; ++k) {
      if (k >= a.length)
        throw $.ioore(k);
      ak = a[k];
      if ($.$$lt(compare.call$2(ak, el2), 0) === true) {
        if (k !== less) {
          if (less >= a.length)
            throw $.ioore(less);
          $.CONSTANT.$indexSet(a, k, a[less]);
          $.CONSTANT.$indexSet(a, less, ak);
        }
        ++less;
      } else if ($.$$gt(compare.call$2(ak, el4), 0) === true)
        for (; true;) {
          if (great < 0 || great >= a.length)
            throw $.ioore(great);
          if ($.$$gt(compare.call$2(a[great], el4), 0) === true) {
            --great;
            if (great < k)
              break;
            continue;
          } else {
            if (great >= a.length)
              throw $.ioore(great);
            t2 = $.$$lt(compare.call$2(a[great], el2), 0);
            great0 = great - 1;
            t3 = a.length;
            if (t2 === true) {
              if (less >= t3)
                throw $.ioore(less);
              $.CONSTANT.$indexSet(a, k, a[less]);
              less0 = less + 1;
              if (great >= a.length)
                throw $.ioore(great);
              $.CONSTANT.$indexSet(a, less, a[great]);
              $.CONSTANT.$indexSet(a, great, ak);
              great = great0;
              less = less0;
            } else {
              if (great >= t3)
                throw $.ioore(great);
              $.CONSTANT.$indexSet(a, k, a[great]);
              $.CONSTANT.$indexSet(a, great, ak);
              great = great0;
            }
            break;
          }
        }
    }
  t2 = less - 1;
  if (t2 >= a.length)
    throw $.ioore(t2);
  $.CONSTANT.$indexSet(a, left, a[t2]);
  $.CONSTANT.$indexSet(a, t2, el2);
  t2 = great + 1;
  if (t2 < 0 || t2 >= a.length)
    throw $.ioore(t2);
  $.CONSTANT.$indexSet(a, right, a[t2]);
  $.CONSTANT.$indexSet(a, t2, el4);
  $.Sort__doSort(a, left, less - 2, compare);
  $.Sort__doSort(a, great + 2, right, compare);
  if (t1)
    return;
  if (less < index1 && great > index5) {
    while (true) {
      if (less >= a.length)
        throw $.ioore(less);
      if (!($.$$eq(compare.call$2(a[less], el2), 0) === true))
        break;
      ++less;
    }
    while (true) {
      if (great < 0 || great >= a.length)
        throw $.ioore(great);
      if (!($.$$eq(compare.call$2(a[great], el4), 0) === true))
        break;
      --great;
    }
    for (k = less; k <= great; ++k) {
      if (k >= a.length)
        throw $.ioore(k);
      ak = a[k];
      if ($.$$eq(compare.call$2(ak, el2), 0) === true) {
        if (k !== less) {
          if (less >= a.length)
            throw $.ioore(less);
          $.CONSTANT.$indexSet(a, k, a[less]);
          $.CONSTANT.$indexSet(a, less, ak);
        }
        ++less;
      } else if ($.$$eq(compare.call$2(ak, el4), 0) === true)
        for (; true;) {
          if (great < 0 || great >= a.length)
            throw $.ioore(great);
          if ($.$$eq(compare.call$2(a[great], el4), 0) === true) {
            --great;
            if (great < k)
              break;
            continue;
          } else {
            if (great >= a.length)
              throw $.ioore(great);
            t1 = $.$$lt(compare.call$2(a[great], el2), 0);
            great0 = great - 1;
            t2 = a.length;
            if (t1 === true) {
              if (less >= t2)
                throw $.ioore(less);
              $.CONSTANT.$indexSet(a, k, a[less]);
              less0 = less + 1;
              if (great >= a.length)
                throw $.ioore(great);
              $.CONSTANT.$indexSet(a, less, a[great]);
              $.CONSTANT.$indexSet(a, great, ak);
              great = great0;
              less = less0;
            } else {
              if (great >= t2)
                throw $.ioore(great);
              $.CONSTANT.$indexSet(a, k, a[great]);
              $.CONSTANT.$indexSet(a, great, ak);
              great = great0;
            }
            break;
          }
        }
    }
    $.Sort__doSort(a, less, great, compare);
  } else
    $.Sort__doSort(a, less, great, compare);
};

$.ToString_collectionToString = function(c) {
  var result = $.StringBuffer$("");
  $.ToString__emitCollection(c, result, $.List_List(0));
  return result.toString$0();
};

$.ToString__emitCollection = function(c, result, visiting) {
  var t1, isList, t2, t3, first, t4;
  t1 = $.getInterceptor$JSArray(visiting);
  t1.add$1(visiting, c);
  isList = typeof c === "object" && c !== null && (c.constructor === Array || c.$isList());
  t2 = isList ? "[" : "{";
  t3 = $.getInterceptor$JSArray(result);
  t3.add$1(result, t2);
  for (t2 = $.iterator(c), first = true; t2.moveNext$0() === true; first = false) {
    t4 = t2.get$current();
    if (!first)
      t3.add$1(result, ", ");
    $.ToString__emitObject(t4, result, visiting);
  }
  t3.add$1(result, isList ? "]" : "}");
  t1.removeLast$0(visiting);
};

$.ToString__emitObject = function(o, result, visiting) {
  if (typeof o === "object" && o !== null && (o.constructor === Array || o.$isCollection()))
    if ($.ToString__containsRef(visiting, o))
      $.add(result, typeof o === "object" && o !== null && (o.constructor === Array || o.$isList()) ? "[...]" : "{...}");
    else
      $.ToString__emitCollection(o, result, visiting);
  else if (typeof o === "object" && o !== null && !!o.$isMap)
    if ($.ToString__containsRef(visiting, o))
      $.add(result, "{...}");
    else
      $.ToString__emitMap(o, result, visiting);
  else
    $.add(result, o);
};

$.ToString__containsRef = function(c, ref) {
  var t1, t2;
  for (t1 = $.iterator(c); t1.moveNext$0() === true;) {
    t2 = t1.get$current();
    if (t2 == null ? ref == null : t2 === ref)
      return true;
  }
  return false;
};

$.ToString_mapToString = function(m) {
  var result = $.StringBuffer$("");
  $.ToString__emitMap(m, result, $.List_List(0));
  return result.toString$0();
};

$.ToString__emitMap = function(m, result, visiting) {
  var t1, t2, t3;
  t1 = {};
  t2 = $.getInterceptor$JSArray(visiting);
  t2.add$1(visiting, m);
  t3 = $.getInterceptor$JSArray(result);
  t3.add$1(result, "{");
  t1.first_0 = true;
  $.forEach(m, new $.ToString__emitMap_anon(t1, result, visiting));
  t3.add$1(result, "}");
  t2.removeLast$0(visiting);
};

$._callInIsolate = function(isolate, $function) {
  isolate.eval$1($function);
  $globalState.topEventLoop.run$0();
};

$._currentIsolate = function() {
  return $globalState.currentContext;
};

$.startRootIsolate = function(entry) {
  var t1, rootContext;
  t1 = $._Manager$();
  $._globalState0(t1);
  if ($globalState.isWorker === true)
    return;
  rootContext = $._IsolateContext$();
  $globalState.rootContext = rootContext;
  $globalState.currentContext = rootContext;
  rootContext.eval$1(entry);
  $globalState.topEventLoop.run$0();
};

$._globalState = function() {
  return $globalState;
};

$._globalState0 = function(val) {
  $globalState = val;
};

$._Manager$ = function() {
  var t1 = new $._Manager(0, 0, 1, null, null, null, null, null, null, null, null, null);
  t1._Manager$0();
  return t1;
};

$._IsolateContext$ = function() {
  var t1 = new $._IsolateContext(null, null, null);
  t1._IsolateContext$0();
  return t1;
};

$._EventLoop$ = function() {
  return new $._EventLoop($.Queue_Queue(), 0);
};

$._IsolateEvent$ = function(isolate, fn, message) {
  return new $._IsolateEvent(isolate, fn, message);
};

$._MainManagerStub$ = function() {
  return new $._MainManagerStub();
};

$.IsolateNatives_computeThisScript = function() {
  var scripts, len, i, script, src, t1;
  scripts = document.getElementsByTagName('script');
  for (len = scripts.length, i = 0; i < len; ++i) {
    script = scripts[i];
    src = script && script.src;
    t1 = $.getInterceptor(src);
    if (!(src == null) && t1.endsWith$1(src, "test_controller.js") !== true && t1.endsWith$1(src, "dart.js") !== true)
      return src;
  }
  return;
};

$.IsolateNatives_computeGlobalThis = function() {
  return function() { return this; }();
};

$.IsolateNatives__processWorkerMessage = function(sender, e) {
  var msg, t1, t2, entryPoint, replyTo, context;
  msg = $._deserializeMessage(e.data);
  t1 = $.getInterceptor$JSArrayJSString(msg);
  switch (t1.$index(msg, "command")) {
    case "start":
      t2 = t1.$index(msg, "id");
      $globalState.currentManagerId = t2;
      entryPoint = $[t1.$index(msg, "functionName")];
      replyTo = $._deserializeMessage(t1.$index(msg, "replyTo"));
      context = $._IsolateContext$();
      $globalState.topEventLoop.enqueue$3(context, new $.IsolateNatives__processWorkerMessage_function(entryPoint, replyTo), "worker-start");
      $globalState.currentContext = context;
      $globalState.topEventLoop.run$0();
      break;
    case "spawn-worker":
      $.IsolateNatives__spawnWorker(t1.$index(msg, "functionName"), t1.$index(msg, "uri"), t1.$index(msg, "replyPort"));
      break;
    case "message":
      if (!(t1.$index(msg, "port") == null))
        t1.$index(msg, "port").send$2(t1.$index(msg, "msg"), t1.$index(msg, "replyTo"));
      $globalState.topEventLoop.run$0();
      break;
    case "close":
      $.IsolateNatives__log("Closing Worker");
      $.remove($globalState.managers, sender.get$id());
      sender.terminate$0();
      $globalState.topEventLoop.run$0();
      break;
    case "log":
      $.IsolateNatives__log(t1.$index(msg, "msg"));
      break;
    case "print":
      if ($globalState.isWorker === true)
        $globalState.mainManager.postMessage$1($._serializeMessage($.makeLiteralMap(["command", "print", "msg", msg])));
      else
        $.Primitives_printString($.toString(t1.$index(msg, "msg")));
      break;
    case "error":
      throw $.$$throw(t1.$index(msg, "msg"));
  }
};

$.IsolateNatives__log = function(msg) {
  var trace, exception;
  if ($globalState.isWorker === true)
    $globalState.mainManager.postMessage$1($._serializeMessage($.makeLiteralMap(["command", "log", "msg", msg])));
  else
    try {
      $.get$globalThis().console.log(msg);
    } catch (exception) {
      $.unwrapException(exception);
      trace = $.getTraceFromException(exception);
      throw $.$$throw($._ExceptionImplementation$(trace));
    }

};

$.IsolateNatives__startIsolate = function(topLevel, replyTo) {
  $.lazyPort = $.ReceivePortImpl$();
  replyTo.send$2("spawned", $._Isolate_port().toSendPort$0());
  topLevel.call$0();
};

$.IsolateNatives__spawnWorker = function(functionName, uri, replyPort) {
  var worker, t1, workerId;
  if (functionName == null)
    functionName = "main";
  if (uri == null)
    uri = $.get$IsolateNatives_thisScript();
  worker = new Worker(uri);
  worker.set$onmessage(function(e) { $.IsolateNatives__processWorkerMessage.call$2(worker, e); });
  t1 = $globalState;
  workerId = t1.nextManagerId;
  t1.nextManagerId = workerId + 1;
  worker.set$id(workerId);
  $.$$indexSet($globalState.managers, workerId, worker);
  worker.postMessage$1($._serializeMessage($.makeLiteralMap(["command", "start", "id", workerId, "replyTo", $._serializeMessage(replyPort), "functionName", functionName])));
};

$._NativeJsSendPort$ = function(_receivePort, isolateId) {
  return new $._NativeJsSendPort(_receivePort, isolateId);
};

$._WorkerSendPort$ = function(_workerId, isolateId, _receivePortId) {
  return new $._WorkerSendPort(_workerId, _receivePortId, isolateId);
};

$.ReceivePortImpl$ = function() {
  var t1 = $.ReceivePortImpl__nextFreeId;
  $.ReceivePortImpl__nextFreeId = $.$$add(t1, 1);
  t1 = new $.ReceivePortImpl(t1, null);
  t1.ReceivePortImpl$0();
  return t1;
};

$._waitForPendingPorts = function(message, callback) {
  var finder = $._PendingSendPortFinder$();
  finder.traverse$1(message);
  $._FutureImpl__FutureImpl$wait(finder.ports).then$1(new $._waitForPendingPorts_anon(callback));
};

$._PendingSendPortFinder$ = function() {
  var t1 = new $._PendingSendPortFinder([], $._MessageTraverserVisitedMap$());
  t1._PendingSendPortFinder$0();
  return t1;
};

$._serializeMessage = function(message) {
  if ($globalState.get$needSerialization() === true)
    return $._JsSerializer$().traverse$1(message);
  else
    return $._JsCopier$().traverse$1(message);
};

$._deserializeMessage = function(message) {
  if ($globalState.get$needSerialization() === true)
    return $._JsDeserializer$().deserialize$1(message);
  else
    return message;
};

$._JsSerializer$ = function() {
  var t1 = new $._JsSerializer(0, $._MessageTraverserVisitedMap$());
  t1._JsSerializer$0();
  return t1;
};

$._JsCopier$ = function() {
  var t1 = new $._JsCopier($._MessageTraverserVisitedMap$());
  t1._JsCopier$0();
  return t1;
};

$._JsDeserializer$ = function() {
  return new $._JsDeserializer(null);
};

$._JsVisitedMap$ = function() {
  return new $._JsVisitedMap(null);
};

$._MessageTraverserVisitedMap$ = function() {
  return new $._MessageTraverserVisitedMap();
};

$.TimerImpl$ = function(milliseconds, callback) {
  var t1 = new $.TimerImpl(true, false, null);
  t1.TimerImpl$2(milliseconds, callback);
  return t1;
};

$.hasTimer = function() {
  return !($.get$globalThis().setTimeout == null);
};

$.checkMutable = function(list, reason) {
  if (!!(list.immutable$list))
    throw $.$$throw($.UnsupportedError$(reason));
};

$.checkGrowable = function(list, reason) {
  if (!!(list.fixed$length))
    throw $.$$throw($.UnsupportedError$(reason));
};

$.S = function(value) {
  var res;
  if (typeof value === "string")
    return value;
  if (typeof value === "number" && !(value === 0) || typeof value === "boolean")
    return String(value);
  if (value == null)
    return "null";
  res = $.toString(value);
  if (!(typeof res === "string"))
    throw $.$$throw($.ArgumentError$(value));
  return res;
};

$.Primitives_objectHashCode = function(object) {
  var hash = object.$identityHash;
  if (hash == null) {
    hash = $.$$add($.Primitives_hashCodeSeed, 1);
    $.Primitives_hashCodeSeed = hash;
    object.$identityHash = hash;
  }
  return hash;
};

$.Primitives_printString = function(string) {
  if (typeof dartPrint == "function") {
    dartPrint(string);
    return;
  }
  if (typeof window == "object") {
    if (typeof console == "object")
      console.log(string);
    return;
  }
  if (typeof print == "function") {
    print(string);
    return;
  }
  throw 'Unable to print message: ' + String(string);
};

$.Primitives_objectTypeName = function(object) {
  var $name, decompiled, t1;
  $name = $.constructorNameFallback(object);
  if ($.$$eq($name, "Object") === true) {
    decompiled = String(object.constructor).match(/^\s*function\s*(\S*)\s*\(/)[1];
    if (typeof decompiled === "string")
      $name = decompiled;
  }
  t1 = $.getInterceptor$JSString($name);
  return t1.charCodeAt$1($name, 0) === 36 ? t1.substring$1($name, 1) : $name;
};

$.Primitives_newFixedList = function($length) {
  var result = new Array($length);
  result.fixed$length = true;
  return result;
};

$.Primitives__fromCharCodeApply = function(array) {
  var end, t1, result, i, subarray, t2;
  end = array.length;
  for (t1 = end <= 500, result = "", i = 0; i < end; i += 500) {
    if (t1)
      subarray = array;
    else {
      t2 = i + 500;
      t2 = t2 < end ? t2 : end;
      subarray = array.slice(i, t2);
    }
    result = result + String.fromCharCode.apply(null, subarray);
  }
  return result;
};

$.Primitives_stringFromCodePoints = function(codePoints) {
  var a, t1, t2;
  a = [];
  for (t1 = $.CONSTANT.get$iterator(codePoints); t1.moveNext$0() === true;) {
    t2 = t1.get$current();
    if (!(typeof t2 === "number" && Math.floor(t2) === t2))
      throw $.$$throw($.ArgumentError$(t2));
    if (t2 <= 65535)
      a.push(t2);
    else if (t2 <= 1114111) {
      a.push(55296 + ($.CONSTANT2.$shr(t2 - 65536, 10) & 1023));
      a.push(56320 + (t2 & 1023));
    } else
      throw $.$$throw($.ArgumentError$(t2));
  }
  return $.Primitives__fromCharCodeApply(a);
};

$.Primitives_stringFromCharCodes = function(charCodes) {
  var t1, t2;
  for (t1 = $.CONSTANT.get$iterator(charCodes); t1.moveNext$0() === true;) {
    t2 = t1.get$current();
    if (!(typeof t2 === "number" && Math.floor(t2) === t2))
      throw $.$$throw($.ArgumentError$(t2));
    if (t2 < 0)
      throw $.$$throw($.ArgumentError$(t2));
    if (t2 > 65535)
      return $.Primitives_stringFromCodePoints(charCodes);
  }
  return $.Primitives__fromCharCodeApply(charCodes);
};

$.iae = function(argument) {
  throw $.$$throw($.ArgumentError$(argument));
};

$.ioore = function(index) {
  throw $.$$throw($.RangeError$value(index));
};

$.checkNull = function(object) {
  if (object == null)
    throw $.$$throw($.ArgumentError$(null));
  return object;
};

$.checkNum = function(value) {
  if (!(typeof value === "number"))
    throw $.$$throw($.ArgumentError$(value));
  return value;
};

$.checkString = function(value) {
  if (!(typeof value === "string"))
    throw $.$$throw($.ArgumentError$(value));
  return value;
};

$.$$throw = function(ex) {
  var wrapper;
  if (ex == null)
    ex = $.CONSTANT0;
  wrapper = $.DartError$(ex);
  if (!!Error.captureStackTrace)
    Error.captureStackTrace(wrapper, $.$$throw);
  else
    wrapper.stack = new Error().stack;
  return wrapper;
};

$.DartError$ = function(dartException) {
  var t1 = new $.DartError();
  t1.DartError$1(dartException);
  return t1;
};

$.DartError_toStringWrapper = function() {
  return $.toString(this);
};

$.unwrapException = function(ex) {
  var message, type, $name, t1, ieErrorCode, ieFacilityNumber, t2;
  if ("dartException" in ex)
    return ex.dartException;
  message = ex.message;
  if (ex instanceof TypeError) {
    type = ex.type;
    $name = ex.arguments ? ex.arguments[0] : "";
    if (message.indexOf("JSNull") === -1) {
      t1 = $.getInterceptor(type);
      t1 = t1.$eq(type, "property_not_function") === true || t1.$eq(type, "called_non_callable") === true || t1.$eq(type, "non_object_property_call") === true || t1.$eq(type, "non_object_property_load") === true;
    } else
      t1 = true;
    if (t1)
      return $.NoSuchMethodError$(null, $name, [], $.makeLiteralMap([]), null);
    else if ($.$$eq(type, "undefined_method") === true)
      return $.NoSuchMethodError$("", $name, [], $.makeLiteralMap([]), null);
    ieErrorCode = ex.number & 0xffff;
    ieFacilityNumber = ex.number>>16 & 0x1FFF;
    t1 = typeof message === "string";
    if (t1)
      if ($.CONSTANT1.endsWith$1(message, "is null") === true || $.CONSTANT1.endsWith$1(message, "is undefined") === true || $.CONSTANT1.endsWith$1(message, "is null or undefined") === true || $.CONSTANT1.endsWith$1(message, "of undefined") === true || $.CONSTANT1.endsWith$1(message, "of null") === true)
        return $.NoSuchMethodError$(null, "<unknown>", [], $.makeLiteralMap([]), null);
      else {
        if (message.indexOf(" has no method ") === -1)
          if (message.indexOf(" is not a function") === -1)
            t2 = ieErrorCode === 438 && ieFacilityNumber === 10;
          else
            t2 = true;
        else
          t2 = true;
        if (t2)
          return $.NoSuchMethodError$("", "<unknown>", [], $.makeLiteralMap([]), null);
      }
    t1 = t1 ? message : "";
    return $._ExceptionImplementation$(t1);
  }
  if (ex instanceof RangeError) {
    if (typeof message === "string" && message.indexOf("call stack") !== -1)
      return $.StackOverflowError$();
    return $.ArgumentError$(null);
  }
  if (typeof InternalError == 'function' && ex instanceof InternalError)
    if (typeof message === "string" && message === "too much recursion")
      return $.StackOverflowError$();
  return ex;
};

$.getTraceFromException = function(exception) {
  return $.StackTrace$(exception.stack);
};

$.StackTrace$ = function(stack) {
  return new $.StackTrace(stack);
};

$.makeLiteralMap = function(keyValuePairs) {
  var iterator, result, key;
  iterator = $.CONSTANT.get$iterator(keyValuePairs);
  result = $.LinkedHashMap$();
  for (; iterator.moveNext$0() === true;) {
    key = iterator.get$current();
    iterator.moveNext$0();
    result.$indexSet(key, iterator.get$current());
  }
  return result;
};

$.invokeClosure = function(closure, isolate, numberOfArguments, arg1, arg2) {
  var t1 = $.getInterceptor(numberOfArguments);
  if (t1.$eq(numberOfArguments, 0) === true)
    return $._callInIsolate(isolate, new $.invokeClosure_anon(closure));
  else if (t1.$eq(numberOfArguments, 1) === true)
    return $._callInIsolate(isolate, new $.invokeClosure_anon0(closure, arg1));
  else if (t1.$eq(numberOfArguments, 2) === true)
    return $._callInIsolate(isolate, new $.invokeClosure_anon1(closure, arg1, arg2));
  else
    throw $.$$throw($._ExceptionImplementation$("Unsupported number of arguments for wrapped closure"));
};

$.convertDartClosureToJS = function(closure, arity) {
  var $function;
  if (closure == null)
    return;
  $function = closure.$identity;
  if (!!$function)
    return $function;
  $._currentIsolate();
  $function = function($0, $1) { return $.invokeClosure.call$5(closure, $._currentIsolate(), arity, $0, $1); };
  closure.$identity = $function;
  return $function;
};

$.setRuntimeTypeInfo = function(target, typeInfo) {
  if (!(target == null))
    target.$builtinTypeInfo = typeInfo;
};

$.getRuntimeTypeInfo = function(target) {
  if (target == null)
    return;
  return target.$builtinTypeInfo;
};

$.getRuntimeTypeArgument = function(target, substitution, index) {
  var $arguments = $.substitute(substitution, $.getRuntimeTypeInfo(target));
  return $arguments == null ? null : $arguments[index];
};

$.throwCyclicInit = function(staticName) {
  throw $.$$throw($.RuntimeError$("Cyclic initialization for static " + $.S(staticName)));
};

$.getRuntimeTypeAsString = function(runtimeType) {
  var t1, className;
  t1 = $.getInterceptor$JSArrayJSString(runtimeType);
  className = t1.$index(runtimeType, 0).builtin$cls;
  if ($.$$eq(t1.get$length(runtimeType), 1) === true)
    return className;
  return className + "<" + $.S($.joinArguments(runtimeType, 1)) + ">";
};

$.runtimeTypeToString = function(type) {
  var t1 = type == null;
  if (t1)
    return "dynamic";
  else if (!t1 && type.constructor === Array)
    return $.getRuntimeTypeAsString(type);
  else
    return type.builtin$cls;
};

$.joinArguments = function(types, startIndex) {
  var buffer, index, firstArgument;
  if (typeof types !== "string" && (typeof types !== "object" || types === null || types.constructor !== Array && !types.$isJavaScriptIndexingBehavior()))
    return $.joinArguments$bailout(1, types, startIndex);
  buffer = $.StringBuffer$("");
  for (index = startIndex, firstArgument = true; index < types.length; ++index) {
    if (firstArgument)
      firstArgument = false;
    else
      buffer.add$1(", ");
    if (index < 0 || index >= types.length)
      throw $.ioore(index);
    buffer.add$1($.runtimeTypeToString(types[index]));
  }
  return buffer.toString$0();
};

$.joinArguments$bailout = function(state0, types, startIndex) {
  var buffer, t1, index, firstArgument;
  buffer = $.StringBuffer$("");
  for (t1 = $.getInterceptor$JSArrayJSString(types), index = startIndex, firstArgument = true; $.CONSTANT2.$lt(index, t1.get$length(types)); ++index) {
    if (firstArgument)
      firstArgument = false;
    else
      buffer.add$1(", ");
    buffer.add$1($.runtimeTypeToString(t1.$index(types, index)));
  }
  return buffer.toString$0();
};

$.substitute = function(substitution, $arguments) {
  if (!(substitution == null) && substitution.constructor === Array)
    $arguments = substitution;
  else if (typeof substitution == 'function')
    $arguments = substitution.apply(null, $arguments);
  return $arguments;
};

$.checkArguments = function(substitution, $arguments, checks) {
  return $.areSubtypes($.substitute(substitution, $arguments), checks);
};

$.areSubtypes = function(s, t) {
  var len, i, t1;
  if (typeof s !== "string" && (typeof s !== "object" || s === null || s.constructor !== Array && !s.$isJavaScriptIndexingBehavior()))
    return $.areSubtypes$bailout(1, s, t);
  if (typeof t !== "string" && (typeof t !== "object" || t === null || t.constructor !== Array && !t.$isJavaScriptIndexingBehavior()))
    return $.areSubtypes$bailout(1, s, t);
  if (false)
    return true;
  len = s.length;
  for (i = 0; i < len; ++i) {
    if (i >= s.length)
      throw $.ioore(i);
    t1 = s[i];
    if (i >= t.length)
      throw $.ioore(i);
    if (!$.isSubtype(t1, t[i]))
      return false;
  }
  return true;
};

$.areSubtypes$bailout = function(state0, s, t, len, t1) {
  switch (state0) {
    case 0:
    case 1:
      state0 = 0;
      t1 = $.getInterceptor(s);
      if (s == null || t == null)
        return true;
      len = t1.get$length(s);
    case 2:
      var t2, i;
      state0 = 0;
      for (t2 = $.getInterceptor$JSArrayJSString(t), i = 0; $.CONSTANT2.$lt(i, len); ++i)
        if (!$.isSubtype(t1.$index(s, i), t2.$index(t, i)))
          return false;
      return true;
  }
};

$.isSubtype = function(s, t) {
  var t1, typeOfS, t2, typeOfT, substitution;
  if (s == null || t == null)
    return true;
  if (s === t)
    return true;
  t1 = !(s == null);
  typeOfS = t1 && s.constructor === Array ? $.$$index(s, 0) : s;
  t2 = !(t == null);
  typeOfT = t2 && t.constructor === Array ? $.$$index(t, 0) : t;
  if (typeOfS["$is" + $.S($.runtimeTypeToString(typeOfT))] == null)
    return false;
  if (t1 && s.constructor === Array)
    t1 = !(t2 && t.constructor === Array);
  else
    t1 = true;
  if (t1)
    return true;
  substitution = typeOfT !== typeOfS ? typeOfS["$as" + $.S($.runtimeTypeToString(typeOfT))] : null;
  return $.checkArguments(substitution, s.slice(1), t.slice(1));
};

$.typeNameInChrome = function(obj) {
  return $.typeNameInWebKitCommon(obj.constructor.name);
};

$.typeNameInSafari = function(obj) {
  return $.typeNameInWebKitCommon($.constructorNameFallback(obj));
};

$.typeNameInWebKitCommon = function(tag) {
  var $name = tag;
  if ($name === "Window")
    return "DOMWindow";
  if ($name === "CanvasPixelArray")
    return "Uint8ClampedArray";
  if ($name === "WebKitMutationObserver")
    return "MutationObserver";
  if ($name === "AudioChannelMerger")
    return "ChannelMergerNode";
  if ($name === "AudioChannelSplitter")
    return "ChannelSplitterNode";
  if ($name === "AudioGainNode")
    return "GainNode";
  if ($name === "AudioPannerNode")
    return "PannerNode";
  if ($name === "JavaScriptAudioNode")
    return "ScriptProcessorNode";
  if ($name === "Oscillator")
    return "OscillatorNode";
  if ($name === "RealtimeAnalyserNode")
    return "AnalyserNode";
  if ($name === "IDBVersionChangeRequest")
    return "IDBOpenDBRequest";
  return $name;
};

$.typeNameInOpera = function(obj) {
  var $name = $.constructorNameFallback(obj);
  if ($name === "Window")
    return "DOMWindow";
  if ($name === "ApplicationCache")
    return "DOMApplicationCache";
  return $name;
};

$.typeNameInFirefox = function(obj) {
  var $name = $.constructorNameFallback(obj);
  if ($name === "Window")
    return "DOMWindow";
  if ($name === "CSS2Properties")
    return "CSSStyleDeclaration";
  if ($name === "DataTransfer")
    return "Clipboard";
  if ($name === "DragEvent")
    return "MouseEvent";
  if ($name === "GeoGeolocation")
    return "Geolocation";
  if ($name === "MouseScrollEvent")
    return "WheelEvent";
  if ($name === "OfflineResourceList")
    return "DOMApplicationCache";
  if ($name === "WorkerMessageEvent")
    return "MessageEvent";
  if ($name === "XMLDocument")
    return "Document";
  return $name;
};

$.typeNameInIE = function(obj) {
  var $name = $.constructorNameFallback(obj);
  if ($name === "Window")
    return "DOMWindow";
  if ($name === "Document") {
    if (!!obj.xmlVersion)
      return "Document";
    return "HTMLDocument";
  }
  if ($name === "ApplicationCache")
    return "DOMApplicationCache";
  if ($name === "CanvasPixelArray")
    return "Uint8ClampedArray";
  if ($name === "DataTransfer")
    return "Clipboard";
  if ($name === "DragEvent")
    return "MouseEvent";
  if ($name === "HTMLDDElement")
    return "HTMLElement";
  if ($name === "HTMLDTElement")
    return "HTMLElement";
  if ($name === "HTMLTableDataCellElement")
    return "HTMLTableCellElement";
  if ($name === "HTMLTableHeaderCellElement")
    return "HTMLTableCellElement";
  if ($name === "HTMLPhraseElement")
    return "HTMLElement";
  if ($name === "MSStyleCSSProperties")
    return "CSSStyleDeclaration";
  if ($name === "MouseWheelEvent")
    return "WheelEvent";
  if ($name === "Position")
    return "Geoposition";
  if ($name === "Object")
    if (window.DataView && (obj instanceof window.DataView))
      return "DataView";
  return $name;
};

$.constructorNameFallback = function(object) {
  var $constructor, $name, t1, string;
  if (object == null)
    return "Null";
  $constructor = object.constructor;
  if (typeof($constructor) === "function") {
    $name = $constructor.name;
    if (typeof $name === "string")
      t1 = !($name === "") && !($name === "Object") && !($name === "Function.prototype");
    else
      t1 = false;
    if (t1)
      return $name;
  }
  string = Object.prototype.toString.call(object);
  return string.substring(8, string.length - 1);
};

$.alternateTag = function(object, tag) {
  if (!!/^HTML[A-Z].*Element$/.test(tag)) {
    if (Object.prototype.toString.call(object) === "[object Object]")
      return;
    return "HTMLElement";
  }
  return;
};

$.callHasOwnProperty = function($function, object, property) {
  return $function.call(object, property);
};

$.getFunctionForTypeNameOf = function() {
  if (!(typeof(navigator) === "object"))
    return $.typeNameInChrome;
  var userAgent = navigator.userAgent;
  if (userAgent.indexOf("Chrome") !== -1 || userAgent.indexOf("DumpRenderTree") !== -1)
    return $.typeNameInChrome;
  else if (userAgent.indexOf("Firefox") !== -1)
    return $.typeNameInFirefox;
  else if (userAgent.indexOf("MSIE") !== -1)
    return $.typeNameInIE;
  else if (userAgent.indexOf("Opera") !== -1)
    return $.typeNameInOpera;
  else if (userAgent.indexOf("AppleWebKit") !== -1)
    return $.typeNameInSafari;
  else
    return $.constructorNameFallback;
};

$.getTypeNameOf = function(obj) {
  if ($._getTypeNameOf == null)
    $._getTypeNameOf = $.getFunctionForTypeNameOf();
  return $._getTypeNameOf.call$1(obj);
};

$.toStringForNativeObject = function(obj) {
  return "Instance of " + $.getTypeNameOf(obj);
};

$.hashCodeForNativeObject = function(object) {
  return $.Primitives_objectHashCode(object);
};

$.defineProperty = function(obj, property, value) {
  Object.defineProperty(obj, property, {value: value, enumerable: false, writable: true, configurable: true});
};

$.dynamicBind = function(obj, $name, methods, $arguments) {
  var hasOwnPropertyFunction, tag, method, secondTag, proto;
  hasOwnPropertyFunction = Object.prototype.hasOwnProperty;
  if (!$.isDartObject(obj)) {
    tag = $.getTypeNameOf(obj);
    method = $.dynamicBindLookup(hasOwnPropertyFunction, tag, methods);
    if (method == null) {
      secondTag = $.alternateTag(obj, tag);
      if (!(secondTag == null))
        method = $.dynamicBindLookup(hasOwnPropertyFunction, secondTag, methods);
    }
  } else
    method = null;
  if (method == null)
    method = $.lookupDynamicClass(hasOwnPropertyFunction, methods, $.getTypeNameOf($.CONSTANT92));
  if (method == null)
    (function(){throw new TypeError($name + " is not a function");})();
  else {
    proto = Object.getPrototypeOf(obj);
    if (!$.callHasOwnProperty(hasOwnPropertyFunction, proto, $name))
      $.defineProperty(proto, $name, method);
  }
  return method.apply(obj, $arguments);
};

$.isDartObject = function(obj) {
  return ((obj) instanceof ($.Object));
};

$.dynamicBindLookup = function(hasOwnPropertyFunction, tag, methods) {
  var method, i, entry;
  method = $.lookupDynamicClass(hasOwnPropertyFunction, methods, tag);
  if (method == null && !($._dynamicMetadata0() == null))
    for (i = 0; i < $._dynamicMetadata0().length; ++i) {
      entry = $._dynamicMetadata0()[i];
      if ($.callHasOwnProperty(hasOwnPropertyFunction, entry.get$_set(), tag)) {
        method = $.lookupDynamicClass(hasOwnPropertyFunction, methods, entry.get$_tag());
        if (!(method == null))
          break;
      }
    }
  return method;
};

$.lookupDynamicClass = function(hasOwnPropertyFunction, methods, className) {
  return $.callHasOwnProperty(hasOwnPropertyFunction, methods, className) ? methods[className] : null;
};

$.dynamicFunction = function($name) {
  var f, methods, dartMethod, bind;
  f = Object.prototype[$name];
  if (!(f == null) && !!f.methods)
    return f.methods;
  methods = {};
  dartMethod = Object.getPrototypeOf($.CONSTANT92)[$name];
  if (!(dartMethod == null))
    methods["Object"] = dartMethod;
  bind = function() {return $.dynamicBind.call$4(this, $name, methods, Array.prototype.slice.call(arguments));};
  bind.methods = methods;
  $.defineProperty(Object.prototype, $name, bind);
  return methods;
};

$.MetaInfo$ = function(_tag, _tags, _set) {
  return new $.MetaInfo(_tag, _tags, _set);
};

$._dynamicMetadata0 = function() {
  if (typeof($dynamicMetadata) === "undefined")
    $._dynamicMetadata([]);
  return $dynamicMetadata;
};

$._dynamicMetadata = function(table) {
  $dynamicMetadata = table;
};

$.buildDynamicMetadata = function(inputTable) {
  var result, i, tag, tags, set, tagNames, j;
  result = [];
  for (i = 0; i < inputTable.length; ++i) {
    tag = inputTable[i][0];
    tags = inputTable[i][1];
    set = {};
    tagNames = tags.split("|");
    for (j = 0; j < tagNames.length; ++j)
      set[tagNames[j]] = true;
    result.push($.MetaInfo$(tag, tags, set));
  }
  return result;
};

$.dynamicSetMetadata = function(inputTable) {
  var t1 = $.buildDynamicMetadata(inputTable);
  $._dynamicMetadata(t1);
};

$.regExpExec = function(regExp, str) {
  var result = $.regExpGetNative(regExp).exec(str);
  if (result == null)
    return;
  return result;
};

$.regExpTest = function(regExp, str) {
  return $.regExpGetNative(regExp).test(str);
};

$.regExpGetNative = function(regExp) {
  var r = regExp._re;
  return r == null ? regExp._re = $.regExpMakeNative(regExp, false) : r;
};

$.regExpMakeNative = function(regExp, global) {
  var pattern, sb, e, isMultiLine, isCaseSensitive, t1, exception;
  pattern = regExp.get$pattern();
  isMultiLine = regExp.get$isMultiLine();
  isCaseSensitive = regExp.get$isCaseSensitive();
  $.checkString(pattern);
  sb = $.StringBuffer$("");
  if (isMultiLine === true)
    $.add(sb, "m");
  if (isCaseSensitive !== true)
    $.add(sb, "i");
  if (global === true)
    $.add(sb, "g");
  try {
    t1 = new RegExp(pattern, $.toString(sb));
    return t1;
  } catch (exception) {
    t1 = $.unwrapException(exception);
    e = t1;
    throw $.$$throw($.IllegalJSRegExpException$(pattern, String(e)));
  }

};

$.JSSyntaxRegExp$ = function(pattern, caseSensitive, multiLine) {
  return new $.JSSyntaxRegExp(pattern, multiLine, caseSensitive);
};

$.JSSyntaxRegExp__globalVersionOf = function(other) {
  var t1, t2, re;
  t1 = other.get$pattern();
  t2 = other.get$isMultiLine();
  re = $.JSSyntaxRegExp$(t1, other.get$isCaseSensitive(), t2);
  re._re = $.regExpMakeNative(re, true);
  return re;
};

$._MatchImplementation$ = function(pattern, str, start, end, _groups) {
  return new $._MatchImplementation(pattern, str, start, end, _groups);
};

$._AllMatchesIterable$ = function(_re, _str) {
  return new $._AllMatchesIterable(_re, _str);
};

$._AllMatchesIterator$ = function(re, _str) {
  return new $._AllMatchesIterator($.JSSyntaxRegExp__globalVersionOf(re), _str, null);
};

$.StringMatch$0 = function(start, str, pattern) {
  return new $.StringMatch0(start, str, pattern);
};

$.allMatchesInStringUnchecked = function(needle, haystack) {
  var result, $length, patternLength, startIndex, position, t1, endIndex;
  result = $.List_List(0);
  $length = haystack.length;
  patternLength = needle.length;
  for (startIndex = 0; true;) {
    position = $.CONSTANT1.indexOf$2(haystack, needle, startIndex);
    t1 = $.getInterceptor(position);
    if (t1.$eq(position, -1) === true)
      break;
    result.push($.StringMatch$0(position, haystack, needle));
    endIndex = t1.$add(position, patternLength);
    if ($.$$eq(endIndex, $length) === true)
      break;
    else
      startIndex = t1.$eq(position, endIndex) === true ? $.$$add(startIndex, 1) : endIndex;
  }
  return result;
};

$.stringContainsUnchecked = function(receiver, other, startIndex) {
  if (typeof other === "string")
    return $.$$eq($.CONSTANT1.indexOf$2(receiver, other, startIndex), -1) !== true;
  else if (typeof other === "object" && other !== null && !!other.$isJSSyntaxRegExp)
    return other.hasMatch$1($.CONSTANT1.substring$1(receiver, startIndex));
  else
    return $.iterator($.allMatches(other, $.CONSTANT1.substring$1(receiver, startIndex))).moveNext$0();
};

$.stringReplaceJS = function(receiver, replacer, to) {
  return receiver.replace(replacer, to.replace('$', '$$$$'));
};

$.stringReplaceAllUnchecked = function(receiver, from, to) {
  var result, $length, i;
  $.checkString(to);
  if (from === "")
    if (receiver === "")
      return to;
    else {
      result = $.StringBuffer$("");
      $length = receiver.length;
      result.add$1(to);
      for (i = 0; i < $length; ++i) {
        if (i >= receiver.length)
          throw $.ioore(i);
        result.add$1(receiver[i]);
        result.add$1(to);
      }
      return result.toString$0();
    }
  else
    return $.stringReplaceJS(receiver, $.regExpMakeNative($.JSSyntaxRegExp$(from.replace($.regExpMakeNative($.get$quoteRegExp(), true), "\\$&"), true, false), true), to);
};

$.Keyword_keywords = function() {
  if ($.Keyword__keywords == null)
    $.Keyword__keywords = $.Keyword_computeKeywordMap();
  return $.Keyword__keywords;
};

$.Keyword_computeKeywordMap = function() {
  var result, t1, t2;
  result = $.LinkedHashMap$();
  for (t1 = $.CONSTANT.get$iterator($.CONSTANT90); t1.moveNext$0() === true;) {
    t2 = t1.get$current();
    result.$indexSet(t2.get$syntax(), t2);
  }
  return result;
};

$.KeywordState_KEYWORD_STATE = function() {
  var strings, t1, i;
  if ($.KeywordState__KEYWORD_STATE == null) {
    strings = $.List_List$fixedLength(53, null);
    for (t1 = $.CONSTANT90.length, i = 0; i < 53; ++i) {
      if (i >= t1)
        throw $.ioore(i);
      strings[i] = $.CONSTANT90[i].get$syntax();
    }
    $.CONSTANT.sort$1(strings, new $.KeywordState_KEYWORD_STATE_anon());
    $.KeywordState__KEYWORD_STATE = $.KeywordState_computeKeywordStateTable(0, strings, 0, 53);
  }
  return $.KeywordState__KEYWORD_STATE;
};

$.KeywordState_computeKeywordStateTable = function(start, strings, offset, $length) {
  var result, t1, t2, i, chunk, chunkStart, isLeaf, t3, c, t4;
  result = $.List_List$fixedLength(26, null);
  for (t1 = start + 1, t2 = strings.length, i = offset, chunk = 0, chunkStart = -1, isLeaf = false; t3 = offset + $length, i < t3; ++i) {
    if (i < 0)
      throw $.ioore(i);
    t3 = $.length(strings[i]);
    if (typeof t3 !== "number")
      return $.KeywordState_computeKeywordStateTable$bailout(1, start, strings, offset, $length, chunk, chunkStart, isLeaf, i, result, t2, t1, t3);
    if (t3 === start)
      isLeaf = true;
    t3 = $.length(strings[i]);
    if (typeof t3 !== "number")
      return $.KeywordState_computeKeywordStateTable$bailout(2, start, strings, offset, $length, chunk, chunkStart, isLeaf, i, result, t2, t1, t3);
    if (t3 > start) {
      c = $.codeUnitAt(strings[i], start);
      if (chunk !== c) {
        if (chunkStart !== -1) {
          t3 = chunk - 97;
          t4 = $.KeywordState_computeKeywordStateTable(t1, strings, chunkStart, i - chunkStart);
          if (t3 < 0 || t3 >= 26)
            throw $.ioore(t3);
          result[t3] = t4;
        }
        chunkStart = i;
        chunk = c;
      }
    }
  }
  if (chunkStart !== -1) {
    t4 = chunk - 97;
    t1 = $.KeywordState_computeKeywordStateTable(t1, strings, chunkStart, t3 - chunkStart);
    if (t4 < 0 || t4 >= 26)
      throw $.ioore(t4);
    result[t4] = t1;
  } else {
    if (offset < 0 || offset >= t2)
      throw $.ioore(offset);
    return $.LeafKeywordState$(strings[offset]);
  }
  if (isLeaf) {
    if (offset < 0 || offset >= t2)
      throw $.ioore(offset);
    return $.ArrayKeywordState$(result, strings[offset]);
  } else
    return $.ArrayKeywordState$(result, null);
};

$.KeywordState_computeKeywordStateTable$bailout = function(state0, start, strings, offset, $length, chunk, chunkStart, isLeaf, i, result, t2, t1, t3) {
  switch (state0) {
    case 0:
      result = $.List_List$fixedLength(26, null);
      t1 = start + 1;
      t2 = strings.length;
      i = offset;
      chunk = 0;
      chunkStart = -1;
      isLeaf = false;
    default:
      var c, t4;
      L0:
        while (true)
          switch (state0) {
            case 0:
              t3 = offset + $length;
              if (!(i < t3))
                break L0;
              if (i < 0)
                throw $.ioore(i);
              t3 = $.length(strings[i]);
            case 1:
              state0 = 0;
              if ($.$$eq(t3, start) === true)
                isLeaf = true;
              t3 = $.length(strings[i]);
            case 2:
              state0 = 0;
              if ($.$$gt(t3, start) === true) {
                c = $.codeUnitAt(strings[i], start);
                if (chunk !== c) {
                  if (chunkStart !== -1) {
                    t3 = chunk - 97;
                    t4 = $.KeywordState_computeKeywordStateTable(t1, strings, chunkStart, i - chunkStart);
                    if (t3 < 0 || t3 >= 26)
                      throw $.ioore(t3);
                    result[t3] = t4;
                  }
                  chunkStart = i;
                  chunk = c;
                }
              }
              ++i;
          }
      if (chunkStart !== -1) {
        t4 = chunk - 97;
        t1 = $.KeywordState_computeKeywordStateTable(t1, strings, chunkStart, t3 - chunkStart);
        if (t4 < 0 || t4 >= 26)
          throw $.ioore(t4);
        result[t4] = t1;
      } else {
        if (offset < 0 || offset >= t2)
          throw $.ioore(offset);
        return $.LeafKeywordState$(strings[offset]);
      }
      if (isLeaf) {
        if (offset < 0 || offset >= t2)
          throw $.ioore(offset);
        return $.ArrayKeywordState$(result, strings[offset]);
      } else
        return $.ArrayKeywordState$(result, null);
  }
};

$.ArrayKeywordState$ = function(table, syntax) {
  var t1 = syntax == null ? null : $.$$index($.Keyword_keywords(), syntax);
  return new $.ArrayKeywordState(table, t1);
};

$.LeafKeywordState$ = function(syntax) {
  return new $.LeafKeywordState($.$$index($.Keyword_keywords(), syntax));
};

$.StringScanner$ = function(string, includeComments) {
  var t1 = new $.StringScanner(string, $.Token$($.CONSTANT18, -1), null, -1, -1, includeComments, 0, $.CONSTANT91);
  t1.ArrayBasedScanner$1(includeComments);
  return t1;
};

$.SubstringWrapper$ = function(internalString, begin, end) {
  return new $.SubstringWrapper(internalString, begin, end, 0, null);
};

$.Token$ = function(info, charOffset) {
  return new $.Token(info, charOffset, null);
};

$.KeywordToken$ = function(value, charOffset) {
  return new $.KeywordToken(value, value.get$info(), charOffset, null);
};

$.StringToken$ = function(info, value, charOffset) {
  return new $.StringToken($.StringWrapper$(value), info, charOffset, null);
};

$.StringToken$fromSource = function(info, value, charOffset) {
  return new $.StringToken(value, info, charOffset, null);
};

$.StringWrapper$ = function(stringValue) {
  return new $.StringWrapper(stringValue);
};

$.StringCodeIterator$ = function(string) {
  return new $.StringCodeIterator(string, 0, $.length(string), null);
};

$.StringCodeIterator$substring = function(string, index, end) {
  var t1 = new $.StringCodeIterator(string, index, end, null);
  t1.StringCodeIterator$substring$3(string, index, end);
  return t1;
};

$.BeginGroupToken$ = function(info, value, charOffset) {
  return new $.BeginGroupToken(null, $.StringWrapper$(value), info, charOffset, null);
};

$.Link$ = function(T) {
  var t1 = new $.Link();
  $.setRuntimeTypeInfo(t1, [T]);
  return t1;
};

$.LinkIterator$ = function(_link) {
  return new $.LinkIterator(null, _link);
};

$.LinkEntry$ = function(head, tail, T) {
  var t1 = tail == null ? $.Link$($.getRuntimeTypeArgument(this, this["$asLinkEntry"], 0)) : tail;
  t1 = new $.LinkEntry(head, t1);
  $.setRuntimeTypeInfo(t1, [T]);
  return t1;
};

$.classifySource = function(text) {
  var html, tokenizer, whitespaceOffset, token, inString, kind, escapedText, stringClass, t1, exception;
  try {
    html = $.StringBuffer$("");
    tokenizer = $.StringScanner$(text, true);
    whitespaceOffset = 0;
    token = tokenizer.tokenize$0();
    inString = false;
    for (; $.$$eq(token.get$kind(), 0) !== true;) {
      $.add(html, $.substring(text, whitespaceOffset, token.get$charOffset()));
      whitespaceOffset = $.$$add(token.get$charOffset(), token.get$slowCharCount());
      switch (token.get$kind()) {
        case 39:
        case 128:
          inString = true;
          break;
      }
      kind = $.classify(token);
      escapedText = $.escapeHtml(token.slowToString$0());
      if (!(kind == null)) {
        stringClass = inString === true ? "si" : "";
        $.add(html, "<span class=\"" + $.S(kind) + " " + $.S(stringClass) + "\">" + $.S(escapedText) + "</span>");
      } else
        $.add(html, escapedText);
      if ($.$$eq(token.get$kind(), 39) === true)
        inString = false;
      token = token.get$next();
    }
    t1 = $.toString(html);
    return t1;
  } catch (exception) {
    $.unwrapException(exception);
    return text;
  }

};

$._looksLikeType = function($name) {
  return $._looksLikePublicType($name) || $._looksLikePrivateType($name) === true;
};

$._looksLikePublicType = function($name) {
  var t1, t2;
  t1 = $.getInterceptor$JSArrayJSString($name);
  if ($.$$ge(t1.get$length($name), 2) === true) {
    t2 = t1.$index($name, 0);
    if ($.$$eq($.toLowerCase(t2), t2) !== true) {
      t1 = t1.$index($name, 1);
      t2 = $.$$eq($.toUpperCase(t1), t1) !== true;
      t1 = t2;
    } else
      t1 = false;
  } else
    t1 = false;
  return t1;
};

$._looksLikePrivateType = function($name) {
  var t1, t2;
  t1 = $.getInterceptor$JSArrayJSString($name);
  if ($.$$ge(t1.get$length($name), 3) === true)
    if ($.$$eq(t1.$index($name, 0), "_") === true) {
      t2 = t1.$index($name, 1);
      if ($.$$eq($.toLowerCase(t2), t2) !== true) {
        t1 = t1.$index($name, 2);
        t2 = $.$$eq($.toUpperCase(t1), t1) !== true;
        t1 = t2;
      } else
        t1 = false;
    } else
      t1 = false;
  else
    t1 = false;
  return t1;
};

$.classify = function(token) {
  var text, t1;
  switch (token.get$kind()) {
    case 1024:
      return "e";
    case 97:
      text = token.slowToString$0();
      if (!$._looksLikeType(text)) {
        t1 = $.getInterceptor(text);
        t1 = t1.$eq(text, "num") === true || t1.$eq(text, "bool") === true || t1.$eq(text, "int") === true || t1.$eq(text, "double") === true;
      } else
        t1 = true;
      if (t1)
        return "t";
      return "i";
    case 39:
    case 128:
      return "s";
    case 105:
    case 120:
    case 100:
      return "n";
    case 158:
      return "c";
    case 130:
      return "a";
    case 40:
    case 41:
    case 91:
    case 93:
    case 123:
    case 125:
    case 58:
    case 59:
    case 44:
    case 46:
    case 133:
      return "p";
    case 149:
    case 151:
    case 126:
    case 33:
    case 61:
    case 147:
    case 157:
    case 145:
    case 136:
    case 139:
    case 150:
    case 152:
    case 148:
    case 131:
    case 153:
    case 155:
    case 63:
    case 146:
    case 144:
    case 124:
    case 94:
    case 38:
    case 137:
    case 156:
    case 43:
    case 45:
    case 42:
    case 47:
    case 154:
    case 37:
    case 135:
    case 143:
    case 134:
    case 142:
    case 60:
    case 62:
    case 129:
    case 138:
    case 141:
    case 140:
      return "o";
    case 35:
    case 107:
      if ($.$$eq(token.get$stringValue(), "void") === true)
        return "t";
      if ($.$$eq(token.get$stringValue(), "this") === true || $.$$eq(token.get$stringValue(), "super") === true)
        return "r";
      return "k";
    case 0:
      return;
    default:
      return;
  }
};

$.escapeHtml = function(html) {
  return $.replaceAll($.replaceAll($.replaceAll(html, "&", "&amp;"), "<", "&lt;"), ">", "&gt;");
};

$.setupLocation = function() {
  var body = document.query$1("body");
  $.currentLibrary = $.$$index(body.get$dataAttributes(), "library");
  $.currentType = $.$$index(body.get$dataAttributes(), "type");
  $.prefix = !($.currentType == null) ? "../" : "";
};

$.enableCodeBlocks = function() {
  var t1, t2, showCode, preList;
  for (t1 = document.queryAll$1(".method, .field").get$iterator(); t1.moveNext$0() === true;) {
    t2 = t1.get$current();
    showCode = t2.query$1(".show-code");
    if (showCode == null)
      continue;
    preList = t2.queryAll$1("pre.source");
    showCode.get$onClick().listen$1(new $.enableCodeBlocks_anon(preList));
  }
};

$.enableShowHideInherited = function() {
  var showInherited = document.query$1("#show-inherited");
  if (showInherited == null)
    return;
  showInherited.get$dataAttributes().putIfAbsent$2("show-inherited", new $.enableShowHideInherited_anon());
  showInherited.get$onClick().listen$1(new $.enableShowHideInherited_anon0(showInherited));
};

$.getLibraryMemberUrl = function(libraryName, memberInfo) {
  var t1, t2;
  t1 = $.S($.prefix) + $.S($.replaceAll($.replaceAll(libraryName, ":", "_"), "/", "_")) + ".html#";
  t2 = $.getInterceptor$JSArrayJSString(memberInfo);
  return t1 + $.S(memberInfo.containsKey$1("link_name") === true ? t2.$index(memberInfo, "link_name") : t2.$index(memberInfo, "name"));
};

$.getTypeMemberUrl = function(libraryName, typeName, memberInfo) {
  var t1, t2;
  t1 = $.S($.prefix) + $.S($.replaceAll($.replaceAll(libraryName, ":", "_"), "/", "_")) + "/" + $.S($.replaceAll($.replaceAll(typeName, ":", "_"), "/", "_")) + ".html#";
  t2 = $.getInterceptor$JSArrayJSString(memberInfo);
  return t1 + $.S(memberInfo.containsKey$1("link_name") === true ? t2.$index(memberInfo, "link_name") : t2.$index(memberInfo, "name"));
};

$.main = function() {
  $.setupLocation();
  window.get$onKeyDown().listen$1($.shortcutHandler);
  $.enableCodeBlocks();
  $.enableShowHideInherited();
  $.setupSearch($.json());
};

$.updateDropDown = function($event) {
  var t1, results, text, typeText, memberText, searchText, t2, elements, table, count;
  if ($.libraryList == null)
    return;
  t1 = $.searchInput;
  if (t1 == null)
    return;
  if ($.dropdown == null)
    return;
  results = [];
  text = t1.get$value();
  t1 = $.getInterceptor(text);
  if (t1.$eq(text, $.currentSearchText) === true)
    return;
  if (t1.get$isEmpty(text) === true) {
    $.updateResults(text, results);
    $.hideDropDown();
    return;
  }
  if (t1.contains$1(text, ".") === true) {
    typeText = t1.substring$2(text, 0, t1.indexOf$1(text, "."));
    memberText = t1.substring$1(text, $.$$add(t1.indexOf$1(text, "."), 1));
    if ($.CONSTANT1.get$isEmpty(typeText) === true && $.CONSTANT1.get$isEmpty(memberText) === true)
      ;
    else if ($.CONSTANT1.get$isEmpty(typeText) === true)
      $.matchAllMembers(results, memberText);
    else if ($.CONSTANT1.get$isEmpty(memberText) === true)
      $.matchAllMembersInType(results, typeText, memberText);
    else
      $.matchMembersInType(results, text, typeText, memberText);
  } else {
    searchText = $.SearchText$(text);
    for (t1 = $.iterator($.libraryList); t1.moveNext$0() === true;) {
      t2 = t1.get$current();
      $.matchLibrary(results, searchText, t2);
      $.matchLibraryMembers(results, searchText, t2);
      $.matchTypes(results, searchText, t2);
    }
  }
  elements = [];
  table = document.$$dom_createElement$1("table");
  $.add(table.get$classes(), "drop-down-table");
  elements.push(table);
  if ($.CONSTANT.get$isEmpty(results) === true)
    table.insertRow$1(0).set$innerHtml("<tr><td>No matches found for '" + $.S(text) + "'.</td></tr>");
  else {
    $.CONSTANT.sort$1(results, $.resultComparator);
    for (t1 = $.CONSTANT.get$iterator(results), count = 0; t1.moveNext$0() === true;) {
      t1.get$current().addRow$1(table);
      ++count;
      if (count >= 10)
        break;
    }
    if (results.length >= 10) {
      table.insertRow$1($.length(table.get$rows())).set$innerHtml("<tr><td>+ " + $.S(results.length - 10) + " more.</td></tr>");
      results = $.CONSTANT.getRange$2(results, 0, 10);
    }
  }
  $.dropdown.set$children(elements);
  $.updateResults(text, results);
  $.showDropDown();
};

$.matchAllMembers = function(results, memberText) {
  var searchText, t1, t2, t3, libraryName, t4, typeName, t5, t6, t7, memberMatch;
  searchText = $.SearchText$(memberText);
  for (t1 = $.iterator($.libraryList); t1.moveNext$0() === true;) {
    t2 = t1.get$current();
    t3 = $.getInterceptor$JSArrayJSString(t2);
    libraryName = t3.$index(t2, "name");
    if (t2.containsKey$1("types") === true)
      for (t4 = $.iterator(t3.$index(t2, "types")); t4.moveNext$0() === true;) {
        t2 = t4.get$current();
        t3 = $.getInterceptor$JSArrayJSString(t2);
        typeName = t3.$index(t2, "name");
        if (t2.containsKey$1("members") === true)
          for (t5 = $.iterator(t3.$index(t2, "members")); t5.moveNext$0() === true;) {
            t6 = t5.get$current();
            t7 = $.getInterceptor$JSArrayJSString(t6);
            memberMatch = $.obtainMatch(searchText, t7.$index(t6, "name"));
            if (!(memberMatch == null))
              results.push($.Result$(memberMatch, t7.$index(t6, "kind"), $.getTypeMemberUrl(libraryName, typeName, t6), t3.$index(t2, "args"), libraryName, t7.$index(t6, "noparams"), null, typeName));
          }
      }
  }
};

$.matchAllMembersInType = function(results, typeText, memberText) {
  var searchText, emptyText, t1, t2, t3, libraryName, t4, typeName, typeMatch, t5;
  searchText = $.SearchText$(typeText);
  emptyText = $.SearchText$(memberText);
  for (t1 = $.iterator($.libraryList); t1.moveNext$0() === true;) {
    t2 = t1.get$current();
    t3 = $.getInterceptor$JSArrayJSString(t2);
    libraryName = t3.$index(t2, "name");
    if (t2.containsKey$1("types") === true)
      for (t4 = $.iterator(t3.$index(t2, "types")); t4.moveNext$0() === true;) {
        t2 = t4.get$current();
        t3 = $.getInterceptor$JSArrayJSString(t2);
        typeName = t3.$index(t2, "name");
        typeMatch = $.obtainMatch(searchText, typeName);
        if (!(typeMatch == null))
          if (t2.containsKey$1("members") === true)
            for (t5 = $.iterator(t3.$index(t2, "members")); t5.moveNext$0() === true;) {
              t2 = t5.get$current();
              t3 = $.getInterceptor$JSArrayJSString(t2);
              results.push($.Result$($.obtainMatch(emptyText, t3.$index(t2, "name")), t3.$index(t2, "kind"), $.getTypeMemberUrl(libraryName, typeName, t2), null, libraryName, t3.$index(t2, "noparams"), typeMatch, null));
            }
      }
  }
};

$.matchMembersInType = function(results, text, typeText, memberText) {
  var searchText, typeSearchText, memberSearchText, t1, t2, t3, libraryName, t4, typeName, typeMatch, t5, t6, t7, constructorMatch, memberMatch;
  searchText = $.SearchText$(text);
  typeSearchText = $.SearchText$(typeText);
  memberSearchText = $.SearchText$(memberText);
  for (t1 = $.iterator($.libraryList); t1.moveNext$0() === true;) {
    t2 = t1.get$current();
    t3 = $.getInterceptor$JSArrayJSString(t2);
    libraryName = t3.$index(t2, "name");
    if (t2.containsKey$1("types") === true)
      for (t4 = $.iterator(t3.$index(t2, "types")); t4.moveNext$0() === true;) {
        t2 = t4.get$current();
        t3 = $.getInterceptor$JSArrayJSString(t2);
        typeName = t3.$index(t2, "name");
        typeMatch = $.obtainMatch(typeSearchText, typeName);
        if (!(typeMatch == null))
          if (t2.containsKey$1("members") === true)
            for (t5 = $.iterator(t3.$index(t2, "members")); t5.moveNext$0() === true;) {
              t6 = t5.get$current();
              t7 = $.getInterceptor$JSArrayJSString(t6);
              constructorMatch = $.obtainMatch(searchText, t7.$index(t6, "name"));
              if (!(constructorMatch == null))
                results.push($.Result$(constructorMatch, t7.$index(t6, "kind"), $.getTypeMemberUrl(libraryName, typeName, t6), null, libraryName, t7.$index(t6, "noparams"), null, null));
              else {
                memberMatch = $.obtainMatch(memberSearchText, t7.$index(t6, "name"));
                if (!(memberMatch == null))
                  results.push($.Result$(memberMatch, t7.$index(t6, "kind"), $.getTypeMemberUrl(libraryName, typeName, t6), t3.$index(t2, "args"), libraryName, t7.$index(t6, "noparams"), typeMatch, null));
              }
            }
      }
  }
};

$.matchLibrary = function(results, searchText, library) {
  var libraryName, libraryMatch;
  libraryName = $.$$index(library, "name");
  libraryMatch = $.obtainMatch(searchText, libraryName);
  if (!(libraryMatch == null))
    results.push($.Result$(libraryMatch, "library", $.S($.prefix) + $.S($.replaceAll($.replaceAll(libraryName, ":", "_"), "/", "_")) + ".html", null, null, false, null, null));
};

$.matchLibraryMembers = function(results, searchText, library) {
  var t1, libraryName, t2, t3, memberMatch;
  if (library.containsKey$1("members") === true) {
    t1 = $.getInterceptor$JSArrayJSString(library);
    libraryName = t1.$index(library, "name");
    for (t2 = $.iterator(t1.$index(library, "members")); t2.moveNext$0() === true;) {
      t1 = t2.get$current();
      t3 = $.getInterceptor$JSArrayJSString(t1);
      memberMatch = $.obtainMatch(searchText, t3.$index(t1, "name"));
      if (!(memberMatch == null))
        results.push($.Result$(memberMatch, t3.$index(t1, "kind"), $.getLibraryMemberUrl(libraryName, t1), null, libraryName, t3.$index(t1, "noparams"), null, null));
    }
  }
};

$.matchTypes = function(results, searchText, library) {
  var t1, libraryName, t2;
  if (library.containsKey$1("types") === true) {
    t1 = $.getInterceptor$JSArrayJSString(library);
    libraryName = t1.$index(library, "name");
    for (t2 = $.iterator(t1.$index(library, "types")); t2.moveNext$0() === true;) {
      t1 = t2.get$current();
      $.$$index(t1, "name");
      $.matchType(results, searchText, libraryName, t1);
      $.matchTypeMembers(results, searchText, libraryName, t1);
    }
  }
};

$.matchType = function(results, searchText, libraryName, type) {
  var t1, typeMatch;
  t1 = $.getInterceptor$JSArrayJSString(type);
  typeMatch = $.obtainMatch(searchText, t1.$index(type, "name"));
  if (!(typeMatch == null))
    results.push($.Result$(typeMatch, t1.$index(type, "kind"), $.S($.prefix) + $.S($.replaceAll($.replaceAll(libraryName, ":", "_"), "/", "_")) + "/" + $.S($.replaceAll($.replaceAll(t1.$index(type, "name"), ":", "_"), "/", "_")) + ".html", t1.$index(type, "args"), libraryName, false, null, null));
};

$.matchTypeMembers = function(results, searchText, libraryName, type) {
  var t1, typeName, t2, t3, t4, memberMatch;
  if (type.containsKey$1("members") === true) {
    t1 = $.getInterceptor$JSArrayJSString(type);
    typeName = t1.$index(type, "name");
    for (t2 = $.iterator(t1.$index(type, "members")); t2.moveNext$0() === true;) {
      t3 = t2.get$current();
      t4 = $.getInterceptor$JSArrayJSString(t3);
      memberMatch = $.obtainMatch(searchText, t4.$index(t3, "name"));
      if (!(memberMatch == null))
        results.push($.Result$(memberMatch, t4.$index(t3, "kind"), $.getTypeMemberUrl(libraryName, typeName, t3), t1.$index(type, "args"), libraryName, t4.$index(t3, "noparams"), null, typeName));
    }
  }
};

$.updateResults = function(searchText, results) {
  var t1;
  $.currentSearchText = searchText;
  $.currentResults = results;
  if ($.isEmpty($.currentResults) === true) {
    $._currentResultIndex = -1;
    $.currentResult(null);
  } else {
    $._currentResultIndex = 0;
    t1 = $.$$index($.currentResults, 0);
    $.currentResult(t1);
  }
};

$.currentResultIndex0 = function(index) {
  var t1 = $.getInterceptor$JSNumber(index);
  if (t1.$lt(index, -1) === true)
    return;
  if (t1.$ge(index, $.length($.currentResults)) === true)
    return;
  if (t1.$eq(index, $._currentResultIndex) !== true) {
    $._currentResultIndex = index;
    if (t1.$ge(index, 0) === true) {
      t1 = $.$$index($.currentResults, $._currentResultIndex);
      $.currentResult(t1);
    } else
      $.currentResult(null);
  }
};

$.currentResultIndex = function() {
  return $._currentResultIndex;
};

$.currentResult = function(result) {
  var t1;
  if ($.$$eq($._currentResult, result) !== true) {
    t1 = $._currentResult;
    if (!(t1 == null))
      $.remove(t1.get$row().get$classes(), "drop-down-link-select");
    $._currentResult = result;
    t1 = $._currentResult;
    if (!(t1 == null))
      $.add(t1.get$row().get$classes(), "drop-down-link-select");
  }
};

$.handleUpDown = function($event) {
  var t1;
  if ($.$$eq($event.get$keyCode(), 38) === true) {
    t1 = $.$$sub($.currentResultIndex(), 1);
    $.currentResultIndex0(t1);
    $event.preventDefault$0();
  } else if ($.$$eq($event.get$keyCode(), 40) === true) {
    t1 = $.$$add($.currentResultIndex(), 1);
    $.currentResultIndex0(t1);
    $event.preventDefault$0();
  } else if ($.$$eq($event.get$keyCode(), 13) === true) {
    t1 = $._currentResult;
    if (!(t1 == null)) {
      t1 = t1.get$url();
      window.get$location().set$href(t1);
      $event.preventDefault$0();
      $.hideDropDown();
    }
  }
};

$.showDropDown = function() {
  if ($.isEmpty($.currentResults) === true)
    $.hideDropDown();
  else
    $.dropdown.get$style().set$visibility("visible");
};

$.hideDropDown = function() {
  if ($.hideDropDownSuspend === true)
    return;
  $.dropdown.get$style().set$visibility("hidden");
};

$.shortcutHandler = function($event) {
  if ($.$$eq($event.get$keyCode(), 51) === true && $event.get$ctrlKey() === true) {
    $.searchInput.focus$0();
    $event.preventDefault$0();
  } else if ($.$$eq($event.get$target(), $.searchInput) !== true && $.$$eq($event.get$keyCode(), 83) === true) {
    $.searchInput.focus$0();
    $event.preventDefault$0();
  }
};

$.setupSearch = function(libraries) {
  $.libraryList = libraries;
  $.searchInput = document.query$1("#q");
  $.dropdown = document.query$1("#drop-down");
  $.searchInput.get$onKeyDown().listen$1($.handleUpDown);
  $.searchInput.get$onKeyUp().listen$1($.updateDropDown);
  $.searchInput.get$onChange().listen$1($.updateDropDown);
  $.searchInput.get$onReset().listen$1($.updateDropDown);
  $.searchInput.get$onFocus().listen$1(new $.setupSearch_anon());
  $.searchInput.get$onBlur().listen$1(new $.setupSearch_anon0());
};

$.SearchText$ = function(searchText) {
  var t1, t2;
  t1 = $.getInterceptor$JSString(searchText);
  t2 = t1.toLowerCase$0(searchText);
  t1 = t1.get$isEmpty(searchText) === true ? "" : $.CONSTANT1.toUpperCase$0(t1.substring$2(searchText, 0, 1)) + t1.substring$1(searchText, 1);
  return new $.SearchText(searchText, t2, t1);
};

$.StringMatch$ = function(searchText, text, matchOffset, matchEnd) {
  return new $.StringMatch(searchText, text, matchOffset, matchEnd);
};

$.Result$ = function(match, kind, url, args, library, noargs, prefix, type) {
  var t1 = !(args == null) ? "&lt;" + $.S(args) + "&gt;" : "";
  return new $.Result(prefix, match, library, type, t1, kind, url, noargs, null);
};

$.obtainMatch = function(searchText, text) {
  var offset, t1;
  if (searchText.get$isEmpty() === true)
    return $.StringMatch$(searchText, text, 0, 0);
  offset = $.CONSTANT1.indexOf$1($.toLowerCase(text), searchText.lowerCase);
  t1 = $.getInterceptor(offset);
  if (t1.$eq(offset, -1) !== true)
    return $.StringMatch$(searchText, text, offset, t1.$add(offset, searchText.get$length()));
  return;
};

$.compareBools = function(a, b) {
  if ($.$$eq(a, b) === true)
    return 0;
  return a === true ? -1 : 1;
};

$.resultComparator = function(a, b) {
  var result, t1, t2, t3;
  result = $.compareBools(a.get$isTopLevel(), b.get$isTopLevel());
  if ($.$$eq(result, 0) !== true)
    return result;
  t1 = a.get$prefix();
  if (!(t1 == null) && !(b.get$prefix() == null)) {
    result = $.compareBools(t1.get$isFullMatch(), b.get$prefix().get$isFullMatch());
    if ($.$$eq(result, 0) !== true)
      return result;
  }
  result = $.compareBools($.$$eq(a.get$match().get$matchOffset(), 0), $.$$eq(b.get$match().get$matchOffset(), 0));
  if ($.$$eq(result, 0) !== true)
    return result;
  t1 = a.get$match();
  t2 = $.$$eq(t1.get$matchEnd(), $.length(t1.get$text()));
  t3 = b.get$match();
  result = $.compareBools(t2, $.$$eq(t3.get$matchEnd(), $.length(t3.get$text())));
  if ($.$$eq(result, 0) !== true)
    return result;
  result = $.compareBools(a.get$match().get$isExactMatch(), b.get$match().get$isExactMatch());
  if ($.$$eq(result, 0) !== true)
    return result;
  result = $.compareBools(a.get$match().get$isCamelCaseMatch(), b.get$match().get$isCamelCaseMatch());
  if ($.$$eq(result, 0) !== true)
    return result;
  result = $.compareTo(a.get$match().get$matchOffset(), b.get$match().get$matchOffset());
  if ($.$$eq(result, 0) !== true)
    return result;
  t1 = a.get$type();
  if (!(t1 == null) && !(b.get$type() == null)) {
    result = $.compareTo($.length(t1), $.length(b.get$type()));
    if ($.$$eq(result, 0) !== true)
      return result;
    result = $.CONSTANT1.compareTo$1($.toLowerCase(a.get$type()), $.toLowerCase(b.get$type()));
    if ($.$$eq(result, 0) !== true)
      return result;
  }
  return $.CONSTANT1.compareTo$1($.toLowerCase(a.get$match().get$text()), $.toLowerCase(b.get$match().get$text()));
};

$.kindToString = function(kind) {
  var t1 = $.getInterceptor(kind);
  if (t1.$eq(kind, "library") === true)
    return "library";
  else if (t1.$eq(kind, "class") === true)
    return "class";
  else if (t1.$eq(kind, "interface") === true)
    return "interface";
  else if (t1.$eq(kind, "typedef") === true)
    return "typedef";
  else if (t1.$eq(kind, "field") === true)
    return "field";
  else if (t1.$eq(kind, "constructor") === true)
    return "constructor";
  else if (t1.$eq(kind, "method") === true)
    return "method";
  else if (t1.$eq(kind, "getter") === true)
    return "getter";
  else if (t1.$eq(kind, "setter") === true)
    return "setter";
  return "";
};

$.json = function() {
  return [$.makeLiteralMap(["name", "gravatar", "types", [$.makeLiteralMap(["name", "Gravatar", "kind", "class", "members", [$.makeLiteralMap(["kind", "getter", "noparams", true, "name", "email"]), $.makeLiteralMap(["kind", "constructor", "name", "Gravatar"]), $.makeLiteralMap(["kind", "getter", "noparams", true, "name", "hash"]), $.makeLiteralMap(["kind", "method", "name", "imageUrl"])]])]])];
};

$.AsyncError$ = function(error, stackTrace) {
  return new $.AsyncError(error, stackTrace, null);
};

$.AsyncError$withCause = function(error, stackTrace, cause) {
  return new $.AsyncError(error, stackTrace, cause);
};

$._CompleterImpl$ = function() {
  return new $._CompleterImpl($._FutureImpl$(), false);
};

$._FutureListenerWrapper$ = function(future) {
  return new $._FutureListenerWrapper(future, null);
};

$._FutureImpl$ = function() {
  return new $._FutureImpl(0, null);
};

$._FutureImpl$immediate = function(value) {
  var t1 = new $._FutureImpl(0, null);
  t1._FutureImpl$immediate$1(value);
  return t1;
};

$._FutureImpl__FutureImpl$wait = function(futures) {
  var t1, t2, t3, t4, pos;
  t1 = {};
  t1.completer_0 = null;
  t1.values_1 = null;
  t2 = new $._FutureImpl__FutureImpl$wait_handleError(t1);
  t1.remaining_2 = 0;
  for (t3 = $.iterator(futures); t3.moveNext$0() === true;) {
    t4 = t3.get$current();
    pos = t1.remaining_2;
    t1.remaining_2 = $.$$add(pos, 1);
    t4.catchError$1(t2).then$1(new $._FutureImpl__FutureImpl$wait_anon(t1, pos));
  }
  if ($.$$eq(t1.remaining_2, 0) === true)
    return $._FutureImpl$immediate($.CONSTANT93);
  t1.values_1 = $.List_List$fixedLength(t1.remaining_2, null);
  t1.completer_0 = $._CompleterImpl$();
  return t1.completer_0.get$future();
};

$._ThenFuture$ = function(_onValue) {
  return new $._ThenFuture(_onValue, null, 0, null);
};

$._CatchErrorFuture$ = function(_onError, _test) {
  return new $._CatchErrorFuture(_test, _onError, null, 0, null);
};

$._SubscribeFuture$ = function(onValue, _onError) {
  return new $._SubscribeFuture(_onError, onValue, null, 0, null);
};

$._FutureWrapper$ = function(_future) {
  return new $._FutureWrapper(_future);
};

$._nullDataHandler = function(value) {
};

$._nullErrorHandler = function(error) {
  error.throwDelayed$0();
};

$._nullDoneHandler = function() {
};

$._asyncError = function(error, stackTrace, cause) {
  if (typeof error === "object" && error !== null && !!error.$isAsyncError)
    return error;
  if (cause == null)
    return $.AsyncError$(error, stackTrace);
  return $.AsyncError$withCause(error, stackTrace, cause);
};

$._runUserCode = function(userCode, onSuccess, onError, cause) {
  var result, e, e0, s, exception, t1;
  result = null;
  try {
    result = userCode.call$0();
  } catch (exception) {
    t1 = $.unwrapException(exception);
    if (typeof t1 === "object" && t1 !== null && !!t1.$isAsyncError) {
      e = t1;
      return onError.call$1(e);
    } else {
      e0 = t1;
      s = $.getTraceFromException(exception);
      if (cause == null)
        onError.call$1($.AsyncError$(e0, s));
      else
        onError.call$1($.AsyncError$withCause(e0, s, cause));
    }
  }

  onSuccess.call$1(result);
};

$._cancelAndError = function(subscription, future) {
  return new $._cancelAndError_anon(subscription, future);
};

$._ForwardingStreamSubscription$ = function(_stream, onData, onError, onDone, _unsubscribeOnError) {
  var t1 = new $._ForwardingStreamSubscription(_stream, _unsubscribeOnError, null, onData, onError, onDone);
  t1._BaseStreamSubscription$3(onData, onError, onDone);
  t1._ForwardingStreamSubscription$5(_stream, onData, onError, onDone, _unsubscribeOnError);
  return t1;
};

$._WhereStream$ = function(source, test) {
  return new $._WhereStream(test, source);
};

$.Timer_Timer = function(duration, callback) {
  var t1, t2, milliseconds, zeroArgumentCallback;
  t1 = {};
  t2 = callback != null && !!callback.$is_TimerCallback0;
  if (!t2 && !(callback != null && !!callback.$is_TimerCallback1))
    throw $.$$throw($.ArgumentError$(callback));
  milliseconds = duration.inMilliseconds;
  if ($.$$lt(milliseconds, 0) === true)
    milliseconds = 0;
  t1.timer_0 = null;
  zeroArgumentCallback = t2 ? callback : new $.Timer_Timer_anon(t1, callback);
  t1.timer_0 = $.TimerImpl$(milliseconds, zeroArgumentCallback);
  return t1.timer_0;
};

$.Arrays_copy = function(src, srcStart, dst, dstStart, count) {
  var i, j, t1, t2, t3;
  if (typeof src !== "string" && (typeof src !== "object" || src === null || src.constructor !== Array && !src.$isJavaScriptIndexingBehavior()))
    return $.Arrays_copy$bailout(1, src, srcStart, dst, dstStart, count);
  if (typeof dst !== "object" || dst === null || (dst.constructor !== Array || !!dst.immutable$list) && !dst.$isJavaScriptIndexingBehavior())
    return $.Arrays_copy$bailout(1, src, srcStart, dst, dstStart, count);
  if (srcStart < dstStart)
    for (i = srcStart + count - 1, j = dstStart + count - 1, t1 = src.length, t2 = dst.length; i >= srcStart; --i, --j) {
      if (i < 0 || i >= t1)
        throw $.ioore(i);
      t3 = src[i];
      if (j < 0 || j >= t2)
        throw $.ioore(j);
      dst[j] = t3;
    }
  else
    for (t1 = src.length, t2 = dst.length, j = dstStart, i = srcStart; i < srcStart + count; ++i, ++j) {
      if (i < 0 || i >= t1)
        throw $.ioore(i);
      t3 = src[i];
      if (j < 0 || j >= t2)
        throw $.ioore(j);
      dst[j] = t3;
    }
};

$.Arrays_copy$bailout = function(state0, src, srcStart, dst, dstStart, count) {
  var i, j, t1;
  if (srcStart < dstStart)
    for (i = srcStart + count - 1, j = dstStart + count - 1, t1 = $.getInterceptor$JSArrayJSString(src); i >= srcStart; --i, --j)
      $.CONSTANT.$indexSet(dst, j, t1.$index(src, i));
  else
    for (t1 = $.getInterceptor$JSArrayJSString(src), j = dstStart, i = srcStart; i < srcStart + count; ++i, ++j)
      $.CONSTANT.$indexSet(dst, j, t1.$index(src, i));
};

$.Arrays_indexOf = function(a, element, startIndex, endIndex) {
  var i;
  if (startIndex >= a.length)
    return -1;
  if (startIndex < 0)
    startIndex = 0;
  for (i = startIndex; i < endIndex; ++i) {
    if (i < 0 || i >= a.length)
      throw $.ioore(i);
    if ($.$$eq(a[i], element) === true)
      return i;
  }
  return -1;
};

$.IterableMixinWorkaround_contains = function(iterable, element) {
  var t1, t2;
  for (t1 = $.iterator(iterable), t2 = $.getInterceptor(element); t1.moveNext$0() === true;)
    if (t2.$eq(element, t1.get$current()) === true)
      return true;
  return false;
};

$.IterableMixinWorkaround_removeAll = function(collection, elementsToRemove) {
  var t1, t2;
  for (t1 = $.CONSTANT.get$iterator(elementsToRemove), t2 = $.getInterceptor$JSArray(collection); t1.moveNext$0() === true;)
    t2.remove$1(collection, t1.get$current());
};

$.IterableMixinWorkaround_removeAllList = function(collection, elementsToRemove) {
  collection.removeMatching$1($.contains0($.CONSTANT.toSet$0(elementsToRemove)));
};

$.IterableMixinWorkaround_removeMatching = function(collection, test) {
  var elementsToRemove, t1, t2, t3;
  elementsToRemove = [];
  for (t1 = $.getInterceptor$JSArray(collection), t2 = t1.get$iterator(collection); t2.moveNext$0() === true;) {
    t3 = t2.get$current();
    if (test.call$1(t3) === true)
      elementsToRemove.push(t3);
  }
  t1.removeAll$1(collection, elementsToRemove);
};

$.IterableMixinWorkaround_joinList = function(list, separator) {
  var t1, buffer, i;
  if (typeof list !== "string" && (typeof list !== "object" || list === null || list.constructor !== Array && !list.$isJavaScriptIndexingBehavior()))
    return $.IterableMixinWorkaround_joinList$bailout(1, list, separator);
  if (typeof separator !== "string")
    return $.IterableMixinWorkaround_joinList$bailout(1, list, separator);
  if ($.isEmpty(list) === true)
    return "";
  t1 = list.length;
  if (t1 === 1) {
    if (0 >= t1)
      throw $.ioore(0);
    return $.S(list[0]);
  }
  buffer = $.StringBuffer$("");
  if (separator === "")
    for (i = 0; i < list.length; ++i)
      buffer.add$1($.S(list[i]));
  else {
    if (0 >= list.length)
      throw $.ioore(0);
    buffer.add$1($.S(list[0]));
    for (i = 1; i < list.length; ++i) {
      buffer.add$1(separator);
      if (i >= list.length)
        throw $.ioore(i);
      buffer.add$1($.S(list[i]));
    }
  }
  return buffer.toString$0();
};

$.IterableMixinWorkaround_joinList$bailout = function(state0, list, separator) {
  var t1, buffer, i;
  t1 = $.getInterceptor$JSArrayJSString(list);
  if (t1.get$isEmpty(list) === true)
    return "";
  if ($.$$eq(t1.get$length(list), 1) === true)
    return $.S(t1.$index(list, 0));
  buffer = $.StringBuffer$("");
  if (separator == null || $.$$eq(separator, "") === true)
    for (i = 0; $.CONSTANT2.$lt(i, t1.get$length(list)); ++i)
      buffer.add$1($.S(t1.$index(list, i)));
  else {
    buffer.add$1($.S(t1.$index(list, 0)));
    for (i = 1; $.CONSTANT2.$lt(i, t1.get$length(list)); ++i) {
      buffer.add$1(separator);
      buffer.add$1($.S(t1.$index(list, i)));
    }
  }
  return buffer.toString$0();
};

$.IterableMixinWorkaround_sortList = function(l, compare) {
  if (compare == null)
    compare = $.Comparable_compare;
  $.Sort__doSort(l, 0, l.length - 1, compare);
};

$._HashMapTable$ = function() {
  var t1 = new $._HashMapTable(null, 8, 0, 0, 0, null);
  t1._HashTable$1(8);
  return t1;
};

$.HashMap$ = function() {
  var t1 = new $.HashMap($._HashMapTable$());
  t1.HashMap$0();
  return t1;
};

$.HashSet$ = function() {
  var t1 = new $.HashSet($._HashTable$(8));
  t1.HashSet$0();
  return t1;
};

$._HashTable$ = function(initialCapacity) {
  var t1 = new $._HashTable(null, initialCapacity, 0, 0, 0, null);
  t1._HashTable$1(initialCapacity);
  return t1;
};

$._HashTableKeyIterable$ = function(hashTable) {
  return new $._HashTableKeyIterable(hashTable);
};

$._HashTableKeyIterator$ = function(hashTable) {
  return new $._HashTableKeyIterator(hashTable, hashTable.get$_modificationCount(), 0, null);
};

$._HashTableValueIterable$ = function(hashTable, _entryIndex) {
  return new $._HashTableValueIterable(_entryIndex, hashTable);
};

$._HashTableValueIterator$ = function(hashTable, _entryIndex) {
  return new $._HashTableValueIterator(_entryIndex, hashTable, hashTable.get$_modificationCount(), 0, null);
};

$._LinkedHashMapTable$ = function() {
  var t1 = new $._LinkedHashMapTable(null, 8, 0, 0, 0, null);
  t1._HashTable$1(8);
  return t1;
};

$.LinkedHashMap$ = function() {
  var t1 = new $.LinkedHashMap($._LinkedHashMapTable$());
  t1.LinkedHashMap$0();
  return t1;
};

$._LinkedHashTableKeyIterable$ = function(_table) {
  return new $._LinkedHashTableKeyIterable(_table);
};

$._LinkedHashTableKeyIterator$ = function(hashTable) {
  return new $._LinkedHashTableKeyIterator(hashTable, hashTable.get$_modificationCount(), hashTable._next$1(0), null);
};

$._LinkedHashTableValueIterable$ = function(_hashTable, _valueIndex) {
  return new $._LinkedHashTableValueIterable(_hashTable, _valueIndex);
};

$._LinkedHashTableValueIterator$ = function(hashTable, _valueIndex) {
  return new $._LinkedHashTableValueIterator(_valueIndex, hashTable, hashTable.get$_modificationCount(), hashTable._next$1(0), null);
};

$.Queue_Queue = function() {
  return $.ListQueue$(null);
};

$.ListQueue$ = function(initialCapacity) {
  var t1 = new $.ListQueue(null, 0, 0, 0);
  t1.ListQueue$1(initialCapacity);
  return t1;
};

$.ListQueue__isPowerOf2 = function(number) {
  var t1 = $.getInterceptor$JSNumber(number);
  return t1.$and(number, t1.$sub(number, 1)) === 0;
};

$.ListQueue__nextPowerOf2 = function(number) {
  var number0, nextNumber;
  number0 = $.$$sub($.$$shl(number, 2), 1);
  if (number0 !== (number0 | 0))
    return $.ListQueue__nextPowerOf2$bailout(1, number0);
  for (number = number0; true; number = nextNumber) {
    nextNumber = (number & number - 1) >>> 0;
    if (nextNumber === 0)
      return number;
  }
};

$.ListQueue__nextPowerOf2$bailout = function(state0, number0) {
  var number, t1, nextNumber;
  for (number = number0; true; number = nextNumber) {
    t1 = $.getInterceptor$JSNumber(number);
    nextNumber = t1.$and(number, t1.$sub(number, 1));
    if (nextNumber === 0)
      return number;
  }
};

$._ListQueueIterator$ = function(queue) {
  return new $._ListQueueIterator(queue, queue._tail, queue._modificationCount, queue._head, null);
};

$.Comparable_compare = function(a, b) {
  return $.compareTo(a, b);
};

$.Duration$ = function(days, hours, milliseconds, minutes, seconds) {
  return new $.Duration($.$$add($.$$add($.$$add($.$$add($.$$mul(days, 86400000), $.$$mul(hours, 3600000)), $.$$mul(minutes, 60000)), $.$$mul(seconds, 1000)), milliseconds));
};

$.Error_safeToString = function(object) {
  if (typeof object === "number" && Math.floor(object) === object || typeof object === "number" || typeof object === "boolean" || null == object)
    return $.toString(object);
  if (typeof object === "string")
    return "\"" + $.S($.replaceAll($.replaceAll($.replaceAll($.CONSTANT1.replaceAll$2(object, "\\", "\\\\"), "\n", "\\n"), "\r", "\\r"), "\"", "\\\"")) + "\"";
  return "Instance of '" + $.S($.Primitives_objectTypeName(object)) + "'";
};

$.ArgumentError$ = function(message) {
  return new $.ArgumentError(message);
};

$.RangeError$value = function(value) {
  return new $.RangeError("value " + $.S(value));
};

$.RangeError$range = function(value, start, end) {
  return new $.RangeError("value " + $.S(value) + " not in range " + $.S(start) + ".." + $.S(end));
};

$.NoSuchMethodError$ = function(_receiver, _memberName, _arguments, _namedArguments, existingArgumentNames) {
  return new $.NoSuchMethodError(_receiver, _memberName, _arguments, _namedArguments, existingArgumentNames);
};

$.UnsupportedError$ = function(message) {
  return new $.UnsupportedError(message);
};

$.UnimplementedError$ = function(message) {
  return new $.UnimplementedError(message);
};

$.StateError$ = function(message) {
  return new $.StateError(message);
};

$.ConcurrentModificationError$ = function(modifiedObject) {
  return new $.ConcurrentModificationError(modifiedObject);
};

$.StackOverflowError$ = function() {
  return new $.StackOverflowError();
};

$.RuntimeError$ = function(message) {
  return new $.RuntimeError(message);
};

$._ExceptionImplementation$ = function(message) {
  return new $._ExceptionImplementation(message);
};

$.IllegalJSRegExpException$ = function(pattern, errmsg) {
  return new $.IllegalJSRegExpException("Illegal pattern: " + $.S(pattern) + ", " + errmsg);
};

$.IntegerDivisionByZeroException$ = function() {
  return new $.IntegerDivisionByZeroException();
};

$.List_List = function($length) {
  if (!(typeof $length === "number" && Math.floor($length) === $length) || $length < 0)
    throw $.$$throw($.ArgumentError$("Length must be a positive integer: " + $.S($length) + "."));
  return new Array($length);
};

$.List_List$fixedLength = function($length, fill) {
  var result, t1, i;
  if (!(typeof $length === "number" && Math.floor($length) === $length) || $length < 0)
    throw $.$$throw($.ArgumentError$("Length must be a positive integer: " + $.S($length) + "."));
  result = $.Primitives_newFixedList($length);
  if (typeof result !== "object" || result === null || (result.constructor !== Array || !!result.immutable$list) && !result.$isJavaScriptIndexingBehavior())
    return $.List_List$fixedLength$bailout(1, $length, fill, result);
  if ($.$$eq($length, 0) !== true && !(fill == null))
    for (t1 = result.length, i = 0; i < t1; ++i)
      result[i] = fill;
  return result;
};

$.List_List$fixedLength$bailout = function(state0, $length, fill, result) {
  var t1, i;
  if ($.$$eq($length, 0) !== true && !(fill == null))
    for (t1 = $.getInterceptor$JSArrayJSString(result), i = 0; $.CONSTANT2.$lt(i, t1.get$length(result)); ++i)
      t1.$indexSet(result, i, fill);
  return result;
};

$.List_List$from = function(other) {
  var list, t1;
  list = $.List_List(0);
  for (t1 = $.iterator(other); t1.moveNext$0() === true;)
    list.push(t1.get$current());
  return list;
};

$.Map_Map = function() {
  return $.HashMap$();
};

$.RegExp_RegExp = function(pattern, caseSensitive, multiLine) {
  return $.JSSyntaxRegExp$(pattern, caseSensitive, multiLine);
};

$.String_String$fromCharCodes = function(charCodes) {
  if (!charCodes.constructor === Array)
    charCodes = $.List_List$from(charCodes);
  return $.Primitives_stringFromCharCodes(charCodes);
};

$.StringBuffer$ = function($content) {
  var t1 = new $.StringBuffer("");
  t1.StringBuffer$1($content);
  return t1;
};

$.document = function() {
  return document;
};

$._ChildrenElementList$_wrap = function(element) {
  return new $._ChildrenElementList(element, element.get$$$dom_children());
};

$._FrozenElementList$_wrap = function(_nodeList) {
  return new $._FrozenElementList(_nodeList);
};

$._FrozenElementListIterator$ = function(_list) {
  return new $._FrozenElementListIterator(_list, -1, null);
};

$._ElementCssClassSet$ = function(_element) {
  return new $._ElementCssClassSet(_element);
};

$.Element_Element$tag = function(tag) {
  return $._ElementFactoryProvider_createElement_tag(tag);
};

$._ElementFactoryProvider_createElement_tag = function(tag) {
  return document.createElement(tag);
};

$._ChildNodeListLazy$ = function(_this) {
  return new $._ChildNodeListLazy(_this);
};

$.Window__isDartLocation = function(thing) {
  var t1, exception;
  try {
    t1 = thing;
    return typeof t1 === "object" && t1 !== null && t1.$isLocation();
  } catch (exception) {
    $.unwrapException(exception);
    return false;
  }

};

$._ElementAttributeMap$ = function(element) {
  return new $._ElementAttributeMap(element);
};

$._EventStream$ = function(_target, _eventType, _useCapture) {
  return new $._EventStream(_target, _eventType, _useCapture);
};

$._EventStreamSubscription$ = function(_target, _eventType, _onData, _useCapture) {
  var t1 = new $._EventStreamSubscription(0, _target, _eventType, _onData, _useCapture);
  t1._EventStreamSubscription$4(_target, _eventType, _onData, _useCapture);
  return t1;
};

$._convertNativeToDart_EventTarget = function(e) {
  if ("setInterval" in e)
    return $._DOMWindowCrossFrame__createSafe(e);
  else
    return e;
};

$._DOMWindowCrossFrame$ = function(_window) {
  return new $._DOMWindowCrossFrame(_window);
};

$._DOMWindowCrossFrame__createSafe = function(w) {
  if (w === window)
    return w;
  else
    return $._DOMWindowCrossFrame$(w);
};

$._LocationWrapper$ = function(_ptr) {
  return new $._LocationWrapper(_ptr);
};

$._LocationWrapper__set = function(p, m, v) {
  return p[m] = v;
};

$.FixedSizeListIterator$ = function(array) {
  return new $.FixedSizeListIterator(array, $.length(array), -1, null);
};

$.FilteredElementList$ = function(node) {
  return new $.FilteredElementList(node, node.get$nodes());
};

$.Lists_indexOf = function(a, element, startIndex, endIndex) {
  var i;
  if (typeof a !== "string" && (typeof a !== "object" || a === null || a.constructor !== Array && !a.$isJavaScriptIndexingBehavior()))
    return $.Lists_indexOf$bailout(1, a, element, startIndex, endIndex);
  if (typeof startIndex !== "number")
    return $.Lists_indexOf$bailout(1, a, element, startIndex, endIndex);
  if (typeof endIndex !== "number")
    return $.Lists_indexOf$bailout(1, a, element, startIndex, endIndex);
  if (startIndex >= a.length)
    return -1;
  if (startIndex < 0)
    startIndex = 0;
  for (i = startIndex; i < endIndex; ++i) {
    if (i !== (i | 0))
      throw $.iae(i);
    if (i < 0 || i >= a.length)
      throw $.ioore(i);
    if ($.$$eq(a[i], element) === true)
      return i;
  }
  return -1;
};

$.Lists_indexOf$bailout = function(state0, a, element, startIndex, endIndex) {
  var t1, t2, i;
  t1 = $.getInterceptor$JSArrayJSString(a);
  t2 = $.getInterceptor$JSNumber(startIndex);
  if (t2.$ge(startIndex, t1.get$length(a)) === true)
    return -1;
  if (t2.$lt(startIndex, 0) === true)
    startIndex = 0;
  for (i = startIndex; t2 = $.getInterceptor$JSNumber(i), t2.$lt(i, endIndex) === true; i = t2.$add(i, 1))
    if ($.$$eq(t1.$index(a, i), element) === true)
      return i;
  return -1;
};

$.ReceivePort_ReceivePort = function() {
  return $.ReceivePortImpl$();
};

$._Isolate_port = function() {
  if ($.lazyPort == null)
    $.lazyPort = $.ReceivePort_ReceivePort();
  return $.lazyPort;
};

$._AttributeClassSet$ = function(_element) {
  return new $._AttributeClassSet(_element);
};

$.IsolateNatives__processWorkerMessage.call$2 = $.IsolateNatives__processWorkerMessage;
$.IsolateNatives__processWorkerMessage.$name = "IsolateNatives__processWorkerMessage";
$.$$throw.call$1 = $.$$throw;
$.$$throw.$name = "$$throw";
$.$$throw.$is_TimerCallback1 = true;
$.DartError_toStringWrapper.call$0 = $.DartError_toStringWrapper;
$.DartError_toStringWrapper.$name = "DartError_toStringWrapper";
$.DartError_toStringWrapper.$is_TimerCallback0 = true;
$.invokeClosure.call$5 = $.invokeClosure;
$.invokeClosure.$name = "invokeClosure";
$.typeNameInChrome.call$1 = $.typeNameInChrome;
$.typeNameInChrome.$name = "typeNameInChrome";
$.typeNameInSafari.call$1 = $.typeNameInSafari;
$.typeNameInSafari.$name = "typeNameInSafari";
$.typeNameInOpera.call$1 = $.typeNameInOpera;
$.typeNameInOpera.$name = "typeNameInOpera";
$.typeNameInFirefox.call$1 = $.typeNameInFirefox;
$.typeNameInFirefox.$name = "typeNameInFirefox";
$.typeNameInIE.call$1 = $.typeNameInIE;
$.typeNameInIE.$name = "typeNameInIE";
$.constructorNameFallback.call$1 = $.constructorNameFallback;
$.constructorNameFallback.$name = "constructorNameFallback";
$.dynamicBind.call$4 = $.dynamicBind;
$.dynamicBind.$name = "dynamicBind";
$.updateDropDown.call$1 = $.updateDropDown;
$.updateDropDown.$name = "updateDropDown";
$.handleUpDown.call$1 = $.handleUpDown;
$.handleUpDown.$name = "handleUpDown";
$.shortcutHandler.call$1 = $.shortcutHandler;
$.shortcutHandler.$name = "shortcutHandler";
$.resultComparator.call$2 = $.resultComparator;
$.resultComparator.$name = "resultComparator";
$._nullDataHandler.call$1 = $._nullDataHandler;
$._nullDataHandler.$name = "_nullDataHandler";
$._nullDataHandler.$is_TimerCallback1 = true;
$._nullErrorHandler.call$1 = $._nullErrorHandler;
$._nullErrorHandler.$name = "_nullErrorHandler";
$._nullDoneHandler.call$0 = $._nullDoneHandler;
$._nullDoneHandler.$name = "_nullDoneHandler";
$._nullDoneHandler.$is_TimerCallback0 = true;
$.Comparable_compare.call$2 = $.Comparable_compare;
$.Comparable_compare.$name = "Comparable_compare";
Isolate.$finishClasses($$);
$$ = {};
$.List = {builtin$cls: 'List'};
$.Node = {builtin$cls: 'Node'};
$.Match = {builtin$cls: 'Match'};
$.ReceivePort = {builtin$cls: 'ReceivePort'};
$.String = {builtin$cls: 'String'};
$.Element = {builtin$cls: 'Element'};
$.SourceString = {builtin$cls: 'SourceString'};
$._ManagerStub = {builtin$cls: '_ManagerStub'};
$.bool = {builtin$cls: 'bool'};
$.$int = {builtin$cls: '$int'};
Isolate.makeConstantList = function(list) {
  list.immutable$list = true;
  list.fixed$length = true;
  return list;
};
$.CONSTANT93 = Isolate.makeConstantList([]);
$.CONSTANT94 = new Isolate.$isolateProperties.StringWrapper("||");
$.CONSTANT56 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT94, 4, 146);
$.CONSTANT95 = new Isolate.$isolateProperties.StringWrapper("+");
$.CONSTANT96 = new Isolate.$isolateProperties.StringWrapper("keyword");
$.CONSTANT97 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT96, 0, 107);
$.CONSTANT98 = new Isolate.$isolateProperties.Keyword("get", false, true, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT99 = new Isolate.$isolateProperties.StringWrapper("-");
$.CONSTANT68 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT99, 12, 45);
$.CONSTANT15 = new Isolate.$isolateProperties.EventStreamProvider("change");
$.CONSTANT100 = new Isolate.$isolateProperties.StringWrapper(")");
$.CONSTANT22 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT100, 0, 41);
$.CONSTANT101 = new Isolate.$isolateProperties.StringWrapper(">>=");
$.CONSTANT102 = new Isolate.$isolateProperties.StringWrapper("#");
$.CONSTANT47 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT102, 0, 35);
$.CONSTANT103 = new Isolate.$isolateProperties.Keyword("in", false, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT104 = new Isolate.$isolateProperties.StringWrapper("as");
$.CONSTANT105 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT104, 10, 107);
$.CONSTANT106 = new Isolate.$isolateProperties.Keyword("import", false, true, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT9 = new Isolate.$isolateProperties.Duration(0);
$.CONSTANT107 = new Isolate.$isolateProperties.StringWrapper("|=");
$.CONSTANT57 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT107, 1, 147);
$.CONSTANT108 = new Isolate.$isolateProperties.StringWrapper("|");
$.CONSTANT0 = new Isolate.$isolateProperties.NullThrownError();
$.CONSTANT109 = new Isolate.$isolateProperties.StringWrapper("-=");
$.CONSTANT67 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT109, 1, 152);
$.CONSTANT110 = new Isolate.$isolateProperties.StringWrapper("identifier");
$.CONSTANT89 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT110, 0, 97);
$.CONSTANT111 = new Isolate.$isolateProperties.StringWrapper("]");
$.CONSTANT27 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT111, 0, 93);
$.CONSTANT112 = new Isolate.$isolateProperties.Keyword("static", false, true, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT8 = new Isolate.$isolateProperties.EventStreamProvider("blur");
$.CONSTANT113 = new Isolate.$isolateProperties.StringWrapper("double");
$.CONSTANT114 = new Isolate.$isolateProperties.StringWrapper("++");
$.CONSTANT115 = new Isolate.$isolateProperties.StringWrapper("&=");
$.CONSTANT116 = new Isolate.$isolateProperties.StringWrapper("^");
$.CONSTANT55 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT116, 7, 94);
$.CONSTANT117 = new Isolate.$isolateProperties.StringWrapper("*");
$.CONSTANT65 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT117, 13, 42);
$.CONSTANT118 = new Isolate.$isolateProperties.Keyword("operator", false, true, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT92 = new Isolate.$isolateProperties.Object();
$.CONSTANT119 = new Isolate.$isolateProperties.Keyword("of", true, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT120 = new Isolate.$isolateProperties.StringWrapper("[]=");
$.CONSTANT51 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT120, 0, 140);
$.CONSTANT121 = new Isolate.$isolateProperties.StringWrapper("{");
$.CONSTANT29 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT121, 0, 123);
$.CONSTANT40 = new Isolate.$isolateProperties.StringWrapper("unterminated string literal");
$.CONSTANT122 = new Isolate.$isolateProperties.StringWrapper("<<");
$.CONSTANT85 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT122, 11, 137);
$.CONSTANT123 = new Isolate.$isolateProperties.StringWrapper("!==");
$.CONSTANT72 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT123, 9, 142);
$.CONSTANT124 = new Isolate.$isolateProperties.StringWrapper("${");
$.CONSTANT125 = new Isolate.$isolateProperties.StringWrapper("~/");
$.CONSTANT49 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT125, 13, 154);
$.CONSTANT126 = new Isolate.$isolateProperties.Keyword("extends", false, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT127 = new Isolate.$isolateProperties.StringWrapper("--");
$.CONSTANT128 = new Isolate.$isolateProperties.StringWrapper(".");
$.CONSTANT129 = new Isolate.$isolateProperties.StringWrapper("!=");
$.CONSTANT130 = new Isolate.$isolateProperties.Keyword("part", false, true, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT5 = new Isolate.$isolateProperties.JSNull();
$.CONSTANT = new Isolate.$isolateProperties.JSArray();
$.CONSTANT6 = new Isolate.$isolateProperties.JSNumber();
$.CONSTANT2 = new Isolate.$isolateProperties.JSInt();
$.CONSTANT131 = new Isolate.$isolateProperties.StringWrapper("^=");
$.CONSTANT54 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT131, 1, 157);
$.CONSTANT1 = new Isolate.$isolateProperties.JSString();
$.CONSTANT132 = new Isolate.$isolateProperties.StringWrapper("comment");
$.CONSTANT46 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT132, 0, 158);
$.CONSTANT133 = new Isolate.$isolateProperties.Keyword("super", false, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT16 = new Isolate.$isolateProperties.EventStreamProvider("keyup");
$.CONSTANT134 = new Isolate.$isolateProperties.Keyword("throw", false, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT135 = new Isolate.$isolateProperties.StringWrapper("..");
$.CONSTANT33 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT135, 2, 133);
$.CONSTANT136 = new Isolate.$isolateProperties.StringWrapper("[]");
$.CONSTANT52 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT136, 0, 141);
$.CONSTANT137 = new Isolate.$isolateProperties.StringWrapper(">");
$.CONSTANT138 = new Isolate.$isolateProperties.Keyword("true", false, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT139 = new Isolate.$isolateProperties.StringWrapper("=");
$.CONSTANT78 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT139, 1, 61);
$.CONSTANT4 = new Isolate.$isolateProperties._DeadEntry();
$.CONSTANT3 = new Isolate.$isolateProperties._NullKey();
$.CONSTANT140 = new Isolate.$isolateProperties.StringWrapper("&&");
$.CONSTANT141 = new Isolate.$isolateProperties.Keyword("continue", false, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT142 = new Isolate.$isolateProperties.StringWrapper("EOF");
$.CONSTANT18 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT142, 0, 0);
$.CONSTANT143 = new Isolate.$isolateProperties.Keyword("implements", false, true, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT7 = new Isolate.$isolateProperties._LinkedHashTableHeadMarker();
$.CONSTANT144 = new Isolate.$isolateProperties.Keyword("default", false, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT88 = new Isolate.$isolateProperties.Keyword("Dynamic", false, true, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT145 = new Isolate.$isolateProperties.StringWrapper("}");
$.CONSTANT146 = new Isolate.$isolateProperties.Keyword("library", false, true, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT147 = new Isolate.$isolateProperties.StringWrapper("$");
$.CONSTANT148 = new Isolate.$isolateProperties.StringWrapper("\\");
$.CONSTANT149 = new Isolate.$isolateProperties.Keyword("new", false, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT150 = new Isolate.$isolateProperties.StringWrapper("is");
$.CONSTANT151 = new Isolate.$isolateProperties.StringWrapper("malformed input");
$.CONSTANT19 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT151, 0, 88);
$.CONSTANT152 = new Isolate.$isolateProperties.StringWrapper("*=");
$.CONSTANT153 = new Isolate.$isolateProperties.StringWrapper("==");
$.CONSTANT76 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT153, 9, 135);
$.CONSTANT154 = new Isolate.$isolateProperties.StringWrapper("%");
$.CONSTANT63 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT154, 13, 37);
$.CONSTANT155 = new Isolate.$isolateProperties.StringWrapper("!");
$.CONSTANT156 = new Isolate.$isolateProperties.StringWrapper("string");
$.CONSTANT39 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT156, 0, 39);
$.CONSTANT157 = new Isolate.$isolateProperties.StringWrapper("===");
$.CONSTANT75 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT157, 9, 134);
$.CONSTANT158 = new Isolate.$isolateProperties.StringWrapper(">=");
$.CONSTANT13 = new Isolate.$isolateProperties.EventStreamProvider("mousedown");
$.CONSTANT159 = new Isolate.$isolateProperties.StringWrapper("/=");
$.CONSTANT160 = new Isolate.$isolateProperties.Keyword("return", false, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT161 = new Isolate.$isolateProperties.StringWrapper(",");
$.CONSTANT23 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT161, 0, 44);
$.CONSTANT162 = new Isolate.$isolateProperties.StringWrapper("/");
$.CONSTANT163 = new Isolate.$isolateProperties.StringWrapper("+=");
$.CONSTANT70 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT163, 1, 150);
$.CONSTANT164 = new Isolate.$isolateProperties.Keyword("show", true, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT165 = new Isolate.$isolateProperties.StringWrapper("`");
$.CONSTANT28 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT165, 0, 96);
$.CONSTANT17 = new Isolate.$isolateProperties.EventStreamProvider("keydown");
$.CONSTANT166 = new Isolate.$isolateProperties.StringWrapper(">>");
$.CONSTANT167 = new Isolate.$isolateProperties.StringWrapper("=>");
$.CONSTANT168 = new Isolate.$isolateProperties.StringWrapper("int");
$.CONSTANT31 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT168, 0, 105);
$.CONSTANT169 = new Isolate.$isolateProperties.Keyword("source", true, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT87 = new Isolate.$isolateProperties.StringWrapper("expected identifier");
$.CONSTANT170 = new Isolate.$isolateProperties.Keyword("break", false, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT171 = new Isolate.$isolateProperties.StringWrapper(":");
$.CONSTANT172 = new Isolate.$isolateProperties.StringWrapper("hexadecimal");
$.CONSTANT173 = new Isolate.$isolateProperties.StringWrapper("~");
$.CONSTANT50 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT173, 0, 126);
$.CONSTANT174 = new Isolate.$isolateProperties.StringWrapper(";");
$.CONSTANT25 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT174, 0, 59);
$.CONSTANT175 = new Isolate.$isolateProperties.StringWrapper("...");
$.CONSTANT176 = new Isolate.$isolateProperties.StringWrapper("<=");
$.CONSTANT83 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT176, 10, 129);
$.CONSTANT177 = new Isolate.$isolateProperties.StringWrapper("@");
$.CONSTANT178 = new Isolate.$isolateProperties.Keyword("on", true, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT179 = new Isolate.$isolateProperties.Keyword("switch", false, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT180 = new Isolate.$isolateProperties.StringWrapper("<<=");
$.CONSTANT181 = new Isolate.$isolateProperties.StringWrapper("?");
$.CONSTANT182 = new Isolate.$isolateProperties.StringWrapper("%=");
$.CONSTANT62 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT182, 1, 155);
$.CONSTANT183 = new Isolate.$isolateProperties.StringWrapper("~/=");
$.CONSTANT48 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT183, 1, 153);
$.CONSTANT184 = new Isolate.$isolateProperties.StringWrapper("(");
$.CONSTANT185 = new Isolate.$isolateProperties.Keyword("var", false, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT186 = new Isolate.$isolateProperties.StringWrapper("&");
$.CONSTANT61 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT186, 8, 38);
$.CONSTANT187 = new Isolate.$isolateProperties.Keyword("case", false, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT188 = new Isolate.$isolateProperties.StringWrapper("[");
$.CONSTANT53 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT188, 14, 91);
$.CONSTANT189 = new Isolate.$isolateProperties.StringWrapper("<");
$.CONSTANT86 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT189, 10, 60);
$.CONSTANT190 = new Isolate.$isolateProperties.Keyword("null", false, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT74 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT155, 0, 33);
$.CONSTANT69 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT114, 14, 149);
$.CONSTANT38 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT172, 0, 120);
$.CONSTANT191 = new Isolate.$isolateProperties.Keyword("factory", false, true, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT192 = new Isolate.$isolateProperties.Keyword("assert", false, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT60 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT115, 1, 145);
$.CONSTANT45 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT162, 13, 47);
$.CONSTANT37 = new Isolate.$isolateProperties.StringWrapper("hex digit expected");
$.CONSTANT36 = new Isolate.$isolateProperties.StringWrapper("digit expected");
$.CONSTANT193 = new Isolate.$isolateProperties.Keyword("false", false, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT80 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT101, 1, 139);
$.CONSTANT194 = new Isolate.$isolateProperties.Keyword("while", false, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT195 = new Isolate.$isolateProperties.Keyword("export", false, true, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT43 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT177, 0, 64);
$.CONSTANT30 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT145, 0, 125);
$.CONSTANT196 = new Isolate.$isolateProperties.Keyword("final", false, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT197 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT150, 10, 107);
$.CONSTANT198 = new Isolate.$isolateProperties.Keyword("if", false, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT24 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT171, 0, 58);
$.CONSTANT42 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT124, 0, 128);
$.CONSTANT26 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT181, 3, 63);
$.CONSTANT73 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT129, 9, 143);
$.CONSTANT199 = new Isolate.$isolateProperties.Keyword("hide", true, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT14 = new Isolate.$isolateProperties.EventStreamProvider("reset");
$.CONSTANT66 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT127, 14, 151);
$.CONSTANT200 = new Isolate.$isolateProperties.Keyword("void", false, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT21 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT184, 14, 40);
$.CONSTANT10 = new Isolate.$isolateProperties.EventStreamProvider("focus");
$.CONSTANT20 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT148, 0, 92);
$.CONSTANT201 = new Isolate.$isolateProperties.Keyword("dynamic", false, true, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT202 = new Isolate.$isolateProperties.Keyword("class", false, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT203 = new Isolate.$isolateProperties.Keyword("else", false, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT204 = new Isolate.$isolateProperties.Keyword("for", false, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT205 = new Isolate.$isolateProperties.Keyword("this", false, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT71 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT95, 12, 43);
$.CONSTANT79 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT158, 10, 138);
$.CONSTANT44 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT159, 1, 131);
$.CONSTANT12 = new Isolate.$isolateProperties.EventStreamProvider("click");
$.CONSTANT206 = new Isolate.$isolateProperties.Keyword("catch", false, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT59 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT140, 5, 144);
$.CONSTANT207 = new Isolate.$isolateProperties.Keyword("interface", false, true, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT208 = new Isolate.$isolateProperties.Keyword("abstract", false, true, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT41 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT147, 0, 159);
$.CONSTANT64 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT152, 1, 148);
$.CONSTANT209 = new Isolate.$isolateProperties.Keyword("with", false, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT210 = new Isolate.$isolateProperties.Keyword("as", false, true, Isolate.$isolateProperties.CONSTANT105);
$.CONSTANT211 = new Isolate.$isolateProperties.Keyword("const", false, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT212 = new Isolate.$isolateProperties.Keyword("set", false, true, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT11 = new Isolate.$isolateProperties.EventStreamProvider("mouseup");
$.CONSTANT213 = new Isolate.$isolateProperties.Keyword("do", false, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT214 = new Isolate.$isolateProperties.Keyword("finally", false, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT215 = new Isolate.$isolateProperties.Keyword("try", false, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT216 = new Isolate.$isolateProperties.Keyword("is", false, false, Isolate.$isolateProperties.CONSTANT197);
$.CONSTANT217 = new Isolate.$isolateProperties.Keyword("external", false, true, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT218 = new Isolate.$isolateProperties.Keyword("typedef", false, true, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT219 = new Isolate.$isolateProperties.Keyword("native", true, false, Isolate.$isolateProperties.CONSTANT97);
$.CONSTANT90 = Isolate.makeConstantList([Isolate.$isolateProperties.CONSTANT192, Isolate.$isolateProperties.CONSTANT170, Isolate.$isolateProperties.CONSTANT187, Isolate.$isolateProperties.CONSTANT206, Isolate.$isolateProperties.CONSTANT202, Isolate.$isolateProperties.CONSTANT211, Isolate.$isolateProperties.CONSTANT141, Isolate.$isolateProperties.CONSTANT144, Isolate.$isolateProperties.CONSTANT213, Isolate.$isolateProperties.CONSTANT203, Isolate.$isolateProperties.CONSTANT126, Isolate.$isolateProperties.CONSTANT193, Isolate.$isolateProperties.CONSTANT196, Isolate.$isolateProperties.CONSTANT214, Isolate.$isolateProperties.CONSTANT204, Isolate.$isolateProperties.CONSTANT198, Isolate.$isolateProperties.CONSTANT103, Isolate.$isolateProperties.CONSTANT149, Isolate.$isolateProperties.CONSTANT190, Isolate.$isolateProperties.CONSTANT160, Isolate.$isolateProperties.CONSTANT133, Isolate.$isolateProperties.CONSTANT179, Isolate.$isolateProperties.CONSTANT205, Isolate.$isolateProperties.CONSTANT134, Isolate.$isolateProperties.CONSTANT138, Isolate.$isolateProperties.CONSTANT215, Isolate.$isolateProperties.CONSTANT185, Isolate.$isolateProperties.CONSTANT200, Isolate.$isolateProperties.CONSTANT194, Isolate.$isolateProperties.CONSTANT209, Isolate.$isolateProperties.CONSTANT216, Isolate.$isolateProperties.CONSTANT208, Isolate.$isolateProperties.CONSTANT210, Isolate.$isolateProperties.CONSTANT201, Isolate.$isolateProperties.CONSTANT195, Isolate.$isolateProperties.CONSTANT217, Isolate.$isolateProperties.CONSTANT191, Isolate.$isolateProperties.CONSTANT98, Isolate.$isolateProperties.CONSTANT143, Isolate.$isolateProperties.CONSTANT106, Isolate.$isolateProperties.CONSTANT207, Isolate.$isolateProperties.CONSTANT146, Isolate.$isolateProperties.CONSTANT118, Isolate.$isolateProperties.CONSTANT130, Isolate.$isolateProperties.CONSTANT212, Isolate.$isolateProperties.CONSTANT112, Isolate.$isolateProperties.CONSTANT218, Isolate.$isolateProperties.CONSTANT199, Isolate.$isolateProperties.CONSTANT219, Isolate.$isolateProperties.CONSTANT119, Isolate.$isolateProperties.CONSTANT178, Isolate.$isolateProperties.CONSTANT164, Isolate.$isolateProperties.CONSTANT169]);
$.CONSTANT91 = new Isolate.$isolateProperties.Link();
$.CONSTANT34 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT128, 14, 46);
$.CONSTANT84 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT180, 1, 136);
$.CONSTANT32 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT175, 0, 132);
$.CONSTANT82 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT137, 10, 62);
$.CONSTANT81 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT166, 11, 156);
$.CONSTANT58 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT108, 6, 124);
$.CONSTANT35 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT113, 0, 100);
$.CONSTANT77 = new Isolate.$isolateProperties.PrecedenceInfo(Isolate.$isolateProperties.CONSTANT167, 0, 130);
$.lazyPort = null;
$.ReceivePortImpl__nextFreeId = 1;
$.Primitives_hashCodeSeed = 0;
$._getTypeNameOf = null;
$.Keyword__keywords = null;
$.KeywordState__KEYWORD_STATE = null;
$.currentLibrary = null;
$.currentType = null;
$.prefix = "";
$.libraryList = null;
$.searchInput = null;
$.dropdown = null;
$.currentSearchText = null;
$._currentResult = null;
$.currentResults = Isolate.$isolateProperties.CONSTANT93;
$._currentResultIndex = null;
$.hideDropDownSuspend = false;
$.$$and = function(receiver, a0) {
  return $.getInterceptor$JSNumber(receiver).$and(receiver, a0);
};
$.$$mul = function(receiver, a0) {
  return $.getInterceptor$JSNumber(receiver).$mul(receiver, a0);
};
$.$$add = function(receiver, a0) {
  return $.getInterceptor$JSNumber(receiver).$add(receiver, a0);
};
$.$$sub = function(receiver, a0) {
  return $.getInterceptor$JSNumber(receiver).$sub(receiver, a0);
};
$.$$lt = function(receiver, a0) {
  return $.getInterceptor$JSNumber(receiver).$lt(receiver, a0);
};
$.$$shl = function(receiver, a0) {
  return $.getInterceptor$JSNumber(receiver).$shl(receiver, a0);
};
$.$$le = function(receiver, a0) {
  return $.getInterceptor$JSNumber(receiver).$le(receiver, a0);
};
$.$$eq = function(receiver, a0) {
  return $.getInterceptor(receiver).$eq(receiver, a0);
};
$.$$gt = function(receiver, a0) {
  return $.getInterceptor$JSNumber(receiver).$gt(receiver, a0);
};
$.$$ge = function(receiver, a0) {
  return $.getInterceptor$JSNumber(receiver).$ge(receiver, a0);
};
$.add = function(receiver, a0) {
  return $.getInterceptor$JSArray(receiver).add$1(receiver, a0);
};
$.addAll = function(receiver, a0) {
  return $.getInterceptor$JSArray(receiver).addAll$1(receiver, a0);
};
$.addLast = function(receiver, a0) {
  return $.getInterceptor$JSArray(receiver).addLast$1(receiver, a0);
};
$.allMatches = function(receiver, a0) {
  return $.getInterceptor$JSString(receiver).allMatches$1(receiver, a0);
};
$.clear = function(receiver) {
  return $.getInterceptor$JSArray(receiver).clear$0(receiver);
};
$.codeUnitAt = function(receiver, a0) {
  return $.getInterceptor$JSString(receiver).codeUnitAt$1(receiver, a0);
};
$.compareTo = function(receiver, a0) {
  return $.getInterceptor$JSNumberJSString(receiver).compareTo$1(receiver, a0);
};
$.contains0 = function(receiver) {
  return $.getInterceptor$JSArrayJSString(receiver).get$contains(receiver);
};
$.contains = function(receiver, a0) {
  return $.getInterceptor$JSArrayJSString(receiver).contains$1(receiver, a0);
};
$.elementAt = function(receiver, a0) {
  return $.getInterceptor$JSArray(receiver).elementAt$1(receiver, a0);
};
$.forEach = function(receiver, a0) {
  return $.getInterceptor$JSArray(receiver).forEach$1(receiver, a0);
};
$.hashCode = function(receiver) {
  return $.getInterceptor(receiver).get$hashCode(receiver);
};
$.indexOf = function(receiver, a0, a1) {
  return $.getInterceptor$JSArrayJSString(receiver).indexOf$2(receiver, a0, a1);
};
$.isEmpty = function(receiver) {
  return $.getInterceptor$JSArrayJSString(receiver).get$isEmpty(receiver);
};
$.join = function(receiver, a0) {
  return $.getInterceptor$JSArray(receiver).join$1(receiver, a0);
};
$.last = function(receiver) {
  return $.getInterceptor$JSArray(receiver).get$last(receiver);
};
$.length = function(receiver) {
  return $.getInterceptor$JSArrayJSString(receiver).get$length(receiver);
};
$.remainder = function(receiver, a0) {
  return $.getInterceptor$JSNumber(receiver).remainder$1(receiver, a0);
};
$.remove = function(receiver, a0) {
  return $.getInterceptor$JSArray(receiver).remove$1(receiver, a0);
};
$.replaceAll = function(receiver, a0, a1) {
  return $.getInterceptor$JSString(receiver).replaceAll$2(receiver, a0, a1);
};
$.setRange = function(receiver, a0, a1, a2, a3) {
  return $.getInterceptor$JSArray(receiver).setRange$4(receiver, a0, a1, a2, a3);
};
$.split = function(receiver, a0) {
  return $.getInterceptor$JSString(receiver).split$1(receiver, a0);
};
$.substring = function(receiver, a0, a1) {
  return $.getInterceptor$JSString(receiver).substring$2(receiver, a0, a1);
};
$.toList = function(receiver) {
  return $.getInterceptor$JSArray(receiver).toList$0(receiver);
};
$.toLowerCase = function(receiver) {
  return $.getInterceptor$JSString(receiver).toLowerCase$0(receiver);
};
$.toString = function(receiver) {
  return $.getInterceptor(receiver).toString$0(receiver);
};
$.toUpperCase = function(receiver) {
  return $.getInterceptor$JSString(receiver).toUpperCase$0(receiver);
};
$.trim = function(receiver) {
  return $.getInterceptor$JSString(receiver).trim$0(receiver);
};
$.where = function(receiver, a0) {
  return $.getInterceptor$JSArray(receiver).where$1(receiver, a0);
};
$.$$index = function(receiver, a0) {
  return $.getInterceptor$JSArrayJSString(receiver).$index(receiver, a0);
};
$.$$indexSet = function(receiver, a0, a1) {
  return $.getInterceptor$JSArray(receiver).$indexSet(receiver, a0, a1);
};
$.$$xor = function(receiver, a0) {
  return $.getInterceptor$JSNumber(receiver).$xor(receiver, a0);
};
$.iterator = function(receiver) {
  return $.getInterceptor$JSArray(receiver).get$iterator(receiver);
};
$.$$or = function(receiver, a0) {
  return $.getInterceptor$JSNumber(receiver).$or(receiver, a0);
};
$.$$tdiv = function(receiver, a0) {
  return $.getInterceptor$JSNumber(receiver).$tdiv(receiver, a0);
};
$.getInterceptor = function(receiver) {
  if (typeof receiver == "number") {
    if (Math.floor(receiver) == receiver)
      return $.JSInt.prototype;
    return $.JSDouble.prototype;
  }
  if (typeof receiver == "string")
    return $.JSString.prototype;
  if (receiver == null)
    return $.JSNull.prototype;
  if (typeof receiver == "function")
    return $.JSFunction.prototype;
  if (typeof receiver == "boolean")
    return $.JSBool.prototype;
  if (receiver.constructor == Array)
    return $.JSArray.prototype;
  return $.ObjectInterceptor.prototype;
};
$.getInterceptor$JSArray = function(receiver) {
  if (receiver == null)
    return void 0;
  if (receiver.constructor == Array)
    return $.JSArray.prototype;
  return $.ObjectInterceptor.prototype;
};
$.getInterceptor$JSArrayJSString = function(receiver) {
  if (typeof receiver == "string")
    return $.JSString.prototype;
  if (receiver == null)
    return void 0;
  if (receiver.constructor == Array)
    return $.JSArray.prototype;
  return $.ObjectInterceptor.prototype;
};
$.getInterceptor$JSNumber = function(receiver) {
  if (typeof receiver == "number")
    return $.JSNumber.prototype;
  if (receiver == null)
    return void 0;
  return $.ObjectInterceptor.prototype;
};
$.getInterceptor$JSNumberJSString = function(receiver) {
  if (typeof receiver == "number")
    return $.JSNumber.prototype;
  if (typeof receiver == "string")
    return $.JSString.prototype;
  if (receiver == null)
    return void 0;
  return $.ObjectInterceptor.prototype;
};
$.getInterceptor$JSString = function(receiver) {
  if (typeof receiver == "string")
    return $.JSString.prototype;
  if (receiver == null)
    return void 0;
  return $.ObjectInterceptor.prototype;
};
Isolate.$lazy($, "globalThis", "globalThis", "get$globalThis", function() {
  return $.IsolateNatives_computeGlobalThis();
});
Isolate.$lazy($, "globalWindow", "globalWindow", "get$globalWindow", function() {
  return $.get$globalThis().window;
});
Isolate.$lazy($, "globalWorker", "globalWorker", "get$globalWorker", function() {
  return $.get$globalThis().Worker;
});
Isolate.$lazy($, "globalPostMessageDefined", "globalPostMessageDefined", "get$globalPostMessageDefined", function() {
  return $.get$globalThis().postMessage !== (void 0);
});
Isolate.$lazy($, "thisScript", "IsolateNatives_thisScript", "get$IsolateNatives_thisScript", function() {
  return $.IsolateNatives_computeThisScript();
});
Isolate.$lazy($, "quoteRegExp", "quoteRegExp", "get$quoteRegExp", function() {
  return $.JSSyntaxRegExp$("[-[\\]{}()*+?.,\\\\^$|#\\s]", true, false);
});
var $ = null;
Isolate.$finishClasses($$);
$$ = {};
Isolate = Isolate.$finishIsolateConstructor(Isolate);
var $ = new Isolate();
$.$defineNativeClass = function(cls, desc) {
  var fields = desc[''];
  var fields_array = fields ? fields.split(',') : [];
  for (var i = 0; i < fields_array.length; i++) {
    $.$generateAccessor(fields_array[i], desc);
  }
  var hasOwnProperty = Object.prototype.hasOwnProperty;
  for (var method in desc) {
    if (method) {
      if (hasOwnProperty.call(desc, method)) {
        $.dynamicFunction(method)[cls] = desc[method];
      }
    }
  }
};

(function(table) {
  for (var key in table)
    $.defineProperty(Object.prototype, key, table[key]);
})({
  $isJavaScriptIndexingBehavior: function() {
    return false;
  },
  $isCollection: function() {
    return false;
  },
  $isList: function() {
    return false;
  },
  $isElement: function() {
    return false;
  },
  $isLocation: function() {
    return false;
  },
  $isNode: function() {
    return false;
  },
  toString$0: function() {
    return $.toStringForNativeObject(this);
  },
  get$hashCode: function() {
    return $.hashCodeForNativeObject(this);
  },
  $eq: function(a) {
    return this === a;
  }
});

$.$defineNativeClass("Worker", {
  get$id: function() {
    return this.id;
  },
  set$id: function(i) {
    this.id = i;
  },
  set$onmessage: function(f) {
    this.onmessage = f;
  },
  postMessage$1: function(msg) {
    this.postMessage(msg);
  },
  terminate$0: function() {
    this.terminate();
  }
});

$.$defineNativeClass("HTMLAnchorElement", {"": "href<,target>,type>",
  toString$0: function() {
    return this.toString();
  }
});

$.$defineNativeClass("HTMLAreaElement", {"": "href<,target>"});

$.$defineNativeClass("HTMLBaseElement", {"": "href<,target>"});

$.$defineNativeClass("BeforeLoadEvent", {"": "url>"});

$.$defineNativeClass("HTMLBodyElement", {
  get$onBlur: function() {
    return $.CONSTANT8.forTarget$1(this);
  },
  get$onFocus: function() {
    return $.CONSTANT10.forTarget$1(this);
  }
});

$.$defineNativeClass("HTMLButtonElement", {"": "type>,value>"});

$.$defineNativeClass("CharacterData", {"": "length>"});

$.$defineNativeClass("CSSStyleDeclaration", {"": "length>",
  getPropertyValue$1: function(propertyName) {
    var propValue = this.getPropertyValue(propertyName);
    return !(propValue == null) ? propValue : "";
  },
  setProperty$3: function(propertyName, value, priority) {
    this.setProperty(propertyName, value, priority);
    if (!!this.setAttribute)
      this.setAttribute(propertyName, value);
  },
  get$clear: function() {
    return this.getPropertyValue$1("clear");
  },
  clear$0: function() {
    return this.get$clear().call$0();
  },
  set$display: function(value) {
    this.setProperty$3("display", value, "");
  },
  set$visibility: function(value) {
    this.setProperty$3("visibility", value, "");
  }
});

$.$defineNativeClass("Document", {"": "$$dom_head:head~",
  $$dom_createElement$1: function(tagName) {
    return this.createElement(tagName);
  },
  $$dom_getElementById$1: function(elementId) {
    return this.getElementById(elementId);
  },
  $$dom_getElementsByName$1: function(elementName) {
    return this.getElementsByName(elementName);
  },
  $$dom_getElementsByTagName$1: function(tagname) {
    return this.getElementsByTagName(tagname);
  },
  $$dom_querySelector$1: function(selectors) {
    return this.querySelector(selectors);
  },
  $$dom_querySelectorAll$1: function(selectors) {
    return this.querySelectorAll(selectors);
  },
  get$onBlur: function() {
    return $.CONSTANT8.forTarget$1(this);
  },
  get$onChange: function() {
    return $.CONSTANT15.forTarget$1(this);
  },
  get$onClick: function() {
    return $.CONSTANT12.forTarget$1(this);
  },
  get$onFocus: function() {
    return $.CONSTANT10.forTarget$1(this);
  },
  get$onKeyDown: function() {
    return $.CONSTANT17.forTarget$1(this);
  },
  get$onKeyUp: function() {
    return $.CONSTANT16.forTarget$1(this);
  },
  get$onMouseDown: function() {
    return $.CONSTANT13.forTarget$1(this);
  },
  get$onMouseUp: function() {
    return $.CONSTANT11.forTarget$1(this);
  },
  get$onReset: function() {
    return $.CONSTANT14.forTarget$1(this);
  },
  query$1: function(selectors) {
    if ($.RegExp_RegExp("^#[_a-zA-Z]\\w*$", true, false).hasMatch$1(selectors))
      return this.$$dom_getElementById$1($.CONSTANT1.substring$1(selectors, 1));
    return this.$$dom_querySelector$1(selectors);
  },
  queryAll$1: function(selectors) {
    var mutableMatches, len, copyOfMatches, t1, i;
    if ($.RegExp_RegExp("^\\[name=[\"'][^'\"]+['\"]\\]$", true, false).hasMatch$1(selectors)) {
      mutableMatches = this.$$dom_getElementsByName$1($.CONSTANT1.substring$2(selectors, 7, selectors.length - 2));
      if (typeof mutableMatches !== "string" && (typeof mutableMatches !== "object" || mutableMatches === null || mutableMatches.constructor !== Array && !mutableMatches.$isJavaScriptIndexingBehavior()))
        return this.queryAll$1$bailout(1, mutableMatches);
      len = mutableMatches.length;
      copyOfMatches = $.List_List$fixedLength(len, null);
      for (t1 = mutableMatches.length, i = 0; i < len; ++i) {
        if (i >= t1)
          throw $.ioore(i);
        copyOfMatches[i] = mutableMatches[i];
      }
      return $._FrozenElementList$_wrap(copyOfMatches);
    } else if ($.RegExp_RegExp("^[*a-zA-Z0-9]+$", true, false).hasMatch$1(selectors)) {
      mutableMatches = this.$$dom_getElementsByTagName$1(selectors);
      if (typeof mutableMatches !== "string" && (typeof mutableMatches !== "object" || mutableMatches === null || mutableMatches.constructor !== Array && !mutableMatches.$isJavaScriptIndexingBehavior()))
        return this.queryAll$1$bailout(3, mutableMatches);
      len = mutableMatches.length;
      copyOfMatches = $.List_List$fixedLength(len, null);
      for (t1 = mutableMatches.length, i = 0; i < len; ++i) {
        if (i >= t1)
          throw $.ioore(i);
        copyOfMatches[i] = mutableMatches[i];
      }
      return $._FrozenElementList$_wrap(copyOfMatches);
    } else
      return $._FrozenElementList$_wrap(this.$$dom_querySelectorAll$1(selectors));
  },
  queryAll$1$bailout: function(state0, mutableMatches, t2, len) {
    switch (state0) {
      case 0:
      default:
        var copyOfMatches, i, t1;
        if (state0 === 2 || state0 === 1 || state0 === 0 && $.RegExp_RegExp("^\\[name=[\"'][^'\"]+['\"]\\]$", true, false).hasMatch$1(selectors))
          switch (state0) {
            case 0:
              mutableMatches = this.$$dom_getElementsByName$1($.CONSTANT1.substring$2(selectors, 7, selectors.length - 2));
            case 1:
              state0 = 0;
              t2 = $.getInterceptor$JSArrayJSString(mutableMatches);
              len = t2.get$length(mutableMatches);
            case 2:
              state0 = 0;
              copyOfMatches = $.List_List$fixedLength(len, null);
              for (i = 0; $.CONSTANT2.$lt(i, len); ++i) {
                t1 = t2.$index(mutableMatches, i);
                if (i >= copyOfMatches.length)
                  throw $.ioore(i);
                copyOfMatches[i] = t1;
              }
              return $._FrozenElementList$_wrap(copyOfMatches);
          }
        else
          switch (state0) {
            case 0:
            default:
              if (state0 === 4 || state0 === 3 || state0 === 0 && $.RegExp_RegExp("^[*a-zA-Z0-9]+$", true, false).hasMatch$1(selectors))
                switch (state0) {
                  case 0:
                    mutableMatches = this.$$dom_getElementsByTagName$1(selectors);
                  case 3:
                    state0 = 0;
                    t2 = $.getInterceptor$JSArrayJSString(mutableMatches);
                    len = t2.get$length(mutableMatches);
                  case 4:
                    state0 = 0;
                    copyOfMatches = $.List_List$fixedLength(len, null);
                    for (i = 0; $.CONSTANT2.$lt(i, len); ++i) {
                      t1 = t2.$index(mutableMatches, i);
                      if (i >= copyOfMatches.length)
                        throw $.ioore(i);
                      copyOfMatches[i] = t1;
                    }
                    return $._FrozenElementList$_wrap(copyOfMatches);
                }
              else
                return $._FrozenElementList$_wrap(this.$$dom_querySelectorAll$1(selectors));
          }
    }
  }
});

$.$defineNativeClass("DocumentFragment", {
  get$children: function() {
    if (this._children == null)
      this._children = $.FilteredElementList$(this);
    return this._children;
  },
  set$children: function(value) {
    var copy, children, t1;
    copy = $.List_List$from(value);
    children = this.get$children();
    t1 = $.getInterceptor$JSArray(children);
    t1.clear$0(children);
    t1.addAll$1(children, copy);
  },
  query$1: function(selectors) {
    return this.$$dom_querySelector$1(selectors);
  },
  queryAll$1: function(selectors) {
    return $._FrozenElementList$_wrap(this.$$dom_querySelectorAll$1(selectors));
  },
  set$innerHtml: function(value) {
    if (Object.getPrototypeOf(this).hasOwnProperty("set$innerHtml")) {
      var e, nodes;
      $.clear(this.get$nodes());
      e = $.Element_Element$tag("div");
      e.set$innerHtml(value);
      nodes = $.List_List$from(e.get$nodes());
      $.addAll(this.get$nodes(), nodes);
    } else
      return Object.prototype.set$innerHtml.call(this, value);
  },
  $$dom_querySelector$1: function(selectors) {
    return this.querySelector(selectors);
  },
  $$dom_querySelectorAll$1: function(selectors) {
    return this.querySelectorAll(selectors);
  }
});

$.$defineNativeClass("DOMException", {
  toString$0: function() {
    return this.toString();
  }
});

$.$defineNativeClass("Element", {"": "$$dom_children:children~,id>,innerHtml:innerHTML|,$$dom_className:className},$$dom_firstElementChild:firstElementChild~,$$dom_lastElementChild:lastElementChild~,style>",
  get$attributes: function() {
    return $._ElementAttributeMap$(this);
  },
  get$children: function() {
    if (Object.getPrototypeOf(this).hasOwnProperty("get$children")) {
      return $._ChildrenElementList$_wrap(this);
    } else
      return Object.prototype.get$children.call(this);
  },
  set$children: function(value) {
    if (Object.getPrototypeOf(this).hasOwnProperty("set$children")) {
      var copy, children, t1;
      copy = $.List_List$from(value);
      children = this.get$children();
      t1 = $.getInterceptor$JSArray(children);
      t1.clear$0(children);
      t1.addAll$1(children, copy);
    } else
      return Object.prototype.set$children.call(this, value);
  },
  query$1: function(selectors) {
    return this.$$dom_querySelector$1(selectors);
  },
  queryAll$1: function(selectors) {
    return $._FrozenElementList$_wrap(this.$$dom_querySelectorAll$1(selectors));
  },
  get$classes: function() {
    if (Object.getPrototypeOf(this).hasOwnProperty("get$classes")) {
      return $._ElementCssClassSet$(this);
    } else
      return Object.prototype.get$classes.call(this);
  },
  focus$0: function() {
    return this.focus();
  },
  $$dom_getAttribute$1: function($name) {
    return this.getAttribute($name);
  },
  $$dom_hasAttribute$1: function($name) {
    return this.hasAttribute($name);
  },
  $$dom_querySelector$1: function(selectors) {
    return this.querySelector(selectors);
  },
  $$dom_querySelectorAll$1: function(selectors) {
    return this.querySelectorAll(selectors);
  },
  $$dom_removeAttribute$1: function($name) {
    return this.removeAttribute($name);
  },
  $$dom_setAttribute$2: function($name, value) {
    return this.setAttribute($name,value);
  },
  get$onBlur: function() {
    if (Object.getPrototypeOf(this).hasOwnProperty("get$onBlur")) {
      return $.CONSTANT8.forTarget$1(this);
    } else
      return Object.prototype.get$onBlur.call(this);
  },
  get$onChange: function() {
    return $.CONSTANT15.forTarget$1(this);
  },
  get$onClick: function() {
    return $.CONSTANT12.forTarget$1(this);
  },
  get$onFocus: function() {
    if (Object.getPrototypeOf(this).hasOwnProperty("get$onFocus")) {
      return $.CONSTANT10.forTarget$1(this);
    } else
      return Object.prototype.get$onFocus.call(this);
  },
  get$onKeyDown: function() {
    return $.CONSTANT17.forTarget$1(this);
  },
  get$onKeyUp: function() {
    return $.CONSTANT16.forTarget$1(this);
  },
  get$onMouseDown: function() {
    return $.CONSTANT13.forTarget$1(this);
  },
  get$onMouseUp: function() {
    return $.CONSTANT11.forTarget$1(this);
  },
  get$onReset: function() {
    return $.CONSTANT14.forTarget$1(this);
  },
  $isElement: function() {
    return true;
  },
  $asElement: function() {
    return null;
  }
});

$.$defineNativeClass("HTMLEmbedElement", {"": "type>"});

$.$defineNativeClass("Event", {"": "type>",
  get$target: function() {
    return $._convertNativeToDart_EventTarget(this.target);
  },
  preventDefault$0: function() {
    return this.preventDefault();
  }
});

$.$defineNativeClass("EventException", {
  toString$0: function() {
    return this.toString();
  }
});

$.$defineNativeClass("EventTarget", {
  $$dom_addEventListener$3: function(type, listener, useCapture) {
    if (Object.getPrototypeOf(this).hasOwnProperty("$$dom_addEventListener$3")) {
      return this.addEventListener(type,$.convertDartClosureToJS(listener, 1),useCapture);
    } else
      return Object.prototype.$$dom_addEventListener$3.call(this, type, listener, useCapture);
  },
  $$dom_removeEventListener$3: function(type, listener, useCapture) {
    if (Object.getPrototypeOf(this).hasOwnProperty("$$dom_removeEventListener$3")) {
      return this.removeEventListener(type,$.convertDartClosureToJS(listener, 1),useCapture);
    } else
      return Object.prototype.$$dom_removeEventListener$3.call(this, type, listener, useCapture);
  }
});

$.$defineNativeClass("HTMLFieldSetElement", {"": "type>"});

$.$defineNativeClass("FileException", {
  toString$0: function() {
    return this.toString();
  }
});

$.$defineNativeClass("HTMLFormElement", {"": "length>,target>",
  reset$0: function() {
    return this.reset();
  }
});

$.$defineNativeClass("HTMLCollection", {
  get$length: function() {
    return this.length;
  },
  $index: function(index) {
    return this[index];
  },
  $indexSet: function(index, value) {
    throw $.$$throw($.UnsupportedError$("Cannot assign element of immutable List."));
  },
  get$iterator: function() {
    return $.FixedSizeListIterator$(this);
  },
  contains$1: function(element) {
    return $.IterableMixinWorkaround_contains(this, element);
  },
  get$contains: function() {
    return new $.BoundClosure$1(this, "contains$1");
  },
  forEach$1: function(f) {
    var t1;
    for (t1 = this.get$iterator(); t1.moveNext$0() === true;)
      f.call$1(t1.get$current());
    return;
  },
  join$1: function(separator) {
    return $.IterableMixinWorkaround_joinList(this, separator);
  },
  where$1: function(f) {
    return $.WhereIterable$(this, f);
  },
  toList$0: function() {
    return $.List_List$from(this);
  },
  get$isEmpty: function() {
    var t1 = this.get$length();
    if (typeof t1 !== "number")
      return this.get$isEmpty$bailout(1, t1);
    return t1 === 0;
  },
  get$isEmpty$bailout: function(state0, t1) {
    return $.$$eq(t1, 0);
  },
  elementAt$1: function(index) {
    return this.$index(index);
  },
  add$1: function(value) {
    throw $.$$throw($.UnsupportedError$("Cannot add to immutable List."));
  },
  addLast$1: function(value) {
    throw $.$$throw($.UnsupportedError$("Cannot add to immutable List."));
  },
  addAll$1: function(iterable) {
    throw $.$$throw($.UnsupportedError$("Cannot add to immutable List."));
  },
  clear$0: function() {
    throw $.$$throw($.UnsupportedError$("Cannot clear immutable List."));
  },
  indexOf$2: function(element, start) {
    return $.Lists_indexOf(this, element, start, this.get$length());
  },
  indexOf$1: function(element) {
    return this.indexOf$2(element, 0);
  },
  get$last: function() {
    if ($.$$gt(this.get$length(), 0) === true)
      return this.$index($.$$sub(this.get$length(), 1));
    throw $.$$throw($.StateError$("No elements"));
  },
  removeLast$0: function() {
    throw $.$$throw($.UnsupportedError$("Cannot remove from immutable List."));
  },
  remove$1: function(object) {
    throw $.$$throw($.UnsupportedError$("Cannot remove from immutable List."));
  },
  setRange$4: function(start, rangeLength, from, startFrom) {
    throw $.$$throw($.UnsupportedError$("Cannot setRange on immutable List."));
  },
  $isList: function() {
    return true;
  },
  $asList: function() {
    return function () { return [$.Node]; };
  },
  $isCollection: function() {
    return true;
  },
  $asCollection: function() {
    return function () { return [$.Node]; };
  },
  $isJavaScriptIndexingBehavior: function() {
    return true;
  },
  $asJavaScriptIndexingBehavior: function() {
    return null;
  }
});

$.$defineNativeClass("HTMLDocument", {
  register$2: function(tagName, elementClass) {
    throw $.$$throw($._ExceptionImplementation$("Not yet implemented"));
  },
  get$head: function() {
    return $.document().get$$$dom_head();
  }
});

$.$defineNativeClass("XMLHttpRequestException", {
  toString$0: function() {
    return this.toString();
  }
});

$.$defineNativeClass("HTMLImageElement", {
  complete$1: function(arg0) {
    return this.complete.call$1(arg0);
  }
});

$.$defineNativeClass("HTMLInputElement", {"": "pattern>,type>,value>",
  $isElement: function() {
    return true;
  },
  $asElement: function() {
    return null;
  },
  $isNode: function() {
    return true;
  },
  $asNode: function() {
    return null;
  }
});

$.$defineNativeClass("KeyboardEvent", {"": "ctrlKey>",
  get$keyCode: function() {
    return this.keyCode;
  }
});

$.$defineNativeClass("HTMLKeygenElement", {"": "type>"});

$.$defineNativeClass("HTMLLIElement", {"": "type>,value>"});

$.$defineNativeClass("HTMLLinkElement", {"": "href<,type>"});

$.$defineNativeClass("Location", {"": "href<",
  toString$0: function() {
    return this.toString();
  },
  $isLocation: function() {
    return true;
  },
  $asLocation: function() {
    return null;
  }
});

$.$defineNativeClass("HTMLMediaElement", {"": "error>"});

$.$defineNativeClass("MessageEvent", {"": "ports>"});

$.$defineNativeClass("HTMLMeterElement", {"": "value>"});

$.$defineNativeClass("MouseEvent", {"": "ctrlKey>"});

$.$defineNativeClass("Node", {"": "$$dom_attributes:attributes~,$$dom_childNodes:childNodes~,$$dom_localName:localName~,$$dom_namespaceUri:namespaceURI~,text:textContent}",
  get$nodes: function() {
    return $._ChildNodeListLazy$(this);
  },
  remove$0: function() {
    var t1 = this.parentNode;
    if (!(t1 == null))
      t1.$$dom_removeChild$1(this);
  },
  replaceWith$1: function(otherNode) {
    var $parent, exception;
    try {
      $parent = this.parentNode;
      $parent.$$dom_replaceChild$2(otherNode, this);
    } catch (exception) {
      $.unwrapException(exception);
    }

    return this;
  },
  $$dom_addEventListener$3: function(type, listener, useCapture) {
    return this.addEventListener(type,$.convertDartClosureToJS(listener, 1),useCapture);
  },
  $$dom_appendChild$1: function(newChild) {
    return this.appendChild(newChild);
  },
  contains$1: function(other) {
    return this.contains(other);
  },
  get$contains: function() {
    return new $.BoundClosure$1(this, "contains$1");
  },
  $$dom_removeChild$1: function(oldChild) {
    return this.removeChild(oldChild);
  },
  $$dom_removeEventListener$3: function(type, listener, useCapture) {
    return this.removeEventListener(type,$.convertDartClosureToJS(listener, 1),useCapture);
  },
  $$dom_replaceChild$2: function(newChild, oldChild) {
    return this.replaceChild(newChild,oldChild);
  },
  $isNode: function() {
    return true;
  },
  $asNode: function() {
    return null;
  }
});

$.$defineNativeClass("NodeList", {
  get$length: function() {
    return this.length;
  },
  $index: function(index) {
    return this[index];
  },
  $indexSet: function(index, value) {
    throw $.$$throw($.UnsupportedError$("Cannot assign element of immutable List."));
  },
  get$iterator: function() {
    return $.FixedSizeListIterator$(this);
  },
  contains$1: function(element) {
    return $.IterableMixinWorkaround_contains(this, element);
  },
  get$contains: function() {
    return new $.BoundClosure$1(this, "contains$1");
  },
  forEach$1: function(f) {
    var t1;
    for (t1 = this.get$iterator(); t1.moveNext$0() === true;)
      f.call$1(t1.get$current());
    return;
  },
  join$1: function(separator) {
    return $.IterableMixinWorkaround_joinList(this, separator);
  },
  where$1: function(f) {
    return $.WhereIterable$(this, f);
  },
  toList$0: function() {
    return $.List_List$from(this);
  },
  get$isEmpty: function() {
    var t1 = this.get$length();
    if (typeof t1 !== "number")
      return this.get$isEmpty$bailout(1, t1);
    return t1 === 0;
  },
  get$isEmpty$bailout: function(state0, t1) {
    return $.$$eq(t1, 0);
  },
  elementAt$1: function(index) {
    return this.$index(index);
  },
  add$1: function(value) {
    throw $.$$throw($.UnsupportedError$("Cannot add to immutable List."));
  },
  addLast$1: function(value) {
    throw $.$$throw($.UnsupportedError$("Cannot add to immutable List."));
  },
  addAll$1: function(iterable) {
    throw $.$$throw($.UnsupportedError$("Cannot add to immutable List."));
  },
  clear$0: function() {
    throw $.$$throw($.UnsupportedError$("Cannot clear immutable List."));
  },
  indexOf$2: function(element, start) {
    return $.Lists_indexOf(this, element, start, this.get$length());
  },
  indexOf$1: function(element) {
    return this.indexOf$2(element, 0);
  },
  get$last: function() {
    if ($.$$gt(this.get$length(), 0) === true)
      return this.$index($.$$sub(this.get$length(), 1));
    throw $.$$throw($.StateError$("No elements"));
  },
  removeLast$0: function() {
    throw $.$$throw($.UnsupportedError$("Cannot remove from immutable List."));
  },
  remove$1: function(object) {
    throw $.$$throw($.UnsupportedError$("Cannot remove from immutable List."));
  },
  setRange$4: function(start, rangeLength, from, startFrom) {
    throw $.$$throw($.UnsupportedError$("Cannot setRange on immutable List."));
  },
  $isList: function() {
    return true;
  },
  $asList: function() {
    return function () { return [$.Node]; };
  },
  $isCollection: function() {
    return true;
  },
  $asCollection: function() {
    return function () { return [$.Node]; };
  },
  $isJavaScriptIndexingBehavior: function() {
    return true;
  },
  $asJavaScriptIndexingBehavior: function() {
    return null;
  }
});

$.$defineNativeClass("HTMLOListElement", {"": "type>"});

$.$defineNativeClass("HTMLObjectElement", {"": "type>"});

$.$defineNativeClass("HTMLOptionElement", {"": "value>"});

$.$defineNativeClass("HTMLOutputElement", {"": "type>,value>"});

$.$defineNativeClass("HTMLParamElement", {"": "value>"});

$.$defineNativeClass("ProcessingInstruction", {"": "target>"});

$.$defineNativeClass("HTMLProgressElement", {"": "value>"});

$.$defineNativeClass("RadioNodeList", {"": "value>"});

$.$defineNativeClass("RangeException", {
  toString$0: function() {
    return this.toString();
  }
});

$.$defineNativeClass("HTMLScriptElement", {"": "type>"});

$.$defineNativeClass("HTMLSelectElement", {"": "length>,type>,value>"});

$.$defineNativeClass("ShadowRoot", {"": "innerHtml:innerHTML|"});

$.$defineNativeClass("HTMLSourceElement", {"": "type>"});

$.$defineNativeClass("SpeechRecognitionError", {"": "error>"});

$.$defineNativeClass("StorageEvent", {"": "url>"});

$.$defineNativeClass("HTMLStyleElement", {"": "type>"});

$.$defineNativeClass("HTMLTableElement", {"": "rows>",
  insertRow$1: function(index) {
    return this.insertRow(index);
  }
});

$.$defineNativeClass("HTMLTableSectionElement", {"": "rows>",
  insertRow$1: function(index) {
    return this.insertRow(index);
  }
});

$.$defineNativeClass("HTMLTextAreaElement", {"": "rows>,type>,value>"});

$.$defineNativeClass("TouchEvent", {"": "ctrlKey>"});

$.$defineNativeClass("HTMLTrackElement", {"": "kind>"});

$.$defineNativeClass("Uint8Array", {
  get$length: function() {
    if (Object.getPrototypeOf(this).hasOwnProperty("get$length")) {
      return this.length;
    } else
      return Object.prototype.get$length.call(this);
  },
  $index: function(index) {
    if (Object.getPrototypeOf(this).hasOwnProperty("$index")) {
      return this[index];
    } else
      return Object.prototype.$index.call(this, index);
  },
  $indexSet: function(index, value) {
    if (Object.getPrototypeOf(this).hasOwnProperty("$indexSet")) {
      this[index] = value;
    } else
      return Object.prototype.$indexSet.call(this, index, value);
  },
  get$iterator: function() {
    if (Object.getPrototypeOf(this).hasOwnProperty("get$iterator")) {
      return $.FixedSizeListIterator$(this);
    } else
      return Object.prototype.get$iterator.call(this);
  },
  contains$1: function(element) {
    if (Object.getPrototypeOf(this).hasOwnProperty("contains$1")) {
      return $.IterableMixinWorkaround_contains(this, element);
    } else
      return Object.prototype.contains$1.call(this, element);
  },
  get$contains: function() {
    return new $.BoundClosure$1(this, "contains$1");
  },
  forEach$1: function(f) {
    if (Object.getPrototypeOf(this).hasOwnProperty("forEach$1")) {
      var t1;
      for (t1 = this.get$iterator(); t1.moveNext$0() === true;)
        f.call$1(t1.get$current());
      return;
    } else
      return Object.prototype.forEach$1.call(this, f);
  },
  join$1: function(separator) {
    if (Object.getPrototypeOf(this).hasOwnProperty("join$1")) {
      return $.IterableMixinWorkaround_joinList(this, separator);
    } else
      return Object.prototype.join$1.call(this, separator);
  },
  where$1: function(f) {
    if (Object.getPrototypeOf(this).hasOwnProperty("where$1")) {
      return $.WhereIterable$(this, f);
    } else
      return Object.prototype.where$1.call(this, f);
  },
  toList$0: function() {
    if (Object.getPrototypeOf(this).hasOwnProperty("toList$0")) {
      return $.List_List$from(this);
    } else
      return Object.prototype.toList$0.call(this);
  },
  get$isEmpty: function() {
    if (Object.getPrototypeOf(this).hasOwnProperty("get$isEmpty")) {
      var t1 = this.get$length();
      if (typeof t1 !== "number")
        return this.get$isEmpty$bailout(1, t1);
      return t1 === 0;
    } else
      return Object.prototype.get$isEmpty.call(this);
  },
  get$isEmpty$bailout: function(state0, t1) {
    return $.$$eq(t1, 0);
  },
  elementAt$1: function(index) {
    if (Object.getPrototypeOf(this).hasOwnProperty("elementAt$1")) {
      return this.$index(index);
    } else
      return Object.prototype.elementAt$1.call(this, index);
  },
  add$1: function(value) {
    if (Object.getPrototypeOf(this).hasOwnProperty("add$1")) {
      throw $.$$throw($.UnsupportedError$("Cannot add to immutable List."));
    } else
      return Object.prototype.add$1.call(this, value);
  },
  addLast$1: function(value) {
    if (Object.getPrototypeOf(this).hasOwnProperty("addLast$1")) {
      throw $.$$throw($.UnsupportedError$("Cannot add to immutable List."));
    } else
      return Object.prototype.addLast$1.call(this, value);
  },
  addAll$1: function(iterable) {
    if (Object.getPrototypeOf(this).hasOwnProperty("addAll$1")) {
      throw $.$$throw($.UnsupportedError$("Cannot add to immutable List."));
    } else
      return Object.prototype.addAll$1.call(this, iterable);
  },
  clear$0: function() {
    if (Object.getPrototypeOf(this).hasOwnProperty("clear$0")) {
      throw $.$$throw($.UnsupportedError$("Cannot clear immutable List."));
    } else
      return Object.prototype.clear$0.call(this);
  },
  indexOf$2: function(element, start) {
    if (Object.getPrototypeOf(this).hasOwnProperty("indexOf$2")) {
      return $.Lists_indexOf(this, element, start, this.get$length());
    } else
      return Object.prototype.indexOf$2.call(this, element, start);
  },
  indexOf$1: function(element) {
    return this.indexOf$2(element, 0);
  },
  get$last: function() {
    if (Object.getPrototypeOf(this).hasOwnProperty("get$last")) {
      if ($.$$gt(this.get$length(), 0) === true)
        return this.$index($.$$sub(this.get$length(), 1));
      throw $.$$throw($.StateError$("No elements"));
    } else
      return Object.prototype.get$last.call(this);
  },
  removeLast$0: function() {
    if (Object.getPrototypeOf(this).hasOwnProperty("removeLast$0")) {
      throw $.$$throw($.UnsupportedError$("Cannot remove from immutable List."));
    } else
      return Object.prototype.removeLast$0.call(this);
  },
  remove$1: function(object) {
    if (Object.getPrototypeOf(this).hasOwnProperty("remove$1")) {
      throw $.$$throw($.UnsupportedError$("Cannot remove from immutable List."));
    } else
      return Object.prototype.remove$1.call(this, object);
  },
  setRange$4: function(start, rangeLength, from, startFrom) {
    if (Object.getPrototypeOf(this).hasOwnProperty("setRange$4")) {
      throw $.$$throw($.UnsupportedError$("Cannot setRange on immutable List."));
    } else
      return Object.prototype.setRange$4.call(this, start, rangeLength, from, startFrom);
  },
  $isList: function() {
    return true;
  },
  $asList: function() {
    return function () { return [$.$int]; };
  },
  $isCollection: function() {
    return true;
  },
  $asCollection: function() {
    return function () { return [$.$int]; };
  },
  $isJavaScriptIndexingBehavior: function() {
    return true;
  },
  $asJavaScriptIndexingBehavior: function() {
    return null;
  }
});

$.$defineNativeClass("Uint8ClampedArray", {
  $index: function(index) {
    return this[index];
  },
  $indexSet: function(index, value) {
    this[index] = value;
  },
  get$iterator: function() {
    return $.FixedSizeListIterator$(this);
  },
  contains$1: function(element) {
    return $.IterableMixinWorkaround_contains(this, element);
  },
  get$contains: function() {
    return new $.BoundClosure$1(this, "contains$1");
  },
  forEach$1: function(f) {
    var t1;
    for (t1 = this.get$iterator(); t1.moveNext$0() === true;)
      f.call$1(t1.get$current());
    return;
  },
  join$1: function(separator) {
    return $.IterableMixinWorkaround_joinList(this, separator);
  },
  where$1: function(f) {
    return $.WhereIterable$(this, f);
  },
  toList$0: function() {
    return $.List_List$from(this);
  },
  get$isEmpty: function() {
    var t1 = this.get$length();
    if (typeof t1 !== "number")
      return this.get$isEmpty$bailout1(1, t1);
    return t1 === 0;
  },
  get$isEmpty$bailout1: function(state0, t1) {
    return $.$$eq(t1, 0);
  },
  elementAt$1: function(index) {
    return this.$index(index);
  },
  add$1: function(value) {
    throw $.$$throw($.UnsupportedError$("Cannot add to immutable List."));
  },
  addLast$1: function(value) {
    throw $.$$throw($.UnsupportedError$("Cannot add to immutable List."));
  },
  addAll$1: function(iterable) {
    throw $.$$throw($.UnsupportedError$("Cannot add to immutable List."));
  },
  clear$0: function() {
    throw $.$$throw($.UnsupportedError$("Cannot clear immutable List."));
  },
  indexOf$2: function(element, start) {
    return $.Lists_indexOf(this, element, start, this.get$length());
  },
  indexOf$1: function(element) {
    return this.indexOf$2(element, 0);
  },
  get$last: function() {
    if ($.$$gt(this.get$length(), 0) === true)
      return this.$index($.$$sub(this.get$length(), 1));
    throw $.$$throw($.StateError$("No elements"));
  },
  removeLast$0: function() {
    throw $.$$throw($.UnsupportedError$("Cannot remove from immutable List."));
  },
  remove$1: function(object) {
    throw $.$$throw($.UnsupportedError$("Cannot remove from immutable List."));
  },
  setRange$4: function(start, rangeLength, from, startFrom) {
    throw $.$$throw($.UnsupportedError$("Cannot setRange on immutable List."));
  },
  $isList: function() {
    return true;
  },
  $asList: function() {
    return function () { return [$.$int]; };
  },
  $isCollection: function() {
    return true;
  },
  $asCollection: function() {
    return function () { return [$.$int]; };
  },
  $isJavaScriptIndexingBehavior: function() {
    return true;
  },
  $asJavaScriptIndexingBehavior: function() {
    return null;
  }
});

$.$defineNativeClass("DOMWindow", {
  get$location: function() {
    var result = this.get$_location();
    if ($.Window__isDartLocation(result))
      return result;
    if (null == this._location_wrapper)
      this._location_wrapper = $._LocationWrapper$(result);
    return this._location_wrapper;
  },
  get$_location: function() {
    return this.location;
  },
  $$dom_addEventListener$3: function(type, listener, useCapture) {
    return this.addEventListener(type,$.convertDartClosureToJS(listener, 1),useCapture);
  },
  close$0: function() {
    return this.close();
  },
  $$dom_removeEventListener$3: function(type, listener, useCapture) {
    return this.removeEventListener(type,$.convertDartClosureToJS(listener, 1),useCapture);
  },
  get$onBlur: function() {
    return $.CONSTANT8.forTarget$1(this);
  },
  get$onChange: function() {
    return $.CONSTANT15.forTarget$1(this);
  },
  get$onClick: function() {
    return $.CONSTANT12.forTarget$1(this);
  },
  get$onFocus: function() {
    return $.CONSTANT10.forTarget$1(this);
  },
  get$onKeyDown: function() {
    return $.CONSTANT17.forTarget$1(this);
  },
  get$onKeyUp: function() {
    return $.CONSTANT16.forTarget$1(this);
  },
  get$onMouseDown: function() {
    return $.CONSTANT13.forTarget$1(this);
  },
  get$onMouseUp: function() {
    return $.CONSTANT11.forTarget$1(this);
  },
  get$onReset: function() {
    return $.CONSTANT14.forTarget$1(this);
  }
});

$.$defineNativeClass("XPathException", {
  toString$0: function() {
    return this.toString();
  }
});

$.$defineNativeClass("NamedNodeMap", {
  get$length: function() {
    return this.length;
  },
  $index: function(index) {
    return this[index];
  },
  $indexSet: function(index, value) {
    throw $.$$throw($.UnsupportedError$("Cannot assign element of immutable List."));
  },
  get$iterator: function() {
    return $.FixedSizeListIterator$(this);
  },
  contains$1: function(element) {
    return $.IterableMixinWorkaround_contains(this, element);
  },
  get$contains: function() {
    return new $.BoundClosure$1(this, "contains$1");
  },
  forEach$1: function(f) {
    var t1;
    for (t1 = this.get$iterator(); t1.moveNext$0() === true;)
      f.call$1(t1.get$current());
    return;
  },
  join$1: function(separator) {
    return $.IterableMixinWorkaround_joinList(this, separator);
  },
  where$1: function(f) {
    return $.WhereIterable$(this, f);
  },
  toList$0: function() {
    return $.List_List$from(this);
  },
  get$isEmpty: function() {
    var t1 = this.get$length();
    if (typeof t1 !== "number")
      return this.get$isEmpty$bailout(1, t1);
    return t1 === 0;
  },
  get$isEmpty$bailout: function(state0, t1) {
    return $.$$eq(t1, 0);
  },
  elementAt$1: function(index) {
    return this.$index(index);
  },
  add$1: function(value) {
    throw $.$$throw($.UnsupportedError$("Cannot add to immutable List."));
  },
  addLast$1: function(value) {
    throw $.$$throw($.UnsupportedError$("Cannot add to immutable List."));
  },
  addAll$1: function(iterable) {
    throw $.$$throw($.UnsupportedError$("Cannot add to immutable List."));
  },
  clear$0: function() {
    throw $.$$throw($.UnsupportedError$("Cannot clear immutable List."));
  },
  indexOf$2: function(element, start) {
    return $.Lists_indexOf(this, element, start, this.get$length());
  },
  indexOf$1: function(element) {
    return this.indexOf$2(element, 0);
  },
  get$last: function() {
    if ($.$$gt(this.get$length(), 0) === true)
      return this.$index($.$$sub(this.get$length(), 1));
    throw $.$$throw($.StateError$("No elements"));
  },
  removeLast$0: function() {
    throw $.$$throw($.UnsupportedError$("Cannot remove from immutable List."));
  },
  remove$1: function(object) {
    throw $.$$throw($.UnsupportedError$("Cannot remove from immutable List."));
  },
  setRange$4: function(start, rangeLength, from, startFrom) {
    throw $.$$throw($.UnsupportedError$("Cannot setRange on immutable List."));
  },
  $isList: function() {
    return true;
  },
  $asList: function() {
    return function () { return [$.Node]; };
  },
  $isCollection: function() {
    return true;
  },
  $asCollection: function() {
    return function () { return [$.Node]; };
  },
  $isJavaScriptIndexingBehavior: function() {
    return true;
  },
  $asJavaScriptIndexingBehavior: function() {
    return null;
  }
});

$.$defineNativeClass("SVGAElement", {"": "target>"});

$.$defineNativeClass("SVGFEColorMatrixElement", {"": "type>"});

$.$defineNativeClass("SVGFETurbulenceElement", {"": "type>"});

$.$defineNativeClass("SVGScriptElement", {"": "type>"});

$.$defineNativeClass("SVGStyleElement", {"": "type>"});

$.$defineNativeClass("SVGElement", {
  get$classes: function() {
    if (this._cssClassSet == null)
      this._cssClassSet = $._AttributeClassSet$(this);
    return this._cssClassSet;
  },
  get$children: function() {
    return $.FilteredElementList$(this);
  },
  set$children: function(value) {
    var children, t1;
    children = this.get$children();
    t1 = $.getInterceptor$JSArray(children);
    t1.clear$0(children);
    t1.addAll$1(children, value);
  },
  set$innerHtml: function(svg) {
    var container = $.Element_Element$tag("div");
    container.set$innerHtml("<svg version=\"1.1\">" + $.S(svg) + "</svg>");
    this.set$children($.$$index(container.get$children(), 0).get$children());
  },
  get$$$dom_children: function() {
    throw $.$$throw($.UnsupportedError$("Cannot get dom_children on SVG."));
  },
  get$id: function() {
    return this.id;
  }
});

$.$defineNativeClass("SVGException", {
  toString$0: function() {
    return this.toString();
  }
});

$.$defineNativeClass("SVGComponentTransferFunctionElement", {"": "type>"});

// 70 dynamic classes.
// 233 classes
// 22 !leaf
(function() {
  var v0__SVGComponentTransferFunctionElement = "SVGComponentTransferFunctionElement|SVGFEFuncAElement|SVGFEFuncBElement|SVGFEFuncGElement|SVGFEFuncRElement", v1_MediaElement = "HTMLMediaElement|HTMLVideoElement|HTMLAudioElement", v2_SvgElement = [v0__SVGComponentTransferFunctionElement, "SVGElement|SVGStyledElement|SVGAElement|SVGTextContentElement|SVGTextPositioningElement|SVGAltGlyphElement|SVGTSpanElement|SVGTextElement|SVGTRefElement|SVGTextPathElement|SVGCircleElement|SVGClipPathElement|SVGDefsElement|SVGDescElement|SVGEllipseElement|SVGFEBlendElement|SVGFEColorMatrixElement|SVGFEComponentTransferElement|SVGFECompositeElement|SVGFEConvolveMatrixElement|SVGFEDiffuseLightingElement|SVGFEDisplacementMapElement|SVGFEFloodElement|SVGFEGaussianBlurElement|SVGFEImageElement|SVGFEMergeElement|SVGFEMorphologyElement|SVGFEOffsetElement|SVGFESpecularLightingElement|SVGFETileElement|SVGFETurbulenceElement|SVGFilterElement|SVGForeignObjectElement|SVGGElement|SVGImageElement|SVGLineElement|SVGGradientElement|SVGLinearGradientElement|SVGRadialGradientElement|SVGMarkerElement|SVGMaskElement|SVGPathElement|SVGPatternElement|SVGPolygonElement|SVGPolylineElement|SVGRectElement|SVGStopElement|SVGSVGElement|SVGSwitchElement|SVGSymbolElement|SVGTitleElement|SVGUseElement|SVGFEDropShadowElement|SVGGlyphRefElement|SVGMissingGlyphElement|SVGAnimationElement|SVGAnimateElement|SVGAnimateMotionElement|SVGAnimateTransformElement|SVGSetElement|SVGAnimateColorElement|SVGFEDistantLightElement|SVGFEMergeNodeElement|SVGFEPointLightElement|SVGFESpotLightElement|SVGMetadataElement|SVGScriptElement|SVGStyleElement|SVGViewElement|SVGAltGlyphDefElement|SVGAltGlyphItemElement|SVGCursorElement|SVGFontElement|SVGFontFaceElement|SVGFontFaceFormatElement|SVGFontFaceNameElement|SVGFontFaceSrcElement|SVGFontFaceUriElement|SVGGlyphElement|SVGMPathElement|SVGVKernElement|SVGHKernElement"].join("|"), v3_Element = [v1_MediaElement, v2_SvgElement, "Element|HTMLPreElement|HTMLProgressElement|HTMLQuoteElement|HTMLScriptElement|HTMLSelectElement|HTMLShadowElement|HTMLSourceElement|HTMLSpanElement|HTMLStyleElement|HTMLTableCaptionElement|HTMLTableCellElement|HTMLTableColElement|HTMLTableElement|HTMLTableRowElement|HTMLTableSectionElement|HTMLTextAreaElement|HTMLTitleElement|HTMLTrackElement|HTMLUListElement|HTMLUnknownElement|HTMLAppletElement|HTMLBaseFontElement|HTMLDirectoryElement|HTMLFontElement|HTMLFrameElement|HTMLFrameSetElement|HTMLMarqueeElement|HTMLElement|HTMLAnchorElement|HTMLAreaElement|HTMLBRElement|HTMLBaseElement|HTMLBodyElement|HTMLButtonElement|HTMLCanvasElement|HTMLContentElement|HTMLDListElement|HTMLDataListElement|HTMLDetailsElement|HTMLDivElement|HTMLEmbedElement|HTMLFieldSetElement|HTMLFormElement|HTMLHRElement|HTMLHeadElement|HTMLHeadingElement|HTMLHtmlElement|HTMLIFrameElement|HTMLImageElement|HTMLInputElement|HTMLKeygenElement|HTMLLIElement|HTMLLabelElement|HTMLLegendElement|HTMLLinkElement|HTMLMapElement|HTMLMenuElement|HTMLMetaElement|HTMLMeterElement|HTMLModElement|HTMLOListElement|HTMLObjectElement|HTMLOptGroupElement|HTMLOptionElement|HTMLOutputElement|HTMLParagraphElement|HTMLParamElement"].join("|"), v4_DocumentFragment = "DocumentFragment|ShadowRoot", v5_CharacterData = "CharacterData|Text|CDATASection|Comment", v6_Document = "Document|SVGDocument|HTMLDocument", v7_MouseEvent = "MouseEvent|WheelEvent", v8_Node = [v3_Element, v4_DocumentFragment, v5_CharacterData, v6_Document, "Node|ProcessingInstruction|Attr|DocumentType|EntityReference|Notation"].join("|");
  $.dynamicSetMetadata([["HTMLCollection", "HTMLCollection|HTMLFormControlsCollection|HTMLOptionsCollection"], ["CharacterData", v5_CharacterData], ["SVGComponentTransferFunctionElement", v0__SVGComponentTransferFunctionElement], ["SVGElement", v2_SvgElement], ["HTMLMediaElement", v1_MediaElement], ["Uint8Array", "Uint8Array|Uint8ClampedArray"], ["Document", v6_Document], ["DocumentFragment", v4_DocumentFragment], ["MouseEvent", v7_MouseEvent], ["Element", v3_Element], ["Node", v8_Node], ["NodeList", "NodeList|RadioNodeList"], ["Event", [v7_MouseEvent, "Event|ProgressEvent|XMLHttpRequestProgressEvent|RTCDataChannelEvent|RTCIceCandidateEvent|SpeechInputEvent|SpeechRecognitionError|SpeechRecognitionEvent|StorageEvent|UIEvent|TextEvent|TouchEvent|CompositionEvent|SVGZoomEvent|KeyboardEvent|TrackEvent|TransitionEvent|WebGLContextEvent|WebKitTransitionEvent|IDBVersionChangeEvent|BeforeLoadEvent|CloseEvent|WebKitAnimationEvent|CustomEvent|ErrorEvent|DeviceOrientationEvent|DeviceMotionEvent|AudioProcessingEvent|OfflineAudioCompletionEvent|HashChangeEvent|MediaKeyEvent|MediaStreamEvent|MediaStreamTrackEvent|MessageEvent|MutationEvent|OverflowEvent|PageTransitionEvent|PopStateEvent"].join("|")], ["EventTarget", [v8_Node, "EventTarget|DOMWindow"].join("|")]]);
})();

$.main.call$0 = $.main;

//
// BEGIN invoke [main].
//
if (typeof document !== 'undefined' && document.readyState !== 'complete') {
  document.addEventListener('readystatechange', function () {
    if (document.readyState == 'complete') {
      if (typeof dartMainRunner === 'function') {
        dartMainRunner(function() { $.startRootIsolate($.main); });
      } else {
        $.startRootIsolate($.main);
      }
    }
  }, false);
} else {
  if (typeof dartMainRunner === 'function') {
    dartMainRunner(function() { $.startRootIsolate($.main); });
  } else {
    $.startRootIsolate($.main);
  }
}
//
// END invoke [main].
//

function init() {
Isolate.$isolateProperties = {};
function generateAccessor(field, prototype) {
  var len = field.length;
  var lastCharCode = field.charCodeAt(len - 1);
  var needsAccessor = (lastCharCode & 63) >= 60;
  if (needsAccessor) {
    var needsGetter = (lastCharCode & 3) > 0;
    var needsSetter = (lastCharCode & 2) == 0;
    var renaming = (lastCharCode & 64) != 0;
    var accessorName = field = field.substring(0, len - 1);
    if (renaming) {
      var divider = field.indexOf(":");
      accessorName = field.substring(0, divider);
      field = field.substring(divider + 1);
    }
    if (needsGetter) {
      var getterString = "return this." + field + ";";
      prototype["get$" + accessorName] =
          new Function(getterString);
    }
    if (needsSetter) {
      var setterString = "this." + field + " = v;";
      prototype["set$" + accessorName] =
          new Function("v", setterString);
    }
  }
  return field;
};
Isolate.$isolateProperties.$generateAccessor = generateAccessor;
Isolate.$defineClass = function(cls, fields, prototype) {
  var constructor;
  if (typeof fields == 'function') {
    constructor = fields;
  } else {
    var str = "function " + cls + "(";
    var body = "";
    for (var i = 0; i < fields.length; i++) {
      if (i != 0) str += ", ";
      var field = fields[i];
      field = generateAccessor(field, prototype);
      str += field;
      body += "this." + field + " = " + field + ";\n";
    }
    str += ") {" + body + "}\n";
    str += "return " + cls + ";";
    constructor = new Function(str)();
  }
  constructor.prototype = prototype;
  constructor.builtin$cls = cls;
  return constructor;
};
var supportsProto = false;
var tmp = Isolate.$defineClass('c', ['f?'], {}).prototype;
if (tmp.__proto__) {
  tmp.__proto__ = {};
  if (typeof tmp.get$f !== 'undefined') supportsProto = true;
}
Isolate.$pendingClasses = {};
Isolate.$finishClasses = function(collectedClasses) {
  var hasOwnProperty = Object.prototype.hasOwnProperty;
  for (var cls in collectedClasses) {
    if (hasOwnProperty.call(collectedClasses, cls)) {
      var desc = collectedClasses[cls];
      var fields = desc[''], supr;
      if (typeof fields == 'string') {
        var s = fields.split(';'); supr = s[0];
        fields = s[1] == '' ? [] : s[1].split(',');
      } else {
        supr = desc['super'];
      }
      Isolate.$isolateProperties[cls] = Isolate.$defineClass(cls, fields, desc);
      if (supr) Isolate.$pendingClasses[cls] = supr;
    }
  }
  var pendingClasses = Isolate.$pendingClasses;
  Isolate.$pendingClasses = {};
  var finishedClasses = {};
  function finishClass(cls) {
    var hasOwnProperty = Object.prototype.hasOwnProperty;
    if (hasOwnProperty.call(finishedClasses, cls)) return;
    finishedClasses[cls] = true;
    var superclass = pendingClasses[cls];
    if (!superclass) return;
    finishClass(superclass);
    var constructor = Isolate.$isolateProperties[cls];
    var superConstructor = Isolate.$isolateProperties[superclass];
    var prototype = constructor.prototype;
    if (supportsProto) {
      prototype.__proto__ = superConstructor.prototype;
      prototype.constructor = constructor;
    } else {
      function tmp() {};
      tmp.prototype = superConstructor.prototype;
      var newPrototype = new tmp();
      constructor.prototype = newPrototype;
      newPrototype.constructor = constructor;
      for (var member in prototype) {
        if (!member) continue;          if (hasOwnProperty.call(prototype, member)) {
          newPrototype[member] = prototype[member];
        }
      }
    }
  }
  for (var cls in pendingClasses) finishClass(cls);
};
Isolate.$lazy = function(prototype, staticName, fieldName, getterName, lazyValue) {
  var getter = new Function("{ return $." + fieldName + ";}");
  var sentinelUndefined = {};
  var sentinelInProgress = {};
  prototype[fieldName] = sentinelUndefined;
  prototype[getterName] = function() {
    var result = $[fieldName];
    try {
      if (result === sentinelUndefined) {
        $[fieldName] = sentinelInProgress;
        try {
          result = $[fieldName] = lazyValue();
        } finally {
          if (result === sentinelUndefined) {
            if ($[fieldName] === sentinelInProgress) {
              $[fieldName] = null;
            }
          }
        }
      } else if (result === sentinelInProgress) {
        $.throwCyclicInit(staticName);
      }
      return result;
    } finally {
      $[getterName] = getter;
    }
  };
};
Isolate.$finishIsolateConstructor = function(oldIsolate) {
  var isolateProperties = oldIsolate.$isolateProperties;
  var isolatePrototype = oldIsolate.prototype;
  var str = "{\n";
  str += "var properties = Isolate.$isolateProperties;\n";
  for (var staticName in isolateProperties) {
    if (Object.prototype.hasOwnProperty.call(isolateProperties, staticName)) {
      str += "this." + staticName + "= properties." + staticName + ";\n";
    }
  }
  str += "}\n";
  var newIsolate = new Function(str);
  newIsolate.prototype = isolatePrototype;
  isolatePrototype.constructor = newIsolate;
  newIsolate.$isolateProperties = isolateProperties;
  return newIsolate;
};
}
