{"version":3,"sources":["angular:main-server-inject-manifest:angular:main-server-inject-manifest","node_modules/@angular/platform-server/fesm2022/server.mjs","node_modules/@angular/platform-server/fesm2022/platform-server.mjs","node_modules/@angular/ssr/third_party/beasties/index.js","node_modules/@angular/ssr/fesm2022/ssr.mjs","src/app/core/components/footer/footer.component.ts","src/app/core/components/footer/footer.component.html","node_modules/@angular/common/locales/fr.js","src/app/app.component.ts","src/app/app.component.html","src/app/pages/blog/resolvers/article.resolver.ts","src/app/app.routes.ts","src/app/app.config.ts","src/app/app.routes.server.ts","src/app/app.config.server.ts","src/main.server.ts"],"sourcesContent":["import manifest from './angular-app-manifest.mjs';\nimport { ɵsetAngularAppManifest } from '@angular/ssr';\nɵsetAngularAppManifest(manifest);","/**\n * @license Angular v20.3.25\n * (c) 2010-2025 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nimport { ɵsetRootDomAdapter as _setRootDomAdapter, DOCUMENT, XhrFactory, PlatformLocation, ɵgetDOM as _getDOM, ɵPLATFORM_SERVER_ID as _PLATFORM_SERVER_ID, ViewportScroller, ɵNullViewportScroller as _NullViewportScroller } from '@angular/common';\nimport * as i0 from '@angular/core';\nimport { ɵRuntimeError as _RuntimeError, InjectionToken, inject, Injector, ɵstartMeasuring as _startMeasuring, ɵstopMeasuring as _stopMeasuring, Injectable, Inject, Optional, APP_ID, TransferState, PLATFORM_ID, PLATFORM_INITIALIZER, NgModule, ɵsetDocument as _setDocument, createPlatformFactory, platformCore, Testability, ɵTESTABILITY as _TESTABILITY } from '@angular/core';\nimport { ɵBrowserDomAdapter as _BrowserDomAdapter, EventManagerPlugin, EVENT_MANAGER_PLUGINS, BrowserModule } from '@angular/platform-browser';\nimport { ɵHTTP_ROOT_INTERCEPTOR_FNS as _HTTP_ROOT_INTERCEPTOR_FNS } from '@angular/common/http';\nimport { Subject } from 'rxjs';\nfunction getDefaultExportFromCjs(x) {\n  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\nvar lib = {};\nvar Event_1;\nvar hasRequiredEvent;\nfunction requireEvent() {\n  if (hasRequiredEvent) return Event_1;\n  hasRequiredEvent = 1;\n  Event_1 = Event;\n  Event.CAPTURING_PHASE = 1;\n  Event.AT_TARGET = 2;\n  Event.BUBBLING_PHASE = 3;\n  function Event(type, dictionary) {\n    // Initialize basic event properties\n    this.type = '';\n    this.target = null;\n    this.currentTarget = null;\n    this.eventPhase = Event.AT_TARGET;\n    this.bubbles = false;\n    this.cancelable = false;\n    this.isTrusted = false;\n    this.defaultPrevented = false;\n    this.timeStamp = Date.now();\n\n    // Initialize internal flags\n    // XXX: Would it be better to inherit these defaults from the prototype?\n    this._propagationStopped = false;\n    this._immediatePropagationStopped = false;\n    this._initialized = true;\n    this._dispatching = false;\n\n    // Now initialize based on the constructor arguments (if any)\n    if (type) this.type = type;\n    if (dictionary) {\n      for (var p in dictionary) {\n        this[p] = dictionary[p];\n      }\n    }\n  }\n  Event.prototype = Object.create(Object.prototype, {\n    constructor: {\n      value: Event\n    },\n    stopPropagation: {\n      value: function stopPropagation() {\n        this._propagationStopped = true;\n      }\n    },\n    stopImmediatePropagation: {\n      value: function stopImmediatePropagation() {\n        this._propagationStopped = true;\n        this._immediatePropagationStopped = true;\n      }\n    },\n    preventDefault: {\n      value: function preventDefault() {\n        if (this.cancelable) this.defaultPrevented = true;\n      }\n    },\n    initEvent: {\n      value: function initEvent(type, bubbles, cancelable) {\n        this._initialized = true;\n        if (this._dispatching) return;\n        this._propagationStopped = false;\n        this._immediatePropagationStopped = false;\n        this.defaultPrevented = false;\n        this.isTrusted = false;\n        this.target = null;\n        this.type = type;\n        this.bubbles = bubbles;\n        this.cancelable = cancelable;\n      }\n    }\n  });\n  return Event_1;\n}\nvar UIEvent_1;\nvar hasRequiredUIEvent;\nfunction requireUIEvent() {\n  if (hasRequiredUIEvent) return UIEvent_1;\n  hasRequiredUIEvent = 1;\n  var Event = requireEvent();\n  UIEvent_1 = UIEvent;\n  function UIEvent() {\n    // Just use the superclass constructor to initialize\n    Event.call(this);\n    this.view = null; // FF uses the current window\n    this.detail = 0;\n  }\n  UIEvent.prototype = Object.create(Event.prototype, {\n    constructor: {\n      value: UIEvent\n    },\n    initUIEvent: {\n      value: function (type, bubbles, cancelable, view, detail) {\n        this.initEvent(type, bubbles, cancelable);\n        this.view = view;\n        this.detail = detail;\n      }\n    }\n  });\n  return UIEvent_1;\n}\nvar MouseEvent_1;\nvar hasRequiredMouseEvent;\nfunction requireMouseEvent() {\n  if (hasRequiredMouseEvent) return MouseEvent_1;\n  hasRequiredMouseEvent = 1;\n  var UIEvent = requireUIEvent();\n  MouseEvent_1 = MouseEvent;\n  function MouseEvent() {\n    // Just use the superclass constructor to initialize\n    UIEvent.call(this);\n    this.screenX = this.screenY = this.clientX = this.clientY = 0;\n    this.ctrlKey = this.altKey = this.shiftKey = this.metaKey = false;\n    this.button = 0;\n    this.buttons = 1;\n    this.relatedTarget = null;\n  }\n  MouseEvent.prototype = Object.create(UIEvent.prototype, {\n    constructor: {\n      value: MouseEvent\n    },\n    initMouseEvent: {\n      value: function (type, bubbles, cancelable, view, detail, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey, button, relatedTarget) {\n        this.initEvent(type, bubbles, cancelable, view, detail);\n        this.screenX = screenX;\n        this.screenY = screenY;\n        this.clientX = clientX;\n        this.clientY = clientY;\n        this.ctrlKey = ctrlKey;\n        this.altKey = altKey;\n        this.shiftKey = shiftKey;\n        this.metaKey = metaKey;\n        this.button = button;\n        switch (button) {\n          case 0:\n            this.buttons = 1;\n            break;\n          case 1:\n            this.buttons = 4;\n            break;\n          case 2:\n            this.buttons = 2;\n            break;\n          default:\n            this.buttons = 0;\n            break;\n        }\n        this.relatedTarget = relatedTarget;\n      }\n    },\n    getModifierState: {\n      value: function (key) {\n        switch (key) {\n          case \"Alt\":\n            return this.altKey;\n          case \"Control\":\n            return this.ctrlKey;\n          case \"Shift\":\n            return this.shiftKey;\n          case \"Meta\":\n            return this.metaKey;\n          default:\n            return false;\n        }\n      }\n    }\n  });\n  return MouseEvent_1;\n}\nvar utils = {};\nvar config = {};\n\n/*\n * This file defines Domino behaviour that can be externally configured.\n * To change these settings, set the relevant global property *before*\n * you call `require(\"domino\")`.\n */\n\nvar hasRequiredConfig;\nfunction requireConfig() {\n  if (hasRequiredConfig) return config;\n  hasRequiredConfig = 1;\n  config.isApiWritable = !globalThis.__domino_frozen__;\n  return config;\n}\nvar hasRequiredUtils;\nfunction requireUtils() {\n  if (hasRequiredUtils) return utils;\n  hasRequiredUtils = 1;\n  var isApiWritable = requireConfig().isApiWritable;\n  utils.NAMESPACE = {\n    HTML: 'http://www.w3.org/1999/xhtml',\n    XML: 'http://www.w3.org/XML/1998/namespace',\n    XMLNS: 'http://www.w3.org/2000/xmlns/',\n    MATHML: 'http://www.w3.org/1998/Math/MathML',\n    SVG: 'http://www.w3.org/2000/svg',\n    XLINK: 'http://www.w3.org/1999/xlink'\n  };\n\n  //\n  // Shortcut functions for throwing errors of various types.\n  //\n  utils.IndexSizeError = () => {\n    throw new DOMException('The index is not in the allowed range', 'IndexSizeError');\n  };\n  utils.HierarchyRequestError = () => {\n    throw new DOMException('The node tree hierarchy is not correct', 'HierarchyRequestError');\n  };\n  utils.WrongDocumentError = () => {\n    throw new DOMException('The object is in the wrong Document', 'WrongDocumentError');\n  };\n  utils.InvalidCharacterError = () => {\n    throw new DOMException('The string contains invalid characters', 'InvalidCharacterError');\n  };\n  utils.NoModificationAllowedError = () => {\n    throw new DOMException('The object cannot be modified', 'NoModificationAllowedError');\n  };\n  utils.NotFoundError = () => {\n    throw new DOMException('The object can not be found here', 'NotFoundError');\n  };\n  utils.NotSupportedError = () => {\n    throw new DOMException('The operation is not supported', 'NotSupportedError');\n  };\n  utils.InvalidStateError = () => {\n    throw new DOMException('The object is in an invalid state', 'InvalidStateError');\n  };\n  utils.SyntaxError = () => {\n    throw new DOMException('The string did not match the expected pattern', 'SyntaxError');\n  };\n  utils.InvalidModificationError = () => {\n    throw new DOMException('The object can not be modified in this way', 'InvalidModificationError');\n  };\n  utils.NamespaceError = () => {\n    throw new DOMException('The operation is not allowed by Namespaces in XML', 'NamespaceError');\n  };\n  utils.InvalidAccessError = () => {\n    throw new DOMException('The object does not support the operation or argument', 'InvalidAccessError');\n  };\n  utils.TypeMismatchError = () => {\n    throw new DOMException('The type of the object does not match the expected type', 'TypeMismatchError');\n  };\n  utils.SecurityError = () => {\n    throw new DOMException('The operation is insecure', 'SecurityError');\n  };\n  utils.NetworkError = () => {\n    throw new DOMException('A network error occurred', 'NetworkError');\n  };\n  utils.AbortError = () => {\n    throw new DOMException('The operation was aborted', 'AbortError');\n  };\n  utils.UrlMismatchError = () => {\n    throw new DOMException('The given URL does not match another URL', 'URLMismatchError');\n  };\n  utils.QuotaExceededError = () => {\n    throw new DOMException('The quota has been exceeded', 'QuotaExceededError');\n  };\n  utils.TimeoutError = () => {\n    throw new DOMException('The operation timed out', 'TimeoutError');\n  };\n  utils.InvalidNodeTypeError = () => {\n    throw new DOMException('The node is of an invalid type', 'InvalidNodeTypeError');\n  };\n  utils.DataCloneError = () => {\n    throw new DOMException('The object can not be cloned', 'DataCloneError');\n  };\n  utils.InUseAttributeError = () => {\n    throw new DOMException('The attribute is already in use', 'InUseAttributeError');\n  };\n  utils.nyi = function () {\n    throw new Error('NotYetImplemented');\n  };\n  utils.shouldOverride = function () {\n    throw new Error('Abstract function; should be overriding in subclass.');\n  };\n  utils.assert = function (expr, msg) {\n    if (!expr) {\n      throw new Error('Assertion failed: ' + (msg || '') + '\\n' + new Error().stack);\n    }\n  };\n  utils.expose = function (src, c) {\n    for (var n in src) {\n      Object.defineProperty(c.prototype, n, {\n        value: src[n],\n        writable: isApiWritable\n      });\n    }\n  };\n  utils.merge = function (a, b) {\n    for (var n in b) {\n      a[n] = b[n];\n    }\n  };\n\n  // Compare two nodes based on their document order. This function is intended\n  // to be passed to sort(). Assumes that the array being sorted does not\n  // contain duplicates.  And that all nodes are connected and comparable.\n  // Clever code by ppk via jeresig.\n  utils.documentOrder = function (n, m) {\n    /* jshint bitwise: false */\n    return 3 - (n.compareDocumentPosition(m) & 6);\n  };\n  utils.toASCIILowerCase = function (s) {\n    return s.replace(/[A-Z]+/g, function (c) {\n      return c.toLowerCase();\n    });\n  };\n  utils.toASCIIUpperCase = function (s) {\n    return s.replace(/[a-z]+/g, function (c) {\n      return c.toUpperCase();\n    });\n  };\n  return utils;\n}\nvar EventTarget_1;\nvar hasRequiredEventTarget;\nfunction requireEventTarget() {\n  if (hasRequiredEventTarget) return EventTarget_1;\n  hasRequiredEventTarget = 1;\n  var Event = requireEvent();\n  var MouseEvent = requireMouseEvent();\n  var utils = requireUtils();\n  EventTarget_1 = EventTarget;\n  function EventTarget() {}\n  EventTarget.prototype = {\n    // XXX\n    // See WebIDL §4.8 for details on object event handlers\n    // and how they should behave.  We actually have to accept\n    // any object to addEventListener... Can't type check it.\n    // on registration.\n\n    // XXX:\n    // Capturing event listeners are sort of rare.  I think I can optimize\n    // them so that dispatchEvent can skip the capturing phase (or much of\n    // it).  Each time a capturing listener is added, increment a flag on\n    // the target node and each of its ancestors.  Decrement when removed.\n    // And update the counter when nodes are added and removed from the\n    // tree as well.  Then, in dispatch event, the capturing phase can\n    // abort if it sees any node with a zero count.\n    addEventListener: function addEventListener(type, listener, capture) {\n      if (!listener) return;\n      if (capture === undefined) capture = false;\n      if (!this._listeners) this._listeners = Object.create(null);\n      if (!this._listeners[type]) this._listeners[type] = [];\n      var list = this._listeners[type];\n\n      // If this listener has already been registered, just return\n      for (var i = 0, n = list.length; i < n; i++) {\n        var l = list[i];\n        if (l.listener === listener && l.capture === capture) return;\n      }\n\n      // Add an object to the list of listeners\n      var obj = {\n        listener: listener,\n        capture: capture\n      };\n      if (typeof listener === 'function') obj.f = listener;\n      list.push(obj);\n    },\n    removeEventListener: function removeEventListener(type, listener, capture) {\n      if (capture === undefined) capture = false;\n      if (this._listeners) {\n        var list = this._listeners[type];\n        if (list) {\n          // Find the listener in the list and remove it\n          for (var i = 0, n = list.length; i < n; i++) {\n            var l = list[i];\n            if (l.listener === listener && l.capture === capture) {\n              if (list.length === 1) {\n                this._listeners[type] = undefined;\n              } else {\n                list.splice(i, 1);\n              }\n              return;\n            }\n          }\n        }\n      }\n    },\n    // This is the public API for dispatching untrusted public events.\n    // See _dispatchEvent for the implementation\n    dispatchEvent: function dispatchEvent(event) {\n      // Dispatch an untrusted event\n      return this._dispatchEvent(event, false);\n    },\n    //\n    // See DOMCore §4.4\n    // XXX: I'll probably need another version of this method for\n    // internal use, one that does not set isTrusted to false.\n    // XXX: see Document._dispatchEvent: perhaps that and this could\n    // call a common internal function with different settings of\n    // a trusted boolean argument\n    //\n    // XXX:\n    // The spec has changed in how to deal with handlers registered\n    // on idl or content attributes rather than with addEventListener.\n    // Used to say that they always ran first.  That's how webkit does it\n    // Spec now says that they run in a position determined by\n    // when they were first set.  FF does it that way.  See:\n    // http://www.whatwg.org/specs/web-apps/current-work/multipage/webappapis.html#event-handlers\n    //\n    _dispatchEvent: function _dispatchEvent(event, trusted) {\n      if (typeof trusted !== 'boolean') trusted = false;\n      function invoke(target, event) {\n        var type = event.type,\n          phase = event.eventPhase;\n        event.currentTarget = target;\n\n        // If there was an individual handler defined, invoke it first\n        // XXX: see comment above: this shouldn't always be first.\n        if (phase !== Event.CAPTURING_PHASE && target._handlers && target._handlers[type]) {\n          var handler = target._handlers[type];\n          var rv;\n          if (typeof handler === 'function') {\n            rv = handler.call(event.currentTarget, event);\n          } else {\n            var f = handler.handleEvent;\n            if (typeof f !== 'function') throw new TypeError('handleEvent property of ' + 'event handler object is' + 'not a function.');\n            rv = f.call(handler, event);\n          }\n          switch (event.type) {\n            case 'mouseover':\n              if (rv === true)\n                // Historical baggage\n                event.preventDefault();\n              break;\n            case 'beforeunload':\n            // XXX: eventually we need a special case here\n            /* falls through */\n            default:\n              if (rv === false) event.preventDefault();\n              break;\n          }\n        }\n\n        // Now invoke list list of listeners for this target and type\n        var list = target._listeners && target._listeners[type];\n        if (!list) return;\n        list = list.slice();\n        for (var i = 0, n = list.length; i < n; i++) {\n          if (event._immediatePropagationStopped) return;\n          var l = list[i];\n          if (phase === Event.CAPTURING_PHASE && !l.capture || phase === Event.BUBBLING_PHASE && l.capture) continue;\n          if (l.f) {\n            l.f.call(event.currentTarget, event);\n          } else {\n            var fn = l.listener.handleEvent;\n            if (typeof fn !== 'function') throw new TypeError('handleEvent property of event listener object is not a function.');\n            fn.call(l.listener, event);\n          }\n        }\n      }\n      if (!event._initialized || event._dispatching) utils.InvalidStateError();\n      event.isTrusted = trusted;\n\n      // Begin dispatching the event now\n      event._dispatching = true;\n      event.target = this;\n\n      // Build the list of targets for the capturing and bubbling phases\n      // XXX: we'll eventually have to add Window to this list.\n      var ancestors = [];\n      for (var n = this.parentNode; n; n = n.parentNode) ancestors.push(n);\n\n      // Capturing phase\n      event.eventPhase = Event.CAPTURING_PHASE;\n      for (var i = ancestors.length - 1; i >= 0; i--) {\n        invoke(ancestors[i], event);\n        if (event._propagationStopped) break;\n      }\n\n      // At target phase\n      if (!event._propagationStopped) {\n        event.eventPhase = Event.AT_TARGET;\n        invoke(this, event);\n      }\n\n      // Bubbling phase\n      if (event.bubbles && !event._propagationStopped) {\n        event.eventPhase = Event.BUBBLING_PHASE;\n        for (var ii = 0, nn = ancestors.length; ii < nn; ii++) {\n          invoke(ancestors[ii], event);\n          if (event._propagationStopped) break;\n        }\n      }\n      event._dispatching = false;\n      event.eventPhase = Event.AT_TARGET;\n      event.currentTarget = null;\n\n      // Deal with mouse events and figure out when\n      // a click has happened\n      if (trusted && !event.defaultPrevented && event instanceof MouseEvent) {\n        switch (event.type) {\n          case 'mousedown':\n            this._armed = {\n              x: event.clientX,\n              y: event.clientY,\n              t: event.timeStamp\n            };\n            break;\n          case 'mouseout':\n          case 'mouseover':\n            this._armed = null;\n            break;\n          case 'mouseup':\n            if (this._isClick(event)) this._doClick(event);\n            this._armed = null;\n            break;\n        }\n      }\n      return !event.defaultPrevented;\n    },\n    // Determine whether a click occurred\n    // XXX We don't support double clicks for now\n    _isClick: function (event) {\n      return this._armed !== null && event.type === 'mouseup' && event.isTrusted && event.button === 0 && event.timeStamp - this._armed.t < 1000 && Math.abs(event.clientX - this._armed.x) < 10 && Math.abs(event.clientY - this._armed.Y) < 10;\n    },\n    // Clicks are handled like this:\n    // http://www.whatwg.org/specs/web-apps/current-work/multipage/elements.html#interactive-content-0\n    //\n    // Note that this method is similar to the HTMLElement.click() method\n    // The event argument must be the trusted mouseup event\n    _doClick: function (event) {\n      if (this._click_in_progress) return;\n      this._click_in_progress = true;\n\n      // Find the nearest enclosing element that is activatable\n      // An element is activatable if it has a\n      // _post_click_activation_steps hook\n      var activated = this;\n      while (activated && !activated._post_click_activation_steps) activated = activated.parentNode;\n      if (activated && activated._pre_click_activation_steps) {\n        activated._pre_click_activation_steps();\n      }\n      var click = this.ownerDocument.createEvent('MouseEvent');\n      click.initMouseEvent('click', true, true, this.ownerDocument.defaultView, 1, event.screenX, event.screenY, event.clientX, event.clientY, event.ctrlKey, event.altKey, event.shiftKey, event.metaKey, event.button, null);\n      var result = this._dispatchEvent(click, true);\n      if (activated) {\n        if (result) {\n          // This is where hyperlinks get followed, for example.\n          if (activated._post_click_activation_steps) activated._post_click_activation_steps(click);\n        } else {\n          if (activated._cancelled_activation_steps) activated._cancelled_activation_steps();\n        }\n      }\n    },\n    //\n    // An event handler is like an event listener, but it registered\n    // by setting an IDL or content attribute like onload or onclick.\n    // There can only be one of these at a time for any event type.\n    // This is an internal method for the attribute accessors and\n    // content attribute handlers that need to register events handlers.\n    // The type argument is the same as in addEventListener().\n    // The handler argument is the same as listeners in addEventListener:\n    // it can be a function or an object. Pass null to remove any existing\n    // handler.  Handlers are always invoked before any listeners of\n    // the same type.  They are not invoked during the capturing phase\n    // of event dispatch.\n    //\n    _setEventHandler: function _setEventHandler(type, handler) {\n      if (!this._handlers) this._handlers = Object.create(null);\n      this._handlers[type] = handler;\n    },\n    _getEventHandler: function _getEventHandler(type) {\n      return this._handlers && this._handlers[type] || null;\n    }\n  };\n  return EventTarget_1;\n}\nvar LinkedList = {\n  exports: {}\n};\nvar hasRequiredLinkedList;\nfunction requireLinkedList() {\n  if (hasRequiredLinkedList) return LinkedList.exports;\n  hasRequiredLinkedList = 1;\n  var utils = requireUtils();\n  var LinkedList$1 = LinkedList.exports = {\n    // basic validity tests on a circular linked list a\n    valid: function (a) {\n      utils.assert(a, \"list falsy\");\n      utils.assert(a._previousSibling, \"previous falsy\");\n      utils.assert(a._nextSibling, \"next falsy\");\n      // xxx check that list is actually circular\n      return true;\n    },\n    // insert a before b\n    insertBefore: function (a, b) {\n      utils.assert(LinkedList$1.valid(a) && LinkedList$1.valid(b));\n      var a_first = a,\n        a_last = a._previousSibling;\n      var b_first = b,\n        b_last = b._previousSibling;\n      a_first._previousSibling = b_last;\n      a_last._nextSibling = b_first;\n      b_last._nextSibling = a_first;\n      b_first._previousSibling = a_last;\n      utils.assert(LinkedList$1.valid(a) && LinkedList$1.valid(b));\n    },\n    // replace a single node a with a list b (which could be null)\n    replace: function (a, b) {\n      utils.assert(LinkedList$1.valid(a) && (b === null || LinkedList$1.valid(b)));\n      if (b !== null) {\n        LinkedList$1.insertBefore(b, a);\n      }\n      LinkedList$1.remove(a);\n      utils.assert(LinkedList$1.valid(a) && (b === null || LinkedList$1.valid(b)));\n    },\n    // remove single node a from its list\n    remove: function (a) {\n      utils.assert(LinkedList$1.valid(a));\n      var prev = a._previousSibling;\n      if (prev === a) {\n        return;\n      }\n      var next = a._nextSibling;\n      prev._nextSibling = next;\n      next._previousSibling = prev;\n      a._previousSibling = a._nextSibling = a;\n      utils.assert(LinkedList$1.valid(a));\n    }\n  };\n  return LinkedList.exports;\n}\nvar NodeUtils;\nvar hasRequiredNodeUtils;\nfunction requireNodeUtils() {\n  if (hasRequiredNodeUtils) return NodeUtils;\n  hasRequiredNodeUtils = 1;\n  NodeUtils = {\n    // NOTE: The `serializeOne()` function used to live on the `Node.prototype`\n    // as a private method `Node#_serializeOne(child)`, however that requires\n    // a megamorphic property access `this._serializeOne` just to get to the\n    // method, and this is being done on lots of different `Node` subclasses,\n    // which puts a lot of pressure on V8's megamorphic stub cache. So by\n    // moving the helper off of the `Node.prototype` and into a separate\n    // function in this helper module, we get a monomorphic property access\n    // `NodeUtils.serializeOne` to get to the function and reduce pressure\n    // on the megamorphic stub cache.\n    // See https://github.com/fgnass/domino/pull/142 for more information.\n    serializeOne: serializeOne,\n    // Export util functions so that we can run extra test for them.\n    // Note: we prefix function names with `ɵ`, similar to what we do\n    // with internal functions in Angular packages.\n    ɵescapeMatchingClosingTag: escapeMatchingClosingTag,\n    ɵescapeClosingCommentTag: escapeClosingCommentTag,\n    ɵescapeProcessingInstructionContent: escapeProcessingInstructionContent\n  };\n  var utils = requireUtils();\n  var NAMESPACE = utils.NAMESPACE;\n  var hasRawContent = {\n    STYLE: true,\n    SCRIPT: true,\n    XMP: true,\n    IFRAME: true,\n    NOEMBED: true,\n    NOSCRIPT: true,\n    NOFRAMES: true,\n    PLAINTEXT: true\n  };\n  var emptyElements = {\n    area: true,\n    base: true,\n    basefont: true,\n    bgsound: true,\n    br: true,\n    col: true,\n    embed: true,\n    frame: true,\n    hr: true,\n    img: true,\n    input: true,\n    keygen: true,\n    link: true,\n    meta: true,\n    param: true,\n    source: true,\n    track: true,\n    wbr: true\n  };\n  var extraNewLine = {\n    /* Removed in https://github.com/whatwg/html/issues/944\n    pre: true,\n    textarea: true,\n    listing: true\n    */\n  };\n  const ESCAPE_REGEXP = /[&<>\\u00A0]/g;\n  const ESCAPE_ATTR_REGEXP = /[&\"<>\\u00A0]/g;\n  function escape(s) {\n    if (!ESCAPE_REGEXP.test(s)) {\n      // nothing to do, fast path\n      return s;\n    }\n    return s.replace(ESCAPE_REGEXP, c => {\n      switch (c) {\n        case \"&\":\n          return \"&amp;\";\n        case \"<\":\n          return \"&lt;\";\n        case \">\":\n          return \"&gt;\";\n        case \"\\u00A0\":\n          return \"&nbsp;\";\n      }\n    });\n  }\n  function escapeAttr(s) {\n    if (!ESCAPE_ATTR_REGEXP.test(s)) {\n      // nothing to do, fast path\n      return s;\n    }\n    return s.replace(ESCAPE_ATTR_REGEXP, c => {\n      switch (c) {\n        case \"<\":\n          return \"&lt;\";\n        case \">\":\n          return \"&gt;\";\n        case \"&\":\n          return \"&amp;\";\n        case '\"':\n          return \"&quot;\";\n        case \"\\u00A0\":\n          return \"&nbsp;\";\n      }\n    });\n  }\n  function attrname(a) {\n    var ns = a.namespaceURI;\n    if (!ns) return a.localName;\n    if (ns === NAMESPACE.XML) return 'xml:' + a.localName;\n    if (ns === NAMESPACE.XLINK) return 'xlink:' + a.localName;\n    if (ns === NAMESPACE.XMLNS) {\n      if (a.localName === 'xmlns') return 'xmlns';else return 'xmlns:' + a.localName;\n    }\n    return a.name;\n  }\n\n  /**\n   * Escapes matching closing tag in a raw text.\n   *\n   * For example, given `<style>#text(</style><script></script>)</style>`,\n   * the parent tag would by \"style\" and the raw text is\n   * \"</style><script></script>\". If we come across a matching closing tag\n   * (in out case `</style>`) - replace `<` with `&lt;` to avoid unexpected\n   * and unsafe behavior after de-serialization.\n   */\n  function escapeMatchingClosingTag(rawText, parentTag) {\n    const parentClosingTag = '</' + parentTag;\n    if (!rawText.toLowerCase().includes(parentClosingTag)) {\n      return rawText; // fast path\n    }\n    // Replace via String.prototype.replace so we don't have to reconcile\n    // UTF-16 code-unit offsets (match.index) with code-point indexing\n    // (`[...rawText]`). Astral characters (e.g. emoji) before the match\n    // would otherwise shift the replacement and leave a real `</tag>`\n    // break-out in the output.\n    return rawText.replace(new RegExp(parentClosingTag, 'ig'), m => '&lt;' + m.slice(1));\n  }\n  const CLOSING_COMMENT_REGEXP = /--!?>/;\n\n  /**\n   * Escapes closing comment tag in a comment content.\n   *\n   * For example, given `#comment('-->')`, the content of a comment would be\n   * updated to `--&gt;` to avoid unexpected and unsafe behavior after\n   * de-serialization.\n   */\n  function escapeClosingCommentTag(rawContent) {\n    if (!CLOSING_COMMENT_REGEXP.test(rawContent)) {\n      return rawContent; // fast path\n    }\n    return rawContent.replace(/(--\\!?)>/g, '$1&gt;');\n  }\n\n  /**\n   * Escapes processing instruction content by replacing `>` with `&gt`.\n   */\n  function escapeProcessingInstructionContent(rawContent) {\n    return rawContent.includes('>') ? rawContent.replaceAll('>', '&gt;') : rawContent;\n  }\n  function serializeOne(kid, parent) {\n    var s = '';\n    switch (kid.nodeType) {\n      case 1:\n        //ELEMENT_NODE\n        var ns = kid.namespaceURI;\n        var html = ns === NAMESPACE.HTML;\n        var tagname = html || ns === NAMESPACE.SVG || ns === NAMESPACE.MATHML ? kid.localName : kid.tagName;\n        s += '<' + tagname;\n        for (var j = 0, k = kid._numattrs; j < k; j++) {\n          var a = kid._attr(j);\n          s += ' ' + attrname(a);\n          if (a.value !== undefined) s += '=\"' + escapeAttr(a.value) + '\"';\n        }\n        s += '>';\n        if (!(html && emptyElements[tagname])) {\n          var ss = kid.serialize();\n          // If an element can have raw content, this content may\n          // potentially require escaping to avoid XSS.\n          var upperTag = tagname.toUpperCase();\n          if (hasRawContent[upperTag]) {\n            ss = escapeMatchingClosingTag(ss, tagname);\n          }\n          if (html && extraNewLine[tagname] && ss.charAt(0) === '\\n') s += '\\n';\n          // Serialize children and add end tag for all others\n          s += ss;\n          s += '</' + tagname + '>';\n        }\n        break;\n      case 3: //TEXT_NODE\n      case 4:\n        //CDATA_SECTION_NODE\n        var parenttag;\n        if (parent.nodeType === 1 /*ELEMENT_NODE*/ && parent.namespaceURI === NAMESPACE.HTML) parenttag = parent.tagName;else parenttag = '';\n        if (hasRawContent[parenttag]) {\n          s += kid.data;\n        } else {\n          s += escape(kid.data);\n        }\n        break;\n      case 8:\n        //COMMENT_NODE\n        s += '<!--' + escapeClosingCommentTag(kid.data) + '-->';\n        break;\n      case 7:\n        //PROCESSING_INSTRUCTION_NODE\n        const content = escapeProcessingInstructionContent(kid.data);\n        s += '<?' + kid.target + ' ' + content + '?>';\n        break;\n      case 10:\n        //DOCUMENT_TYPE_NODE\n        s += '<!DOCTYPE ' + kid.name;\n        s += '>';\n        break;\n      default:\n        utils.InvalidStateError();\n    }\n    return s;\n  }\n  return NodeUtils;\n}\nvar Node_1;\nvar hasRequiredNode;\nfunction requireNode() {\n  if (hasRequiredNode) return Node_1;\n  hasRequiredNode = 1;\n  Node_1 = Node;\n  var EventTarget = requireEventTarget();\n  var LinkedList = requireLinkedList();\n  var NodeUtils = requireNodeUtils();\n  var utils = requireUtils();\n\n  // All nodes have a nodeType and an ownerDocument.\n  // Once inserted, they also have a parentNode.\n  // This is an abstract class; all nodes in a document are instances\n  // of a subtype, so all the properties are defined by more specific\n  // constructors.\n  function Node() {\n    EventTarget.call(this);\n    this.parentNode = null;\n    this._nextSibling = this._previousSibling = this;\n    this._index = undefined;\n  }\n  var ELEMENT_NODE = Node.ELEMENT_NODE = 1;\n  var ATTRIBUTE_NODE = Node.ATTRIBUTE_NODE = 2;\n  var TEXT_NODE = Node.TEXT_NODE = 3;\n  var CDATA_SECTION_NODE = Node.CDATA_SECTION_NODE = 4;\n  var ENTITY_REFERENCE_NODE = Node.ENTITY_REFERENCE_NODE = 5;\n  var ENTITY_NODE = Node.ENTITY_NODE = 6;\n  var PROCESSING_INSTRUCTION_NODE = Node.PROCESSING_INSTRUCTION_NODE = 7;\n  var COMMENT_NODE = Node.COMMENT_NODE = 8;\n  var DOCUMENT_NODE = Node.DOCUMENT_NODE = 9;\n  var DOCUMENT_TYPE_NODE = Node.DOCUMENT_TYPE_NODE = 10;\n  var DOCUMENT_FRAGMENT_NODE = Node.DOCUMENT_FRAGMENT_NODE = 11;\n  var NOTATION_NODE = Node.NOTATION_NODE = 12;\n  var DOCUMENT_POSITION_DISCONNECTED = Node.DOCUMENT_POSITION_DISCONNECTED = 0x01;\n  var DOCUMENT_POSITION_PRECEDING = Node.DOCUMENT_POSITION_PRECEDING = 0x02;\n  var DOCUMENT_POSITION_FOLLOWING = Node.DOCUMENT_POSITION_FOLLOWING = 0x04;\n  var DOCUMENT_POSITION_CONTAINS = Node.DOCUMENT_POSITION_CONTAINS = 0x08;\n  var DOCUMENT_POSITION_CONTAINED_BY = Node.DOCUMENT_POSITION_CONTAINED_BY = 0x10;\n  var DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC = 0x20;\n  Node.prototype = Object.create(EventTarget.prototype, {\n    // Node that are not inserted into the tree inherit a null parent\n\n    // XXX: the baseURI attribute is defined by dom core, but\n    // a correct implementation of it requires HTML features, so\n    // we'll come back to this later.\n    baseURI: {\n      get: utils.nyi\n    },\n    parentElement: {\n      get: function () {\n        return this.parentNode && this.parentNode.nodeType === ELEMENT_NODE ? this.parentNode : null;\n      }\n    },\n    hasChildNodes: {\n      value: utils.shouldOverride\n    },\n    firstChild: {\n      get: utils.shouldOverride\n    },\n    lastChild: {\n      get: utils.shouldOverride\n    },\n    isConnected: {\n      get: function () {\n        let node = this;\n        while (node != null) {\n          if (node.nodeType === Node.DOCUMENT_NODE) {\n            return true;\n          }\n          node = node.parentNode;\n          if (node != null && node.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n            node = node.host;\n          }\n        }\n        return false;\n      }\n    },\n    previousSibling: {\n      get: function () {\n        var parent = this.parentNode;\n        if (!parent) return null;\n        if (this === parent.firstChild) return null;\n        return this._previousSibling;\n      }\n    },\n    nextSibling: {\n      get: function () {\n        var parent = this.parentNode,\n          next = this._nextSibling;\n        if (!parent) return null;\n        if (next === parent.firstChild) return null;\n        return next;\n      }\n    },\n    textContent: {\n      // Should override for DocumentFragment/Element/Attr/Text/PI/Comment\n      get: function () {\n        return null;\n      },\n      set: function (v) {/* do nothing */}\n    },\n    innerText: {\n      // Should override for DocumentFragment/Element/Attr/Text/PI/Comment\n      get: function () {\n        return null;\n      },\n      set: function (v) {/* do nothing */}\n    },\n    _countChildrenOfType: {\n      value: function (type) {\n        var sum = 0;\n        for (var kid = this.firstChild; kid !== null; kid = kid.nextSibling) {\n          if (kid.nodeType === type) sum++;\n        }\n        return sum;\n      }\n    },\n    _ensureInsertValid: {\n      value: function _ensureInsertValid(node, child, isPreinsert) {\n        var parent = this,\n          i,\n          kid;\n        if (!node.nodeType) throw new TypeError('not a node');\n        // 1. If parent is not a Document, DocumentFragment, or Element\n        // node, throw a HierarchyRequestError.\n        switch (parent.nodeType) {\n          case DOCUMENT_NODE:\n          case DOCUMENT_FRAGMENT_NODE:\n          case ELEMENT_NODE:\n            break;\n          default:\n            utils.HierarchyRequestError();\n        }\n        // 2. If node is a host-including inclusive ancestor of parent,\n        // throw a HierarchyRequestError.\n        if (node.isAncestor(parent)) utils.HierarchyRequestError();\n        // 3. If child is not null and its parent is not parent, then\n        // throw a NotFoundError. (replaceChild omits the 'child is not null'\n        // and throws a TypeError here if child is null.)\n        if (child !== null || !isPreinsert) {\n          if (child.parentNode !== parent) utils.NotFoundError();\n        }\n        // 4. If node is not a DocumentFragment, DocumentType, Element,\n        // Text, ProcessingInstruction, or Comment node, throw a\n        // HierarchyRequestError.\n        switch (node.nodeType) {\n          case DOCUMENT_FRAGMENT_NODE:\n          case DOCUMENT_TYPE_NODE:\n          case ELEMENT_NODE:\n          case TEXT_NODE:\n          case PROCESSING_INSTRUCTION_NODE:\n          case COMMENT_NODE:\n            break;\n          default:\n            utils.HierarchyRequestError();\n        }\n        // 5. If either node is a Text node and parent is a document, or\n        // node is a doctype and parent is not a document, throw a\n        // HierarchyRequestError.\n        // 6. If parent is a document, and any of the statements below, switched\n        // on node, are true, throw a HierarchyRequestError.\n        if (parent.nodeType === DOCUMENT_NODE) {\n          switch (node.nodeType) {\n            case TEXT_NODE:\n              utils.HierarchyRequestError();\n              break;\n            case DOCUMENT_FRAGMENT_NODE:\n              // 6a1. If node has more than one element child or has a Text\n              // node child.\n              if (node._countChildrenOfType(TEXT_NODE) > 0) utils.HierarchyRequestError();\n              switch (node._countChildrenOfType(ELEMENT_NODE)) {\n                case 0:\n                  break;\n                case 1:\n                  // 6a2. Otherwise, if node has one element child and either\n                  // parent has an element child, child is a doctype, or child\n                  // is not null and a doctype is following child. [preinsert]\n                  // 6a2. Otherwise, if node has one element child and either\n                  // parent has an element child that is not child or a\n                  // doctype is following child. [replaceWith]\n                  if (child !== null /* always true here for replaceWith */) {\n                    if (isPreinsert && child.nodeType === DOCUMENT_TYPE_NODE) utils.HierarchyRequestError();\n                    for (kid = child.nextSibling; kid !== null; kid = kid.nextSibling) {\n                      if (kid.nodeType === DOCUMENT_TYPE_NODE) utils.HierarchyRequestError();\n                    }\n                  }\n                  i = parent._countChildrenOfType(ELEMENT_NODE);\n                  if (isPreinsert) {\n                    // \"parent has an element child\"\n                    if (i > 0) utils.HierarchyRequestError();\n                  } else {\n                    // \"parent has an element child that is not child\"\n                    if (i > 1 || i === 1 && child.nodeType !== ELEMENT_NODE) utils.HierarchyRequestError();\n                  }\n                  break;\n                default:\n                  // 6a1, continued. (more than one Element child)\n                  utils.HierarchyRequestError();\n              }\n              break;\n            case ELEMENT_NODE:\n              // 6b. parent has an element child, child is a doctype, or\n              // child is not null and a doctype is following child. [preinsert]\n              // 6b. parent has an element child that is not child or a\n              // doctype is following child. [replaceWith]\n              if (child !== null /* always true here for replaceWith */) {\n                if (isPreinsert && child.nodeType === DOCUMENT_TYPE_NODE) utils.HierarchyRequestError();\n                for (kid = child.nextSibling; kid !== null; kid = kid.nextSibling) {\n                  if (kid.nodeType === DOCUMENT_TYPE_NODE) utils.HierarchyRequestError();\n                }\n              }\n              i = parent._countChildrenOfType(ELEMENT_NODE);\n              if (isPreinsert) {\n                // \"parent has an element child\"\n                if (i > 0) utils.HierarchyRequestError();\n              } else {\n                // \"parent has an element child that is not child\"\n                if (i > 1 || i === 1 && child.nodeType !== ELEMENT_NODE) utils.HierarchyRequestError();\n              }\n              break;\n            case DOCUMENT_TYPE_NODE:\n              // 6c. parent has a doctype child, child is non-null and an\n              // element is preceding child, or child is null and parent has\n              // an element child. [preinsert]\n              // 6c. parent has a doctype child that is not child, or an\n              // element is preceding child. [replaceWith]\n              if (child === null) {\n                if (parent._countChildrenOfType(ELEMENT_NODE)) utils.HierarchyRequestError();\n              } else {\n                // child is always non-null for [replaceWith] case\n                for (kid = parent.firstChild; kid !== null; kid = kid.nextSibling) {\n                  if (kid === child) break;\n                  if (kid.nodeType === ELEMENT_NODE) utils.HierarchyRequestError();\n                }\n              }\n              i = parent._countChildrenOfType(DOCUMENT_TYPE_NODE);\n              if (isPreinsert) {\n                // \"parent has an doctype child\"\n                if (i > 0) utils.HierarchyRequestError();\n              } else {\n                // \"parent has an doctype child that is not child\"\n                if (i > 1 || i === 1 && child.nodeType !== DOCUMENT_TYPE_NODE) utils.HierarchyRequestError();\n              }\n              break;\n          }\n        } else {\n          // 5, continued: (parent is not a document)\n          if (node.nodeType === DOCUMENT_TYPE_NODE) utils.HierarchyRequestError();\n        }\n      }\n    },\n    insertBefore: {\n      value: function insertBefore(node, child) {\n        var parent = this;\n        // 1. Ensure pre-insertion validity\n        parent._ensureInsertValid(node, child, true);\n        // 2. Let reference child be child.\n        var refChild = child;\n        // 3. If reference child is node, set it to node's next sibling\n        if (refChild === node) {\n          refChild = node.nextSibling;\n        }\n        // 4. Adopt node into parent's node document.\n        parent.doc.adoptNode(node);\n        // 5. Insert node into parent before reference child.\n        node._insertOrReplace(parent, refChild, false);\n        // 6. Return node\n        return node;\n      }\n    },\n    appendChild: {\n      value: function (child) {\n        // This invokes _appendChild after doing validity checks.\n        return this.insertBefore(child, null);\n      }\n    },\n    _appendChild: {\n      value: function (child) {\n        child._insertOrReplace(this, null, false);\n      }\n    },\n    removeChild: {\n      value: function removeChild(child) {\n        var parent = this;\n        if (!child.nodeType) throw new TypeError('not a node');\n        if (child.parentNode !== parent) utils.NotFoundError();\n        child.remove();\n        return child;\n      }\n    },\n    // To replace a `child` with `node` within a `parent` (this)\n    replaceChild: {\n      value: function replaceChild(node, child) {\n        var parent = this;\n        // Ensure validity (slight differences from pre-insertion check)\n        parent._ensureInsertValid(node, child, false);\n        // Adopt node into parent's node document.\n        if (node.doc !== parent.doc) {\n          // XXX adoptNode has side-effect of removing node from its parent\n          // and generating a mutation event, thus causing the _insertOrReplace\n          // to generate two deletes and an insert instead of a 'move'\n          // event.  It looks like the new MutationObserver stuff avoids\n          // this problem, but for now let's only adopt (ie, remove `node`\n          // from its parent) here if we need to.\n          parent.doc.adoptNode(node);\n        }\n        // Do the replace.\n        node._insertOrReplace(parent, child, true);\n        return child;\n      }\n    },\n    // See: http://ejohn.org/blog/comparing-document-position/\n    contains: {\n      value: function contains(node) {\n        if (node === null) {\n          return false;\n        }\n        if (this === node) {\n          return true; /* inclusive descendant */\n        }\n        /* jshint bitwise: false */\n        return (this.compareDocumentPosition(node) & DOCUMENT_POSITION_CONTAINED_BY) !== 0;\n      }\n    },\n    compareDocumentPosition: {\n      value: function compareDocumentPosition(that) {\n        // Basic algorithm for finding the relative position of two nodes.\n        // Make a list the ancestors of each node, starting with the\n        // document element and proceeding down to the nodes themselves.\n        // Then, loop through the lists, looking for the first element\n        // that differs.  The order of those two elements give the\n        // order of their descendant nodes.  Or, if one list is a prefix\n        // of the other one, then that node contains the other.\n\n        if (this === that) return 0;\n\n        // If they're not owned by the same document or if one is rooted\n        // and one is not, then they're disconnected.\n        if (this.doc !== that.doc || this.rooted !== that.rooted) return DOCUMENT_POSITION_DISCONNECTED + DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC;\n\n        // Get arrays of ancestors for this and that\n        var these = [],\n          those = [];\n        for (var n = this; n !== null; n = n.parentNode) these.push(n);\n        for (n = that; n !== null; n = n.parentNode) those.push(n);\n        these.reverse(); // So we start with the outermost\n        those.reverse();\n        if (these[0] !== those[0])\n          // No common ancestor\n          return DOCUMENT_POSITION_DISCONNECTED + DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC;\n        n = Math.min(these.length, those.length);\n        for (var i = 1; i < n; i++) {\n          if (these[i] !== those[i]) {\n            // We found two different ancestors, so compare\n            // their positions\n            if (these[i].index < those[i].index) return DOCUMENT_POSITION_FOLLOWING;else return DOCUMENT_POSITION_PRECEDING;\n          }\n        }\n\n        // If we get to here, then one of the nodes (the one with the\n        // shorter list of ancestors) contains the other one.\n        if (these.length < those.length) return DOCUMENT_POSITION_FOLLOWING + DOCUMENT_POSITION_CONTAINED_BY;else return DOCUMENT_POSITION_PRECEDING + DOCUMENT_POSITION_CONTAINS;\n      }\n    },\n    isSameNode: {\n      value: function isSameNode(node) {\n        return this === node;\n      }\n    },\n    // This method implements the generic parts of node equality testing\n    // and defers to the (non-recursive) type-specific isEqual() method\n    // defined by subclasses\n    isEqualNode: {\n      value: function isEqualNode(node) {\n        if (!node) return false;\n        if (node.nodeType !== this.nodeType) return false;\n\n        // Check type-specific properties for equality\n        if (!this.isEqual(node)) return false;\n\n        // Now check children for number and equality\n        for (var c1 = this.firstChild, c2 = node.firstChild; c1 && c2; c1 = c1.nextSibling, c2 = c2.nextSibling) {\n          if (!c1.isEqualNode(c2)) return false;\n        }\n        return c1 === null && c2 === null;\n      }\n    },\n    // This method delegates shallow cloning to a clone() method\n    // that each concrete subclass must implement\n    cloneNode: {\n      value: function (deep) {\n        // Clone this node\n        var clone = this.clone();\n\n        // Handle the recursive case if necessary\n        if (deep) {\n          for (var kid = this.firstChild; kid !== null; kid = kid.nextSibling) {\n            clone._appendChild(kid.cloneNode(true));\n          }\n        }\n        return clone;\n      }\n    },\n    lookupPrefix: {\n      value: function lookupPrefix(ns) {\n        var e;\n        if (ns === '' || ns === null || ns === undefined) return null;\n        switch (this.nodeType) {\n          case ELEMENT_NODE:\n            return this._lookupNamespacePrefix(ns, this);\n          case DOCUMENT_NODE:\n            e = this.documentElement;\n            return e ? e.lookupPrefix(ns) : null;\n          case ENTITY_NODE:\n          case NOTATION_NODE:\n          case DOCUMENT_FRAGMENT_NODE:\n          case DOCUMENT_TYPE_NODE:\n            return null;\n          case ATTRIBUTE_NODE:\n            e = this.ownerElement;\n            return e ? e.lookupPrefix(ns) : null;\n          default:\n            e = this.parentElement;\n            return e ? e.lookupPrefix(ns) : null;\n        }\n      }\n    },\n    lookupNamespaceURI: {\n      value: function lookupNamespaceURI(prefix) {\n        if (prefix === '' || prefix === undefined) {\n          prefix = null;\n        }\n        var e;\n        switch (this.nodeType) {\n          case ELEMENT_NODE:\n            return utils.shouldOverride();\n          case DOCUMENT_NODE:\n            e = this.documentElement;\n            return e ? e.lookupNamespaceURI(prefix) : null;\n          case ENTITY_NODE:\n          case NOTATION_NODE:\n          case DOCUMENT_TYPE_NODE:\n          case DOCUMENT_FRAGMENT_NODE:\n            return null;\n          case ATTRIBUTE_NODE:\n            e = this.ownerElement;\n            return e ? e.lookupNamespaceURI(prefix) : null;\n          default:\n            e = this.parentElement;\n            return e ? e.lookupNamespaceURI(prefix) : null;\n        }\n      }\n    },\n    isDefaultNamespace: {\n      value: function isDefaultNamespace(ns) {\n        if (ns === '' || ns === undefined) {\n          ns = null;\n        }\n        var defaultNamespace = this.lookupNamespaceURI(null);\n        return defaultNamespace === ns;\n      }\n    },\n    // Utility methods for nodes.  Not part of the DOM\n\n    // Return the index of this node in its parent.\n    // Throw if no parent, or if this node is not a child of its parent\n    index: {\n      get: function () {\n        var parent = this.parentNode;\n        if (this === parent.firstChild) return 0; // fast case\n        var kids = parent.childNodes;\n        if (this._index === undefined || kids[this._index] !== this) {\n          // Ensure that we don't have an O(N^2) blowup if none of the\n          // kids have defined indices yet and we're traversing via\n          // nextSibling or previousSibling\n          for (var i = 0; i < kids.length; i++) {\n            kids[i]._index = i;\n          }\n          utils.assert(kids[this._index] === this);\n        }\n        return this._index;\n      }\n    },\n    // Return true if this node is equal to or is an ancestor of that node\n    // Note that nodes are considered to be ancestors of themselves\n    isAncestor: {\n      value: function (that) {\n        // If they belong to different documents, then they're unrelated.\n        if (this.doc !== that.doc) return false;\n        // If one is rooted and one isn't then they're not related\n        if (this.rooted !== that.rooted) return false;\n\n        // Otherwise check by traversing the parentNode chain\n        for (var e = that; e; e = e.parentNode) {\n          if (e === this) return true;\n        }\n        return false;\n      }\n    },\n    // DOMINO Changed the behavior to conform with the specs. See:\n    // https://groups.google.com/d/topic/mozilla.dev.platform/77sIYcpdDmc/discussion\n    ensureSameDoc: {\n      value: function (that) {\n        if (that.ownerDocument === null) {\n          that.ownerDocument = this.doc;\n        } else if (that.ownerDocument !== this.doc) {\n          utils.WrongDocumentError();\n        }\n      }\n    },\n    removeChildren: {\n      value: utils.shouldOverride\n    },\n    // Insert this node as a child of parent before the specified child,\n    // or insert as the last child of parent if specified child is null,\n    // or replace the specified child with this node, firing mutation events as\n    // necessary\n    _insertOrReplace: {\n      value: function _insertOrReplace(parent, before, isReplace) {\n        var child = this,\n          before_index,\n          i;\n        if (child.nodeType === DOCUMENT_FRAGMENT_NODE && child.rooted) {\n          utils.HierarchyRequestError();\n        }\n\n        /* Ensure index of `before` is cached before we (possibly) remove it. */\n        if (parent._childNodes) {\n          before_index = before === null ? parent._childNodes.length : before.index; /* ensure _index is cached */\n\n          // If we are already a child of the specified parent, then\n          // the index may have to be adjusted.\n          if (child.parentNode === parent) {\n            var child_index = child.index;\n            // If the child is before the spot it is to be inserted at,\n            // then when it is removed, the index of that spot will be\n            // reduced.\n            if (child_index < before_index) {\n              before_index--;\n            }\n          }\n        }\n\n        // Delete the old child\n        if (isReplace) {\n          if (before.rooted) before.doc.mutateRemove(before);\n          before.parentNode = null;\n        }\n        var n = before;\n        if (n === null) {\n          n = parent.firstChild;\n        }\n\n        // If both the child and the parent are rooted, then we want to\n        // transplant the child without uprooting and rerooting it.\n        var bothRooted = child.rooted && parent.rooted;\n        if (child.nodeType === DOCUMENT_FRAGMENT_NODE) {\n          var spliceArgs = [0, isReplace ? 1 : 0],\n            next;\n          for (var kid = child.firstChild; kid !== null; kid = next) {\n            next = kid.nextSibling;\n            spliceArgs.push(kid);\n            kid.parentNode = parent;\n          }\n          var len = spliceArgs.length;\n          // Add all nodes to the new parent, overwriting the old child\n          if (isReplace) {\n            LinkedList.replace(n, len > 2 ? spliceArgs[2] : null);\n          } else if (len > 2 && n !== null) {\n            LinkedList.insertBefore(spliceArgs[2], n);\n          }\n          if (parent._childNodes) {\n            spliceArgs[0] = before === null ? parent._childNodes.length : before._index;\n            parent._childNodes.splice.apply(parent._childNodes, spliceArgs);\n            for (i = 2; i < len; i++) {\n              spliceArgs[i]._index = spliceArgs[0] + (i - 2);\n            }\n          } else if (parent._firstChild === before) {\n            if (len > 2) {\n              parent._firstChild = spliceArgs[2];\n            } else if (isReplace) {\n              parent._firstChild = null;\n            }\n          }\n          // Remove all nodes from the document fragment\n          if (child._childNodes) {\n            child._childNodes.length = 0;\n          } else {\n            child._firstChild = null;\n          }\n          // Call the mutation handlers\n          // Use spliceArgs since the original array has been destroyed. The\n          // liveness guarantee requires us to clone the array so that\n          // references to the childNodes of the DocumentFragment will be empty\n          // when the insertion handlers are called.\n          if (parent.rooted) {\n            parent.modify();\n            for (i = 2; i < len; i++) {\n              parent.doc.mutateInsert(spliceArgs[i]);\n            }\n          }\n        } else {\n          if (before === child) {\n            return;\n          }\n          if (bothRooted) {\n            // Remove the child from its current position in the tree\n            // without calling remove(), since we don't want to uproot it.\n            child._remove();\n          } else if (child.parentNode) {\n            child.remove();\n          }\n\n          // Insert it as a child of its new parent\n          child.parentNode = parent;\n          if (isReplace) {\n            LinkedList.replace(n, child);\n            if (parent._childNodes) {\n              child._index = before_index;\n              parent._childNodes[before_index] = child;\n            } else if (parent._firstChild === before) {\n              parent._firstChild = child;\n            }\n          } else {\n            if (n !== null) {\n              LinkedList.insertBefore(child, n);\n            }\n            if (parent._childNodes) {\n              child._index = before_index;\n              parent._childNodes.splice(before_index, 0, child);\n            } else if (parent._firstChild === before) {\n              parent._firstChild = child;\n            }\n          }\n          if (bothRooted) {\n            parent.modify();\n            // Generate a move mutation event\n            parent.doc.mutateMove(child);\n          } else if (parent.rooted) {\n            parent.modify();\n            parent.doc.mutateInsert(child);\n          }\n        }\n      }\n    },\n    // Return the lastModTime value for this node. (For use as a\n    // cache invalidation mechanism. If the node does not already\n    // have one, initialize it from the owner document's modclock\n    // property. (Note that modclock does not return the actual\n    // time; it is simply a counter incremented on each document\n    // modification)\n    lastModTime: {\n      get: function () {\n        if (!this._lastModTime) {\n          this._lastModTime = this.doc.modclock;\n        }\n        return this._lastModTime;\n      }\n    },\n    // Increment the owner document's modclock and use the new\n    // value to update the lastModTime value for this node and\n    // all of its ancestors. Nodes that have never had their\n    // lastModTime value queried do not need to have a\n    // lastModTime property set on them since there is no\n    // previously queried value to ever compare the new value\n    // against, so only update nodes that already have a\n    // _lastModTime property.\n    modify: {\n      value: function () {\n        if (this.doc.modclock) {\n          // Skip while doc.modclock == 0\n          var time = ++this.doc.modclock;\n          for (var n = this; n; n = n.parentElement) {\n            if (n._lastModTime) {\n              n._lastModTime = time;\n            }\n          }\n        }\n      }\n    },\n    // This attribute is not part of the DOM but is quite helpful.\n    // It returns the document with which a node is associated.  Usually\n    // this is the ownerDocument. But ownerDocument is null for the\n    // document object itself, so this is a handy way to get the document\n    // regardless of the node type\n    doc: {\n      get: function () {\n        return this.ownerDocument || this;\n      }\n    },\n    // If the node has a nid (node id), then it is rooted in a document\n    rooted: {\n      get: function () {\n        return !!this._nid;\n      }\n    },\n    normalize: {\n      value: function () {\n        var next;\n        for (var child = this.firstChild; child !== null; child = next) {\n          next = child.nextSibling;\n          if (child.normalize) {\n            child.normalize();\n          }\n          if (child.nodeType !== Node.TEXT_NODE) {\n            continue;\n          }\n          if (child.nodeValue === \"\") {\n            this.removeChild(child);\n            continue;\n          }\n          var prevChild = child.previousSibling;\n          if (prevChild === null) {\n            continue;\n          } else if (prevChild.nodeType === Node.TEXT_NODE) {\n            // merge this with previous and remove the child\n            prevChild.appendData(child.nodeValue);\n            this.removeChild(child);\n          }\n        }\n      }\n    },\n    // Convert the children of a node to an HTML string.\n    // This is used by the innerHTML getter\n    // The serialization spec is at:\n    // http://www.whatwg.org/specs/web-apps/current-work/multipage/the-end.html#serializing-html-fragments\n    //\n    // The serialization logic is intentionally implemented in a separate\n    // `NodeUtils` helper instead of the more obvious choice of a private\n    // `_serializeOne()` method on the `Node.prototype` in order to avoid\n    // the megamorphic `this._serializeOne` property access, which reduces\n    // performance unnecessarily. If you need specialized behavior for a\n    // certain subclass, you'll need to implement that in `NodeUtils`.\n    // See https://github.com/fgnass/domino/pull/142 for more information.\n    serialize: {\n      value: function () {\n        if (this._innerHTML) {\n          return this._innerHTML;\n        }\n        var s = '';\n        for (var kid = this.firstChild; kid !== null; kid = kid.nextSibling) {\n          s += NodeUtils.serializeOne(kid, this);\n        }\n        return s;\n      }\n    },\n    // Non-standard, but often useful for debugging.\n    outerHTML: {\n      get: function () {\n        return NodeUtils.serializeOne(this, {\n          nodeType: 0\n        });\n      },\n      set: utils.nyi\n    },\n    // mirror node type properties in the prototype, so they are present\n    // in instances of Node (and subclasses)\n    ELEMENT_NODE: {\n      value: ELEMENT_NODE\n    },\n    ATTRIBUTE_NODE: {\n      value: ATTRIBUTE_NODE\n    },\n    TEXT_NODE: {\n      value: TEXT_NODE\n    },\n    CDATA_SECTION_NODE: {\n      value: CDATA_SECTION_NODE\n    },\n    ENTITY_REFERENCE_NODE: {\n      value: ENTITY_REFERENCE_NODE\n    },\n    ENTITY_NODE: {\n      value: ENTITY_NODE\n    },\n    PROCESSING_INSTRUCTION_NODE: {\n      value: PROCESSING_INSTRUCTION_NODE\n    },\n    COMMENT_NODE: {\n      value: COMMENT_NODE\n    },\n    DOCUMENT_NODE: {\n      value: DOCUMENT_NODE\n    },\n    DOCUMENT_TYPE_NODE: {\n      value: DOCUMENT_TYPE_NODE\n    },\n    DOCUMENT_FRAGMENT_NODE: {\n      value: DOCUMENT_FRAGMENT_NODE\n    },\n    NOTATION_NODE: {\n      value: NOTATION_NODE\n    },\n    DOCUMENT_POSITION_DISCONNECTED: {\n      value: DOCUMENT_POSITION_DISCONNECTED\n    },\n    DOCUMENT_POSITION_PRECEDING: {\n      value: DOCUMENT_POSITION_PRECEDING\n    },\n    DOCUMENT_POSITION_FOLLOWING: {\n      value: DOCUMENT_POSITION_FOLLOWING\n    },\n    DOCUMENT_POSITION_CONTAINS: {\n      value: DOCUMENT_POSITION_CONTAINS\n    },\n    DOCUMENT_POSITION_CONTAINED_BY: {\n      value: DOCUMENT_POSITION_CONTAINED_BY\n    },\n    DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC: {\n      value: DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC\n    }\n  });\n  return Node_1;\n}\n\n/* jshint esversion: 6 */\n\nvar NodeList_es6;\nvar hasRequiredNodeList_es6;\nfunction requireNodeList_es6() {\n  if (hasRequiredNodeList_es6) return NodeList_es6;\n  hasRequiredNodeList_es6 = 1;\n  NodeList_es6 = class NodeList extends Array {\n    constructor(a) {\n      super(a && a.length || 0);\n      if (a) {\n        for (var idx in a) {\n          this[idx] = a[idx];\n        }\n      }\n    }\n    item(i) {\n      return this[i] || null;\n    }\n  };\n  return NodeList_es6;\n}\nvar NodeList_es5;\nvar hasRequiredNodeList_es5;\nfunction requireNodeList_es5() {\n  if (hasRequiredNodeList_es5) return NodeList_es5;\n  hasRequiredNodeList_es5 = 1;\n\n  // No support for subclassing array, return an actual Array object.\n  function item(i) {\n    /* jshint validthis: true */\n    return this[i] || null;\n  }\n  function NodeList(a) {\n    if (!a) a = [];\n    a.item = item;\n    return a;\n  }\n  NodeList_es5 = NodeList;\n  return NodeList_es5;\n}\nvar NodeList_1;\nvar hasRequiredNodeList;\nfunction requireNodeList() {\n  if (hasRequiredNodeList) return NodeList_1;\n  hasRequiredNodeList = 1;\n  var NodeList;\n  try {\n    // Attempt to use ES6-style Array subclass if possible.\n    NodeList = requireNodeList_es6();\n  } catch (e) {\n    // No support for subclassing array, return an actual Array object.\n    NodeList = requireNodeList_es5();\n  }\n  NodeList_1 = NodeList;\n  return NodeList_1;\n}\nvar ContainerNode_1;\nvar hasRequiredContainerNode;\nfunction requireContainerNode() {\n  if (hasRequiredContainerNode) return ContainerNode_1;\n  hasRequiredContainerNode = 1;\n  ContainerNode_1 = ContainerNode;\n  var Node = requireNode();\n  var NodeList = requireNodeList();\n\n  // This class defines common functionality for node subtypes that\n  // can have children\n\n  function ContainerNode() {\n    Node.call(this);\n    this._firstChild = this._childNodes = null;\n  }\n\n  // Primary representation is a circular linked list of siblings\n  ContainerNode.prototype = Object.create(Node.prototype, {\n    hasChildNodes: {\n      value: function () {\n        if (this._childNodes) {\n          return this._childNodes.length > 0;\n        }\n        return this._firstChild !== null;\n      }\n    },\n    childNodes: {\n      get: function () {\n        this._ensureChildNodes();\n        return this._childNodes;\n      }\n    },\n    firstChild: {\n      get: function () {\n        if (this._childNodes) {\n          return this._childNodes.length === 0 ? null : this._childNodes[0];\n        }\n        return this._firstChild;\n      }\n    },\n    lastChild: {\n      get: function () {\n        var kids = this._childNodes,\n          first;\n        if (kids) {\n          return kids.length === 0 ? null : kids[kids.length - 1];\n        }\n        first = this._firstChild;\n        if (first === null) {\n          return null;\n        }\n        return first._previousSibling; // circular linked list\n      }\n    },\n    _ensureChildNodes: {\n      value: function () {\n        if (this._childNodes) {\n          return;\n        }\n        var first = this._firstChild,\n          kid = first,\n          childNodes = this._childNodes = new NodeList();\n        if (first) do {\n          childNodes.push(kid);\n          kid = kid._nextSibling;\n        } while (kid !== first); // circular linked list\n        this._firstChild = null; // free memory\n      }\n    },\n    // Remove all of this node's children.  This is a minor\n    // optimization that only calls modify() once.\n    removeChildren: {\n      value: function removeChildren() {\n        var root = this.rooted ? this.ownerDocument : null,\n          next = this.firstChild,\n          kid;\n        while (next !== null) {\n          kid = next;\n          next = kid.nextSibling;\n          if (root) root.mutateRemove(kid);\n          kid.parentNode = null;\n        }\n        if (this._childNodes) {\n          this._childNodes.length = 0;\n        } else {\n          this._firstChild = null;\n        }\n        this.modify(); // Update last modified type once only\n      }\n    }\n  });\n  return ContainerNode_1;\n}\nvar xmlnames = {};\nvar hasRequiredXmlnames;\nfunction requireXmlnames() {\n  if (hasRequiredXmlnames) return xmlnames;\n  hasRequiredXmlnames = 1;\n  // This grammar is from the XML and XML Namespace specs. It specifies whether\n  // a string (such as an element or attribute name) is a valid Name or QName.\n  //\n  // Name           ::= NameStartChar (NameChar)*\n  // NameStartChar  ::= \":\" | [A-Z] | \"_\" | [a-z] |\n  //                    [#xC0-#xD6] | [#xD8-#xF6] | [#xF8-#x2FF] |\n  //                    [#x370-#x37D] | [#x37F-#x1FFF] |\n  //                    [#x200C-#x200D] | [#x2070-#x218F] |\n  //                    [#x2C00-#x2FEF] | [#x3001-#xD7FF] |\n  //                    [#xF900-#xFDCF] | [#xFDF0-#xFFFD] |\n  //                    [#x10000-#xEFFFF]\n  //\n  // NameChar       ::= NameStartChar | \"-\" | \".\" | [0-9] |\n  //                    #xB7 | [#x0300-#x036F] | [#x203F-#x2040]\n  //\n  // QName          ::= PrefixedName| UnprefixedName\n  // PrefixedName   ::= Prefix ':' LocalPart\n  // UnprefixedName ::= LocalPart\n  // Prefix         ::= NCName\n  // LocalPart      ::= NCName\n  // NCName         ::= Name - (Char* ':' Char*)\n  //                    # An XML Name, minus the \":\"\n  //\n\n  xmlnames.isValidName = isValidName;\n  xmlnames.isValidQName = isValidQName;\n\n  // Most names will be ASCII only. Try matching against simple regexps first\n  var simplename = /^[_:A-Za-z][-.:\\w]+$/;\n  var simpleqname = /^([_A-Za-z][-.\\w]+|[_A-Za-z][-.\\w]+:[_A-Za-z][-.\\w]+)$/;\n\n  // If the regular expressions above fail, try more complex ones that work\n  // for any identifiers using codepoints from the Unicode BMP\n  var ncnamestartchars = \"_A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02ff\\u0370-\\u037D\\u037F-\\u1FFF\\u200C-\\u200D\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\";\n  var ncnamechars = \"-._A-Za-z0-9\\u00B7\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02ff\\u0300-\\u037D\\u037F-\\u1FFF\\u200C\\u200D\\u203f\\u2040\\u2070-\\u218F\\u2C00-\\u2FEF\\u3001-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFFFD\";\n  var ncname = \"[\" + ncnamestartchars + \"][\" + ncnamechars + \"]*\";\n  var namestartchars = ncnamestartchars + \":\";\n  var namechars = ncnamechars + \":\";\n  var name = new RegExp(\"^[\" + namestartchars + \"]\" + \"[\" + namechars + \"]*$\");\n  var qname = new RegExp(\"^(\" + ncname + \"|\" + ncname + \":\" + ncname + \")$\");\n\n  // XML says that these characters are also legal:\n  // [#x10000-#xEFFFF].  So if the patterns above fail, and the\n  // target string includes surrogates, then try the following\n  // patterns that allow surrogates and then run an extra validation\n  // step to make sure that the surrogates are in valid pairs and in\n  // the right range.  Note that since the characters \\uf0000 to \\u1f0000\n  // are not allowed, it means that the high surrogate can only go up to\n  // \\uDB7f instead of \\uDBFF.\n  var hassurrogates = /[\\uD800-\\uDB7F\\uDC00-\\uDFFF]/;\n  var surrogatechars = /[\\uD800-\\uDB7F\\uDC00-\\uDFFF]/g;\n  var surrogatepairs = /[\\uD800-\\uDB7F][\\uDC00-\\uDFFF]/g;\n\n  // Modify the variables above to allow surrogates\n  ncnamestartchars += \"\\uD800-\\uDB7F\\uDC00-\\uDFFF\";\n  ncnamechars += \"\\uD800-\\uDB7F\\uDC00-\\uDFFF\";\n  ncname = \"[\" + ncnamestartchars + \"][\" + ncnamechars + \"]*\";\n  namestartchars = ncnamestartchars + \":\";\n  namechars = ncnamechars + \":\";\n\n  // Build another set of regexps that include surrogates\n  var surrogatename = new RegExp(\"^[\" + namestartchars + \"]\" + \"[\" + namechars + \"]*$\");\n  var surrogateqname = new RegExp(\"^(\" + ncname + \"|\" + ncname + \":\" + ncname + \")$\");\n  function isValidName(s) {\n    if (simplename.test(s)) return true; // Plain ASCII\n    if (name.test(s)) return true; // Unicode BMP\n\n    // Maybe the tests above failed because s includes surrogate pairs\n    // Most likely, though, they failed for some more basic syntax problem\n    if (!hassurrogates.test(s)) return false;\n\n    // Is the string a valid name if we allow surrogates?\n    if (!surrogatename.test(s)) return false;\n\n    // Finally, are the surrogates all correctly paired up?\n    var chars = s.match(surrogatechars),\n      pairs = s.match(surrogatepairs);\n    return pairs !== null && 2 * pairs.length === chars.length;\n  }\n  function isValidQName(s) {\n    if (simpleqname.test(s)) return true; // Plain ASCII\n    if (qname.test(s)) return true; // Unicode BMP\n\n    if (!hassurrogates.test(s)) return false;\n    if (!surrogateqname.test(s)) return false;\n    var chars = s.match(surrogatechars),\n      pairs = s.match(surrogatepairs);\n    return pairs !== null && 2 * pairs.length === chars.length;\n  }\n  return xmlnames;\n}\nvar attributes = {};\nvar hasRequiredAttributes;\nfunction requireAttributes() {\n  if (hasRequiredAttributes) return attributes;\n  hasRequiredAttributes = 1;\n  var utils = requireUtils();\n  attributes.property = function (attr) {\n    if (Array.isArray(attr.type)) {\n      var valid = Object.create(null);\n      attr.type.forEach(function (val) {\n        valid[val.value || val] = val.alias || val;\n      });\n      var missingValueDefault = attr.missing;\n      if (missingValueDefault === undefined) {\n        missingValueDefault = null;\n      }\n      var invalidValueDefault = attr.invalid;\n      if (invalidValueDefault === undefined) {\n        invalidValueDefault = missingValueDefault;\n      }\n      return {\n        get: function () {\n          var v = this._getattr(attr.name);\n          if (v === null) return missingValueDefault;\n          v = valid[v.toLowerCase()];\n          if (v !== undefined) return v;\n          if (invalidValueDefault !== null) return invalidValueDefault;\n          return v;\n        },\n        set: function (v) {\n          this._setattr(attr.name, v);\n        }\n      };\n    } else if (attr.type === Boolean) {\n      return {\n        get: function () {\n          return this.hasAttribute(attr.name);\n        },\n        set: function (v) {\n          if (v) {\n            this._setattr(attr.name, '');\n          } else {\n            this.removeAttribute(attr.name);\n          }\n        }\n      };\n    } else if (attr.type === Number || attr.type === \"long\" || attr.type === \"unsigned long\" || attr.type === \"limited unsigned long with fallback\") {\n      return numberPropDesc(attr);\n    } else if (!attr.type || attr.type === String) {\n      return {\n        get: function () {\n          return this._getattr(attr.name) || '';\n        },\n        set: function (v) {\n          if (attr.treatNullAsEmptyString && v === null) {\n            v = '';\n          }\n          this._setattr(attr.name, v);\n        }\n      };\n    } else if (typeof attr.type === 'function') {\n      return attr.type(attr.name, attr);\n    }\n    throw new Error('Invalid attribute definition');\n  };\n\n  // See http://www.whatwg.org/specs/web-apps/current-work/#reflect\n  //\n  // defval is the default value. If it is a function, then that function\n  // will be invoked as a method of the element to obtain the default.\n  // If no default is specified for a given attribute, then the default\n  // depends on the type of the attribute, but since this function handles\n  // 4 integer cases, you must specify the default value in each call\n  //\n  // min and max define a valid range for getting the attribute.\n  //\n  // setmin defines a minimum value when setting.  If the value is less\n  // than that, then throw INDEX_SIZE_ERR.\n  //\n  // Conveniently, JavaScript's parseInt function appears to be\n  // compatible with HTML's 'rules for parsing integers'\n  function numberPropDesc(a) {\n    var def;\n    if (typeof a.default === 'function') {\n      def = a.default;\n    } else if (typeof a.default === 'number') {\n      def = function () {\n        return a.default;\n      };\n    } else {\n      def = function () {\n        utils.assert(false, typeof a.default);\n      };\n    }\n    var unsigned_long = a.type === 'unsigned long';\n    var signed_long = a.type === 'long';\n    var unsigned_fallback = a.type === 'limited unsigned long with fallback';\n    var min = a.min,\n      max = a.max,\n      setmin = a.setmin;\n    if (min === undefined) {\n      if (unsigned_long) min = 0;\n      if (signed_long) min = -2147483648;\n      if (unsigned_fallback) min = 1;\n    }\n    if (max === undefined) {\n      if (unsigned_long || signed_long || unsigned_fallback) max = 0x7FFFFFFF;\n    }\n    return {\n      get: function () {\n        var v = this._getattr(a.name);\n        var n = a.float ? parseFloat(v) : parseInt(v, 10);\n        if (v === null || !isFinite(n) || min !== undefined && n < min || max !== undefined && n > max) {\n          return def.call(this);\n        }\n        if (unsigned_long || signed_long || unsigned_fallback) {\n          if (!/^[ \\t\\n\\f\\r]*[-+]?[0-9]/.test(v)) {\n            return def.call(this);\n          }\n          n = n | 0; // jshint ignore:line\n        }\n        return n;\n      },\n      set: function (v) {\n        if (!a.float) {\n          v = Math.floor(v);\n        }\n        if (setmin !== undefined && v < setmin) {\n          utils.IndexSizeError(a.name + ' set to ' + v);\n        }\n        if (unsigned_long) {\n          v = v < 0 || v > 0x7FFFFFFF ? def.call(this) : v | 0; // jshint ignore:line\n        } else if (unsigned_fallback) {\n          v = v < 1 || v > 0x7FFFFFFF ? def.call(this) : v | 0; // jshint ignore:line\n        } else if (signed_long) {\n          v = v < -2147483648 || v > 0x7FFFFFFF ? def.call(this) : v | 0; // jshint ignore:line\n        }\n        this._setattr(a.name, String(v));\n      }\n    };\n  }\n\n  // This is a utility function for setting up change handler functions\n  // for attributes like 'id' that require special handling when they change.\n  attributes.registerChangeHandler = function (c, name, handler) {\n    var p = c.prototype;\n\n    // If p does not already have its own _attributeChangeHandlers\n    // then create one for it, inheriting from the inherited\n    // _attributeChangeHandlers. At the top (for the Element class) the\n    // _attributeChangeHandlers object will be created with a null prototype.\n    if (!Object.prototype.hasOwnProperty.call(p, '_attributeChangeHandlers')) {\n      p._attributeChangeHandlers = Object.create(p._attributeChangeHandlers || null);\n    }\n    p._attributeChangeHandlers[name] = handler;\n  };\n  return attributes;\n}\nvar FilteredElementList_1;\nvar hasRequiredFilteredElementList;\nfunction requireFilteredElementList() {\n  if (hasRequiredFilteredElementList) return FilteredElementList_1;\n  hasRequiredFilteredElementList = 1;\n  FilteredElementList_1 = FilteredElementList;\n  var Node = requireNode();\n\n  //\n  // This file defines node list implementation that lazily traverses\n  // the document tree (or a subtree rooted at any element) and includes\n  // only those elements for which a specified filter function returns true.\n  // It is used to implement the\n  // {Document,Element}.getElementsBy{TagName,ClassName}{,NS} methods.\n  //\n  // XXX this should inherit from NodeList\n\n  function FilteredElementList(root, filter) {\n    this.root = root;\n    this.filter = filter;\n    this.lastModTime = root.lastModTime;\n    this.done = false;\n    this.cache = [];\n    this.traverse();\n  }\n  FilteredElementList.prototype = Object.create(Object.prototype, {\n    length: {\n      get: function () {\n        this.checkcache();\n        if (!this.done) this.traverse();\n        return this.cache.length;\n      }\n    },\n    item: {\n      value: function (n) {\n        this.checkcache();\n        if (!this.done && n >= this.cache.length) {\n          // This can lead to O(N^2) behavior if we stop when we get to n\n          // and the caller is iterating through the items in order; so\n          // be sure to do the full traverse here.\n          this.traverse(/*n*/);\n        }\n        return this.cache[n];\n      }\n    },\n    checkcache: {\n      value: function () {\n        if (this.lastModTime !== this.root.lastModTime) {\n          // subtree has changed, so invalidate cache\n          for (var i = this.cache.length - 1; i >= 0; i--) {\n            this[i] = undefined;\n          }\n          this.cache.length = 0;\n          this.done = false;\n          this.lastModTime = this.root.lastModTime;\n        }\n      }\n    },\n    // If n is specified, then traverse the tree until we've found the nth\n    // item (or until we've found all items).  If n is not specified,\n    // traverse until we've found all items.\n    traverse: {\n      value: function (n) {\n        // increment n so we can compare to length, and so it is never falsy\n        if (n !== undefined) n++;\n        var elt;\n        while ((elt = this.next()) !== null) {\n          this[this.cache.length] = elt; //XXX Use proxy instead\n          this.cache.push(elt);\n          if (n && this.cache.length === n) return;\n        }\n\n        // no next element, so we've found everything\n        this.done = true;\n      }\n    },\n    // Return the next element under root that matches filter\n    next: {\n      value: function () {\n        var start = this.cache.length === 0 ? this.root // Start at the root or at\n        : this.cache[this.cache.length - 1]; // the last element we found\n\n        var elt;\n        if (start.nodeType === Node.DOCUMENT_NODE) elt = start.documentElement;else elt = start.nextElement(this.root);\n        while (elt) {\n          if (this.filter(elt)) {\n            return elt;\n          }\n          elt = elt.nextElement(this.root);\n        }\n        return null;\n      }\n    }\n  });\n  return FilteredElementList_1;\n}\nvar DOMTokenList_1;\nvar hasRequiredDOMTokenList;\nfunction requireDOMTokenList() {\n  if (hasRequiredDOMTokenList) return DOMTokenList_1;\n  hasRequiredDOMTokenList = 1;\n  // DOMTokenList implementation based on https://github.com/Raynos/DOM-shim\n  var utils = requireUtils();\n  DOMTokenList_1 = DOMTokenList;\n  function DOMTokenList(getter, setter) {\n    this._getString = getter;\n    this._setString = setter;\n    this._length = 0;\n    this._lastStringValue = '';\n    this._update();\n  }\n  Object.defineProperties(DOMTokenList.prototype, {\n    length: {\n      get: function () {\n        return this._length;\n      }\n    },\n    item: {\n      value: function (index) {\n        var list = getList(this);\n        if (index < 0 || index >= list.length) {\n          return null;\n        }\n        return list[index];\n      }\n    },\n    contains: {\n      value: function (token) {\n        token = String(token); // no error checking for contains()\n        var list = getList(this);\n        return list.indexOf(token) > -1;\n      }\n    },\n    add: {\n      value: function () {\n        var list = getList(this);\n        for (var i = 0, len = arguments.length; i < len; i++) {\n          var token = handleErrors(arguments[i]);\n          if (list.indexOf(token) < 0) {\n            list.push(token);\n          }\n        }\n        // Note: as per spec, if handleErrors() throws any errors, we never\n        // make it here and none of the changes take effect.\n        // Also per spec: we run the \"update steps\" even if no change was\n        // made (ie, if the token already existed)\n        this._update(list);\n      }\n    },\n    remove: {\n      value: function () {\n        var list = getList(this);\n        for (var i = 0, len = arguments.length; i < len; i++) {\n          var token = handleErrors(arguments[i]);\n          var index = list.indexOf(token);\n          if (index > -1) {\n            list.splice(index, 1);\n          }\n        }\n        // Note: as per spec, if handleErrors() throws any errors, we never\n        // make it here and none of the changes take effect.\n        // Also per spec: we run the \"update steps\" even if no change was\n        // made (ie, if the token wasn't previously present)\n        this._update(list);\n      }\n    },\n    toggle: {\n      value: function toggle(token, force) {\n        token = handleErrors(token);\n        if (this.contains(token)) {\n          if (force === undefined || force === false) {\n            this.remove(token);\n            return false;\n          }\n          return true;\n        } else {\n          if (force === undefined || force === true) {\n            this.add(token);\n            return true;\n          }\n          return false;\n        }\n      }\n    },\n    replace: {\n      value: function replace(token, newToken) {\n        // weird corner case of spec: if `token` contains whitespace, but\n        // `newToken` is the empty string, we must throw SyntaxError not\n        // InvalidCharacterError (sigh)\n        if (String(newToken) === '') {\n          utils.SyntaxError();\n        }\n        token = handleErrors(token);\n        newToken = handleErrors(newToken);\n        var list = getList(this);\n        var idx = list.indexOf(token);\n        if (idx < 0) {\n          // Note that, per spec, we do not run the update steps on this path.\n          return false;\n        }\n        var idx2 = list.indexOf(newToken);\n        if (idx2 < 0) {\n          list[idx] = newToken;\n        } else {\n          // \"replace the first instance of either `token` or `newToken` with\n          // `newToken` and remove all other instances\"\n          if (idx < idx2) {\n            list[idx] = newToken;\n            list.splice(idx2, 1);\n          } else {\n            // idx2 is already `newToken`\n            list.splice(idx, 1);\n          }\n        }\n        this._update(list);\n        return true;\n      }\n    },\n    toString: {\n      value: function () {\n        return this._getString();\n      }\n    },\n    value: {\n      get: function () {\n        return this._getString();\n      },\n      set: function (v) {\n        this._setString(v);\n        this._update();\n      }\n    },\n    // Called when the setter is called from outside this interface.\n    _update: {\n      value: function (list) {\n        if (list) {\n          fixIndex(this, list);\n          this._setString(list.join(\" \").trim());\n        } else {\n          fixIndex(this, getList(this));\n        }\n        this._lastStringValue = this._getString();\n      }\n    }\n  });\n  function fixIndex(clist, list) {\n    var oldLength = clist._length;\n    var i;\n    clist._length = list.length;\n    for (i = 0; i < list.length; i++) {\n      clist[i] = list[i];\n    }\n    // Clear/free old entries.\n    for (; i < oldLength; i++) {\n      clist[i] = undefined;\n    }\n  }\n  function handleErrors(token) {\n    token = String(token);\n    if (token === \"\") {\n      utils.SyntaxError();\n    }\n    if (/[ \\t\\r\\n\\f]/.test(token)) {\n      utils.InvalidCharacterError();\n    }\n    return token;\n  }\n  function toArray(clist) {\n    var length = clist._length;\n    var arr = Array(length);\n    for (var i = 0; i < length; i++) {\n      arr[i] = clist[i];\n    }\n    return arr;\n  }\n  function getList(clist) {\n    var strProp = clist._getString();\n    if (strProp === clist._lastStringValue) {\n      return toArray(clist);\n    }\n    var str = strProp.replace(/(^[ \\t\\r\\n\\f]+)|([ \\t\\r\\n\\f]+$)/g, '');\n    if (str === \"\") {\n      return [];\n    } else {\n      var seen = Object.create(null);\n      return str.split(/[ \\t\\r\\n\\f]+/g).filter(function (n) {\n        var key = '$' + n;\n        if (seen[key]) {\n          return false;\n        }\n        seen[key] = true;\n        return true;\n      });\n    }\n  }\n  return DOMTokenList_1;\n}\nvar select = {\n  exports: {}\n};\nvar hasRequiredSelect;\nfunction requireSelect() {\n  if (hasRequiredSelect) return select.exports;\n  hasRequiredSelect = 1;\n  (function (module, exports) {\n    /* jshint eqnull: true */\n    /**\n     * Zest (https://github.com/chjj/zest)\n     * A css selector engine.\n     * Copyright (c) 2011-2012, Christopher Jeffrey. (MIT Licensed)\n     * Domino version based on Zest v0.1.3 with bugfixes applied.\n     */\n\n    /**\n     * Helpers\n     */\n\n    var window = Object.create(null, {\n      location: {\n        get: function () {\n          throw new Error('window.location is not supported.');\n        }\n      }\n    });\n    var compareDocumentPosition = function (a, b) {\n      return a.compareDocumentPosition(b);\n    };\n    var order = function (a, b) {\n      /* jshint bitwise: false */\n      return compareDocumentPosition(a, b) & 2 ? 1 : -1;\n    };\n    var next = function (el) {\n      while ((el = el.nextSibling) && el.nodeType !== 1);\n      return el;\n    };\n    var prev = function (el) {\n      while ((el = el.previousSibling) && el.nodeType !== 1);\n      return el;\n    };\n    var child = function (el) {\n      /*jshint -W084 */\n      if (el = el.firstChild) {\n        while (el.nodeType !== 1 && (el = el.nextSibling));\n      }\n      return el;\n    };\n    var lastChild = function (el) {\n      /*jshint -W084 */\n      if (el = el.lastChild) {\n        while (el.nodeType !== 1 && (el = el.previousSibling));\n      }\n      return el;\n    };\n    var parentIsElement = function (n) {\n      if (!n.parentNode) {\n        return false;\n      }\n      var nodeType = n.parentNode.nodeType;\n      // The root `html` element can be a first- or last-child, too.\n      return nodeType === 1 || nodeType === 9;\n    };\n    var unquote = function (str) {\n      if (!str) return str;\n      var ch = str[0];\n      if (ch === '\"' || ch === '\\'') {\n        if (str[str.length - 1] === ch) {\n          str = str.slice(1, -1);\n        } else {\n          // bad string.\n          str = str.slice(1);\n        }\n        return str.replace(rules.str_escape, function (s) {\n          var m = /^\\\\(?:([0-9A-Fa-f]+)|([\\r\\n\\f]+))/.exec(s);\n          if (!m) {\n            return s.slice(1);\n          }\n          if (m[2]) {\n            return ''; /* escaped newlines are ignored in strings. */\n          }\n          var cp = parseInt(m[1], 16);\n          return String.fromCodePoint ? String.fromCodePoint(cp) :\n          // Not all JavaScript implementations have String.fromCodePoint yet.\n          String.fromCharCode(cp);\n        });\n      } else if (rules.ident.test(str)) {\n        return decodeid(str);\n      } else {\n        // NUMBER, PERCENTAGE, DIMENSION, etc\n        return str;\n      }\n    };\n    var decodeid = function (str) {\n      return str.replace(rules.escape, function (s) {\n        var m = /^\\\\([0-9A-Fa-f]+)/.exec(s);\n        if (!m) {\n          return s[1];\n        }\n        var cp = parseInt(m[1], 16);\n        return String.fromCodePoint ? String.fromCodePoint(cp) :\n        // Not all JavaScript implementations have String.fromCodePoint yet.\n        String.fromCharCode(cp);\n      });\n    };\n    var indexOf = function () {\n      if (Array.prototype.indexOf) {\n        return Array.prototype.indexOf;\n      }\n      return function (obj, item) {\n        var i = this.length;\n        while (i--) {\n          if (this[i] === item) return i;\n        }\n        return -1;\n      };\n    }();\n    var makeInside = function (start, end) {\n      var regex = rules.inside.source.replace(/</g, start).replace(/>/g, end);\n      return new RegExp(regex);\n    };\n    var replace = function (regex, name, val) {\n      regex = regex.source;\n      regex = regex.replace(name, val.source || val);\n      return new RegExp(regex);\n    };\n    var truncateUrl = function (url, num) {\n      return url.replace(/^(?:\\w+:\\/\\/|\\/+)/, '').replace(/(?:\\/+|\\/*#.*?)$/, '').split('/', num).join('/');\n    };\n\n    /**\n     * Handle `nth` Selectors\n     */\n\n    var parseNth = function (param_, test) {\n      var param = param_.replace(/\\s+/g, ''),\n        cap;\n      if (param === 'even') {\n        param = '2n+0';\n      } else if (param === 'odd') {\n        param = '2n+1';\n      } else if (param.indexOf('n') === -1) {\n        param = '0n' + param;\n      }\n      cap = /^([+-])?(\\d+)?n([+-])?(\\d+)?$/.exec(param);\n      return {\n        group: cap[1] === '-' ? -(cap[2] || 1) : +(cap[2] || 1),\n        offset: cap[4] ? cap[3] === '-' ? -cap[4] : +cap[4] : 0\n      };\n    };\n    var nth = function (param_, test, last) {\n      var param = parseNth(param_),\n        group = param.group,\n        offset = param.offset,\n        find = !last ? child : lastChild,\n        advance = !last ? next : prev;\n      return function (el) {\n        if (!parentIsElement(el)) return;\n        var rel = find(el.parentNode),\n          pos = 0;\n        while (rel) {\n          if (test(rel, el)) pos++;\n          if (rel === el) {\n            pos -= offset;\n            return group && pos ? pos % group === 0 && pos < 0 === group < 0 : !pos;\n          }\n          rel = advance(rel);\n        }\n      };\n    };\n\n    /**\n     * Simple Selectors\n     */\n\n    var selectors = {\n      '*': function () {\n        return function () {\n          return true;\n        };\n      }(),\n      'type': function (type) {\n        type = type.toLowerCase();\n        return function (el) {\n          return el.nodeName.toLowerCase() === type;\n        };\n      },\n      'attr': function (key, op, val, i) {\n        op = operators[op];\n        return function (el) {\n          var attr;\n          switch (key) {\n            case 'for':\n              attr = el.htmlFor;\n              break;\n            case 'class':\n              // className is '' when non-existent\n              // getAttribute('class') is null\n              attr = el.className;\n              if (attr === '' && el.getAttribute('class') == null) {\n                attr = null;\n              }\n              break;\n            case 'href':\n            case 'src':\n              attr = el.getAttribute(key, 2);\n              break;\n            case 'title':\n              // getAttribute('title') can be '' when non-existent sometimes?\n              attr = el.getAttribute('title') || null;\n              break;\n            // careful with attributes with special getter functions\n            case 'id':\n            case 'lang':\n            case 'dir':\n            case 'accessKey':\n            case 'hidden':\n            case 'tabIndex':\n            case 'style':\n              if (el.getAttribute) {\n                attr = el.getAttribute(key);\n                break;\n              }\n            /* falls through */\n            default:\n              if (el.hasAttribute && !el.hasAttribute(key)) {\n                break;\n              }\n              attr = el[key] != null ? el[key] : el.getAttribute && el.getAttribute(key);\n              break;\n          }\n          if (attr == null) return;\n          attr = attr + '';\n          if (i) {\n            attr = attr.toLowerCase();\n            val = val.toLowerCase();\n          }\n          return op(attr, val);\n        };\n      },\n      ':first-child': function (el) {\n        return !prev(el) && parentIsElement(el);\n      },\n      ':last-child': function (el) {\n        return !next(el) && parentIsElement(el);\n      },\n      ':only-child': function (el) {\n        return !prev(el) && !next(el) && parentIsElement(el);\n      },\n      ':nth-child': function (param, last) {\n        return nth(param, function () {\n          return true;\n        }, last);\n      },\n      ':nth-last-child': function (param) {\n        return selectors[':nth-child'](param, true);\n      },\n      ':root': function (el) {\n        return el.ownerDocument.documentElement === el;\n      },\n      ':empty': function (el) {\n        return !el.firstChild;\n      },\n      ':not': function (sel) {\n        var test = compileGroup(sel);\n        return function (el) {\n          return !test(el);\n        };\n      },\n      ':first-of-type': function (el) {\n        if (!parentIsElement(el)) return;\n        var type = el.nodeName;\n        /*jshint -W084 */\n        while (el = prev(el)) {\n          if (el.nodeName === type) return;\n        }\n        return true;\n      },\n      ':last-of-type': function (el) {\n        if (!parentIsElement(el)) return;\n        var type = el.nodeName;\n        /*jshint -W084 */\n        while (el = next(el)) {\n          if (el.nodeName === type) return;\n        }\n        return true;\n      },\n      ':only-of-type': function (el) {\n        return selectors[':first-of-type'](el) && selectors[':last-of-type'](el);\n      },\n      ':nth-of-type': function (param, last) {\n        return nth(param, function (rel, el) {\n          return rel.nodeName === el.nodeName;\n        }, last);\n      },\n      ':nth-last-of-type': function (param) {\n        return selectors[':nth-of-type'](param, true);\n      },\n      ':checked': function (el) {\n        return !!(el.checked || el.selected);\n      },\n      ':indeterminate': function (el) {\n        return !selectors[':checked'](el);\n      },\n      ':enabled': function (el) {\n        return !el.disabled && el.type !== 'hidden';\n      },\n      ':disabled': function (el) {\n        return !!el.disabled;\n      },\n      ':target': function (el) {\n        return el.id === window.location.hash.substring(1);\n      },\n      ':focus': function (el) {\n        return el === el.ownerDocument.activeElement;\n      },\n      ':is': function (sel) {\n        return compileGroup(sel);\n      },\n      // :matches is an older name for :is; see\n      // https://github.com/w3c/csswg-drafts/issues/3258\n      ':matches': function (sel) {\n        return selectors[':is'](sel);\n      },\n      ':nth-match': function (param, last) {\n        var args = param.split(/\\s*,\\s*/),\n          arg = args.shift(),\n          test = compileGroup(args.join(','));\n        return nth(arg, test, last);\n      },\n      ':nth-last-match': function (param) {\n        return selectors[':nth-match'](param, true);\n      },\n      ':links-here': function (el) {\n        return el + '' === window.location + '';\n      },\n      ':lang': function (param) {\n        return function (el) {\n          while (el) {\n            if (el.lang) return el.lang.indexOf(param) === 0;\n            el = el.parentNode;\n          }\n        };\n      },\n      ':dir': function (param) {\n        return function (el) {\n          while (el) {\n            if (el.dir) return el.dir === param;\n            el = el.parentNode;\n          }\n        };\n      },\n      ':scope': function (el, con) {\n        var context = con || el.ownerDocument;\n        if (context.nodeType === 9) {\n          return el === context.documentElement;\n        }\n        return el === context;\n      },\n      ':any-link': function (el) {\n        return typeof el.href === 'string';\n      },\n      ':local-link': function (el) {\n        if (el.nodeName) {\n          return el.href && el.host === window.location.host;\n        }\n        var param = +el + 1;\n        return function (el) {\n          if (!el.href) return;\n          var url = window.location + '',\n            href = el + '';\n          return truncateUrl(url, param) === truncateUrl(href, param);\n        };\n      },\n      ':default': function (el) {\n        return !!el.defaultSelected;\n      },\n      ':valid': function (el) {\n        return el.willValidate || el.validity && el.validity.valid;\n      },\n      ':invalid': function (el) {\n        return !selectors[':valid'](el);\n      },\n      ':in-range': function (el) {\n        return el.value > el.min && el.value <= el.max;\n      },\n      ':out-of-range': function (el) {\n        return !selectors[':in-range'](el);\n      },\n      ':required': function (el) {\n        return !!el.required;\n      },\n      ':optional': function (el) {\n        return !el.required;\n      },\n      ':read-only': function (el) {\n        if (el.readOnly) return true;\n        var attr = el.getAttribute('contenteditable'),\n          prop = el.contentEditable,\n          name = el.nodeName.toLowerCase();\n        name = name !== 'input' && name !== 'textarea';\n        return (name || el.disabled) && attr == null && prop !== 'true';\n      },\n      ':read-write': function (el) {\n        return !selectors[':read-only'](el);\n      },\n      ':hover': function () {\n        throw new Error(':hover is not supported.');\n      },\n      ':active': function () {\n        throw new Error(':active is not supported.');\n      },\n      ':link': function () {\n        throw new Error(':link is not supported.');\n      },\n      ':visited': function () {\n        throw new Error(':visited is not supported.');\n      },\n      ':column': function () {\n        throw new Error(':column is not supported.');\n      },\n      ':nth-column': function () {\n        throw new Error(':nth-column is not supported.');\n      },\n      ':nth-last-column': function () {\n        throw new Error(':nth-last-column is not supported.');\n      },\n      ':current': function () {\n        throw new Error(':current is not supported.');\n      },\n      ':past': function () {\n        throw new Error(':past is not supported.');\n      },\n      ':future': function () {\n        throw new Error(':future is not supported.');\n      },\n      // Non-standard, for compatibility purposes.\n      ':contains': function (param) {\n        return function (el) {\n          var text = el.innerText || el.textContent || el.value || '';\n          return text.indexOf(param) !== -1;\n        };\n      },\n      ':has': function (param) {\n        return function (el) {\n          return find(param, el).length > 0;\n        };\n      }\n      // Potentially add more pseudo selectors for\n      // compatibility with sizzle and most other\n      // selector engines (?).\n    };\n\n    /**\n     * Attribute Operators\n     */\n\n    var operators = {\n      '-': function () {\n        return true;\n      },\n      '=': function (attr, val) {\n        return attr === val;\n      },\n      '*=': function (attr, val) {\n        return attr.indexOf(val) !== -1;\n      },\n      '~=': function (attr, val) {\n        var i, s, f, l;\n        for (s = 0; true; s = i + 1) {\n          i = attr.indexOf(val, s);\n          if (i === -1) return false;\n          f = attr[i - 1];\n          l = attr[i + val.length];\n          if ((!f || f === ' ') && (!l || l === ' ')) return true;\n        }\n      },\n      '|=': function (attr, val) {\n        var i = attr.indexOf(val),\n          l;\n        if (i !== 0) return;\n        l = attr[i + val.length];\n        return l === '-' || !l;\n      },\n      '^=': function (attr, val) {\n        return attr.indexOf(val) === 0;\n      },\n      '$=': function (attr, val) {\n        var i = attr.lastIndexOf(val);\n        return i !== -1 && i + val.length === attr.length;\n      },\n      // non-standard\n      '!=': function (attr, val) {\n        return attr !== val;\n      }\n    };\n\n    /**\n     * Combinator Logic\n     */\n\n    var combinators = {\n      ' ': function (test) {\n        return function (el) {\n          /*jshint -W084 */\n          while (el = el.parentNode) {\n            if (test(el)) return el;\n          }\n        };\n      },\n      '>': function (test) {\n        return function (el) {\n          /*jshint -W084 */\n          if (el = el.parentNode) {\n            return test(el) && el;\n          }\n        };\n      },\n      '+': function (test) {\n        return function (el) {\n          /*jshint -W084 */\n          if (el = prev(el)) {\n            return test(el) && el;\n          }\n        };\n      },\n      '~': function (test) {\n        return function (el) {\n          /*jshint -W084 */\n          while (el = prev(el)) {\n            if (test(el)) return el;\n          }\n        };\n      },\n      'noop': function (test) {\n        return function (el) {\n          return test(el) && el;\n        };\n      },\n      'ref': function (test, name) {\n        var node;\n        function ref(el) {\n          var doc = el.ownerDocument,\n            nodes = doc.getElementsByTagName('*'),\n            i = nodes.length;\n          while (i--) {\n            node = nodes[i];\n            if (ref.test(el)) {\n              node = null;\n              return true;\n            }\n          }\n          node = null;\n        }\n        ref.combinator = function (el) {\n          if (!node || !node.getAttribute) return;\n          var attr = node.getAttribute(name) || '';\n          if (attr[0] === '#') attr = attr.substring(1);\n          if (attr === el.id && test(node)) {\n            return node;\n          }\n        };\n        return ref;\n      }\n    };\n\n    /**\n     * Grammar\n     */\n\n    var rules = {\n      escape: /\\\\(?:[^0-9A-Fa-f\\r\\n]|[0-9A-Fa-f]{1,6}[\\r\\n\\t ]?)/g,\n      str_escape: /(escape)|\\\\(\\n|\\r\\n?|\\f)/g,\n      nonascii: /[\\u00A0-\\uFFFF]/,\n      cssid: /(?:(?!-?[0-9])(?:escape|nonascii|[-_a-zA-Z0-9])+)/,\n      qname: /^ *(cssid|\\*)/,\n      simple: /^(?:([.#]cssid)|pseudo|attr)/,\n      ref: /^ *\\/(cssid)\\/ */,\n      combinator: /^(?: +([^ \\w*.#\\\\]) +|( )+|([^ \\w*.#\\\\]))(?! *$)/,\n      attr: /^\\[(cssid)(?:([^\\w]?=)(inside))?\\]/,\n      pseudo: /^(:cssid)(?:\\((inside)\\))?/,\n      inside: /(?:\"(?:\\\\\"|[^\"])*\"|'(?:\\\\'|[^'])*'|<[^\"'>]*>|\\\\[\"'>]|[^\"'>])*/,\n      ident: /^(cssid)$/\n    };\n    rules.cssid = replace(rules.cssid, 'nonascii', rules.nonascii);\n    rules.cssid = replace(rules.cssid, 'escape', rules.escape);\n    rules.qname = replace(rules.qname, 'cssid', rules.cssid);\n    rules.simple = replace(rules.simple, 'cssid', rules.cssid);\n    rules.ref = replace(rules.ref, 'cssid', rules.cssid);\n    rules.attr = replace(rules.attr, 'cssid', rules.cssid);\n    rules.pseudo = replace(rules.pseudo, 'cssid', rules.cssid);\n    rules.inside = replace(rules.inside, '[^\"\\'>]*', rules.inside);\n    rules.attr = replace(rules.attr, 'inside', makeInside('\\\\[', '\\\\]'));\n    rules.pseudo = replace(rules.pseudo, 'inside', makeInside('\\\\(', '\\\\)'));\n    rules.simple = replace(rules.simple, 'pseudo', rules.pseudo);\n    rules.simple = replace(rules.simple, 'attr', rules.attr);\n    rules.ident = replace(rules.ident, 'cssid', rules.cssid);\n    rules.str_escape = replace(rules.str_escape, 'escape', rules.escape);\n\n    /**\n     * Compiling\n     */\n\n    var compile = function (sel_) {\n      var sel = sel_.replace(/^\\s+|\\s+$/g, ''),\n        test,\n        filter = [],\n        buff = [],\n        subject,\n        qname,\n        cap,\n        op,\n        ref;\n\n      /*jshint -W084 */\n      while (sel) {\n        if (cap = rules.qname.exec(sel)) {\n          sel = sel.substring(cap[0].length);\n          qname = decodeid(cap[1]);\n          buff.push(tok(qname, true));\n        } else if (cap = rules.simple.exec(sel)) {\n          sel = sel.substring(cap[0].length);\n          qname = '*';\n          buff.push(tok(qname, true));\n          buff.push(tok(cap));\n        } else {\n          throw new SyntaxError('Invalid selector.');\n        }\n        while (cap = rules.simple.exec(sel)) {\n          sel = sel.substring(cap[0].length);\n          buff.push(tok(cap));\n        }\n        if (sel[0] === '!') {\n          sel = sel.substring(1);\n          subject = makeSubject();\n          subject.qname = qname;\n          buff.push(subject.simple);\n        }\n        if (cap = rules.ref.exec(sel)) {\n          sel = sel.substring(cap[0].length);\n          ref = combinators.ref(makeSimple(buff), decodeid(cap[1]));\n          filter.push(ref.combinator);\n          buff = [];\n          continue;\n        }\n        if (cap = rules.combinator.exec(sel)) {\n          sel = sel.substring(cap[0].length);\n          op = cap[1] || cap[2] || cap[3];\n          if (op === ',') {\n            filter.push(combinators.noop(makeSimple(buff)));\n            break;\n          }\n        } else {\n          op = 'noop';\n        }\n        if (!combinators[op]) {\n          throw new SyntaxError('Bad combinator.');\n        }\n        filter.push(combinators[op](makeSimple(buff)));\n        buff = [];\n      }\n      test = makeTest(filter);\n      test.qname = qname;\n      test.sel = sel;\n      if (subject) {\n        subject.lname = test.qname;\n        subject.test = test;\n        subject.qname = subject.qname;\n        subject.sel = test.sel;\n        test = subject;\n      }\n      if (ref) {\n        ref.test = test;\n        ref.qname = test.qname;\n        ref.sel = test.sel;\n        test = ref;\n      }\n      return test;\n    };\n    var tok = function (cap, qname) {\n      // qname\n      if (qname) {\n        return cap === '*' ? selectors['*'] : selectors.type(cap);\n      }\n\n      // class/id\n      if (cap[1]) {\n        return cap[1][0] === '.'\n        // XXX unescape here?  or in attr?\n        ? selectors.attr('class', '~=', decodeid(cap[1].substring(1)), false) : selectors.attr('id', '=', decodeid(cap[1].substring(1)), false);\n      }\n\n      // pseudo-name\n      // inside-pseudo\n      if (cap[2]) {\n        return cap[3] ? selectors[decodeid(cap[2])](unquote(cap[3])) : selectors[decodeid(cap[2])];\n      }\n\n      // attr name\n      // attr op\n      // attr value\n      if (cap[4]) {\n        var value = cap[6];\n        var i = /[\"'\\s]\\s*I$/i.test(value);\n        if (i) {\n          value = value.replace(/\\s*I$/i, '');\n        }\n        return selectors.attr(decodeid(cap[4]), cap[5] || '-', unquote(value), i);\n      }\n      throw new SyntaxError('Unknown Selector.');\n    };\n    var makeSimple = function (func) {\n      var l = func.length,\n        i;\n\n      // Potentially make sure\n      // `el` is truthy.\n      if (l < 2) return func[0];\n      return function (el) {\n        if (!el) return;\n        for (i = 0; i < l; i++) {\n          if (!func[i](el)) return;\n        }\n        return true;\n      };\n    };\n    var makeTest = function (func) {\n      if (func.length < 2) {\n        return function (el) {\n          return !!func[0](el);\n        };\n      }\n      return function (el) {\n        var i = func.length;\n        while (i--) {\n          if (!(el = func[i](el))) return;\n        }\n        return true;\n      };\n    };\n    var makeSubject = function () {\n      var target;\n      function subject(el) {\n        var node = el.ownerDocument,\n          scope = node.getElementsByTagName(subject.lname),\n          i = scope.length;\n        while (i--) {\n          if (subject.test(scope[i]) && target === el) {\n            target = null;\n            return true;\n          }\n        }\n        target = null;\n      }\n      subject.simple = function (el) {\n        target = el;\n        return true;\n      };\n      return subject;\n    };\n    var compileGroup = function (sel) {\n      var test = compile(sel),\n        tests = [test];\n      while (test.sel) {\n        test = compile(test.sel);\n        tests.push(test);\n      }\n      if (tests.length < 2) return test;\n      return function (el) {\n        var l = tests.length,\n          i = 0;\n        for (; i < l; i++) {\n          if (tests[i](el)) return true;\n        }\n      };\n    };\n\n    /**\n     * Selection\n     */\n\n    var find = function (sel, node) {\n      var results = [],\n        test = compile(sel),\n        scope = node.getElementsByTagName(test.qname),\n        i = 0,\n        el;\n\n      /*jshint -W084 */\n      while (el = scope[i++]) {\n        if (test(el)) results.push(el);\n      }\n      if (test.sel) {\n        while (test.sel) {\n          test = compile(test.sel);\n          scope = node.getElementsByTagName(test.qname);\n          i = 0;\n          /*jshint -W084 */\n          while (el = scope[i++]) {\n            if (test(el) && indexOf.call(results, el) === -1) {\n              results.push(el);\n            }\n          }\n        }\n        results.sort(order);\n      }\n      return results;\n    };\n\n    /**\n     * Expose\n     */\n\n    module.exports = exports = function (sel, context) {\n      /* when context isn't a DocumentFragment and the selector is simple: */\n      var id, r;\n      if (context.nodeType !== 11 && sel.indexOf(' ') === -1) {\n        if (sel[0] === '#' && context.rooted && /^#[A-Z_][-A-Z0-9_]*$/i.test(sel)) {\n          if (context.doc._hasMultipleElementsWithId) {\n            id = sel.substring(1);\n            if (!context.doc._hasMultipleElementsWithId(id)) {\n              r = context.doc.getElementById(id);\n              return r ? [r] : [];\n            }\n          }\n        }\n        if (sel[0] === '.' && /^\\.\\w+$/.test(sel)) {\n          return context.getElementsByClassName(sel.substring(1));\n        }\n        if (/^\\w+$/.test(sel)) {\n          return context.getElementsByTagName(sel);\n        }\n      }\n      /* do things the hard/slow way */\n      return find(sel, context);\n    };\n    exports.selectors = selectors;\n    exports.operators = operators;\n    exports.combinators = combinators;\n    exports.matches = function (el, sel) {\n      var test = {\n        sel: sel\n      };\n      do {\n        test = compile(test.sel);\n        if (test(el)) {\n          return true;\n        }\n      } while (test.sel);\n      return false;\n    };\n  })(select, select.exports);\n  return select.exports;\n}\nvar ChildNode_1;\nvar hasRequiredChildNode;\nfunction requireChildNode() {\n  if (hasRequiredChildNode) return ChildNode_1;\n  hasRequiredChildNode = 1;\n  var Node = requireNode();\n  var LinkedList = requireLinkedList();\n  var createDocumentFragmentFromArguments = function (document, args) {\n    var docFrag = document.createDocumentFragment();\n    for (var i = 0; i < args.length; i++) {\n      var argItem = args[i];\n      var isNode = argItem instanceof Node;\n      docFrag.appendChild(isNode ? argItem : document.createTextNode(String(argItem)));\n    }\n    return docFrag;\n  };\n\n  // The ChildNode interface contains methods that are particular to `Node`\n  // objects that can have a parent.  It is implemented by `Element`,\n  // `DocumentType`, and `CharacterData` objects.\n  var ChildNode = {\n    // Inserts a set of Node or String objects in the children list of this\n    // ChildNode's parent, just after this ChildNode.  String objects are\n    // inserted as the equivalent Text nodes.\n    after: {\n      value: function after() {\n        var argArr = Array.prototype.slice.call(arguments);\n        var parentNode = this.parentNode,\n          nextSibling = this.nextSibling;\n        if (parentNode === null) {\n          return;\n        }\n        // Find \"viable next sibling\"; that is, next one not in argArr\n        while (nextSibling && argArr.some(function (v) {\n          return v === nextSibling;\n        })) nextSibling = nextSibling.nextSibling;\n        // ok, parent and sibling are saved away since this node could itself\n        // appear in argArr and we're about to move argArr to a document fragment.\n        var docFrag = createDocumentFragmentFromArguments(this.doc, argArr);\n        parentNode.insertBefore(docFrag, nextSibling);\n      }\n    },\n    // Inserts a set of Node or String objects in the children list of this\n    // ChildNode's parent, just before this ChildNode.  String objects are\n    // inserted as the equivalent Text nodes.\n    before: {\n      value: function before() {\n        var argArr = Array.prototype.slice.call(arguments);\n        var parentNode = this.parentNode,\n          prevSibling = this.previousSibling;\n        if (parentNode === null) {\n          return;\n        }\n        // Find \"viable prev sibling\"; that is, prev one not in argArr\n        while (prevSibling && argArr.some(function (v) {\n          return v === prevSibling;\n        })) prevSibling = prevSibling.previousSibling;\n        // ok, parent and sibling are saved away since this node could itself\n        // appear in argArr and we're about to move argArr to a document fragment.\n        var docFrag = createDocumentFragmentFromArguments(this.doc, argArr);\n        var nextSibling = prevSibling ? prevSibling.nextSibling : parentNode.firstChild;\n        parentNode.insertBefore(docFrag, nextSibling);\n      }\n    },\n    // Remove this node from its parent\n    remove: {\n      value: function remove() {\n        if (this.parentNode === null) return;\n\n        // Send mutation events if necessary\n        if (this.doc) {\n          this.doc._preremoveNodeIterators(this);\n          if (this.rooted) {\n            this.doc.mutateRemove(this);\n          }\n        }\n\n        // Remove this node from its parents array of children\n        // and update the structure id for all ancestors\n        this._remove();\n\n        // Forget this node's parent\n        this.parentNode = null;\n      }\n    },\n    // Remove this node w/o uprooting or sending mutation events\n    // (But do update the structure id for all ancestors)\n    _remove: {\n      value: function _remove() {\n        var parent = this.parentNode;\n        if (parent === null) return;\n        if (parent._childNodes) {\n          parent._childNodes.splice(this.index, 1);\n        } else if (parent._firstChild === this) {\n          if (this._nextSibling === this) {\n            parent._firstChild = null;\n          } else {\n            parent._firstChild = this._nextSibling;\n          }\n        }\n        LinkedList.remove(this);\n        parent.modify();\n      }\n    },\n    // Replace this node with the nodes or strings provided as arguments.\n    replaceWith: {\n      value: function replaceWith() {\n        var argArr = Array.prototype.slice.call(arguments);\n        var parentNode = this.parentNode,\n          nextSibling = this.nextSibling;\n        if (parentNode === null) {\n          return;\n        }\n        // Find \"viable next sibling\"; that is, next one not in argArr\n        while (nextSibling && argArr.some(function (v) {\n          return v === nextSibling;\n        })) nextSibling = nextSibling.nextSibling;\n        // ok, parent and sibling are saved away since this node could itself\n        // appear in argArr and we're about to move argArr to a document fragment.\n        var docFrag = createDocumentFragmentFromArguments(this.doc, argArr);\n        if (this.parentNode === parentNode) {\n          parentNode.replaceChild(docFrag, this);\n        } else {\n          // `this` was inserted into docFrag\n          parentNode.insertBefore(docFrag, nextSibling);\n        }\n      }\n    }\n  };\n  ChildNode_1 = ChildNode;\n  return ChildNode_1;\n}\nvar NonDocumentTypeChildNode_1;\nvar hasRequiredNonDocumentTypeChildNode;\nfunction requireNonDocumentTypeChildNode() {\n  if (hasRequiredNonDocumentTypeChildNode) return NonDocumentTypeChildNode_1;\n  hasRequiredNonDocumentTypeChildNode = 1;\n  var Node = requireNode();\n  var NonDocumentTypeChildNode = {\n    nextElementSibling: {\n      get: function () {\n        if (this.parentNode) {\n          for (var kid = this.nextSibling; kid !== null; kid = kid.nextSibling) {\n            if (kid.nodeType === Node.ELEMENT_NODE) return kid;\n          }\n        }\n        return null;\n      }\n    },\n    previousElementSibling: {\n      get: function () {\n        if (this.parentNode) {\n          for (var kid = this.previousSibling; kid !== null; kid = kid.previousSibling) {\n            if (kid.nodeType === Node.ELEMENT_NODE) return kid;\n          }\n        }\n        return null;\n      }\n    }\n  };\n  NonDocumentTypeChildNode_1 = NonDocumentTypeChildNode;\n  return NonDocumentTypeChildNode_1;\n}\nvar NamedNodeMap_1;\nvar hasRequiredNamedNodeMap;\nfunction requireNamedNodeMap() {\n  if (hasRequiredNamedNodeMap) return NamedNodeMap_1;\n  hasRequiredNamedNodeMap = 1;\n  NamedNodeMap_1 = NamedNodeMap;\n  var utils = requireUtils();\n\n  /* This is a hacky implementation of NamedNodeMap, intended primarily to\n   * satisfy clients (like dompurify and the web-platform-tests) which check\n   * to ensure that Node#attributes instanceof NamedNodeMap. */\n\n  function NamedNodeMap(element) {\n    this.element = element;\n  }\n  Object.defineProperties(NamedNodeMap.prototype, {\n    length: {\n      get: utils.shouldOverride\n    },\n    item: {\n      value: utils.shouldOverride\n    },\n    getNamedItem: {\n      value: function getNamedItem(qualifiedName) {\n        return this.element.getAttributeNode(qualifiedName);\n      }\n    },\n    getNamedItemNS: {\n      value: function getNamedItemNS(namespace, localName) {\n        return this.element.getAttributeNodeNS(namespace, localName);\n      }\n    },\n    setNamedItem: {\n      value: utils.nyi\n    },\n    setNamedItemNS: {\n      value: utils.nyi\n    },\n    removeNamedItem: {\n      value: function removeNamedItem(qualifiedName) {\n        var attr = this.element.getAttributeNode(qualifiedName);\n        if (attr) {\n          this.element.removeAttribute(qualifiedName);\n          return attr;\n        }\n        utils.NotFoundError();\n      }\n    },\n    removeNamedItemNS: {\n      value: function removeNamedItemNS(ns, lname) {\n        var attr = this.element.getAttributeNodeNS(ns, lname);\n        if (attr) {\n          this.element.removeAttributeNS(ns, lname);\n          return attr;\n        }\n        utils.NotFoundError();\n      }\n    }\n  });\n  return NamedNodeMap_1;\n}\nvar Element_1;\nvar hasRequiredElement;\nfunction requireElement() {\n  if (hasRequiredElement) return Element_1;\n  hasRequiredElement = 1;\n  Element_1 = Element;\n  var xml = requireXmlnames();\n  var utils = requireUtils();\n  var NAMESPACE = utils.NAMESPACE;\n  var attributes = requireAttributes();\n  var Node = requireNode();\n  var NodeList = requireNodeList();\n  var NodeUtils = requireNodeUtils();\n  var FilteredElementList = requireFilteredElementList();\n  var DOMTokenList = requireDOMTokenList();\n  var select = requireSelect();\n  var ContainerNode = requireContainerNode();\n  var ChildNode = requireChildNode();\n  var NonDocumentTypeChildNode = requireNonDocumentTypeChildNode();\n  var NamedNodeMap = requireNamedNodeMap();\n  var uppercaseCache = Object.create(null);\n  function Element(doc, localName, namespaceURI, prefix) {\n    ContainerNode.call(this);\n    this.nodeType = Node.ELEMENT_NODE;\n    this.ownerDocument = doc;\n    this._localName = localName;\n    this.namespaceURI = namespaceURI;\n    this._prefix = prefix;\n    this._tagName = undefined;\n\n    // These properties maintain the set of attributes\n    this._attrsByQName = Object.create(null); // The qname->Attr map\n    this._attrsByLName = Object.create(null); // The ns|lname->Attr map\n    this._attrKeys = []; // attr index -> ns|lname\n  }\n  function recursiveGetText(node, a) {\n    if (node.nodeType === Node.TEXT_NODE) {\n      a.push(node._data);\n    } else {\n      for (var i = 0, n = node.childNodes.length; i < n; i++) recursiveGetText(node.childNodes[i], a);\n    }\n  }\n  Element.prototype = Object.create(ContainerNode.prototype, {\n    localName: {\n      get: function () {\n        return this._localName;\n      },\n      set: function () {/* no-op per spec */}\n    },\n    prefix: {\n      get: function () {\n        return this._prefix;\n      },\n      set: function () {/* no-op per spec */}\n    },\n    isHTML: {\n      get: function isHTML() {\n        return this.namespaceURI === NAMESPACE.HTML && this.ownerDocument.isHTML;\n      }\n    },\n    tagName: {\n      get: function tagName() {\n        if (this._tagName === undefined) {\n          var tn;\n          if (this.prefix === null) {\n            tn = this.localName;\n          } else {\n            tn = this.prefix + ':' + this.localName;\n          }\n          if (this.isHTML) {\n            var up = uppercaseCache[tn];\n            if (!up) {\n              // Converting to uppercase can be slow, so cache the conversion.\n              uppercaseCache[tn] = up = utils.toASCIIUpperCase(tn);\n            }\n            tn = up;\n          }\n          this._tagName = tn;\n        }\n        return this._tagName;\n      },\n      set: function () {/* no-op per spec */}\n    },\n    nodeName: {\n      get: function () {\n        return this.tagName;\n      }\n    },\n    nodeValue: {\n      get: function () {\n        return null;\n      },\n      set: function () {}\n    },\n    textContent: {\n      get: function () {\n        var strings = [];\n        recursiveGetText(this, strings);\n        return strings.join('');\n      },\n      set: function (newtext) {\n        this.removeChildren();\n        if (newtext !== null && newtext !== undefined && newtext !== '') {\n          this._appendChild(this.ownerDocument.createTextNode(newtext));\n        }\n      }\n    },\n    innerText: {\n      get: function () {\n        var strings = [];\n        recursiveGetText(this, strings);\n        // Strip and collapse whitespace\n        // This doesn't 100% match the browser behavior,\n        // but should cover most of the cases. This is also similar to\n        // how Angular's renderer used to work: the `textContent` and `innerText`\n        // were almost equivalent from the renderer perspective.\n        // See: https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent#differences_from_innertext\n        return strings.join('').replace(/[ \\t\\n\\f\\r]+/g, ' ').trim();\n      },\n      set: function (newtext) {\n        this.removeChildren();\n        if (newtext !== null && newtext !== undefined && newtext !== '') {\n          this._appendChild(this.ownerDocument.createTextNode(newtext));\n        }\n      }\n    },\n    innerHTML: {\n      get: function () {\n        return this.serialize();\n      },\n      set: utils.nyi\n    },\n    outerHTML: {\n      get: function () {\n        // \"the attribute must return the result of running the HTML fragment\n        // serialization algorithm on a fictional node whose only child is\n        // the context object\"\n        //\n        // The serialization logic is intentionally implemented in a separate\n        // `NodeUtils` helper instead of the more obvious choice of a private\n        // `_serializeOne()` method on the `Node.prototype` in order to avoid\n        // the megamorphic `this._serializeOne` property access, which reduces\n        // performance unnecessarily. If you need specialized behavior for a\n        // certain subclass, you'll need to implement that in `NodeUtils`.\n        // See https://github.com/fgnass/domino/pull/142 for more information.\n        return NodeUtils.serializeOne(this, {\n          nodeType: 0\n        });\n      },\n      set: function (v) {\n        var document = this.ownerDocument;\n        var parent = this.parentNode;\n        if (parent === null) {\n          return;\n        }\n        if (parent.nodeType === Node.DOCUMENT_NODE) {\n          utils.NoModificationAllowedError();\n        }\n        if (parent.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n          parent = parent.ownerDocument.createElement(\"body\");\n        }\n        var parser = document.implementation.mozHTMLParser(document._address, parent);\n        parser.parse(v === null ? '' : String(v), true);\n        this.replaceWith(parser._asDocumentFragment());\n      }\n    },\n    _insertAdjacent: {\n      value: function _insertAdjacent(position, node) {\n        var first = false;\n        switch (position) {\n          case 'beforebegin':\n            first = true;\n          /* falls through */\n          case 'afterend':\n            var parent = this.parentNode;\n            if (parent === null) {\n              return null;\n            }\n            return parent.insertBefore(node, first ? this : this.nextSibling);\n          case 'afterbegin':\n            first = true;\n          /* falls through */\n          case 'beforeend':\n            return this.insertBefore(node, first ? this.firstChild : null);\n          default:\n            return utils.SyntaxError();\n        }\n      }\n    },\n    insertAdjacentElement: {\n      value: function insertAdjacentElement(position, element) {\n        if (element.nodeType !== Node.ELEMENT_NODE) {\n          throw new TypeError('not an element');\n        }\n        position = utils.toASCIILowerCase(String(position));\n        return this._insertAdjacent(position, element);\n      }\n    },\n    insertAdjacentText: {\n      value: function insertAdjacentText(position, data) {\n        var textNode = this.ownerDocument.createTextNode(data);\n        position = utils.toASCIILowerCase(String(position));\n        this._insertAdjacent(position, textNode);\n        // \"This method returns nothing because it existed before we had a chance\n        // to design it.\"\n      }\n    },\n    insertAdjacentHTML: {\n      value: function insertAdjacentHTML(position, text) {\n        position = utils.toASCIILowerCase(String(position));\n        text = String(text);\n        var context;\n        switch (position) {\n          case 'beforebegin':\n          case 'afterend':\n            context = this.parentNode;\n            if (context === null || context.nodeType === Node.DOCUMENT_NODE) {\n              utils.NoModificationAllowedError();\n            }\n            break;\n          case 'afterbegin':\n          case 'beforeend':\n            context = this;\n            break;\n          default:\n            utils.SyntaxError();\n        }\n        if (!(context instanceof Element) || context.ownerDocument.isHTML && context.localName === 'html' && context.namespaceURI === NAMESPACE.HTML) {\n          context = context.ownerDocument.createElementNS(NAMESPACE.HTML, 'body');\n        }\n        var parser = this.ownerDocument.implementation.mozHTMLParser(this.ownerDocument._address, context);\n        parser.parse(text, true);\n        this._insertAdjacent(position, parser._asDocumentFragment());\n      }\n    },\n    children: {\n      get: function () {\n        if (!this._children) {\n          this._children = new ChildrenCollection(this);\n        }\n        return this._children;\n      }\n    },\n    attributes: {\n      get: function () {\n        if (!this._attributes) {\n          this._attributes = new AttributesArray(this);\n        }\n        return this._attributes;\n      }\n    },\n    firstElementChild: {\n      get: function () {\n        for (var kid = this.firstChild; kid !== null; kid = kid.nextSibling) {\n          if (kid.nodeType === Node.ELEMENT_NODE) return kid;\n        }\n        return null;\n      }\n    },\n    lastElementChild: {\n      get: function () {\n        for (var kid = this.lastChild; kid !== null; kid = kid.previousSibling) {\n          if (kid.nodeType === Node.ELEMENT_NODE) return kid;\n        }\n        return null;\n      }\n    },\n    childElementCount: {\n      get: function () {\n        return this.children.length;\n      }\n    },\n    // Return the next element, in source order, after this one or\n    // null if there are no more.  If root element is specified,\n    // then don't traverse beyond its subtree.\n    //\n    // This is not a DOM method, but is convenient for\n    // lazy traversals of the tree.\n    nextElement: {\n      value: function (root) {\n        if (!root) root = this.ownerDocument.documentElement;\n        var next = this.firstElementChild;\n        if (!next) {\n          // don't use sibling if we're at root\n          if (this === root) return null;\n          next = this.nextElementSibling;\n        }\n        if (next) return next;\n\n        // If we can't go down or across, then we have to go up\n        // and across to the parent sibling or another ancestor's\n        // sibling.  Be careful, though: if we reach the root\n        // element, or if we reach the documentElement, then\n        // the traversal ends.\n        for (var parent = this.parentElement; parent && parent !== root; parent = parent.parentElement) {\n          next = parent.nextElementSibling;\n          if (next) return next;\n        }\n        return null;\n      }\n    },\n    // XXX:\n    // Tests are currently failing for this function.\n    // Awaiting resolution of:\n    // http://lists.w3.org/Archives/Public/www-dom/2011JulSep/0016.html\n    getElementsByTagName: {\n      value: function getElementsByTagName(lname) {\n        var filter;\n        if (!lname) return new NodeList();\n        if (lname === '*') filter = function () {\n          return true;\n        };else if (this.isHTML) filter = htmlLocalNameElementFilter(lname);else filter = localNameElementFilter(lname);\n        return new FilteredElementList(this, filter);\n      }\n    },\n    getElementsByTagNameNS: {\n      value: function getElementsByTagNameNS(ns, lname) {\n        var filter;\n        if (ns === '*' && lname === '*') filter = function () {\n          return true;\n        };else if (ns === '*') filter = localNameElementFilter(lname);else if (lname === '*') filter = namespaceElementFilter(ns);else filter = namespaceLocalNameElementFilter(ns, lname);\n        return new FilteredElementList(this, filter);\n      }\n    },\n    getElementsByClassName: {\n      value: function getElementsByClassName(names) {\n        names = String(names).trim();\n        if (names === '') {\n          var result = new NodeList(); // Empty node list\n          return result;\n        }\n        names = names.split(/[ \\t\\r\\n\\f]+/); // Split on ASCII whitespace\n        return new FilteredElementList(this, classNamesElementFilter(names));\n      }\n    },\n    getElementsByName: {\n      value: function getElementsByName(name) {\n        return new FilteredElementList(this, elementNameFilter(String(name)));\n      }\n    },\n    // Utility methods used by the public API methods above\n    clone: {\n      value: function clone() {\n        var e;\n\n        // XXX:\n        // Modify this to use the constructor directly or\n        // avoid error checking in some other way. In case we try\n        // to clone an invalid node that the parser inserted.\n        //\n        if (this.namespaceURI !== NAMESPACE.HTML || this.prefix || !this.ownerDocument.isHTML) {\n          e = this.ownerDocument.createElementNS(this.namespaceURI, this.prefix !== null ? this.prefix + ':' + this.localName : this.localName);\n        } else {\n          e = this.ownerDocument.createElement(this.localName);\n        }\n        for (var i = 0, n = this._attrKeys.length; i < n; i++) {\n          var lname = this._attrKeys[i];\n          var a = this._attrsByLName[lname];\n          var b = a.cloneNode();\n          b._setOwnerElement(e);\n          e._attrsByLName[lname] = b;\n          e._addQName(b);\n        }\n        e._attrKeys = this._attrKeys.concat();\n        return e;\n      }\n    },\n    isEqual: {\n      value: function isEqual(that) {\n        if (this.localName !== that.localName || this.namespaceURI !== that.namespaceURI || this.prefix !== that.prefix || this._numattrs !== that._numattrs) return false;\n\n        // Compare the sets of attributes, ignoring order\n        // and ignoring attribute prefixes.\n        for (var i = 0, n = this._numattrs; i < n; i++) {\n          var a = this._attr(i);\n          if (!that.hasAttributeNS(a.namespaceURI, a.localName)) return false;\n          if (that.getAttributeNS(a.namespaceURI, a.localName) !== a.value) return false;\n        }\n        return true;\n      }\n    },\n    // This is the 'locate a namespace prefix' algorithm from the\n    // DOM specification.  It is used by Node.lookupPrefix()\n    // (Be sure to compare DOM3 and DOM4 versions of spec.)\n    _lookupNamespacePrefix: {\n      value: function _lookupNamespacePrefix(ns, originalElement) {\n        if (this.namespaceURI && this.namespaceURI === ns && this.prefix !== null && originalElement.lookupNamespaceURI(this.prefix) === ns) {\n          return this.prefix;\n        }\n        for (var i = 0, n = this._numattrs; i < n; i++) {\n          var a = this._attr(i);\n          if (a.prefix === 'xmlns' && a.value === ns && originalElement.lookupNamespaceURI(a.localName) === ns) {\n            return a.localName;\n          }\n        }\n        var parent = this.parentElement;\n        return parent ? parent._lookupNamespacePrefix(ns, originalElement) : null;\n      }\n    },\n    // This is the 'locate a namespace' algorithm for Element nodes\n    // from the DOM Core spec.  It is used by Node#lookupNamespaceURI()\n    lookupNamespaceURI: {\n      value: function lookupNamespaceURI(prefix) {\n        if (prefix === '' || prefix === undefined) {\n          prefix = null;\n        }\n        if (this.namespaceURI !== null && this.prefix === prefix) return this.namespaceURI;\n        for (var i = 0, n = this._numattrs; i < n; i++) {\n          var a = this._attr(i);\n          if (a.namespaceURI === NAMESPACE.XMLNS) {\n            if (a.prefix === 'xmlns' && a.localName === prefix || prefix === null && a.prefix === null && a.localName === 'xmlns') {\n              return a.value || null;\n            }\n          }\n        }\n        var parent = this.parentElement;\n        return parent ? parent.lookupNamespaceURI(prefix) : null;\n      }\n    },\n    //\n    // Attribute handling methods and utilities\n    //\n\n    /*\n     * Attributes in the DOM are tricky:\n     *\n     * - there are the 8 basic get/set/has/removeAttribute{NS} methods\n     *\n     * - but many HTML attributes are also 'reflected' through IDL\n     *   attributes which means that they can be queried and set through\n     *   regular properties of the element.  There is just one attribute\n     *   value, but two ways to get and set it.\n     *\n     * - Different HTML element types have different sets of reflected\n       attributes.\n     *\n     * - attributes can also be queried and set through the .attributes\n     *   property of an element.  This property behaves like an array of\n     *   Attr objects.  The value property of each Attr is writeable, so\n     *   this is a third way to read and write attributes.\n     *\n     * - for efficiency, we really want to store attributes in some kind\n     *   of name->attr map.  But the attributes[] array is an array, not a\n     *   map, which is kind of unnatural.\n     *\n     * - When using namespaces and prefixes, and mixing the NS methods\n     *   with the non-NS methods, it is apparently actually possible for\n     *   an attributes[] array to have more than one attribute with the\n     *   same qualified name.  And certain methods must operate on only\n     *   the first attribute with such a name.  So for these methods, an\n     *   inefficient array-like data structure would be easier to\n     *   implement.\n     *\n     * - The attributes[] array is live, not a snapshot, so changes to the\n     *   attributes must be immediately visible through existing arrays.\n     *\n     * - When attributes are queried and set through IDL properties\n     *   (instead of the get/setAttributes() method or the attributes[]\n     *   array) they may be subject to type conversions, URL\n     *   normalization, etc., so some extra processing is required in that\n     *   case.\n     *\n     * - But access through IDL properties is probably the most common\n     *   case, so we'd like that to be as fast as possible.\n     *\n     * - We can't just store attribute values in their parsed idl form,\n     *   because setAttribute() has to return whatever string is passed to\n     *   getAttribute even if it is not a legal, parseable value. So\n     *   attribute values must be stored in unparsed string form.\n     *\n     * - We need to be able to send change notifications or mutation\n     *   events of some sort to the renderer whenever an attribute value\n     *   changes, regardless of the way in which it changes.\n     *\n     * - Some attributes, such as id and class affect other parts of the\n     *   DOM API, like getElementById and getElementsByClassName and so\n     *   for efficiency, we need to specially track changes to these\n     *   special attributes.\n     *\n     * - Some attributes like class have different names (className) when\n     *   reflected.\n     *\n     * - Attributes whose names begin with the string 'data-' are treated\n       specially.\n     *\n     * - Reflected attributes that have a boolean type in IDL have special\n     *   behavior: setting them to false (in IDL) is the same as removing\n     *   them with removeAttribute()\n     *\n     * - numeric attributes (like HTMLElement.tabIndex) can have default\n     *   values that must be returned by the idl getter even if the\n     *   content attribute does not exist. (The default tabIndex value\n     *   actually varies based on the type of the element, so that is a\n     *   tricky one).\n     *\n     * See\n     * http://www.whatwg.org/specs/web-apps/current-work/multipage/urls.html#reflect\n     * for rules on how attributes are reflected.\n     *\n     */\n\n    getAttribute: {\n      value: function getAttribute(qname) {\n        var attr = this.getAttributeNode(qname);\n        return attr ? attr.value : null;\n      }\n    },\n    getAttributeNS: {\n      value: function getAttributeNS(ns, lname) {\n        var attr = this.getAttributeNodeNS(ns, lname);\n        return attr ? attr.value : null;\n      }\n    },\n    getAttributeNode: {\n      value: function getAttributeNode(qname) {\n        qname = String(qname);\n        if (/[A-Z]/.test(qname) && this.isHTML) qname = utils.toASCIILowerCase(qname);\n        var attr = this._attrsByQName[qname];\n        if (!attr) return null;\n        if (Array.isArray(attr))\n          // If there is more than one\n          attr = attr[0]; // use the first\n\n        return attr;\n      }\n    },\n    getAttributeNodeNS: {\n      value: function getAttributeNodeNS(ns, lname) {\n        ns = ns === undefined || ns === null ? '' : String(ns);\n        lname = String(lname);\n        var attr = this._attrsByLName[ns + '|' + lname];\n        return attr ? attr : null;\n      }\n    },\n    hasAttribute: {\n      value: function hasAttribute(qname) {\n        qname = String(qname);\n        if (/[A-Z]/.test(qname) && this.isHTML) qname = utils.toASCIILowerCase(qname);\n        return this._attrsByQName[qname] !== undefined;\n      }\n    },\n    hasAttributeNS: {\n      value: function hasAttributeNS(ns, lname) {\n        ns = ns === undefined || ns === null ? '' : String(ns);\n        lname = String(lname);\n        var key = ns + '|' + lname;\n        return this._attrsByLName[key] !== undefined;\n      }\n    },\n    hasAttributes: {\n      value: function hasAttributes() {\n        return this._numattrs > 0;\n      }\n    },\n    toggleAttribute: {\n      value: function toggleAttribute(qname, force) {\n        qname = String(qname);\n        if (!xml.isValidName(qname)) utils.InvalidCharacterError();\n        if (/[A-Z]/.test(qname) && this.isHTML) qname = utils.toASCIILowerCase(qname);\n        var a = this._attrsByQName[qname];\n        if (a === undefined) {\n          if (force === undefined || force === true) {\n            this._setAttribute(qname, '');\n            return true;\n          }\n          return false;\n        } else {\n          if (force === undefined || force === false) {\n            this.removeAttribute(qname);\n            return false;\n          }\n          return true;\n        }\n      }\n    },\n    // Set the attribute without error checking. The parser uses this.\n    _setAttribute: {\n      value: function _setAttribute(qname, value) {\n        // XXX: the spec says that this next search should be done\n        // on the local name, but I think that is an error.\n        // email pending on www-dom about it.\n        var attr = this._attrsByQName[qname];\n        var isnew;\n        if (!attr) {\n          attr = this._newattr(qname);\n          isnew = true;\n        } else {\n          if (Array.isArray(attr)) attr = attr[0];\n        }\n\n        // Now set the attribute value on the new or existing Attr object.\n        // The Attr.value setter method handles mutation events, etc.\n        attr.value = value;\n        if (this._attributes) this._attributes[qname] = attr;\n        if (isnew && this._newattrhook) this._newattrhook(qname, value);\n      }\n    },\n    // Check for errors, and then set the attribute\n    setAttribute: {\n      value: function setAttribute(qname, value) {\n        qname = String(qname);\n        if (!xml.isValidName(qname)) utils.InvalidCharacterError();\n        if (/[A-Z]/.test(qname) && this.isHTML) qname = utils.toASCIILowerCase(qname);\n        this._setAttribute(qname, String(value));\n      }\n    },\n    // The version with no error checking used by the parser\n    _setAttributeNS: {\n      value: function _setAttributeNS(ns, qname, value) {\n        var pos = qname.indexOf(':'),\n          prefix,\n          lname;\n        if (pos < 0) {\n          prefix = null;\n          lname = qname;\n        } else {\n          prefix = qname.substring(0, pos);\n          lname = qname.substring(pos + 1);\n        }\n        if (ns === '' || ns === undefined) ns = null;\n        var key = (ns === null ? '' : ns) + '|' + lname;\n        var attr = this._attrsByLName[key];\n        var isnew;\n        if (!attr) {\n          attr = new Attr(this, lname, prefix, ns);\n          isnew = true;\n          this._attrsByLName[key] = attr;\n          if (this._attributes) {\n            this._attributes[this._attrKeys.length] = attr;\n          }\n          this._attrKeys.push(key);\n\n          // We also have to make the attr searchable by qname.\n          // But we have to be careful because there may already\n          // be an attr with this qname.\n          this._addQName(attr);\n        }\n        attr.value = value; // Automatically sends mutation event\n        if (isnew && this._newattrhook) this._newattrhook(qname, value);\n      }\n    },\n    // Do error checking then call _setAttributeNS\n    setAttributeNS: {\n      value: function setAttributeNS(ns, qname, value) {\n        // Convert parameter types according to WebIDL\n        ns = ns === null || ns === undefined || ns === '' ? null : String(ns);\n        qname = String(qname);\n        if (!xml.isValidQName(qname)) utils.InvalidCharacterError();\n        var pos = qname.indexOf(':');\n        var prefix = pos < 0 ? null : qname.substring(0, pos);\n        if (prefix !== null && ns === null || prefix === 'xml' && ns !== NAMESPACE.XML || (qname === 'xmlns' || prefix === 'xmlns') && ns !== NAMESPACE.XMLNS || ns === NAMESPACE.XMLNS && !(qname === 'xmlns' || prefix === 'xmlns')) utils.NamespaceError();\n        this._setAttributeNS(ns, qname, String(value));\n      }\n    },\n    setAttributeNode: {\n      value: function setAttributeNode(attr) {\n        if (attr.ownerElement !== null && attr.ownerElement !== this) {\n          utils.InUseAttributeError();\n        }\n        var result = null;\n        var oldAttrs = this._attrsByQName[attr.name];\n        if (oldAttrs) {\n          if (!Array.isArray(oldAttrs)) {\n            oldAttrs = [oldAttrs];\n          }\n          if (oldAttrs.some(function (a) {\n            return a === attr;\n          })) {\n            return attr;\n          } else if (attr.ownerElement !== null) {\n            utils.InUseAttributeError();\n          }\n          oldAttrs.forEach(function (a) {\n            this.removeAttributeNode(a);\n          }, this);\n          result = oldAttrs[0];\n        }\n        this.setAttributeNodeNS(attr);\n        return result;\n      }\n    },\n    setAttributeNodeNS: {\n      value: function setAttributeNodeNS(attr) {\n        if (attr.ownerElement !== null) {\n          utils.InUseAttributeError();\n        }\n        var ns = attr.namespaceURI;\n        var key = (ns === null ? '' : ns) + '|' + attr.localName;\n        var oldAttr = this._attrsByLName[key];\n        if (oldAttr) {\n          this.removeAttributeNode(oldAttr);\n        }\n        attr._setOwnerElement(this);\n        this._attrsByLName[key] = attr;\n        if (this._attributes) {\n          this._attributes[this._attrKeys.length] = attr;\n        }\n        this._attrKeys.push(key);\n        this._addQName(attr);\n        if (this._newattrhook) this._newattrhook(attr.name, attr.value);\n        return oldAttr || null;\n      }\n    },\n    removeAttribute: {\n      value: function removeAttribute(qname) {\n        qname = String(qname);\n        if (/[A-Z]/.test(qname) && this.isHTML) qname = utils.toASCIILowerCase(qname);\n        var attr = this._attrsByQName[qname];\n        if (!attr) return;\n\n        // If there is more than one match for this qname\n        // so don't delete the qname mapping, just remove the first\n        // element from it.\n        if (Array.isArray(attr)) {\n          if (attr.length > 2) {\n            attr = attr.shift(); // remove it from the array\n          } else {\n            this._attrsByQName[qname] = attr[1];\n            attr = attr[0];\n          }\n        } else {\n          // only a single match, so remove the qname mapping\n          this._attrsByQName[qname] = undefined;\n        }\n        var ns = attr.namespaceURI;\n        // Now attr is the removed attribute.  Figure out its\n        // ns+lname key and remove it from the other mapping as well.\n        var key = (ns === null ? '' : ns) + '|' + attr.localName;\n        this._attrsByLName[key] = undefined;\n        var i = this._attrKeys.indexOf(key);\n        if (this._attributes) {\n          Array.prototype.splice.call(this._attributes, i, 1);\n          this._attributes[qname] = undefined;\n        }\n        this._attrKeys.splice(i, 1);\n\n        // Onchange handler for the attribute\n        var onchange = attr.onchange;\n        attr._setOwnerElement(null);\n        if (onchange) {\n          onchange.call(attr, this, attr.localName, attr.value, null);\n        }\n        // Mutation event\n        if (this.rooted) this.ownerDocument.mutateRemoveAttr(attr);\n      }\n    },\n    removeAttributeNS: {\n      value: function removeAttributeNS(ns, lname) {\n        ns = ns === undefined || ns === null ? '' : String(ns);\n        lname = String(lname);\n        var key = ns + '|' + lname;\n        var attr = this._attrsByLName[key];\n        if (!attr) return;\n        this._attrsByLName[key] = undefined;\n        var i = this._attrKeys.indexOf(key);\n        if (this._attributes) {\n          Array.prototype.splice.call(this._attributes, i, 1);\n        }\n        this._attrKeys.splice(i, 1);\n\n        // Now find the same Attr object in the qname mapping and remove it\n        // But be careful because there may be more than one match.\n        this._removeQName(attr);\n\n        // Onchange handler for the attribute\n        var onchange = attr.onchange;\n        attr._setOwnerElement(null);\n        if (onchange) {\n          onchange.call(attr, this, attr.localName, attr.value, null);\n        }\n        // Mutation event\n        if (this.rooted) this.ownerDocument.mutateRemoveAttr(attr);\n      }\n    },\n    removeAttributeNode: {\n      value: function removeAttributeNode(attr) {\n        var ns = attr.namespaceURI;\n        var key = (ns === null ? '' : ns) + '|' + attr.localName;\n        if (this._attrsByLName[key] !== attr) {\n          utils.NotFoundError();\n        }\n        this.removeAttributeNS(ns, attr.localName);\n        return attr;\n      }\n    },\n    getAttributeNames: {\n      value: function getAttributeNames() {\n        var elt = this;\n        return this._attrKeys.map(function (key) {\n          return elt._attrsByLName[key].name;\n        });\n      }\n    },\n    // This 'raw' version of getAttribute is used by the getter functions\n    // of reflected attributes. It skips some error checking and\n    // namespace steps\n    _getattr: {\n      value: function _getattr(qname) {\n        // Assume that qname is already lowercased, so don't do it here.\n        // Also don't check whether attr is an array: a qname with no\n        // prefix will never have two matching Attr objects (because\n        // setAttributeNS doesn't allow a non-null namespace with a\n        // null prefix.\n        var attr = this._attrsByQName[qname];\n        return attr ? attr.value : null;\n      }\n    },\n    // The raw version of setAttribute for reflected idl attributes.\n    _setattr: {\n      value: function _setattr(qname, value) {\n        var attr = this._attrsByQName[qname];\n        var isnew;\n        if (!attr) {\n          attr = this._newattr(qname);\n          isnew = true;\n        }\n        attr.value = String(value);\n        if (this._attributes) this._attributes[qname] = attr;\n        if (isnew && this._newattrhook) this._newattrhook(qname, value);\n      }\n    },\n    // Create a new Attr object, insert it, and return it.\n    // Used by setAttribute() and by set()\n    _newattr: {\n      value: function _newattr(qname) {\n        var attr = new Attr(this, qname, null, null);\n        var key = '|' + qname;\n        this._attrsByQName[qname] = attr;\n        this._attrsByLName[key] = attr;\n        if (this._attributes) {\n          this._attributes[this._attrKeys.length] = attr;\n        }\n        this._attrKeys.push(key);\n        return attr;\n      }\n    },\n    // Add a qname->Attr mapping to the _attrsByQName object, taking into\n    // account that there may be more than one attr object with the\n    // same qname\n    _addQName: {\n      value: function (attr) {\n        var qname = attr.name;\n        var existing = this._attrsByQName[qname];\n        if (!existing) {\n          this._attrsByQName[qname] = attr;\n        } else if (Array.isArray(existing)) {\n          existing.push(attr);\n        } else {\n          this._attrsByQName[qname] = [existing, attr];\n        }\n        if (this._attributes) this._attributes[qname] = attr;\n      }\n    },\n    // Remove a qname->Attr mapping to the _attrsByQName object, taking into\n    // account that there may be more than one attr object with the\n    // same qname\n    _removeQName: {\n      value: function (attr) {\n        var qname = attr.name;\n        var target = this._attrsByQName[qname];\n        if (Array.isArray(target)) {\n          var idx = target.indexOf(attr);\n          utils.assert(idx !== -1); // It must be here somewhere\n          if (target.length === 2) {\n            this._attrsByQName[qname] = target[1 - idx];\n            if (this._attributes) {\n              this._attributes[qname] = this._attrsByQName[qname];\n            }\n          } else {\n            target.splice(idx, 1);\n            if (this._attributes && this._attributes[qname] === attr) {\n              this._attributes[qname] = target[0];\n            }\n          }\n        } else {\n          utils.assert(target === attr); // If only one, it must match\n          this._attrsByQName[qname] = undefined;\n          if (this._attributes) {\n            this._attributes[qname] = undefined;\n          }\n        }\n      }\n    },\n    // Return the number of attributes\n    _numattrs: {\n      get: function () {\n        return this._attrKeys.length;\n      }\n    },\n    // Return the nth Attr object\n    _attr: {\n      value: function (n) {\n        return this._attrsByLName[this._attrKeys[n]];\n      }\n    },\n    // Define getters and setters for an 'id' property that reflects\n    // the content attribute 'id'.\n    id: attributes.property({\n      name: 'id'\n    }),\n    // Define getters and setters for a 'className' property that reflects\n    // the content attribute 'class'.\n    className: attributes.property({\n      name: 'class'\n    }),\n    classList: {\n      get: function () {\n        var self = this;\n        if (this._classList) {\n          return this._classList;\n        }\n        var dtlist = new DOMTokenList(function () {\n          return self.className || \"\";\n        }, function (v) {\n          self.className = v;\n        });\n        this._classList = dtlist;\n        return dtlist;\n      },\n      set: function (v) {\n        this.className = v;\n      }\n    },\n    matches: {\n      value: function (selector) {\n        return select.matches(this, selector);\n      }\n    },\n    closest: {\n      value: function (selector) {\n        var el = this;\n        do {\n          if (el.matches && el.matches(selector)) {\n            return el;\n          }\n          el = el.parentElement || el.parentNode;\n        } while (el !== null && el.nodeType === Node.ELEMENT_NODE);\n        return null;\n      }\n    },\n    querySelector: {\n      value: function (selector) {\n        return select(selector, this)[0];\n      }\n    },\n    querySelectorAll: {\n      value: function (selector) {\n        var nodes = select(selector, this);\n        return nodes.item ? nodes : new NodeList(nodes);\n      }\n    }\n  });\n  Object.defineProperties(Element.prototype, ChildNode);\n  Object.defineProperties(Element.prototype, NonDocumentTypeChildNode);\n\n  // Register special handling for the id attribute\n  attributes.registerChangeHandler(Element, 'id', function (element, lname, oldval, newval) {\n    if (element.rooted) {\n      if (oldval) {\n        element.ownerDocument.delId(oldval, element);\n      }\n      if (newval) {\n        element.ownerDocument.addId(newval, element);\n      }\n    }\n  });\n  attributes.registerChangeHandler(Element, 'class', function (element, lname, oldval, newval) {\n    if (element._classList) {\n      element._classList._update();\n    }\n  });\n\n  // The Attr class represents a single attribute.  The values in\n  // _attrsByQName and _attrsByLName are instances of this class.\n  function Attr(elt, lname, prefix, namespace, value) {\n    // localName and namespace are constant for any attr object.\n    // But value may change.  And so can prefix, and so, therefore can name.\n    this._localName = lname;\n    this._prefix = prefix === null || prefix === '' ? null : '' + prefix;\n    this.namespaceURI = namespace === null || namespace === '' ? null : '' + namespace;\n    this.data = value;\n    // Set ownerElement last to ensure it is hooked up to onchange handler\n    this._setOwnerElement(elt);\n  }\n\n  // In DOM 3 Attr was supposed to extend Node; in DOM 4 that was abandoned.\n  Attr.prototype = Object.create(Object.prototype, {\n    localName: {\n      get: function () {\n        return this._localName;\n      },\n      set: function () {/* no-op per spec */}\n    },\n    prefix: {\n      get: function () {\n        return this._prefix;\n      },\n      set: function () {/* no-op per spec */}\n    },\n    ownerElement: {\n      get: function () {\n        return this._ownerElement;\n      }\n    },\n    _setOwnerElement: {\n      value: function _setOwnerElement(elt) {\n        this._ownerElement = elt;\n        if (this.prefix === null && this.namespaceURI === null && elt) {\n          this.onchange = elt._attributeChangeHandlers[this.localName];\n        } else {\n          this.onchange = null;\n        }\n      }\n    },\n    name: {\n      get: function () {\n        return this.prefix ? this.prefix + ':' + this.localName : this.localName;\n      }\n    },\n    specified: {\n      get: function () {\n        // Deprecated\n        return true;\n      }\n    },\n    value: {\n      get: function () {\n        return this.data;\n      },\n      set: function (value) {\n        var oldval = this.data;\n        value = value === undefined ? '' : value + '';\n        if (value === oldval) return;\n        this.data = value;\n\n        // Run the onchange hook for the attribute\n        // if there is one.\n        if (this.ownerElement) {\n          if (this.onchange) this.onchange(this.ownerElement, this.localName, oldval, value);\n\n          // Generate a mutation event if the element is rooted\n          if (this.ownerElement.rooted) this.ownerElement.ownerDocument.mutateAttr(this, oldval);\n        }\n      }\n    },\n    cloneNode: {\n      value: function cloneNode(deep) {\n        // Both this method and Document#createAttribute*() create unowned Attrs\n        return new Attr(null, this.localName, this.prefix, this.namespaceURI, this.data);\n      }\n    },\n    // Legacy aliases (see gh#70 and https://dom.spec.whatwg.org/#interface-attr)\n    nodeType: {\n      get: function () {\n        return Node.ATTRIBUTE_NODE;\n      }\n    },\n    nodeName: {\n      get: function () {\n        return this.name;\n      }\n    },\n    nodeValue: {\n      get: function () {\n        return this.value;\n      },\n      set: function (v) {\n        this.value = v;\n      }\n    },\n    textContent: {\n      get: function () {\n        return this.value;\n      },\n      set: function (v) {\n        if (v === null || v === undefined) {\n          v = '';\n        }\n        this.value = v;\n      }\n    },\n    innerText: {\n      get: function () {\n        return this.value;\n      },\n      set: function (v) {\n        if (v === null || v === undefined) {\n          v = '';\n        }\n        this.value = v;\n      }\n    }\n  });\n  // Sneakily export this class for use by Document.createAttribute()\n  Element._Attr = Attr;\n\n  // The attributes property of an Element will be an instance of this class.\n  // This class is really just a dummy, though. It only defines a length\n  // property and an item() method. The AttrArrayProxy that\n  // defines the public API just uses the Element object itself.\n  function AttributesArray(elt) {\n    NamedNodeMap.call(this, elt);\n    for (var name in elt._attrsByQName) {\n      this[name] = elt._attrsByQName[name];\n    }\n    for (var i = 0; i < elt._attrKeys.length; i++) {\n      this[i] = elt._attrsByLName[elt._attrKeys[i]];\n    }\n  }\n  AttributesArray.prototype = Object.create(NamedNodeMap.prototype, {\n    length: {\n      get: function () {\n        return this.element._attrKeys.length;\n      },\n      set: function () {/* ignore */}\n    },\n    item: {\n      value: function (n) {\n        /* jshint bitwise: false */\n        n = n >>> 0;\n        if (n >= this.length) {\n          return null;\n        }\n        return this.element._attrsByLName[this.element._attrKeys[n]];\n        /* jshint bitwise: true */\n      }\n    }\n  });\n\n  // We can't make direct array access work (without Proxies, node >=6)\n  // but we can make `Array.from(node.attributes)` and for-of loops work.\n  if (globalThis.Symbol?.iterator) {\n    AttributesArray.prototype[globalThis.Symbol.iterator] = function () {\n      var i = 0,\n        n = this.length,\n        self = this;\n      return {\n        next: function () {\n          if (i < n) return {\n            value: self.item(i++)\n          };\n          return {\n            done: true\n          };\n        }\n      };\n    };\n  }\n\n  // The children property of an Element will be an instance of this class.\n  // It defines length, item() and namedItem() and will be wrapped by an\n  // HTMLCollection when exposed through the DOM.\n  function ChildrenCollection(e) {\n    this.element = e;\n    this.updateCache();\n  }\n  ChildrenCollection.prototype = Object.create(Object.prototype, {\n    length: {\n      get: function () {\n        this.updateCache();\n        return this.childrenByNumber.length;\n      }\n    },\n    item: {\n      value: function item(n) {\n        this.updateCache();\n        return this.childrenByNumber[n] || null;\n      }\n    },\n    namedItem: {\n      value: function namedItem(name) {\n        this.updateCache();\n        return this.childrenByName[name] || null;\n      }\n    },\n    // This attribute returns the entire name->element map.\n    // It is not part of the HTMLCollection API, but we need it in\n    // src/HTMLCollectionProxy\n    namedItems: {\n      get: function () {\n        this.updateCache();\n        return this.childrenByName;\n      }\n    },\n    updateCache: {\n      value: function updateCache() {\n        var namedElts = /^(a|applet|area|embed|form|frame|frameset|iframe|img|object)$/;\n        if (this.lastModTime !== this.element.lastModTime) {\n          this.lastModTime = this.element.lastModTime;\n          var n = this.childrenByNumber && this.childrenByNumber.length || 0;\n          for (var i = 0; i < n; i++) {\n            this[i] = undefined;\n          }\n          this.childrenByNumber = [];\n          this.childrenByName = Object.create(null);\n          for (var c = this.element.firstChild; c !== null; c = c.nextSibling) {\n            if (c.nodeType === Node.ELEMENT_NODE) {\n              this[this.childrenByNumber.length] = c;\n              this.childrenByNumber.push(c);\n\n              // XXX Are there any requirements about the namespace\n              // of the id property?\n              var id = c.getAttribute('id');\n\n              // If there is an id that is not already in use...\n              if (id && !this.childrenByName[id]) this.childrenByName[id] = c;\n\n              // For certain HTML elements we check the name attribute\n              var name = c.getAttribute('name');\n              if (name && this.element.namespaceURI === NAMESPACE.HTML && namedElts.test(this.element.localName) && !this.childrenByName[name]) this.childrenByName[id] = c;\n            }\n          }\n        }\n      }\n    }\n  });\n\n  // These functions return predicates for filtering elements.\n  // They're used by the Document and Element classes for methods like\n  // getElementsByTagName and getElementsByClassName\n\n  function localNameElementFilter(lname) {\n    return function (e) {\n      return e.localName === lname;\n    };\n  }\n  function htmlLocalNameElementFilter(lname) {\n    var lclname = utils.toASCIILowerCase(lname);\n    if (lclname === lname) return localNameElementFilter(lname);\n    return function (e) {\n      return e.isHTML ? e.localName === lclname : e.localName === lname;\n    };\n  }\n  function namespaceElementFilter(ns) {\n    return function (e) {\n      return e.namespaceURI === ns;\n    };\n  }\n  function namespaceLocalNameElementFilter(ns, lname) {\n    return function (e) {\n      return e.namespaceURI === ns && e.localName === lname;\n    };\n  }\n  function classNamesElementFilter(names) {\n    return function (e) {\n      return names.every(function (n) {\n        return e.classList.contains(n);\n      });\n    };\n  }\n  function elementNameFilter(name) {\n    return function (e) {\n      // All the *HTML elements* in the document with the given name attribute\n      if (e.namespaceURI !== NAMESPACE.HTML) {\n        return false;\n      }\n      return e.getAttribute('name') === name;\n    };\n  }\n  return Element_1;\n}\nvar Leaf_1;\nvar hasRequiredLeaf;\nfunction requireLeaf() {\n  if (hasRequiredLeaf) return Leaf_1;\n  hasRequiredLeaf = 1;\n  Leaf_1 = Leaf;\n  var Node = requireNode();\n  var NodeList = requireNodeList();\n  var utils = requireUtils();\n  var HierarchyRequestError = utils.HierarchyRequestError;\n  var NotFoundError = utils.NotFoundError;\n\n  // This class defines common functionality for node subtypes that\n  // can never have children\n  function Leaf() {\n    Node.call(this);\n  }\n  Leaf.prototype = Object.create(Node.prototype, {\n    hasChildNodes: {\n      value: function () {\n        return false;\n      }\n    },\n    firstChild: {\n      value: null\n    },\n    lastChild: {\n      value: null\n    },\n    insertBefore: {\n      value: function (node, child) {\n        if (!node.nodeType) throw new TypeError('not a node');\n        HierarchyRequestError();\n      }\n    },\n    replaceChild: {\n      value: function (node, child) {\n        if (!node.nodeType) throw new TypeError('not a node');\n        HierarchyRequestError();\n      }\n    },\n    removeChild: {\n      value: function (node) {\n        if (!node.nodeType) throw new TypeError('not a node');\n        NotFoundError();\n      }\n    },\n    removeChildren: {\n      value: function () {/* no op */}\n    },\n    childNodes: {\n      get: function () {\n        if (!this._childNodes) this._childNodes = new NodeList();\n        return this._childNodes;\n      }\n    }\n  });\n  return Leaf_1;\n}\n\n/* jshint bitwise: false */\n\nvar CharacterData_1;\nvar hasRequiredCharacterData;\nfunction requireCharacterData() {\n  if (hasRequiredCharacterData) return CharacterData_1;\n  hasRequiredCharacterData = 1;\n  CharacterData_1 = CharacterData;\n  var Leaf = requireLeaf();\n  var utils = requireUtils();\n  var ChildNode = requireChildNode();\n  var NonDocumentTypeChildNode = requireNonDocumentTypeChildNode();\n  function CharacterData() {\n    Leaf.call(this);\n  }\n  CharacterData.prototype = Object.create(Leaf.prototype, {\n    // DOMString substringData(unsigned long offset,\n    //               unsigned long count);\n    // The substringData(offset, count) method must run these steps:\n    //\n    //     If offset is greater than the context object's\n    //     length, throw an INDEX_SIZE_ERR exception and\n    //     terminate these steps.\n    //\n    //     If offset+count is greater than the context\n    //     object's length, return a DOMString whose value is\n    //     the UTF-16 code units from the offsetth UTF-16 code\n    //     unit to the end of data.\n    //\n    //     Return a DOMString whose value is the UTF-16 code\n    //     units from the offsetth UTF-16 code unit to the\n    //     offset+countth UTF-16 code unit in data.\n    substringData: {\n      value: function substringData(offset, count) {\n        if (arguments.length < 2) {\n          throw new TypeError(\"Not enough arguments\");\n        }\n        // Convert arguments to WebIDL \"unsigned long\"\n        offset = offset >>> 0;\n        count = count >>> 0;\n        if (offset > this.data.length || offset < 0 || count < 0) {\n          utils.IndexSizeError();\n        }\n        return this.data.substring(offset, offset + count);\n      }\n    },\n    // void appendData(DOMString data);\n    // The appendData(data) method must append data to the context\n    // object's data.\n    appendData: {\n      value: function appendData(data) {\n        if (arguments.length < 1) {\n          throw new TypeError(\"Not enough arguments\");\n        }\n        this.data += String(data);\n      }\n    },\n    // void insertData(unsigned long offset, DOMString data);\n    // The insertData(offset, data) method must run these steps:\n    //\n    //     If offset is greater than the context object's\n    //     length, throw an INDEX_SIZE_ERR exception and\n    //     terminate these steps.\n    //\n    //     Insert data into the context object's data after\n    //     offset UTF-16 code units.\n    //\n    insertData: {\n      value: function insertData(offset, data) {\n        return this.replaceData(offset, 0, data);\n      }\n    },\n    // void deleteData(unsigned long offset, unsigned long count);\n    // The deleteData(offset, count) method must run these steps:\n    //\n    //     If offset is greater than the context object's\n    //     length, throw an INDEX_SIZE_ERR exception and\n    //     terminate these steps.\n    //\n    //     If offset+count is greater than the context\n    //     object's length var count be length-offset.\n    //\n    //     Starting from offset UTF-16 code units remove count\n    //     UTF-16 code units from the context object's data.\n    deleteData: {\n      value: function deleteData(offset, count) {\n        return this.replaceData(offset, count, '');\n      }\n    },\n    // void replaceData(unsigned long offset, unsigned long count,\n    //          DOMString data);\n    //\n    // The replaceData(offset, count, data) method must act as\n    // if the deleteData() method is invoked with offset and\n    // count as arguments followed by the insertData() method\n    // with offset and data as arguments and re-throw any\n    // exceptions these methods might have thrown.\n    replaceData: {\n      value: function replaceData(offset, count, data) {\n        var curtext = this.data,\n          len = curtext.length;\n        // Convert arguments to correct WebIDL type\n        offset = offset >>> 0;\n        count = count >>> 0;\n        data = String(data);\n        if (offset > len || offset < 0) utils.IndexSizeError();\n        if (offset + count > len) count = len - offset;\n        var prefix = curtext.substring(0, offset),\n          suffix = curtext.substring(offset + count);\n        this.data = prefix + data + suffix;\n      }\n    },\n    // Utility method that Node.isEqualNode() calls to test Text and\n    // Comment nodes for equality.  It is okay to put it here, since\n    // Node will have already verified that nodeType is equal\n    isEqual: {\n      value: function isEqual(n) {\n        return this._data === n._data;\n      }\n    },\n    length: {\n      get: function () {\n        return this.data.length;\n      }\n    }\n  });\n  Object.defineProperties(CharacterData.prototype, ChildNode);\n  Object.defineProperties(CharacterData.prototype, NonDocumentTypeChildNode);\n  return CharacterData_1;\n}\nvar Text_1;\nvar hasRequiredText;\nfunction requireText() {\n  if (hasRequiredText) return Text_1;\n  hasRequiredText = 1;\n  Text_1 = Text;\n  var utils = requireUtils();\n  var Node = requireNode();\n  var CharacterData = requireCharacterData();\n  function Text(doc, data) {\n    CharacterData.call(this);\n    this.nodeType = Node.TEXT_NODE;\n    this.ownerDocument = doc;\n    this._data = data;\n    this._index = undefined;\n  }\n  var nodeValue = {\n    get: function () {\n      return this._data;\n    },\n    set: function (v) {\n      if (v === null || v === undefined) {\n        v = '';\n      } else {\n        v = String(v);\n      }\n      if (v === this._data) return;\n      this._data = v;\n      if (this.rooted) this.ownerDocument.mutateValue(this);\n      if (this.parentNode && this.parentNode._textchangehook) this.parentNode._textchangehook(this);\n    }\n  };\n  Text.prototype = Object.create(CharacterData.prototype, {\n    nodeName: {\n      value: \"#text\"\n    },\n    // These three attributes are all the same.\n    // The data attribute has a [TreatNullAs=EmptyString] but we'll\n    // implement that at the interface level\n    nodeValue: nodeValue,\n    textContent: nodeValue,\n    innerText: nodeValue,\n    data: {\n      get: nodeValue.get,\n      set: function (v) {\n        nodeValue.set.call(this, v === null ? '' : String(v));\n      }\n    },\n    splitText: {\n      value: function splitText(offset) {\n        if (offset > this._data.length || offset < 0) utils.IndexSizeError();\n        var newdata = this._data.substring(offset),\n          newnode = this.ownerDocument.createTextNode(newdata);\n        this.data = this.data.substring(0, offset);\n        var parent = this.parentNode;\n        if (parent !== null) parent.insertBefore(newnode, this.nextSibling);\n        return newnode;\n      }\n    },\n    wholeText: {\n      get: function wholeText() {\n        var result = this.textContent;\n        for (var next = this.nextSibling; next; next = next.nextSibling) {\n          if (next.nodeType !== Node.TEXT_NODE) {\n            break;\n          }\n          result += next.textContent;\n        }\n        return result;\n      }\n    },\n    // Obsolete, removed from spec.\n    replaceWholeText: {\n      value: utils.nyi\n    },\n    // Utility methods\n    clone: {\n      value: function clone() {\n        return new Text(this.ownerDocument, this._data);\n      }\n    }\n  });\n  return Text_1;\n}\nvar Comment_1;\nvar hasRequiredComment;\nfunction requireComment() {\n  if (hasRequiredComment) return Comment_1;\n  hasRequiredComment = 1;\n  Comment_1 = Comment;\n  var Node = requireNode();\n  var CharacterData = requireCharacterData();\n  function Comment(doc, data) {\n    CharacterData.call(this);\n    this.nodeType = Node.COMMENT_NODE;\n    this.ownerDocument = doc;\n    this._data = data;\n  }\n  var nodeValue = {\n    get: function () {\n      return this._data;\n    },\n    set: function (v) {\n      if (v === null || v === undefined) {\n        v = '';\n      } else {\n        v = String(v);\n      }\n      this._data = v;\n      if (this.rooted) this.ownerDocument.mutateValue(this);\n    }\n  };\n  Comment.prototype = Object.create(CharacterData.prototype, {\n    nodeName: {\n      value: '#comment'\n    },\n    nodeValue: nodeValue,\n    textContent: nodeValue,\n    innerText: nodeValue,\n    data: {\n      get: nodeValue.get,\n      set: function (v) {\n        nodeValue.set.call(this, v === null ? '' : String(v));\n      }\n    },\n    // Utility methods\n    clone: {\n      value: function clone() {\n        return new Comment(this.ownerDocument, this._data);\n      }\n    }\n  });\n  return Comment_1;\n}\nvar DocumentFragment_1;\nvar hasRequiredDocumentFragment;\nfunction requireDocumentFragment() {\n  if (hasRequiredDocumentFragment) return DocumentFragment_1;\n  hasRequiredDocumentFragment = 1;\n  DocumentFragment_1 = DocumentFragment;\n  var Node = requireNode();\n  var NodeList = requireNodeList();\n  var ContainerNode = requireContainerNode();\n  var Element = requireElement();\n  var select = requireSelect();\n  var utils = requireUtils();\n  function DocumentFragment(doc) {\n    ContainerNode.call(this);\n    this.nodeType = Node.DOCUMENT_FRAGMENT_NODE;\n    this.ownerDocument = doc;\n  }\n  DocumentFragment.prototype = Object.create(ContainerNode.prototype, {\n    nodeName: {\n      value: '#document-fragment'\n    },\n    nodeValue: {\n      get: function () {\n        return null;\n      },\n      set: function () {}\n    },\n    // Copy the text content getter/setter from Element\n    textContent: Object.getOwnPropertyDescriptor(Element.prototype, 'textContent'),\n    // Copy the text content getter/setter from Element\n    innerText: Object.getOwnPropertyDescriptor(Element.prototype, 'innerText'),\n    querySelector: {\n      value: function (selector) {\n        // implement in terms of querySelectorAll\n        var nodes = this.querySelectorAll(selector);\n        return nodes.length ? nodes[0] : null;\n      }\n    },\n    querySelectorAll: {\n      value: function (selector) {\n        // create a context\n        var context = Object.create(this);\n        // add some methods to the context for zest implementation, without\n        // adding them to the public DocumentFragment API\n        context.isHTML = true; // in HTML namespace (case-insensitive match)\n        context.getElementsByTagName = Element.prototype.getElementsByTagName;\n        context.nextElement = Object.getOwnPropertyDescriptor(Element.prototype, 'firstElementChild').get;\n        // invoke zest\n        var nodes = select(selector, context);\n        return nodes.item ? nodes : new NodeList(nodes);\n      }\n    },\n    // Utility methods\n    clone: {\n      value: function clone() {\n        return new DocumentFragment(this.ownerDocument);\n      }\n    },\n    isEqual: {\n      value: function isEqual(n) {\n        // Any two document fragments are shallowly equal.\n        // Node.isEqualNode() will test their children for equality\n        return true;\n      }\n    },\n    // Non-standard, but useful (github issue #73)\n    innerHTML: {\n      get: function () {\n        return this.serialize();\n      },\n      set: utils.nyi\n    },\n    outerHTML: {\n      get: function () {\n        return this.serialize();\n      },\n      set: utils.nyi\n    }\n  });\n  return DocumentFragment_1;\n}\nvar ProcessingInstruction_1;\nvar hasRequiredProcessingInstruction;\nfunction requireProcessingInstruction() {\n  if (hasRequiredProcessingInstruction) return ProcessingInstruction_1;\n  hasRequiredProcessingInstruction = 1;\n  ProcessingInstruction_1 = ProcessingInstruction;\n  var Node = requireNode();\n  var CharacterData = requireCharacterData();\n  function ProcessingInstruction(doc, target, data) {\n    CharacterData.call(this);\n    this.nodeType = Node.PROCESSING_INSTRUCTION_NODE;\n    this.ownerDocument = doc;\n    this._target = target;\n    this._data = data;\n  }\n  var nodeValue = {\n    get: function () {\n      return this._data;\n    },\n    set: function (v) {\n      if (v === null || v === undefined) {\n        v = '';\n      } else {\n        v = String(v);\n      }\n      this._data = v;\n      if (this.rooted) this.ownerDocument.mutateValue(this);\n    }\n  };\n  ProcessingInstruction.prototype = Object.create(CharacterData.prototype, {\n    target: {\n      get: function () {\n        return this._target;\n      },\n      set: function () {/* no-op per spec */}\n    },\n    nodeName: {\n      get: function () {\n        return this.target;\n      }\n    },\n    nodeValue: nodeValue,\n    textContent: nodeValue,\n    innerText: nodeValue,\n    data: {\n      get: nodeValue.get,\n      set: function (v) {\n        nodeValue.set.call(this, v === null ? '' : String(v));\n      }\n    },\n    // Utility methods\n    clone: {\n      value: function clone() {\n        return new ProcessingInstruction(this.ownerDocument, this.target, this._data);\n      }\n    },\n    isEqual: {\n      value: function isEqual(n) {\n        return this.target === n.target && this._data === n._data;\n      }\n    }\n  });\n  return ProcessingInstruction_1;\n}\nvar NodeFilter_1;\nvar hasRequiredNodeFilter;\nfunction requireNodeFilter() {\n  if (hasRequiredNodeFilter) return NodeFilter_1;\n  hasRequiredNodeFilter = 1;\n  var NodeFilter = {\n    // Constants for acceptNode()\n    FILTER_ACCEPT: 1,\n    FILTER_REJECT: 2,\n    FILTER_SKIP: 3,\n    // Constants for whatToShow\n    SHOW_ALL: 0xFFFFFFFF,\n    SHOW_ELEMENT: 0x1,\n    SHOW_ATTRIBUTE: 0x2,\n    // historical\n    SHOW_TEXT: 0x4,\n    SHOW_CDATA_SECTION: 0x8,\n    // historical\n    SHOW_ENTITY_REFERENCE: 0x10,\n    // historical\n    SHOW_ENTITY: 0x20,\n    // historical\n    SHOW_PROCESSING_INSTRUCTION: 0x40,\n    SHOW_COMMENT: 0x80,\n    SHOW_DOCUMENT: 0x100,\n    SHOW_DOCUMENT_TYPE: 0x200,\n    SHOW_DOCUMENT_FRAGMENT: 0x400,\n    SHOW_NOTATION: 0x800 // historical\n  };\n  NodeFilter_1 = NodeFilter.constructor = NodeFilter.prototype = NodeFilter;\n  return NodeFilter_1;\n}\nvar NodeTraversal = {\n  exports: {}\n};\nvar hasRequiredNodeTraversal;\nfunction requireNodeTraversal() {\n  if (hasRequiredNodeTraversal) return NodeTraversal.exports;\n  hasRequiredNodeTraversal = 1;\n  /* exported NodeTraversal */\n  NodeTraversal.exports = {\n    nextSkippingChildren: nextSkippingChildren,\n    nextAncestorSibling: nextAncestorSibling,\n    next: next,\n    previous: previous,\n    deepLastChild: deepLastChild\n  };\n\n  /**\n   * @based on WebKit's NodeTraversal::nextSkippingChildren\n   * https://trac.webkit.org/browser/trunk/Source/WebCore/dom/NodeTraversal.h?rev=179143#L109\n   */\n  function nextSkippingChildren(node, stayWithin) {\n    if (node === stayWithin) {\n      return null;\n    }\n    if (node.nextSibling !== null) {\n      return node.nextSibling;\n    }\n    return nextAncestorSibling(node, stayWithin);\n  }\n\n  /**\n   * @based on WebKit's NodeTraversal::nextAncestorSibling\n   * https://trac.webkit.org/browser/trunk/Source/WebCore/dom/NodeTraversal.cpp?rev=179143#L93\n   */\n  function nextAncestorSibling(node, stayWithin) {\n    for (node = node.parentNode; node !== null; node = node.parentNode) {\n      if (node === stayWithin) {\n        return null;\n      }\n      if (node.nextSibling !== null) {\n        return node.nextSibling;\n      }\n    }\n    return null;\n  }\n\n  /**\n   * @based on WebKit's NodeTraversal::next\n   * https://trac.webkit.org/browser/trunk/Source/WebCore/dom/NodeTraversal.h?rev=179143#L99\n   */\n  function next(node, stayWithin) {\n    var n;\n    n = node.firstChild;\n    if (n !== null) {\n      return n;\n    }\n    if (node === stayWithin) {\n      return null;\n    }\n    n = node.nextSibling;\n    if (n !== null) {\n      return n;\n    }\n    return nextAncestorSibling(node, stayWithin);\n  }\n\n  /**\n   * @based on WebKit's NodeTraversal::deepLastChild\n   * https://trac.webkit.org/browser/trunk/Source/WebCore/dom/NodeTraversal.cpp?rev=179143#L116\n   */\n  function deepLastChild(node) {\n    while (node.lastChild) {\n      node = node.lastChild;\n    }\n    return node;\n  }\n\n  /**\n   * @based on WebKit's NodeTraversal::previous\n   * https://trac.webkit.org/browser/trunk/Source/WebCore/dom/NodeTraversal.h?rev=179143#L121\n   */\n  function previous(node, stayWithin) {\n    var p;\n    p = node.previousSibling;\n    if (p !== null) {\n      return deepLastChild(p);\n    }\n    p = node.parentNode;\n    if (p === stayWithin) {\n      return null;\n    }\n    return p;\n  }\n  return NodeTraversal.exports;\n}\nvar TreeWalker_1;\nvar hasRequiredTreeWalker;\nfunction requireTreeWalker() {\n  if (hasRequiredTreeWalker) return TreeWalker_1;\n  hasRequiredTreeWalker = 1;\n  TreeWalker_1 = TreeWalker;\n  var Node = requireNode();\n  var NodeFilter = requireNodeFilter();\n  var NodeTraversal = requireNodeTraversal();\n  var utils = requireUtils();\n  var mapChild = {\n    first: 'firstChild',\n    last: 'lastChild',\n    next: 'firstChild',\n    previous: 'lastChild'\n  };\n  var mapSibling = {\n    first: 'nextSibling',\n    last: 'previousSibling',\n    next: 'nextSibling',\n    previous: 'previousSibling'\n  };\n\n  /* Private methods and helpers */\n\n  /**\n   * @spec https://dom.spec.whatwg.org/#concept-traverse-children\n   * @method\n   * @access private\n   * @param {TreeWalker} tw\n   * @param {string} type One of 'first' or 'last'.\n   * @return {Node|null}\n   */\n  function traverseChildren(tw, type) {\n    var child, node, parent, result, sibling;\n    node = tw._currentNode[mapChild[type]];\n    while (node !== null) {\n      result = tw._internalFilter(node);\n      if (result === NodeFilter.FILTER_ACCEPT) {\n        tw._currentNode = node;\n        return node;\n      }\n      if (result === NodeFilter.FILTER_SKIP) {\n        child = node[mapChild[type]];\n        if (child !== null) {\n          node = child;\n          continue;\n        }\n      }\n      while (node !== null) {\n        sibling = node[mapSibling[type]];\n        if (sibling !== null) {\n          node = sibling;\n          break;\n        }\n        parent = node.parentNode;\n        if (parent === null || parent === tw.root || parent === tw._currentNode) {\n          return null;\n        } else {\n          node = parent;\n        }\n      }\n    }\n    return null;\n  }\n\n  /**\n   * @spec https://dom.spec.whatwg.org/#concept-traverse-siblings\n   * @method\n   * @access private\n   * @param {TreeWalker} tw\n   * @param {TreeWalker} type One of 'next' or 'previous'.\n   * @return {Node|nul}\n   */\n  function traverseSiblings(tw, type) {\n    var node, result, sibling;\n    node = tw._currentNode;\n    if (node === tw.root) {\n      return null;\n    }\n    while (true) {\n      sibling = node[mapSibling[type]];\n      while (sibling !== null) {\n        node = sibling;\n        result = tw._internalFilter(node);\n        if (result === NodeFilter.FILTER_ACCEPT) {\n          tw._currentNode = node;\n          return node;\n        }\n        sibling = node[mapChild[type]];\n        if (result === NodeFilter.FILTER_REJECT || sibling === null) {\n          sibling = node[mapSibling[type]];\n        }\n      }\n      node = node.parentNode;\n      if (node === null || node === tw.root) {\n        return null;\n      }\n      if (tw._internalFilter(node) === NodeFilter.FILTER_ACCEPT) {\n        return null;\n      }\n    }\n  }\n\n  /* Public API */\n\n  /**\n   * Latest version: https://dom.spec.whatwg.org/#treewalker\n   *\n   * @constructor\n   * @param {Node} root\n   * @param {number} whatToShow [optional]\n   * @param {Function|NodeFilter} filter [optional]\n   * @throws Error\n   */\n  function TreeWalker(root, whatToShow, filter) {\n    if (!root || !root.nodeType) {\n      utils.NotSupportedError();\n    }\n\n    // Read-only properties\n    this._root = root;\n    this._whatToShow = Number(whatToShow) || 0;\n    this._filter = filter || null;\n    this._active = false;\n    // Read-write property\n    this._currentNode = root;\n  }\n  Object.defineProperties(TreeWalker.prototype, {\n    root: {\n      get: function () {\n        return this._root;\n      }\n    },\n    whatToShow: {\n      get: function () {\n        return this._whatToShow;\n      }\n    },\n    filter: {\n      get: function () {\n        return this._filter;\n      }\n    },\n    currentNode: {\n      get: function currentNode() {\n        return this._currentNode;\n      },\n      set: function setCurrentNode(v) {\n        if (!(v instanceof Node)) {\n          throw new TypeError(\"Not a Node\"); // `null` is also not a node\n        }\n        this._currentNode = v;\n      }\n    },\n    /**\n     * @method\n     * @param {Node} node\n     * @return {Number} Constant NodeFilter.FILTER_ACCEPT,\n     *  NodeFilter.FILTER_REJECT or NodeFilter.FILTER_SKIP.\n     */\n    _internalFilter: {\n      value: function _internalFilter(node) {\n        /* jshint bitwise: false */\n        var result, filter;\n        if (this._active) {\n          utils.InvalidStateError();\n        }\n\n        // Maps nodeType to whatToShow\n        if (!(1 << node.nodeType - 1 & this._whatToShow)) {\n          return NodeFilter.FILTER_SKIP;\n        }\n        filter = this._filter;\n        if (filter === null) {\n          result = NodeFilter.FILTER_ACCEPT;\n        } else {\n          this._active = true;\n          try {\n            if (typeof filter === 'function') {\n              result = filter(node);\n            } else {\n              result = filter.acceptNode(node);\n            }\n          } finally {\n            this._active = false;\n          }\n        }\n\n        // Note that coercing to a number means that\n        //  `true` becomes `1` (which is NodeFilter.FILTER_ACCEPT)\n        //  `false` becomes `0` (neither accept, reject, or skip)\n        return +result;\n      }\n    },\n    /**\n     * @spec https://dom.spec.whatwg.org/#dom-treewalker-parentnode\n     * @based on WebKit's TreeWalker::parentNode\n     * https://trac.webkit.org/browser/webkit/trunk/Source/WebCore/dom/TreeWalker.cpp?rev=220453#L50\n     * @method\n     * @return {Node|null}\n     */\n    parentNode: {\n      value: function parentNode() {\n        var node = this._currentNode;\n        while (node !== this.root) {\n          node = node.parentNode;\n          if (node === null) {\n            return null;\n          }\n          if (this._internalFilter(node) === NodeFilter.FILTER_ACCEPT) {\n            this._currentNode = node;\n            return node;\n          }\n        }\n        return null;\n      }\n    },\n    /**\n     * @spec https://dom.spec.whatwg.org/#dom-treewalker-firstchild\n     * @method\n     * @return {Node|null}\n     */\n    firstChild: {\n      value: function firstChild() {\n        return traverseChildren(this, 'first');\n      }\n    },\n    /**\n     * @spec https://dom.spec.whatwg.org/#dom-treewalker-lastchild\n     * @method\n     * @return {Node|null}\n     */\n    lastChild: {\n      value: function lastChild() {\n        return traverseChildren(this, 'last');\n      }\n    },\n    /**\n     * @spec http://www.w3.org/TR/dom/#dom-treewalker-previoussibling\n     * @method\n     * @return {Node|null}\n     */\n    previousSibling: {\n      value: function previousSibling() {\n        return traverseSiblings(this, 'previous');\n      }\n    },\n    /**\n     * @spec http://www.w3.org/TR/dom/#dom-treewalker-nextsibling\n     * @method\n     * @return {Node|null}\n     */\n    nextSibling: {\n      value: function nextSibling() {\n        return traverseSiblings(this, 'next');\n      }\n    },\n    /**\n     * @spec https://dom.spec.whatwg.org/#dom-treewalker-previousnode\n     * @based on WebKit's TreeWalker::previousNode\n     * https://trac.webkit.org/browser/webkit/trunk/Source/WebCore/dom/TreeWalker.cpp?rev=220453#L181\n     * @method\n     * @return {Node|null}\n     */\n    previousNode: {\n      value: function previousNode() {\n        var node, result, previousSibling, lastChild;\n        node = this._currentNode;\n        while (node !== this._root) {\n          for (previousSibling = node.previousSibling; previousSibling; previousSibling = node.previousSibling) {\n            node = previousSibling;\n            result = this._internalFilter(node);\n            if (result === NodeFilter.FILTER_REJECT) {\n              continue;\n            }\n            for (lastChild = node.lastChild; lastChild; lastChild = node.lastChild) {\n              node = lastChild;\n              result = this._internalFilter(node);\n              if (result === NodeFilter.FILTER_REJECT) {\n                break;\n              }\n            }\n            if (result === NodeFilter.FILTER_ACCEPT) {\n              this._currentNode = node;\n              return node;\n            }\n          }\n          if (node === this.root || node.parentNode === null) {\n            return null;\n          }\n          node = node.parentNode;\n          if (this._internalFilter(node) === NodeFilter.FILTER_ACCEPT) {\n            this._currentNode = node;\n            return node;\n          }\n        }\n        return null;\n      }\n    },\n    /**\n     * @spec https://dom.spec.whatwg.org/#dom-treewalker-nextnode\n     * @based on WebKit's TreeWalker::nextNode\n     * https://trac.webkit.org/browser/webkit/trunk/Source/WebCore/dom/TreeWalker.cpp?rev=220453#L228\n     * @method\n     * @return {Node|null}\n     */\n    nextNode: {\n      value: function nextNode() {\n        var node, result, firstChild, nextSibling;\n        node = this._currentNode;\n        result = NodeFilter.FILTER_ACCEPT;\n        CHILDREN: while (true) {\n          for (firstChild = node.firstChild; firstChild; firstChild = node.firstChild) {\n            node = firstChild;\n            result = this._internalFilter(node);\n            if (result === NodeFilter.FILTER_ACCEPT) {\n              this._currentNode = node;\n              return node;\n            } else if (result === NodeFilter.FILTER_REJECT) {\n              break;\n            }\n          }\n          for (nextSibling = NodeTraversal.nextSkippingChildren(node, this.root); nextSibling; nextSibling = NodeTraversal.nextSkippingChildren(node, this.root)) {\n            node = nextSibling;\n            result = this._internalFilter(node);\n            if (result === NodeFilter.FILTER_ACCEPT) {\n              this._currentNode = node;\n              return node;\n            } else if (result === NodeFilter.FILTER_SKIP) {\n              continue CHILDREN;\n            }\n          }\n          return null;\n        }\n      }\n    },\n    /** For compatibility with web-platform-tests. */\n    toString: {\n      value: function toString() {\n        return \"[object TreeWalker]\";\n      }\n    }\n  });\n  return TreeWalker_1;\n}\nvar NodeIterator_1;\nvar hasRequiredNodeIterator;\nfunction requireNodeIterator() {\n  if (hasRequiredNodeIterator) return NodeIterator_1;\n  hasRequiredNodeIterator = 1;\n  NodeIterator_1 = NodeIterator;\n  var NodeFilter = requireNodeFilter();\n  var NodeTraversal = requireNodeTraversal();\n  var utils = requireUtils();\n\n  /* Private methods and helpers */\n\n  /**\n   * @based on WebKit's NodeIterator::moveToNext and NodeIterator::moveToPrevious\n   * https://trac.webkit.org/browser/trunk/Source/WebCore/dom/NodeIterator.cpp?rev=186279#L51\n   */\n  function move(node, stayWithin, directionIsNext) {\n    if (directionIsNext) {\n      return NodeTraversal.next(node, stayWithin);\n    } else {\n      if (node === stayWithin) {\n        return null;\n      }\n      return NodeTraversal.previous(node, null);\n    }\n  }\n  function isInclusiveAncestor(node, possibleChild) {\n    for (; possibleChild; possibleChild = possibleChild.parentNode) {\n      if (node === possibleChild) {\n        return true;\n      }\n    }\n    return false;\n  }\n\n  /**\n   * @spec http://www.w3.org/TR/dom/#concept-nodeiterator-traverse\n   * @method\n   * @access private\n   * @param {NodeIterator} ni\n   * @param {string} direction One of 'next' or 'previous'.\n   * @return {Node|null}\n   */\n  function traverse(ni, directionIsNext) {\n    var node, beforeNode;\n    node = ni._referenceNode;\n    beforeNode = ni._pointerBeforeReferenceNode;\n    while (true) {\n      if (beforeNode === directionIsNext) {\n        beforeNode = !beforeNode;\n      } else {\n        node = move(node, ni._root, directionIsNext);\n        if (node === null) {\n          return null;\n        }\n      }\n      var result = ni._internalFilter(node);\n      if (result === NodeFilter.FILTER_ACCEPT) {\n        break;\n      }\n    }\n    ni._referenceNode = node;\n    ni._pointerBeforeReferenceNode = beforeNode;\n    return node;\n  }\n\n  /* Public API */\n\n  /**\n   * Implemented version: http://www.w3.org/TR/2015/WD-dom-20150618/#nodeiterator\n   * Latest version: http://www.w3.org/TR/dom/#nodeiterator\n   *\n   * @constructor\n   * @param {Node} root\n   * @param {number} whatToShow [optional]\n   * @param {Function|NodeFilter} filter [optional]\n   * @throws Error\n   */\n  function NodeIterator(root, whatToShow, filter) {\n    if (!root || !root.nodeType) {\n      utils.NotSupportedError();\n    }\n\n    // Read-only properties\n    this._root = root;\n    this._referenceNode = root;\n    this._pointerBeforeReferenceNode = true;\n    this._whatToShow = Number(whatToShow) || 0;\n    this._filter = filter || null;\n    this._active = false;\n    // Record active node iterators in the document, in order to perform\n    // \"node iterator pre-removal steps\".\n    root.doc._attachNodeIterator(this);\n  }\n  Object.defineProperties(NodeIterator.prototype, {\n    root: {\n      get: function root() {\n        return this._root;\n      }\n    },\n    referenceNode: {\n      get: function referenceNode() {\n        return this._referenceNode;\n      }\n    },\n    pointerBeforeReferenceNode: {\n      get: function pointerBeforeReferenceNode() {\n        return this._pointerBeforeReferenceNode;\n      }\n    },\n    whatToShow: {\n      get: function whatToShow() {\n        return this._whatToShow;\n      }\n    },\n    filter: {\n      get: function filter() {\n        return this._filter;\n      }\n    },\n    /**\n     * @method\n     * @param {Node} node\n     * @return {Number} Constant NodeFilter.FILTER_ACCEPT,\n     *  NodeFilter.FILTER_REJECT or NodeFilter.FILTER_SKIP.\n     */\n    _internalFilter: {\n      value: function _internalFilter(node) {\n        /* jshint bitwise: false */\n        var result, filter;\n        if (this._active) {\n          utils.InvalidStateError();\n        }\n\n        // Maps nodeType to whatToShow\n        if (!(1 << node.nodeType - 1 & this._whatToShow)) {\n          return NodeFilter.FILTER_SKIP;\n        }\n        filter = this._filter;\n        if (filter === null) {\n          result = NodeFilter.FILTER_ACCEPT;\n        } else {\n          this._active = true;\n          try {\n            if (typeof filter === 'function') {\n              result = filter(node);\n            } else {\n              result = filter.acceptNode(node);\n            }\n          } finally {\n            this._active = false;\n          }\n        }\n\n        // Note that coercing to a number means that\n        //  `true` becomes `1` (which is NodeFilter.FILTER_ACCEPT)\n        //  `false` becomes `0` (neither accept, reject, or skip)\n        return +result;\n      }\n    },\n    /**\n     * @spec https://dom.spec.whatwg.org/#nodeiterator-pre-removing-steps\n     * @method\n     * @return void\n     */\n    _preremove: {\n      value: function _preremove(toBeRemovedNode) {\n        if (isInclusiveAncestor(toBeRemovedNode, this._root)) {\n          return;\n        }\n        if (!isInclusiveAncestor(toBeRemovedNode, this._referenceNode)) {\n          return;\n        }\n        if (this._pointerBeforeReferenceNode) {\n          var next = toBeRemovedNode;\n          while (next.lastChild) {\n            next = next.lastChild;\n          }\n          next = NodeTraversal.next(next, this.root);\n          if (next) {\n            this._referenceNode = next;\n            return;\n          }\n          this._pointerBeforeReferenceNode = false;\n          // fall through\n        }\n        if (toBeRemovedNode.previousSibling === null) {\n          this._referenceNode = toBeRemovedNode.parentNode;\n        } else {\n          this._referenceNode = toBeRemovedNode.previousSibling;\n          var lastChild;\n          for (lastChild = this._referenceNode.lastChild; lastChild; lastChild = this._referenceNode.lastChild) {\n            this._referenceNode = lastChild;\n          }\n        }\n      }\n    },\n    /**\n     * @spec http://www.w3.org/TR/dom/#dom-nodeiterator-nextnode\n     * @method\n     * @return {Node|null}\n     */\n    nextNode: {\n      value: function nextNode() {\n        return traverse(this, true);\n      }\n    },\n    /**\n     * @spec http://www.w3.org/TR/dom/#dom-nodeiterator-previousnode\n     * @method\n     * @return {Node|null}\n     */\n    previousNode: {\n      value: function previousNode() {\n        return traverse(this, false);\n      }\n    },\n    /**\n     * @spec http://www.w3.org/TR/dom/#dom-nodeiterator-detach\n     * @method\n     * @return void\n     */\n    detach: {\n      value: function detach() {\n        /* \"The detach() method must do nothing.\n         * Its functionality (disabling a NodeIterator object) was removed,\n         * but the method itself is preserved for compatibility.\n         */\n      }\n    },\n    /** For compatibility with web-platform-tests. */\n    toString: {\n      value: function toString() {\n        return \"[object NodeIterator]\";\n      }\n    }\n  });\n  return NodeIterator_1;\n}\nvar URL_1;\nvar hasRequiredURL;\nfunction requireURL() {\n  if (hasRequiredURL) return URL_1;\n  hasRequiredURL = 1;\n  URL_1 = URL;\n  function URL(url) {\n    if (!url) return Object.create(URL.prototype);\n    // Can't use String.trim() since it defines whitespace differently than HTML\n    this.url = url.replace(/^[ \\t\\n\\r\\f]+|[ \\t\\n\\r\\f]+$/g, \"\");\n\n    // See http://tools.ietf.org/html/rfc3986#appendix-B\n    // and https://url.spec.whatwg.org/#parsing\n    var match = URL.pattern.exec(this.url);\n    if (match) {\n      if (match[2]) this.scheme = match[2];\n      if (match[4]) {\n        // parse username/password\n        var userinfo = match[4].match(URL.userinfoPattern);\n        if (userinfo) {\n          this.username = userinfo[1];\n          this.password = userinfo[3];\n          match[4] = match[4].substring(userinfo[0].length);\n        }\n        if (match[4].match(URL.portPattern)) {\n          var pos = match[4].lastIndexOf(':');\n          this.host = match[4].substring(0, pos);\n          this.port = match[4].substring(pos + 1);\n        } else {\n          this.host = match[4];\n        }\n      }\n      if (match[5]) this.path = match[5];\n      if (match[6]) this.query = match[7];\n      if (match[8]) this.fragment = match[9];\n    }\n  }\n  URL.pattern = /^(([^:\\/?#]+):)?(\\/\\/([^\\/?#]*))?([^?#]*)(\\?([^#]*))?(#(.*))?$/;\n  URL.userinfoPattern = /^([^@:]*)(:([^@]*))?@/;\n  URL.portPattern = /:\\d+$/;\n  URL.authorityPattern = /^[^:\\/?#]+:\\/\\//;\n  URL.hierarchyPattern = /^[^:\\/?#]+:\\//;\n\n  // Return a percentEncoded version of s.\n  // S should be a single-character string\n  // XXX: needs to do utf-8 encoding?\n  URL.percentEncode = function percentEncode(s) {\n    var c = s.charCodeAt(0);\n    if (c < 256) return \"%\" + c.toString(16);else throw Error(\"can't percent-encode codepoints > 255 yet\");\n  };\n  URL.prototype = {\n    constructor: URL,\n    // XXX: not sure if this is the precise definition of absolute\n    isAbsolute: function () {\n      return !!this.scheme;\n    },\n    isAuthorityBased: function () {\n      return URL.authorityPattern.test(this.url);\n    },\n    isHierarchical: function () {\n      return URL.hierarchyPattern.test(this.url);\n    },\n    toString: function () {\n      var s = \"\";\n      if (this.scheme !== undefined) s += this.scheme + \":\";\n      if (this.isAbsolute()) {\n        s += '//';\n        if (this.username || this.password) {\n          s += this.username || '';\n          if (this.password) {\n            s += ':' + this.password;\n          }\n          s += '@';\n        }\n        if (this.host) {\n          s += this.host;\n        }\n      }\n      if (this.port !== undefined) s += \":\" + this.port;\n      if (this.path !== undefined) s += this.path;\n      if (this.query !== undefined) s += \"?\" + this.query;\n      if (this.fragment !== undefined) s += \"#\" + this.fragment;\n      return s;\n    },\n    // See: http://tools.ietf.org/html/rfc3986#section-5.2\n    // and https://url.spec.whatwg.org/#constructors\n    resolve: function (relative) {\n      var base = this; // The base url we're resolving against\n      var r = new URL(relative); // The relative reference url to resolve\n      var t = new URL(); // The absolute target url we will return\n\n      if (r.scheme !== undefined) {\n        t.scheme = r.scheme;\n        t.username = r.username;\n        t.password = r.password;\n        t.host = r.host;\n        t.port = r.port;\n        t.path = remove_dot_segments(r.path);\n        t.query = r.query;\n      } else {\n        t.scheme = base.scheme;\n        if (r.host !== undefined) {\n          t.username = r.username;\n          t.password = r.password;\n          t.host = r.host;\n          t.port = r.port;\n          t.path = remove_dot_segments(r.path);\n          t.query = r.query;\n        } else {\n          t.username = base.username;\n          t.password = base.password;\n          t.host = base.host;\n          t.port = base.port;\n          if (!r.path) {\n            // undefined or empty\n            t.path = base.path;\n            if (r.query !== undefined) t.query = r.query;else t.query = base.query;\n          } else {\n            if (r.path.charAt(0) === \"/\") {\n              t.path = remove_dot_segments(r.path);\n            } else {\n              t.path = merge(base.path, r.path);\n              t.path = remove_dot_segments(t.path);\n            }\n            t.query = r.query;\n          }\n        }\n      }\n      t.fragment = r.fragment;\n      return t.toString();\n      function merge(basepath, refpath) {\n        if (base.host !== undefined && !base.path) return \"/\" + refpath;\n        var lastslash = basepath.lastIndexOf(\"/\");\n        if (lastslash === -1) return refpath;else return basepath.substring(0, lastslash + 1) + refpath;\n      }\n      function remove_dot_segments(path) {\n        if (!path) return path; // For \"\" or undefined\n\n        var output = \"\";\n        while (path.length > 0) {\n          if (path === \".\" || path === \"..\") {\n            path = \"\";\n            break;\n          }\n          var twochars = path.substring(0, 2);\n          var threechars = path.substring(0, 3);\n          var fourchars = path.substring(0, 4);\n          if (threechars === \"../\") {\n            path = path.substring(3);\n          } else if (twochars === \"./\") {\n            path = path.substring(2);\n          } else if (threechars === \"/./\") {\n            path = \"/\" + path.substring(3);\n          } else if (twochars === \"/.\" && path.length === 2) {\n            path = \"/\";\n          } else if (fourchars === \"/../\" || threechars === \"/..\" && path.length === 3) {\n            path = \"/\" + path.substring(4);\n            output = output.replace(/\\/?[^\\/]*$/, \"\");\n          } else {\n            var segment = path.match(/(\\/?([^\\/]*))/)[0];\n            output += segment;\n            path = path.substring(segment.length);\n          }\n        }\n        return output;\n      }\n    }\n  };\n  return URL_1;\n}\nvar CustomEvent_1;\nvar hasRequiredCustomEvent;\nfunction requireCustomEvent() {\n  if (hasRequiredCustomEvent) return CustomEvent_1;\n  hasRequiredCustomEvent = 1;\n  CustomEvent_1 = CustomEvent;\n  var Event = requireEvent();\n  function CustomEvent(type, dictionary) {\n    // Just use the superclass constructor to initialize\n    Event.call(this, type, dictionary);\n  }\n  CustomEvent.prototype = Object.create(Event.prototype, {\n    constructor: {\n      value: CustomEvent\n    }\n  });\n  return CustomEvent_1;\n}\nvar events;\nvar hasRequiredEvents;\nfunction requireEvents() {\n  if (hasRequiredEvents) return events;\n  hasRequiredEvents = 1;\n  events = {\n    Event: requireEvent(),\n    UIEvent: requireUIEvent(),\n    MouseEvent: requireMouseEvent(),\n    CustomEvent: requireCustomEvent()\n  };\n  return events;\n}\nvar htmlelts = {};\nvar style_parser = {};\nvar hasRequiredStyle_parser;\nfunction requireStyle_parser() {\n  if (hasRequiredStyle_parser) return style_parser;\n  hasRequiredStyle_parser = 1;\n\n  // The below is a compiled copy of https://github.com/angular/angular/blob/92e41e9cb417223d9888a4c23b4c0e73188f87d0/packages/compiler/src/render3/view/style_parser.ts\n\n  Object.defineProperty(style_parser, \"__esModule\", {\n    value: true\n  });\n  style_parser.hyphenate = style_parser.parse = void 0;\n  /**\n   * Parses string representation of a style and converts it into object literal.\n   *\n   * @param value string representation of style as used in the `style` attribute in HTML.\n   *   Example: `color: red; height: auto`.\n   * @returns An array of style property name and value pairs, e.g. `['color', 'red', 'height',\n   * 'auto']`\n   */\n  function parse(value) {\n    // we use a string array here instead of a string map\n    // because a string-map is not guaranteed to retain the\n    // order of the entries whereas a string array can be\n    // constructed in a [key, value, key, value] format.\n    const styles = [];\n    let i = 0;\n    let parenDepth = 0;\n    let quote = 0; /* Char.QuoteNone */\n    let valueStart = 0;\n    let propStart = 0;\n    let currentProp = null;\n    while (i < value.length) {\n      const token = value.charCodeAt(i++);\n      switch (token) {\n        case 40 /* Char.OpenParen */:\n          parenDepth++;\n          break;\n        case 41 /* Char.CloseParen */:\n          parenDepth--;\n          break;\n        case 39 /* Char.QuoteSingle */:\n          // valueStart needs to be there since prop values don't\n          // have quotes in CSS\n          if (quote === 0 /* Char.QuoteNone */) {\n            quote = 39 /* Char.QuoteSingle */;\n          } else if (quote === 39 /* Char.QuoteSingle */ && value.charCodeAt(i - 1) !== 92 /* Char.BackSlash */) {\n            quote = 0 /* Char.QuoteNone */;\n          }\n          break;\n        case 34 /* Char.QuoteDouble */:\n          // same logic as above\n          if (quote === 0 /* Char.QuoteNone */) {\n            quote = 34 /* Char.QuoteDouble */;\n          } else if (quote === 34 /* Char.QuoteDouble */ && value.charCodeAt(i - 1) !== 92 /* Char.BackSlash */) {\n            quote = 0 /* Char.QuoteNone */;\n          }\n          break;\n        case 58 /* Char.Colon */:\n          if (!currentProp && parenDepth === 0 && quote === 0 /* Char.QuoteNone */) {\n            currentProp = hyphenate(value.substring(propStart, i - 1).trim());\n            valueStart = i;\n          }\n          break;\n        case 59 /* Char.Semicolon */:\n          if (currentProp && valueStart > 0 && parenDepth === 0 && quote === 0 /* Char.QuoteNone */) {\n            const styleVal = value.substring(valueStart, i - 1).trim();\n            styles.push(currentProp, styleVal);\n            propStart = i;\n            valueStart = 0;\n            currentProp = null;\n          }\n          break;\n      }\n    }\n    if (currentProp && valueStart) {\n      const styleVal = value.slice(valueStart).trim();\n      styles.push(currentProp, styleVal);\n    }\n    return styles;\n  }\n  style_parser.parse = parse;\n  function hyphenate(value) {\n    return value.replace(/[a-z][A-Z]/g, v => {\n      return v.charAt(0) + \"-\" + v.charAt(1);\n    }).toLowerCase();\n  }\n  style_parser.hyphenate = hyphenate;\n  return style_parser;\n}\nvar CSSStyleDeclaration_1;\nvar hasRequiredCSSStyleDeclaration;\nfunction requireCSSStyleDeclaration() {\n  if (hasRequiredCSSStyleDeclaration) return CSSStyleDeclaration_1;\n  hasRequiredCSSStyleDeclaration = 1;\n  const {\n    parse\n  } = requireStyle_parser();\n  CSSStyleDeclaration_1 = function (elt) {\n    const style = new CSSStyleDeclaration(elt);\n    const handler = {\n      get: function (target, property) {\n        return property in target ? target[property] : target.getPropertyValue(dasherizeProperty(property));\n      },\n      has: function (target, key) {\n        return true;\n      },\n      set: function (target, property, value) {\n        if (property in target) {\n          target[property] = value;\n        } else {\n          target.setProperty(dasherizeProperty(property), value ?? undefined);\n        }\n        return true;\n      }\n    };\n    return new Proxy(style, handler);\n  };\n  function dasherizeProperty(property) {\n    return property.replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\n  }\n  function CSSStyleDeclaration(elt) {\n    this._element = elt;\n  }\n  const IMPORTANT_BANG = '!important';\n\n  // Utility function for parsing style declarations\n  // Pass in a string like \"margin-left: 5px; border-style: solid\"\n  // and this function returns an object like\n  // {\"margin-left\":\"5px\", \"border-style\":\"solid\"}\n  function parseStyles(value) {\n    const result = {\n      property: {},\n      priority: {}\n    };\n    if (!value) {\n      return result;\n    }\n    const styleValues = parse(value);\n    if (styleValues.length < 2) {\n      return result;\n    }\n    for (let i = 0; i < styleValues.length; i += 2) {\n      const name = styleValues[i];\n      let value = styleValues[i + 1];\n      if (value.endsWith(IMPORTANT_BANG)) {\n        result.priority[name] = 'important';\n        value = value.slice(0, -IMPORTANT_BANG.length).trim();\n      }\n      result.property[name] = value;\n    }\n    return result;\n  }\n  var NO_CHANGE = {}; // Private marker object\n\n  CSSStyleDeclaration.prototype = Object.create(Object.prototype, {\n    // Return the parsed form of the element's style attribute.\n    // If the element's style attribute has never been parsed\n    // or if it has changed since the last parse, then reparse it\n    // Note that the styles don't get parsed until they're actually needed\n    _parsed: {\n      get: function () {\n        if (!this._parsedStyles || this.cssText !== this._lastParsedText) {\n          var text = this.cssText;\n          this._parsedStyles = parseStyles(text);\n          this._lastParsedText = text;\n          delete this._names;\n        }\n        return this._parsedStyles;\n      }\n    },\n    // Call this method any time the parsed representation of the\n    // style changes.  It converts the style properties to a string and\n    // sets cssText and the element's style attribute\n    _serialize: {\n      value: function () {\n        var styles = this._parsed;\n        var s = \"\";\n        for (var name in styles.property) {\n          if (s) s += \" \";\n          s += name + \": \" + styles.property[name];\n          if (styles.priority[name]) {\n            s += \" !\" + styles.priority[name];\n          }\n          s += \";\";\n        }\n        this.cssText = s; // also sets the style attribute\n        this._lastParsedText = s; // so we don't reparse\n        delete this._names;\n      }\n    },\n    cssText: {\n      get: function () {\n        // XXX: this is a CSSStyleDeclaration for an element.\n        // A different impl might be necessary for a set of styles\n        // associated returned by getComputedStyle(), e.g.\n        return this._element.getAttribute(\"style\");\n      },\n      set: function (value) {\n        // XXX: I should parse and serialize the value to\n        // normalize it and remove errors. FF and chrome do that.\n        this._element.setAttribute(\"style\", value);\n      }\n    },\n    length: {\n      get: function () {\n        if (!this._names) this._names = Object.getOwnPropertyNames(this._parsed.property);\n        return this._names.length;\n      }\n    },\n    item: {\n      value: function (n) {\n        if (!this._names) this._names = Object.getOwnPropertyNames(this._parsed.property);\n        return this._names[n];\n      }\n    },\n    getPropertyValue: {\n      value: function (property) {\n        property = property.toLowerCase();\n        return this._parsed.property[property] || \"\";\n      }\n    },\n    getPropertyPriority: {\n      value: function (property) {\n        property = property.toLowerCase();\n        return this._parsed.priority[property] || \"\";\n      }\n    },\n    setProperty: {\n      value: function (property, value, priority) {\n        property = property.toLowerCase();\n        if (value === null || value === undefined) {\n          value = \"\";\n        }\n        if (priority === null || priority === undefined) {\n          priority = \"\";\n        }\n\n        // String coercion\n        if (value !== NO_CHANGE) {\n          value = \"\" + value;\n        }\n        value = value.trim();\n        if (value === \"\") {\n          this.removeProperty(property);\n          return;\n        }\n        if (priority !== \"\" && priority !== NO_CHANGE && !/^important$/i.test(priority)) {\n          return;\n        }\n        var styles = this._parsed;\n        if (value === NO_CHANGE) {\n          if (!styles.property[property]) {\n            return; // Not a valid property name.\n          }\n          if (priority !== \"\") {\n            styles.priority[property] = \"important\";\n          } else {\n            delete styles.priority[property];\n          }\n        } else {\n          // We don't just accept the property value.  Instead\n          // we parse it to ensure that it is something valid.\n          // If it contains a semicolon it is invalid, except  base64-encoded\n          // URLs (e.g. `background-image: url(data:image/png;base64,...`)\n          if (value.includes(\";\") && !value.includes(\"data:\")) return;\n          var newprops = parseStyles(property + \":\" + value);\n          if (Object.getOwnPropertyNames(newprops.property).length === 0) {\n            return; // no valid property found\n          }\n          if (Object.getOwnPropertyNames(newprops.priority).length !== 0) {\n            return; // if the value included '!important' it wasn't valid.\n          }\n\n          // XXX handle shorthand properties\n\n          for (var p in newprops.property) {\n            styles.property[p] = newprops.property[p];\n            if (priority === NO_CHANGE) {\n              continue;\n            } else if (priority !== \"\") {\n              styles.priority[p] = \"important\";\n            } else if (styles.priority[p]) {\n              delete styles.priority[p];\n            }\n          }\n        }\n\n        // Serialize and update cssText and element.style!\n        this._serialize();\n      }\n    },\n    setPropertyValue: {\n      value: function (property, value) {\n        return this.setProperty(property, value, NO_CHANGE);\n      }\n    },\n    setPropertyPriority: {\n      value: function (property, priority) {\n        return this.setProperty(property, NO_CHANGE, priority);\n      }\n    },\n    removeProperty: {\n      value: function (property) {\n        property = property.toLowerCase();\n        var styles = this._parsed;\n        if (property in styles.property) {\n          delete styles.property[property];\n          delete styles.priority[property];\n\n          // Serialize and update cssText and element.style!\n          this._serialize();\n        }\n      }\n    }\n  });\n  return CSSStyleDeclaration_1;\n}\nvar URLUtils_1;\nvar hasRequiredURLUtils;\nfunction requireURLUtils() {\n  if (hasRequiredURLUtils) return URLUtils_1;\n  hasRequiredURLUtils = 1;\n  var URL = requireURL();\n  URLUtils_1 = URLUtils;\n\n  // Allow the `x == null` pattern.  This is eslint's \"null: 'ignore'\" option,\n  // but jshint doesn't support this.\n  /* jshint eqeqeq: false */\n\n  // This is an abstract superclass for Location, HTMLAnchorElement and\n  // other types that have the standard complement of \"URL decomposition\n  // IDL attributes\".  This is now standardized as URLUtils, see:\n  // https://url.spec.whatwg.org/#urlutils\n  // Subclasses must define a getter/setter on href.\n  // The getter and setter methods parse and rebuild the URL on each\n  // invocation; there is no attempt to cache the value and be more efficient\n  function URLUtils() {}\n  URLUtils.prototype = Object.create(Object.prototype, {\n    _url: {\n      get: function () {\n        // XXX: this should do the \"Reinitialize url\" steps, and \"null\" should\n        // be a valid return value.\n        return new URL(this.href);\n      }\n    },\n    protocol: {\n      get: function () {\n        var url = this._url;\n        if (url && url.scheme) return url.scheme + \":\";else return \":\";\n      },\n      set: function (v) {\n        var output = this.href;\n        var url = new URL(output);\n        if (url.isAbsolute()) {\n          v = v.replace(/:+$/, \"\");\n          v = v.replace(/[^-+\\.a-zA-Z0-9]/g, URL.percentEncode);\n          if (v.length > 0) {\n            url.scheme = v;\n            output = url.toString();\n          }\n        }\n        this.href = output;\n      }\n    },\n    host: {\n      get: function () {\n        var url = this._url;\n        if (url.isAbsolute() && url.isAuthorityBased()) return url.host + (url.port ? \":\" + url.port : \"\");else return \"\";\n      },\n      set: function (v) {\n        var output = this.href;\n        var url = new URL(output);\n        if (url.isAbsolute() && url.isAuthorityBased()) {\n          v = v.replace(/[^-+\\._~!$&'()*,;:=a-zA-Z0-9]/g, URL.percentEncode);\n          if (v.length > 0) {\n            url.host = v;\n            delete url.port;\n            output = url.toString();\n          }\n        }\n        this.href = output;\n      }\n    },\n    hostname: {\n      get: function () {\n        var url = this._url;\n        if (url.isAbsolute() && url.isAuthorityBased()) return url.host;else return \"\";\n      },\n      set: function (v) {\n        var output = this.href;\n        var url = new URL(output);\n        if (url.isAbsolute() && url.isAuthorityBased()) {\n          v = v.replace(/^\\/+/, \"\");\n          v = v.replace(/[^-+\\._~!$&'()*,;:=a-zA-Z0-9]/g, URL.percentEncode);\n          if (v.length > 0) {\n            url.host = v;\n            output = url.toString();\n          }\n        }\n        this.href = output;\n      }\n    },\n    port: {\n      get: function () {\n        var url = this._url;\n        if (url.isAbsolute() && url.isAuthorityBased() && url.port !== undefined) return url.port;else return \"\";\n      },\n      set: function (v) {\n        var output = this.href;\n        var url = new URL(output);\n        if (url.isAbsolute() && url.isAuthorityBased()) {\n          v = '' + v;\n          v = v.replace(/[^0-9].*$/, \"\");\n          v = v.replace(/^0+/, \"\");\n          if (v.length === 0) v = \"0\";\n          if (parseInt(v, 10) <= 65535) {\n            url.port = v;\n            output = url.toString();\n          }\n        }\n        this.href = output;\n      }\n    },\n    pathname: {\n      get: function () {\n        var url = this._url;\n        if (url.isAbsolute() && url.isHierarchical()) return url.path;else return \"\";\n      },\n      set: function (v) {\n        var output = this.href;\n        var url = new URL(output);\n        if (url.isAbsolute() && url.isHierarchical()) {\n          if (v.charAt(0) !== \"/\") v = \"/\" + v;\n          v = v.replace(/[^-+\\._~!$&'()*,;:=@\\/a-zA-Z0-9]/g, URL.percentEncode);\n          url.path = v;\n          output = url.toString();\n        }\n        this.href = output;\n      }\n    },\n    search: {\n      get: function () {\n        var url = this._url;\n        if (url.isAbsolute() && url.isHierarchical() && url.query !== undefined) return \"?\" + url.query;else return \"\";\n      },\n      set: function (v) {\n        var output = this.href;\n        var url = new URL(output);\n        if (url.isAbsolute() && url.isHierarchical()) {\n          if (v.charAt(0) === \"?\") v = v.substring(1);\n          v = v.replace(/[^-+\\._~!$&'()*,;:=@\\/?a-zA-Z0-9]/g, URL.percentEncode);\n          url.query = v;\n          output = url.toString();\n        }\n        this.href = output;\n      }\n    },\n    hash: {\n      get: function () {\n        var url = this._url;\n        if (url == null || url.fragment == null || url.fragment === '') {\n          return \"\";\n        } else {\n          return \"#\" + url.fragment;\n        }\n      },\n      set: function (v) {\n        var output = this.href;\n        var url = new URL(output);\n        if (v.charAt(0) === \"#\") v = v.substring(1);\n        v = v.replace(/[^-+\\._~!$&'()*,;:=@\\/?a-zA-Z0-9]/g, URL.percentEncode);\n        url.fragment = v;\n        output = url.toString();\n        this.href = output;\n      }\n    },\n    username: {\n      get: function () {\n        var url = this._url;\n        return url.username || '';\n      },\n      set: function (v) {\n        var output = this.href;\n        var url = new URL(output);\n        if (url.isAbsolute()) {\n          v = v.replace(/[\\x00-\\x1F\\x7F-\\uFFFF \"#<>?`\\/@\\\\:]/g, URL.percentEncode);\n          url.username = v;\n          output = url.toString();\n        }\n        this.href = output;\n      }\n    },\n    password: {\n      get: function () {\n        var url = this._url;\n        return url.password || '';\n      },\n      set: function (v) {\n        var output = this.href;\n        var url = new URL(output);\n        if (url.isAbsolute()) {\n          if (v === '') {\n            url.password = null;\n          } else {\n            v = v.replace(/[\\x00-\\x1F\\x7F-\\uFFFF \"#<>?`\\/@\\\\]/g, URL.percentEncode);\n            url.password = v;\n          }\n          output = url.toString();\n        }\n        this.href = output;\n      }\n    },\n    origin: {\n      get: function () {\n        var url = this._url;\n        if (url == null) {\n          return '';\n        }\n        var originForPort = function (defaultPort) {\n          var origin = [url.scheme, url.host, +url.port || defaultPort];\n          // XXX should be \"unicode serialization\"\n          return origin[0] + '://' + origin[1] + (origin[2] === defaultPort ? '' : ':' + origin[2]);\n        };\n        switch (url.scheme) {\n          case 'ftp':\n            return originForPort(21);\n          case 'gopher':\n            return originForPort(70);\n          case 'http':\n          case 'ws':\n            return originForPort(80);\n          case 'https':\n          case 'wss':\n            return originForPort(443);\n          default:\n            // this is what chrome does\n            return url.scheme + '://';\n        }\n      }\n    }\n\n    /*\n    searchParams: {\n      get: function() {\n        var url = this._url;\n        // XXX\n      },\n      set: function(v) {\n        var output = this.href;\n        var url = new URL(output);\n        // XXX\n        this.href = output;\n      },\n    },\n    */\n  });\n  URLUtils._inherit = function (proto) {\n    // copy getters/setters from URLUtils to o.\n    Object.getOwnPropertyNames(URLUtils.prototype).forEach(function (p) {\n      if (p === 'constructor' || p === 'href') {\n        return;\n      }\n      var desc = Object.getOwnPropertyDescriptor(URLUtils.prototype, p);\n      Object.defineProperty(proto, p, desc);\n    });\n  };\n  return URLUtils_1;\n}\nvar defineElement;\nvar hasRequiredDefineElement;\nfunction requireDefineElement() {\n  if (hasRequiredDefineElement) return defineElement;\n  hasRequiredDefineElement = 1;\n  var attributes = requireAttributes();\n  var isApiWritable = requireConfig().isApiWritable;\n  defineElement = function (spec, defaultConstructor, tagList, tagNameToImpl) {\n    var c = spec.ctor;\n    if (c) {\n      var props = spec.props || {};\n      if (spec.attributes) {\n        for (var n in spec.attributes) {\n          var attr = spec.attributes[n];\n          if (typeof attr !== 'object' || Array.isArray(attr)) attr = {\n            type: attr\n          };\n          if (!attr.name) attr.name = n.toLowerCase();\n          props[n] = attributes.property(attr);\n        }\n      }\n      props.constructor = {\n        value: c,\n        writable: isApiWritable\n      };\n      c.prototype = Object.create((spec.superclass || defaultConstructor).prototype, props);\n      if (spec.events) {\n        addEventHandlers(c, spec.events);\n      }\n      tagList[spec.name] = c;\n    } else {\n      c = defaultConstructor;\n    }\n    (spec.tags || spec.tag && [spec.tag] || []).forEach(function (tag) {\n      tagNameToImpl[tag] = c;\n    });\n    return c;\n  };\n  function EventHandlerBuilder(body, document, form, element) {\n    this.body = body;\n    this.document = document;\n    this.form = form;\n    this.element = element;\n  }\n  EventHandlerBuilder.prototype.build = function () {\n    return () => {};\n  };\n  function EventHandlerChangeHandler(elt, name, oldval, newval) {\n    var doc = elt.ownerDocument || Object.create(null);\n    var form = elt.form || Object.create(null);\n    elt[name] = new EventHandlerBuilder(newval, doc, form, elt).build();\n  }\n  function addEventHandlers(c, eventHandlerTypes) {\n    var p = c.prototype;\n    eventHandlerTypes.forEach(function (type) {\n      // Define the event handler registration IDL attribute for this type\n      Object.defineProperty(p, \"on\" + type, {\n        get: function () {\n          return this._getEventHandler(type);\n        },\n        set: function (v) {\n          this._setEventHandler(type, v);\n        }\n      });\n\n      // Define special behavior for the content attribute as well\n      attributes.registerChangeHandler(c, \"on\" + type, EventHandlerChangeHandler);\n    });\n  }\n  return defineElement;\n}\nvar hasRequiredHtmlelts;\nfunction requireHtmlelts() {\n  if (hasRequiredHtmlelts) return htmlelts;\n  hasRequiredHtmlelts = 1;\n  var Node = requireNode();\n  var Element = requireElement();\n  var CSSStyleDeclaration = requireCSSStyleDeclaration();\n  var utils = requireUtils();\n  var URLUtils = requireURLUtils();\n  var defineElement = requireDefineElement();\n  var htmlElements = htmlelts.elements = {};\n  var htmlNameToImpl = Object.create(null);\n  htmlelts.createElement = function (doc, localName, prefix) {\n    var impl = htmlNameToImpl[localName] || HTMLUnknownElement;\n    return new impl(doc, localName, prefix);\n  };\n  function define(spec) {\n    return defineElement(spec, HTMLElement, htmlElements, htmlNameToImpl);\n  }\n  function URL(attr) {\n    return {\n      get: function () {\n        var v = this._getattr(attr);\n        if (v === null) {\n          return '';\n        }\n        var url = this.doc._resolve(v);\n        return url === null ? v : url;\n      },\n      set: function (value) {\n        this._setattr(attr, value);\n      }\n    };\n  }\n  function CORS(attr) {\n    return {\n      get: function () {\n        var v = this._getattr(attr);\n        if (v === null) {\n          return null;\n        }\n        if (v.toLowerCase() === 'use-credentials') {\n          return 'use-credentials';\n        }\n        return 'anonymous';\n      },\n      set: function (value) {\n        if (value === null || value === undefined) {\n          this.removeAttribute(attr);\n        } else {\n          this._setattr(attr, value);\n        }\n      }\n    };\n  }\n  const REFERRER = {\n    type: [\"\", \"no-referrer\", \"no-referrer-when-downgrade\", \"same-origin\", \"origin\", \"strict-origin\", \"origin-when-cross-origin\", \"strict-origin-when-cross-origin\", \"unsafe-url\"],\n    missing: ''\n  };\n\n  // XXX: the default value for tabIndex should be 0 if the element is\n  // focusable and -1 if it is not.  But the full definition of focusable\n  // is actually hard to compute, so for now, I'll follow Firefox and\n  // just base the default value on the type of the element.\n  var focusableElements = {\n    \"A\": true,\n    \"LINK\": true,\n    \"BUTTON\": true,\n    \"INPUT\": true,\n    \"SELECT\": true,\n    \"TEXTAREA\": true,\n    \"COMMAND\": true\n  };\n  var HTMLFormElement = function (doc, localName, prefix) {\n    HTMLElement.call(this, doc, localName, prefix);\n    this._form = null; // Prevent later deoptimization\n  };\n  var HTMLElement = htmlelts.HTMLElement = define({\n    superclass: Element,\n    name: 'HTMLElement',\n    ctor: function HTMLElement(doc, localName, prefix) {\n      Element.call(this, doc, localName, utils.NAMESPACE.HTML, prefix);\n    },\n    props: {\n      dangerouslySetInnerHTML: {\n        set: function (v) {\n          this._innerHTML = v;\n        }\n      },\n      innerHTML: {\n        get: function () {\n          return this.serialize();\n        },\n        set: function (v) {\n          var parser = this.ownerDocument.implementation.mozHTMLParser(this.ownerDocument._address, this);\n          parser.parse(v === null ? '' : String(v), true);\n\n          // Remove any existing children of this node\n          var target = this instanceof htmlNameToImpl.template ? this.content : this;\n          while (target.hasChildNodes()) target.removeChild(target.firstChild);\n\n          // Now copy newly parsed children to this node\n          target.appendChild(parser._asDocumentFragment());\n        }\n      },\n      style: {\n        get: function () {\n          if (!this._style) this._style = new CSSStyleDeclaration(this);\n          return this._style;\n        },\n        set: function (v) {\n          if (v === null || v === undefined) {\n            v = '';\n          }\n          this._setattr('style', String(v));\n        }\n      },\n      // These can't really be implemented server-side in a reasonable way.\n      blur: {\n        value: function () {}\n      },\n      focus: {\n        value: function () {}\n      },\n      forceSpellCheck: {\n        value: function () {}\n      },\n      click: {\n        value: function () {\n          if (this._click_in_progress) return;\n          this._click_in_progress = true;\n          try {\n            if (this._pre_click_activation_steps) this._pre_click_activation_steps();\n            var event = this.ownerDocument.createEvent(\"MouseEvent\");\n            event.initMouseEvent(\"click\", true, true, this.ownerDocument.defaultView, 1, 0, 0, 0, 0,\n            // These 4 should be initialized with\n            // the actually current keyboard state\n            // somehow...\n            false, false, false, false, 0, null);\n\n            // Dispatch this as an untrusted event since it is synthetic\n            var success = this.dispatchEvent(event);\n            if (success) {\n              if (this._post_click_activation_steps) this._post_click_activation_steps(event);\n            } else {\n              if (this._cancelled_activation_steps) this._cancelled_activation_steps();\n            }\n          } finally {\n            this._click_in_progress = false;\n          }\n        }\n      },\n      submit: {\n        value: utils.nyi\n      }\n    },\n    attributes: {\n      title: String,\n      lang: String,\n      dir: {\n        type: [\"ltr\", \"rtl\", \"auto\"],\n        missing: ''\n      },\n      draggable: {\n        type: [\"true\", \"false\"],\n        treatNullAsEmptyString: true\n      },\n      spellcheck: {\n        type: [\"true\", \"false\"],\n        missing: ''\n      },\n      enterKeyHint: {\n        type: [\"enter\", \"done\", \"go\", \"next\", \"previous\", \"search\", \"send\"],\n        missing: ''\n      },\n      autoCapitalize: {\n        type: [\"off\", \"on\", \"none\", \"sentences\", \"words\", \"characters\"],\n        missing: ''\n      },\n      autoFocus: Boolean,\n      accessKey: String,\n      nonce: String,\n      hidden: Boolean,\n      translate: {\n        type: [\"no\", \"yes\"],\n        missing: ''\n      },\n      tabIndex: {\n        type: \"long\",\n        default: function () {\n          if (this.tagName in focusableElements || this.contentEditable) return 0;else return -1;\n        }\n      }\n    },\n    events: [\"abort\", \"canplay\", \"canplaythrough\", \"change\", \"click\", \"contextmenu\", \"cuechange\", \"dblclick\", \"drag\", \"dragend\", \"dragenter\", \"dragleave\", \"dragover\", \"dragstart\", \"drop\", \"durationchange\", \"emptied\", \"ended\", \"input\", \"invalid\", \"keydown\", \"keypress\", \"keyup\", \"loadeddata\", \"loadedmetadata\", \"loadstart\", \"mousedown\", \"mousemove\", \"mouseout\", \"mouseover\", \"mouseup\", \"mousewheel\", \"pause\", \"play\", \"playing\", \"progress\", \"ratechange\", \"readystatechange\", \"reset\", \"seeked\", \"seeking\", \"select\", \"show\", \"stalled\", \"submit\", \"suspend\", \"timeupdate\", \"volumechange\", \"waiting\",\n    // These last 5 event types will be overriden by HTMLBodyElement\n    \"blur\", \"error\", \"focus\", \"load\", \"scroll\"]\n  });\n\n  // XXX: reflect contextmenu as contextMenu, with element type\n\n  // style: the spec doesn't call this a reflected attribute.\n  //   may want to handle it manually.\n\n  // contentEditable: enumerated, not clear if it is actually\n  // reflected or requires custom getter/setter. Not listed as\n  // \"limited to known values\".  Raises syntax_err on bad setting,\n  // so I think this is custom.\n\n  // contextmenu: content is element id, idl type is an element\n  // draggable: boolean, but not a reflected attribute\n  // dropzone: reflected SettableTokenList, experimental, so don't\n  //   implement it right away.\n\n  // data-* attributes: need special handling in setAttribute?\n  // Or maybe that isn't necessary. Can I just scan the attribute list\n  // when building the dataset?  Liveness and caching issues?\n\n  // microdata attributes: many are simple reflected attributes, but\n  // I'm not going to implement this now.\n\n  var HTMLUnknownElement = define({\n    name: 'HTMLUnknownElement',\n    ctor: function HTMLUnknownElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    }\n  });\n  var formAssociatedProps = {\n    // See http://www.w3.org/TR/html5/association-of-controls-and-forms.html#form-owner\n    form: {\n      get: function () {\n        return this._form;\n      }\n    }\n  };\n  define({\n    tag: 'a',\n    name: 'HTMLAnchorElement',\n    ctor: function HTMLAnchorElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    props: {\n      _post_click_activation_steps: {\n        value: function (e) {\n          if (this.href) {\n            // Follow the link\n            // XXX: this is just a quick hack\n            // XXX: the HTML spec probably requires more than this\n            this.ownerDocument.defaultView.location = this.href;\n          }\n        }\n      }\n    },\n    attributes: {\n      href: URL,\n      ping: String,\n      download: String,\n      target: String,\n      rel: String,\n      media: String,\n      hreflang: String,\n      type: String,\n      referrerPolicy: REFERRER,\n      // Obsolete\n      coords: String,\n      charset: String,\n      name: String,\n      rev: String,\n      shape: String\n    }\n  });\n  // Latest WhatWG spec says these methods come via HTMLHyperlinkElementUtils\n  URLUtils._inherit(htmlNameToImpl.a.prototype);\n  define({\n    tag: 'area',\n    name: 'HTMLAreaElement',\n    ctor: function HTMLAreaElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      alt: String,\n      target: String,\n      download: String,\n      rel: String,\n      media: String,\n      href: URL,\n      hreflang: String,\n      type: String,\n      shape: String,\n      coords: String,\n      ping: String,\n      // XXX: also reflect relList\n      referrerPolicy: REFERRER,\n      // Obsolete\n      noHref: Boolean\n    }\n  });\n  // Latest WhatWG spec says these methods come via HTMLHyperlinkElementUtils\n  URLUtils._inherit(htmlNameToImpl.area.prototype);\n  define({\n    tag: 'br',\n    name: 'HTMLBRElement',\n    ctor: function HTMLBRElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      // Obsolete\n      clear: String\n    }\n  });\n  define({\n    tag: 'base',\n    name: 'HTMLBaseElement',\n    ctor: function HTMLBaseElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      \"target\": String\n    }\n  });\n  define({\n    tag: 'body',\n    name: 'HTMLBodyElement',\n    ctor: function HTMLBodyElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    // Certain event handler attributes on a <body> tag actually set\n    // handlers for the window rather than just that element.  Define\n    // getters and setters for those here.  Note that some of these override\n    // properties on HTMLElement.prototype.\n    // XXX: If I add support for <frameset>, these have to go there, too\n    // XXX\n    // When the Window object is implemented, these attribute will have\n    // to work with the same-named attributes on the Window.\n    events: [\"afterprint\", \"beforeprint\", \"beforeunload\", \"blur\", \"error\", \"focus\", \"hashchange\", \"load\", \"message\", \"offline\", \"online\", \"pagehide\", \"pageshow\", \"popstate\", \"resize\", \"scroll\", \"storage\", \"unload\"],\n    attributes: {\n      // Obsolete\n      text: {\n        type: String,\n        treatNullAsEmptyString: true\n      },\n      link: {\n        type: String,\n        treatNullAsEmptyString: true\n      },\n      vLink: {\n        type: String,\n        treatNullAsEmptyString: true\n      },\n      aLink: {\n        type: String,\n        treatNullAsEmptyString: true\n      },\n      bgColor: {\n        type: String,\n        treatNullAsEmptyString: true\n      },\n      background: String\n    }\n  });\n  define({\n    tag: 'button',\n    name: 'HTMLButtonElement',\n    ctor: function HTMLButtonElement(doc, localName, prefix) {\n      HTMLFormElement.call(this, doc, localName, prefix);\n    },\n    props: formAssociatedProps,\n    attributes: {\n      name: String,\n      value: String,\n      disabled: Boolean,\n      autofocus: Boolean,\n      type: {\n        type: [\"submit\", \"reset\", \"button\", \"menu\"],\n        missing: 'submit'\n      },\n      formTarget: String,\n      formAction: URL,\n      formNoValidate: Boolean,\n      formMethod: {\n        type: [\"get\", \"post\", \"dialog\"],\n        invalid: 'get',\n        missing: ''\n      },\n      formEnctype: {\n        type: [\"application/x-www-form-urlencoded\", \"multipart/form-data\", \"text/plain\"],\n        invalid: \"application/x-www-form-urlencoded\",\n        missing: ''\n      }\n    }\n  });\n  define({\n    tag: 'dl',\n    name: 'HTMLDListElement',\n    ctor: function HTMLDListElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      // Obsolete\n      compact: Boolean\n    }\n  });\n  define({\n    tag: 'data',\n    name: 'HTMLDataElement',\n    ctor: function HTMLDataElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      value: String\n    }\n  });\n  define({\n    tag: 'datalist',\n    name: 'HTMLDataListElement',\n    ctor: function HTMLDataListElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    }\n  });\n  define({\n    tag: 'details',\n    name: 'HTMLDetailsElement',\n    ctor: function HTMLDetailsElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      \"open\": Boolean\n    }\n  });\n  define({\n    tag: 'div',\n    name: 'HTMLDivElement',\n    ctor: function HTMLDivElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      // Obsolete\n      align: String\n    }\n  });\n  define({\n    tag: 'embed',\n    name: 'HTMLEmbedElement',\n    ctor: function HTMLEmbedElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      src: URL,\n      type: String,\n      width: String,\n      height: String,\n      // Obsolete\n      align: String,\n      name: String\n    }\n  });\n  define({\n    tag: 'fieldset',\n    name: 'HTMLFieldSetElement',\n    ctor: function HTMLFieldSetElement(doc, localName, prefix) {\n      HTMLFormElement.call(this, doc, localName, prefix);\n    },\n    props: formAssociatedProps,\n    attributes: {\n      disabled: Boolean,\n      name: String\n    }\n  });\n  define({\n    tag: 'form',\n    name: 'HTMLFormElement',\n    ctor: function HTMLFormElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      action: String,\n      autocomplete: {\n        type: ['on', 'off'],\n        missing: 'on'\n      },\n      name: String,\n      acceptCharset: {\n        name: \"accept-charset\"\n      },\n      target: String,\n      noValidate: Boolean,\n      method: {\n        type: [\"get\", \"post\", \"dialog\"],\n        invalid: 'get',\n        missing: 'get'\n      },\n      // Both enctype and encoding reflect the enctype content attribute\n      enctype: {\n        type: [\"application/x-www-form-urlencoded\", \"multipart/form-data\", \"text/plain\"],\n        invalid: \"application/x-www-form-urlencoded\",\n        missing: \"application/x-www-form-urlencoded\"\n      },\n      encoding: {\n        name: 'enctype',\n        type: [\"application/x-www-form-urlencoded\", \"multipart/form-data\", \"text/plain\"],\n        invalid: \"application/x-www-form-urlencoded\",\n        missing: \"application/x-www-form-urlencoded\"\n      }\n    }\n  });\n  define({\n    tag: 'hr',\n    name: 'HTMLHRElement',\n    ctor: function HTMLHRElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      // Obsolete\n      align: String,\n      color: String,\n      noShade: Boolean,\n      size: String,\n      width: String\n    }\n  });\n  define({\n    tag: 'head',\n    name: 'HTMLHeadElement',\n    ctor: function HTMLHeadElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    }\n  });\n  define({\n    tags: ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'],\n    name: 'HTMLHeadingElement',\n    ctor: function HTMLHeadingElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      // Obsolete\n      align: String\n    }\n  });\n  define({\n    tag: 'html',\n    name: 'HTMLHtmlElement',\n    ctor: function HTMLHtmlElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      xmlns: URL,\n      // Obsolete\n      version: String\n    }\n  });\n  define({\n    tag: 'iframe',\n    name: 'HTMLIFrameElement',\n    ctor: function HTMLIFrameElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      src: URL,\n      srcdoc: String,\n      name: String,\n      width: String,\n      height: String,\n      // XXX: sandbox is a reflected settable token list\n      seamless: Boolean,\n      allow: Boolean,\n      allowFullscreen: Boolean,\n      allowUserMedia: Boolean,\n      allowPaymentRequest: Boolean,\n      referrerPolicy: REFERRER,\n      loading: {\n        type: ['eager', 'lazy'],\n        treatNullAsEmptyString: true\n      },\n      // Obsolete\n      align: String,\n      scrolling: String,\n      frameBorder: String,\n      longDesc: URL,\n      marginHeight: {\n        type: String,\n        treatNullAsEmptyString: true\n      },\n      marginWidth: {\n        type: String,\n        treatNullAsEmptyString: true\n      }\n    }\n  });\n  define({\n    tag: 'img',\n    name: 'HTMLImageElement',\n    ctor: function HTMLImageElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      alt: String,\n      src: URL,\n      srcset: String,\n      crossOrigin: CORS,\n      useMap: String,\n      isMap: Boolean,\n      sizes: String,\n      height: {\n        type: \"unsigned long\",\n        default: 0\n      },\n      width: {\n        type: \"unsigned long\",\n        default: 0\n      },\n      referrerPolicy: REFERRER,\n      loading: {\n        type: ['eager', 'lazy'],\n        missing: ''\n      },\n      // Obsolete:\n      name: String,\n      lowsrc: URL,\n      align: String,\n      hspace: {\n        type: \"unsigned long\",\n        default: 0\n      },\n      vspace: {\n        type: \"unsigned long\",\n        default: 0\n      },\n      longDesc: URL,\n      border: {\n        type: String,\n        treatNullAsEmptyString: true\n      }\n    }\n  });\n  define({\n    tag: 'input',\n    name: 'HTMLInputElement',\n    ctor: function HTMLInputElement(doc, localName, prefix) {\n      HTMLFormElement.call(this, doc, localName, prefix);\n    },\n    props: {\n      form: formAssociatedProps.form,\n      _post_click_activation_steps: {\n        value: function (e) {\n          if (this.type === 'checkbox') {\n            this.checked = !this.checked;\n          } else if (this.type === 'radio') {\n            var group = this.form.getElementsByName(this.name);\n            for (var i = group.length - 1; i >= 0; i--) {\n              var el = group[i];\n              el.checked = el === this;\n            }\n          }\n        }\n      }\n    },\n    attributes: {\n      name: String,\n      disabled: Boolean,\n      autofocus: Boolean,\n      accept: String,\n      alt: String,\n      max: String,\n      min: String,\n      pattern: String,\n      placeholder: String,\n      step: String,\n      dirName: String,\n      defaultValue: {\n        name: 'value'\n      },\n      multiple: Boolean,\n      required: Boolean,\n      readOnly: Boolean,\n      checked: Boolean,\n      value: String,\n      src: URL,\n      defaultChecked: {\n        name: 'checked',\n        type: Boolean\n      },\n      size: {\n        type: 'unsigned long',\n        default: 20,\n        min: 1,\n        setmin: 1\n      },\n      width: {\n        type: 'unsigned long',\n        min: 0,\n        setmin: 0,\n        default: 0\n      },\n      height: {\n        type: 'unsigned long',\n        min: 0,\n        setmin: 0,\n        default: 0\n      },\n      minLength: {\n        type: 'unsigned long',\n        min: 0,\n        setmin: 0,\n        default: -1\n      },\n      maxLength: {\n        type: 'unsigned long',\n        min: 0,\n        setmin: 0,\n        default: -1\n      },\n      autocomplete: String,\n      // It's complicated\n      type: {\n        type: [\"text\", \"hidden\", \"search\", \"tel\", \"url\", \"email\", \"password\", \"datetime\", \"date\", \"month\", \"week\", \"time\", \"datetime-local\", \"number\", \"range\", \"color\", \"checkbox\", \"radio\", \"file\", \"submit\", \"image\", \"reset\", \"button\"],\n        missing: 'text'\n      },\n      formTarget: String,\n      formNoValidate: Boolean,\n      formMethod: {\n        type: [\"get\", \"post\"],\n        invalid: 'get',\n        missing: ''\n      },\n      formEnctype: {\n        type: [\"application/x-www-form-urlencoded\", \"multipart/form-data\", \"text/plain\"],\n        invalid: \"application/x-www-form-urlencoded\",\n        missing: ''\n      },\n      inputMode: {\n        type: [\"verbatim\", \"latin\", \"latin-name\", \"latin-prose\", \"full-width-latin\", \"kana\", \"kana-name\", \"katakana\", \"numeric\", \"tel\", \"email\", \"url\"],\n        missing: ''\n      },\n      // Obsolete\n      align: String,\n      useMap: String\n    }\n  });\n  define({\n    tag: 'keygen',\n    name: 'HTMLKeygenElement',\n    ctor: function HTMLKeygenElement(doc, localName, prefix) {\n      HTMLFormElement.call(this, doc, localName, prefix);\n    },\n    props: formAssociatedProps,\n    attributes: {\n      name: String,\n      disabled: Boolean,\n      autofocus: Boolean,\n      challenge: String,\n      keytype: {\n        type: [\"rsa\"],\n        missing: ''\n      }\n    }\n  });\n  define({\n    tag: 'li',\n    name: 'HTMLLIElement',\n    ctor: function HTMLLIElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      value: {\n        type: \"long\",\n        default: 0\n      },\n      // Obsolete\n      type: String\n    }\n  });\n  define({\n    tag: 'label',\n    name: 'HTMLLabelElement',\n    ctor: function HTMLLabelElement(doc, localName, prefix) {\n      HTMLFormElement.call(this, doc, localName, prefix);\n    },\n    props: formAssociatedProps,\n    attributes: {\n      htmlFor: {\n        name: 'for',\n        type: String\n      }\n    }\n  });\n  define({\n    tag: 'legend',\n    name: 'HTMLLegendElement',\n    ctor: function HTMLLegendElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      // Obsolete\n      align: String\n    }\n  });\n  define({\n    tag: 'link',\n    name: 'HTMLLinkElement',\n    ctor: function HTMLLinkElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      // XXX Reflect DOMSettableTokenList sizes also DOMTokenList relList\n      href: URL,\n      rel: String,\n      media: String,\n      hreflang: String,\n      type: String,\n      crossOrigin: CORS,\n      nonce: String,\n      integrity: String,\n      referrerPolicy: REFERRER,\n      imageSizes: String,\n      imageSrcset: String,\n      // Obsolete\n      charset: String,\n      rev: String,\n      target: String\n    }\n  });\n  define({\n    tag: 'map',\n    name: 'HTMLMapElement',\n    ctor: function HTMLMapElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      name: String\n    }\n  });\n  define({\n    tag: 'menu',\n    name: 'HTMLMenuElement',\n    ctor: function HTMLMenuElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      // XXX: not quite right, default should be popup if parent element is\n      // popup.\n      type: {\n        type: ['context', 'popup', 'toolbar'],\n        missing: 'toolbar'\n      },\n      label: String,\n      // Obsolete\n      compact: Boolean\n    }\n  });\n  define({\n    tag: 'meta',\n    name: 'HTMLMetaElement',\n    ctor: function HTMLMetaElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      name: String,\n      content: String,\n      httpEquiv: {\n        name: 'http-equiv',\n        type: String\n      },\n      // Obsolete\n      scheme: String\n    }\n  });\n  define({\n    tag: 'meter',\n    name: 'HTMLMeterElement',\n    ctor: function HTMLMeterElement(doc, localName, prefix) {\n      HTMLFormElement.call(this, doc, localName, prefix);\n    },\n    props: formAssociatedProps\n  });\n  define({\n    tags: ['ins', 'del'],\n    name: 'HTMLModElement',\n    ctor: function HTMLModElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      cite: URL,\n      dateTime: String\n    }\n  });\n  define({\n    tag: 'ol',\n    name: 'HTMLOListElement',\n    ctor: function HTMLOListElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    props: {\n      // Utility function (see the start attribute default value). Returns\n      // the number of <li> children of this element\n      _numitems: {\n        get: function () {\n          var items = 0;\n          this.childNodes.forEach(function (n) {\n            if (n.nodeType === Node.ELEMENT_NODE && n.tagName === \"LI\") items++;\n          });\n          return items;\n        }\n      }\n    },\n    attributes: {\n      type: String,\n      reversed: Boolean,\n      start: {\n        type: \"long\",\n        default: function () {\n          // The default value of the start attribute is 1 unless the list is\n          // reversed. Then it is the # of li children\n          if (this.reversed) return this._numitems;else return 1;\n        }\n      },\n      // Obsolete\n      compact: Boolean\n    }\n  });\n  define({\n    tag: 'object',\n    name: 'HTMLObjectElement',\n    ctor: function HTMLObjectElement(doc, localName, prefix) {\n      HTMLFormElement.call(this, doc, localName, prefix);\n    },\n    props: formAssociatedProps,\n    attributes: {\n      data: URL,\n      type: String,\n      name: String,\n      useMap: String,\n      typeMustMatch: Boolean,\n      width: String,\n      height: String,\n      // Obsolete\n      align: String,\n      archive: String,\n      code: String,\n      declare: Boolean,\n      hspace: {\n        type: \"unsigned long\",\n        default: 0\n      },\n      standby: String,\n      vspace: {\n        type: \"unsigned long\",\n        default: 0\n      },\n      codeBase: URL,\n      codeType: String,\n      border: {\n        type: String,\n        treatNullAsEmptyString: true\n      }\n    }\n  });\n  define({\n    tag: 'optgroup',\n    name: 'HTMLOptGroupElement',\n    ctor: function HTMLOptGroupElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      disabled: Boolean,\n      label: String\n    }\n  });\n  define({\n    tag: 'option',\n    name: 'HTMLOptionElement',\n    ctor: function HTMLOptionElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    props: {\n      form: {\n        get: function () {\n          var p = this.parentNode;\n          while (p && p.nodeType === Node.ELEMENT_NODE) {\n            if (p.localName === 'select') return p.form;\n            p = p.parentNode;\n          }\n        }\n      },\n      value: {\n        get: function () {\n          return this._getattr('value') || this.text;\n        },\n        set: function (v) {\n          this._setattr('value', v);\n        }\n      },\n      text: {\n        get: function () {\n          // Strip and collapse whitespace\n          return this.textContent.replace(/[ \\t\\n\\f\\r]+/g, ' ').trim();\n        },\n        set: function (v) {\n          this.textContent = v;\n        }\n      }\n      // missing: index\n    },\n    attributes: {\n      disabled: Boolean,\n      defaultSelected: {\n        name: 'selected',\n        type: Boolean\n      },\n      label: String\n    }\n  });\n  define({\n    tag: 'output',\n    name: 'HTMLOutputElement',\n    ctor: function HTMLOutputElement(doc, localName, prefix) {\n      HTMLFormElement.call(this, doc, localName, prefix);\n    },\n    props: formAssociatedProps,\n    attributes: {\n      // XXX Reflect for/htmlFor as a settable token list\n      name: String\n    }\n  });\n  define({\n    tag: 'p',\n    name: 'HTMLParagraphElement',\n    ctor: function HTMLParagraphElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      // Obsolete\n      align: String\n    }\n  });\n  define({\n    tag: 'param',\n    name: 'HTMLParamElement',\n    ctor: function HTMLParamElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      name: String,\n      value: String,\n      // Obsolete\n      type: String,\n      valueType: String\n    }\n  });\n  define({\n    tags: ['pre', /*legacy elements:*/'listing', 'xmp'],\n    name: 'HTMLPreElement',\n    ctor: function HTMLPreElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      // Obsolete\n      width: {\n        type: \"long\",\n        default: 0\n      }\n    }\n  });\n  define({\n    tag: 'progress',\n    name: 'HTMLProgressElement',\n    ctor: function HTMLProgressElement(doc, localName, prefix) {\n      HTMLFormElement.call(this, doc, localName, prefix);\n    },\n    props: formAssociatedProps,\n    attributes: {\n      max: {\n        type: Number,\n        float: true,\n        default: 1.0,\n        min: 0\n      }\n    }\n  });\n  define({\n    tags: ['q', 'blockquote'],\n    name: 'HTMLQuoteElement',\n    ctor: function HTMLQuoteElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      cite: URL\n    }\n  });\n  define({\n    tag: 'script',\n    name: 'HTMLScriptElement',\n    ctor: function HTMLScriptElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    props: {\n      text: {\n        get: function () {\n          var s = \"\";\n          for (var i = 0, n = this.childNodes.length; i < n; i++) {\n            var child = this.childNodes[i];\n            if (child.nodeType === Node.TEXT_NODE) s += child._data;\n          }\n          return s;\n        },\n        set: function (value) {\n          this.removeChildren();\n          if (value !== null && value !== \"\") {\n            this.appendChild(this.ownerDocument.createTextNode(value));\n          }\n        }\n      }\n    },\n    attributes: {\n      src: URL,\n      type: String,\n      charset: String,\n      referrerPolicy: REFERRER,\n      defer: Boolean,\n      async: Boolean,\n      nomodule: Boolean,\n      crossOrigin: CORS,\n      nonce: String,\n      integrity: String\n    }\n  });\n  define({\n    tag: 'select',\n    name: 'HTMLSelectElement',\n    ctor: function HTMLSelectElement(doc, localName, prefix) {\n      HTMLFormElement.call(this, doc, localName, prefix);\n    },\n    props: {\n      form: formAssociatedProps.form,\n      options: {\n        get: function () {\n          return this.getElementsByTagName('option');\n        }\n      }\n    },\n    attributes: {\n      autocomplete: String,\n      // It's complicated\n      name: String,\n      disabled: Boolean,\n      autofocus: Boolean,\n      multiple: Boolean,\n      required: Boolean,\n      size: {\n        type: \"unsigned long\",\n        default: 0\n      }\n    }\n  });\n  define({\n    tag: 'span',\n    name: 'HTMLSpanElement',\n    ctor: function HTMLSpanElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    }\n  });\n  define({\n    tag: 'style',\n    name: 'HTMLStyleElement',\n    ctor: function HTMLStyleElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      media: String,\n      type: String,\n      scoped: Boolean\n    }\n  });\n  define({\n    tag: 'caption',\n    name: 'HTMLTableCaptionElement',\n    ctor: function HTMLTableCaptionElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      // Obsolete\n      align: String\n    }\n  });\n  define({\n    name: 'HTMLTableCellElement',\n    ctor: function HTMLTableCellElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      colSpan: {\n        type: \"unsigned long\",\n        default: 1\n      },\n      rowSpan: {\n        type: \"unsigned long\",\n        default: 1\n      },\n      //XXX Also reflect settable token list headers\n      scope: {\n        type: ['row', 'col', 'rowgroup', 'colgroup'],\n        missing: ''\n      },\n      abbr: String,\n      // Obsolete\n      align: String,\n      axis: String,\n      height: String,\n      width: String,\n      ch: {\n        name: 'char',\n        type: String\n      },\n      chOff: {\n        name: 'charoff',\n        type: String\n      },\n      noWrap: Boolean,\n      vAlign: String,\n      bgColor: {\n        type: String,\n        treatNullAsEmptyString: true\n      }\n    }\n  });\n  define({\n    tags: ['col', 'colgroup'],\n    name: 'HTMLTableColElement',\n    ctor: function HTMLTableColElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      span: {\n        type: 'limited unsigned long with fallback',\n        default: 1,\n        min: 1\n      },\n      // Obsolete\n      align: String,\n      ch: {\n        name: 'char',\n        type: String\n      },\n      chOff: {\n        name: 'charoff',\n        type: String\n      },\n      vAlign: String,\n      width: String\n    }\n  });\n  define({\n    tag: 'table',\n    name: 'HTMLTableElement',\n    ctor: function HTMLTableElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    props: {\n      rows: {\n        get: function () {\n          return this.getElementsByTagName('tr');\n        }\n      }\n    },\n    attributes: {\n      // Obsolete\n      align: String,\n      border: String,\n      frame: String,\n      rules: String,\n      summary: String,\n      width: String,\n      bgColor: {\n        type: String,\n        treatNullAsEmptyString: true\n      },\n      cellPadding: {\n        type: String,\n        treatNullAsEmptyString: true\n      },\n      cellSpacing: {\n        type: String,\n        treatNullAsEmptyString: true\n      }\n    }\n  });\n  define({\n    tag: 'template',\n    name: 'HTMLTemplateElement',\n    ctor: function HTMLTemplateElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n      this._contentFragment = doc._templateDoc.createDocumentFragment();\n    },\n    props: {\n      content: {\n        get: function () {\n          return this._contentFragment;\n        }\n      },\n      serialize: {\n        value: function () {\n          return this.content.serialize();\n        }\n      }\n    }\n  });\n  define({\n    tag: 'tr',\n    name: 'HTMLTableRowElement',\n    ctor: function HTMLTableRowElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    props: {\n      cells: {\n        get: function () {\n          return this.querySelectorAll('td,th');\n        }\n      }\n    },\n    attributes: {\n      // Obsolete\n      align: String,\n      ch: {\n        name: 'char',\n        type: String\n      },\n      chOff: {\n        name: 'charoff',\n        type: String\n      },\n      vAlign: String,\n      bgColor: {\n        type: String,\n        treatNullAsEmptyString: true\n      }\n    }\n  });\n  define({\n    tags: ['thead', 'tfoot', 'tbody'],\n    name: 'HTMLTableSectionElement',\n    ctor: function HTMLTableSectionElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    props: {\n      rows: {\n        get: function () {\n          return this.getElementsByTagName('tr');\n        }\n      }\n    },\n    attributes: {\n      // Obsolete\n      align: String,\n      ch: {\n        name: 'char',\n        type: String\n      },\n      chOff: {\n        name: 'charoff',\n        type: String\n      },\n      vAlign: String\n    }\n  });\n  define({\n    tag: 'textarea',\n    name: 'HTMLTextAreaElement',\n    ctor: function HTMLTextAreaElement(doc, localName, prefix) {\n      HTMLFormElement.call(this, doc, localName, prefix);\n    },\n    props: {\n      form: formAssociatedProps.form,\n      type: {\n        get: function () {\n          return 'textarea';\n        }\n      },\n      defaultValue: {\n        get: function () {\n          return this.textContent;\n        },\n        set: function (v) {\n          this.textContent = v;\n        }\n      },\n      value: {\n        get: function () {\n          return this.defaultValue; /* never dirty */\n        },\n        set: function (v) {\n          // This isn't completely correct: according to the spec, this\n          // should \"dirty\" the API value, and result in\n          // `this.value !== this.defaultValue`.  But for most of what\n          // folks want to do, this implementation should be fine:\n          this.defaultValue = v;\n        }\n      },\n      textLength: {\n        get: function () {\n          return this.value.length;\n        }\n      }\n    },\n    attributes: {\n      autocomplete: String,\n      // It's complicated\n      name: String,\n      disabled: Boolean,\n      autofocus: Boolean,\n      placeholder: String,\n      wrap: String,\n      dirName: String,\n      required: Boolean,\n      readOnly: Boolean,\n      rows: {\n        type: 'limited unsigned long with fallback',\n        default: 2\n      },\n      cols: {\n        type: 'limited unsigned long with fallback',\n        default: 20\n      },\n      maxLength: {\n        type: 'unsigned long',\n        min: 0,\n        setmin: 0,\n        default: -1\n      },\n      minLength: {\n        type: 'unsigned long',\n        min: 0,\n        setmin: 0,\n        default: -1\n      },\n      inputMode: {\n        type: [\"verbatim\", \"latin\", \"latin-name\", \"latin-prose\", \"full-width-latin\", \"kana\", \"kana-name\", \"katakana\", \"numeric\", \"tel\", \"email\", \"url\"],\n        missing: ''\n      }\n    }\n  });\n  define({\n    tag: 'time',\n    name: 'HTMLTimeElement',\n    ctor: function HTMLTimeElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      dateTime: String,\n      pubDate: Boolean\n    }\n  });\n  define({\n    tag: 'title',\n    name: 'HTMLTitleElement',\n    ctor: function HTMLTitleElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    props: {\n      text: {\n        get: function () {\n          return this.textContent;\n        }\n      }\n    }\n  });\n  define({\n    tag: 'ul',\n    name: 'HTMLUListElement',\n    ctor: function HTMLUListElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      type: String,\n      // Obsolete\n      compact: Boolean\n    }\n  });\n  define({\n    name: 'HTMLMediaElement',\n    ctor: function HTMLMediaElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      src: URL,\n      crossOrigin: CORS,\n      preload: {\n        type: [\"metadata\", \"none\", \"auto\", {\n          value: \"\",\n          alias: \"auto\"\n        }],\n        missing: 'auto'\n      },\n      loop: Boolean,\n      autoplay: Boolean,\n      mediaGroup: String,\n      controls: Boolean,\n      defaultMuted: {\n        name: \"muted\",\n        type: Boolean\n      }\n    }\n  });\n  define({\n    name: 'HTMLAudioElement',\n    tag: 'audio',\n    superclass: htmlElements.HTMLMediaElement,\n    ctor: function HTMLAudioElement(doc, localName, prefix) {\n      htmlElements.HTMLMediaElement.call(this, doc, localName, prefix);\n    }\n  });\n  define({\n    name: 'HTMLVideoElement',\n    tag: 'video',\n    superclass: htmlElements.HTMLMediaElement,\n    ctor: function HTMLVideoElement(doc, localName, prefix) {\n      htmlElements.HTMLMediaElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      poster: URL,\n      width: {\n        type: \"unsigned long\",\n        min: 0,\n        default: 0\n      },\n      height: {\n        type: \"unsigned long\",\n        min: 0,\n        default: 0\n      }\n    }\n  });\n  define({\n    tag: 'td',\n    name: 'HTMLTableDataCellElement',\n    superclass: htmlElements.HTMLTableCellElement,\n    ctor: function HTMLTableDataCellElement(doc, localName, prefix) {\n      htmlElements.HTMLTableCellElement.call(this, doc, localName, prefix);\n    }\n  });\n  define({\n    tag: 'th',\n    name: 'HTMLTableHeaderCellElement',\n    superclass: htmlElements.HTMLTableCellElement,\n    ctor: function HTMLTableHeaderCellElement(doc, localName, prefix) {\n      htmlElements.HTMLTableCellElement.call(this, doc, localName, prefix);\n    }\n  });\n  define({\n    tag: 'frameset',\n    name: 'HTMLFrameSetElement',\n    ctor: function HTMLFrameSetElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    }\n  });\n  define({\n    tag: 'frame',\n    name: 'HTMLFrameElement',\n    ctor: function HTMLFrameElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    }\n  });\n  define({\n    tag: 'canvas',\n    name: 'HTMLCanvasElement',\n    ctor: function HTMLCanvasElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    props: {\n      getContext: {\n        value: utils.nyi\n      },\n      probablySupportsContext: {\n        value: utils.nyi\n      },\n      setContext: {\n        value: utils.nyi\n      },\n      transferControlToProxy: {\n        value: utils.nyi\n      },\n      toDataURL: {\n        value: utils.nyi\n      },\n      toBlob: {\n        value: utils.nyi\n      }\n    },\n    attributes: {\n      width: {\n        type: \"unsigned long\",\n        default: 300\n      },\n      height: {\n        type: \"unsigned long\",\n        default: 150\n      }\n    }\n  });\n  define({\n    tag: 'dialog',\n    name: 'HTMLDialogElement',\n    ctor: function HTMLDialogElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    props: {\n      show: {\n        value: utils.nyi\n      },\n      showModal: {\n        value: utils.nyi\n      },\n      close: {\n        value: utils.nyi\n      }\n    },\n    attributes: {\n      open: Boolean,\n      returnValue: String\n    }\n  });\n  define({\n    tag: 'menuitem',\n    name: 'HTMLMenuItemElement',\n    ctor: function HTMLMenuItemElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    props: {\n      // The menuitem's label\n      _label: {\n        get: function () {\n          var val = this._getattr('label');\n          if (val !== null && val !== '') {\n            return val;\n          }\n          val = this.textContent;\n          // Strip and collapse whitespace\n          return val.replace(/[ \\t\\n\\f\\r]+/g, ' ').trim();\n        }\n      },\n      // The menuitem label IDL attribute\n      label: {\n        get: function () {\n          var val = this._getattr('label');\n          if (val !== null) {\n            return val;\n          }\n          return this._label;\n        },\n        set: function (v) {\n          this._setattr('label', v);\n        }\n      }\n    },\n    attributes: {\n      type: {\n        type: [\"command\", \"checkbox\", \"radio\"],\n        missing: 'command'\n      },\n      icon: URL,\n      disabled: Boolean,\n      checked: Boolean,\n      radiogroup: String,\n      default: Boolean\n    }\n  });\n  define({\n    tag: 'source',\n    name: 'HTMLSourceElement',\n    ctor: function HTMLSourceElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      srcset: String,\n      sizes: String,\n      media: String,\n      src: URL,\n      type: String,\n      width: String,\n      height: String\n    }\n  });\n  define({\n    tag: 'track',\n    name: 'HTMLTrackElement',\n    ctor: function HTMLTrackElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      src: URL,\n      srclang: String,\n      label: String,\n      default: Boolean,\n      kind: {\n        type: [\"subtitles\", \"captions\", \"descriptions\", \"chapters\", \"metadata\"],\n        missing: 'subtitles',\n        invalid: 'metadata'\n      }\n    },\n    props: {\n      NONE: {\n        get: function () {\n          return 0;\n        }\n      },\n      LOADING: {\n        get: function () {\n          return 1;\n        }\n      },\n      LOADED: {\n        get: function () {\n          return 2;\n        }\n      },\n      ERROR: {\n        get: function () {\n          return 3;\n        }\n      },\n      readyState: {\n        get: utils.nyi\n      },\n      track: {\n        get: utils.nyi\n      }\n    }\n  });\n  define({\n    // obsolete\n    tag: 'font',\n    name: 'HTMLFontElement',\n    ctor: function HTMLFontElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      color: {\n        type: String,\n        treatNullAsEmptyString: true\n      },\n      face: {\n        type: String\n      },\n      size: {\n        type: String\n      }\n    }\n  });\n  define({\n    // obsolete\n    tag: 'dir',\n    name: 'HTMLDirectoryElement',\n    ctor: function HTMLDirectoryElement(doc, localName, prefix) {\n      HTMLElement.call(this, doc, localName, prefix);\n    },\n    attributes: {\n      compact: Boolean\n    }\n  });\n  define({\n    tags: [\"abbr\", \"address\", \"article\", \"aside\", \"b\", \"bdi\", \"bdo\", \"cite\", \"content\", \"code\", \"dd\", \"dfn\", \"dt\", \"em\", \"figcaption\", \"figure\", \"footer\", \"header\", \"hgroup\", \"i\", \"kbd\", \"main\", \"mark\", \"nav\", \"noscript\", \"rb\", \"rp\", \"rt\", \"rtc\", \"ruby\", \"s\", \"samp\", \"section\", \"small\", \"strong\", \"sub\", \"summary\", \"sup\", \"u\", \"var\", \"wbr\",\n    // Legacy elements\n    \"acronym\", \"basefont\", \"big\", \"center\", \"nobr\", \"noembed\", \"noframes\", \"plaintext\", \"strike\", \"tt\"]\n  });\n  return htmlelts;\n}\nvar svg = {};\nvar hasRequiredSvg;\nfunction requireSvg() {\n  if (hasRequiredSvg) return svg;\n  hasRequiredSvg = 1;\n  (function (exports) {\n    var Element = requireElement();\n    var defineElement = requireDefineElement();\n    var utils = requireUtils();\n    var CSSStyleDeclaration = requireCSSStyleDeclaration();\n    var svgElements = exports.elements = {};\n    var svgNameToImpl = Object.create(null);\n    exports.createElement = function (doc, localName, prefix) {\n      var impl = svgNameToImpl[localName] || SVGElement;\n      return new impl(doc, localName, prefix);\n    };\n    function define(spec) {\n      return defineElement(spec, SVGElement, svgElements, svgNameToImpl);\n    }\n    var SVGElement = define({\n      superclass: Element,\n      name: 'SVGElement',\n      ctor: function SVGElement(doc, localName, prefix) {\n        Element.call(this, doc, localName, utils.NAMESPACE.SVG, prefix);\n      },\n      props: {\n        style: {\n          get: function () {\n            if (!this._style) this._style = new CSSStyleDeclaration(this);\n            return this._style;\n          }\n        }\n      }\n    });\n    define({\n      name: 'SVGSVGElement',\n      ctor: function SVGSVGElement(doc, localName, prefix) {\n        SVGElement.call(this, doc, localName, prefix);\n      },\n      tag: 'svg',\n      props: {\n        createSVGRect: {\n          value: function () {\n            return exports.createElement(this.ownerDocument, 'rect', null);\n          }\n        }\n      }\n    });\n    define({\n      tags: ['a', 'altGlyph', 'altGlyphDef', 'altGlyphItem', 'animate', 'animateColor', 'animateMotion', 'animateTransform', 'circle', 'clipPath', 'color-profile', 'cursor', 'defs', 'desc', 'ellipse', 'feBlend', 'feColorMatrix', 'feComponentTransfer', 'feComposite', 'feConvolveMatrix', 'feDiffuseLighting', 'feDisplacementMap', 'feDistantLight', 'feFlood', 'feFuncA', 'feFuncB', 'feFuncG', 'feFuncR', 'feGaussianBlur', 'feImage', 'feMerge', 'feMergeNode', 'feMorphology', 'feOffset', 'fePointLight', 'feSpecularLighting', 'feSpotLight', 'feTile', 'feTurbulence', 'filter', 'font', 'font-face', 'font-face-format', 'font-face-name', 'font-face-src', 'font-face-uri', 'foreignObject', 'g', 'glyph', 'glyphRef', 'hkern', 'image', 'line', 'linearGradient', 'marker', 'mask', 'metadata', 'missing-glyph', 'mpath', 'path', 'pattern', 'polygon', 'polyline', 'radialGradient', 'rect', 'script', 'set', 'stop', 'style', 'switch', 'symbol', 'text', 'textPath', 'title', 'tref', 'tspan', 'use', 'view', 'vkern']\n    });\n  })(svg);\n  return svg;\n}\nvar MutationConstants;\nvar hasRequiredMutationConstants;\nfunction requireMutationConstants() {\n  if (hasRequiredMutationConstants) return MutationConstants;\n  hasRequiredMutationConstants = 1;\n  MutationConstants = {\n    VALUE: 1,\n    // The value of a Text, Comment or PI node changed\n    ATTR: 2,\n    // A new attribute was added or an attribute value and/or prefix changed\n    REMOVE_ATTR: 3,\n    // An attribute was removed\n    REMOVE: 4,\n    // A node was removed\n    MOVE: 5,\n    // A node was moved\n    INSERT: 6 // A node (or a subtree of nodes) was inserted\n  };\n  return MutationConstants;\n}\nvar Document_1;\nvar hasRequiredDocument;\nfunction requireDocument() {\n  if (hasRequiredDocument) return Document_1;\n  hasRequiredDocument = 1;\n  Document_1 = Document;\n  var Node = requireNode();\n  var NodeList = requireNodeList();\n  var ContainerNode = requireContainerNode();\n  var Element = requireElement();\n  var Text = requireText();\n  var Comment = requireComment();\n  var Event = requireEvent();\n  var DocumentFragment = requireDocumentFragment();\n  var ProcessingInstruction = requireProcessingInstruction();\n  var DOMImplementation = requireDOMImplementation();\n  var TreeWalker = requireTreeWalker();\n  var NodeIterator = requireNodeIterator();\n  var NodeFilter = requireNodeFilter();\n  var URL = requireURL();\n  var select = requireSelect();\n  var events = requireEvents();\n  var xml = requireXmlnames();\n  var html = requireHtmlelts();\n  var svg = requireSvg();\n  var utils = requireUtils();\n  var MUTATE = requireMutationConstants();\n  var NAMESPACE = utils.NAMESPACE;\n  var isApiWritable = requireConfig().isApiWritable;\n  function Document(isHTML, address) {\n    ContainerNode.call(this);\n    this.nodeType = Node.DOCUMENT_NODE;\n    this.isHTML = isHTML;\n    this._address = address || 'about:blank';\n    this.readyState = 'loading';\n    this.implementation = new DOMImplementation(this);\n\n    // DOMCore says that documents are always associated with themselves\n    this.ownerDocument = null; // ... but W3C tests expect null\n    this._contentType = isHTML ? 'text/html' : 'application/xml';\n\n    // These will be initialized by our custom versions of\n    // appendChild and insertBefore that override the inherited\n    // Node methods.\n    // XXX: override those methods!\n    this.doctype = null;\n    this.documentElement = null;\n\n    // \"Associated inert template document\"\n    this._templateDocCache = null;\n    // List of active NodeIterators, see NodeIterator#_preremove()\n    this._nodeIterators = null;\n\n    // Documents are always rooted, by definition\n    this._nid = 1;\n    this._nextnid = 2; // For numbering children of the document\n    this._nodes = [null, this]; // nid to node map\n\n    // This maintains the mapping from element ids to element nodes.\n    // We may need to update this mapping every time a node is rooted\n    // or uprooted, and any time an attribute is added, removed or changed\n    // on a rooted element.\n    this.byId = Object.create(null);\n\n    // This property holds a monotonically increasing value akin to\n    // a timestamp used to record the last modification time of nodes\n    // and their subtrees. See the lastModTime attribute and modify()\n    // method of the Node class. And see FilteredElementList for an example\n    // of the use of lastModTime\n    this.modclock = 0;\n  }\n\n  // Map from lowercase event category names (used as arguments to\n  // createEvent()) to the property name in the impl object of the\n  // event constructor.\n  var supportedEvents = {\n    event: 'Event',\n    customevent: 'CustomEvent',\n    uievent: 'UIEvent',\n    mouseevent: 'MouseEvent'\n  };\n\n  // Certain arguments to document.createEvent() must be treated specially\n  var replacementEvent = {\n    events: 'event',\n    htmlevents: 'event',\n    mouseevents: 'mouseevent',\n    mutationevents: 'mutationevent',\n    uievents: 'uievent'\n  };\n  var mirrorAttr = function (f, name, defaultValue) {\n    return {\n      get: function () {\n        var o = f.call(this);\n        if (o) {\n          return o[name];\n        }\n        return defaultValue;\n      },\n      set: function (value) {\n        var o = f.call(this);\n        if (o) {\n          o[name] = value;\n        }\n      }\n    };\n  };\n\n  /** @spec https://dom.spec.whatwg.org/#validate-and-extract */\n  function validateAndExtract(namespace, qualifiedName) {\n    var prefix, localName, pos;\n    if (namespace === '') {\n      namespace = null;\n    }\n    // See https://github.com/whatwg/dom/issues/671\n    // and https://github.com/whatwg/dom/issues/319\n    if (!xml.isValidQName(qualifiedName)) {\n      utils.InvalidCharacterError();\n    }\n    prefix = null;\n    localName = qualifiedName;\n    pos = qualifiedName.indexOf(':');\n    if (pos >= 0) {\n      prefix = qualifiedName.substring(0, pos);\n      localName = qualifiedName.substring(pos + 1);\n    }\n    if (prefix !== null && namespace === null) {\n      utils.NamespaceError();\n    }\n    if (prefix === 'xml' && namespace !== NAMESPACE.XML) {\n      utils.NamespaceError();\n    }\n    if ((prefix === 'xmlns' || qualifiedName === 'xmlns') && namespace !== NAMESPACE.XMLNS) {\n      utils.NamespaceError();\n    }\n    if (namespace === NAMESPACE.XMLNS && !(prefix === 'xmlns' || qualifiedName === 'xmlns')) {\n      utils.NamespaceError();\n    }\n    return {\n      namespace: namespace,\n      prefix: prefix,\n      localName: localName\n    };\n  }\n  Document.prototype = Object.create(ContainerNode.prototype, {\n    // This method allows dom.js to communicate with a renderer\n    // that displays the document in some way\n    // XXX: I should probably move this to the window object\n    _setMutationHandler: {\n      value: function (handler) {\n        this.mutationHandler = handler;\n      }\n    },\n    // This method allows dom.js to receive event notifications\n    // from the renderer.\n    // XXX: I should probably move this to the window object\n    _dispatchRendererEvent: {\n      value: function (targetNid, type, details) {\n        var target = this._nodes[targetNid];\n        if (!target) return;\n        target._dispatchEvent(new Event(type, details), true);\n      }\n    },\n    nodeName: {\n      value: '#document'\n    },\n    nodeValue: {\n      get: function () {\n        return null;\n      },\n      set: function () {}\n    },\n    // XXX: DOMCore may remove documentURI, so it is NYI for now\n    documentURI: {\n      get: function () {\n        return this._address;\n      },\n      set: utils.nyi\n    },\n    compatMode: {\n      get: function () {\n        // The _quirks property is set by the HTML parser\n        return this._quirks ? 'BackCompat' : 'CSS1Compat';\n      }\n    },\n    createTextNode: {\n      value: function (data) {\n        return new Text(this, String(data));\n      }\n    },\n    createComment: {\n      value: function (data) {\n        return new Comment(this, data);\n      }\n    },\n    createDocumentFragment: {\n      value: function () {\n        return new DocumentFragment(this);\n      }\n    },\n    createProcessingInstruction: {\n      value: function (target, data) {\n        if (!xml.isValidName(target) || data.indexOf('?>') !== -1) utils.InvalidCharacterError();\n        return new ProcessingInstruction(this, target, data);\n      }\n    },\n    createAttribute: {\n      value: function (localName) {\n        localName = String(localName);\n        if (!xml.isValidName(localName)) utils.InvalidCharacterError();\n        if (this.isHTML) {\n          localName = utils.toASCIILowerCase(localName);\n        }\n        return new Element._Attr(null, localName, null, null, '');\n      }\n    },\n    createAttributeNS: {\n      value: function (namespace, qualifiedName) {\n        // Convert parameter types according to WebIDL\n        namespace = namespace === null || namespace === undefined || namespace === '' ? null : String(namespace);\n        qualifiedName = String(qualifiedName);\n        var ve = validateAndExtract(namespace, qualifiedName);\n        return new Element._Attr(null, ve.localName, ve.prefix, ve.namespace, '');\n      }\n    },\n    createElement: {\n      value: function (localName) {\n        localName = String(localName);\n        if (!xml.isValidName(localName)) utils.InvalidCharacterError();\n        // Per spec, namespace should be HTML namespace if \"context object is\n        // an HTML document or context object's content type is\n        // \"application/xhtml+xml\", and null otherwise.\n        if (this.isHTML) {\n          if (/[A-Z]/.test(localName)) localName = utils.toASCIILowerCase(localName);\n          return html.createElement(this, localName, null);\n        } else if (this.contentType === 'application/xhtml+xml') {\n          return html.createElement(this, localName, null);\n        } else {\n          return new Element(this, localName, null, null);\n        }\n      },\n      writable: isApiWritable\n    },\n    createElementNS: {\n      value: function (namespace, qualifiedName) {\n        // Convert parameter types according to WebIDL\n        namespace = namespace === null || namespace === undefined || namespace === '' ? null : String(namespace);\n        qualifiedName = String(qualifiedName);\n        var ve = validateAndExtract(namespace, qualifiedName);\n        return this._createElementNS(ve.localName, ve.namespace, ve.prefix);\n      },\n      writable: isApiWritable\n    },\n    // This is used directly by HTML parser, which allows it to create\n    // elements with localNames containing ':' and non-default namespaces\n    _createElementNS: {\n      value: function (localName, namespace, prefix) {\n        if (namespace === NAMESPACE.HTML) {\n          return html.createElement(this, localName, prefix);\n        } else if (namespace === NAMESPACE.SVG) {\n          return svg.createElement(this, localName, prefix);\n        }\n        return new Element(this, localName, namespace, prefix);\n      }\n    },\n    createEvent: {\n      value: function createEvent(interfaceName) {\n        interfaceName = interfaceName.toLowerCase();\n        var name = replacementEvent[interfaceName] || interfaceName;\n        var constructor = events[supportedEvents[name]];\n        if (constructor) {\n          var e = new constructor();\n          e._initialized = false;\n          return e;\n        } else {\n          utils.NotSupportedError();\n        }\n      }\n    },\n    // See: http://www.w3.org/TR/dom/#dom-document-createtreewalker\n    createTreeWalker: {\n      value: function (root, whatToShow, filter) {\n        if (!root) {\n          throw new TypeError(\"root argument is required\");\n        }\n        if (!(root instanceof Node)) {\n          throw new TypeError(\"root not a node\");\n        }\n        whatToShow = whatToShow === undefined ? NodeFilter.SHOW_ALL : +whatToShow;\n        filter = filter === undefined ? null : filter;\n        return new TreeWalker(root, whatToShow, filter);\n      }\n    },\n    // See: http://www.w3.org/TR/dom/#dom-document-createnodeiterator\n    createNodeIterator: {\n      value: function (root, whatToShow, filter) {\n        if (!root) {\n          throw new TypeError(\"root argument is required\");\n        }\n        if (!(root instanceof Node)) {\n          throw new TypeError(\"root not a node\");\n        }\n        whatToShow = whatToShow === undefined ? NodeFilter.SHOW_ALL : +whatToShow;\n        filter = filter === undefined ? null : filter;\n        return new NodeIterator(root, whatToShow, filter);\n      }\n    },\n    _attachNodeIterator: {\n      value: function (ni) {\n        // XXX ideally this should be a weak reference from Document to NodeIterator\n        if (!this._nodeIterators) {\n          this._nodeIterators = [];\n        }\n        this._nodeIterators.push(ni);\n      }\n    },\n    _detachNodeIterator: {\n      value: function (ni) {\n        // ni should always be in list of node iterators\n        var idx = this._nodeIterators.indexOf(ni);\n        this._nodeIterators.splice(idx, 1);\n      }\n    },\n    _preremoveNodeIterators: {\n      value: function (toBeRemoved) {\n        if (this._nodeIterators) {\n          this._nodeIterators.forEach(function (ni) {\n            ni._preremove(toBeRemoved);\n          });\n        }\n      }\n    },\n    // Maintain the documentElement and\n    // doctype properties of the document.  Each of the following\n    // methods chains to the Node implementation of the method\n    // to do the actual inserting, removal or replacement.\n\n    _updateDocTypeElement: {\n      value: function _updateDocTypeElement() {\n        this.doctype = this.documentElement = null;\n        for (var kid = this.firstChild; kid !== null; kid = kid.nextSibling) {\n          if (kid.nodeType === Node.DOCUMENT_TYPE_NODE) this.doctype = kid;else if (kid.nodeType === Node.ELEMENT_NODE) this.documentElement = kid;\n        }\n      }\n    },\n    insertBefore: {\n      value: function insertBefore(child, refChild) {\n        Node.prototype.insertBefore.call(this, child, refChild);\n        this._updateDocTypeElement();\n        return child;\n      }\n    },\n    replaceChild: {\n      value: function replaceChild(node, child) {\n        Node.prototype.replaceChild.call(this, node, child);\n        this._updateDocTypeElement();\n        return child;\n      }\n    },\n    removeChild: {\n      value: function removeChild(child) {\n        Node.prototype.removeChild.call(this, child);\n        this._updateDocTypeElement();\n        return child;\n      }\n    },\n    getElementById: {\n      value: function (id) {\n        var n = this.byId[id];\n        if (!n) return null;\n        if (n instanceof MultiId) {\n          // there was more than one element with this id\n          return n.getFirst();\n        }\n        return n;\n      }\n    },\n    _hasMultipleElementsWithId: {\n      value: function (id) {\n        // Used internally by querySelectorAll optimization\n        return this.byId[id] instanceof MultiId;\n      }\n    },\n    // Just copy this method from the Element prototype\n    getElementsByName: {\n      value: Element.prototype.getElementsByName\n    },\n    getElementsByTagName: {\n      value: Element.prototype.getElementsByTagName\n    },\n    getElementsByTagNameNS: {\n      value: Element.prototype.getElementsByTagNameNS\n    },\n    getElementsByClassName: {\n      value: Element.prototype.getElementsByClassName\n    },\n    adoptNode: {\n      value: function adoptNode(node) {\n        if (node.nodeType === Node.DOCUMENT_NODE) utils.NotSupportedError();\n        if (node.nodeType === Node.ATTRIBUTE_NODE) {\n          return node;\n        }\n        if (node.parentNode) node.parentNode.removeChild(node);\n        if (node.ownerDocument !== this) recursivelySetOwner(node, this);\n        return node;\n      }\n    },\n    importNode: {\n      value: function importNode(node, deep) {\n        return this.adoptNode(node.cloneNode(deep));\n      },\n      writable: isApiWritable\n    },\n    // The following attributes and methods are from the HTML spec\n    origin: {\n      get: function origin() {\n        return null;\n      }\n    },\n    characterSet: {\n      get: function characterSet() {\n        return \"UTF-8\";\n      }\n    },\n    contentType: {\n      get: function contentType() {\n        return this._contentType;\n      }\n    },\n    URL: {\n      get: function URL() {\n        return this._address;\n      }\n    },\n    domain: {\n      get: utils.nyi,\n      set: utils.nyi\n    },\n    referrer: {\n      get: utils.nyi\n    },\n    cookie: {\n      get: utils.nyi,\n      set: utils.nyi\n    },\n    lastModified: {\n      get: utils.nyi\n    },\n    location: {\n      get: function () {\n        return this.defaultView ? this.defaultView.location : null; // gh #75\n      },\n      set: utils.nyi\n    },\n    _titleElement: {\n      get: function () {\n        // The title element of a document is the first title element in the\n        // document in tree order, if there is one, or null otherwise.\n        return this.getElementsByTagName('title').item(0) || null;\n      }\n    },\n    title: {\n      get: function () {\n        var elt = this._titleElement;\n        // The child text content of the title element, or '' if null.\n        var value = elt ? elt.textContent : '';\n        // Strip and collapse whitespace in value\n        return value.replace(/[ \\t\\n\\r\\f]+/g, ' ').replace(/(^ )|( $)/g, '');\n      },\n      set: function (value) {\n        var elt = this._titleElement;\n        var head = this.head;\n        if (!elt && !head) {\n          return; /* according to spec */\n        }\n        if (!elt) {\n          elt = this.createElement('title');\n          head.appendChild(elt);\n        }\n        elt.textContent = value;\n      }\n    },\n    dir: mirrorAttr(function () {\n      var htmlElement = this.documentElement;\n      if (htmlElement && htmlElement.tagName === 'HTML') {\n        return htmlElement;\n      }\n    }, 'dir', ''),\n    fgColor: mirrorAttr(function () {\n      return this.body;\n    }, 'text', ''),\n    linkColor: mirrorAttr(function () {\n      return this.body;\n    }, 'link', ''),\n    vlinkColor: mirrorAttr(function () {\n      return this.body;\n    }, 'vLink', ''),\n    alinkColor: mirrorAttr(function () {\n      return this.body;\n    }, 'aLink', ''),\n    bgColor: mirrorAttr(function () {\n      return this.body;\n    }, 'bgColor', ''),\n    // Historical aliases of Document#characterSet\n    charset: {\n      get: function () {\n        return this.characterSet;\n      }\n    },\n    inputEncoding: {\n      get: function () {\n        return this.characterSet;\n      }\n    },\n    scrollingElement: {\n      get: function () {\n        return this._quirks ? this.body : this.documentElement;\n      }\n    },\n    // Return the first <body> child of the document element.\n    // XXX For now, setting this attribute is not implemented.\n    body: {\n      get: function () {\n        return namedHTMLChild(this.documentElement, 'body');\n      },\n      set: utils.nyi\n    },\n    // Return the first <head> child of the document element.\n    head: {\n      get: function () {\n        return namedHTMLChild(this.documentElement, 'head');\n      }\n    },\n    images: {\n      get: utils.nyi\n    },\n    embeds: {\n      get: utils.nyi\n    },\n    plugins: {\n      get: utils.nyi\n    },\n    links: {\n      get: utils.nyi\n    },\n    forms: {\n      get: utils.nyi\n    },\n    scripts: {\n      get: utils.nyi\n    },\n    applets: {\n      get: function () {\n        return [];\n      }\n    },\n    activeElement: {\n      get: function () {\n        return null;\n      }\n    },\n    innerHTML: {\n      get: function () {\n        return this.serialize();\n      },\n      set: utils.nyi\n    },\n    outerHTML: {\n      get: function () {\n        return this.serialize();\n      },\n      set: utils.nyi\n    },\n    write: {\n      value: function (args) {\n        if (!this.isHTML) utils.InvalidStateError();\n\n        // XXX: still have to implement the ignore part\n        if (!this._parser /* && this._ignore_destructive_writes > 0 */) return;\n        var s = arguments.join('');\n\n        // If the Document object's reload override flag is set, then\n        // append the string consisting of the concatenation of all the\n        // arguments to the method to the Document's reload override\n        // buffer.\n        // XXX: don't know what this is about.  Still have to do it\n\n        // If there is no pending parsing-blocking script, have the\n        // tokenizer process the characters that were inserted, one at a\n        // time, processing resulting tokens as they are emitted, and\n        // stopping when the tokenizer reaches the insertion point or when\n        // the processing of the tokenizer is aborted by the tree\n        // construction stage (this can happen if a script end tag token is\n        // emitted by the tokenizer).\n\n        // XXX: still have to do the above. Sounds as if we don't\n        // always call parse() here.  If we're blocked, then we just\n        // insert the text into the stream but don't parse it reentrantly...\n\n        // Invoke the parser reentrantly\n        this._parser.parse(s);\n      }\n    },\n    writeln: {\n      value: function writeln(args) {\n        this.write(Array.prototype.join.call(arguments, '') + '\\n');\n      }\n    },\n    open: {\n      value: function () {\n        this.documentElement = null;\n      }\n    },\n    close: {\n      value: function () {\n        this.readyState = 'interactive';\n        this._dispatchEvent(new Event('readystatechange'), true);\n        this._dispatchEvent(new Event('DOMContentLoaded'), true);\n        this.readyState = 'complete';\n        this._dispatchEvent(new Event('readystatechange'), true);\n        if (this.defaultView) {\n          this.defaultView._dispatchEvent(new Event('load'), true);\n        }\n      }\n    },\n    // Utility methods\n    clone: {\n      value: function clone() {\n        var d = new Document(this.isHTML, this._address);\n        d._quirks = this._quirks;\n        d._contentType = this._contentType;\n        return d;\n      }\n    },\n    // We need to adopt the nodes if we do a deep clone\n    cloneNode: {\n      value: function cloneNode(deep) {\n        var clone = Node.prototype.cloneNode.call(this, false);\n        if (deep) {\n          for (var kid = this.firstChild; kid !== null; kid = kid.nextSibling) {\n            clone._appendChild(clone.importNode(kid, true));\n          }\n        }\n        clone._updateDocTypeElement();\n        return clone;\n      }\n    },\n    isEqual: {\n      value: function isEqual(n) {\n        // Any two documents are shallowly equal.\n        // Node.isEqualNode will also test the children\n        return true;\n      }\n    },\n    // Implementation-specific function.  Called when a text, comment,\n    // or pi value changes.\n    mutateValue: {\n      value: function (node) {\n        if (this.mutationHandler) {\n          this.mutationHandler({\n            type: MUTATE.VALUE,\n            target: node,\n            data: node.data\n          });\n        }\n      }\n    },\n    // Invoked when an attribute's value changes. Attr holds the new\n    // value.  oldval is the old value.  Attribute mutations can also\n    // involve changes to the prefix (and therefore the qualified name)\n    mutateAttr: {\n      value: function (attr, oldval) {\n        // Manage id->element mapping for getElementsById()\n        // XXX: this special case id handling should not go here,\n        // but in the attribute declaration for the id attribute\n        /*\n        if (attr.localName === 'id' && attr.namespaceURI === null) {\n          if (oldval) delId(oldval, attr.ownerElement);\n          addId(attr.value, attr.ownerElement);\n        }\n        */\n        if (this.mutationHandler) {\n          this.mutationHandler({\n            type: MUTATE.ATTR,\n            target: attr.ownerElement,\n            attr: attr\n          });\n        }\n      }\n    },\n    // Used by removeAttribute and removeAttributeNS for attributes.\n    mutateRemoveAttr: {\n      value: function (attr) {\n        /*\n        * This is now handled in Attributes.js\n            // Manage id to element mapping\n            if (attr.localName === 'id' && attr.namespaceURI === null) {\n              this.delId(attr.value, attr.ownerElement);\n            }\n        */\n        if (this.mutationHandler) {\n          this.mutationHandler({\n            type: MUTATE.REMOVE_ATTR,\n            target: attr.ownerElement,\n            attr: attr\n          });\n        }\n      }\n    },\n    // Called by Node.removeChild, etc. to remove a rooted element from\n    // the tree. Only needs to generate a single mutation event when a\n    // node is removed, but must recursively mark all descendants as not\n    // rooted.\n    mutateRemove: {\n      value: function (node) {\n        // Send a single mutation event\n        if (this.mutationHandler) {\n          this.mutationHandler({\n            type: MUTATE.REMOVE,\n            target: node.parentNode,\n            node: node\n          });\n        }\n\n        // Mark this and all descendants as not rooted\n        recursivelyUproot(node);\n      }\n    },\n    // Called when a new element becomes rooted.  It must recursively\n    // generate mutation events for each of the children, and mark them all\n    // as rooted.\n    mutateInsert: {\n      value: function (node) {\n        // Mark node and its descendants as rooted\n        recursivelyRoot(node);\n\n        // Send a single mutation event\n        if (this.mutationHandler) {\n          this.mutationHandler({\n            type: MUTATE.INSERT,\n            target: node.parentNode,\n            node: node\n          });\n        }\n      }\n    },\n    // Called when a rooted element is moved within the document\n    mutateMove: {\n      value: function (node) {\n        if (this.mutationHandler) {\n          this.mutationHandler({\n            type: MUTATE.MOVE,\n            target: node\n          });\n        }\n      }\n    },\n    // Add a mapping from  id to n for n.ownerDocument\n    addId: {\n      value: function addId(id, n) {\n        var val = this.byId[id];\n        if (!val) {\n          this.byId[id] = n;\n        } else {\n          // TODO: Add a way to opt-out console warnings\n          //console.warn('Duplicate element id ' + id);\n          if (!(val instanceof MultiId)) {\n            val = new MultiId(val);\n            this.byId[id] = val;\n          }\n          val.add(n);\n        }\n      }\n    },\n    // Delete the mapping from id to n for n.ownerDocument\n    delId: {\n      value: function delId(id, n) {\n        var val = this.byId[id];\n        utils.assert(val);\n        if (val instanceof MultiId) {\n          val.del(n);\n          if (val.length === 1) {\n            // convert back to a single node\n            this.byId[id] = val.downgrade();\n          }\n        } else {\n          this.byId[id] = undefined;\n        }\n      }\n    },\n    _resolve: {\n      value: function (href) {\n        //XXX: Cache the URL\n        return new URL(this._documentBaseURL).resolve(href);\n      }\n    },\n    _documentBaseURL: {\n      get: function () {\n        // XXX: This is not implemented correctly yet\n        var url = this._address;\n        if (url === 'about:blank') url = '/';\n        var base = this.querySelector('base[href]');\n        if (base) {\n          return new URL(url).resolve(base.getAttribute('href'));\n        }\n        return url;\n\n        // The document base URL of a Document object is the\n        // absolute URL obtained by running these substeps:\n\n        //     Let fallback base url be the document's address.\n\n        //     If fallback base url is about:blank, and the\n        //     Document's browsing context has a creator browsing\n        //     context, then let fallback base url be the document\n        //     base URL of the creator Document instead.\n\n        //     If the Document is an iframe srcdoc document, then\n        //     let fallback base url be the document base URL of\n        //     the Document's browsing context's browsing context\n        //     container's Document instead.\n\n        //     If there is no base element that has an href\n        //     attribute, then the document base URL is fallback\n        //     base url; abort these steps. Otherwise, let url be\n        //     the value of the href attribute of the first such\n        //     element.\n\n        //     Resolve url relative to fallback base url (thus,\n        //     the base href attribute isn't affected by xml:base\n        //     attributes).\n\n        //     The document base URL is the result of the previous\n        //     step if it was successful; otherwise it is fallback\n        //     base url.\n      }\n    },\n    _templateDoc: {\n      get: function () {\n        if (!this._templateDocCache) {\n          // \"associated inert template document\"\n          var newDoc = new Document(this.isHTML, this._address);\n          this._templateDocCache = newDoc._templateDocCache = newDoc;\n        }\n        return this._templateDocCache;\n      }\n    },\n    querySelector: {\n      value: function (selector) {\n        return select(selector, this)[0];\n      }\n    },\n    querySelectorAll: {\n      value: function (selector) {\n        var nodes = select(selector, this);\n        return nodes.item ? nodes : new NodeList(nodes);\n      }\n    }\n  });\n  var eventHandlerTypes = ['abort', 'canplay', 'canplaythrough', 'change', 'click', 'contextmenu', 'cuechange', 'dblclick', 'drag', 'dragend', 'dragenter', 'dragleave', 'dragover', 'dragstart', 'drop', 'durationchange', 'emptied', 'ended', 'input', 'invalid', 'keydown', 'keypress', 'keyup', 'loadeddata', 'loadedmetadata', 'loadstart', 'mousedown', 'mousemove', 'mouseout', 'mouseover', 'mouseup', 'mousewheel', 'pause', 'play', 'playing', 'progress', 'ratechange', 'readystatechange', 'reset', 'seeked', 'seeking', 'select', 'show', 'stalled', 'submit', 'suspend', 'timeupdate', 'volumechange', 'waiting', 'blur', 'error', 'focus', 'load', 'scroll'];\n\n  // Add event handler idl attribute getters and setters to Document\n  eventHandlerTypes.forEach(function (type) {\n    // Define the event handler registration IDL attribute for this type\n    Object.defineProperty(Document.prototype, 'on' + type, {\n      get: function () {\n        return this._getEventHandler(type);\n      },\n      set: function (v) {\n        this._setEventHandler(type, v);\n      }\n    });\n  });\n  function namedHTMLChild(parent, name) {\n    if (parent && parent.isHTML) {\n      for (var kid = parent.firstChild; kid !== null; kid = kid.nextSibling) {\n        if (kid.nodeType === Node.ELEMENT_NODE && kid.localName === name && kid.namespaceURI === NAMESPACE.HTML) {\n          return kid;\n        }\n      }\n    }\n    return null;\n  }\n  function root(n) {\n    n._nid = n.ownerDocument._nextnid++;\n    n.ownerDocument._nodes[n._nid] = n;\n    // Manage id to element mapping\n    if (n.nodeType === Node.ELEMENT_NODE) {\n      var id = n.getAttribute('id');\n      if (id) n.ownerDocument.addId(id, n);\n\n      // Script elements need to know when they're inserted\n      // into the document\n      if (n._roothook) n._roothook();\n    }\n  }\n  function uproot(n) {\n    // Manage id to element mapping\n    if (n.nodeType === Node.ELEMENT_NODE) {\n      var id = n.getAttribute('id');\n      if (id) n.ownerDocument.delId(id, n);\n    }\n    n.ownerDocument._nodes[n._nid] = undefined;\n    n._nid = undefined;\n  }\n  function recursivelyRoot(node) {\n    root(node);\n    // XXX:\n    // accessing childNodes on a leaf node creates a new array the\n    // first time, so be careful to write this loop so that it\n    // doesn't do that. node is polymorphic, so maybe this is hard to\n    // optimize?  Try switching on nodeType?\n    /*\n      if (node.hasChildNodes()) {\n        var kids = node.childNodes;\n        for(var i = 0, n = kids.length;  i < n; i++)\n          recursivelyRoot(kids[i]);\n      }\n    */\n    if (node.nodeType === Node.ELEMENT_NODE) {\n      for (var kid = node.firstChild; kid !== null; kid = kid.nextSibling) recursivelyRoot(kid);\n    }\n  }\n  function recursivelyUproot(node) {\n    uproot(node);\n    for (var kid = node.firstChild; kid !== null; kid = kid.nextSibling) recursivelyUproot(kid);\n  }\n  function recursivelySetOwner(node, owner) {\n    node.ownerDocument = owner;\n    node._lastModTime = undefined; // mod times are document-based\n    if (Object.prototype.hasOwnProperty.call(node, '_tagName')) {\n      node._tagName = undefined; // Element subclasses might need to change case\n    }\n    for (var kid = node.firstChild; kid !== null; kid = kid.nextSibling) recursivelySetOwner(kid, owner);\n  }\n\n  // A class for storing multiple nodes with the same ID\n  function MultiId(node) {\n    this.nodes = Object.create(null);\n    this.nodes[node._nid] = node;\n    this.length = 1;\n    this.firstNode = undefined;\n  }\n\n  // Add a node to the list, with O(1) time\n  MultiId.prototype.add = function (node) {\n    if (!this.nodes[node._nid]) {\n      this.nodes[node._nid] = node;\n      this.length++;\n      this.firstNode = undefined;\n    }\n  };\n\n  // Remove a node from the list, with O(1) time\n  MultiId.prototype.del = function (node) {\n    if (this.nodes[node._nid]) {\n      delete this.nodes[node._nid];\n      this.length--;\n      this.firstNode = undefined;\n    }\n  };\n\n  // Get the first node from the list, in the document order\n  // Takes O(N) time in the size of the list, with a cache that is invalidated\n  // when the list is modified.\n  MultiId.prototype.getFirst = function () {\n    /* jshint bitwise: false */\n    if (!this.firstNode) {\n      var nid;\n      for (nid in this.nodes) {\n        if (this.firstNode === undefined || this.firstNode.compareDocumentPosition(this.nodes[nid]) & Node.DOCUMENT_POSITION_PRECEDING) {\n          this.firstNode = this.nodes[nid];\n        }\n      }\n    }\n    return this.firstNode;\n  };\n\n  // If there is only one node left, return it. Otherwise return \"this\".\n  MultiId.prototype.downgrade = function () {\n    if (this.length === 1) {\n      var nid;\n      for (nid in this.nodes) {\n        return this.nodes[nid];\n      }\n    }\n    return this;\n  };\n  return Document_1;\n}\nvar DocumentType_1;\nvar hasRequiredDocumentType;\nfunction requireDocumentType() {\n  if (hasRequiredDocumentType) return DocumentType_1;\n  hasRequiredDocumentType = 1;\n  DocumentType_1 = DocumentType;\n  var Node = requireNode();\n  var Leaf = requireLeaf();\n  var ChildNode = requireChildNode();\n  function DocumentType(ownerDocument, name, publicId, systemId) {\n    Leaf.call(this);\n    this.nodeType = Node.DOCUMENT_TYPE_NODE;\n    this.ownerDocument = ownerDocument || null;\n    this._name = name;\n    this.publicId = publicId || \"\";\n    this.systemId = systemId || \"\";\n  }\n  DocumentType.prototype = Object.create(Leaf.prototype, {\n    name: {\n      get: function () {\n        return this._name;\n      },\n      set: function () {/* no-op per spec */}\n    },\n    nodeName: {\n      get: function () {\n        return this.name;\n      }\n    },\n    nodeValue: {\n      get: function () {\n        return null;\n      },\n      set: function () {}\n    },\n    // Utility methods\n    clone: {\n      value: function clone() {\n        return new DocumentType(this.ownerDocument, this.name, this.publicId, this.systemId);\n      }\n    },\n    isEqual: {\n      value: function isEqual(n) {\n        return this.name === n.name && this.publicId === n.publicId && this.systemId === n.systemId;\n      }\n    }\n  });\n  Object.defineProperties(DocumentType.prototype, ChildNode);\n  return DocumentType_1;\n}\nvar HTMLParser_1;\nvar hasRequiredHTMLParser;\nfunction requireHTMLParser() {\n  if (hasRequiredHTMLParser) return HTMLParser_1;\n  hasRequiredHTMLParser = 1;\n  HTMLParser_1 = HTMLParser;\n  var Document = requireDocument();\n  var DocumentType = requireDocumentType();\n  var Node = requireNode();\n  var NAMESPACE = requireUtils().NAMESPACE;\n  var html = requireHtmlelts();\n  var impl = html.elements;\n  var pushAll = Function.prototype.apply.bind(Array.prototype.push);\n\n  /*\n   * This file contains an implementation of the HTML parsing algorithm.\n   * The algorithm and the implementation are complex because HTML\n   * explicitly defines how the parser should behave for all possible\n   * valid and invalid inputs.\n   *\n   * Usage:\n   *\n   * The file defines a single HTMLParser() function, which dom.js exposes\n   * publicly as document.implementation.mozHTMLParser(). This is a\n   * factory function, not a constructor.\n   *\n   * When you call document.implementation.mozHTMLParser(), it returns\n   * an object that has parse() and document() methods. To parse HTML text,\n   * pass the text (in one or more chunks) to the parse() method.  When\n   * you've passed all the text (on the last chunk, or afterward) pass\n   * true as the second argument to parse() to tell the parser that there\n   * is no more coming. Call document() to get the document object that\n   * the parser is parsing into.  You can call this at any time, before\n   * or after calling parse().\n   *\n   * The first argument to mozHTMLParser is the absolute URL of the document.\n   *\n   * The second argument is optional and is for internal use only.  Pass an\n   * element as the fragmentContext to do innerHTML parsing for the\n   * element.  To do innerHTML parsing on a document, pass null. Otherwise,\n   * omit the 2nd argument. See HTMLElement.innerHTML for an example.  Note\n   * that if you pass a context element, the end() method will return an\n   * unwrapped document instead of a wrapped one.\n   *\n   * Implementation details:\n   *\n   * This is a long file of almost 7000 lines. It is structured as one\n   * big function nested within another big function.  The outer\n   * function defines a bunch of constant data, utility functions\n   * that use that data, and a couple of classes used by the parser.\n   * The outer function also defines and returns the\n   * inner function. This inner function is the HTMLParser factory\n   * function that implements the parser and holds all the parser state\n   * as local variables.  The HTMLParser function is quite big because\n   * it defines many nested functions that use those local variables.\n   *\n   * There are three tightly coupled parser stages: a scanner, a\n   * tokenizer and a tree builder. In a (possibly misguided) attempt at\n   * efficiency, the stages are not implemented as separate classes:\n   * everything shares state and is (mostly) implemented in imperative\n   * (rather than OO) style.\n   *\n   * The stages of the parser work like this: When the client code calls\n   * the parser's parse() method, the specified string is passed to\n   * scanChars(). The scanner loops through that string and passes characters\n   * (sometimes one at a time, sometimes in chunks) to the tokenizer stage.\n   * The tokenizer groups the characters into tokens: tags, endtags, runs\n   * of text, comments, doctype declarations, and the end-of-file (EOF)\n   * token.  These tokens are then passed to the tree building stage via\n   * the insertToken() function.  The tree building stage builds up the\n   * document tree.\n   *\n   * The tokenizer stage is a finite state machine.  Each state is\n   * implemented as a function with a name that ends in \"_state\".  The\n   * initial state is data_state(). The current tokenizer state is stored\n   * in the variable 'tokenizer'.  Most state functions expect a single\n   * integer argument which represents a single UTF-16 codepoint.  Some\n   * states want more characters and set a lookahead property on\n   * themselves.  The scanChars() function in the scanner checks for this\n   * lookahead property.  If it doesn't exist, then scanChars() just passes\n   * the next input character to the current tokenizer state function.\n   * Otherwise, scanChars() looks ahead (a given # of characters, or for a\n   * matching string, or for a matching regexp) and passes a string of\n   * characters to the current tokenizer state function.\n   *\n   * As a shortcut, certain states of the tokenizer use regular expressions\n   * to look ahead in the scanner's input buffer for runs of text, simple\n   * tags and attributes.  For well-formed input, these shortcuts skip a\n   * lot of state transitions and speed things up a bit.\n   *\n   * When a tokenizer state function has consumed a complete token, it\n   * emits that token, by calling insertToken(), or by calling a utility\n   * function that itself calls insertToken().  These tokens are passed to\n   * the tree building stage, which is also a state machine.  Like the\n   * tokenizer, the tree building states are implemented as functions, and\n   * these functions have names that end with _mode (because the HTML spec\n   * refers to them as insertion modes). The current insertion mode is held\n   * by the 'parser' variable.  Each insertion mode function takes up to 4\n   * arguments.  The first is a token type, represented by the constants\n   * TAG, ENDTAG, TEXT, COMMENT, DOCTYPE and EOF.  The second argument is\n   * the value of the token: the text or comment data, or tagname or\n   * doctype.  For tags, the 3rd argument is an array of attributes.  For\n   * DOCTYPES it is the optional public id.  For tags, the 4th argument is\n   * true if the tag is self-closing. For doctypes, the 4th argument is the\n   * optional system id.\n   *\n   * Search for \"***\" to find the major sub-divisions in the code.\n   */\n\n  /***\n   * Data prolog.  Lots of constants declared here, including some\n   * very large objects.  They're used throughout the code that follows\n   */\n  // Token types for the tree builder.\n  var EOF = -1;\n  var TEXT = 1;\n  var TAG = 2;\n  var ENDTAG = 3;\n  var COMMENT = 4;\n  var DOCTYPE = 5;\n\n  // A re-usable empty array\n  var NOATTRS = [];\n\n  // These DTD public ids put the browser in quirks mode\n  var quirkyPublicIds = /^HTML$|^-\\/\\/W3O\\/\\/DTD W3 HTML Strict 3\\.0\\/\\/EN\\/\\/$|^-\\/W3C\\/DTD HTML 4\\.0 Transitional\\/EN$|^\\+\\/\\/Silmaril\\/\\/dtd html Pro v0r11 19970101\\/\\/|^-\\/\\/AdvaSoft Ltd\\/\\/DTD HTML 3\\.0 asWedit \\+ extensions\\/\\/|^-\\/\\/AS\\/\\/DTD HTML 3\\.0 asWedit \\+ extensions\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML 2\\.0 Level 1\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML 2\\.0 Level 2\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML 2\\.0 Strict Level 1\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML 2\\.0 Strict Level 2\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML 2\\.0 Strict\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML 2\\.0\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML 2\\.1E\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML 3\\.0\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML 3\\.2 Final\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML 3\\.2\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML 3\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML Level 0\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML Level 1\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML Level 2\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML Level 3\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML Strict Level 0\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML Strict Level 1\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML Strict Level 2\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML Strict Level 3\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML Strict\\/\\/|^-\\/\\/IETF\\/\\/DTD HTML\\/\\/|^-\\/\\/Metrius\\/\\/DTD Metrius Presentational\\/\\/|^-\\/\\/Microsoft\\/\\/DTD Internet Explorer 2\\.0 HTML Strict\\/\\/|^-\\/\\/Microsoft\\/\\/DTD Internet Explorer 2\\.0 HTML\\/\\/|^-\\/\\/Microsoft\\/\\/DTD Internet Explorer 2\\.0 Tables\\/\\/|^-\\/\\/Microsoft\\/\\/DTD Internet Explorer 3\\.0 HTML Strict\\/\\/|^-\\/\\/Microsoft\\/\\/DTD Internet Explorer 3\\.0 HTML\\/\\/|^-\\/\\/Microsoft\\/\\/DTD Internet Explorer 3\\.0 Tables\\/\\/|^-\\/\\/Netscape Comm\\. Corp\\.\\/\\/DTD HTML\\/\\/|^-\\/\\/Netscape Comm\\. Corp\\.\\/\\/DTD Strict HTML\\/\\/|^-\\/\\/O'Reilly and Associates\\/\\/DTD HTML 2\\.0\\/\\/|^-\\/\\/O'Reilly and Associates\\/\\/DTD HTML Extended 1\\.0\\/\\/|^-\\/\\/O'Reilly and Associates\\/\\/DTD HTML Extended Relaxed 1\\.0\\/\\/|^-\\/\\/SoftQuad Software\\/\\/DTD HoTMetaL PRO 6\\.0::19990601::extensions to HTML 4\\.0\\/\\/|^-\\/\\/SoftQuad\\/\\/DTD HoTMetaL PRO 4\\.0::19971010::extensions to HTML 4\\.0\\/\\/|^-\\/\\/Spyglass\\/\\/DTD HTML 2\\.0 Extended\\/\\/|^-\\/\\/SQ\\/\\/DTD HTML 2\\.0 HoTMetaL \\+ extensions\\/\\/|^-\\/\\/Sun Microsystems Corp\\.\\/\\/DTD HotJava HTML\\/\\/|^-\\/\\/Sun Microsystems Corp\\.\\/\\/DTD HotJava Strict HTML\\/\\/|^-\\/\\/W3C\\/\\/DTD HTML 3 1995-03-24\\/\\/|^-\\/\\/W3C\\/\\/DTD HTML 3\\.2 Draft\\/\\/|^-\\/\\/W3C\\/\\/DTD HTML 3\\.2 Final\\/\\/|^-\\/\\/W3C\\/\\/DTD HTML 3\\.2\\/\\/|^-\\/\\/W3C\\/\\/DTD HTML 3\\.2S Draft\\/\\/|^-\\/\\/W3C\\/\\/DTD HTML 4\\.0 Frameset\\/\\/|^-\\/\\/W3C\\/\\/DTD HTML 4\\.0 Transitional\\/\\/|^-\\/\\/W3C\\/\\/DTD HTML Experimental 19960712\\/\\/|^-\\/\\/W3C\\/\\/DTD HTML Experimental 970421\\/\\/|^-\\/\\/W3C\\/\\/DTD W3 HTML\\/\\/|^-\\/\\/W3O\\/\\/DTD W3 HTML 3\\.0\\/\\/|^-\\/\\/WebTechs\\/\\/DTD Mozilla HTML 2\\.0\\/\\/|^-\\/\\/WebTechs\\/\\/DTD Mozilla HTML\\/\\//i;\n  var quirkySystemId = \"http://www.ibm.com/data/dtd/v11/ibmxhtml1-transitional.dtd\";\n  var conditionallyQuirkyPublicIds = /^-\\/\\/W3C\\/\\/DTD HTML 4\\.01 Frameset\\/\\/|^-\\/\\/W3C\\/\\/DTD HTML 4\\.01 Transitional\\/\\//i;\n\n  // These DTD public ids put the browser in limited quirks mode\n  var limitedQuirkyPublicIds = /^-\\/\\/W3C\\/\\/DTD XHTML 1\\.0 Frameset\\/\\/|^-\\/\\/W3C\\/\\/DTD XHTML 1\\.0 Transitional\\/\\//i;\n\n  // Element sets below. See the isA() function for a way to test\n  // whether an element is a member of a set\n  var specialSet = Object.create(null);\n  specialSet[NAMESPACE.HTML] = {\n    __proto__: null,\n    \"address\": true,\n    \"applet\": true,\n    \"area\": true,\n    \"article\": true,\n    \"aside\": true,\n    \"base\": true,\n    \"basefont\": true,\n    \"bgsound\": true,\n    \"blockquote\": true,\n    \"body\": true,\n    \"br\": true,\n    \"button\": true,\n    \"caption\": true,\n    \"center\": true,\n    \"col\": true,\n    \"colgroup\": true,\n    \"dd\": true,\n    \"details\": true,\n    \"dir\": true,\n    \"div\": true,\n    \"dl\": true,\n    \"dt\": true,\n    \"embed\": true,\n    \"fieldset\": true,\n    \"figcaption\": true,\n    \"figure\": true,\n    \"footer\": true,\n    \"form\": true,\n    \"frame\": true,\n    \"frameset\": true,\n    \"h1\": true,\n    \"h2\": true,\n    \"h3\": true,\n    \"h4\": true,\n    \"h5\": true,\n    \"h6\": true,\n    \"head\": true,\n    \"header\": true,\n    \"hgroup\": true,\n    \"hr\": true,\n    \"html\": true,\n    \"iframe\": true,\n    \"img\": true,\n    \"input\": true,\n    \"li\": true,\n    \"link\": true,\n    \"listing\": true,\n    \"main\": true,\n    \"marquee\": true,\n    \"menu\": true,\n    \"meta\": true,\n    \"nav\": true,\n    \"noembed\": true,\n    \"noframes\": true,\n    \"noscript\": true,\n    \"object\": true,\n    \"ol\": true,\n    \"p\": true,\n    \"param\": true,\n    \"plaintext\": true,\n    \"pre\": true,\n    \"script\": true,\n    \"section\": true,\n    \"select\": true,\n    \"source\": true,\n    \"style\": true,\n    \"summary\": true,\n    \"table\": true,\n    \"tbody\": true,\n    \"td\": true,\n    \"template\": true,\n    \"textarea\": true,\n    \"tfoot\": true,\n    \"th\": true,\n    \"thead\": true,\n    \"title\": true,\n    \"tr\": true,\n    \"track\": true,\n    // Note that \"xmp\" was removed from the \"special\" set in the latest\n    // spec, apparently by accident; see\n    // https://github.com/whatwg/html/pull/1919\n    \"ul\": true,\n    \"wbr\": true,\n    \"xmp\": true\n  };\n  specialSet[NAMESPACE.SVG] = {\n    __proto__: null,\n    \"foreignObject\": true,\n    \"desc\": true,\n    \"title\": true\n  };\n  specialSet[NAMESPACE.MATHML] = {\n    __proto__: null,\n    \"mi\": true,\n    \"mo\": true,\n    \"mn\": true,\n    \"ms\": true,\n    \"mtext\": true,\n    \"annotation-xml\": true\n  };\n\n  // The set of address, div, and p HTML tags\n  var addressdivpSet = Object.create(null);\n  addressdivpSet[NAMESPACE.HTML] = {\n    __proto__: null,\n    \"address\": true,\n    \"div\": true,\n    \"p\": true\n  };\n  var dddtSet = Object.create(null);\n  dddtSet[NAMESPACE.HTML] = {\n    __proto__: null,\n    \"dd\": true,\n    \"dt\": true\n  };\n  var tablesectionrowSet = Object.create(null);\n  tablesectionrowSet[NAMESPACE.HTML] = {\n    __proto__: null,\n    \"table\": true,\n    \"thead\": true,\n    \"tbody\": true,\n    \"tfoot\": true,\n    \"tr\": true\n  };\n  var impliedEndTagsSet = Object.create(null);\n  impliedEndTagsSet[NAMESPACE.HTML] = {\n    __proto__: null,\n    \"dd\": true,\n    \"dt\": true,\n    \"li\": true,\n    \"menuitem\": true,\n    \"optgroup\": true,\n    \"option\": true,\n    \"p\": true,\n    \"rb\": true,\n    \"rp\": true,\n    \"rt\": true,\n    \"rtc\": true\n  };\n  var thoroughImpliedEndTagsSet = Object.create(null);\n  thoroughImpliedEndTagsSet[NAMESPACE.HTML] = {\n    __proto__: null,\n    \"caption\": true,\n    \"colgroup\": true,\n    \"dd\": true,\n    \"dt\": true,\n    \"li\": true,\n    \"optgroup\": true,\n    \"option\": true,\n    \"p\": true,\n    \"rb\": true,\n    \"rp\": true,\n    \"rt\": true,\n    \"rtc\": true,\n    \"tbody\": true,\n    \"td\": true,\n    \"tfoot\": true,\n    \"th\": true,\n    \"thead\": true,\n    \"tr\": true\n  };\n  var tableContextSet = Object.create(null);\n  tableContextSet[NAMESPACE.HTML] = {\n    __proto__: null,\n    \"table\": true,\n    \"template\": true,\n    \"html\": true\n  };\n  var tableBodyContextSet = Object.create(null);\n  tableBodyContextSet[NAMESPACE.HTML] = {\n    __proto__: null,\n    \"tbody\": true,\n    \"tfoot\": true,\n    \"thead\": true,\n    \"template\": true,\n    \"html\": true\n  };\n  var tableRowContextSet = Object.create(null);\n  tableRowContextSet[NAMESPACE.HTML] = {\n    __proto__: null,\n    \"tr\": true,\n    \"template\": true,\n    \"html\": true\n  };\n\n  // See http://www.w3.org/TR/html5/forms.html#form-associated-element\n  var formassociatedSet = Object.create(null);\n  formassociatedSet[NAMESPACE.HTML] = {\n    __proto__: null,\n    \"button\": true,\n    \"fieldset\": true,\n    \"input\": true,\n    \"keygen\": true,\n    \"object\": true,\n    \"output\": true,\n    \"select\": true,\n    \"textarea\": true,\n    \"img\": true\n  };\n  var inScopeSet = Object.create(null);\n  inScopeSet[NAMESPACE.HTML] = {\n    __proto__: null,\n    \"applet\": true,\n    \"caption\": true,\n    \"html\": true,\n    \"table\": true,\n    \"td\": true,\n    \"th\": true,\n    \"marquee\": true,\n    \"object\": true,\n    \"template\": true\n  };\n  inScopeSet[NAMESPACE.MATHML] = {\n    __proto__: null,\n    \"mi\": true,\n    \"mo\": true,\n    \"mn\": true,\n    \"ms\": true,\n    \"mtext\": true,\n    \"annotation-xml\": true\n  };\n  inScopeSet[NAMESPACE.SVG] = {\n    __proto__: null,\n    \"foreignObject\": true,\n    \"desc\": true,\n    \"title\": true\n  };\n  var inListItemScopeSet = Object.create(inScopeSet);\n  inListItemScopeSet[NAMESPACE.HTML] = Object.create(inScopeSet[NAMESPACE.HTML]);\n  inListItemScopeSet[NAMESPACE.HTML].ol = true;\n  inListItemScopeSet[NAMESPACE.HTML].ul = true;\n  var inButtonScopeSet = Object.create(inScopeSet);\n  inButtonScopeSet[NAMESPACE.HTML] = Object.create(inScopeSet[NAMESPACE.HTML]);\n  inButtonScopeSet[NAMESPACE.HTML].button = true;\n  var inTableScopeSet = Object.create(null);\n  inTableScopeSet[NAMESPACE.HTML] = {\n    __proto__: null,\n    \"html\": true,\n    \"table\": true,\n    \"template\": true\n  };\n\n  // The set of elements for select scope is the everything *except* these\n  var invertedSelectScopeSet = Object.create(null);\n  invertedSelectScopeSet[NAMESPACE.HTML] = {\n    __proto__: null,\n    \"optgroup\": true,\n    \"option\": true\n  };\n  var mathmlTextIntegrationPointSet = Object.create(null);\n  mathmlTextIntegrationPointSet[NAMESPACE.MATHML] = {\n    __proto__: null,\n    mi: true,\n    mo: true,\n    mn: true,\n    ms: true,\n    mtext: true\n  };\n  var htmlIntegrationPointSet = Object.create(null);\n  htmlIntegrationPointSet[NAMESPACE.SVG] = {\n    __proto__: null,\n    foreignObject: true,\n    desc: true,\n    title: true\n  };\n  var foreignAttributes = {\n    __proto__: null,\n    \"xlink:actuate\": NAMESPACE.XLINK,\n    \"xlink:arcrole\": NAMESPACE.XLINK,\n    \"xlink:href\": NAMESPACE.XLINK,\n    \"xlink:role\": NAMESPACE.XLINK,\n    \"xlink:show\": NAMESPACE.XLINK,\n    \"xlink:title\": NAMESPACE.XLINK,\n    \"xlink:type\": NAMESPACE.XLINK,\n    \"xml:base\": NAMESPACE.XML,\n    \"xml:lang\": NAMESPACE.XML,\n    \"xml:space\": NAMESPACE.XML,\n    \"xmlns\": NAMESPACE.XMLNS,\n    \"xmlns:xlink\": NAMESPACE.XMLNS\n  };\n\n  // Lowercase to mixed case mapping for SVG attributes and tagnames\n  var svgAttrAdjustments = {\n    __proto__: null,\n    attributename: \"attributeName\",\n    attributetype: \"attributeType\",\n    basefrequency: \"baseFrequency\",\n    baseprofile: \"baseProfile\",\n    calcmode: \"calcMode\",\n    clippathunits: \"clipPathUnits\",\n    diffuseconstant: \"diffuseConstant\",\n    edgemode: \"edgeMode\",\n    filterunits: \"filterUnits\",\n    glyphref: \"glyphRef\",\n    gradienttransform: \"gradientTransform\",\n    gradientunits: \"gradientUnits\",\n    kernelmatrix: \"kernelMatrix\",\n    kernelunitlength: \"kernelUnitLength\",\n    keypoints: \"keyPoints\",\n    keysplines: \"keySplines\",\n    keytimes: \"keyTimes\",\n    lengthadjust: \"lengthAdjust\",\n    limitingconeangle: \"limitingConeAngle\",\n    markerheight: \"markerHeight\",\n    markerunits: \"markerUnits\",\n    markerwidth: \"markerWidth\",\n    maskcontentunits: \"maskContentUnits\",\n    maskunits: \"maskUnits\",\n    numoctaves: \"numOctaves\",\n    pathlength: \"pathLength\",\n    patterncontentunits: \"patternContentUnits\",\n    patterntransform: \"patternTransform\",\n    patternunits: \"patternUnits\",\n    pointsatx: \"pointsAtX\",\n    pointsaty: \"pointsAtY\",\n    pointsatz: \"pointsAtZ\",\n    preservealpha: \"preserveAlpha\",\n    preserveaspectratio: \"preserveAspectRatio\",\n    primitiveunits: \"primitiveUnits\",\n    refx: \"refX\",\n    refy: \"refY\",\n    repeatcount: \"repeatCount\",\n    repeatdur: \"repeatDur\",\n    requiredextensions: \"requiredExtensions\",\n    requiredfeatures: \"requiredFeatures\",\n    specularconstant: \"specularConstant\",\n    specularexponent: \"specularExponent\",\n    spreadmethod: \"spreadMethod\",\n    startoffset: \"startOffset\",\n    stddeviation: \"stdDeviation\",\n    stitchtiles: \"stitchTiles\",\n    surfacescale: \"surfaceScale\",\n    systemlanguage: \"systemLanguage\",\n    tablevalues: \"tableValues\",\n    targetx: \"targetX\",\n    targety: \"targetY\",\n    textlength: \"textLength\",\n    viewbox: \"viewBox\",\n    viewtarget: \"viewTarget\",\n    xchannelselector: \"xChannelSelector\",\n    ychannelselector: \"yChannelSelector\",\n    zoomandpan: \"zoomAndPan\"\n  };\n  var svgTagNameAdjustments = {\n    __proto__: null,\n    altglyph: \"altGlyph\",\n    altglyphdef: \"altGlyphDef\",\n    altglyphitem: \"altGlyphItem\",\n    animatecolor: \"animateColor\",\n    animatemotion: \"animateMotion\",\n    animatetransform: \"animateTransform\",\n    clippath: \"clipPath\",\n    feblend: \"feBlend\",\n    fecolormatrix: \"feColorMatrix\",\n    fecomponenttransfer: \"feComponentTransfer\",\n    fecomposite: \"feComposite\",\n    feconvolvematrix: \"feConvolveMatrix\",\n    fediffuselighting: \"feDiffuseLighting\",\n    fedisplacementmap: \"feDisplacementMap\",\n    fedistantlight: \"feDistantLight\",\n    feflood: \"feFlood\",\n    fefunca: \"feFuncA\",\n    fefuncb: \"feFuncB\",\n    fefuncg: \"feFuncG\",\n    fefuncr: \"feFuncR\",\n    fegaussianblur: \"feGaussianBlur\",\n    feimage: \"feImage\",\n    femerge: \"feMerge\",\n    femergenode: \"feMergeNode\",\n    femorphology: \"feMorphology\",\n    feoffset: \"feOffset\",\n    fepointlight: \"fePointLight\",\n    fespecularlighting: \"feSpecularLighting\",\n    fespotlight: \"feSpotLight\",\n    fetile: \"feTile\",\n    feturbulence: \"feTurbulence\",\n    foreignobject: \"foreignObject\",\n    glyphref: \"glyphRef\",\n    lineargradient: \"linearGradient\",\n    radialgradient: \"radialGradient\",\n    textpath: \"textPath\"\n  };\n\n  // Data for parsing numeric and named character references\n  // These next 3 objects are direct translations of tables\n  // in the HTML spec into JavaScript object format\n  var numericCharRefReplacements = {\n    __proto__: null,\n    0x00: 0xFFFD,\n    0x80: 0x20AC,\n    0x82: 0x201A,\n    0x83: 0x0192,\n    0x84: 0x201E,\n    0x85: 0x2026,\n    0x86: 0x2020,\n    0x87: 0x2021,\n    0x88: 0x02C6,\n    0x89: 0x2030,\n    0x8A: 0x0160,\n    0x8B: 0x2039,\n    0x8C: 0x0152,\n    0x8E: 0x017D,\n    0x91: 0x2018,\n    0x92: 0x2019,\n    0x93: 0x201C,\n    0x94: 0x201D,\n    0x95: 0x2022,\n    0x96: 0x2013,\n    0x97: 0x2014,\n    0x98: 0x02DC,\n    0x99: 0x2122,\n    0x9A: 0x0161,\n    0x9B: 0x203A,\n    0x9C: 0x0153,\n    0x9E: 0x017E,\n    0x9F: 0x0178\n  };\n\n  /*\n   * This table is generated with test/tools/update-entities.js\n   */\n  var namedCharRefs = {\n    __proto__: null,\n    \"AElig\": 0xc6,\n    \"AElig;\": 0xc6,\n    \"AMP\": 0x26,\n    \"AMP;\": 0x26,\n    \"Aacute\": 0xc1,\n    \"Aacute;\": 0xc1,\n    \"Abreve;\": 0x102,\n    \"Acirc\": 0xc2,\n    \"Acirc;\": 0xc2,\n    \"Acy;\": 0x410,\n    \"Afr;\": [0xd835, 0xdd04],\n    \"Agrave\": 0xc0,\n    \"Agrave;\": 0xc0,\n    \"Alpha;\": 0x391,\n    \"Amacr;\": 0x100,\n    \"And;\": 0x2a53,\n    \"Aogon;\": 0x104,\n    \"Aopf;\": [0xd835, 0xdd38],\n    \"ApplyFunction;\": 0x2061,\n    \"Aring\": 0xc5,\n    \"Aring;\": 0xc5,\n    \"Ascr;\": [0xd835, 0xdc9c],\n    \"Assign;\": 0x2254,\n    \"Atilde\": 0xc3,\n    \"Atilde;\": 0xc3,\n    \"Auml\": 0xc4,\n    \"Auml;\": 0xc4,\n    \"Backslash;\": 0x2216,\n    \"Barv;\": 0x2ae7,\n    \"Barwed;\": 0x2306,\n    \"Bcy;\": 0x411,\n    \"Because;\": 0x2235,\n    \"Bernoullis;\": 0x212c,\n    \"Beta;\": 0x392,\n    \"Bfr;\": [0xd835, 0xdd05],\n    \"Bopf;\": [0xd835, 0xdd39],\n    \"Breve;\": 0x2d8,\n    \"Bscr;\": 0x212c,\n    \"Bumpeq;\": 0x224e,\n    \"CHcy;\": 0x427,\n    \"COPY\": 0xa9,\n    \"COPY;\": 0xa9,\n    \"Cacute;\": 0x106,\n    \"Cap;\": 0x22d2,\n    \"CapitalDifferentialD;\": 0x2145,\n    \"Cayleys;\": 0x212d,\n    \"Ccaron;\": 0x10c,\n    \"Ccedil\": 0xc7,\n    \"Ccedil;\": 0xc7,\n    \"Ccirc;\": 0x108,\n    \"Cconint;\": 0x2230,\n    \"Cdot;\": 0x10a,\n    \"Cedilla;\": 0xb8,\n    \"CenterDot;\": 0xb7,\n    \"Cfr;\": 0x212d,\n    \"Chi;\": 0x3a7,\n    \"CircleDot;\": 0x2299,\n    \"CircleMinus;\": 0x2296,\n    \"CirclePlus;\": 0x2295,\n    \"CircleTimes;\": 0x2297,\n    \"ClockwiseContourIntegral;\": 0x2232,\n    \"CloseCurlyDoubleQuote;\": 0x201d,\n    \"CloseCurlyQuote;\": 0x2019,\n    \"Colon;\": 0x2237,\n    \"Colone;\": 0x2a74,\n    \"Congruent;\": 0x2261,\n    \"Conint;\": 0x222f,\n    \"ContourIntegral;\": 0x222e,\n    \"Copf;\": 0x2102,\n    \"Coproduct;\": 0x2210,\n    \"CounterClockwiseContourIntegral;\": 0x2233,\n    \"Cross;\": 0x2a2f,\n    \"Cscr;\": [0xd835, 0xdc9e],\n    \"Cup;\": 0x22d3,\n    \"CupCap;\": 0x224d,\n    \"DD;\": 0x2145,\n    \"DDotrahd;\": 0x2911,\n    \"DJcy;\": 0x402,\n    \"DScy;\": 0x405,\n    \"DZcy;\": 0x40f,\n    \"Dagger;\": 0x2021,\n    \"Darr;\": 0x21a1,\n    \"Dashv;\": 0x2ae4,\n    \"Dcaron;\": 0x10e,\n    \"Dcy;\": 0x414,\n    \"Del;\": 0x2207,\n    \"Delta;\": 0x394,\n    \"Dfr;\": [0xd835, 0xdd07],\n    \"DiacriticalAcute;\": 0xb4,\n    \"DiacriticalDot;\": 0x2d9,\n    \"DiacriticalDoubleAcute;\": 0x2dd,\n    \"DiacriticalGrave;\": 0x60,\n    \"DiacriticalTilde;\": 0x2dc,\n    \"Diamond;\": 0x22c4,\n    \"DifferentialD;\": 0x2146,\n    \"Dopf;\": [0xd835, 0xdd3b],\n    \"Dot;\": 0xa8,\n    \"DotDot;\": 0x20dc,\n    \"DotEqual;\": 0x2250,\n    \"DoubleContourIntegral;\": 0x222f,\n    \"DoubleDot;\": 0xa8,\n    \"DoubleDownArrow;\": 0x21d3,\n    \"DoubleLeftArrow;\": 0x21d0,\n    \"DoubleLeftRightArrow;\": 0x21d4,\n    \"DoubleLeftTee;\": 0x2ae4,\n    \"DoubleLongLeftArrow;\": 0x27f8,\n    \"DoubleLongLeftRightArrow;\": 0x27fa,\n    \"DoubleLongRightArrow;\": 0x27f9,\n    \"DoubleRightArrow;\": 0x21d2,\n    \"DoubleRightTee;\": 0x22a8,\n    \"DoubleUpArrow;\": 0x21d1,\n    \"DoubleUpDownArrow;\": 0x21d5,\n    \"DoubleVerticalBar;\": 0x2225,\n    \"DownArrow;\": 0x2193,\n    \"DownArrowBar;\": 0x2913,\n    \"DownArrowUpArrow;\": 0x21f5,\n    \"DownBreve;\": 0x311,\n    \"DownLeftRightVector;\": 0x2950,\n    \"DownLeftTeeVector;\": 0x295e,\n    \"DownLeftVector;\": 0x21bd,\n    \"DownLeftVectorBar;\": 0x2956,\n    \"DownRightTeeVector;\": 0x295f,\n    \"DownRightVector;\": 0x21c1,\n    \"DownRightVectorBar;\": 0x2957,\n    \"DownTee;\": 0x22a4,\n    \"DownTeeArrow;\": 0x21a7,\n    \"Downarrow;\": 0x21d3,\n    \"Dscr;\": [0xd835, 0xdc9f],\n    \"Dstrok;\": 0x110,\n    \"ENG;\": 0x14a,\n    \"ETH\": 0xd0,\n    \"ETH;\": 0xd0,\n    \"Eacute\": 0xc9,\n    \"Eacute;\": 0xc9,\n    \"Ecaron;\": 0x11a,\n    \"Ecirc\": 0xca,\n    \"Ecirc;\": 0xca,\n    \"Ecy;\": 0x42d,\n    \"Edot;\": 0x116,\n    \"Efr;\": [0xd835, 0xdd08],\n    \"Egrave\": 0xc8,\n    \"Egrave;\": 0xc8,\n    \"Element;\": 0x2208,\n    \"Emacr;\": 0x112,\n    \"EmptySmallSquare;\": 0x25fb,\n    \"EmptyVerySmallSquare;\": 0x25ab,\n    \"Eogon;\": 0x118,\n    \"Eopf;\": [0xd835, 0xdd3c],\n    \"Epsilon;\": 0x395,\n    \"Equal;\": 0x2a75,\n    \"EqualTilde;\": 0x2242,\n    \"Equilibrium;\": 0x21cc,\n    \"Escr;\": 0x2130,\n    \"Esim;\": 0x2a73,\n    \"Eta;\": 0x397,\n    \"Euml\": 0xcb,\n    \"Euml;\": 0xcb,\n    \"Exists;\": 0x2203,\n    \"ExponentialE;\": 0x2147,\n    \"Fcy;\": 0x424,\n    \"Ffr;\": [0xd835, 0xdd09],\n    \"FilledSmallSquare;\": 0x25fc,\n    \"FilledVerySmallSquare;\": 0x25aa,\n    \"Fopf;\": [0xd835, 0xdd3d],\n    \"ForAll;\": 0x2200,\n    \"Fouriertrf;\": 0x2131,\n    \"Fscr;\": 0x2131,\n    \"GJcy;\": 0x403,\n    \"GT\": 0x3e,\n    \"GT;\": 0x3e,\n    \"Gamma;\": 0x393,\n    \"Gammad;\": 0x3dc,\n    \"Gbreve;\": 0x11e,\n    \"Gcedil;\": 0x122,\n    \"Gcirc;\": 0x11c,\n    \"Gcy;\": 0x413,\n    \"Gdot;\": 0x120,\n    \"Gfr;\": [0xd835, 0xdd0a],\n    \"Gg;\": 0x22d9,\n    \"Gopf;\": [0xd835, 0xdd3e],\n    \"GreaterEqual;\": 0x2265,\n    \"GreaterEqualLess;\": 0x22db,\n    \"GreaterFullEqual;\": 0x2267,\n    \"GreaterGreater;\": 0x2aa2,\n    \"GreaterLess;\": 0x2277,\n    \"GreaterSlantEqual;\": 0x2a7e,\n    \"GreaterTilde;\": 0x2273,\n    \"Gscr;\": [0xd835, 0xdca2],\n    \"Gt;\": 0x226b,\n    \"HARDcy;\": 0x42a,\n    \"Hacek;\": 0x2c7,\n    \"Hat;\": 0x5e,\n    \"Hcirc;\": 0x124,\n    \"Hfr;\": 0x210c,\n    \"HilbertSpace;\": 0x210b,\n    \"Hopf;\": 0x210d,\n    \"HorizontalLine;\": 0x2500,\n    \"Hscr;\": 0x210b,\n    \"Hstrok;\": 0x126,\n    \"HumpDownHump;\": 0x224e,\n    \"HumpEqual;\": 0x224f,\n    \"IEcy;\": 0x415,\n    \"IJlig;\": 0x132,\n    \"IOcy;\": 0x401,\n    \"Iacute\": 0xcd,\n    \"Iacute;\": 0xcd,\n    \"Icirc\": 0xce,\n    \"Icirc;\": 0xce,\n    \"Icy;\": 0x418,\n    \"Idot;\": 0x130,\n    \"Ifr;\": 0x2111,\n    \"Igrave\": 0xcc,\n    \"Igrave;\": 0xcc,\n    \"Im;\": 0x2111,\n    \"Imacr;\": 0x12a,\n    \"ImaginaryI;\": 0x2148,\n    \"Implies;\": 0x21d2,\n    \"Int;\": 0x222c,\n    \"Integral;\": 0x222b,\n    \"Intersection;\": 0x22c2,\n    \"InvisibleComma;\": 0x2063,\n    \"InvisibleTimes;\": 0x2062,\n    \"Iogon;\": 0x12e,\n    \"Iopf;\": [0xd835, 0xdd40],\n    \"Iota;\": 0x399,\n    \"Iscr;\": 0x2110,\n    \"Itilde;\": 0x128,\n    \"Iukcy;\": 0x406,\n    \"Iuml\": 0xcf,\n    \"Iuml;\": 0xcf,\n    \"Jcirc;\": 0x134,\n    \"Jcy;\": 0x419,\n    \"Jfr;\": [0xd835, 0xdd0d],\n    \"Jopf;\": [0xd835, 0xdd41],\n    \"Jscr;\": [0xd835, 0xdca5],\n    \"Jsercy;\": 0x408,\n    \"Jukcy;\": 0x404,\n    \"KHcy;\": 0x425,\n    \"KJcy;\": 0x40c,\n    \"Kappa;\": 0x39a,\n    \"Kcedil;\": 0x136,\n    \"Kcy;\": 0x41a,\n    \"Kfr;\": [0xd835, 0xdd0e],\n    \"Kopf;\": [0xd835, 0xdd42],\n    \"Kscr;\": [0xd835, 0xdca6],\n    \"LJcy;\": 0x409,\n    \"LT\": 0x3c,\n    \"LT;\": 0x3c,\n    \"Lacute;\": 0x139,\n    \"Lambda;\": 0x39b,\n    \"Lang;\": 0x27ea,\n    \"Laplacetrf;\": 0x2112,\n    \"Larr;\": 0x219e,\n    \"Lcaron;\": 0x13d,\n    \"Lcedil;\": 0x13b,\n    \"Lcy;\": 0x41b,\n    \"LeftAngleBracket;\": 0x27e8,\n    \"LeftArrow;\": 0x2190,\n    \"LeftArrowBar;\": 0x21e4,\n    \"LeftArrowRightArrow;\": 0x21c6,\n    \"LeftCeiling;\": 0x2308,\n    \"LeftDoubleBracket;\": 0x27e6,\n    \"LeftDownTeeVector;\": 0x2961,\n    \"LeftDownVector;\": 0x21c3,\n    \"LeftDownVectorBar;\": 0x2959,\n    \"LeftFloor;\": 0x230a,\n    \"LeftRightArrow;\": 0x2194,\n    \"LeftRightVector;\": 0x294e,\n    \"LeftTee;\": 0x22a3,\n    \"LeftTeeArrow;\": 0x21a4,\n    \"LeftTeeVector;\": 0x295a,\n    \"LeftTriangle;\": 0x22b2,\n    \"LeftTriangleBar;\": 0x29cf,\n    \"LeftTriangleEqual;\": 0x22b4,\n    \"LeftUpDownVector;\": 0x2951,\n    \"LeftUpTeeVector;\": 0x2960,\n    \"LeftUpVector;\": 0x21bf,\n    \"LeftUpVectorBar;\": 0x2958,\n    \"LeftVector;\": 0x21bc,\n    \"LeftVectorBar;\": 0x2952,\n    \"Leftarrow;\": 0x21d0,\n    \"Leftrightarrow;\": 0x21d4,\n    \"LessEqualGreater;\": 0x22da,\n    \"LessFullEqual;\": 0x2266,\n    \"LessGreater;\": 0x2276,\n    \"LessLess;\": 0x2aa1,\n    \"LessSlantEqual;\": 0x2a7d,\n    \"LessTilde;\": 0x2272,\n    \"Lfr;\": [0xd835, 0xdd0f],\n    \"Ll;\": 0x22d8,\n    \"Lleftarrow;\": 0x21da,\n    \"Lmidot;\": 0x13f,\n    \"LongLeftArrow;\": 0x27f5,\n    \"LongLeftRightArrow;\": 0x27f7,\n    \"LongRightArrow;\": 0x27f6,\n    \"Longleftarrow;\": 0x27f8,\n    \"Longleftrightarrow;\": 0x27fa,\n    \"Longrightarrow;\": 0x27f9,\n    \"Lopf;\": [0xd835, 0xdd43],\n    \"LowerLeftArrow;\": 0x2199,\n    \"LowerRightArrow;\": 0x2198,\n    \"Lscr;\": 0x2112,\n    \"Lsh;\": 0x21b0,\n    \"Lstrok;\": 0x141,\n    \"Lt;\": 0x226a,\n    \"Map;\": 0x2905,\n    \"Mcy;\": 0x41c,\n    \"MediumSpace;\": 0x205f,\n    \"Mellintrf;\": 0x2133,\n    \"Mfr;\": [0xd835, 0xdd10],\n    \"MinusPlus;\": 0x2213,\n    \"Mopf;\": [0xd835, 0xdd44],\n    \"Mscr;\": 0x2133,\n    \"Mu;\": 0x39c,\n    \"NJcy;\": 0x40a,\n    \"Nacute;\": 0x143,\n    \"Ncaron;\": 0x147,\n    \"Ncedil;\": 0x145,\n    \"Ncy;\": 0x41d,\n    \"NegativeMediumSpace;\": 0x200b,\n    \"NegativeThickSpace;\": 0x200b,\n    \"NegativeThinSpace;\": 0x200b,\n    \"NegativeVeryThinSpace;\": 0x200b,\n    \"NestedGreaterGreater;\": 0x226b,\n    \"NestedLessLess;\": 0x226a,\n    \"NewLine;\": 0xa,\n    \"Nfr;\": [0xd835, 0xdd11],\n    \"NoBreak;\": 0x2060,\n    \"NonBreakingSpace;\": 0xa0,\n    \"Nopf;\": 0x2115,\n    \"Not;\": 0x2aec,\n    \"NotCongruent;\": 0x2262,\n    \"NotCupCap;\": 0x226d,\n    \"NotDoubleVerticalBar;\": 0x2226,\n    \"NotElement;\": 0x2209,\n    \"NotEqual;\": 0x2260,\n    \"NotEqualTilde;\": [0x2242, 0x338],\n    \"NotExists;\": 0x2204,\n    \"NotGreater;\": 0x226f,\n    \"NotGreaterEqual;\": 0x2271,\n    \"NotGreaterFullEqual;\": [0x2267, 0x338],\n    \"NotGreaterGreater;\": [0x226b, 0x338],\n    \"NotGreaterLess;\": 0x2279,\n    \"NotGreaterSlantEqual;\": [0x2a7e, 0x338],\n    \"NotGreaterTilde;\": 0x2275,\n    \"NotHumpDownHump;\": [0x224e, 0x338],\n    \"NotHumpEqual;\": [0x224f, 0x338],\n    \"NotLeftTriangle;\": 0x22ea,\n    \"NotLeftTriangleBar;\": [0x29cf, 0x338],\n    \"NotLeftTriangleEqual;\": 0x22ec,\n    \"NotLess;\": 0x226e,\n    \"NotLessEqual;\": 0x2270,\n    \"NotLessGreater;\": 0x2278,\n    \"NotLessLess;\": [0x226a, 0x338],\n    \"NotLessSlantEqual;\": [0x2a7d, 0x338],\n    \"NotLessTilde;\": 0x2274,\n    \"NotNestedGreaterGreater;\": [0x2aa2, 0x338],\n    \"NotNestedLessLess;\": [0x2aa1, 0x338],\n    \"NotPrecedes;\": 0x2280,\n    \"NotPrecedesEqual;\": [0x2aaf, 0x338],\n    \"NotPrecedesSlantEqual;\": 0x22e0,\n    \"NotReverseElement;\": 0x220c,\n    \"NotRightTriangle;\": 0x22eb,\n    \"NotRightTriangleBar;\": [0x29d0, 0x338],\n    \"NotRightTriangleEqual;\": 0x22ed,\n    \"NotSquareSubset;\": [0x228f, 0x338],\n    \"NotSquareSubsetEqual;\": 0x22e2,\n    \"NotSquareSuperset;\": [0x2290, 0x338],\n    \"NotSquareSupersetEqual;\": 0x22e3,\n    \"NotSubset;\": [0x2282, 0x20d2],\n    \"NotSubsetEqual;\": 0x2288,\n    \"NotSucceeds;\": 0x2281,\n    \"NotSucceedsEqual;\": [0x2ab0, 0x338],\n    \"NotSucceedsSlantEqual;\": 0x22e1,\n    \"NotSucceedsTilde;\": [0x227f, 0x338],\n    \"NotSuperset;\": [0x2283, 0x20d2],\n    \"NotSupersetEqual;\": 0x2289,\n    \"NotTilde;\": 0x2241,\n    \"NotTildeEqual;\": 0x2244,\n    \"NotTildeFullEqual;\": 0x2247,\n    \"NotTildeTilde;\": 0x2249,\n    \"NotVerticalBar;\": 0x2224,\n    \"Nscr;\": [0xd835, 0xdca9],\n    \"Ntilde\": 0xd1,\n    \"Ntilde;\": 0xd1,\n    \"Nu;\": 0x39d,\n    \"OElig;\": 0x152,\n    \"Oacute\": 0xd3,\n    \"Oacute;\": 0xd3,\n    \"Ocirc\": 0xd4,\n    \"Ocirc;\": 0xd4,\n    \"Ocy;\": 0x41e,\n    \"Odblac;\": 0x150,\n    \"Ofr;\": [0xd835, 0xdd12],\n    \"Ograve\": 0xd2,\n    \"Ograve;\": 0xd2,\n    \"Omacr;\": 0x14c,\n    \"Omega;\": 0x3a9,\n    \"Omicron;\": 0x39f,\n    \"Oopf;\": [0xd835, 0xdd46],\n    \"OpenCurlyDoubleQuote;\": 0x201c,\n    \"OpenCurlyQuote;\": 0x2018,\n    \"Or;\": 0x2a54,\n    \"Oscr;\": [0xd835, 0xdcaa],\n    \"Oslash\": 0xd8,\n    \"Oslash;\": 0xd8,\n    \"Otilde\": 0xd5,\n    \"Otilde;\": 0xd5,\n    \"Otimes;\": 0x2a37,\n    \"Ouml\": 0xd6,\n    \"Ouml;\": 0xd6,\n    \"OverBar;\": 0x203e,\n    \"OverBrace;\": 0x23de,\n    \"OverBracket;\": 0x23b4,\n    \"OverParenthesis;\": 0x23dc,\n    \"PartialD;\": 0x2202,\n    \"Pcy;\": 0x41f,\n    \"Pfr;\": [0xd835, 0xdd13],\n    \"Phi;\": 0x3a6,\n    \"Pi;\": 0x3a0,\n    \"PlusMinus;\": 0xb1,\n    \"Poincareplane;\": 0x210c,\n    \"Popf;\": 0x2119,\n    \"Pr;\": 0x2abb,\n    \"Precedes;\": 0x227a,\n    \"PrecedesEqual;\": 0x2aaf,\n    \"PrecedesSlantEqual;\": 0x227c,\n    \"PrecedesTilde;\": 0x227e,\n    \"Prime;\": 0x2033,\n    \"Product;\": 0x220f,\n    \"Proportion;\": 0x2237,\n    \"Proportional;\": 0x221d,\n    \"Pscr;\": [0xd835, 0xdcab],\n    \"Psi;\": 0x3a8,\n    \"QUOT\": 0x22,\n    \"QUOT;\": 0x22,\n    \"Qfr;\": [0xd835, 0xdd14],\n    \"Qopf;\": 0x211a,\n    \"Qscr;\": [0xd835, 0xdcac],\n    \"RBarr;\": 0x2910,\n    \"REG\": 0xae,\n    \"REG;\": 0xae,\n    \"Racute;\": 0x154,\n    \"Rang;\": 0x27eb,\n    \"Rarr;\": 0x21a0,\n    \"Rarrtl;\": 0x2916,\n    \"Rcaron;\": 0x158,\n    \"Rcedil;\": 0x156,\n    \"Rcy;\": 0x420,\n    \"Re;\": 0x211c,\n    \"ReverseElement;\": 0x220b,\n    \"ReverseEquilibrium;\": 0x21cb,\n    \"ReverseUpEquilibrium;\": 0x296f,\n    \"Rfr;\": 0x211c,\n    \"Rho;\": 0x3a1,\n    \"RightAngleBracket;\": 0x27e9,\n    \"RightArrow;\": 0x2192,\n    \"RightArrowBar;\": 0x21e5,\n    \"RightArrowLeftArrow;\": 0x21c4,\n    \"RightCeiling;\": 0x2309,\n    \"RightDoubleBracket;\": 0x27e7,\n    \"RightDownTeeVector;\": 0x295d,\n    \"RightDownVector;\": 0x21c2,\n    \"RightDownVectorBar;\": 0x2955,\n    \"RightFloor;\": 0x230b,\n    \"RightTee;\": 0x22a2,\n    \"RightTeeArrow;\": 0x21a6,\n    \"RightTeeVector;\": 0x295b,\n    \"RightTriangle;\": 0x22b3,\n    \"RightTriangleBar;\": 0x29d0,\n    \"RightTriangleEqual;\": 0x22b5,\n    \"RightUpDownVector;\": 0x294f,\n    \"RightUpTeeVector;\": 0x295c,\n    \"RightUpVector;\": 0x21be,\n    \"RightUpVectorBar;\": 0x2954,\n    \"RightVector;\": 0x21c0,\n    \"RightVectorBar;\": 0x2953,\n    \"Rightarrow;\": 0x21d2,\n    \"Ropf;\": 0x211d,\n    \"RoundImplies;\": 0x2970,\n    \"Rrightarrow;\": 0x21db,\n    \"Rscr;\": 0x211b,\n    \"Rsh;\": 0x21b1,\n    \"RuleDelayed;\": 0x29f4,\n    \"SHCHcy;\": 0x429,\n    \"SHcy;\": 0x428,\n    \"SOFTcy;\": 0x42c,\n    \"Sacute;\": 0x15a,\n    \"Sc;\": 0x2abc,\n    \"Scaron;\": 0x160,\n    \"Scedil;\": 0x15e,\n    \"Scirc;\": 0x15c,\n    \"Scy;\": 0x421,\n    \"Sfr;\": [0xd835, 0xdd16],\n    \"ShortDownArrow;\": 0x2193,\n    \"ShortLeftArrow;\": 0x2190,\n    \"ShortRightArrow;\": 0x2192,\n    \"ShortUpArrow;\": 0x2191,\n    \"Sigma;\": 0x3a3,\n    \"SmallCircle;\": 0x2218,\n    \"Sopf;\": [0xd835, 0xdd4a],\n    \"Sqrt;\": 0x221a,\n    \"Square;\": 0x25a1,\n    \"SquareIntersection;\": 0x2293,\n    \"SquareSubset;\": 0x228f,\n    \"SquareSubsetEqual;\": 0x2291,\n    \"SquareSuperset;\": 0x2290,\n    \"SquareSupersetEqual;\": 0x2292,\n    \"SquareUnion;\": 0x2294,\n    \"Sscr;\": [0xd835, 0xdcae],\n    \"Star;\": 0x22c6,\n    \"Sub;\": 0x22d0,\n    \"Subset;\": 0x22d0,\n    \"SubsetEqual;\": 0x2286,\n    \"Succeeds;\": 0x227b,\n    \"SucceedsEqual;\": 0x2ab0,\n    \"SucceedsSlantEqual;\": 0x227d,\n    \"SucceedsTilde;\": 0x227f,\n    \"SuchThat;\": 0x220b,\n    \"Sum;\": 0x2211,\n    \"Sup;\": 0x22d1,\n    \"Superset;\": 0x2283,\n    \"SupersetEqual;\": 0x2287,\n    \"Supset;\": 0x22d1,\n    \"THORN\": 0xde,\n    \"THORN;\": 0xde,\n    \"TRADE;\": 0x2122,\n    \"TSHcy;\": 0x40b,\n    \"TScy;\": 0x426,\n    \"Tab;\": 0x9,\n    \"Tau;\": 0x3a4,\n    \"Tcaron;\": 0x164,\n    \"Tcedil;\": 0x162,\n    \"Tcy;\": 0x422,\n    \"Tfr;\": [0xd835, 0xdd17],\n    \"Therefore;\": 0x2234,\n    \"Theta;\": 0x398,\n    \"ThickSpace;\": [0x205f, 0x200a],\n    \"ThinSpace;\": 0x2009,\n    \"Tilde;\": 0x223c,\n    \"TildeEqual;\": 0x2243,\n    \"TildeFullEqual;\": 0x2245,\n    \"TildeTilde;\": 0x2248,\n    \"Topf;\": [0xd835, 0xdd4b],\n    \"TripleDot;\": 0x20db,\n    \"Tscr;\": [0xd835, 0xdcaf],\n    \"Tstrok;\": 0x166,\n    \"Uacute\": 0xda,\n    \"Uacute;\": 0xda,\n    \"Uarr;\": 0x219f,\n    \"Uarrocir;\": 0x2949,\n    \"Ubrcy;\": 0x40e,\n    \"Ubreve;\": 0x16c,\n    \"Ucirc\": 0xdb,\n    \"Ucirc;\": 0xdb,\n    \"Ucy;\": 0x423,\n    \"Udblac;\": 0x170,\n    \"Ufr;\": [0xd835, 0xdd18],\n    \"Ugrave\": 0xd9,\n    \"Ugrave;\": 0xd9,\n    \"Umacr;\": 0x16a,\n    \"UnderBar;\": 0x5f,\n    \"UnderBrace;\": 0x23df,\n    \"UnderBracket;\": 0x23b5,\n    \"UnderParenthesis;\": 0x23dd,\n    \"Union;\": 0x22c3,\n    \"UnionPlus;\": 0x228e,\n    \"Uogon;\": 0x172,\n    \"Uopf;\": [0xd835, 0xdd4c],\n    \"UpArrow;\": 0x2191,\n    \"UpArrowBar;\": 0x2912,\n    \"UpArrowDownArrow;\": 0x21c5,\n    \"UpDownArrow;\": 0x2195,\n    \"UpEquilibrium;\": 0x296e,\n    \"UpTee;\": 0x22a5,\n    \"UpTeeArrow;\": 0x21a5,\n    \"Uparrow;\": 0x21d1,\n    \"Updownarrow;\": 0x21d5,\n    \"UpperLeftArrow;\": 0x2196,\n    \"UpperRightArrow;\": 0x2197,\n    \"Upsi;\": 0x3d2,\n    \"Upsilon;\": 0x3a5,\n    \"Uring;\": 0x16e,\n    \"Uscr;\": [0xd835, 0xdcb0],\n    \"Utilde;\": 0x168,\n    \"Uuml\": 0xdc,\n    \"Uuml;\": 0xdc,\n    \"VDash;\": 0x22ab,\n    \"Vbar;\": 0x2aeb,\n    \"Vcy;\": 0x412,\n    \"Vdash;\": 0x22a9,\n    \"Vdashl;\": 0x2ae6,\n    \"Vee;\": 0x22c1,\n    \"Verbar;\": 0x2016,\n    \"Vert;\": 0x2016,\n    \"VerticalBar;\": 0x2223,\n    \"VerticalLine;\": 0x7c,\n    \"VerticalSeparator;\": 0x2758,\n    \"VerticalTilde;\": 0x2240,\n    \"VeryThinSpace;\": 0x200a,\n    \"Vfr;\": [0xd835, 0xdd19],\n    \"Vopf;\": [0xd835, 0xdd4d],\n    \"Vscr;\": [0xd835, 0xdcb1],\n    \"Vvdash;\": 0x22aa,\n    \"Wcirc;\": 0x174,\n    \"Wedge;\": 0x22c0,\n    \"Wfr;\": [0xd835, 0xdd1a],\n    \"Wopf;\": [0xd835, 0xdd4e],\n    \"Wscr;\": [0xd835, 0xdcb2],\n    \"Xfr;\": [0xd835, 0xdd1b],\n    \"Xi;\": 0x39e,\n    \"Xopf;\": [0xd835, 0xdd4f],\n    \"Xscr;\": [0xd835, 0xdcb3],\n    \"YAcy;\": 0x42f,\n    \"YIcy;\": 0x407,\n    \"YUcy;\": 0x42e,\n    \"Yacute\": 0xdd,\n    \"Yacute;\": 0xdd,\n    \"Ycirc;\": 0x176,\n    \"Ycy;\": 0x42b,\n    \"Yfr;\": [0xd835, 0xdd1c],\n    \"Yopf;\": [0xd835, 0xdd50],\n    \"Yscr;\": [0xd835, 0xdcb4],\n    \"Yuml;\": 0x178,\n    \"ZHcy;\": 0x416,\n    \"Zacute;\": 0x179,\n    \"Zcaron;\": 0x17d,\n    \"Zcy;\": 0x417,\n    \"Zdot;\": 0x17b,\n    \"ZeroWidthSpace;\": 0x200b,\n    \"Zeta;\": 0x396,\n    \"Zfr;\": 0x2128,\n    \"Zopf;\": 0x2124,\n    \"Zscr;\": [0xd835, 0xdcb5],\n    \"aacute\": 0xe1,\n    \"aacute;\": 0xe1,\n    \"abreve;\": 0x103,\n    \"ac;\": 0x223e,\n    \"acE;\": [0x223e, 0x333],\n    \"acd;\": 0x223f,\n    \"acirc\": 0xe2,\n    \"acirc;\": 0xe2,\n    \"acute\": 0xb4,\n    \"acute;\": 0xb4,\n    \"acy;\": 0x430,\n    \"aelig\": 0xe6,\n    \"aelig;\": 0xe6,\n    \"af;\": 0x2061,\n    \"afr;\": [0xd835, 0xdd1e],\n    \"agrave\": 0xe0,\n    \"agrave;\": 0xe0,\n    \"alefsym;\": 0x2135,\n    \"aleph;\": 0x2135,\n    \"alpha;\": 0x3b1,\n    \"amacr;\": 0x101,\n    \"amalg;\": 0x2a3f,\n    \"amp\": 0x26,\n    \"amp;\": 0x26,\n    \"and;\": 0x2227,\n    \"andand;\": 0x2a55,\n    \"andd;\": 0x2a5c,\n    \"andslope;\": 0x2a58,\n    \"andv;\": 0x2a5a,\n    \"ang;\": 0x2220,\n    \"ange;\": 0x29a4,\n    \"angle;\": 0x2220,\n    \"angmsd;\": 0x2221,\n    \"angmsdaa;\": 0x29a8,\n    \"angmsdab;\": 0x29a9,\n    \"angmsdac;\": 0x29aa,\n    \"angmsdad;\": 0x29ab,\n    \"angmsdae;\": 0x29ac,\n    \"angmsdaf;\": 0x29ad,\n    \"angmsdag;\": 0x29ae,\n    \"angmsdah;\": 0x29af,\n    \"angrt;\": 0x221f,\n    \"angrtvb;\": 0x22be,\n    \"angrtvbd;\": 0x299d,\n    \"angsph;\": 0x2222,\n    \"angst;\": 0xc5,\n    \"angzarr;\": 0x237c,\n    \"aogon;\": 0x105,\n    \"aopf;\": [0xd835, 0xdd52],\n    \"ap;\": 0x2248,\n    \"apE;\": 0x2a70,\n    \"apacir;\": 0x2a6f,\n    \"ape;\": 0x224a,\n    \"apid;\": 0x224b,\n    \"apos;\": 0x27,\n    \"approx;\": 0x2248,\n    \"approxeq;\": 0x224a,\n    \"aring\": 0xe5,\n    \"aring;\": 0xe5,\n    \"ascr;\": [0xd835, 0xdcb6],\n    \"ast;\": 0x2a,\n    \"asymp;\": 0x2248,\n    \"asympeq;\": 0x224d,\n    \"atilde\": 0xe3,\n    \"atilde;\": 0xe3,\n    \"auml\": 0xe4,\n    \"auml;\": 0xe4,\n    \"awconint;\": 0x2233,\n    \"awint;\": 0x2a11,\n    \"bNot;\": 0x2aed,\n    \"backcong;\": 0x224c,\n    \"backepsilon;\": 0x3f6,\n    \"backprime;\": 0x2035,\n    \"backsim;\": 0x223d,\n    \"backsimeq;\": 0x22cd,\n    \"barvee;\": 0x22bd,\n    \"barwed;\": 0x2305,\n    \"barwedge;\": 0x2305,\n    \"bbrk;\": 0x23b5,\n    \"bbrktbrk;\": 0x23b6,\n    \"bcong;\": 0x224c,\n    \"bcy;\": 0x431,\n    \"bdquo;\": 0x201e,\n    \"becaus;\": 0x2235,\n    \"because;\": 0x2235,\n    \"bemptyv;\": 0x29b0,\n    \"bepsi;\": 0x3f6,\n    \"bernou;\": 0x212c,\n    \"beta;\": 0x3b2,\n    \"beth;\": 0x2136,\n    \"between;\": 0x226c,\n    \"bfr;\": [0xd835, 0xdd1f],\n    \"bigcap;\": 0x22c2,\n    \"bigcirc;\": 0x25ef,\n    \"bigcup;\": 0x22c3,\n    \"bigodot;\": 0x2a00,\n    \"bigoplus;\": 0x2a01,\n    \"bigotimes;\": 0x2a02,\n    \"bigsqcup;\": 0x2a06,\n    \"bigstar;\": 0x2605,\n    \"bigtriangledown;\": 0x25bd,\n    \"bigtriangleup;\": 0x25b3,\n    \"biguplus;\": 0x2a04,\n    \"bigvee;\": 0x22c1,\n    \"bigwedge;\": 0x22c0,\n    \"bkarow;\": 0x290d,\n    \"blacklozenge;\": 0x29eb,\n    \"blacksquare;\": 0x25aa,\n    \"blacktriangle;\": 0x25b4,\n    \"blacktriangledown;\": 0x25be,\n    \"blacktriangleleft;\": 0x25c2,\n    \"blacktriangleright;\": 0x25b8,\n    \"blank;\": 0x2423,\n    \"blk12;\": 0x2592,\n    \"blk14;\": 0x2591,\n    \"blk34;\": 0x2593,\n    \"block;\": 0x2588,\n    \"bne;\": [0x3d, 0x20e5],\n    \"bnequiv;\": [0x2261, 0x20e5],\n    \"bnot;\": 0x2310,\n    \"bopf;\": [0xd835, 0xdd53],\n    \"bot;\": 0x22a5,\n    \"bottom;\": 0x22a5,\n    \"bowtie;\": 0x22c8,\n    \"boxDL;\": 0x2557,\n    \"boxDR;\": 0x2554,\n    \"boxDl;\": 0x2556,\n    \"boxDr;\": 0x2553,\n    \"boxH;\": 0x2550,\n    \"boxHD;\": 0x2566,\n    \"boxHU;\": 0x2569,\n    \"boxHd;\": 0x2564,\n    \"boxHu;\": 0x2567,\n    \"boxUL;\": 0x255d,\n    \"boxUR;\": 0x255a,\n    \"boxUl;\": 0x255c,\n    \"boxUr;\": 0x2559,\n    \"boxV;\": 0x2551,\n    \"boxVH;\": 0x256c,\n    \"boxVL;\": 0x2563,\n    \"boxVR;\": 0x2560,\n    \"boxVh;\": 0x256b,\n    \"boxVl;\": 0x2562,\n    \"boxVr;\": 0x255f,\n    \"boxbox;\": 0x29c9,\n    \"boxdL;\": 0x2555,\n    \"boxdR;\": 0x2552,\n    \"boxdl;\": 0x2510,\n    \"boxdr;\": 0x250c,\n    \"boxh;\": 0x2500,\n    \"boxhD;\": 0x2565,\n    \"boxhU;\": 0x2568,\n    \"boxhd;\": 0x252c,\n    \"boxhu;\": 0x2534,\n    \"boxminus;\": 0x229f,\n    \"boxplus;\": 0x229e,\n    \"boxtimes;\": 0x22a0,\n    \"boxuL;\": 0x255b,\n    \"boxuR;\": 0x2558,\n    \"boxul;\": 0x2518,\n    \"boxur;\": 0x2514,\n    \"boxv;\": 0x2502,\n    \"boxvH;\": 0x256a,\n    \"boxvL;\": 0x2561,\n    \"boxvR;\": 0x255e,\n    \"boxvh;\": 0x253c,\n    \"boxvl;\": 0x2524,\n    \"boxvr;\": 0x251c,\n    \"bprime;\": 0x2035,\n    \"breve;\": 0x2d8,\n    \"brvbar\": 0xa6,\n    \"brvbar;\": 0xa6,\n    \"bscr;\": [0xd835, 0xdcb7],\n    \"bsemi;\": 0x204f,\n    \"bsim;\": 0x223d,\n    \"bsime;\": 0x22cd,\n    \"bsol;\": 0x5c,\n    \"bsolb;\": 0x29c5,\n    \"bsolhsub;\": 0x27c8,\n    \"bull;\": 0x2022,\n    \"bullet;\": 0x2022,\n    \"bump;\": 0x224e,\n    \"bumpE;\": 0x2aae,\n    \"bumpe;\": 0x224f,\n    \"bumpeq;\": 0x224f,\n    \"cacute;\": 0x107,\n    \"cap;\": 0x2229,\n    \"capand;\": 0x2a44,\n    \"capbrcup;\": 0x2a49,\n    \"capcap;\": 0x2a4b,\n    \"capcup;\": 0x2a47,\n    \"capdot;\": 0x2a40,\n    \"caps;\": [0x2229, 0xfe00],\n    \"caret;\": 0x2041,\n    \"caron;\": 0x2c7,\n    \"ccaps;\": 0x2a4d,\n    \"ccaron;\": 0x10d,\n    \"ccedil\": 0xe7,\n    \"ccedil;\": 0xe7,\n    \"ccirc;\": 0x109,\n    \"ccups;\": 0x2a4c,\n    \"ccupssm;\": 0x2a50,\n    \"cdot;\": 0x10b,\n    \"cedil\": 0xb8,\n    \"cedil;\": 0xb8,\n    \"cemptyv;\": 0x29b2,\n    \"cent\": 0xa2,\n    \"cent;\": 0xa2,\n    \"centerdot;\": 0xb7,\n    \"cfr;\": [0xd835, 0xdd20],\n    \"chcy;\": 0x447,\n    \"check;\": 0x2713,\n    \"checkmark;\": 0x2713,\n    \"chi;\": 0x3c7,\n    \"cir;\": 0x25cb,\n    \"cirE;\": 0x29c3,\n    \"circ;\": 0x2c6,\n    \"circeq;\": 0x2257,\n    \"circlearrowleft;\": 0x21ba,\n    \"circlearrowright;\": 0x21bb,\n    \"circledR;\": 0xae,\n    \"circledS;\": 0x24c8,\n    \"circledast;\": 0x229b,\n    \"circledcirc;\": 0x229a,\n    \"circleddash;\": 0x229d,\n    \"cire;\": 0x2257,\n    \"cirfnint;\": 0x2a10,\n    \"cirmid;\": 0x2aef,\n    \"cirscir;\": 0x29c2,\n    \"clubs;\": 0x2663,\n    \"clubsuit;\": 0x2663,\n    \"colon;\": 0x3a,\n    \"colone;\": 0x2254,\n    \"coloneq;\": 0x2254,\n    \"comma;\": 0x2c,\n    \"commat;\": 0x40,\n    \"comp;\": 0x2201,\n    \"compfn;\": 0x2218,\n    \"complement;\": 0x2201,\n    \"complexes;\": 0x2102,\n    \"cong;\": 0x2245,\n    \"congdot;\": 0x2a6d,\n    \"conint;\": 0x222e,\n    \"copf;\": [0xd835, 0xdd54],\n    \"coprod;\": 0x2210,\n    \"copy\": 0xa9,\n    \"copy;\": 0xa9,\n    \"copysr;\": 0x2117,\n    \"crarr;\": 0x21b5,\n    \"cross;\": 0x2717,\n    \"cscr;\": [0xd835, 0xdcb8],\n    \"csub;\": 0x2acf,\n    \"csube;\": 0x2ad1,\n    \"csup;\": 0x2ad0,\n    \"csupe;\": 0x2ad2,\n    \"ctdot;\": 0x22ef,\n    \"cudarrl;\": 0x2938,\n    \"cudarrr;\": 0x2935,\n    \"cuepr;\": 0x22de,\n    \"cuesc;\": 0x22df,\n    \"cularr;\": 0x21b6,\n    \"cularrp;\": 0x293d,\n    \"cup;\": 0x222a,\n    \"cupbrcap;\": 0x2a48,\n    \"cupcap;\": 0x2a46,\n    \"cupcup;\": 0x2a4a,\n    \"cupdot;\": 0x228d,\n    \"cupor;\": 0x2a45,\n    \"cups;\": [0x222a, 0xfe00],\n    \"curarr;\": 0x21b7,\n    \"curarrm;\": 0x293c,\n    \"curlyeqprec;\": 0x22de,\n    \"curlyeqsucc;\": 0x22df,\n    \"curlyvee;\": 0x22ce,\n    \"curlywedge;\": 0x22cf,\n    \"curren\": 0xa4,\n    \"curren;\": 0xa4,\n    \"curvearrowleft;\": 0x21b6,\n    \"curvearrowright;\": 0x21b7,\n    \"cuvee;\": 0x22ce,\n    \"cuwed;\": 0x22cf,\n    \"cwconint;\": 0x2232,\n    \"cwint;\": 0x2231,\n    \"cylcty;\": 0x232d,\n    \"dArr;\": 0x21d3,\n    \"dHar;\": 0x2965,\n    \"dagger;\": 0x2020,\n    \"daleth;\": 0x2138,\n    \"darr;\": 0x2193,\n    \"dash;\": 0x2010,\n    \"dashv;\": 0x22a3,\n    \"dbkarow;\": 0x290f,\n    \"dblac;\": 0x2dd,\n    \"dcaron;\": 0x10f,\n    \"dcy;\": 0x434,\n    \"dd;\": 0x2146,\n    \"ddagger;\": 0x2021,\n    \"ddarr;\": 0x21ca,\n    \"ddotseq;\": 0x2a77,\n    \"deg\": 0xb0,\n    \"deg;\": 0xb0,\n    \"delta;\": 0x3b4,\n    \"demptyv;\": 0x29b1,\n    \"dfisht;\": 0x297f,\n    \"dfr;\": [0xd835, 0xdd21],\n    \"dharl;\": 0x21c3,\n    \"dharr;\": 0x21c2,\n    \"diam;\": 0x22c4,\n    \"diamond;\": 0x22c4,\n    \"diamondsuit;\": 0x2666,\n    \"diams;\": 0x2666,\n    \"die;\": 0xa8,\n    \"digamma;\": 0x3dd,\n    \"disin;\": 0x22f2,\n    \"div;\": 0xf7,\n    \"divide\": 0xf7,\n    \"divide;\": 0xf7,\n    \"divideontimes;\": 0x22c7,\n    \"divonx;\": 0x22c7,\n    \"djcy;\": 0x452,\n    \"dlcorn;\": 0x231e,\n    \"dlcrop;\": 0x230d,\n    \"dollar;\": 0x24,\n    \"dopf;\": [0xd835, 0xdd55],\n    \"dot;\": 0x2d9,\n    \"doteq;\": 0x2250,\n    \"doteqdot;\": 0x2251,\n    \"dotminus;\": 0x2238,\n    \"dotplus;\": 0x2214,\n    \"dotsquare;\": 0x22a1,\n    \"doublebarwedge;\": 0x2306,\n    \"downarrow;\": 0x2193,\n    \"downdownarrows;\": 0x21ca,\n    \"downharpoonleft;\": 0x21c3,\n    \"downharpoonright;\": 0x21c2,\n    \"drbkarow;\": 0x2910,\n    \"drcorn;\": 0x231f,\n    \"drcrop;\": 0x230c,\n    \"dscr;\": [0xd835, 0xdcb9],\n    \"dscy;\": 0x455,\n    \"dsol;\": 0x29f6,\n    \"dstrok;\": 0x111,\n    \"dtdot;\": 0x22f1,\n    \"dtri;\": 0x25bf,\n    \"dtrif;\": 0x25be,\n    \"duarr;\": 0x21f5,\n    \"duhar;\": 0x296f,\n    \"dwangle;\": 0x29a6,\n    \"dzcy;\": 0x45f,\n    \"dzigrarr;\": 0x27ff,\n    \"eDDot;\": 0x2a77,\n    \"eDot;\": 0x2251,\n    \"eacute\": 0xe9,\n    \"eacute;\": 0xe9,\n    \"easter;\": 0x2a6e,\n    \"ecaron;\": 0x11b,\n    \"ecir;\": 0x2256,\n    \"ecirc\": 0xea,\n    \"ecirc;\": 0xea,\n    \"ecolon;\": 0x2255,\n    \"ecy;\": 0x44d,\n    \"edot;\": 0x117,\n    \"ee;\": 0x2147,\n    \"efDot;\": 0x2252,\n    \"efr;\": [0xd835, 0xdd22],\n    \"eg;\": 0x2a9a,\n    \"egrave\": 0xe8,\n    \"egrave;\": 0xe8,\n    \"egs;\": 0x2a96,\n    \"egsdot;\": 0x2a98,\n    \"el;\": 0x2a99,\n    \"elinters;\": 0x23e7,\n    \"ell;\": 0x2113,\n    \"els;\": 0x2a95,\n    \"elsdot;\": 0x2a97,\n    \"emacr;\": 0x113,\n    \"empty;\": 0x2205,\n    \"emptyset;\": 0x2205,\n    \"emptyv;\": 0x2205,\n    \"emsp13;\": 0x2004,\n    \"emsp14;\": 0x2005,\n    \"emsp;\": 0x2003,\n    \"eng;\": 0x14b,\n    \"ensp;\": 0x2002,\n    \"eogon;\": 0x119,\n    \"eopf;\": [0xd835, 0xdd56],\n    \"epar;\": 0x22d5,\n    \"eparsl;\": 0x29e3,\n    \"eplus;\": 0x2a71,\n    \"epsi;\": 0x3b5,\n    \"epsilon;\": 0x3b5,\n    \"epsiv;\": 0x3f5,\n    \"eqcirc;\": 0x2256,\n    \"eqcolon;\": 0x2255,\n    \"eqsim;\": 0x2242,\n    \"eqslantgtr;\": 0x2a96,\n    \"eqslantless;\": 0x2a95,\n    \"equals;\": 0x3d,\n    \"equest;\": 0x225f,\n    \"equiv;\": 0x2261,\n    \"equivDD;\": 0x2a78,\n    \"eqvparsl;\": 0x29e5,\n    \"erDot;\": 0x2253,\n    \"erarr;\": 0x2971,\n    \"escr;\": 0x212f,\n    \"esdot;\": 0x2250,\n    \"esim;\": 0x2242,\n    \"eta;\": 0x3b7,\n    \"eth\": 0xf0,\n    \"eth;\": 0xf0,\n    \"euml\": 0xeb,\n    \"euml;\": 0xeb,\n    \"euro;\": 0x20ac,\n    \"excl;\": 0x21,\n    \"exist;\": 0x2203,\n    \"expectation;\": 0x2130,\n    \"exponentiale;\": 0x2147,\n    \"fallingdotseq;\": 0x2252,\n    \"fcy;\": 0x444,\n    \"female;\": 0x2640,\n    \"ffilig;\": 0xfb03,\n    \"fflig;\": 0xfb00,\n    \"ffllig;\": 0xfb04,\n    \"ffr;\": [0xd835, 0xdd23],\n    \"filig;\": 0xfb01,\n    \"fjlig;\": [0x66, 0x6a],\n    \"flat;\": 0x266d,\n    \"fllig;\": 0xfb02,\n    \"fltns;\": 0x25b1,\n    \"fnof;\": 0x192,\n    \"fopf;\": [0xd835, 0xdd57],\n    \"forall;\": 0x2200,\n    \"fork;\": 0x22d4,\n    \"forkv;\": 0x2ad9,\n    \"fpartint;\": 0x2a0d,\n    \"frac12\": 0xbd,\n    \"frac12;\": 0xbd,\n    \"frac13;\": 0x2153,\n    \"frac14\": 0xbc,\n    \"frac14;\": 0xbc,\n    \"frac15;\": 0x2155,\n    \"frac16;\": 0x2159,\n    \"frac18;\": 0x215b,\n    \"frac23;\": 0x2154,\n    \"frac25;\": 0x2156,\n    \"frac34\": 0xbe,\n    \"frac34;\": 0xbe,\n    \"frac35;\": 0x2157,\n    \"frac38;\": 0x215c,\n    \"frac45;\": 0x2158,\n    \"frac56;\": 0x215a,\n    \"frac58;\": 0x215d,\n    \"frac78;\": 0x215e,\n    \"frasl;\": 0x2044,\n    \"frown;\": 0x2322,\n    \"fscr;\": [0xd835, 0xdcbb],\n    \"gE;\": 0x2267,\n    \"gEl;\": 0x2a8c,\n    \"gacute;\": 0x1f5,\n    \"gamma;\": 0x3b3,\n    \"gammad;\": 0x3dd,\n    \"gap;\": 0x2a86,\n    \"gbreve;\": 0x11f,\n    \"gcirc;\": 0x11d,\n    \"gcy;\": 0x433,\n    \"gdot;\": 0x121,\n    \"ge;\": 0x2265,\n    \"gel;\": 0x22db,\n    \"geq;\": 0x2265,\n    \"geqq;\": 0x2267,\n    \"geqslant;\": 0x2a7e,\n    \"ges;\": 0x2a7e,\n    \"gescc;\": 0x2aa9,\n    \"gesdot;\": 0x2a80,\n    \"gesdoto;\": 0x2a82,\n    \"gesdotol;\": 0x2a84,\n    \"gesl;\": [0x22db, 0xfe00],\n    \"gesles;\": 0x2a94,\n    \"gfr;\": [0xd835, 0xdd24],\n    \"gg;\": 0x226b,\n    \"ggg;\": 0x22d9,\n    \"gimel;\": 0x2137,\n    \"gjcy;\": 0x453,\n    \"gl;\": 0x2277,\n    \"glE;\": 0x2a92,\n    \"gla;\": 0x2aa5,\n    \"glj;\": 0x2aa4,\n    \"gnE;\": 0x2269,\n    \"gnap;\": 0x2a8a,\n    \"gnapprox;\": 0x2a8a,\n    \"gne;\": 0x2a88,\n    \"gneq;\": 0x2a88,\n    \"gneqq;\": 0x2269,\n    \"gnsim;\": 0x22e7,\n    \"gopf;\": [0xd835, 0xdd58],\n    \"grave;\": 0x60,\n    \"gscr;\": 0x210a,\n    \"gsim;\": 0x2273,\n    \"gsime;\": 0x2a8e,\n    \"gsiml;\": 0x2a90,\n    \"gt\": 0x3e,\n    \"gt;\": 0x3e,\n    \"gtcc;\": 0x2aa7,\n    \"gtcir;\": 0x2a7a,\n    \"gtdot;\": 0x22d7,\n    \"gtlPar;\": 0x2995,\n    \"gtquest;\": 0x2a7c,\n    \"gtrapprox;\": 0x2a86,\n    \"gtrarr;\": 0x2978,\n    \"gtrdot;\": 0x22d7,\n    \"gtreqless;\": 0x22db,\n    \"gtreqqless;\": 0x2a8c,\n    \"gtrless;\": 0x2277,\n    \"gtrsim;\": 0x2273,\n    \"gvertneqq;\": [0x2269, 0xfe00],\n    \"gvnE;\": [0x2269, 0xfe00],\n    \"hArr;\": 0x21d4,\n    \"hairsp;\": 0x200a,\n    \"half;\": 0xbd,\n    \"hamilt;\": 0x210b,\n    \"hardcy;\": 0x44a,\n    \"harr;\": 0x2194,\n    \"harrcir;\": 0x2948,\n    \"harrw;\": 0x21ad,\n    \"hbar;\": 0x210f,\n    \"hcirc;\": 0x125,\n    \"hearts;\": 0x2665,\n    \"heartsuit;\": 0x2665,\n    \"hellip;\": 0x2026,\n    \"hercon;\": 0x22b9,\n    \"hfr;\": [0xd835, 0xdd25],\n    \"hksearow;\": 0x2925,\n    \"hkswarow;\": 0x2926,\n    \"hoarr;\": 0x21ff,\n    \"homtht;\": 0x223b,\n    \"hookleftarrow;\": 0x21a9,\n    \"hookrightarrow;\": 0x21aa,\n    \"hopf;\": [0xd835, 0xdd59],\n    \"horbar;\": 0x2015,\n    \"hscr;\": [0xd835, 0xdcbd],\n    \"hslash;\": 0x210f,\n    \"hstrok;\": 0x127,\n    \"hybull;\": 0x2043,\n    \"hyphen;\": 0x2010,\n    \"iacute\": 0xed,\n    \"iacute;\": 0xed,\n    \"ic;\": 0x2063,\n    \"icirc\": 0xee,\n    \"icirc;\": 0xee,\n    \"icy;\": 0x438,\n    \"iecy;\": 0x435,\n    \"iexcl\": 0xa1,\n    \"iexcl;\": 0xa1,\n    \"iff;\": 0x21d4,\n    \"ifr;\": [0xd835, 0xdd26],\n    \"igrave\": 0xec,\n    \"igrave;\": 0xec,\n    \"ii;\": 0x2148,\n    \"iiiint;\": 0x2a0c,\n    \"iiint;\": 0x222d,\n    \"iinfin;\": 0x29dc,\n    \"iiota;\": 0x2129,\n    \"ijlig;\": 0x133,\n    \"imacr;\": 0x12b,\n    \"image;\": 0x2111,\n    \"imagline;\": 0x2110,\n    \"imagpart;\": 0x2111,\n    \"imath;\": 0x131,\n    \"imof;\": 0x22b7,\n    \"imped;\": 0x1b5,\n    \"in;\": 0x2208,\n    \"incare;\": 0x2105,\n    \"infin;\": 0x221e,\n    \"infintie;\": 0x29dd,\n    \"inodot;\": 0x131,\n    \"int;\": 0x222b,\n    \"intcal;\": 0x22ba,\n    \"integers;\": 0x2124,\n    \"intercal;\": 0x22ba,\n    \"intlarhk;\": 0x2a17,\n    \"intprod;\": 0x2a3c,\n    \"iocy;\": 0x451,\n    \"iogon;\": 0x12f,\n    \"iopf;\": [0xd835, 0xdd5a],\n    \"iota;\": 0x3b9,\n    \"iprod;\": 0x2a3c,\n    \"iquest\": 0xbf,\n    \"iquest;\": 0xbf,\n    \"iscr;\": [0xd835, 0xdcbe],\n    \"isin;\": 0x2208,\n    \"isinE;\": 0x22f9,\n    \"isindot;\": 0x22f5,\n    \"isins;\": 0x22f4,\n    \"isinsv;\": 0x22f3,\n    \"isinv;\": 0x2208,\n    \"it;\": 0x2062,\n    \"itilde;\": 0x129,\n    \"iukcy;\": 0x456,\n    \"iuml\": 0xef,\n    \"iuml;\": 0xef,\n    \"jcirc;\": 0x135,\n    \"jcy;\": 0x439,\n    \"jfr;\": [0xd835, 0xdd27],\n    \"jmath;\": 0x237,\n    \"jopf;\": [0xd835, 0xdd5b],\n    \"jscr;\": [0xd835, 0xdcbf],\n    \"jsercy;\": 0x458,\n    \"jukcy;\": 0x454,\n    \"kappa;\": 0x3ba,\n    \"kappav;\": 0x3f0,\n    \"kcedil;\": 0x137,\n    \"kcy;\": 0x43a,\n    \"kfr;\": [0xd835, 0xdd28],\n    \"kgreen;\": 0x138,\n    \"khcy;\": 0x445,\n    \"kjcy;\": 0x45c,\n    \"kopf;\": [0xd835, 0xdd5c],\n    \"kscr;\": [0xd835, 0xdcc0],\n    \"lAarr;\": 0x21da,\n    \"lArr;\": 0x21d0,\n    \"lAtail;\": 0x291b,\n    \"lBarr;\": 0x290e,\n    \"lE;\": 0x2266,\n    \"lEg;\": 0x2a8b,\n    \"lHar;\": 0x2962,\n    \"lacute;\": 0x13a,\n    \"laemptyv;\": 0x29b4,\n    \"lagran;\": 0x2112,\n    \"lambda;\": 0x3bb,\n    \"lang;\": 0x27e8,\n    \"langd;\": 0x2991,\n    \"langle;\": 0x27e8,\n    \"lap;\": 0x2a85,\n    \"laquo\": 0xab,\n    \"laquo;\": 0xab,\n    \"larr;\": 0x2190,\n    \"larrb;\": 0x21e4,\n    \"larrbfs;\": 0x291f,\n    \"larrfs;\": 0x291d,\n    \"larrhk;\": 0x21a9,\n    \"larrlp;\": 0x21ab,\n    \"larrpl;\": 0x2939,\n    \"larrsim;\": 0x2973,\n    \"larrtl;\": 0x21a2,\n    \"lat;\": 0x2aab,\n    \"latail;\": 0x2919,\n    \"late;\": 0x2aad,\n    \"lates;\": [0x2aad, 0xfe00],\n    \"lbarr;\": 0x290c,\n    \"lbbrk;\": 0x2772,\n    \"lbrace;\": 0x7b,\n    \"lbrack;\": 0x5b,\n    \"lbrke;\": 0x298b,\n    \"lbrksld;\": 0x298f,\n    \"lbrkslu;\": 0x298d,\n    \"lcaron;\": 0x13e,\n    \"lcedil;\": 0x13c,\n    \"lceil;\": 0x2308,\n    \"lcub;\": 0x7b,\n    \"lcy;\": 0x43b,\n    \"ldca;\": 0x2936,\n    \"ldquo;\": 0x201c,\n    \"ldquor;\": 0x201e,\n    \"ldrdhar;\": 0x2967,\n    \"ldrushar;\": 0x294b,\n    \"ldsh;\": 0x21b2,\n    \"le;\": 0x2264,\n    \"leftarrow;\": 0x2190,\n    \"leftarrowtail;\": 0x21a2,\n    \"leftharpoondown;\": 0x21bd,\n    \"leftharpoonup;\": 0x21bc,\n    \"leftleftarrows;\": 0x21c7,\n    \"leftrightarrow;\": 0x2194,\n    \"leftrightarrows;\": 0x21c6,\n    \"leftrightharpoons;\": 0x21cb,\n    \"leftrightsquigarrow;\": 0x21ad,\n    \"leftthreetimes;\": 0x22cb,\n    \"leg;\": 0x22da,\n    \"leq;\": 0x2264,\n    \"leqq;\": 0x2266,\n    \"leqslant;\": 0x2a7d,\n    \"les;\": 0x2a7d,\n    \"lescc;\": 0x2aa8,\n    \"lesdot;\": 0x2a7f,\n    \"lesdoto;\": 0x2a81,\n    \"lesdotor;\": 0x2a83,\n    \"lesg;\": [0x22da, 0xfe00],\n    \"lesges;\": 0x2a93,\n    \"lessapprox;\": 0x2a85,\n    \"lessdot;\": 0x22d6,\n    \"lesseqgtr;\": 0x22da,\n    \"lesseqqgtr;\": 0x2a8b,\n    \"lessgtr;\": 0x2276,\n    \"lesssim;\": 0x2272,\n    \"lfisht;\": 0x297c,\n    \"lfloor;\": 0x230a,\n    \"lfr;\": [0xd835, 0xdd29],\n    \"lg;\": 0x2276,\n    \"lgE;\": 0x2a91,\n    \"lhard;\": 0x21bd,\n    \"lharu;\": 0x21bc,\n    \"lharul;\": 0x296a,\n    \"lhblk;\": 0x2584,\n    \"ljcy;\": 0x459,\n    \"ll;\": 0x226a,\n    \"llarr;\": 0x21c7,\n    \"llcorner;\": 0x231e,\n    \"llhard;\": 0x296b,\n    \"lltri;\": 0x25fa,\n    \"lmidot;\": 0x140,\n    \"lmoust;\": 0x23b0,\n    \"lmoustache;\": 0x23b0,\n    \"lnE;\": 0x2268,\n    \"lnap;\": 0x2a89,\n    \"lnapprox;\": 0x2a89,\n    \"lne;\": 0x2a87,\n    \"lneq;\": 0x2a87,\n    \"lneqq;\": 0x2268,\n    \"lnsim;\": 0x22e6,\n    \"loang;\": 0x27ec,\n    \"loarr;\": 0x21fd,\n    \"lobrk;\": 0x27e6,\n    \"longleftarrow;\": 0x27f5,\n    \"longleftrightarrow;\": 0x27f7,\n    \"longmapsto;\": 0x27fc,\n    \"longrightarrow;\": 0x27f6,\n    \"looparrowleft;\": 0x21ab,\n    \"looparrowright;\": 0x21ac,\n    \"lopar;\": 0x2985,\n    \"lopf;\": [0xd835, 0xdd5d],\n    \"loplus;\": 0x2a2d,\n    \"lotimes;\": 0x2a34,\n    \"lowast;\": 0x2217,\n    \"lowbar;\": 0x5f,\n    \"loz;\": 0x25ca,\n    \"lozenge;\": 0x25ca,\n    \"lozf;\": 0x29eb,\n    \"lpar;\": 0x28,\n    \"lparlt;\": 0x2993,\n    \"lrarr;\": 0x21c6,\n    \"lrcorner;\": 0x231f,\n    \"lrhar;\": 0x21cb,\n    \"lrhard;\": 0x296d,\n    \"lrm;\": 0x200e,\n    \"lrtri;\": 0x22bf,\n    \"lsaquo;\": 0x2039,\n    \"lscr;\": [0xd835, 0xdcc1],\n    \"lsh;\": 0x21b0,\n    \"lsim;\": 0x2272,\n    \"lsime;\": 0x2a8d,\n    \"lsimg;\": 0x2a8f,\n    \"lsqb;\": 0x5b,\n    \"lsquo;\": 0x2018,\n    \"lsquor;\": 0x201a,\n    \"lstrok;\": 0x142,\n    \"lt\": 0x3c,\n    \"lt;\": 0x3c,\n    \"ltcc;\": 0x2aa6,\n    \"ltcir;\": 0x2a79,\n    \"ltdot;\": 0x22d6,\n    \"lthree;\": 0x22cb,\n    \"ltimes;\": 0x22c9,\n    \"ltlarr;\": 0x2976,\n    \"ltquest;\": 0x2a7b,\n    \"ltrPar;\": 0x2996,\n    \"ltri;\": 0x25c3,\n    \"ltrie;\": 0x22b4,\n    \"ltrif;\": 0x25c2,\n    \"lurdshar;\": 0x294a,\n    \"luruhar;\": 0x2966,\n    \"lvertneqq;\": [0x2268, 0xfe00],\n    \"lvnE;\": [0x2268, 0xfe00],\n    \"mDDot;\": 0x223a,\n    \"macr\": 0xaf,\n    \"macr;\": 0xaf,\n    \"male;\": 0x2642,\n    \"malt;\": 0x2720,\n    \"maltese;\": 0x2720,\n    \"map;\": 0x21a6,\n    \"mapsto;\": 0x21a6,\n    \"mapstodown;\": 0x21a7,\n    \"mapstoleft;\": 0x21a4,\n    \"mapstoup;\": 0x21a5,\n    \"marker;\": 0x25ae,\n    \"mcomma;\": 0x2a29,\n    \"mcy;\": 0x43c,\n    \"mdash;\": 0x2014,\n    \"measuredangle;\": 0x2221,\n    \"mfr;\": [0xd835, 0xdd2a],\n    \"mho;\": 0x2127,\n    \"micro\": 0xb5,\n    \"micro;\": 0xb5,\n    \"mid;\": 0x2223,\n    \"midast;\": 0x2a,\n    \"midcir;\": 0x2af0,\n    \"middot\": 0xb7,\n    \"middot;\": 0xb7,\n    \"minus;\": 0x2212,\n    \"minusb;\": 0x229f,\n    \"minusd;\": 0x2238,\n    \"minusdu;\": 0x2a2a,\n    \"mlcp;\": 0x2adb,\n    \"mldr;\": 0x2026,\n    \"mnplus;\": 0x2213,\n    \"models;\": 0x22a7,\n    \"mopf;\": [0xd835, 0xdd5e],\n    \"mp;\": 0x2213,\n    \"mscr;\": [0xd835, 0xdcc2],\n    \"mstpos;\": 0x223e,\n    \"mu;\": 0x3bc,\n    \"multimap;\": 0x22b8,\n    \"mumap;\": 0x22b8,\n    \"nGg;\": [0x22d9, 0x338],\n    \"nGt;\": [0x226b, 0x20d2],\n    \"nGtv;\": [0x226b, 0x338],\n    \"nLeftarrow;\": 0x21cd,\n    \"nLeftrightarrow;\": 0x21ce,\n    \"nLl;\": [0x22d8, 0x338],\n    \"nLt;\": [0x226a, 0x20d2],\n    \"nLtv;\": [0x226a, 0x338],\n    \"nRightarrow;\": 0x21cf,\n    \"nVDash;\": 0x22af,\n    \"nVdash;\": 0x22ae,\n    \"nabla;\": 0x2207,\n    \"nacute;\": 0x144,\n    \"nang;\": [0x2220, 0x20d2],\n    \"nap;\": 0x2249,\n    \"napE;\": [0x2a70, 0x338],\n    \"napid;\": [0x224b, 0x338],\n    \"napos;\": 0x149,\n    \"napprox;\": 0x2249,\n    \"natur;\": 0x266e,\n    \"natural;\": 0x266e,\n    \"naturals;\": 0x2115,\n    \"nbsp\": 0xa0,\n    \"nbsp;\": 0xa0,\n    \"nbump;\": [0x224e, 0x338],\n    \"nbumpe;\": [0x224f, 0x338],\n    \"ncap;\": 0x2a43,\n    \"ncaron;\": 0x148,\n    \"ncedil;\": 0x146,\n    \"ncong;\": 0x2247,\n    \"ncongdot;\": [0x2a6d, 0x338],\n    \"ncup;\": 0x2a42,\n    \"ncy;\": 0x43d,\n    \"ndash;\": 0x2013,\n    \"ne;\": 0x2260,\n    \"neArr;\": 0x21d7,\n    \"nearhk;\": 0x2924,\n    \"nearr;\": 0x2197,\n    \"nearrow;\": 0x2197,\n    \"nedot;\": [0x2250, 0x338],\n    \"nequiv;\": 0x2262,\n    \"nesear;\": 0x2928,\n    \"nesim;\": [0x2242, 0x338],\n    \"nexist;\": 0x2204,\n    \"nexists;\": 0x2204,\n    \"nfr;\": [0xd835, 0xdd2b],\n    \"ngE;\": [0x2267, 0x338],\n    \"nge;\": 0x2271,\n    \"ngeq;\": 0x2271,\n    \"ngeqq;\": [0x2267, 0x338],\n    \"ngeqslant;\": [0x2a7e, 0x338],\n    \"nges;\": [0x2a7e, 0x338],\n    \"ngsim;\": 0x2275,\n    \"ngt;\": 0x226f,\n    \"ngtr;\": 0x226f,\n    \"nhArr;\": 0x21ce,\n    \"nharr;\": 0x21ae,\n    \"nhpar;\": 0x2af2,\n    \"ni;\": 0x220b,\n    \"nis;\": 0x22fc,\n    \"nisd;\": 0x22fa,\n    \"niv;\": 0x220b,\n    \"njcy;\": 0x45a,\n    \"nlArr;\": 0x21cd,\n    \"nlE;\": [0x2266, 0x338],\n    \"nlarr;\": 0x219a,\n    \"nldr;\": 0x2025,\n    \"nle;\": 0x2270,\n    \"nleftarrow;\": 0x219a,\n    \"nleftrightarrow;\": 0x21ae,\n    \"nleq;\": 0x2270,\n    \"nleqq;\": [0x2266, 0x338],\n    \"nleqslant;\": [0x2a7d, 0x338],\n    \"nles;\": [0x2a7d, 0x338],\n    \"nless;\": 0x226e,\n    \"nlsim;\": 0x2274,\n    \"nlt;\": 0x226e,\n    \"nltri;\": 0x22ea,\n    \"nltrie;\": 0x22ec,\n    \"nmid;\": 0x2224,\n    \"nopf;\": [0xd835, 0xdd5f],\n    \"not\": 0xac,\n    \"not;\": 0xac,\n    \"notin;\": 0x2209,\n    \"notinE;\": [0x22f9, 0x338],\n    \"notindot;\": [0x22f5, 0x338],\n    \"notinva;\": 0x2209,\n    \"notinvb;\": 0x22f7,\n    \"notinvc;\": 0x22f6,\n    \"notni;\": 0x220c,\n    \"notniva;\": 0x220c,\n    \"notnivb;\": 0x22fe,\n    \"notnivc;\": 0x22fd,\n    \"npar;\": 0x2226,\n    \"nparallel;\": 0x2226,\n    \"nparsl;\": [0x2afd, 0x20e5],\n    \"npart;\": [0x2202, 0x338],\n    \"npolint;\": 0x2a14,\n    \"npr;\": 0x2280,\n    \"nprcue;\": 0x22e0,\n    \"npre;\": [0x2aaf, 0x338],\n    \"nprec;\": 0x2280,\n    \"npreceq;\": [0x2aaf, 0x338],\n    \"nrArr;\": 0x21cf,\n    \"nrarr;\": 0x219b,\n    \"nrarrc;\": [0x2933, 0x338],\n    \"nrarrw;\": [0x219d, 0x338],\n    \"nrightarrow;\": 0x219b,\n    \"nrtri;\": 0x22eb,\n    \"nrtrie;\": 0x22ed,\n    \"nsc;\": 0x2281,\n    \"nsccue;\": 0x22e1,\n    \"nsce;\": [0x2ab0, 0x338],\n    \"nscr;\": [0xd835, 0xdcc3],\n    \"nshortmid;\": 0x2224,\n    \"nshortparallel;\": 0x2226,\n    \"nsim;\": 0x2241,\n    \"nsime;\": 0x2244,\n    \"nsimeq;\": 0x2244,\n    \"nsmid;\": 0x2224,\n    \"nspar;\": 0x2226,\n    \"nsqsube;\": 0x22e2,\n    \"nsqsupe;\": 0x22e3,\n    \"nsub;\": 0x2284,\n    \"nsubE;\": [0x2ac5, 0x338],\n    \"nsube;\": 0x2288,\n    \"nsubset;\": [0x2282, 0x20d2],\n    \"nsubseteq;\": 0x2288,\n    \"nsubseteqq;\": [0x2ac5, 0x338],\n    \"nsucc;\": 0x2281,\n    \"nsucceq;\": [0x2ab0, 0x338],\n    \"nsup;\": 0x2285,\n    \"nsupE;\": [0x2ac6, 0x338],\n    \"nsupe;\": 0x2289,\n    \"nsupset;\": [0x2283, 0x20d2],\n    \"nsupseteq;\": 0x2289,\n    \"nsupseteqq;\": [0x2ac6, 0x338],\n    \"ntgl;\": 0x2279,\n    \"ntilde\": 0xf1,\n    \"ntilde;\": 0xf1,\n    \"ntlg;\": 0x2278,\n    \"ntriangleleft;\": 0x22ea,\n    \"ntrianglelefteq;\": 0x22ec,\n    \"ntriangleright;\": 0x22eb,\n    \"ntrianglerighteq;\": 0x22ed,\n    \"nu;\": 0x3bd,\n    \"num;\": 0x23,\n    \"numero;\": 0x2116,\n    \"numsp;\": 0x2007,\n    \"nvDash;\": 0x22ad,\n    \"nvHarr;\": 0x2904,\n    \"nvap;\": [0x224d, 0x20d2],\n    \"nvdash;\": 0x22ac,\n    \"nvge;\": [0x2265, 0x20d2],\n    \"nvgt;\": [0x3e, 0x20d2],\n    \"nvinfin;\": 0x29de,\n    \"nvlArr;\": 0x2902,\n    \"nvle;\": [0x2264, 0x20d2],\n    \"nvlt;\": [0x3c, 0x20d2],\n    \"nvltrie;\": [0x22b4, 0x20d2],\n    \"nvrArr;\": 0x2903,\n    \"nvrtrie;\": [0x22b5, 0x20d2],\n    \"nvsim;\": [0x223c, 0x20d2],\n    \"nwArr;\": 0x21d6,\n    \"nwarhk;\": 0x2923,\n    \"nwarr;\": 0x2196,\n    \"nwarrow;\": 0x2196,\n    \"nwnear;\": 0x2927,\n    \"oS;\": 0x24c8,\n    \"oacute\": 0xf3,\n    \"oacute;\": 0xf3,\n    \"oast;\": 0x229b,\n    \"ocir;\": 0x229a,\n    \"ocirc\": 0xf4,\n    \"ocirc;\": 0xf4,\n    \"ocy;\": 0x43e,\n    \"odash;\": 0x229d,\n    \"odblac;\": 0x151,\n    \"odiv;\": 0x2a38,\n    \"odot;\": 0x2299,\n    \"odsold;\": 0x29bc,\n    \"oelig;\": 0x153,\n    \"ofcir;\": 0x29bf,\n    \"ofr;\": [0xd835, 0xdd2c],\n    \"ogon;\": 0x2db,\n    \"ograve\": 0xf2,\n    \"ograve;\": 0xf2,\n    \"ogt;\": 0x29c1,\n    \"ohbar;\": 0x29b5,\n    \"ohm;\": 0x3a9,\n    \"oint;\": 0x222e,\n    \"olarr;\": 0x21ba,\n    \"olcir;\": 0x29be,\n    \"olcross;\": 0x29bb,\n    \"oline;\": 0x203e,\n    \"olt;\": 0x29c0,\n    \"omacr;\": 0x14d,\n    \"omega;\": 0x3c9,\n    \"omicron;\": 0x3bf,\n    \"omid;\": 0x29b6,\n    \"ominus;\": 0x2296,\n    \"oopf;\": [0xd835, 0xdd60],\n    \"opar;\": 0x29b7,\n    \"operp;\": 0x29b9,\n    \"oplus;\": 0x2295,\n    \"or;\": 0x2228,\n    \"orarr;\": 0x21bb,\n    \"ord;\": 0x2a5d,\n    \"order;\": 0x2134,\n    \"orderof;\": 0x2134,\n    \"ordf\": 0xaa,\n    \"ordf;\": 0xaa,\n    \"ordm\": 0xba,\n    \"ordm;\": 0xba,\n    \"origof;\": 0x22b6,\n    \"oror;\": 0x2a56,\n    \"orslope;\": 0x2a57,\n    \"orv;\": 0x2a5b,\n    \"oscr;\": 0x2134,\n    \"oslash\": 0xf8,\n    \"oslash;\": 0xf8,\n    \"osol;\": 0x2298,\n    \"otilde\": 0xf5,\n    \"otilde;\": 0xf5,\n    \"otimes;\": 0x2297,\n    \"otimesas;\": 0x2a36,\n    \"ouml\": 0xf6,\n    \"ouml;\": 0xf6,\n    \"ovbar;\": 0x233d,\n    \"par;\": 0x2225,\n    \"para\": 0xb6,\n    \"para;\": 0xb6,\n    \"parallel;\": 0x2225,\n    \"parsim;\": 0x2af3,\n    \"parsl;\": 0x2afd,\n    \"part;\": 0x2202,\n    \"pcy;\": 0x43f,\n    \"percnt;\": 0x25,\n    \"period;\": 0x2e,\n    \"permil;\": 0x2030,\n    \"perp;\": 0x22a5,\n    \"pertenk;\": 0x2031,\n    \"pfr;\": [0xd835, 0xdd2d],\n    \"phi;\": 0x3c6,\n    \"phiv;\": 0x3d5,\n    \"phmmat;\": 0x2133,\n    \"phone;\": 0x260e,\n    \"pi;\": 0x3c0,\n    \"pitchfork;\": 0x22d4,\n    \"piv;\": 0x3d6,\n    \"planck;\": 0x210f,\n    \"planckh;\": 0x210e,\n    \"plankv;\": 0x210f,\n    \"plus;\": 0x2b,\n    \"plusacir;\": 0x2a23,\n    \"plusb;\": 0x229e,\n    \"pluscir;\": 0x2a22,\n    \"plusdo;\": 0x2214,\n    \"plusdu;\": 0x2a25,\n    \"pluse;\": 0x2a72,\n    \"plusmn\": 0xb1,\n    \"plusmn;\": 0xb1,\n    \"plussim;\": 0x2a26,\n    \"plustwo;\": 0x2a27,\n    \"pm;\": 0xb1,\n    \"pointint;\": 0x2a15,\n    \"popf;\": [0xd835, 0xdd61],\n    \"pound\": 0xa3,\n    \"pound;\": 0xa3,\n    \"pr;\": 0x227a,\n    \"prE;\": 0x2ab3,\n    \"prap;\": 0x2ab7,\n    \"prcue;\": 0x227c,\n    \"pre;\": 0x2aaf,\n    \"prec;\": 0x227a,\n    \"precapprox;\": 0x2ab7,\n    \"preccurlyeq;\": 0x227c,\n    \"preceq;\": 0x2aaf,\n    \"precnapprox;\": 0x2ab9,\n    \"precneqq;\": 0x2ab5,\n    \"precnsim;\": 0x22e8,\n    \"precsim;\": 0x227e,\n    \"prime;\": 0x2032,\n    \"primes;\": 0x2119,\n    \"prnE;\": 0x2ab5,\n    \"prnap;\": 0x2ab9,\n    \"prnsim;\": 0x22e8,\n    \"prod;\": 0x220f,\n    \"profalar;\": 0x232e,\n    \"profline;\": 0x2312,\n    \"profsurf;\": 0x2313,\n    \"prop;\": 0x221d,\n    \"propto;\": 0x221d,\n    \"prsim;\": 0x227e,\n    \"prurel;\": 0x22b0,\n    \"pscr;\": [0xd835, 0xdcc5],\n    \"psi;\": 0x3c8,\n    \"puncsp;\": 0x2008,\n    \"qfr;\": [0xd835, 0xdd2e],\n    \"qint;\": 0x2a0c,\n    \"qopf;\": [0xd835, 0xdd62],\n    \"qprime;\": 0x2057,\n    \"qscr;\": [0xd835, 0xdcc6],\n    \"quaternions;\": 0x210d,\n    \"quatint;\": 0x2a16,\n    \"quest;\": 0x3f,\n    \"questeq;\": 0x225f,\n    \"quot\": 0x22,\n    \"quot;\": 0x22,\n    \"rAarr;\": 0x21db,\n    \"rArr;\": 0x21d2,\n    \"rAtail;\": 0x291c,\n    \"rBarr;\": 0x290f,\n    \"rHar;\": 0x2964,\n    \"race;\": [0x223d, 0x331],\n    \"racute;\": 0x155,\n    \"radic;\": 0x221a,\n    \"raemptyv;\": 0x29b3,\n    \"rang;\": 0x27e9,\n    \"rangd;\": 0x2992,\n    \"range;\": 0x29a5,\n    \"rangle;\": 0x27e9,\n    \"raquo\": 0xbb,\n    \"raquo;\": 0xbb,\n    \"rarr;\": 0x2192,\n    \"rarrap;\": 0x2975,\n    \"rarrb;\": 0x21e5,\n    \"rarrbfs;\": 0x2920,\n    \"rarrc;\": 0x2933,\n    \"rarrfs;\": 0x291e,\n    \"rarrhk;\": 0x21aa,\n    \"rarrlp;\": 0x21ac,\n    \"rarrpl;\": 0x2945,\n    \"rarrsim;\": 0x2974,\n    \"rarrtl;\": 0x21a3,\n    \"rarrw;\": 0x219d,\n    \"ratail;\": 0x291a,\n    \"ratio;\": 0x2236,\n    \"rationals;\": 0x211a,\n    \"rbarr;\": 0x290d,\n    \"rbbrk;\": 0x2773,\n    \"rbrace;\": 0x7d,\n    \"rbrack;\": 0x5d,\n    \"rbrke;\": 0x298c,\n    \"rbrksld;\": 0x298e,\n    \"rbrkslu;\": 0x2990,\n    \"rcaron;\": 0x159,\n    \"rcedil;\": 0x157,\n    \"rceil;\": 0x2309,\n    \"rcub;\": 0x7d,\n    \"rcy;\": 0x440,\n    \"rdca;\": 0x2937,\n    \"rdldhar;\": 0x2969,\n    \"rdquo;\": 0x201d,\n    \"rdquor;\": 0x201d,\n    \"rdsh;\": 0x21b3,\n    \"real;\": 0x211c,\n    \"realine;\": 0x211b,\n    \"realpart;\": 0x211c,\n    \"reals;\": 0x211d,\n    \"rect;\": 0x25ad,\n    \"reg\": 0xae,\n    \"reg;\": 0xae,\n    \"rfisht;\": 0x297d,\n    \"rfloor;\": 0x230b,\n    \"rfr;\": [0xd835, 0xdd2f],\n    \"rhard;\": 0x21c1,\n    \"rharu;\": 0x21c0,\n    \"rharul;\": 0x296c,\n    \"rho;\": 0x3c1,\n    \"rhov;\": 0x3f1,\n    \"rightarrow;\": 0x2192,\n    \"rightarrowtail;\": 0x21a3,\n    \"rightharpoondown;\": 0x21c1,\n    \"rightharpoonup;\": 0x21c0,\n    \"rightleftarrows;\": 0x21c4,\n    \"rightleftharpoons;\": 0x21cc,\n    \"rightrightarrows;\": 0x21c9,\n    \"rightsquigarrow;\": 0x219d,\n    \"rightthreetimes;\": 0x22cc,\n    \"ring;\": 0x2da,\n    \"risingdotseq;\": 0x2253,\n    \"rlarr;\": 0x21c4,\n    \"rlhar;\": 0x21cc,\n    \"rlm;\": 0x200f,\n    \"rmoust;\": 0x23b1,\n    \"rmoustache;\": 0x23b1,\n    \"rnmid;\": 0x2aee,\n    \"roang;\": 0x27ed,\n    \"roarr;\": 0x21fe,\n    \"robrk;\": 0x27e7,\n    \"ropar;\": 0x2986,\n    \"ropf;\": [0xd835, 0xdd63],\n    \"roplus;\": 0x2a2e,\n    \"rotimes;\": 0x2a35,\n    \"rpar;\": 0x29,\n    \"rpargt;\": 0x2994,\n    \"rppolint;\": 0x2a12,\n    \"rrarr;\": 0x21c9,\n    \"rsaquo;\": 0x203a,\n    \"rscr;\": [0xd835, 0xdcc7],\n    \"rsh;\": 0x21b1,\n    \"rsqb;\": 0x5d,\n    \"rsquo;\": 0x2019,\n    \"rsquor;\": 0x2019,\n    \"rthree;\": 0x22cc,\n    \"rtimes;\": 0x22ca,\n    \"rtri;\": 0x25b9,\n    \"rtrie;\": 0x22b5,\n    \"rtrif;\": 0x25b8,\n    \"rtriltri;\": 0x29ce,\n    \"ruluhar;\": 0x2968,\n    \"rx;\": 0x211e,\n    \"sacute;\": 0x15b,\n    \"sbquo;\": 0x201a,\n    \"sc;\": 0x227b,\n    \"scE;\": 0x2ab4,\n    \"scap;\": 0x2ab8,\n    \"scaron;\": 0x161,\n    \"sccue;\": 0x227d,\n    \"sce;\": 0x2ab0,\n    \"scedil;\": 0x15f,\n    \"scirc;\": 0x15d,\n    \"scnE;\": 0x2ab6,\n    \"scnap;\": 0x2aba,\n    \"scnsim;\": 0x22e9,\n    \"scpolint;\": 0x2a13,\n    \"scsim;\": 0x227f,\n    \"scy;\": 0x441,\n    \"sdot;\": 0x22c5,\n    \"sdotb;\": 0x22a1,\n    \"sdote;\": 0x2a66,\n    \"seArr;\": 0x21d8,\n    \"searhk;\": 0x2925,\n    \"searr;\": 0x2198,\n    \"searrow;\": 0x2198,\n    \"sect\": 0xa7,\n    \"sect;\": 0xa7,\n    \"semi;\": 0x3b,\n    \"seswar;\": 0x2929,\n    \"setminus;\": 0x2216,\n    \"setmn;\": 0x2216,\n    \"sext;\": 0x2736,\n    \"sfr;\": [0xd835, 0xdd30],\n    \"sfrown;\": 0x2322,\n    \"sharp;\": 0x266f,\n    \"shchcy;\": 0x449,\n    \"shcy;\": 0x448,\n    \"shortmid;\": 0x2223,\n    \"shortparallel;\": 0x2225,\n    \"shy\": 0xad,\n    \"shy;\": 0xad,\n    \"sigma;\": 0x3c3,\n    \"sigmaf;\": 0x3c2,\n    \"sigmav;\": 0x3c2,\n    \"sim;\": 0x223c,\n    \"simdot;\": 0x2a6a,\n    \"sime;\": 0x2243,\n    \"simeq;\": 0x2243,\n    \"simg;\": 0x2a9e,\n    \"simgE;\": 0x2aa0,\n    \"siml;\": 0x2a9d,\n    \"simlE;\": 0x2a9f,\n    \"simne;\": 0x2246,\n    \"simplus;\": 0x2a24,\n    \"simrarr;\": 0x2972,\n    \"slarr;\": 0x2190,\n    \"smallsetminus;\": 0x2216,\n    \"smashp;\": 0x2a33,\n    \"smeparsl;\": 0x29e4,\n    \"smid;\": 0x2223,\n    \"smile;\": 0x2323,\n    \"smt;\": 0x2aaa,\n    \"smte;\": 0x2aac,\n    \"smtes;\": [0x2aac, 0xfe00],\n    \"softcy;\": 0x44c,\n    \"sol;\": 0x2f,\n    \"solb;\": 0x29c4,\n    \"solbar;\": 0x233f,\n    \"sopf;\": [0xd835, 0xdd64],\n    \"spades;\": 0x2660,\n    \"spadesuit;\": 0x2660,\n    \"spar;\": 0x2225,\n    \"sqcap;\": 0x2293,\n    \"sqcaps;\": [0x2293, 0xfe00],\n    \"sqcup;\": 0x2294,\n    \"sqcups;\": [0x2294, 0xfe00],\n    \"sqsub;\": 0x228f,\n    \"sqsube;\": 0x2291,\n    \"sqsubset;\": 0x228f,\n    \"sqsubseteq;\": 0x2291,\n    \"sqsup;\": 0x2290,\n    \"sqsupe;\": 0x2292,\n    \"sqsupset;\": 0x2290,\n    \"sqsupseteq;\": 0x2292,\n    \"squ;\": 0x25a1,\n    \"square;\": 0x25a1,\n    \"squarf;\": 0x25aa,\n    \"squf;\": 0x25aa,\n    \"srarr;\": 0x2192,\n    \"sscr;\": [0xd835, 0xdcc8],\n    \"ssetmn;\": 0x2216,\n    \"ssmile;\": 0x2323,\n    \"sstarf;\": 0x22c6,\n    \"star;\": 0x2606,\n    \"starf;\": 0x2605,\n    \"straightepsilon;\": 0x3f5,\n    \"straightphi;\": 0x3d5,\n    \"strns;\": 0xaf,\n    \"sub;\": 0x2282,\n    \"subE;\": 0x2ac5,\n    \"subdot;\": 0x2abd,\n    \"sube;\": 0x2286,\n    \"subedot;\": 0x2ac3,\n    \"submult;\": 0x2ac1,\n    \"subnE;\": 0x2acb,\n    \"subne;\": 0x228a,\n    \"subplus;\": 0x2abf,\n    \"subrarr;\": 0x2979,\n    \"subset;\": 0x2282,\n    \"subseteq;\": 0x2286,\n    \"subseteqq;\": 0x2ac5,\n    \"subsetneq;\": 0x228a,\n    \"subsetneqq;\": 0x2acb,\n    \"subsim;\": 0x2ac7,\n    \"subsub;\": 0x2ad5,\n    \"subsup;\": 0x2ad3,\n    \"succ;\": 0x227b,\n    \"succapprox;\": 0x2ab8,\n    \"succcurlyeq;\": 0x227d,\n    \"succeq;\": 0x2ab0,\n    \"succnapprox;\": 0x2aba,\n    \"succneqq;\": 0x2ab6,\n    \"succnsim;\": 0x22e9,\n    \"succsim;\": 0x227f,\n    \"sum;\": 0x2211,\n    \"sung;\": 0x266a,\n    \"sup1\": 0xb9,\n    \"sup1;\": 0xb9,\n    \"sup2\": 0xb2,\n    \"sup2;\": 0xb2,\n    \"sup3\": 0xb3,\n    \"sup3;\": 0xb3,\n    \"sup;\": 0x2283,\n    \"supE;\": 0x2ac6,\n    \"supdot;\": 0x2abe,\n    \"supdsub;\": 0x2ad8,\n    \"supe;\": 0x2287,\n    \"supedot;\": 0x2ac4,\n    \"suphsol;\": 0x27c9,\n    \"suphsub;\": 0x2ad7,\n    \"suplarr;\": 0x297b,\n    \"supmult;\": 0x2ac2,\n    \"supnE;\": 0x2acc,\n    \"supne;\": 0x228b,\n    \"supplus;\": 0x2ac0,\n    \"supset;\": 0x2283,\n    \"supseteq;\": 0x2287,\n    \"supseteqq;\": 0x2ac6,\n    \"supsetneq;\": 0x228b,\n    \"supsetneqq;\": 0x2acc,\n    \"supsim;\": 0x2ac8,\n    \"supsub;\": 0x2ad4,\n    \"supsup;\": 0x2ad6,\n    \"swArr;\": 0x21d9,\n    \"swarhk;\": 0x2926,\n    \"swarr;\": 0x2199,\n    \"swarrow;\": 0x2199,\n    \"swnwar;\": 0x292a,\n    \"szlig\": 0xdf,\n    \"szlig;\": 0xdf,\n    \"target;\": 0x2316,\n    \"tau;\": 0x3c4,\n    \"tbrk;\": 0x23b4,\n    \"tcaron;\": 0x165,\n    \"tcedil;\": 0x163,\n    \"tcy;\": 0x442,\n    \"tdot;\": 0x20db,\n    \"telrec;\": 0x2315,\n    \"tfr;\": [0xd835, 0xdd31],\n    \"there4;\": 0x2234,\n    \"therefore;\": 0x2234,\n    \"theta;\": 0x3b8,\n    \"thetasym;\": 0x3d1,\n    \"thetav;\": 0x3d1,\n    \"thickapprox;\": 0x2248,\n    \"thicksim;\": 0x223c,\n    \"thinsp;\": 0x2009,\n    \"thkap;\": 0x2248,\n    \"thksim;\": 0x223c,\n    \"thorn\": 0xfe,\n    \"thorn;\": 0xfe,\n    \"tilde;\": 0x2dc,\n    \"times\": 0xd7,\n    \"times;\": 0xd7,\n    \"timesb;\": 0x22a0,\n    \"timesbar;\": 0x2a31,\n    \"timesd;\": 0x2a30,\n    \"tint;\": 0x222d,\n    \"toea;\": 0x2928,\n    \"top;\": 0x22a4,\n    \"topbot;\": 0x2336,\n    \"topcir;\": 0x2af1,\n    \"topf;\": [0xd835, 0xdd65],\n    \"topfork;\": 0x2ada,\n    \"tosa;\": 0x2929,\n    \"tprime;\": 0x2034,\n    \"trade;\": 0x2122,\n    \"triangle;\": 0x25b5,\n    \"triangledown;\": 0x25bf,\n    \"triangleleft;\": 0x25c3,\n    \"trianglelefteq;\": 0x22b4,\n    \"triangleq;\": 0x225c,\n    \"triangleright;\": 0x25b9,\n    \"trianglerighteq;\": 0x22b5,\n    \"tridot;\": 0x25ec,\n    \"trie;\": 0x225c,\n    \"triminus;\": 0x2a3a,\n    \"triplus;\": 0x2a39,\n    \"trisb;\": 0x29cd,\n    \"tritime;\": 0x2a3b,\n    \"trpezium;\": 0x23e2,\n    \"tscr;\": [0xd835, 0xdcc9],\n    \"tscy;\": 0x446,\n    \"tshcy;\": 0x45b,\n    \"tstrok;\": 0x167,\n    \"twixt;\": 0x226c,\n    \"twoheadleftarrow;\": 0x219e,\n    \"twoheadrightarrow;\": 0x21a0,\n    \"uArr;\": 0x21d1,\n    \"uHar;\": 0x2963,\n    \"uacute\": 0xfa,\n    \"uacute;\": 0xfa,\n    \"uarr;\": 0x2191,\n    \"ubrcy;\": 0x45e,\n    \"ubreve;\": 0x16d,\n    \"ucirc\": 0xfb,\n    \"ucirc;\": 0xfb,\n    \"ucy;\": 0x443,\n    \"udarr;\": 0x21c5,\n    \"udblac;\": 0x171,\n    \"udhar;\": 0x296e,\n    \"ufisht;\": 0x297e,\n    \"ufr;\": [0xd835, 0xdd32],\n    \"ugrave\": 0xf9,\n    \"ugrave;\": 0xf9,\n    \"uharl;\": 0x21bf,\n    \"uharr;\": 0x21be,\n    \"uhblk;\": 0x2580,\n    \"ulcorn;\": 0x231c,\n    \"ulcorner;\": 0x231c,\n    \"ulcrop;\": 0x230f,\n    \"ultri;\": 0x25f8,\n    \"umacr;\": 0x16b,\n    \"uml\": 0xa8,\n    \"uml;\": 0xa8,\n    \"uogon;\": 0x173,\n    \"uopf;\": [0xd835, 0xdd66],\n    \"uparrow;\": 0x2191,\n    \"updownarrow;\": 0x2195,\n    \"upharpoonleft;\": 0x21bf,\n    \"upharpoonright;\": 0x21be,\n    \"uplus;\": 0x228e,\n    \"upsi;\": 0x3c5,\n    \"upsih;\": 0x3d2,\n    \"upsilon;\": 0x3c5,\n    \"upuparrows;\": 0x21c8,\n    \"urcorn;\": 0x231d,\n    \"urcorner;\": 0x231d,\n    \"urcrop;\": 0x230e,\n    \"uring;\": 0x16f,\n    \"urtri;\": 0x25f9,\n    \"uscr;\": [0xd835, 0xdcca],\n    \"utdot;\": 0x22f0,\n    \"utilde;\": 0x169,\n    \"utri;\": 0x25b5,\n    \"utrif;\": 0x25b4,\n    \"uuarr;\": 0x21c8,\n    \"uuml\": 0xfc,\n    \"uuml;\": 0xfc,\n    \"uwangle;\": 0x29a7,\n    \"vArr;\": 0x21d5,\n    \"vBar;\": 0x2ae8,\n    \"vBarv;\": 0x2ae9,\n    \"vDash;\": 0x22a8,\n    \"vangrt;\": 0x299c,\n    \"varepsilon;\": 0x3f5,\n    \"varkappa;\": 0x3f0,\n    \"varnothing;\": 0x2205,\n    \"varphi;\": 0x3d5,\n    \"varpi;\": 0x3d6,\n    \"varpropto;\": 0x221d,\n    \"varr;\": 0x2195,\n    \"varrho;\": 0x3f1,\n    \"varsigma;\": 0x3c2,\n    \"varsubsetneq;\": [0x228a, 0xfe00],\n    \"varsubsetneqq;\": [0x2acb, 0xfe00],\n    \"varsupsetneq;\": [0x228b, 0xfe00],\n    \"varsupsetneqq;\": [0x2acc, 0xfe00],\n    \"vartheta;\": 0x3d1,\n    \"vartriangleleft;\": 0x22b2,\n    \"vartriangleright;\": 0x22b3,\n    \"vcy;\": 0x432,\n    \"vdash;\": 0x22a2,\n    \"vee;\": 0x2228,\n    \"veebar;\": 0x22bb,\n    \"veeeq;\": 0x225a,\n    \"vellip;\": 0x22ee,\n    \"verbar;\": 0x7c,\n    \"vert;\": 0x7c,\n    \"vfr;\": [0xd835, 0xdd33],\n    \"vltri;\": 0x22b2,\n    \"vnsub;\": [0x2282, 0x20d2],\n    \"vnsup;\": [0x2283, 0x20d2],\n    \"vopf;\": [0xd835, 0xdd67],\n    \"vprop;\": 0x221d,\n    \"vrtri;\": 0x22b3,\n    \"vscr;\": [0xd835, 0xdccb],\n    \"vsubnE;\": [0x2acb, 0xfe00],\n    \"vsubne;\": [0x228a, 0xfe00],\n    \"vsupnE;\": [0x2acc, 0xfe00],\n    \"vsupne;\": [0x228b, 0xfe00],\n    \"vzigzag;\": 0x299a,\n    \"wcirc;\": 0x175,\n    \"wedbar;\": 0x2a5f,\n    \"wedge;\": 0x2227,\n    \"wedgeq;\": 0x2259,\n    \"weierp;\": 0x2118,\n    \"wfr;\": [0xd835, 0xdd34],\n    \"wopf;\": [0xd835, 0xdd68],\n    \"wp;\": 0x2118,\n    \"wr;\": 0x2240,\n    \"wreath;\": 0x2240,\n    \"wscr;\": [0xd835, 0xdccc],\n    \"xcap;\": 0x22c2,\n    \"xcirc;\": 0x25ef,\n    \"xcup;\": 0x22c3,\n    \"xdtri;\": 0x25bd,\n    \"xfr;\": [0xd835, 0xdd35],\n    \"xhArr;\": 0x27fa,\n    \"xharr;\": 0x27f7,\n    \"xi;\": 0x3be,\n    \"xlArr;\": 0x27f8,\n    \"xlarr;\": 0x27f5,\n    \"xmap;\": 0x27fc,\n    \"xnis;\": 0x22fb,\n    \"xodot;\": 0x2a00,\n    \"xopf;\": [0xd835, 0xdd69],\n    \"xoplus;\": 0x2a01,\n    \"xotime;\": 0x2a02,\n    \"xrArr;\": 0x27f9,\n    \"xrarr;\": 0x27f6,\n    \"xscr;\": [0xd835, 0xdccd],\n    \"xsqcup;\": 0x2a06,\n    \"xuplus;\": 0x2a04,\n    \"xutri;\": 0x25b3,\n    \"xvee;\": 0x22c1,\n    \"xwedge;\": 0x22c0,\n    \"yacute\": 0xfd,\n    \"yacute;\": 0xfd,\n    \"yacy;\": 0x44f,\n    \"ycirc;\": 0x177,\n    \"ycy;\": 0x44b,\n    \"yen\": 0xa5,\n    \"yen;\": 0xa5,\n    \"yfr;\": [0xd835, 0xdd36],\n    \"yicy;\": 0x457,\n    \"yopf;\": [0xd835, 0xdd6a],\n    \"yscr;\": [0xd835, 0xdcce],\n    \"yucy;\": 0x44e,\n    \"yuml\": 0xff,\n    \"yuml;\": 0xff,\n    \"zacute;\": 0x17a,\n    \"zcaron;\": 0x17e,\n    \"zcy;\": 0x437,\n    \"zdot;\": 0x17c,\n    \"zeetrf;\": 0x2128,\n    \"zeta;\": 0x3b6,\n    \"zfr;\": [0xd835, 0xdd37],\n    \"zhcy;\": 0x436,\n    \"zigrarr;\": 0x21dd,\n    \"zopf;\": [0xd835, 0xdd6b],\n    \"zscr;\": [0xd835, 0xdccf],\n    \"zwj;\": 0x200d,\n    \"zwnj;\": 0x200c\n  };\n  /*\n   * This regexp is generated with test/tools/update-entities.js\n   * It will always match at least one character -- but note that there\n   * are no entities whose names are a single character long.\n   */\n  var NAMEDCHARREF = /(A(?:Elig;?|MP;?|acute;?|breve;|c(?:irc;?|y;)|fr;|grave;?|lpha;|macr;|nd;|o(?:gon;|pf;)|pplyFunction;|ring;?|s(?:cr;|sign;)|tilde;?|uml;?)|B(?:a(?:ckslash;|r(?:v;|wed;))|cy;|e(?:cause;|rnoullis;|ta;)|fr;|opf;|reve;|scr;|umpeq;)|C(?:Hcy;|OPY;?|a(?:cute;|p(?:;|italDifferentialD;)|yleys;)|c(?:aron;|edil;?|irc;|onint;)|dot;|e(?:dilla;|nterDot;)|fr;|hi;|ircle(?:Dot;|Minus;|Plus;|Times;)|lo(?:ckwiseContourIntegral;|seCurly(?:DoubleQuote;|Quote;))|o(?:lon(?:;|e;)|n(?:gruent;|int;|tourIntegral;)|p(?:f;|roduct;)|unterClockwiseContourIntegral;)|ross;|scr;|up(?:;|Cap;))|D(?:D(?:;|otrahd;)|Jcy;|Scy;|Zcy;|a(?:gger;|rr;|shv;)|c(?:aron;|y;)|el(?:;|ta;)|fr;|i(?:a(?:critical(?:Acute;|Do(?:t;|ubleAcute;)|Grave;|Tilde;)|mond;)|fferentialD;)|o(?:pf;|t(?:;|Dot;|Equal;)|uble(?:ContourIntegral;|Do(?:t;|wnArrow;)|L(?:eft(?:Arrow;|RightArrow;|Tee;)|ong(?:Left(?:Arrow;|RightArrow;)|RightArrow;))|Right(?:Arrow;|Tee;)|Up(?:Arrow;|DownArrow;)|VerticalBar;)|wn(?:Arrow(?:;|Bar;|UpArrow;)|Breve;|Left(?:RightVector;|TeeVector;|Vector(?:;|Bar;))|Right(?:TeeVector;|Vector(?:;|Bar;))|Tee(?:;|Arrow;)|arrow;))|s(?:cr;|trok;))|E(?:NG;|TH;?|acute;?|c(?:aron;|irc;?|y;)|dot;|fr;|grave;?|lement;|m(?:acr;|pty(?:SmallSquare;|VerySmallSquare;))|o(?:gon;|pf;)|psilon;|qu(?:al(?:;|Tilde;)|ilibrium;)|s(?:cr;|im;)|ta;|uml;?|x(?:ists;|ponentialE;))|F(?:cy;|fr;|illed(?:SmallSquare;|VerySmallSquare;)|o(?:pf;|rAll;|uriertrf;)|scr;)|G(?:Jcy;|T;?|amma(?:;|d;)|breve;|c(?:edil;|irc;|y;)|dot;|fr;|g;|opf;|reater(?:Equal(?:;|Less;)|FullEqual;|Greater;|Less;|SlantEqual;|Tilde;)|scr;|t;)|H(?:ARDcy;|a(?:cek;|t;)|circ;|fr;|ilbertSpace;|o(?:pf;|rizontalLine;)|s(?:cr;|trok;)|ump(?:DownHump;|Equal;))|I(?:Ecy;|Jlig;|Ocy;|acute;?|c(?:irc;?|y;)|dot;|fr;|grave;?|m(?:;|a(?:cr;|ginaryI;)|plies;)|n(?:t(?:;|e(?:gral;|rsection;))|visible(?:Comma;|Times;))|o(?:gon;|pf;|ta;)|scr;|tilde;|u(?:kcy;|ml;?))|J(?:c(?:irc;|y;)|fr;|opf;|s(?:cr;|ercy;)|ukcy;)|K(?:Hcy;|Jcy;|appa;|c(?:edil;|y;)|fr;|opf;|scr;)|L(?:Jcy;|T;?|a(?:cute;|mbda;|ng;|placetrf;|rr;)|c(?:aron;|edil;|y;)|e(?:ft(?:A(?:ngleBracket;|rrow(?:;|Bar;|RightArrow;))|Ceiling;|Do(?:ubleBracket;|wn(?:TeeVector;|Vector(?:;|Bar;)))|Floor;|Right(?:Arrow;|Vector;)|T(?:ee(?:;|Arrow;|Vector;)|riangle(?:;|Bar;|Equal;))|Up(?:DownVector;|TeeVector;|Vector(?:;|Bar;))|Vector(?:;|Bar;)|arrow;|rightarrow;)|ss(?:EqualGreater;|FullEqual;|Greater;|Less;|SlantEqual;|Tilde;))|fr;|l(?:;|eftarrow;)|midot;|o(?:ng(?:Left(?:Arrow;|RightArrow;)|RightArrow;|left(?:arrow;|rightarrow;)|rightarrow;)|pf;|wer(?:LeftArrow;|RightArrow;))|s(?:cr;|h;|trok;)|t;)|M(?:ap;|cy;|e(?:diumSpace;|llintrf;)|fr;|inusPlus;|opf;|scr;|u;)|N(?:Jcy;|acute;|c(?:aron;|edil;|y;)|e(?:gative(?:MediumSpace;|Thi(?:ckSpace;|nSpace;)|VeryThinSpace;)|sted(?:GreaterGreater;|LessLess;)|wLine;)|fr;|o(?:Break;|nBreakingSpace;|pf;|t(?:;|C(?:ongruent;|upCap;)|DoubleVerticalBar;|E(?:lement;|qual(?:;|Tilde;)|xists;)|Greater(?:;|Equal;|FullEqual;|Greater;|Less;|SlantEqual;|Tilde;)|Hump(?:DownHump;|Equal;)|Le(?:ftTriangle(?:;|Bar;|Equal;)|ss(?:;|Equal;|Greater;|Less;|SlantEqual;|Tilde;))|Nested(?:GreaterGreater;|LessLess;)|Precedes(?:;|Equal;|SlantEqual;)|R(?:everseElement;|ightTriangle(?:;|Bar;|Equal;))|S(?:quareSu(?:bset(?:;|Equal;)|perset(?:;|Equal;))|u(?:bset(?:;|Equal;)|cceeds(?:;|Equal;|SlantEqual;|Tilde;)|perset(?:;|Equal;)))|Tilde(?:;|Equal;|FullEqual;|Tilde;)|VerticalBar;))|scr;|tilde;?|u;)|O(?:Elig;|acute;?|c(?:irc;?|y;)|dblac;|fr;|grave;?|m(?:acr;|ega;|icron;)|opf;|penCurly(?:DoubleQuote;|Quote;)|r;|s(?:cr;|lash;?)|ti(?:lde;?|mes;)|uml;?|ver(?:B(?:ar;|rac(?:e;|ket;))|Parenthesis;))|P(?:artialD;|cy;|fr;|hi;|i;|lusMinus;|o(?:incareplane;|pf;)|r(?:;|ecedes(?:;|Equal;|SlantEqual;|Tilde;)|ime;|o(?:duct;|portion(?:;|al;)))|s(?:cr;|i;))|Q(?:UOT;?|fr;|opf;|scr;)|R(?:Barr;|EG;?|a(?:cute;|ng;|rr(?:;|tl;))|c(?:aron;|edil;|y;)|e(?:;|verse(?:E(?:lement;|quilibrium;)|UpEquilibrium;))|fr;|ho;|ight(?:A(?:ngleBracket;|rrow(?:;|Bar;|LeftArrow;))|Ceiling;|Do(?:ubleBracket;|wn(?:TeeVector;|Vector(?:;|Bar;)))|Floor;|T(?:ee(?:;|Arrow;|Vector;)|riangle(?:;|Bar;|Equal;))|Up(?:DownVector;|TeeVector;|Vector(?:;|Bar;))|Vector(?:;|Bar;)|arrow;)|o(?:pf;|undImplies;)|rightarrow;|s(?:cr;|h;)|uleDelayed;)|S(?:H(?:CHcy;|cy;)|OFTcy;|acute;|c(?:;|aron;|edil;|irc;|y;)|fr;|hort(?:DownArrow;|LeftArrow;|RightArrow;|UpArrow;)|igma;|mallCircle;|opf;|q(?:rt;|uare(?:;|Intersection;|Su(?:bset(?:;|Equal;)|perset(?:;|Equal;))|Union;))|scr;|tar;|u(?:b(?:;|set(?:;|Equal;))|c(?:ceeds(?:;|Equal;|SlantEqual;|Tilde;)|hThat;)|m;|p(?:;|erset(?:;|Equal;)|set;)))|T(?:HORN;?|RADE;|S(?:Hcy;|cy;)|a(?:b;|u;)|c(?:aron;|edil;|y;)|fr;|h(?:e(?:refore;|ta;)|i(?:ckSpace;|nSpace;))|ilde(?:;|Equal;|FullEqual;|Tilde;)|opf;|ripleDot;|s(?:cr;|trok;))|U(?:a(?:cute;?|rr(?:;|ocir;))|br(?:cy;|eve;)|c(?:irc;?|y;)|dblac;|fr;|grave;?|macr;|n(?:der(?:B(?:ar;|rac(?:e;|ket;))|Parenthesis;)|ion(?:;|Plus;))|o(?:gon;|pf;)|p(?:Arrow(?:;|Bar;|DownArrow;)|DownArrow;|Equilibrium;|Tee(?:;|Arrow;)|arrow;|downarrow;|per(?:LeftArrow;|RightArrow;)|si(?:;|lon;))|ring;|scr;|tilde;|uml;?)|V(?:Dash;|bar;|cy;|dash(?:;|l;)|e(?:e;|r(?:bar;|t(?:;|ical(?:Bar;|Line;|Separator;|Tilde;))|yThinSpace;))|fr;|opf;|scr;|vdash;)|W(?:circ;|edge;|fr;|opf;|scr;)|X(?:fr;|i;|opf;|scr;)|Y(?:Acy;|Icy;|Ucy;|acute;?|c(?:irc;|y;)|fr;|opf;|scr;|uml;)|Z(?:Hcy;|acute;|c(?:aron;|y;)|dot;|e(?:roWidthSpace;|ta;)|fr;|opf;|scr;)|a(?:acute;?|breve;|c(?:;|E;|d;|irc;?|ute;?|y;)|elig;?|f(?:;|r;)|grave;?|l(?:e(?:fsym;|ph;)|pha;)|m(?:a(?:cr;|lg;)|p;?)|n(?:d(?:;|and;|d;|slope;|v;)|g(?:;|e;|le;|msd(?:;|a(?:a;|b;|c;|d;|e;|f;|g;|h;))|rt(?:;|vb(?:;|d;))|s(?:ph;|t;)|zarr;))|o(?:gon;|pf;)|p(?:;|E;|acir;|e;|id;|os;|prox(?:;|eq;))|ring;?|s(?:cr;|t;|ymp(?:;|eq;))|tilde;?|uml;?|w(?:conint;|int;))|b(?:Not;|a(?:ck(?:cong;|epsilon;|prime;|sim(?:;|eq;))|r(?:vee;|wed(?:;|ge;)))|brk(?:;|tbrk;)|c(?:ong;|y;)|dquo;|e(?:caus(?:;|e;)|mptyv;|psi;|rnou;|t(?:a;|h;|ween;))|fr;|ig(?:c(?:ap;|irc;|up;)|o(?:dot;|plus;|times;)|s(?:qcup;|tar;)|triangle(?:down;|up;)|uplus;|vee;|wedge;)|karow;|l(?:a(?:ck(?:lozenge;|square;|triangle(?:;|down;|left;|right;))|nk;)|k(?:1(?:2;|4;)|34;)|ock;)|n(?:e(?:;|quiv;)|ot;)|o(?:pf;|t(?:;|tom;)|wtie;|x(?:D(?:L;|R;|l;|r;)|H(?:;|D;|U;|d;|u;)|U(?:L;|R;|l;|r;)|V(?:;|H;|L;|R;|h;|l;|r;)|box;|d(?:L;|R;|l;|r;)|h(?:;|D;|U;|d;|u;)|minus;|plus;|times;|u(?:L;|R;|l;|r;)|v(?:;|H;|L;|R;|h;|l;|r;)))|prime;|r(?:eve;|vbar;?)|s(?:cr;|emi;|im(?:;|e;)|ol(?:;|b;|hsub;))|u(?:ll(?:;|et;)|mp(?:;|E;|e(?:;|q;))))|c(?:a(?:cute;|p(?:;|and;|brcup;|c(?:ap;|up;)|dot;|s;)|r(?:et;|on;))|c(?:a(?:ps;|ron;)|edil;?|irc;|ups(?:;|sm;))|dot;|e(?:dil;?|mptyv;|nt(?:;|erdot;|))|fr;|h(?:cy;|eck(?:;|mark;)|i;)|ir(?:;|E;|c(?:;|eq;|le(?:arrow(?:left;|right;)|d(?:R;|S;|ast;|circ;|dash;)))|e;|fnint;|mid;|scir;)|lubs(?:;|uit;)|o(?:lon(?:;|e(?:;|q;))|m(?:ma(?:;|t;)|p(?:;|fn;|le(?:ment;|xes;)))|n(?:g(?:;|dot;)|int;)|p(?:f;|rod;|y(?:;|sr;|)))|r(?:arr;|oss;)|s(?:cr;|u(?:b(?:;|e;)|p(?:;|e;)))|tdot;|u(?:darr(?:l;|r;)|e(?:pr;|sc;)|larr(?:;|p;)|p(?:;|brcap;|c(?:ap;|up;)|dot;|or;|s;)|r(?:arr(?:;|m;)|ly(?:eq(?:prec;|succ;)|vee;|wedge;)|ren;?|vearrow(?:left;|right;))|vee;|wed;)|w(?:conint;|int;)|ylcty;)|d(?:Arr;|Har;|a(?:gger;|leth;|rr;|sh(?:;|v;))|b(?:karow;|lac;)|c(?:aron;|y;)|d(?:;|a(?:gger;|rr;)|otseq;)|e(?:g;?|lta;|mptyv;)|f(?:isht;|r;)|har(?:l;|r;)|i(?:am(?:;|ond(?:;|suit;)|s;)|e;|gamma;|sin;|v(?:;|ide(?:;|ontimes;|)|onx;))|jcy;|lc(?:orn;|rop;)|o(?:llar;|pf;|t(?:;|eq(?:;|dot;)|minus;|plus;|square;)|ublebarwedge;|wn(?:arrow;|downarrows;|harpoon(?:left;|right;)))|r(?:bkarow;|c(?:orn;|rop;))|s(?:c(?:r;|y;)|ol;|trok;)|t(?:dot;|ri(?:;|f;))|u(?:arr;|har;)|wangle;|z(?:cy;|igrarr;))|e(?:D(?:Dot;|ot;)|a(?:cute;?|ster;)|c(?:aron;|ir(?:;|c;?)|olon;|y;)|dot;|e;|f(?:Dot;|r;)|g(?:;|rave;?|s(?:;|dot;))|l(?:;|inters;|l;|s(?:;|dot;))|m(?:acr;|pty(?:;|set;|v;)|sp(?:1(?:3;|4;)|;))|n(?:g;|sp;)|o(?:gon;|pf;)|p(?:ar(?:;|sl;)|lus;|si(?:;|lon;|v;))|q(?:c(?:irc;|olon;)|s(?:im;|lant(?:gtr;|less;))|u(?:als;|est;|iv(?:;|DD;))|vparsl;)|r(?:Dot;|arr;)|s(?:cr;|dot;|im;)|t(?:a;|h;?)|u(?:ml;?|ro;)|x(?:cl;|ist;|p(?:ectation;|onentiale;)))|f(?:allingdotseq;|cy;|emale;|f(?:ilig;|l(?:ig;|lig;)|r;)|ilig;|jlig;|l(?:at;|lig;|tns;)|nof;|o(?:pf;|r(?:all;|k(?:;|v;)))|partint;|r(?:a(?:c(?:1(?:2;?|3;|4;?|5;|6;|8;)|2(?:3;|5;)|3(?:4;?|5;|8;)|45;|5(?:6;|8;)|78;)|sl;)|own;)|scr;)|g(?:E(?:;|l;)|a(?:cute;|mma(?:;|d;)|p;)|breve;|c(?:irc;|y;)|dot;|e(?:;|l;|q(?:;|q;|slant;)|s(?:;|cc;|dot(?:;|o(?:;|l;))|l(?:;|es;)))|fr;|g(?:;|g;)|imel;|jcy;|l(?:;|E;|a;|j;)|n(?:E;|ap(?:;|prox;)|e(?:;|q(?:;|q;))|sim;)|opf;|rave;|s(?:cr;|im(?:;|e;|l;))|t(?:;|c(?:c;|ir;)|dot;|lPar;|quest;|r(?:a(?:pprox;|rr;)|dot;|eq(?:less;|qless;)|less;|sim;)|)|v(?:ertneqq;|nE;))|h(?:Arr;|a(?:irsp;|lf;|milt;|r(?:dcy;|r(?:;|cir;|w;)))|bar;|circ;|e(?:arts(?:;|uit;)|llip;|rcon;)|fr;|ks(?:earow;|warow;)|o(?:arr;|mtht;|ok(?:leftarrow;|rightarrow;)|pf;|rbar;)|s(?:cr;|lash;|trok;)|y(?:bull;|phen;))|i(?:acute;?|c(?:;|irc;?|y;)|e(?:cy;|xcl;?)|f(?:f;|r;)|grave;?|i(?:;|i(?:int;|nt;)|nfin;|ota;)|jlig;|m(?:a(?:cr;|g(?:e;|line;|part;)|th;)|of;|ped;)|n(?:;|care;|fin(?:;|tie;)|odot;|t(?:;|cal;|e(?:gers;|rcal;)|larhk;|prod;))|o(?:cy;|gon;|pf;|ta;)|prod;|quest;?|s(?:cr;|in(?:;|E;|dot;|s(?:;|v;)|v;))|t(?:;|ilde;)|u(?:kcy;|ml;?))|j(?:c(?:irc;|y;)|fr;|math;|opf;|s(?:cr;|ercy;)|ukcy;)|k(?:appa(?:;|v;)|c(?:edil;|y;)|fr;|green;|hcy;|jcy;|opf;|scr;)|l(?:A(?:arr;|rr;|tail;)|Barr;|E(?:;|g;)|Har;|a(?:cute;|emptyv;|gran;|mbda;|ng(?:;|d;|le;)|p;|quo;?|rr(?:;|b(?:;|fs;)|fs;|hk;|lp;|pl;|sim;|tl;)|t(?:;|ail;|e(?:;|s;)))|b(?:arr;|brk;|r(?:ac(?:e;|k;)|k(?:e;|sl(?:d;|u;))))|c(?:aron;|e(?:dil;|il;)|ub;|y;)|d(?:ca;|quo(?:;|r;)|r(?:dhar;|ushar;)|sh;)|e(?:;|ft(?:arrow(?:;|tail;)|harpoon(?:down;|up;)|leftarrows;|right(?:arrow(?:;|s;)|harpoons;|squigarrow;)|threetimes;)|g;|q(?:;|q;|slant;)|s(?:;|cc;|dot(?:;|o(?:;|r;))|g(?:;|es;)|s(?:approx;|dot;|eq(?:gtr;|qgtr;)|gtr;|sim;)))|f(?:isht;|loor;|r;)|g(?:;|E;)|h(?:ar(?:d;|u(?:;|l;))|blk;)|jcy;|l(?:;|arr;|corner;|hard;|tri;)|m(?:idot;|oust(?:;|ache;))|n(?:E;|ap(?:;|prox;)|e(?:;|q(?:;|q;))|sim;)|o(?:a(?:ng;|rr;)|brk;|ng(?:left(?:arrow;|rightarrow;)|mapsto;|rightarrow;)|oparrow(?:left;|right;)|p(?:ar;|f;|lus;)|times;|w(?:ast;|bar;)|z(?:;|enge;|f;))|par(?:;|lt;)|r(?:arr;|corner;|har(?:;|d;)|m;|tri;)|s(?:aquo;|cr;|h;|im(?:;|e;|g;)|q(?:b;|uo(?:;|r;))|trok;)|t(?:;|c(?:c;|ir;)|dot;|hree;|imes;|larr;|quest;|r(?:Par;|i(?:;|e;|f;))|)|ur(?:dshar;|uhar;)|v(?:ertneqq;|nE;))|m(?:DDot;|a(?:cr;?|l(?:e;|t(?:;|ese;))|p(?:;|sto(?:;|down;|left;|up;))|rker;)|c(?:omma;|y;)|dash;|easuredangle;|fr;|ho;|i(?:cro;?|d(?:;|ast;|cir;|dot;?)|nus(?:;|b;|d(?:;|u;)))|l(?:cp;|dr;)|nplus;|o(?:dels;|pf;)|p;|s(?:cr;|tpos;)|u(?:;|ltimap;|map;))|n(?:G(?:g;|t(?:;|v;))|L(?:eft(?:arrow;|rightarrow;)|l;|t(?:;|v;))|Rightarrow;|V(?:Dash;|dash;)|a(?:bla;|cute;|ng;|p(?:;|E;|id;|os;|prox;)|tur(?:;|al(?:;|s;)))|b(?:sp;?|ump(?:;|e;))|c(?:a(?:p;|ron;)|edil;|ong(?:;|dot;)|up;|y;)|dash;|e(?:;|Arr;|ar(?:hk;|r(?:;|ow;))|dot;|quiv;|s(?:ear;|im;)|xist(?:;|s;))|fr;|g(?:E;|e(?:;|q(?:;|q;|slant;)|s;)|sim;|t(?:;|r;))|h(?:Arr;|arr;|par;)|i(?:;|s(?:;|d;)|v;)|jcy;|l(?:Arr;|E;|arr;|dr;|e(?:;|ft(?:arrow;|rightarrow;)|q(?:;|q;|slant;)|s(?:;|s;))|sim;|t(?:;|ri(?:;|e;)))|mid;|o(?:pf;|t(?:;|in(?:;|E;|dot;|v(?:a;|b;|c;))|ni(?:;|v(?:a;|b;|c;))|))|p(?:ar(?:;|allel;|sl;|t;)|olint;|r(?:;|cue;|e(?:;|c(?:;|eq;))))|r(?:Arr;|arr(?:;|c;|w;)|ightarrow;|tri(?:;|e;))|s(?:c(?:;|cue;|e;|r;)|hort(?:mid;|parallel;)|im(?:;|e(?:;|q;))|mid;|par;|qsu(?:be;|pe;)|u(?:b(?:;|E;|e;|set(?:;|eq(?:;|q;)))|cc(?:;|eq;)|p(?:;|E;|e;|set(?:;|eq(?:;|q;)))))|t(?:gl;|ilde;?|lg;|riangle(?:left(?:;|eq;)|right(?:;|eq;)))|u(?:;|m(?:;|ero;|sp;))|v(?:Dash;|Harr;|ap;|dash;|g(?:e;|t;)|infin;|l(?:Arr;|e;|t(?:;|rie;))|r(?:Arr;|trie;)|sim;)|w(?:Arr;|ar(?:hk;|r(?:;|ow;))|near;))|o(?:S;|a(?:cute;?|st;)|c(?:ir(?:;|c;?)|y;)|d(?:ash;|blac;|iv;|ot;|sold;)|elig;|f(?:cir;|r;)|g(?:on;|rave;?|t;)|h(?:bar;|m;)|int;|l(?:arr;|c(?:ir;|ross;)|ine;|t;)|m(?:acr;|ega;|i(?:cron;|d;|nus;))|opf;|p(?:ar;|erp;|lus;)|r(?:;|arr;|d(?:;|er(?:;|of;)|f;?|m;?)|igof;|or;|slope;|v;)|s(?:cr;|lash;?|ol;)|ti(?:lde;?|mes(?:;|as;))|uml;?|vbar;)|p(?:ar(?:;|a(?:;|llel;|)|s(?:im;|l;)|t;)|cy;|er(?:cnt;|iod;|mil;|p;|tenk;)|fr;|h(?:i(?:;|v;)|mmat;|one;)|i(?:;|tchfork;|v;)|l(?:an(?:ck(?:;|h;)|kv;)|us(?:;|acir;|b;|cir;|d(?:o;|u;)|e;|mn;?|sim;|two;))|m;|o(?:intint;|pf;|und;?)|r(?:;|E;|ap;|cue;|e(?:;|c(?:;|approx;|curlyeq;|eq;|n(?:approx;|eqq;|sim;)|sim;))|ime(?:;|s;)|n(?:E;|ap;|sim;)|o(?:d;|f(?:alar;|line;|surf;)|p(?:;|to;))|sim;|urel;)|s(?:cr;|i;)|uncsp;)|q(?:fr;|int;|opf;|prime;|scr;|u(?:at(?:ernions;|int;)|est(?:;|eq;)|ot;?))|r(?:A(?:arr;|rr;|tail;)|Barr;|Har;|a(?:c(?:e;|ute;)|dic;|emptyv;|ng(?:;|d;|e;|le;)|quo;?|rr(?:;|ap;|b(?:;|fs;)|c;|fs;|hk;|lp;|pl;|sim;|tl;|w;)|t(?:ail;|io(?:;|nals;)))|b(?:arr;|brk;|r(?:ac(?:e;|k;)|k(?:e;|sl(?:d;|u;))))|c(?:aron;|e(?:dil;|il;)|ub;|y;)|d(?:ca;|ldhar;|quo(?:;|r;)|sh;)|e(?:al(?:;|ine;|part;|s;)|ct;|g;?)|f(?:isht;|loor;|r;)|h(?:ar(?:d;|u(?:;|l;))|o(?:;|v;))|i(?:ght(?:arrow(?:;|tail;)|harpoon(?:down;|up;)|left(?:arrows;|harpoons;)|rightarrows;|squigarrow;|threetimes;)|ng;|singdotseq;)|l(?:arr;|har;|m;)|moust(?:;|ache;)|nmid;|o(?:a(?:ng;|rr;)|brk;|p(?:ar;|f;|lus;)|times;)|p(?:ar(?:;|gt;)|polint;)|rarr;|s(?:aquo;|cr;|h;|q(?:b;|uo(?:;|r;)))|t(?:hree;|imes;|ri(?:;|e;|f;|ltri;))|uluhar;|x;)|s(?:acute;|bquo;|c(?:;|E;|a(?:p;|ron;)|cue;|e(?:;|dil;)|irc;|n(?:E;|ap;|sim;)|polint;|sim;|y;)|dot(?:;|b;|e;)|e(?:Arr;|ar(?:hk;|r(?:;|ow;))|ct;?|mi;|swar;|tm(?:inus;|n;)|xt;)|fr(?:;|own;)|h(?:arp;|c(?:hcy;|y;)|ort(?:mid;|parallel;)|y;?)|i(?:gma(?:;|f;|v;)|m(?:;|dot;|e(?:;|q;)|g(?:;|E;)|l(?:;|E;)|ne;|plus;|rarr;))|larr;|m(?:a(?:llsetminus;|shp;)|eparsl;|i(?:d;|le;)|t(?:;|e(?:;|s;)))|o(?:ftcy;|l(?:;|b(?:;|ar;))|pf;)|pa(?:des(?:;|uit;)|r;)|q(?:c(?:ap(?:;|s;)|up(?:;|s;))|su(?:b(?:;|e;|set(?:;|eq;))|p(?:;|e;|set(?:;|eq;)))|u(?:;|ar(?:e;|f;)|f;))|rarr;|s(?:cr;|etmn;|mile;|tarf;)|t(?:ar(?:;|f;)|r(?:aight(?:epsilon;|phi;)|ns;))|u(?:b(?:;|E;|dot;|e(?:;|dot;)|mult;|n(?:E;|e;)|plus;|rarr;|s(?:et(?:;|eq(?:;|q;)|neq(?:;|q;))|im;|u(?:b;|p;)))|cc(?:;|approx;|curlyeq;|eq;|n(?:approx;|eqq;|sim;)|sim;)|m;|ng;|p(?:1;?|2;?|3;?|;|E;|d(?:ot;|sub;)|e(?:;|dot;)|hs(?:ol;|ub;)|larr;|mult;|n(?:E;|e;)|plus;|s(?:et(?:;|eq(?:;|q;)|neq(?:;|q;))|im;|u(?:b;|p;))))|w(?:Arr;|ar(?:hk;|r(?:;|ow;))|nwar;)|zlig;?)|t(?:a(?:rget;|u;)|brk;|c(?:aron;|edil;|y;)|dot;|elrec;|fr;|h(?:e(?:re(?:4;|fore;)|ta(?:;|sym;|v;))|i(?:ck(?:approx;|sim;)|nsp;)|k(?:ap;|sim;)|orn;?)|i(?:lde;|mes(?:;|b(?:;|ar;)|d;|)|nt;)|o(?:ea;|p(?:;|bot;|cir;|f(?:;|ork;))|sa;)|prime;|r(?:ade;|i(?:angle(?:;|down;|left(?:;|eq;)|q;|right(?:;|eq;))|dot;|e;|minus;|plus;|sb;|time;)|pezium;)|s(?:c(?:r;|y;)|hcy;|trok;)|w(?:ixt;|ohead(?:leftarrow;|rightarrow;)))|u(?:Arr;|Har;|a(?:cute;?|rr;)|br(?:cy;|eve;)|c(?:irc;?|y;)|d(?:arr;|blac;|har;)|f(?:isht;|r;)|grave;?|h(?:ar(?:l;|r;)|blk;)|l(?:c(?:orn(?:;|er;)|rop;)|tri;)|m(?:acr;|l;?)|o(?:gon;|pf;)|p(?:arrow;|downarrow;|harpoon(?:left;|right;)|lus;|si(?:;|h;|lon;)|uparrows;)|r(?:c(?:orn(?:;|er;)|rop;)|ing;|tri;)|scr;|t(?:dot;|ilde;|ri(?:;|f;))|u(?:arr;|ml;?)|wangle;)|v(?:Arr;|Bar(?:;|v;)|Dash;|a(?:ngrt;|r(?:epsilon;|kappa;|nothing;|p(?:hi;|i;|ropto;)|r(?:;|ho;)|s(?:igma;|u(?:bsetneq(?:;|q;)|psetneq(?:;|q;)))|t(?:heta;|riangle(?:left;|right;))))|cy;|dash;|e(?:e(?:;|bar;|eq;)|llip;|r(?:bar;|t;))|fr;|ltri;|nsu(?:b;|p;)|opf;|prop;|rtri;|s(?:cr;|u(?:bn(?:E;|e;)|pn(?:E;|e;)))|zigzag;)|w(?:circ;|e(?:d(?:bar;|ge(?:;|q;))|ierp;)|fr;|opf;|p;|r(?:;|eath;)|scr;)|x(?:c(?:ap;|irc;|up;)|dtri;|fr;|h(?:Arr;|arr;)|i;|l(?:Arr;|arr;)|map;|nis;|o(?:dot;|p(?:f;|lus;)|time;)|r(?:Arr;|arr;)|s(?:cr;|qcup;)|u(?:plus;|tri;)|vee;|wedge;)|y(?:ac(?:ute;?|y;)|c(?:irc;|y;)|en;?|fr;|icy;|opf;|scr;|u(?:cy;|ml;?))|z(?:acute;|c(?:aron;|y;)|dot;|e(?:etrf;|ta;)|fr;|hcy;|igrarr;|opf;|scr;|w(?:j;|nj;)))|[\\s\\S]/g;\n\n  // Regular expression constants used by the tokenizer and parser\n\n  // Note that \\r is included in all of these regexps because it will need\n  // to be converted to LF by the scanChars() function.\n  var DBLQUOTEATTRVAL = /[^\\r\"&\\u0000]+/g;\n  var SINGLEQUOTEATTRVAL = /[^\\r'&\\u0000]+/g;\n  var UNQUOTEDATTRVAL = /[^\\r\\t\\n\\f &>\\u0000]+/g;\n  var TAGNAME = /[^\\r\\t\\n\\f \\/>A-Z\\u0000]+/g;\n  var ATTRNAME = /[^\\r\\t\\n\\f \\/=>A-Z\\u0000]+/g;\n  var CDATATEXT = /[^\\]\\r\\u0000\\uffff]*/g;\n  var DATATEXT = /[^&<\\r\\u0000\\uffff]*/g;\n  var RAWTEXT = /[^<\\r\\u0000\\uffff]*/g;\n  var PLAINTEXT = /[^\\r\\u0000\\uffff]*/g;\n  // Since we don't have the 'sticky tag', add '|.' to the end of SIMPLETAG\n  // and SIMPLEATTR so that we are guaranteed to always match.  This prevents\n  // us from scanning past the lastIndex set. (Note that the desired matches\n  // are always greater than 1 char long, so longest-match will ensure that .\n  // is not matched unless the desired match fails.)\n  var SIMPLETAG = /(?:(\\/)?([a-z]+)>)|[\\s\\S]/g;\n  var SIMPLEATTR = /(?:([-a-z]+)[ \\t\\n\\f]*=[ \\t\\n\\f]*('[^'&\\r\\u0000]*'|\"[^\"&\\r\\u0000]*\"|[^\\t\\n\\r\\f \"&'\\u0000>][^&> \\t\\n\\r\\f\\u0000]*[ \\t\\n\\f]))|[\\s\\S]/g;\n  var NONWS = /[^\\x09\\x0A\\x0C\\x0D\\x20]/;\n  var ALLNONWS = /[^\\x09\\x0A\\x0C\\x0D\\x20]/g; // like above, with g flag\n  var NONWSNONNUL = /[^\\x00\\x09\\x0A\\x0C\\x0D\\x20]/; // don't allow NUL either\n  var LEADINGWS = /^[\\x09\\x0A\\x0C\\x0D\\x20]+/;\n  var NULCHARS = /\\x00/g;\n\n  /***\n   * These are utility functions that don't use any of the parser's\n   * internal state.\n   */\n  function buf2str(buf) {\n    var CHUNKSIZE = 16384;\n    if (buf.length < CHUNKSIZE) {\n      return String.fromCharCode.apply(String, buf);\n    }\n    // special case for large strings, to avoid busting the stack.\n    var result = '';\n    for (var i = 0; i < buf.length; i += CHUNKSIZE) {\n      result += String.fromCharCode.apply(String, buf.slice(i, i + CHUNKSIZE));\n    }\n    return result;\n  }\n  function str2buf(s) {\n    var result = [];\n    for (var i = 0; i < s.length; i++) {\n      result[i] = s.charCodeAt(i);\n    }\n    return result;\n  }\n\n  // Determine whether the element is a member of the set.\n  // The set is an object that maps namespaces to objects. The objects\n  // then map local tagnames to the value true if that tag is part of the set\n  function isA(elt, set) {\n    if (typeof set === 'string') {\n      // convenience case for testing a particular HTML element\n      return elt.namespaceURI === NAMESPACE.HTML && elt.localName === set;\n    }\n    var tagnames = set[elt.namespaceURI];\n    return tagnames && tagnames[elt.localName];\n  }\n  function isMathmlTextIntegrationPoint(n) {\n    return isA(n, mathmlTextIntegrationPointSet);\n  }\n  function isHTMLIntegrationPoint(n) {\n    if (isA(n, htmlIntegrationPointSet)) return true;\n    if (n.namespaceURI === NAMESPACE.MATHML && n.localName === \"annotation-xml\") {\n      var encoding = n.getAttribute(\"encoding\");\n      if (encoding) encoding = encoding.toLowerCase();\n      if (encoding === \"text/html\" || encoding === \"application/xhtml+xml\") return true;\n    }\n    return false;\n  }\n  function adjustSVGTagName(name) {\n    if (name in svgTagNameAdjustments) return svgTagNameAdjustments[name];else return name;\n  }\n  function adjustSVGAttributes(attrs) {\n    for (var i = 0, n = attrs.length; i < n; i++) {\n      if (attrs[i][0] in svgAttrAdjustments) {\n        attrs[i][0] = svgAttrAdjustments[attrs[i][0]];\n      }\n    }\n  }\n  function adjustMathMLAttributes(attrs) {\n    for (var i = 0, n = attrs.length; i < n; i++) {\n      if (attrs[i][0] === \"definitionurl\") {\n        attrs[i][0] = \"definitionURL\";\n        break;\n      }\n    }\n  }\n  function adjustForeignAttributes(attrs) {\n    for (var i = 0, n = attrs.length; i < n; i++) {\n      if (attrs[i][0] in foreignAttributes) {\n        // Attributes with namespaces get a 3rd element:\n        // [Qname, value, namespace]\n        attrs[i].push(foreignAttributes[attrs[i][0]]);\n      }\n    }\n  }\n\n  // For each attribute in attrs, if elt doesn't have an attribute\n  // by that name, add the attribute to elt\n  // XXX: I'm ignoring namespaces for now\n  function transferAttributes(attrs, elt) {\n    for (var i = 0, n = attrs.length; i < n; i++) {\n      var name = attrs[i][0],\n        value = attrs[i][1];\n      if (elt.hasAttribute(name)) continue;\n      elt._setAttribute(name, value);\n    }\n  }\n\n  /***\n   * The ElementStack class\n   */\n  HTMLParser.ElementStack = function ElementStack() {\n    this.elements = [];\n    this.top = null; // stack.top is the \"current node\" in the spec\n  };\n\n  /*\n  // This is for debugging only\n  HTMLParser.ElementStack.prototype.toString = function(e) {\n    return \"STACK: \" +\n    this.elements.map(function(e) {return e.localName;}).join(\"-\");\n  }\n  */\n\n  HTMLParser.ElementStack.prototype.push = function (e) {\n    this.elements.push(e);\n    this.top = e;\n  };\n  HTMLParser.ElementStack.prototype.pop = function (e) {\n    this.elements.pop();\n    this.top = this.elements[this.elements.length - 1];\n  };\n\n  // Pop elements off the stack up to and including the first\n  // element with the specified (HTML) tagname\n  HTMLParser.ElementStack.prototype.popTag = function (tag) {\n    for (var i = this.elements.length - 1; i > 0; i--) {\n      var e = this.elements[i];\n      if (isA(e, tag)) break;\n    }\n    this.elements.length = i;\n    this.top = this.elements[i - 1];\n  };\n\n  // Pop elements off the stack up to and including the first\n  // element that is an instance of the specified type\n  HTMLParser.ElementStack.prototype.popElementType = function (type) {\n    for (var i = this.elements.length - 1; i > 0; i--) {\n      if (this.elements[i] instanceof type) break;\n    }\n    this.elements.length = i;\n    this.top = this.elements[i - 1];\n  };\n\n  // Pop elements off the stack up to and including the element e.\n  // Note that this is very different from removeElement()\n  // This requires that e is on the stack.\n  HTMLParser.ElementStack.prototype.popElement = function (e) {\n    for (var i = this.elements.length - 1; i > 0; i--) {\n      if (this.elements[i] === e) break;\n    }\n    this.elements.length = i;\n    this.top = this.elements[i - 1];\n  };\n\n  // Remove a specific element from the stack.\n  // Do nothing if the element is not on the stack\n  HTMLParser.ElementStack.prototype.removeElement = function (e) {\n    if (this.top === e) this.pop();else {\n      var idx = this.elements.lastIndexOf(e);\n      if (idx !== -1) this.elements.splice(idx, 1);\n    }\n  };\n  HTMLParser.ElementStack.prototype.clearToContext = function (set) {\n    // Note that we don't loop to 0. Never pop the <html> elt off.\n    for (var i = this.elements.length - 1; i > 0; i--) {\n      if (isA(this.elements[i], set)) break;\n    }\n    this.elements.length = i + 1;\n    this.top = this.elements[i];\n  };\n  HTMLParser.ElementStack.prototype.contains = function (tag) {\n    return this.inSpecificScope(tag, Object.create(null));\n  };\n  HTMLParser.ElementStack.prototype.inSpecificScope = function (tag, set) {\n    for (var i = this.elements.length - 1; i >= 0; i--) {\n      var elt = this.elements[i];\n      if (isA(elt, tag)) return true;\n      if (isA(elt, set)) return false;\n    }\n    return false;\n  };\n\n  // Like the above, but for a specific element, not a tagname\n  HTMLParser.ElementStack.prototype.elementInSpecificScope = function (target, set) {\n    for (var i = this.elements.length - 1; i >= 0; i--) {\n      var elt = this.elements[i];\n      if (elt === target) return true;\n      if (isA(elt, set)) return false;\n    }\n    return false;\n  };\n\n  // Like the above, but for an element interface, not a tagname\n  HTMLParser.ElementStack.prototype.elementTypeInSpecificScope = function (target, set) {\n    for (var i = this.elements.length - 1; i >= 0; i--) {\n      var elt = this.elements[i];\n      if (elt instanceof target) return true;\n      if (isA(elt, set)) return false;\n    }\n    return false;\n  };\n  HTMLParser.ElementStack.prototype.inScope = function (tag) {\n    return this.inSpecificScope(tag, inScopeSet);\n  };\n  HTMLParser.ElementStack.prototype.elementInScope = function (e) {\n    return this.elementInSpecificScope(e, inScopeSet);\n  };\n  HTMLParser.ElementStack.prototype.elementTypeInScope = function (type) {\n    return this.elementTypeInSpecificScope(type, inScopeSet);\n  };\n  HTMLParser.ElementStack.prototype.inButtonScope = function (tag) {\n    return this.inSpecificScope(tag, inButtonScopeSet);\n  };\n  HTMLParser.ElementStack.prototype.inListItemScope = function (tag) {\n    return this.inSpecificScope(tag, inListItemScopeSet);\n  };\n  HTMLParser.ElementStack.prototype.inTableScope = function (tag) {\n    return this.inSpecificScope(tag, inTableScopeSet);\n  };\n  HTMLParser.ElementStack.prototype.inSelectScope = function (tag) {\n    // Can't implement this one with inSpecificScope, since it involves\n    // a set defined by inverting another set. So implement manually.\n    for (var i = this.elements.length - 1; i >= 0; i--) {\n      var elt = this.elements[i];\n      if (elt.namespaceURI !== NAMESPACE.HTML) return false;\n      var localname = elt.localName;\n      if (localname === tag) return true;\n      if (localname !== \"optgroup\" && localname !== \"option\") return false;\n    }\n    return false;\n  };\n  HTMLParser.ElementStack.prototype.generateImpliedEndTags = function (butnot, thorough) {\n    var endTagSet = thorough ? thoroughImpliedEndTagsSet : impliedEndTagsSet;\n    for (var i = this.elements.length - 1; i >= 0; i--) {\n      var e = this.elements[i];\n      if (butnot && isA(e, butnot)) break;\n      if (!isA(this.elements[i], endTagSet)) break;\n    }\n    this.elements.length = i + 1;\n    this.top = this.elements[i];\n  };\n\n  /***\n   * The ActiveFormattingElements class\n   */\n  HTMLParser.ActiveFormattingElements = function AFE() {\n    this.list = []; // elements\n    this.attrs = []; // attribute tokens for cloning\n  };\n  HTMLParser.ActiveFormattingElements.prototype.MARKER = {\n    localName: \"|\"\n  };\n\n  /*\n  // For debugging\n  HTMLParser.ActiveFormattingElements.prototype.toString = function() {\n    return \"AFE: \" +\n    this.list.map(function(e) { return e.localName; }).join(\"-\");\n  }\n  */\n\n  HTMLParser.ActiveFormattingElements.prototype.insertMarker = function () {\n    this.list.push(this.MARKER);\n    this.attrs.push(this.MARKER);\n  };\n  HTMLParser.ActiveFormattingElements.prototype.push = function (elt, attrs) {\n    // Scan backwards: if there are already 3 copies of this element\n    // before we encounter a marker, then drop the last one\n    var count = 0;\n    for (var i = this.list.length - 1; i >= 0; i--) {\n      if (this.list[i] === this.MARKER) break;\n      // equal() is defined below\n      if (equal(elt, this.list[i], this.attrs[i])) {\n        count++;\n        if (count === 3) {\n          this.list.splice(i, 1);\n          this.attrs.splice(i, 1);\n          break;\n        }\n      }\n    }\n\n    // Now push the element onto the list\n    this.list.push(elt);\n\n    // Copy the attributes and push those on, too\n    var attrcopy = [];\n    for (var ii = 0; ii < attrs.length; ii++) {\n      attrcopy[ii] = attrs[ii];\n    }\n    this.attrs.push(attrcopy);\n\n    // This function defines equality of two elements for the purposes\n    // of the AFE list.  Note that it compares the new elements\n    // attributes to the saved array of attributes associated with\n    // the old element because a script could have changed the\n    // old element's set of attributes\n    function equal(newelt, oldelt, oldattrs) {\n      if (newelt.localName !== oldelt.localName) return false;\n      if (newelt._numattrs !== oldattrs.length) return false;\n      for (var i = 0, n = oldattrs.length; i < n; i++) {\n        var oldname = oldattrs[i][0];\n        var oldval = oldattrs[i][1];\n        if (!newelt.hasAttribute(oldname)) return false;\n        if (newelt.getAttribute(oldname) !== oldval) return false;\n      }\n      return true;\n    }\n  };\n  HTMLParser.ActiveFormattingElements.prototype.clearToMarker = function () {\n    for (var i = this.list.length - 1; i >= 0; i--) {\n      if (this.list[i] === this.MARKER) break;\n    }\n    if (i < 0) i = 0;\n    this.list.length = i;\n    this.attrs.length = i;\n  };\n\n  // Find and return the last element with the specified tag between the\n  // end of the list and the last marker on the list.\n  // Used when parsing <a> in_body_mode()\n  HTMLParser.ActiveFormattingElements.prototype.findElementByTag = function (tag) {\n    for (var i = this.list.length - 1; i >= 0; i--) {\n      var elt = this.list[i];\n      if (elt === this.MARKER) break;\n      if (elt.localName === tag) return elt;\n    }\n    return null;\n  };\n  HTMLParser.ActiveFormattingElements.prototype.indexOf = function (e) {\n    return this.list.lastIndexOf(e);\n  };\n\n  // Find the element e in the list and remove it\n  // Used when parsing <a> in_body()\n  HTMLParser.ActiveFormattingElements.prototype.remove = function (e) {\n    var idx = this.list.lastIndexOf(e);\n    if (idx !== -1) {\n      this.list.splice(idx, 1);\n      this.attrs.splice(idx, 1);\n    }\n  };\n\n  // Find element a in the list and replace it with element b\n  // XXX: Do I need to handle attributes here?\n  HTMLParser.ActiveFormattingElements.prototype.replace = function (a, b, attrs) {\n    var idx = this.list.lastIndexOf(a);\n    if (idx !== -1) {\n      this.list[idx] = b;\n      this.attrs[idx] = attrs;\n    }\n  };\n\n  // Find a in the list and insert b after it\n  // This is only used for insert a bookmark object, so the\n  // attrs array doesn't really matter\n  HTMLParser.ActiveFormattingElements.prototype.insertAfter = function (a, b) {\n    var idx = this.list.lastIndexOf(a);\n    if (idx !== -1) {\n      this.list.splice(idx, 0, b);\n      this.attrs.splice(idx, 0, b);\n    }\n  };\n\n  /***\n   * This is the parser factory function. It is the return value of\n   * the outer closure that it is defined within.  Most of the parser\n   * implementation details are inside this function.\n   */\n  function HTMLParser(address, fragmentContext, options) {\n    /***\n     * These are the parser's state variables\n     */\n    // Scanner state\n    var chars = null;\n    var numchars = 0; // Length of chars\n    var nextchar = 0; // Index of next char\n    var input_complete = false; // Becomes true when end() called.\n    var scanner_skip_newline = false; // If previous char was CR\n    var reentrant_invocations = 0;\n    var saved_scanner_state = [];\n    var leftovers = \"\";\n    var first_batch = true;\n    var paused = 0; // Becomes non-zero while loading scripts\n\n    // Tokenizer state\n    var tokenizer = data_state; // Current tokenizer state\n    var return_state;\n    var character_reference_code;\n    var tagnamebuf = \"\";\n    var lasttagname = \"\"; // holds the target end tag for text states\n    var tempbuf = [];\n    var attrnamebuf = \"\";\n    var attrvaluebuf = \"\";\n    var commentbuf = [];\n    var doctypenamebuf = [];\n    var doctypepublicbuf = [];\n    var doctypesystembuf = [];\n    var attributes = [];\n    var is_end_tag = false;\n\n    // Tree builder state\n    var parser = initial_mode; // Current insertion mode\n    var originalInsertionMode = null; // A saved insertion mode\n    var templateInsertionModes = []; // Stack of template insertion modes.\n    var stack = new HTMLParser.ElementStack(); // Stack of open elements\n    var afe = new HTMLParser.ActiveFormattingElements(); // mis-nested tags\n    var fragment = fragmentContext !== undefined; // For innerHTML, etc.\n    var head_element_pointer = null;\n    var form_element_pointer = null;\n    var scripting_enabled = true;\n    if (fragmentContext) {\n      scripting_enabled = fragmentContext.ownerDocument._scripting_enabled;\n    }\n    if (options && options.scripting_enabled === false) scripting_enabled = false;\n    var frameset_ok = true;\n    var force_quirks = false;\n    var pending_table_text;\n    var text_integration_mode; // XXX a spec bug workaround?\n\n    // A single run of characters, buffered up to be sent to\n    // the parser as a single string.\n    var textrun = [];\n    var textIncludesNUL = false;\n    var ignore_linefeed = false;\n\n    /***\n     * This is the parser object that will be the return value of this\n     * factory function, which is some 5000 lines below.\n     * Note that the variable \"parser\" is the current state of the\n     * parser's state machine.  This variable \"htmlparser\" is the\n     * return value and defines the public API of the parser\n     */\n    var htmlparser = {\n      document: function () {\n        return doc;\n      },\n      // Convenience function for internal use. Can only be called once,\n      // as it removes the nodes from `doc` to add them to fragment.\n      _asDocumentFragment: function () {\n        var frag = doc.createDocumentFragment();\n        var root = doc.firstChild;\n        while (root.hasChildNodes()) {\n          frag.appendChild(root.firstChild);\n        }\n        return frag;\n      },\n      // Internal function used from HTMLScriptElement to pause the\n      // parser while a script is being loaded from the network\n      pause: function () {\n        // print(\"pausing parser\");\n        paused++;\n      },\n      // Called when a script finishes loading\n      resume: function () {\n        // print(\"resuming parser\");\n        paused--;\n        // XXX: added this to force a resumption.\n        // Is this the right thing to do?\n        this.parse(\"\");\n      },\n      // Parse the HTML text s.\n      // The second argument should be true if there is no more\n      // text to be parsed, and should be false or omitted otherwise.\n      // The second argument must not be set for recursive invocations\n      // from document.write()\n      parse: function (s, end, shouldPauseFunc) {\n        var moreToDo;\n\n        // If we're paused, remember the text to parse, but\n        // don't parse it now.\n        // (Don't invoke shouldPauseFunc because we haven't handled 'end' yet.)\n        if (paused > 0) {\n          leftovers += s;\n          return true; // more to do\n        }\n        if (reentrant_invocations === 0) {\n          // A normal, top-level invocation\n          if (leftovers) {\n            s = leftovers + s;\n            leftovers = \"\";\n          }\n\n          // Add a special marker character to the end of\n          // the buffer.  If the scanner is at the end of\n          // the buffer and input_complete is set, then this\n          // character will transform into an EOF token.\n          // Having an actual character that represents EOF\n          // in the character buffer makes lookahead regexp\n          // matching work more easily, and this is\n          // important for character references.\n          if (end) {\n            s += \"\\uFFFF\";\n            input_complete = true; // Makes scanChars() send EOF\n          }\n          chars = s;\n          numchars = s.length;\n          nextchar = 0;\n          if (first_batch) {\n            // We skip a leading Byte Order Mark (\\uFEFF)\n            // on first batch of text we're given\n            first_batch = false;\n            if (chars.charCodeAt(0) === 0xFEFF) nextchar = 1;\n          }\n          reentrant_invocations++;\n          moreToDo = scanChars(shouldPauseFunc);\n          leftovers = chars.substring(nextchar, numchars);\n          reentrant_invocations--;\n        } else {\n          // This is the re-entrant case, which we have to\n          // handle a little differently.\n          reentrant_invocations++;\n\n          // Save current scanner state\n          saved_scanner_state.push(chars, numchars, nextchar);\n\n          // Set new scanner state\n          chars = s;\n          numchars = s.length;\n          nextchar = 0;\n\n          // Now scan as many of these new chars as we can\n          scanChars();\n          moreToDo = false;\n          leftovers = chars.substring(nextchar, numchars);\n\n          // restore old scanner state\n          nextchar = saved_scanner_state.pop();\n          numchars = saved_scanner_state.pop();\n          chars = saved_scanner_state.pop();\n\n          // If there were leftover chars from this invocation\n          // insert them into the pending invocation's buffer\n          // and trim already processed chars at the same time\n          if (leftovers) {\n            chars = leftovers + chars.substring(nextchar);\n            numchars = chars.length;\n            nextchar = 0;\n            leftovers = \"\";\n          }\n\n          // Decrement the counter\n          reentrant_invocations--;\n        }\n        return moreToDo;\n      }\n    };\n\n    // This is the document we'll be building up\n    var doc = new Document(true, address);\n\n    // The document needs to know about the parser, for document.write().\n    // This _parser property will be deleted when we're done parsing.\n    doc._parser = htmlparser;\n\n    // XXX I think that any document we use this parser on should support\n    // scripts. But I may need to configure that through a parser parameter\n    // Only documents with windows (\"browsing contexts\" to be precise)\n    // allow scripting.\n    doc._scripting_enabled = scripting_enabled;\n\n    /***\n     * The actual code of the HTMLParser() factory function begins here.\n     */\n\n    if (fragmentContext) {\n      // for innerHTML parsing\n      if (fragmentContext.ownerDocument._quirks) doc._quirks = true;\n      if (fragmentContext.ownerDocument._limitedQuirks) doc._limitedQuirks = true;\n\n      // Set the initial tokenizer state\n      if (fragmentContext.namespaceURI === NAMESPACE.HTML) {\n        switch (fragmentContext.localName) {\n          case \"title\":\n          case \"textarea\":\n            tokenizer = rcdata_state;\n            break;\n          case \"style\":\n          case \"xmp\":\n          case \"iframe\":\n          case \"noembed\":\n          case \"noframes\":\n          case \"script\":\n          case \"plaintext\":\n            tokenizer = plaintext_state;\n            break;\n        }\n      }\n      var root = doc.createElement(\"html\");\n      doc._appendChild(root);\n      stack.push(root);\n      if (fragmentContext instanceof impl.HTMLTemplateElement) {\n        templateInsertionModes.push(in_template_mode);\n      }\n      resetInsertionMode();\n      for (var e = fragmentContext; e !== null; e = e.parentElement) {\n        if (e instanceof impl.HTMLFormElement) {\n          form_element_pointer = e;\n          break;\n        }\n      }\n    }\n\n    /***\n     * Scanner functions\n     */\n    // Loop through the characters in chars, and pass them one at a time\n    // to the tokenizer FSM. Return when no more characters can be processed\n    // (This may leave 1 or more characters in the buffer: like a CR\n    // waiting to see if the next char is LF, or for states that require\n    // lookahead...)\n    function scanChars(shouldPauseFunc) {\n      var codepoint, s, pattern, eof;\n      while (nextchar < numchars) {\n        // If we just tokenized a </script> tag, then the paused flag\n        // may have been set to tell us to stop tokenizing while\n        // the script is loading\n        if (paused > 0 || shouldPauseFunc && shouldPauseFunc()) {\n          return true;\n        }\n        switch (typeof tokenizer.lookahead) {\n          case 'undefined':\n            codepoint = chars.charCodeAt(nextchar++);\n            if (scanner_skip_newline) {\n              scanner_skip_newline = false;\n              if (codepoint === 0x000A) {\n                nextchar++;\n                continue;\n              }\n            }\n            switch (codepoint) {\n              case 0x000D:\n                // CR always turns into LF, but if the next character\n                // is LF, then that second LF is skipped.\n                if (nextchar < numchars) {\n                  if (chars.charCodeAt(nextchar) === 0x000A) nextchar++;\n                } else {\n                  // We don't know the next char right now, so we\n                  // can't check if it is a LF.  So set a flag\n                  scanner_skip_newline = true;\n                }\n\n                // In either case, emit a LF\n                tokenizer(0x000A);\n                break;\n              case 0xFFFF:\n                if (input_complete && nextchar === numchars) {\n                  tokenizer(EOF); // codepoint will be 0xFFFF here\n                  break;\n                }\n              /* falls through */\n              default:\n                tokenizer(codepoint);\n                break;\n            }\n            break;\n          case 'number':\n            codepoint = chars.charCodeAt(nextchar);\n\n            // The only tokenizer states that require fixed lookahead\n            // only consume alphanum characters, so we don't have\n            // to worry about CR and LF in this case\n\n            // tokenizer wants n chars of lookahead\n            var n = tokenizer.lookahead;\n            var needsString = true;\n            if (n < 0) {\n              needsString = false;\n              n = -n;\n            }\n            if (n < numchars - nextchar) {\n              // If we can look ahead that far\n              s = needsString ? chars.substring(nextchar, nextchar + n) : null;\n              eof = false;\n            } else {\n              // if we don't have that many characters\n              if (input_complete) {\n                // If no more are coming\n                // Just return what we have\n                s = needsString ? chars.substring(nextchar, numchars) : null;\n                eof = true;\n                if (codepoint === 0xFFFF && nextchar === numchars - 1) codepoint = EOF;\n              } else {\n                // Return now and wait for more chars later\n                return true;\n              }\n            }\n            tokenizer(codepoint, s, eof);\n            break;\n          case 'string':\n            codepoint = chars.charCodeAt(nextchar);\n\n            // tokenizer wants characters up to a matching string\n            pattern = tokenizer.lookahead;\n            var pos = chars.indexOf(pattern, nextchar);\n            if (pos !== -1) {\n              s = chars.substring(nextchar, pos + pattern.length);\n              eof = false;\n            } else {\n              // No match\n              // If more characters coming, wait for them\n              if (!input_complete) return true;\n\n              // Otherwise, we've got to return what we've got\n              s = chars.substring(nextchar, numchars);\n              if (codepoint === 0xFFFF && nextchar === numchars - 1) codepoint = EOF;\n              eof = true;\n            }\n\n            // The tokenizer states that require this kind of\n            // lookahead have to be careful to handle CR characters\n            // correctly\n            tokenizer(codepoint, s, eof);\n            break;\n        }\n      }\n      return false; // no more characters to scan!\n    }\n\n    /***\n     * Tokenizer utility functions\n     */\n    function addAttribute(name, value) {\n      // Make sure there isn't already an attribute with this name\n      // If there is, ignore this one.\n      for (var i = 0; i < attributes.length; i++) {\n        if (attributes[i][0] === name) return;\n      }\n      if (value !== undefined) {\n        attributes.push([name, value]);\n      } else {\n        attributes.push([name]);\n      }\n    }\n\n    // Shortcut for simple attributes\n    function handleSimpleAttribute() {\n      SIMPLEATTR.lastIndex = nextchar - 1;\n      var matched = SIMPLEATTR.exec(chars);\n      if (!matched) throw new Error(\"should never happen\");\n      var name = matched[1];\n      if (!name) return false;\n      var value = matched[2];\n      var len = value.length;\n      switch (value[0]) {\n        case '\"':\n        case \"'\":\n          value = value.substring(1, len - 1);\n          nextchar += matched[0].length - 1;\n          tokenizer = after_attribute_value_quoted_state;\n          break;\n        default:\n          tokenizer = before_attribute_name_state;\n          nextchar += matched[0].length - 1;\n          value = value.substring(0, len - 1);\n          break;\n      }\n\n      // Make sure there isn't already an attribute with this name\n      // If there is, ignore this one.\n      for (var i = 0; i < attributes.length; i++) {\n        if (attributes[i][0] === name) return true;\n      }\n      attributes.push([name, value]);\n      return true;\n    }\n    function beginTagName() {\n      is_end_tag = false;\n      tagnamebuf = \"\";\n      attributes.length = 0;\n    }\n    function beginEndTagName() {\n      is_end_tag = true;\n      tagnamebuf = \"\";\n      attributes.length = 0;\n    }\n    function beginTempBuf() {\n      tempbuf.length = 0;\n    }\n    function beginAttrName() {\n      attrnamebuf = \"\";\n    }\n    function beginAttrValue() {\n      attrvaluebuf = \"\";\n    }\n    function beginComment() {\n      commentbuf.length = 0;\n    }\n    function beginDoctype() {\n      doctypenamebuf.length = 0;\n      doctypepublicbuf = null;\n      doctypesystembuf = null;\n    }\n    function beginDoctypePublicId() {\n      doctypepublicbuf = [];\n    }\n    function beginDoctypeSystemId() {\n      doctypesystembuf = [];\n    }\n    function forcequirks() {\n      force_quirks = true;\n    }\n    function cdataAllowed() {\n      return stack.top && stack.top.namespaceURI !== \"http://www.w3.org/1999/xhtml\";\n    }\n\n    // Return true if the codepoints in the specified buffer match the\n    // characters of lasttagname\n    function appropriateEndTag(buf) {\n      return lasttagname === buf;\n    }\n    function flushText() {\n      if (textrun.length > 0) {\n        var s = buf2str(textrun);\n        textrun.length = 0;\n        if (ignore_linefeed) {\n          ignore_linefeed = false;\n          if (s[0] === \"\\n\") s = s.substring(1);\n          if (s.length === 0) return;\n        }\n        insertToken(TEXT, s);\n        textIncludesNUL = false;\n      }\n      ignore_linefeed = false;\n    }\n\n    // Consume chars matched by the pattern and return them as a string. Starts\n    // matching at the current position, so users should drop the current char\n    // otherwise.\n    function getMatchingChars(pattern) {\n      pattern.lastIndex = nextchar - 1;\n      var match = pattern.exec(chars);\n      if (match && match.index === nextchar - 1) {\n        match = match[0];\n        nextchar += match.length - 1;\n        /* Careful!  Make sure we haven't matched the EOF character! */\n        if (input_complete && nextchar === numchars) {\n          // Oops, backup one.\n          match = match.slice(0, -1);\n          nextchar--;\n        }\n        return match;\n      } else {\n        throw new Error(\"should never happen\");\n      }\n    }\n\n    // emit a string of chars that match a regexp\n    // Returns false if no chars matched.\n    function emitCharsWhile(pattern) {\n      pattern.lastIndex = nextchar - 1;\n      var match = pattern.exec(chars)[0];\n      if (!match) return false;\n      emitCharString(match);\n      nextchar += match.length - 1;\n      return true;\n    }\n\n    // This is used by CDATA sections\n    function emitCharString(s) {\n      if (textrun.length > 0) flushText();\n      if (ignore_linefeed) {\n        ignore_linefeed = false;\n        if (s[0] === \"\\n\") s = s.substring(1);\n        if (s.length === 0) return;\n      }\n      insertToken(TEXT, s);\n    }\n    function emitTag() {\n      if (is_end_tag) insertToken(ENDTAG, tagnamebuf);else {\n        // Remember the last open tag we emitted\n        var tagname = tagnamebuf;\n        tagnamebuf = \"\";\n        lasttagname = tagname;\n        insertToken(TAG, tagname, attributes);\n      }\n    }\n\n    // A shortcut: look ahead and if this is a open or close tag\n    // in lowercase with no spaces and no attributes, just emit it now.\n    function emitSimpleTag() {\n      if (nextchar === numchars) {\n        return false; /* not even 1 char left */\n      }\n      SIMPLETAG.lastIndex = nextchar;\n      var matched = SIMPLETAG.exec(chars);\n      if (!matched) throw new Error(\"should never happen\");\n      var tagname = matched[2];\n      if (!tagname) return false;\n      var endtag = matched[1];\n      if (endtag) {\n        nextchar += tagname.length + 2;\n        insertToken(ENDTAG, tagname);\n      } else {\n        nextchar += tagname.length + 1;\n        lasttagname = tagname;\n        insertToken(TAG, tagname, NOATTRS);\n      }\n      return true;\n    }\n    function emitSelfClosingTag() {\n      if (is_end_tag) insertToken(ENDTAG, tagnamebuf, null, true);else {\n        insertToken(TAG, tagnamebuf, attributes, true);\n      }\n    }\n    function emitDoctype() {\n      insertToken(DOCTYPE, buf2str(doctypenamebuf), doctypepublicbuf ? buf2str(doctypepublicbuf) : undefined, doctypesystembuf ? buf2str(doctypesystembuf) : undefined);\n    }\n    function emitEOF() {\n      flushText();\n      parser(EOF); // EOF never goes to insertForeignContent()\n      doc.modclock = 1; // Start tracking modifications\n    }\n\n    // Insert a token, either using the current parser insertion mode\n    // (for HTML stuff) or using the insertForeignToken() method.\n    var insertToken = htmlparser.insertToken = function insertToken(t, value, arg3, arg4) {\n      flushText();\n      var current = stack.top;\n      if (!current || current.namespaceURI === NAMESPACE.HTML) {\n        // This is the common case\n        parser(t, value, arg3, arg4);\n      } else {\n        // Otherwise we may need to insert this token as foreign content\n        if (t !== TAG && t !== TEXT) {\n          insertForeignToken(t, value, arg3, arg4);\n        } else {\n          // But in some cases we treat it as regular content\n          if (isMathmlTextIntegrationPoint(current) && (t === TEXT || t === TAG && value !== \"mglyph\" && value !== \"malignmark\") || t === TAG && value === \"svg\" && current.namespaceURI === NAMESPACE.MATHML && current.localName === \"annotation-xml\" || isHTMLIntegrationPoint(current)) {\n            // XXX: the text_integration_mode stuff is an\n            // attempted bug workaround of mine\n            text_integration_mode = true;\n            parser(t, value, arg3, arg4);\n            text_integration_mode = false;\n          }\n          // Otherwise it is foreign content\n          else {\n            insertForeignToken(t, value, arg3, arg4);\n          }\n        }\n      }\n    };\n\n    /***\n     * Tree building utility functions\n     */\n    function insertComment(data) {\n      var parent = stack.top;\n      if (foster_parent_mode && isA(parent, tablesectionrowSet)) {\n        fosterParent(function (doc) {\n          return doc.createComment(data);\n        });\n      } else {\n        // \"If the adjusted insertion location is inside a template element,\n        // let it instead be inside the template element's template contents\"\n        if (parent instanceof impl.HTMLTemplateElement) {\n          parent = parent.content;\n        }\n        parent._appendChild(parent.ownerDocument.createComment(data));\n      }\n    }\n    function insertText(s) {\n      var parent = stack.top;\n      if (foster_parent_mode && isA(parent, tablesectionrowSet)) {\n        fosterParent(function (doc) {\n          return doc.createTextNode(s);\n        });\n      } else {\n        // \"If the adjusted insertion location is inside a template element,\n        // let it instead be inside the template element's template contents\"\n        if (parent instanceof impl.HTMLTemplateElement) {\n          parent = parent.content;\n        }\n        // \"If there is a Text node immediately before the adjusted insertion\n        // location, then append data to that Text node's data.\"\n        var lastChild = parent.lastChild;\n        if (lastChild && lastChild.nodeType === Node.TEXT_NODE) {\n          lastChild.appendData(s);\n        } else {\n          parent._appendChild(parent.ownerDocument.createTextNode(s));\n        }\n      }\n    }\n    function createHTMLElt(doc, name, attrs) {\n      // Create the element this way, rather than with\n      // doc.createElement because createElement() does error\n      // checking on the element name that we need to avoid here.\n      var elt = html.createElement(doc, name, null);\n      if (attrs) {\n        for (var i = 0, n = attrs.length; i < n; i++) {\n          // Use the _ version to avoid testing the validity\n          // of the attribute name\n          elt._setAttribute(attrs[i][0], attrs[i][1]);\n        }\n      }\n      // XXX\n      // If the element is a resettable form element,\n      // run its reset algorithm now\n      // XXX\n      // handle case where form-element-pointer is not null\n      return elt;\n    }\n\n    // The in_table insertion mode turns on this flag, and that makes\n    // insertHTMLElement use the foster parenting algorithm for elements\n    // tags inside a table\n    var foster_parent_mode = false;\n    function insertHTMLElement(name, attrs) {\n      var elt = insertElement(function (doc) {\n        return createHTMLElt(doc, name, attrs);\n      });\n\n      // XXX\n      // If this is a form element, set its form attribute property here\n      if (isA(elt, formassociatedSet)) {\n        elt._form = form_element_pointer;\n      }\n      return elt;\n    }\n\n    // Insert the element into the open element or foster parent it\n    function insertElement(eltFunc) {\n      var elt;\n      if (foster_parent_mode && isA(stack.top, tablesectionrowSet)) {\n        elt = fosterParent(eltFunc);\n      } else if (stack.top instanceof impl.HTMLTemplateElement) {\n        // \"If the adjusted insertion location is inside a template element,\n        // let it instead be inside the template element's template contents\"\n        elt = eltFunc(stack.top.content.ownerDocument);\n        stack.top.content._appendChild(elt);\n      } else {\n        elt = eltFunc(stack.top.ownerDocument);\n        stack.top._appendChild(elt);\n      }\n      stack.push(elt);\n      return elt;\n    }\n    function insertForeignElement(name, attrs, ns) {\n      return insertElement(function (doc) {\n        // We need to prevent createElementNS from trying to parse `name` as a\n        // `qname`, so use an internal Document#_createElementNS() interface.\n        var elt = doc._createElementNS(name, ns, null);\n        if (attrs) {\n          for (var i = 0, n = attrs.length; i < n; i++) {\n            var attr = attrs[i];\n            if (attr.length === 2) elt._setAttribute(attr[0], attr[1]);else {\n              elt._setAttributeNS(attr[2], attr[0], attr[1]);\n            }\n          }\n        }\n        return elt;\n      });\n    }\n    function lastElementOfType(type) {\n      for (var i = stack.elements.length - 1; i >= 0; i--) {\n        if (stack.elements[i] instanceof type) {\n          return i;\n        }\n      }\n      return -1;\n    }\n    function fosterParent(eltFunc) {\n      var parent,\n        before,\n        lastTable = -1,\n        lastTemplate = -1,\n        elt;\n      lastTable = lastElementOfType(impl.HTMLTableElement);\n      lastTemplate = lastElementOfType(impl.HTMLTemplateElement);\n      if (lastTemplate >= 0 && (lastTable < 0 || lastTemplate > lastTable)) {\n        parent = stack.elements[lastTemplate];\n      } else if (lastTable >= 0) {\n        parent = stack.elements[lastTable].parentNode;\n        if (parent) {\n          before = stack.elements[lastTable];\n        } else {\n          parent = stack.elements[lastTable - 1];\n        }\n      }\n      if (!parent) parent = stack.elements[0]; // the `html` element.\n\n      // \"If the adjusted insertion location is inside a template element,\n      // let it instead be inside the template element's template contents\"\n      if (parent instanceof impl.HTMLTemplateElement) {\n        parent = parent.content;\n      }\n      // Create element in the appropriate document.\n      elt = eltFunc(parent.ownerDocument);\n      if (elt.nodeType === Node.TEXT_NODE) {\n        var prev;\n        if (before) prev = before.previousSibling;else prev = parent.lastChild;\n        if (prev && prev.nodeType === Node.TEXT_NODE) {\n          prev.appendData(elt.data);\n          return elt;\n        }\n      }\n      if (before) parent.insertBefore(elt, before);else parent._appendChild(elt);\n      return elt;\n    }\n    function resetInsertionMode() {\n      var last = false;\n      for (var i = stack.elements.length - 1; i >= 0; i--) {\n        var node = stack.elements[i];\n        if (i === 0) {\n          last = true;\n          if (fragment) {\n            node = fragmentContext;\n          }\n        }\n        if (node.namespaceURI === NAMESPACE.HTML) {\n          var tag = node.localName;\n          switch (tag) {\n            case \"select\":\n              for (var j = i; j > 0;) {\n                var ancestor = stack.elements[--j];\n                if (ancestor instanceof impl.HTMLTemplateElement) {\n                  break;\n                } else if (ancestor instanceof impl.HTMLTableElement) {\n                  parser = in_select_in_table_mode;\n                  return;\n                }\n              }\n              parser = in_select_mode;\n              return;\n            case \"tr\":\n              parser = in_row_mode;\n              return;\n            case \"tbody\":\n            case \"tfoot\":\n            case \"thead\":\n              parser = in_table_body_mode;\n              return;\n            case \"caption\":\n              parser = in_caption_mode;\n              return;\n            case \"colgroup\":\n              parser = in_column_group_mode;\n              return;\n            case \"table\":\n              parser = in_table_mode;\n              return;\n            case \"template\":\n              parser = templateInsertionModes[templateInsertionModes.length - 1];\n              return;\n            case \"body\":\n              parser = in_body_mode;\n              return;\n            case \"frameset\":\n              parser = in_frameset_mode;\n              return;\n            case \"html\":\n              if (head_element_pointer === null) {\n                parser = before_head_mode;\n              } else {\n                parser = after_head_mode;\n              }\n              return;\n            default:\n              if (!last) {\n                if (tag === \"head\") {\n                  parser = in_head_mode;\n                  return;\n                }\n                if (tag === \"td\" || tag === \"th\") {\n                  parser = in_cell_mode;\n                  return;\n                }\n              }\n          }\n        }\n        if (last) {\n          parser = in_body_mode;\n          return;\n        }\n      }\n    }\n    function parseRawText(name, attrs) {\n      insertHTMLElement(name, attrs);\n      tokenizer = rawtext_state;\n      originalInsertionMode = parser;\n      parser = text_mode;\n    }\n    function parseRCDATA(name, attrs) {\n      insertHTMLElement(name, attrs);\n      tokenizer = rcdata_state;\n      originalInsertionMode = parser;\n      parser = text_mode;\n    }\n\n    // Make a copy of element i on the list of active formatting\n    // elements, using its original attributes, not current\n    // attributes (which may have been modified by a script)\n    function afeclone(doc, i) {\n      return {\n        elt: createHTMLElt(doc, afe.list[i].localName, afe.attrs[i]),\n        attrs: afe.attrs[i]\n      };\n    }\n    function afereconstruct() {\n      if (afe.list.length === 0) return;\n      var entry = afe.list[afe.list.length - 1];\n      // If the last is a marker , do nothing\n      if (entry === afe.MARKER) return;\n      // Or if it is an open element, do nothing\n      if (stack.elements.lastIndexOf(entry) !== -1) return;\n\n      // Loop backward through the list until we find a marker or an\n      // open element, and then move forward one from there.\n      for (var i = afe.list.length - 2; i >= 0; i--) {\n        entry = afe.list[i];\n        if (entry === afe.MARKER) break;\n        if (stack.elements.lastIndexOf(entry) !== -1) break;\n      }\n\n      // Now loop forward, starting from the element after the current\n      // one, recreating formatting elements and pushing them back onto\n      // the list of open elements\n      for (i = i + 1; i < afe.list.length; i++) {\n        var newelt = insertElement(function (doc) {\n          return afeclone(doc, i).elt;\n        });\n        afe.list[i] = newelt;\n      }\n    }\n\n    // Used by the adoptionAgency() function\n    var BOOKMARK = {\n      localName: \"BM\"\n    };\n    function adoptionAgency(tag) {\n      // If the current node is an HTML element whose tag name is subject,\n      // and the current node is not in the list of active formatting\n      // elements, then pop the current node off the stack of open\n      // elements and abort these steps.\n      if (isA(stack.top, tag) && afe.indexOf(stack.top) === -1) {\n        stack.pop();\n        return true; // no more handling required\n      }\n\n      // Let outer loop counter be zero.\n      var outer = 0;\n\n      // Outer loop: If outer loop counter is greater than or\n      // equal to eight, then abort these steps.\n      while (outer < 8) {\n        // Increment outer loop counter by one.\n        outer++;\n\n        // Let the formatting element be the last element in the list\n        // of active formatting elements that: is between the end of\n        // the list and the last scope marker in the list, if any, or\n        // the start of the list otherwise, and has the same tag name\n        // as the token.\n        var fmtelt = afe.findElementByTag(tag);\n\n        // If there is no such node, then abort these steps and instead\n        // act as described in the \"any other end tag\" entry below.\n        if (!fmtelt) {\n          return false; // false means handle by the default case\n        }\n\n        // Otherwise, if there is such a node, but that node is not in\n        // the stack of open elements, then this is a parse error;\n        // remove the element from the list, and abort these steps.\n        var index = stack.elements.lastIndexOf(fmtelt);\n        if (index === -1) {\n          afe.remove(fmtelt);\n          return true; // true means no more handling required\n        }\n\n        // Otherwise, if there is such a node, and that node is also in\n        // the stack of open elements, but the element is not in scope,\n        // then this is a parse error; ignore the token, and abort\n        // these steps.\n        if (!stack.elementInScope(fmtelt)) {\n          return true;\n        }\n\n        // Let the furthest block be the topmost node in the stack of\n        // open elements that is lower in the stack than the formatting\n        // element, and is an element in the special category. There\n        // might not be one.\n        var furthestblock = null,\n          furthestblockindex;\n        for (var i = index + 1; i < stack.elements.length; i++) {\n          if (isA(stack.elements[i], specialSet)) {\n            furthestblock = stack.elements[i];\n            furthestblockindex = i;\n            break;\n          }\n        }\n\n        // If there is no furthest block, then the UA must skip the\n        // subsequent steps and instead just pop all the nodes from the\n        // bottom of the stack of open elements, from the current node\n        // up to and including the formatting element, and remove the\n        // formatting element from the list of active formatting\n        // elements.\n        if (!furthestblock) {\n          stack.popElement(fmtelt);\n          afe.remove(fmtelt);\n          return true;\n        } else {\n          // Let the common ancestor be the element immediately above\n          // the formatting element in the stack of open elements.\n          var ancestor = stack.elements[index - 1];\n\n          // Let a bookmark note the position of the formatting\n          // element in the list of active formatting elements\n          // relative to the elements on either side of it in the\n          // list.\n          afe.insertAfter(fmtelt, BOOKMARK);\n\n          // Let node and last node be the furthest block.\n          var node = furthestblock;\n          var lastnode = furthestblock;\n          var nodeindex = furthestblockindex;\n          var nodeafeindex;\n\n          // Let inner loop counter be zero.\n          var inner = 0;\n          while (true) {\n            // Increment inner loop counter by one.\n            inner++;\n\n            // Let node be the element immediately above node in\n            // the stack of open elements, or if node is no longer\n            // in the stack of open elements (e.g. because it got\n            // removed by this algorithm), the element that was\n            // immediately above node in the stack of open elements\n            // before node was removed.\n            node = stack.elements[--nodeindex];\n\n            // If node is the formatting element, then go\n            // to the next step in the overall algorithm.\n            if (node === fmtelt) break;\n\n            // If the inner loop counter is greater than three and node\n            // is in the list of active formatting elements, then remove\n            // node from the list of active formatting elements.\n            nodeafeindex = afe.indexOf(node);\n            if (inner > 3 && nodeafeindex !== -1) {\n              afe.remove(node);\n              nodeafeindex = -1;\n            }\n\n            // If node is not in the list of active formatting\n            // elements, then remove node from the stack of open\n            // elements and then go back to the step labeled inner\n            // loop.\n            if (nodeafeindex === -1) {\n              stack.removeElement(node);\n              continue;\n            }\n\n            // Create an element for the token for which the\n            // element node was created with common ancestor as\n            // the intended parent, replace the entry for node\n            // in the list of active formatting elements with an\n            // entry for the new element, replace the entry for\n            // node in the stack of open elements with an entry for\n            // the new element, and let node be the new element.\n            var newelt = afeclone(ancestor.ownerDocument, nodeafeindex);\n            afe.replace(node, newelt.elt, newelt.attrs);\n            stack.elements[nodeindex] = newelt.elt;\n            node = newelt.elt;\n\n            // If last node is the furthest block, then move the\n            // aforementioned bookmark to be immediately after the\n            // new node in the list of active formatting elements.\n            if (lastnode === furthestblock) {\n              afe.remove(BOOKMARK);\n              afe.insertAfter(newelt.elt, BOOKMARK);\n            }\n\n            // Insert last node into node, first removing it from\n            // its previous parent node if any.\n            node._appendChild(lastnode);\n\n            // Let last node be node.\n            lastnode = node;\n          }\n\n          // If the common ancestor node is a table, tbody, tfoot,\n          // thead, or tr element, then, foster parent whatever last\n          // node ended up being in the previous step, first removing\n          // it from its previous parent node if any.\n          if (foster_parent_mode && isA(ancestor, tablesectionrowSet)) {\n            fosterParent(function () {\n              return lastnode;\n            });\n          }\n          // Otherwise, append whatever last node ended up being in\n          // the previous step to the common ancestor node, first\n          // removing it from its previous parent node if any.\n          else if (ancestor instanceof impl.HTMLTemplateElement) {\n            ancestor.content._appendChild(lastnode);\n          } else {\n            ancestor._appendChild(lastnode);\n          }\n\n          // Create an element for the token for which the\n          // formatting element was created, with furthest block\n          // as the intended parent.\n          var newelt2 = afeclone(furthestblock.ownerDocument, afe.indexOf(fmtelt));\n\n          // Take all of the child nodes of the furthest block and\n          // append them to the element created in the last step.\n          while (furthestblock.hasChildNodes()) {\n            newelt2.elt._appendChild(furthestblock.firstChild);\n          }\n\n          // Append that new element to the furthest block.\n          furthestblock._appendChild(newelt2.elt);\n\n          // Remove the formatting element from the list of active\n          // formatting elements, and insert the new element into the\n          // list of active formatting elements at the position of\n          // the aforementioned bookmark.\n          afe.remove(fmtelt);\n          afe.replace(BOOKMARK, newelt2.elt, newelt2.attrs);\n\n          // Remove the formatting element from the stack of open\n          // elements, and insert the new element into the stack of\n          // open elements immediately below the position of the\n          // furthest block in that stack.\n          stack.removeElement(fmtelt);\n          var pos = stack.elements.lastIndexOf(furthestblock);\n          stack.elements.splice(pos + 1, 0, newelt2.elt);\n        }\n      }\n      return true;\n    }\n\n    // We do this when we get /script in in_text_mode\n    function handleScriptEnd() {\n      // XXX:\n      // This is just a stub implementation right now and doesn't run scripts.\n      // Getting this method right involves the event loop, URL resolution\n      // script fetching etc. For now I just want to be able to parse\n      // documents and test the parser.\n\n      //var script = stack.top;\n      stack.pop();\n      parser = originalInsertionMode;\n      //script._prepare();\n      return;\n\n      // XXX: here is what this method is supposed to do\n\n      // Provide a stable state.\n\n      // Let script be the current node (which will be a script\n      // element).\n\n      // Pop the current node off the stack of open elements.\n\n      // Switch the insertion mode to the original insertion mode.\n\n      // Let the old insertion point have the same value as the current\n      // insertion point. Let the insertion point be just before the\n      // next input character.\n\n      // Increment the parser's script nesting level by one.\n\n      // Prepare the script. This might cause some script to execute,\n      // which might cause new characters to be inserted into the\n      // tokenizer, and might cause the tokenizer to output more tokens,\n      // resulting in a reentrant invocation of the parser.\n\n      // Decrement the parser's script nesting level by one. If the\n      // parser's script nesting level is zero, then set the parser\n      // pause flag to false.\n\n      // Let the insertion point have the value of the old insertion\n      // point. (In other words, restore the insertion point to its\n      // previous value. This value might be the \"undefined\" value.)\n\n      // At this stage, if there is a pending parsing-blocking script,\n      // then:\n\n      // If the script nesting level is not zero:\n\n      //   Set the parser pause flag to true, and abort the processing\n      //   of any nested invocations of the tokenizer, yielding\n      //   control back to the caller. (Tokenization will resume when\n      //   the caller returns to the \"outer\" tree construction stage.)\n\n      //   The tree construction stage of this particular parser is\n      //   being called reentrantly, say from a call to\n      //   document.write().\n\n      // Otherwise:\n\n      //     Run these steps:\n\n      //       Let the script be the pending parsing-blocking\n      //       script. There is no longer a pending\n      //       parsing-blocking script.\n\n      //       Block the tokenizer for this instance of the HTML\n      //       parser, such that the event loop will not run tasks\n      //       that invoke the tokenizer.\n\n      //       If the parser's Document has a style sheet that is\n      //       blocking scripts or the script's \"ready to be\n      //       parser-executed\" flag is not set: spin the event\n      //       loop until the parser's Document has no style sheet\n      //       that is blocking scripts and the script's \"ready to\n      //       be parser-executed\" flag is set.\n\n      //       Unblock the tokenizer for this instance of the HTML\n      //       parser, such that tasks that invoke the tokenizer\n      //       can again be run.\n\n      //       Let the insertion point be just before the next\n      //       input character.\n\n      //       Increment the parser's script nesting level by one\n      //       (it should be zero before this step, so this sets\n      //       it to one).\n\n      //       Execute the script.\n\n      //       Decrement the parser's script nesting level by\n      //       one. If the parser's script nesting level is zero\n      //       (which it always should be at this point), then set\n      //       the parser pause flag to false.\n\n      //       Let the insertion point be undefined again.\n\n      //       If there is once again a pending parsing-blocking\n      //       script, then repeat these steps from step 1.\n    }\n    function stopParsing() {\n      // XXX This is just a temporary implementation to get the parser working.\n      // A full implementation involves scripts and events and the event loop.\n\n      // Remove the link from document to parser.\n      // This is instead of \"set the insertion point to undefined\".\n      // It means that document.write() can't write into the doc anymore.\n      delete doc._parser;\n      stack.elements.length = 0; // pop everything off\n\n      // If there is a window object associated with the document\n      // then trigger an load event on it\n      if (doc.defaultView) {\n        doc.defaultView.dispatchEvent(new impl.Event(\"load\", {}));\n      }\n    }\n\n    /****\n     * Tokenizer states\n     */\n\n    /**\n     * This file was partially mechanically generated from\n     * http://www.whatwg.org/specs/web-apps/current-work/multipage/tokenization.html\n     *\n     * After mechanical conversion, it was further converted from\n     * prose to JS by hand, but the intent is that it is a very\n     * faithful rendering of the HTML tokenization spec in\n     * JavaScript.\n     *\n     * It is not a goal of this tokenizer to detect or report\n     * parse errors.\n     *\n     * XXX The tokenizer is supposed to work with straight UTF32\n     * codepoints. But I don't think it has any dependencies on\n     * any character outside of the BMP so I think it is safe to\n     * pass it UTF16 characters. I don't think it will ever change\n     * state in the middle of a surrogate pair.\n     */\n\n    /*\n     * Each state is represented by a function.  For most states, the\n     * scanner simply passes the next character (as an integer\n     * codepoint) to the current state function and automatically\n     * consumes the character.  If the state function can't process\n     * the character it can call pushback() to push it back to the\n     * scanner.\n     *\n     * Some states require lookahead, though.  If a state function has\n     * a lookahead property, then it is invoked differently.  In this\n     * case, the scanner invokes the function with 3 arguments: 1) the\n     * next codepoint 2) a string of lookahead text 3) a boolean that\n     * is true if the lookahead goes all the way to the EOF. (XXX\n     * actually maybe this third is not necessary... the lookahead\n     * could just include \\uFFFF?)\n     *\n     * If the lookahead property of a state function is an integer, it\n     * specifies the number of characters required. If it is a string,\n     * then the scanner will scan for that string and return all\n     * characters up to and including that sequence, or up to EOF.  If\n     * the lookahead property is a regexp, then the scanner will match\n     * the regexp at the current point and return the matching string.\n     *\n     * States that require lookahead are responsible for explicitly\n     * consuming the characters they process. They do this by\n     * incrementing nextchar by the number of processed characters.\n     */\n    function reconsume(c, new_state) {\n      tokenizer = new_state;\n      nextchar--; // pushback\n    }\n    function data_state(c) {\n      switch (c) {\n        case 0x0026:\n          // AMPERSAND\n          return_state = data_state;\n          tokenizer = character_reference_state;\n          break;\n        case 0x003C:\n          // LESS-THAN SIGN\n          if (emitSimpleTag())\n            // Shortcut for <p>, <dl>, </div> etc.\n            break;\n          tokenizer = tag_open_state;\n          break;\n        case 0x0000:\n          // NULL\n          // Usually null characters emitted by the tokenizer will be\n          // ignored by the tree builder, but sometimes they'll be\n          // converted to \\uFFFD.  I don't want to have the search every\n          // string emitted to replace NULs, so I'll set a flag\n          // if I've emitted a NUL.\n          textrun.push(c);\n          textIncludesNUL = true;\n          break;\n        case -1:\n          // EOF\n          emitEOF();\n          break;\n        default:\n          // Instead of just pushing a single character and then\n          // coming back to the very same place, lookahead and\n          // emit everything we can at once.\n          /*jshint -W030 */\n          emitCharsWhile(DATATEXT) || textrun.push(c);\n          break;\n      }\n    }\n    function rcdata_state(c) {\n      // Save the open tag so we can find a matching close tag\n      switch (c) {\n        case 0x0026:\n          // AMPERSAND\n          return_state = rcdata_state;\n          tokenizer = character_reference_state;\n          break;\n        case 0x003C:\n          // LESS-THAN SIGN\n          tokenizer = rcdata_less_than_sign_state;\n          break;\n        case 0x0000:\n          // NULL\n          textrun.push(0xFFFD); // REPLACEMENT CHARACTER\n          textIncludesNUL = true;\n          break;\n        case -1:\n          // EOF\n          emitEOF();\n          break;\n        default:\n          textrun.push(c);\n          break;\n      }\n    }\n    function rawtext_state(c) {\n      switch (c) {\n        case 0x003C:\n          // LESS-THAN SIGN\n          tokenizer = rawtext_less_than_sign_state;\n          break;\n        case 0x0000:\n          // NULL\n          textrun.push(0xFFFD); // REPLACEMENT CHARACTER\n          break;\n        case -1:\n          // EOF\n          emitEOF();\n          break;\n        default:\n          /*jshint -W030 */\n          emitCharsWhile(RAWTEXT) || textrun.push(c);\n          break;\n      }\n    }\n    function script_data_state(c) {\n      switch (c) {\n        case 0x003C:\n          // LESS-THAN SIGN\n          tokenizer = script_data_less_than_sign_state;\n          break;\n        case 0x0000:\n          // NULL\n          textrun.push(0xFFFD); // REPLACEMENT CHARACTER\n          break;\n        case -1:\n          // EOF\n          emitEOF();\n          break;\n        default:\n          /*jshint -W030 */\n          emitCharsWhile(RAWTEXT) || textrun.push(c);\n          break;\n      }\n    }\n    function plaintext_state(c) {\n      switch (c) {\n        case 0x0000:\n          // NULL\n          textrun.push(0xFFFD); // REPLACEMENT CHARACTER\n          break;\n        case -1:\n          // EOF\n          emitEOF();\n          break;\n        default:\n          /*jshint -W030 */\n          emitCharsWhile(PLAINTEXT) || textrun.push(c);\n          break;\n      }\n    }\n    function tag_open_state(c) {\n      switch (c) {\n        case 0x0021:\n          // EXCLAMATION MARK\n          tokenizer = markup_declaration_open_state;\n          break;\n        case 0x002F:\n          // SOLIDUS\n          tokenizer = end_tag_open_state;\n          break;\n        case 0x0041: // [A-Z]\n        case 0x0042:\n        case 0x0043:\n        case 0x0044:\n        case 0x0045:\n        case 0x0046:\n        case 0x0047:\n        case 0x0048:\n        case 0x0049:\n        case 0x004A:\n        case 0x004B:\n        case 0x004C:\n        case 0x004D:\n        case 0x004E:\n        case 0x004F:\n        case 0x0050:\n        case 0x0051:\n        case 0x0052:\n        case 0x0053:\n        case 0x0054:\n        case 0x0055:\n        case 0x0056:\n        case 0x0057:\n        case 0x0058:\n        case 0x0059:\n        case 0x005A:\n        case 0x0061: // [a-z]\n        case 0x0062:\n        case 0x0063:\n        case 0x0064:\n        case 0x0065:\n        case 0x0066:\n        case 0x0067:\n        case 0x0068:\n        case 0x0069:\n        case 0x006A:\n        case 0x006B:\n        case 0x006C:\n        case 0x006D:\n        case 0x006E:\n        case 0x006F:\n        case 0x0070:\n        case 0x0071:\n        case 0x0072:\n        case 0x0073:\n        case 0x0074:\n        case 0x0075:\n        case 0x0076:\n        case 0x0077:\n        case 0x0078:\n        case 0x0079:\n        case 0x007A:\n          beginTagName();\n          reconsume(c, tag_name_state);\n          break;\n        case 0x003F:\n          // QUESTION MARK\n          reconsume(c, bogus_comment_state);\n          break;\n        default:\n          textrun.push(0x003C); // LESS-THAN SIGN\n          reconsume(c, data_state);\n          break;\n      }\n    }\n    function end_tag_open_state(c) {\n      switch (c) {\n        case 0x0041: // [A-Z]\n        case 0x0042:\n        case 0x0043:\n        case 0x0044:\n        case 0x0045:\n        case 0x0046:\n        case 0x0047:\n        case 0x0048:\n        case 0x0049:\n        case 0x004A:\n        case 0x004B:\n        case 0x004C:\n        case 0x004D:\n        case 0x004E:\n        case 0x004F:\n        case 0x0050:\n        case 0x0051:\n        case 0x0052:\n        case 0x0053:\n        case 0x0054:\n        case 0x0055:\n        case 0x0056:\n        case 0x0057:\n        case 0x0058:\n        case 0x0059:\n        case 0x005A:\n        case 0x0061: // [a-z]\n        case 0x0062:\n        case 0x0063:\n        case 0x0064:\n        case 0x0065:\n        case 0x0066:\n        case 0x0067:\n        case 0x0068:\n        case 0x0069:\n        case 0x006A:\n        case 0x006B:\n        case 0x006C:\n        case 0x006D:\n        case 0x006E:\n        case 0x006F:\n        case 0x0070:\n        case 0x0071:\n        case 0x0072:\n        case 0x0073:\n        case 0x0074:\n        case 0x0075:\n        case 0x0076:\n        case 0x0077:\n        case 0x0078:\n        case 0x0079:\n        case 0x007A:\n          beginEndTagName();\n          reconsume(c, tag_name_state);\n          break;\n        case 0x003E:\n          // GREATER-THAN SIGN\n          tokenizer = data_state;\n          break;\n        case -1:\n          // EOF\n          textrun.push(0x003C); // LESS-THAN SIGN\n          textrun.push(0x002F); // SOLIDUS\n          emitEOF();\n          break;\n        default:\n          reconsume(c, bogus_comment_state);\n          break;\n      }\n    }\n    function tag_name_state(c) {\n      switch (c) {\n        case 0x0009: // CHARACTER TABULATION (tab)\n        case 0x000A: // LINE FEED (LF)\n        case 0x000C: // FORM FEED (FF)\n        case 0x0020:\n          // SPACE\n          tokenizer = before_attribute_name_state;\n          break;\n        case 0x002F:\n          // SOLIDUS\n          tokenizer = self_closing_start_tag_state;\n          break;\n        case 0x003E:\n          // GREATER-THAN SIGN\n          tokenizer = data_state;\n          emitTag();\n          break;\n        case 0x0041: // [A-Z]\n        case 0x0042:\n        case 0x0043:\n        case 0x0044:\n        case 0x0045:\n        case 0x0046:\n        case 0x0047:\n        case 0x0048:\n        case 0x0049:\n        case 0x004A:\n        case 0x004B:\n        case 0x004C:\n        case 0x004D:\n        case 0x004E:\n        case 0x004F:\n        case 0x0050:\n        case 0x0051:\n        case 0x0052:\n        case 0x0053:\n        case 0x0054:\n        case 0x0055:\n        case 0x0056:\n        case 0x0057:\n        case 0x0058:\n        case 0x0059:\n        case 0x005A:\n          tagnamebuf += String.fromCharCode(c + 0x0020);\n          break;\n        case 0x0000:\n          // NULL\n          tagnamebuf += String.fromCharCode(0xFFFD /* REPLACEMENT CHARACTER */);\n          break;\n        case -1:\n          // EOF\n          emitEOF();\n          break;\n        default:\n          tagnamebuf += getMatchingChars(TAGNAME);\n          break;\n      }\n    }\n    function rcdata_less_than_sign_state(c) {\n      /* identical to the RAWTEXT less-than sign state, except s/RAWTEXT/RCDATA/g */\n      if (c === 0x002F) {\n        // SOLIDUS\n        beginTempBuf();\n        tokenizer = rcdata_end_tag_open_state;\n      } else {\n        textrun.push(0x003C); // LESS-THAN SIGN\n        reconsume(c, rcdata_state);\n      }\n    }\n    function rcdata_end_tag_open_state(c) {\n      /* identical to the RAWTEXT (and Script data) end tag open state, except s/RAWTEXT/RCDATA/g */\n      switch (c) {\n        case 0x0041: // [A-Z]\n        case 0x0042:\n        case 0x0043:\n        case 0x0044:\n        case 0x0045:\n        case 0x0046:\n        case 0x0047:\n        case 0x0048:\n        case 0x0049:\n        case 0x004A:\n        case 0x004B:\n        case 0x004C:\n        case 0x004D:\n        case 0x004E:\n        case 0x004F:\n        case 0x0050:\n        case 0x0051:\n        case 0x0052:\n        case 0x0053:\n        case 0x0054:\n        case 0x0055:\n        case 0x0056:\n        case 0x0057:\n        case 0x0058:\n        case 0x0059:\n        case 0x005A:\n        case 0x0061: // [a-z]\n        case 0x0062:\n        case 0x0063:\n        case 0x0064:\n        case 0x0065:\n        case 0x0066:\n        case 0x0067:\n        case 0x0068:\n        case 0x0069:\n        case 0x006A:\n        case 0x006B:\n        case 0x006C:\n        case 0x006D:\n        case 0x006E:\n        case 0x006F:\n        case 0x0070:\n        case 0x0071:\n        case 0x0072:\n        case 0x0073:\n        case 0x0074:\n        case 0x0075:\n        case 0x0076:\n        case 0x0077:\n        case 0x0078:\n        case 0x0079:\n        case 0x007A:\n          beginEndTagName();\n          reconsume(c, rcdata_end_tag_name_state);\n          break;\n        default:\n          textrun.push(0x003C); // LESS-THAN SIGN\n          textrun.push(0x002F); // SOLIDUS\n          reconsume(c, rcdata_state);\n          break;\n      }\n    }\n    function rcdata_end_tag_name_state(c) {\n      /* identical to the RAWTEXT (and Script data) end tag name state, except s/RAWTEXT/RCDATA/g */\n      switch (c) {\n        case 0x0009: // CHARACTER TABULATION (tab)\n        case 0x000A: // LINE FEED (LF)\n        case 0x000C: // FORM FEED (FF)\n        case 0x0020:\n          // SPACE\n          if (appropriateEndTag(tagnamebuf)) {\n            tokenizer = before_attribute_name_state;\n            return;\n          }\n          break;\n        case 0x002F:\n          // SOLIDUS\n          if (appropriateEndTag(tagnamebuf)) {\n            tokenizer = self_closing_start_tag_state;\n            return;\n          }\n          break;\n        case 0x003E:\n          // GREATER-THAN SIGN\n          if (appropriateEndTag(tagnamebuf)) {\n            tokenizer = data_state;\n            emitTag();\n            return;\n          }\n          break;\n        case 0x0041: // [A-Z]\n        case 0x0042:\n        case 0x0043:\n        case 0x0044:\n        case 0x0045:\n        case 0x0046:\n        case 0x0047:\n        case 0x0048:\n        case 0x0049:\n        case 0x004A:\n        case 0x004B:\n        case 0x004C:\n        case 0x004D:\n        case 0x004E:\n        case 0x004F:\n        case 0x0050:\n        case 0x0051:\n        case 0x0052:\n        case 0x0053:\n        case 0x0054:\n        case 0x0055:\n        case 0x0056:\n        case 0x0057:\n        case 0x0058:\n        case 0x0059:\n        case 0x005A:\n          tagnamebuf += String.fromCharCode(c + 0x0020);\n          tempbuf.push(c);\n          return;\n        case 0x0061: // [a-z]\n        case 0x0062:\n        case 0x0063:\n        case 0x0064:\n        case 0x0065:\n        case 0x0066:\n        case 0x0067:\n        case 0x0068:\n        case 0x0069:\n        case 0x006A:\n        case 0x006B:\n        case 0x006C:\n        case 0x006D:\n        case 0x006E:\n        case 0x006F:\n        case 0x0070:\n        case 0x0071:\n        case 0x0072:\n        case 0x0073:\n        case 0x0074:\n        case 0x0075:\n        case 0x0076:\n        case 0x0077:\n        case 0x0078:\n        case 0x0079:\n        case 0x007A:\n          tagnamebuf += String.fromCharCode(c);\n          tempbuf.push(c);\n          return;\n      }\n\n      // If we don't return in one of the cases above, then this was not\n      // an appropriately matching close tag, so back out by emitting all\n      // the characters as text\n      textrun.push(0x003C); // LESS-THAN SIGN\n      textrun.push(0x002F); // SOLIDUS\n      pushAll(textrun, tempbuf);\n      reconsume(c, rcdata_state);\n    }\n    function rawtext_less_than_sign_state(c) {\n      /* identical to the RCDATA less-than sign state, except s/RCDATA/RAWTEXT/g\n       */\n      if (c === 0x002F) {\n        // SOLIDUS\n        beginTempBuf();\n        tokenizer = rawtext_end_tag_open_state;\n      } else {\n        textrun.push(0x003C); // LESS-THAN SIGN\n        reconsume(c, rawtext_state);\n      }\n    }\n    function rawtext_end_tag_open_state(c) {\n      /* identical to the RCDATA (and Script data) end tag open state, except s/RCDATA/RAWTEXT/g */\n      switch (c) {\n        case 0x0041: // [A-Z]\n        case 0x0042:\n        case 0x0043:\n        case 0x0044:\n        case 0x0045:\n        case 0x0046:\n        case 0x0047:\n        case 0x0048:\n        case 0x0049:\n        case 0x004A:\n        case 0x004B:\n        case 0x004C:\n        case 0x004D:\n        case 0x004E:\n        case 0x004F:\n        case 0x0050:\n        case 0x0051:\n        case 0x0052:\n        case 0x0053:\n        case 0x0054:\n        case 0x0055:\n        case 0x0056:\n        case 0x0057:\n        case 0x0058:\n        case 0x0059:\n        case 0x005A:\n        case 0x0061: // [a-z]\n        case 0x0062:\n        case 0x0063:\n        case 0x0064:\n        case 0x0065:\n        case 0x0066:\n        case 0x0067:\n        case 0x0068:\n        case 0x0069:\n        case 0x006A:\n        case 0x006B:\n        case 0x006C:\n        case 0x006D:\n        case 0x006E:\n        case 0x006F:\n        case 0x0070:\n        case 0x0071:\n        case 0x0072:\n        case 0x0073:\n        case 0x0074:\n        case 0x0075:\n        case 0x0076:\n        case 0x0077:\n        case 0x0078:\n        case 0x0079:\n        case 0x007A:\n          beginEndTagName();\n          reconsume(c, rawtext_end_tag_name_state);\n          break;\n        default:\n          textrun.push(0x003C); // LESS-THAN SIGN\n          textrun.push(0x002F); // SOLIDUS\n          reconsume(c, rawtext_state);\n          break;\n      }\n    }\n    function rawtext_end_tag_name_state(c) {\n      /* identical to the RCDATA (and Script data) end tag name state, except s/RCDATA/RAWTEXT/g */\n      switch (c) {\n        case 0x0009: // CHARACTER TABULATION (tab)\n        case 0x000A: // LINE FEED (LF)\n        case 0x000C: // FORM FEED (FF)\n        case 0x0020:\n          // SPACE\n          if (appropriateEndTag(tagnamebuf)) {\n            tokenizer = before_attribute_name_state;\n            return;\n          }\n          break;\n        case 0x002F:\n          // SOLIDUS\n          if (appropriateEndTag(tagnamebuf)) {\n            tokenizer = self_closing_start_tag_state;\n            return;\n          }\n          break;\n        case 0x003E:\n          // GREATER-THAN SIGN\n          if (appropriateEndTag(tagnamebuf)) {\n            tokenizer = data_state;\n            emitTag();\n            return;\n          }\n          break;\n        case 0x0041: // [A-Z]\n        case 0x0042:\n        case 0x0043:\n        case 0x0044:\n        case 0x0045:\n        case 0x0046:\n        case 0x0047:\n        case 0x0048:\n        case 0x0049:\n        case 0x004A:\n        case 0x004B:\n        case 0x004C:\n        case 0x004D:\n        case 0x004E:\n        case 0x004F:\n        case 0x0050:\n        case 0x0051:\n        case 0x0052:\n        case 0x0053:\n        case 0x0054:\n        case 0x0055:\n        case 0x0056:\n        case 0x0057:\n        case 0x0058:\n        case 0x0059:\n        case 0x005A:\n          tagnamebuf += String.fromCharCode(c + 0x0020);\n          tempbuf.push(c);\n          return;\n        case 0x0061: // [a-z]\n        case 0x0062:\n        case 0x0063:\n        case 0x0064:\n        case 0x0065:\n        case 0x0066:\n        case 0x0067:\n        case 0x0068:\n        case 0x0069:\n        case 0x006A:\n        case 0x006B:\n        case 0x006C:\n        case 0x006D:\n        case 0x006E:\n        case 0x006F:\n        case 0x0070:\n        case 0x0071:\n        case 0x0072:\n        case 0x0073:\n        case 0x0074:\n        case 0x0075:\n        case 0x0076:\n        case 0x0077:\n        case 0x0078:\n        case 0x0079:\n        case 0x007A:\n          tagnamebuf += String.fromCharCode(c);\n          tempbuf.push(c);\n          return;\n      }\n\n      // If we don't return in one of the cases above, then this was not\n      // an appropriately matching close tag, so back out by emitting all\n      // the characters as text\n      textrun.push(0x003C); // LESS-THAN SIGN\n      textrun.push(0x002F); // SOLIDUS\n      pushAll(textrun, tempbuf);\n      reconsume(c, rawtext_state);\n    }\n    function script_data_less_than_sign_state(c) {\n      switch (c) {\n        case 0x002F:\n          // SOLIDUS\n          beginTempBuf();\n          tokenizer = script_data_end_tag_open_state;\n          break;\n        case 0x0021:\n          // EXCLAMATION MARK\n          tokenizer = script_data_escape_start_state;\n          textrun.push(0x003C); // LESS-THAN SIGN\n          textrun.push(0x0021); // EXCLAMATION MARK\n          break;\n        default:\n          textrun.push(0x003C); // LESS-THAN SIGN\n          reconsume(c, script_data_state);\n          break;\n      }\n    }\n    function script_data_end_tag_open_state(c) {\n      /* identical to the RCDATA (and RAWTEXT) end tag open state, except s/RCDATA/Script data/g */\n      switch (c) {\n        case 0x0041: // [A-Z]\n        case 0x0042:\n        case 0x0043:\n        case 0x0044:\n        case 0x0045:\n        case 0x0046:\n        case 0x0047:\n        case 0x0048:\n        case 0x0049:\n        case 0x004A:\n        case 0x004B:\n        case 0x004C:\n        case 0x004D:\n        case 0x004E:\n        case 0x004F:\n        case 0x0050:\n        case 0x0051:\n        case 0x0052:\n        case 0x0053:\n        case 0x0054:\n        case 0x0055:\n        case 0x0056:\n        case 0x0057:\n        case 0x0058:\n        case 0x0059:\n        case 0x005A:\n        case 0x0061: // [a-z]\n        case 0x0062:\n        case 0x0063:\n        case 0x0064:\n        case 0x0065:\n        case 0x0066:\n        case 0x0067:\n        case 0x0068:\n        case 0x0069:\n        case 0x006A:\n        case 0x006B:\n        case 0x006C:\n        case 0x006D:\n        case 0x006E:\n        case 0x006F:\n        case 0x0070:\n        case 0x0071:\n        case 0x0072:\n        case 0x0073:\n        case 0x0074:\n        case 0x0075:\n        case 0x0076:\n        case 0x0077:\n        case 0x0078:\n        case 0x0079:\n        case 0x007A:\n          beginEndTagName();\n          reconsume(c, script_data_end_tag_name_state);\n          break;\n        default:\n          textrun.push(0x003C); // LESS-THAN SIGN\n          textrun.push(0x002F); // SOLIDUS\n          reconsume(c, script_data_state);\n          break;\n      }\n    }\n    function script_data_end_tag_name_state(c) {\n      /* identical to the RCDATA (and RAWTEXT) end tag name state, except s/RCDATA/Script data/g */\n      switch (c) {\n        case 0x0009: // CHARACTER TABULATION (tab)\n        case 0x000A: // LINE FEED (LF)\n        case 0x000C: // FORM FEED (FF)\n        case 0x0020:\n          // SPACE\n          if (appropriateEndTag(tagnamebuf)) {\n            tokenizer = before_attribute_name_state;\n            return;\n          }\n          break;\n        case 0x002F:\n          // SOLIDUS\n          if (appropriateEndTag(tagnamebuf)) {\n            tokenizer = self_closing_start_tag_state;\n            return;\n          }\n          break;\n        case 0x003E:\n          // GREATER-THAN SIGN\n          if (appropriateEndTag(tagnamebuf)) {\n            tokenizer = data_state;\n            emitTag();\n            return;\n          }\n          break;\n        case 0x0041: // [A-Z]\n        case 0x0042:\n        case 0x0043:\n        case 0x0044:\n        case 0x0045:\n        case 0x0046:\n        case 0x0047:\n        case 0x0048:\n        case 0x0049:\n        case 0x004A:\n        case 0x004B:\n        case 0x004C:\n        case 0x004D:\n        case 0x004E:\n        case 0x004F:\n        case 0x0050:\n        case 0x0051:\n        case 0x0052:\n        case 0x0053:\n        case 0x0054:\n        case 0x0055:\n        case 0x0056:\n        case 0x0057:\n        case 0x0058:\n        case 0x0059:\n        case 0x005A:\n          tagnamebuf += String.fromCharCode(c + 0x0020);\n          tempbuf.push(c);\n          return;\n        case 0x0061: // [a-z]\n        case 0x0062:\n        case 0x0063:\n        case 0x0064:\n        case 0x0065:\n        case 0x0066:\n        case 0x0067:\n        case 0x0068:\n        case 0x0069:\n        case 0x006A:\n        case 0x006B:\n        case 0x006C:\n        case 0x006D:\n        case 0x006E:\n        case 0x006F:\n        case 0x0070:\n        case 0x0071:\n        case 0x0072:\n        case 0x0073:\n        case 0x0074:\n        case 0x0075:\n        case 0x0076:\n        case 0x0077:\n        case 0x0078:\n        case 0x0079:\n        case 0x007A:\n          tagnamebuf += String.fromCharCode(c);\n          tempbuf.push(c);\n          return;\n      }\n\n      // If we don't return in one of the cases above, then this was not\n      // an appropriately matching close tag, so back out by emitting all\n      // the characters as text\n      textrun.push(0x003C); // LESS-THAN SIGN\n      textrun.push(0x002F); // SOLIDUS\n      pushAll(textrun, tempbuf);\n      reconsume(c, script_data_state);\n    }\n    function script_data_escape_start_state(c) {\n      if (c === 0x002D) {\n        // HYPHEN-MINUS\n        tokenizer = script_data_escape_start_dash_state;\n        textrun.push(0x002D); // HYPHEN-MINUS\n      } else {\n        reconsume(c, script_data_state);\n      }\n    }\n    function script_data_escape_start_dash_state(c) {\n      if (c === 0x002D) {\n        // HYPHEN-MINUS\n        tokenizer = script_data_escaped_dash_dash_state;\n        textrun.push(0x002D); // HYPHEN-MINUS\n      } else {\n        reconsume(c, script_data_state);\n      }\n    }\n    function script_data_escaped_state(c) {\n      switch (c) {\n        case 0x002D:\n          // HYPHEN-MINUS\n          tokenizer = script_data_escaped_dash_state;\n          textrun.push(0x002D); // HYPHEN-MINUS\n          break;\n        case 0x003C:\n          // LESS-THAN SIGN\n          tokenizer = script_data_escaped_less_than_sign_state;\n          break;\n        case 0x0000:\n          // NULL\n          textrun.push(0xFFFD); // REPLACEMENT CHARACTER\n          break;\n        case -1:\n          // EOF\n          emitEOF();\n          break;\n        default:\n          textrun.push(c);\n          break;\n      }\n    }\n    function script_data_escaped_dash_state(c) {\n      switch (c) {\n        case 0x002D:\n          // HYPHEN-MINUS\n          tokenizer = script_data_escaped_dash_dash_state;\n          textrun.push(0x002D); // HYPHEN-MINUS\n          break;\n        case 0x003C:\n          // LESS-THAN SIGN\n          tokenizer = script_data_escaped_less_than_sign_state;\n          break;\n        case 0x0000:\n          // NULL\n          tokenizer = script_data_escaped_state;\n          textrun.push(0xFFFD); // REPLACEMENT CHARACTER\n          break;\n        case -1:\n          // EOF\n          emitEOF();\n          break;\n        default:\n          tokenizer = script_data_escaped_state;\n          textrun.push(c);\n          break;\n      }\n    }\n    function script_data_escaped_dash_dash_state(c) {\n      switch (c) {\n        case 0x002D:\n          // HYPHEN-MINUS\n          textrun.push(0x002D); // HYPHEN-MINUS\n          break;\n        case 0x003C:\n          // LESS-THAN SIGN\n          tokenizer = script_data_escaped_less_than_sign_state;\n          break;\n        case 0x003E:\n          // GREATER-THAN SIGN\n          tokenizer = script_data_state;\n          textrun.push(0x003E); // GREATER-THAN SIGN\n          break;\n        case 0x0000:\n          // NULL\n          tokenizer = script_data_escaped_state;\n          textrun.push(0xFFFD); // REPLACEMENT CHARACTER\n          break;\n        case -1:\n          // EOF\n          emitEOF();\n          break;\n        default:\n          tokenizer = script_data_escaped_state;\n          textrun.push(c);\n          break;\n      }\n    }\n    function script_data_escaped_less_than_sign_state(c) {\n      switch (c) {\n        case 0x002F:\n          // SOLIDUS\n          beginTempBuf();\n          tokenizer = script_data_escaped_end_tag_open_state;\n          break;\n        case 0x0041: // [A-Z]\n        case 0x0042:\n        case 0x0043:\n        case 0x0044:\n        case 0x0045:\n        case 0x0046:\n        case 0x0047:\n        case 0x0048:\n        case 0x0049:\n        case 0x004A:\n        case 0x004B:\n        case 0x004C:\n        case 0x004D:\n        case 0x004E:\n        case 0x004F:\n        case 0x0050:\n        case 0x0051:\n        case 0x0052:\n        case 0x0053:\n        case 0x0054:\n        case 0x0055:\n        case 0x0056:\n        case 0x0057:\n        case 0x0058:\n        case 0x0059:\n        case 0x005A:\n        case 0x0061: // [a-z]\n        case 0x0062:\n        case 0x0063:\n        case 0x0064:\n        case 0x0065:\n        case 0x0066:\n        case 0x0067:\n        case 0x0068:\n        case 0x0069:\n        case 0x006A:\n        case 0x006B:\n        case 0x006C:\n        case 0x006D:\n        case 0x006E:\n        case 0x006F:\n        case 0x0070:\n        case 0x0071:\n        case 0x0072:\n        case 0x0073:\n        case 0x0074:\n        case 0x0075:\n        case 0x0076:\n        case 0x0077:\n        case 0x0078:\n        case 0x0079:\n        case 0x007A:\n          beginTempBuf();\n          textrun.push(0x003C); // LESS-THAN SIGN\n          reconsume(c, script_data_double_escape_start_state);\n          break;\n        default:\n          textrun.push(0x003C); // LESS-THAN SIGN\n          reconsume(c, script_data_escaped_state);\n          break;\n      }\n    }\n    function script_data_escaped_end_tag_open_state(c) {\n      switch (c) {\n        case 0x0041: // [A-Z]\n        case 0x0042:\n        case 0x0043:\n        case 0x0044:\n        case 0x0045:\n        case 0x0046:\n        case 0x0047:\n        case 0x0048:\n        case 0x0049:\n        case 0x004A:\n        case 0x004B:\n        case 0x004C:\n        case 0x004D:\n        case 0x004E:\n        case 0x004F:\n        case 0x0050:\n        case 0x0051:\n        case 0x0052:\n        case 0x0053:\n        case 0x0054:\n        case 0x0055:\n        case 0x0056:\n        case 0x0057:\n        case 0x0058:\n        case 0x0059:\n        case 0x005A:\n        case 0x0061: // [a-z]\n        case 0x0062:\n        case 0x0063:\n        case 0x0064:\n        case 0x0065:\n        case 0x0066:\n        case 0x0067:\n        case 0x0068:\n        case 0x0069:\n        case 0x006A:\n        case 0x006B:\n        case 0x006C:\n        case 0x006D:\n        case 0x006E:\n        case 0x006F:\n        case 0x0070:\n        case 0x0071:\n        case 0x0072:\n        case 0x0073:\n        case 0x0074:\n        case 0x0075:\n        case 0x0076:\n        case 0x0077:\n        case 0x0078:\n        case 0x0079:\n        case 0x007A:\n          beginEndTagName();\n          reconsume(c, script_data_escaped_end_tag_name_state);\n          break;\n        default:\n          textrun.push(0x003C); // LESS-THAN SIGN\n          textrun.push(0x002F); // SOLIDUS\n          reconsume(c, script_data_escaped_state);\n          break;\n      }\n    }\n    function script_data_escaped_end_tag_name_state(c) {\n      switch (c) {\n        case 0x0009: // CHARACTER TABULATION (tab)\n        case 0x000A: // LINE FEED (LF)\n        case 0x000C: // FORM FEED (FF)\n        case 0x0020:\n          // SPACE\n          if (appropriateEndTag(tagnamebuf)) {\n            tokenizer = before_attribute_name_state;\n            return;\n          }\n          break;\n        case 0x002F:\n          // SOLIDUS\n          if (appropriateEndTag(tagnamebuf)) {\n            tokenizer = self_closing_start_tag_state;\n            return;\n          }\n          break;\n        case 0x003E:\n          // GREATER-THAN SIGN\n          if (appropriateEndTag(tagnamebuf)) {\n            tokenizer = data_state;\n            emitTag();\n            return;\n          }\n          break;\n        case 0x0041: // [A-Z]\n        case 0x0042:\n        case 0x0043:\n        case 0x0044:\n        case 0x0045:\n        case 0x0046:\n        case 0x0047:\n        case 0x0048:\n        case 0x0049:\n        case 0x004A:\n        case 0x004B:\n        case 0x004C:\n        case 0x004D:\n        case 0x004E:\n        case 0x004F:\n        case 0x0050:\n        case 0x0051:\n        case 0x0052:\n        case 0x0053:\n        case 0x0054:\n        case 0x0055:\n        case 0x0056:\n        case 0x0057:\n        case 0x0058:\n        case 0x0059:\n        case 0x005A:\n          tagnamebuf += String.fromCharCode(c + 0x0020);\n          tempbuf.push(c);\n          return;\n        case 0x0061: // [a-z]\n        case 0x0062:\n        case 0x0063:\n        case 0x0064:\n        case 0x0065:\n        case 0x0066:\n        case 0x0067:\n        case 0x0068:\n        case 0x0069:\n        case 0x006A:\n        case 0x006B:\n        case 0x006C:\n        case 0x006D:\n        case 0x006E:\n        case 0x006F:\n        case 0x0070:\n        case 0x0071:\n        case 0x0072:\n        case 0x0073:\n        case 0x0074:\n        case 0x0075:\n        case 0x0076:\n        case 0x0077:\n        case 0x0078:\n        case 0x0079:\n        case 0x007A:\n          tagnamebuf += String.fromCharCode(c);\n          tempbuf.push(c);\n          return;\n      }\n\n      // We get here in the default case, and if the closing tagname\n      // is not an appropriate tagname.\n      textrun.push(0x003C); // LESS-THAN SIGN\n      textrun.push(0x002F); // SOLIDUS\n      pushAll(textrun, tempbuf);\n      reconsume(c, script_data_escaped_state);\n    }\n    function script_data_double_escape_start_state(c) {\n      switch (c) {\n        case 0x0009: // CHARACTER TABULATION (tab)\n        case 0x000A: // LINE FEED (LF)\n        case 0x000C: // FORM FEED (FF)\n        case 0x0020: // SPACE\n        case 0x002F: // SOLIDUS\n        case 0x003E:\n          // GREATER-THAN SIGN\n          if (buf2str(tempbuf) === \"script\") {\n            tokenizer = script_data_double_escaped_state;\n          } else {\n            tokenizer = script_data_escaped_state;\n          }\n          textrun.push(c);\n          break;\n        case 0x0041: // [A-Z]\n        case 0x0042:\n        case 0x0043:\n        case 0x0044:\n        case 0x0045:\n        case 0x0046:\n        case 0x0047:\n        case 0x0048:\n        case 0x0049:\n        case 0x004A:\n        case 0x004B:\n        case 0x004C:\n        case 0x004D:\n        case 0x004E:\n        case 0x004F:\n        case 0x0050:\n        case 0x0051:\n        case 0x0052:\n        case 0x0053:\n        case 0x0054:\n        case 0x0055:\n        case 0x0056:\n        case 0x0057:\n        case 0x0058:\n        case 0x0059:\n        case 0x005A:\n          tempbuf.push(c + 0x0020);\n          textrun.push(c);\n          break;\n        case 0x0061: // [a-z]\n        case 0x0062:\n        case 0x0063:\n        case 0x0064:\n        case 0x0065:\n        case 0x0066:\n        case 0x0067:\n        case 0x0068:\n        case 0x0069:\n        case 0x006A:\n        case 0x006B:\n        case 0x006C:\n        case 0x006D:\n        case 0x006E:\n        case 0x006F:\n        case 0x0070:\n        case 0x0071:\n        case 0x0072:\n        case 0x0073:\n        case 0x0074:\n        case 0x0075:\n        case 0x0076:\n        case 0x0077:\n        case 0x0078:\n        case 0x0079:\n        case 0x007A:\n          tempbuf.push(c);\n          textrun.push(c);\n          break;\n        default:\n          reconsume(c, script_data_escaped_state);\n          break;\n      }\n    }\n    function script_data_double_escaped_state(c) {\n      switch (c) {\n        case 0x002D:\n          // HYPHEN-MINUS\n          tokenizer = script_data_double_escaped_dash_state;\n          textrun.push(0x002D); // HYPHEN-MINUS\n          break;\n        case 0x003C:\n          // LESS-THAN SIGN\n          tokenizer = script_data_double_escaped_less_than_sign_state;\n          textrun.push(0x003C); // LESS-THAN SIGN\n          break;\n        case 0x0000:\n          // NULL\n          textrun.push(0xFFFD); // REPLACEMENT CHARACTER\n          break;\n        case -1:\n          // EOF\n          emitEOF();\n          break;\n        default:\n          textrun.push(c);\n          break;\n      }\n    }\n    function script_data_double_escaped_dash_state(c) {\n      switch (c) {\n        case 0x002D:\n          // HYPHEN-MINUS\n          tokenizer = script_data_double_escaped_dash_dash_state;\n          textrun.push(0x002D); // HYPHEN-MINUS\n          break;\n        case 0x003C:\n          // LESS-THAN SIGN\n          tokenizer = script_data_double_escaped_less_than_sign_state;\n          textrun.push(0x003C); // LESS-THAN SIGN\n          break;\n        case 0x0000:\n          // NULL\n          tokenizer = script_data_double_escaped_state;\n          textrun.push(0xFFFD); // REPLACEMENT CHARACTER\n          break;\n        case -1:\n          // EOF\n          emitEOF();\n          break;\n        default:\n          tokenizer = script_data_double_escaped_state;\n          textrun.push(c);\n          break;\n      }\n    }\n    function script_data_double_escaped_dash_dash_state(c) {\n      switch (c) {\n        case 0x002D:\n          // HYPHEN-MINUS\n          textrun.push(0x002D); // HYPHEN-MINUS\n          break;\n        case 0x003C:\n          // LESS-THAN SIGN\n          tokenizer = script_data_double_escaped_less_than_sign_state;\n          textrun.push(0x003C); // LESS-THAN SIGN\n          break;\n        case 0x003E:\n          // GREATER-THAN SIGN\n          tokenizer = script_data_state;\n          textrun.push(0x003E); // GREATER-THAN SIGN\n          break;\n        case 0x0000:\n          // NULL\n          tokenizer = script_data_double_escaped_state;\n          textrun.push(0xFFFD); // REPLACEMENT CHARACTER\n          break;\n        case -1:\n          // EOF\n          emitEOF();\n          break;\n        default:\n          tokenizer = script_data_double_escaped_state;\n          textrun.push(c);\n          break;\n      }\n    }\n    function script_data_double_escaped_less_than_sign_state(c) {\n      if (c === 0x002F) {\n        // SOLIDUS\n        beginTempBuf();\n        tokenizer = script_data_double_escape_end_state;\n        textrun.push(0x002F); // SOLIDUS\n      } else {\n        reconsume(c, script_data_double_escaped_state);\n      }\n    }\n    function script_data_double_escape_end_state(c) {\n      switch (c) {\n        case 0x0009: // CHARACTER TABULATION (tab)\n        case 0x000A: // LINE FEED (LF)\n        case 0x000C: // FORM FEED (FF)\n        case 0x0020: // SPACE\n        case 0x002F: // SOLIDUS\n        case 0x003E:\n          // GREATER-THAN SIGN\n          if (buf2str(tempbuf) === \"script\") {\n            tokenizer = script_data_escaped_state;\n          } else {\n            tokenizer = script_data_double_escaped_state;\n          }\n          textrun.push(c);\n          break;\n        case 0x0041: // [A-Z]\n        case 0x0042:\n        case 0x0043:\n        case 0x0044:\n        case 0x0045:\n        case 0x0046:\n        case 0x0047:\n        case 0x0048:\n        case 0x0049:\n        case 0x004A:\n        case 0x004B:\n        case 0x004C:\n        case 0x004D:\n        case 0x004E:\n        case 0x004F:\n        case 0x0050:\n        case 0x0051:\n        case 0x0052:\n        case 0x0053:\n        case 0x0054:\n        case 0x0055:\n        case 0x0056:\n        case 0x0057:\n        case 0x0058:\n        case 0x0059:\n        case 0x005A:\n          tempbuf.push(c + 0x0020);\n          textrun.push(c);\n          break;\n        case 0x0061: // [a-z]\n        case 0x0062:\n        case 0x0063:\n        case 0x0064:\n        case 0x0065:\n        case 0x0066:\n        case 0x0067:\n        case 0x0068:\n        case 0x0069:\n        case 0x006A:\n        case 0x006B:\n        case 0x006C:\n        case 0x006D:\n        case 0x006E:\n        case 0x006F:\n        case 0x0070:\n        case 0x0071:\n        case 0x0072:\n        case 0x0073:\n        case 0x0074:\n        case 0x0075:\n        case 0x0076:\n        case 0x0077:\n        case 0x0078:\n        case 0x0079:\n        case 0x007A:\n          tempbuf.push(c);\n          textrun.push(c);\n          break;\n        default:\n          reconsume(c, script_data_double_escaped_state);\n          break;\n      }\n    }\n    function before_attribute_name_state(c) {\n      switch (c) {\n        case 0x0009: // CHARACTER TABULATION (tab)\n        case 0x000A: // LINE FEED (LF)\n        case 0x000C: // FORM FEED (FF)\n        case 0x0020:\n          // SPACE\n          /* Ignore the character. */\n          break;\n        // For SOLIDUS, GREATER-THAN SIGN, and EOF, spec says \"reconsume in\n        // the after attribute name state\", but in our implementation that\n        // state always has an active attribute in attrnamebuf.  Just clone\n        // the rules here, without the addAttribute business.\n        case 0x002F:\n          // SOLIDUS\n          tokenizer = self_closing_start_tag_state;\n          break;\n        case 0x003E:\n          // GREATER-THAN SIGN\n          tokenizer = data_state;\n          emitTag();\n          break;\n        case -1:\n          // EOF\n          emitEOF();\n          break;\n        case 0x003D:\n          // EQUALS SIGN\n          beginAttrName();\n          attrnamebuf += String.fromCharCode(c);\n          tokenizer = attribute_name_state;\n          break;\n        default:\n          if (handleSimpleAttribute()) break;\n          beginAttrName();\n          reconsume(c, attribute_name_state);\n          break;\n      }\n    }\n\n    // beginAttrName() must have been called before this point\n    // There is an active attribute in attrnamebuf (but not attrvaluebuf)\n    function attribute_name_state(c) {\n      switch (c) {\n        case 0x0009: // CHARACTER TABULATION (tab)\n        case 0x000A: // LINE FEED (LF)\n        case 0x000C: // FORM FEED (FF)\n        case 0x0020: // SPACE\n        case 0x002F: // SOLIDUS\n        case 0x003E: // GREATER-THAN SIGN\n        case -1:\n          // EOF\n          reconsume(c, after_attribute_name_state);\n          break;\n        case 0x003D:\n          // EQUALS SIGN\n          tokenizer = before_attribute_value_state;\n          break;\n        case 0x0041: // [A-Z]\n        case 0x0042:\n        case 0x0043:\n        case 0x0044:\n        case 0x0045:\n        case 0x0046:\n        case 0x0047:\n        case 0x0048:\n        case 0x0049:\n        case 0x004A:\n        case 0x004B:\n        case 0x004C:\n        case 0x004D:\n        case 0x004E:\n        case 0x004F:\n        case 0x0050:\n        case 0x0051:\n        case 0x0052:\n        case 0x0053:\n        case 0x0054:\n        case 0x0055:\n        case 0x0056:\n        case 0x0057:\n        case 0x0058:\n        case 0x0059:\n        case 0x005A:\n          attrnamebuf += String.fromCharCode(c + 0x0020);\n          break;\n        case 0x0000:\n          // NULL\n          attrnamebuf += String.fromCharCode(0xFFFD /* REPLACEMENT CHARACTER */);\n          break;\n        case 0x0022: // QUOTATION MARK\n        case 0x0027: // APOSTROPHE\n        case 0x003C: // LESS-THAN SIGN\n        /* falls through */\n        default:\n          attrnamebuf += getMatchingChars(ATTRNAME);\n          break;\n      }\n    }\n\n    // There is an active attribute in attrnamebuf, but not yet in attrvaluebuf.\n    function after_attribute_name_state(c) {\n      switch (c) {\n        case 0x0009: // CHARACTER TABULATION (tab)\n        case 0x000A: // LINE FEED (LF)\n        case 0x000C: // FORM FEED (FF)\n        case 0x0020:\n          // SPACE\n          /* Ignore the character. */\n          break;\n        case 0x002F:\n          // SOLIDUS\n          // Keep in sync with before_attribute_name_state.\n          addAttribute(attrnamebuf);\n          tokenizer = self_closing_start_tag_state;\n          break;\n        case 0x003D:\n          // EQUALS SIGN\n          tokenizer = before_attribute_value_state;\n          break;\n        case 0x003E:\n          // GREATER-THAN SIGN\n          // Keep in sync with before_attribute_name_state.\n          tokenizer = data_state;\n          addAttribute(attrnamebuf);\n          emitTag();\n          break;\n        case -1:\n          // EOF\n          // Keep in sync with before_attribute_name_state.\n          addAttribute(attrnamebuf);\n          emitEOF();\n          break;\n        default:\n          addAttribute(attrnamebuf);\n          beginAttrName();\n          reconsume(c, attribute_name_state);\n          break;\n      }\n    }\n    function before_attribute_value_state(c) {\n      switch (c) {\n        case 0x0009: // CHARACTER TABULATION (tab)\n        case 0x000A: // LINE FEED (LF)\n        case 0x000C: // FORM FEED (FF)\n        case 0x0020:\n          // SPACE\n          /* Ignore the character. */\n          break;\n        case 0x0022:\n          // QUOTATION MARK\n          beginAttrValue();\n          tokenizer = attribute_value_double_quoted_state;\n          break;\n        case 0x0027:\n          // APOSTROPHE\n          beginAttrValue();\n          tokenizer = attribute_value_single_quoted_state;\n          break;\n        case 0x003E: // GREATER-THAN SIGN\n        /* falls through */\n        default:\n          beginAttrValue();\n          reconsume(c, attribute_value_unquoted_state);\n          break;\n      }\n    }\n    function attribute_value_double_quoted_state(c) {\n      switch (c) {\n        case 0x0022:\n          // QUOTATION MARK\n          addAttribute(attrnamebuf, attrvaluebuf);\n          tokenizer = after_attribute_value_quoted_state;\n          break;\n        case 0x0026:\n          // AMPERSAND\n          return_state = attribute_value_double_quoted_state;\n          tokenizer = character_reference_state;\n          break;\n        case 0x0000:\n          // NULL\n          attrvaluebuf += String.fromCharCode(0xFFFD /* REPLACEMENT CHARACTER */);\n          break;\n        case -1:\n          // EOF\n          emitEOF();\n          break;\n        case 0x000A:\n          // LF\n          // this could be a converted \\r, so don't use getMatchingChars\n          attrvaluebuf += String.fromCharCode(c);\n          break;\n        default:\n          attrvaluebuf += getMatchingChars(DBLQUOTEATTRVAL);\n          break;\n      }\n    }\n    function attribute_value_single_quoted_state(c) {\n      switch (c) {\n        case 0x0027:\n          // APOSTROPHE\n          addAttribute(attrnamebuf, attrvaluebuf);\n          tokenizer = after_attribute_value_quoted_state;\n          break;\n        case 0x0026:\n          // AMPERSAND\n          return_state = attribute_value_single_quoted_state;\n          tokenizer = character_reference_state;\n          break;\n        case 0x0000:\n          // NULL\n          attrvaluebuf += String.fromCharCode(0xFFFD /* REPLACEMENT CHARACTER */);\n          break;\n        case -1:\n          // EOF\n          emitEOF();\n          break;\n        case 0x000A:\n          // LF\n          // this could be a converted \\r, so don't use getMatchingChars\n          attrvaluebuf += String.fromCharCode(c);\n          break;\n        default:\n          attrvaluebuf += getMatchingChars(SINGLEQUOTEATTRVAL);\n          break;\n      }\n    }\n    function attribute_value_unquoted_state(c) {\n      switch (c) {\n        case 0x0009: // CHARACTER TABULATION (tab)\n        case 0x000A: // LINE FEED (LF)\n        case 0x000C: // FORM FEED (FF)\n        case 0x0020:\n          // SPACE\n          addAttribute(attrnamebuf, attrvaluebuf);\n          tokenizer = before_attribute_name_state;\n          break;\n        case 0x0026:\n          // AMPERSAND\n          return_state = attribute_value_unquoted_state;\n          tokenizer = character_reference_state;\n          break;\n        case 0x003E:\n          // GREATER-THAN SIGN\n          addAttribute(attrnamebuf, attrvaluebuf);\n          tokenizer = data_state;\n          emitTag();\n          break;\n        case 0x0000:\n          // NULL\n          attrvaluebuf += String.fromCharCode(0xFFFD /* REPLACEMENT CHARACTER */);\n          break;\n        case -1:\n          // EOF\n          nextchar--; // pushback\n          tokenizer = data_state;\n          break;\n        case 0x0022: // QUOTATION MARK\n        case 0x0027: // APOSTROPHE\n        case 0x003C: // LESS-THAN SIGN\n        case 0x003D: // EQUALS SIGN\n        case 0x0060: // GRAVE ACCENT\n        /* falls through */\n        default:\n          attrvaluebuf += getMatchingChars(UNQUOTEDATTRVAL);\n          break;\n      }\n    }\n    function after_attribute_value_quoted_state(c) {\n      switch (c) {\n        case 0x0009: // CHARACTER TABULATION (tab)\n        case 0x000A: // LINE FEED (LF)\n        case 0x000C: // FORM FEED (FF)\n        case 0x0020:\n          // SPACE\n          tokenizer = before_attribute_name_state;\n          break;\n        case 0x002F:\n          // SOLIDUS\n          tokenizer = self_closing_start_tag_state;\n          break;\n        case 0x003E:\n          // GREATER-THAN SIGN\n          tokenizer = data_state;\n          emitTag();\n          break;\n        case -1:\n          // EOF\n          emitEOF();\n          break;\n        default:\n          reconsume(c, before_attribute_name_state);\n          break;\n      }\n    }\n    function self_closing_start_tag_state(c) {\n      switch (c) {\n        case 0x003E:\n          // GREATER-THAN SIGN\n          // Set the <i>self-closing flag</i> of the current tag token.\n          tokenizer = data_state;\n          emitSelfClosingTag();\n          break;\n        case -1:\n          // EOF\n          emitEOF();\n          break;\n        default:\n          reconsume(c, before_attribute_name_state);\n          break;\n      }\n    }\n    function bogus_comment_state(c, lookahead, eof) {\n      var len = lookahead.length;\n      if (eof) {\n        nextchar += len - 1; // don't consume the eof\n      } else {\n        nextchar += len;\n      }\n      var comment = lookahead.substring(0, len - 1);\n      comment = comment.replace(/\\u0000/g, \"\\uFFFD\");\n      comment = comment.replace(/\\u000D\\u000A/g, \"\\u000A\");\n      comment = comment.replace(/\\u000D/g, \"\\u000A\");\n      insertToken(COMMENT, comment);\n      tokenizer = data_state;\n    }\n    bogus_comment_state.lookahead = \">\";\n    function markup_declaration_open_state(c, lookahead, eof) {\n      if (lookahead[0] === \"-\" && lookahead[1] === \"-\") {\n        nextchar += 2;\n        beginComment();\n        tokenizer = comment_start_state;\n        return;\n      }\n      if (lookahead.toUpperCase() === \"DOCTYPE\") {\n        nextchar += 7;\n        tokenizer = doctype_state;\n      } else if (lookahead === \"[CDATA[\" && cdataAllowed()) {\n        nextchar += 7;\n        tokenizer = cdata_section_state;\n      } else {\n        tokenizer = bogus_comment_state;\n      }\n    }\n    markup_declaration_open_state.lookahead = 7;\n    function comment_start_state(c) {\n      beginComment();\n      switch (c) {\n        case 0x002D:\n          // HYPHEN-MINUS\n          tokenizer = comment_start_dash_state;\n          break;\n        case 0x003E:\n          // GREATER-THAN SIGN\n          tokenizer = data_state;\n          insertToken(COMMENT, buf2str(commentbuf));\n          break;\n        /* see comment in comment end state */\n        default:\n          reconsume(c, comment_state);\n          break;\n      }\n    }\n    function comment_start_dash_state(c) {\n      switch (c) {\n        case 0x002D:\n          // HYPHEN-MINUS\n          tokenizer = comment_end_state;\n          break;\n        case 0x003E:\n          // GREATER-THAN SIGN\n          tokenizer = data_state;\n          insertToken(COMMENT, buf2str(commentbuf));\n          break;\n        case -1:\n          // EOF\n          insertToken(COMMENT, buf2str(commentbuf));\n          emitEOF();\n          break;\n        /* see comment in comment end state */\n        default:\n          commentbuf.push(0x002D /* HYPHEN-MINUS */);\n          reconsume(c, comment_state);\n          break;\n      }\n    }\n    function comment_state(c) {\n      switch (c) {\n        case 0x003C:\n          // LESS-THAN SIGN\n          commentbuf.push(c);\n          tokenizer = comment_less_than_sign_state;\n          break;\n        case 0x002D:\n          // HYPHEN-MINUS\n          tokenizer = comment_end_dash_state;\n          break;\n        case 0x0000:\n          // NULL\n          commentbuf.push(0xFFFD /* REPLACEMENT CHARACTER */);\n          break;\n        case -1:\n          // EOF\n          insertToken(COMMENT, buf2str(commentbuf));\n          emitEOF();\n          break;\n        /* see comment in comment end state */\n        default:\n          commentbuf.push(c);\n          break;\n      }\n    }\n    function comment_less_than_sign_state(c) {\n      switch (c) {\n        case 0x0021:\n          // EXCLAMATION MARK\n          commentbuf.push(c);\n          tokenizer = comment_less_than_sign_bang_state;\n          break;\n        case 0x003C:\n          // LESS-THAN SIGN\n          commentbuf.push(c);\n          break;\n        default:\n          reconsume(c, comment_state);\n          break;\n      }\n    }\n    function comment_less_than_sign_bang_state(c) {\n      switch (c) {\n        case 0x002D:\n          // HYPHEN-MINUS\n          tokenizer = comment_less_than_sign_bang_dash_state;\n          break;\n        default:\n          reconsume(c, comment_state);\n          break;\n      }\n    }\n    function comment_less_than_sign_bang_dash_state(c) {\n      switch (c) {\n        case 0x002D:\n          // HYPHEN-MINUS\n          tokenizer = comment_less_than_sign_bang_dash_dash_state;\n          break;\n        default:\n          reconsume(c, comment_end_dash_state);\n          break;\n      }\n    }\n    function comment_less_than_sign_bang_dash_dash_state(c) {\n      switch (c) {\n        case 0x003E: // GREATER-THAN SIGN\n        case -1:\n          // EOF\n          reconsume(c, comment_end_state);\n          break;\n        default:\n          // parse error\n          reconsume(c, comment_end_state);\n          break;\n      }\n    }\n    function comment_end_dash_state(c) {\n      switch (c) {\n        case 0x002D:\n          // HYPHEN-MINUS\n          tokenizer = comment_end_state;\n          break;\n        case -1:\n          // EOF\n          insertToken(COMMENT, buf2str(commentbuf));\n          emitEOF();\n          break;\n        /* see comment in comment end state */\n        default:\n          commentbuf.push(0x002D /* HYPHEN-MINUS */);\n          reconsume(c, comment_state);\n          break;\n      }\n    }\n    function comment_end_state(c) {\n      switch (c) {\n        case 0x003E:\n          // GREATER-THAN SIGN\n          tokenizer = data_state;\n          insertToken(COMMENT, buf2str(commentbuf));\n          break;\n        case 0x0021:\n          // EXCLAMATION MARK\n          tokenizer = comment_end_bang_state;\n          break;\n        case 0x002D:\n          // HYPHEN-MINUS\n          commentbuf.push(0x002D);\n          break;\n        case -1:\n          // EOF\n          insertToken(COMMENT, buf2str(commentbuf));\n          emitEOF();\n          break;\n        /* For security reasons: otherwise, hostile user could put a script in a comment e.g. in a blog comment and then DOS the server so that the end tag isn't read, and then the commented script tag would be treated as live code */\n        default:\n          commentbuf.push(0x002D);\n          commentbuf.push(0x002D);\n          reconsume(c, comment_state);\n          break;\n      }\n    }\n    function comment_end_bang_state(c) {\n      switch (c) {\n        case 0x002D:\n          // HYPHEN-MINUS\n          commentbuf.push(0x002D);\n          commentbuf.push(0x002D);\n          commentbuf.push(0x0021);\n          tokenizer = comment_end_dash_state;\n          break;\n        case 0x003E:\n          // GREATER-THAN SIGN\n          tokenizer = data_state;\n          insertToken(COMMENT, buf2str(commentbuf));\n          break;\n        case -1:\n          // EOF\n          insertToken(COMMENT, buf2str(commentbuf));\n          emitEOF();\n          break;\n        /* see comment in comment end state */\n        default:\n          commentbuf.push(0x002D);\n          commentbuf.push(0x002D);\n          commentbuf.push(0x0021);\n          reconsume(c, comment_state);\n          break;\n      }\n    }\n    function doctype_state(c) {\n      switch (c) {\n        case 0x0009: // CHARACTER TABULATION (tab)\n        case 0x000A: // LINE FEED (LF)\n        case 0x000C: // FORM FEED (FF)\n        case 0x0020:\n          // SPACE\n          tokenizer = before_doctype_name_state;\n          break;\n        case -1:\n          // EOF\n          beginDoctype();\n          forcequirks();\n          emitDoctype();\n          emitEOF();\n          break;\n        default:\n          reconsume(c, before_doctype_name_state);\n          break;\n      }\n    }\n    function before_doctype_name_state(c) {\n      switch (c) {\n        case 0x0009: // CHARACTER TABULATION (tab)\n        case 0x000A: // LINE FEED (LF)\n        case 0x000C: // FORM FEED (FF)\n        case 0x0020:\n          // SPACE\n          /* Ignore the character. */\n          break;\n        case 0x0041: // [A-Z]\n        case 0x0042:\n        case 0x0043:\n        case 0x0044:\n        case 0x0045:\n        case 0x0046:\n        case 0x0047:\n        case 0x0048:\n        case 0x0049:\n        case 0x004A:\n        case 0x004B:\n        case 0x004C:\n        case 0x004D:\n        case 0x004E:\n        case 0x004F:\n        case 0x0050:\n        case 0x0051:\n        case 0x0052:\n        case 0x0053:\n        case 0x0054:\n        case 0x0055:\n        case 0x0056:\n        case 0x0057:\n        case 0x0058:\n        case 0x0059:\n        case 0x005A:\n          beginDoctype();\n          doctypenamebuf.push(c + 0x0020);\n          tokenizer = doctype_name_state;\n          break;\n        case 0x0000:\n          // NULL\n          beginDoctype();\n          doctypenamebuf.push(0xFFFD);\n          tokenizer = doctype_name_state;\n          break;\n        case 0x003E:\n          // GREATER-THAN SIGN\n          beginDoctype();\n          forcequirks();\n          tokenizer = data_state;\n          emitDoctype();\n          break;\n        case -1:\n          // EOF\n          beginDoctype();\n          forcequirks();\n          emitDoctype();\n          emitEOF();\n          break;\n        default:\n          beginDoctype();\n          doctypenamebuf.push(c);\n          tokenizer = doctype_name_state;\n          break;\n      }\n    }\n    function doctype_name_state(c) {\n      switch (c) {\n        case 0x0009: // CHARACTER TABULATION (tab)\n        case 0x000A: // LINE FEED (LF)\n        case 0x000C: // FORM FEED (FF)\n        case 0x0020:\n          // SPACE\n          tokenizer = after_doctype_name_state;\n          break;\n        case 0x003E:\n          // GREATER-THAN SIGN\n          tokenizer = data_state;\n          emitDoctype();\n          break;\n        case 0x0041: // [A-Z]\n        case 0x0042:\n        case 0x0043:\n        case 0x0044:\n        case 0x0045:\n        case 0x0046:\n        case 0x0047:\n        case 0x0048:\n        case 0x0049:\n        case 0x004A:\n        case 0x004B:\n        case 0x004C:\n        case 0x004D:\n        case 0x004E:\n        case 0x004F:\n        case 0x0050:\n        case 0x0051:\n        case 0x0052:\n        case 0x0053:\n        case 0x0054:\n        case 0x0055:\n        case 0x0056:\n        case 0x0057:\n        case 0x0058:\n        case 0x0059:\n        case 0x005A:\n          doctypenamebuf.push(c + 0x0020);\n          break;\n        case 0x0000:\n          // NULL\n          doctypenamebuf.push(0xFFFD /* REPLACEMENT CHARACTER */);\n          break;\n        case -1:\n          // EOF\n          forcequirks();\n          emitDoctype();\n          emitEOF();\n          break;\n        default:\n          doctypenamebuf.push(c);\n          break;\n      }\n    }\n    function after_doctype_name_state(c, lookahead, eof) {\n      switch (c) {\n        case 0x0009: // CHARACTER TABULATION (tab)\n        case 0x000A: // LINE FEED (LF)\n        case 0x000C: // FORM FEED (FF)\n        case 0x0020:\n          // SPACE\n          /* Ignore the character. */\n          nextchar += 1;\n          break;\n        case 0x003E:\n          // GREATER-THAN SIGN\n          tokenizer = data_state;\n          nextchar += 1;\n          emitDoctype();\n          break;\n        case -1:\n          // EOF\n          forcequirks();\n          emitDoctype();\n          emitEOF();\n          break;\n        default:\n          lookahead = lookahead.toUpperCase();\n          if (lookahead === \"PUBLIC\") {\n            nextchar += 6;\n            tokenizer = after_doctype_public_keyword_state;\n          } else if (lookahead === \"SYSTEM\") {\n            nextchar += 6;\n            tokenizer = after_doctype_system_keyword_state;\n          } else {\n            forcequirks();\n            tokenizer = bogus_doctype_state;\n          }\n          break;\n      }\n    }\n    after_doctype_name_state.lookahead = 6;\n    function after_doctype_public_keyword_state(c) {\n      switch (c) {\n        case 0x0009: // CHARACTER TABULATION (tab)\n        case 0x000A: // LINE FEED (LF)\n        case 0x000C: // FORM FEED (FF)\n        case 0x0020:\n          // SPACE\n          tokenizer = before_doctype_public_identifier_state;\n          break;\n        case 0x0022:\n          // QUOTATION MARK\n          beginDoctypePublicId();\n          tokenizer = doctype_public_identifier_double_quoted_state;\n          break;\n        case 0x0027:\n          // APOSTROPHE\n          beginDoctypePublicId();\n          tokenizer = doctype_public_identifier_single_quoted_state;\n          break;\n        case 0x003E:\n          // GREATER-THAN SIGN\n          forcequirks();\n          tokenizer = data_state;\n          emitDoctype();\n          break;\n        case -1:\n          // EOF\n          forcequirks();\n          emitDoctype();\n          emitEOF();\n          break;\n        default:\n          forcequirks();\n          tokenizer = bogus_doctype_state;\n          break;\n      }\n    }\n    function before_doctype_public_identifier_state(c) {\n      switch (c) {\n        case 0x0009: // CHARACTER TABULATION (tab)\n        case 0x000A: // LINE FEED (LF)\n        case 0x000C: // FORM FEED (FF)\n        case 0x0020:\n          // SPACE\n          /* Ignore the character. */\n          break;\n        case 0x0022:\n          // QUOTATION MARK\n          beginDoctypePublicId();\n          tokenizer = doctype_public_identifier_double_quoted_state;\n          break;\n        case 0x0027:\n          // APOSTROPHE\n          beginDoctypePublicId();\n          tokenizer = doctype_public_identifier_single_quoted_state;\n          break;\n        case 0x003E:\n          // GREATER-THAN SIGN\n          forcequirks();\n          tokenizer = data_state;\n          emitDoctype();\n          break;\n        case -1:\n          // EOF\n          forcequirks();\n          emitDoctype();\n          emitEOF();\n          break;\n        default:\n          forcequirks();\n          tokenizer = bogus_doctype_state;\n          break;\n      }\n    }\n    function doctype_public_identifier_double_quoted_state(c) {\n      switch (c) {\n        case 0x0022:\n          // QUOTATION MARK\n          tokenizer = after_doctype_public_identifier_state;\n          break;\n        case 0x0000:\n          // NULL\n          doctypepublicbuf.push(0xFFFD /* REPLACEMENT CHARACTER */);\n          break;\n        case 0x003E:\n          // GREATER-THAN SIGN\n          forcequirks();\n          tokenizer = data_state;\n          emitDoctype();\n          break;\n        case -1:\n          // EOF\n          forcequirks();\n          emitDoctype();\n          emitEOF();\n          break;\n        default:\n          doctypepublicbuf.push(c);\n          break;\n      }\n    }\n    function doctype_public_identifier_single_quoted_state(c) {\n      switch (c) {\n        case 0x0027:\n          // APOSTROPHE\n          tokenizer = after_doctype_public_identifier_state;\n          break;\n        case 0x0000:\n          // NULL\n          doctypepublicbuf.push(0xFFFD /* REPLACEMENT CHARACTER */);\n          break;\n        case 0x003E:\n          // GREATER-THAN SIGN\n          forcequirks();\n          tokenizer = data_state;\n          emitDoctype();\n          break;\n        case -1:\n          // EOF\n          forcequirks();\n          emitDoctype();\n          emitEOF();\n          break;\n        default:\n          doctypepublicbuf.push(c);\n          break;\n      }\n    }\n    function after_doctype_public_identifier_state(c) {\n      switch (c) {\n        case 0x0009: // CHARACTER TABULATION (tab)\n        case 0x000A: // LINE FEED (LF)\n        case 0x000C: // FORM FEED (FF)\n        case 0x0020:\n          // SPACE\n          tokenizer = between_doctype_public_and_system_identifiers_state;\n          break;\n        case 0x003E:\n          // GREATER-THAN SIGN\n          tokenizer = data_state;\n          emitDoctype();\n          break;\n        case 0x0022:\n          // QUOTATION MARK\n          beginDoctypeSystemId();\n          tokenizer = doctype_system_identifier_double_quoted_state;\n          break;\n        case 0x0027:\n          // APOSTROPHE\n          beginDoctypeSystemId();\n          tokenizer = doctype_system_identifier_single_quoted_state;\n          break;\n        case -1:\n          // EOF\n          forcequirks();\n          emitDoctype();\n          emitEOF();\n          break;\n        default:\n          forcequirks();\n          tokenizer = bogus_doctype_state;\n          break;\n      }\n    }\n    function between_doctype_public_and_system_identifiers_state(c) {\n      switch (c) {\n        case 0x0009: // CHARACTER TABULATION (tab)\n        case 0x000A: // LINE FEED (LF)\n        case 0x000C: // FORM FEED (FF)\n        case 0x0020:\n          // SPACE Ignore the character.\n          break;\n        case 0x003E:\n          // GREATER-THAN SIGN\n          tokenizer = data_state;\n          emitDoctype();\n          break;\n        case 0x0022:\n          // QUOTATION MARK\n          beginDoctypeSystemId();\n          tokenizer = doctype_system_identifier_double_quoted_state;\n          break;\n        case 0x0027:\n          // APOSTROPHE\n          beginDoctypeSystemId();\n          tokenizer = doctype_system_identifier_single_quoted_state;\n          break;\n        case -1:\n          // EOF\n          forcequirks();\n          emitDoctype();\n          emitEOF();\n          break;\n        default:\n          forcequirks();\n          tokenizer = bogus_doctype_state;\n          break;\n      }\n    }\n    function after_doctype_system_keyword_state(c) {\n      switch (c) {\n        case 0x0009: // CHARACTER TABULATION (tab)\n        case 0x000A: // LINE FEED (LF)\n        case 0x000C: // FORM FEED (FF)\n        case 0x0020:\n          // SPACE\n          tokenizer = before_doctype_system_identifier_state;\n          break;\n        case 0x0022:\n          // QUOTATION MARK\n          beginDoctypeSystemId();\n          tokenizer = doctype_system_identifier_double_quoted_state;\n          break;\n        case 0x0027:\n          // APOSTROPHE\n          beginDoctypeSystemId();\n          tokenizer = doctype_system_identifier_single_quoted_state;\n          break;\n        case 0x003E:\n          // GREATER-THAN SIGN\n          forcequirks();\n          tokenizer = data_state;\n          emitDoctype();\n          break;\n        case -1:\n          // EOF\n          forcequirks();\n          emitDoctype();\n          emitEOF();\n          break;\n        default:\n          forcequirks();\n          tokenizer = bogus_doctype_state;\n          break;\n      }\n    }\n    function before_doctype_system_identifier_state(c) {\n      switch (c) {\n        case 0x0009: // CHARACTER TABULATION (tab)\n        case 0x000A: // LINE FEED (LF)\n        case 0x000C: // FORM FEED (FF)\n        case 0x0020:\n          // SPACE Ignore the character.\n          break;\n        case 0x0022:\n          // QUOTATION MARK\n          beginDoctypeSystemId();\n          tokenizer = doctype_system_identifier_double_quoted_state;\n          break;\n        case 0x0027:\n          // APOSTROPHE\n          beginDoctypeSystemId();\n          tokenizer = doctype_system_identifier_single_quoted_state;\n          break;\n        case 0x003E:\n          // GREATER-THAN SIGN\n          forcequirks();\n          tokenizer = data_state;\n          emitDoctype();\n          break;\n        case -1:\n          // EOF\n          forcequirks();\n          emitDoctype();\n          emitEOF();\n          break;\n        default:\n          forcequirks();\n          tokenizer = bogus_doctype_state;\n          break;\n      }\n    }\n    function doctype_system_identifier_double_quoted_state(c) {\n      switch (c) {\n        case 0x0022:\n          // QUOTATION MARK\n          tokenizer = after_doctype_system_identifier_state;\n          break;\n        case 0x0000:\n          // NULL\n          doctypesystembuf.push(0xFFFD /* REPLACEMENT CHARACTER */);\n          break;\n        case 0x003E:\n          // GREATER-THAN SIGN\n          forcequirks();\n          tokenizer = data_state;\n          emitDoctype();\n          break;\n        case -1:\n          // EOF\n          forcequirks();\n          emitDoctype();\n          emitEOF();\n          break;\n        default:\n          doctypesystembuf.push(c);\n          break;\n      }\n    }\n    function doctype_system_identifier_single_quoted_state(c) {\n      switch (c) {\n        case 0x0027:\n          // APOSTROPHE\n          tokenizer = after_doctype_system_identifier_state;\n          break;\n        case 0x0000:\n          // NULL\n          doctypesystembuf.push(0xFFFD /* REPLACEMENT CHARACTER */);\n          break;\n        case 0x003E:\n          // GREATER-THAN SIGN\n          forcequirks();\n          tokenizer = data_state;\n          emitDoctype();\n          break;\n        case -1:\n          // EOF\n          forcequirks();\n          emitDoctype();\n          emitEOF();\n          break;\n        default:\n          doctypesystembuf.push(c);\n          break;\n      }\n    }\n    function after_doctype_system_identifier_state(c) {\n      switch (c) {\n        case 0x0009: // CHARACTER TABULATION (tab)\n        case 0x000A: // LINE FEED (LF)\n        case 0x000C: // FORM FEED (FF)\n        case 0x0020:\n          // SPACE\n          /* Ignore the character. */\n          break;\n        case 0x003E:\n          // GREATER-THAN SIGN\n          tokenizer = data_state;\n          emitDoctype();\n          break;\n        case -1:\n          // EOF\n          forcequirks();\n          emitDoctype();\n          emitEOF();\n          break;\n        default:\n          tokenizer = bogus_doctype_state;\n          /* This does *not* set the DOCTYPE token's force-quirks flag. */\n          break;\n      }\n    }\n    function bogus_doctype_state(c) {\n      switch (c) {\n        case 0x003E:\n          // GREATER-THAN SIGN\n          tokenizer = data_state;\n          emitDoctype();\n          break;\n        case -1:\n          // EOF\n          emitDoctype();\n          emitEOF();\n          break;\n      }\n    }\n    function cdata_section_state(c) {\n      switch (c) {\n        case 0x005D:\n          // RIGHT SQUARE BRACKET\n          tokenizer = cdata_section_bracket_state;\n          break;\n        case -1:\n          // EOF\n          emitEOF();\n          break;\n        case 0x0000:\n          // NULL\n          textIncludesNUL = true;\n        /* fall through */\n        default:\n          // Instead of just pushing a single character and then\n          // coming back to the very same place, lookahead and\n          // emit everything we can at once.\n          /*jshint -W030 */\n          emitCharsWhile(CDATATEXT) || textrun.push(c);\n          break;\n      }\n    }\n    function cdata_section_bracket_state(c) {\n      switch (c) {\n        case 0x005D:\n          // RIGHT SQUARE BRACKET\n          tokenizer = cdata_section_end_state;\n          break;\n        default:\n          textrun.push(0x005D);\n          reconsume(c, cdata_section_state);\n          break;\n      }\n    }\n    function cdata_section_end_state(c) {\n      switch (c) {\n        case 0x005D:\n          // RIGHT SQUARE BRACKET\n          textrun.push(0x005D);\n          break;\n        case 0x003E:\n          // GREATER-THAN SIGN\n          flushText();\n          tokenizer = data_state;\n          break;\n        default:\n          textrun.push(0x005D);\n          textrun.push(0x005D);\n          reconsume(c, cdata_section_state);\n          break;\n      }\n    }\n    function character_reference_state(c) {\n      beginTempBuf();\n      tempbuf.push(0x0026);\n      switch (c) {\n        case 0x0009: // TAB\n        case 0x000A: // LINE FEED\n        case 0x000C: // FORM FEED\n        case 0x0020: // SPACE\n        case 0x003C: // LESS-THAN SIGN\n        case 0x0026: // AMPERSAND\n        case -1:\n          // EOF\n          reconsume(c, character_reference_end_state);\n          break;\n        case 0x0023:\n          // NUMBER SIGN\n          tempbuf.push(c);\n          tokenizer = numeric_character_reference_state;\n          break;\n        default:\n          reconsume(c, named_character_reference_state);\n          break;\n      }\n    }\n    function named_character_reference_state(c) {\n      NAMEDCHARREF.lastIndex = nextchar; // w/ lookahead no char has been consumed\n      var matched = NAMEDCHARREF.exec(chars);\n      if (!matched) throw new Error(\"should never happen\");\n      var name = matched[1];\n      if (!name) {\n        // If no match can be made, switch to the character reference end state\n        tokenizer = character_reference_end_state;\n        return;\n      }\n\n      // Consume the matched characters and append them to temporary buffer\n      nextchar += name.length;\n      pushAll(tempbuf, str2buf(name));\n      switch (return_state) {\n        case attribute_value_double_quoted_state:\n        case attribute_value_single_quoted_state:\n        case attribute_value_unquoted_state:\n          // If the character reference was consumed as part of an attribute...\n          if (name[name.length - 1] !== ';') {\n            // ...and the last char is not ;\n            if (/[=A-Za-z0-9]/.test(chars[nextchar])) {\n              tokenizer = character_reference_end_state;\n              return;\n            }\n          }\n          break;\n      }\n      beginTempBuf();\n      var rv = namedCharRefs[name];\n      if (typeof rv === 'number') {\n        tempbuf.push(rv);\n      } else {\n        pushAll(tempbuf, rv);\n      }\n      tokenizer = character_reference_end_state;\n    }\n    // We might need to pause tokenization until we have enough characters\n    // in the buffer for longest possible character reference.\n    named_character_reference_state.lookahead = -32;\n    function numeric_character_reference_state(c) {\n      character_reference_code = 0;\n      switch (c) {\n        case 0x0078: // x\n        case 0x0058:\n          // X\n          tempbuf.push(c);\n          tokenizer = hexadecimal_character_reference_start_state;\n          break;\n        default:\n          reconsume(c, decimal_character_reference_start_state);\n          break;\n      }\n    }\n    function hexadecimal_character_reference_start_state(c) {\n      switch (c) {\n        case 0x0030:\n        case 0x0031:\n        case 0x0032:\n        case 0x0033:\n        case 0x0034:\n        case 0x0035:\n        case 0x0036:\n        case 0x0037:\n        case 0x0038:\n        case 0x0039: // [0-9]\n        case 0x0041:\n        case 0x0042:\n        case 0x0043:\n        case 0x0044:\n        case 0x0045:\n        case 0x0046: // [A-F]\n        case 0x0061:\n        case 0x0062:\n        case 0x0063:\n        case 0x0064:\n        case 0x0065:\n        case 0x0066:\n          // [a-f]\n          reconsume(c, hexadecimal_character_reference_state);\n          break;\n        default:\n          reconsume(c, character_reference_end_state);\n          break;\n      }\n    }\n    function decimal_character_reference_start_state(c) {\n      switch (c) {\n        case 0x0030:\n        case 0x0031:\n        case 0x0032:\n        case 0x0033:\n        case 0x0034:\n        case 0x0035:\n        case 0x0036:\n        case 0x0037:\n        case 0x0038:\n        case 0x0039:\n          // [0-9]\n          reconsume(c, decimal_character_reference_state);\n          break;\n        default:\n          reconsume(c, character_reference_end_state);\n          break;\n      }\n    }\n    function hexadecimal_character_reference_state(c) {\n      switch (c) {\n        case 0x0041:\n        case 0x0042:\n        case 0x0043:\n        case 0x0044:\n        case 0x0045:\n        case 0x0046:\n          // [A-F]\n          character_reference_code *= 16;\n          character_reference_code += c - 0x0037;\n          break;\n        case 0x0061:\n        case 0x0062:\n        case 0x0063:\n        case 0x0064:\n        case 0x0065:\n        case 0x0066:\n          // [a-f]\n          character_reference_code *= 16;\n          character_reference_code += c - 0x0057;\n          break;\n        case 0x0030:\n        case 0x0031:\n        case 0x0032:\n        case 0x0033:\n        case 0x0034:\n        case 0x0035:\n        case 0x0036:\n        case 0x0037:\n        case 0x0038:\n        case 0x0039:\n          // [0-9]\n          character_reference_code *= 16;\n          character_reference_code += c - 0x0030;\n          break;\n        case 0x003B:\n          // SEMICOLON\n          tokenizer = numeric_character_reference_end_state;\n          break;\n        default:\n          reconsume(c, numeric_character_reference_end_state);\n          break;\n      }\n    }\n    function decimal_character_reference_state(c) {\n      switch (c) {\n        case 0x0030:\n        case 0x0031:\n        case 0x0032:\n        case 0x0033:\n        case 0x0034:\n        case 0x0035:\n        case 0x0036:\n        case 0x0037:\n        case 0x0038:\n        case 0x0039:\n          // [0-9]\n          character_reference_code *= 10;\n          character_reference_code += c - 0x0030;\n          break;\n        case 0x003B:\n          // SEMICOLON\n          tokenizer = numeric_character_reference_end_state;\n          break;\n        default:\n          reconsume(c, numeric_character_reference_end_state);\n          break;\n      }\n    }\n    function numeric_character_reference_end_state(c) {\n      if (character_reference_code in numericCharRefReplacements) {\n        character_reference_code = numericCharRefReplacements[character_reference_code];\n      } else if (character_reference_code > 0x10FFFF || character_reference_code >= 0xD800 && character_reference_code < 0xE000) {\n        character_reference_code = 0xFFFD;\n      }\n      beginTempBuf();\n      if (character_reference_code <= 0xFFFF) {\n        tempbuf.push(character_reference_code);\n      } else {\n        character_reference_code = character_reference_code - 0x10000;\n        /* jshint bitwise: false */\n        tempbuf.push(0xD800 + (character_reference_code >> 10));\n        tempbuf.push(0xDC00 + (character_reference_code & 0x03FF));\n      }\n      reconsume(c, character_reference_end_state);\n    }\n    function character_reference_end_state(c) {\n      switch (return_state) {\n        case attribute_value_double_quoted_state:\n        case attribute_value_single_quoted_state:\n        case attribute_value_unquoted_state:\n          // append each character to the current attribute's value\n          attrvaluebuf += buf2str(tempbuf);\n          break;\n        default:\n          pushAll(textrun, tempbuf);\n          break;\n      }\n      reconsume(c, return_state);\n    }\n\n    /***\n     * The tree builder insertion modes\n     */\n\n    // 11.2.5.4.1 The \"initial\" insertion mode\n    function initial_mode(t, value, arg3, arg4) {\n      switch (t) {\n        case 1:\n          // TEXT\n          value = value.replace(LEADINGWS, \"\"); // Ignore spaces\n          if (value.length === 0) return; // Are we done?\n          break;\n        // Handle anything non-space text below\n        case 4:\n          // COMMENT\n          doc._appendChild(doc.createComment(value));\n          return;\n        case 5:\n          // DOCTYPE\n          var name = value;\n          var publicid = arg3;\n          var systemid = arg4;\n          // Use the constructor directly instead of\n          // implementation.createDocumentType because the create\n          // function throws errors on invalid characters, and\n          // we don't want the parser to throw them.\n          doc.appendChild(new DocumentType(doc, name, publicid, systemid));\n\n          // Note that there is no public API for setting quirks mode We can\n          // do this here because we have access to implementation details\n          if (force_quirks || name.toLowerCase() !== \"html\" || quirkyPublicIds.test(publicid) || systemid && systemid.toLowerCase() === quirkySystemId || systemid === undefined && conditionallyQuirkyPublicIds.test(publicid)) doc._quirks = true;else if (limitedQuirkyPublicIds.test(publicid) || systemid !== undefined && conditionallyQuirkyPublicIds.test(publicid)) doc._limitedQuirks = true;\n          parser = before_html_mode;\n          return;\n      }\n\n      // tags or non-whitespace text\n      doc._quirks = true;\n      parser = before_html_mode;\n      parser(t, value, arg3, arg4);\n    }\n\n    // 11.2.5.4.2 The \"before html\" insertion mode\n    function before_html_mode(t, value, arg3, arg4) {\n      var elt;\n      switch (t) {\n        case 1:\n          // TEXT\n          value = value.replace(LEADINGWS, \"\"); // Ignore spaces\n          if (value.length === 0) return; // Are we done?\n          break;\n        // Handle anything non-space text below\n        case 5:\n          // DOCTYPE\n          /* ignore the token */\n          return;\n        case 4:\n          // COMMENT\n          doc._appendChild(doc.createComment(value));\n          return;\n        case 2:\n          // TAG\n          if (value === \"html\") {\n            elt = createHTMLElt(doc, value, arg3);\n            stack.push(elt);\n            doc.appendChild(elt);\n            // XXX: handle application cache here\n            parser = before_head_mode;\n            return;\n          }\n          break;\n        case 3:\n          // ENDTAG\n          switch (value) {\n            case \"html\":\n            case \"head\":\n            case \"body\":\n            case \"br\":\n              break;\n            // fall through on these\n            default:\n              return;\n            // ignore most end tags\n          }\n      }\n\n      // Anything that didn't get handled above is handled like this:\n      elt = createHTMLElt(doc, \"html\", null);\n      stack.push(elt);\n      doc.appendChild(elt);\n      // XXX: handle application cache here\n      parser = before_head_mode;\n      parser(t, value, arg3, arg4);\n    }\n\n    // 11.2.5.4.3 The \"before head\" insertion mode\n    function before_head_mode(t, value, arg3, arg4) {\n      switch (t) {\n        case 1:\n          // TEXT\n          value = value.replace(LEADINGWS, \"\"); // Ignore spaces\n          if (value.length === 0) return; // Are we done?\n          break;\n        // Handle anything non-space text below\n        case 5:\n          // DOCTYPE\n          /* ignore the token */\n          return;\n        case 4:\n          // COMMENT\n          insertComment(value);\n          return;\n        case 2:\n          // TAG\n          switch (value) {\n            case \"html\":\n              in_body_mode(t, value, arg3, arg4);\n              return;\n            case \"head\":\n              var elt = insertHTMLElement(value, arg3);\n              head_element_pointer = elt;\n              parser = in_head_mode;\n              return;\n          }\n          break;\n        case 3:\n          // ENDTAG\n          switch (value) {\n            case \"html\":\n            case \"head\":\n            case \"body\":\n            case \"br\":\n              break;\n            default:\n              return;\n            // ignore most end tags\n          }\n      }\n\n      // If not handled explicitly above\n      before_head_mode(TAG, \"head\", null); // create a head tag\n      parser(t, value, arg3, arg4); // then try again with this token\n    }\n    function in_head_mode(t, value, arg3, arg4) {\n      switch (t) {\n        case 1:\n          // TEXT\n          var ws = value.match(LEADINGWS);\n          if (ws) {\n            insertText(ws[0]);\n            value = value.substring(ws[0].length);\n          }\n          if (value.length === 0) return;\n          break;\n        // Handle non-whitespace below\n        case 4:\n          // COMMENT\n          insertComment(value);\n          return;\n        case 5:\n          // DOCTYPE\n          return;\n        case 2:\n          // TAG\n          switch (value) {\n            case \"html\":\n              in_body_mode(t, value, arg3, arg4);\n              return;\n            case \"meta\":\n            // XXX:\n            // May need to change the encoding based on this tag\n            /* falls through */\n            case \"base\":\n            case \"basefont\":\n            case \"bgsound\":\n            case \"link\":\n              insertHTMLElement(value, arg3);\n              stack.pop();\n              return;\n            case \"title\":\n              parseRCDATA(value, arg3);\n              return;\n            case \"noscript\":\n              if (!scripting_enabled) {\n                insertHTMLElement(value, arg3);\n                parser = in_head_noscript_mode;\n                return;\n              }\n            // Otherwise, if scripting is enabled...\n            /* falls through */\n            case \"noframes\":\n            case \"style\":\n              parseRawText(value, arg3);\n              return;\n            case \"script\":\n              insertElement(function (doc) {\n                var elt = createHTMLElt(doc, value, arg3);\n                elt._parser_inserted = true;\n                elt._force_async = false;\n                if (fragment) elt._already_started = true;\n                flushText();\n                return elt;\n              });\n              tokenizer = script_data_state;\n              originalInsertionMode = parser;\n              parser = text_mode;\n              return;\n            case \"template\":\n              insertHTMLElement(value, arg3);\n              afe.insertMarker();\n              frameset_ok = false;\n              parser = in_template_mode;\n              templateInsertionModes.push(parser);\n              return;\n            case \"head\":\n              return;\n            // ignore it\n          }\n          break;\n        case 3:\n          // ENDTAG\n          switch (value) {\n            case \"head\":\n              stack.pop();\n              parser = after_head_mode;\n              return;\n            case \"body\":\n            case \"html\":\n            case \"br\":\n              break;\n            // handle these at the bottom of the function\n            case \"template\":\n              if (!stack.contains(\"template\")) {\n                return;\n              }\n              stack.generateImpliedEndTags(null, \"thorough\");\n              stack.popTag(\"template\");\n              afe.clearToMarker();\n              templateInsertionModes.pop();\n              resetInsertionMode();\n              return;\n            default:\n              // ignore any other end tag\n              return;\n          }\n          break;\n      }\n\n      // If not handled above\n      in_head_mode(ENDTAG, \"head\", null); // synthetic </head>\n      parser(t, value, arg3, arg4); // Then redo this one\n    }\n\n    // 13.2.5.4.5 The \"in head noscript\" insertion mode\n    function in_head_noscript_mode(t, value, arg3, arg4) {\n      switch (t) {\n        case 5:\n          // DOCTYPE\n          return;\n        case 4:\n          // COMMENT\n          in_head_mode(t, value);\n          return;\n        case 1:\n          // TEXT\n          var ws = value.match(LEADINGWS);\n          if (ws) {\n            in_head_mode(t, ws[0]);\n            value = value.substring(ws[0].length);\n          }\n          if (value.length === 0) return; // no more text\n          break;\n        // Handle non-whitespace below\n        case 2:\n          // TAG\n          switch (value) {\n            case \"html\":\n              in_body_mode(t, value, arg3, arg4);\n              return;\n            case \"basefont\":\n            case \"bgsound\":\n            case \"link\":\n            case \"meta\":\n            case \"noframes\":\n            case \"style\":\n              in_head_mode(t, value, arg3);\n              return;\n            case \"head\":\n            case \"noscript\":\n              return;\n          }\n          break;\n        case 3:\n          // ENDTAG\n          switch (value) {\n            case \"noscript\":\n              stack.pop();\n              parser = in_head_mode;\n              return;\n            case \"br\":\n              break;\n            // goes to the outer default\n            default:\n              return;\n            // ignore other end tags\n          }\n          break;\n      }\n\n      // If not handled above\n      in_head_noscript_mode(ENDTAG, \"noscript\", null);\n      parser(t, value, arg3, arg4);\n    }\n    function after_head_mode(t, value, arg3, arg4) {\n      switch (t) {\n        case 1:\n          // TEXT\n          var ws = value.match(LEADINGWS);\n          if (ws) {\n            insertText(ws[0]);\n            value = value.substring(ws[0].length);\n          }\n          if (value.length === 0) return;\n          break;\n        // Handle non-whitespace below\n        case 4:\n          // COMMENT\n          insertComment(value);\n          return;\n        case 5:\n          // DOCTYPE\n          return;\n        case 2:\n          // TAG\n          switch (value) {\n            case \"html\":\n              in_body_mode(t, value, arg3, arg4);\n              return;\n            case \"body\":\n              insertHTMLElement(value, arg3);\n              frameset_ok = false;\n              parser = in_body_mode;\n              return;\n            case \"frameset\":\n              insertHTMLElement(value, arg3);\n              parser = in_frameset_mode;\n              return;\n            case \"base\":\n            case \"basefont\":\n            case \"bgsound\":\n            case \"link\":\n            case \"meta\":\n            case \"noframes\":\n            case \"script\":\n            case \"style\":\n            case \"template\":\n            case \"title\":\n              stack.push(head_element_pointer);\n              in_head_mode(TAG, value, arg3);\n              stack.removeElement(head_element_pointer);\n              return;\n            case \"head\":\n              return;\n          }\n          break;\n        case 3:\n          // ENDTAG\n          switch (value) {\n            case \"template\":\n              return in_head_mode(t, value, arg3, arg4);\n            case \"body\":\n            case \"html\":\n            case \"br\":\n              break;\n            default:\n              return;\n            // ignore any other end tag\n          }\n          break;\n      }\n      after_head_mode(TAG, \"body\", null);\n      frameset_ok = true;\n      parser(t, value, arg3, arg4);\n    }\n\n    // 13.2.5.4.7 The \"in body\" insertion mode\n    function in_body_mode(t, value, arg3, arg4) {\n      var body, i, node, elt;\n      switch (t) {\n        case 1:\n          // TEXT\n          if (textIncludesNUL) {\n            value = value.replace(NULCHARS, \"\");\n            if (value.length === 0) return;\n          }\n          // If any non-space characters\n          if (frameset_ok && NONWS.test(value)) frameset_ok = false;\n          afereconstruct();\n          insertText(value);\n          return;\n        case 5:\n          // DOCTYPE\n          return;\n        case 4:\n          // COMMENT\n          insertComment(value);\n          return;\n        case -1:\n          // EOF\n          if (templateInsertionModes.length) {\n            return in_template_mode(t);\n          }\n          stopParsing();\n          return;\n        case 2:\n          // TAG\n          switch (value) {\n            case \"html\":\n              if (stack.contains(\"template\")) {\n                return;\n              }\n              transferAttributes(arg3, stack.elements[0]);\n              return;\n            case \"base\":\n            case \"basefont\":\n            case \"bgsound\":\n            case \"link\":\n            case \"meta\":\n            case \"noframes\":\n            case \"script\":\n            case \"style\":\n            case \"template\":\n            case \"title\":\n              in_head_mode(TAG, value, arg3);\n              return;\n            case \"body\":\n              body = stack.elements[1];\n              if (!body || !(body instanceof impl.HTMLBodyElement) || stack.contains(\"template\")) return;\n              frameset_ok = false;\n              transferAttributes(arg3, body);\n              return;\n            case \"frameset\":\n              if (!frameset_ok) return;\n              body = stack.elements[1];\n              if (!body || !(body instanceof impl.HTMLBodyElement)) return;\n              if (body.parentNode) body.parentNode.removeChild(body);\n              while (!(stack.top instanceof impl.HTMLHtmlElement)) stack.pop();\n              insertHTMLElement(value, arg3);\n              parser = in_frameset_mode;\n              return;\n            case \"address\":\n            case \"article\":\n            case \"aside\":\n            case \"blockquote\":\n            case \"center\":\n            case \"details\":\n            case \"dialog\":\n            case \"dir\":\n            case \"div\":\n            case \"dl\":\n            case \"fieldset\":\n            case \"figcaption\":\n            case \"figure\":\n            case \"footer\":\n            case \"header\":\n            case \"hgroup\":\n            case \"main\":\n            case \"nav\":\n            case \"ol\":\n            case \"p\":\n            case \"section\":\n            case \"summary\":\n            case \"ul\":\n              if (stack.inButtonScope(\"p\")) in_body_mode(ENDTAG, \"p\");\n              insertHTMLElement(value, arg3);\n              return;\n            case \"menu\":\n              if (stack.inButtonScope(\"p\")) in_body_mode(ENDTAG, \"p\");\n              if (isA(stack.top, 'menuitem')) {\n                stack.pop();\n              }\n              insertHTMLElement(value, arg3);\n              return;\n            case \"h1\":\n            case \"h2\":\n            case \"h3\":\n            case \"h4\":\n            case \"h5\":\n            case \"h6\":\n              if (stack.inButtonScope(\"p\")) in_body_mode(ENDTAG, \"p\");\n              if (stack.top instanceof impl.HTMLHeadingElement) stack.pop();\n              insertHTMLElement(value, arg3);\n              return;\n            case \"pre\":\n            case \"listing\":\n              if (stack.inButtonScope(\"p\")) in_body_mode(ENDTAG, \"p\");\n              insertHTMLElement(value, arg3);\n              ignore_linefeed = true;\n              frameset_ok = false;\n              return;\n            case \"form\":\n              if (form_element_pointer && !stack.contains(\"template\")) return;\n              if (stack.inButtonScope(\"p\")) in_body_mode(ENDTAG, \"p\");\n              elt = insertHTMLElement(value, arg3);\n              if (!stack.contains(\"template\")) form_element_pointer = elt;\n              return;\n            case \"li\":\n              frameset_ok = false;\n              for (i = stack.elements.length - 1; i >= 0; i--) {\n                node = stack.elements[i];\n                if (node instanceof impl.HTMLLIElement) {\n                  in_body_mode(ENDTAG, \"li\");\n                  break;\n                }\n                if (isA(node, specialSet) && !isA(node, addressdivpSet)) break;\n              }\n              if (stack.inButtonScope(\"p\")) in_body_mode(ENDTAG, \"p\");\n              insertHTMLElement(value, arg3);\n              return;\n            case \"dd\":\n            case \"dt\":\n              frameset_ok = false;\n              for (i = stack.elements.length - 1; i >= 0; i--) {\n                node = stack.elements[i];\n                if (isA(node, dddtSet)) {\n                  in_body_mode(ENDTAG, node.localName);\n                  break;\n                }\n                if (isA(node, specialSet) && !isA(node, addressdivpSet)) break;\n              }\n              if (stack.inButtonScope(\"p\")) in_body_mode(ENDTAG, \"p\");\n              insertHTMLElement(value, arg3);\n              return;\n            case \"plaintext\":\n              if (stack.inButtonScope(\"p\")) in_body_mode(ENDTAG, \"p\");\n              insertHTMLElement(value, arg3);\n              tokenizer = plaintext_state;\n              return;\n            case \"button\":\n              if (stack.inScope(\"button\")) {\n                in_body_mode(ENDTAG, \"button\");\n                parser(t, value, arg3, arg4);\n              } else {\n                afereconstruct();\n                insertHTMLElement(value, arg3);\n                frameset_ok = false;\n              }\n              return;\n            case \"a\":\n              var activeElement = afe.findElementByTag(\"a\");\n              if (activeElement) {\n                in_body_mode(ENDTAG, value);\n                afe.remove(activeElement);\n                stack.removeElement(activeElement);\n              }\n            /* falls through */\n            case \"b\":\n            case \"big\":\n            case \"code\":\n            case \"em\":\n            case \"font\":\n            case \"i\":\n            case \"s\":\n            case \"small\":\n            case \"strike\":\n            case \"strong\":\n            case \"tt\":\n            case \"u\":\n              afereconstruct();\n              afe.push(insertHTMLElement(value, arg3), arg3);\n              return;\n            case \"nobr\":\n              afereconstruct();\n              if (stack.inScope(value)) {\n                in_body_mode(ENDTAG, value);\n                afereconstruct();\n              }\n              afe.push(insertHTMLElement(value, arg3), arg3);\n              return;\n            case \"applet\":\n            case \"marquee\":\n            case \"object\":\n              afereconstruct();\n              insertHTMLElement(value, arg3);\n              afe.insertMarker();\n              frameset_ok = false;\n              return;\n            case \"table\":\n              if (!doc._quirks && stack.inButtonScope(\"p\")) {\n                in_body_mode(ENDTAG, \"p\");\n              }\n              insertHTMLElement(value, arg3);\n              frameset_ok = false;\n              parser = in_table_mode;\n              return;\n            case \"area\":\n            case \"br\":\n            case \"embed\":\n            case \"img\":\n            case \"keygen\":\n            case \"wbr\":\n              afereconstruct();\n              insertHTMLElement(value, arg3);\n              stack.pop();\n              frameset_ok = false;\n              return;\n            case \"input\":\n              afereconstruct();\n              elt = insertHTMLElement(value, arg3);\n              stack.pop();\n              var type = elt.getAttribute(\"type\");\n              if (!type || type.toLowerCase() !== \"hidden\") frameset_ok = false;\n              return;\n            case \"param\":\n            case \"source\":\n            case \"track\":\n              insertHTMLElement(value, arg3);\n              stack.pop();\n              return;\n            case \"hr\":\n              if (stack.inButtonScope(\"p\")) in_body_mode(ENDTAG, \"p\");\n              if (isA(stack.top, 'menuitem')) {\n                stack.pop();\n              }\n              insertHTMLElement(value, arg3);\n              stack.pop();\n              frameset_ok = false;\n              return;\n            case \"image\":\n              in_body_mode(TAG, \"img\", arg3, arg4);\n              return;\n            case \"textarea\":\n              insertHTMLElement(value, arg3);\n              ignore_linefeed = true;\n              frameset_ok = false;\n              tokenizer = rcdata_state;\n              originalInsertionMode = parser;\n              parser = text_mode;\n              return;\n            case \"xmp\":\n              if (stack.inButtonScope(\"p\")) in_body_mode(ENDTAG, \"p\");\n              afereconstruct();\n              frameset_ok = false;\n              parseRawText(value, arg3);\n              return;\n            case \"iframe\":\n              frameset_ok = false;\n              parseRawText(value, arg3);\n              return;\n            case \"noembed\":\n              parseRawText(value, arg3);\n              return;\n            case \"select\":\n              afereconstruct();\n              insertHTMLElement(value, arg3);\n              frameset_ok = false;\n              if (parser === in_table_mode || parser === in_caption_mode || parser === in_table_body_mode || parser === in_row_mode || parser === in_cell_mode) parser = in_select_in_table_mode;else parser = in_select_mode;\n              return;\n            case \"optgroup\":\n            case \"option\":\n              if (stack.top instanceof impl.HTMLOptionElement) {\n                in_body_mode(ENDTAG, \"option\");\n              }\n              afereconstruct();\n              insertHTMLElement(value, arg3);\n              return;\n            case \"menuitem\":\n              if (isA(stack.top, 'menuitem')) {\n                stack.pop();\n              }\n              afereconstruct();\n              insertHTMLElement(value, arg3);\n              return;\n            case \"rb\":\n            case \"rtc\":\n              if (stack.inScope(\"ruby\")) {\n                stack.generateImpliedEndTags();\n              }\n              insertHTMLElement(value, arg3);\n              return;\n            case \"rp\":\n            case \"rt\":\n              if (stack.inScope(\"ruby\")) {\n                stack.generateImpliedEndTags(\"rtc\");\n              }\n              insertHTMLElement(value, arg3);\n              return;\n            case \"math\":\n              afereconstruct();\n              adjustMathMLAttributes(arg3);\n              adjustForeignAttributes(arg3);\n              insertForeignElement(value, arg3, NAMESPACE.MATHML);\n              if (arg4)\n                // self-closing flag\n                stack.pop();\n              return;\n            case \"svg\":\n              afereconstruct();\n              adjustSVGAttributes(arg3);\n              adjustForeignAttributes(arg3);\n              insertForeignElement(value, arg3, NAMESPACE.SVG);\n              if (arg4)\n                // self-closing flag\n                stack.pop();\n              return;\n            case \"caption\":\n            case \"col\":\n            case \"colgroup\":\n            case \"frame\":\n            case \"head\":\n            case \"tbody\":\n            case \"td\":\n            case \"tfoot\":\n            case \"th\":\n            case \"thead\":\n            case \"tr\":\n              // Ignore table tags if we're not in_table mode\n              return;\n          }\n\n          // Handle any other start tag here\n          // (and also noscript tags when scripting is disabled)\n          afereconstruct();\n          insertHTMLElement(value, arg3);\n          return;\n        case 3:\n          // ENDTAG\n          switch (value) {\n            case \"template\":\n              in_head_mode(ENDTAG, value, arg3);\n              return;\n            case \"body\":\n              if (!stack.inScope(\"body\")) return;\n              parser = after_body_mode;\n              return;\n            case \"html\":\n              if (!stack.inScope(\"body\")) return;\n              parser = after_body_mode;\n              parser(t, value, arg3);\n              return;\n            case \"address\":\n            case \"article\":\n            case \"aside\":\n            case \"blockquote\":\n            case \"button\":\n            case \"center\":\n            case \"details\":\n            case \"dialog\":\n            case \"dir\":\n            case \"div\":\n            case \"dl\":\n            case \"fieldset\":\n            case \"figcaption\":\n            case \"figure\":\n            case \"footer\":\n            case \"header\":\n            case \"hgroup\":\n            case \"listing\":\n            case \"main\":\n            case \"menu\":\n            case \"nav\":\n            case \"ol\":\n            case \"pre\":\n            case \"section\":\n            case \"summary\":\n            case \"ul\":\n              // Ignore if there is not a matching open tag\n              if (!stack.inScope(value)) return;\n              stack.generateImpliedEndTags();\n              stack.popTag(value);\n              return;\n            case \"form\":\n              if (!stack.contains(\"template\")) {\n                var openform = form_element_pointer;\n                form_element_pointer = null;\n                if (!openform || !stack.elementInScope(openform)) return;\n                stack.generateImpliedEndTags();\n                stack.removeElement(openform);\n              } else {\n                if (!stack.inScope(\"form\")) return;\n                stack.generateImpliedEndTags();\n                stack.popTag(\"form\");\n              }\n              return;\n            case \"p\":\n              if (!stack.inButtonScope(value)) {\n                in_body_mode(TAG, value, null);\n                parser(t, value, arg3, arg4);\n              } else {\n                stack.generateImpliedEndTags(value);\n                stack.popTag(value);\n              }\n              return;\n            case \"li\":\n              if (!stack.inListItemScope(value)) return;\n              stack.generateImpliedEndTags(value);\n              stack.popTag(value);\n              return;\n            case \"dd\":\n            case \"dt\":\n              if (!stack.inScope(value)) return;\n              stack.generateImpliedEndTags(value);\n              stack.popTag(value);\n              return;\n            case \"h1\":\n            case \"h2\":\n            case \"h3\":\n            case \"h4\":\n            case \"h5\":\n            case \"h6\":\n              if (!stack.elementTypeInScope(impl.HTMLHeadingElement)) return;\n              stack.generateImpliedEndTags();\n              stack.popElementType(impl.HTMLHeadingElement);\n              return;\n            case \"sarcasm\":\n              // Take a deep breath, and then:\n              break;\n            case \"a\":\n            case \"b\":\n            case \"big\":\n            case \"code\":\n            case \"em\":\n            case \"font\":\n            case \"i\":\n            case \"nobr\":\n            case \"s\":\n            case \"small\":\n            case \"strike\":\n            case \"strong\":\n            case \"tt\":\n            case \"u\":\n              var result = adoptionAgency(value);\n              if (result) return; // If we did something we're done\n              break;\n            // Go to the \"any other end tag\" case\n\n            case \"applet\":\n            case \"marquee\":\n            case \"object\":\n              if (!stack.inScope(value)) return;\n              stack.generateImpliedEndTags();\n              stack.popTag(value);\n              afe.clearToMarker();\n              return;\n            case \"br\":\n              in_body_mode(TAG, value, null); // Turn </br> into <br>\n              return;\n          }\n\n          // Any other end tag goes here\n          for (i = stack.elements.length - 1; i >= 0; i--) {\n            node = stack.elements[i];\n            if (isA(node, value)) {\n              stack.generateImpliedEndTags(value);\n              stack.popElement(node);\n              break;\n            } else if (isA(node, specialSet)) {\n              return;\n            }\n          }\n          return;\n      }\n    }\n    function text_mode(t, value, arg3, arg4) {\n      switch (t) {\n        case 1:\n          // TEXT\n          insertText(value);\n          return;\n        case -1:\n          // EOF\n          if (stack.top instanceof impl.HTMLScriptElement) stack.top._already_started = true;\n          stack.pop();\n          parser = originalInsertionMode;\n          parser(t);\n          return;\n        case 3:\n          // ENDTAG\n          if (value === \"script\") {\n            handleScriptEnd();\n          } else {\n            stack.pop();\n            parser = originalInsertionMode;\n          }\n          return;\n        default:\n          // We should never get any other token types\n          return;\n      }\n    }\n    function in_table_mode(t, value, arg3, arg4) {\n      function getTypeAttr(attrs) {\n        for (var i = 0, n = attrs.length; i < n; i++) {\n          if (attrs[i][0] === \"type\") return attrs[i][1].toLowerCase();\n        }\n        return null;\n      }\n      switch (t) {\n        case 1:\n          // TEXT\n          // XXX the text_integration_mode stuff is\n          // just a hack I made up\n          if (text_integration_mode) {\n            in_body_mode(t, value, arg3, arg4);\n            return;\n          } else if (isA(stack.top, tablesectionrowSet)) {\n            pending_table_text = [];\n            originalInsertionMode = parser;\n            parser = in_table_text_mode;\n            parser(t, value, arg3, arg4);\n            return;\n          }\n          break;\n        case 4:\n          // COMMENT\n          insertComment(value);\n          return;\n        case 5:\n          // DOCTYPE\n          return;\n        case 2:\n          // TAG\n          switch (value) {\n            case \"caption\":\n              stack.clearToContext(tableContextSet);\n              afe.insertMarker();\n              insertHTMLElement(value, arg3);\n              parser = in_caption_mode;\n              return;\n            case \"colgroup\":\n              stack.clearToContext(tableContextSet);\n              insertHTMLElement(value, arg3);\n              parser = in_column_group_mode;\n              return;\n            case \"col\":\n              in_table_mode(TAG, \"colgroup\", null);\n              parser(t, value, arg3, arg4);\n              return;\n            case \"tbody\":\n            case \"tfoot\":\n            case \"thead\":\n              stack.clearToContext(tableContextSet);\n              insertHTMLElement(value, arg3);\n              parser = in_table_body_mode;\n              return;\n            case \"td\":\n            case \"th\":\n            case \"tr\":\n              in_table_mode(TAG, \"tbody\", null);\n              parser(t, value, arg3, arg4);\n              return;\n            case \"table\":\n              if (!stack.inTableScope(value)) {\n                return; // Ignore the token\n              }\n              in_table_mode(ENDTAG, value);\n              parser(t, value, arg3, arg4);\n              return;\n            case \"style\":\n            case \"script\":\n            case \"template\":\n              in_head_mode(t, value, arg3, arg4);\n              return;\n            case \"input\":\n              var type = getTypeAttr(arg3);\n              if (type !== \"hidden\") break; // to the anything else case\n              insertHTMLElement(value, arg3);\n              stack.pop();\n              return;\n            case \"form\":\n              if (form_element_pointer || stack.contains(\"template\")) return;\n              form_element_pointer = insertHTMLElement(value, arg3);\n              stack.popElement(form_element_pointer);\n              return;\n          }\n          break;\n        case 3:\n          // ENDTAG\n          switch (value) {\n            case \"table\":\n              if (!stack.inTableScope(value)) return;\n              stack.popTag(value);\n              resetInsertionMode();\n              return;\n            case \"body\":\n            case \"caption\":\n            case \"col\":\n            case \"colgroup\":\n            case \"html\":\n            case \"tbody\":\n            case \"td\":\n            case \"tfoot\":\n            case \"th\":\n            case \"thead\":\n            case \"tr\":\n              return;\n            case \"template\":\n              in_head_mode(t, value, arg3, arg4);\n              return;\n          }\n          break;\n        case -1:\n          // EOF\n          in_body_mode(t, value, arg3, arg4);\n          return;\n      }\n\n      // This is the anything else case\n      foster_parent_mode = true;\n      in_body_mode(t, value, arg3, arg4);\n      foster_parent_mode = false;\n    }\n    function in_table_text_mode(t, value, arg3, arg4) {\n      if (t === TEXT) {\n        if (textIncludesNUL) {\n          value = value.replace(NULCHARS, \"\");\n          if (value.length === 0) return;\n        }\n        pending_table_text.push(value);\n      } else {\n        var s = pending_table_text.join(\"\");\n        pending_table_text.length = 0;\n        if (NONWS.test(s)) {\n          // If any non-whitespace characters\n          // This must be the same code as the \"anything else\"\n          // case of the in_table mode above.\n          foster_parent_mode = true;\n          in_body_mode(TEXT, s);\n          foster_parent_mode = false;\n        } else {\n          insertText(s);\n        }\n        parser = originalInsertionMode;\n        parser(t, value, arg3, arg4);\n      }\n    }\n    function in_caption_mode(t, value, arg3, arg4) {\n      function end_caption() {\n        if (!stack.inTableScope(\"caption\")) return false;\n        stack.generateImpliedEndTags();\n        stack.popTag(\"caption\");\n        afe.clearToMarker();\n        parser = in_table_mode;\n        return true;\n      }\n      switch (t) {\n        case 2:\n          // TAG\n          switch (value) {\n            case \"caption\":\n            case \"col\":\n            case \"colgroup\":\n            case \"tbody\":\n            case \"td\":\n            case \"tfoot\":\n            case \"th\":\n            case \"thead\":\n            case \"tr\":\n              if (end_caption()) parser(t, value, arg3, arg4);\n              return;\n          }\n          break;\n        case 3:\n          // ENDTAG\n          switch (value) {\n            case \"caption\":\n              end_caption();\n              return;\n            case \"table\":\n              if (end_caption()) parser(t, value, arg3, arg4);\n              return;\n            case \"body\":\n            case \"col\":\n            case \"colgroup\":\n            case \"html\":\n            case \"tbody\":\n            case \"td\":\n            case \"tfoot\":\n            case \"th\":\n            case \"thead\":\n            case \"tr\":\n              return;\n          }\n          break;\n      }\n\n      // The Anything Else case\n      in_body_mode(t, value, arg3, arg4);\n    }\n    function in_column_group_mode(t, value, arg3, arg4) {\n      switch (t) {\n        case 1:\n          // TEXT\n          var ws = value.match(LEADINGWS);\n          if (ws) {\n            insertText(ws[0]);\n            value = value.substring(ws[0].length);\n          }\n          if (value.length === 0) return;\n          break;\n        // Handle non-whitespace below\n\n        case 4:\n          // COMMENT\n          insertComment(value);\n          return;\n        case 5:\n          // DOCTYPE\n          return;\n        case 2:\n          // TAG\n          switch (value) {\n            case \"html\":\n              in_body_mode(t, value, arg3, arg4);\n              return;\n            case \"col\":\n              insertHTMLElement(value, arg3);\n              stack.pop();\n              return;\n            case \"template\":\n              in_head_mode(t, value, arg3, arg4);\n              return;\n          }\n          break;\n        case 3:\n          // ENDTAG\n          switch (value) {\n            case \"colgroup\":\n              if (!isA(stack.top, 'colgroup')) {\n                return; // Ignore the token.\n              }\n              stack.pop();\n              parser = in_table_mode;\n              return;\n            case \"col\":\n              return;\n            case \"template\":\n              in_head_mode(t, value, arg3, arg4);\n              return;\n          }\n          break;\n        case -1:\n          // EOF\n          in_body_mode(t, value, arg3, arg4);\n          return;\n      }\n\n      // Anything else\n      if (!isA(stack.top, 'colgroup')) {\n        return; // Ignore the token.\n      }\n      in_column_group_mode(ENDTAG, \"colgroup\");\n      parser(t, value, arg3, arg4);\n    }\n    function in_table_body_mode(t, value, arg3, arg4) {\n      function endsect() {\n        if (!stack.inTableScope(\"tbody\") && !stack.inTableScope(\"thead\") && !stack.inTableScope(\"tfoot\")) return;\n        stack.clearToContext(tableBodyContextSet);\n        in_table_body_mode(ENDTAG, stack.top.localName, null);\n        parser(t, value, arg3, arg4);\n      }\n      switch (t) {\n        case 2:\n          // TAG\n          switch (value) {\n            case \"tr\":\n              stack.clearToContext(tableBodyContextSet);\n              insertHTMLElement(value, arg3);\n              parser = in_row_mode;\n              return;\n            case \"th\":\n            case \"td\":\n              in_table_body_mode(TAG, \"tr\", null);\n              parser(t, value, arg3, arg4);\n              return;\n            case \"caption\":\n            case \"col\":\n            case \"colgroup\":\n            case \"tbody\":\n            case \"tfoot\":\n            case \"thead\":\n              endsect();\n              return;\n          }\n          break;\n        case 3:\n          // ENDTAG\n          switch (value) {\n            case \"table\":\n              endsect();\n              return;\n            case \"tbody\":\n            case \"tfoot\":\n            case \"thead\":\n              if (stack.inTableScope(value)) {\n                stack.clearToContext(tableBodyContextSet);\n                stack.pop();\n                parser = in_table_mode;\n              }\n              return;\n            case \"body\":\n            case \"caption\":\n            case \"col\":\n            case \"colgroup\":\n            case \"html\":\n            case \"td\":\n            case \"th\":\n            case \"tr\":\n              return;\n          }\n          break;\n      }\n\n      // Anything else:\n      in_table_mode(t, value, arg3, arg4);\n    }\n    function in_row_mode(t, value, arg3, arg4) {\n      function endrow() {\n        if (!stack.inTableScope(\"tr\")) return false;\n        stack.clearToContext(tableRowContextSet);\n        stack.pop();\n        parser = in_table_body_mode;\n        return true;\n      }\n      switch (t) {\n        case 2:\n          // TAG\n          switch (value) {\n            case \"th\":\n            case \"td\":\n              stack.clearToContext(tableRowContextSet);\n              insertHTMLElement(value, arg3);\n              parser = in_cell_mode;\n              afe.insertMarker();\n              return;\n            case \"caption\":\n            case \"col\":\n            case \"colgroup\":\n            case \"tbody\":\n            case \"tfoot\":\n            case \"thead\":\n            case \"tr\":\n              if (endrow()) parser(t, value, arg3, arg4);\n              return;\n          }\n          break;\n        case 3:\n          // ENDTAG\n          switch (value) {\n            case \"tr\":\n              endrow();\n              return;\n            case \"table\":\n              if (endrow()) parser(t, value, arg3, arg4);\n              return;\n            case \"tbody\":\n            case \"tfoot\":\n            case \"thead\":\n              if (stack.inTableScope(value)) {\n                if (endrow()) parser(t, value, arg3, arg4);\n              }\n              return;\n            case \"body\":\n            case \"caption\":\n            case \"col\":\n            case \"colgroup\":\n            case \"html\":\n            case \"td\":\n            case \"th\":\n              return;\n          }\n          break;\n      }\n\n      // anything else\n      in_table_mode(t, value, arg3, arg4);\n    }\n    function in_cell_mode(t, value, arg3, arg4) {\n      switch (t) {\n        case 2:\n          // TAG\n          switch (value) {\n            case \"caption\":\n            case \"col\":\n            case \"colgroup\":\n            case \"tbody\":\n            case \"td\":\n            case \"tfoot\":\n            case \"th\":\n            case \"thead\":\n            case \"tr\":\n              if (stack.inTableScope(\"td\")) {\n                in_cell_mode(ENDTAG, \"td\");\n                parser(t, value, arg3, arg4);\n              } else if (stack.inTableScope(\"th\")) {\n                in_cell_mode(ENDTAG, \"th\");\n                parser(t, value, arg3, arg4);\n              }\n              return;\n          }\n          break;\n        case 3:\n          // ENDTAG\n          switch (value) {\n            case \"td\":\n            case \"th\":\n              if (!stack.inTableScope(value)) return;\n              stack.generateImpliedEndTags();\n              stack.popTag(value);\n              afe.clearToMarker();\n              parser = in_row_mode;\n              return;\n            case \"body\":\n            case \"caption\":\n            case \"col\":\n            case \"colgroup\":\n            case \"html\":\n              return;\n            case \"table\":\n            case \"tbody\":\n            case \"tfoot\":\n            case \"thead\":\n            case \"tr\":\n              if (!stack.inTableScope(value)) return;\n              in_cell_mode(ENDTAG, stack.inTableScope(\"td\") ? \"td\" : \"th\");\n              parser(t, value, arg3, arg4);\n              return;\n          }\n          break;\n      }\n\n      // anything else\n      in_body_mode(t, value, arg3, arg4);\n    }\n    function in_select_mode(t, value, arg3, arg4) {\n      switch (t) {\n        case 1:\n          // TEXT\n          if (textIncludesNUL) {\n            value = value.replace(NULCHARS, \"\");\n            if (value.length === 0) return;\n          }\n          insertText(value);\n          return;\n        case 4:\n          // COMMENT\n          insertComment(value);\n          return;\n        case 5:\n          // DOCTYPE\n          return;\n        case -1:\n          // EOF\n          in_body_mode(t, value, arg3, arg4);\n          return;\n        case 2:\n          // TAG\n          switch (value) {\n            case \"html\":\n              in_body_mode(t, value, arg3, arg4);\n              return;\n            case \"option\":\n              if (stack.top instanceof impl.HTMLOptionElement) in_select_mode(ENDTAG, value);\n              insertHTMLElement(value, arg3);\n              return;\n            case \"optgroup\":\n              if (stack.top instanceof impl.HTMLOptionElement) in_select_mode(ENDTAG, \"option\");\n              if (stack.top instanceof impl.HTMLOptGroupElement) in_select_mode(ENDTAG, value);\n              insertHTMLElement(value, arg3);\n              return;\n            case \"select\":\n              in_select_mode(ENDTAG, value); // treat it as a close tag\n              return;\n            case \"input\":\n            case \"keygen\":\n            case \"textarea\":\n              if (!stack.inSelectScope(\"select\")) return;\n              in_select_mode(ENDTAG, \"select\");\n              parser(t, value, arg3, arg4);\n              return;\n            case \"script\":\n            case \"template\":\n              in_head_mode(t, value, arg3, arg4);\n              return;\n          }\n          break;\n        case 3:\n          // ENDTAG\n          switch (value) {\n            case \"optgroup\":\n              if (stack.top instanceof impl.HTMLOptionElement && stack.elements[stack.elements.length - 2] instanceof impl.HTMLOptGroupElement) {\n                in_select_mode(ENDTAG, \"option\");\n              }\n              if (stack.top instanceof impl.HTMLOptGroupElement) stack.pop();\n              return;\n            case \"option\":\n              if (stack.top instanceof impl.HTMLOptionElement) stack.pop();\n              return;\n            case \"select\":\n              if (!stack.inSelectScope(value)) return;\n              stack.popTag(value);\n              resetInsertionMode();\n              return;\n            case \"template\":\n              in_head_mode(t, value, arg3, arg4);\n              return;\n          }\n          break;\n      }\n\n      // anything else: just ignore the token\n    }\n    function in_select_in_table_mode(t, value, arg3, arg4) {\n      switch (value) {\n        case \"caption\":\n        case \"table\":\n        case \"tbody\":\n        case \"tfoot\":\n        case \"thead\":\n        case \"tr\":\n        case \"td\":\n        case \"th\":\n          switch (t) {\n            case 2:\n              // TAG\n              in_select_in_table_mode(ENDTAG, \"select\");\n              parser(t, value, arg3, arg4);\n              return;\n            case 3:\n              // ENDTAG\n              if (stack.inTableScope(value)) {\n                in_select_in_table_mode(ENDTAG, \"select\");\n                parser(t, value, arg3, arg4);\n              }\n              return;\n          }\n      }\n\n      // anything else\n      in_select_mode(t, value, arg3, arg4);\n    }\n    function in_template_mode(t, value, arg3, arg4) {\n      function switchModeAndReprocess(mode) {\n        parser = mode;\n        templateInsertionModes[templateInsertionModes.length - 1] = parser;\n        parser(t, value, arg3, arg4);\n      }\n      switch (t) {\n        case 1: // TEXT\n        case 4: // COMMENT\n        case 5:\n          // DOCTYPE\n          in_body_mode(t, value, arg3, arg4);\n          return;\n        case -1:\n          // EOF\n          if (!stack.contains(\"template\")) {\n            stopParsing();\n          } else {\n            stack.popTag(\"template\");\n            afe.clearToMarker();\n            templateInsertionModes.pop();\n            resetInsertionMode();\n            parser(t, value, arg3, arg4);\n          }\n          return;\n        case 2:\n          // TAG\n          switch (value) {\n            case \"base\":\n            case \"basefont\":\n            case \"bgsound\":\n            case \"link\":\n            case \"meta\":\n            case \"noframes\":\n            case \"script\":\n            case \"style\":\n            case \"template\":\n            case \"title\":\n              in_head_mode(t, value, arg3, arg4);\n              return;\n            case \"caption\":\n            case \"colgroup\":\n            case \"tbody\":\n            case \"tfoot\":\n            case \"thead\":\n              switchModeAndReprocess(in_table_mode);\n              return;\n            case \"col\":\n              switchModeAndReprocess(in_column_group_mode);\n              return;\n            case \"tr\":\n              switchModeAndReprocess(in_table_body_mode);\n              return;\n            case \"td\":\n            case \"th\":\n              switchModeAndReprocess(in_row_mode);\n              return;\n          }\n          switchModeAndReprocess(in_body_mode);\n          return;\n        case 3:\n          // ENDTAG\n          switch (value) {\n            case \"template\":\n              in_head_mode(t, value, arg3, arg4);\n              return;\n            default:\n              return;\n          }\n      }\n    }\n    function after_body_mode(t, value, arg3, arg4) {\n      switch (t) {\n        case 1:\n          // TEXT\n          // If any non-space chars, handle below\n          if (NONWS.test(value)) break;\n          in_body_mode(t, value);\n          return;\n        case 4:\n          // COMMENT\n          // Append it to the <html> element\n          stack.elements[0]._appendChild(doc.createComment(value));\n          return;\n        case 5:\n          // DOCTYPE\n          return;\n        case -1:\n          // EOF\n          stopParsing();\n          return;\n        case 2:\n          // TAG\n          if (value === \"html\") {\n            in_body_mode(t, value, arg3, arg4);\n            return;\n          }\n          break;\n        // for any other tags\n        case 3:\n          // ENDTAG\n          if (value === \"html\") {\n            if (fragment) return;\n            parser = after_after_body_mode;\n            return;\n          }\n          break;\n        // for any other tags\n      }\n\n      // anything else\n      parser = in_body_mode;\n      parser(t, value, arg3, arg4);\n    }\n    function in_frameset_mode(t, value, arg3, arg4) {\n      switch (t) {\n        case 1:\n          // TEXT\n          // Ignore any non-space characters\n          value = value.replace(ALLNONWS, \"\");\n          if (value.length > 0) insertText(value);\n          return;\n        case 4:\n          // COMMENT\n          insertComment(value);\n          return;\n        case 5:\n          // DOCTYPE\n          return;\n        case -1:\n          // EOF\n          stopParsing();\n          return;\n        case 2:\n          // TAG\n          switch (value) {\n            case \"html\":\n              in_body_mode(t, value, arg3, arg4);\n              return;\n            case \"frameset\":\n              insertHTMLElement(value, arg3);\n              return;\n            case \"frame\":\n              insertHTMLElement(value, arg3);\n              stack.pop();\n              return;\n            case \"noframes\":\n              in_head_mode(t, value, arg3, arg4);\n              return;\n          }\n          break;\n        case 3:\n          // ENDTAG\n          if (value === \"frameset\") {\n            if (fragment && stack.top instanceof impl.HTMLHtmlElement) return;\n            stack.pop();\n            if (!fragment && !(stack.top instanceof impl.HTMLFrameSetElement)) parser = after_frameset_mode;\n            return;\n          }\n          break;\n      }\n\n      // ignore anything else\n    }\n    function after_frameset_mode(t, value, arg3, arg4) {\n      switch (t) {\n        case 1:\n          // TEXT\n          // Ignore any non-space characters\n          value = value.replace(ALLNONWS, \"\");\n          if (value.length > 0) insertText(value);\n          return;\n        case 4:\n          // COMMENT\n          insertComment(value);\n          return;\n        case 5:\n          // DOCTYPE\n          return;\n        case -1:\n          // EOF\n          stopParsing();\n          return;\n        case 2:\n          // TAG\n          switch (value) {\n            case \"html\":\n              in_body_mode(t, value, arg3, arg4);\n              return;\n            case \"noframes\":\n              in_head_mode(t, value, arg3, arg4);\n              return;\n          }\n          break;\n        case 3:\n          // ENDTAG\n          if (value === \"html\") {\n            parser = after_after_frameset_mode;\n            return;\n          }\n          break;\n      }\n\n      // ignore anything else\n    }\n    function after_after_body_mode(t, value, arg3, arg4) {\n      switch (t) {\n        case 1:\n          // TEXT\n          // If any non-space chars, handle below\n          if (NONWS.test(value)) break;\n          in_body_mode(t, value, arg3, arg4);\n          return;\n        case 4:\n          // COMMENT\n          doc._appendChild(doc.createComment(value));\n          return;\n        case 5:\n          // DOCTYPE\n          in_body_mode(t, value, arg3, arg4);\n          return;\n        case -1:\n          // EOF\n          stopParsing();\n          return;\n        case 2:\n          // TAG\n          if (value === \"html\") {\n            in_body_mode(t, value, arg3, arg4);\n            return;\n          }\n          break;\n      }\n\n      // anything else\n      parser = in_body_mode;\n      parser(t, value, arg3, arg4);\n    }\n    function after_after_frameset_mode(t, value, arg3, arg4) {\n      switch (t) {\n        case 1:\n          // TEXT\n          // Ignore any non-space characters\n          value = value.replace(ALLNONWS, \"\");\n          if (value.length > 0) in_body_mode(t, value, arg3, arg4);\n          return;\n        case 4:\n          // COMMENT\n          doc._appendChild(doc.createComment(value));\n          return;\n        case 5:\n          // DOCTYPE\n          in_body_mode(t, value, arg3, arg4);\n          return;\n        case -1:\n          // EOF\n          stopParsing();\n          return;\n        case 2:\n          // TAG\n          switch (value) {\n            case \"html\":\n              in_body_mode(t, value, arg3, arg4);\n              return;\n            case \"noframes\":\n              in_head_mode(t, value, arg3, arg4);\n              return;\n          }\n          break;\n      }\n\n      // ignore anything else\n    }\n\n    // 13.2.5.5 The rules for parsing tokens in foreign content\n    //\n    // This is like one of the insertion modes above, but is\n    // invoked somewhat differently when the current token is not HTML.\n    // See the insertToken() function.\n    function insertForeignToken(t, value, arg3, arg4) {\n      // A <font> tag is an HTML font tag if it has a color, font, or size\n      // attribute.  Otherwise we assume it is foreign content\n      function isHTMLFont(attrs) {\n        for (var i = 0, n = attrs.length; i < n; i++) {\n          switch (attrs[i][0]) {\n            case \"color\":\n            case \"face\":\n            case \"size\":\n              return true;\n          }\n        }\n        return false;\n      }\n      var current;\n      switch (t) {\n        case 1:\n          // TEXT\n          // If any non-space, non-nul characters\n          if (frameset_ok && NONWSNONNUL.test(value)) frameset_ok = false;\n          if (textIncludesNUL) {\n            value = value.replace(NULCHARS, \"\\uFFFD\");\n          }\n          insertText(value);\n          return;\n        case 4:\n          // COMMENT\n          insertComment(value);\n          return;\n        case 5:\n          // DOCTYPE\n          // ignore it\n          return;\n        case 2:\n          // TAG\n          switch (value) {\n            case \"font\":\n              if (!isHTMLFont(arg3)) break;\n            /* falls through */\n            case \"b\":\n            case \"big\":\n            case \"blockquote\":\n            case \"body\":\n            case \"br\":\n            case \"center\":\n            case \"code\":\n            case \"dd\":\n            case \"div\":\n            case \"dl\":\n            case \"dt\":\n            case \"em\":\n            case \"embed\":\n            case \"h1\":\n            case \"h2\":\n            case \"h3\":\n            case \"h4\":\n            case \"h5\":\n            case \"h6\":\n            case \"head\":\n            case \"hr\":\n            case \"i\":\n            case \"img\":\n            case \"li\":\n            case \"listing\":\n            case \"menu\":\n            case \"meta\":\n            case \"nobr\":\n            case \"ol\":\n            case \"p\":\n            case \"pre\":\n            case \"ruby\":\n            case \"s\":\n            case \"small\":\n            case \"span\":\n            case \"strong\":\n            case \"strike\":\n            case \"sub\":\n            case \"sup\":\n            case \"table\":\n            case \"tt\":\n            case \"u\":\n            case \"ul\":\n            case \"var\":\n              if (fragment) {\n                break;\n              }\n              do {\n                stack.pop();\n                current = stack.top;\n              } while (current.namespaceURI !== NAMESPACE.HTML && !isMathmlTextIntegrationPoint(current) && !isHTMLIntegrationPoint(current));\n              insertToken(t, value, arg3, arg4); // reprocess\n              return;\n          }\n\n          // Any other start tag case goes here\n          current = stack.elements.length === 1 && fragment ? fragmentContext : stack.top;\n          if (current.namespaceURI === NAMESPACE.MATHML) {\n            adjustMathMLAttributes(arg3);\n          } else if (current.namespaceURI === NAMESPACE.SVG) {\n            value = adjustSVGTagName(value);\n            adjustSVGAttributes(arg3);\n          }\n          adjustForeignAttributes(arg3);\n          insertForeignElement(value, arg3, current.namespaceURI);\n          if (arg4) {\n            // the self-closing flag\n            stack.pop();\n          }\n          return;\n        case 3:\n          // ENDTAG\n          current = stack.top;\n          if (value === \"script\" && current.namespaceURI === NAMESPACE.SVG && current.localName === \"script\") {\n            stack.pop();\n\n            // XXX\n            // Deal with SVG scripts here\n          } else {\n            // The any other end tag case\n            var i = stack.elements.length - 1;\n            var node = stack.elements[i];\n            for (;;) {\n              if (node.localName.toLowerCase() === value) {\n                stack.popElement(node);\n                break;\n              }\n              node = stack.elements[--i];\n              // If non-html, keep looping\n              if (node.namespaceURI !== NAMESPACE.HTML) continue;\n              // Otherwise process the end tag as html\n              parser(t, value, arg3, arg4);\n              break;\n            }\n          }\n          return;\n      }\n    }\n\n    /***\n     * Finally, this is the end of the HTMLParser() factory function.\n     * It returns the htmlparser object with the append() and end() methods.\n     */\n\n    // Sneak another method into the htmlparser object to allow us to run\n    // tokenizer tests.  This can be commented out in production code.\n    // This is a hook for testing the tokenizer. It has to be here\n    // because the tokenizer details are all hidden away within the closure.\n    // It should return an array of tokens generated while parsing the\n    // input string.\n    htmlparser.testTokenizer = function (input, initialState, lastStartTag, charbychar) {\n      var tokens = [];\n      switch (initialState) {\n        case \"PCDATA state\":\n          tokenizer = data_state;\n          break;\n        case \"RCDATA state\":\n          tokenizer = rcdata_state;\n          break;\n        case \"RAWTEXT state\":\n          tokenizer = rawtext_state;\n          break;\n        case \"PLAINTEXT state\":\n          tokenizer = plaintext_state;\n          break;\n      }\n      if (lastStartTag) {\n        lasttagname = lastStartTag;\n      }\n      insertToken = function (t, value, arg3, arg4) {\n        flushText();\n        switch (t) {\n          case 1:\n            // TEXT\n            if (tokens.length > 0 && tokens[tokens.length - 1][0] === \"Character\") {\n              tokens[tokens.length - 1][1] += value;\n            } else tokens.push([\"Character\", value]);\n            break;\n          case 4:\n            // COMMENT\n            tokens.push([\"Comment\", value]);\n            break;\n          case 5:\n            // DOCTYPE\n            tokens.push([\"DOCTYPE\", value, arg3 === undefined ? null : arg3, arg4 === undefined ? null : arg4, !force_quirks]);\n            break;\n          case 2:\n            // TAG\n            var attrs = Object.create(null);\n            for (var i = 0; i < arg3.length; i++) {\n              // XXX: does attribute order matter?\n              var a = arg3[i];\n              if (a.length === 1) {\n                attrs[a[0]] = \"\";\n              } else {\n                attrs[a[0]] = a[1];\n              }\n            }\n            var token = [\"StartTag\", value, attrs];\n            if (arg4) token.push(true);\n            tokens.push(token);\n            break;\n          case 3:\n            // ENDTAG\n            tokens.push([\"EndTag\", value]);\n            break;\n        }\n      };\n      if (!charbychar) {\n        this.parse(input, true);\n      } else {\n        for (var i = 0; i < input.length; i++) {\n          this.parse(input[i]);\n        }\n        this.parse(\"\", true);\n      }\n      return tokens;\n    };\n\n    // Return the parser object from the HTMLParser() factory function\n    return htmlparser;\n  }\n  return HTMLParser_1;\n}\nvar DOMImplementation_1;\nvar hasRequiredDOMImplementation;\nfunction requireDOMImplementation() {\n  if (hasRequiredDOMImplementation) return DOMImplementation_1;\n  hasRequiredDOMImplementation = 1;\n  DOMImplementation_1 = DOMImplementation;\n  var Document = requireDocument();\n  var DocumentType = requireDocumentType();\n  var HTMLParser = requireHTMLParser();\n  var utils = requireUtils();\n  var xml = requireXmlnames();\n\n  // Each document must have its own instance of the domimplementation object\n  function DOMImplementation(contextObject) {\n    this.contextObject = contextObject;\n  }\n\n  // Feature/version pairs that DOMImplementation.hasFeature() returns\n  // true for.  It returns false for anything else.\n  var supportedFeatures = {\n    'xml': {\n      '': true,\n      '1.0': true,\n      '2.0': true\n    },\n    // DOM Core\n    'core': {\n      '': true,\n      '2.0': true\n    },\n    // DOM Core\n    'html': {\n      '': true,\n      '1.0': true,\n      '2.0': true\n    },\n    // HTML\n    'xhtml': {\n      '': true,\n      '1.0': true,\n      '2.0': true\n    } // HTML\n  };\n  DOMImplementation.prototype = {\n    hasFeature: function hasFeature(feature, version) {\n      var f = supportedFeatures[(feature || '').toLowerCase()];\n      return f && f[version || ''] || false;\n    },\n    createDocumentType: function createDocumentType(qualifiedName, publicId, systemId) {\n      if (!xml.isValidQName(qualifiedName)) utils.InvalidCharacterError();\n      return new DocumentType(this.contextObject, qualifiedName, publicId, systemId);\n    },\n    createDocument: function createDocument(namespace, qualifiedName, doctype) {\n      //\n      // Note that the current DOMCore spec makes it impossible to\n      // create an HTML document with this function, even if the\n      // namespace and doctype are propertly set.  See this thread:\n      // http://lists.w3.org/Archives/Public/www-dom/2011AprJun/0132.html\n      //\n      var d = new Document(false, null);\n      var e;\n      if (qualifiedName) e = d.createElementNS(namespace, qualifiedName);else e = null;\n      if (doctype) {\n        d.appendChild(doctype);\n      }\n      if (e) d.appendChild(e);\n      if (namespace === utils.NAMESPACE.HTML) {\n        d._contentType = 'application/xhtml+xml';\n      } else if (namespace === utils.NAMESPACE.SVG) {\n        d._contentType = 'image/svg+xml';\n      } else {\n        d._contentType = 'application/xml';\n      }\n      return d;\n    },\n    createHTMLDocument: function createHTMLDocument(titleText) {\n      var d = new Document(true, null);\n      d.appendChild(new DocumentType(d, 'html'));\n      var html = d.createElement('html');\n      d.appendChild(html);\n      var head = d.createElement('head');\n      html.appendChild(head);\n      if (titleText !== undefined) {\n        var title = d.createElement('title');\n        head.appendChild(title);\n        title.appendChild(d.createTextNode(titleText));\n      }\n      html.appendChild(d.createElement('body'));\n      d.modclock = 1; // Start tracking modifications\n      return d;\n    },\n    mozSetOutputMutationHandler: function (doc, handler) {\n      doc.mutationHandler = handler;\n    },\n    mozGetInputMutationHandler: function (doc) {\n      utils.nyi();\n    },\n    mozHTMLParser: HTMLParser\n  };\n  return DOMImplementation_1;\n}\nvar Location_1;\nvar hasRequiredLocation;\nfunction requireLocation() {\n  if (hasRequiredLocation) return Location_1;\n  hasRequiredLocation = 1;\n  var URL = requireURL();\n  var URLUtils = requireURLUtils();\n  Location_1 = Location;\n  function Location(window, href) {\n    this._window = window;\n    this._href = href;\n  }\n  Location.prototype = Object.create(URLUtils.prototype, {\n    constructor: {\n      value: Location\n    },\n    // Special behavior when href is set\n    href: {\n      get: function () {\n        return this._href;\n      },\n      set: function (v) {\n        this.assign(v);\n      }\n    },\n    assign: {\n      value: function (url) {\n        // Resolve the new url against the current one\n        // XXX:\n        // This is not actually correct. It should be resolved against\n        // the URL of the document of the script. For now, though, I only\n        // support a single window and there is only one base url.\n        // So this is good enough for now.\n        var current = new URL(this._href);\n        var newurl = current.resolve(url);\n\n        // Save the new url\n        this._href = newurl;\n\n        // Start loading the new document!\n        // XXX\n        // This is just something hacked together.\n        // The real algorithm is: http://www.whatwg.org/specs/web-apps/current-work/multipage/history.html#navigate\n      }\n    },\n    replace: {\n      value: function (url) {\n        // XXX\n        // Since we aren't tracking history yet, replace is the same as assign\n        this.assign(url);\n      }\n    },\n    reload: {\n      value: function () {\n        // XXX:\n        // Actually, the spec is a lot more complicated than this\n        this.assign(this.href);\n      }\n    },\n    toString: {\n      value: function () {\n        return this.href;\n      }\n    }\n  });\n  return Location_1;\n}\nvar NavigatorID_1;\nvar hasRequiredNavigatorID;\nfunction requireNavigatorID() {\n  if (hasRequiredNavigatorID) return NavigatorID_1;\n  hasRequiredNavigatorID = 1;\n\n  // https://html.spec.whatwg.org/multipage/webappapis.html#navigatorid\n  var NavigatorID = Object.create(null, {\n    appCodeName: {\n      value: \"Mozilla\"\n    },\n    appName: {\n      value: \"Netscape\"\n    },\n    appVersion: {\n      value: \"4.0\"\n    },\n    platform: {\n      value: \"\"\n    },\n    product: {\n      value: \"Gecko\"\n    },\n    productSub: {\n      value: \"20100101\"\n    },\n    userAgent: {\n      value: \"\"\n    },\n    vendor: {\n      value: \"\"\n    },\n    vendorSub: {\n      value: \"\"\n    },\n    taintEnabled: {\n      value: function () {\n        return false;\n      }\n    }\n  });\n  NavigatorID_1 = NavigatorID;\n  return NavigatorID_1;\n}\nvar WindowTimers_1;\nvar hasRequiredWindowTimers;\nfunction requireWindowTimers() {\n  if (hasRequiredWindowTimers) return WindowTimers_1;\n  hasRequiredWindowTimers = 1;\n\n  // https://html.spec.whatwg.org/multipage/webappapis.html#windowtimers\n  var WindowTimers = {\n    setTimeout: setTimeout,\n    clearTimeout: clearTimeout,\n    setInterval: setInterval,\n    clearInterval: clearInterval\n  };\n  WindowTimers_1 = WindowTimers;\n  return WindowTimers_1;\n}\nvar impl = {\n  exports: {}\n};\nvar hasRequiredImpl;\nfunction requireImpl() {\n  if (hasRequiredImpl) return impl.exports;\n  hasRequiredImpl = 1;\n  (function (module, exports) {\n    var utils = requireUtils();\n    exports = module.exports = {\n      CSSStyleDeclaration: requireCSSStyleDeclaration(),\n      CharacterData: requireCharacterData(),\n      Comment: requireComment(),\n      DOMImplementation: requireDOMImplementation(),\n      DOMTokenList: requireDOMTokenList(),\n      Document: requireDocument(),\n      DocumentFragment: requireDocumentFragment(),\n      DocumentType: requireDocumentType(),\n      Element: requireElement(),\n      HTMLParser: requireHTMLParser(),\n      NamedNodeMap: requireNamedNodeMap(),\n      Node: requireNode(),\n      NodeList: requireNodeList(),\n      NodeFilter: requireNodeFilter(),\n      ProcessingInstruction: requireProcessingInstruction(),\n      Text: requireText(),\n      Window: requireWindow()\n    };\n    utils.merge(exports, requireEvents());\n    utils.merge(exports, requireHtmlelts().elements);\n    utils.merge(exports, requireSvg().elements);\n  })(impl, impl.exports);\n  return impl.exports;\n}\nvar Window_1;\nvar hasRequiredWindow;\nfunction requireWindow() {\n  if (hasRequiredWindow) return Window_1;\n  hasRequiredWindow = 1;\n  var DOMImplementation = requireDOMImplementation();\n  var EventTarget = requireEventTarget();\n  var Location = requireLocation();\n  var utils = requireUtils();\n  Window_1 = Window;\n  function Window(document) {\n    this.document = document || new DOMImplementation(null).createHTMLDocument(\"\");\n    this.document._scripting_enabled = true;\n    this.document.defaultView = this;\n    this.location = new Location(this, this.document._address || 'about:blank');\n  }\n  Window.prototype = Object.create(EventTarget.prototype, {\n    console: {\n      value: console\n    },\n    history: {\n      value: {\n        back: utils.nyi,\n        forward: utils.nyi,\n        go: utils.nyi\n      }\n    },\n    navigator: {\n      value: requireNavigatorID()\n    },\n    // Self-referential properties\n    window: {\n      get: function () {\n        return this;\n      }\n    },\n    self: {\n      get: function () {\n        return this;\n      }\n    },\n    frames: {\n      get: function () {\n        return this;\n      }\n    },\n    // Self-referential properties for a top-level window\n    parent: {\n      get: function () {\n        return this;\n      }\n    },\n    top: {\n      get: function () {\n        return this;\n      }\n    },\n    // We don't support any other windows for now\n    length: {\n      value: 0\n    },\n    // no frames\n    frameElement: {\n      value: null\n    },\n    // not part of a frame\n    opener: {\n      value: null\n    },\n    // not opened by another window\n\n    // The onload event handler.\n    // XXX: need to support a bunch of other event types, too,\n    // and have them interoperate with document.body.\n\n    onload: {\n      get: function () {\n        return this._getEventHandler(\"load\");\n      },\n      set: function (v) {\n        this._setEventHandler(\"load\", v);\n      }\n    },\n    // XXX This is a completely broken implementation\n    getComputedStyle: {\n      value: function getComputedStyle(elt) {\n        return elt.style;\n      }\n    }\n  });\n  utils.expose(requireWindowTimers(), Window);\n  utils.expose(requireImpl(), Window);\n  return Window_1;\n}\nvar hasRequiredLib;\nfunction requireLib() {\n  if (hasRequiredLib) return lib;\n  hasRequiredLib = 1;\n  (function (exports) {\n    var DOMImplementation = requireDOMImplementation();\n    var HTMLParser = requireHTMLParser();\n    requireWindow();\n    var impl = requireImpl();\n    exports.createDOMImplementation = function () {\n      return new DOMImplementation(null);\n    };\n    exports.createDocument = function (html, force) {\n      // Previous API couldn't let you pass '' as a document, and that\n      // yields a slightly different document than createHTMLDocument('')\n      // does.  The new `force` parameter lets you pass '' if you want to.\n      if (html || force) {\n        var parser = new HTMLParser();\n        parser.parse(html || '', true);\n        return parser.document();\n      }\n      return new DOMImplementation(null).createHTMLDocument(\"\");\n    };\n    exports.createIncrementalHTMLParser = function () {\n      var parser = new HTMLParser();\n      /** API for incremental parser. */\n      return {\n        /** Provide an additional chunk of text to be parsed. */\n        write: function (s) {\n          if (s.length > 0) {\n            parser.parse(s, false, function () {\n              return true;\n            });\n          }\n        },\n        /**\n         * Signal that we are done providing input text, optionally\n         * providing one last chunk as a parameter.\n         */\n        end: function (s) {\n          parser.parse(s || '', true, function () {\n            return true;\n          });\n        },\n        /**\n         * Performs a chunk of parsing work, returning at the end of\n         * the next token as soon as shouldPauseFunc() returns true.\n         * Returns true iff there is more work to do.\n         *\n         * For example:\n         * ```\n         *  var incrParser = domino.createIncrementalHTMLParser();\n         *  incrParser.end('...long html document...');\n         *  while (true) {\n         *    // Pause every 10ms\n         *    var start = Date.now();\n         *    var pauseIn10 = function() { return (Date.now() - start) >= 10; };\n         *    if (!incrParser.process(pauseIn10)) {\n         *      break;\n         *    }\n         *    ...yield to other tasks, do other housekeeping, etc...\n         *  }\n         * ```\n         */\n        process: function (shouldPauseFunc) {\n          return parser.parse('', false, shouldPauseFunc);\n        },\n        /**\n         * Returns the result of the incremental parse.  Valid after\n         * `this.end()` has been called and `this.process()` has returned\n         * false.\n         */\n        document: function () {\n          return parser.document();\n        }\n      };\n    };\n    exports.createWindow = function (html, address) {\n      var document = exports.createDocument(html);\n      if (address !== undefined) {\n        document._address = address;\n      }\n      return new impl.Window(document);\n    };\n    exports.impl = impl;\n  })(lib);\n  return lib;\n}\nvar libExports = /*#__PURE__*/requireLib();\nvar index = /*@__PURE__*/getDefaultExportFromCjs(libExports);\nfunction setDomTypes() {\n  // Make all Domino types available in the global env.\n  // NB: Any changes here should also be done in `packages/platform-server/init/src/shims.ts`.\n  Object.assign(globalThis, index.impl);\n  globalThis['KeyboardEvent'] = index.impl.Event;\n}\n/**\n * Parses a document string to a Document object.\n */\nfunction parseDocument(html, url = '/') {\n  let window = index.createWindow(html, url);\n  let doc = window.document;\n  return doc;\n}\n/**\n * Serializes a document to string.\n */\nfunction serializeDocument(doc) {\n  return doc.serialize();\n}\n/**\n * DOM Adapter for the server platform based on https://github.com/fgnass/domino.\n */\nlet DominoAdapter = /*#__PURE__*/(() => {\n  class DominoAdapter extends _BrowserDomAdapter {\n    static makeCurrent() {\n      setDomTypes();\n      _setRootDomAdapter(new DominoAdapter());\n    }\n    supportsDOMEvents = false;\n    static defaultDoc;\n    createHtmlDocument() {\n      return parseDocument('<html><head><title>fakeTitle</title></head><body></body></html>');\n    }\n    getDefaultDocument() {\n      if (!DominoAdapter.defaultDoc) {\n        DominoAdapter.defaultDoc = index.createDocument();\n      }\n      return DominoAdapter.defaultDoc;\n    }\n    isElementNode(node) {\n      return node ? node.nodeType === DominoAdapter.defaultDoc.ELEMENT_NODE : false;\n    }\n    isShadowRoot(node) {\n      return node.shadowRoot == node;\n    }\n    /** @deprecated No longer being used in Ivy code. To be removed in version 14. */\n    getGlobalEventTarget(doc, target) {\n      if (target === 'window') {\n        return doc.defaultView;\n      }\n      if (target === 'document') {\n        return doc;\n      }\n      if (target === 'body') {\n        return doc.body;\n      }\n      return null;\n    }\n    getBaseHref(doc) {\n      const length = doc.head.children.length;\n      // The `<base>` can only be a direct child of `<head>` so we can save some\n      // execution time by looking through them directly instead of querying for it.\n      // See: https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Elements/base\n      // Note that we can't cache the `href` value itself, because this method gets called with a\n      // different document every time which means that in theory the value can be different too.\n      for (let i = 0; i < length; i++) {\n        const child = doc.head.children[i];\n        // Tag names are always uppercase for HTML nodes.\n        if (child.tagName === 'BASE') {\n          // TODO(alxhub): Need relative path logic from BrowserDomAdapter here?\n          return child.getAttribute('href') || '';\n        }\n      }\n      return '';\n    }\n    dispatchEvent(el, evt) {\n      el.dispatchEvent(evt);\n      // Dispatch the event to the window also.\n      const doc = el.ownerDocument || el;\n      const win = doc.defaultView;\n      if (win) {\n        win.dispatchEvent(evt);\n      }\n    }\n    getUserAgent() {\n      return 'Fake user agent';\n    }\n    getCookie(name) {\n      throw new _RuntimeError(5700 /* RuntimeErrorCode.GET_COOKIE_NOT_IMPLEMENTED */, (typeof ngDevMode === 'undefined' || ngDevMode) && 'getCookie has not been implemented');\n    }\n  }\n  return DominoAdapter;\n})();\n/**\n * The DI token for setting the initial config for the platform.\n *\n * @publicApi\n */\nconst INITIAL_CONFIG = /*#__PURE__*/new InjectionToken('Server.INITIAL_CONFIG');\n/**\n * A function that will be executed when calling `renderApplication` or\n * `renderModule` just before current platform state is rendered to string.\n *\n * @publicApi\n */\nconst BEFORE_APP_SERIALIZED = /*#__PURE__*/new InjectionToken('Server.RENDER_MODULE_HOOK');\nconst ENABLE_DOM_EMULATION = /*#__PURE__*/new InjectionToken('ENABLE_DOM_EMULATION');\n\n/**\n * Representation of the current platform state.\n *\n * @publicApi\n */\nlet PlatformState = /*#__PURE__*/(() => {\n  class PlatformState {\n    _doc;\n    /* @internal */\n    _enableDomEmulation = enableDomEmulation(inject(Injector));\n    constructor(_doc) {\n      this._doc = _doc;\n    }\n    /**\n     * Renders the current state of the platform to string.\n     */\n    renderToString() {\n      if (ngDevMode && !this._enableDomEmulation && !window?.document) {\n        throw new _RuntimeError(5704 /* RuntimeErrorCode.DISABLED_DOM_EMULATION_IN_NON_BROWSER */, (typeof ngDevMode === 'undefined' || ngDevMode) && 'Disabled DOM emulation should only run in browser environments');\n      }\n      const measuringLabel = 'renderToString';\n      _startMeasuring(measuringLabel);\n      const rendered = this._enableDomEmulation ? serializeDocument(this._doc) :\n      // In the case we run/test the platform-server in a browser environment\n      this._doc.documentElement.outerHTML;\n      _stopMeasuring(measuringLabel);\n      return rendered;\n    }\n    /**\n     * Returns the current DOM state.\n     */\n    getDocument() {\n      return this._doc;\n    }\n    static ɵfac = function PlatformState_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || PlatformState)(i0.ɵɵinject(DOCUMENT));\n    };\n    static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n      token: PlatformState,\n      factory: PlatformState.ɵfac\n    });\n  }\n  return PlatformState;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction enableDomEmulation(injector) {\n  return injector.get(ENABLE_DOM_EMULATION, true);\n}\n\n/**\n * Matches http: or https:\n */\nconst HTTP_OR_HTTPS_PROTOCOL_REGEX = /^https?:/i;\nfunction parseUrl(urlStr, origin, options = {}) {\n  const originUrl = typeof origin === 'string' ? new URL('/', origin) : origin;\n  if (!urlStr) {\n    return originUrl || null;\n  }\n  urlStr = urlStr.trim();\n  // Fast-path: if the URL is a valid, standard absolute URL, parse and return it immediately.\n  let resolved;\n  try {\n    resolved = new URL(urlStr);\n  } catch {}\n  const {\n    allowProtocolRelative = false,\n    allowOriginChange = true\n  } = options;\n  if (resolved) {\n    if (originUrl && !isSafeOriginChange(resolved, originUrl, urlStr, allowOriginChange)) {\n      throwSuspiciousUrlError(urlStr);\n    }\n    return resolved;\n  }\n  // We identify and throw on malformed absolute URLs (like double port).\n  // Per the WHATWG URL standard, parsing an input starting with a scheme (like 'http:') against\n  // a standard base (like 'http://fake') ignores the base argument and parses strictly as an\n  // absolute URL. Since it is malformed, the native URL constructor will throw a validation\n  // error. Standard relative/protocol-relative paths parse successfully, allowing the flow to continue.\n  if (!URL.canParse(urlStr, 'http://fake')) {\n    throw new _RuntimeError(5701 /* RuntimeErrorCode.INVALID_URL */, typeof ngDevMode === 'undefined' || ngDevMode ? `Invalid URL: ${urlStr}` : urlStr);\n  }\n  if (!originUrl) {\n    return null;\n  }\n  // Check if we have a legitimate protocol-relative URL (starts with '//' and not a duplicate/backslash bypass)\n  // and we are configured to allow and preserve standard cross-origin protocol-relative requests.\n  if (urlStr.startsWith('//')) {\n    if (!allowProtocolRelative) {\n      throw new _RuntimeError(5702 /* RuntimeErrorCode.PROTOCOL_RELATIVE_URL_NOT_ALLOWED */, typeof ngDevMode === 'undefined' || ngDevMode ? `Protocol relative URLs are not allowed in this context. URL: ${urlStr}` : urlStr);\n    }\n    return new URL(urlStr, origin);\n  }\n  resolved = new URL(urlStr, origin);\n  if (!isSafeOriginChange(resolved, originUrl, urlStr, allowOriginChange)) {\n    throwSuspiciousUrlError(urlStr);\n  }\n  return resolved;\n}\n/**\n * Throws a suspicious URL error indicating a security bypass attempt.\n */\nfunction throwSuspiciousUrlError(urlStr) {\n  throw new _RuntimeError(5703 /* RuntimeErrorCode.SUSPICIOUS_URL_CHANGE_ORIGIN */, typeof ngDevMode === 'undefined' || ngDevMode ? `URL ${urlStr} changed origin unexpectedly. This is suspicious and may indicate a security bypass attempt.` : urlStr);\n}\n/**\n * Checks if the origin has changed in a safe way.\n *\n * @param resolved The resolved URL.\n * @param origin The origin URL.\n * @param urlStr The URL string.\n * @param allowOriginChange Whether to allow origin changes.\n * @returns True if the origin has changed in a safe way, false otherwise.\n */\nfunction isSafeOriginChange(resolved, origin, urlStr, allowOriginChange) {\n  if (origin.origin === resolved.origin) {\n    return true;\n  }\n  if (!allowOriginChange) {\n    return false;\n  }\n  return HTTP_OR_HTTPS_PROTOCOL_REGEX.test(urlStr);\n}\n\n/**\n * @deprecated Use the HttpClient fetch backend (by enabling `withFetch()`) instead.\n * XHR support in `@angular/platform-server` is deprecated because the underlying `xhr2`\n * library does not safely handle redirects (e.g. it can forward `Authorization` headers\n * on cross-origin redirects and is susceptible to denial-of-service (DoS) via redirect loops).\n */\nlet ServerXhr = /*#__PURE__*/(() => {\n  class ServerXhr {\n    xhrImpl;\n    // The `xhr2` dependency has a side-effect of accessing and modifying a\n    // global scope. Loading `xhr2` dynamically allows us to delay the loading\n    // and start the process once the global scope is established by the underlying\n    // server platform (via shims, etc).\n    async ɵloadImpl() {\n      if (!this.xhrImpl) {\n        if (typeof ngDevMode === 'undefined' || ngDevMode) {\n          console.warn('XHR support in `@angular/platform-server` is deprecated and will be removed ' + 'in a future version of Angular. It has known security and performance issues in server ' + 'environments, such as forwarding `Authorization` headers on cross-origin ' + 'redirects and susceptibility to denial-of-service (DoS) via redirect loops. ' + 'Please enable the HttpClient fetch backend instead by using `withFetch()`.');\n        }\n        const {\n          default: xhr\n        } = await import('xhr2');\n        this.xhrImpl = xhr;\n      }\n    }\n    build() {\n      const impl = this.xhrImpl;\n      if (!impl) {\n        throw new _RuntimeError(5705 /* RuntimeErrorCode.XHR_NOT_LOADED */, (typeof ngDevMode === 'undefined' || ngDevMode) && 'Unexpected state in ServerXhr: XHR implementation is not loaded.');\n      }\n      return new impl.XMLHttpRequest();\n    }\n    static ɵfac = function ServerXhr_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || ServerXhr)();\n    };\n    static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n      token: ServerXhr,\n      factory: ServerXhr.ɵfac\n    });\n  }\n  return ServerXhr;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n/**\n * Regex to match a URL schema.\n */\nconst URL_SCHEMA_REGEXP = /^(?:[a-zA-Z][a-zA-Z0-9+\\-.]*:)/;\nfunction relativeUrlsTransformerInterceptorFn(request, next) {\n  const trimmedUrl = request.url.trim();\n  if (URL_SCHEMA_REGEXP.test(trimmedUrl)) {\n    // URLs with a schema should be left unchanged.\n    return next(request);\n  }\n  const platformLocation = inject(PlatformLocation);\n  const {\n    href,\n    protocol,\n    hostname,\n    port\n  } = platformLocation;\n  if (!protocol.startsWith('http')) {\n    return next(request);\n  }\n  let urlPrefix = `${protocol}//${hostname}`;\n  if (port) {\n    urlPrefix += `:${port}`;\n  }\n  const baseHref = platformLocation.getBaseHrefFromDOM() || href;\n  const baseUrl = new URL(baseHref, urlPrefix);\n  const parsedUrl = parseUrl(request.url, baseUrl, {\n    allowProtocolRelative: true\n  });\n  return next(request.clone({\n    url: parsedUrl.toString()\n  }));\n}\nconst SERVER_HTTP_PROVIDERS = [{\n  provide: XhrFactory,\n  useClass: ServerXhr\n}, {\n  provide: _HTTP_ROOT_INTERCEPTOR_FNS,\n  useValue: relativeUrlsTransformerInterceptorFn,\n  multi: true\n}];\n\n/**\n * Server-side implementation of URL state. Implements `pathname`, `search`, and `hash`\n * but not the state stack.\n */\nlet ServerPlatformLocation = /*#__PURE__*/(() => {\n  class ServerPlatformLocation {\n    _doc;\n    href = '/';\n    hostname = '/';\n    protocol = '/';\n    port = '/';\n    pathname = '/';\n    search = '';\n    hash = '';\n    _hashUpdate = new Subject();\n    origin;\n    constructor(_doc, _config) {\n      this._doc = _doc;\n      let origin = this._doc.location.origin;\n      const config = _config;\n      if (config && config.url) {\n        const {\n          protocol,\n          hostname,\n          port,\n          pathname,\n          search,\n          hash,\n          href,\n          origin: parsedOrigin\n        } = parseUrl(config.url, origin);\n        this.protocol = protocol;\n        this.hostname = hostname;\n        this.port = port;\n        this.pathname = pathname;\n        this.search = search;\n        this.hash = hash;\n        this.href = href;\n        origin = parsedOrigin;\n      }\n      this.origin = origin;\n    }\n    getBaseHrefFromDOM() {\n      return _getDOM().getBaseHref(this._doc);\n    }\n    onPopState(fn) {\n      // No-op: a state stack is not implemented, so\n      // no events will ever come.\n      return () => {};\n    }\n    onHashChange(fn) {\n      const subscription = this._hashUpdate.subscribe(fn);\n      return () => subscription.unsubscribe();\n    }\n    get url() {\n      return `${this.pathname}${this.search}${this.hash}`;\n    }\n    setHash(value, oldUrl) {\n      if (this.hash === value) {\n        // Don't fire events if the hash has not changed.\n        return;\n      }\n      this.hash = value;\n      const newUrl = this.url;\n      queueMicrotask(() => this._hashUpdate.next({\n        type: 'hashchange',\n        state: null,\n        oldUrl,\n        newUrl\n      }));\n    }\n    replaceState(state, title, newUrl) {\n      const oldUrl = this.url;\n      const {\n        pathname,\n        search,\n        hash,\n        href,\n        protocol\n      } = parseUrl(newUrl, this.origin, {\n        allowOriginChange: false\n      });\n      const writableThis = this;\n      writableThis.pathname = pathname;\n      writableThis.search = search;\n      writableThis.href = href;\n      writableThis.protocol = protocol;\n      this.setHash(hash, oldUrl);\n    }\n    pushState(state, title, newUrl) {\n      this.replaceState(state, title, newUrl);\n    }\n    forward() {\n      throw new Error('Not implemented');\n    }\n    back() {\n      throw new Error('Not implemented');\n    }\n    // History API isn't available on server, therefore return undefined\n    getState() {\n      return undefined;\n    }\n    static ɵfac = function ServerPlatformLocation_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || ServerPlatformLocation)(i0.ɵɵinject(DOCUMENT), i0.ɵɵinject(INITIAL_CONFIG, 8));\n    };\n    static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n      token: ServerPlatformLocation,\n      factory: ServerPlatformLocation.ɵfac\n    });\n  }\n  return ServerPlatformLocation;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nlet ServerEventManagerPlugin = /*#__PURE__*/(() => {\n  class ServerEventManagerPlugin extends EventManagerPlugin {\n    doc;\n    constructor(doc) {\n      super(doc);\n      this.doc = doc;\n    }\n    // Handle all events on the server.\n    supports(eventName) {\n      return true;\n    }\n    addEventListener(element, eventName, handler, options) {\n      return _getDOM().onAndCancel(element, eventName, handler, options);\n    }\n    static ɵfac = function ServerEventManagerPlugin_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || ServerEventManagerPlugin)(i0.ɵɵinject(DOCUMENT));\n    };\n    static ɵprov = /* @__PURE__ */i0.ɵɵdefineInjectable({\n      token: ServerEventManagerPlugin,\n      factory: ServerEventManagerPlugin.ɵfac\n    });\n  }\n  return ServerEventManagerPlugin;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\n\n/** Tracks whether the server-side application transfer state has already been serialized. */\nconst TRANSFER_STATE_STATUS = /*#__PURE__*/new InjectionToken(typeof ngDevMode === 'undefined' || ngDevMode ? 'TRANSFER_STATE_STATUS' : '', {\n  providedIn: 'root',\n  factory: () => ({\n    serialized: false\n  })\n});\nconst TRANSFER_STATE_SERIALIZATION_PROVIDERS = [{\n  provide: BEFORE_APP_SERIALIZED,\n  useFactory: serializeTransferStateFactory,\n  multi: true\n}];\n/** TODO: Move this to a utils folder and convert to use SafeValues. */\nfunction createScript(doc, textContent, nonce) {\n  const script = doc.createElement('script');\n  script.textContent = textContent;\n  if (nonce) {\n    script.setAttribute('nonce', nonce);\n  }\n  return script;\n}\nfunction warnIfStateTransferHappened(injector) {\n  const transferStateStatus = injector.get(TRANSFER_STATE_STATUS);\n  if (transferStateStatus.serialized) {\n    console.warn(`Angular detected an incompatible configuration, which causes duplicate serialization of the server-side application state.\\n\\n` + `This can happen if the server providers have been provided more than once using different mechanisms. For example:\\n\\n` + `  imports: [ServerModule], // Registers server providers\\n` + `  providers: [provideServerRendering()] // Also registers server providers\\n\\n` + `To fix this, ensure that the \\`provideServerRendering()\\` function is the only provider used and remove the other(s).`);\n  }\n  transferStateStatus.serialized = true;\n}\nfunction serializeTransferStateFactory() {\n  const doc = inject(DOCUMENT);\n  const appId = inject(APP_ID);\n  const transferStore = inject(TransferState);\n  const injector = inject(Injector);\n  return () => {\n    const measuringLabel = 'serializeTransferStateFactory';\n    _startMeasuring(measuringLabel);\n    // The `.toJSON` here causes the `onSerialize` callbacks to be called.\n    // These callbacks can be used to provide the value for a given key.\n    const content = transferStore.toJson();\n    if (transferStore.isEmpty) {\n      // The state is empty, nothing to transfer,\n      // avoid creating an extra `<script>` tag in this case.\n      return;\n    }\n    if (typeof ngDevMode !== 'undefined' && ngDevMode) {\n      warnIfStateTransferHappened(injector);\n    }\n    const script = createScript(doc, content,\n    /**\n     * `nonce` is not required for 'application/json'\n     * See: https://html.spec.whatwg.org/multipage/scripting.html#attr-script-type\n     */\n    null);\n    script.id = appId + '-state';\n    script.setAttribute('type', 'application/json');\n    // It is intentional that we add the script at the very bottom. Angular CLI script tags for\n    // bundles are always `type=\"module\"`. These are deferred by default and cause the\n    // transfer data to be queried only after the browser has finished parsing the DOM.\n    doc.body.appendChild(script);\n    _stopMeasuring(measuringLabel);\n  };\n}\nconst INTERNAL_SERVER_PLATFORM_PROVIDERS = [{\n  provide: DOCUMENT,\n  useFactory: _document,\n  deps: [Injector]\n}, {\n  provide: PLATFORM_ID,\n  useValue: _PLATFORM_SERVER_ID\n}, {\n  provide: PLATFORM_INITIALIZER,\n  useFactory: initDominoAdapter,\n  multi: true,\n  deps: [Injector]\n}, {\n  provide: PlatformLocation,\n  useClass: ServerPlatformLocation,\n  deps: [DOCUMENT, [Optional, INITIAL_CONFIG]]\n}, {\n  provide: PlatformState,\n  deps: [DOCUMENT]\n}];\nfunction initDominoAdapter(injector) {\n  const _enableDomEmulation = enableDomEmulation(injector);\n  return () => {\n    if (_enableDomEmulation) {\n      DominoAdapter.makeCurrent();\n    } else {\n      _BrowserDomAdapter.makeCurrent();\n    }\n  };\n}\nconst SERVER_RENDER_PROVIDERS = [{\n  provide: EVENT_MANAGER_PLUGINS,\n  multi: true,\n  useClass: ServerEventManagerPlugin\n}];\nconst PLATFORM_SERVER_PROVIDERS = [TRANSFER_STATE_SERIALIZATION_PROVIDERS, SERVER_RENDER_PROVIDERS, SERVER_HTTP_PROVIDERS, {\n  provide: Testability,\n  useValue: null\n},\n// Keep for backwards-compatibility.\n{\n  provide: _TESTABILITY,\n  useValue: null\n}, {\n  provide: ViewportScroller,\n  useClass: _NullViewportScroller\n}];\n/**\n * The ng module for the server.\n *\n * @publicApi\n */\nlet ServerModule = /*#__PURE__*/(() => {\n  class ServerModule {\n    static ɵfac = function ServerModule_Factory(__ngFactoryType__) {\n      return new (__ngFactoryType__ || ServerModule)();\n    };\n    static ɵmod = /* @__PURE__ */i0.ɵɵdefineNgModule({\n      type: ServerModule\n    });\n    static ɵinj = /* @__PURE__ */i0.ɵɵdefineInjector({\n      providers: PLATFORM_SERVER_PROVIDERS,\n      imports: [BrowserModule]\n    });\n  }\n  return ServerModule;\n})();\n/*#__PURE__*/(() => {\n  (typeof ngDevMode === \"undefined\" || ngDevMode) && void 0;\n})();\nfunction _document(injector) {\n  const config = injector.get(INITIAL_CONFIG, null);\n  const _enableDomEmulation = enableDomEmulation(injector);\n  let document;\n  if (config && config.document) {\n    document = typeof config.document === 'string' ? _enableDomEmulation ? parseDocument(config.document, config.url !== undefined ?\n    // A fallback same-origin base ('http://localhost') is provided so that relative\n    // page URLs are parsed and resolved as same-origin paths, preventing empty\n    // or invalid location values in the parsed virtual DOM document.\n    parseUrl(config.url, 'http://localhost').href : undefined) : window.document : config.document;\n  } else {\n    document = _getDOM().createHtmlDocument();\n  }\n  // Tell ivy about the global document\n  _setDocument(document);\n  return document;\n}\n/**\n * Creates a server-side instance of an Angular platform.\n *\n * This platform should be used when performing server-side rendering of an Angular application.\n * Standalone applications can be bootstrapped on the server using the `bootstrapApplication`\n * function from `@angular/platform-browser`. When using `bootstrapApplication`, the `platformServer`\n * should be created first and passed to the bootstrap function using the `BootstrapContext`.\n *\n * @publicApi\n */\nfunction platformServer(extraProviders) {\n  const noServerModeSet = typeof ngServerMode === 'undefined';\n  if (noServerModeSet) {\n    globalThis['ngServerMode'] = true;\n  }\n  const platform = createPlatformFactory(platformCore, 'server', INTERNAL_SERVER_PLATFORM_PROVIDERS)(extraProviders);\n  if (noServerModeSet) {\n    platform.onDestroy(() => {\n      globalThis['ngServerMode'] = undefined;\n    });\n  }\n  return platform;\n}\nexport { BEFORE_APP_SERIALIZED, DominoAdapter, ENABLE_DOM_EMULATION, INITIAL_CONFIG, INTERNAL_SERVER_PLATFORM_PROVIDERS, PLATFORM_SERVER_PROVIDERS, PlatformState, SERVER_RENDER_PROVIDERS, ServerModule, createScript, parseUrl, platformServer };\n","/**\n * @license Angular v20.3.25\n * (c) 2010-2025 Google LLC. https://angular.dev/\n * License: MIT\n */\n\nimport { PLATFORM_SERVER_PROVIDERS, PlatformState, BEFORE_APP_SERIALIZED, parseUrl, platformServer, INITIAL_CONFIG, createScript } from './server.mjs';\nexport { ServerModule, DominoAdapter as ɵDominoAdapter, ENABLE_DOM_EMULATION as ɵENABLE_DOM_EMULATION, INTERNAL_SERVER_PLATFORM_PROVIDERS as ɵINTERNAL_SERVER_PLATFORM_PROVIDERS, SERVER_RENDER_PROVIDERS as ɵSERVER_RENDER_PROVIDERS } from './server.mjs';\nimport { makeEnvironmentProviders, InjectionToken, ApplicationRef, ɵstartMeasuring as _startMeasuring, ɵstopMeasuring as _stopMeasuring, ɵRuntimeError as _RuntimeError, ɵIS_HYDRATION_DOM_REUSE_ENABLED as _IS_HYDRATION_DOM_REUSE_ENABLED, ɵannotateForHydration as _annotateForHydration, CSP_NONCE, APP_ID, ɵSSR_CONTENT_INTEGRITY_MARKER as _SSR_CONTENT_INTEGRITY_MARKER, Renderer2, Version } from '@angular/core';\nimport '@angular/common';\nimport '@angular/platform-browser';\nimport '@angular/common/http';\nimport 'rxjs';\n\n/**\n * Sets up providers necessary to enable server rendering functionality for the application.\n *\n * @usageNotes\n *\n * Basic example of how you can add server support to your application:\n * ```ts\n * bootstrapApplication(AppComponent, {\n *   providers: [provideServerRendering()]\n * });\n * ```\n *\n * @publicApi\n * @returns A set of providers to setup the server.\n */\nfunction provideServerRendering() {\n  if (typeof ngServerMode === 'undefined') {\n    globalThis['ngServerMode'] = true;\n  }\n  return makeEnvironmentProviders([...PLATFORM_SERVER_PROVIDERS]);\n}\n\n/**\n * Event dispatch (JSAction) script is inlined into the HTML by the build\n * process to avoid extra blocking request on a page. The script looks like this:\n * ```html\n * <script type=\"text/javascript\" id=\"ng-event-dispatch-contract\">...</script>\n * ```\n * This const represents the \"id\" attribute value.\n */\nconst EVENT_DISPATCH_SCRIPT_ID = 'ng-event-dispatch-contract';\n/**\n * Creates an instance of a server platform (with or without JIT compiler support\n * depending on the `ngJitMode` global const value), using provided options.\n */\nfunction createServerPlatform(options) {\n  const extraProviders = options.platformProviders ?? [];\n  const measuringLabel = 'createServerPlatform';\n  _startMeasuring(measuringLabel);\n  const {\n    document,\n    url\n  } = options;\n  const platform = platformServer([{\n    provide: INITIAL_CONFIG,\n    useValue: {\n      document,\n      url\n    }\n  }, extraProviders]);\n  _stopMeasuring(measuringLabel);\n  return platform;\n}\n/**\n * Finds and returns inlined event dispatch script if it exists.\n * See the `EVENT_DISPATCH_SCRIPT_ID` const docs for additional info.\n */\nfunction findEventDispatchScript(doc) {\n  return doc.getElementById(EVENT_DISPATCH_SCRIPT_ID);\n}\n/**\n * Removes inlined event dispatch script if it exists.\n * See the `EVENT_DISPATCH_SCRIPT_ID` const docs for additional info.\n */\nfunction removeEventDispatchScript(doc) {\n  findEventDispatchScript(doc)?.remove();\n}\n/**\n * Annotate nodes for hydration and remove event dispatch script when not needed.\n */\nfunction prepareForHydration(platformState, applicationRef) {\n  const measuringLabel = 'prepareForHydration';\n  _startMeasuring(measuringLabel);\n  const environmentInjector = applicationRef.injector;\n  const doc = platformState.getDocument();\n  if (!environmentInjector.get(_IS_HYDRATION_DOM_REUSE_ENABLED, false)) {\n    // Hydration is diabled, remove inlined event dispatch script.\n    // (which was injected by the build process) from the HTML.\n    removeEventDispatchScript(doc);\n    return;\n  }\n  appendSsrContentIntegrityMarker(doc);\n  const eventTypesToReplay = _annotateForHydration(applicationRef, doc);\n  if (eventTypesToReplay.regular.size || eventTypesToReplay.capture.size) {\n    insertEventRecordScript(environmentInjector.get(APP_ID), doc, eventTypesToReplay, environmentInjector.get(CSP_NONCE, null));\n  } else {\n    // No events to replay, we should remove inlined event dispatch script\n    // (which was injected by the build process) from the HTML.\n    removeEventDispatchScript(doc);\n  }\n  _stopMeasuring(measuringLabel);\n}\n/**\n * Creates a marker comment node and append it into the `<body>`.\n * Some CDNs have mechanisms to remove all comment node from HTML.\n * This behaviour breaks hydration, so we'll detect on the client side if this\n * marker comment is still available or else throw an error\n */\nfunction appendSsrContentIntegrityMarker(doc) {\n  // Adding a ng hydration marker comment\n  const comment = doc.createComment(_SSR_CONTENT_INTEGRITY_MARKER);\n  doc.body.firstChild ? doc.body.insertBefore(comment, doc.body.firstChild) : doc.body.append(comment);\n}\n/**\n * Adds the `ng-server-context` attribute to host elements of all bootstrapped components\n * within a given application.\n */\nfunction appendServerContextInfo(applicationRef) {\n  const injector = applicationRef.injector;\n  let serverContext = sanitizeServerContext(injector.get(SERVER_CONTEXT, DEFAULT_SERVER_CONTEXT));\n  applicationRef.components.forEach(componentRef => {\n    const renderer = componentRef.injector.get(Renderer2);\n    const element = componentRef.location.nativeElement;\n    if (element) {\n      renderer.setAttribute(element, 'ng-server-context', serverContext);\n    }\n  });\n}\nfunction insertEventRecordScript(appId, doc, eventTypesToReplay, nonce) {\n  const measuringLabel = 'insertEventRecordScript';\n  _startMeasuring(measuringLabel);\n  const {\n    regular,\n    capture\n  } = eventTypesToReplay;\n  const eventDispatchScript = findEventDispatchScript(doc);\n  // Note: this is only true when build with the CLI tooling, which inserts the script in the HTML\n  if (eventDispatchScript) {\n    // This is defined in packages/core/primitives/event-dispatch/contract_binary.ts\n    const replayScriptContents = `window.__jsaction_bootstrap(` + `document.body,` + `\"${appId}\",` + `${JSON.stringify(Array.from(regular))},` + `${JSON.stringify(Array.from(capture))}` + `);`;\n    const replayScript = createScript(doc, replayScriptContents, nonce);\n    // Insert replay script right after inlined event dispatch script, since it\n    // relies on `__jsaction_bootstrap` to be defined in the global scope.\n    eventDispatchScript.after(replayScript);\n  }\n  _stopMeasuring(measuringLabel);\n}\n/**\n * Renders an Angular application to a string.\n *\n * @private\n *\n * @param platformRef - Reference to the Angular platform.\n * @param applicationRef - Reference to the Angular application.\n * @returns A promise that resolves to the rendered string.\n */\nasync function renderInternal(platformRef, applicationRef) {\n  const platformState = platformRef.injector.get(PlatformState);\n  prepareForHydration(platformState, applicationRef);\n  appendServerContextInfo(applicationRef);\n  // Run any BEFORE_APP_SERIALIZED callbacks just before rendering to string.\n  const environmentInjector = applicationRef.injector;\n  const callbacks = environmentInjector.get(BEFORE_APP_SERIALIZED, null);\n  if (callbacks) {\n    const asyncCallbacks = [];\n    for (const callback of callbacks) {\n      try {\n        const callbackResult = callback();\n        if (callbackResult) {\n          asyncCallbacks.push(callbackResult);\n        }\n      } catch (e) {\n        // Ignore exceptions.\n        console.warn('Ignoring BEFORE_APP_SERIALIZED Exception: ', e);\n      }\n    }\n    if (asyncCallbacks.length) {\n      for (const result of await Promise.allSettled(asyncCallbacks)) {\n        if (result.status === 'rejected') {\n          console.warn('Ignoring BEFORE_APP_SERIALIZED Exception: ', result.reason);\n        }\n      }\n    }\n  }\n  return platformState.renderToString();\n}\n/**\n * Destroy the application in a macrotask, this allows pending promises to be settled and errors\n * to be surfaced to the users.\n */\nfunction asyncDestroyPlatform(platformRef) {\n  return new Promise(resolve => {\n    setTimeout(() => {\n      platformRef.destroy();\n      resolve();\n    }, 0);\n  });\n}\n/**\n * Specifies the value that should be used if no server context value has been provided.\n */\nconst DEFAULT_SERVER_CONTEXT = 'other';\n/**\n * An internal token that allows providing extra information about the server context\n * (e.g. whether SSR or SSG was used). The value is a string and characters other\n * than [a-zA-Z0-9\\-] are removed. See the default value in `DEFAULT_SERVER_CONTEXT` const.\n */\nconst SERVER_CONTEXT = /*#__PURE__*/new InjectionToken('SERVER_CONTEXT');\n/**\n * Sanitizes provided server context:\n * - removes all characters other than a-z, A-Z, 0-9 and `-`\n * - returns `other` if nothing is provided or the string is empty after sanitization\n */\nfunction sanitizeServerContext(serverContext) {\n  const context = serverContext.replace(/[^a-zA-Z0-9\\-]/g, '');\n  return context.length > 0 ? context : DEFAULT_SERVER_CONTEXT;\n}\n/**\n * Bootstraps an application using provided NgModule and serializes the page content to string.\n *\n * @param moduleType A reference to an NgModule that should be used for bootstrap.\n * @param options Additional configuration for the render operation:\n *  - `document` - the document of the page to render, either as an HTML string or\n *                 as a reference to the `document` instance.\n *  - `url` - the URL for the current render request.\n *  - `extraProviders` - set of platform level providers for the current render request.\n *  - `allowedHosts` - the allowed hosts list for host validation in server-side rendering.\n * @publicApi\n */\nasync function renderModule(moduleType, options) {\n  const {\n    document,\n    url,\n    extraProviders: platformProviders,\n    allowedHosts\n  } = options;\n  validateAllowedHosts(url, allowedHosts);\n  const platformRef = createServerPlatform({\n    document,\n    url,\n    platformProviders\n  });\n  try {\n    const moduleRef = await platformRef.bootstrapModule(moduleType);\n    const applicationRef = moduleRef.injector.get(ApplicationRef);\n    const measuringLabel = 'whenStable';\n    _startMeasuring(measuringLabel);\n    // Block until application is stable.\n    await applicationRef.whenStable();\n    _stopMeasuring(measuringLabel);\n    return await renderInternal(platformRef, applicationRef);\n  } finally {\n    await asyncDestroyPlatform(platformRef);\n  }\n}\n/**\n * Bootstraps an instance of an Angular application and renders it to a string.\n *\n * @usageNotes\n *\n * ```ts\n * import { BootstrapContext, bootstrapApplication } from '@angular/platform-browser';\n * import { renderApplication } from '@angular/platform-server';\n * import { ApplicationConfig } from '@angular/core';\n * import { AppComponent } from './app.component';\n *\n * const appConfig: ApplicationConfig = { providers: [...] };\n * const bootstrap = (context: BootstrapContext) =>\n *   bootstrapApplication(AppComponent, config, context);\n * const output = await renderApplication(bootstrap);\n * ```\n *\n * @param bootstrap A method that when invoked returns a promise that returns an `ApplicationRef`\n *     instance once resolved. The method is invoked with an `Injector` instance that\n *     provides access to the platform-level dependency injection context.\n * @param options Additional configuration for the render operation:\n *  - `document` - the document of the page to render, either as an HTML string or\n *                 as a reference to the `document` instance.\n *  - `url` - the URL for the current render request.\n *  - `platformProviders` - the platform level providers for the current render request.\n *  - `allowedHosts` - the allowed hosts list for host validation in server-side rendering.\n *\n * @returns A Promise, that returns serialized (to a string) rendered page, once resolved.\n *\n * @publicApi\n */\nasync function renderApplication(bootstrap, options) {\n  const renderAppLabel = 'renderApplication';\n  const bootstrapLabel = 'bootstrap';\n  const _renderLabel = '_render';\n  const {\n    url,\n    allowedHosts\n  } = options;\n  validateAllowedHosts(url, allowedHosts);\n  _startMeasuring(renderAppLabel);\n  const platformRef = createServerPlatform(options);\n  try {\n    _startMeasuring(bootstrapLabel);\n    const applicationRef = await bootstrap({\n      platformRef\n    });\n    _stopMeasuring(bootstrapLabel);\n    _startMeasuring(_renderLabel);\n    const measuringLabel = 'whenStable';\n    _startMeasuring(measuringLabel);\n    // Block until application is stable.\n    await applicationRef.whenStable();\n    _stopMeasuring(measuringLabel);\n    const rendered = await renderInternal(platformRef, applicationRef);\n    _stopMeasuring(_renderLabel);\n    return rendered;\n  } finally {\n    await asyncDestroyPlatform(platformRef);\n    _stopMeasuring(renderAppLabel);\n  }\n}\nfunction validateAllowedHosts(url, allowedHosts) {\n  if (typeof url === 'string') {\n    const parsedUrl = parseUrl(url);\n    if (parsedUrl !== null) {\n      const hostname = parsedUrl.hostname;\n      const allowedHostsSet = new Set(allowedHosts);\n      if (!isHostAllowed(hostname, allowedHostsSet)) {\n        throw new _RuntimeError(5706 /* RuntimeErrorCode.HOST_NOT_ALLOWED */, typeof ngDevMode === 'undefined' || ngDevMode ? `Host ${url} is not allowed. You can configure \\`allowedHosts\\` option.` : url);\n      }\n    }\n  }\n}\n/**\n * Checks if the hostname is allowed.\n * @param hostname - The hostname to check.\n * @param allowedHosts - A set of allowed hostnames.\n * @returns `true` if the hostname is allowed, `false` otherwise.\n * @note Used also in `@angular/ssr`.\n * @private\n */\nfunction isHostAllowed(hostname, allowedHosts) {\n  if (allowedHosts.has('*') || allowedHosts.has(hostname)) {\n    return true;\n  }\n  for (const allowedHost of allowedHosts) {\n    if (!allowedHost.startsWith('*.')) {\n      continue;\n    }\n    const domain = allowedHost.slice(1);\n    if (hostname.endsWith(domain)) {\n      return true;\n    }\n  }\n  return false;\n}\n\n/**\n * @module\n * @description\n * Entry point for all public APIs of the platform-server package.\n */\n/**\n * @publicApi\n */\nconst VERSION = /* @__PURE__ */new Version('20.3.25');\nexport { BEFORE_APP_SERIALIZED, INITIAL_CONFIG, PlatformState, VERSION, platformServer, provideServerRendering, renderApplication, renderModule, SERVER_CONTEXT as ɵSERVER_CONTEXT, isHostAllowed as ɵisHostAllowed, renderInternal as ɵrenderInternal };\n","function createNotImplementedError(name) {\n  throw new Error(`[unenv] ${name} is not implemented yet!`);\n}\nfunction notImplemented(name) {\n  const fn = () => {\n    throw createNotImplementedError(name);\n  };\n  return Object.assign(fn, {\n    __unenv__: true\n  });\n}\nconst access = /*#__PURE__*/notImplemented(\"fs.access\");\nconst copyFile = /*#__PURE__*/notImplemented(\"fs.copyFile\");\nconst cp = /*#__PURE__*/notImplemented(\"fs.cp\");\nconst open = /*#__PURE__*/notImplemented(\"fs.open\");\nconst opendir = /*#__PURE__*/notImplemented(\"fs.opendir\");\nconst rename = /*#__PURE__*/notImplemented(\"fs.rename\");\nconst truncate = /*#__PURE__*/notImplemented(\"fs.truncate\");\nconst rm = /*#__PURE__*/notImplemented(\"fs.rm\");\nconst rmdir = /*#__PURE__*/notImplemented(\"fs.rmdir\");\nconst mkdir = /*#__PURE__*/notImplemented(\"fs.mkdir\");\nconst readdir = /*#__PURE__*/notImplemented(\"fs.readdir\");\nconst readlink = /*#__PURE__*/notImplemented(\"fs.readlink\");\nconst symlink = /*#__PURE__*/notImplemented(\"fs.symlink\");\nconst lstat = /*#__PURE__*/notImplemented(\"fs.lstat\");\nconst stat = /*#__PURE__*/notImplemented(\"fs.stat\");\nconst link = /*#__PURE__*/notImplemented(\"fs.link\");\nconst unlink = /*#__PURE__*/notImplemented(\"fs.unlink\");\nconst chmod = /*#__PURE__*/notImplemented(\"fs.chmod\");\nconst lchmod = /*#__PURE__*/notImplemented(\"fs.lchmod\");\nconst lchown = /*#__PURE__*/notImplemented(\"fs.lchown\");\nconst chown = /*#__PURE__*/notImplemented(\"fs.chown\");\nconst utimes = /*#__PURE__*/notImplemented(\"fs.utimes\");\nconst lutimes = /*#__PURE__*/notImplemented(\"fs.lutimes\");\nconst realpath = /*#__PURE__*/notImplemented(\"fs.realpath\");\nconst mkdtemp = /*#__PURE__*/notImplemented(\"fs.mkdtemp\");\nconst writeFile$1 = /*#__PURE__*/notImplemented(\"fs.writeFile\");\nconst appendFile = /*#__PURE__*/notImplemented(\"fs.appendFile\");\nconst readFile$1 = /*#__PURE__*/notImplemented(\"fs.readFile\");\n/*#__PURE__*/notImplemented(\"fs.watch\");\nconst statfs = /*#__PURE__*/notImplemented(\"fs.statfs\");\nfunction notImplementedAsync(name) {\n  const fn = notImplemented(name);\n  fn.__promisify__ = () => notImplemented(name + \".__promisify__\");\n  fn.native = fn;\n  return fn;\n}\nfunction callbackify(fn) {\n  const fnc = function (...args) {\n    const cb = args.pop();\n    fn().catch(error => cb(error)).then(val => cb(void 0, val));\n  };\n  fnc.__promisify__ = fn;\n  fnc.native = fnc;\n  return fnc;\n}\n/*#__PURE__*/callbackify(access);\n/*#__PURE__*/callbackify(appendFile);\n/*#__PURE__*/callbackify(chown);\n/*#__PURE__*/callbackify(chmod);\n/*#__PURE__*/callbackify(copyFile);\n/*#__PURE__*/callbackify(cp);\n/*#__PURE__*/callbackify(lchown);\n/*#__PURE__*/callbackify(lchmod);\n/*#__PURE__*/callbackify(link);\n/*#__PURE__*/callbackify(lstat);\n/*#__PURE__*/callbackify(lutimes);\n/*#__PURE__*/callbackify(mkdir);\n/*#__PURE__*/callbackify(mkdtemp);\n/*#__PURE__*/callbackify(realpath);\n/*#__PURE__*/callbackify(open);\n/*#__PURE__*/callbackify(opendir);\n/*#__PURE__*/callbackify(readdir);\nconst readFile = /*#__PURE__*/callbackify(readFile$1);\n/*#__PURE__*/callbackify(readlink);\n/*#__PURE__*/callbackify(rename);\n/*#__PURE__*/callbackify(rm);\n/*#__PURE__*/callbackify(rmdir);\n/*#__PURE__*/callbackify(stat);\n/*#__PURE__*/callbackify(symlink);\n/*#__PURE__*/callbackify(truncate);\n/*#__PURE__*/callbackify(unlink);\n/*#__PURE__*/callbackify(utimes);\nconst writeFile = /*#__PURE__*/callbackify(writeFile$1);\n/*#__PURE__*/callbackify(statfs);\n/*#__PURE__*/notImplementedAsync(\"fs.close\");\n/*#__PURE__*/notImplementedAsync(\"fs.createReadStream\");\n/*#__PURE__*/notImplementedAsync(\"fs.createWriteStream\");\n/*#__PURE__*/notImplementedAsync(\"fs.exists\");\n/*#__PURE__*/notImplementedAsync(\"fs.fchown\");\n/*#__PURE__*/notImplementedAsync(\"fs.fchmod\");\n/*#__PURE__*/notImplementedAsync(\"fs.fdatasync\");\n/*#__PURE__*/notImplementedAsync(\"fs.fstat\");\n/*#__PURE__*/notImplementedAsync(\"fs.fsync\");\n/*#__PURE__*/notImplementedAsync(\"fs.ftruncate\");\n/*#__PURE__*/notImplementedAsync(\"fs.futimes\");\n/*#__PURE__*/notImplementedAsync(\"fs.lstatSync\");\n/*#__PURE__*/notImplementedAsync(\"fs.read\");\n/*#__PURE__*/notImplementedAsync(\"fs.readv\");\n/*#__PURE__*/notImplementedAsync(\"fs.realpathSync\");\n/*#__PURE__*/notImplementedAsync(\"fs.statSync\");\n/*#__PURE__*/notImplementedAsync(\"fs.unwatchFile\");\n/*#__PURE__*/notImplementedAsync(\"fs.watch\");\n/*#__PURE__*/notImplementedAsync(\"fs.watchFile\");\n/*#__PURE__*/notImplementedAsync(\"fs.write\");\n/*#__PURE__*/notImplementedAsync(\"fs.writev\");\n/*#__PURE__*/notImplementedAsync(\"fs._toUnixTimestamp\");\n/*#__PURE__*/notImplementedAsync(\"fs.openAsBlob\");\n/*#__PURE__*/notImplemented(\"fs.appendFileSync\");\n/*#__PURE__*/notImplemented(\"fs.accessSync\");\n/*#__PURE__*/notImplemented(\"fs.chownSync\");\n/*#__PURE__*/notImplemented(\"fs.chmodSync\");\n/*#__PURE__*/notImplemented(\"fs.closeSync\");\n/*#__PURE__*/notImplemented(\"fs.copyFileSync\");\n/*#__PURE__*/notImplemented(\"fs.cpSync\");\n/*#__PURE__*/notImplemented(\"fs.fchownSync\");\n/*#__PURE__*/notImplemented(\"fs.fchmodSync\");\n/*#__PURE__*/notImplemented(\"fs.fdatasyncSync\");\n/*#__PURE__*/notImplemented(\"fs.fstatSync\");\n/*#__PURE__*/notImplemented(\"fs.fsyncSync\");\n/*#__PURE__*/notImplemented(\"fs.ftruncateSync\");\n/*#__PURE__*/notImplemented(\"fs.futimesSync\");\n/*#__PURE__*/notImplemented(\"fs.lchownSync\");\n/*#__PURE__*/notImplemented(\"fs.lchmodSync\");\n/*#__PURE__*/notImplemented(\"fs.linkSync\");\n/*#__PURE__*/notImplemented(\"fs.lutimesSync\");\n/*#__PURE__*/notImplemented(\"fs.mkdirSync\");\n/*#__PURE__*/notImplemented(\"fs.mkdtempSync\");\n/*#__PURE__*/notImplemented(\"fs.openSync\");\n/*#__PURE__*/notImplemented(\"fs.opendirSync\");\n/*#__PURE__*/notImplemented(\"fs.readdirSync\");\n/*#__PURE__*/notImplemented(\"fs.readSync\");\n/*#__PURE__*/notImplemented(\"fs.readvSync\");\n/*#__PURE__*/notImplemented(\"fs.readFileSync\");\n/*#__PURE__*/notImplemented(\"fs.readlinkSync\");\n/*#__PURE__*/notImplemented(\"fs.renameSync\");\n/*#__PURE__*/notImplemented(\"fs.rmSync\");\n/*#__PURE__*/notImplemented(\"fs.rmdirSync\");\n/*#__PURE__*/notImplemented(\"fs.symlinkSync\");\n/*#__PURE__*/notImplemented(\"fs.truncateSync\");\n/*#__PURE__*/notImplemented(\"fs.unlinkSync\");\n/*#__PURE__*/notImplemented(\"fs.utimesSync\");\n/*#__PURE__*/notImplemented(\"fs.writeFileSync\");\n/*#__PURE__*/notImplemented(\"fs.writeSync\");\n/*#__PURE__*/notImplemented(\"fs.writevSync\");\n/*#__PURE__*/notImplemented(\"fs.statfsSync\");\nconst _DRIVE_LETTER_START_RE = /^[A-Za-z]:\\//;\nfunction normalizeWindowsPath(input = \"\") {\n  if (!input) {\n    return input;\n  }\n  return input.replace(/\\\\/g, \"/\").replace(_DRIVE_LETTER_START_RE, r => r.toUpperCase());\n}\nconst _UNC_REGEX = /^[/\\\\]{2}/;\nconst _IS_ABSOLUTE_RE = /^[/\\\\](?![/\\\\])|^[/\\\\]{2}(?!\\.)|^[A-Za-z]:[/\\\\]/;\nconst _DRIVE_LETTER_RE = /^[A-Za-z]:$/;\nconst _ROOT_FOLDER_RE = /^\\/([A-Za-z]:)?$/;\nconst sep = \"/\";\nconst delimiter = \":\";\nconst normalize = function (path) {\n  if (path.length === 0) {\n    return \".\";\n  }\n  path = normalizeWindowsPath(path);\n  const isUNCPath = path.match(_UNC_REGEX);\n  const isPathAbsolute = isAbsolute(path);\n  const trailingSeparator = path[path.length - 1] === \"/\";\n  path = normalizeString(path, !isPathAbsolute);\n  if (path.length === 0) {\n    if (isPathAbsolute) {\n      return \"/\";\n    }\n    return trailingSeparator ? \"./\" : \".\";\n  }\n  if (trailingSeparator) {\n    path += \"/\";\n  }\n  if (_DRIVE_LETTER_RE.test(path)) {\n    path += \"/\";\n  }\n  if (isUNCPath) {\n    if (!isPathAbsolute) {\n      return `//./${path}`;\n    }\n    return `//${path}`;\n  }\n  return isPathAbsolute && !isAbsolute(path) ? `/${path}` : path;\n};\nconst join = function (...arguments_) {\n  if (arguments_.length === 0) {\n    return \".\";\n  }\n  let joined;\n  for (const argument of arguments_) {\n    if (argument && argument.length > 0) {\n      if (joined === void 0) {\n        joined = argument;\n      } else {\n        joined += `/${argument}`;\n      }\n    }\n  }\n  if (joined === void 0) {\n    return \".\";\n  }\n  return normalize(joined.replace(/\\/\\/+/g, \"/\"));\n};\nfunction cwd() {\n  if (typeof process !== \"undefined\" && typeof process.cwd === \"function\") {\n    return process.cwd().replace(/\\\\/g, \"/\");\n  }\n  return \"/\";\n}\nconst resolve = function (...arguments_) {\n  arguments_ = arguments_.map(argument => normalizeWindowsPath(argument));\n  let resolvedPath = \"\";\n  let resolvedAbsolute = false;\n  for (let index = arguments_.length - 1; index >= -1 && !resolvedAbsolute; index--) {\n    const path = index >= 0 ? arguments_[index] : cwd();\n    if (!path || path.length === 0) {\n      continue;\n    }\n    resolvedPath = `${path}/${resolvedPath}`;\n    resolvedAbsolute = isAbsolute(path);\n  }\n  resolvedPath = normalizeString(resolvedPath, !resolvedAbsolute);\n  if (resolvedAbsolute && !isAbsolute(resolvedPath)) {\n    return `/${resolvedPath}`;\n  }\n  return resolvedPath.length > 0 ? resolvedPath : \".\";\n};\nfunction normalizeString(path, allowAboveRoot) {\n  let res = \"\";\n  let lastSegmentLength = 0;\n  let lastSlash = -1;\n  let dots = 0;\n  let char = null;\n  for (let index = 0; index <= path.length; ++index) {\n    if (index < path.length) {\n      char = path[index];\n    } else if (char === \"/\") {\n      break;\n    } else {\n      char = \"/\";\n    }\n    if (char === \"/\") {\n      if (lastSlash === index - 1 || dots === 1) ;else if (dots === 2) {\n        if (res.length < 2 || lastSegmentLength !== 2 || res[res.length - 1] !== \".\" || res[res.length - 2] !== \".\") {\n          if (res.length > 2) {\n            const lastSlashIndex = res.lastIndexOf(\"/\");\n            if (lastSlashIndex === -1) {\n              res = \"\";\n              lastSegmentLength = 0;\n            } else {\n              res = res.slice(0, lastSlashIndex);\n              lastSegmentLength = res.length - 1 - res.lastIndexOf(\"/\");\n            }\n            lastSlash = index;\n            dots = 0;\n            continue;\n          } else if (res.length > 0) {\n            res = \"\";\n            lastSegmentLength = 0;\n            lastSlash = index;\n            dots = 0;\n            continue;\n          }\n        }\n        if (allowAboveRoot) {\n          res += res.length > 0 ? \"/..\" : \"..\";\n          lastSegmentLength = 2;\n        }\n      } else {\n        if (res.length > 0) {\n          res += `/${path.slice(lastSlash + 1, index)}`;\n        } else {\n          res = path.slice(lastSlash + 1, index);\n        }\n        lastSegmentLength = index - lastSlash - 1;\n      }\n      lastSlash = index;\n      dots = 0;\n    } else if (char === \".\" && dots !== -1) {\n      ++dots;\n    } else {\n      dots = -1;\n    }\n  }\n  return res;\n}\nconst isAbsolute = function (p) {\n  return _IS_ABSOLUTE_RE.test(p);\n};\nconst toNamespacedPath = function (p) {\n  return normalizeWindowsPath(p);\n};\nconst _EXTNAME_RE = /.(\\.[^./]+)$/;\nconst extname = function (p) {\n  const match = _EXTNAME_RE.exec(normalizeWindowsPath(p));\n  return match && match[1] || \"\";\n};\nconst relative = function (from, to) {\n  const _from = resolve(from).replace(_ROOT_FOLDER_RE, \"$1\").split(\"/\");\n  const _to = resolve(to).replace(_ROOT_FOLDER_RE, \"$1\").split(\"/\");\n  if (_to[0][1] === \":\" && _from[0][1] === \":\" && _from[0] !== _to[0]) {\n    return _to.join(\"/\");\n  }\n  const _fromCopy = [..._from];\n  for (const segment of _fromCopy) {\n    if (_to[0] !== segment) {\n      break;\n    }\n    _from.shift();\n    _to.shift();\n  }\n  return [..._from.map(() => \"..\"), ..._to].join(\"/\");\n};\nconst dirname = function (p) {\n  const segments = normalizeWindowsPath(p).replace(/\\/$/, \"\").split(\"/\").slice(0, -1);\n  if (segments.length === 1 && _DRIVE_LETTER_RE.test(segments[0])) {\n    segments[0] += \"/\";\n  }\n  return segments.join(\"/\") || (isAbsolute(p) ? \"/\" : \".\");\n};\nconst format = function (p) {\n  const segments = [p.root, p.dir, p.base ?? p.name + p.ext].filter(Boolean);\n  return normalizeWindowsPath(p.root ? resolve(...segments) : segments.join(\"/\"));\n};\nconst basename = function (p, extension) {\n  const lastSegment = normalizeWindowsPath(p).split(\"/\").pop();\n  return extension && lastSegment.endsWith(extension) ? lastSegment.slice(0, -extension.length) : lastSegment;\n};\nconst parse$3 = function (p) {\n  const root = normalizeWindowsPath(p).split(\"/\").shift() || \"/\";\n  const base = basename(p);\n  const extension = extname(base);\n  return {\n    root,\n    dir: dirname(p),\n    base,\n    ext: extension,\n    name: base.slice(0, base.length - extension.length)\n  };\n};\nconst path = {\n  __proto__: null,\n  basename: basename,\n  delimiter: delimiter,\n  dirname: dirname,\n  extname: extname,\n  format: format,\n  isAbsolute: isAbsolute,\n  join: join,\n  normalize: normalize,\n  normalizeString: normalizeString,\n  parse: parse$3,\n  relative: relative,\n  resolve: resolve,\n  sep: sep,\n  toNamespacedPath: toNamespacedPath\n};\nvar _path = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  basename: basename,\n  default: path,\n  delimiter: delimiter,\n  dirname: dirname,\n  extname: extname,\n  format: format,\n  isAbsolute: isAbsolute,\n  join: join,\n  normalize: normalize,\n  normalizeString: normalizeString,\n  parse: parse$3,\n  relative: relative,\n  resolve: resolve,\n  sep: sep,\n  toNamespacedPath: toNamespacedPath\n});\nconst _pathModule = {\n  ..._path,\n  platform: \"posix\",\n  posix: void 0,\n  win32: void 0\n};\n_pathModule.posix = _pathModule;\n_pathModule.win32 = _pathModule;\nfunction getDefaultExportFromCjs(x) {\n  return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;\n}\nfunction getAugmentedNamespace(n) {\n  if (Object.prototype.hasOwnProperty.call(n, '__esModule')) return n;\n  var f = n.default;\n  if (typeof f == \"function\") {\n    var a = function a() {\n      var isInstance = false;\n      try {\n        isInstance = this instanceof a;\n      } catch {}\n      if (isInstance) {\n        return Reflect.construct(f, arguments, this.constructor);\n      }\n      return f.apply(this, arguments);\n    };\n    a.prototype = f.prototype;\n  } else a = {};\n  Object.defineProperty(a, '__esModule', {\n    value: true\n  });\n  Object.keys(n).forEach(function (k) {\n    var d = Object.getOwnPropertyDescriptor(n, k);\n    Object.defineProperty(a, k, d.get ? d : {\n      enumerable: true,\n      get: function () {\n        return n[k];\n      }\n    });\n  });\n  return a;\n}\nvar picocolors_browser = {\n  exports: {}\n};\nvar hasRequiredPicocolors_browser;\nfunction requirePicocolors_browser() {\n  if (hasRequiredPicocolors_browser) return picocolors_browser.exports;\n  hasRequiredPicocolors_browser = 1;\n  var x = String;\n  var create = function () {\n    return {\n      isColorSupported: false,\n      reset: x,\n      bold: x,\n      dim: x,\n      italic: x,\n      underline: x,\n      inverse: x,\n      hidden: x,\n      strikethrough: x,\n      black: x,\n      red: x,\n      green: x,\n      yellow: x,\n      blue: x,\n      magenta: x,\n      cyan: x,\n      white: x,\n      gray: x,\n      bgBlack: x,\n      bgRed: x,\n      bgGreen: x,\n      bgYellow: x,\n      bgBlue: x,\n      bgMagenta: x,\n      bgCyan: x,\n      bgWhite: x,\n      blackBright: x,\n      redBright: x,\n      greenBright: x,\n      yellowBright: x,\n      blueBright: x,\n      magentaBright: x,\n      cyanBright: x,\n      whiteBright: x,\n      bgBlackBright: x,\n      bgRedBright: x,\n      bgGreenBright: x,\n      bgYellowBright: x,\n      bgBlueBright: x,\n      bgMagentaBright: x,\n      bgCyanBright: x,\n      bgWhiteBright: x\n    };\n  };\n  picocolors_browser.exports = create();\n  picocolors_browser.exports.createColors = create;\n  return picocolors_browser.exports;\n}\nvar _nodeResolve_empty = {};\nvar _nodeResolve_empty$1 = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  default: _nodeResolve_empty\n});\nvar require$$2 = /*@__PURE__*/getAugmentedNamespace(_nodeResolve_empty$1);\nvar cssSyntaxError;\nvar hasRequiredCssSyntaxError;\nfunction requireCssSyntaxError() {\n  if (hasRequiredCssSyntaxError) return cssSyntaxError;\n  hasRequiredCssSyntaxError = 1;\n  let pico = /*@__PURE__*/requirePicocolors_browser();\n  let terminalHighlight = require$$2;\n  class CssSyntaxError extends Error {\n    constructor(message, line, column, source, file, plugin) {\n      super(message);\n      this.name = 'CssSyntaxError';\n      this.reason = message;\n      if (file) {\n        this.file = file;\n      }\n      if (source) {\n        this.source = source;\n      }\n      if (plugin) {\n        this.plugin = plugin;\n      }\n      if (typeof line !== 'undefined' && typeof column !== 'undefined') {\n        if (typeof line === 'number') {\n          this.line = line;\n          this.column = column;\n        } else {\n          this.line = line.line;\n          this.column = line.column;\n          this.endLine = column.line;\n          this.endColumn = column.column;\n        }\n      }\n      this.setMessage();\n      if (Error.captureStackTrace) {\n        Error.captureStackTrace(this, CssSyntaxError);\n      }\n    }\n    setMessage() {\n      this.message = this.plugin ? this.plugin + ': ' : '';\n      this.message += this.file ? this.file : '<css input>';\n      if (typeof this.line !== 'undefined') {\n        this.message += ':' + this.line + ':' + this.column;\n      }\n      this.message += ': ' + this.reason;\n    }\n    showSourceCode(color) {\n      if (!this.source) return '';\n      let css = this.source;\n      if (color == null) color = pico.isColorSupported;\n      let aside = text => text;\n      let mark = text => text;\n      let highlight = text => text;\n      if (color) {\n        let {\n          bold,\n          gray,\n          red\n        } = pico.createColors(true);\n        mark = text => bold(red(text));\n        aside = text => gray(text);\n        if (terminalHighlight) {\n          highlight = text => terminalHighlight(text);\n        }\n      }\n      let lines = css.split(/\\r?\\n/);\n      let start = Math.max(this.line - 3, 0);\n      let end = Math.min(this.line + 2, lines.length);\n      let maxWidth = String(end).length;\n      return lines.slice(start, end).map((line, index) => {\n        let number = start + 1 + index;\n        let gutter = ' ' + (' ' + number).slice(-maxWidth) + ' | ';\n        if (number === this.line) {\n          if (line.length > 160) {\n            let padding = 20;\n            let subLineStart = Math.max(0, this.column - padding);\n            let subLineEnd = Math.max(this.column + padding, this.endColumn + padding);\n            let subLine = line.slice(subLineStart, subLineEnd);\n            let spacing = aside(gutter.replace(/\\d/g, ' ')) + line.slice(0, Math.min(this.column - 1, padding - 1)).replace(/[^\\t]/g, ' ');\n            return mark('>') + aside(gutter) + highlight(subLine) + '\\n ' + spacing + mark('^');\n          }\n          let spacing = aside(gutter.replace(/\\d/g, ' ')) + line.slice(0, this.column - 1).replace(/[^\\t]/g, ' ');\n          return mark('>') + aside(gutter) + highlight(line) + '\\n ' + spacing + mark('^');\n        }\n        return ' ' + aside(gutter) + highlight(line);\n      }).join('\\n');\n    }\n    toString() {\n      let code = this.showSourceCode();\n      if (code) {\n        code = '\\n\\n' + code + '\\n';\n      }\n      return this.name + ': ' + this.message + code;\n    }\n  }\n  cssSyntaxError = CssSyntaxError;\n  CssSyntaxError.default = CssSyntaxError;\n  return cssSyntaxError;\n}\nvar stringifier;\nvar hasRequiredStringifier;\nfunction requireStringifier() {\n  if (hasRequiredStringifier) return stringifier;\n  hasRequiredStringifier = 1;\n\n  // Escapes sequences that could break out of an HTML <style> context.\n  // Uses CSS unicode escaping (\\3c = '<') which is valid CSS and parsed\n  // correctly by all compliant CSS consumers.\n  const STYLE_TAG = /(<)(\\/?style\\b)/gi;\n  const COMMENT_OPEN = /(<)(!--)/g;\n  function escapeHTMLInCSS(str) {\n    if (typeof str !== 'string') return str;\n    if (!str.includes('<')) return str;\n    return str.replace(STYLE_TAG, '\\\\3c $2').replace(COMMENT_OPEN, '\\\\3c $2');\n  }\n  const DEFAULT_RAW = {\n    after: '\\n',\n    beforeClose: '\\n',\n    beforeComment: '\\n',\n    beforeDecl: '\\n',\n    beforeOpen: ' ',\n    beforeRule: '\\n',\n    colon: ': ',\n    commentLeft: ' ',\n    commentRight: ' ',\n    emptyBody: '',\n    indent: '    ',\n    semicolon: false\n  };\n  function capitalize(str) {\n    return str[0].toUpperCase() + str.slice(1);\n  }\n  class Stringifier {\n    constructor(builder) {\n      this.builder = builder;\n    }\n    atrule(node, semicolon) {\n      let raws = node.raws;\n      let name = '@' + node.name;\n      let params = node.params ? this.rawValue(node, 'params') : '';\n      if (typeof raws.afterName !== 'undefined') {\n        name += raws.afterName;\n      } else if (params) {\n        name += ' ';\n      }\n      if (node.nodes) {\n        this.block(node, name + params);\n      } else {\n        let end = (raws.between || '') + (semicolon ? ';' : '');\n        this.builder(escapeHTMLInCSS(name + params + end), node);\n      }\n    }\n    beforeAfter(node, detect) {\n      let value;\n      if (node.type === 'decl') {\n        value = this.raw(node, null, 'beforeDecl');\n      } else if (node.type === 'comment') {\n        value = this.raw(node, null, 'beforeComment');\n      } else if (detect === 'before') {\n        value = this.raw(node, null, 'beforeRule');\n      } else {\n        value = this.raw(node, null, 'beforeClose');\n      }\n      let buf = node.parent;\n      let depth = 0;\n      while (buf && buf.type !== 'root') {\n        depth += 1;\n        buf = buf.parent;\n      }\n      if (value.includes('\\n')) {\n        let indent = this.raw(node, null, 'indent');\n        if (indent.length) {\n          for (let step = 0; step < depth; step++) value += indent;\n        }\n      }\n      return value;\n    }\n    block(node, start) {\n      let raws = node.raws;\n      let between = typeof raws.between !== 'undefined' ? raws.between : this.raw(node, 'between', 'beforeOpen');\n      this.builder(escapeHTMLInCSS(start + between) + '{', node, 'start');\n      let after;\n      if (node.nodes && node.nodes.length) {\n        this.body(node);\n        after = typeof raws.after !== 'undefined' ? raws.after : this.raw(node, 'after');\n      } else {\n        after = typeof raws.after !== 'undefined' ? raws.after : this.raw(node, 'after', 'emptyBody');\n      }\n      if (after) this.builder(escapeHTMLInCSS(after));\n      this.builder('}', node, 'end');\n    }\n    body(node) {\n      let nodes = node.nodes;\n      let last = nodes.length - 1;\n      while (last > 0) {\n        if (nodes[last].type !== 'comment') break;\n        last -= 1;\n      }\n      let semicolon = this.raw(node, 'semicolon');\n      let isDocument = node.type === 'document';\n      for (let i = 0; i < nodes.length; i++) {\n        let child = nodes[i];\n        let before = child.raws.before;\n        if (typeof before === 'undefined') {\n          before = this.raw(child, 'before');\n        }\n        if (before) this.builder(isDocument ? before : escapeHTMLInCSS(before));\n        this.stringify(child, last !== i || semicolon);\n      }\n    }\n    comment(node) {\n      let raws = node.raws;\n      let left = typeof raws.left !== 'undefined' ? raws.left : this.raw(node, 'left', 'commentLeft');\n      let right = typeof raws.right !== 'undefined' ? raws.right : this.raw(node, 'right', 'commentRight');\n      this.builder(escapeHTMLInCSS('/*' + left + node.text + right + '*/'), node);\n    }\n    decl(node, semicolon) {\n      let raws = node.raws;\n      let between = typeof raws.between !== 'undefined' ? raws.between : this.raw(node, 'between', 'colon');\n      let rawVal = raws.value;\n      let value = rawVal && rawVal.value === node.value ? rawVal.raw : node.value;\n      let string = node.prop + between + value;\n      if (node.important) {\n        string += raws.important || ' !important';\n      }\n      if (semicolon) string += ';';\n      this.builder(escapeHTMLInCSS(string), node);\n    }\n    document(node) {\n      this.body(node);\n    }\n    raw(node, own, detect) {\n      let value;\n      if (!detect) detect = own;\n\n      // Already had\n      if (own) {\n        value = node.raws[own];\n        if (typeof value !== 'undefined') return value;\n      }\n      let parent = node.parent;\n      if (detect === 'before') {\n        // Hack for first rule in CSS\n        if (!parent || parent.type === 'root' && parent.first === node) {\n          return '';\n        }\n\n        // `root` nodes in `document` should use only their own raws\n        if (parent && parent.type === 'document') {\n          return '';\n        }\n      }\n\n      // Floating child without parent\n      if (!parent) return DEFAULT_RAW[detect];\n\n      // Detect style by other nodes\n      let root = node.root();\n      let cache = root.rawCache || (root.rawCache = {});\n      if (typeof cache[detect] !== 'undefined') {\n        return cache[detect];\n      }\n      if (detect === 'before' || detect === 'after') {\n        return this.beforeAfter(node, detect);\n      } else {\n        let method = 'raw' + capitalize(detect);\n        if (this[method]) {\n          value = this[method](root, node);\n        } else {\n          root.walk(i => {\n            value = i.raws[own];\n            if (typeof value !== 'undefined') return false;\n          });\n        }\n      }\n      if (typeof value === 'undefined') value = DEFAULT_RAW[detect];\n      cache[detect] = value;\n      return value;\n    }\n    rawBeforeClose(root) {\n      let value;\n      root.walk(i => {\n        if (i.nodes && i.nodes.length > 0) {\n          if (typeof i.raws.after !== 'undefined') {\n            value = i.raws.after;\n            if (value.includes('\\n')) {\n              value = value.replace(/[^\\n]+$/, '');\n            }\n            return false;\n          }\n        }\n      });\n      if (value) value = value.replace(/\\S/g, '');\n      return value;\n    }\n    rawBeforeComment(root, node) {\n      let value;\n      root.walkComments(i => {\n        if (typeof i.raws.before !== 'undefined') {\n          value = i.raws.before;\n          if (value.includes('\\n')) {\n            value = value.replace(/[^\\n]+$/, '');\n          }\n          return false;\n        }\n      });\n      if (typeof value === 'undefined') {\n        value = this.raw(node, null, 'beforeDecl');\n      } else if (value) {\n        value = value.replace(/\\S/g, '');\n      }\n      return value;\n    }\n    rawBeforeDecl(root, node) {\n      let value;\n      root.walkDecls(i => {\n        if (typeof i.raws.before !== 'undefined') {\n          value = i.raws.before;\n          if (value.includes('\\n')) {\n            value = value.replace(/[^\\n]+$/, '');\n          }\n          return false;\n        }\n      });\n      if (typeof value === 'undefined') {\n        value = this.raw(node, null, 'beforeRule');\n      } else if (value) {\n        value = value.replace(/\\S/g, '');\n      }\n      return value;\n    }\n    rawBeforeOpen(root) {\n      let value;\n      root.walk(i => {\n        if (i.type !== 'decl') {\n          value = i.raws.between;\n          if (typeof value !== 'undefined') return false;\n        }\n      });\n      return value;\n    }\n    rawBeforeRule(root) {\n      let value;\n      root.walk(i => {\n        if (i.nodes && (i.parent !== root || root.first !== i)) {\n          if (typeof i.raws.before !== 'undefined') {\n            value = i.raws.before;\n            if (value.includes('\\n')) {\n              value = value.replace(/[^\\n]+$/, '');\n            }\n            return false;\n          }\n        }\n      });\n      if (value) value = value.replace(/\\S/g, '');\n      return value;\n    }\n    rawColon(root) {\n      let value;\n      root.walkDecls(i => {\n        if (typeof i.raws.between !== 'undefined') {\n          value = i.raws.between.replace(/[^\\s:]/g, '');\n          return false;\n        }\n      });\n      return value;\n    }\n    rawEmptyBody(root) {\n      let value;\n      root.walk(i => {\n        if (i.nodes && i.nodes.length === 0) {\n          value = i.raws.after;\n          if (typeof value !== 'undefined') return false;\n        }\n      });\n      return value;\n    }\n    rawIndent(root) {\n      if (root.raws.indent) return root.raws.indent;\n      let value;\n      root.walk(i => {\n        let p = i.parent;\n        if (p && p !== root && p.parent && p.parent === root) {\n          if (typeof i.raws.before !== 'undefined') {\n            let parts = i.raws.before.split('\\n');\n            value = parts[parts.length - 1];\n            value = value.replace(/\\S/g, '');\n            return false;\n          }\n        }\n      });\n      return value;\n    }\n    rawSemicolon(root) {\n      let value;\n      root.walk(i => {\n        if (i.nodes && i.nodes.length && i.last.type === 'decl') {\n          value = i.raws.semicolon;\n          if (typeof value !== 'undefined') return false;\n        }\n      });\n      return value;\n    }\n    rawValue(node, prop) {\n      let value = node[prop];\n      let raw = node.raws[prop];\n      if (raw && raw.value === value) {\n        return raw.raw;\n      }\n      return value;\n    }\n    root(node) {\n      this.body(node);\n      if (node.raws.after) {\n        let after = node.raws.after;\n        let isDocument = node.parent && node.parent.type === 'document';\n        this.builder(isDocument ? after : escapeHTMLInCSS(after));\n      }\n    }\n    rule(node) {\n      this.block(node, this.rawValue(node, 'selector'));\n      if (node.raws.ownSemicolon) {\n        this.builder(escapeHTMLInCSS(node.raws.ownSemicolon), node, 'end');\n      }\n    }\n    stringify(node, semicolon) {\n      /* c8 ignore start */\n      if (!this[node.type]) {\n        throw new Error('Unknown AST node type ' + node.type + '. ' + 'Maybe you need to change PostCSS stringifier.');\n      }\n      /* c8 ignore stop */\n      this[node.type](node, semicolon);\n    }\n  }\n  stringifier = Stringifier;\n  Stringifier.default = Stringifier;\n  return stringifier;\n}\nvar stringify_1;\nvar hasRequiredStringify;\nfunction requireStringify() {\n  if (hasRequiredStringify) return stringify_1;\n  hasRequiredStringify = 1;\n  let Stringifier = requireStringifier();\n  function stringify(node, builder) {\n    let str = new Stringifier(builder);\n    str.stringify(node);\n  }\n  stringify_1 = stringify;\n  stringify.default = stringify;\n  return stringify_1;\n}\nvar symbols = {};\nvar hasRequiredSymbols;\nfunction requireSymbols() {\n  if (hasRequiredSymbols) return symbols;\n  hasRequiredSymbols = 1;\n  symbols.isClean = Symbol('isClean');\n  symbols.my = Symbol('my');\n  return symbols;\n}\nvar node;\nvar hasRequiredNode$1;\nfunction requireNode$1() {\n  if (hasRequiredNode$1) return node;\n  hasRequiredNode$1 = 1;\n  let CssSyntaxError = requireCssSyntaxError();\n  let Stringifier = requireStringifier();\n  let stringify = requireStringify();\n  let {\n    isClean,\n    my\n  } = requireSymbols();\n  function cloneNode(obj, parent) {\n    let cloned = new obj.constructor();\n    for (let i in obj) {\n      if (!Object.prototype.hasOwnProperty.call(obj, i)) {\n        /* c8 ignore next 2 */\n        continue;\n      }\n      if (i === 'proxyCache') continue;\n      let value = obj[i];\n      let type = typeof value;\n      if (i === 'parent' && type === 'object') {\n        if (parent) cloned[i] = parent;\n      } else if (i === 'source') {\n        cloned[i] = value;\n      } else if (Array.isArray(value)) {\n        cloned[i] = value.map(j => cloneNode(j, cloned));\n      } else {\n        if (type === 'object' && value !== null) value = cloneNode(value);\n        cloned[i] = value;\n      }\n    }\n    return cloned;\n  }\n  function sourceOffset(inputCSS, position) {\n    // Not all custom syntaxes support `offset` in `source.start` and `source.end`\n    if (position && typeof position.offset !== 'undefined') {\n      return position.offset;\n    }\n    let column = 1;\n    let line = 1;\n    let offset = 0;\n    for (let i = 0; i < inputCSS.length; i++) {\n      if (line === position.line && column === position.column) {\n        offset = i;\n        break;\n      }\n      if (inputCSS[i] === '\\n') {\n        column = 1;\n        line += 1;\n      } else {\n        column += 1;\n      }\n    }\n    return offset;\n  }\n  class Node {\n    get proxyOf() {\n      return this;\n    }\n    constructor(defaults = {}) {\n      this.raws = {};\n      this[isClean] = false;\n      this[my] = true;\n      for (let name in defaults) {\n        if (name === 'nodes') {\n          this.nodes = [];\n          for (let node of defaults[name]) {\n            if (typeof node.clone === 'function') {\n              this.append(node.clone());\n            } else {\n              this.append(node);\n            }\n          }\n        } else {\n          this[name] = defaults[name];\n        }\n      }\n    }\n    addToError(error) {\n      error.postcssNode = this;\n      if (error.stack && this.source && /\\n\\s{4}at /.test(error.stack)) {\n        let s = this.source;\n        error.stack = error.stack.replace(/\\n\\s{4}at /, `$&${s.input.from}:${s.start.line}:${s.start.column}$&`);\n      }\n      return error;\n    }\n    after(add) {\n      this.parent.insertAfter(this, add);\n      return this;\n    }\n    assign(overrides = {}) {\n      for (let name in overrides) {\n        this[name] = overrides[name];\n      }\n      return this;\n    }\n    before(add) {\n      this.parent.insertBefore(this, add);\n      return this;\n    }\n    cleanRaws(keepBetween) {\n      delete this.raws.before;\n      delete this.raws.after;\n      if (!keepBetween) delete this.raws.between;\n    }\n    clone(overrides = {}) {\n      let cloned = cloneNode(this);\n      for (let name in overrides) {\n        cloned[name] = overrides[name];\n      }\n      return cloned;\n    }\n    cloneAfter(overrides = {}) {\n      let cloned = this.clone(overrides);\n      this.parent.insertAfter(this, cloned);\n      return cloned;\n    }\n    cloneBefore(overrides = {}) {\n      let cloned = this.clone(overrides);\n      this.parent.insertBefore(this, cloned);\n      return cloned;\n    }\n    error(message, opts = {}) {\n      if (this.source) {\n        let {\n          end,\n          start\n        } = this.rangeBy(opts);\n        return this.source.input.error(message, {\n          column: start.column,\n          line: start.line\n        }, {\n          column: end.column,\n          line: end.line\n        }, opts);\n      }\n      return new CssSyntaxError(message);\n    }\n    getProxyProcessor() {\n      return {\n        get(node, prop) {\n          if (prop === 'proxyOf') {\n            return node;\n          } else if (prop === 'root') {\n            return () => node.root().toProxy();\n          } else {\n            return node[prop];\n          }\n        },\n        set(node, prop, value) {\n          if (node[prop] === value) return true;\n          node[prop] = value;\n          if (prop === 'prop' || prop === 'value' || prop === 'name' || prop === 'params' || prop === 'important' || /* c8 ignore next */\n          prop === 'text') {\n            node.markDirty();\n          }\n          return true;\n        }\n      };\n    }\n\n    /* c8 ignore next 3 */\n    markClean() {\n      this[isClean] = true;\n    }\n    markDirty() {\n      if (this[isClean]) {\n        this[isClean] = false;\n        let next = this;\n        while (next = next.parent) {\n          next[isClean] = false;\n        }\n      }\n    }\n    next() {\n      if (!this.parent) return undefined;\n      let index = this.parent.index(this);\n      return this.parent.nodes[index + 1];\n    }\n    positionBy(opts = {}) {\n      let pos = this.source.start;\n      if (opts.index) {\n        pos = this.positionInside(opts.index);\n      } else if (opts.word) {\n        let inputString = 'document' in this.source.input ? this.source.input.document : this.source.input.css;\n        let stringRepresentation = inputString.slice(sourceOffset(inputString, this.source.start), sourceOffset(inputString, this.source.end));\n        let index = stringRepresentation.indexOf(opts.word);\n        if (index !== -1) pos = this.positionInside(index);\n      }\n      return pos;\n    }\n    positionInside(index) {\n      let column = this.source.start.column;\n      let line = this.source.start.line;\n      let inputString = 'document' in this.source.input ? this.source.input.document : this.source.input.css;\n      let offset = sourceOffset(inputString, this.source.start);\n      let end = offset + index;\n      for (let i = offset; i < end; i++) {\n        if (inputString[i] === '\\n') {\n          column = 1;\n          line += 1;\n        } else {\n          column += 1;\n        }\n      }\n      return {\n        column,\n        line,\n        offset: end\n      };\n    }\n    prev() {\n      if (!this.parent) return undefined;\n      let index = this.parent.index(this);\n      return this.parent.nodes[index - 1];\n    }\n    rangeBy(opts = {}) {\n      let inputString = 'document' in this.source.input ? this.source.input.document : this.source.input.css;\n      let start = {\n        column: this.source.start.column,\n        line: this.source.start.line,\n        offset: sourceOffset(inputString, this.source.start)\n      };\n      let end = this.source.end ? {\n        column: this.source.end.column + 1,\n        line: this.source.end.line,\n        offset: typeof this.source.end.offset === 'number' ?\n        // `source.end.offset` is exclusive, so we don't need to add 1\n        this.source.end.offset :\n        // Since line/column in this.source.end is inclusive,\n        // the `sourceOffset(... , this.source.end)` returns an inclusive offset.\n        // So, we add 1 to convert it to exclusive.\n        sourceOffset(inputString, this.source.end) + 1\n      } : {\n        column: start.column + 1,\n        line: start.line,\n        offset: start.offset + 1\n      };\n      if (opts.word) {\n        let stringRepresentation = inputString.slice(sourceOffset(inputString, this.source.start), sourceOffset(inputString, this.source.end));\n        let index = stringRepresentation.indexOf(opts.word);\n        if (index !== -1) {\n          start = this.positionInside(index);\n          end = this.positionInside(index + opts.word.length);\n        }\n      } else {\n        if (opts.start) {\n          start = {\n            column: opts.start.column,\n            line: opts.start.line,\n            offset: sourceOffset(inputString, opts.start)\n          };\n        } else if (opts.index) {\n          start = this.positionInside(opts.index);\n        }\n        if (opts.end) {\n          end = {\n            column: opts.end.column,\n            line: opts.end.line,\n            offset: sourceOffset(inputString, opts.end)\n          };\n        } else if (typeof opts.endIndex === 'number') {\n          end = this.positionInside(opts.endIndex);\n        } else if (opts.index) {\n          end = this.positionInside(opts.index + 1);\n        }\n      }\n      if (end.line < start.line || end.line === start.line && end.column <= start.column) {\n        end = {\n          column: start.column + 1,\n          line: start.line,\n          offset: start.offset + 1\n        };\n      }\n      return {\n        end,\n        start\n      };\n    }\n    raw(prop, defaultType) {\n      let str = new Stringifier();\n      return str.raw(this, prop, defaultType);\n    }\n    remove() {\n      if (this.parent) {\n        this.parent.removeChild(this);\n      }\n      this.parent = undefined;\n      return this;\n    }\n    replaceWith(...nodes) {\n      if (this.parent) {\n        let bookmark = this;\n        let foundSelf = false;\n        for (let node of nodes) {\n          if (node === this) {\n            foundSelf = true;\n          } else if (foundSelf) {\n            this.parent.insertAfter(bookmark, node);\n            bookmark = node;\n          } else {\n            this.parent.insertBefore(bookmark, node);\n          }\n        }\n        if (!foundSelf) {\n          this.remove();\n        }\n      }\n      return this;\n    }\n    root() {\n      let result = this;\n      while (result.parent && result.parent.type !== 'document') {\n        result = result.parent;\n      }\n      return result;\n    }\n    toJSON(_, inputs) {\n      let fixed = {};\n      let emitInputs = inputs == null;\n      inputs = inputs || new Map();\n      let inputsNextIndex = 0;\n      for (let name in this) {\n        if (!Object.prototype.hasOwnProperty.call(this, name)) {\n          /* c8 ignore next 2 */\n          continue;\n        }\n        if (name === 'parent' || name === 'proxyCache') continue;\n        let value = this[name];\n        if (Array.isArray(value)) {\n          fixed[name] = value.map(i => {\n            if (typeof i === 'object' && i.toJSON) {\n              return i.toJSON(null, inputs);\n            } else {\n              return i;\n            }\n          });\n        } else if (typeof value === 'object' && value.toJSON) {\n          fixed[name] = value.toJSON(null, inputs);\n        } else if (name === 'source') {\n          if (value == null) continue;\n          let inputId = inputs.get(value.input);\n          if (inputId == null) {\n            inputId = inputsNextIndex;\n            inputs.set(value.input, inputsNextIndex);\n            inputsNextIndex++;\n          }\n          fixed[name] = {\n            end: value.end,\n            inputId,\n            start: value.start\n          };\n        } else {\n          fixed[name] = value;\n        }\n      }\n      if (emitInputs) {\n        fixed.inputs = [...inputs.keys()].map(input => input.toJSON());\n      }\n      return fixed;\n    }\n    toProxy() {\n      if (!this.proxyCache) {\n        this.proxyCache = new Proxy(this, this.getProxyProcessor());\n      }\n      return this.proxyCache;\n    }\n    toString(stringifier = stringify) {\n      if (stringifier.stringify) stringifier = stringifier.stringify;\n      let result = '';\n      stringifier(this, i => {\n        result += i;\n      });\n      return result;\n    }\n    warn(result, text, opts = {}) {\n      let data = {\n        node: this\n      };\n      for (let i in opts) data[i] = opts[i];\n      return result.warn(text, data);\n    }\n  }\n  node = Node;\n  Node.default = Node;\n  return node;\n}\nvar comment;\nvar hasRequiredComment;\nfunction requireComment() {\n  if (hasRequiredComment) return comment;\n  hasRequiredComment = 1;\n  let Node = requireNode$1();\n  class Comment extends Node {\n    constructor(defaults) {\n      super(defaults);\n      this.type = 'comment';\n    }\n  }\n  comment = Comment;\n  Comment.default = Comment;\n  return comment;\n}\nvar declaration;\nvar hasRequiredDeclaration;\nfunction requireDeclaration() {\n  if (hasRequiredDeclaration) return declaration;\n  hasRequiredDeclaration = 1;\n  let Node = requireNode$1();\n  class Declaration extends Node {\n    get variable() {\n      return this.prop.startsWith('--') || this.prop[0] === '$';\n    }\n    constructor(defaults) {\n      if (defaults && typeof defaults.value !== 'undefined' && typeof defaults.value !== 'string') {\n        defaults = {\n          ...defaults,\n          value: String(defaults.value)\n        };\n      }\n      super(defaults);\n      this.type = 'decl';\n    }\n  }\n  declaration = Declaration;\n  Declaration.default = Declaration;\n  return declaration;\n}\nvar container;\nvar hasRequiredContainer$1;\nfunction requireContainer$1() {\n  if (hasRequiredContainer$1) return container;\n  hasRequiredContainer$1 = 1;\n  let Comment = requireComment();\n  let Declaration = requireDeclaration();\n  let Node = requireNode$1();\n  let {\n    isClean,\n    my\n  } = requireSymbols();\n  let AtRule, parse, Root, Rule;\n  function cleanSource(nodes) {\n    return nodes.map(i => {\n      if (i.nodes) i.nodes = cleanSource(i.nodes);\n      delete i.source;\n      return i;\n    });\n  }\n  function markTreeDirty(node) {\n    node[isClean] = false;\n    if (node.proxyOf.nodes) {\n      for (let i of node.proxyOf.nodes) {\n        markTreeDirty(i);\n      }\n    }\n  }\n  let Container = /*#__PURE__*/(() => {\n    class Container extends Node {\n      get first() {\n        if (!this.proxyOf.nodes) return undefined;\n        return this.proxyOf.nodes[0];\n      }\n      get last() {\n        if (!this.proxyOf.nodes) return undefined;\n        return this.proxyOf.nodes[this.proxyOf.nodes.length - 1];\n      }\n      append(...children) {\n        for (let child of children) {\n          let nodes = this.normalize(child, this.last);\n          for (let node of nodes) this.proxyOf.nodes.push(node);\n        }\n        this.markDirty();\n        return this;\n      }\n      cleanRaws(keepBetween) {\n        super.cleanRaws(keepBetween);\n        if (this.nodes) {\n          for (let node of this.nodes) node.cleanRaws(keepBetween);\n        }\n      }\n      each(callback) {\n        if (!this.proxyOf.nodes) return undefined;\n        let iterator = this.getIterator();\n        let index, result;\n        while (this.indexes[iterator] < this.proxyOf.nodes.length) {\n          index = this.indexes[iterator];\n          result = callback(this.proxyOf.nodes[index], index);\n          if (result === false) break;\n          this.indexes[iterator] += 1;\n        }\n        delete this.indexes[iterator];\n        return result;\n      }\n      every(condition) {\n        return this.nodes.every(condition);\n      }\n      getIterator() {\n        if (!this.lastEach) this.lastEach = 0;\n        if (!this.indexes) this.indexes = {};\n        this.lastEach += 1;\n        let iterator = this.lastEach;\n        this.indexes[iterator] = 0;\n        return iterator;\n      }\n      getProxyProcessor() {\n        return {\n          get(node, prop) {\n            if (prop === 'proxyOf') {\n              return node;\n            } else if (!node[prop]) {\n              return node[prop];\n            } else if (prop === 'each' || typeof prop === 'string' && prop.startsWith('walk')) {\n              return (...args) => {\n                return node[prop](...args.map(i => {\n                  if (typeof i === 'function') {\n                    return (child, index) => i(child.toProxy(), index);\n                  } else {\n                    return i;\n                  }\n                }));\n              };\n            } else if (prop === 'every' || prop === 'some') {\n              return cb => {\n                return node[prop]((child, ...other) => cb(child.toProxy(), ...other));\n              };\n            } else if (prop === 'root') {\n              return () => node.root().toProxy();\n            } else if (prop === 'nodes') {\n              return node.nodes.map(i => i.toProxy());\n            } else if (prop === 'first' || prop === 'last') {\n              return node[prop].toProxy();\n            } else {\n              return node[prop];\n            }\n          },\n          set(node, prop, value) {\n            if (node[prop] === value) return true;\n            node[prop] = value;\n            if (prop === 'name' || prop === 'params' || prop === 'selector') {\n              node.markDirty();\n            }\n            return true;\n          }\n        };\n      }\n      index(child) {\n        if (typeof child === 'number') return child;\n        if (child.proxyOf) child = child.proxyOf;\n        return this.proxyOf.nodes.indexOf(child);\n      }\n      insertAfter(exist, add) {\n        let existIndex = this.index(exist);\n        let nodes = this.normalize(add, this.proxyOf.nodes[existIndex]).reverse();\n        existIndex = this.index(exist);\n        for (let node of nodes) this.proxyOf.nodes.splice(existIndex + 1, 0, node);\n        let index;\n        for (let id in this.indexes) {\n          index = this.indexes[id];\n          if (existIndex < index) {\n            this.indexes[id] = index + nodes.length;\n          }\n        }\n        this.markDirty();\n        return this;\n      }\n      insertBefore(exist, add) {\n        let existIndex = this.index(exist);\n        let type = existIndex === 0 ? 'prepend' : false;\n        let nodes = this.normalize(add, this.proxyOf.nodes[existIndex], type).reverse();\n        existIndex = this.index(exist);\n        for (let node of nodes) this.proxyOf.nodes.splice(existIndex, 0, node);\n        let index;\n        for (let id in this.indexes) {\n          index = this.indexes[id];\n          if (existIndex <= index) {\n            this.indexes[id] = index + nodes.length;\n          }\n        }\n        this.markDirty();\n        return this;\n      }\n      normalize(nodes, sample) {\n        if (typeof nodes === 'string') {\n          nodes = cleanSource(parse(nodes).nodes);\n        } else if (typeof nodes === 'undefined') {\n          nodes = [];\n        } else if (Array.isArray(nodes)) {\n          nodes = nodes.slice(0);\n          for (let i of nodes) {\n            if (i.parent) i.parent.removeChild(i, 'ignore');\n          }\n        } else if (nodes.type === 'root' && this.type !== 'document') {\n          nodes = nodes.nodes.slice(0);\n          for (let i of nodes) {\n            if (i.parent) i.parent.removeChild(i, 'ignore');\n          }\n        } else if (nodes.type) {\n          nodes = [nodes];\n        } else if (nodes.prop) {\n          if (typeof nodes.value === 'undefined') {\n            throw new Error('Value field is missed in node creation');\n          } else if (typeof nodes.value !== 'string') {\n            nodes.value = String(nodes.value);\n          }\n          nodes = [new Declaration(nodes)];\n        } else if (nodes.selector || nodes.selectors) {\n          nodes = [new Rule(nodes)];\n        } else if (nodes.name) {\n          nodes = [new AtRule(nodes)];\n        } else if (nodes.text) {\n          nodes = [new Comment(nodes)];\n        } else {\n          throw new Error('Unknown node type in node creation');\n        }\n        let processed = nodes.map(i => {\n          /* c8 ignore next */\n          if (!i[my]) Container.rebuild(i);\n          i = i.proxyOf;\n          if (i.parent) i.parent.removeChild(i);\n          if (i[isClean]) markTreeDirty(i);\n          if (!i.raws) i.raws = {};\n          if (typeof i.raws.before === 'undefined') {\n            if (sample && typeof sample.raws.before !== 'undefined') {\n              i.raws.before = sample.raws.before.replace(/\\S/g, '');\n            }\n          }\n          i.parent = this.proxyOf;\n          return i;\n        });\n        return processed;\n      }\n      prepend(...children) {\n        children = children.reverse();\n        for (let child of children) {\n          let nodes = this.normalize(child, this.first, 'prepend').reverse();\n          for (let node of nodes) this.proxyOf.nodes.unshift(node);\n          for (let id in this.indexes) {\n            this.indexes[id] = this.indexes[id] + nodes.length;\n          }\n        }\n        this.markDirty();\n        return this;\n      }\n      push(child) {\n        child.parent = this;\n        this.proxyOf.nodes.push(child);\n        return this;\n      }\n      removeAll() {\n        for (let node of this.proxyOf.nodes) node.parent = undefined;\n        this.proxyOf.nodes = [];\n        this.markDirty();\n        return this;\n      }\n      removeChild(child) {\n        child = this.index(child);\n        this.proxyOf.nodes[child].parent = undefined;\n        this.proxyOf.nodes.splice(child, 1);\n        let index;\n        for (let id in this.indexes) {\n          index = this.indexes[id];\n          if (index >= child) {\n            this.indexes[id] = index - 1;\n          }\n        }\n        this.markDirty();\n        return this;\n      }\n      replaceValues(pattern, opts, callback) {\n        if (!callback) {\n          callback = opts;\n          opts = {};\n        }\n        this.walkDecls(decl => {\n          if (opts.props && !opts.props.includes(decl.prop)) return;\n          if (opts.fast && !decl.value.includes(opts.fast)) return;\n          decl.value = decl.value.replace(pattern, callback);\n        });\n        this.markDirty();\n        return this;\n      }\n      some(condition) {\n        return this.nodes.some(condition);\n      }\n      walk(callback) {\n        return this.each((child, i) => {\n          let result;\n          try {\n            result = callback(child, i);\n          } catch (e) {\n            throw child.addToError(e);\n          }\n          if (result !== false && child.walk) {\n            result = child.walk(callback);\n          }\n          return result;\n        });\n      }\n      walkAtRules(name, callback) {\n        if (!callback) {\n          callback = name;\n          return this.walk((child, i) => {\n            if (child.type === 'atrule') {\n              return callback(child, i);\n            }\n          });\n        }\n        if (name instanceof RegExp) {\n          return this.walk((child, i) => {\n            if (child.type === 'atrule' && name.test(child.name)) {\n              return callback(child, i);\n            }\n          });\n        }\n        return this.walk((child, i) => {\n          if (child.type === 'atrule' && child.name === name) {\n            return callback(child, i);\n          }\n        });\n      }\n      walkComments(callback) {\n        return this.walk((child, i) => {\n          if (child.type === 'comment') {\n            return callback(child, i);\n          }\n        });\n      }\n      walkDecls(prop, callback) {\n        if (!callback) {\n          callback = prop;\n          return this.walk((child, i) => {\n            if (child.type === 'decl') {\n              return callback(child, i);\n            }\n          });\n        }\n        if (prop instanceof RegExp) {\n          return this.walk((child, i) => {\n            if (child.type === 'decl' && prop.test(child.prop)) {\n              return callback(child, i);\n            }\n          });\n        }\n        return this.walk((child, i) => {\n          if (child.type === 'decl' && child.prop === prop) {\n            return callback(child, i);\n          }\n        });\n      }\n      walkRules(selector, callback) {\n        if (!callback) {\n          callback = selector;\n          return this.walk((child, i) => {\n            if (child.type === 'rule') {\n              return callback(child, i);\n            }\n          });\n        }\n        if (selector instanceof RegExp) {\n          return this.walk((child, i) => {\n            if (child.type === 'rule' && selector.test(child.selector)) {\n              return callback(child, i);\n            }\n          });\n        }\n        return this.walk((child, i) => {\n          if (child.type === 'rule' && child.selector === selector) {\n            return callback(child, i);\n          }\n        });\n      }\n    }\n    Container.registerParse = dependant => {\n      parse = dependant;\n    };\n    Container.registerRule = dependant => {\n      Rule = dependant;\n    };\n    Container.registerAtRule = dependant => {\n      AtRule = dependant;\n    };\n    Container.registerRoot = dependant => {\n      Root = dependant;\n    };\n    return Container;\n  })();\n  container = Container;\n  Container.default = Container;\n\n  /* c8 ignore start */\n  Container.rebuild = node => {\n    if (node.type === 'atrule') {\n      Object.setPrototypeOf(node, AtRule.prototype);\n    } else if (node.type === 'rule') {\n      Object.setPrototypeOf(node, Rule.prototype);\n    } else if (node.type === 'decl') {\n      Object.setPrototypeOf(node, Declaration.prototype);\n    } else if (node.type === 'comment') {\n      Object.setPrototypeOf(node, Comment.prototype);\n    } else if (node.type === 'root') {\n      Object.setPrototypeOf(node, Root.prototype);\n    }\n    node[my] = true;\n    if (node.nodes) {\n      node.nodes.forEach(child => {\n        Container.rebuild(child);\n      });\n    }\n  };\n  /* c8 ignore stop */\n  return container;\n}\nvar atRule;\nvar hasRequiredAtRule;\nfunction requireAtRule() {\n  if (hasRequiredAtRule) return atRule;\n  hasRequiredAtRule = 1;\n  let Container = requireContainer$1();\n  class AtRule extends Container {\n    constructor(defaults) {\n      super(defaults);\n      this.type = 'atrule';\n    }\n    append(...children) {\n      if (!this.proxyOf.nodes) this.nodes = [];\n      return super.append(...children);\n    }\n    prepend(...children) {\n      if (!this.proxyOf.nodes) this.nodes = [];\n      return super.prepend(...children);\n    }\n  }\n  atRule = AtRule;\n  AtRule.default = AtRule;\n  Container.registerAtRule(AtRule);\n  return atRule;\n}\nvar document;\nvar hasRequiredDocument;\nfunction requireDocument() {\n  if (hasRequiredDocument) return document;\n  hasRequiredDocument = 1;\n  let Container = requireContainer$1();\n  let LazyResult, Processor;\n  let Document = /*#__PURE__*/(() => {\n    class Document extends Container {\n      constructor(defaults) {\n        // type needs to be passed to super, otherwise child roots won't be normalized correctly\n        super({\n          type: 'document',\n          ...defaults\n        });\n        if (!this.nodes) {\n          this.nodes = [];\n        }\n      }\n      toResult(opts = {}) {\n        let lazy = new LazyResult(new Processor(), this, opts);\n        return lazy.stringify();\n      }\n    }\n    Document.registerLazyResult = dependant => {\n      LazyResult = dependant;\n    };\n    Document.registerProcessor = dependant => {\n      Processor = dependant;\n    };\n    return Document;\n  })();\n  document = Document;\n  Document.default = Document;\n  return document;\n}\nvar nonSecure;\nvar hasRequiredNonSecure;\nfunction requireNonSecure() {\n  if (hasRequiredNonSecure) return nonSecure;\n  hasRequiredNonSecure = 1;\n  // This alphabet uses `A-Za-z0-9_-` symbols.\n  // The order of characters is optimized for better gzip and brotli compression.\n  // References to the same file (works both for gzip and brotli):\n  // `'use`, `andom`, and `rict'`\n  // References to the brotli default dictionary:\n  // `-26T`, `1983`, `40px`, `75px`, `bush`, `jack`, `mind`, `very`, and `wolf`\n  let urlAlphabet = 'useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict';\n  let customAlphabet = (alphabet, defaultSize = 21) => {\n    return (size = defaultSize) => {\n      let id = '';\n      // A compact alternative for `for (var i = 0; i < step; i++)`.\n      let i = size | 0;\n      while (i--) {\n        // `| 0` is more compact and faster than `Math.floor()`.\n        id += alphabet[Math.random() * alphabet.length | 0];\n      }\n      return id;\n    };\n  };\n  let nanoid = (size = 21) => {\n    let id = '';\n    // A compact alternative for `for (var i = 0; i < step; i++)`.\n    let i = size | 0;\n    while (i--) {\n      // `| 0` is more compact and faster than `Math.floor()`.\n      id += urlAlphabet[Math.random() * 64 | 0];\n    }\n    return id;\n  };\n  nonSecure = {\n    nanoid,\n    customAlphabet\n  };\n  return nonSecure;\n}\nvar previousMap;\nvar hasRequiredPreviousMap;\nfunction requirePreviousMap() {\n  if (hasRequiredPreviousMap) return previousMap;\n  hasRequiredPreviousMap = 1;\n  let {\n    existsSync,\n    readFileSync\n  } = require$$2;\n  let {\n    dirname,\n    join\n  } = require$$2;\n  let {\n    SourceMapConsumer,\n    SourceMapGenerator\n  } = require$$2;\n  function fromBase64(str) {\n    if (Buffer) {\n      return Buffer.from(str, 'base64').toString();\n    } else {\n      /* c8 ignore next 2 */\n      return window.atob(str);\n    }\n  }\n  class PreviousMap {\n    constructor(css, opts) {\n      if (opts.map === false) return;\n      if (opts.unsafeMap) this.unsafeMap = true;\n      this.loadAnnotation(css);\n      this.inline = this.startWith(this.annotation, 'data:');\n      let prev = opts.map ? opts.map.prev : undefined;\n      let text = this.loadMap(opts.from, prev);\n      if (!this.mapFile && opts.from) {\n        this.mapFile = opts.from;\n      }\n      if (this.mapFile) this.root = dirname(this.mapFile);\n      if (text) this.text = text;\n    }\n    consumer() {\n      if (!this.consumerCache) {\n        this.consumerCache = new SourceMapConsumer(this.json || this.text);\n      }\n      return this.consumerCache;\n    }\n    decodeInline(text) {\n      let baseCharsetUri = /^data:application\\/json;charset=utf-?8;base64,/;\n      let baseUri = /^data:application\\/json;base64,/;\n      let charsetUri = /^data:application\\/json;charset=utf-?8,/;\n      let uri = /^data:application\\/json,/;\n      let uriMatch = text.match(charsetUri) || text.match(uri);\n      if (uriMatch) {\n        return decodeURIComponent(text.substr(uriMatch[0].length));\n      }\n      let baseUriMatch = text.match(baseCharsetUri) || text.match(baseUri);\n      if (baseUriMatch) {\n        return fromBase64(text.substr(baseUriMatch[0].length));\n      }\n      let encoding = text.slice('data:application/json;'.length);\n      encoding = encoding.slice(0, encoding.indexOf(','));\n      throw new Error('Unsupported source map encoding ' + encoding);\n    }\n    getAnnotationURL(sourceMapString) {\n      return sourceMapString.replace(/^\\/\\*\\s*# sourceMappingURL=/, '').trim();\n    }\n    isMap(map) {\n      if (typeof map !== 'object') return false;\n      return typeof map.mappings === 'string' || typeof map._mappings === 'string' || Array.isArray(map.sections);\n    }\n    loadAnnotation(css) {\n      let comments = css.match(/\\/\\*\\s*# sourceMappingURL=/g);\n      if (!comments) return;\n\n      // sourceMappingURLs from comments, strings, etc.\n      let start = css.lastIndexOf(comments.pop());\n      let end = css.indexOf('*/', start);\n      if (start > -1 && end > -1) {\n        // Locate the last sourceMappingURL to avoid pickin\n        this.annotation = this.getAnnotationURL(css.substring(start, end));\n      }\n    }\n    loadFile(path, cssFile, trusted) {\n      /* c8 ignore next 5 */\n      if (!trusted && !this.unsafeMap) {\n        if (!/\\.map$/i.test(path)) {\n          return undefined;\n        }\n      }\n      this.root = dirname(path);\n      if (existsSync(path)) {\n        this.mapFile = path;\n        return readFileSync(path, 'utf-8').toString().trim();\n      }\n    }\n    loadMap(file, prev) {\n      if (prev === false) return false;\n      if (prev) {\n        if (typeof prev === 'string') {\n          return prev;\n        } else if (typeof prev === 'function') {\n          let prevPath = prev(file);\n          if (prevPath) {\n            let map = this.loadFile(prevPath, file, true);\n            if (!map) {\n              throw new Error('Unable to load previous source map: ' + prevPath.toString());\n            }\n            return map;\n          }\n        } else if (prev instanceof SourceMapConsumer) {\n          return SourceMapGenerator.fromSourceMap(prev).toString();\n        } else if (prev instanceof SourceMapGenerator) {\n          return prev.toString();\n        } else if (this.isMap(prev)) {\n          return JSON.stringify(prev);\n        } else {\n          throw new Error('Unsupported previous source map format: ' + prev.toString());\n        }\n      } else if (this.inline) {\n        return this.decodeInline(this.annotation);\n      } else if (this.annotation) {\n        let map = this.annotation;\n        if (file) map = join(dirname(file), map);\n        let unknown = this.loadFile(map, file, false);\n        if (unknown) {\n          try {\n            /* c8 ignore next 4 */\n            this.json = JSON.parse(unknown.replace(/^\\)]}'[^\\n]*\\n/, ''));\n          } catch {\n            return undefined;\n          }\n        }\n        return unknown;\n      }\n    }\n    startWith(string, start) {\n      if (!string) return false;\n      return string.substr(0, start.length) === start;\n    }\n    withContent() {\n      return !!(this.consumer().sourcesContent && this.consumer().sourcesContent.length > 0);\n    }\n  }\n  previousMap = PreviousMap;\n  PreviousMap.default = PreviousMap;\n  return previousMap;\n}\nvar input;\nvar hasRequiredInput;\nfunction requireInput() {\n  if (hasRequiredInput) return input;\n  hasRequiredInput = 1;\n  let {\n    nanoid\n  } = /*@__PURE__*/requireNonSecure();\n  let {\n    isAbsolute,\n    resolve\n  } = require$$2;\n  let {\n    SourceMapConsumer,\n    SourceMapGenerator\n  } = require$$2;\n  let {\n    fileURLToPath,\n    pathToFileURL\n  } = require$$2;\n  let CssSyntaxError = requireCssSyntaxError();\n  let PreviousMap = requirePreviousMap();\n  let terminalHighlight = require$$2;\n  let lineToIndexCache = Symbol('lineToIndexCache');\n  let sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator);\n  let pathAvailable = Boolean(resolve && isAbsolute);\n  function getLineToIndex(input) {\n    if (input[lineToIndexCache]) return input[lineToIndexCache];\n    let lines = input.css.split('\\n');\n    let lineToIndex = new Array(lines.length);\n    let prevIndex = 0;\n    for (let i = 0, l = lines.length; i < l; i++) {\n      lineToIndex[i] = prevIndex;\n      prevIndex += lines[i].length + 1;\n    }\n    input[lineToIndexCache] = lineToIndex;\n    return lineToIndex;\n  }\n  class Input {\n    get from() {\n      return this.file || this.id;\n    }\n    constructor(css, opts = {}) {\n      if (css === null || typeof css === 'undefined' || typeof css === 'object' && !css.toString) {\n        throw new Error(`PostCSS received ${css} instead of CSS string`);\n      }\n      this.css = css.toString();\n      if (this.css[0] === '\\uFEFF' || this.css[0] === '\\uFFFE') {\n        this.hasBOM = true;\n        this.css = this.css.slice(1);\n      } else {\n        this.hasBOM = false;\n      }\n      this.document = this.css;\n      if (opts.document) this.document = opts.document.toString();\n      if (opts.from) {\n        if (!pathAvailable || /^\\w+:\\/\\//.test(opts.from) || isAbsolute(opts.from)) {\n          this.file = opts.from;\n        } else {\n          this.file = resolve(opts.from);\n        }\n      }\n      if (pathAvailable && sourceMapAvailable) {\n        let map = new PreviousMap(this.css, opts);\n        if (map.text) {\n          this.map = map;\n          let file = map.consumer().file;\n          if (!this.file && file) this.file = this.mapResolve(file);\n        }\n      }\n      if (!this.file) {\n        this.id = '<input css ' + nanoid(6) + '>';\n      }\n      if (this.map) this.map.file = this.from;\n    }\n    error(message, line, column, opts = {}) {\n      let endColumn, endLine, endOffset, offset, result;\n      if (line && typeof line === 'object') {\n        let start = line;\n        let end = column;\n        if (typeof start.offset === 'number') {\n          offset = start.offset;\n          let pos = this.fromOffset(offset);\n          line = pos.line;\n          column = pos.col;\n        } else {\n          line = start.line;\n          column = start.column;\n          offset = this.fromLineAndColumn(line, column);\n        }\n        if (typeof end.offset === 'number') {\n          endOffset = end.offset;\n          let pos = this.fromOffset(endOffset);\n          endLine = pos.line;\n          endColumn = pos.col;\n        } else {\n          endLine = end.line;\n          endColumn = end.column;\n          endOffset = this.fromLineAndColumn(end.line, end.column);\n        }\n      } else if (!column) {\n        offset = line;\n        let pos = this.fromOffset(offset);\n        line = pos.line;\n        column = pos.col;\n      } else {\n        offset = this.fromLineAndColumn(line, column);\n      }\n      let origin = this.origin(line, column, endLine, endColumn);\n      if (origin) {\n        result = new CssSyntaxError(message, origin.endLine === undefined ? origin.line : {\n          column: origin.column,\n          line: origin.line\n        }, origin.endLine === undefined ? origin.column : {\n          column: origin.endColumn,\n          line: origin.endLine\n        }, origin.source, origin.file, opts.plugin);\n      } else {\n        result = new CssSyntaxError(message, endLine === undefined ? line : {\n          column,\n          line\n        }, endLine === undefined ? column : {\n          column: endColumn,\n          line: endLine\n        }, this.css, this.file, opts.plugin);\n      }\n      result.input = {\n        column,\n        endColumn,\n        endLine,\n        endOffset,\n        line,\n        offset,\n        source: this.css\n      };\n      if (this.file) {\n        if (pathToFileURL) {\n          result.input.url = pathToFileURL(this.file).toString();\n        }\n        result.input.file = this.file;\n      }\n      return result;\n    }\n    fromLineAndColumn(line, column) {\n      let lineToIndex = getLineToIndex(this);\n      let index = lineToIndex[line - 1];\n      return index + column - 1;\n    }\n    fromOffset(offset) {\n      let lineToIndex = getLineToIndex(this);\n      let lastLine = lineToIndex[lineToIndex.length - 1];\n      let min = 0;\n      if (offset >= lastLine) {\n        min = lineToIndex.length - 1;\n      } else {\n        let max = lineToIndex.length - 2;\n        let mid;\n        while (min < max) {\n          mid = min + (max - min >> 1);\n          if (offset < lineToIndex[mid]) {\n            max = mid - 1;\n          } else if (offset >= lineToIndex[mid + 1]) {\n            min = mid + 1;\n          } else {\n            min = mid;\n            break;\n          }\n        }\n      }\n      return {\n        col: offset - lineToIndex[min] + 1,\n        line: min + 1\n      };\n    }\n    mapResolve(file) {\n      if (/^\\w+:\\/\\//.test(file)) {\n        return file;\n      }\n      return resolve(this.map.consumer().sourceRoot || this.map.root || '.', file);\n    }\n    origin(line, column, endLine, endColumn) {\n      if (!this.map) return false;\n      let consumer = this.map.consumer();\n      let from = consumer.originalPositionFor({\n        column,\n        line\n      });\n      if (!from.source) return false;\n      let to;\n      if (typeof endLine === 'number') {\n        to = consumer.originalPositionFor({\n          column: endColumn,\n          line: endLine\n        });\n      }\n      let fromUrl;\n      if (isAbsolute(from.source)) {\n        fromUrl = pathToFileURL(from.source);\n      } else {\n        fromUrl = new URL(from.source, this.map.consumer().sourceRoot || pathToFileURL(this.map.mapFile));\n      }\n      let result = {\n        column: from.column,\n        endColumn: to && to.column,\n        endLine: to && to.line,\n        line: from.line,\n        url: fromUrl.toString()\n      };\n      if (fromUrl.protocol === 'file:') {\n        if (fileURLToPath) {\n          result.file = fileURLToPath(fromUrl);\n        } else {\n          /* c8 ignore next 2 */\n          throw new Error(`file: protocol is not available in this PostCSS build`);\n        }\n      }\n      let source = consumer.sourceContentFor(from.source);\n      if (source) result.source = source;\n      return result;\n    }\n    toJSON() {\n      let json = {};\n      for (let name of ['hasBOM', 'css', 'file', 'id']) {\n        if (this[name] != null) {\n          json[name] = this[name];\n        }\n      }\n      if (this.map) {\n        json.map = {\n          ...this.map\n        };\n        if (json.map.consumerCache) {\n          json.map.consumerCache = undefined;\n        }\n      }\n      return json;\n    }\n  }\n  input = Input;\n  Input.default = Input;\n  if (terminalHighlight && terminalHighlight.registerInput) {\n    terminalHighlight.registerInput(Input);\n  }\n  return input;\n}\nvar root;\nvar hasRequiredRoot;\nfunction requireRoot() {\n  if (hasRequiredRoot) return root;\n  hasRequiredRoot = 1;\n  let Container = requireContainer$1();\n  let LazyResult, Processor;\n  let Root = /*#__PURE__*/(() => {\n    class Root extends Container {\n      constructor(defaults) {\n        super(defaults);\n        this.type = 'root';\n        if (!this.nodes) this.nodes = [];\n      }\n      normalize(child, sample, type) {\n        let nodes = super.normalize(child);\n        if (sample) {\n          if (type === 'prepend') {\n            if (this.nodes.length > 1) {\n              sample.raws.before = this.nodes[1].raws.before;\n            } else {\n              delete sample.raws.before;\n            }\n          } else if (this.first !== sample) {\n            for (let node of nodes) {\n              node.raws.before = sample.raws.before;\n            }\n          }\n        }\n        return nodes;\n      }\n      removeChild(child, ignore) {\n        let index = this.index(child);\n        if (!ignore && index === 0 && this.nodes.length > 1) {\n          this.nodes[1].raws.before = this.nodes[index].raws.before;\n        }\n        return super.removeChild(child);\n      }\n      toResult(opts = {}) {\n        let lazy = new LazyResult(new Processor(), this, opts);\n        return lazy.stringify();\n      }\n    }\n    Root.registerLazyResult = dependant => {\n      LazyResult = dependant;\n    };\n    Root.registerProcessor = dependant => {\n      Processor = dependant;\n    };\n    return Root;\n  })();\n  root = Root;\n  Root.default = Root;\n  Container.registerRoot(Root);\n  return root;\n}\nvar list_1;\nvar hasRequiredList;\nfunction requireList() {\n  if (hasRequiredList) return list_1;\n  hasRequiredList = 1;\n  let list = {\n    comma(string) {\n      return list.split(string, [','], true);\n    },\n    space(string) {\n      let spaces = [' ', '\\n', '\\t'];\n      return list.split(string, spaces);\n    },\n    split(string, separators, last) {\n      let array = [];\n      let current = '';\n      let split = false;\n      let func = 0;\n      let inQuote = false;\n      let prevQuote = '';\n      let escape = false;\n      for (let letter of string) {\n        if (escape) {\n          escape = false;\n        } else if (letter === '\\\\') {\n          escape = true;\n        } else if (inQuote) {\n          if (letter === prevQuote) {\n            inQuote = false;\n          }\n        } else if (letter === '\"' || letter === \"'\") {\n          inQuote = true;\n          prevQuote = letter;\n        } else if (letter === '(') {\n          func += 1;\n        } else if (letter === ')') {\n          if (func > 0) func -= 1;\n        } else if (func === 0) {\n          if (separators.includes(letter)) split = true;\n        }\n        if (split) {\n          if (current !== '') array.push(current.trim());\n          current = '';\n          split = false;\n        } else {\n          current += letter;\n        }\n      }\n      if (last || current !== '') array.push(current.trim());\n      return array;\n    }\n  };\n  list_1 = list;\n  list.default = list;\n  return list_1;\n}\nvar rule;\nvar hasRequiredRule;\nfunction requireRule() {\n  if (hasRequiredRule) return rule;\n  hasRequiredRule = 1;\n  let Container = requireContainer$1();\n  let list = requireList();\n  class Rule extends Container {\n    get selectors() {\n      return list.comma(this.selector);\n    }\n    set selectors(values) {\n      let match = this.selector ? this.selector.match(/,\\s*/) : null;\n      let sep = match ? match[0] : ',' + this.raw('between', 'beforeOpen');\n      this.selector = values.join(sep);\n    }\n    constructor(defaults) {\n      super(defaults);\n      this.type = 'rule';\n      if (!this.nodes) this.nodes = [];\n    }\n  }\n  rule = Rule;\n  Rule.default = Rule;\n  Container.registerRule(Rule);\n  return rule;\n}\nvar fromJSON_1;\nvar hasRequiredFromJSON;\nfunction requireFromJSON() {\n  if (hasRequiredFromJSON) return fromJSON_1;\n  hasRequiredFromJSON = 1;\n  let AtRule = requireAtRule();\n  let Comment = requireComment();\n  let Declaration = requireDeclaration();\n  let Input = requireInput();\n  let PreviousMap = requirePreviousMap();\n  let Root = requireRoot();\n  let Rule = requireRule();\n  function fromJSON(json, inputs) {\n    if (Array.isArray(json)) return json.map(n => fromJSON(n));\n    let {\n      inputs: ownInputs,\n      ...defaults\n    } = json;\n    if (ownInputs) {\n      inputs = [];\n      for (let input of ownInputs) {\n        let inputHydrated = {\n          ...input,\n          __proto__: Input.prototype\n        };\n        if (inputHydrated.map) {\n          inputHydrated.map = {\n            ...inputHydrated.map,\n            __proto__: PreviousMap.prototype\n          };\n        }\n        inputs.push(inputHydrated);\n      }\n    }\n    if (defaults.nodes) {\n      defaults.nodes = json.nodes.map(n => fromJSON(n, inputs));\n    }\n    if (defaults.source) {\n      let {\n        inputId,\n        ...source\n      } = defaults.source;\n      defaults.source = source;\n      if (inputId != null) {\n        defaults.source.input = inputs[inputId];\n      }\n    }\n    if (defaults.type === 'root') {\n      return new Root(defaults);\n    } else if (defaults.type === 'decl') {\n      return new Declaration(defaults);\n    } else if (defaults.type === 'rule') {\n      return new Rule(defaults);\n    } else if (defaults.type === 'comment') {\n      return new Comment(defaults);\n    } else if (defaults.type === 'atrule') {\n      return new AtRule(defaults);\n    } else {\n      throw new Error('Unknown node type: ' + json.type);\n    }\n  }\n  fromJSON_1 = fromJSON;\n  fromJSON.default = fromJSON;\n  return fromJSON_1;\n}\nvar mapGenerator;\nvar hasRequiredMapGenerator;\nfunction requireMapGenerator() {\n  if (hasRequiredMapGenerator) return mapGenerator;\n  hasRequiredMapGenerator = 1;\n  let {\n    dirname,\n    relative,\n    resolve,\n    sep\n  } = require$$2;\n  let {\n    SourceMapConsumer,\n    SourceMapGenerator\n  } = require$$2;\n  let {\n    pathToFileURL\n  } = require$$2;\n  let Input = requireInput();\n  let sourceMapAvailable = Boolean(SourceMapConsumer && SourceMapGenerator);\n  let pathAvailable = Boolean(dirname && resolve && relative && sep);\n  class MapGenerator {\n    constructor(stringify, root, opts, cssString) {\n      this.stringify = stringify;\n      this.mapOpts = opts.map || {};\n      this.root = root;\n      this.opts = opts;\n      this.css = cssString;\n      this.originalCSS = cssString;\n      this.usesFileUrls = !this.mapOpts.from && this.mapOpts.absolute;\n      this.memoizedFileURLs = new Map();\n      this.memoizedPaths = new Map();\n      this.memoizedURLs = new Map();\n    }\n    addAnnotation() {\n      let content;\n      if (this.isInline()) {\n        content = 'data:application/json;base64,' + this.toBase64(this.map.toString());\n      } else if (typeof this.mapOpts.annotation === 'string') {\n        content = this.mapOpts.annotation;\n      } else if (typeof this.mapOpts.annotation === 'function') {\n        content = this.mapOpts.annotation(this.opts.to, this.root);\n      } else {\n        content = this.outputFile() + '.map';\n      }\n      let eol = '\\n';\n      if (this.css.includes('\\r\\n')) eol = '\\r\\n';\n      this.css += eol + '/*# sourceMappingURL=' + content + ' */';\n    }\n    applyPrevMaps() {\n      for (let prev of this.previous()) {\n        let from = this.toUrl(this.path(prev.file));\n        let root = prev.root || dirname(prev.file);\n        let map;\n        if (this.mapOpts.sourcesContent === false) {\n          map = new SourceMapConsumer(prev.text);\n          if (map.sourcesContent) {\n            map.sourcesContent = null;\n          }\n        } else {\n          map = prev.consumer();\n        }\n        this.map.applySourceMap(map, from, this.toUrl(this.path(root)));\n      }\n    }\n    clearAnnotation() {\n      if (this.mapOpts.annotation === false) return;\n      if (this.root) {\n        let node;\n        for (let i = this.root.nodes.length - 1; i >= 0; i--) {\n          node = this.root.nodes[i];\n          if (node.type !== 'comment') continue;\n          if (node.text.startsWith('# sourceMappingURL=')) {\n            this.root.removeChild(i);\n          }\n        }\n      } else if (this.css) {\n        let startIndex;\n        while ((startIndex = this.css.lastIndexOf('/*#')) !== -1) {\n          let endIndex = this.css.indexOf('*/', startIndex + 3);\n          if (endIndex === -1) break;\n          while (startIndex > 0 && this.css[startIndex - 1] === '\\n') {\n            startIndex--;\n          }\n          this.css = this.css.slice(0, startIndex) + this.css.slice(endIndex + 2);\n        }\n      }\n    }\n    generate() {\n      this.clearAnnotation();\n      if (pathAvailable && sourceMapAvailable && this.isMap()) {\n        return this.generateMap();\n      } else {\n        let result = '';\n        this.stringify(this.root, i => {\n          result += i;\n        });\n        return [result];\n      }\n    }\n    generateMap() {\n      if (this.root) {\n        this.generateString();\n      } else if (this.previous().length === 1) {\n        let prev = this.previous()[0].consumer();\n        prev.file = this.outputFile();\n        this.map = SourceMapGenerator.fromSourceMap(prev, {\n          ignoreInvalidMapping: true\n        });\n      } else {\n        this.map = new SourceMapGenerator({\n          file: this.outputFile(),\n          ignoreInvalidMapping: true\n        });\n        this.map.addMapping({\n          generated: {\n            column: 0,\n            line: 1\n          },\n          original: {\n            column: 0,\n            line: 1\n          },\n          source: this.opts.from ? this.toUrl(this.path(this.opts.from)) : '<no source>'\n        });\n      }\n      if (this.isSourcesContent()) this.setSourcesContent();\n      if (this.root && this.previous().length > 0) this.applyPrevMaps();\n      if (this.isAnnotation()) this.addAnnotation();\n      if (this.isInline()) {\n        return [this.css];\n      } else {\n        return [this.css, this.map];\n      }\n    }\n    generateString() {\n      this.css = '';\n      this.map = new SourceMapGenerator({\n        file: this.outputFile(),\n        ignoreInvalidMapping: true\n      });\n      let line = 1;\n      let column = 1;\n      let noSource = '<no source>';\n      let mapping = {\n        generated: {\n          column: 0,\n          line: 0\n        },\n        original: {\n          column: 0,\n          line: 0\n        },\n        source: ''\n      };\n      let last, lines;\n      this.stringify(this.root, (str, node, type) => {\n        this.css += str;\n        if (node && type !== 'end') {\n          mapping.generated.line = line;\n          mapping.generated.column = column - 1;\n          if (node.source && node.source.start) {\n            mapping.source = this.sourcePath(node);\n            mapping.original.line = node.source.start.line;\n            mapping.original.column = node.source.start.column - 1;\n            this.map.addMapping(mapping);\n          } else {\n            mapping.source = noSource;\n            mapping.original.line = 1;\n            mapping.original.column = 0;\n            this.map.addMapping(mapping);\n          }\n        }\n        lines = str.match(/\\n/g);\n        if (lines) {\n          line += lines.length;\n          last = str.lastIndexOf('\\n');\n          column = str.length - last;\n        } else {\n          column += str.length;\n        }\n        if (node && type !== 'start') {\n          let p = node.parent || {\n            raws: {}\n          };\n          let childless = node.type === 'decl' || node.type === 'atrule' && !node.nodes;\n          if (!childless || node !== p.last || p.raws.semicolon) {\n            if (node.source && node.source.end) {\n              mapping.source = this.sourcePath(node);\n              mapping.original.line = node.source.end.line;\n              mapping.original.column = node.source.end.column - 1;\n              mapping.generated.line = line;\n              mapping.generated.column = column - 2;\n              this.map.addMapping(mapping);\n            } else {\n              mapping.source = noSource;\n              mapping.original.line = 1;\n              mapping.original.column = 0;\n              mapping.generated.line = line;\n              mapping.generated.column = column - 1;\n              this.map.addMapping(mapping);\n            }\n          }\n        }\n      });\n    }\n    isAnnotation() {\n      if (this.isInline()) {\n        return true;\n      }\n      if (typeof this.mapOpts.annotation !== 'undefined') {\n        return this.mapOpts.annotation;\n      }\n      if (this.previous().length) {\n        return this.previous().some(i => i.annotation);\n      }\n      return true;\n    }\n    isInline() {\n      if (typeof this.mapOpts.inline !== 'undefined') {\n        return this.mapOpts.inline;\n      }\n      let annotation = this.mapOpts.annotation;\n      if (typeof annotation !== 'undefined' && annotation !== true) {\n        return false;\n      }\n      if (this.previous().length) {\n        return this.previous().some(i => i.inline);\n      }\n      return true;\n    }\n    isMap() {\n      if (typeof this.opts.map !== 'undefined') {\n        return !!this.opts.map;\n      }\n      return this.previous().length > 0;\n    }\n    isSourcesContent() {\n      if (typeof this.mapOpts.sourcesContent !== 'undefined') {\n        return this.mapOpts.sourcesContent;\n      }\n      if (this.previous().length) {\n        return this.previous().some(i => i.withContent());\n      }\n      return true;\n    }\n    outputFile() {\n      if (this.opts.to) {\n        return this.path(this.opts.to);\n      } else if (this.opts.from) {\n        return this.path(this.opts.from);\n      } else {\n        return 'to.css';\n      }\n    }\n    path(file) {\n      if (this.mapOpts.absolute) return file;\n      if (file.charCodeAt(0) === 60 /* `<` */) return file;\n      if (/^\\w+:\\/\\//.test(file)) return file;\n      let cached = this.memoizedPaths.get(file);\n      if (cached) return cached;\n      let from = this.opts.to ? dirname(this.opts.to) : '.';\n      if (typeof this.mapOpts.annotation === 'string') {\n        from = dirname(resolve(from, this.mapOpts.annotation));\n      }\n      let path = relative(from, file);\n      this.memoizedPaths.set(file, path);\n      return path;\n    }\n    previous() {\n      if (!this.previousMaps) {\n        this.previousMaps = [];\n        if (this.root) {\n          this.root.walk(node => {\n            if (node.source && node.source.input.map) {\n              let map = node.source.input.map;\n              if (!this.previousMaps.includes(map)) {\n                this.previousMaps.push(map);\n              }\n            }\n          });\n        } else {\n          let input = new Input(this.originalCSS, this.opts);\n          if (input.map) this.previousMaps.push(input.map);\n        }\n      }\n      return this.previousMaps;\n    }\n    setSourcesContent() {\n      let already = {};\n      if (this.root) {\n        this.root.walk(node => {\n          if (node.source) {\n            let from = node.source.input.from;\n            if (from && !already[from]) {\n              already[from] = true;\n              let fromUrl = this.usesFileUrls ? this.toFileUrl(from) : this.toUrl(this.path(from));\n              this.map.setSourceContent(fromUrl, node.source.input.css);\n            }\n          }\n        });\n      } else if (this.css) {\n        let from = this.opts.from ? this.toUrl(this.path(this.opts.from)) : '<no source>';\n        this.map.setSourceContent(from, this.css);\n      }\n    }\n    sourcePath(node) {\n      if (this.mapOpts.from) {\n        return this.toUrl(this.mapOpts.from);\n      } else if (this.usesFileUrls) {\n        return this.toFileUrl(node.source.input.from);\n      } else {\n        return this.toUrl(this.path(node.source.input.from));\n      }\n    }\n    toBase64(str) {\n      if (Buffer) {\n        return Buffer.from(str).toString('base64');\n      } else {\n        return window.btoa(unescape(encodeURIComponent(str)));\n      }\n    }\n    toFileUrl(path) {\n      let cached = this.memoizedFileURLs.get(path);\n      if (cached) return cached;\n      if (pathToFileURL) {\n        let fileURL = pathToFileURL(path).toString();\n        this.memoizedFileURLs.set(path, fileURL);\n        return fileURL;\n      } else {\n        throw new Error('`map.absolute` option is not available in this PostCSS build');\n      }\n    }\n    toUrl(path) {\n      let cached = this.memoizedURLs.get(path);\n      if (cached) return cached;\n      if (sep === '\\\\') {\n        path = path.replace(/\\\\/g, '/');\n      }\n      let url = encodeURI(path).replace(/[#?]/g, encodeURIComponent);\n      this.memoizedURLs.set(path, url);\n      return url;\n    }\n  }\n  mapGenerator = MapGenerator;\n  return mapGenerator;\n}\nvar tokenize;\nvar hasRequiredTokenize;\nfunction requireTokenize() {\n  if (hasRequiredTokenize) return tokenize;\n  hasRequiredTokenize = 1;\n  const SINGLE_QUOTE = \"'\".charCodeAt(0);\n  const DOUBLE_QUOTE = '\"'.charCodeAt(0);\n  const BACKSLASH = '\\\\'.charCodeAt(0);\n  const SLASH = '/'.charCodeAt(0);\n  const NEWLINE = '\\n'.charCodeAt(0);\n  const SPACE = ' '.charCodeAt(0);\n  const FEED = '\\f'.charCodeAt(0);\n  const TAB = '\\t'.charCodeAt(0);\n  const CR = '\\r'.charCodeAt(0);\n  const OPEN_SQUARE = '['.charCodeAt(0);\n  const CLOSE_SQUARE = ']'.charCodeAt(0);\n  const OPEN_PARENTHESES = '('.charCodeAt(0);\n  const CLOSE_PARENTHESES = ')'.charCodeAt(0);\n  const OPEN_CURLY = '{'.charCodeAt(0);\n  const CLOSE_CURLY = '}'.charCodeAt(0);\n  const SEMICOLON = ';'.charCodeAt(0);\n  const ASTERISK = '*'.charCodeAt(0);\n  const COLON = ':'.charCodeAt(0);\n  const AT = '@'.charCodeAt(0);\n  const RE_AT_END = /[\\t\\n\\f\\r \"#'()/;[\\\\\\]{}]/g;\n  const RE_WORD_END = /[\\t\\n\\f\\r !\"#'():;@[\\\\\\]{}]|\\/(?=\\*)/g;\n  const RE_BAD_BRACKET = /.[\\r\\n\"'(/\\\\]/;\n  const RE_HEX_ESCAPE = /[\\da-f]/i;\n  tokenize = function tokenizer(input, options = {}) {\n    let css = input.css.valueOf();\n    let ignore = options.ignoreErrors;\n    let code, content, escape, next, quote;\n    let currentToken, escaped, escapePos, n, prev;\n    let length = css.length;\n    let pos = 0;\n    let buffer = [];\n    let returned = [];\n    let lastBadParen = -1;\n    function position() {\n      return pos;\n    }\n    function unclosed(what) {\n      throw input.error('Unclosed ' + what, pos);\n    }\n    function endOfFile() {\n      return returned.length === 0 && pos >= length;\n    }\n    function nextToken(opts) {\n      if (returned.length) return returned.pop();\n      if (pos >= length) return;\n      let ignoreUnclosed = opts ? opts.ignoreUnclosed : false;\n      code = css.charCodeAt(pos);\n      switch (code) {\n        case NEWLINE:\n        case SPACE:\n        case TAB:\n        case CR:\n        case FEED:\n          {\n            next = pos;\n            do {\n              next += 1;\n              code = css.charCodeAt(next);\n            } while (code === SPACE || code === NEWLINE || code === TAB || code === CR || code === FEED);\n            currentToken = ['space', css.slice(pos, next)];\n            pos = next - 1;\n            break;\n          }\n        case OPEN_SQUARE:\n        case CLOSE_SQUARE:\n        case OPEN_CURLY:\n        case CLOSE_CURLY:\n        case COLON:\n        case SEMICOLON:\n        case CLOSE_PARENTHESES:\n          {\n            let controlChar = String.fromCharCode(code);\n            currentToken = [controlChar, controlChar, pos];\n            break;\n          }\n        case OPEN_PARENTHESES:\n          {\n            prev = buffer.length ? buffer.pop()[1] : '';\n            n = css.charCodeAt(pos + 1);\n            if (prev === 'url' && n !== SINGLE_QUOTE && n !== DOUBLE_QUOTE && n !== SPACE && n !== NEWLINE && n !== TAB && n !== FEED && n !== CR) {\n              next = pos;\n              do {\n                escaped = false;\n                next = css.indexOf(')', next + 1);\n                if (next === -1) {\n                  if (ignore || ignoreUnclosed) {\n                    next = pos;\n                    break;\n                  } else {\n                    unclosed('bracket');\n                  }\n                }\n                escapePos = next;\n                while (css.charCodeAt(escapePos - 1) === BACKSLASH) {\n                  escapePos -= 1;\n                  escaped = !escaped;\n                }\n              } while (escaped);\n              currentToken = ['brackets', css.slice(pos, next + 1), pos, next];\n              pos = next;\n            } else if (pos <= lastBadParen) {\n              currentToken = ['(', '(', pos];\n            } else {\n              next = css.indexOf(')', pos + 1);\n              content = css.slice(pos, next + 1);\n              if (next === -1 || RE_BAD_BRACKET.test(content)) {\n                lastBadParen = next === -1 ? length : next;\n                currentToken = ['(', '(', pos];\n              } else {\n                currentToken = ['brackets', content, pos, next];\n                pos = next;\n              }\n            }\n            break;\n          }\n        case SINGLE_QUOTE:\n        case DOUBLE_QUOTE:\n          {\n            quote = code === SINGLE_QUOTE ? \"'\" : '\"';\n            next = pos;\n            do {\n              escaped = false;\n              next = css.indexOf(quote, next + 1);\n              if (next === -1) {\n                if (ignore || ignoreUnclosed) {\n                  next = pos + 1;\n                  break;\n                } else {\n                  unclosed('string');\n                }\n              }\n              escapePos = next;\n              while (css.charCodeAt(escapePos - 1) === BACKSLASH) {\n                escapePos -= 1;\n                escaped = !escaped;\n              }\n            } while (escaped);\n            currentToken = ['string', css.slice(pos, next + 1), pos, next];\n            pos = next;\n            break;\n          }\n        case AT:\n          {\n            RE_AT_END.lastIndex = pos + 1;\n            RE_AT_END.test(css);\n            if (RE_AT_END.lastIndex === 0) {\n              next = css.length - 1;\n            } else {\n              next = RE_AT_END.lastIndex - 2;\n            }\n            currentToken = ['at-word', css.slice(pos, next + 1), pos, next];\n            pos = next;\n            break;\n          }\n        case BACKSLASH:\n          {\n            next = pos;\n            escape = true;\n            while (css.charCodeAt(next + 1) === BACKSLASH) {\n              next += 1;\n              escape = !escape;\n            }\n            code = css.charCodeAt(next + 1);\n            if (escape && code !== SLASH && code !== SPACE && code !== NEWLINE && code !== TAB && code !== CR && code !== FEED) {\n              next += 1;\n              if (RE_HEX_ESCAPE.test(css.charAt(next))) {\n                while (RE_HEX_ESCAPE.test(css.charAt(next + 1))) {\n                  next += 1;\n                }\n                if (css.charCodeAt(next + 1) === SPACE) {\n                  next += 1;\n                }\n              }\n            }\n            currentToken = ['word', css.slice(pos, next + 1), pos, next];\n            pos = next;\n            break;\n          }\n        default:\n          {\n            if (code === SLASH && css.charCodeAt(pos + 1) === ASTERISK) {\n              next = css.indexOf('*/', pos + 2) + 1;\n              if (next === 0) {\n                if (ignore || ignoreUnclosed) {\n                  next = css.length;\n                } else {\n                  unclosed('comment');\n                }\n              }\n              currentToken = ['comment', css.slice(pos, next + 1), pos, next];\n              pos = next;\n            } else {\n              RE_WORD_END.lastIndex = pos + 1;\n              RE_WORD_END.test(css);\n              if (RE_WORD_END.lastIndex === 0) {\n                next = css.length - 1;\n              } else {\n                next = RE_WORD_END.lastIndex - 2;\n              }\n              currentToken = ['word', css.slice(pos, next + 1), pos, next];\n              buffer.push(currentToken);\n              pos = next;\n            }\n            break;\n          }\n      }\n      pos++;\n      return currentToken;\n    }\n    function back(token) {\n      returned.push(token);\n    }\n    return {\n      back,\n      endOfFile,\n      nextToken,\n      position\n    };\n  };\n  return tokenize;\n}\nvar parser;\nvar hasRequiredParser;\nfunction requireParser() {\n  if (hasRequiredParser) return parser;\n  hasRequiredParser = 1;\n  let AtRule = requireAtRule();\n  let Comment = requireComment();\n  let Declaration = requireDeclaration();\n  let Root = requireRoot();\n  let Rule = requireRule();\n  let tokenizer = requireTokenize();\n  const SAFE_COMMENT_NEIGHBOR = {\n    empty: true,\n    space: true\n  };\n  function findLastWithPosition(tokens) {\n    for (let i = tokens.length - 1; i >= 0; i--) {\n      let token = tokens[i];\n      let pos = token[3] || token[2];\n      if (pos) return pos;\n    }\n  }\n  class Parser {\n    constructor(input) {\n      this.input = input;\n      this.root = new Root();\n      this.current = this.root;\n      this.spaces = '';\n      this.semicolon = false;\n      this.createTokenizer();\n      this.root.source = {\n        input,\n        start: {\n          column: 1,\n          line: 1,\n          offset: 0\n        }\n      };\n    }\n    atrule(token) {\n      let node = new AtRule();\n      node.name = token[1].slice(1);\n      if (node.name === '') {\n        this.unnamedAtrule(node, token);\n      }\n      this.init(node, token[2]);\n      let type;\n      let prev;\n      let shift;\n      let last = false;\n      let open = false;\n      let params = [];\n      let brackets = [];\n      while (!this.tokenizer.endOfFile()) {\n        token = this.tokenizer.nextToken();\n        type = token[0];\n        if (type === '(' || type === '[') {\n          brackets.push(type === '(' ? ')' : ']');\n        } else if (type === '{' && brackets.length > 0) {\n          brackets.push('}');\n        } else if (type === brackets[brackets.length - 1]) {\n          brackets.pop();\n        }\n        if (brackets.length === 0) {\n          if (type === ';') {\n            node.source.end = this.getPosition(token[2]);\n            node.source.end.offset++;\n            this.semicolon = true;\n            break;\n          } else if (type === '{') {\n            open = true;\n            break;\n          } else if (type === '}') {\n            if (params.length > 0) {\n              shift = params.length - 1;\n              prev = params[shift];\n              while (prev && prev[0] === 'space') {\n                prev = params[--shift];\n              }\n              if (prev) {\n                node.source.end = this.getPosition(prev[3] || prev[2]);\n                node.source.end.offset++;\n              }\n            }\n            this.end(token);\n            break;\n          } else {\n            params.push(token);\n          }\n        } else {\n          params.push(token);\n        }\n        if (this.tokenizer.endOfFile()) {\n          last = true;\n          break;\n        }\n      }\n      node.raws.between = this.spacesAndCommentsFromEnd(params);\n      if (params.length) {\n        node.raws.afterName = this.spacesAndCommentsFromStart(params);\n        this.raw(node, 'params', params);\n        if (last) {\n          token = params[params.length - 1];\n          node.source.end = this.getPosition(token[3] || token[2]);\n          node.source.end.offset++;\n          this.spaces = node.raws.between;\n          node.raws.between = '';\n        }\n      } else {\n        node.raws.afterName = '';\n        node.params = '';\n      }\n      if (open) {\n        node.nodes = [];\n        this.current = node;\n      }\n    }\n    checkMissedSemicolon(tokens) {\n      let colon = this.colon(tokens);\n      if (colon === false) return;\n      let founded = 0;\n      let token;\n      for (let j = colon - 1; j >= 0; j--) {\n        token = tokens[j];\n        if (token[0] !== 'space') {\n          founded += 1;\n          if (founded === 2) break;\n        }\n      }\n      // If the token is a word, e.g. `!important`, `red` or any other valid property's value.\n      // Then we need to return the colon after that word token. [3] is the \"end\" colon of that word.\n      // And because we need it after that one we do +1 to get the next one.\n      throw this.input.error('Missed semicolon', token[0] === 'word' ? token[3] + 1 : token[2]);\n    }\n    colon(tokens) {\n      let brackets = 0;\n      let prev, token, type;\n      for (let [i, element] of tokens.entries()) {\n        token = element;\n        type = token[0];\n        if (type === '(') {\n          brackets += 1;\n        }\n        if (type === ')') {\n          brackets -= 1;\n        }\n        if (brackets === 0 && type === ':') {\n          if (!prev) {\n            this.doubleColon(token);\n          } else if (prev[0] === 'word' && prev[1] === 'progid') {\n            continue;\n          } else {\n            return i;\n          }\n        }\n        prev = token;\n      }\n      return false;\n    }\n    comment(token) {\n      let node = new Comment();\n      this.init(node, token[2]);\n      node.source.end = this.getPosition(token[3] || token[2]);\n      node.source.end.offset++;\n      let text = token[1].slice(2, -2);\n      if (!text.trim()) {\n        node.text = '';\n        node.raws.left = text;\n        node.raws.right = '';\n      } else {\n        let match = text.match(/^(\\s*)([^]*\\S)(\\s*)$/);\n        node.text = match[2];\n        node.raws.left = match[1];\n        node.raws.right = match[3];\n      }\n    }\n    createTokenizer() {\n      this.tokenizer = tokenizer(this.input);\n    }\n    decl(tokens, customProperty) {\n      let node = new Declaration();\n      this.init(node, tokens[0][2]);\n      let last = tokens[tokens.length - 1];\n      if (last[0] === ';') {\n        this.semicolon = true;\n        tokens.pop();\n      }\n      node.source.end = this.getPosition(last[3] || last[2] || findLastWithPosition(tokens));\n      node.source.end.offset++;\n      while (tokens[0][0] !== 'word') {\n        if (tokens.length === 1) this.unknownWord(tokens);\n        node.raws.before += tokens.shift()[1];\n      }\n      node.source.start = this.getPosition(tokens[0][2]);\n      node.prop = '';\n      while (tokens.length) {\n        let type = tokens[0][0];\n        if (type === ':' || type === 'space' || type === 'comment') {\n          break;\n        }\n        node.prop += tokens.shift()[1];\n      }\n      node.raws.between = '';\n      let token;\n      while (tokens.length) {\n        token = tokens.shift();\n        if (token[0] === ':') {\n          node.raws.between += token[1];\n          break;\n        } else {\n          if (token[0] === 'word' && /\\w/.test(token[1])) {\n            this.unknownWord([token]);\n          }\n          node.raws.between += token[1];\n        }\n      }\n      if (node.prop[0] === '_' || node.prop[0] === '*') {\n        node.raws.before += node.prop[0];\n        node.prop = node.prop.slice(1);\n      }\n      let firstSpaces = [];\n      let next;\n      while (tokens.length) {\n        next = tokens[0][0];\n        if (next !== 'space' && next !== 'comment') break;\n        firstSpaces.push(tokens.shift());\n      }\n      this.precheckMissedSemicolon(tokens);\n      for (let i = tokens.length - 1; i >= 0; i--) {\n        token = tokens[i];\n        if (token[1].toLowerCase() === '!important') {\n          node.important = true;\n          let string = this.stringFrom(tokens, i);\n          string = this.spacesFromEnd(tokens) + string;\n          if (string !== ' !important') node.raws.important = string;\n          break;\n        } else if (token[1].toLowerCase() === 'important') {\n          let cache = tokens.slice(0);\n          let str = '';\n          for (let j = i; j > 0; j--) {\n            let type = cache[j][0];\n            if (str.trim().startsWith('!') && type !== 'space') {\n              break;\n            }\n            str = cache.pop()[1] + str;\n          }\n          if (str.trim().startsWith('!')) {\n            node.important = true;\n            node.raws.important = str;\n            tokens = cache;\n          }\n        }\n        if (token[0] !== 'space' && token[0] !== 'comment') {\n          break;\n        }\n      }\n      let hasWord = tokens.some(i => i[0] !== 'space' && i[0] !== 'comment');\n      if (hasWord) {\n        node.raws.between += firstSpaces.map(i => i[1]).join('');\n        firstSpaces = [];\n      }\n      this.raw(node, 'value', firstSpaces.concat(tokens), customProperty);\n      if (node.value.includes(':') && !customProperty) {\n        this.checkMissedSemicolon(tokens);\n      }\n    }\n    doubleColon(token) {\n      throw this.input.error('Double colon', {\n        offset: token[2]\n      }, {\n        offset: token[2] + token[1].length\n      });\n    }\n    emptyRule(token) {\n      let node = new Rule();\n      this.init(node, token[2]);\n      node.selector = '';\n      node.raws.between = '';\n      this.current = node;\n    }\n    end(token) {\n      if (this.current.nodes && this.current.nodes.length) {\n        this.current.raws.semicolon = this.semicolon;\n      }\n      this.semicolon = false;\n      this.current.raws.after = (this.current.raws.after || '') + this.spaces;\n      this.spaces = '';\n      if (this.current.parent) {\n        this.current.source.end = this.getPosition(token[2]);\n        this.current.source.end.offset++;\n        this.current = this.current.parent;\n      } else {\n        this.unexpectedClose(token);\n      }\n    }\n    endFile() {\n      if (this.current.parent) this.unclosedBlock();\n      if (this.current.nodes && this.current.nodes.length) {\n        this.current.raws.semicolon = this.semicolon;\n      }\n      this.current.raws.after = (this.current.raws.after || '') + this.spaces;\n      this.root.source.end = this.getPosition(this.tokenizer.position());\n    }\n    freeSemicolon(token) {\n      this.spaces += token[1];\n      if (this.current.nodes) {\n        let prev = this.current.nodes[this.current.nodes.length - 1];\n        if (prev && prev.type === 'rule' && !prev.raws.ownSemicolon) {\n          prev.raws.ownSemicolon = this.spaces;\n          this.spaces = '';\n          prev.source.end = this.getPosition(token[2]);\n          prev.source.end.offset += prev.raws.ownSemicolon.length;\n        }\n      }\n    }\n\n    // Helpers\n\n    getPosition(offset) {\n      let pos = this.input.fromOffset(offset);\n      return {\n        column: pos.col,\n        line: pos.line,\n        offset\n      };\n    }\n    init(node, offset) {\n      this.current.push(node);\n      node.source = {\n        input: this.input,\n        start: this.getPosition(offset)\n      };\n      node.raws.before = this.spaces;\n      this.spaces = '';\n      if (node.type !== 'comment') this.semicolon = false;\n    }\n    other(start) {\n      let end = false;\n      let type = null;\n      let colon = false;\n      let bracket = null;\n      let brackets = [];\n      let customProperty = start[1].startsWith('--');\n      let tokens = [];\n      let token = start;\n      while (token) {\n        type = token[0];\n        tokens.push(token);\n        if (type === '(' || type === '[') {\n          if (!bracket) bracket = token;\n          brackets.push(type === '(' ? ')' : ']');\n        } else if (customProperty && colon && type === '{') {\n          if (!bracket) bracket = token;\n          brackets.push('}');\n        } else if (brackets.length === 0) {\n          if (type === ';') {\n            if (colon) {\n              this.decl(tokens, customProperty);\n              return;\n            } else {\n              break;\n            }\n          } else if (type === '{') {\n            this.rule(tokens);\n            return;\n          } else if (type === '}') {\n            this.tokenizer.back(tokens.pop());\n            end = true;\n            break;\n          } else if (type === ':') {\n            colon = true;\n          }\n        } else if (type === brackets[brackets.length - 1]) {\n          brackets.pop();\n          if (brackets.length === 0) bracket = null;\n        }\n        token = this.tokenizer.nextToken();\n      }\n      if (this.tokenizer.endOfFile()) end = true;\n      if (brackets.length > 0) this.unclosedBracket(bracket);\n      if (end && colon) {\n        if (!customProperty) {\n          while (tokens.length) {\n            token = tokens[tokens.length - 1][0];\n            if (token !== 'space' && token !== 'comment') break;\n            this.tokenizer.back(tokens.pop());\n          }\n        }\n        this.decl(tokens, customProperty);\n      } else {\n        this.unknownWord(tokens);\n      }\n    }\n    parse() {\n      let token;\n      while (!this.tokenizer.endOfFile()) {\n        token = this.tokenizer.nextToken();\n        switch (token[0]) {\n          case 'space':\n            this.spaces += token[1];\n            break;\n          case ';':\n            this.freeSemicolon(token);\n            break;\n          case '}':\n            this.end(token);\n            break;\n          case 'comment':\n            this.comment(token);\n            break;\n          case 'at-word':\n            this.atrule(token);\n            break;\n          case '{':\n            this.emptyRule(token);\n            break;\n          default:\n            this.other(token);\n            break;\n        }\n      }\n      this.endFile();\n    }\n    precheckMissedSemicolon(/* tokens */\n    ) {\n      // Hook for Safe Parser\n    }\n    raw(node, prop, tokens, customProperty) {\n      let token, type;\n      let length = tokens.length;\n      let value = '';\n      let clean = true;\n      let next, prev;\n      for (let i = 0; i < length; i += 1) {\n        token = tokens[i];\n        type = token[0];\n        if (type === 'space' && i === length - 1 && !customProperty) {\n          clean = false;\n        } else if (type === 'comment') {\n          prev = tokens[i - 1] ? tokens[i - 1][0] : 'empty';\n          next = tokens[i + 1] ? tokens[i + 1][0] : 'empty';\n          if (!SAFE_COMMENT_NEIGHBOR[prev] && !SAFE_COMMENT_NEIGHBOR[next]) {\n            if (value.slice(-1) === ',') {\n              clean = false;\n            } else {\n              value += token[1];\n            }\n          } else {\n            clean = false;\n          }\n        } else {\n          value += token[1];\n        }\n      }\n      if (!clean) {\n        let raw = tokens.reduce((all, i) => all + i[1], '');\n        node.raws[prop] = {\n          raw,\n          value\n        };\n      }\n      node[prop] = value;\n    }\n    rule(tokens) {\n      tokens.pop();\n      let node = new Rule();\n      this.init(node, tokens[0][2]);\n      node.raws.between = this.spacesAndCommentsFromEnd(tokens);\n      this.raw(node, 'selector', tokens);\n      this.current = node;\n    }\n    spacesAndCommentsFromEnd(tokens) {\n      let lastTokenType;\n      let spaces = '';\n      while (tokens.length) {\n        lastTokenType = tokens[tokens.length - 1][0];\n        if (lastTokenType !== 'space' && lastTokenType !== 'comment') break;\n        spaces = tokens.pop()[1] + spaces;\n      }\n      return spaces;\n    }\n\n    // Errors\n\n    spacesAndCommentsFromStart(tokens) {\n      let next;\n      let spaces = '';\n      while (tokens.length) {\n        next = tokens[0][0];\n        if (next !== 'space' && next !== 'comment') break;\n        spaces += tokens.shift()[1];\n      }\n      return spaces;\n    }\n    spacesFromEnd(tokens) {\n      let lastTokenType;\n      let spaces = '';\n      while (tokens.length) {\n        lastTokenType = tokens[tokens.length - 1][0];\n        if (lastTokenType !== 'space') break;\n        spaces = tokens.pop()[1] + spaces;\n      }\n      return spaces;\n    }\n    stringFrom(tokens, from) {\n      let result = '';\n      for (let i = from; i < tokens.length; i++) {\n        result += tokens[i][1];\n      }\n      tokens.splice(from, tokens.length - from);\n      return result;\n    }\n    unclosedBlock() {\n      let pos = this.current.source.start;\n      throw this.input.error('Unclosed block', pos.line, pos.column);\n    }\n    unclosedBracket(bracket) {\n      throw this.input.error('Unclosed bracket', {\n        offset: bracket[2]\n      }, {\n        offset: bracket[2] + 1\n      });\n    }\n    unexpectedClose(token) {\n      throw this.input.error('Unexpected }', {\n        offset: token[2]\n      }, {\n        offset: token[2] + 1\n      });\n    }\n    unknownWord(tokens) {\n      throw this.input.error('Unknown word ' + tokens[0][1], {\n        offset: tokens[0][2]\n      }, {\n        offset: tokens[0][2] + tokens[0][1].length\n      });\n    }\n    unnamedAtrule(node, token) {\n      throw this.input.error('At-rule without name', {\n        offset: token[2]\n      }, {\n        offset: token[2] + token[1].length\n      });\n    }\n  }\n  parser = Parser;\n  return parser;\n}\nvar parse_1;\nvar hasRequiredParse;\nfunction requireParse() {\n  if (hasRequiredParse) return parse_1;\n  hasRequiredParse = 1;\n  let Container = requireContainer$1();\n  let Input = requireInput();\n  let Parser = requireParser();\n  function parse(css, opts) {\n    let input = new Input(css, opts);\n    let parser = new Parser(input);\n    try {\n      parser.parse();\n    } catch (e) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (e.name === 'CssSyntaxError' && opts && opts.from) {\n          if (/\\.scss$/i.test(opts.from)) {\n            e.message += '\\nYou tried to parse SCSS with ' + 'the standard CSS parser; ' + 'try again with the postcss-scss parser';\n          } else if (/\\.sass/i.test(opts.from)) {\n            e.message += '\\nYou tried to parse Sass with ' + 'the standard CSS parser; ' + 'try again with the postcss-sass parser';\n          } else if (/\\.less$/i.test(opts.from)) {\n            e.message += '\\nYou tried to parse Less with ' + 'the standard CSS parser; ' + 'try again with the postcss-less parser';\n          }\n        }\n      }\n      throw e;\n    }\n    return parser.root;\n  }\n  parse_1 = parse;\n  parse.default = parse;\n  Container.registerParse(parse);\n  return parse_1;\n}\nvar warning;\nvar hasRequiredWarning;\nfunction requireWarning() {\n  if (hasRequiredWarning) return warning;\n  hasRequiredWarning = 1;\n  class Warning {\n    constructor(text, opts = {}) {\n      this.type = 'warning';\n      this.text = text;\n      if (opts.node && opts.node.source) {\n        let range = opts.node.rangeBy(opts);\n        this.line = range.start.line;\n        this.column = range.start.column;\n        this.endLine = range.end.line;\n        this.endColumn = range.end.column;\n      }\n      for (let opt in opts) this[opt] = opts[opt];\n    }\n    toString() {\n      if (this.node) {\n        return this.node.error(this.text, {\n          index: this.index,\n          plugin: this.plugin,\n          word: this.word\n        }).message;\n      }\n      if (this.plugin) {\n        return this.plugin + ': ' + this.text;\n      }\n      return this.text;\n    }\n  }\n  warning = Warning;\n  Warning.default = Warning;\n  return warning;\n}\nvar result;\nvar hasRequiredResult;\nfunction requireResult() {\n  if (hasRequiredResult) return result;\n  hasRequiredResult = 1;\n  let Warning = requireWarning();\n  class Result {\n    get content() {\n      return this.css;\n    }\n    constructor(processor, root, opts) {\n      this.processor = processor;\n      this.messages = [];\n      this.root = root;\n      this.opts = opts;\n      this.css = '';\n      this.map = undefined;\n    }\n    toString() {\n      return this.css;\n    }\n    warn(text, opts = {}) {\n      if (!opts.plugin) {\n        if (this.lastPlugin && this.lastPlugin.postcssPlugin) {\n          opts.plugin = this.lastPlugin.postcssPlugin;\n        }\n      }\n      let warning = new Warning(text, opts);\n      this.messages.push(warning);\n      return warning;\n    }\n    warnings() {\n      return this.messages.filter(i => i.type === 'warning');\n    }\n  }\n  result = Result;\n  Result.default = Result;\n  return result;\n}\n\n/* eslint-disable no-console */\n\nvar warnOnce;\nvar hasRequiredWarnOnce;\nfunction requireWarnOnce() {\n  if (hasRequiredWarnOnce) return warnOnce;\n  hasRequiredWarnOnce = 1;\n  let printed = {};\n  warnOnce = function warnOnce(message) {\n    if (printed[message]) return;\n    printed[message] = true;\n    if (typeof console !== 'undefined' && console.warn) {\n      console.warn(message);\n    }\n  };\n  return warnOnce;\n}\nvar lazyResult;\nvar hasRequiredLazyResult;\nfunction requireLazyResult() {\n  if (hasRequiredLazyResult) return lazyResult;\n  hasRequiredLazyResult = 1;\n  let Container = requireContainer$1();\n  let Document = requireDocument();\n  let MapGenerator = requireMapGenerator();\n  let parse = requireParse();\n  let Result = requireResult();\n  let Root = requireRoot();\n  let stringify = requireStringify();\n  let {\n    isClean,\n    my\n  } = requireSymbols();\n  let warnOnce = requireWarnOnce();\n  const TYPE_TO_CLASS_NAME = {\n    atrule: 'AtRule',\n    comment: 'Comment',\n    decl: 'Declaration',\n    document: 'Document',\n    root: 'Root',\n    rule: 'Rule'\n  };\n  const PLUGIN_PROPS = {\n    AtRule: true,\n    AtRuleExit: true,\n    Comment: true,\n    CommentExit: true,\n    Declaration: true,\n    DeclarationExit: true,\n    Document: true,\n    DocumentExit: true,\n    Once: true,\n    OnceExit: true,\n    postcssPlugin: true,\n    prepare: true,\n    Root: true,\n    RootExit: true,\n    Rule: true,\n    RuleExit: true\n  };\n  const NOT_VISITORS = {\n    Once: true,\n    postcssPlugin: true,\n    prepare: true\n  };\n  const CHILDREN = 0;\n  function isPromise(obj) {\n    return typeof obj === 'object' && typeof obj.then === 'function';\n  }\n  function getEvents(node) {\n    let key = false;\n    let type = TYPE_TO_CLASS_NAME[node.type];\n    if (node.type === 'decl') {\n      key = node.prop.toLowerCase();\n    } else if (node.type === 'atrule') {\n      key = node.name.toLowerCase();\n    }\n    if (key && node.append) {\n      return [type, type + '-' + key, CHILDREN, type + 'Exit', type + 'Exit-' + key];\n    } else if (key) {\n      return [type, type + '-' + key, type + 'Exit', type + 'Exit-' + key];\n    } else if (node.append) {\n      return [type, CHILDREN, type + 'Exit'];\n    } else {\n      return [type, type + 'Exit'];\n    }\n  }\n  function toStack(node) {\n    let events;\n    if (node.type === 'document') {\n      events = ['Document', CHILDREN, 'DocumentExit'];\n    } else if (node.type === 'root') {\n      events = ['Root', CHILDREN, 'RootExit'];\n    } else {\n      events = getEvents(node);\n    }\n    return {\n      eventIndex: 0,\n      events,\n      iterator: 0,\n      node,\n      visitorIndex: 0,\n      visitors: []\n    };\n  }\n  function cleanMarks(node) {\n    node[isClean] = false;\n    if (node.nodes) node.nodes.forEach(i => cleanMarks(i));\n    return node;\n  }\n  let postcss = {};\n  let LazyResult = /*#__PURE__*/(() => {\n    class LazyResult {\n      get content() {\n        return this.stringify().content;\n      }\n      get css() {\n        return this.stringify().css;\n      }\n      get map() {\n        return this.stringify().map;\n      }\n      get messages() {\n        return this.sync().messages;\n      }\n      get opts() {\n        return this.result.opts;\n      }\n      get processor() {\n        return this.result.processor;\n      }\n      get root() {\n        return this.sync().root;\n      }\n      get [Symbol.toStringTag]() {\n        return 'LazyResult';\n      }\n      constructor(processor, css, opts) {\n        this.stringified = false;\n        this.processed = false;\n        let root;\n        if (typeof css === 'object' && css !== null && (css.type === 'root' || css.type === 'document')) {\n          root = cleanMarks(css);\n        } else if (css instanceof LazyResult || css instanceof Result) {\n          root = cleanMarks(css.root);\n          if (css.map) {\n            if (typeof opts.map === 'undefined') opts.map = {};\n            if (!opts.map.inline) opts.map.inline = false;\n            opts.map.prev = css.map;\n          }\n        } else {\n          let parser = parse;\n          if (opts.syntax) parser = opts.syntax.parse;\n          if (opts.parser) parser = opts.parser;\n          if (parser.parse) parser = parser.parse;\n          try {\n            root = parser(css, opts);\n          } catch (error) {\n            this.processed = true;\n            this.error = error;\n          }\n          if (root && !root[my]) {\n            /* c8 ignore next 2 */\n            Container.rebuild(root);\n          }\n        }\n        this.result = new Result(processor, root, opts);\n        this.helpers = {\n          ...postcss,\n          postcss,\n          result: this.result\n        };\n        this.plugins = this.processor.plugins.map(plugin => {\n          if (typeof plugin === 'object' && plugin.prepare) {\n            return {\n              ...plugin,\n              ...plugin.prepare(this.result)\n            };\n          } else {\n            return plugin;\n          }\n        });\n      }\n      async() {\n        if (this.error) return Promise.reject(this.error);\n        if (this.processed) return Promise.resolve(this.result);\n        if (!this.processing) {\n          this.processing = this.runAsync();\n        }\n        return this.processing;\n      }\n      catch(onRejected) {\n        return this.async().catch(onRejected);\n      }\n      finally(onFinally) {\n        return this.async().then(onFinally, onFinally);\n      }\n      getAsyncError() {\n        throw new Error('Use process(css).then(cb) to work with async plugins');\n      }\n      handleError(error, node) {\n        let plugin = this.result.lastPlugin;\n        try {\n          if (node) node.addToError(error);\n          this.error = error;\n          if (error.name === 'CssSyntaxError' && !error.plugin) {\n            error.plugin = plugin.postcssPlugin;\n            error.setMessage();\n          } else if (plugin.postcssVersion) {\n            if (process.env.NODE_ENV !== 'production') {\n              let pluginName = plugin.postcssPlugin;\n              let pluginVer = plugin.postcssVersion;\n              let runtimeVer = this.result.processor.version;\n              let a = pluginVer.split('.');\n              let b = runtimeVer.split('.');\n              if (a[0] !== b[0] || parseInt(a[1]) > parseInt(b[1])) {\n                // eslint-disable-next-line no-console\n                console.error('Unknown error from PostCSS plugin. Your current PostCSS ' + 'version is ' + runtimeVer + ', but ' + pluginName + ' uses ' + pluginVer + '. Perhaps this is the source of the error below.');\n              }\n            }\n          }\n        } catch (err) {\n          /* c8 ignore next 3 */\n          // eslint-disable-next-line no-console\n          if (console && console.error) console.error(err);\n        }\n        return error;\n      }\n      prepareVisitors() {\n        this.listeners = {};\n        let add = (plugin, type, cb) => {\n          if (!this.listeners[type]) this.listeners[type] = [];\n          this.listeners[type].push([plugin, cb]);\n        };\n        for (let plugin of this.plugins) {\n          if (typeof plugin === 'object') {\n            for (let event in plugin) {\n              if (!PLUGIN_PROPS[event] && /^[A-Z]/.test(event)) {\n                throw new Error(`Unknown event ${event} in ${plugin.postcssPlugin}. ` + `Try to update PostCSS (${this.processor.version} now).`);\n              }\n              if (!NOT_VISITORS[event]) {\n                if (typeof plugin[event] === 'object') {\n                  for (let filter in plugin[event]) {\n                    if (filter === '*') {\n                      add(plugin, event, plugin[event][filter]);\n                    } else {\n                      add(plugin, event + '-' + filter.toLowerCase(), plugin[event][filter]);\n                    }\n                  }\n                } else if (typeof plugin[event] === 'function') {\n                  add(plugin, event, plugin[event]);\n                }\n              }\n            }\n          }\n        }\n        this.hasListener = Object.keys(this.listeners).length > 0;\n      }\n      async runAsync() {\n        this.plugin = 0;\n        for (let i = 0; i < this.plugins.length; i++) {\n          let plugin = this.plugins[i];\n          let promise = this.runOnRoot(plugin);\n          if (isPromise(promise)) {\n            try {\n              await promise;\n            } catch (error) {\n              throw this.handleError(error);\n            }\n          }\n        }\n        this.prepareVisitors();\n        if (this.hasListener) {\n          let root = this.result.root;\n          while (!root[isClean]) {\n            root[isClean] = true;\n            let stack = [toStack(root)];\n            while (stack.length > 0) {\n              let promise = this.visitTick(stack);\n              if (isPromise(promise)) {\n                try {\n                  await promise;\n                } catch (e) {\n                  let node = stack[stack.length - 1].node;\n                  throw this.handleError(e, node);\n                }\n              }\n            }\n          }\n          if (this.listeners.OnceExit) {\n            for (let [plugin, visitor] of this.listeners.OnceExit) {\n              this.result.lastPlugin = plugin;\n              try {\n                if (root.type === 'document') {\n                  let roots = root.nodes.map(subRoot => visitor(subRoot, this.helpers));\n                  await Promise.all(roots);\n                } else {\n                  await visitor(root, this.helpers);\n                }\n              } catch (e) {\n                throw this.handleError(e);\n              }\n            }\n          }\n        }\n        this.processed = true;\n        return this.stringify();\n      }\n      runOnRoot(plugin) {\n        this.result.lastPlugin = plugin;\n        try {\n          if (typeof plugin === 'object' && plugin.Once) {\n            if (this.result.root.type === 'document') {\n              let roots = this.result.root.nodes.map(root => plugin.Once(root, this.helpers));\n              if (isPromise(roots[0])) {\n                return Promise.all(roots);\n              }\n              return roots;\n            }\n            return plugin.Once(this.result.root, this.helpers);\n          } else if (typeof plugin === 'function') {\n            return plugin(this.result.root, this.result);\n          }\n        } catch (error) {\n          throw this.handleError(error);\n        }\n      }\n      stringify() {\n        if (this.error) throw this.error;\n        if (this.stringified) return this.result;\n        this.stringified = true;\n        this.sync();\n        let opts = this.result.opts;\n        let str = stringify;\n        if (opts.syntax) str = opts.syntax.stringify;\n        if (opts.stringifier) str = opts.stringifier;\n        if (str.stringify) str = str.stringify;\n        let rootSource = this.result.root.source;\n        if (opts.map === undefined && !(rootSource && rootSource.input && rootSource.input.map)) {\n          let result = '';\n          str(this.result.root, i => {\n            result += i;\n          });\n          this.result.css = result;\n          return this.result;\n        }\n        let map = new MapGenerator(str, this.result.root, this.result.opts);\n        let data = map.generate();\n        this.result.css = data[0];\n        this.result.map = data[1];\n        return this.result;\n      }\n      sync() {\n        if (this.error) throw this.error;\n        if (this.processed) return this.result;\n        this.processed = true;\n        if (this.processing) {\n          throw this.getAsyncError();\n        }\n        for (let plugin of this.plugins) {\n          let promise = this.runOnRoot(plugin);\n          if (isPromise(promise)) {\n            throw this.getAsyncError();\n          }\n        }\n        this.prepareVisitors();\n        if (this.hasListener) {\n          let root = this.result.root;\n          while (!root[isClean]) {\n            root[isClean] = true;\n            this.walkSync(root);\n          }\n          if (this.listeners.OnceExit) {\n            if (root.type === 'document') {\n              for (let subRoot of root.nodes) {\n                this.visitSync(this.listeners.OnceExit, subRoot);\n              }\n            } else {\n              this.visitSync(this.listeners.OnceExit, root);\n            }\n          }\n        }\n        return this.result;\n      }\n      then(onFulfilled, onRejected) {\n        if (process.env.NODE_ENV !== 'production') {\n          if (!('from' in this.opts)) {\n            warnOnce('Without `from` option PostCSS could generate wrong source map ' + 'and will not find Browserslist config. Set it to CSS file path ' + 'or to `undefined` to prevent this warning.');\n          }\n        }\n        return this.async().then(onFulfilled, onRejected);\n      }\n      toString() {\n        return this.css;\n      }\n      visitSync(visitors, node) {\n        for (let [plugin, visitor] of visitors) {\n          this.result.lastPlugin = plugin;\n          let promise;\n          try {\n            promise = visitor(node, this.helpers);\n          } catch (e) {\n            throw this.handleError(e, node.proxyOf);\n          }\n          if (node.type !== 'root' && node.type !== 'document' && !node.parent) {\n            return true;\n          }\n          if (isPromise(promise)) {\n            throw this.getAsyncError();\n          }\n        }\n      }\n      visitTick(stack) {\n        let visit = stack[stack.length - 1];\n        let {\n          node,\n          visitors\n        } = visit;\n        if (node.type !== 'root' && node.type !== 'document' && !node.parent) {\n          stack.pop();\n          return;\n        }\n        if (visitors.length > 0 && visit.visitorIndex < visitors.length) {\n          let [plugin, visitor] = visitors[visit.visitorIndex];\n          visit.visitorIndex += 1;\n          if (visit.visitorIndex === visitors.length) {\n            visit.visitors = [];\n            visit.visitorIndex = 0;\n          }\n          this.result.lastPlugin = plugin;\n          try {\n            return visitor(node.toProxy(), this.helpers);\n          } catch (e) {\n            throw this.handleError(e, node);\n          }\n        }\n        if (visit.iterator !== 0) {\n          let iterator = visit.iterator;\n          let child;\n          while (child = node.nodes[node.indexes[iterator]]) {\n            node.indexes[iterator] += 1;\n            if (!child[isClean]) {\n              child[isClean] = true;\n              stack.push(toStack(child));\n              return;\n            }\n          }\n          visit.iterator = 0;\n          delete node.indexes[iterator];\n        }\n        let events = visit.events;\n        while (visit.eventIndex < events.length) {\n          let event = events[visit.eventIndex];\n          visit.eventIndex += 1;\n          if (event === CHILDREN) {\n            if (node.nodes && node.nodes.length) {\n              node[isClean] = true;\n              visit.iterator = node.getIterator();\n            }\n            return;\n          } else if (this.listeners[event]) {\n            visit.visitors = this.listeners[event];\n            return;\n          }\n        }\n        stack.pop();\n      }\n      walkSync(node) {\n        node[isClean] = true;\n        let events = getEvents(node);\n        for (let event of events) {\n          if (event === CHILDREN) {\n            if (node.nodes) {\n              node.each(child => {\n                if (!child[isClean]) this.walkSync(child);\n              });\n            }\n          } else {\n            let visitors = this.listeners[event];\n            if (visitors) {\n              if (this.visitSync(visitors, node.toProxy())) return;\n            }\n          }\n        }\n      }\n      warnings() {\n        return this.sync().warnings();\n      }\n    }\n    LazyResult.registerPostcss = dependant => {\n      postcss = dependant;\n    };\n    return LazyResult;\n  })();\n  lazyResult = LazyResult;\n  LazyResult.default = LazyResult;\n  Root.registerLazyResult(LazyResult);\n  Document.registerLazyResult(LazyResult);\n  return lazyResult;\n}\nvar noWorkResult;\nvar hasRequiredNoWorkResult;\nfunction requireNoWorkResult() {\n  if (hasRequiredNoWorkResult) return noWorkResult;\n  hasRequiredNoWorkResult = 1;\n  let MapGenerator = requireMapGenerator();\n  let parse = requireParse();\n  let Result = requireResult();\n  let stringify = requireStringify();\n  let warnOnce = requireWarnOnce();\n  class NoWorkResult {\n    get content() {\n      return this.result.css;\n    }\n    get css() {\n      return this.result.css;\n    }\n    get map() {\n      return this.result.map;\n    }\n    get messages() {\n      return [];\n    }\n    get opts() {\n      return this.result.opts;\n    }\n    get processor() {\n      return this.result.processor;\n    }\n    get root() {\n      if (this._root) {\n        return this._root;\n      }\n      let root;\n      let parser = parse;\n      try {\n        root = parser(this._css, this._opts);\n      } catch (error) {\n        this.error = error;\n      }\n      if (this.error) {\n        throw this.error;\n      } else {\n        this._root = root;\n        return root;\n      }\n    }\n    get [Symbol.toStringTag]() {\n      return 'NoWorkResult';\n    }\n    constructor(processor, css, opts) {\n      css = css.toString();\n      this.stringified = false;\n      this._processor = processor;\n      this._css = css;\n      this._opts = opts;\n      this._map = undefined;\n      let str = stringify;\n      this.result = new Result(this._processor, undefined, this._opts);\n      this.result.css = css;\n      let self = this;\n      Object.defineProperty(this.result, 'root', {\n        get() {\n          return self.root;\n        }\n      });\n      let map = new MapGenerator(str, undefined, this._opts, css);\n      if (map.isMap()) {\n        let [generatedCSS, generatedMap] = map.generate();\n        if (generatedCSS) {\n          this.result.css = generatedCSS;\n        }\n        if (generatedMap) {\n          this.result.map = generatedMap;\n        }\n      } else {\n        map.clearAnnotation();\n        this.result.css = map.css;\n      }\n    }\n    async() {\n      if (this.error) return Promise.reject(this.error);\n      return Promise.resolve(this.result);\n    }\n    catch(onRejected) {\n      return this.async().catch(onRejected);\n    }\n    finally(onFinally) {\n      return this.async().then(onFinally, onFinally);\n    }\n    sync() {\n      if (this.error) throw this.error;\n      return this.result;\n    }\n    then(onFulfilled, onRejected) {\n      if (process.env.NODE_ENV !== 'production') {\n        if (!('from' in this._opts)) {\n          warnOnce('Without `from` option PostCSS could generate wrong source map ' + 'and will not find Browserslist config. Set it to CSS file path ' + 'or to `undefined` to prevent this warning.');\n        }\n      }\n      return this.async().then(onFulfilled, onRejected);\n    }\n    toString() {\n      return this._css;\n    }\n    warnings() {\n      return [];\n    }\n  }\n  noWorkResult = NoWorkResult;\n  NoWorkResult.default = NoWorkResult;\n  return noWorkResult;\n}\nvar processor;\nvar hasRequiredProcessor;\nfunction requireProcessor() {\n  if (hasRequiredProcessor) return processor;\n  hasRequiredProcessor = 1;\n  let Document = requireDocument();\n  let LazyResult = requireLazyResult();\n  let NoWorkResult = requireNoWorkResult();\n  let Root = requireRoot();\n  class Processor {\n    constructor(plugins = []) {\n      this.version = '8.5.12';\n      this.plugins = this.normalize(plugins);\n    }\n    normalize(plugins) {\n      let normalized = [];\n      for (let i of plugins) {\n        if (i.postcss === true) {\n          i = i();\n        } else if (i.postcss) {\n          i = i.postcss;\n        }\n        if (typeof i === 'object' && Array.isArray(i.plugins)) {\n          normalized = normalized.concat(i.plugins);\n        } else if (typeof i === 'object' && i.postcssPlugin) {\n          normalized.push(i);\n        } else if (typeof i === 'function') {\n          normalized.push(i);\n        } else if (typeof i === 'object' && (i.parse || i.stringify)) {\n          if (process.env.NODE_ENV !== 'production') {\n            throw new Error('PostCSS syntaxes cannot be used as plugins. Instead, please use ' + 'one of the syntax/parser/stringifier options as outlined ' + 'in your PostCSS runner documentation.');\n          }\n        } else {\n          throw new Error(i + ' is not a PostCSS plugin');\n        }\n      }\n      return normalized;\n    }\n    process(css, opts = {}) {\n      if (!this.plugins.length && !opts.parser && !opts.stringifier && !opts.syntax) {\n        return new NoWorkResult(this, css, opts);\n      } else {\n        return new LazyResult(this, css, opts);\n      }\n    }\n    use(plugin) {\n      this.plugins = this.plugins.concat(this.normalize([plugin]));\n      return this;\n    }\n  }\n  processor = Processor;\n  Processor.default = Processor;\n  Root.registerProcessor(Processor);\n  Document.registerProcessor(Processor);\n  return processor;\n}\nvar postcss_1;\nvar hasRequiredPostcss;\nfunction requirePostcss() {\n  if (hasRequiredPostcss) return postcss_1;\n  hasRequiredPostcss = 1;\n  let AtRule = requireAtRule();\n  let Comment = requireComment();\n  let Container = requireContainer$1();\n  let CssSyntaxError = requireCssSyntaxError();\n  let Declaration = requireDeclaration();\n  let Document = requireDocument();\n  let fromJSON = requireFromJSON();\n  let Input = requireInput();\n  let LazyResult = requireLazyResult();\n  let list = requireList();\n  let Node = requireNode$1();\n  let parse = requireParse();\n  let Processor = requireProcessor();\n  let Result = requireResult();\n  let Root = requireRoot();\n  let Rule = requireRule();\n  let stringify = requireStringify();\n  let Warning = requireWarning();\n  function postcss(...plugins) {\n    if (plugins.length === 1 && Array.isArray(plugins[0])) {\n      plugins = plugins[0];\n    }\n    return new Processor(plugins);\n  }\n  postcss.plugin = function plugin(name, initializer) {\n    let warningPrinted = false;\n    function creator(...args) {\n      // eslint-disable-next-line no-console\n      if (console && console.warn && !warningPrinted) {\n        warningPrinted = true;\n        // eslint-disable-next-line no-console\n        console.warn(name + ': postcss.plugin was deprecated. Migration guide:\\n' + 'https://evilmartians.com/chronicles/postcss-8-plugin-migration');\n        if (process.env.LANG && process.env.LANG.startsWith('cn')) {\n          /* c8 ignore next 7 */\n          // eslint-disable-next-line no-console\n          console.warn(name + ': 里面 postcss.plugin 被弃用. 迁移指南:\\n' + 'https://www.w3ctech.com/topic/2226');\n        }\n      }\n      let transformer = initializer(...args);\n      transformer.postcssPlugin = name;\n      transformer.postcssVersion = new Processor().version;\n      return transformer;\n    }\n    let cache;\n    Object.defineProperty(creator, 'postcss', {\n      get() {\n        if (!cache) cache = creator();\n        return cache;\n      }\n    });\n    creator.process = function (css, processOpts, pluginOpts) {\n      return postcss([creator(pluginOpts)]).process(css, processOpts);\n    };\n    return creator;\n  };\n  postcss.stringify = stringify;\n  postcss.parse = parse;\n  postcss.fromJSON = fromJSON;\n  postcss.list = list;\n  postcss.comment = defaults => new Comment(defaults);\n  postcss.atRule = defaults => new AtRule(defaults);\n  postcss.decl = defaults => new Declaration(defaults);\n  postcss.rule = defaults => new Rule(defaults);\n  postcss.root = defaults => new Root(defaults);\n  postcss.document = defaults => new Document(defaults);\n  postcss.CssSyntaxError = CssSyntaxError;\n  postcss.Declaration = Declaration;\n  postcss.Container = Container;\n  postcss.Processor = Processor;\n  postcss.Document = Document;\n  postcss.Comment = Comment;\n  postcss.Warning = Warning;\n  postcss.AtRule = AtRule;\n  postcss.Result = Result;\n  postcss.Input = Input;\n  postcss.Rule = Rule;\n  postcss.Root = Root;\n  postcss.Node = Node;\n  LazyResult.registerPostcss(postcss);\n  postcss_1 = postcss;\n  postcss.default = postcss;\n  return postcss_1;\n}\nvar postcssExports = /*#__PURE__*/requirePostcss();\nvar postcss = /*@__PURE__*/getDefaultExportFromCjs(postcssExports);\nconst stringify = postcss.stringify;\npostcss.fromJSON;\npostcss.plugin;\nconst parse$2 = postcss.parse;\npostcss.list;\npostcss.document;\npostcss.comment;\npostcss.atRule;\npostcss.rule;\npostcss.decl;\npostcss.root;\npostcss.CssSyntaxError;\npostcss.Declaration;\npostcss.Container;\npostcss.Processor;\npostcss.Document;\npostcss.Comment;\npostcss.Warning;\npostcss.AtRule;\npostcss.Result;\npostcss.Input;\npostcss.Rule;\npostcss.Root;\npostcss.Node;\nvar dist = {};\nvar Container = {};\nvar Node$1 = {};\nvar hasRequiredNode;\nfunction requireNode() {\n  if (hasRequiredNode) return Node$1;\n  hasRequiredNode = 1;\n  Object.defineProperty(Node$1, \"__esModule\", {\n    value: true\n  });\n  /**\r\n   * A very generic node. Pretty much any element of a media query\r\n   */\n\n  function Node(opts) {\n    this.after = opts.after;\n    this.before = opts.before;\n    this.type = opts.type;\n    this.value = opts.value;\n    this.sourceIndex = opts.sourceIndex;\n  }\n  Node$1.default = Node;\n  return Node$1;\n}\nvar hasRequiredContainer;\nfunction requireContainer() {\n  if (hasRequiredContainer) return Container;\n  hasRequiredContainer = 1;\n  Object.defineProperty(Container, \"__esModule\", {\n    value: true\n  });\n  var _Node = requireNode();\n  var _Node2 = _interopRequireDefault(_Node);\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n      default: obj\n    };\n  }\n  function Container$1(opts) {\n    var _this = this;\n    this.constructor(opts);\n    this.nodes = opts.nodes;\n    if (this.after === undefined) {\n      this.after = this.nodes.length > 0 ? this.nodes[this.nodes.length - 1].after : '';\n    }\n    if (this.before === undefined) {\n      this.before = this.nodes.length > 0 ? this.nodes[0].before : '';\n    }\n    if (this.sourceIndex === undefined) {\n      this.sourceIndex = this.before.length;\n    }\n    this.nodes.forEach(function (node) {\n      node.parent = _this; // eslint-disable-line no-param-reassign\n    });\n  } /**\r\n     * A node that contains other nodes and support traversing over them\r\n     */\n\n  Container$1.prototype = Object.create(_Node2.default.prototype);\n  Container$1.constructor = _Node2.default;\n\n  /**\r\n   * Iterate over descendant nodes of the node\r\n   *\r\n   * @param {RegExp|string} filter - Optional. Only nodes with node.type that\r\n   *    satisfies the filter will be traversed over\r\n   * @param {function} cb - callback to call on each node. Takes theese params:\r\n   *    node - the node being processed, i - it's index, nodes - the array\r\n   *    of all nodes\r\n   *    If false is returned, the iteration breaks\r\n   *\r\n   * @return (boolean) false, if the iteration was broken\r\n   */\n  Container$1.prototype.walk = function walk(filter, cb) {\n    var hasFilter = typeof filter === 'string' || filter instanceof RegExp;\n    var callback = hasFilter ? cb : filter;\n    var filterReg = typeof filter === 'string' ? new RegExp(filter) : filter;\n    for (var i = 0; i < this.nodes.length; i++) {\n      var node = this.nodes[i];\n      var filtered = hasFilter ? filterReg.test(node.type) : true;\n      if (filtered && callback && callback(node, i, this.nodes) === false) {\n        return false;\n      }\n      if (node.nodes && node.walk(filter, cb) === false) {\n        return false;\n      }\n    }\n    return true;\n  };\n\n  /**\r\n   * Iterate over immediate children of the node\r\n   *\r\n   * @param {function} cb - callback to call on each node. Takes theese params:\r\n   *    node - the node being processed, i - it's index, nodes - the array\r\n   *    of all nodes\r\n   *    If false is returned, the iteration breaks\r\n   *\r\n   * @return (boolean) false, if the iteration was broken\r\n   */\n  Container$1.prototype.each = function each() {\n    var cb = arguments.length <= 0 || arguments[0] === undefined ? function () {} : arguments[0];\n    for (var i = 0; i < this.nodes.length; i++) {\n      var node = this.nodes[i];\n      if (cb(node, i, this.nodes) === false) {\n        return false;\n      }\n    }\n    return true;\n  };\n  Container.default = Container$1;\n  return Container;\n}\nvar parsers = {};\nvar hasRequiredParsers;\nfunction requireParsers() {\n  if (hasRequiredParsers) return parsers;\n  hasRequiredParsers = 1;\n  Object.defineProperty(parsers, \"__esModule\", {\n    value: true\n  });\n  parsers.parseMediaFeature = parseMediaFeature;\n  parsers.parseMediaQuery = parseMediaQuery;\n  parsers.parseMediaList = parseMediaList;\n  var _Node = requireNode();\n  var _Node2 = _interopRequireDefault(_Node);\n  var _Container = requireContainer();\n  var _Container2 = _interopRequireDefault(_Container);\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n      default: obj\n    };\n  }\n\n  /**\r\n   * Parses a media feature expression, e.g. `max-width: 10px`, `(color)`\r\n   *\r\n   * @param {string} string - the source expression string, can be inside parens\r\n   * @param {Number} index - the index of `string` in the overall input\r\n   *\r\n   * @return {Array} an array of Nodes, the first element being a media feature,\r\n   *    the secont - its value (may be missing)\r\n   */\n\n  function parseMediaFeature(string) {\n    var index = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];\n    var modesEntered = [{\n      mode: 'normal',\n      character: null\n    }];\n    var result = [];\n    var lastModeIndex = 0;\n    var mediaFeature = '';\n    var colon = null;\n    var mediaFeatureValue = null;\n    var indexLocal = index;\n    var stringNormalized = string;\n    // Strip trailing parens (if any), and correct the starting index\n    if (string[0] === '(' && string[string.length - 1] === ')') {\n      stringNormalized = string.substring(1, string.length - 1);\n      indexLocal++;\n    }\n    for (var i = 0; i < stringNormalized.length; i++) {\n      var character = stringNormalized[i];\n\n      // If entering/exiting a string\n      if (character === '\\'' || character === '\"') {\n        if (modesEntered[lastModeIndex].isCalculationEnabled === true) {\n          modesEntered.push({\n            mode: 'string',\n            isCalculationEnabled: false,\n            character: character\n          });\n          lastModeIndex++;\n        } else if (modesEntered[lastModeIndex].mode === 'string' && modesEntered[lastModeIndex].character === character && stringNormalized[i - 1] !== '\\\\') {\n          modesEntered.pop();\n          lastModeIndex--;\n        }\n      }\n\n      // If entering/exiting interpolation\n      if (character === '{') {\n        modesEntered.push({\n          mode: 'interpolation',\n          isCalculationEnabled: true\n        });\n        lastModeIndex++;\n      } else if (character === '}') {\n        modesEntered.pop();\n        lastModeIndex--;\n      }\n\n      // If a : is met outside of a string, function call or interpolation, than\n      // this : separates a media feature and a value\n      if (modesEntered[lastModeIndex].mode === 'normal' && character === ':') {\n        var mediaFeatureValueStr = stringNormalized.substring(i + 1);\n        mediaFeatureValue = {\n          type: 'value',\n          before: /^(\\s*)/.exec(mediaFeatureValueStr)[1],\n          after: /(\\s*)$/.exec(mediaFeatureValueStr)[1],\n          value: mediaFeatureValueStr.trim()\n        };\n        // +1 for the colon\n        mediaFeatureValue.sourceIndex = mediaFeatureValue.before.length + i + 1 + indexLocal;\n        colon = {\n          type: 'colon',\n          sourceIndex: i + indexLocal,\n          after: mediaFeatureValue.before,\n          value: ':'\n        };\n        break;\n      }\n      mediaFeature += character;\n    }\n\n    // Forming a media feature node\n    mediaFeature = {\n      type: 'media-feature',\n      before: /^(\\s*)/.exec(mediaFeature)[1],\n      after: /(\\s*)$/.exec(mediaFeature)[1],\n      value: mediaFeature.trim()\n    };\n    mediaFeature.sourceIndex = mediaFeature.before.length + indexLocal;\n    result.push(mediaFeature);\n    if (colon !== null) {\n      colon.before = mediaFeature.after;\n      result.push(colon);\n    }\n    if (mediaFeatureValue !== null) {\n      result.push(mediaFeatureValue);\n    }\n    return result;\n  }\n\n  /**\r\n   * Parses a media query, e.g. `screen and (color)`, `only tv`\r\n   *\r\n   * @param {string} string - the source media query string\r\n   * @param {Number} index - the index of `string` in the overall input\r\n   *\r\n   * @return {Array} an array of Nodes and Containers\r\n   */\n\n  function parseMediaQuery(string) {\n    var index = arguments.length <= 1 || arguments[1] === undefined ? 0 : arguments[1];\n    var result = [];\n\n    // How many timies the parser entered parens/curly braces\n    var localLevel = 0;\n    // Has any keyword, media type, media feature expression or interpolation\n    // ('element' hereafter) started\n    var insideSomeValue = false;\n    var node = void 0;\n    function resetNode() {\n      return {\n        before: '',\n        after: '',\n        value: ''\n      };\n    }\n    node = resetNode();\n    for (var i = 0; i < string.length; i++) {\n      var character = string[i];\n      // If not yet entered any element\n      if (!insideSomeValue) {\n        if (character.search(/\\s/) !== -1) {\n          // A whitespace\n          // Don't form 'after' yet; will do it later\n          node.before += character;\n        } else {\n          // Not a whitespace - entering an element\n          // Expression start\n          if (character === '(') {\n            node.type = 'media-feature-expression';\n            localLevel++;\n          }\n          node.value = character;\n          node.sourceIndex = index + i;\n          insideSomeValue = true;\n        }\n      } else {\n        // Already in the middle of some alement\n        node.value += character;\n\n        // Here parens just increase localLevel and don't trigger a start of\n        // a media feature expression (since they can't be nested)\n        // Interpolation start\n        if (character === '{' || character === '(') {\n          localLevel++;\n        }\n        // Interpolation/function call/media feature expression end\n        if (character === ')' || character === '}') {\n          localLevel--;\n        }\n      }\n\n      // If exited all parens/curlies and the next symbol\n      if (insideSomeValue && localLevel === 0 && (character === ')' || i === string.length - 1 || string[i + 1].search(/\\s/) !== -1)) {\n        if (['not', 'only', 'and'].indexOf(node.value) !== -1) {\n          node.type = 'keyword';\n        }\n        // if it's an expression, parse its contents\n        if (node.type === 'media-feature-expression') {\n          node.nodes = parseMediaFeature(node.value, node.sourceIndex);\n        }\n        result.push(Array.isArray(node.nodes) ? new _Container2.default(node) : new _Node2.default(node));\n        node = resetNode();\n        insideSomeValue = false;\n      }\n    }\n\n    // Now process the result array - to specify undefined types of the nodes\n    // and specify the `after` prop\n    for (var _i = 0; _i < result.length; _i++) {\n      node = result[_i];\n      if (_i > 0) {\n        result[_i - 1].after = node.before;\n      }\n\n      // Node types. Might not be set because contains interpolation/function\n      // calls or fully consists of them\n      if (node.type === undefined) {\n        if (_i > 0) {\n          // only `and` can follow an expression\n          if (result[_i - 1].type === 'media-feature-expression') {\n            node.type = 'keyword';\n            continue;\n          }\n          // Anything after 'only|not' is a media type\n          if (result[_i - 1].value === 'not' || result[_i - 1].value === 'only') {\n            node.type = 'media-type';\n            continue;\n          }\n          // Anything after 'and' is an expression\n          if (result[_i - 1].value === 'and') {\n            node.type = 'media-feature-expression';\n            continue;\n          }\n          if (result[_i - 1].type === 'media-type') {\n            // if it is the last element - it might be an expression\n            // or 'and' depending on what is after it\n            if (!result[_i + 1]) {\n              node.type = 'media-feature-expression';\n            } else {\n              node.type = result[_i + 1].type === 'media-feature-expression' ? 'keyword' : 'media-feature-expression';\n            }\n          }\n        }\n        if (_i === 0) {\n          // `screen`, `fn( ... )`, `#{ ... }`. Not an expression, since then\n          // its type would have been set by now\n          if (!result[_i + 1]) {\n            node.type = 'media-type';\n            continue;\n          }\n\n          // `screen and` or `#{...} (max-width: 10px)`\n          if (result[_i + 1] && (result[_i + 1].type === 'media-feature-expression' || result[_i + 1].type === 'keyword')) {\n            node.type = 'media-type';\n            continue;\n          }\n          if (result[_i + 2]) {\n            // `screen and (color) ...`\n            if (result[_i + 2].type === 'media-feature-expression') {\n              node.type = 'media-type';\n              result[_i + 1].type = 'keyword';\n              continue;\n            }\n            // `only screen and ...`\n            if (result[_i + 2].type === 'keyword') {\n              node.type = 'keyword';\n              result[_i + 1].type = 'media-type';\n              continue;\n            }\n          }\n          if (result[_i + 3]) {\n            // `screen and (color) ...`\n            if (result[_i + 3].type === 'media-feature-expression') {\n              node.type = 'keyword';\n              result[_i + 1].type = 'media-type';\n              result[_i + 2].type = 'keyword';\n              continue;\n            }\n          }\n        }\n      }\n    }\n    return result;\n  }\n\n  /**\r\n   * Parses a media query list. Takes a possible `url()` at the start into\r\n   * account, and divides the list into media queries that are parsed separately\r\n   *\r\n   * @param {string} string - the source media query list string\r\n   *\r\n   * @return {Array} an array of Nodes/Containers\r\n   */\n\n  function parseMediaList(string) {\n    var result = [];\n    var interimIndex = 0;\n    var levelLocal = 0;\n\n    // Check for a `url(...)` part (if it is contents of an @import rule)\n    var doesHaveUrl = /^(\\s*)url\\s*\\(/.exec(string);\n    if (doesHaveUrl !== null) {\n      var i = doesHaveUrl[0].length;\n      var parenthesesLv = 1;\n      while (parenthesesLv > 0) {\n        var character = string[i];\n        if (character === '(') {\n          parenthesesLv++;\n        }\n        if (character === ')') {\n          parenthesesLv--;\n        }\n        i++;\n      }\n      result.unshift(new _Node2.default({\n        type: 'url',\n        value: string.substring(0, i).trim(),\n        sourceIndex: doesHaveUrl[1].length,\n        before: doesHaveUrl[1],\n        after: /^(\\s*)/.exec(string.substring(i))[1]\n      }));\n      interimIndex = i;\n    }\n\n    // Start processing the media query list\n    for (var _i2 = interimIndex; _i2 < string.length; _i2++) {\n      var _character = string[_i2];\n\n      // Dividing the media query list into comma-separated media queries\n      // Only count commas that are outside of any parens\n      // (i.e., not part of function call params list, etc.)\n      if (_character === '(') {\n        levelLocal++;\n      }\n      if (_character === ')') {\n        levelLocal--;\n      }\n      if (levelLocal === 0 && _character === ',') {\n        var _mediaQueryString = string.substring(interimIndex, _i2);\n        var _spaceBefore = /^(\\s*)/.exec(_mediaQueryString)[1];\n        result.push(new _Container2.default({\n          type: 'media-query',\n          value: _mediaQueryString.trim(),\n          sourceIndex: interimIndex + _spaceBefore.length,\n          nodes: parseMediaQuery(_mediaQueryString, interimIndex),\n          before: _spaceBefore,\n          after: /(\\s*)$/.exec(_mediaQueryString)[1]\n        }));\n        interimIndex = _i2 + 1;\n      }\n    }\n    var mediaQueryString = string.substring(interimIndex);\n    var spaceBefore = /^(\\s*)/.exec(mediaQueryString)[1];\n    result.push(new _Container2.default({\n      type: 'media-query',\n      value: mediaQueryString.trim(),\n      sourceIndex: interimIndex + spaceBefore.length,\n      nodes: parseMediaQuery(mediaQueryString, interimIndex),\n      before: spaceBefore,\n      after: /(\\s*)$/.exec(mediaQueryString)[1]\n    }));\n    return result;\n  }\n  return parsers;\n}\nvar hasRequiredDist;\nfunction requireDist() {\n  if (hasRequiredDist) return dist;\n  hasRequiredDist = 1;\n  Object.defineProperty(dist, \"__esModule\", {\n    value: true\n  });\n  dist.default = parseMedia;\n  var _Container = requireContainer();\n  var _Container2 = _interopRequireDefault(_Container);\n  var _parsers = requireParsers();\n  function _interopRequireDefault(obj) {\n    return obj && obj.__esModule ? obj : {\n      default: obj\n    };\n  }\n\n  /**\r\n   * Parses a media query list into an array of nodes. A typical node signature:\r\n   *  {string} node.type -- one of: 'media-query', 'media-type', 'keyword',\r\n   *    'media-feature-expression', 'media-feature', 'colon', 'value'\r\n   *  {string} node.value -- the contents of a particular element, trimmed\r\n   *    e.g.: `screen`, `max-width`, `1024px`\r\n   *  {string} node.after -- whitespaces that follow the element\r\n   *  {string} node.before -- whitespaces that precede the element\r\n   *  {string} node.sourceIndex -- the index of the element in a source media\r\n   *    query list, 0-based\r\n   *  {object} node.parent -- a link to the parent node (a container)\r\n   *\r\n   * Some nodes (media queries, media feature expressions) contain other nodes.\r\n   * They additionally have:\r\n   *  {array} node.nodes -- an array of nodes of the type described here\r\n   *  {funciton} node.each -- traverses direct children of the node, calling\r\n   *    a callback for each one\r\n   *  {funciton} node.walk -- traverses ALL descendants of the node, calling\r\n   *    a callback for each one\r\n   */\n\n  function parseMedia(value) {\n    return new _Container2.default({\n      nodes: (0, _parsers.parseMediaList)(value),\n      type: 'media-query-list',\n      value: value.trim()\n    });\n  }\n  return dist;\n}\nvar distExports = /*#__PURE__*/requireDist();\nvar mediaParser = /*@__PURE__*/getDefaultExportFromCjs(distExports);\nvar boolbase$1;\nvar hasRequiredBoolbase;\nfunction requireBoolbase() {\n  if (hasRequiredBoolbase) return boolbase$1;\n  hasRequiredBoolbase = 1;\n  boolbase$1 = {\n    trueFunc: function trueFunc() {\n      return true;\n    },\n    falseFunc: function falseFunc() {\n      return false;\n    }\n  };\n  return boolbase$1;\n}\nvar boolbaseExports = /*#__PURE__*/requireBoolbase();\nvar boolbase = /*@__PURE__*/getDefaultExportFromCjs(boolbaseExports);\nvar SelectorType = /*#__PURE__*/function (SelectorType) {\n  SelectorType[\"Attribute\"] = \"attribute\";\n  SelectorType[\"Pseudo\"] = \"pseudo\";\n  SelectorType[\"PseudoElement\"] = \"pseudo-element\";\n  SelectorType[\"Tag\"] = \"tag\";\n  SelectorType[\"Universal\"] = \"universal\";\n  // Traversals\n  SelectorType[\"Adjacent\"] = \"adjacent\";\n  SelectorType[\"Child\"] = \"child\";\n  SelectorType[\"Descendant\"] = \"descendant\";\n  SelectorType[\"Parent\"] = \"parent\";\n  SelectorType[\"Sibling\"] = \"sibling\";\n  SelectorType[\"ColumnCombinator\"] = \"column-combinator\";\n  return SelectorType;\n}(SelectorType || {});\nvar AttributeAction = /*#__PURE__*/function (AttributeAction) {\n  AttributeAction[\"Any\"] = \"any\";\n  AttributeAction[\"Element\"] = \"element\";\n  AttributeAction[\"End\"] = \"end\";\n  AttributeAction[\"Equals\"] = \"equals\";\n  AttributeAction[\"Exists\"] = \"exists\";\n  AttributeAction[\"Hyphen\"] = \"hyphen\";\n  AttributeAction[\"Not\"] = \"not\";\n  AttributeAction[\"Start\"] = \"start\";\n  return AttributeAction;\n}(AttributeAction || {});\nconst reName = /^[^#\\\\]?(?:\\\\(?:[\\da-f]{1,6}\\s?|.)|[\\w\\u00B0-\\uFFFF-])+/;\nconst reEscape = /\\\\([\\da-f]{1,6}\\s?|(\\s)|.)/gi;\nvar CharCode = /*#__PURE__*/function (CharCode) {\n  CharCode[CharCode[\"LeftParenthesis\"] = 40] = \"LeftParenthesis\";\n  CharCode[CharCode[\"RightParenthesis\"] = 41] = \"RightParenthesis\";\n  CharCode[CharCode[\"LeftSquareBracket\"] = 91] = \"LeftSquareBracket\";\n  CharCode[CharCode[\"RightSquareBracket\"] = 93] = \"RightSquareBracket\";\n  CharCode[CharCode[\"Comma\"] = 44] = \"Comma\";\n  CharCode[CharCode[\"Period\"] = 46] = \"Period\";\n  CharCode[CharCode[\"Colon\"] = 58] = \"Colon\";\n  CharCode[CharCode[\"SingleQuote\"] = 39] = \"SingleQuote\";\n  CharCode[CharCode[\"DoubleQuote\"] = 34] = \"DoubleQuote\";\n  CharCode[CharCode[\"Plus\"] = 43] = \"Plus\";\n  CharCode[CharCode[\"Tilde\"] = 126] = \"Tilde\";\n  CharCode[CharCode[\"QuestionMark\"] = 63] = \"QuestionMark\";\n  CharCode[CharCode[\"ExclamationMark\"] = 33] = \"ExclamationMark\";\n  CharCode[CharCode[\"Slash\"] = 47] = \"Slash\";\n  CharCode[CharCode[\"Equal\"] = 61] = \"Equal\";\n  CharCode[CharCode[\"Dollar\"] = 36] = \"Dollar\";\n  CharCode[CharCode[\"Pipe\"] = 124] = \"Pipe\";\n  CharCode[CharCode[\"Circumflex\"] = 94] = \"Circumflex\";\n  CharCode[CharCode[\"Asterisk\"] = 42] = \"Asterisk\";\n  CharCode[CharCode[\"GreaterThan\"] = 62] = \"GreaterThan\";\n  CharCode[CharCode[\"LessThan\"] = 60] = \"LessThan\";\n  CharCode[CharCode[\"Hash\"] = 35] = \"Hash\";\n  CharCode[CharCode[\"LowerI\"] = 105] = \"LowerI\";\n  CharCode[CharCode[\"LowerS\"] = 115] = \"LowerS\";\n  CharCode[CharCode[\"BackSlash\"] = 92] = \"BackSlash\";\n  // Whitespace\n  CharCode[CharCode[\"Space\"] = 32] = \"Space\";\n  CharCode[CharCode[\"Tab\"] = 9] = \"Tab\";\n  CharCode[CharCode[\"NewLine\"] = 10] = \"NewLine\";\n  CharCode[CharCode[\"FormFeed\"] = 12] = \"FormFeed\";\n  CharCode[CharCode[\"CarriageReturn\"] = 13] = \"CarriageReturn\";\n  return CharCode;\n}(CharCode || {});\nconst actionTypes = /*#__PURE__*/new Map([[CharCode.Tilde, AttributeAction.Element], [CharCode.Circumflex, AttributeAction.Start], [CharCode.Dollar, AttributeAction.End], [CharCode.Asterisk, AttributeAction.Any], [CharCode.ExclamationMark, AttributeAction.Not], [CharCode.Pipe, AttributeAction.Hyphen]]);\n// Pseudos, whose data property is parsed as well.\nconst unpackPseudos = /*#__PURE__*/new Set([\"has\", \"not\", \"matches\", \"is\", \"where\", \"host\", \"host-context\"]);\n/**\n * Pseudo elements defined in CSS Level 1 and CSS Level 2 can be written with\n * a single colon; eg. :before will turn into ::before.\n *\n * @see {@link https://www.w3.org/TR/2018/WD-selectors-4-20181121/#pseudo-element-syntax}\n */\nconst pseudosToPseudoElements = /*#__PURE__*/new Set([\"before\", \"after\", \"first-line\", \"first-letter\"]);\n/**\n * Checks whether a specific selector is a traversal.\n * This is useful eg. in swapping the order of elements that\n * are not traversals.\n *\n * @param selector Selector to check.\n */\nfunction isTraversal$1(selector) {\n  switch (selector.type) {\n    case SelectorType.Adjacent:\n    case SelectorType.Child:\n    case SelectorType.Descendant:\n    case SelectorType.Parent:\n    case SelectorType.Sibling:\n    case SelectorType.ColumnCombinator:\n      {\n        return true;\n      }\n    default:\n      {\n        return false;\n      }\n  }\n}\nconst stripQuotesFromPseudos = /*#__PURE__*/new Set([\"contains\", \"icontains\"]);\n// Unescape function taken from https://github.com/jquery/sizzle/blob/master/src/sizzle.js#L152\nfunction funescape(_, escaped, escapedWhitespace) {\n  const high = Number.parseInt(escaped, 16) - 65536;\n  // NaN means non-codepoint\n  return high !== high || escapedWhitespace ? escaped : high < 0 ?\n  // BMP codepoint\n  String.fromCharCode(high + 65536) :\n  // Supplemental Plane codepoint (surrogate pair)\n  String.fromCharCode(high >> 10 | 55296, high & 1023 | 56320);\n}\nfunction unescapeCSS(cssString) {\n  return cssString.replace(reEscape, funescape);\n}\nfunction isQuote(c) {\n  return c === CharCode.SingleQuote || c === CharCode.DoubleQuote;\n}\nfunction isWhitespace$1(c) {\n  return c === CharCode.Space || c === CharCode.Tab || c === CharCode.NewLine || c === CharCode.FormFeed || c === CharCode.CarriageReturn;\n}\n/**\n * Parses `selector`.\n *\n * @param selector Selector to parse.\n * @returns Returns a two-dimensional array.\n * The first dimension represents selectors separated by commas (eg. `sub1, sub2`),\n * the second contains the relevant tokens for that selector.\n */\nfunction parse$1(selector) {\n  const subselects = [];\n  const endIndex = parseSelector(subselects, `${selector}`, 0);\n  if (endIndex < selector.length) {\n    throw new Error(`Unmatched selector: ${selector.slice(endIndex)}`);\n  }\n  return subselects;\n}\nfunction parseSelector(subselects, selector, selectorIndex) {\n  let tokens = [];\n  function getName(offset) {\n    const match = selector.slice(selectorIndex + offset).match(reName);\n    if (!match) {\n      throw new Error(`Expected name, found ${selector.slice(selectorIndex)}`);\n    }\n    const [name] = match;\n    selectorIndex += offset + name.length;\n    return unescapeCSS(name);\n  }\n  function stripWhitespace(offset) {\n    selectorIndex += offset;\n    while (selectorIndex < selector.length && isWhitespace$1(selector.charCodeAt(selectorIndex))) {\n      selectorIndex++;\n    }\n  }\n  function readValueWithParenthesis() {\n    selectorIndex += 1;\n    const start = selectorIndex;\n    for (let counter = 1; selectorIndex < selector.length; selectorIndex++) {\n      switch (selector.charCodeAt(selectorIndex)) {\n        case CharCode.BackSlash:\n          {\n            // Skip next character\n            selectorIndex += 1;\n            break;\n          }\n        case CharCode.LeftParenthesis:\n          {\n            counter += 1;\n            break;\n          }\n        case CharCode.RightParenthesis:\n          {\n            counter -= 1;\n            if (counter === 0) {\n              return unescapeCSS(selector.slice(start, selectorIndex++));\n            }\n            break;\n          }\n      }\n    }\n    throw new Error(\"Parenthesis not matched\");\n  }\n  function ensureNotTraversal() {\n    if (tokens.length > 0 && isTraversal$1(tokens[tokens.length - 1])) {\n      throw new Error(\"Did not expect successive traversals.\");\n    }\n  }\n  function addTraversal(type) {\n    if (tokens.length > 0 && tokens[tokens.length - 1].type === SelectorType.Descendant) {\n      tokens[tokens.length - 1].type = type;\n      return;\n    }\n    ensureNotTraversal();\n    tokens.push({\n      type\n    });\n  }\n  function addSpecialAttribute(name, action) {\n    tokens.push({\n      type: SelectorType.Attribute,\n      name,\n      action,\n      value: getName(1),\n      namespace: null,\n      ignoreCase: \"quirks\"\n    });\n  }\n  /**\n   * We have finished parsing the current part of the selector.\n   *\n   * Remove descendant tokens at the end if they exist,\n   * and return the last index, so that parsing can be\n   * picked up from here.\n   */\n  function finalizeSubselector() {\n    if (tokens.length > 0 && tokens[tokens.length - 1].type === SelectorType.Descendant) {\n      tokens.pop();\n    }\n    if (tokens.length === 0) {\n      throw new Error(\"Empty sub-selector\");\n    }\n    subselects.push(tokens);\n  }\n  stripWhitespace(0);\n  if (selector.length === selectorIndex) {\n    return selectorIndex;\n  }\n  loop: while (selectorIndex < selector.length) {\n    const firstChar = selector.charCodeAt(selectorIndex);\n    switch (firstChar) {\n      // Whitespace\n      case CharCode.Space:\n      case CharCode.Tab:\n      case CharCode.NewLine:\n      case CharCode.FormFeed:\n      case CharCode.CarriageReturn:\n        {\n          if (tokens.length === 0 || tokens[0].type !== SelectorType.Descendant) {\n            ensureNotTraversal();\n            tokens.push({\n              type: SelectorType.Descendant\n            });\n          }\n          stripWhitespace(1);\n          break;\n        }\n      // Traversals\n      case CharCode.GreaterThan:\n        {\n          addTraversal(SelectorType.Child);\n          stripWhitespace(1);\n          break;\n        }\n      case CharCode.LessThan:\n        {\n          addTraversal(SelectorType.Parent);\n          stripWhitespace(1);\n          break;\n        }\n      case CharCode.Tilde:\n        {\n          addTraversal(SelectorType.Sibling);\n          stripWhitespace(1);\n          break;\n        }\n      case CharCode.Plus:\n        {\n          addTraversal(SelectorType.Adjacent);\n          stripWhitespace(1);\n          break;\n        }\n      // Special attribute selectors: .class, #id\n      case CharCode.Period:\n        {\n          addSpecialAttribute(\"class\", AttributeAction.Element);\n          break;\n        }\n      case CharCode.Hash:\n        {\n          addSpecialAttribute(\"id\", AttributeAction.Equals);\n          break;\n        }\n      case CharCode.LeftSquareBracket:\n        {\n          stripWhitespace(1);\n          // Determine attribute name and namespace\n          let name;\n          let namespace = null;\n          if (selector.charCodeAt(selectorIndex) === CharCode.Pipe) {\n            // Equivalent to no namespace\n            name = getName(1);\n          } else if (selector.startsWith(\"*|\", selectorIndex)) {\n            namespace = \"*\";\n            name = getName(2);\n          } else {\n            name = getName(0);\n            if (selector.charCodeAt(selectorIndex) === CharCode.Pipe && selector.charCodeAt(selectorIndex + 1) !== CharCode.Equal) {\n              namespace = name;\n              name = getName(1);\n            }\n          }\n          stripWhitespace(0);\n          // Determine comparison operation\n          let action = AttributeAction.Exists;\n          const possibleAction = actionTypes.get(selector.charCodeAt(selectorIndex));\n          if (possibleAction) {\n            action = possibleAction;\n            if (selector.charCodeAt(selectorIndex + 1) !== CharCode.Equal) {\n              throw new Error(\"Expected `=`\");\n            }\n            stripWhitespace(2);\n          } else if (selector.charCodeAt(selectorIndex) === CharCode.Equal) {\n            action = AttributeAction.Equals;\n            stripWhitespace(1);\n          }\n          // Determine value\n          let value = \"\";\n          let ignoreCase = null;\n          if (action !== \"exists\") {\n            if (isQuote(selector.charCodeAt(selectorIndex))) {\n              const quote = selector.charCodeAt(selectorIndex);\n              selectorIndex += 1;\n              const sectionStart = selectorIndex;\n              while (selectorIndex < selector.length && selector.charCodeAt(selectorIndex) !== quote) {\n                selectorIndex +=\n                // Skip next character if it is escaped\n                selector.charCodeAt(selectorIndex) === CharCode.BackSlash ? 2 : 1;\n              }\n              if (selector.charCodeAt(selectorIndex) !== quote) {\n                throw new Error(\"Attribute value didn't end\");\n              }\n              value = unescapeCSS(selector.slice(sectionStart, selectorIndex));\n              selectorIndex += 1;\n            } else {\n              const valueStart = selectorIndex;\n              while (selectorIndex < selector.length && !isWhitespace$1(selector.charCodeAt(selectorIndex)) && selector.charCodeAt(selectorIndex) !== CharCode.RightSquareBracket) {\n                selectorIndex +=\n                // Skip next character if it is escaped\n                selector.charCodeAt(selectorIndex) === CharCode.BackSlash ? 2 : 1;\n              }\n              value = unescapeCSS(selector.slice(valueStart, selectorIndex));\n            }\n            stripWhitespace(0);\n            // See if we have a force ignore flag\n            switch (selector.charCodeAt(selectorIndex) | 0x20) {\n              // If the forceIgnore flag is set (either `i` or `s`), use that value\n              case CharCode.LowerI:\n                {\n                  ignoreCase = true;\n                  stripWhitespace(1);\n                  break;\n                }\n              case CharCode.LowerS:\n                {\n                  ignoreCase = false;\n                  stripWhitespace(1);\n                  break;\n                }\n            }\n          }\n          if (selector.charCodeAt(selectorIndex) !== CharCode.RightSquareBracket) {\n            throw new Error(\"Attribute selector didn't terminate\");\n          }\n          selectorIndex += 1;\n          const attributeSelector = {\n            type: SelectorType.Attribute,\n            name,\n            action,\n            value,\n            namespace,\n            ignoreCase\n          };\n          tokens.push(attributeSelector);\n          break;\n        }\n      case CharCode.Colon:\n        {\n          if (selector.charCodeAt(selectorIndex + 1) === CharCode.Colon) {\n            tokens.push({\n              type: SelectorType.PseudoElement,\n              name: getName(2).toLowerCase(),\n              data: selector.charCodeAt(selectorIndex) === CharCode.LeftParenthesis ? readValueWithParenthesis() : null\n            });\n            break;\n          }\n          const name = getName(1).toLowerCase();\n          if (pseudosToPseudoElements.has(name)) {\n            tokens.push({\n              type: SelectorType.PseudoElement,\n              name,\n              data: null\n            });\n            break;\n          }\n          let data = null;\n          if (selector.charCodeAt(selectorIndex) === CharCode.LeftParenthesis) {\n            if (unpackPseudos.has(name)) {\n              if (isQuote(selector.charCodeAt(selectorIndex + 1))) {\n                throw new Error(`Pseudo-selector ${name} cannot be quoted`);\n              }\n              data = [];\n              selectorIndex = parseSelector(data, selector, selectorIndex + 1);\n              if (selector.charCodeAt(selectorIndex) !== CharCode.RightParenthesis) {\n                throw new Error(`Missing closing parenthesis in :${name} (${selector})`);\n              }\n              selectorIndex += 1;\n            } else {\n              data = readValueWithParenthesis();\n              if (stripQuotesFromPseudos.has(name)) {\n                const quot = data.charCodeAt(0);\n                if (quot === data.charCodeAt(data.length - 1) && isQuote(quot)) {\n                  data = data.slice(1, -1);\n                }\n              }\n              data = unescapeCSS(data);\n            }\n          }\n          tokens.push({\n            type: SelectorType.Pseudo,\n            name,\n            data\n          });\n          break;\n        }\n      case CharCode.Comma:\n        {\n          finalizeSubselector();\n          tokens = [];\n          stripWhitespace(1);\n          break;\n        }\n      default:\n        {\n          if (selector.startsWith(\"/*\", selectorIndex)) {\n            const endIndex = selector.indexOf(\"*/\", selectorIndex + 2);\n            if (endIndex < 0) {\n              throw new Error(\"Comment was not terminated\");\n            }\n            selectorIndex = endIndex + 2;\n            // Remove leading whitespace\n            if (tokens.length === 0) {\n              stripWhitespace(0);\n            }\n            break;\n          }\n          let namespace = null;\n          let name;\n          if (firstChar === CharCode.Asterisk) {\n            selectorIndex += 1;\n            name = \"*\";\n          } else if (firstChar === CharCode.Pipe) {\n            name = \"\";\n            if (selector.charCodeAt(selectorIndex + 1) === CharCode.Pipe) {\n              addTraversal(SelectorType.ColumnCombinator);\n              stripWhitespace(2);\n              break;\n            }\n          } else if (reName.test(selector.slice(selectorIndex))) {\n            name = getName(0);\n          } else {\n            break loop;\n          }\n          if (selector.charCodeAt(selectorIndex) === CharCode.Pipe && selector.charCodeAt(selectorIndex + 1) !== CharCode.Pipe) {\n            namespace = name;\n            if (selector.charCodeAt(selectorIndex + 1) === CharCode.Asterisk) {\n              name = \"*\";\n              selectorIndex += 2;\n            } else {\n              name = getName(1);\n            }\n          }\n          tokens.push(name === \"*\" ? {\n            type: SelectorType.Universal,\n            namespace\n          } : {\n            type: SelectorType.Tag,\n            name,\n            namespace\n          });\n        }\n    }\n  }\n  finalizeSubselector();\n  return selectorIndex;\n}\n\n/** Types of elements found in htmlparser2's DOM */\nvar ElementType = /*#__PURE__*/function (ElementType) {\n  /** Type for the root element of a document */\n  ElementType[\"Root\"] = \"root\";\n  /** Type for Text */\n  ElementType[\"Text\"] = \"text\";\n  /** Type for <? ... ?> */\n  ElementType[\"Directive\"] = \"directive\";\n  /** Type for <!-- ... --> */\n  ElementType[\"Comment\"] = \"comment\";\n  /** Type for <script> tags */\n  ElementType[\"Script\"] = \"script\";\n  /** Type for <style> tags */\n  ElementType[\"Style\"] = \"style\";\n  /** Type for Any tag */\n  ElementType[\"Tag\"] = \"tag\";\n  /** Type for <![CDATA[ ... ]]> */\n  ElementType[\"CDATA\"] = \"cdata\";\n  /** Type for <!doctype ...> */\n  ElementType[\"Doctype\"] = \"doctype\";\n  return ElementType;\n}(ElementType || {});\n/**\n * Tests whether an element is a tag or not.\n *\n * @param elem Element to test\n */\nfunction isTag$1(elem) {\n  return elem.type === ElementType.Tag || elem.type === ElementType.Script || elem.type === ElementType.Style;\n}\n// Exports for backwards compatibility\n/** Type for the root element of a document */\nconst Root = ElementType.Root;\n/** Type for Text */\nconst Text$1 = ElementType.Text;\n/** Type for <? ... ?> */\nconst Directive = ElementType.Directive;\n/** Type for <!-- ... --> */\nconst Comment$1 = ElementType.Comment;\n/** Type for <script> tags */\nconst Script = ElementType.Script;\n/** Type for <style> tags */\nconst Style = ElementType.Style;\n/** Type for Any tag */\nconst Tag = ElementType.Tag;\n/** Type for <![CDATA[ ... ]]> */\nconst CDATA$1 = ElementType.CDATA;\n/** Type for <!doctype ...> */\nconst Doctype = ElementType.Doctype;\n\n/**\n * This object will be used as the prototype for Nodes when creating a\n * DOM-Level-1-compliant structure.\n */\nclass Node {\n  constructor() {\n    /** Parent of the node */\n    this.parent = null;\n    /** Previous sibling */\n    this.prev = null;\n    /** Next sibling */\n    this.next = null;\n    /** The start index of the node. Requires `withStartIndices` on the handler to be `true. */\n    this.startIndex = null;\n    /** The end index of the node. Requires `withEndIndices` on the handler to be `true. */\n    this.endIndex = null;\n  }\n  // Read-write aliases for properties\n  /**\n   * Same as {@link parent}.\n   * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n   */\n  get parentNode() {\n    return this.parent;\n  }\n  set parentNode(parent) {\n    this.parent = parent;\n  }\n  /**\n   * Same as {@link prev}.\n   * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n   */\n  get previousSibling() {\n    return this.prev;\n  }\n  set previousSibling(prev) {\n    this.prev = prev;\n  }\n  /**\n   * Same as {@link next}.\n   * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n   */\n  get nextSibling() {\n    return this.next;\n  }\n  set nextSibling(next) {\n    this.next = next;\n  }\n  /**\n   * Clone this node, and optionally its children.\n   *\n   * @param recursive Clone child nodes as well.\n   * @returns A clone of the node.\n   */\n  cloneNode(recursive = false) {\n    return cloneNode(this, recursive);\n  }\n}\n/**\n * A node that contains some data.\n */\nclass DataNode extends Node {\n  /**\n   * @param data The content of the data node\n   */\n  constructor(data) {\n    super();\n    this.data = data;\n  }\n  /**\n   * Same as {@link data}.\n   * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n   */\n  get nodeValue() {\n    return this.data;\n  }\n  set nodeValue(data) {\n    this.data = data;\n  }\n}\n/**\n * Text within the document.\n */\nclass Text extends DataNode {\n  constructor() {\n    super(...arguments);\n    this.type = ElementType.Text;\n  }\n  get nodeType() {\n    return 3;\n  }\n}\n/**\n * Comments within the document.\n */\nclass Comment extends DataNode {\n  constructor() {\n    super(...arguments);\n    this.type = ElementType.Comment;\n  }\n  get nodeType() {\n    return 8;\n  }\n}\n/**\n * Processing instructions, including doc types.\n */\nclass ProcessingInstruction extends DataNode {\n  constructor(name, data) {\n    super(data);\n    this.name = name;\n    this.type = ElementType.Directive;\n  }\n  get nodeType() {\n    return 1;\n  }\n}\n/**\n * A `Node` that can have children.\n */\nclass NodeWithChildren extends Node {\n  /**\n   * @param children Children of the node. Only certain node types can have children.\n   */\n  constructor(children) {\n    super();\n    this.children = children;\n  }\n  // Aliases\n  /** First child of the node. */\n  get firstChild() {\n    var _a;\n    return (_a = this.children[0]) !== null && _a !== void 0 ? _a : null;\n  }\n  /** Last child of the node. */\n  get lastChild() {\n    return this.children.length > 0 ? this.children[this.children.length - 1] : null;\n  }\n  /**\n   * Same as {@link children}.\n   * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n   */\n  get childNodes() {\n    return this.children;\n  }\n  set childNodes(children) {\n    this.children = children;\n  }\n}\nclass CDATA extends NodeWithChildren {\n  constructor() {\n    super(...arguments);\n    this.type = ElementType.CDATA;\n  }\n  get nodeType() {\n    return 4;\n  }\n}\n/**\n * The root node of the document.\n */\nclass Document extends NodeWithChildren {\n  constructor() {\n    super(...arguments);\n    this.type = ElementType.Root;\n  }\n  get nodeType() {\n    return 9;\n  }\n}\n/**\n * An element within the DOM.\n */\nclass Element extends NodeWithChildren {\n  /**\n   * @param name Name of the tag, eg. `div`, `span`.\n   * @param attribs Object mapping attribute names to attribute values.\n   * @param children Children of the node.\n   */\n  constructor(name, attribs, children = [], type = name === \"script\" ? ElementType.Script : name === \"style\" ? ElementType.Style : ElementType.Tag) {\n    super(children);\n    this.name = name;\n    this.attribs = attribs;\n    this.type = type;\n  }\n  get nodeType() {\n    return 1;\n  }\n  // DOM Level 1 aliases\n  /**\n   * Same as {@link name}.\n   * [DOM spec](https://dom.spec.whatwg.org)-compatible alias.\n   */\n  get tagName() {\n    return this.name;\n  }\n  set tagName(name) {\n    this.name = name;\n  }\n  get attributes() {\n    return Object.keys(this.attribs).map(name => {\n      var _a, _b;\n      return {\n        name,\n        value: this.attribs[name],\n        namespace: (_a = this[\"x-attribsNamespace\"]) === null || _a === void 0 ? void 0 : _a[name],\n        prefix: (_b = this[\"x-attribsPrefix\"]) === null || _b === void 0 ? void 0 : _b[name]\n      };\n    });\n  }\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node is a `Element`, `false` otherwise.\n */\nfunction isTag(node) {\n  return isTag$1(node);\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `CDATA`, `false` otherwise.\n */\nfunction isCDATA(node) {\n  return node.type === ElementType.CDATA;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `Text`, `false` otherwise.\n */\nfunction isText(node) {\n  return node.type === ElementType.Text;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `Comment`, `false` otherwise.\n */\nfunction isComment(node) {\n  return node.type === ElementType.Comment;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.\n */\nfunction isDirective(node) {\n  return node.type === ElementType.Directive;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has the type `ProcessingInstruction`, `false` otherwise.\n */\nfunction isDocument(node) {\n  return node.type === ElementType.Root;\n}\n/**\n * @param node Node to check.\n * @returns `true` if the node has children, `false` otherwise.\n */\nfunction hasChildren(node) {\n  return Object.prototype.hasOwnProperty.call(node, \"children\");\n}\n/**\n * Clone a node, and optionally its children.\n *\n * @param recursive Clone child nodes as well.\n * @returns A clone of the node.\n */\nfunction cloneNode(node, recursive = false) {\n  let result;\n  if (isText(node)) {\n    result = new Text(node.data);\n  } else if (isComment(node)) {\n    result = new Comment(node.data);\n  } else if (isTag(node)) {\n    const children = recursive ? cloneChildren(node.children) : [];\n    const clone = new Element(node.name, {\n      ...node.attribs\n    }, children);\n    children.forEach(child => child.parent = clone);\n    if (node.namespace != null) {\n      clone.namespace = node.namespace;\n    }\n    if (node[\"x-attribsNamespace\"]) {\n      clone[\"x-attribsNamespace\"] = {\n        ...node[\"x-attribsNamespace\"]\n      };\n    }\n    if (node[\"x-attribsPrefix\"]) {\n      clone[\"x-attribsPrefix\"] = {\n        ...node[\"x-attribsPrefix\"]\n      };\n    }\n    result = clone;\n  } else if (isCDATA(node)) {\n    const children = recursive ? cloneChildren(node.children) : [];\n    const clone = new CDATA(children);\n    children.forEach(child => child.parent = clone);\n    result = clone;\n  } else if (isDocument(node)) {\n    const children = recursive ? cloneChildren(node.children) : [];\n    const clone = new Document(children);\n    children.forEach(child => child.parent = clone);\n    if (node[\"x-mode\"]) {\n      clone[\"x-mode\"] = node[\"x-mode\"];\n    }\n    result = clone;\n  } else if (isDirective(node)) {\n    const instruction = new ProcessingInstruction(node.name, node.data);\n    if (node[\"x-name\"] != null) {\n      instruction[\"x-name\"] = node[\"x-name\"];\n      instruction[\"x-publicId\"] = node[\"x-publicId\"];\n      instruction[\"x-systemId\"] = node[\"x-systemId\"];\n    }\n    result = instruction;\n  } else {\n    throw new Error(`Not implemented yet: ${node.type}`);\n  }\n  result.startIndex = node.startIndex;\n  result.endIndex = node.endIndex;\n  if (node.sourceCodeLocation != null) {\n    result.sourceCodeLocation = node.sourceCodeLocation;\n  }\n  return result;\n}\nfunction cloneChildren(childs) {\n  const children = childs.map(child => cloneNode(child, true));\n  for (let i = 1; i < children.length; i++) {\n    children[i].prev = children[i - 1];\n    children[i - 1].next = children[i];\n  }\n  return children;\n}\n\n// Default options\nconst defaultOpts = {\n  withStartIndices: false,\n  withEndIndices: false,\n  xmlMode: false\n};\nclass DomHandler {\n  /**\n   * @param callback Called once parsing has completed.\n   * @param options Settings for the handler.\n   * @param elementCB Callback whenever a tag is closed.\n   */\n  constructor(callback, options, elementCB) {\n    /** The elements of the DOM */\n    this.dom = [];\n    /** The root element for the DOM */\n    this.root = new Document(this.dom);\n    /** Indicated whether parsing has been completed. */\n    this.done = false;\n    /** Stack of open tags. */\n    this.tagStack = [this.root];\n    /** A data node that is still being written to. */\n    this.lastNode = null;\n    /** Reference to the parser instance. Used for location information. */\n    this.parser = null;\n    // Make it possible to skip arguments, for backwards-compatibility\n    if (typeof options === \"function\") {\n      elementCB = options;\n      options = defaultOpts;\n    }\n    if (typeof callback === \"object\") {\n      options = callback;\n      callback = undefined;\n    }\n    this.callback = callback !== null && callback !== void 0 ? callback : null;\n    this.options = options !== null && options !== void 0 ? options : defaultOpts;\n    this.elementCB = elementCB !== null && elementCB !== void 0 ? elementCB : null;\n  }\n  onparserinit(parser) {\n    this.parser = parser;\n  }\n  // Resets the handler back to starting state\n  onreset() {\n    this.dom = [];\n    this.root = new Document(this.dom);\n    this.done = false;\n    this.tagStack = [this.root];\n    this.lastNode = null;\n    this.parser = null;\n  }\n  // Signals the handler that parsing is done\n  onend() {\n    if (this.done) return;\n    this.done = true;\n    this.parser = null;\n    this.handleCallback(null);\n  }\n  onerror(error) {\n    this.handleCallback(error);\n  }\n  onclosetag() {\n    this.lastNode = null;\n    const elem = this.tagStack.pop();\n    if (this.options.withEndIndices) {\n      elem.endIndex = this.parser.endIndex;\n    }\n    if (this.elementCB) this.elementCB(elem);\n  }\n  onopentag(name, attribs) {\n    const type = this.options.xmlMode ? ElementType.Tag : undefined;\n    const element = new Element(name, attribs, undefined, type);\n    this.addNode(element);\n    this.tagStack.push(element);\n  }\n  ontext(data) {\n    const {\n      lastNode\n    } = this;\n    if (lastNode && lastNode.type === ElementType.Text) {\n      lastNode.data += data;\n      if (this.options.withEndIndices) {\n        lastNode.endIndex = this.parser.endIndex;\n      }\n    } else {\n      const node = new Text(data);\n      this.addNode(node);\n      this.lastNode = node;\n    }\n  }\n  oncomment(data) {\n    if (this.lastNode && this.lastNode.type === ElementType.Comment) {\n      this.lastNode.data += data;\n      return;\n    }\n    const node = new Comment(data);\n    this.addNode(node);\n    this.lastNode = node;\n  }\n  oncommentend() {\n    this.lastNode = null;\n  }\n  oncdatastart() {\n    const text = new Text(\"\");\n    const node = new CDATA([text]);\n    this.addNode(node);\n    text.parent = node;\n    this.lastNode = text;\n  }\n  oncdataend() {\n    this.lastNode = null;\n  }\n  onprocessinginstruction(name, data) {\n    const node = new ProcessingInstruction(name, data);\n    this.addNode(node);\n  }\n  handleCallback(error) {\n    if (typeof this.callback === \"function\") {\n      this.callback(error, this.dom);\n    } else if (error) {\n      throw error;\n    }\n  }\n  addNode(node) {\n    const parent = this.tagStack[this.tagStack.length - 1];\n    const previousSibling = parent.children[parent.children.length - 1];\n    if (this.options.withStartIndices) {\n      node.startIndex = this.parser.startIndex;\n    }\n    if (this.options.withEndIndices) {\n      node.endIndex = this.parser.endIndex;\n    }\n    parent.children.push(node);\n    if (previousSibling) {\n      node.prev = previousSibling;\n      previousSibling.next = node;\n    }\n    node.parent = parent;\n    this.lastNode = null;\n  }\n}\nconst xmlReplacer = /[\"&'<>$\\x80-\\uFFFF]/g;\nconst xmlCodeMap = /*#__PURE__*/new Map([[34, \"&quot;\"], [38, \"&amp;\"], [39, \"&apos;\"], [60, \"&lt;\"], [62, \"&gt;\"]]);\n// For compatibility with node < 4, we wrap `codePointAt`\nconst getCodePoint =\n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition\nString.prototype.codePointAt != null ? (str, index) => str.codePointAt(index) :\n// http://mathiasbynens.be/notes/javascript-encoding#surrogate-formulae\n(c, index) => (c.charCodeAt(index) & 0xfc00) === 0xd800 ? (c.charCodeAt(index) - 0xd800) * 0x400 + c.charCodeAt(index + 1) - 0xdc00 + 0x10000 : c.charCodeAt(index);\n/**\n * Encodes all non-ASCII characters, as well as characters not valid in XML\n * documents using XML entities.\n *\n * If a character has no equivalent entity, a\n * numeric hexadecimal reference (eg. `&#xfc;`) will be used.\n */\nfunction encodeXML(str) {\n  let ret = \"\";\n  let lastIdx = 0;\n  let match;\n  while ((match = xmlReplacer.exec(str)) !== null) {\n    const i = match.index;\n    const char = str.charCodeAt(i);\n    const next = xmlCodeMap.get(char);\n    if (next !== undefined) {\n      ret += str.substring(lastIdx, i) + next;\n      lastIdx = i + 1;\n    } else {\n      ret += `${str.substring(lastIdx, i)}&#x${getCodePoint(str, i).toString(16)};`;\n      // Increase by 1 if we have a surrogate pair\n      lastIdx = xmlReplacer.lastIndex += Number((char & 0xfc00) === 0xd800);\n    }\n  }\n  return ret + str.substr(lastIdx);\n}\n/**\n * Creates a function that escapes all characters matched by the given regular\n * expression using the given map of characters to escape to their entities.\n *\n * @param regex Regular expression to match characters to escape.\n * @param map Map of characters to escape to their entities.\n *\n * @returns Function that escapes all characters matched by the given regular\n * expression using the given map of characters to escape to their entities.\n */\nfunction getEscaper(regex, map) {\n  return function escape(data) {\n    let match;\n    let lastIdx = 0;\n    let result = \"\";\n    while (match = regex.exec(data)) {\n      if (lastIdx !== match.index) {\n        result += data.substring(lastIdx, match.index);\n      }\n      // We know that this character will be in the map.\n      result += map.get(match[0].charCodeAt(0));\n      // Every match will be of length 1\n      lastIdx = match.index + 1;\n    }\n    return result + data.substring(lastIdx);\n  };\n}\n/**\n * Encodes all characters that have to be escaped in HTML attributes,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n *\n * @param data String to escape.\n */\nconst escapeAttribute = /*#__PURE__*/getEscaper(/[\"&\\u00A0]/g, /*#__PURE__*/new Map([[34, \"&quot;\"], [38, \"&amp;\"], [160, \"&nbsp;\"]]));\n/**\n * Encodes all characters that have to be escaped in HTML text,\n * following {@link https://html.spec.whatwg.org/multipage/parsing.html#escapingString}.\n *\n * @param data String to escape.\n */\nconst escapeText = /*#__PURE__*/getEscaper(/[&<>\\u00A0]/g, /*#__PURE__*/new Map([[38, \"&amp;\"], [60, \"&lt;\"], [62, \"&gt;\"], [160, \"&nbsp;\"]]));\nconst elementNames = /*#__PURE__*/new Map(/*#__PURE__*/[\"altGlyph\", \"altGlyphDef\", \"altGlyphItem\", \"animateColor\", \"animateMotion\", \"animateTransform\", \"clipPath\", \"feBlend\", \"feColorMatrix\", \"feComponentTransfer\", \"feComposite\", \"feConvolveMatrix\", \"feDiffuseLighting\", \"feDisplacementMap\", \"feDistantLight\", \"feDropShadow\", \"feFlood\", \"feFuncA\", \"feFuncB\", \"feFuncG\", \"feFuncR\", \"feGaussianBlur\", \"feImage\", \"feMerge\", \"feMergeNode\", \"feMorphology\", \"feOffset\", \"fePointLight\", \"feSpecularLighting\", \"feSpotLight\", \"feTile\", \"feTurbulence\", \"foreignObject\", \"glyphRef\", \"linearGradient\", \"radialGradient\", \"textPath\"].map(val => [val.toLowerCase(), val]));\nconst attributeNames = /*#__PURE__*/new Map(/*#__PURE__*/[\"definitionURL\", \"attributeName\", \"attributeType\", \"baseFrequency\", \"baseProfile\", \"calcMode\", \"clipPathUnits\", \"diffuseConstant\", \"edgeMode\", \"filterUnits\", \"glyphRef\", \"gradientTransform\", \"gradientUnits\", \"kernelMatrix\", \"kernelUnitLength\", \"keyPoints\", \"keySplines\", \"keyTimes\", \"lengthAdjust\", \"limitingConeAngle\", \"markerHeight\", \"markerUnits\", \"markerWidth\", \"maskContentUnits\", \"maskUnits\", \"numOctaves\", \"pathLength\", \"patternContentUnits\", \"patternTransform\", \"patternUnits\", \"pointsAtX\", \"pointsAtY\", \"pointsAtZ\", \"preserveAlpha\", \"preserveAspectRatio\", \"primitiveUnits\", \"refX\", \"refY\", \"repeatCount\", \"repeatDur\", \"requiredExtensions\", \"requiredFeatures\", \"specularConstant\", \"specularExponent\", \"spreadMethod\", \"startOffset\", \"stdDeviation\", \"stitchTiles\", \"surfaceScale\", \"systemLanguage\", \"tableValues\", \"targetX\", \"targetY\", \"textLength\", \"viewBox\", \"viewTarget\", \"xChannelSelector\", \"yChannelSelector\", \"zoomAndPan\"].map(val => [val.toLowerCase(), val]));\n\n/*\n * Module dependencies\n */\nconst unencodedElements = /*#__PURE__*/new Set([\"style\", \"script\", \"xmp\", \"iframe\", \"noembed\", \"noframes\", \"plaintext\", \"noscript\"]);\nfunction replaceQuotes(value) {\n  return value.replace(/\"/g, \"&quot;\");\n}\n/**\n * Format attributes\n */\nfunction formatAttributes(attributes, opts) {\n  var _a;\n  if (!attributes) return;\n  const encode = ((_a = opts.encodeEntities) !== null && _a !== void 0 ? _a : opts.decodeEntities) === false ? replaceQuotes : opts.xmlMode || opts.encodeEntities !== \"utf8\" ? encodeXML : escapeAttribute;\n  return Object.keys(attributes).map(key => {\n    var _a, _b;\n    const value = (_a = attributes[key]) !== null && _a !== void 0 ? _a : \"\";\n    if (opts.xmlMode === \"foreign\") {\n      /* Fix up mixed-case attribute names */\n      key = (_b = attributeNames.get(key)) !== null && _b !== void 0 ? _b : key;\n    }\n    if (!opts.emptyAttrs && !opts.xmlMode && value === \"\") {\n      return key;\n    }\n    return `${key}=\"${encode(value)}\"`;\n  }).join(\" \");\n}\n/**\n * Self-enclosing tags\n */\nconst singleTag = /*#__PURE__*/new Set([\"area\", \"base\", \"basefont\", \"br\", \"col\", \"command\", \"embed\", \"frame\", \"hr\", \"img\", \"input\", \"isindex\", \"keygen\", \"link\", \"meta\", \"param\", \"source\", \"track\", \"wbr\"]);\n/**\n * Renders a DOM node or an array of DOM nodes to a string.\n *\n * Can be thought of as the equivalent of the `outerHTML` of the passed node(s).\n *\n * @param node Node to be rendered.\n * @param options Changes serialization behavior\n */\nfunction render(node, options = {}) {\n  const nodes = \"length\" in node ? node : [node];\n  let output = \"\";\n  for (let i = 0; i < nodes.length; i++) {\n    output += renderNode(nodes[i], options);\n  }\n  return output;\n}\nfunction renderNode(node, options) {\n  switch (node.type) {\n    case Root:\n      return render(node.children, options);\n    // @ts-expect-error We don't use `Doctype` yet\n    case Doctype:\n    case Directive:\n      return renderDirective(node);\n    case Comment$1:\n      return renderComment(node);\n    case CDATA$1:\n      return renderCdata(node);\n    case Script:\n    case Style:\n    case Tag:\n      return renderTag(node, options);\n    case Text$1:\n      return renderText(node, options);\n  }\n}\nconst foreignModeIntegrationPoints = /*#__PURE__*/new Set([\"mi\", \"mo\", \"mn\", \"ms\", \"mtext\", \"annotation-xml\", \"foreignObject\", \"desc\", \"title\"]);\nconst foreignElements = /*#__PURE__*/new Set([\"svg\", \"math\"]);\nfunction renderTag(elem, opts) {\n  var _a;\n  // Handle SVG / MathML in HTML\n  if (opts.xmlMode === \"foreign\") {\n    /* Fix up mixed-case element names */\n    elem.name = (_a = elementNames.get(elem.name)) !== null && _a !== void 0 ? _a : elem.name;\n    /* Exit foreign mode at integration points */\n    if (elem.parent && foreignModeIntegrationPoints.has(elem.parent.name)) {\n      opts = {\n        ...opts,\n        xmlMode: false\n      };\n    }\n  }\n  if (!opts.xmlMode && foreignElements.has(elem.name)) {\n    opts = {\n      ...opts,\n      xmlMode: \"foreign\"\n    };\n  }\n  let tag = `<${elem.name}`;\n  const attribs = formatAttributes(elem.attribs, opts);\n  if (attribs) {\n    tag += ` ${attribs}`;\n  }\n  if (elem.children.length === 0 && (opts.xmlMode ?\n  // In XML mode or foreign mode, and user hasn't explicitly turned off self-closing tags\n  opts.selfClosingTags !== false :\n  // User explicitly asked for self-closing tags, even in HTML mode\n  opts.selfClosingTags && singleTag.has(elem.name))) {\n    if (!opts.xmlMode) tag += \" \";\n    tag += \"/>\";\n  } else {\n    tag += \">\";\n    if (elem.children.length > 0) {\n      tag += render(elem.children, opts);\n    }\n    if (opts.xmlMode || !singleTag.has(elem.name)) {\n      tag += `</${elem.name}>`;\n    }\n  }\n  return tag;\n}\nfunction renderDirective(elem) {\n  return `<${elem.data}>`;\n}\nfunction renderText(elem, opts) {\n  var _a;\n  let data = elem.data || \"\";\n  // If entities weren't decoded, no need to encode them back\n  if (((_a = opts.encodeEntities) !== null && _a !== void 0 ? _a : opts.decodeEntities) !== false && !(!opts.xmlMode && elem.parent && unencodedElements.has(elem.parent.name))) {\n    data = opts.xmlMode || opts.encodeEntities !== \"utf8\" ? encodeXML(data) : escapeText(data);\n  }\n  return data;\n}\nfunction renderCdata(elem) {\n  return `<![CDATA[${elem.children[0].data}]]>`;\n}\nfunction renderComment(elem) {\n  return `<!--${elem.data}-->`;\n}\n\n/**\n * @category Stringify\n * @deprecated Use the `dom-serializer` module directly.\n * @param node Node to get the outer HTML of.\n * @param options Options for serialization.\n * @returns `node`'s outer HTML.\n */\nfunction getOuterHTML(node, options) {\n  return render(node, options);\n}\n/**\n * @category Stringify\n * @deprecated Use the `dom-serializer` module directly.\n * @param node Node to get the inner HTML of.\n * @param options Options for serialization.\n * @returns `node`'s inner HTML.\n */\nfunction getInnerHTML(node, options) {\n  return hasChildren(node) ? node.children.map(node => getOuterHTML(node, options)).join(\"\") : \"\";\n}\n/**\n * Get a node's inner text. Same as `textContent`, but inserts newlines for `<br>` tags. Ignores comments.\n *\n * @category Stringify\n * @deprecated Use `textContent` instead.\n * @param node Node to get the inner text of.\n * @returns `node`'s inner text.\n */\nfunction getText(node) {\n  if (Array.isArray(node)) return node.map(getText).join(\"\");\n  if (isTag(node)) return node.name === \"br\" ? \"\\n\" : getText(node.children);\n  if (isCDATA(node)) return getText(node.children);\n  if (isText(node)) return node.data;\n  return \"\";\n}\n/**\n * Get a node's text content. Ignores comments.\n *\n * @category Stringify\n * @param node Node to get the text content of.\n * @returns `node`'s text content.\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Node/textContent}\n */\nfunction textContent(node) {\n  if (Array.isArray(node)) return node.map(textContent).join(\"\");\n  if (hasChildren(node) && !isComment(node)) {\n    return textContent(node.children);\n  }\n  if (isText(node)) return node.data;\n  return \"\";\n}\n/**\n * Get a node's inner text, ignoring `<script>` and `<style>` tags. Ignores comments.\n *\n * @category Stringify\n * @param node Node to get the inner text of.\n * @returns `node`'s inner text.\n * @see {@link https://developer.mozilla.org/en-US/docs/Web/API/Node/innerText}\n */\nfunction innerText(node) {\n  if (Array.isArray(node)) return node.map(innerText).join(\"\");\n  if (hasChildren(node) && (node.type === ElementType.Tag || isCDATA(node))) {\n    return innerText(node.children);\n  }\n  if (isText(node)) return node.data;\n  return \"\";\n}\n\n/**\n * Get a node's children.\n *\n * @category Traversal\n * @param elem Node to get the children of.\n * @returns `elem`'s children, or an empty array.\n */\nfunction getChildren(elem) {\n  return hasChildren(elem) ? elem.children : [];\n}\n/**\n * Get a node's parent.\n *\n * @category Traversal\n * @param elem Node to get the parent of.\n * @returns `elem`'s parent node, or `null` if `elem` is a root node.\n */\nfunction getParent(elem) {\n  return elem.parent || null;\n}\n/**\n * Gets an elements siblings, including the element itself.\n *\n * Attempts to get the children through the element's parent first. If we don't\n * have a parent (the element is a root node), we walk the element's `prev` &\n * `next` to get all remaining nodes.\n *\n * @category Traversal\n * @param elem Element to get the siblings of.\n * @returns `elem`'s siblings, including `elem`.\n */\nfunction getSiblings(elem) {\n  const parent = getParent(elem);\n  if (parent != null) return getChildren(parent);\n  const siblings = [elem];\n  let {\n    prev,\n    next\n  } = elem;\n  while (prev != null) {\n    siblings.unshift(prev);\n    ({\n      prev\n    } = prev);\n  }\n  while (next != null) {\n    siblings.push(next);\n    ({\n      next\n    } = next);\n  }\n  return siblings;\n}\n/**\n * Gets an attribute from an element.\n *\n * @category Traversal\n * @param elem Element to check.\n * @param name Attribute name to retrieve.\n * @returns The element's attribute value, or `undefined`.\n */\nfunction getAttributeValue(elem, name) {\n  var _a;\n  return (_a = elem.attribs) === null || _a === void 0 ? void 0 : _a[name];\n}\n/**\n * Checks whether an element has an attribute.\n *\n * @category Traversal\n * @param elem Element to check.\n * @param name Attribute name to look for.\n * @returns Returns whether `elem` has the attribute `name`.\n */\nfunction hasAttrib(elem, name) {\n  return elem.attribs != null && Object.prototype.hasOwnProperty.call(elem.attribs, name) && elem.attribs[name] != null;\n}\n/**\n * Get the tag name of an element.\n *\n * @category Traversal\n * @param elem The element to get the name for.\n * @returns The tag name of `elem`.\n */\nfunction getName(elem) {\n  return elem.name;\n}\n/**\n * Returns the next element sibling of a node.\n *\n * @category Traversal\n * @param elem The element to get the next sibling of.\n * @returns `elem`'s next sibling that is a tag, or `null` if there is no next\n * sibling.\n */\nfunction nextElementSibling(elem) {\n  let {\n    next\n  } = elem;\n  while (next !== null && !isTag(next)) ({\n    next\n  } = next);\n  return next;\n}\n/**\n * Returns the previous element sibling of a node.\n *\n * @category Traversal\n * @param elem The element to get the previous sibling of.\n * @returns `elem`'s previous sibling that is a tag, or `null` if there is no\n * previous sibling.\n */\nfunction prevElementSibling(elem) {\n  let {\n    prev\n  } = elem;\n  while (prev !== null && !isTag(prev)) ({\n    prev\n  } = prev);\n  return prev;\n}\n\n/**\n * Remove an element from the dom\n *\n * @category Manipulation\n * @param elem The element to be removed\n */\nfunction removeElement(elem) {\n  if (elem.prev) elem.prev.next = elem.next;\n  if (elem.next) elem.next.prev = elem.prev;\n  if (elem.parent) {\n    const childs = elem.parent.children;\n    const childsIndex = childs.lastIndexOf(elem);\n    if (childsIndex >= 0) {\n      childs.splice(childsIndex, 1);\n    }\n  }\n  elem.next = null;\n  elem.prev = null;\n  elem.parent = null;\n}\n/**\n * Replace an element in the dom\n *\n * @category Manipulation\n * @param elem The element to be replaced\n * @param replacement The element to be added\n */\nfunction replaceElement(elem, replacement) {\n  const prev = replacement.prev = elem.prev;\n  if (prev) {\n    prev.next = replacement;\n  }\n  const next = replacement.next = elem.next;\n  if (next) {\n    next.prev = replacement;\n  }\n  const parent = replacement.parent = elem.parent;\n  if (parent) {\n    const childs = parent.children;\n    childs[childs.lastIndexOf(elem)] = replacement;\n    elem.parent = null;\n  }\n}\n/**\n * Append a child to an element.\n *\n * @category Manipulation\n * @param parent The element to append to.\n * @param child The element to be added as a child.\n */\nfunction appendChild(parent, child) {\n  removeElement(child);\n  child.next = null;\n  child.parent = parent;\n  if (parent.children.push(child) > 1) {\n    const sibling = parent.children[parent.children.length - 2];\n    sibling.next = child;\n    child.prev = sibling;\n  } else {\n    child.prev = null;\n  }\n}\n/**\n * Append an element after another.\n *\n * @category Manipulation\n * @param elem The element to append after.\n * @param next The element be added.\n */\nfunction append(elem, next) {\n  removeElement(next);\n  const {\n    parent\n  } = elem;\n  const currNext = elem.next;\n  next.next = currNext;\n  next.prev = elem;\n  elem.next = next;\n  next.parent = parent;\n  if (currNext) {\n    currNext.prev = next;\n    if (parent) {\n      const childs = parent.children;\n      childs.splice(childs.lastIndexOf(currNext), 0, next);\n    }\n  } else if (parent) {\n    parent.children.push(next);\n  }\n}\n/**\n * Prepend a child to an element.\n *\n * @category Manipulation\n * @param parent The element to prepend before.\n * @param child The element to be added as a child.\n */\nfunction prependChild(parent, child) {\n  removeElement(child);\n  child.parent = parent;\n  child.prev = null;\n  if (parent.children.unshift(child) !== 1) {\n    const sibling = parent.children[1];\n    sibling.prev = child;\n    child.next = sibling;\n  } else {\n    child.next = null;\n  }\n}\n/**\n * Prepend an element before another.\n *\n * @category Manipulation\n * @param elem The element to prepend before.\n * @param prev The element be added.\n */\nfunction prepend(elem, prev) {\n  removeElement(prev);\n  const {\n    parent\n  } = elem;\n  if (parent) {\n    const childs = parent.children;\n    childs.splice(childs.indexOf(elem), 0, prev);\n  }\n  if (elem.prev) {\n    elem.prev.next = prev;\n  }\n  prev.parent = parent;\n  prev.prev = elem.prev;\n  prev.next = elem;\n  elem.prev = prev;\n}\n\n/**\n * Search a node and its children for nodes passing a test function. If `node` is not an array, it will be wrapped in one.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param node Node to search. Will be included in the result set if it matches.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes passing `test`.\n */\nfunction filter(test, node, recurse = true, limit = Infinity) {\n  return find(test, Array.isArray(node) ? node : [node], recurse, limit);\n}\n/**\n * Search an array of nodes and their children for nodes passing a test function.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Array of nodes to search.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes passing `test`.\n */\nfunction find(test, nodes, recurse, limit) {\n  const result = [];\n  /** Stack of the arrays we are looking at. */\n  const nodeStack = [Array.isArray(nodes) ? nodes : [nodes]];\n  /** Stack of the indices within the arrays. */\n  const indexStack = [0];\n  for (;;) {\n    // First, check if the current array has any more elements to look at.\n    if (indexStack[0] >= nodeStack[0].length) {\n      // If we have no more arrays to look at, we are done.\n      if (indexStack.length === 1) {\n        return result;\n      }\n      // Otherwise, remove the current array from the stack.\n      nodeStack.shift();\n      indexStack.shift();\n      // Loop back to the start to continue with the next array.\n      continue;\n    }\n    const elem = nodeStack[0][indexStack[0]++];\n    if (test(elem)) {\n      result.push(elem);\n      if (--limit <= 0) return result;\n    }\n    if (recurse && hasChildren(elem) && elem.children.length > 0) {\n      /*\n       * Add the children to the stack. We are depth-first, so this is\n       * the next array we look at.\n       */\n      indexStack.unshift(0);\n      nodeStack.unshift(elem.children);\n    }\n  }\n}\n/**\n * Finds the first element inside of an array that matches a test function. This is an alias for `Array.prototype.find`.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Array of nodes to search.\n * @returns The first node in the array that passes `test`.\n * @deprecated Use `Array.prototype.find` directly.\n */\nfunction findOneChild(test, nodes) {\n  return nodes.find(test);\n}\n/**\n * Finds one element in a tree that passes a test.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Node or array of nodes to search.\n * @param recurse Also consider child nodes.\n * @returns The first node that passes `test`.\n */\nfunction findOne$1(test, nodes, recurse = true) {\n  const searchedNodes = Array.isArray(nodes) ? nodes : [nodes];\n  for (let i = 0; i < searchedNodes.length; i++) {\n    const node = searchedNodes[i];\n    if (isTag(node) && test(node)) {\n      return node;\n    }\n    if (recurse && hasChildren(node) && node.children.length > 0) {\n      const found = findOne$1(test, node.children, true);\n      if (found) return found;\n    }\n  }\n  return null;\n}\n/**\n * Checks if a tree of nodes contains at least one node passing a test.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Array of nodes to search.\n * @returns Whether a tree of nodes contains at least one node passing the test.\n */\nfunction existsOne(test, nodes) {\n  return (Array.isArray(nodes) ? nodes : [nodes]).some(node => isTag(node) && test(node) || hasChildren(node) && existsOne(test, node.children));\n}\n/**\n * Search an array of nodes and their children for elements passing a test function.\n *\n * Same as `find`, but limited to elements and with less options, leading to reduced complexity.\n *\n * @category Querying\n * @param test Function to test nodes on.\n * @param nodes Array of nodes to search.\n * @returns All nodes passing `test`.\n */\nfunction findAll$1(test, nodes) {\n  const result = [];\n  const nodeStack = [Array.isArray(nodes) ? nodes : [nodes]];\n  const indexStack = [0];\n  for (;;) {\n    if (indexStack[0] >= nodeStack[0].length) {\n      if (nodeStack.length === 1) {\n        return result;\n      }\n      // Otherwise, remove the current array from the stack.\n      nodeStack.shift();\n      indexStack.shift();\n      // Loop back to the start to continue with the next array.\n      continue;\n    }\n    const elem = nodeStack[0][indexStack[0]++];\n    if (isTag(elem) && test(elem)) result.push(elem);\n    if (hasChildren(elem) && elem.children.length > 0) {\n      indexStack.unshift(0);\n      nodeStack.unshift(elem.children);\n    }\n  }\n}\n\n/**\n * A map of functions to check nodes against.\n */\nconst Checks = {\n  tag_name(name) {\n    if (typeof name === \"function\") {\n      return elem => isTag(elem) && name(elem.name);\n    } else if (name === \"*\") {\n      return isTag;\n    }\n    return elem => isTag(elem) && elem.name === name;\n  },\n  tag_type(type) {\n    if (typeof type === \"function\") {\n      return elem => type(elem.type);\n    }\n    return elem => elem.type === type;\n  },\n  tag_contains(data) {\n    if (typeof data === \"function\") {\n      return elem => isText(elem) && data(elem.data);\n    }\n    return elem => isText(elem) && elem.data === data;\n  }\n};\n/**\n * Returns a function to check whether a node has an attribute with a particular\n * value.\n *\n * @param attrib Attribute to check.\n * @param value Attribute value to look for.\n * @returns A function to check whether the a node has an attribute with a\n *   particular value.\n */\nfunction getAttribCheck(attrib, value) {\n  if (typeof value === \"function\") {\n    return elem => isTag(elem) && value(elem.attribs[attrib]);\n  }\n  return elem => isTag(elem) && elem.attribs[attrib] === value;\n}\n/**\n * Returns a function that returns `true` if either of the input functions\n * returns `true` for a node.\n *\n * @param a First function to combine.\n * @param b Second function to combine.\n * @returns A function taking a node and returning `true` if either of the input\n *   functions returns `true` for the node.\n */\nfunction combineFuncs(a, b) {\n  return elem => a(elem) || b(elem);\n}\n/**\n * Returns a function that executes all checks in `options` and returns `true`\n * if any of them match a node.\n *\n * @param options An object describing nodes to look for.\n * @returns A function that executes all checks in `options` and returns `true`\n *   if any of them match a node.\n */\nfunction compileTest(options) {\n  const funcs = Object.keys(options).map(key => {\n    const value = options[key];\n    return Object.prototype.hasOwnProperty.call(Checks, key) ? Checks[key](value) : getAttribCheck(key, value);\n  });\n  return funcs.length === 0 ? null : funcs.reduce(combineFuncs);\n}\n/**\n * Checks whether a node matches the description in `options`.\n *\n * @category Legacy Query Functions\n * @param options An object describing nodes to look for.\n * @param node The element to test.\n * @returns Whether the element matches the description in `options`.\n */\nfunction testElement(options, node) {\n  const test = compileTest(options);\n  return test ? test(node) : true;\n}\n/**\n * Returns all nodes that match `options`.\n *\n * @category Legacy Query Functions\n * @param options An object describing nodes to look for.\n * @param nodes Nodes to search through.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes that match `options`.\n */\nfunction getElements(options, nodes, recurse, limit = Infinity) {\n  const test = compileTest(options);\n  return test ? filter(test, nodes, recurse, limit) : [];\n}\n/**\n * Returns the node with the supplied ID.\n *\n * @category Legacy Query Functions\n * @param id The unique ID attribute value to look for.\n * @param nodes Nodes to search through.\n * @param recurse Also consider child nodes.\n * @returns The node with the supplied ID.\n */\nfunction getElementById(id, nodes, recurse = true) {\n  if (!Array.isArray(nodes)) nodes = [nodes];\n  return findOne$1(getAttribCheck(\"id\", id), nodes, recurse);\n}\n/**\n * Returns all nodes with the supplied `tagName`.\n *\n * @category Legacy Query Functions\n * @param tagName Tag name to search for.\n * @param nodes Nodes to search through.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes with the supplied `tagName`.\n */\nfunction getElementsByTagName(tagName, nodes, recurse = true, limit = Infinity) {\n  return filter(Checks[\"tag_name\"](tagName), nodes, recurse, limit);\n}\n/**\n * Returns all nodes with the supplied `className`.\n *\n * @category Legacy Query Functions\n * @param className Class name to search for.\n * @param nodes Nodes to search through.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes with the supplied `className`.\n */\nfunction getElementsByClassName(className, nodes, recurse = true, limit = Infinity) {\n  return filter(getAttribCheck(\"class\", className), nodes, recurse, limit);\n}\n/**\n * Returns all nodes with the supplied `type`.\n *\n * @category Legacy Query Functions\n * @param type Element type to look for.\n * @param nodes Nodes to search through.\n * @param recurse Also consider child nodes.\n * @param limit Maximum number of nodes to return.\n * @returns All nodes with the supplied `type`.\n */\nfunction getElementsByTagType(type, nodes, recurse = true, limit = Infinity) {\n  return filter(Checks[\"tag_type\"](type), nodes, recurse, limit);\n}\n\n/**\n * Given an array of nodes, remove any member that is contained by another\n * member.\n *\n * @category Helpers\n * @param nodes Nodes to filter.\n * @returns Remaining nodes that aren't contained by other nodes.\n */\nfunction removeSubsets(nodes) {\n  let idx = nodes.length;\n  /*\n   * Check if each node (or one of its ancestors) is already contained in the\n   * array.\n   */\n  while (--idx >= 0) {\n    const node = nodes[idx];\n    /*\n     * Remove the node if it is not unique.\n     * We are going through the array from the end, so we only\n     * have to check nodes that preceed the node under consideration in the array.\n     */\n    if (idx > 0 && nodes.lastIndexOf(node, idx - 1) >= 0) {\n      nodes.splice(idx, 1);\n      continue;\n    }\n    for (let ancestor = node.parent; ancestor; ancestor = ancestor.parent) {\n      if (nodes.includes(ancestor)) {\n        nodes.splice(idx, 1);\n        break;\n      }\n    }\n  }\n  return nodes;\n}\n/**\n * @category Helpers\n * @see {@link http://dom.spec.whatwg.org/#dom-node-comparedocumentposition}\n */\nvar DocumentPosition = /*#__PURE__*/function (DocumentPosition) {\n  DocumentPosition[DocumentPosition[\"DISCONNECTED\"] = 1] = \"DISCONNECTED\";\n  DocumentPosition[DocumentPosition[\"PRECEDING\"] = 2] = \"PRECEDING\";\n  DocumentPosition[DocumentPosition[\"FOLLOWING\"] = 4] = \"FOLLOWING\";\n  DocumentPosition[DocumentPosition[\"CONTAINS\"] = 8] = \"CONTAINS\";\n  DocumentPosition[DocumentPosition[\"CONTAINED_BY\"] = 16] = \"CONTAINED_BY\";\n  return DocumentPosition;\n}(DocumentPosition || {});\n/**\n * Compare the position of one node against another node in any other document,\n * returning a bitmask with the values from {@link DocumentPosition}.\n *\n * Document order:\n * > There is an ordering, document order, defined on all the nodes in the\n * > document corresponding to the order in which the first character of the\n * > XML representation of each node occurs in the XML representation of the\n * > document after expansion of general entities. Thus, the document element\n * > node will be the first node. Element nodes occur before their children.\n * > Thus, document order orders element nodes in order of the occurrence of\n * > their start-tag in the XML (after expansion of entities). The attribute\n * > nodes of an element occur after the element and before its children. The\n * > relative order of attribute nodes is implementation-dependent.\n *\n * Source:\n * http://www.w3.org/TR/DOM-Level-3-Core/glossary.html#dt-document-order\n *\n * @category Helpers\n * @param nodeA The first node to use in the comparison\n * @param nodeB The second node to use in the comparison\n * @returns A bitmask describing the input nodes' relative position.\n *\n * See http://dom.spec.whatwg.org/#dom-node-comparedocumentposition for\n * a description of these values.\n */\nfunction compareDocumentPosition(nodeA, nodeB) {\n  const aParents = [];\n  const bParents = [];\n  if (nodeA === nodeB) {\n    return 0;\n  }\n  let current = hasChildren(nodeA) ? nodeA : nodeA.parent;\n  while (current) {\n    aParents.unshift(current);\n    current = current.parent;\n  }\n  current = hasChildren(nodeB) ? nodeB : nodeB.parent;\n  while (current) {\n    bParents.unshift(current);\n    current = current.parent;\n  }\n  const maxIdx = Math.min(aParents.length, bParents.length);\n  let idx = 0;\n  while (idx < maxIdx && aParents[idx] === bParents[idx]) {\n    idx++;\n  }\n  if (idx === 0) {\n    return DocumentPosition.DISCONNECTED;\n  }\n  const sharedParent = aParents[idx - 1];\n  const siblings = sharedParent.children;\n  const aSibling = aParents[idx];\n  const bSibling = bParents[idx];\n  if (siblings.indexOf(aSibling) > siblings.indexOf(bSibling)) {\n    if (sharedParent === nodeB) {\n      return DocumentPosition.FOLLOWING | DocumentPosition.CONTAINED_BY;\n    }\n    return DocumentPosition.FOLLOWING;\n  }\n  if (sharedParent === nodeA) {\n    return DocumentPosition.PRECEDING | DocumentPosition.CONTAINS;\n  }\n  return DocumentPosition.PRECEDING;\n}\n/**\n * Sort an array of nodes based on their relative position in the document,\n * removing any duplicate nodes. If the array contains nodes that do not belong\n * to the same document, sort order is unspecified.\n *\n * @category Helpers\n * @param nodes Array of DOM nodes.\n * @returns Collection of unique nodes, sorted in document order.\n */\nfunction uniqueSort(nodes) {\n  nodes = nodes.filter((node, i, arr) => !arr.includes(node, i + 1));\n  nodes.sort((a, b) => {\n    const relative = compareDocumentPosition(a, b);\n    if (relative & DocumentPosition.PRECEDING) {\n      return -1;\n    } else if (relative & DocumentPosition.FOLLOWING) {\n      return 1;\n    }\n    return 0;\n  });\n  return nodes;\n}\n\n/**\n * Get the feed object from the root of a DOM tree.\n *\n * @category Feeds\n * @param doc - The DOM to to extract the feed from.\n * @returns The feed.\n */\nfunction getFeed(doc) {\n  const feedRoot = getOneElement(isValidFeed, doc);\n  return !feedRoot ? null : feedRoot.name === \"feed\" ? getAtomFeed(feedRoot) : getRssFeed(feedRoot);\n}\n/**\n * Parse an Atom feed.\n *\n * @param feedRoot The root of the feed.\n * @returns The parsed feed.\n */\nfunction getAtomFeed(feedRoot) {\n  var _a;\n  const childs = feedRoot.children;\n  const feed = {\n    type: \"atom\",\n    items: getElementsByTagName(\"entry\", childs).map(item => {\n      var _a;\n      const {\n        children\n      } = item;\n      const entry = {\n        media: getMediaElements(children)\n      };\n      addConditionally(entry, \"id\", \"id\", children);\n      addConditionally(entry, \"title\", \"title\", children);\n      const href = (_a = getOneElement(\"link\", children)) === null || _a === void 0 ? void 0 : _a.attribs[\"href\"];\n      if (href) {\n        entry.link = href;\n      }\n      const description = fetch(\"summary\", children) || fetch(\"content\", children);\n      if (description) {\n        entry.description = description;\n      }\n      const pubDate = fetch(\"updated\", children);\n      if (pubDate) {\n        entry.pubDate = new Date(pubDate);\n      }\n      return entry;\n    })\n  };\n  addConditionally(feed, \"id\", \"id\", childs);\n  addConditionally(feed, \"title\", \"title\", childs);\n  const href = (_a = getOneElement(\"link\", childs)) === null || _a === void 0 ? void 0 : _a.attribs[\"href\"];\n  if (href) {\n    feed.link = href;\n  }\n  addConditionally(feed, \"description\", \"subtitle\", childs);\n  const updated = fetch(\"updated\", childs);\n  if (updated) {\n    feed.updated = new Date(updated);\n  }\n  addConditionally(feed, \"author\", \"email\", childs, true);\n  return feed;\n}\n/**\n * Parse a RSS feed.\n *\n * @param feedRoot The root of the feed.\n * @returns The parsed feed.\n */\nfunction getRssFeed(feedRoot) {\n  var _a, _b;\n  const childs = (_b = (_a = getOneElement(\"channel\", feedRoot.children)) === null || _a === void 0 ? void 0 : _a.children) !== null && _b !== void 0 ? _b : [];\n  const feed = {\n    type: feedRoot.name.substr(0, 3),\n    id: \"\",\n    items: getElementsByTagName(\"item\", feedRoot.children).map(item => {\n      const {\n        children\n      } = item;\n      const entry = {\n        media: getMediaElements(children)\n      };\n      addConditionally(entry, \"id\", \"guid\", children);\n      addConditionally(entry, \"title\", \"title\", children);\n      addConditionally(entry, \"link\", \"link\", children);\n      addConditionally(entry, \"description\", \"description\", children);\n      const pubDate = fetch(\"pubDate\", children) || fetch(\"dc:date\", children);\n      if (pubDate) entry.pubDate = new Date(pubDate);\n      return entry;\n    })\n  };\n  addConditionally(feed, \"title\", \"title\", childs);\n  addConditionally(feed, \"link\", \"link\", childs);\n  addConditionally(feed, \"description\", \"description\", childs);\n  const updated = fetch(\"lastBuildDate\", childs);\n  if (updated) {\n    feed.updated = new Date(updated);\n  }\n  addConditionally(feed, \"author\", \"managingEditor\", childs, true);\n  return feed;\n}\nconst MEDIA_KEYS_STRING = [\"url\", \"type\", \"lang\"];\nconst MEDIA_KEYS_INT = [\"fileSize\", \"bitrate\", \"framerate\", \"samplingrate\", \"channels\", \"duration\", \"height\", \"width\"];\n/**\n * Get all media elements of a feed item.\n *\n * @param where Nodes to search in.\n * @returns Media elements.\n */\nfunction getMediaElements(where) {\n  return getElementsByTagName(\"media:content\", where).map(elem => {\n    const {\n      attribs\n    } = elem;\n    const media = {\n      medium: attribs[\"medium\"],\n      isDefault: !!attribs[\"isDefault\"]\n    };\n    for (const attrib of MEDIA_KEYS_STRING) {\n      if (attribs[attrib]) {\n        media[attrib] = attribs[attrib];\n      }\n    }\n    for (const attrib of MEDIA_KEYS_INT) {\n      if (attribs[attrib]) {\n        media[attrib] = parseInt(attribs[attrib], 10);\n      }\n    }\n    if (attribs[\"expression\"]) {\n      media.expression = attribs[\"expression\"];\n    }\n    return media;\n  });\n}\n/**\n * Get one element by tag name.\n *\n * @param tagName Tag name to look for\n * @param node Node to search in\n * @returns The element or null\n */\nfunction getOneElement(tagName, node) {\n  return getElementsByTagName(tagName, node, true, 1)[0];\n}\n/**\n * Get the text content of an element with a certain tag name.\n *\n * @param tagName Tag name to look for.\n * @param where Node to search in.\n * @param recurse Whether to recurse into child nodes.\n * @returns The text content of the element.\n */\nfunction fetch(tagName, where, recurse = false) {\n  return textContent(getElementsByTagName(tagName, where, recurse, 1)).trim();\n}\n/**\n * Adds a property to an object if it has a value.\n *\n * @param obj Object to be extended\n * @param prop Property name\n * @param tagName Tag name that contains the conditionally added property\n * @param where Element to search for the property\n * @param recurse Whether to recurse into child nodes.\n */\nfunction addConditionally(obj, prop, tagName, where, recurse = false) {\n  const val = fetch(tagName, where, recurse);\n  if (val) obj[prop] = val;\n}\n/**\n * Checks if an element is a feed root node.\n *\n * @param value The name of the element to check.\n * @returns Whether an element is a feed root node.\n */\nfunction isValidFeed(value) {\n  return value === \"rss\" || value === \"feed\" || value === \"rdf:RDF\";\n}\nvar DomUtils = /*#__PURE__*/Object.freeze({\n  __proto__: null,\n  get DocumentPosition() {\n    return DocumentPosition;\n  },\n  append: append,\n  appendChild: appendChild,\n  compareDocumentPosition: compareDocumentPosition,\n  existsOne: existsOne,\n  filter: filter,\n  find: find,\n  findAll: findAll$1,\n  findOne: findOne$1,\n  findOneChild: findOneChild,\n  getAttributeValue: getAttributeValue,\n  getChildren: getChildren,\n  getElementById: getElementById,\n  getElements: getElements,\n  getElementsByClassName: getElementsByClassName,\n  getElementsByTagName: getElementsByTagName,\n  getElementsByTagType: getElementsByTagType,\n  getFeed: getFeed,\n  getInnerHTML: getInnerHTML,\n  getName: getName,\n  getOuterHTML: getOuterHTML,\n  getParent: getParent,\n  getSiblings: getSiblings,\n  getText: getText,\n  hasAttrib: hasAttrib,\n  hasChildren: hasChildren,\n  innerText: innerText,\n  isCDATA: isCDATA,\n  isComment: isComment,\n  isDocument: isDocument,\n  isTag: isTag,\n  isText: isText,\n  nextElementSibling: nextElementSibling,\n  prepend: prepend,\n  prependChild: prependChild,\n  prevElementSibling: prevElementSibling,\n  removeElement: removeElement,\n  removeSubsets: removeSubsets,\n  replaceElement: replaceElement,\n  testElement: testElement,\n  textContent: textContent,\n  uniqueSort: uniqueSort\n});\n\n/**\n * All reserved characters in a regex, used for escaping.\n *\n * Taken from XRegExp, (c) 2007-2020 Steven Levithan under the MIT license\n * https://github.com/slevithan/xregexp/blob/95eeebeb8fac8754d54eafe2b4743661ac1cf028/src/xregexp.js#L794\n */\nconst reChars = /[-[\\]{}()*+?.,\\\\^$|#\\s]/g;\nfunction escapeRegex(value) {\n  return value.replace(reChars, \"\\\\$&\");\n}\n/**\n * Attributes that are case-insensitive in HTML.\n *\n * @private\n * @see https://html.spec.whatwg.org/multipage/semantics-other.html#case-sensitivity-of-selectors\n */\nconst caseInsensitiveAttributes = /*#__PURE__*/new Set([\"accept\", \"accept-charset\", \"align\", \"alink\", \"axis\", \"bgcolor\", \"charset\", \"checked\", \"clear\", \"codetype\", \"color\", \"compact\", \"declare\", \"defer\", \"dir\", \"direction\", \"disabled\", \"enctype\", \"face\", \"frame\", \"hreflang\", \"http-equiv\", \"lang\", \"language\", \"link\", \"media\", \"method\", \"multiple\", \"nohref\", \"noresize\", \"noshade\", \"nowrap\", \"readonly\", \"rel\", \"rev\", \"rules\", \"scope\", \"scrolling\", \"selected\", \"shape\", \"target\", \"text\", \"type\", \"valign\", \"valuetype\", \"vlink\"]);\nfunction shouldIgnoreCase(selector, options) {\n  return typeof selector.ignoreCase === \"boolean\" ? selector.ignoreCase : selector.ignoreCase === \"quirks\" ? !!options.quirksMode : !options.xmlMode && caseInsensitiveAttributes.has(selector.name);\n}\n/**\n * Attribute selectors\n */\nconst attributeRules = {\n  equals(next, data, options) {\n    const {\n      adapter\n    } = options;\n    const {\n      name\n    } = data;\n    let {\n      value\n    } = data;\n    if (shouldIgnoreCase(data, options)) {\n      value = value.toLowerCase();\n      return elem => {\n        const attr = adapter.getAttributeValue(elem, name);\n        return attr != null && attr.length === value.length && attr.toLowerCase() === value && next(elem);\n      };\n    }\n    return elem => adapter.getAttributeValue(elem, name) === value && next(elem);\n  },\n  hyphen(next, data, options) {\n    const {\n      adapter\n    } = options;\n    const {\n      name\n    } = data;\n    let {\n      value\n    } = data;\n    const len = value.length;\n    if (shouldIgnoreCase(data, options)) {\n      value = value.toLowerCase();\n      return function hyphenIC(elem) {\n        const attr = adapter.getAttributeValue(elem, name);\n        return attr != null && (attr.length === len || attr.charAt(len) === \"-\") && attr.substr(0, len).toLowerCase() === value && next(elem);\n      };\n    }\n    return function hyphen(elem) {\n      const attr = adapter.getAttributeValue(elem, name);\n      return attr != null && (attr.length === len || attr.charAt(len) === \"-\") && attr.substr(0, len) === value && next(elem);\n    };\n  },\n  element(next, data, options) {\n    const {\n      adapter\n    } = options;\n    const {\n      name,\n      value\n    } = data;\n    if (/\\s/.test(value)) {\n      return boolbaseExports.falseFunc;\n    }\n    const regex = new RegExp(`(?:^|\\\\s)${escapeRegex(value)}(?:$|\\\\s)`, shouldIgnoreCase(data, options) ? \"i\" : \"\");\n    return function element(elem) {\n      const attr = adapter.getAttributeValue(elem, name);\n      return attr != null && attr.length >= value.length && regex.test(attr) && next(elem);\n    };\n  },\n  exists(next, {\n    name\n  }, {\n    adapter\n  }) {\n    return elem => adapter.hasAttrib(elem, name) && next(elem);\n  },\n  start(next, data, options) {\n    const {\n      adapter\n    } = options;\n    const {\n      name\n    } = data;\n    let {\n      value\n    } = data;\n    const len = value.length;\n    if (len === 0) {\n      return boolbaseExports.falseFunc;\n    }\n    if (shouldIgnoreCase(data, options)) {\n      value = value.toLowerCase();\n      return elem => {\n        const attr = adapter.getAttributeValue(elem, name);\n        return attr != null && attr.length >= len && attr.substr(0, len).toLowerCase() === value && next(elem);\n      };\n    }\n    return elem => !!adapter.getAttributeValue(elem, name)?.startsWith(value) && next(elem);\n  },\n  end(next, data, options) {\n    const {\n      adapter\n    } = options;\n    const {\n      name\n    } = data;\n    let {\n      value\n    } = data;\n    const len = -value.length;\n    if (len === 0) {\n      return boolbaseExports.falseFunc;\n    }\n    if (shouldIgnoreCase(data, options)) {\n      value = value.toLowerCase();\n      return elem => adapter.getAttributeValue(elem, name)?.substr(len).toLowerCase() === value && next(elem);\n    }\n    return elem => !!adapter.getAttributeValue(elem, name)?.endsWith(value) && next(elem);\n  },\n  any(next, data, options) {\n    const {\n      adapter\n    } = options;\n    const {\n      name,\n      value\n    } = data;\n    if (value === \"\") {\n      return boolbaseExports.falseFunc;\n    }\n    if (shouldIgnoreCase(data, options)) {\n      const regex = new RegExp(escapeRegex(value), \"i\");\n      return function anyIC(elem) {\n        const attr = adapter.getAttributeValue(elem, name);\n        return attr != null && attr.length >= value.length && regex.test(attr) && next(elem);\n      };\n    }\n    return elem => !!adapter.getAttributeValue(elem, name)?.includes(value) && next(elem);\n  },\n  not(next, data, options) {\n    const {\n      adapter\n    } = options;\n    const {\n      name\n    } = data;\n    let {\n      value\n    } = data;\n    if (value === \"\") {\n      return elem => !!adapter.getAttributeValue(elem, name) && next(elem);\n    }\n    if (shouldIgnoreCase(data, options)) {\n      value = value.toLowerCase();\n      return elem => {\n        const attr = adapter.getAttributeValue(elem, name);\n        return (attr == null || attr.length !== value.length || attr.toLowerCase() !== value) && next(elem);\n      };\n    }\n    return elem => adapter.getAttributeValue(elem, name) !== value && next(elem);\n  }\n};\n\n/**\n * Find all elements matching the query. If not in XML mode, the query will ignore\n * the contents of `<template>` elements.\n *\n * @param query - Function that returns true if the element matches the query.\n * @param elems - Nodes to query. If a node is an element, its children will be queried.\n * @param options - Options for querying the document.\n * @returns All matching elements.\n */\nfunction findAll(query, elems, options) {\n  const {\n    adapter,\n    xmlMode = false\n  } = options;\n  const result = [];\n  /** Stack of the arrays we are looking at. */\n  const nodeStack = [elems];\n  /** Stack of the indices within the arrays. */\n  const indexStack = [0];\n  for (;;) {\n    // First, check if the current array has any more elements to look at.\n    if (indexStack[0] >= nodeStack[0].length) {\n      // If we have no more arrays to look at, we are done.\n      if (nodeStack.length === 1) {\n        return result;\n      }\n      nodeStack.shift();\n      indexStack.shift();\n      // Loop back to the start to continue with the next array.\n      continue;\n    }\n    const elem = nodeStack[0][indexStack[0]++];\n    if (!adapter.isTag(elem)) {\n      continue;\n    }\n    if (query(elem)) {\n      result.push(elem);\n    }\n    if (xmlMode || adapter.getName(elem) !== \"template\") {\n      /*\n       * Add the children to the stack. We are depth-first, so this is\n       * the next array we look at.\n       */\n      const children = adapter.getChildren(elem);\n      if (children.length > 0) {\n        nodeStack.unshift(children);\n        indexStack.unshift(0);\n      }\n    }\n  }\n}\n/**\n * Find the first element matching the query. If not in XML mode, the query will ignore\n * the contents of `<template>` elements.\n *\n * @param query - Function that returns true if the element matches the query.\n * @param elems - Nodes to query. If a node is an element, its children will be queried.\n * @param options - Options for querying the document.\n * @returns The first matching element, or null if there was no match.\n */\nfunction findOne(query, elems, options) {\n  const {\n    adapter,\n    xmlMode = false\n  } = options;\n  /** Stack of the arrays we are looking at. */\n  const nodeStack = [elems];\n  /** Stack of the indices within the arrays. */\n  const indexStack = [0];\n  for (;;) {\n    // First, check if the current array has any more elements to look at.\n    if (indexStack[0] >= nodeStack[0].length) {\n      // If we have no more arrays to look at, we are done.\n      if (nodeStack.length === 1) {\n        return null;\n      }\n      nodeStack.shift();\n      indexStack.shift();\n      // Loop back to the start to continue with the next array.\n      continue;\n    }\n    const elem = nodeStack[0][indexStack[0]++];\n    if (!adapter.isTag(elem)) {\n      continue;\n    }\n    if (query(elem)) {\n      return elem;\n    }\n    if (xmlMode || adapter.getName(elem) !== \"template\") {\n      /*\n       * Add the children to the stack. We are depth-first, so this is\n       * the next array we look at.\n       */\n      const children = adapter.getChildren(elem);\n      if (children.length > 0) {\n        nodeStack.unshift(children);\n        indexStack.unshift(0);\n      }\n    }\n  }\n}\nfunction getNextSiblings(elem, adapter) {\n  const siblings = adapter.getSiblings(elem);\n  if (siblings.length <= 1) {\n    return [];\n  }\n  const elemIndex = siblings.indexOf(elem);\n  if (elemIndex < 0 || elemIndex === siblings.length - 1) {\n    return [];\n  }\n  return siblings.slice(elemIndex + 1).filter(adapter.isTag);\n}\nfunction getElementParent(node, adapter) {\n  const parent = adapter.getParent(node);\n  return parent != null && adapter.isTag(parent) ? parent : null;\n}\n\n/**\n * Only text controls can be made read-only, since for other controls (such\n * as checkboxes and buttons) there is no useful distinction between being\n * read-only and being disabled.\n *\n * @see {@link https://html.spec.whatwg.org/multipage/input.html#attr-input-readonly}\n */\nconst textControl = \"input:is([type=text i],[type=search i],[type=url i],[type=tel i],[type=email i],[type=password i],[type=date i],[type=month i],[type=week i],[type=time i],[type=datetime-local i],[type=number i])\";\n/**\n * Aliases are pseudos that are expressed as selectors.\n */\nconst aliases = {\n  // Links\n  \"any-link\": \":is(a, area, link)[href]\",\n  link: \":any-link:not(:visited)\",\n  // Forms\n  // https://html.spec.whatwg.org/multipage/scripting.html#disabled-elements\n  disabled: `:is(\n        :is(button, input, select, textarea, optgroup, option)[disabled],\n        optgroup[disabled] > option,\n        fieldset[disabled]:not(fieldset[disabled] legend:first-of-type *)\n    )`,\n  enabled: \":not(:disabled)\",\n  checked: \":is(:is(input[type=radio], input[type=checkbox])[checked], :selected)\",\n  required: \":is(input, select, textarea)[required]\",\n  optional: \":is(input, select, textarea):not([required])\",\n  \"read-only\": `[readonly]:is(textarea, ${textControl})`,\n  \"read-write\": `:not([readonly]):is(textarea, ${textControl})`,\n  // JQuery extensions\n  /**\n   * `:selected` matches option elements that have the `selected` attribute,\n   * or are the first option element in a select element that does not have\n   * the `multiple` attribute and does not have any option elements with the\n   * `selected` attribute.\n   *\n   * @see https://html.spec.whatwg.org/multipage/form-elements.html#concept-option-selectedness\n   */\n  selected: \"option:is([selected], select:not([multiple]):not(:has(> option[selected])) > :first-of-type)\",\n  checkbox: \"[type=checkbox]\",\n  file: \"[type=file]\",\n  password: \"[type=password]\",\n  radio: \"[type=radio]\",\n  reset: \"[type=reset]\",\n  image: \"[type=image]\",\n  submit: \"[type=submit]\",\n  parent: \":not(:empty)\",\n  header: \":is(h1, h2, h3, h4, h5, h6)\",\n  button: \":is(button, input[type=button])\",\n  input: \":is(input, textarea, select, button)\",\n  text: \"input:is(:not([type!='']), [type=text])\"\n};\n\n// Following http://www.w3.org/TR/css3-selectors/#nth-child-pseudo\n// Whitespace as per https://www.w3.org/TR/selectors-3/#lex is \" \\t\\r\\n\\f\"\nconst whitespace = /*#__PURE__*/new Set([9, 10, 12, 13, 32]);\nconst ZERO = /*#__PURE__*/\"0\".charCodeAt(0);\nconst NINE = /*#__PURE__*/\"9\".charCodeAt(0);\n/**\n * Parses an expression.\n *\n * @throws An `Error` if parsing fails.\n * @returns An array containing the integer step size and the integer offset of the nth rule.\n * @example nthCheck.parse(\"2n+3\"); // returns [2, 3]\n */\nfunction parse(formula) {\n  formula = formula.trim().toLowerCase();\n  if (formula === \"even\") {\n    return [2, 0];\n  } else if (formula === \"odd\") {\n    return [2, 1];\n  }\n  // Parse [ ['-'|'+']? INTEGER? {N} [ S* ['-'|'+'] S* INTEGER ]?\n  let idx = 0;\n  let a = 0;\n  let sign = readSign();\n  let number = readNumber();\n  if (idx < formula.length && formula.charAt(idx) === \"n\") {\n    idx++;\n    a = sign * (number !== null && number !== void 0 ? number : 1);\n    skipWhitespace();\n    if (idx < formula.length) {\n      sign = readSign();\n      skipWhitespace();\n      number = readNumber();\n    } else {\n      sign = number = 0;\n    }\n  }\n  // Throw if there is anything else\n  if (number === null || idx < formula.length) {\n    throw new Error(`n-th rule couldn't be parsed ('${formula}')`);\n  }\n  return [a, sign * number];\n  function readSign() {\n    if (formula.charAt(idx) === \"-\") {\n      idx++;\n      return -1;\n    }\n    if (formula.charAt(idx) === \"+\") {\n      idx++;\n    }\n    return 1;\n  }\n  function readNumber() {\n    const start = idx;\n    let value = 0;\n    while (idx < formula.length && formula.charCodeAt(idx) >= ZERO && formula.charCodeAt(idx) <= NINE) {\n      value = value * 10 + (formula.charCodeAt(idx) - ZERO);\n      idx++;\n    }\n    // Return `null` if we didn't read anything.\n    return idx === start ? null : value;\n  }\n  function skipWhitespace() {\n    while (idx < formula.length && whitespace.has(formula.charCodeAt(idx))) {\n      idx++;\n    }\n  }\n}\n\n/**\n * Returns a function that checks if an elements index matches the given rule\n * highly optimized to return the fastest solution.\n *\n * @param parsed A tuple [a, b], as returned by `parse`.\n * @returns A highly optimized function that returns whether an index matches the nth-check.\n * @example\n *\n * ```js\n * const check = nthCheck.compile([2, 3]);\n *\n * check(0); // `false`\n * check(1); // `false`\n * check(2); // `true`\n * check(3); // `false`\n * check(4); // `true`\n * check(5); // `false`\n * check(6); // `true`\n * ```\n */\nfunction compile(parsed) {\n  const a = parsed[0];\n  // Subtract 1 from `b`, to convert from one- to zero-indexed.\n  const b = parsed[1] - 1;\n  /*\n   * When `b <= 0`, `a * n` won't be lead to any matches for `a < 0`.\n   * Besides, the specification states that no elements are\n   * matched when `a` and `b` are 0.\n   *\n   * `b < 0` here as we subtracted 1 from `b` above.\n   */\n  if (b < 0 && a <= 0) return boolbase.falseFunc;\n  // When `a` is in the range -1..1, it matches any element (so only `b` is checked).\n  if (a === -1) return index => index <= b;\n  if (a === 0) return index => index === b;\n  // When `b <= 0` and `a === 1`, they match any element.\n  if (a === 1) return b < 0 ? boolbase.trueFunc : index => index >= b;\n  /*\n   * Otherwise, modulo can be used to check if there is a match.\n   *\n   * Modulo doesn't care about the sign, so let's use `a`s absolute value.\n   */\n  const absA = Math.abs(a);\n  // Get `b mod a`, + a if this is negative.\n  const bMod = (b % absA + absA) % absA;\n  return a > 1 ? index => index >= b && index % absA === bMod : index => index <= b && index % absA === bMod;\n}\n\n/**\n * Parses and compiles a formula to a highly optimized function.\n * Combination of {@link parse} and {@link compile}.\n *\n * If the formula doesn't match any elements,\n * it returns [`boolbase`](https://github.com/fb55/boolbase)'s `falseFunc`.\n * Otherwise, a function accepting an _index_ is returned, which returns\n * whether or not the passed _index_ matches the formula.\n *\n * Note: The nth-rule starts counting at `1`, the returned function at `0`.\n *\n * @param formula The formula to compile.\n * @example\n * const check = nthCheck(\"2n+3\");\n *\n * check(0); // `false`\n * check(1); // `false`\n * check(2); // `true`\n * check(3); // `false`\n * check(4); // `true`\n * check(5); // `false`\n * check(6); // `true`\n */\nfunction nthCheck(formula) {\n  return compile(parse(formula));\n}\n\n/**\n * Some selectors such as `:contains` and (non-relative) `:has` will only be\n * able to match elements if their parents match the selector (as they contain\n * a subset of the elements that the parent contains).\n *\n * This function wraps the given `matches` function in a function that caches\n * the results of the parent elements, so that the `matches` function only\n * needs to be called once for each subtree.\n */\nfunction cacheParentResults(next, {\n  adapter,\n  cacheResults\n}, matches) {\n  if (cacheResults === false || typeof WeakMap === \"undefined\") {\n    return elem => next(elem) && matches(elem);\n  }\n  // Use a cache to avoid re-checking children of an element.\n  // @ts-expect-error `Node` is not extending object\n  const resultCache = new WeakMap();\n  function addResultToCache(elem) {\n    const result = matches(elem);\n    resultCache.set(elem, result);\n    return result;\n  }\n  return function cachedMatcher(elem) {\n    if (!next(elem)) {\n      return false;\n    }\n    if (resultCache.has(elem)) {\n      return resultCache.get(elem);\n    }\n    // Check all of the element's parents.\n    let node = elem;\n    do {\n      const parent = getElementParent(node, adapter);\n      if (parent === null) {\n        return addResultToCache(elem);\n      }\n      node = parent;\n    } while (!resultCache.has(node));\n    return resultCache.get(node) && addResultToCache(elem);\n  };\n}\nconst filters = {\n  contains(next, text, options) {\n    const {\n      getText\n    } = options.adapter;\n    return cacheParentResults(next, options, elem => getText(elem).includes(text));\n  },\n  icontains(next, text, options) {\n    const itext = text.toLowerCase();\n    const {\n      getText\n    } = options.adapter;\n    return cacheParentResults(next, options, elem => getText(elem).toLowerCase().includes(itext));\n  },\n  // Location specific methods\n  \"nth-child\"(next, rule, {\n    adapter,\n    equals\n  }) {\n    const func = nthCheck(rule);\n    if (func === boolbaseExports.falseFunc) {\n      return boolbaseExports.falseFunc;\n    }\n    if (func === boolbaseExports.trueFunc) {\n      return elem => getElementParent(elem, adapter) !== null && next(elem);\n    }\n    return function nthChild(elem) {\n      const siblings = adapter.getSiblings(elem);\n      let pos = 0;\n      for (let i = 0; i < siblings.length; i++) {\n        if (equals(elem, siblings[i])) {\n          break;\n        }\n        if (adapter.isTag(siblings[i])) {\n          pos++;\n        }\n      }\n      return func(pos) && next(elem);\n    };\n  },\n  \"nth-last-child\"(next, rule, {\n    adapter,\n    equals\n  }) {\n    const func = nthCheck(rule);\n    if (func === boolbaseExports.falseFunc) {\n      return boolbaseExports.falseFunc;\n    }\n    if (func === boolbaseExports.trueFunc) {\n      return elem => getElementParent(elem, adapter) !== null && next(elem);\n    }\n    return function nthLastChild(elem) {\n      const siblings = adapter.getSiblings(elem);\n      let pos = 0;\n      for (let i = siblings.length - 1; i >= 0; i--) {\n        if (equals(elem, siblings[i])) {\n          break;\n        }\n        if (adapter.isTag(siblings[i])) {\n          pos++;\n        }\n      }\n      return func(pos) && next(elem);\n    };\n  },\n  \"nth-of-type\"(next, rule, {\n    adapter,\n    equals\n  }) {\n    const func = nthCheck(rule);\n    if (func === boolbaseExports.falseFunc) {\n      return boolbaseExports.falseFunc;\n    }\n    if (func === boolbaseExports.trueFunc) {\n      return elem => getElementParent(elem, adapter) !== null && next(elem);\n    }\n    return function nthOfType(elem) {\n      const siblings = adapter.getSiblings(elem);\n      let pos = 0;\n      for (let i = 0; i < siblings.length; i++) {\n        const currentSibling = siblings[i];\n        if (equals(elem, currentSibling)) {\n          break;\n        }\n        if (adapter.isTag(currentSibling) && adapter.getName(currentSibling) === adapter.getName(elem)) {\n          pos++;\n        }\n      }\n      return func(pos) && next(elem);\n    };\n  },\n  \"nth-last-of-type\"(next, rule, {\n    adapter,\n    equals\n  }) {\n    const func = nthCheck(rule);\n    if (func === boolbaseExports.falseFunc) {\n      return boolbaseExports.falseFunc;\n    }\n    if (func === boolbaseExports.trueFunc) {\n      return elem => getElementParent(elem, adapter) !== null && next(elem);\n    }\n    return function nthLastOfType(elem) {\n      const siblings = adapter.getSiblings(elem);\n      let pos = 0;\n      for (let i = siblings.length - 1; i >= 0; i--) {\n        const currentSibling = siblings[i];\n        if (equals(elem, currentSibling)) {\n          break;\n        }\n        if (adapter.isTag(currentSibling) && adapter.getName(currentSibling) === adapter.getName(elem)) {\n          pos++;\n        }\n      }\n      return func(pos) && next(elem);\n    };\n  },\n  // TODO determine the actual root element\n  root(next, _rule, {\n    adapter\n  }) {\n    return elem => getElementParent(elem, adapter) === null && next(elem);\n  },\n  scope(next, rule, options, context) {\n    const {\n      equals\n    } = options;\n    if (!context || context.length === 0) {\n      // Equivalent to :root\n      return filters[\"root\"](next, rule, options);\n    }\n    if (context.length === 1) {\n      // NOTE: can't be unpacked, as :has uses this for side-effects\n      return elem => equals(context[0], elem) && next(elem);\n    }\n    return elem => context.includes(elem) && next(elem);\n  },\n  hover: /*#__PURE__*/dynamicStatePseudo(\"isHovered\"),\n  visited: /*#__PURE__*/dynamicStatePseudo(\"isVisited\"),\n  active: /*#__PURE__*/dynamicStatePseudo(\"isActive\")\n};\n/**\n * Dynamic state pseudos. These depend on optional Adapter methods.\n *\n * @param name The name of the adapter method to call.\n * @returns Pseudo for the `filters` object.\n */\nfunction dynamicStatePseudo(name) {\n  return function dynamicPseudo(next, _rule, {\n    adapter\n  }) {\n    const func = adapter[name];\n    if (typeof func !== \"function\") {\n      return boolbaseExports.falseFunc;\n    }\n    return function active(elem) {\n      return func(elem) && next(elem);\n    };\n  };\n}\n\n/**\n * CSS limits the characters considered as whitespace to space, tab & line\n * feed. We add carriage returns as htmlparser2 doesn't normalize them to\n * line feeds.\n *\n * @see {@link https://www.w3.org/TR/css-text-3/#white-space}\n */\nconst isDocumentWhiteSpace = /^[ \\t\\r\\n]*$/;\n// While filters are precompiled, pseudos get called when they are needed\nconst pseudos = {\n  empty(elem, {\n    adapter\n  }) {\n    const children = adapter.getChildren(elem);\n    return (\n      // First, make sure the tag does not have any element children.\n      children.every(elem => !adapter.isTag(elem)) &&\n      // Then, check that the text content is only whitespace.\n      children.every(elem =>\n      // FIXME: `getText` call is potentially expensive.\n      isDocumentWhiteSpace.test(adapter.getText(elem)))\n    );\n  },\n  \"first-child\"(elem, {\n    adapter,\n    equals\n  }) {\n    if (adapter.prevElementSibling) {\n      return adapter.prevElementSibling(elem) == null;\n    }\n    const firstChild = adapter.getSiblings(elem).find(elem => adapter.isTag(elem));\n    return firstChild != null && equals(elem, firstChild);\n  },\n  \"last-child\"(elem, {\n    adapter,\n    equals\n  }) {\n    const siblings = adapter.getSiblings(elem);\n    for (let i = siblings.length - 1; i >= 0; i--) {\n      if (equals(elem, siblings[i])) {\n        return true;\n      }\n      if (adapter.isTag(siblings[i])) {\n        break;\n      }\n    }\n    return false;\n  },\n  \"first-of-type\"(elem, {\n    adapter,\n    equals\n  }) {\n    const siblings = adapter.getSiblings(elem);\n    const elemName = adapter.getName(elem);\n    for (let i = 0; i < siblings.length; i++) {\n      const currentSibling = siblings[i];\n      if (equals(elem, currentSibling)) {\n        return true;\n      }\n      if (adapter.isTag(currentSibling) && adapter.getName(currentSibling) === elemName) {\n        break;\n      }\n    }\n    return false;\n  },\n  \"last-of-type\"(elem, {\n    adapter,\n    equals\n  }) {\n    const siblings = adapter.getSiblings(elem);\n    const elemName = adapter.getName(elem);\n    for (let i = siblings.length - 1; i >= 0; i--) {\n      const currentSibling = siblings[i];\n      if (equals(elem, currentSibling)) {\n        return true;\n      }\n      if (adapter.isTag(currentSibling) && adapter.getName(currentSibling) === elemName) {\n        break;\n      }\n    }\n    return false;\n  },\n  \"only-of-type\"(elem, {\n    adapter,\n    equals\n  }) {\n    const elemName = adapter.getName(elem);\n    return adapter.getSiblings(elem).every(sibling => equals(elem, sibling) || !adapter.isTag(sibling) || adapter.getName(sibling) !== elemName);\n  },\n  \"only-child\"(elem, {\n    adapter,\n    equals\n  }) {\n    return adapter.getSiblings(elem).every(sibling => equals(elem, sibling) || !adapter.isTag(sibling));\n  }\n};\nfunction verifyPseudoArgs(func, name, subselect, argIndex) {\n  if (subselect === null) {\n    if (func.length > argIndex) {\n      throw new Error(`Pseudo-class :${name} requires an argument`);\n    }\n  } else if (func.length === argIndex) {\n    throw new Error(`Pseudo-class :${name} doesn't have any arguments`);\n  }\n}\nfunction isTraversal(token) {\n  return token.type === \"_flexibleDescendant\" || isTraversal$1(token);\n}\n/**\n * Sort the parts of the passed selector, as there is potential for\n * optimization (some types of selectors are faster than others).\n *\n * @param arr Selector to sort\n */\nfunction sortRules(arr) {\n  const ratings = arr.map(getQuality);\n  for (let i = 1; i < arr.length; i++) {\n    const procNew = ratings[i];\n    if (procNew < 0) {\n      continue;\n    }\n    // Use insertion sort to move the token to the correct position.\n    for (let j = i; j > 0 && procNew < ratings[j - 1]; j--) {\n      const token = arr[j];\n      arr[j] = arr[j - 1];\n      arr[j - 1] = token;\n      ratings[j] = ratings[j - 1];\n      ratings[j - 1] = procNew;\n    }\n  }\n}\nfunction getAttributeQuality(token) {\n  switch (token.action) {\n    case AttributeAction.Exists:\n      {\n        return 10;\n      }\n    case AttributeAction.Equals:\n      {\n        // Prefer ID selectors (eg. #ID)\n        return token.name === \"id\" ? 9 : 8;\n      }\n    case AttributeAction.Not:\n      {\n        return 7;\n      }\n    case AttributeAction.Start:\n      {\n        return 6;\n      }\n    case AttributeAction.End:\n      {\n        return 6;\n      }\n    case AttributeAction.Any:\n      {\n        return 5;\n      }\n    case AttributeAction.Hyphen:\n      {\n        return 4;\n      }\n    case AttributeAction.Element:\n      {\n        return 3;\n      }\n  }\n}\n/**\n * Determine the quality of the passed token. The higher the number, the\n * faster the token is to execute.\n *\n * @param token Token to get the quality of.\n * @returns The token's quality.\n */\nfunction getQuality(token) {\n  switch (token.type) {\n    case SelectorType.Universal:\n      {\n        return 50;\n      }\n    case SelectorType.Tag:\n      {\n        return 30;\n      }\n    case SelectorType.Attribute:\n      {\n        return Math.floor(getAttributeQuality(token) / (\n        // `ignoreCase` adds some overhead, half the result if applicable.\n        token.ignoreCase ? 2 : 1));\n      }\n    case SelectorType.Pseudo:\n      {\n        return !token.data ? 3 : token.name === \"has\" || token.name === \"contains\" || token.name === \"icontains\" ?\n        // Expensive in any case — run as late as possible.\n        0 : Array.isArray(token.data) ?\n        // Eg. `:is`, `:not`\n        Math.max(\n        // If we have traversals, try to avoid executing this selector\n        0, Math.min(...token.data.map(d => Math.min(...d.map(getQuality))))) : 2;\n      }\n    default:\n      {\n        return -1;\n      }\n  }\n}\nfunction includesScopePseudo(t) {\n  return t.type === SelectorType.Pseudo && (t.name === \"scope\" || Array.isArray(t.data) && t.data.some(data => data.some(includesScopePseudo)));\n}\n\n/** Used as a placeholder for :has. Will be replaced with the actual element. */\nconst PLACEHOLDER_ELEMENT = {};\n/**\n * Check if the selector has any properties that rely on the current element.\n * If not, we can cache the result of the selector.\n *\n * We can't cache selectors that start with a traversal (e.g. `>`, `+`, `~`),\n * or include a `:scope`.\n *\n * @param selector - The selector to check.\n * @returns Whether the selector has any properties that rely on the current element.\n */\nfunction hasDependsOnCurrentElement(selector) {\n  return selector.some(sel => sel.length > 0 && (isTraversal(sel[0]) || sel.some(includesScopePseudo)));\n}\nfunction copyOptions(options) {\n  // Not copied: context, rootFunc\n  return {\n    xmlMode: !!options.xmlMode,\n    lowerCaseAttributeNames: !!options.lowerCaseAttributeNames,\n    lowerCaseTags: !!options.lowerCaseTags,\n    quirksMode: !!options.quirksMode,\n    cacheResults: !!options.cacheResults,\n    pseudos: options.pseudos,\n    adapter: options.adapter,\n    equals: options.equals\n  };\n}\nconst is = (next, token, options, context, compileToken) => {\n  const func = compileToken(token, copyOptions(options), context);\n  return func === boolbaseExports.trueFunc ? next : func === boolbaseExports.falseFunc ? boolbaseExports.falseFunc : elem => func(elem) && next(elem);\n};\n/*\n * :not, :has, :is, :matches and :where have to compile selectors\n * doing this in src/pseudos.ts would lead to circular dependencies,\n * so we add them here\n */\nconst subselects = {\n  is,\n  /**\n   * `:matches` and `:where` are aliases for `:is`.\n   */\n  matches: is,\n  where: is,\n  not(next, token, options, context, compileToken) {\n    const func = compileToken(token, copyOptions(options), context);\n    return func === boolbaseExports.falseFunc ? next : func === boolbaseExports.trueFunc ? boolbaseExports.falseFunc : elem => !func(elem) && next(elem);\n  },\n  has(next, subselect, options, _context, compileToken) {\n    const {\n      adapter\n    } = options;\n    const opts = copyOptions(options);\n    opts.relativeSelector = true;\n    const context = subselect.some(s => s.some(isTraversal)) ?\n    // Used as a placeholder. Will be replaced with the actual element.\n    [PLACEHOLDER_ELEMENT] : undefined;\n    const skipCache = hasDependsOnCurrentElement(subselect);\n    const compiled = compileToken(subselect, opts, context);\n    if (compiled === boolbaseExports.falseFunc) {\n      return boolbaseExports.falseFunc;\n    }\n    // If `compiled` is `trueFunc`, we can skip this.\n    if (context && compiled !== boolbaseExports.trueFunc) {\n      return skipCache ? elem => {\n        if (!next(elem)) {\n          return false;\n        }\n        context[0] = elem;\n        const childs = adapter.getChildren(elem);\n        return findOne(compiled, compiled.shouldTestNextSiblings ? [...childs, ...getNextSiblings(elem, adapter)] : childs, options) !== null;\n      } : cacheParentResults(next, options, elem => {\n        context[0] = elem;\n        return findOne(compiled, adapter.getChildren(elem), options) !== null;\n      });\n    }\n    const hasOne = elem => findOne(compiled, adapter.getChildren(elem), options) !== null;\n    return skipCache ? elem => next(elem) && hasOne(elem) : cacheParentResults(next, options, hasOne);\n  }\n};\n\n/*\n * Pseudo selectors\n *\n * Pseudo selectors are available in three forms:\n *\n * 1. Filters are called when the selector is compiled and return a function\n *  that has to return either false, or the results of `next()`.\n * 2. Pseudos are called on execution. They have to return a boolean.\n * 3. Subselects work like filters, but have an embedded selector that will be run separately.\n *\n * Filters are great if you want to do some pre-processing, or change the call order\n * of `next()` and your code.\n * Pseudos should be used to implement simple checks.\n */\nfunction compilePseudoSelector(next, selector, options, context, compileToken) {\n  const {\n    name,\n    data\n  } = selector;\n  if (Array.isArray(data)) {\n    if (!(name in subselects)) {\n      throw new Error(`Unknown pseudo-class :${name}(${data})`);\n    }\n    return subselects[name](next, data, options, context, compileToken);\n  }\n  const userPseudo = options.pseudos?.[name];\n  const stringPseudo = typeof userPseudo === \"string\" ? userPseudo : aliases[name];\n  if (typeof stringPseudo === \"string\") {\n    if (data != null) {\n      throw new Error(`Pseudo ${name} doesn't have any arguments`);\n    }\n    // The alias has to be parsed here, to make sure options are respected.\n    const alias = parse$1(stringPseudo);\n    return subselects[\"is\"](next, alias, options, context, compileToken);\n  }\n  if (typeof userPseudo === \"function\") {\n    verifyPseudoArgs(userPseudo, name, data, 1);\n    return elem => userPseudo(elem, data) && next(elem);\n  }\n  if (name in filters) {\n    return filters[name](next, data, options, context);\n  }\n  if (name in pseudos) {\n    const pseudo = pseudos[name];\n    verifyPseudoArgs(pseudo, name, data, 2);\n    return elem => pseudo(elem, options, data) && next(elem);\n  }\n  throw new Error(`Unknown pseudo-class :${name}`);\n}\n\n/*\n * All available rules\n */\nfunction compileGeneralSelector(next, selector, options, context, compileToken, hasExpensiveSubselector) {\n  const {\n    adapter,\n    equals,\n    cacheResults\n  } = options;\n  switch (selector.type) {\n    case SelectorType.PseudoElement:\n      {\n        throw new Error(\"Pseudo-elements are not supported by css-select\");\n      }\n    case SelectorType.ColumnCombinator:\n      {\n        throw new Error(\"Column combinators are not yet supported by css-select\");\n      }\n    case SelectorType.Attribute:\n      {\n        if (selector.namespace != null) {\n          throw new Error(\"Namespaced attributes are not yet supported by css-select\");\n        }\n        if (!options.xmlMode || options.lowerCaseAttributeNames) {\n          selector.name = selector.name.toLowerCase();\n        }\n        return attributeRules[selector.action](next, selector, options);\n      }\n    case SelectorType.Pseudo:\n      {\n        return compilePseudoSelector(next, selector, options, context, compileToken);\n      }\n    // Tags\n    case SelectorType.Tag:\n      {\n        if (selector.namespace != null) {\n          throw new Error(\"Namespaced tag names are not yet supported by css-select\");\n        }\n        let {\n          name\n        } = selector;\n        if (!options.xmlMode || options.lowerCaseTags) {\n          name = name.toLowerCase();\n        }\n        return function tag(elem) {\n          return adapter.getName(elem) === name && next(elem);\n        };\n      }\n    // Traversal\n    case SelectorType.Descendant:\n      {\n        if (!hasExpensiveSubselector || cacheResults === false || typeof WeakMap === \"undefined\") {\n          return function descendant(elem) {\n            let current = elem;\n            // biome-ignore lint/suspicious/noAssignInExpressions: TODO\n            while (current = getElementParent(current, adapter)) {\n              if (next(current)) {\n                return true;\n              }\n            }\n            return false;\n          };\n        }\n        const resultCache = new WeakMap();\n        return function cachedDescendant(elem) {\n          let current = elem;\n          let result;\n          // biome-ignore lint/suspicious/noAssignInExpressions: TODO\n          while (current = getElementParent(current, adapter)) {\n            const cached = resultCache.get(current);\n            if (cached === undefined) {\n              result ?? (result = {\n                matches: false\n              });\n              result.matches = next(current);\n              resultCache.set(current, result);\n              if (result.matches) {\n                return true;\n              }\n            } else {\n              if (result) {\n                result.matches = cached.matches;\n              }\n              return cached.matches;\n            }\n          }\n          return false;\n        };\n      }\n    case \"_flexibleDescendant\":\n      {\n        // Include element itself, only used while querying an array\n        return function flexibleDescendant(elem) {\n          let current = elem;\n          do {\n            if (next(current)) {\n              return true;\n            }\n            current = getElementParent(current, adapter);\n          } while (current);\n          return false;\n        };\n      }\n    case SelectorType.Parent:\n      {\n        return function parent(elem) {\n          return adapter.getChildren(elem).some(elem => adapter.isTag(elem) && next(elem));\n        };\n      }\n    case SelectorType.Child:\n      {\n        return function child(elem) {\n          const parent = getElementParent(elem, adapter);\n          return parent !== null && next(parent);\n        };\n      }\n    case SelectorType.Sibling:\n      {\n        return function sibling(elem) {\n          const siblings = adapter.getSiblings(elem);\n          for (let i = 0; i < siblings.length; i++) {\n            const currentSibling = siblings[i];\n            if (equals(elem, currentSibling)) {\n              break;\n            }\n            if (adapter.isTag(currentSibling) && next(currentSibling)) {\n              return true;\n            }\n          }\n          return false;\n        };\n      }\n    case SelectorType.Adjacent:\n      {\n        if (adapter.prevElementSibling) {\n          return function adjacent(elem) {\n            const previous = adapter.prevElementSibling(elem);\n            return previous != null && next(previous);\n          };\n        }\n        return function adjacent(elem) {\n          const siblings = adapter.getSiblings(elem);\n          let lastElement;\n          for (let i = 0; i < siblings.length; i++) {\n            const currentSibling = siblings[i];\n            if (equals(elem, currentSibling)) {\n              break;\n            }\n            if (adapter.isTag(currentSibling)) {\n              lastElement = currentSibling;\n            }\n          }\n          return !!lastElement && next(lastElement);\n        };\n      }\n    case SelectorType.Universal:\n      {\n        if (selector.namespace != null && selector.namespace !== \"*\") {\n          throw new Error(\"Namespaced universal selectors are not yet supported by css-select\");\n        }\n        return next;\n      }\n  }\n}\nconst DESCENDANT_TOKEN = {\n  type: SelectorType.Descendant\n};\nconst FLEXIBLE_DESCENDANT_TOKEN = {\n  type: \"_flexibleDescendant\"\n};\nconst SCOPE_TOKEN = {\n  type: SelectorType.Pseudo,\n  name: \"scope\",\n  data: null\n};\n/*\n * CSS 4 Spec (Draft): 3.4.1. Absolutizing a Relative Selector\n * http://www.w3.org/TR/selectors4/#absolutizing\n */\nfunction absolutize(token, {\n  adapter\n}, context) {\n  // TODO Use better check if the context is a document\n  const hasContext = !!context?.every(e => e === PLACEHOLDER_ELEMENT || adapter.isTag(e) && getElementParent(e, adapter) !== null);\n  for (const t of token) {\n    if (t.length > 0 && isTraversal(t[0]) && t[0].type !== SelectorType.Descendant) ;else if (hasContext && !t.some(includesScopePseudo)) {\n      t.unshift(DESCENDANT_TOKEN);\n    } else {\n      continue;\n    }\n    t.unshift(SCOPE_TOKEN);\n  }\n}\nfunction compileToken(token, options, ctx) {\n  token.forEach(sortRules);\n  const {\n    context = ctx,\n    rootFunc = boolbaseExports.trueFunc\n  } = options;\n  const isArrayContext = Array.isArray(context);\n  const finalContext = context && (Array.isArray(context) ? context : [context]);\n  // Check if the selector is relative\n  if (options.relativeSelector !== false) {\n    absolutize(token, options, finalContext);\n  } else if (token.some(t => t.length > 0 && isTraversal(t[0]))) {\n    throw new Error(\"Relative selectors are not allowed when the `relativeSelector` option is disabled\");\n  }\n  let shouldTestNextSiblings = false;\n  let query = boolbaseExports.falseFunc;\n  combineLoop: for (const rules of token) {\n    if (rules.length >= 2) {\n      const [first, second] = rules;\n      if (first.type !== SelectorType.Pseudo || first.name !== \"scope\") ;else if (isArrayContext && second.type === SelectorType.Descendant) {\n        rules[1] = FLEXIBLE_DESCENDANT_TOKEN;\n      } else if (second.type === SelectorType.Adjacent || second.type === SelectorType.Sibling) {\n        shouldTestNextSiblings = true;\n      }\n    }\n    let next = rootFunc;\n    let hasExpensiveSubselector = false;\n    for (const rule of rules) {\n      next = compileGeneralSelector(next, rule, options, finalContext, compileToken, hasExpensiveSubselector);\n      const quality = getQuality(rule);\n      if (quality === 0) {\n        hasExpensiveSubselector = true;\n      }\n      // If the sub-selector won't match any elements, skip it.\n      if (next === boolbaseExports.falseFunc) {\n        continue combineLoop;\n      }\n    }\n    // If we have a function that always returns true, we can stop here.\n    if (next === rootFunc) {\n      return rootFunc;\n    }\n    query = query === boolbaseExports.falseFunc ? next : or(query, next);\n  }\n  query.shouldTestNextSiblings = shouldTestNextSiblings;\n  return query;\n}\nfunction or(a, b) {\n  return elem => a(elem) || b(elem);\n}\nconst defaultEquals = (a, b) => a === b;\nconst defaultOptions = {\n  adapter: DomUtils,\n  equals: defaultEquals\n};\nfunction convertOptionFormats(options) {\n  /*\n   * We force one format of options to the other one.\n   */\n  // @ts-expect-error Default options may have incompatible `Node` / `ElementNode`.\n  const opts = options ?? defaultOptions;\n  // @ts-expect-error Same as above.\n  opts.adapter ?? (opts.adapter = DomUtils);\n  // @ts-expect-error `equals` does not exist on `Options`\n  opts.equals ?? (opts.equals = opts.adapter?.equals ?? defaultEquals);\n  return opts;\n}\n/**\n * Like `compile`, but does not add a check if elements are tags.\n */\nfunction _compileUnsafe(selector, options, context) {\n  return _compileToken(typeof selector === \"string\" ? parse$1(selector) : selector, options, context);\n}\n/**\n * @deprecated Use `_compileUnsafe` instead.\n */\nfunction _compileToken(selector, options, context) {\n  return compileToken(selector, convertOptionFormats(options), context);\n}\nfunction getSelectorFunc(searchFunc) {\n  return function select(query, elements, options) {\n    const opts = convertOptionFormats(options);\n    if (typeof query !== \"function\") {\n      query = _compileUnsafe(query, opts, elements);\n    }\n    const filteredElements = prepareContext(elements, opts.adapter, query.shouldTestNextSiblings);\n    return searchFunc(query, filteredElements, opts);\n  };\n}\nfunction prepareContext(elems, adapter, shouldTestNextSiblings = false) {\n  /*\n   * Add siblings if the query requires them.\n   * See https://github.com/fb55/css-select/pull/43#issuecomment-225414692\n   */\n  if (shouldTestNextSiblings) {\n    elems = appendNextSiblings(elems, adapter);\n  }\n  return Array.isArray(elems) ? adapter.removeSubsets(elems) : adapter.getChildren(elems);\n}\nfunction appendNextSiblings(elem, adapter) {\n  // Order matters because jQuery seems to check the children before the siblings\n  const elems = Array.isArray(elem) ? elem.slice(0) : [elem];\n  const elemsLength = elems.length;\n  for (let i = 0; i < elemsLength; i++) {\n    const nextSiblings = getNextSiblings(elems[i], adapter);\n    elems.push(...nextSiblings);\n  }\n  return elems;\n}\n/**\n * @template Node The generic Node type for the DOM adapter being used.\n * @template ElementNode The Node type for elements for the DOM adapter being used.\n * @param elems Elements to query. If it is an element, its children will be queried.\n * @param query can be either a CSS selector string or a compiled query function.\n * @param [options] options for querying the document.\n * @see compile for supported selector queries.\n * @returns All matching elements.\n *\n */\nconst selectAll = /*#__PURE__*/getSelectorFunc((query, elems, options) => query === boolbaseExports.falseFunc || !elems || elems.length === 0 ? [] : findAll(query, elems, options));\n/**\n * @template Node The generic Node type for the DOM adapter being used.\n * @template ElementNode The Node type for elements for the DOM adapter being used.\n * @param elems Elements to query. If it is an element, its children will be queried.\n * @param query can be either a CSS selector string or a compiled query function.\n * @param [options] options for querying the document.\n * @see compile for supported selector queries.\n * @returns the first match, or null if there was no match.\n */\nconst selectOne = /*#__PURE__*/getSelectorFunc((query, elems, options) => query === boolbaseExports.falseFunc || !elems || elems.length === 0 ? null : findOne(query, elems, options));\n\n// Generated using scripts/write-decode-map.ts\nconst htmlDecodeTree = /* #__PURE__ */new Uint16Array(\n// prettier-ignore\n/* #__PURE__ */\n/*#__PURE__*/\"\\u1d41<\\xd5\\u0131\\u028a\\u049d\\u057b\\u05d0\\u0675\\u06de\\u07a2\\u07d6\\u080f\\u0a4a\\u0a91\\u0da1\\u0e6d\\u0f09\\u0f26\\u10ca\\u1228\\u12e1\\u1415\\u149d\\u14c3\\u14df\\u1525\\0\\0\\0\\0\\0\\0\\u156b\\u16cd\\u198d\\u1c12\\u1ddd\\u1f7e\\u2060\\u21b0\\u228d\\u23c0\\u23fb\\u2442\\u2824\\u2912\\u2d08\\u2e48\\u2fce\\u3016\\u32ba\\u3639\\u37ac\\u38fe\\u3a28\\u3a71\\u3ae0\\u3b2e\\u0800EMabcfglmnoprstu\\\\bfms\\x7f\\x84\\x8b\\x90\\x95\\x98\\xa6\\xb3\\xb9\\xc8\\xcflig\\u803b\\xc6\\u40c6P\\u803b&\\u4026cute\\u803b\\xc1\\u40c1reve;\\u4102\\u0100iyx}rc\\u803b\\xc2\\u40c2;\\u4410r;\\uc000\\ud835\\udd04rave\\u803b\\xc0\\u40c0pha;\\u4391acr;\\u4100d;\\u6a53\\u0100gp\\x9d\\xa1on;\\u4104f;\\uc000\\ud835\\udd38plyFunction;\\u6061ing\\u803b\\xc5\\u40c5\\u0100cs\\xbe\\xc3r;\\uc000\\ud835\\udc9cign;\\u6254ilde\\u803b\\xc3\\u40c3ml\\u803b\\xc4\\u40c4\\u0400aceforsu\\xe5\\xfb\\xfe\\u0117\\u011c\\u0122\\u0127\\u012a\\u0100cr\\xea\\xf2kslash;\\u6216\\u0176\\xf6\\xf8;\\u6ae7ed;\\u6306y;\\u4411\\u0180crt\\u0105\\u010b\\u0114ause;\\u6235noullis;\\u612ca;\\u4392r;\\uc000\\ud835\\udd05pf;\\uc000\\ud835\\udd39eve;\\u42d8c\\xf2\\u0113mpeq;\\u624e\\u0700HOacdefhilorsu\\u014d\\u0151\\u0156\\u0180\\u019e\\u01a2\\u01b5\\u01b7\\u01ba\\u01dc\\u0215\\u0273\\u0278\\u027ecy;\\u4427PY\\u803b\\xa9\\u40a9\\u0180cpy\\u015d\\u0162\\u017aute;\\u4106\\u0100;i\\u0167\\u0168\\u62d2talDifferentialD;\\u6145leys;\\u612d\\u0200aeio\\u0189\\u018e\\u0194\\u0198ron;\\u410cdil\\u803b\\xc7\\u40c7rc;\\u4108nint;\\u6230ot;\\u410a\\u0100dn\\u01a7\\u01adilla;\\u40b8terDot;\\u40b7\\xf2\\u017fi;\\u43a7rcle\\u0200DMPT\\u01c7\\u01cb\\u01d1\\u01d6ot;\\u6299inus;\\u6296lus;\\u6295imes;\\u6297o\\u0100cs\\u01e2\\u01f8kwiseContourIntegral;\\u6232eCurly\\u0100DQ\\u0203\\u020foubleQuote;\\u601duote;\\u6019\\u0200lnpu\\u021e\\u0228\\u0247\\u0255on\\u0100;e\\u0225\\u0226\\u6237;\\u6a74\\u0180git\\u022f\\u0236\\u023aruent;\\u6261nt;\\u622fourIntegral;\\u622e\\u0100fr\\u024c\\u024e;\\u6102oduct;\\u6210nterClockwiseContourIntegral;\\u6233oss;\\u6a2fcr;\\uc000\\ud835\\udc9ep\\u0100;C\\u0284\\u0285\\u62d3ap;\\u624d\\u0580DJSZacefios\\u02a0\\u02ac\\u02b0\\u02b4\\u02b8\\u02cb\\u02d7\\u02e1\\u02e6\\u0333\\u048d\\u0100;o\\u0179\\u02a5trahd;\\u6911cy;\\u4402cy;\\u4405cy;\\u440f\\u0180grs\\u02bf\\u02c4\\u02c7ger;\\u6021r;\\u61a1hv;\\u6ae4\\u0100ay\\u02d0\\u02d5ron;\\u410e;\\u4414l\\u0100;t\\u02dd\\u02de\\u6207a;\\u4394r;\\uc000\\ud835\\udd07\\u0100af\\u02eb\\u0327\\u0100cm\\u02f0\\u0322ritical\\u0200ADGT\\u0300\\u0306\\u0316\\u031ccute;\\u40b4o\\u0174\\u030b\\u030d;\\u42d9bleAcute;\\u42ddrave;\\u4060ilde;\\u42dcond;\\u62c4ferentialD;\\u6146\\u0470\\u033d\\0\\0\\0\\u0342\\u0354\\0\\u0405f;\\uc000\\ud835\\udd3b\\u0180;DE\\u0348\\u0349\\u034d\\u40a8ot;\\u60dcqual;\\u6250ble\\u0300CDLRUV\\u0363\\u0372\\u0382\\u03cf\\u03e2\\u03f8ontourIntegra\\xec\\u0239o\\u0274\\u0379\\0\\0\\u037b\\xbb\\u0349nArrow;\\u61d3\\u0100eo\\u0387\\u03a4ft\\u0180ART\\u0390\\u0396\\u03a1rrow;\\u61d0ightArrow;\\u61d4e\\xe5\\u02cang\\u0100LR\\u03ab\\u03c4eft\\u0100AR\\u03b3\\u03b9rrow;\\u67f8ightArrow;\\u67faightArrow;\\u67f9ight\\u0100AT\\u03d8\\u03derrow;\\u61d2ee;\\u62a8p\\u0241\\u03e9\\0\\0\\u03efrrow;\\u61d1ownArrow;\\u61d5erticalBar;\\u6225n\\u0300ABLRTa\\u0412\\u042a\\u0430\\u045e\\u047f\\u037crrow\\u0180;BU\\u041d\\u041e\\u0422\\u6193ar;\\u6913pArrow;\\u61f5reve;\\u4311eft\\u02d2\\u043a\\0\\u0446\\0\\u0450ightVector;\\u6950eeVector;\\u695eector\\u0100;B\\u0459\\u045a\\u61bdar;\\u6956ight\\u01d4\\u0467\\0\\u0471eeVector;\\u695fector\\u0100;B\\u047a\\u047b\\u61c1ar;\\u6957ee\\u0100;A\\u0486\\u0487\\u62a4rrow;\\u61a7\\u0100ct\\u0492\\u0497r;\\uc000\\ud835\\udc9frok;\\u4110\\u0800NTacdfglmopqstux\\u04bd\\u04c0\\u04c4\\u04cb\\u04de\\u04e2\\u04e7\\u04ee\\u04f5\\u0521\\u052f\\u0536\\u0552\\u055d\\u0560\\u0565G;\\u414aH\\u803b\\xd0\\u40d0cute\\u803b\\xc9\\u40c9\\u0180aiy\\u04d2\\u04d7\\u04dcron;\\u411arc\\u803b\\xca\\u40ca;\\u442dot;\\u4116r;\\uc000\\ud835\\udd08rave\\u803b\\xc8\\u40c8ement;\\u6208\\u0100ap\\u04fa\\u04fecr;\\u4112ty\\u0253\\u0506\\0\\0\\u0512mallSquare;\\u65fberySmallSquare;\\u65ab\\u0100gp\\u0526\\u052aon;\\u4118f;\\uc000\\ud835\\udd3csilon;\\u4395u\\u0100ai\\u053c\\u0549l\\u0100;T\\u0542\\u0543\\u6a75ilde;\\u6242librium;\\u61cc\\u0100ci\\u0557\\u055ar;\\u6130m;\\u6a73a;\\u4397ml\\u803b\\xcb\\u40cb\\u0100ip\\u056a\\u056fsts;\\u6203onentialE;\\u6147\\u0280cfios\\u0585\\u0588\\u058d\\u05b2\\u05ccy;\\u4424r;\\uc000\\ud835\\udd09lled\\u0253\\u0597\\0\\0\\u05a3mallSquare;\\u65fcerySmallSquare;\\u65aa\\u0370\\u05ba\\0\\u05bf\\0\\0\\u05c4f;\\uc000\\ud835\\udd3dAll;\\u6200riertrf;\\u6131c\\xf2\\u05cb\\u0600JTabcdfgorst\\u05e8\\u05ec\\u05ef\\u05fa\\u0600\\u0612\\u0616\\u061b\\u061d\\u0623\\u066c\\u0672cy;\\u4403\\u803b>\\u403emma\\u0100;d\\u05f7\\u05f8\\u4393;\\u43dcreve;\\u411e\\u0180eiy\\u0607\\u060c\\u0610dil;\\u4122rc;\\u411c;\\u4413ot;\\u4120r;\\uc000\\ud835\\udd0a;\\u62d9pf;\\uc000\\ud835\\udd3eeater\\u0300EFGLST\\u0635\\u0644\\u064e\\u0656\\u065b\\u0666qual\\u0100;L\\u063e\\u063f\\u6265ess;\\u62dbullEqual;\\u6267reater;\\u6aa2ess;\\u6277lantEqual;\\u6a7eilde;\\u6273cr;\\uc000\\ud835\\udca2;\\u626b\\u0400Aacfiosu\\u0685\\u068b\\u0696\\u069b\\u069e\\u06aa\\u06be\\u06caRDcy;\\u442a\\u0100ct\\u0690\\u0694ek;\\u42c7;\\u405eirc;\\u4124r;\\u610clbertSpace;\\u610b\\u01f0\\u06af\\0\\u06b2f;\\u610dizontalLine;\\u6500\\u0100ct\\u06c3\\u06c5\\xf2\\u06a9rok;\\u4126mp\\u0144\\u06d0\\u06d8ownHum\\xf0\\u012fqual;\\u624f\\u0700EJOacdfgmnostu\\u06fa\\u06fe\\u0703\\u0707\\u070e\\u071a\\u071e\\u0721\\u0728\\u0744\\u0778\\u078b\\u078f\\u0795cy;\\u4415lig;\\u4132cy;\\u4401cute\\u803b\\xcd\\u40cd\\u0100iy\\u0713\\u0718rc\\u803b\\xce\\u40ce;\\u4418ot;\\u4130r;\\u6111rave\\u803b\\xcc\\u40cc\\u0180;ap\\u0720\\u072f\\u073f\\u0100cg\\u0734\\u0737r;\\u412ainaryI;\\u6148lie\\xf3\\u03dd\\u01f4\\u0749\\0\\u0762\\u0100;e\\u074d\\u074e\\u622c\\u0100gr\\u0753\\u0758ral;\\u622bsection;\\u62c2isible\\u0100CT\\u076c\\u0772omma;\\u6063imes;\\u6062\\u0180gpt\\u077f\\u0783\\u0788on;\\u412ef;\\uc000\\ud835\\udd40a;\\u4399cr;\\u6110ilde;\\u4128\\u01eb\\u079a\\0\\u079ecy;\\u4406l\\u803b\\xcf\\u40cf\\u0280cfosu\\u07ac\\u07b7\\u07bc\\u07c2\\u07d0\\u0100iy\\u07b1\\u07b5rc;\\u4134;\\u4419r;\\uc000\\ud835\\udd0dpf;\\uc000\\ud835\\udd41\\u01e3\\u07c7\\0\\u07ccr;\\uc000\\ud835\\udca5rcy;\\u4408kcy;\\u4404\\u0380HJacfos\\u07e4\\u07e8\\u07ec\\u07f1\\u07fd\\u0802\\u0808cy;\\u4425cy;\\u440cppa;\\u439a\\u0100ey\\u07f6\\u07fbdil;\\u4136;\\u441ar;\\uc000\\ud835\\udd0epf;\\uc000\\ud835\\udd42cr;\\uc000\\ud835\\udca6\\u0580JTaceflmost\\u0825\\u0829\\u082c\\u0850\\u0863\\u09b3\\u09b8\\u09c7\\u09cd\\u0a37\\u0a47cy;\\u4409\\u803b<\\u403c\\u0280cmnpr\\u0837\\u083c\\u0841\\u0844\\u084dute;\\u4139bda;\\u439bg;\\u67ealacetrf;\\u6112r;\\u619e\\u0180aey\\u0857\\u085c\\u0861ron;\\u413ddil;\\u413b;\\u441b\\u0100fs\\u0868\\u0970t\\u0500ACDFRTUVar\\u087e\\u08a9\\u08b1\\u08e0\\u08e6\\u08fc\\u092f\\u095b\\u0390\\u096a\\u0100nr\\u0883\\u088fgleBracket;\\u67e8row\\u0180;BR\\u0899\\u089a\\u089e\\u6190ar;\\u61e4ightArrow;\\u61c6eiling;\\u6308o\\u01f5\\u08b7\\0\\u08c3bleBracket;\\u67e6n\\u01d4\\u08c8\\0\\u08d2eeVector;\\u6961ector\\u0100;B\\u08db\\u08dc\\u61c3ar;\\u6959loor;\\u630aight\\u0100AV\\u08ef\\u08f5rrow;\\u6194ector;\\u694e\\u0100er\\u0901\\u0917e\\u0180;AV\\u0909\\u090a\\u0910\\u62a3rrow;\\u61a4ector;\\u695aiangle\\u0180;BE\\u0924\\u0925\\u0929\\u62b2ar;\\u69cfqual;\\u62b4p\\u0180DTV\\u0937\\u0942\\u094cownVector;\\u6951eeVector;\\u6960ector\\u0100;B\\u0956\\u0957\\u61bfar;\\u6958ector\\u0100;B\\u0965\\u0966\\u61bcar;\\u6952ight\\xe1\\u039cs\\u0300EFGLST\\u097e\\u098b\\u0995\\u099d\\u09a2\\u09adqualGreater;\\u62daullEqual;\\u6266reater;\\u6276ess;\\u6aa1lantEqual;\\u6a7dilde;\\u6272r;\\uc000\\ud835\\udd0f\\u0100;e\\u09bd\\u09be\\u62d8ftarrow;\\u61daidot;\\u413f\\u0180npw\\u09d4\\u0a16\\u0a1bg\\u0200LRlr\\u09de\\u09f7\\u0a02\\u0a10eft\\u0100AR\\u09e6\\u09ecrrow;\\u67f5ightArrow;\\u67f7ightArrow;\\u67f6eft\\u0100ar\\u03b3\\u0a0aight\\xe1\\u03bfight\\xe1\\u03caf;\\uc000\\ud835\\udd43er\\u0100LR\\u0a22\\u0a2ceftArrow;\\u6199ightArrow;\\u6198\\u0180cht\\u0a3e\\u0a40\\u0a42\\xf2\\u084c;\\u61b0rok;\\u4141;\\u626a\\u0400acefiosu\\u0a5a\\u0a5d\\u0a60\\u0a77\\u0a7c\\u0a85\\u0a8b\\u0a8ep;\\u6905y;\\u441c\\u0100dl\\u0a65\\u0a6fiumSpace;\\u605flintrf;\\u6133r;\\uc000\\ud835\\udd10nusPlus;\\u6213pf;\\uc000\\ud835\\udd44c\\xf2\\u0a76;\\u439c\\u0480Jacefostu\\u0aa3\\u0aa7\\u0aad\\u0ac0\\u0b14\\u0b19\\u0d91\\u0d97\\u0d9ecy;\\u440acute;\\u4143\\u0180aey\\u0ab4\\u0ab9\\u0aberon;\\u4147dil;\\u4145;\\u441d\\u0180gsw\\u0ac7\\u0af0\\u0b0eative\\u0180MTV\\u0ad3\\u0adf\\u0ae8ediumSpace;\\u600bhi\\u0100cn\\u0ae6\\u0ad8\\xeb\\u0ad9eryThi\\xee\\u0ad9ted\\u0100GL\\u0af8\\u0b06reaterGreate\\xf2\\u0673essLes\\xf3\\u0a48Line;\\u400ar;\\uc000\\ud835\\udd11\\u0200Bnpt\\u0b22\\u0b28\\u0b37\\u0b3areak;\\u6060BreakingSpace;\\u40a0f;\\u6115\\u0680;CDEGHLNPRSTV\\u0b55\\u0b56\\u0b6a\\u0b7c\\u0ba1\\u0beb\\u0c04\\u0c5e\\u0c84\\u0ca6\\u0cd8\\u0d61\\u0d85\\u6aec\\u0100ou\\u0b5b\\u0b64ngruent;\\u6262pCap;\\u626doubleVerticalBar;\\u6226\\u0180lqx\\u0b83\\u0b8a\\u0b9bement;\\u6209ual\\u0100;T\\u0b92\\u0b93\\u6260ilde;\\uc000\\u2242\\u0338ists;\\u6204reater\\u0380;EFGLST\\u0bb6\\u0bb7\\u0bbd\\u0bc9\\u0bd3\\u0bd8\\u0be5\\u626fqual;\\u6271ullEqual;\\uc000\\u2267\\u0338reater;\\uc000\\u226b\\u0338ess;\\u6279lantEqual;\\uc000\\u2a7e\\u0338ilde;\\u6275ump\\u0144\\u0bf2\\u0bfdownHump;\\uc000\\u224e\\u0338qual;\\uc000\\u224f\\u0338e\\u0100fs\\u0c0a\\u0c27tTriangle\\u0180;BE\\u0c1a\\u0c1b\\u0c21\\u62eaar;\\uc000\\u29cf\\u0338qual;\\u62ecs\\u0300;EGLST\\u0c35\\u0c36\\u0c3c\\u0c44\\u0c4b\\u0c58\\u626equal;\\u6270reater;\\u6278ess;\\uc000\\u226a\\u0338lantEqual;\\uc000\\u2a7d\\u0338ilde;\\u6274ested\\u0100GL\\u0c68\\u0c79reaterGreater;\\uc000\\u2aa2\\u0338essLess;\\uc000\\u2aa1\\u0338recedes\\u0180;ES\\u0c92\\u0c93\\u0c9b\\u6280qual;\\uc000\\u2aaf\\u0338lantEqual;\\u62e0\\u0100ei\\u0cab\\u0cb9verseElement;\\u620cghtTriangle\\u0180;BE\\u0ccb\\u0ccc\\u0cd2\\u62ebar;\\uc000\\u29d0\\u0338qual;\\u62ed\\u0100qu\\u0cdd\\u0d0cuareSu\\u0100bp\\u0ce8\\u0cf9set\\u0100;E\\u0cf0\\u0cf3\\uc000\\u228f\\u0338qual;\\u62e2erset\\u0100;E\\u0d03\\u0d06\\uc000\\u2290\\u0338qual;\\u62e3\\u0180bcp\\u0d13\\u0d24\\u0d4eset\\u0100;E\\u0d1b\\u0d1e\\uc000\\u2282\\u20d2qual;\\u6288ceeds\\u0200;EST\\u0d32\\u0d33\\u0d3b\\u0d46\\u6281qual;\\uc000\\u2ab0\\u0338lantEqual;\\u62e1ilde;\\uc000\\u227f\\u0338erset\\u0100;E\\u0d58\\u0d5b\\uc000\\u2283\\u20d2qual;\\u6289ilde\\u0200;EFT\\u0d6e\\u0d6f\\u0d75\\u0d7f\\u6241qual;\\u6244ullEqual;\\u6247ilde;\\u6249erticalBar;\\u6224cr;\\uc000\\ud835\\udca9ilde\\u803b\\xd1\\u40d1;\\u439d\\u0700Eacdfgmoprstuv\\u0dbd\\u0dc2\\u0dc9\\u0dd5\\u0ddb\\u0de0\\u0de7\\u0dfc\\u0e02\\u0e20\\u0e22\\u0e32\\u0e3f\\u0e44lig;\\u4152cute\\u803b\\xd3\\u40d3\\u0100iy\\u0dce\\u0dd3rc\\u803b\\xd4\\u40d4;\\u441eblac;\\u4150r;\\uc000\\ud835\\udd12rave\\u803b\\xd2\\u40d2\\u0180aei\\u0dee\\u0df2\\u0df6cr;\\u414cga;\\u43a9cron;\\u439fpf;\\uc000\\ud835\\udd46enCurly\\u0100DQ\\u0e0e\\u0e1aoubleQuote;\\u601cuote;\\u6018;\\u6a54\\u0100cl\\u0e27\\u0e2cr;\\uc000\\ud835\\udcaaash\\u803b\\xd8\\u40d8i\\u016c\\u0e37\\u0e3cde\\u803b\\xd5\\u40d5es;\\u6a37ml\\u803b\\xd6\\u40d6er\\u0100BP\\u0e4b\\u0e60\\u0100ar\\u0e50\\u0e53r;\\u603eac\\u0100ek\\u0e5a\\u0e5c;\\u63deet;\\u63b4arenthesis;\\u63dc\\u0480acfhilors\\u0e7f\\u0e87\\u0e8a\\u0e8f\\u0e92\\u0e94\\u0e9d\\u0eb0\\u0efcrtialD;\\u6202y;\\u441fr;\\uc000\\ud835\\udd13i;\\u43a6;\\u43a0usMinus;\\u40b1\\u0100ip\\u0ea2\\u0eadncareplan\\xe5\\u069df;\\u6119\\u0200;eio\\u0eb9\\u0eba\\u0ee0\\u0ee4\\u6abbcedes\\u0200;EST\\u0ec8\\u0ec9\\u0ecf\\u0eda\\u627aqual;\\u6aaflantEqual;\\u627cilde;\\u627eme;\\u6033\\u0100dp\\u0ee9\\u0eeeuct;\\u620fortion\\u0100;a\\u0225\\u0ef9l;\\u621d\\u0100ci\\u0f01\\u0f06r;\\uc000\\ud835\\udcab;\\u43a8\\u0200Ufos\\u0f11\\u0f16\\u0f1b\\u0f1fOT\\u803b\\\"\\u4022r;\\uc000\\ud835\\udd14pf;\\u611acr;\\uc000\\ud835\\udcac\\u0600BEacefhiorsu\\u0f3e\\u0f43\\u0f47\\u0f60\\u0f73\\u0fa7\\u0faa\\u0fad\\u1096\\u10a9\\u10b4\\u10bearr;\\u6910G\\u803b\\xae\\u40ae\\u0180cnr\\u0f4e\\u0f53\\u0f56ute;\\u4154g;\\u67ebr\\u0100;t\\u0f5c\\u0f5d\\u61a0l;\\u6916\\u0180aey\\u0f67\\u0f6c\\u0f71ron;\\u4158dil;\\u4156;\\u4420\\u0100;v\\u0f78\\u0f79\\u611cerse\\u0100EU\\u0f82\\u0f99\\u0100lq\\u0f87\\u0f8eement;\\u620builibrium;\\u61cbpEquilibrium;\\u696fr\\xbb\\u0f79o;\\u43a1ght\\u0400ACDFTUVa\\u0fc1\\u0feb\\u0ff3\\u1022\\u1028\\u105b\\u1087\\u03d8\\u0100nr\\u0fc6\\u0fd2gleBracket;\\u67e9row\\u0180;BL\\u0fdc\\u0fdd\\u0fe1\\u6192ar;\\u61e5eftArrow;\\u61c4eiling;\\u6309o\\u01f5\\u0ff9\\0\\u1005bleBracket;\\u67e7n\\u01d4\\u100a\\0\\u1014eeVector;\\u695dector\\u0100;B\\u101d\\u101e\\u61c2ar;\\u6955loor;\\u630b\\u0100er\\u102d\\u1043e\\u0180;AV\\u1035\\u1036\\u103c\\u62a2rrow;\\u61a6ector;\\u695biangle\\u0180;BE\\u1050\\u1051\\u1055\\u62b3ar;\\u69d0qual;\\u62b5p\\u0180DTV\\u1063\\u106e\\u1078ownVector;\\u694feeVector;\\u695cector\\u0100;B\\u1082\\u1083\\u61bear;\\u6954ector\\u0100;B\\u1091\\u1092\\u61c0ar;\\u6953\\u0100pu\\u109b\\u109ef;\\u611dndImplies;\\u6970ightarrow;\\u61db\\u0100ch\\u10b9\\u10bcr;\\u611b;\\u61b1leDelayed;\\u69f4\\u0680HOacfhimoqstu\\u10e4\\u10f1\\u10f7\\u10fd\\u1119\\u111e\\u1151\\u1156\\u1161\\u1167\\u11b5\\u11bb\\u11bf\\u0100Cc\\u10e9\\u10eeHcy;\\u4429y;\\u4428FTcy;\\u442ccute;\\u415a\\u0280;aeiy\\u1108\\u1109\\u110e\\u1113\\u1117\\u6abcron;\\u4160dil;\\u415erc;\\u415c;\\u4421r;\\uc000\\ud835\\udd16ort\\u0200DLRU\\u112a\\u1134\\u113e\\u1149ownArrow\\xbb\\u041eeftArrow\\xbb\\u089aightArrow\\xbb\\u0fddpArrow;\\u6191gma;\\u43a3allCircle;\\u6218pf;\\uc000\\ud835\\udd4a\\u0272\\u116d\\0\\0\\u1170t;\\u621aare\\u0200;ISU\\u117b\\u117c\\u1189\\u11af\\u65a1ntersection;\\u6293u\\u0100bp\\u118f\\u119eset\\u0100;E\\u1197\\u1198\\u628fqual;\\u6291erset\\u0100;E\\u11a8\\u11a9\\u6290qual;\\u6292nion;\\u6294cr;\\uc000\\ud835\\udcaear;\\u62c6\\u0200bcmp\\u11c8\\u11db\\u1209\\u120b\\u0100;s\\u11cd\\u11ce\\u62d0et\\u0100;E\\u11cd\\u11d5qual;\\u6286\\u0100ch\\u11e0\\u1205eeds\\u0200;EST\\u11ed\\u11ee\\u11f4\\u11ff\\u627bqual;\\u6ab0lantEqual;\\u627dilde;\\u627fTh\\xe1\\u0f8c;\\u6211\\u0180;es\\u1212\\u1213\\u1223\\u62d1rset\\u0100;E\\u121c\\u121d\\u6283qual;\\u6287et\\xbb\\u1213\\u0580HRSacfhiors\\u123e\\u1244\\u1249\\u1255\\u125e\\u1271\\u1276\\u129f\\u12c2\\u12c8\\u12d1ORN\\u803b\\xde\\u40deADE;\\u6122\\u0100Hc\\u124e\\u1252cy;\\u440by;\\u4426\\u0100bu\\u125a\\u125c;\\u4009;\\u43a4\\u0180aey\\u1265\\u126a\\u126fron;\\u4164dil;\\u4162;\\u4422r;\\uc000\\ud835\\udd17\\u0100ei\\u127b\\u1289\\u01f2\\u1280\\0\\u1287efore;\\u6234a;\\u4398\\u0100cn\\u128e\\u1298kSpace;\\uc000\\u205f\\u200aSpace;\\u6009lde\\u0200;EFT\\u12ab\\u12ac\\u12b2\\u12bc\\u623cqual;\\u6243ullEqual;\\u6245ilde;\\u6248pf;\\uc000\\ud835\\udd4bipleDot;\\u60db\\u0100ct\\u12d6\\u12dbr;\\uc000\\ud835\\udcafrok;\\u4166\\u0ae1\\u12f7\\u130e\\u131a\\u1326\\0\\u132c\\u1331\\0\\0\\0\\0\\0\\u1338\\u133d\\u1377\\u1385\\0\\u13ff\\u1404\\u140a\\u1410\\u0100cr\\u12fb\\u1301ute\\u803b\\xda\\u40dar\\u0100;o\\u1307\\u1308\\u619fcir;\\u6949r\\u01e3\\u1313\\0\\u1316y;\\u440eve;\\u416c\\u0100iy\\u131e\\u1323rc\\u803b\\xdb\\u40db;\\u4423blac;\\u4170r;\\uc000\\ud835\\udd18rave\\u803b\\xd9\\u40d9acr;\\u416a\\u0100di\\u1341\\u1369er\\u0100BP\\u1348\\u135d\\u0100ar\\u134d\\u1350r;\\u405fac\\u0100ek\\u1357\\u1359;\\u63dfet;\\u63b5arenthesis;\\u63ddon\\u0100;P\\u1370\\u1371\\u62c3lus;\\u628e\\u0100gp\\u137b\\u137fon;\\u4172f;\\uc000\\ud835\\udd4c\\u0400ADETadps\\u1395\\u13ae\\u13b8\\u13c4\\u03e8\\u13d2\\u13d7\\u13f3rrow\\u0180;BD\\u1150\\u13a0\\u13a4ar;\\u6912ownArrow;\\u61c5ownArrow;\\u6195quilibrium;\\u696eee\\u0100;A\\u13cb\\u13cc\\u62a5rrow;\\u61a5own\\xe1\\u03f3er\\u0100LR\\u13de\\u13e8eftArrow;\\u6196ightArrow;\\u6197i\\u0100;l\\u13f9\\u13fa\\u43d2on;\\u43a5ing;\\u416ecr;\\uc000\\ud835\\udcb0ilde;\\u4168ml\\u803b\\xdc\\u40dc\\u0480Dbcdefosv\\u1427\\u142c\\u1430\\u1433\\u143e\\u1485\\u148a\\u1490\\u1496ash;\\u62abar;\\u6aeby;\\u4412ash\\u0100;l\\u143b\\u143c\\u62a9;\\u6ae6\\u0100er\\u1443\\u1445;\\u62c1\\u0180bty\\u144c\\u1450\\u147aar;\\u6016\\u0100;i\\u144f\\u1455cal\\u0200BLST\\u1461\\u1465\\u146a\\u1474ar;\\u6223ine;\\u407ceparator;\\u6758ilde;\\u6240ThinSpace;\\u600ar;\\uc000\\ud835\\udd19pf;\\uc000\\ud835\\udd4dcr;\\uc000\\ud835\\udcb1dash;\\u62aa\\u0280cefos\\u14a7\\u14ac\\u14b1\\u14b6\\u14bcirc;\\u4174dge;\\u62c0r;\\uc000\\ud835\\udd1apf;\\uc000\\ud835\\udd4ecr;\\uc000\\ud835\\udcb2\\u0200fios\\u14cb\\u14d0\\u14d2\\u14d8r;\\uc000\\ud835\\udd1b;\\u439epf;\\uc000\\ud835\\udd4fcr;\\uc000\\ud835\\udcb3\\u0480AIUacfosu\\u14f1\\u14f5\\u14f9\\u14fd\\u1504\\u150f\\u1514\\u151a\\u1520cy;\\u442fcy;\\u4407cy;\\u442ecute\\u803b\\xdd\\u40dd\\u0100iy\\u1509\\u150drc;\\u4176;\\u442br;\\uc000\\ud835\\udd1cpf;\\uc000\\ud835\\udd50cr;\\uc000\\ud835\\udcb4ml;\\u4178\\u0400Hacdefos\\u1535\\u1539\\u153f\\u154b\\u154f\\u155d\\u1560\\u1564cy;\\u4416cute;\\u4179\\u0100ay\\u1544\\u1549ron;\\u417d;\\u4417ot;\\u417b\\u01f2\\u1554\\0\\u155boWidt\\xe8\\u0ad9a;\\u4396r;\\u6128pf;\\u6124cr;\\uc000\\ud835\\udcb5\\u0be1\\u1583\\u158a\\u1590\\0\\u15b0\\u15b6\\u15bf\\0\\0\\0\\0\\u15c6\\u15db\\u15eb\\u165f\\u166d\\0\\u1695\\u169b\\u16b2\\u16b9\\0\\u16becute\\u803b\\xe1\\u40e1reve;\\u4103\\u0300;Ediuy\\u159c\\u159d\\u15a1\\u15a3\\u15a8\\u15ad\\u623e;\\uc000\\u223e\\u0333;\\u623frc\\u803b\\xe2\\u40e2te\\u80bb\\xb4\\u0306;\\u4430lig\\u803b\\xe6\\u40e6\\u0100;r\\xb2\\u15ba;\\uc000\\ud835\\udd1erave\\u803b\\xe0\\u40e0\\u0100ep\\u15ca\\u15d6\\u0100fp\\u15cf\\u15d4sym;\\u6135\\xe8\\u15d3ha;\\u43b1\\u0100ap\\u15dfc\\u0100cl\\u15e4\\u15e7r;\\u4101g;\\u6a3f\\u0264\\u15f0\\0\\0\\u160a\\u0280;adsv\\u15fa\\u15fb\\u15ff\\u1601\\u1607\\u6227nd;\\u6a55;\\u6a5clope;\\u6a58;\\u6a5a\\u0380;elmrsz\\u1618\\u1619\\u161b\\u161e\\u163f\\u164f\\u1659\\u6220;\\u69a4e\\xbb\\u1619sd\\u0100;a\\u1625\\u1626\\u6221\\u0461\\u1630\\u1632\\u1634\\u1636\\u1638\\u163a\\u163c\\u163e;\\u69a8;\\u69a9;\\u69aa;\\u69ab;\\u69ac;\\u69ad;\\u69ae;\\u69aft\\u0100;v\\u1645\\u1646\\u621fb\\u0100;d\\u164c\\u164d\\u62be;\\u699d\\u0100pt\\u1654\\u1657h;\\u6222\\xbb\\xb9arr;\\u637c\\u0100gp\\u1663\\u1667on;\\u4105f;\\uc000\\ud835\\udd52\\u0380;Eaeiop\\u12c1\\u167b\\u167d\\u1682\\u1684\\u1687\\u168a;\\u6a70cir;\\u6a6f;\\u624ad;\\u624bs;\\u4027rox\\u0100;e\\u12c1\\u1692\\xf1\\u1683ing\\u803b\\xe5\\u40e5\\u0180cty\\u16a1\\u16a6\\u16a8r;\\uc000\\ud835\\udcb6;\\u402amp\\u0100;e\\u12c1\\u16af\\xf1\\u0288ilde\\u803b\\xe3\\u40e3ml\\u803b\\xe4\\u40e4\\u0100ci\\u16c2\\u16c8onin\\xf4\\u0272nt;\\u6a11\\u0800Nabcdefiklnoprsu\\u16ed\\u16f1\\u1730\\u173c\\u1743\\u1748\\u1778\\u177d\\u17e0\\u17e6\\u1839\\u1850\\u170d\\u193d\\u1948\\u1970ot;\\u6aed\\u0100cr\\u16f6\\u171ek\\u0200ceps\\u1700\\u1705\\u170d\\u1713ong;\\u624cpsilon;\\u43f6rime;\\u6035im\\u0100;e\\u171a\\u171b\\u623dq;\\u62cd\\u0176\\u1722\\u1726ee;\\u62bded\\u0100;g\\u172c\\u172d\\u6305e\\xbb\\u172drk\\u0100;t\\u135c\\u1737brk;\\u63b6\\u0100oy\\u1701\\u1741;\\u4431quo;\\u601e\\u0280cmprt\\u1753\\u175b\\u1761\\u1764\\u1768aus\\u0100;e\\u010a\\u0109ptyv;\\u69b0s\\xe9\\u170cno\\xf5\\u0113\\u0180ahw\\u176f\\u1771\\u1773;\\u43b2;\\u6136een;\\u626cr;\\uc000\\ud835\\udd1fg\\u0380costuvw\\u178d\\u179d\\u17b3\\u17c1\\u17d5\\u17db\\u17de\\u0180aiu\\u1794\\u1796\\u179a\\xf0\\u0760rc;\\u65efp\\xbb\\u1371\\u0180dpt\\u17a4\\u17a8\\u17adot;\\u6a00lus;\\u6a01imes;\\u6a02\\u0271\\u17b9\\0\\0\\u17becup;\\u6a06ar;\\u6605riangle\\u0100du\\u17cd\\u17d2own;\\u65bdp;\\u65b3plus;\\u6a04e\\xe5\\u1444\\xe5\\u14adarow;\\u690d\\u0180ako\\u17ed\\u1826\\u1835\\u0100cn\\u17f2\\u1823k\\u0180lst\\u17fa\\u05ab\\u1802ozenge;\\u69ebriangle\\u0200;dlr\\u1812\\u1813\\u1818\\u181d\\u65b4own;\\u65beeft;\\u65c2ight;\\u65b8k;\\u6423\\u01b1\\u182b\\0\\u1833\\u01b2\\u182f\\0\\u1831;\\u6592;\\u65914;\\u6593ck;\\u6588\\u0100eo\\u183e\\u184d\\u0100;q\\u1843\\u1846\\uc000=\\u20e5uiv;\\uc000\\u2261\\u20e5t;\\u6310\\u0200ptwx\\u1859\\u185e\\u1867\\u186cf;\\uc000\\ud835\\udd53\\u0100;t\\u13cb\\u1863om\\xbb\\u13cctie;\\u62c8\\u0600DHUVbdhmptuv\\u1885\\u1896\\u18aa\\u18bb\\u18d7\\u18db\\u18ec\\u18ff\\u1905\\u190a\\u1910\\u1921\\u0200LRlr\\u188e\\u1890\\u1892\\u1894;\\u6557;\\u6554;\\u6556;\\u6553\\u0280;DUdu\\u18a1\\u18a2\\u18a4\\u18a6\\u18a8\\u6550;\\u6566;\\u6569;\\u6564;\\u6567\\u0200LRlr\\u18b3\\u18b5\\u18b7\\u18b9;\\u655d;\\u655a;\\u655c;\\u6559\\u0380;HLRhlr\\u18ca\\u18cb\\u18cd\\u18cf\\u18d1\\u18d3\\u18d5\\u6551;\\u656c;\\u6563;\\u6560;\\u656b;\\u6562;\\u655fox;\\u69c9\\u0200LRlr\\u18e4\\u18e6\\u18e8\\u18ea;\\u6555;\\u6552;\\u6510;\\u650c\\u0280;DUdu\\u06bd\\u18f7\\u18f9\\u18fb\\u18fd;\\u6565;\\u6568;\\u652c;\\u6534inus;\\u629flus;\\u629eimes;\\u62a0\\u0200LRlr\\u1919\\u191b\\u191d\\u191f;\\u655b;\\u6558;\\u6518;\\u6514\\u0380;HLRhlr\\u1930\\u1931\\u1933\\u1935\\u1937\\u1939\\u193b\\u6502;\\u656a;\\u6561;\\u655e;\\u653c;\\u6524;\\u651c\\u0100ev\\u0123\\u1942bar\\u803b\\xa6\\u40a6\\u0200ceio\\u1951\\u1956\\u195a\\u1960r;\\uc000\\ud835\\udcb7mi;\\u604fm\\u0100;e\\u171a\\u171cl\\u0180;bh\\u1968\\u1969\\u196b\\u405c;\\u69c5sub;\\u67c8\\u016c\\u1974\\u197el\\u0100;e\\u1979\\u197a\\u6022t\\xbb\\u197ap\\u0180;Ee\\u012f\\u1985\\u1987;\\u6aae\\u0100;q\\u06dc\\u06db\\u0ce1\\u19a7\\0\\u19e8\\u1a11\\u1a15\\u1a32\\0\\u1a37\\u1a50\\0\\0\\u1ab4\\0\\0\\u1ac1\\0\\0\\u1b21\\u1b2e\\u1b4d\\u1b52\\0\\u1bfd\\0\\u1c0c\\u0180cpr\\u19ad\\u19b2\\u19ddute;\\u4107\\u0300;abcds\\u19bf\\u19c0\\u19c4\\u19ca\\u19d5\\u19d9\\u6229nd;\\u6a44rcup;\\u6a49\\u0100au\\u19cf\\u19d2p;\\u6a4bp;\\u6a47ot;\\u6a40;\\uc000\\u2229\\ufe00\\u0100eo\\u19e2\\u19e5t;\\u6041\\xee\\u0693\\u0200aeiu\\u19f0\\u19fb\\u1a01\\u1a05\\u01f0\\u19f5\\0\\u19f8s;\\u6a4don;\\u410ddil\\u803b\\xe7\\u40e7rc;\\u4109ps\\u0100;s\\u1a0c\\u1a0d\\u6a4cm;\\u6a50ot;\\u410b\\u0180dmn\\u1a1b\\u1a20\\u1a26il\\u80bb\\xb8\\u01adptyv;\\u69b2t\\u8100\\xa2;e\\u1a2d\\u1a2e\\u40a2r\\xe4\\u01b2r;\\uc000\\ud835\\udd20\\u0180cei\\u1a3d\\u1a40\\u1a4dy;\\u4447ck\\u0100;m\\u1a47\\u1a48\\u6713ark\\xbb\\u1a48;\\u43c7r\\u0380;Ecefms\\u1a5f\\u1a60\\u1a62\\u1a6b\\u1aa4\\u1aaa\\u1aae\\u65cb;\\u69c3\\u0180;el\\u1a69\\u1a6a\\u1a6d\\u42c6q;\\u6257e\\u0261\\u1a74\\0\\0\\u1a88rrow\\u0100lr\\u1a7c\\u1a81eft;\\u61baight;\\u61bb\\u0280RSacd\\u1a92\\u1a94\\u1a96\\u1a9a\\u1a9f\\xbb\\u0f47;\\u64c8st;\\u629birc;\\u629aash;\\u629dnint;\\u6a10id;\\u6aefcir;\\u69c2ubs\\u0100;u\\u1abb\\u1abc\\u6663it\\xbb\\u1abc\\u02ec\\u1ac7\\u1ad4\\u1afa\\0\\u1b0aon\\u0100;e\\u1acd\\u1ace\\u403a\\u0100;q\\xc7\\xc6\\u026d\\u1ad9\\0\\0\\u1ae2a\\u0100;t\\u1ade\\u1adf\\u402c;\\u4040\\u0180;fl\\u1ae8\\u1ae9\\u1aeb\\u6201\\xee\\u1160e\\u0100mx\\u1af1\\u1af6ent\\xbb\\u1ae9e\\xf3\\u024d\\u01e7\\u1afe\\0\\u1b07\\u0100;d\\u12bb\\u1b02ot;\\u6a6dn\\xf4\\u0246\\u0180fry\\u1b10\\u1b14\\u1b17;\\uc000\\ud835\\udd54o\\xe4\\u0254\\u8100\\xa9;s\\u0155\\u1b1dr;\\u6117\\u0100ao\\u1b25\\u1b29rr;\\u61b5ss;\\u6717\\u0100cu\\u1b32\\u1b37r;\\uc000\\ud835\\udcb8\\u0100bp\\u1b3c\\u1b44\\u0100;e\\u1b41\\u1b42\\u6acf;\\u6ad1\\u0100;e\\u1b49\\u1b4a\\u6ad0;\\u6ad2dot;\\u62ef\\u0380delprvw\\u1b60\\u1b6c\\u1b77\\u1b82\\u1bac\\u1bd4\\u1bf9arr\\u0100lr\\u1b68\\u1b6a;\\u6938;\\u6935\\u0270\\u1b72\\0\\0\\u1b75r;\\u62dec;\\u62dfarr\\u0100;p\\u1b7f\\u1b80\\u61b6;\\u693d\\u0300;bcdos\\u1b8f\\u1b90\\u1b96\\u1ba1\\u1ba5\\u1ba8\\u622arcap;\\u6a48\\u0100au\\u1b9b\\u1b9ep;\\u6a46p;\\u6a4aot;\\u628dr;\\u6a45;\\uc000\\u222a\\ufe00\\u0200alrv\\u1bb5\\u1bbf\\u1bde\\u1be3rr\\u0100;m\\u1bbc\\u1bbd\\u61b7;\\u693cy\\u0180evw\\u1bc7\\u1bd4\\u1bd8q\\u0270\\u1bce\\0\\0\\u1bd2re\\xe3\\u1b73u\\xe3\\u1b75ee;\\u62ceedge;\\u62cfen\\u803b\\xa4\\u40a4earrow\\u0100lr\\u1bee\\u1bf3eft\\xbb\\u1b80ight\\xbb\\u1bbde\\xe4\\u1bdd\\u0100ci\\u1c01\\u1c07onin\\xf4\\u01f7nt;\\u6231lcty;\\u632d\\u0980AHabcdefhijlorstuwz\\u1c38\\u1c3b\\u1c3f\\u1c5d\\u1c69\\u1c75\\u1c8a\\u1c9e\\u1cac\\u1cb7\\u1cfb\\u1cff\\u1d0d\\u1d7b\\u1d91\\u1dab\\u1dbb\\u1dc6\\u1dcdr\\xf2\\u0381ar;\\u6965\\u0200glrs\\u1c48\\u1c4d\\u1c52\\u1c54ger;\\u6020eth;\\u6138\\xf2\\u1133h\\u0100;v\\u1c5a\\u1c5b\\u6010\\xbb\\u090a\\u016b\\u1c61\\u1c67arow;\\u690fa\\xe3\\u0315\\u0100ay\\u1c6e\\u1c73ron;\\u410f;\\u4434\\u0180;ao\\u0332\\u1c7c\\u1c84\\u0100gr\\u02bf\\u1c81r;\\u61catseq;\\u6a77\\u0180glm\\u1c91\\u1c94\\u1c98\\u803b\\xb0\\u40b0ta;\\u43b4ptyv;\\u69b1\\u0100ir\\u1ca3\\u1ca8sht;\\u697f;\\uc000\\ud835\\udd21ar\\u0100lr\\u1cb3\\u1cb5\\xbb\\u08dc\\xbb\\u101e\\u0280aegsv\\u1cc2\\u0378\\u1cd6\\u1cdc\\u1ce0m\\u0180;os\\u0326\\u1cca\\u1cd4nd\\u0100;s\\u0326\\u1cd1uit;\\u6666amma;\\u43ddin;\\u62f2\\u0180;io\\u1ce7\\u1ce8\\u1cf8\\u40f7de\\u8100\\xf7;o\\u1ce7\\u1cf0ntimes;\\u62c7n\\xf8\\u1cf7cy;\\u4452c\\u026f\\u1d06\\0\\0\\u1d0arn;\\u631eop;\\u630d\\u0280lptuw\\u1d18\\u1d1d\\u1d22\\u1d49\\u1d55lar;\\u4024f;\\uc000\\ud835\\udd55\\u0280;emps\\u030b\\u1d2d\\u1d37\\u1d3d\\u1d42q\\u0100;d\\u0352\\u1d33ot;\\u6251inus;\\u6238lus;\\u6214quare;\\u62a1blebarwedg\\xe5\\xfan\\u0180adh\\u112e\\u1d5d\\u1d67ownarrow\\xf3\\u1c83arpoon\\u0100lr\\u1d72\\u1d76ef\\xf4\\u1cb4igh\\xf4\\u1cb6\\u0162\\u1d7f\\u1d85karo\\xf7\\u0f42\\u026f\\u1d8a\\0\\0\\u1d8ern;\\u631fop;\\u630c\\u0180cot\\u1d98\\u1da3\\u1da6\\u0100ry\\u1d9d\\u1da1;\\uc000\\ud835\\udcb9;\\u4455l;\\u69f6rok;\\u4111\\u0100dr\\u1db0\\u1db4ot;\\u62f1i\\u0100;f\\u1dba\\u1816\\u65bf\\u0100ah\\u1dc0\\u1dc3r\\xf2\\u0429a\\xf2\\u0fa6angle;\\u69a6\\u0100ci\\u1dd2\\u1dd5y;\\u445fgrarr;\\u67ff\\u0900Dacdefglmnopqrstux\\u1e01\\u1e09\\u1e19\\u1e38\\u0578\\u1e3c\\u1e49\\u1e61\\u1e7e\\u1ea5\\u1eaf\\u1ebd\\u1ee1\\u1f2a\\u1f37\\u1f44\\u1f4e\\u1f5a\\u0100Do\\u1e06\\u1d34o\\xf4\\u1c89\\u0100cs\\u1e0e\\u1e14ute\\u803b\\xe9\\u40e9ter;\\u6a6e\\u0200aioy\\u1e22\\u1e27\\u1e31\\u1e36ron;\\u411br\\u0100;c\\u1e2d\\u1e2e\\u6256\\u803b\\xea\\u40ealon;\\u6255;\\u444dot;\\u4117\\u0100Dr\\u1e41\\u1e45ot;\\u6252;\\uc000\\ud835\\udd22\\u0180;rs\\u1e50\\u1e51\\u1e57\\u6a9aave\\u803b\\xe8\\u40e8\\u0100;d\\u1e5c\\u1e5d\\u6a96ot;\\u6a98\\u0200;ils\\u1e6a\\u1e6b\\u1e72\\u1e74\\u6a99nters;\\u63e7;\\u6113\\u0100;d\\u1e79\\u1e7a\\u6a95ot;\\u6a97\\u0180aps\\u1e85\\u1e89\\u1e97cr;\\u4113ty\\u0180;sv\\u1e92\\u1e93\\u1e95\\u6205et\\xbb\\u1e93p\\u01001;\\u1e9d\\u1ea4\\u0133\\u1ea1\\u1ea3;\\u6004;\\u6005\\u6003\\u0100gs\\u1eaa\\u1eac;\\u414bp;\\u6002\\u0100gp\\u1eb4\\u1eb8on;\\u4119f;\\uc000\\ud835\\udd56\\u0180als\\u1ec4\\u1ece\\u1ed2r\\u0100;s\\u1eca\\u1ecb\\u62d5l;\\u69e3us;\\u6a71i\\u0180;lv\\u1eda\\u1edb\\u1edf\\u43b5on\\xbb\\u1edb;\\u43f5\\u0200csuv\\u1eea\\u1ef3\\u1f0b\\u1f23\\u0100io\\u1eef\\u1e31rc\\xbb\\u1e2e\\u0269\\u1ef9\\0\\0\\u1efb\\xed\\u0548ant\\u0100gl\\u1f02\\u1f06tr\\xbb\\u1e5dess\\xbb\\u1e7a\\u0180aei\\u1f12\\u1f16\\u1f1als;\\u403dst;\\u625fv\\u0100;D\\u0235\\u1f20D;\\u6a78parsl;\\u69e5\\u0100Da\\u1f2f\\u1f33ot;\\u6253rr;\\u6971\\u0180cdi\\u1f3e\\u1f41\\u1ef8r;\\u612fo\\xf4\\u0352\\u0100ah\\u1f49\\u1f4b;\\u43b7\\u803b\\xf0\\u40f0\\u0100mr\\u1f53\\u1f57l\\u803b\\xeb\\u40ebo;\\u60ac\\u0180cip\\u1f61\\u1f64\\u1f67l;\\u4021s\\xf4\\u056e\\u0100eo\\u1f6c\\u1f74ctatio\\xee\\u0559nential\\xe5\\u0579\\u09e1\\u1f92\\0\\u1f9e\\0\\u1fa1\\u1fa7\\0\\0\\u1fc6\\u1fcc\\0\\u1fd3\\0\\u1fe6\\u1fea\\u2000\\0\\u2008\\u205allingdotse\\xf1\\u1e44y;\\u4444male;\\u6640\\u0180ilr\\u1fad\\u1fb3\\u1fc1lig;\\u8000\\ufb03\\u0269\\u1fb9\\0\\0\\u1fbdg;\\u8000\\ufb00ig;\\u8000\\ufb04;\\uc000\\ud835\\udd23lig;\\u8000\\ufb01lig;\\uc000fj\\u0180alt\\u1fd9\\u1fdc\\u1fe1t;\\u666dig;\\u8000\\ufb02ns;\\u65b1of;\\u4192\\u01f0\\u1fee\\0\\u1ff3f;\\uc000\\ud835\\udd57\\u0100ak\\u05bf\\u1ff7\\u0100;v\\u1ffc\\u1ffd\\u62d4;\\u6ad9artint;\\u6a0d\\u0100ao\\u200c\\u2055\\u0100cs\\u2011\\u2052\\u03b1\\u201a\\u2030\\u2038\\u2045\\u2048\\0\\u2050\\u03b2\\u2022\\u2025\\u2027\\u202a\\u202c\\0\\u202e\\u803b\\xbd\\u40bd;\\u6153\\u803b\\xbc\\u40bc;\\u6155;\\u6159;\\u615b\\u01b3\\u2034\\0\\u2036;\\u6154;\\u6156\\u02b4\\u203e\\u2041\\0\\0\\u2043\\u803b\\xbe\\u40be;\\u6157;\\u615c5;\\u6158\\u01b6\\u204c\\0\\u204e;\\u615a;\\u615d8;\\u615el;\\u6044wn;\\u6322cr;\\uc000\\ud835\\udcbb\\u0880Eabcdefgijlnorstv\\u2082\\u2089\\u209f\\u20a5\\u20b0\\u20b4\\u20f0\\u20f5\\u20fa\\u20ff\\u2103\\u2112\\u2138\\u0317\\u213e\\u2152\\u219e\\u0100;l\\u064d\\u2087;\\u6a8c\\u0180cmp\\u2090\\u2095\\u209dute;\\u41f5ma\\u0100;d\\u209c\\u1cda\\u43b3;\\u6a86reve;\\u411f\\u0100iy\\u20aa\\u20aerc;\\u411d;\\u4433ot;\\u4121\\u0200;lqs\\u063e\\u0642\\u20bd\\u20c9\\u0180;qs\\u063e\\u064c\\u20c4lan\\xf4\\u0665\\u0200;cdl\\u0665\\u20d2\\u20d5\\u20e5c;\\u6aa9ot\\u0100;o\\u20dc\\u20dd\\u6a80\\u0100;l\\u20e2\\u20e3\\u6a82;\\u6a84\\u0100;e\\u20ea\\u20ed\\uc000\\u22db\\ufe00s;\\u6a94r;\\uc000\\ud835\\udd24\\u0100;g\\u0673\\u061bmel;\\u6137cy;\\u4453\\u0200;Eaj\\u065a\\u210c\\u210e\\u2110;\\u6a92;\\u6aa5;\\u6aa4\\u0200Eaes\\u211b\\u211d\\u2129\\u2134;\\u6269p\\u0100;p\\u2123\\u2124\\u6a8arox\\xbb\\u2124\\u0100;q\\u212e\\u212f\\u6a88\\u0100;q\\u212e\\u211bim;\\u62e7pf;\\uc000\\ud835\\udd58\\u0100ci\\u2143\\u2146r;\\u610am\\u0180;el\\u066b\\u214e\\u2150;\\u6a8e;\\u6a90\\u8300>;cdlqr\\u05ee\\u2160\\u216a\\u216e\\u2173\\u2179\\u0100ci\\u2165\\u2167;\\u6aa7r;\\u6a7aot;\\u62d7Par;\\u6995uest;\\u6a7c\\u0280adels\\u2184\\u216a\\u2190\\u0656\\u219b\\u01f0\\u2189\\0\\u218epro\\xf8\\u209er;\\u6978q\\u0100lq\\u063f\\u2196les\\xf3\\u2088i\\xed\\u066b\\u0100en\\u21a3\\u21adrtneqq;\\uc000\\u2269\\ufe00\\xc5\\u21aa\\u0500Aabcefkosy\\u21c4\\u21c7\\u21f1\\u21f5\\u21fa\\u2218\\u221d\\u222f\\u2268\\u227dr\\xf2\\u03a0\\u0200ilmr\\u21d0\\u21d4\\u21d7\\u21dbrs\\xf0\\u1484f\\xbb\\u2024il\\xf4\\u06a9\\u0100dr\\u21e0\\u21e4cy;\\u444a\\u0180;cw\\u08f4\\u21eb\\u21efir;\\u6948;\\u61adar;\\u610firc;\\u4125\\u0180alr\\u2201\\u220e\\u2213rts\\u0100;u\\u2209\\u220a\\u6665it\\xbb\\u220alip;\\u6026con;\\u62b9r;\\uc000\\ud835\\udd25s\\u0100ew\\u2223\\u2229arow;\\u6925arow;\\u6926\\u0280amopr\\u223a\\u223e\\u2243\\u225e\\u2263rr;\\u61fftht;\\u623bk\\u0100lr\\u2249\\u2253eftarrow;\\u61a9ightarrow;\\u61aaf;\\uc000\\ud835\\udd59bar;\\u6015\\u0180clt\\u226f\\u2274\\u2278r;\\uc000\\ud835\\udcbdas\\xe8\\u21f4rok;\\u4127\\u0100bp\\u2282\\u2287ull;\\u6043hen\\xbb\\u1c5b\\u0ae1\\u22a3\\0\\u22aa\\0\\u22b8\\u22c5\\u22ce\\0\\u22d5\\u22f3\\0\\0\\u22f8\\u2322\\u2367\\u2362\\u237f\\0\\u2386\\u23aa\\u23b4cute\\u803b\\xed\\u40ed\\u0180;iy\\u0771\\u22b0\\u22b5rc\\u803b\\xee\\u40ee;\\u4438\\u0100cx\\u22bc\\u22bfy;\\u4435cl\\u803b\\xa1\\u40a1\\u0100fr\\u039f\\u22c9;\\uc000\\ud835\\udd26rave\\u803b\\xec\\u40ec\\u0200;ino\\u073e\\u22dd\\u22e9\\u22ee\\u0100in\\u22e2\\u22e6nt;\\u6a0ct;\\u622dfin;\\u69dcta;\\u6129lig;\\u4133\\u0180aop\\u22fe\\u231a\\u231d\\u0180cgt\\u2305\\u2308\\u2317r;\\u412b\\u0180elp\\u071f\\u230f\\u2313in\\xe5\\u078ear\\xf4\\u0720h;\\u4131f;\\u62b7ed;\\u41b5\\u0280;cfot\\u04f4\\u232c\\u2331\\u233d\\u2341are;\\u6105in\\u0100;t\\u2338\\u2339\\u621eie;\\u69dddo\\xf4\\u2319\\u0280;celp\\u0757\\u234c\\u2350\\u235b\\u2361al;\\u62ba\\u0100gr\\u2355\\u2359er\\xf3\\u1563\\xe3\\u234darhk;\\u6a17rod;\\u6a3c\\u0200cgpt\\u236f\\u2372\\u2376\\u237by;\\u4451on;\\u412ff;\\uc000\\ud835\\udd5aa;\\u43b9uest\\u803b\\xbf\\u40bf\\u0100ci\\u238a\\u238fr;\\uc000\\ud835\\udcben\\u0280;Edsv\\u04f4\\u239b\\u239d\\u23a1\\u04f3;\\u62f9ot;\\u62f5\\u0100;v\\u23a6\\u23a7\\u62f4;\\u62f3\\u0100;i\\u0777\\u23aelde;\\u4129\\u01eb\\u23b8\\0\\u23bccy;\\u4456l\\u803b\\xef\\u40ef\\u0300cfmosu\\u23cc\\u23d7\\u23dc\\u23e1\\u23e7\\u23f5\\u0100iy\\u23d1\\u23d5rc;\\u4135;\\u4439r;\\uc000\\ud835\\udd27ath;\\u4237pf;\\uc000\\ud835\\udd5b\\u01e3\\u23ec\\0\\u23f1r;\\uc000\\ud835\\udcbfrcy;\\u4458kcy;\\u4454\\u0400acfghjos\\u240b\\u2416\\u2422\\u2427\\u242d\\u2431\\u2435\\u243bppa\\u0100;v\\u2413\\u2414\\u43ba;\\u43f0\\u0100ey\\u241b\\u2420dil;\\u4137;\\u443ar;\\uc000\\ud835\\udd28reen;\\u4138cy;\\u4445cy;\\u445cpf;\\uc000\\ud835\\udd5ccr;\\uc000\\ud835\\udcc0\\u0b80ABEHabcdefghjlmnoprstuv\\u2470\\u2481\\u2486\\u248d\\u2491\\u250e\\u253d\\u255a\\u2580\\u264e\\u265e\\u2665\\u2679\\u267d\\u269a\\u26b2\\u26d8\\u275d\\u2768\\u278b\\u27c0\\u2801\\u2812\\u0180art\\u2477\\u247a\\u247cr\\xf2\\u09c6\\xf2\\u0395ail;\\u691barr;\\u690e\\u0100;g\\u0994\\u248b;\\u6a8bar;\\u6962\\u0963\\u24a5\\0\\u24aa\\0\\u24b1\\0\\0\\0\\0\\0\\u24b5\\u24ba\\0\\u24c6\\u24c8\\u24cd\\0\\u24f9ute;\\u413amptyv;\\u69b4ra\\xee\\u084cbda;\\u43bbg\\u0180;dl\\u088e\\u24c1\\u24c3;\\u6991\\xe5\\u088e;\\u6a85uo\\u803b\\xab\\u40abr\\u0400;bfhlpst\\u0899\\u24de\\u24e6\\u24e9\\u24eb\\u24ee\\u24f1\\u24f5\\u0100;f\\u089d\\u24e3s;\\u691fs;\\u691d\\xeb\\u2252p;\\u61abl;\\u6939im;\\u6973l;\\u61a2\\u0180;ae\\u24ff\\u2500\\u2504\\u6aabil;\\u6919\\u0100;s\\u2509\\u250a\\u6aad;\\uc000\\u2aad\\ufe00\\u0180abr\\u2515\\u2519\\u251drr;\\u690crk;\\u6772\\u0100ak\\u2522\\u252cc\\u0100ek\\u2528\\u252a;\\u407b;\\u405b\\u0100es\\u2531\\u2533;\\u698bl\\u0100du\\u2539\\u253b;\\u698f;\\u698d\\u0200aeuy\\u2546\\u254b\\u2556\\u2558ron;\\u413e\\u0100di\\u2550\\u2554il;\\u413c\\xec\\u08b0\\xe2\\u2529;\\u443b\\u0200cqrs\\u2563\\u2566\\u256d\\u257da;\\u6936uo\\u0100;r\\u0e19\\u1746\\u0100du\\u2572\\u2577har;\\u6967shar;\\u694bh;\\u61b2\\u0280;fgqs\\u258b\\u258c\\u0989\\u25f3\\u25ff\\u6264t\\u0280ahlrt\\u2598\\u25a4\\u25b7\\u25c2\\u25e8rrow\\u0100;t\\u0899\\u25a1a\\xe9\\u24f6arpoon\\u0100du\\u25af\\u25b4own\\xbb\\u045ap\\xbb\\u0966eftarrows;\\u61c7ight\\u0180ahs\\u25cd\\u25d6\\u25derrow\\u0100;s\\u08f4\\u08a7arpoon\\xf3\\u0f98quigarro\\xf7\\u21f0hreetimes;\\u62cb\\u0180;qs\\u258b\\u0993\\u25falan\\xf4\\u09ac\\u0280;cdgs\\u09ac\\u260a\\u260d\\u261d\\u2628c;\\u6aa8ot\\u0100;o\\u2614\\u2615\\u6a7f\\u0100;r\\u261a\\u261b\\u6a81;\\u6a83\\u0100;e\\u2622\\u2625\\uc000\\u22da\\ufe00s;\\u6a93\\u0280adegs\\u2633\\u2639\\u263d\\u2649\\u264bppro\\xf8\\u24c6ot;\\u62d6q\\u0100gq\\u2643\\u2645\\xf4\\u0989gt\\xf2\\u248c\\xf4\\u099bi\\xed\\u09b2\\u0180ilr\\u2655\\u08e1\\u265asht;\\u697c;\\uc000\\ud835\\udd29\\u0100;E\\u099c\\u2663;\\u6a91\\u0161\\u2669\\u2676r\\u0100du\\u25b2\\u266e\\u0100;l\\u0965\\u2673;\\u696alk;\\u6584cy;\\u4459\\u0280;acht\\u0a48\\u2688\\u268b\\u2691\\u2696r\\xf2\\u25c1orne\\xf2\\u1d08ard;\\u696bri;\\u65fa\\u0100io\\u269f\\u26a4dot;\\u4140ust\\u0100;a\\u26ac\\u26ad\\u63b0che\\xbb\\u26ad\\u0200Eaes\\u26bb\\u26bd\\u26c9\\u26d4;\\u6268p\\u0100;p\\u26c3\\u26c4\\u6a89rox\\xbb\\u26c4\\u0100;q\\u26ce\\u26cf\\u6a87\\u0100;q\\u26ce\\u26bbim;\\u62e6\\u0400abnoptwz\\u26e9\\u26f4\\u26f7\\u271a\\u272f\\u2741\\u2747\\u2750\\u0100nr\\u26ee\\u26f1g;\\u67ecr;\\u61fdr\\xeb\\u08c1g\\u0180lmr\\u26ff\\u270d\\u2714eft\\u0100ar\\u09e6\\u2707ight\\xe1\\u09f2apsto;\\u67fcight\\xe1\\u09fdparrow\\u0100lr\\u2725\\u2729ef\\xf4\\u24edight;\\u61ac\\u0180afl\\u2736\\u2739\\u273dr;\\u6985;\\uc000\\ud835\\udd5dus;\\u6a2dimes;\\u6a34\\u0161\\u274b\\u274fst;\\u6217\\xe1\\u134e\\u0180;ef\\u2757\\u2758\\u1800\\u65cange\\xbb\\u2758ar\\u0100;l\\u2764\\u2765\\u4028t;\\u6993\\u0280achmt\\u2773\\u2776\\u277c\\u2785\\u2787r\\xf2\\u08a8orne\\xf2\\u1d8car\\u0100;d\\u0f98\\u2783;\\u696d;\\u600eri;\\u62bf\\u0300achiqt\\u2798\\u279d\\u0a40\\u27a2\\u27ae\\u27bbquo;\\u6039r;\\uc000\\ud835\\udcc1m\\u0180;eg\\u09b2\\u27aa\\u27ac;\\u6a8d;\\u6a8f\\u0100bu\\u252a\\u27b3o\\u0100;r\\u0e1f\\u27b9;\\u601arok;\\u4142\\u8400<;cdhilqr\\u082b\\u27d2\\u2639\\u27dc\\u27e0\\u27e5\\u27ea\\u27f0\\u0100ci\\u27d7\\u27d9;\\u6aa6r;\\u6a79re\\xe5\\u25f2mes;\\u62c9arr;\\u6976uest;\\u6a7b\\u0100Pi\\u27f5\\u27f9ar;\\u6996\\u0180;ef\\u2800\\u092d\\u181b\\u65c3r\\u0100du\\u2807\\u280dshar;\\u694ahar;\\u6966\\u0100en\\u2817\\u2821rtneqq;\\uc000\\u2268\\ufe00\\xc5\\u281e\\u0700Dacdefhilnopsu\\u2840\\u2845\\u2882\\u288e\\u2893\\u28a0\\u28a5\\u28a8\\u28da\\u28e2\\u28e4\\u0a83\\u28f3\\u2902Dot;\\u623a\\u0200clpr\\u284e\\u2852\\u2863\\u287dr\\u803b\\xaf\\u40af\\u0100et\\u2857\\u2859;\\u6642\\u0100;e\\u285e\\u285f\\u6720se\\xbb\\u285f\\u0100;s\\u103b\\u2868to\\u0200;dlu\\u103b\\u2873\\u2877\\u287bow\\xee\\u048cef\\xf4\\u090f\\xf0\\u13d1ker;\\u65ae\\u0100oy\\u2887\\u288cmma;\\u6a29;\\u443cash;\\u6014asuredangle\\xbb\\u1626r;\\uc000\\ud835\\udd2ao;\\u6127\\u0180cdn\\u28af\\u28b4\\u28c9ro\\u803b\\xb5\\u40b5\\u0200;acd\\u1464\\u28bd\\u28c0\\u28c4s\\xf4\\u16a7ir;\\u6af0ot\\u80bb\\xb7\\u01b5us\\u0180;bd\\u28d2\\u1903\\u28d3\\u6212\\u0100;u\\u1d3c\\u28d8;\\u6a2a\\u0163\\u28de\\u28e1p;\\u6adb\\xf2\\u2212\\xf0\\u0a81\\u0100dp\\u28e9\\u28eeels;\\u62a7f;\\uc000\\ud835\\udd5e\\u0100ct\\u28f8\\u28fdr;\\uc000\\ud835\\udcc2pos\\xbb\\u159d\\u0180;lm\\u2909\\u290a\\u290d\\u43bctimap;\\u62b8\\u0c00GLRVabcdefghijlmoprstuvw\\u2942\\u2953\\u297e\\u2989\\u2998\\u29da\\u29e9\\u2a15\\u2a1a\\u2a58\\u2a5d\\u2a83\\u2a95\\u2aa4\\u2aa8\\u2b04\\u2b07\\u2b44\\u2b7f\\u2bae\\u2c34\\u2c67\\u2c7c\\u2ce9\\u0100gt\\u2947\\u294b;\\uc000\\u22d9\\u0338\\u0100;v\\u2950\\u0bcf\\uc000\\u226b\\u20d2\\u0180elt\\u295a\\u2972\\u2976ft\\u0100ar\\u2961\\u2967rrow;\\u61cdightarrow;\\u61ce;\\uc000\\u22d8\\u0338\\u0100;v\\u297b\\u0c47\\uc000\\u226a\\u20d2ightarrow;\\u61cf\\u0100Dd\\u298e\\u2993ash;\\u62afash;\\u62ae\\u0280bcnpt\\u29a3\\u29a7\\u29ac\\u29b1\\u29ccla\\xbb\\u02deute;\\u4144g;\\uc000\\u2220\\u20d2\\u0280;Eiop\\u0d84\\u29bc\\u29c0\\u29c5\\u29c8;\\uc000\\u2a70\\u0338d;\\uc000\\u224b\\u0338s;\\u4149ro\\xf8\\u0d84ur\\u0100;a\\u29d3\\u29d4\\u666el\\u0100;s\\u29d3\\u0b38\\u01f3\\u29df\\0\\u29e3p\\u80bb\\xa0\\u0b37mp\\u0100;e\\u0bf9\\u0c00\\u0280aeouy\\u29f4\\u29fe\\u2a03\\u2a10\\u2a13\\u01f0\\u29f9\\0\\u29fb;\\u6a43on;\\u4148dil;\\u4146ng\\u0100;d\\u0d7e\\u2a0aot;\\uc000\\u2a6d\\u0338p;\\u6a42;\\u443dash;\\u6013\\u0380;Aadqsx\\u0b92\\u2a29\\u2a2d\\u2a3b\\u2a41\\u2a45\\u2a50rr;\\u61d7r\\u0100hr\\u2a33\\u2a36k;\\u6924\\u0100;o\\u13f2\\u13f0ot;\\uc000\\u2250\\u0338ui\\xf6\\u0b63\\u0100ei\\u2a4a\\u2a4ear;\\u6928\\xed\\u0b98ist\\u0100;s\\u0ba0\\u0b9fr;\\uc000\\ud835\\udd2b\\u0200Eest\\u0bc5\\u2a66\\u2a79\\u2a7c\\u0180;qs\\u0bbc\\u2a6d\\u0be1\\u0180;qs\\u0bbc\\u0bc5\\u2a74lan\\xf4\\u0be2i\\xed\\u0bea\\u0100;r\\u0bb6\\u2a81\\xbb\\u0bb7\\u0180Aap\\u2a8a\\u2a8d\\u2a91r\\xf2\\u2971rr;\\u61aear;\\u6af2\\u0180;sv\\u0f8d\\u2a9c\\u0f8c\\u0100;d\\u2aa1\\u2aa2\\u62fc;\\u62facy;\\u445a\\u0380AEadest\\u2ab7\\u2aba\\u2abe\\u2ac2\\u2ac5\\u2af6\\u2af9r\\xf2\\u2966;\\uc000\\u2266\\u0338rr;\\u619ar;\\u6025\\u0200;fqs\\u0c3b\\u2ace\\u2ae3\\u2aeft\\u0100ar\\u2ad4\\u2ad9rro\\xf7\\u2ac1ightarro\\xf7\\u2a90\\u0180;qs\\u0c3b\\u2aba\\u2aealan\\xf4\\u0c55\\u0100;s\\u0c55\\u2af4\\xbb\\u0c36i\\xed\\u0c5d\\u0100;r\\u0c35\\u2afei\\u0100;e\\u0c1a\\u0c25i\\xe4\\u0d90\\u0100pt\\u2b0c\\u2b11f;\\uc000\\ud835\\udd5f\\u8180\\xac;in\\u2b19\\u2b1a\\u2b36\\u40acn\\u0200;Edv\\u0b89\\u2b24\\u2b28\\u2b2e;\\uc000\\u22f9\\u0338ot;\\uc000\\u22f5\\u0338\\u01e1\\u0b89\\u2b33\\u2b35;\\u62f7;\\u62f6i\\u0100;v\\u0cb8\\u2b3c\\u01e1\\u0cb8\\u2b41\\u2b43;\\u62fe;\\u62fd\\u0180aor\\u2b4b\\u2b63\\u2b69r\\u0200;ast\\u0b7b\\u2b55\\u2b5a\\u2b5flle\\xec\\u0b7bl;\\uc000\\u2afd\\u20e5;\\uc000\\u2202\\u0338lint;\\u6a14\\u0180;ce\\u0c92\\u2b70\\u2b73u\\xe5\\u0ca5\\u0100;c\\u0c98\\u2b78\\u0100;e\\u0c92\\u2b7d\\xf1\\u0c98\\u0200Aait\\u2b88\\u2b8b\\u2b9d\\u2ba7r\\xf2\\u2988rr\\u0180;cw\\u2b94\\u2b95\\u2b99\\u619b;\\uc000\\u2933\\u0338;\\uc000\\u219d\\u0338ghtarrow\\xbb\\u2b95ri\\u0100;e\\u0ccb\\u0cd6\\u0380chimpqu\\u2bbd\\u2bcd\\u2bd9\\u2b04\\u0b78\\u2be4\\u2bef\\u0200;cer\\u0d32\\u2bc6\\u0d37\\u2bc9u\\xe5\\u0d45;\\uc000\\ud835\\udcc3ort\\u026d\\u2b05\\0\\0\\u2bd6ar\\xe1\\u2b56m\\u0100;e\\u0d6e\\u2bdf\\u0100;q\\u0d74\\u0d73su\\u0100bp\\u2beb\\u2bed\\xe5\\u0cf8\\xe5\\u0d0b\\u0180bcp\\u2bf6\\u2c11\\u2c19\\u0200;Ees\\u2bff\\u2c00\\u0d22\\u2c04\\u6284;\\uc000\\u2ac5\\u0338et\\u0100;e\\u0d1b\\u2c0bq\\u0100;q\\u0d23\\u2c00c\\u0100;e\\u0d32\\u2c17\\xf1\\u0d38\\u0200;Ees\\u2c22\\u2c23\\u0d5f\\u2c27\\u6285;\\uc000\\u2ac6\\u0338et\\u0100;e\\u0d58\\u2c2eq\\u0100;q\\u0d60\\u2c23\\u0200gilr\\u2c3d\\u2c3f\\u2c45\\u2c47\\xec\\u0bd7lde\\u803b\\xf1\\u40f1\\xe7\\u0c43iangle\\u0100lr\\u2c52\\u2c5ceft\\u0100;e\\u0c1a\\u2c5a\\xf1\\u0c26ight\\u0100;e\\u0ccb\\u2c65\\xf1\\u0cd7\\u0100;m\\u2c6c\\u2c6d\\u43bd\\u0180;es\\u2c74\\u2c75\\u2c79\\u4023ro;\\u6116p;\\u6007\\u0480DHadgilrs\\u2c8f\\u2c94\\u2c99\\u2c9e\\u2ca3\\u2cb0\\u2cb6\\u2cd3\\u2ce3ash;\\u62adarr;\\u6904p;\\uc000\\u224d\\u20d2ash;\\u62ac\\u0100et\\u2ca8\\u2cac;\\uc000\\u2265\\u20d2;\\uc000>\\u20d2nfin;\\u69de\\u0180Aet\\u2cbd\\u2cc1\\u2cc5rr;\\u6902;\\uc000\\u2264\\u20d2\\u0100;r\\u2cca\\u2ccd\\uc000<\\u20d2ie;\\uc000\\u22b4\\u20d2\\u0100At\\u2cd8\\u2cdcrr;\\u6903rie;\\uc000\\u22b5\\u20d2im;\\uc000\\u223c\\u20d2\\u0180Aan\\u2cf0\\u2cf4\\u2d02rr;\\u61d6r\\u0100hr\\u2cfa\\u2cfdk;\\u6923\\u0100;o\\u13e7\\u13e5ear;\\u6927\\u1253\\u1a95\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\0\\u2d2d\\0\\u2d38\\u2d48\\u2d60\\u2d65\\u2d72\\u2d84\\u1b07\\0\\0\\u2d8d\\u2dab\\0\\u2dc8\\u2dce\\0\\u2ddc\\u2e19\\u2e2b\\u2e3e\\u2e43\\u0100cs\\u2d31\\u1a97ute\\u803b\\xf3\\u40f3\\u0100iy\\u2d3c\\u2d45r\\u0100;c\\u1a9e\\u2d42\\u803b\\xf4\\u40f4;\\u443e\\u0280abios\\u1aa0\\u2d52\\u2d57\\u01c8\\u2d5alac;\\u4151v;\\u6a38old;\\u69bclig;\\u4153\\u0100cr\\u2d69\\u2d6dir;\\u69bf;\\uc000\\ud835\\udd2c\\u036f\\u2d79\\0\\0\\u2d7c\\0\\u2d82n;\\u42dbave\\u803b\\xf2\\u40f2;\\u69c1\\u0100bm\\u2d88\\u0df4ar;\\u69b5\\u0200acit\\u2d95\\u2d98\\u2da5\\u2da8r\\xf2\\u1a80\\u0100ir\\u2d9d\\u2da0r;\\u69beoss;\\u69bbn\\xe5\\u0e52;\\u69c0\\u0180aei\\u2db1\\u2db5\\u2db9cr;\\u414dga;\\u43c9\\u0180cdn\\u2dc0\\u2dc5\\u01cdron;\\u43bf;\\u69b6pf;\\uc000\\ud835\\udd60\\u0180ael\\u2dd4\\u2dd7\\u01d2r;\\u69b7rp;\\u69b9\\u0380;adiosv\\u2dea\\u2deb\\u2dee\\u2e08\\u2e0d\\u2e10\\u2e16\\u6228r\\xf2\\u1a86\\u0200;efm\\u2df7\\u2df8\\u2e02\\u2e05\\u6a5dr\\u0100;o\\u2dfe\\u2dff\\u6134f\\xbb\\u2dff\\u803b\\xaa\\u40aa\\u803b\\xba\\u40bagof;\\u62b6r;\\u6a56lope;\\u6a57;\\u6a5b\\u0180clo\\u2e1f\\u2e21\\u2e27\\xf2\\u2e01ash\\u803b\\xf8\\u40f8l;\\u6298i\\u016c\\u2e2f\\u2e34de\\u803b\\xf5\\u40f5es\\u0100;a\\u01db\\u2e3as;\\u6a36ml\\u803b\\xf6\\u40f6bar;\\u633d\\u0ae1\\u2e5e\\0\\u2e7d\\0\\u2e80\\u2e9d\\0\\u2ea2\\u2eb9\\0\\0\\u2ecb\\u0e9c\\0\\u2f13\\0\\0\\u2f2b\\u2fbc\\0\\u2fc8r\\u0200;ast\\u0403\\u2e67\\u2e72\\u0e85\\u8100\\xb6;l\\u2e6d\\u2e6e\\u40b6le\\xec\\u0403\\u0269\\u2e78\\0\\0\\u2e7bm;\\u6af3;\\u6afdy;\\u443fr\\u0280cimpt\\u2e8b\\u2e8f\\u2e93\\u1865\\u2e97nt;\\u4025od;\\u402eil;\\u6030enk;\\u6031r;\\uc000\\ud835\\udd2d\\u0180imo\\u2ea8\\u2eb0\\u2eb4\\u0100;v\\u2ead\\u2eae\\u43c6;\\u43d5ma\\xf4\\u0a76ne;\\u660e\\u0180;tv\\u2ebf\\u2ec0\\u2ec8\\u43c0chfork\\xbb\\u1ffd;\\u43d6\\u0100au\\u2ecf\\u2edfn\\u0100ck\\u2ed5\\u2eddk\\u0100;h\\u21f4\\u2edb;\\u610e\\xf6\\u21f4s\\u0480;abcdemst\\u2ef3\\u2ef4\\u1908\\u2ef9\\u2efd\\u2f04\\u2f06\\u2f0a\\u2f0e\\u402bcir;\\u6a23ir;\\u6a22\\u0100ou\\u1d40\\u2f02;\\u6a25;\\u6a72n\\u80bb\\xb1\\u0e9dim;\\u6a26wo;\\u6a27\\u0180ipu\\u2f19\\u2f20\\u2f25ntint;\\u6a15f;\\uc000\\ud835\\udd61nd\\u803b\\xa3\\u40a3\\u0500;Eaceinosu\\u0ec8\\u2f3f\\u2f41\\u2f44\\u2f47\\u2f81\\u2f89\\u2f92\\u2f7e\\u2fb6;\\u6ab3p;\\u6ab7u\\xe5\\u0ed9\\u0100;c\\u0ece\\u2f4c\\u0300;acens\\u0ec8\\u2f59\\u2f5f\\u2f66\\u2f68\\u2f7eppro\\xf8\\u2f43urlye\\xf1\\u0ed9\\xf1\\u0ece\\u0180aes\\u2f6f\\u2f76\\u2f7approx;\\u6ab9qq;\\u6ab5im;\\u62e8i\\xed\\u0edfme\\u0100;s\\u2f88\\u0eae\\u6032\\u0180Eas\\u2f78\\u2f90\\u2f7a\\xf0\\u2f75\\u0180dfp\\u0eec\\u2f99\\u2faf\\u0180als\\u2fa0\\u2fa5\\u2faalar;\\u632eine;\\u6312urf;\\u6313\\u0100;t\\u0efb\\u2fb4\\xef\\u0efbrel;\\u62b0\\u0100ci\\u2fc0\\u2fc5r;\\uc000\\ud835\\udcc5;\\u43c8ncsp;\\u6008\\u0300fiopsu\\u2fda\\u22e2\\u2fdf\\u2fe5\\u2feb\\u2ff1r;\\uc000\\ud835\\udd2epf;\\uc000\\ud835\\udd62rime;\\u6057cr;\\uc000\\ud835\\udcc6\\u0180aeo\\u2ff8\\u3009\\u3013t\\u0100ei\\u2ffe\\u3005rnion\\xf3\\u06b0nt;\\u6a16st\\u0100;e\\u3010\\u3011\\u403f\\xf1\\u1f19\\xf4\\u0f14\\u0a80ABHabcdefhilmnoprstux\\u3040\\u3051\\u3055\\u3059\\u30e0\\u310e\\u312b\\u3147\\u3162\\u3172\\u318e\\u3206\\u3215\\u3224\\u3229\\u3258\\u326e\\u3272\\u3290\\u32b0\\u32b7\\u0180art\\u3047\\u304a\\u304cr\\xf2\\u10b3\\xf2\\u03ddail;\\u691car\\xf2\\u1c65ar;\\u6964\\u0380cdenqrt\\u3068\\u3075\\u3078\\u307f\\u308f\\u3094\\u30cc\\u0100eu\\u306d\\u3071;\\uc000\\u223d\\u0331te;\\u4155i\\xe3\\u116emptyv;\\u69b3g\\u0200;del\\u0fd1\\u3089\\u308b\\u308d;\\u6992;\\u69a5\\xe5\\u0fd1uo\\u803b\\xbb\\u40bbr\\u0580;abcfhlpstw\\u0fdc\\u30ac\\u30af\\u30b7\\u30b9\\u30bc\\u30be\\u30c0\\u30c3\\u30c7\\u30cap;\\u6975\\u0100;f\\u0fe0\\u30b4s;\\u6920;\\u6933s;\\u691e\\xeb\\u225d\\xf0\\u272el;\\u6945im;\\u6974l;\\u61a3;\\u619d\\u0100ai\\u30d1\\u30d5il;\\u691ao\\u0100;n\\u30db\\u30dc\\u6236al\\xf3\\u0f1e\\u0180abr\\u30e7\\u30ea\\u30eer\\xf2\\u17e5rk;\\u6773\\u0100ak\\u30f3\\u30fdc\\u0100ek\\u30f9\\u30fb;\\u407d;\\u405d\\u0100es\\u3102\\u3104;\\u698cl\\u0100du\\u310a\\u310c;\\u698e;\\u6990\\u0200aeuy\\u3117\\u311c\\u3127\\u3129ron;\\u4159\\u0100di\\u3121\\u3125il;\\u4157\\xec\\u0ff2\\xe2\\u30fa;\\u4440\\u0200clqs\\u3134\\u3137\\u313d\\u3144a;\\u6937dhar;\\u6969uo\\u0100;r\\u020e\\u020dh;\\u61b3\\u0180acg\\u314e\\u315f\\u0f44l\\u0200;ips\\u0f78\\u3158\\u315b\\u109cn\\xe5\\u10bbar\\xf4\\u0fa9t;\\u65ad\\u0180ilr\\u3169\\u1023\\u316esht;\\u697d;\\uc000\\ud835\\udd2f\\u0100ao\\u3177\\u3186r\\u0100du\\u317d\\u317f\\xbb\\u047b\\u0100;l\\u1091\\u3184;\\u696c\\u0100;v\\u318b\\u318c\\u43c1;\\u43f1\\u0180gns\\u3195\\u31f9\\u31fcht\\u0300ahlrst\\u31a4\\u31b0\\u31c2\\u31d8\\u31e4\\u31eerrow\\u0100;t\\u0fdc\\u31ada\\xe9\\u30c8arpoon\\u0100du\\u31bb\\u31bfow\\xee\\u317ep\\xbb\\u1092eft\\u0100ah\\u31ca\\u31d0rrow\\xf3\\u0feaarpoon\\xf3\\u0551ightarrows;\\u61c9quigarro\\xf7\\u30cbhreetimes;\\u62ccg;\\u42daingdotse\\xf1\\u1f32\\u0180ahm\\u320d\\u3210\\u3213r\\xf2\\u0feaa\\xf2\\u0551;\\u600foust\\u0100;a\\u321e\\u321f\\u63b1che\\xbb\\u321fmid;\\u6aee\\u0200abpt\\u3232\\u323d\\u3240\\u3252\\u0100nr\\u3237\\u323ag;\\u67edr;\\u61fer\\xeb\\u1003\\u0180afl\\u3247\\u324a\\u324er;\\u6986;\\uc000\\ud835\\udd63us;\\u6a2eimes;\\u6a35\\u0100ap\\u325d\\u3267r\\u0100;g\\u3263\\u3264\\u4029t;\\u6994olint;\\u6a12ar\\xf2\\u31e3\\u0200achq\\u327b\\u3280\\u10bc\\u3285quo;\\u603ar;\\uc000\\ud835\\udcc7\\u0100bu\\u30fb\\u328ao\\u0100;r\\u0214\\u0213\\u0180hir\\u3297\\u329b\\u32a0re\\xe5\\u31f8mes;\\u62cai\\u0200;efl\\u32aa\\u1059\\u1821\\u32ab\\u65b9tri;\\u69celuhar;\\u6968;\\u611e\\u0d61\\u32d5\\u32db\\u32df\\u332c\\u3338\\u3371\\0\\u337a\\u33a4\\0\\0\\u33ec\\u33f0\\0\\u3428\\u3448\\u345a\\u34ad\\u34b1\\u34ca\\u34f1\\0\\u3616\\0\\0\\u3633cute;\\u415bqu\\xef\\u27ba\\u0500;Eaceinpsy\\u11ed\\u32f3\\u32f5\\u32ff\\u3302\\u330b\\u330f\\u331f\\u3326\\u3329;\\u6ab4\\u01f0\\u32fa\\0\\u32fc;\\u6ab8on;\\u4161u\\xe5\\u11fe\\u0100;d\\u11f3\\u3307il;\\u415frc;\\u415d\\u0180Eas\\u3316\\u3318\\u331b;\\u6ab6p;\\u6abaim;\\u62e9olint;\\u6a13i\\xed\\u1204;\\u4441ot\\u0180;be\\u3334\\u1d47\\u3335\\u62c5;\\u6a66\\u0380Aacmstx\\u3346\\u334a\\u3357\\u335b\\u335e\\u3363\\u336drr;\\u61d8r\\u0100hr\\u3350\\u3352\\xeb\\u2228\\u0100;o\\u0a36\\u0a34t\\u803b\\xa7\\u40a7i;\\u403bwar;\\u6929m\\u0100in\\u3369\\xf0nu\\xf3\\xf1t;\\u6736r\\u0100;o\\u3376\\u2055\\uc000\\ud835\\udd30\\u0200acoy\\u3382\\u3386\\u3391\\u33a0rp;\\u666f\\u0100hy\\u338b\\u338fcy;\\u4449;\\u4448rt\\u026d\\u3399\\0\\0\\u339ci\\xe4\\u1464ara\\xec\\u2e6f\\u803b\\xad\\u40ad\\u0100gm\\u33a8\\u33b4ma\\u0180;fv\\u33b1\\u33b2\\u33b2\\u43c3;\\u43c2\\u0400;deglnpr\\u12ab\\u33c5\\u33c9\\u33ce\\u33d6\\u33de\\u33e1\\u33e6ot;\\u6a6a\\u0100;q\\u12b1\\u12b0\\u0100;E\\u33d3\\u33d4\\u6a9e;\\u6aa0\\u0100;E\\u33db\\u33dc\\u6a9d;\\u6a9fe;\\u6246lus;\\u6a24arr;\\u6972ar\\xf2\\u113d\\u0200aeit\\u33f8\\u3408\\u340f\\u3417\\u0100ls\\u33fd\\u3404lsetm\\xe9\\u336ahp;\\u6a33parsl;\\u69e4\\u0100dl\\u1463\\u3414e;\\u6323\\u0100;e\\u341c\\u341d\\u6aaa\\u0100;s\\u3422\\u3423\\u6aac;\\uc000\\u2aac\\ufe00\\u0180flp\\u342e\\u3433\\u3442tcy;\\u444c\\u0100;b\\u3438\\u3439\\u402f\\u0100;a\\u343e\\u343f\\u69c4r;\\u633ff;\\uc000\\ud835\\udd64a\\u0100dr\\u344d\\u0402es\\u0100;u\\u3454\\u3455\\u6660it\\xbb\\u3455\\u0180csu\\u3460\\u3479\\u349f\\u0100au\\u3465\\u346fp\\u0100;s\\u1188\\u346b;\\uc000\\u2293\\ufe00p\\u0100;s\\u11b4\\u3475;\\uc000\\u2294\\ufe00u\\u0100bp\\u347f\\u348f\\u0180;es\\u1197\\u119c\\u3486et\\u0100;e\\u1197\\u348d\\xf1\\u119d\\u0180;es\\u11a8\\u11ad\\u3496et\\u0100;e\\u11a8\\u349d\\xf1\\u11ae\\u0180;af\\u117b\\u34a6\\u05b0r\\u0165\\u34ab\\u05b1\\xbb\\u117car\\xf2\\u1148\\u0200cemt\\u34b9\\u34be\\u34c2\\u34c5r;\\uc000\\ud835\\udcc8tm\\xee\\xf1i\\xec\\u3415ar\\xe6\\u11be\\u0100ar\\u34ce\\u34d5r\\u0100;f\\u34d4\\u17bf\\u6606\\u0100an\\u34da\\u34edight\\u0100ep\\u34e3\\u34eapsilo\\xee\\u1ee0h\\xe9\\u2eafs\\xbb\\u2852\\u0280bcmnp\\u34fb\\u355e\\u1209\\u358b\\u358e\\u0480;Edemnprs\\u350e\\u350f\\u3511\\u3515\\u351e\\u3523\\u352c\\u3531\\u3536\\u6282;\\u6ac5ot;\\u6abd\\u0100;d\\u11da\\u351aot;\\u6ac3ult;\\u6ac1\\u0100Ee\\u3528\\u352a;\\u6acb;\\u628alus;\\u6abfarr;\\u6979\\u0180eiu\\u353d\\u3552\\u3555t\\u0180;en\\u350e\\u3545\\u354bq\\u0100;q\\u11da\\u350feq\\u0100;q\\u352b\\u3528m;\\u6ac7\\u0100bp\\u355a\\u355c;\\u6ad5;\\u6ad3c\\u0300;acens\\u11ed\\u356c\\u3572\\u3579\\u357b\\u3326ppro\\xf8\\u32faurlye\\xf1\\u11fe\\xf1\\u11f3\\u0180aes\\u3582\\u3588\\u331bppro\\xf8\\u331aq\\xf1\\u3317g;\\u666a\\u0680123;Edehlmnps\\u35a9\\u35ac\\u35af\\u121c\\u35b2\\u35b4\\u35c0\\u35c9\\u35d5\\u35da\\u35df\\u35e8\\u35ed\\u803b\\xb9\\u40b9\\u803b\\xb2\\u40b2\\u803b\\xb3\\u40b3;\\u6ac6\\u0100os\\u35b9\\u35bct;\\u6abeub;\\u6ad8\\u0100;d\\u1222\\u35c5ot;\\u6ac4s\\u0100ou\\u35cf\\u35d2l;\\u67c9b;\\u6ad7arr;\\u697bult;\\u6ac2\\u0100Ee\\u35e4\\u35e6;\\u6acc;\\u628blus;\\u6ac0\\u0180eiu\\u35f4\\u3609\\u360ct\\u0180;en\\u121c\\u35fc\\u3602q\\u0100;q\\u1222\\u35b2eq\\u0100;q\\u35e7\\u35e4m;\\u6ac8\\u0100bp\\u3611\\u3613;\\u6ad4;\\u6ad6\\u0180Aan\\u361c\\u3620\\u362drr;\\u61d9r\\u0100hr\\u3626\\u3628\\xeb\\u222e\\u0100;o\\u0a2b\\u0a29war;\\u692alig\\u803b\\xdf\\u40df\\u0be1\\u3651\\u365d\\u3660\\u12ce\\u3673\\u3679\\0\\u367e\\u36c2\\0\\0\\0\\0\\0\\u36db\\u3703\\0\\u3709\\u376c\\0\\0\\0\\u3787\\u0272\\u3656\\0\\0\\u365bget;\\u6316;\\u43c4r\\xeb\\u0e5f\\u0180aey\\u3666\\u366b\\u3670ron;\\u4165dil;\\u4163;\\u4442lrec;\\u6315r;\\uc000\\ud835\\udd31\\u0200eiko\\u3686\\u369d\\u36b5\\u36bc\\u01f2\\u368b\\0\\u3691e\\u01004f\\u1284\\u1281a\\u0180;sv\\u3698\\u3699\\u369b\\u43b8ym;\\u43d1\\u0100cn\\u36a2\\u36b2k\\u0100as\\u36a8\\u36aeppro\\xf8\\u12c1im\\xbb\\u12acs\\xf0\\u129e\\u0100as\\u36ba\\u36ae\\xf0\\u12c1rn\\u803b\\xfe\\u40fe\\u01ec\\u031f\\u36c6\\u22e7es\\u8180\\xd7;bd\\u36cf\\u36d0\\u36d8\\u40d7\\u0100;a\\u190f\\u36d5r;\\u6a31;\\u6a30\\u0180eps\\u36e1\\u36e3\\u3700\\xe1\\u2a4d\\u0200;bcf\\u0486\\u36ec\\u36f0\\u36f4ot;\\u6336ir;\\u6af1\\u0100;o\\u36f9\\u36fc\\uc000\\ud835\\udd65rk;\\u6ada\\xe1\\u3362rime;\\u6034\\u0180aip\\u370f\\u3712\\u3764d\\xe5\\u1248\\u0380adempst\\u3721\\u374d\\u3740\\u3751\\u3757\\u375c\\u375fngle\\u0280;dlqr\\u3730\\u3731\\u3736\\u3740\\u3742\\u65b5own\\xbb\\u1dbbeft\\u0100;e\\u2800\\u373e\\xf1\\u092e;\\u625cight\\u0100;e\\u32aa\\u374b\\xf1\\u105aot;\\u65ecinus;\\u6a3alus;\\u6a39b;\\u69cdime;\\u6a3bezium;\\u63e2\\u0180cht\\u3772\\u377d\\u3781\\u0100ry\\u3777\\u377b;\\uc000\\ud835\\udcc9;\\u4446cy;\\u445brok;\\u4167\\u0100io\\u378b\\u378ex\\xf4\\u1777head\\u0100lr\\u3797\\u37a0eftarro\\xf7\\u084fightarrow\\xbb\\u0f5d\\u0900AHabcdfghlmoprstuw\\u37d0\\u37d3\\u37d7\\u37e4\\u37f0\\u37fc\\u380e\\u381c\\u3823\\u3834\\u3851\\u385d\\u386b\\u38a9\\u38cc\\u38d2\\u38ea\\u38f6r\\xf2\\u03edar;\\u6963\\u0100cr\\u37dc\\u37e2ute\\u803b\\xfa\\u40fa\\xf2\\u1150r\\u01e3\\u37ea\\0\\u37edy;\\u445eve;\\u416d\\u0100iy\\u37f5\\u37farc\\u803b\\xfb\\u40fb;\\u4443\\u0180abh\\u3803\\u3806\\u380br\\xf2\\u13adlac;\\u4171a\\xf2\\u13c3\\u0100ir\\u3813\\u3818sht;\\u697e;\\uc000\\ud835\\udd32rave\\u803b\\xf9\\u40f9\\u0161\\u3827\\u3831r\\u0100lr\\u382c\\u382e\\xbb\\u0957\\xbb\\u1083lk;\\u6580\\u0100ct\\u3839\\u384d\\u026f\\u383f\\0\\0\\u384arn\\u0100;e\\u3845\\u3846\\u631cr\\xbb\\u3846op;\\u630fri;\\u65f8\\u0100al\\u3856\\u385acr;\\u416b\\u80bb\\xa8\\u0349\\u0100gp\\u3862\\u3866on;\\u4173f;\\uc000\\ud835\\udd66\\u0300adhlsu\\u114b\\u3878\\u387d\\u1372\\u3891\\u38a0own\\xe1\\u13b3arpoon\\u0100lr\\u3888\\u388cef\\xf4\\u382digh\\xf4\\u382fi\\u0180;hl\\u3899\\u389a\\u389c\\u43c5\\xbb\\u13faon\\xbb\\u389aparrows;\\u61c8\\u0180cit\\u38b0\\u38c4\\u38c8\\u026f\\u38b6\\0\\0\\u38c1rn\\u0100;e\\u38bc\\u38bd\\u631dr\\xbb\\u38bdop;\\u630eng;\\u416fri;\\u65f9cr;\\uc000\\ud835\\udcca\\u0180dir\\u38d9\\u38dd\\u38e2ot;\\u62f0lde;\\u4169i\\u0100;f\\u3730\\u38e8\\xbb\\u1813\\u0100am\\u38ef\\u38f2r\\xf2\\u38a8l\\u803b\\xfc\\u40fcangle;\\u69a7\\u0780ABDacdeflnoprsz\\u391c\\u391f\\u3929\\u392d\\u39b5\\u39b8\\u39bd\\u39df\\u39e4\\u39e8\\u39f3\\u39f9\\u39fd\\u3a01\\u3a20r\\xf2\\u03f7ar\\u0100;v\\u3926\\u3927\\u6ae8;\\u6ae9as\\xe8\\u03e1\\u0100nr\\u3932\\u3937grt;\\u699c\\u0380eknprst\\u34e3\\u3946\\u394b\\u3952\\u395d\\u3964\\u3996app\\xe1\\u2415othin\\xe7\\u1e96\\u0180hir\\u34eb\\u2ec8\\u3959op\\xf4\\u2fb5\\u0100;h\\u13b7\\u3962\\xef\\u318d\\u0100iu\\u3969\\u396dgm\\xe1\\u33b3\\u0100bp\\u3972\\u3984setneq\\u0100;q\\u397d\\u3980\\uc000\\u228a\\ufe00;\\uc000\\u2acb\\ufe00setneq\\u0100;q\\u398f\\u3992\\uc000\\u228b\\ufe00;\\uc000\\u2acc\\ufe00\\u0100hr\\u399b\\u399fet\\xe1\\u369ciangle\\u0100lr\\u39aa\\u39afeft\\xbb\\u0925ight\\xbb\\u1051y;\\u4432ash\\xbb\\u1036\\u0180elr\\u39c4\\u39d2\\u39d7\\u0180;be\\u2dea\\u39cb\\u39cfar;\\u62bbq;\\u625alip;\\u62ee\\u0100bt\\u39dc\\u1468a\\xf2\\u1469r;\\uc000\\ud835\\udd33tr\\xe9\\u39aesu\\u0100bp\\u39ef\\u39f1\\xbb\\u0d1c\\xbb\\u0d59pf;\\uc000\\ud835\\udd67ro\\xf0\\u0efbtr\\xe9\\u39b4\\u0100cu\\u3a06\\u3a0br;\\uc000\\ud835\\udccb\\u0100bp\\u3a10\\u3a18n\\u0100Ee\\u3980\\u3a16\\xbb\\u397en\\u0100Ee\\u3992\\u3a1e\\xbb\\u3990igzag;\\u699a\\u0380cefoprs\\u3a36\\u3a3b\\u3a56\\u3a5b\\u3a54\\u3a61\\u3a6airc;\\u4175\\u0100di\\u3a40\\u3a51\\u0100bg\\u3a45\\u3a49ar;\\u6a5fe\\u0100;q\\u15fa\\u3a4f;\\u6259erp;\\u6118r;\\uc000\\ud835\\udd34pf;\\uc000\\ud835\\udd68\\u0100;e\\u1479\\u3a66at\\xe8\\u1479cr;\\uc000\\ud835\\udccc\\u0ae3\\u178e\\u3a87\\0\\u3a8b\\0\\u3a90\\u3a9b\\0\\0\\u3a9d\\u3aa8\\u3aab\\u3aaf\\0\\0\\u3ac3\\u3ace\\0\\u3ad8\\u17dc\\u17dftr\\xe9\\u17d1r;\\uc000\\ud835\\udd35\\u0100Aa\\u3a94\\u3a97r\\xf2\\u03c3r\\xf2\\u09f6;\\u43be\\u0100Aa\\u3aa1\\u3aa4r\\xf2\\u03b8r\\xf2\\u09eba\\xf0\\u2713is;\\u62fb\\u0180dpt\\u17a4\\u3ab5\\u3abe\\u0100fl\\u3aba\\u17a9;\\uc000\\ud835\\udd69im\\xe5\\u17b2\\u0100Aa\\u3ac7\\u3acar\\xf2\\u03cer\\xf2\\u0a01\\u0100cq\\u3ad2\\u17b8r;\\uc000\\ud835\\udccd\\u0100pt\\u17d6\\u3adcr\\xe9\\u17d4\\u0400acefiosu\\u3af0\\u3afd\\u3b08\\u3b0c\\u3b11\\u3b15\\u3b1b\\u3b21c\\u0100uy\\u3af6\\u3afbte\\u803b\\xfd\\u40fd;\\u444f\\u0100iy\\u3b02\\u3b06rc;\\u4177;\\u444bn\\u803b\\xa5\\u40a5r;\\uc000\\ud835\\udd36cy;\\u4457pf;\\uc000\\ud835\\udd6acr;\\uc000\\ud835\\udcce\\u0100cm\\u3b26\\u3b29y;\\u444el\\u803b\\xff\\u40ff\\u0500acdefhiosw\\u3b42\\u3b48\\u3b54\\u3b58\\u3b64\\u3b69\\u3b6d\\u3b74\\u3b7a\\u3b80cute;\\u417a\\u0100ay\\u3b4d\\u3b52ron;\\u417e;\\u4437ot;\\u417c\\u0100et\\u3b5d\\u3b61tr\\xe6\\u155fa;\\u43b6r;\\uc000\\ud835\\udd37cy;\\u4436grarr;\\u61ddpf;\\uc000\\ud835\\udd6bcr;\\uc000\\ud835\\udccf\\u0100jn\\u3b85\\u3b87;\\u600dj;\\u600c\".split(\"\").map(c => c.charCodeAt(0)));\n\n// Generated using scripts/write-decode-map.ts\nconst xmlDecodeTree = /* #__PURE__ */new Uint16Array(\n// prettier-ignore\n/* #__PURE__ */\n/*#__PURE__*/\"\\u0200aglq\\t\\x15\\x18\\x1b\\u026d\\x0f\\0\\0\\x12p;\\u4026os;\\u4027t;\\u403et;\\u403cuot;\\u4022\".split(\"\").map(c => c.charCodeAt(0)));\n\n// Adapted from https://github.com/mathiasbynens/he/blob/36afe179392226cf1b6ccdb16ebbb7a5a844d93a/src/he.js#L106-L134\nvar _a;\nconst decodeMap = /*#__PURE__*/new Map([[0, 65533],\n// C1 Unicode control character reference replacements\n[128, 8364], [130, 8218], [131, 402], [132, 8222], [133, 8230], [134, 8224], [135, 8225], [136, 710], [137, 8240], [138, 352], [139, 8249], [140, 338], [142, 381], [145, 8216], [146, 8217], [147, 8220], [148, 8221], [149, 8226], [150, 8211], [151, 8212], [152, 732], [153, 8482], [154, 353], [155, 8250], [156, 339], [158, 382], [159, 376]]);\n/**\n * Polyfill for `String.fromCodePoint`. It is used to create a string from a Unicode code point.\n */\nconst fromCodePoint =\n// eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, n/no-unsupported-features/es-builtins\n(_a = String.fromCodePoint) !== null && _a !== void 0 ? _a : function (codePoint) {\n  let output = \"\";\n  if (codePoint > 65535) {\n    codePoint -= 65536;\n    output += String.fromCharCode(codePoint >>> 10 & 1023 | 55296);\n    codePoint = 56320 | codePoint & 1023;\n  }\n  output += String.fromCharCode(codePoint);\n  return output;\n};\n/**\n * Replace the given code point with a replacement character if it is a\n * surrogate or is outside the valid range. Otherwise return the code\n * point unchanged.\n */\nfunction replaceCodePoint(codePoint) {\n  var _a;\n  if (codePoint >= 55296 && codePoint <= 57343 || codePoint > 1114111) {\n    return 65533;\n  }\n  return (_a = decodeMap.get(codePoint)) !== null && _a !== void 0 ? _a : codePoint;\n}\nvar CharCodes$1 = /*#__PURE__*/function (CharCodes) {\n  CharCodes[CharCodes[\"NUM\"] = 35] = \"NUM\";\n  CharCodes[CharCodes[\"SEMI\"] = 59] = \"SEMI\";\n  CharCodes[CharCodes[\"EQUALS\"] = 61] = \"EQUALS\";\n  CharCodes[CharCodes[\"ZERO\"] = 48] = \"ZERO\";\n  CharCodes[CharCodes[\"NINE\"] = 57] = \"NINE\";\n  CharCodes[CharCodes[\"LOWER_A\"] = 97] = \"LOWER_A\";\n  CharCodes[CharCodes[\"LOWER_F\"] = 102] = \"LOWER_F\";\n  CharCodes[CharCodes[\"LOWER_X\"] = 120] = \"LOWER_X\";\n  CharCodes[CharCodes[\"LOWER_Z\"] = 122] = \"LOWER_Z\";\n  CharCodes[CharCodes[\"UPPER_A\"] = 65] = \"UPPER_A\";\n  CharCodes[CharCodes[\"UPPER_F\"] = 70] = \"UPPER_F\";\n  CharCodes[CharCodes[\"UPPER_Z\"] = 90] = \"UPPER_Z\";\n  return CharCodes;\n}(CharCodes$1 || {});\n/** Bit that needs to be set to convert an upper case ASCII character to lower case */\nconst TO_LOWER_BIT = 32;\nvar BinTrieFlags = /*#__PURE__*/function (BinTrieFlags) {\n  BinTrieFlags[BinTrieFlags[\"VALUE_LENGTH\"] = 49152] = \"VALUE_LENGTH\";\n  BinTrieFlags[BinTrieFlags[\"BRANCH_LENGTH\"] = 16256] = \"BRANCH_LENGTH\";\n  BinTrieFlags[BinTrieFlags[\"JUMP_TABLE\"] = 127] = \"JUMP_TABLE\";\n  return BinTrieFlags;\n}(BinTrieFlags || {});\nfunction isNumber(code) {\n  return code >= CharCodes$1.ZERO && code <= CharCodes$1.NINE;\n}\nfunction isHexadecimalCharacter(code) {\n  return code >= CharCodes$1.UPPER_A && code <= CharCodes$1.UPPER_F || code >= CharCodes$1.LOWER_A && code <= CharCodes$1.LOWER_F;\n}\nfunction isAsciiAlphaNumeric(code) {\n  return code >= CharCodes$1.UPPER_A && code <= CharCodes$1.UPPER_Z || code >= CharCodes$1.LOWER_A && code <= CharCodes$1.LOWER_Z || isNumber(code);\n}\n/**\n * Checks if the given character is a valid end character for an entity in an attribute.\n *\n * Attribute values that aren't terminated properly aren't parsed, and shouldn't lead to a parser error.\n * See the example in https://html.spec.whatwg.org/multipage/parsing.html#named-character-reference-state\n */\nfunction isEntityInAttributeInvalidEnd(code) {\n  return code === CharCodes$1.EQUALS || isAsciiAlphaNumeric(code);\n}\nvar EntityDecoderState = /*#__PURE__*/function (EntityDecoderState) {\n  EntityDecoderState[EntityDecoderState[\"EntityStart\"] = 0] = \"EntityStart\";\n  EntityDecoderState[EntityDecoderState[\"NumericStart\"] = 1] = \"NumericStart\";\n  EntityDecoderState[EntityDecoderState[\"NumericDecimal\"] = 2] = \"NumericDecimal\";\n  EntityDecoderState[EntityDecoderState[\"NumericHex\"] = 3] = \"NumericHex\";\n  EntityDecoderState[EntityDecoderState[\"NamedEntity\"] = 4] = \"NamedEntity\";\n  return EntityDecoderState;\n}(EntityDecoderState || {});\nvar DecodingMode = /*#__PURE__*/function (DecodingMode) {\n  /** Entities in text nodes that can end with any character. */\n  DecodingMode[DecodingMode[\"Legacy\"] = 0] = \"Legacy\";\n  /** Only allow entities terminated with a semicolon. */\n  DecodingMode[DecodingMode[\"Strict\"] = 1] = \"Strict\";\n  /** Entities in attributes have limitations on ending characters. */\n  DecodingMode[DecodingMode[\"Attribute\"] = 2] = \"Attribute\";\n  return DecodingMode;\n}(DecodingMode || {});\n/**\n * Token decoder with support of writing partial entities.\n */\nclass EntityDecoder {\n  constructor(/** The tree used to decode entities. */\n  decodeTree,\n  /**\n   * The function that is called when a codepoint is decoded.\n   *\n   * For multi-byte named entities, this will be called multiple times,\n   * with the second codepoint, and the same `consumed` value.\n   *\n   * @param codepoint The decoded codepoint.\n   * @param consumed The number of bytes consumed by the decoder.\n   */\n  emitCodePoint, /** An object that is used to produce errors. */\n  errors) {\n    this.decodeTree = decodeTree;\n    this.emitCodePoint = emitCodePoint;\n    this.errors = errors;\n    /** The current state of the decoder. */\n    this.state = EntityDecoderState.EntityStart;\n    /** Characters that were consumed while parsing an entity. */\n    this.consumed = 1;\n    /**\n     * The result of the entity.\n     *\n     * Either the result index of a numeric entity, or the codepoint of a\n     * numeric entity.\n     */\n    this.result = 0;\n    /** The current index in the decode tree. */\n    this.treeIndex = 0;\n    /** The number of characters that were consumed in excess. */\n    this.excess = 1;\n    /** The mode in which the decoder is operating. */\n    this.decodeMode = DecodingMode.Strict;\n  }\n  /** Resets the instance to make it reusable. */\n  startEntity(decodeMode) {\n    this.decodeMode = decodeMode;\n    this.state = EntityDecoderState.EntityStart;\n    this.result = 0;\n    this.treeIndex = 0;\n    this.excess = 1;\n    this.consumed = 1;\n  }\n  /**\n   * Write an entity to the decoder. This can be called multiple times with partial entities.\n   * If the entity is incomplete, the decoder will return -1.\n   *\n   * Mirrors the implementation of `getDecoder`, but with the ability to stop decoding if the\n   * entity is incomplete, and resume when the next string is written.\n   *\n   * @param input The string containing the entity (or a continuation of the entity).\n   * @param offset The offset at which the entity begins. Should be 0 if this is not the first call.\n   * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n   */\n  write(input, offset) {\n    switch (this.state) {\n      case EntityDecoderState.EntityStart:\n        {\n          if (input.charCodeAt(offset) === CharCodes$1.NUM) {\n            this.state = EntityDecoderState.NumericStart;\n            this.consumed += 1;\n            return this.stateNumericStart(input, offset + 1);\n          }\n          this.state = EntityDecoderState.NamedEntity;\n          return this.stateNamedEntity(input, offset);\n        }\n      case EntityDecoderState.NumericStart:\n        {\n          return this.stateNumericStart(input, offset);\n        }\n      case EntityDecoderState.NumericDecimal:\n        {\n          return this.stateNumericDecimal(input, offset);\n        }\n      case EntityDecoderState.NumericHex:\n        {\n          return this.stateNumericHex(input, offset);\n        }\n      case EntityDecoderState.NamedEntity:\n        {\n          return this.stateNamedEntity(input, offset);\n        }\n    }\n  }\n  /**\n   * Switches between the numeric decimal and hexadecimal states.\n   *\n   * Equivalent to the `Numeric character reference state` in the HTML spec.\n   *\n   * @param input The string containing the entity (or a continuation of the entity).\n   * @param offset The current offset.\n   * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n   */\n  stateNumericStart(input, offset) {\n    if (offset >= input.length) {\n      return -1;\n    }\n    if ((input.charCodeAt(offset) | TO_LOWER_BIT) === CharCodes$1.LOWER_X) {\n      this.state = EntityDecoderState.NumericHex;\n      this.consumed += 1;\n      return this.stateNumericHex(input, offset + 1);\n    }\n    this.state = EntityDecoderState.NumericDecimal;\n    return this.stateNumericDecimal(input, offset);\n  }\n  addToNumericResult(input, start, end, base) {\n    if (start !== end) {\n      const digitCount = end - start;\n      this.result = this.result * Math.pow(base, digitCount) + Number.parseInt(input.substr(start, digitCount), base);\n      this.consumed += digitCount;\n    }\n  }\n  /**\n   * Parses a hexadecimal numeric entity.\n   *\n   * Equivalent to the `Hexademical character reference state` in the HTML spec.\n   *\n   * @param input The string containing the entity (or a continuation of the entity).\n   * @param offset The current offset.\n   * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n   */\n  stateNumericHex(input, offset) {\n    const startIndex = offset;\n    while (offset < input.length) {\n      const char = input.charCodeAt(offset);\n      if (isNumber(char) || isHexadecimalCharacter(char)) {\n        offset += 1;\n      } else {\n        this.addToNumericResult(input, startIndex, offset, 16);\n        return this.emitNumericEntity(char, 3);\n      }\n    }\n    this.addToNumericResult(input, startIndex, offset, 16);\n    return -1;\n  }\n  /**\n   * Parses a decimal numeric entity.\n   *\n   * Equivalent to the `Decimal character reference state` in the HTML spec.\n   *\n   * @param input The string containing the entity (or a continuation of the entity).\n   * @param offset The current offset.\n   * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n   */\n  stateNumericDecimal(input, offset) {\n    const startIndex = offset;\n    while (offset < input.length) {\n      const char = input.charCodeAt(offset);\n      if (isNumber(char)) {\n        offset += 1;\n      } else {\n        this.addToNumericResult(input, startIndex, offset, 10);\n        return this.emitNumericEntity(char, 2);\n      }\n    }\n    this.addToNumericResult(input, startIndex, offset, 10);\n    return -1;\n  }\n  /**\n   * Validate and emit a numeric entity.\n   *\n   * Implements the logic from the `Hexademical character reference start\n   * state` and `Numeric character reference end state` in the HTML spec.\n   *\n   * @param lastCp The last code point of the entity. Used to see if the\n   *               entity was terminated with a semicolon.\n   * @param expectedLength The minimum number of characters that should be\n   *                       consumed. Used to validate that at least one digit\n   *                       was consumed.\n   * @returns The number of characters that were consumed.\n   */\n  emitNumericEntity(lastCp, expectedLength) {\n    var _a;\n    // Ensure we consumed at least one digit.\n    if (this.consumed <= expectedLength) {\n      (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n      return 0;\n    }\n    // Figure out if this is a legit end of the entity\n    if (lastCp === CharCodes$1.SEMI) {\n      this.consumed += 1;\n    } else if (this.decodeMode === DecodingMode.Strict) {\n      return 0;\n    }\n    this.emitCodePoint(replaceCodePoint(this.result), this.consumed);\n    if (this.errors) {\n      if (lastCp !== CharCodes$1.SEMI) {\n        this.errors.missingSemicolonAfterCharacterReference();\n      }\n      this.errors.validateNumericCharacterReference(this.result);\n    }\n    return this.consumed;\n  }\n  /**\n   * Parses a named entity.\n   *\n   * Equivalent to the `Named character reference state` in the HTML spec.\n   *\n   * @param input The string containing the entity (or a continuation of the entity).\n   * @param offset The current offset.\n   * @returns The number of characters that were consumed, or -1 if the entity is incomplete.\n   */\n  stateNamedEntity(input, offset) {\n    const {\n      decodeTree\n    } = this;\n    let current = decodeTree[this.treeIndex];\n    // The mask is the number of bytes of the value, including the current byte.\n    let valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n    for (; offset < input.length; offset++, this.excess++) {\n      const char = input.charCodeAt(offset);\n      this.treeIndex = determineBranch(decodeTree, current, this.treeIndex + Math.max(1, valueLength), char);\n      if (this.treeIndex < 0) {\n        return this.result === 0 ||\n        // If we are parsing an attribute\n        this.decodeMode === DecodingMode.Attribute && (\n        // We shouldn't have consumed any characters after the entity,\n        valueLength === 0 ||\n        // And there should be no invalid characters.\n        isEntityInAttributeInvalidEnd(char)) ? 0 : this.emitNotTerminatedNamedEntity();\n      }\n      current = decodeTree[this.treeIndex];\n      valueLength = (current & BinTrieFlags.VALUE_LENGTH) >> 14;\n      // If the branch is a value, store it and continue\n      if (valueLength !== 0) {\n        // If the entity is terminated by a semicolon, we are done.\n        if (char === CharCodes$1.SEMI) {\n          return this.emitNamedEntityData(this.treeIndex, valueLength, this.consumed + this.excess);\n        }\n        // If we encounter a non-terminated (legacy) entity while parsing strictly, then ignore it.\n        if (this.decodeMode !== DecodingMode.Strict) {\n          this.result = this.treeIndex;\n          this.consumed += this.excess;\n          this.excess = 0;\n        }\n      }\n    }\n    return -1;\n  }\n  /**\n   * Emit a named entity that was not terminated with a semicolon.\n   *\n   * @returns The number of characters consumed.\n   */\n  emitNotTerminatedNamedEntity() {\n    var _a;\n    const {\n      result,\n      decodeTree\n    } = this;\n    const valueLength = (decodeTree[result] & BinTrieFlags.VALUE_LENGTH) >> 14;\n    this.emitNamedEntityData(result, valueLength, this.consumed);\n    (_a = this.errors) === null || _a === void 0 ? void 0 : _a.missingSemicolonAfterCharacterReference();\n    return this.consumed;\n  }\n  /**\n   * Emit a named entity.\n   *\n   * @param result The index of the entity in the decode tree.\n   * @param valueLength The number of bytes in the entity.\n   * @param consumed The number of characters consumed.\n   *\n   * @returns The number of characters consumed.\n   */\n  emitNamedEntityData(result, valueLength, consumed) {\n    const {\n      decodeTree\n    } = this;\n    this.emitCodePoint(valueLength === 1 ? decodeTree[result] & ~BinTrieFlags.VALUE_LENGTH : decodeTree[result + 1], consumed);\n    if (valueLength === 3) {\n      // For multi-byte values, we need to emit the second byte.\n      this.emitCodePoint(decodeTree[result + 2], consumed);\n    }\n    return consumed;\n  }\n  /**\n   * Signal to the parser that the end of the input was reached.\n   *\n   * Remaining data will be emitted and relevant errors will be produced.\n   *\n   * @returns The number of characters consumed.\n   */\n  end() {\n    var _a;\n    switch (this.state) {\n      case EntityDecoderState.NamedEntity:\n        {\n          // Emit a named entity if we have one.\n          return this.result !== 0 && (this.decodeMode !== DecodingMode.Attribute || this.result === this.treeIndex) ? this.emitNotTerminatedNamedEntity() : 0;\n        }\n      // Otherwise, emit a numeric entity if we have one.\n      case EntityDecoderState.NumericDecimal:\n        {\n          return this.emitNumericEntity(0, 2);\n        }\n      case EntityDecoderState.NumericHex:\n        {\n          return this.emitNumericEntity(0, 3);\n        }\n      case EntityDecoderState.NumericStart:\n        {\n          (_a = this.errors) === null || _a === void 0 ? void 0 : _a.absenceOfDigitsInNumericCharacterReference(this.consumed);\n          return 0;\n        }\n      case EntityDecoderState.EntityStart:\n        {\n          // Return 0 if we have no entity.\n          return 0;\n        }\n    }\n  }\n}\n/**\n * Determines the branch of the current node that is taken given the current\n * character. This function is used to traverse the trie.\n *\n * @param decodeTree The trie.\n * @param current The current node.\n * @param nodeIdx The index right after the current node and its value.\n * @param char The current character.\n * @returns The index of the next node, or -1 if no branch is taken.\n */\nfunction determineBranch(decodeTree, current, nodeIndex, char) {\n  const branchCount = (current & BinTrieFlags.BRANCH_LENGTH) >> 7;\n  const jumpOffset = current & BinTrieFlags.JUMP_TABLE;\n  // Case 1: Single branch encoded in jump offset\n  if (branchCount === 0) {\n    return jumpOffset !== 0 && char === jumpOffset ? nodeIndex : -1;\n  }\n  // Case 2: Multiple branches encoded in jump table\n  if (jumpOffset) {\n    const value = char - jumpOffset;\n    return value < 0 || value >= branchCount ? -1 : decodeTree[nodeIndex + value] - 1;\n  }\n  // Case 3: Multiple branches encoded in dictionary\n  // Binary search for the character.\n  let lo = nodeIndex;\n  let hi = lo + branchCount - 1;\n  while (lo <= hi) {\n    const mid = lo + hi >>> 1;\n    const midValue = decodeTree[mid];\n    if (midValue < char) {\n      lo = mid + 1;\n    } else if (midValue > char) {\n      hi = mid - 1;\n    } else {\n      return decodeTree[mid + branchCount];\n    }\n  }\n  return -1;\n}\nvar CharCodes = /*#__PURE__*/function (CharCodes) {\n  CharCodes[CharCodes[\"Tab\"] = 9] = \"Tab\";\n  CharCodes[CharCodes[\"NewLine\"] = 10] = \"NewLine\";\n  CharCodes[CharCodes[\"FormFeed\"] = 12] = \"FormFeed\";\n  CharCodes[CharCodes[\"CarriageReturn\"] = 13] = \"CarriageReturn\";\n  CharCodes[CharCodes[\"Space\"] = 32] = \"Space\";\n  CharCodes[CharCodes[\"ExclamationMark\"] = 33] = \"ExclamationMark\";\n  CharCodes[CharCodes[\"Number\"] = 35] = \"Number\";\n  CharCodes[CharCodes[\"Amp\"] = 38] = \"Amp\";\n  CharCodes[CharCodes[\"SingleQuote\"] = 39] = \"SingleQuote\";\n  CharCodes[CharCodes[\"DoubleQuote\"] = 34] = \"DoubleQuote\";\n  CharCodes[CharCodes[\"Dash\"] = 45] = \"Dash\";\n  CharCodes[CharCodes[\"Slash\"] = 47] = \"Slash\";\n  CharCodes[CharCodes[\"Zero\"] = 48] = \"Zero\";\n  CharCodes[CharCodes[\"Nine\"] = 57] = \"Nine\";\n  CharCodes[CharCodes[\"Semi\"] = 59] = \"Semi\";\n  CharCodes[CharCodes[\"Lt\"] = 60] = \"Lt\";\n  CharCodes[CharCodes[\"Eq\"] = 61] = \"Eq\";\n  CharCodes[CharCodes[\"Gt\"] = 62] = \"Gt\";\n  CharCodes[CharCodes[\"Questionmark\"] = 63] = \"Questionmark\";\n  CharCodes[CharCodes[\"UpperA\"] = 65] = \"UpperA\";\n  CharCodes[CharCodes[\"LowerA\"] = 97] = \"LowerA\";\n  CharCodes[CharCodes[\"UpperF\"] = 70] = \"UpperF\";\n  CharCodes[CharCodes[\"LowerF\"] = 102] = \"LowerF\";\n  CharCodes[CharCodes[\"UpperZ\"] = 90] = \"UpperZ\";\n  CharCodes[CharCodes[\"LowerZ\"] = 122] = \"LowerZ\";\n  CharCodes[CharCodes[\"LowerX\"] = 120] = \"LowerX\";\n  CharCodes[CharCodes[\"OpeningSquareBracket\"] = 91] = \"OpeningSquareBracket\";\n  return CharCodes;\n}(CharCodes || {});\n/** All the states the tokenizer can be in. */\nvar State = /*#__PURE__*/function (State) {\n  State[State[\"Text\"] = 1] = \"Text\";\n  State[State[\"BeforeTagName\"] = 2] = \"BeforeTagName\";\n  State[State[\"InTagName\"] = 3] = \"InTagName\";\n  State[State[\"InSelfClosingTag\"] = 4] = \"InSelfClosingTag\";\n  State[State[\"BeforeClosingTagName\"] = 5] = \"BeforeClosingTagName\";\n  State[State[\"InClosingTagName\"] = 6] = \"InClosingTagName\";\n  State[State[\"AfterClosingTagName\"] = 7] = \"AfterClosingTagName\";\n  // Attributes\n  State[State[\"BeforeAttributeName\"] = 8] = \"BeforeAttributeName\";\n  State[State[\"InAttributeName\"] = 9] = \"InAttributeName\";\n  State[State[\"AfterAttributeName\"] = 10] = \"AfterAttributeName\";\n  State[State[\"BeforeAttributeValue\"] = 11] = \"BeforeAttributeValue\";\n  State[State[\"InAttributeValueDq\"] = 12] = \"InAttributeValueDq\";\n  State[State[\"InAttributeValueSq\"] = 13] = \"InAttributeValueSq\";\n  State[State[\"InAttributeValueNq\"] = 14] = \"InAttributeValueNq\";\n  // Declarations\n  State[State[\"BeforeDeclaration\"] = 15] = \"BeforeDeclaration\";\n  State[State[\"InDeclaration\"] = 16] = \"InDeclaration\";\n  // Processing instructions\n  State[State[\"InProcessingInstruction\"] = 17] = \"InProcessingInstruction\";\n  // Comments & CDATA\n  State[State[\"BeforeComment\"] = 18] = \"BeforeComment\";\n  State[State[\"CDATASequence\"] = 19] = \"CDATASequence\";\n  State[State[\"InSpecialComment\"] = 20] = \"InSpecialComment\";\n  State[State[\"InCommentLike\"] = 21] = \"InCommentLike\";\n  // Special tags\n  State[State[\"BeforeSpecialS\"] = 22] = \"BeforeSpecialS\";\n  State[State[\"BeforeSpecialT\"] = 23] = \"BeforeSpecialT\";\n  State[State[\"SpecialStartSequence\"] = 24] = \"SpecialStartSequence\";\n  State[State[\"InSpecialTag\"] = 25] = \"InSpecialTag\";\n  State[State[\"InEntity\"] = 26] = \"InEntity\";\n  return State;\n}(State || {});\nfunction isWhitespace(c) {\n  return c === CharCodes.Space || c === CharCodes.NewLine || c === CharCodes.Tab || c === CharCodes.FormFeed || c === CharCodes.CarriageReturn;\n}\nfunction isEndOfTagSection(c) {\n  return c === CharCodes.Slash || c === CharCodes.Gt || isWhitespace(c);\n}\nfunction isASCIIAlpha(c) {\n  return c >= CharCodes.LowerA && c <= CharCodes.LowerZ || c >= CharCodes.UpperA && c <= CharCodes.UpperZ;\n}\nvar QuoteType = /*#__PURE__*/function (QuoteType) {\n  QuoteType[QuoteType[\"NoValue\"] = 0] = \"NoValue\";\n  QuoteType[QuoteType[\"Unquoted\"] = 1] = \"Unquoted\";\n  QuoteType[QuoteType[\"Single\"] = 2] = \"Single\";\n  QuoteType[QuoteType[\"Double\"] = 3] = \"Double\";\n  return QuoteType;\n}(QuoteType || {});\n/**\n * Sequences used to match longer strings.\n *\n * We don't have `Script`, `Style`, or `Title` here. Instead, we re-use the *End\n * sequences with an increased offset.\n */\nconst Sequences = {\n  Cdata: /*#__PURE__*/new Uint8Array([0x43, 0x44, 0x41, 0x54, 0x41, 0x5b]),\n  // CDATA[\n  CdataEnd: /*#__PURE__*/new Uint8Array([0x5d, 0x5d, 0x3e]),\n  // ]]>\n  CommentEnd: /*#__PURE__*/new Uint8Array([0x2d, 0x2d, 0x3e]),\n  // `-->`\n  ScriptEnd: /*#__PURE__*/new Uint8Array([0x3c, 0x2f, 0x73, 0x63, 0x72, 0x69, 0x70, 0x74]),\n  // `</script`\n  StyleEnd: /*#__PURE__*/new Uint8Array([0x3c, 0x2f, 0x73, 0x74, 0x79, 0x6c, 0x65]),\n  // `</style`\n  TitleEnd: /*#__PURE__*/new Uint8Array([0x3c, 0x2f, 0x74, 0x69, 0x74, 0x6c, 0x65]),\n  // `</title`\n  TextareaEnd: /*#__PURE__*/new Uint8Array([0x3c, 0x2f, 0x74, 0x65, 0x78, 0x74, 0x61, 0x72, 0x65, 0x61]),\n  // `</textarea`\n  XmpEnd: /*#__PURE__*/new Uint8Array([0x3c, 0x2f, 0x78, 0x6d, 0x70]) // `</xmp`\n};\nclass Tokenizer {\n  constructor({\n    xmlMode = false,\n    decodeEntities = true\n  }, cbs) {\n    this.cbs = cbs;\n    /** The current state the tokenizer is in. */\n    this.state = State.Text;\n    /** The read buffer. */\n    this.buffer = \"\";\n    /** The beginning of the section that is currently being read. */\n    this.sectionStart = 0;\n    /** The index within the buffer that we are currently looking at. */\n    this.index = 0;\n    /** The start of the last entity. */\n    this.entityStart = 0;\n    /** Some behavior, eg. when decoding entities, is done while we are in another state. This keeps track of the other state type. */\n    this.baseState = State.Text;\n    /** For special parsing behavior inside of script and style tags. */\n    this.isSpecial = false;\n    /** Indicates whether the tokenizer has been paused. */\n    this.running = true;\n    /** The offset of the current buffer. */\n    this.offset = 0;\n    this.currentSequence = undefined;\n    this.sequenceIndex = 0;\n    this.xmlMode = xmlMode;\n    this.decodeEntities = decodeEntities;\n    this.entityDecoder = new EntityDecoder(xmlMode ? xmlDecodeTree : htmlDecodeTree, (cp, consumed) => this.emitCodePoint(cp, consumed));\n  }\n  reset() {\n    this.state = State.Text;\n    this.buffer = \"\";\n    this.sectionStart = 0;\n    this.index = 0;\n    this.baseState = State.Text;\n    this.currentSequence = undefined;\n    this.running = true;\n    this.offset = 0;\n  }\n  write(chunk) {\n    this.offset += this.buffer.length;\n    this.buffer = chunk;\n    this.parse();\n  }\n  end() {\n    if (this.running) this.finish();\n  }\n  pause() {\n    this.running = false;\n  }\n  resume() {\n    this.running = true;\n    if (this.index < this.buffer.length + this.offset) {\n      this.parse();\n    }\n  }\n  stateText(c) {\n    if (c === CharCodes.Lt || !this.decodeEntities && this.fastForwardTo(CharCodes.Lt)) {\n      if (this.index > this.sectionStart) {\n        this.cbs.ontext(this.sectionStart, this.index);\n      }\n      this.state = State.BeforeTagName;\n      this.sectionStart = this.index;\n    } else if (this.decodeEntities && c === CharCodes.Amp) {\n      this.startEntity();\n    }\n  }\n  stateSpecialStartSequence(c) {\n    const isEnd = this.sequenceIndex === this.currentSequence.length;\n    const isMatch = isEnd ?\n    // If we are at the end of the sequence, make sure the tag name has ended\n    isEndOfTagSection(c) :\n    // Otherwise, do a case-insensitive comparison\n    (c | 0x20) === this.currentSequence[this.sequenceIndex];\n    if (!isMatch) {\n      this.isSpecial = false;\n    } else if (!isEnd) {\n      this.sequenceIndex++;\n      return;\n    }\n    this.sequenceIndex = 0;\n    this.state = State.InTagName;\n    this.stateInTagName(c);\n  }\n  /** Look for an end tag. For <title> tags, also decode entities. */\n  stateInSpecialTag(c) {\n    if (this.sequenceIndex === this.currentSequence.length) {\n      if (c === CharCodes.Gt || isWhitespace(c)) {\n        const endOfText = this.index - this.currentSequence.length;\n        if (this.sectionStart < endOfText) {\n          // Spoof the index so that reported locations match up.\n          const actualIndex = this.index;\n          this.index = endOfText;\n          this.cbs.ontext(this.sectionStart, endOfText);\n          this.index = actualIndex;\n        }\n        this.isSpecial = false;\n        this.sectionStart = endOfText + 2; // Skip over the `</`\n        this.stateInClosingTagName(c);\n        return; // We are done; skip the rest of the function.\n      }\n      this.sequenceIndex = 0;\n    }\n    if ((c | 0x20) === this.currentSequence[this.sequenceIndex]) {\n      this.sequenceIndex += 1;\n    } else if (this.sequenceIndex === 0) {\n      if (this.currentSequence === Sequences.TitleEnd) {\n        // We have to parse entities in <title> tags.\n        if (this.decodeEntities && c === CharCodes.Amp) {\n          this.startEntity();\n        }\n      } else if (this.fastForwardTo(CharCodes.Lt)) {\n        // Outside of <title> tags, we can fast-forward.\n        this.sequenceIndex = 1;\n      }\n    } else {\n      // If we see a `<`, set the sequence index to 1; useful for eg. `<</script>`.\n      this.sequenceIndex = Number(c === CharCodes.Lt);\n    }\n  }\n  stateCDATASequence(c) {\n    if (c === Sequences.Cdata[this.sequenceIndex]) {\n      if (++this.sequenceIndex === Sequences.Cdata.length) {\n        this.state = State.InCommentLike;\n        this.currentSequence = Sequences.CdataEnd;\n        this.sequenceIndex = 0;\n        this.sectionStart = this.index + 1;\n      }\n    } else {\n      this.sequenceIndex = 0;\n      this.state = State.InDeclaration;\n      this.stateInDeclaration(c); // Reconsume the character\n    }\n  }\n  /**\n   * When we wait for one specific character, we can speed things up\n   * by skipping through the buffer until we find it.\n   *\n   * @returns Whether the character was found.\n   */\n  fastForwardTo(c) {\n    while (++this.index < this.buffer.length + this.offset) {\n      if (this.buffer.charCodeAt(this.index - this.offset) === c) {\n        return true;\n      }\n    }\n    /*\n     * We increment the index at the end of the `parse` loop,\n     * so set it to `buffer.length - 1` here.\n     *\n     * TODO: Refactor `parse` to increment index before calling states.\n     */\n    this.index = this.buffer.length + this.offset - 1;\n    return false;\n  }\n  /**\n   * Comments and CDATA end with `-->` and `]]>`.\n   *\n   * Their common qualities are:\n   * - Their end sequences have a distinct character they start with.\n   * - That character is then repeated, so we have to check multiple repeats.\n   * - All characters but the start character of the sequence can be skipped.\n   */\n  stateInCommentLike(c) {\n    if (c === this.currentSequence[this.sequenceIndex]) {\n      if (++this.sequenceIndex === this.currentSequence.length) {\n        if (this.currentSequence === Sequences.CdataEnd) {\n          this.cbs.oncdata(this.sectionStart, this.index, 2);\n        } else {\n          this.cbs.oncomment(this.sectionStart, this.index, 2);\n        }\n        this.sequenceIndex = 0;\n        this.sectionStart = this.index + 1;\n        this.state = State.Text;\n      }\n    } else if (this.sequenceIndex === 0) {\n      // Fast-forward to the first character of the sequence\n      if (this.fastForwardTo(this.currentSequence[0])) {\n        this.sequenceIndex = 1;\n      }\n    } else if (c !== this.currentSequence[this.sequenceIndex - 1]) {\n      // Allow long sequences, eg. --->, ]]]>\n      this.sequenceIndex = 0;\n    }\n  }\n  /**\n   * HTML only allows ASCII alpha characters (a-z and A-Z) at the beginning of a tag name.\n   *\n   * XML allows a lot more characters here (@see https://www.w3.org/TR/REC-xml/#NT-NameStartChar).\n   * We allow anything that wouldn't end the tag.\n   */\n  isTagStartChar(c) {\n    return this.xmlMode ? !isEndOfTagSection(c) : isASCIIAlpha(c);\n  }\n  startSpecial(sequence, offset) {\n    this.isSpecial = true;\n    this.currentSequence = sequence;\n    this.sequenceIndex = offset;\n    this.state = State.SpecialStartSequence;\n  }\n  stateBeforeTagName(c) {\n    if (c === CharCodes.ExclamationMark) {\n      this.state = State.BeforeDeclaration;\n      this.sectionStart = this.index + 1;\n    } else if (c === CharCodes.Questionmark) {\n      this.state = State.InProcessingInstruction;\n      this.sectionStart = this.index + 1;\n    } else if (this.isTagStartChar(c)) {\n      const lower = c | 0x20;\n      this.sectionStart = this.index;\n      if (this.xmlMode) {\n        this.state = State.InTagName;\n      } else if (lower === Sequences.ScriptEnd[2]) {\n        this.state = State.BeforeSpecialS;\n      } else if (lower === Sequences.TitleEnd[2] || lower === Sequences.XmpEnd[2]) {\n        this.state = State.BeforeSpecialT;\n      } else {\n        this.state = State.InTagName;\n      }\n    } else if (c === CharCodes.Slash) {\n      this.state = State.BeforeClosingTagName;\n    } else {\n      this.state = State.Text;\n      this.stateText(c);\n    }\n  }\n  stateInTagName(c) {\n    if (isEndOfTagSection(c)) {\n      this.cbs.onopentagname(this.sectionStart, this.index);\n      this.sectionStart = -1;\n      this.state = State.BeforeAttributeName;\n      this.stateBeforeAttributeName(c);\n    }\n  }\n  stateBeforeClosingTagName(c) {\n    if (isWhitespace(c)) ;else if (c === CharCodes.Gt) {\n      this.state = State.Text;\n    } else {\n      this.state = this.isTagStartChar(c) ? State.InClosingTagName : State.InSpecialComment;\n      this.sectionStart = this.index;\n    }\n  }\n  stateInClosingTagName(c) {\n    if (c === CharCodes.Gt || isWhitespace(c)) {\n      this.cbs.onclosetag(this.sectionStart, this.index);\n      this.sectionStart = -1;\n      this.state = State.AfterClosingTagName;\n      this.stateAfterClosingTagName(c);\n    }\n  }\n  stateAfterClosingTagName(c) {\n    // Skip everything until \">\"\n    if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n      this.state = State.Text;\n      this.sectionStart = this.index + 1;\n    }\n  }\n  stateBeforeAttributeName(c) {\n    if (c === CharCodes.Gt) {\n      this.cbs.onopentagend(this.index);\n      if (this.isSpecial) {\n        this.state = State.InSpecialTag;\n        this.sequenceIndex = 0;\n      } else {\n        this.state = State.Text;\n      }\n      this.sectionStart = this.index + 1;\n    } else if (c === CharCodes.Slash) {\n      this.state = State.InSelfClosingTag;\n    } else if (!isWhitespace(c)) {\n      this.state = State.InAttributeName;\n      this.sectionStart = this.index;\n    }\n  }\n  stateInSelfClosingTag(c) {\n    if (c === CharCodes.Gt) {\n      this.cbs.onselfclosingtag(this.index);\n      this.state = State.Text;\n      this.sectionStart = this.index + 1;\n      this.isSpecial = false; // Reset special state, in case of self-closing special tags\n    } else if (!isWhitespace(c)) {\n      this.state = State.BeforeAttributeName;\n      this.stateBeforeAttributeName(c);\n    }\n  }\n  stateInAttributeName(c) {\n    if (c === CharCodes.Eq || isEndOfTagSection(c)) {\n      this.cbs.onattribname(this.sectionStart, this.index);\n      this.sectionStart = this.index;\n      this.state = State.AfterAttributeName;\n      this.stateAfterAttributeName(c);\n    }\n  }\n  stateAfterAttributeName(c) {\n    if (c === CharCodes.Eq) {\n      this.state = State.BeforeAttributeValue;\n    } else if (c === CharCodes.Slash || c === CharCodes.Gt) {\n      this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);\n      this.sectionStart = -1;\n      this.state = State.BeforeAttributeName;\n      this.stateBeforeAttributeName(c);\n    } else if (!isWhitespace(c)) {\n      this.cbs.onattribend(QuoteType.NoValue, this.sectionStart);\n      this.state = State.InAttributeName;\n      this.sectionStart = this.index;\n    }\n  }\n  stateBeforeAttributeValue(c) {\n    if (c === CharCodes.DoubleQuote) {\n      this.state = State.InAttributeValueDq;\n      this.sectionStart = this.index + 1;\n    } else if (c === CharCodes.SingleQuote) {\n      this.state = State.InAttributeValueSq;\n      this.sectionStart = this.index + 1;\n    } else if (!isWhitespace(c)) {\n      this.sectionStart = this.index;\n      this.state = State.InAttributeValueNq;\n      this.stateInAttributeValueNoQuotes(c); // Reconsume token\n    }\n  }\n  handleInAttributeValue(c, quote) {\n    if (c === quote || !this.decodeEntities && this.fastForwardTo(quote)) {\n      this.cbs.onattribdata(this.sectionStart, this.index);\n      this.sectionStart = -1;\n      this.cbs.onattribend(quote === CharCodes.DoubleQuote ? QuoteType.Double : QuoteType.Single, this.index + 1);\n      this.state = State.BeforeAttributeName;\n    } else if (this.decodeEntities && c === CharCodes.Amp) {\n      this.startEntity();\n    }\n  }\n  stateInAttributeValueDoubleQuotes(c) {\n    this.handleInAttributeValue(c, CharCodes.DoubleQuote);\n  }\n  stateInAttributeValueSingleQuotes(c) {\n    this.handleInAttributeValue(c, CharCodes.SingleQuote);\n  }\n  stateInAttributeValueNoQuotes(c) {\n    if (isWhitespace(c) || c === CharCodes.Gt) {\n      this.cbs.onattribdata(this.sectionStart, this.index);\n      this.sectionStart = -1;\n      this.cbs.onattribend(QuoteType.Unquoted, this.index);\n      this.state = State.BeforeAttributeName;\n      this.stateBeforeAttributeName(c);\n    } else if (this.decodeEntities && c === CharCodes.Amp) {\n      this.startEntity();\n    }\n  }\n  stateBeforeDeclaration(c) {\n    if (c === CharCodes.OpeningSquareBracket) {\n      this.state = State.CDATASequence;\n      this.sequenceIndex = 0;\n    } else {\n      this.state = c === CharCodes.Dash ? State.BeforeComment : State.InDeclaration;\n    }\n  }\n  stateInDeclaration(c) {\n    if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n      this.cbs.ondeclaration(this.sectionStart, this.index);\n      this.state = State.Text;\n      this.sectionStart = this.index + 1;\n    }\n  }\n  stateInProcessingInstruction(c) {\n    if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n      this.cbs.onprocessinginstruction(this.sectionStart, this.index);\n      this.state = State.Text;\n      this.sectionStart = this.index + 1;\n    }\n  }\n  stateBeforeComment(c) {\n    if (c === CharCodes.Dash) {\n      this.state = State.InCommentLike;\n      this.currentSequence = Sequences.CommentEnd;\n      // Allow short comments (eg. <!-->)\n      this.sequenceIndex = 2;\n      this.sectionStart = this.index + 1;\n    } else {\n      this.state = State.InDeclaration;\n    }\n  }\n  stateInSpecialComment(c) {\n    if (c === CharCodes.Gt || this.fastForwardTo(CharCodes.Gt)) {\n      this.cbs.oncomment(this.sectionStart, this.index, 0);\n      this.state = State.Text;\n      this.sectionStart = this.index + 1;\n    }\n  }\n  stateBeforeSpecialS(c) {\n    const lower = c | 0x20;\n    if (lower === Sequences.ScriptEnd[3]) {\n      this.startSpecial(Sequences.ScriptEnd, 4);\n    } else if (lower === Sequences.StyleEnd[3]) {\n      this.startSpecial(Sequences.StyleEnd, 4);\n    } else {\n      this.state = State.InTagName;\n      this.stateInTagName(c); // Consume the token again\n    }\n  }\n  stateBeforeSpecialT(c) {\n    const lower = c | 0x20;\n    switch (lower) {\n      case Sequences.TitleEnd[3]:\n        {\n          this.startSpecial(Sequences.TitleEnd, 4);\n          break;\n        }\n      case Sequences.TextareaEnd[3]:\n        {\n          this.startSpecial(Sequences.TextareaEnd, 4);\n          break;\n        }\n      case Sequences.XmpEnd[3]:\n        {\n          this.startSpecial(Sequences.XmpEnd, 4);\n          break;\n        }\n      default:\n        {\n          this.state = State.InTagName;\n          this.stateInTagName(c); // Consume the token again\n        }\n    }\n  }\n  startEntity() {\n    this.baseState = this.state;\n    this.state = State.InEntity;\n    this.entityStart = this.index;\n    this.entityDecoder.startEntity(this.xmlMode ? DecodingMode.Strict : this.baseState === State.Text || this.baseState === State.InSpecialTag ? DecodingMode.Legacy : DecodingMode.Attribute);\n  }\n  stateInEntity() {\n    const length = this.entityDecoder.write(this.buffer, this.index - this.offset);\n    // If `length` is positive, we are done with the entity.\n    if (length >= 0) {\n      this.state = this.baseState;\n      if (length === 0) {\n        this.index = this.entityStart;\n      }\n    } else {\n      // Mark buffer as consumed.\n      this.index = this.offset + this.buffer.length - 1;\n    }\n  }\n  /**\n   * Remove data that has already been consumed from the buffer.\n   */\n  cleanup() {\n    // If we are inside of text or attributes, emit what we already have.\n    if (this.running && this.sectionStart !== this.index) {\n      if (this.state === State.Text || this.state === State.InSpecialTag && this.sequenceIndex === 0) {\n        this.cbs.ontext(this.sectionStart, this.index);\n        this.sectionStart = this.index;\n      } else if (this.state === State.InAttributeValueDq || this.state === State.InAttributeValueSq || this.state === State.InAttributeValueNq) {\n        this.cbs.onattribdata(this.sectionStart, this.index);\n        this.sectionStart = this.index;\n      }\n    }\n  }\n  shouldContinue() {\n    return this.index < this.buffer.length + this.offset && this.running;\n  }\n  /**\n   * Iterates through the buffer, calling the function corresponding to the current state.\n   *\n   * States that are more likely to be hit are higher up, as a performance improvement.\n   */\n  parse() {\n    while (this.shouldContinue()) {\n      const c = this.buffer.charCodeAt(this.index - this.offset);\n      switch (this.state) {\n        case State.Text:\n          {\n            this.stateText(c);\n            break;\n          }\n        case State.SpecialStartSequence:\n          {\n            this.stateSpecialStartSequence(c);\n            break;\n          }\n        case State.InSpecialTag:\n          {\n            this.stateInSpecialTag(c);\n            break;\n          }\n        case State.CDATASequence:\n          {\n            this.stateCDATASequence(c);\n            break;\n          }\n        case State.InAttributeValueDq:\n          {\n            this.stateInAttributeValueDoubleQuotes(c);\n            break;\n          }\n        case State.InAttributeName:\n          {\n            this.stateInAttributeName(c);\n            break;\n          }\n        case State.InCommentLike:\n          {\n            this.stateInCommentLike(c);\n            break;\n          }\n        case State.InSpecialComment:\n          {\n            this.stateInSpecialComment(c);\n            break;\n          }\n        case State.BeforeAttributeName:\n          {\n            this.stateBeforeAttributeName(c);\n            break;\n          }\n        case State.InTagName:\n          {\n            this.stateInTagName(c);\n            break;\n          }\n        case State.InClosingTagName:\n          {\n            this.stateInClosingTagName(c);\n            break;\n          }\n        case State.BeforeTagName:\n          {\n            this.stateBeforeTagName(c);\n            break;\n          }\n        case State.AfterAttributeName:\n          {\n            this.stateAfterAttributeName(c);\n            break;\n          }\n        case State.InAttributeValueSq:\n          {\n            this.stateInAttributeValueSingleQuotes(c);\n            break;\n          }\n        case State.BeforeAttributeValue:\n          {\n            this.stateBeforeAttributeValue(c);\n            break;\n          }\n        case State.BeforeClosingTagName:\n          {\n            this.stateBeforeClosingTagName(c);\n            break;\n          }\n        case State.AfterClosingTagName:\n          {\n            this.stateAfterClosingTagName(c);\n            break;\n          }\n        case State.BeforeSpecialS:\n          {\n            this.stateBeforeSpecialS(c);\n            break;\n          }\n        case State.BeforeSpecialT:\n          {\n            this.stateBeforeSpecialT(c);\n            break;\n          }\n        case State.InAttributeValueNq:\n          {\n            this.stateInAttributeValueNoQuotes(c);\n            break;\n          }\n        case State.InSelfClosingTag:\n          {\n            this.stateInSelfClosingTag(c);\n            break;\n          }\n        case State.InDeclaration:\n          {\n            this.stateInDeclaration(c);\n            break;\n          }\n        case State.BeforeDeclaration:\n          {\n            this.stateBeforeDeclaration(c);\n            break;\n          }\n        case State.BeforeComment:\n          {\n            this.stateBeforeComment(c);\n            break;\n          }\n        case State.InProcessingInstruction:\n          {\n            this.stateInProcessingInstruction(c);\n            break;\n          }\n        case State.InEntity:\n          {\n            this.stateInEntity();\n            break;\n          }\n      }\n      this.index++;\n    }\n    this.cleanup();\n  }\n  finish() {\n    if (this.state === State.InEntity) {\n      this.entityDecoder.end();\n      this.state = this.baseState;\n    }\n    this.handleTrailingData();\n    this.cbs.onend();\n  }\n  /** Handle any trailing data. */\n  handleTrailingData() {\n    const endIndex = this.buffer.length + this.offset;\n    // If there is no remaining data, we are done.\n    if (this.sectionStart >= endIndex) {\n      return;\n    }\n    if (this.state === State.InCommentLike) {\n      if (this.currentSequence === Sequences.CdataEnd) {\n        this.cbs.oncdata(this.sectionStart, endIndex, 0);\n      } else {\n        this.cbs.oncomment(this.sectionStart, endIndex, 0);\n      }\n    } else if (this.state === State.InTagName || this.state === State.BeforeAttributeName || this.state === State.BeforeAttributeValue || this.state === State.AfterAttributeName || this.state === State.InAttributeName || this.state === State.InAttributeValueSq || this.state === State.InAttributeValueDq || this.state === State.InAttributeValueNq || this.state === State.InClosingTagName) ;else {\n      this.cbs.ontext(this.sectionStart, endIndex);\n    }\n  }\n  emitCodePoint(cp, consumed) {\n    if (this.baseState !== State.Text && this.baseState !== State.InSpecialTag) {\n      if (this.sectionStart < this.entityStart) {\n        this.cbs.onattribdata(this.sectionStart, this.entityStart);\n      }\n      this.sectionStart = this.entityStart + consumed;\n      this.index = this.sectionStart - 1;\n      this.cbs.onattribentity(cp);\n    } else {\n      if (this.sectionStart < this.entityStart) {\n        this.cbs.ontext(this.sectionStart, this.entityStart);\n      }\n      this.sectionStart = this.entityStart + consumed;\n      this.index = this.sectionStart - 1;\n      this.cbs.ontextentity(cp, this.sectionStart);\n    }\n  }\n}\nconst formTags = /*#__PURE__*/new Set([\"input\", \"option\", \"optgroup\", \"select\", \"button\", \"datalist\", \"textarea\"]);\nconst pTag = /*#__PURE__*/new Set([\"p\"]);\nconst tableSectionTags = /*#__PURE__*/new Set([\"thead\", \"tbody\"]);\nconst ddtTags = /*#__PURE__*/new Set([\"dd\", \"dt\"]);\nconst rtpTags = /*#__PURE__*/new Set([\"rt\", \"rp\"]);\nconst openImpliesClose = /*#__PURE__*/new Map([[\"tr\", /*#__PURE__*/new Set([\"tr\", \"th\", \"td\"])], [\"th\", /*#__PURE__*/new Set([\"th\"])], [\"td\", /*#__PURE__*/new Set([\"thead\", \"th\", \"td\"])], [\"body\", /*#__PURE__*/new Set([\"head\", \"link\", \"script\"])], [\"li\", /*#__PURE__*/new Set([\"li\"])], [\"p\", pTag], [\"h1\", pTag], [\"h2\", pTag], [\"h3\", pTag], [\"h4\", pTag], [\"h5\", pTag], [\"h6\", pTag], [\"select\", formTags], [\"input\", formTags], [\"output\", formTags], [\"button\", formTags], [\"datalist\", formTags], [\"textarea\", formTags], [\"option\", /*#__PURE__*/new Set([\"option\"])], [\"optgroup\", /*#__PURE__*/new Set([\"optgroup\", \"option\"])], [\"dd\", ddtTags], [\"dt\", ddtTags], [\"address\", pTag], [\"article\", pTag], [\"aside\", pTag], [\"blockquote\", pTag], [\"details\", pTag], [\"div\", pTag], [\"dl\", pTag], [\"fieldset\", pTag], [\"figcaption\", pTag], [\"figure\", pTag], [\"footer\", pTag], [\"form\", pTag], [\"header\", pTag], [\"hr\", pTag], [\"main\", pTag], [\"nav\", pTag], [\"ol\", pTag], [\"pre\", pTag], [\"section\", pTag], [\"table\", pTag], [\"ul\", pTag], [\"rt\", rtpTags], [\"rp\", rtpTags], [\"tbody\", tableSectionTags], [\"tfoot\", tableSectionTags]]);\nconst voidElements = /*#__PURE__*/new Set([\"area\", \"base\", \"basefont\", \"br\", \"col\", \"command\", \"embed\", \"frame\", \"hr\", \"img\", \"input\", \"isindex\", \"keygen\", \"link\", \"meta\", \"param\", \"source\", \"track\", \"wbr\"]);\nconst foreignContextElements = /*#__PURE__*/new Set([\"math\", \"svg\"]);\nconst htmlIntegrationElements = /*#__PURE__*/new Set([\"mi\", \"mo\", \"mn\", \"ms\", \"mtext\", \"annotation-xml\", \"foreignobject\", \"desc\", \"title\"]);\nconst reNameEnd = /\\s|\\//;\nclass Parser {\n  constructor(cbs, options = {}) {\n    var _a, _b, _c, _d, _e, _f;\n    this.options = options;\n    /** The start index of the last event. */\n    this.startIndex = 0;\n    /** The end index of the last event. */\n    this.endIndex = 0;\n    /**\n     * Store the start index of the current open tag,\n     * so we can update the start index for attributes.\n     */\n    this.openTagStart = 0;\n    this.tagname = \"\";\n    this.attribname = \"\";\n    this.attribvalue = \"\";\n    this.attribs = null;\n    this.stack = [];\n    this.buffers = [];\n    this.bufferOffset = 0;\n    /** The index of the last written buffer. Used when resuming after a `pause()`. */\n    this.writeIndex = 0;\n    /** Indicates whether the parser has finished running / `.end` has been called. */\n    this.ended = false;\n    this.cbs = cbs !== null && cbs !== void 0 ? cbs : {};\n    this.htmlMode = !this.options.xmlMode;\n    this.lowerCaseTagNames = (_a = options.lowerCaseTags) !== null && _a !== void 0 ? _a : this.htmlMode;\n    this.lowerCaseAttributeNames = (_b = options.lowerCaseAttributeNames) !== null && _b !== void 0 ? _b : this.htmlMode;\n    this.recognizeSelfClosing = (_c = options.recognizeSelfClosing) !== null && _c !== void 0 ? _c : !this.htmlMode;\n    this.tokenizer = new ((_d = options.Tokenizer) !== null && _d !== void 0 ? _d : Tokenizer)(this.options, this);\n    this.foreignContext = [!this.htmlMode];\n    (_f = (_e = this.cbs).onparserinit) === null || _f === void 0 ? void 0 : _f.call(_e, this);\n  }\n  // Tokenizer event handlers\n  /** @internal */\n  ontext(start, endIndex) {\n    var _a, _b;\n    const data = this.getSlice(start, endIndex);\n    this.endIndex = endIndex - 1;\n    (_b = (_a = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a, data);\n    this.startIndex = endIndex;\n  }\n  /** @internal */\n  ontextentity(cp, endIndex) {\n    var _a, _b;\n    this.endIndex = endIndex - 1;\n    (_b = (_a = this.cbs).ontext) === null || _b === void 0 ? void 0 : _b.call(_a, fromCodePoint(cp));\n    this.startIndex = endIndex;\n  }\n  /**\n   * Checks if the current tag is a void element. Override this if you want\n   * to specify your own additional void elements.\n   */\n  isVoidElement(name) {\n    return this.htmlMode && voidElements.has(name);\n  }\n  /** @internal */\n  onopentagname(start, endIndex) {\n    this.endIndex = endIndex;\n    let name = this.getSlice(start, endIndex);\n    if (this.lowerCaseTagNames) {\n      name = name.toLowerCase();\n    }\n    this.emitOpenTag(name);\n  }\n  emitOpenTag(name) {\n    var _a, _b, _c, _d;\n    this.openTagStart = this.startIndex;\n    this.tagname = name;\n    const impliesClose = this.htmlMode && openImpliesClose.get(name);\n    if (impliesClose) {\n      while (this.stack.length > 0 && impliesClose.has(this.stack[0])) {\n        const element = this.stack.shift();\n        (_b = (_a = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a, element, true);\n      }\n    }\n    if (!this.isVoidElement(name)) {\n      this.stack.unshift(name);\n      if (this.htmlMode) {\n        if (foreignContextElements.has(name)) {\n          this.foreignContext.unshift(true);\n        } else if (htmlIntegrationElements.has(name)) {\n          this.foreignContext.unshift(false);\n        }\n      }\n    }\n    (_d = (_c = this.cbs).onopentagname) === null || _d === void 0 ? void 0 : _d.call(_c, name);\n    if (this.cbs.onopentag) this.attribs = {};\n  }\n  endOpenTag(isImplied) {\n    var _a, _b;\n    this.startIndex = this.openTagStart;\n    if (this.attribs) {\n      (_b = (_a = this.cbs).onopentag) === null || _b === void 0 ? void 0 : _b.call(_a, this.tagname, this.attribs, isImplied);\n      this.attribs = null;\n    }\n    if (this.cbs.onclosetag && this.isVoidElement(this.tagname)) {\n      this.cbs.onclosetag(this.tagname, true);\n    }\n    this.tagname = \"\";\n  }\n  /** @internal */\n  onopentagend(endIndex) {\n    this.endIndex = endIndex;\n    this.endOpenTag(false);\n    // Set `startIndex` for next node\n    this.startIndex = endIndex + 1;\n  }\n  /** @internal */\n  onclosetag(start, endIndex) {\n    var _a, _b, _c, _d, _e, _f, _g, _h;\n    this.endIndex = endIndex;\n    let name = this.getSlice(start, endIndex);\n    if (this.lowerCaseTagNames) {\n      name = name.toLowerCase();\n    }\n    if (this.htmlMode && (foreignContextElements.has(name) || htmlIntegrationElements.has(name))) {\n      this.foreignContext.shift();\n    }\n    if (!this.isVoidElement(name)) {\n      const pos = this.stack.indexOf(name);\n      if (pos !== -1) {\n        for (let index = 0; index <= pos; index++) {\n          const element = this.stack.shift();\n          // We know the stack has sufficient elements.\n          (_b = (_a = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a, element, index !== pos);\n        }\n      } else if (this.htmlMode && name === \"p\") {\n        // Implicit open before close\n        this.emitOpenTag(\"p\");\n        this.closeCurrentTag(true);\n      }\n    } else if (this.htmlMode && name === \"br\") {\n      // We can't use `emitOpenTag` for implicit open, as `br` would be implicitly closed.\n      (_d = (_c = this.cbs).onopentagname) === null || _d === void 0 ? void 0 : _d.call(_c, \"br\");\n      (_f = (_e = this.cbs).onopentag) === null || _f === void 0 ? void 0 : _f.call(_e, \"br\", {}, true);\n      (_h = (_g = this.cbs).onclosetag) === null || _h === void 0 ? void 0 : _h.call(_g, \"br\", false);\n    }\n    // Set `startIndex` for next node\n    this.startIndex = endIndex + 1;\n  }\n  /** @internal */\n  onselfclosingtag(endIndex) {\n    this.endIndex = endIndex;\n    if (this.recognizeSelfClosing || this.foreignContext[0]) {\n      this.closeCurrentTag(false);\n      // Set `startIndex` for next node\n      this.startIndex = endIndex + 1;\n    } else {\n      // Ignore the fact that the tag is self-closing.\n      this.onopentagend(endIndex);\n    }\n  }\n  closeCurrentTag(isOpenImplied) {\n    var _a, _b;\n    const name = this.tagname;\n    this.endOpenTag(isOpenImplied);\n    // Self-closing tags will be on the top of the stack\n    if (this.stack[0] === name) {\n      // If the opening tag isn't implied, the closing tag has to be implied.\n      (_b = (_a = this.cbs).onclosetag) === null || _b === void 0 ? void 0 : _b.call(_a, name, !isOpenImplied);\n      this.stack.shift();\n    }\n  }\n  /** @internal */\n  onattribname(start, endIndex) {\n    this.startIndex = start;\n    const name = this.getSlice(start, endIndex);\n    this.attribname = this.lowerCaseAttributeNames ? name.toLowerCase() : name;\n  }\n  /** @internal */\n  onattribdata(start, endIndex) {\n    this.attribvalue += this.getSlice(start, endIndex);\n  }\n  /** @internal */\n  onattribentity(cp) {\n    this.attribvalue += fromCodePoint(cp);\n  }\n  /** @internal */\n  onattribend(quote, endIndex) {\n    var _a, _b;\n    this.endIndex = endIndex;\n    (_b = (_a = this.cbs).onattribute) === null || _b === void 0 ? void 0 : _b.call(_a, this.attribname, this.attribvalue, quote === QuoteType.Double ? '\"' : quote === QuoteType.Single ? \"'\" : quote === QuoteType.NoValue ? undefined : null);\n    if (this.attribs && !Object.prototype.hasOwnProperty.call(this.attribs, this.attribname)) {\n      this.attribs[this.attribname] = this.attribvalue;\n    }\n    this.attribvalue = \"\";\n  }\n  getInstructionName(value) {\n    const index = value.search(reNameEnd);\n    let name = index < 0 ? value : value.substr(0, index);\n    if (this.lowerCaseTagNames) {\n      name = name.toLowerCase();\n    }\n    return name;\n  }\n  /** @internal */\n  ondeclaration(start, endIndex) {\n    this.endIndex = endIndex;\n    const value = this.getSlice(start, endIndex);\n    if (this.cbs.onprocessinginstruction) {\n      const name = this.getInstructionName(value);\n      this.cbs.onprocessinginstruction(`!${name}`, `!${value}`);\n    }\n    // Set `startIndex` for next node\n    this.startIndex = endIndex + 1;\n  }\n  /** @internal */\n  onprocessinginstruction(start, endIndex) {\n    this.endIndex = endIndex;\n    const value = this.getSlice(start, endIndex);\n    if (this.cbs.onprocessinginstruction) {\n      const name = this.getInstructionName(value);\n      this.cbs.onprocessinginstruction(`?${name}`, `?${value}`);\n    }\n    // Set `startIndex` for next node\n    this.startIndex = endIndex + 1;\n  }\n  /** @internal */\n  oncomment(start, endIndex, offset) {\n    var _a, _b, _c, _d;\n    this.endIndex = endIndex;\n    (_b = (_a = this.cbs).oncomment) === null || _b === void 0 ? void 0 : _b.call(_a, this.getSlice(start, endIndex - offset));\n    (_d = (_c = this.cbs).oncommentend) === null || _d === void 0 ? void 0 : _d.call(_c);\n    // Set `startIndex` for next node\n    this.startIndex = endIndex + 1;\n  }\n  /** @internal */\n  oncdata(start, endIndex, offset) {\n    var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;\n    this.endIndex = endIndex;\n    const value = this.getSlice(start, endIndex - offset);\n    if (!this.htmlMode || this.options.recognizeCDATA) {\n      (_b = (_a = this.cbs).oncdatastart) === null || _b === void 0 ? void 0 : _b.call(_a);\n      (_d = (_c = this.cbs).ontext) === null || _d === void 0 ? void 0 : _d.call(_c, value);\n      (_f = (_e = this.cbs).oncdataend) === null || _f === void 0 ? void 0 : _f.call(_e);\n    } else {\n      (_h = (_g = this.cbs).oncomment) === null || _h === void 0 ? void 0 : _h.call(_g, `[CDATA[${value}]]`);\n      (_k = (_j = this.cbs).oncommentend) === null || _k === void 0 ? void 0 : _k.call(_j);\n    }\n    // Set `startIndex` for next node\n    this.startIndex = endIndex + 1;\n  }\n  /** @internal */\n  onend() {\n    var _a, _b;\n    if (this.cbs.onclosetag) {\n      // Set the end index for all remaining tags\n      this.endIndex = this.startIndex;\n      for (let index = 0; index < this.stack.length; index++) {\n        this.cbs.onclosetag(this.stack[index], true);\n      }\n    }\n    (_b = (_a = this.cbs).onend) === null || _b === void 0 ? void 0 : _b.call(_a);\n  }\n  /**\n   * Resets the parser to a blank state, ready to parse a new HTML document\n   */\n  reset() {\n    var _a, _b, _c, _d;\n    (_b = (_a = this.cbs).onreset) === null || _b === void 0 ? void 0 : _b.call(_a);\n    this.tokenizer.reset();\n    this.tagname = \"\";\n    this.attribname = \"\";\n    this.attribs = null;\n    this.stack.length = 0;\n    this.startIndex = 0;\n    this.endIndex = 0;\n    (_d = (_c = this.cbs).onparserinit) === null || _d === void 0 ? void 0 : _d.call(_c, this);\n    this.buffers.length = 0;\n    this.foreignContext.length = 0;\n    this.foreignContext.unshift(!this.htmlMode);\n    this.bufferOffset = 0;\n    this.writeIndex = 0;\n    this.ended = false;\n  }\n  /**\n   * Resets the parser, then parses a complete document and\n   * pushes it to the handler.\n   *\n   * @param data Document to parse.\n   */\n  parseComplete(data) {\n    this.reset();\n    this.end(data);\n  }\n  getSlice(start, end) {\n    while (start - this.bufferOffset >= this.buffers[0].length) {\n      this.shiftBuffer();\n    }\n    let slice = this.buffers[0].slice(start - this.bufferOffset, end - this.bufferOffset);\n    while (end - this.bufferOffset > this.buffers[0].length) {\n      this.shiftBuffer();\n      slice += this.buffers[0].slice(0, end - this.bufferOffset);\n    }\n    return slice;\n  }\n  shiftBuffer() {\n    this.bufferOffset += this.buffers[0].length;\n    this.writeIndex--;\n    this.buffers.shift();\n  }\n  /**\n   * Parses a chunk of data and calls the corresponding callbacks.\n   *\n   * @param chunk Chunk to parse.\n   */\n  write(chunk) {\n    var _a, _b;\n    if (this.ended) {\n      (_b = (_a = this.cbs).onerror) === null || _b === void 0 ? void 0 : _b.call(_a, new Error(\".write() after done!\"));\n      return;\n    }\n    this.buffers.push(chunk);\n    if (this.tokenizer.running) {\n      this.tokenizer.write(chunk);\n      this.writeIndex++;\n    }\n  }\n  /**\n   * Parses the end of the buffer and clears the stack, calls onend.\n   *\n   * @param chunk Optional final chunk to parse.\n   */\n  end(chunk) {\n    var _a, _b;\n    if (this.ended) {\n      (_b = (_a = this.cbs).onerror) === null || _b === void 0 ? void 0 : _b.call(_a, new Error(\".end() after done!\"));\n      return;\n    }\n    if (chunk) this.write(chunk);\n    this.ended = true;\n    this.tokenizer.end();\n  }\n  /**\n   * Pauses parsing. The parser won't emit events until `resume` is called.\n   */\n  pause() {\n    this.tokenizer.pause();\n  }\n  /**\n   * Resumes parsing after `pause` was called.\n   */\n  resume() {\n    this.tokenizer.resume();\n    while (this.tokenizer.running && this.writeIndex < this.buffers.length) {\n      this.tokenizer.write(this.buffers[this.writeIndex++]);\n    }\n    if (this.ended) this.tokenizer.end();\n  }\n  /**\n   * Alias of `write`, for backwards compatibility.\n   *\n   * @param chunk Chunk to parse.\n   * @deprecated\n   */\n  parseChunk(chunk) {\n    this.write(chunk);\n  }\n  /**\n   * Alias of `end`, for backwards compatibility.\n   *\n   * @param chunk Optional final chunk to parse.\n   * @deprecated\n   */\n  done(chunk) {\n    this.end(chunk);\n  }\n}\n\n// Helper methods\n/**\n * Parses the data, returns the resulting document.\n *\n * @param data The data that should be parsed.\n * @param options Optional options for the parser and DOM handler.\n */\nfunction parseDocument(data, options) {\n  const handler = new DomHandler(undefined, options);\n  new Parser(handler, options).end(data);\n  return handler.root;\n}\nvar picocolors_browserExports = /*@__PURE__*/requirePicocolors_browser();\nvar pc = /*@__PURE__*/getDefaultExportFromCjs(picocolors_browserExports);\nfunction parseStylesheet(stylesheet) {\n  return parse$2(stylesheet);\n}\nfunction serializeStylesheet(ast, options) {\n  const cssParts = [];\n  stringify(ast, (result, node, type) => {\n    if (node?.type === \"decl\" && node.value.includes(\"</style>\")) {\n      return;\n    }\n    if (!options.compress) {\n      cssParts.push(result);\n      return;\n    }\n    if (node?.type === \"comment\") return;\n    if (node?.type === \"decl\") {\n      const prefix = node.prop + node.raws.between;\n      cssParts.push(result.replace(prefix, prefix.trim()));\n      return;\n    }\n    if (type === \"start\") {\n      if (node?.type === \"rule\" && node.selectors) {\n        if (node.selectors.length === 1) {\n          cssParts.push(node.selectors[0] ?? \"\", \"{\");\n        } else {\n          cssParts.push(node.selectors.join(\",\"), \"{\");\n        }\n      } else {\n        cssParts.push(result.trim());\n      }\n      return;\n    }\n    if (type === \"end\" && result === \"}\" && node?.raws?.semicolon) {\n      const lastItemIdx = cssParts.length - 2;\n      if (lastItemIdx >= 0 && cssParts[lastItemIdx]) {\n        cssParts[lastItemIdx] = cssParts[lastItemIdx].slice(0, -1);\n      }\n    }\n    cssParts.push(result.trim());\n  });\n  return cssParts.join(\"\");\n}\nfunction markOnly(predicate) {\n  return rule => {\n    const sel = \"selectors\" in rule ? rule.selectors : void 0;\n    if (predicate(rule) === false) {\n      rule.$$remove = true;\n    }\n    if (\"selectors\" in rule) {\n      rule.$$markedSelectors = rule.selectors;\n      rule.selectors = sel;\n    }\n    if (rule._other) {\n      rule._other.$$markedSelectors = rule._other.selectors;\n    }\n  };\n}\nfunction applyMarkedSelectors(rule) {\n  if (rule.$$markedSelectors) {\n    rule.selectors = rule.$$markedSelectors;\n  }\n  if (rule._other) {\n    applyMarkedSelectors(rule._other);\n  }\n}\nfunction walkStyleRules(node, iterator) {\n  if (!(\"nodes\" in node)) {\n    return;\n  }\n  node.nodes = node.nodes?.filter(rule => {\n    if (hasNestedRules(rule)) {\n      walkStyleRules(rule, iterator);\n    }\n    rule._other = void 0;\n    rule.filterSelectors = filterSelectors;\n    return iterator(rule) !== false;\n  });\n}\nfunction walkStyleRulesWithReverseMirror(node, node2, iterator) {\n  if (!node2) return walkStyleRules(node, iterator);\n  [node.nodes, node2.nodes] = splitFilter(node.nodes, node2.nodes, (rule, index, _rules, rules2) => {\n    const rule2 = rules2?.[index];\n    if (hasNestedRules(rule)) {\n      walkStyleRulesWithReverseMirror(rule, rule2, iterator);\n    }\n    rule._other = rule2;\n    rule.filterSelectors = filterSelectors;\n    return iterator(rule) !== false;\n  });\n}\nfunction hasNestedRules(rule) {\n  return \"nodes\" in rule && !!rule.nodes?.length && (!(\"name\" in rule) || rule.name !== \"keyframes\" && rule.name !== \"-webkit-keyframes\") && rule.nodes.some(n => n.type === \"rule\" || n.type === \"atrule\");\n}\nfunction splitFilter(a, b, predicate) {\n  const aOut = [];\n  const bOut = [];\n  for (let index = 0; index < a.length; index++) {\n    const item = a[index];\n    if (predicate(item, index, a, b)) {\n      aOut.push(item);\n    } else {\n      bOut.push(item);\n    }\n  }\n  return [aOut, bOut];\n}\nfunction filterSelectors(predicate) {\n  if (this._other) {\n    const [a, b] = splitFilter(this.selectors, this._other.selectors, predicate);\n    this.selectors = a;\n    this._other.selectors = b;\n  } else {\n    this.selectors = this.selectors.filter(predicate);\n  }\n}\nconst MEDIA_TYPES = /* @__PURE__ */new Set([\"all\", \"print\", \"screen\", \"speech\"]);\nconst MEDIA_KEYWORDS = /* @__PURE__ */new Set([\"and\", \"not\", \",\"]);\nconst MEDIA_FEATURES = /*#__PURE__*/new Set(/*#__PURE__*/[\"width\", \"aspect-ratio\", \"color\", \"color-index\", \"grid\", \"height\", \"monochrome\", \"orientation\", \"resolution\", \"scan\"].flatMap(feature => [feature, `min-${feature}`, `max-${feature}`]));\nfunction validateMediaType(node) {\n  const {\n    type: nodeType,\n    value: nodeValue\n  } = node;\n  if (nodeType === \"media-type\") {\n    return MEDIA_TYPES.has(nodeValue);\n  } else if (nodeType === \"keyword\") {\n    return MEDIA_KEYWORDS.has(nodeValue);\n  } else if (nodeType === \"media-feature\") {\n    return MEDIA_FEATURES.has(nodeValue);\n  }\n}\nfunction validateMediaQuery(query) {\n  const mediaParserFn = \"default\" in mediaParser ? mediaParser.default : mediaParser;\n  const mediaTree = mediaParserFn(query);\n  const nodeTypes = /* @__PURE__ */new Set([\"media-type\", \"keyword\", \"media-feature\"]);\n  const stack = [mediaTree];\n  while (stack.length > 0) {\n    const node = stack.pop();\n    if (nodeTypes.has(node.type) && !validateMediaType(node)) {\n      return false;\n    }\n    if (node.nodes) {\n      stack.push(...node.nodes);\n    }\n  }\n  return true;\n}\nlet classCache = null;\nlet idCache = null;\nfunction buildCache(container) {\n  classCache = /* @__PURE__ */new Set();\n  idCache = /* @__PURE__ */new Set();\n  const queue = [container];\n  while (queue.length) {\n    const node = queue.shift();\n    if (node.hasAttribute?.(\"class\")) {\n      const classList = node.getAttribute(\"class\").trim().split(\" \");\n      classList.forEach(cls => {\n        classCache.add(cls);\n      });\n    }\n    if (node.hasAttribute?.(\"id\")) {\n      const id = node.getAttribute(\"id\").trim();\n      idCache.add(id);\n    }\n    if (\"children\" in node) {\n      queue.push(...node.children.filter(child => child.type === \"tag\"));\n    }\n  }\n}\nfunction createDocument(html) {\n  const document = parseDocument(html, {\n    decodeEntities: false\n  });\n  extendDocument(document);\n  extendElement(Element.prototype);\n  let beastiesContainer = document.querySelector(\"[data-beasties-container]\");\n  if (!beastiesContainer) {\n    document.documentElement?.setAttribute(\"data-beasties-container\", \"\");\n    beastiesContainer = document.documentElement || document;\n  }\n  document.beastiesContainer = beastiesContainer;\n  buildCache(beastiesContainer);\n  return document;\n}\nfunction serializeDocument(document) {\n  return render(document, {\n    decodeEntities: false\n  });\n}\nlet extended = false;\nfunction extendElement(element) {\n  if (extended) {\n    return;\n  }\n  extended = true;\n  Object.defineProperties(element, {\n    nodeName: {\n      get() {\n        return this.tagName.toUpperCase();\n      }\n    },\n    id: {\n      get() {\n        return this.getAttribute(\"id\");\n      },\n      set(value) {\n        this.setAttribute(\"id\", value);\n      }\n    },\n    className: {\n      get() {\n        return this.getAttribute(\"class\");\n      },\n      set(value) {\n        this.setAttribute(\"class\", value);\n      }\n    },\n    insertBefore: {\n      value(child, referenceNode) {\n        if (!referenceNode) return this.appendChild(child);\n        prepend(referenceNode, child);\n        return child;\n      }\n    },\n    appendChild: {\n      value(child) {\n        appendChild(this, child);\n        return child;\n      }\n    },\n    removeChild: {\n      value(child) {\n        removeElement(child);\n      }\n    },\n    remove: {\n      value() {\n        removeElement(this);\n      }\n    },\n    textContent: {\n      get() {\n        return getText(this);\n      },\n      set(text) {\n        this.children = [];\n        appendChild(this, new Text(text));\n      }\n    },\n    setAttribute: {\n      value(name, value) {\n        if (this.attribs == null) this.attribs = {};\n        if (value == null) value = \"\";\n        this.attribs[name] = value;\n      }\n    },\n    removeAttribute: {\n      value(name) {\n        if (this.attribs != null) {\n          delete this.attribs[name];\n        }\n      }\n    },\n    getAttribute: {\n      value(name) {\n        return this.attribs != null && this.attribs[name];\n      }\n    },\n    hasAttribute: {\n      value(name) {\n        return this.attribs != null && this.attribs[name] != null;\n      }\n    },\n    getAttributeNode: {\n      value(name) {\n        const value = this.getAttribute(name);\n        if (value != null) return {\n          specified: true,\n          value\n        };\n      }\n    },\n    exists: {\n      value(sel) {\n        return cachedQuerySelector(sel, this);\n      }\n    },\n    querySelector: {\n      value(sel) {\n        return selectOne(sel, this);\n      }\n    },\n    querySelectorAll: {\n      value(sel) {\n        return selectAll(sel, this);\n      }\n    }\n  });\n}\nfunction extendDocument(document) {\n  Object.defineProperties(document, {\n    // document is just an Element in htmlparser2, giving it a nodeType of ELEMENT_NODE.\n    // TODO: verify if these are needed for css-select\n    nodeType: {\n      get() {\n        return 9;\n      }\n    },\n    contentType: {\n      get() {\n        return \"text/html\";\n      }\n    },\n    nodeName: {\n      get() {\n        return \"#document\";\n      }\n    },\n    documentElement: {\n      get() {\n        return this.children.find(child => \"tagName\" in child && String(child.tagName).toLowerCase() === \"html\");\n      }\n    },\n    head: {\n      get() {\n        return this.querySelector(\"head\");\n      }\n    },\n    body: {\n      get() {\n        return this.querySelector(\"body\");\n      }\n    },\n    createElement: {\n      value(name) {\n        return new Element(name, {});\n      }\n    },\n    createTextNode: {\n      value(text) {\n        return new Text(text);\n      }\n    },\n    exists: {\n      value(sel) {\n        return cachedQuerySelector(sel, this);\n      }\n    },\n    querySelector: {\n      value(sel) {\n        return selectOne(sel, this);\n      }\n    },\n    querySelectorAll: {\n      value(sel) {\n        if (sel === \":root\") {\n          return this;\n        }\n        return selectAll(sel, this);\n      }\n    }\n  });\n}\nconst selectorTokensCache = /* @__PURE__ */new Map();\nfunction cachedQuerySelector(sel, node) {\n  let selectorTokens = selectorTokensCache.get(sel);\n  if (selectorTokens === void 0) {\n    selectorTokens = parseRelevantSelectors(sel);\n    selectorTokensCache.set(sel, selectorTokens);\n  }\n  if (selectorTokens) {\n    for (const token of selectorTokens) {\n      if (token.name === \"class\") {\n        return classCache.has(token.value);\n      }\n      if (token.name === \"id\") {\n        return idCache.has(token.value);\n      }\n    }\n  }\n  return !!selectOne(sel, node);\n}\nfunction parseRelevantSelectors(sel) {\n  const tokens = parse$1(sel);\n  const relevantTokens = [];\n  for (let i = 0; i < tokens.length; i++) {\n    const tokenGroup = tokens[i];\n    if (tokenGroup?.length !== 1) {\n      continue;\n    }\n    const token = tokenGroup[0];\n    if (token?.type === \"attribute\" && (token.name === \"class\" || token.name === \"id\")) {\n      relevantTokens.push(token);\n    }\n  }\n  return relevantTokens.length > 0 ? relevantTokens : null;\n}\nconst LOG_LEVELS = [\"trace\", \"debug\", \"info\", \"warn\", \"error\", \"silent\"];\nconst defaultLogger = {\n  trace(msg) {\n    console.trace(msg);\n  },\n  debug(msg) {\n    console.debug(msg);\n  },\n  warn(msg) {\n    console.warn(pc.yellow(msg));\n  },\n  error(msg) {\n    console.error(pc.bold(pc.red(msg)));\n  },\n  info(msg) {\n    console.info(pc.bold(pc.blue(msg)));\n  },\n  silent() {}\n};\nfunction createLogger(logLevel) {\n  const logLevelIdx = LOG_LEVELS.indexOf(logLevel);\n  return LOG_LEVELS.reduce((logger, type, index) => {\n    if (index >= logLevelIdx) {\n      logger[type] = defaultLogger[type];\n    } else {\n      logger[type] = defaultLogger.silent;\n    }\n    return logger;\n  }, {});\n}\nfunction isSubpath(basePath, currentPath) {\n  return !_pathModule.relative(basePath, currentPath).startsWith(\"..\");\n}\nconst removePseudoClassesAndElementsPattern = /(?<!\\\\)::?[a-z-]+(?:\\(.+\\))?/gi;\nconst implicitUniversalPattern = /([>+~])\\s*(?!\\1)([>+~])/g;\nconst emptyCombinatorPattern = /([>+~])\\s*(?=\\1|$)/g;\nconst removeTrailingCommasPattern = /\\(\\s*,|,\\s*\\)/g;\nclass Beasties {\n  #selectorCache = /* @__PURE__ */new Map();\n  options;\n  logger;\n  fs;\n  constructor(options = {}) {\n    this.options = Object.assign({\n      logLevel: \"info\",\n      path: \"\",\n      publicPath: \"\",\n      reduceInlineStyles: true,\n      pruneSource: false,\n      additionalStylesheets: [],\n      allowRules: []\n    }, options);\n    this.logger = this.options.logger || createLogger(this.options.logLevel);\n  }\n  /**\n   * Read the contents of a file from the specified filesystem or disk\n   */\n  readFile(filename) {\n    const fs = this.fs;\n    return new Promise((resolve, reject) => {\n      const callback = (err, data) => {\n        if (err) reject(err);else resolve(data.toString());\n      };\n      if (fs && fs.readFile) {\n        fs.readFile(filename, callback);\n      } else {\n        readFile(filename, \"utf-8\", callback);\n      }\n    });\n  }\n  /**\n   * Write content to a file\n   */\n  writeFile(filename, data) {\n    const fs = this.fs;\n    return new Promise((resolve, reject) => {\n      const callback = err => {\n        if (err) reject(err);else resolve();\n      };\n      if (fs && fs.writeFile) {\n        fs.writeFile(filename, data, callback);\n      } else {\n        writeFile(filename, data, callback);\n      }\n    });\n  }\n  /**\n   * Apply critical CSS processing to the html\n   */\n  async process(html) {\n    const start = Date.now();\n    const document = createDocument(html);\n    if (this.options.additionalStylesheets.length > 0) {\n      await this.embedAdditionalStylesheet(document);\n    }\n    if (this.options.external !== false) {\n      const externalSheets = [...document.querySelectorAll('link[rel=\"stylesheet\"]')];\n      await Promise.all(externalSheets.map(link => this.embedLinkedStylesheet(link, document)));\n    }\n    const styles = this.getAffectedStyleTags(document);\n    for (const style of styles) {\n      this.processStyle(style, document);\n    }\n    if (this.options.mergeStylesheets !== false && styles.length !== 0) {\n      this.mergeStylesheets(document);\n    }\n    const output = serializeDocument(document);\n    const end = Date.now();\n    this.logger.info?.(`Time ${end - start}ms`);\n    return output;\n  }\n  /**\n   * Get the style tags that need processing\n   */\n  getAffectedStyleTags(document) {\n    const styles = [...document.querySelectorAll(\"style\")];\n    if (this.options.reduceInlineStyles === false) {\n      return styles.filter(style => style.$$external);\n    }\n    return styles;\n  }\n  mergeStylesheets(document) {\n    const styles = this.getAffectedStyleTags(document);\n    if (styles.length === 0) {\n      this.logger.warn?.(\"Merging inline stylesheets into a single <style> tag skipped, no inline stylesheets to merge\");\n      return;\n    }\n    const first = styles[0];\n    let sheet = first.textContent;\n    for (let i = 1; i < styles.length; i++) {\n      const node = styles[i];\n      sheet += node.textContent;\n      node.remove();\n    }\n    first.textContent = sheet;\n  }\n  /**\n   * Given href, find the corresponding CSS asset\n   */\n  async getCssAsset(href, _style) {\n    const outputPath = this.options.path;\n    const publicPath = this.options.publicPath;\n    let normalizedPath = href.replace(/^\\//, \"\");\n    const pathPrefix = `${(publicPath || \"\").replace(/(^\\/|\\/$)/g, \"\")}/`;\n    if (normalizedPath.startsWith(pathPrefix)) {\n      normalizedPath = normalizedPath.substring(pathPrefix.length).replace(/^\\//, \"\");\n    }\n    if (/^https?:\\/\\//.test(normalizedPath) || href.startsWith(\"//\")) {\n      return void 0;\n    }\n    const filename = _pathModule.resolve(outputPath, normalizedPath);\n    if (!isSubpath(outputPath, filename)) {\n      return void 0;\n    }\n    let sheet;\n    try {\n      sheet = await this.readFile(filename);\n    } catch {\n      this.logger.warn?.(`Unable to locate stylesheet: ${filename}`);\n    }\n    return sheet;\n  }\n  checkInlineThreshold(link, style, sheet) {\n    if (this.options.inlineThreshold && sheet.length < this.options.inlineThreshold) {\n      const href = style.$$name;\n      style.$$reduce = false;\n      this.logger.info?.(`\\x1B[32mInlined all of ${href} (${sheet.length} was below the threshold of ${this.options.inlineThreshold})\\x1B[39m`);\n      link.remove();\n      return true;\n    }\n    return false;\n  }\n  /**\n   * Inline the stylesheets from options.additionalStylesheets (assuming it passes `options.filter`)\n   */\n  async embedAdditionalStylesheet(document) {\n    const styleSheetsIncluded = [];\n    const sources = await Promise.all(this.options.additionalStylesheets.map(cssFile => {\n      if (styleSheetsIncluded.includes(cssFile)) {\n        return [];\n      }\n      styleSheetsIncluded.push(cssFile);\n      const style = document.createElement(\"style\");\n      style.$$external = true;\n      return this.getCssAsset(cssFile, style).then(sheet => [sheet, style]);\n    }));\n    for (const [sheet, style] of sources) {\n      if (sheet) {\n        style.textContent = sheet;\n        document.head.appendChild(style);\n      }\n    }\n  }\n  /**\n   * Inline the target stylesheet referred to by a <link rel=\"stylesheet\"> (assuming it passes `options.filter`)\n   */\n  async embedLinkedStylesheet(link, document) {\n    const href = link.getAttribute(\"href\");\n    if (!href?.endsWith(\".css\")) {\n      return void 0;\n    }\n    const style = document.createElement(\"style\");\n    style.$$external = true;\n    const sheet = await this.getCssAsset(href, style);\n    if (!sheet) {\n      return;\n    }\n    style.textContent = sheet;\n    style.$$name = href;\n    style.$$links = [link];\n    link.parentNode?.insertBefore(style, link);\n    if (this.checkInlineThreshold(link, style, sheet)) {\n      return;\n    }\n    let media = link.getAttribute(\"media\");\n    if (media && !validateMediaQuery(media)) {\n      media = void 0;\n    }\n    const preloadMode = this.options.preload;\n    let cssLoaderPreamble = \"function $loadcss(u,m,l){(l=document.createElement('link')).rel='stylesheet';l.href=u;document.head.appendChild(l)}\";\n    const lazy = preloadMode === \"js-lazy\";\n    if (lazy) {\n      cssLoaderPreamble = cssLoaderPreamble.replace(\"l.href\", \"l.media='print';l.onload=function(){l.media=m};l.href\");\n    }\n    if (preloadMode === false) return;\n    let noscriptFallback = false;\n    let updateLinkToPreload = false;\n    const noscriptLink = link.cloneNode(false);\n    if (preloadMode === \"body\") {\n      document.body.appendChild(link);\n    } else {\n      if (preloadMode === \"js\" || preloadMode === \"js-lazy\") {\n        const script = document.createElement(\"script\");\n        script.setAttribute(\"data-href\", href);\n        script.setAttribute(\"data-media\", media || \"all\");\n        const js = `${cssLoaderPreamble}$loadcss(document.currentScript.dataset.href,document.currentScript.dataset.media)`;\n        script.textContent = js;\n        link.parentNode.insertBefore(script, link.nextSibling);\n        style.$$links.push(script);\n        cssLoaderPreamble = \"\";\n        noscriptFallback = true;\n        updateLinkToPreload = true;\n      } else if (preloadMode === \"media\") {\n        link.setAttribute(\"media\", \"print\");\n        link.setAttribute(\"onload\", `this.media='${media || \"all\"}'`);\n        noscriptFallback = true;\n      } else if (preloadMode === \"swap-high\") {\n        link.setAttribute(\"rel\", \"alternate stylesheet preload\");\n        link.setAttribute(\"title\", \"styles\");\n        link.setAttribute(\"onload\", `this.title='';this.rel='stylesheet'`);\n        noscriptFallback = true;\n      } else if (preloadMode === \"swap-low\") {\n        link.setAttribute(\"rel\", \"alternate stylesheet\");\n        link.setAttribute(\"title\", \"styles\");\n        link.setAttribute(\"onload\", `this.title='';this.rel='stylesheet'`);\n        noscriptFallback = true;\n      } else if (preloadMode === \"swap\") {\n        link.setAttribute(\"onload\", \"this.rel='stylesheet'\");\n        updateLinkToPreload = true;\n        noscriptFallback = true;\n      } else {\n        const bodyLink = link.cloneNode(false);\n        bodyLink.removeAttribute(\"id\");\n        document.body.appendChild(bodyLink);\n        style.$$links.push(bodyLink);\n        updateLinkToPreload = true;\n      }\n    }\n    if (this.options.noscriptFallback !== false && noscriptFallback && !href.includes(\"</noscript>\")) {\n      const noscript = document.createElement(\"noscript\");\n      noscriptLink.removeAttribute(\"id\");\n      noscript.appendChild(noscriptLink);\n      link.parentNode.insertBefore(noscript, link.nextSibling);\n      style.$$links.push(noscript);\n    }\n    if (updateLinkToPreload) {\n      link.setAttribute(\"rel\", \"preload\");\n      link.setAttribute(\"as\", \"style\");\n    }\n  }\n  /**\n   * Prune the source CSS files\n   */\n  pruneSource(style, before, sheetInverse) {\n    const minSize = this.options.minimumExternalSize;\n    const name = style.$$name;\n    const shouldInline = minSize && sheetInverse.length < minSize;\n    if (shouldInline) {\n      this.logger.info?.(`\\x1B[32mInlined all of ${name} (non-critical external stylesheet would have been ${sheetInverse.length}b, which was below the threshold of ${minSize})\\x1B[39m`);\n    }\n    if (shouldInline || !sheetInverse) {\n      style.textContent = before;\n      if (style.$$links) {\n        for (const link of style.$$links) {\n          const parent = link.parentNode;\n          parent?.removeChild(link);\n        }\n      }\n    }\n    return !!shouldInline;\n  }\n  /**\n   * Parse the stylesheet within a <style> element, then reduce it to contain only rules used by the document.\n   */\n  processStyle(style, document) {\n    if (style.$$reduce === false) return;\n    const name = style.$$name ? style.$$name.replace(/^\\//, \"\") : \"inline CSS\";\n    const options = this.options;\n    const beastiesContainer = document.beastiesContainer;\n    let keyframesMode = options.keyframes ?? \"critical\";\n    if (keyframesMode === true) keyframesMode = \"all\";\n    if (keyframesMode === false) keyframesMode = \"none\";\n    let sheet = style.textContent;\n    const before = sheet;\n    if (!sheet) return;\n    const ast = parseStylesheet(sheet);\n    const astInverse = options.pruneSource ? parseStylesheet(sheet) : null;\n    let criticalFonts = \"\";\n    const failedSelectors = [];\n    const criticalKeyframeNames = /* @__PURE__ */new Set();\n    let includeNext = false;\n    let includeAll = false;\n    let excludeNext = false;\n    let excludeAll = false;\n    const shouldPreloadFonts = options.fonts === true || options.preloadFonts === true;\n    const shouldInlineFonts = options.fonts !== false && options.inlineFonts === true;\n    walkStyleRules(ast, markOnly(rule => {\n      if (rule.type === \"comment\") {\n        const beastiesComment = rule.text.match(/^(?<!! )beasties:(.*)/);\n        const command = beastiesComment && beastiesComment[1];\n        if (command) {\n          switch (command) {\n            case \"include\":\n              includeNext = true;\n              break;\n            case \"exclude\":\n              excludeNext = true;\n              break;\n            case \"include start\":\n              includeAll = true;\n              break;\n            case \"include end\":\n              includeAll = false;\n              break;\n            case \"exclude start\":\n              excludeAll = true;\n              break;\n            case \"exclude end\":\n              excludeAll = false;\n              break;\n          }\n        }\n      }\n      if (rule.type === \"rule\") {\n        if (includeNext) {\n          includeNext = false;\n          return true;\n        }\n        if (excludeNext) {\n          excludeNext = false;\n          return false;\n        }\n        if (includeAll) {\n          return true;\n        }\n        if (excludeAll) {\n          return false;\n        }\n        rule.filterSelectors?.(sel => {\n          const isAllowedRule = options.allowRules.some(exp => {\n            if (exp instanceof RegExp) {\n              return exp.test(sel);\n            }\n            return exp === sel;\n          });\n          if (isAllowedRule) return true;\n          if (sel === \":root\" || sel === \"html\" || sel === \"body\" || sel[0] === \":\" && /^::?(?:before|after)$/.test(sel)) {\n            return true;\n          }\n          sel = this.normalizeCssSelector(sel);\n          if (!sel) return false;\n          try {\n            return beastiesContainer.exists(sel);\n          } catch (e) {\n            failedSelectors.push(`${sel} -> ${e.message || e.toString()}`);\n            return false;\n          }\n        });\n        if (!rule.selector) {\n          return false;\n        }\n        if (rule.nodes) {\n          for (const decl of rule.nodes) {\n            if (!(\"prop\" in decl)) {\n              continue;\n            }\n            if (shouldInlineFonts && /\\bfont(?:-family)?\\b/i.test(decl.prop)) {\n              criticalFonts += ` ${decl.value}`;\n            }\n            if (decl.prop === \"animation\" || decl.prop === \"animation-name\") {\n              for (const name2 of decl.value.split(/\\s+/)) {\n                const nameTrimmed = name2.trim();\n                if (nameTrimmed) criticalKeyframeNames.add(nameTrimmed);\n              }\n            }\n          }\n        }\n      }\n      if (rule.type === \"atrule\" && (rule.name === \"font-face\" || rule.name === \"layer\")) return;\n      const hasRemainingRules = (\"nodes\" in rule && rule.nodes?.some(rule2 => !rule2.$$remove)) ?? true;\n      return hasRemainingRules;\n    }));\n    if (failedSelectors.length !== 0) {\n      this.logger.warn?.(`${failedSelectors.length} rules skipped due to selector errors:\n  ${failedSelectors.join(\"\\n  \")}`);\n    }\n    const preloadedFonts = /* @__PURE__ */new Set();\n    walkStyleRulesWithReverseMirror(ast, astInverse, rule => {\n      if (rule.$$remove === true) return false;\n      if (\"selectors\" in rule) {\n        applyMarkedSelectors(rule);\n      }\n      if (rule.type === \"atrule\" && rule.name === \"keyframes\") {\n        if (keyframesMode === \"none\") return false;\n        if (keyframesMode === \"all\") return true;\n        return criticalKeyframeNames.has(rule.params);\n      }\n      if (rule.type === \"atrule\" && rule.name === \"font-face\") {\n        let family, src;\n        if (rule.nodes) {\n          for (const decl of rule.nodes) {\n            if (!(\"prop\" in decl)) {\n              continue;\n            }\n            if (decl.prop === \"src\") {\n              src = (decl.value.match(/url\\s*\\(\\s*(['\"]?)(.+?)\\1\\s*\\)/) || [])[2];\n            } else if (decl.prop === \"font-family\") {\n              family = decl.value;\n            }\n          }\n          if (src && shouldPreloadFonts && !preloadedFonts.has(src)) {\n            preloadedFonts.add(src);\n            const preload = document.createElement(\"link\");\n            preload.setAttribute(\"rel\", \"preload\");\n            preload.setAttribute(\"as\", \"font\");\n            preload.setAttribute(\"crossorigin\", \"anonymous\");\n            preload.setAttribute(\"href\", src.trim());\n            document.head.appendChild(preload);\n          }\n        }\n        if (!shouldInlineFonts || !family || !src || !criticalFonts.includes(family)) {\n          return false;\n        }\n      }\n    });\n    sheet = serializeStylesheet(ast, {\n      compress: this.options.compress !== false\n    });\n    if (sheet.trim().length === 0) {\n      if (style.parentNode) {\n        style.remove();\n      }\n      return;\n    }\n    let afterText = \"\";\n    let styleInlinedCompletely = false;\n    if (options.pruneSource) {\n      const sheetInverse = serializeStylesheet(astInverse, {\n        compress: this.options.compress !== false\n      });\n      styleInlinedCompletely = this.pruneSource(style, before, sheetInverse);\n      if (styleInlinedCompletely) {\n        const percent2 = sheetInverse.length / before.length * 100;\n        afterText = `, reducing non-inlined size ${percent2 | 0}% to ${formatSize(sheetInverse.length)}`;\n      }\n      const cssFilePath = _pathModule.resolve(this.options.path, name);\n      this.writeFile(cssFilePath, sheetInverse).then(() => this.logger.info?.(`${name} was successfully updated`)).catch(err => this.logger.error?.(err));\n    }\n    if (!styleInlinedCompletely) {\n      style.textContent = sheet;\n    }\n    const percent = sheet.length / before.length * 100 | 0;\n    this.logger.info?.(`\\x1B[32mInlined ${formatSize(sheet.length)} (${percent}% of original ${formatSize(before.length)}) of ${name}${afterText}.\\x1B[39m`);\n  }\n  normalizeCssSelector(sel) {\n    let normalizedSelector = this.#selectorCache.get(sel);\n    if (normalizedSelector !== void 0) {\n      return normalizedSelector;\n    }\n    normalizedSelector = sel.replace(removePseudoClassesAndElementsPattern, \"\").replace(removeTrailingCommasPattern, match => match.includes(\"(\") ? \"(\" : \")\").replace(implicitUniversalPattern, \"$1 * $2\").replace(emptyCombinatorPattern, \"$1 *\").trim();\n    this.#selectorCache.set(sel, normalizedSelector);\n    return normalizedSelector;\n  }\n}\nfunction formatSize(size) {\n  if (size <= 0) {\n    return \"0 bytes\";\n  }\n  const abbreviations = [\"bytes\", \"kB\", \"MB\", \"GB\"];\n  const index = Math.floor(Math.log(size) / Math.log(1024));\n  const roundedSize = size / 1024 ** index;\n  const fractionDigits = index === 0 ? 0 : 2;\n  return `${roundedSize.toFixed(fractionDigits)} ${abbreviations[index]}`;\n}\nexport { Beasties as default };\n","import { normalizeTrustProxyHeaders, sanitizeRequestHeaders, validateRequest } from './validation.mjs';\nimport { ɵConsole as _Console, ApplicationRef, REQUEST, InjectionToken, provideEnvironmentInitializer, inject, makeEnvironmentProviders, ɵENABLE_ROOT_COMPONENT_BOOTSTRAP as _ENABLE_ROOT_COMPONENT_BOOTSTRAP, Compiler, createEnvironmentInjector, EnvironmentInjector, runInInjectionContext, ɵresetCompiledComponents as _resetCompiledComponents, REQUEST_CONTEXT, RESPONSE_INIT, LOCALE_ID } from '@angular/core';\nimport { platformServer, INITIAL_CONFIG, ɵSERVER_CONTEXT as _SERVER_CONTEXT, ɵrenderInternal as _renderInternal, provideServerRendering as provideServerRendering$1 } from '@angular/platform-server';\nimport { ActivatedRoute, Router, ROUTES, ɵloadChildren as _loadChildren } from '@angular/router';\nimport { APP_BASE_HREF, PlatformLocation } from '@angular/common';\nimport Beasties from '../third_party/beasties/index.js';\n\n/**\n * Manages server-side assets.\n */\nclass ServerAssets {\n  manifest;\n  /**\n   * Creates an instance of ServerAsset.\n   *\n   * @param manifest - The manifest containing the server assets.\n   */\n  constructor(manifest) {\n    this.manifest = manifest;\n  }\n  /**\n   * Retrieves the content of a server-side asset using its path.\n   *\n   * @param path - The path to the server asset within the manifest.\n   * @returns The server asset associated with the provided path, as a `ServerAsset` object.\n   * @throws Error - Throws an error if the asset does not exist.\n   */\n  getServerAsset(path) {\n    const asset = this.manifest.assets[path];\n    if (!asset) {\n      throw new Error(`Server asset '${path}' does not exist.`);\n    }\n    return asset;\n  }\n  /**\n   * Checks if a specific server-side asset exists.\n   *\n   * @param path - The path to the server asset.\n   * @returns A boolean indicating whether the asset exists.\n   */\n  hasServerAsset(path) {\n    return !!this.manifest.assets[path];\n  }\n  /**\n   * Retrieves the asset for 'index.server.html'.\n   *\n   * @returns The `ServerAsset` object for 'index.server.html'.\n   * @throws Error - Throws an error if 'index.server.html' does not exist.\n   */\n  getIndexServerHtml() {\n    return this.getServerAsset('index.server.html');\n  }\n}\n\n/**\n * A set of log messages that should be ignored and not printed to the console.\n */\nconst IGNORED_LOGS = /*#__PURE__*/new Set(['Angular is running in development mode.']);\n/**\n * Custom implementation of the Angular Console service that filters out specific log messages.\n *\n * This class extends the internal Angular `ɵConsole` class to provide customized logging behavior.\n * It overrides the `log` method to suppress logs that match certain predefined messages.\n */\nclass Console extends _Console {\n  /**\n   * Logs a message to the console if it is not in the set of ignored messages.\n   *\n   * @param message - The message to log to the console.\n   *\n   * This method overrides the `log` method of the `ɵConsole` class. It checks if the\n   * message is in the `IGNORED_LOGS` set. If it is not, it delegates the logging to\n   * the parent class's `log` method. Otherwise, the message is suppressed.\n   */\n  log(message) {\n    if (!IGNORED_LOGS.has(message)) {\n      super.log(message);\n    }\n  }\n}\n\n/**\n * The Angular app manifest object.\n * This is used internally to store the current Angular app manifest.\n */\nlet angularAppManifest;\n/**\n * Sets the Angular app manifest.\n *\n * @param manifest - The manifest object to set for the Angular application.\n */\nfunction setAngularAppManifest(manifest) {\n  angularAppManifest = manifest;\n}\n/**\n * Gets the Angular app manifest.\n *\n * @returns The Angular app manifest.\n * @throws Will throw an error if the Angular app manifest is not set.\n */\nfunction getAngularAppManifest() {\n  if (!angularAppManifest) {\n    throw new Error('Angular app manifest is not set. ' + `Please ensure you are using the '@angular/build:application' builder to build your server application.`);\n  }\n  return angularAppManifest;\n}\n/**\n * The Angular app engine manifest object.\n * This is used internally to store the current Angular app engine manifest.\n */\nlet angularAppEngineManifest;\n/**\n * Sets the Angular app engine manifest.\n *\n * @param manifest - The engine manifest object to set.\n */\nfunction setAngularAppEngineManifest(manifest) {\n  angularAppEngineManifest = manifest;\n}\n/**\n * Gets the Angular app engine manifest.\n *\n * @returns The Angular app engine manifest.\n * @throws Will throw an error if the Angular app engine manifest is not set.\n */\nfunction getAngularAppEngineManifest() {\n  if (!angularAppEngineManifest) {\n    throw new Error('Angular app engine manifest is not set. ' + `Please ensure you are using the '@angular/build:application' builder to build your server application.`);\n  }\n  return angularAppEngineManifest;\n}\n\n/**\n * Removes the trailing slash from a URL if it exists.\n *\n * @param url - The URL string from which to remove the trailing slash.\n * @returns The URL string without a trailing slash.\n *\n * @example\n * ```js\n * stripTrailingSlash('path/'); // 'path'\n * stripTrailingSlash('/path');  // '/path'\n * stripTrailingSlash('/'); // '/'\n * stripTrailingSlash(''); // ''\n * ```\n */\nfunction stripTrailingSlash(url) {\n  // Check if the last character of the URL is a slash\n  return url.length > 1 && url[url.length - 1] === '/' ? url.slice(0, -1) : url;\n}\n/**\n * Removes the leading slash from a URL if it exists.\n *\n * @param url - The URL string from which to remove the leading slash.\n * @returns The URL string without a leading slash.\n *\n * @example\n * ```js\n * stripLeadingSlash('/path'); // 'path'\n * stripLeadingSlash('/path/');  // 'path/'\n * stripLeadingSlash('/'); // '/'\n * stripLeadingSlash(''); // ''\n * ```\n */\nfunction stripLeadingSlash(url) {\n  // Check if the first character of the URL is a slash\n  return url.length > 1 && url[0] === '/' ? url.slice(1) : url;\n}\n/**\n * Adds a leading slash to a URL if it does not already have one.\n *\n * @param url - The URL string to which the leading slash will be added.\n * @returns The URL string with a leading slash.\n *\n * @example\n * ```js\n * addLeadingSlash('path'); // '/path'\n * addLeadingSlash('/path'); // '/path'\n * ```\n */\nfunction addLeadingSlash(url) {\n  // Check if the URL already starts with a slash\n  return url[0] === '/' ? url : `/${url}`;\n}\n/**\n * Adds a trailing slash to a URL if it does not already have one.\n *\n * @param url - The URL string to which the trailing slash will be added.\n * @returns The URL string with a trailing slash.\n *\n * @example\n * ```js\n * addTrailingSlash('path'); // 'path/'\n * addTrailingSlash('path/'); // 'path/'\n * ```\n */\nfunction addTrailingSlash(url) {\n  // Check if the URL already end with a slash\n  return url[url.length - 1] === '/' ? url : `${url}/`;\n}\n/**\n * Joins URL parts into a single URL string.\n *\n * This function takes multiple URL segments, normalizes them by removing leading\n * and trailing slashes where appropriate, and then joins them into a single URL.\n *\n * @param parts - The parts of the URL to join. Each part can be a string with or without slashes.\n * @returns The joined URL string, with normalized slashes.\n *\n * @example\n * ```js\n * joinUrlParts('path/', '/to/resource'); // '/path/to/resource'\n * joinUrlParts('/path/', 'to/resource'); // '/path/to/resource'\n * joinUrlParts('', ''); // '/'\n * ```\n */\nfunction joinUrlParts(...parts) {\n  const normalizedParts = [];\n  for (const part of parts) {\n    if (part === '') {\n      // Skip any empty parts\n      continue;\n    }\n    let start = 0;\n    let end = part.length;\n    // Use \"Pointers\" to avoid intermediate slices\n    while (start < end && part[start] === '/') {\n      start++;\n    }\n    while (end > start && part[end - 1] === '/') {\n      end--;\n    }\n    if (start < end) {\n      normalizedParts.push(part.slice(start, end));\n    }\n  }\n  return addLeadingSlash(normalizedParts.join('/'));\n}\n/**\n * Strips `/index.html` from the end of a URL's path, if present.\n *\n * This function is used to convert URLs pointing to an `index.html` file into their directory\n * equivalents. For example, it transforms a URL like `http://www.example.com/page/index.html`\n * into `http://www.example.com/page`.\n *\n * @param url - The URL object to process.\n * @returns A new URL object with `/index.html` removed from the path, if it was present.\n *\n * @example\n * ```typescript\n * const originalUrl = new URL('http://www.example.com/page/index.html');\n * const cleanedUrl = stripIndexHtmlFromURL(originalUrl);\n * console.log(cleanedUrl.href); // Output: 'http://www.example.com/page'\n * ```\n */\nfunction stripIndexHtmlFromURL(url) {\n  if (url.pathname.endsWith('/index.html')) {\n    const modifiedURL = new URL(url);\n    // Remove '/index.html' from the pathname\n    modifiedURL.pathname = modifiedURL.pathname.slice(0, /** '/index.html'.length */-11);\n    return modifiedURL;\n  }\n  return url;\n}\n/**\n * Resolves `*` placeholders in a path template by mapping them to corresponding segments\n * from a base path. This is useful for constructing paths dynamically based on a given base path.\n *\n * The function processes the `toPath` string, replacing each `*` placeholder with\n * the corresponding segment from the `fromPath`. If the `toPath` contains no placeholders,\n * it is returned as-is. Invalid `toPath` formats (not starting with `/`) will throw an error.\n *\n * @param toPath - A path template string that may contain `*` placeholders. Each `*` is replaced\n * by the corresponding segment from the `fromPath`. Static paths (e.g., `/static/path`) are returned\n * directly without placeholder replacement.\n * @param fromPath - A base path string, split into segments, that provides values for\n * replacing `*` placeholders in the `toPath`.\n * @returns A resolved path string with `*` placeholders replaced by segments from the `fromPath`,\n * or the `toPath` returned unchanged if it contains no placeholders.\n *\n * @throws If the `toPath` does not start with a `/`, indicating an invalid path format.\n *\n * @example\n * ```typescript\n * // Example with placeholders resolved\n * const resolvedPath = buildPathWithParams('/*\\/details', '/123/abc');\n * console.log(resolvedPath); // Outputs: '/123/details'\n *\n * // Example with a static path\n * const staticPath = buildPathWithParams('/static/path', '/base/unused');\n * console.log(staticPath); // Outputs: '/static/path'\n * ```\n */\nfunction buildPathWithParams(toPath, fromPath) {\n  if (toPath[0] !== '/') {\n    throw new Error(`Invalid toPath: The string must start with a '/'. Received: '${toPath}'`);\n  }\n  if (fromPath[0] !== '/') {\n    throw new Error(`Invalid fromPath: The string must start with a '/'. Received: '${fromPath}'`);\n  }\n  if (!toPath.includes('/*')) {\n    return toPath;\n  }\n  const fromPathParts = fromPath.split('/');\n  const toPathParts = toPath.split('/');\n  const resolvedParts = toPathParts.map((part, index) => toPathParts[index] === '*' ? fromPathParts[index] : part);\n  return joinUrlParts(...resolvedParts);\n}\nconst MATRIX_PARAMS_REGEX = /;[^/]+/g;\n/**\n * Removes Angular matrix parameters from a given URL path.\n *\n * This function takes a URL path string and removes any matrix parameters.\n * Matrix parameters are parts of a URL segment that start with a semicolon `;`.\n *\n * @param pathname - The URL path to remove matrix parameters from.\n * @returns The URL path with matrix parameters removed.\n *\n * @example\n * ```ts\n * stripMatrixParams('/path;param=value'); // returns '/path'\n * stripMatrixParams('/path;param=value/to;p=1/resource'); // returns '/path/to/resource'\n * stripMatrixParams('/path/to/resource'); // returns '/path/to/resource'\n * ```\n */\nfunction stripMatrixParams(pathname) {\n  // Use a regular expression to remove matrix parameters.\n  // This regex finds all occurrences of a semicolon followed by any characters\n  return pathname.includes(';') ? pathname.replace(MATRIX_PARAMS_REGEX, '') : pathname;\n}\n\n/**\n * Renders an Angular application or module to an HTML string.\n *\n * This function determines whether the provided `bootstrap` value is an Angular module\n * or a bootstrap function and invokes the appropriate rendering method (`renderModule` or `renderApplication`).\n *\n * @param html - The initial HTML document content.\n * @param bootstrap - An Angular module type or a function returning a promise that resolves to an `ApplicationRef`.\n * @param url - The application URL, used for route-based rendering in SSR.\n * @param platformProviders - An array of platform providers for the rendering process.\n * @param serverContext - A string representing the server context, providing additional metadata for SSR.\n * @returns A promise resolving to an object containing:\n *          - `hasNavigationError`: Indicates if a navigation error occurred.\n *          - `redirectTo`: (Optional) The redirect URL if a navigation redirect occurred.\n *          - `content`: A function returning a promise that resolves to the rendered HTML string.\n */\nasync function renderAngular(html, bootstrap, url, platformProviders, serverContext) {\n  // A request to `http://www.example.com/page/index.html` will render the Angular route corresponding to `http://www.example.com/page`.\n  const urlToRender = stripIndexHtmlFromURL(url);\n  const platformRef = platformServer([{\n    provide: INITIAL_CONFIG,\n    useValue: {\n      url: urlToRender.href,\n      document: html\n    }\n  }, {\n    provide: _SERVER_CONTEXT,\n    useValue: serverContext\n  }, {\n    // An Angular Console Provider that does not print a set of predefined logs.\n    provide: _Console,\n    // Using `useClass` would necessitate decorating `Console` with `@Injectable`,\n    // which would require switching from `ts_library` to `ng_module`. This change\n    // would also necessitate various patches of `@angular/bazel` to support ESM.\n    useFactory: () => new Console()\n  }, ...platformProviders]);\n  let redirectTo;\n  let hasNavigationError = true;\n  try {\n    let applicationRef;\n    if (isNgModule(bootstrap)) {\n      const moduleRef = await platformRef.bootstrapModule(bootstrap);\n      applicationRef = moduleRef.injector.get(ApplicationRef);\n    } else {\n      applicationRef = await bootstrap({\n        platformRef\n      });\n    }\n    // Block until application is stable.\n    await applicationRef.whenStable();\n    // TODO(alanagius): Find a way to avoid rendering here especially for redirects as any output will be discarded.\n    const envInjector = applicationRef.injector;\n    const routerIsProvided = !!envInjector.get(ActivatedRoute, null);\n    const router = envInjector.get(Router);\n    const lastSuccessfulNavigation = router.lastSuccessfulNavigation;\n    if (!routerIsProvided) {\n      hasNavigationError = false;\n    } else if (lastSuccessfulNavigation?.finalUrl) {\n      hasNavigationError = false;\n      const requestPrefix = envInjector.get(APP_BASE_HREF, null, {\n        optional: true\n      }) ?? envInjector.get(REQUEST, null, {\n        optional: true\n      })?.headers.get('X-Forwarded-Prefix');\n      const {\n        pathname,\n        search,\n        hash\n      } = envInjector.get(PlatformLocation);\n      const finalUrl = constructDecodedUrl({\n        pathname,\n        search,\n        hash\n      }, requestPrefix);\n      const urlToRenderString = constructDecodedUrl(urlToRender, requestPrefix);\n      if (urlToRenderString !== finalUrl) {\n        redirectTo = [pathname, search, hash].join('');\n      }\n    }\n    return {\n      hasNavigationError,\n      redirectTo,\n      content: () => new Promise((resolve, reject) => {\n        // Defer rendering to the next event loop iteration to avoid blocking, as most operations in `renderInternal` are synchronous.\n        setTimeout(() => {\n          _renderInternal(platformRef, applicationRef).then(resolve).catch(reject).finally(() => void asyncDestroyPlatform(platformRef));\n        }, 0);\n      })\n    };\n  } catch (error) {\n    await asyncDestroyPlatform(platformRef);\n    throw error;\n  } finally {\n    if (hasNavigationError || redirectTo) {\n      void asyncDestroyPlatform(platformRef);\n    }\n  }\n}\n/**\n * Type guard to determine if a given value is an Angular module.\n * Angular modules are identified by the presence of the `ɵmod` static property.\n * This function helps distinguish between Angular modules and bootstrap functions.\n *\n * @param value - The value to be checked.\n * @returns True if the value is an Angular module (i.e., it has the `ɵmod` property), false otherwise.\n */\nfunction isNgModule(value) {\n  return 'ɵmod' in value;\n}\n/**\n * Gracefully destroys the application in a macrotask, allowing pending promises to resolve\n * and surfacing any potential errors to the user.\n *\n * @param platformRef - The platform reference to be destroyed.\n */\nfunction asyncDestroyPlatform(platformRef) {\n  return new Promise(resolve => {\n    setTimeout(() => {\n      if (!platformRef.destroyed) {\n        platformRef.destroy();\n      }\n      resolve();\n    }, 0);\n  });\n}\n/**\n * Constructs a decoded URL string from its components, ensuring consistency for comparison.\n *\n * This function takes a URL-like object (containing `pathname`, `search`, and `hash`),\n * strips the trailing slash from the pathname, joins the components, and then decodes\n * the entire string. This normalization is crucial for accurately comparing URLs\n * that might differ only in encoding or trailing slashes.\n *\n * @param url - An object containing the URL components:\n *   - `pathname`: The path of the URL.\n *   - `search`: The query string of the URL (including '?').\n *   - `hash`: The hash fragment of the URL (including '#').\n * @param prefix - An optional prefix (e.g., `APP_BASE_HREF`) to prepend to the pathname\n * if it is not already present.\n * @returns The constructed and decoded URL string.\n */\nfunction constructDecodedUrl(url, prefix) {\n  const {\n    pathname,\n    hash,\n    search\n  } = url;\n  const urlParts = [];\n  if (prefix && !addTrailingSlash(pathname).startsWith(addTrailingSlash(prefix))) {\n    urlParts.push(joinUrlParts(prefix, pathname));\n  } else {\n    urlParts.push(stripTrailingSlash(pathname));\n  }\n  urlParts.push(search, hash);\n  return decodeURIComponent(urlParts.join(''));\n}\n\n/**\n * Creates a promise that resolves with the result of the provided `promise` or rejects with an\n * `AbortError` if the `AbortSignal` is triggered before the promise resolves.\n *\n * @param promise - The promise to monitor for completion.\n * @param signal - An `AbortSignal` used to monitor for an abort event. If the signal is aborted,\n *                 the returned promise will reject.\n * @param errorMessagePrefix - A custom message prefix to include in the error message when the operation is aborted.\n * @returns A promise that either resolves with the value of the provided `promise` or rejects with\n *          an `AbortError` if the `AbortSignal` is triggered.\n *\n * @throws {AbortError} If the `AbortSignal` is triggered before the `promise` resolves.\n */\nfunction promiseWithAbort(promise, signal, errorMessagePrefix) {\n  return new Promise((resolve, reject) => {\n    const abortHandler = () => {\n      reject(new DOMException(`${errorMessagePrefix} was aborted.\\n${signal.reason}`, 'AbortError'));\n    };\n    // Check for abort signal\n    if (signal.aborted) {\n      abortHandler();\n      return;\n    }\n    signal.addEventListener('abort', abortHandler, {\n      once: true\n    });\n    promise.then(resolve).catch(reject).finally(() => {\n      signal.removeEventListener('abort', abortHandler);\n    });\n  });\n}\n\n/**\n * The internal path used for the app shell route.\n * @internal\n */\nconst APP_SHELL_ROUTE = 'ng-app-shell';\n/**\n * Identifies a particular kind of `ServerRenderingFeatureKind`.\n * @see {@link ServerRenderingFeature}\n */\nvar ServerRenderingFeatureKind = /*#__PURE__*/function (ServerRenderingFeatureKind) {\n  ServerRenderingFeatureKind[ServerRenderingFeatureKind[\"AppShell\"] = 0] = \"AppShell\";\n  ServerRenderingFeatureKind[ServerRenderingFeatureKind[\"ServerRoutes\"] = 1] = \"ServerRoutes\";\n  return ServerRenderingFeatureKind;\n}(ServerRenderingFeatureKind || {});\n/**\n * Different rendering modes for server routes.\n * @see {@link withRoutes}\n * @see {@link ServerRoute}\n */\nvar RenderMode = /*#__PURE__*/function (RenderMode) {\n  /** Server-Side Rendering (SSR) mode, where content is rendered on the server for each request. */\n  RenderMode[RenderMode[\"Server\"] = 0] = \"Server\";\n  /** Client-Side Rendering (CSR) mode, where content is rendered on the client side in the browser. */\n  RenderMode[RenderMode[\"Client\"] = 1] = \"Client\";\n  /** Static Site Generation (SSG) mode, where content is pre-rendered at build time and served as static files. */\n  RenderMode[RenderMode[\"Prerender\"] = 2] = \"Prerender\";\n  return RenderMode;\n}(RenderMode || {});\n/**\n * Defines the fallback strategies for Static Site Generation (SSG) routes when a pre-rendered path is not available.\n * This is particularly relevant for routes with parameterized URLs where some paths might not be pre-rendered at build time.\n * @see {@link ServerRoutePrerenderWithParams}\n */\nvar PrerenderFallback = /*#__PURE__*/function (PrerenderFallback) {\n  /**\n   * Fallback to Server-Side Rendering (SSR) if the pre-rendered path is not available.\n   * This strategy dynamically generates the page on the server at request time.\n   */\n  PrerenderFallback[PrerenderFallback[\"Server\"] = 0] = \"Server\";\n  /**\n   * Fallback to Client-Side Rendering (CSR) if the pre-rendered path is not available.\n   * This strategy allows the page to be rendered on the client side.\n   */\n  PrerenderFallback[PrerenderFallback[\"Client\"] = 1] = \"Client\";\n  /**\n   * No fallback; if the path is not pre-rendered, the server will not handle the request.\n   * This means the application will not provide any response for paths that are not pre-rendered.\n   */\n  PrerenderFallback[PrerenderFallback[\"None\"] = 2] = \"None\";\n  return PrerenderFallback;\n}(PrerenderFallback || {});\n/**\n * Token for providing the server routes configuration.\n * @internal\n */\nconst SERVER_ROUTES_CONFIG = /*#__PURE__*/new InjectionToken('SERVER_ROUTES_CONFIG');\n/**\n * Configures server-side routing for the application.\n *\n * This function registers an array of `ServerRoute` definitions, enabling server-side rendering\n * for specific URL paths. These routes are used to pre-render content on the server, improving\n * initial load performance and SEO.\n *\n * @param routes - An array of `ServerRoute` objects, each defining a server-rendered route.\n * @returns A `ServerRenderingFeature` object configuring server-side routes.\n *\n * @example\n * ```ts\n * import { provideServerRendering, withRoutes, ServerRoute, RenderMode } from '@angular/ssr';\n *\n * const serverRoutes: ServerRoute[] = [\n *   {\n *     path: '', // This renders the \"/\" route on the client (CSR)\n *     renderMode: RenderMode.Client,\n *   },\n *   {\n *     path: 'about', // This page is static, so we prerender it (SSG)\n *     renderMode: RenderMode.Prerender,\n *   },\n *   {\n *     path: 'profile', // This page requires user-specific data, so we use SSR\n *     renderMode: RenderMode.Server,\n *   },\n *   {\n *     path: '**', // All other routes will be rendered on the server (SSR)\n *     renderMode: RenderMode.Server,\n *   },\n * ];\n *\n * provideServerRendering(withRoutes(serverRoutes));\n * ```\n *\n * @see {@link provideServerRendering}\n * @see {@link ServerRoute}\n */\nfunction withRoutes(routes) {\n  const config = {\n    routes\n  };\n  return {\n    ɵkind: ServerRenderingFeatureKind.ServerRoutes,\n    ɵproviders: [{\n      provide: SERVER_ROUTES_CONFIG,\n      useValue: config\n    }]\n  };\n}\n/**\n * Configures the shell of the application.\n *\n * The app shell is a minimal, static HTML page that is served immediately, while the\n * full Angular application loads in the background. This improves perceived performance\n * by providing instant feedback to the user.\n *\n * This function configures the app shell route, which serves the provided component for\n * requests that do not match any defined server routes.\n *\n * @param component - The Angular component to render for the app shell. Can be a direct\n * component type or a dynamic import function.\n * @returns A `ServerRenderingFeature` object configuring the app shell.\n *\n * @example\n * ```ts\n * import { provideServerRendering, withAppShell, withRoutes } from '@angular/ssr';\n * import { AppShellComponent } from './app-shell.component';\n *\n * provideServerRendering(\n *   withRoutes(serverRoutes),\n *   withAppShell(AppShellComponent)\n * );\n * ```\n *\n * @example\n * ```ts\n * import { provideServerRendering, withAppShell, withRoutes } from '@angular/ssr';\n *\n * provideServerRendering(\n *   withRoutes(serverRoutes),\n *   withAppShell(() =>\n *     import('./app-shell.component').then((m) => m.AppShellComponent)\n *   )\n * );\n * ```\n *\n * @see {@link provideServerRendering}\n * @see {@link https://angular.dev/ecosystem/service-workers/app-shell App shell pattern on Angular.dev}\n */\nfunction withAppShell(component) {\n  const routeConfig = {\n    path: APP_SHELL_ROUTE\n  };\n  if ('ɵcmp' in component) {\n    routeConfig.component = component;\n  } else {\n    routeConfig.loadComponent = component;\n  }\n  return {\n    ɵkind: ServerRenderingFeatureKind.AppShell,\n    ɵproviders: [{\n      provide: ROUTES,\n      useValue: routeConfig,\n      multi: true\n    }, provideEnvironmentInitializer(() => {\n      const config = inject(SERVER_ROUTES_CONFIG);\n      config.appShellRoute = APP_SHELL_ROUTE;\n    })]\n  };\n}\n/**\n * Configures server-side rendering for an Angular application.\n *\n * This function sets up the necessary providers for server-side rendering, including\n * support for server routes and app shell. It combines features configured using\n * `withRoutes` and `withAppShell` to provide a comprehensive server-side rendering setup.\n *\n * @param features - Optional features to configure additional server rendering behaviors.\n * @returns An `EnvironmentProviders` instance with the server-side rendering configuration.\n *\n * @example\n * Basic example of how you can enable server-side rendering in your application\n * when using the `bootstrapApplication` function:\n *\n * ```ts\n * import { bootstrapApplication, BootstrapContext } from '@angular/platform-browser';\n * import { provideServerRendering, withRoutes, withAppShell } from '@angular/ssr';\n * import { AppComponent } from './app/app.component';\n * import { SERVER_ROUTES } from './app/app.server.routes';\n * import { AppShellComponent } from './app/app-shell.component';\n *\n * const bootstrap = (context: BootstrapContext) =>\n *     bootstrapApplication(AppComponent, {\n *       providers: [\n *         provideServerRendering(\n *           withRoutes(SERVER_ROUTES),\n *           withAppShell(AppShellComponent),\n *         ),\n *       ],\n *     }, context);\n *\n * export default bootstrap;\n * ```\n * @see {@link withRoutes} configures server-side routing\n * @see {@link withAppShell} configures the application shell\n */\nfunction provideServerRendering(...features) {\n  let hasAppShell = false;\n  let hasServerRoutes = false;\n  const providers = [provideServerRendering$1()];\n  for (const {\n    ɵkind,\n    ɵproviders\n  } of features) {\n    hasAppShell ||= ɵkind === ServerRenderingFeatureKind.AppShell;\n    hasServerRoutes ||= ɵkind === ServerRenderingFeatureKind.ServerRoutes;\n    providers.push(...ɵproviders);\n  }\n  if (!hasServerRoutes && hasAppShell) {\n    throw new Error(`Configuration error: found 'withAppShell()' without 'withRoutes()' in the same call to 'provideServerRendering()'.` + `The 'withAppShell()' function requires 'withRoutes()' to be used.`);\n  }\n  return makeEnvironmentProviders(providers);\n}\n\n/**\n * A route tree implementation that supports efficient route matching, including support for wildcard routes.\n * This structure is useful for organizing and retrieving routes in a hierarchical manner,\n * enabling complex routing scenarios with nested paths.\n *\n * @typeParam AdditionalMetadata - Type of additional metadata that can be associated with route nodes.\n */\nclass RouteTree {\n  /**\n   * The root node of the route tree.\n   * All routes are stored and accessed relative to this root node.\n   */\n  root = /*#__PURE__*/this.createEmptyRouteTreeNode();\n  /**\n   * Inserts a new route into the route tree.\n   * The route is broken down into segments, and each segment is added to the tree.\n   * Parameterized segments (e.g., :id) are normalized to wildcards (*) for matching purposes.\n   *\n   * @param route - The route path to insert into the tree.\n   * @param metadata - Metadata associated with the route, excluding the route path itself.\n   */\n  insert(route, metadata) {\n    let node = this.root;\n    const segments = this.getPathSegments(route);\n    const normalizedSegments = [];\n    for (const segment of segments) {\n      // Replace parameterized segments (e.g., :id) with a wildcard (*) for matching\n      const normalizedSegment = segment[0] === ':' ? '*' : segment;\n      let childNode = node.children.get(normalizedSegment);\n      if (!childNode) {\n        childNode = this.createEmptyRouteTreeNode();\n        node.children.set(normalizedSegment, childNode);\n      }\n      node = childNode;\n      normalizedSegments.push(normalizedSegment);\n    }\n    // At the leaf node, store the full route and its associated metadata\n    node.metadata = {\n      ...metadata,\n      route: addLeadingSlash(normalizedSegments.join('/'))\n    };\n  }\n  /**\n   * Matches a given route against the route tree and returns the best matching route's metadata.\n   * The best match is determined by the lowest insertion index, meaning the earliest defined route\n   * takes precedence.\n   *\n   * @param route - The route path to match against the route tree.\n   * @returns The metadata of the best matching route or `undefined` if no match is found.\n   */\n  match(route) {\n    const segments = this.getPathSegments(route);\n    return this.traverseBySegments(segments)?.metadata;\n  }\n  /**\n   * Converts the route tree into a serialized format representation.\n   * This method converts the route tree into an array of metadata objects that describe the structure of the tree.\n   * The array represents the routes in a nested manner where each entry includes the route and its associated metadata.\n   *\n   * @returns An array of `RouteTreeNodeMetadata` objects representing the route tree structure.\n   *          Each object includes the `route` and associated metadata of a route.\n   */\n  toObject() {\n    return Array.from(this.traverse());\n  }\n  /**\n   * Constructs a `RouteTree` from an object representation.\n   * This method is used to recreate a `RouteTree` instance from an array of metadata objects.\n   * The array should be in the format produced by `toObject`, allowing for the reconstruction of the route tree\n   * with the same routes and metadata.\n   *\n   * @param value - An array of `RouteTreeNodeMetadata` objects that represent the serialized format of the route tree.\n   *                Each object should include a `route` and its associated metadata.\n   * @returns A new `RouteTree` instance constructed from the provided metadata objects.\n   */\n  static fromObject(value) {\n    const tree = new RouteTree();\n    for (const {\n      route,\n      ...metadata\n    } of value) {\n      tree.insert(route, metadata);\n    }\n    return tree;\n  }\n  /**\n   * A generator function that recursively traverses the route tree and yields the metadata of each node.\n   * This allows for easy and efficient iteration over all nodes in the tree.\n   *\n   * @param node - The current node to start the traversal from. Defaults to the root node of the tree.\n   */\n  *traverse(node = this.root) {\n    if (node.metadata) {\n      yield node.metadata;\n    }\n    for (const childNode of node.children.values()) {\n      yield* this.traverse(childNode);\n    }\n  }\n  /**\n   * Extracts the path segments from a given route string.\n   *\n   * @param route - The route string from which to extract segments.\n   * @returns An array of path segments.\n   */\n  getPathSegments(route) {\n    return route.split('/').filter(Boolean);\n  }\n  /**\n   * Recursively traverses the route tree from a given node, attempting to match the remaining route segments.\n   * If the node is a leaf node (no more segments to match) and contains metadata, the node is yielded.\n   *\n   * This function prioritizes exact segment matches first, followed by wildcard matches (`*`),\n   * and finally deep wildcard matches (`**`) that consume all segments.\n   *\n   * @param segments - The array of route path segments to match against the route tree.\n   * @param node - The current node in the route tree to start traversal from. Defaults to the root node.\n   * @param currentIndex - The index of the segment in `remainingSegments` currently being matched.\n   * Defaults to `0` (the first segment).\n   *\n   * @returns The node that best matches the remaining segments or `undefined` if no match is found.\n   */\n  traverseBySegments(segments, node = this.root, currentIndex = 0) {\n    if (currentIndex >= segments.length) {\n      return node.metadata ? node : node.children.get('**');\n    }\n    if (!node.children.size) {\n      return undefined;\n    }\n    const segment = segments[currentIndex];\n    // 1. Attempt exact match with the current segment.\n    const exactMatch = node.children.get(segment);\n    if (exactMatch) {\n      const match = this.traverseBySegments(segments, exactMatch, currentIndex + 1);\n      if (match) {\n        return match;\n      }\n    }\n    // 2. Attempt wildcard match ('*').\n    const wildcardMatch = node.children.get('*');\n    if (wildcardMatch) {\n      const match = this.traverseBySegments(segments, wildcardMatch, currentIndex + 1);\n      if (match) {\n        return match;\n      }\n    }\n    // 3. Attempt double wildcard match ('**').\n    return node.children.get('**');\n  }\n  /**\n   * Creates an empty route tree node.\n   * This helper function is used during the tree construction.\n   *\n   * @returns A new, empty route tree node.\n   */\n  createEmptyRouteTreeNode() {\n    return {\n      children: new Map()\n    };\n  }\n}\n\n/**\n * The maximum number of module preload link elements that should be added for\n * initial scripts.\n */\nconst MODULE_PRELOAD_MAX = 10;\n/**\n * Regular expression to match a catch-all route pattern in a URL path,\n * specifically one that ends with '/**'.\n */\nconst CATCH_ALL_REGEXP = /\\/(\\*\\*)$/;\n/**\n * Regular expression to match segments preceded by a colon in a string.\n */\nconst URL_PARAMETER_REGEXP = /(?<!\\\\):([^/]+)/g;\n/**\n * An set of HTTP status codes that are considered valid for redirect responses.\n */\nconst VALID_REDIRECT_RESPONSE_CODES$1 = /*#__PURE__*/new Set([301, 302, 303, 307, 308]);\n/**\n * Handles a single route within the route tree and yields metadata or errors.\n *\n * @param options - Configuration options for handling the route.\n * @returns An async iterable iterator yielding `RouteTreeNodeMetadata` or an error object.\n */\nasync function* handleRoute(options) {\n  try {\n    const {\n      metadata,\n      currentRoutePath,\n      route,\n      compiler,\n      parentInjector,\n      serverConfigRouteTree,\n      entryPointToBrowserMapping,\n      invokeGetPrerenderParams,\n      includePrerenderFallbackRoutes\n    } = options;\n    const {\n      redirectTo,\n      loadChildren,\n      loadComponent,\n      children,\n      ɵentryName\n    } = route;\n    if (ɵentryName && loadComponent) {\n      appendPreloadToMetadata(ɵentryName, entryPointToBrowserMapping, metadata);\n    }\n    if (metadata.renderMode === RenderMode.Prerender) {\n      yield* handleSSGRoute(serverConfigRouteTree, typeof redirectTo === 'string' ? redirectTo : undefined, metadata, parentInjector, invokeGetPrerenderParams, includePrerenderFallbackRoutes);\n    } else if (redirectTo !== undefined) {\n      if (metadata.status && !VALID_REDIRECT_RESPONSE_CODES$1.has(metadata.status)) {\n        yield {\n          error: `The '${metadata.status}' status code is not a valid redirect response code. ` + `Please use one of the following redirect response codes: ${[...VALID_REDIRECT_RESPONSE_CODES$1.values()].join(', ')}.`\n        };\n      } else if (typeof redirectTo === 'string') {\n        yield {\n          ...metadata,\n          redirectTo: resolveRedirectTo(metadata.route, redirectTo)\n        };\n      } else {\n        yield metadata;\n      }\n    } else {\n      yield metadata;\n    }\n    // Recursively process child routes\n    if (children?.length) {\n      yield* traverseRoutesConfig({\n        ...options,\n        routes: children,\n        parentRoute: currentRoutePath,\n        parentPreloads: metadata.preload\n      });\n    }\n    // Load and process lazy-loaded child routes\n    if (loadChildren) {\n      if (ɵentryName) {\n        appendPreloadToMetadata(ɵentryName, entryPointToBrowserMapping, metadata);\n      }\n      const routeInjector = route.providers ? createEnvironmentInjector(route.providers, parentInjector.get(EnvironmentInjector), `Route: ${route.path}`) : parentInjector;\n      const loadedChildRoutes = await _loadChildren(route, compiler, routeInjector).toPromise();\n      if (loadedChildRoutes) {\n        const {\n          routes: childRoutes,\n          injector = routeInjector\n        } = loadedChildRoutes;\n        yield* traverseRoutesConfig({\n          ...options,\n          routes: childRoutes,\n          parentInjector: injector,\n          parentRoute: currentRoutePath,\n          parentPreloads: metadata.preload\n        });\n      }\n    }\n  } catch (error) {\n    yield {\n      error: `Error in handleRoute for '${options.currentRoutePath}': ${error.message}`\n    };\n  }\n}\n/**\n * Traverses an array of route configurations to generate route tree node metadata.\n *\n * This function processes each route and its children, handling redirects, SSG (Static Site Generation) settings,\n * and lazy-loaded routes. It yields route metadata for each route and its potential variants.\n *\n * @param options - The configuration options for traversing routes.\n * @returns An async iterable iterator yielding either route tree node metadata or an error object with an error message.\n */\nasync function* traverseRoutesConfig(options) {\n  const {\n    routes: routeConfigs,\n    parentPreloads,\n    parentRoute,\n    serverConfigRouteTree\n  } = options;\n  for (const route of routeConfigs) {\n    const {\n      matcher,\n      path = matcher ? '**' : ''\n    } = route;\n    const currentRoutePath = joinUrlParts(parentRoute, path);\n    if (matcher && serverConfigRouteTree) {\n      const matches = [];\n      for (const matchedMetaData of serverConfigRouteTree.traverse()) {\n        if (matchedMetaData.route.startsWith(currentRoutePath)) {\n          matches.push(matchedMetaData);\n        }\n      }\n      if (!matches.length) {\n        const matchedMetaData = serverConfigRouteTree.match(currentRoutePath);\n        if (matchedMetaData) {\n          matches.push(matchedMetaData);\n        }\n      }\n      for (const matchedMetaData of matches) {\n        matchedMetaData.presentInClientRouter = true;\n        if (matchedMetaData.renderMode === RenderMode.Prerender) {\n          yield {\n            error: `The route '${stripLeadingSlash(currentRoutePath)}' is set for prerendering but has a defined matcher. ` + `Routes with matchers cannot use prerendering. Please specify a different 'renderMode'.`\n          };\n          continue;\n        }\n        yield* handleRoute({\n          ...options,\n          currentRoutePath,\n          route,\n          metadata: {\n            ...matchedMetaData,\n            preload: parentPreloads,\n            route: matchedMetaData.route,\n            presentInClientRouter: undefined\n          }\n        });\n      }\n      if (!matches.length) {\n        yield {\n          error: `The route '${stripLeadingSlash(currentRoutePath)}' has a defined matcher but does not ` + 'match any route in the server routing configuration. Please ensure this route is added to the server routing configuration.'\n        };\n      }\n      continue;\n    }\n    let matchedMetaData;\n    if (serverConfigRouteTree) {\n      matchedMetaData = serverConfigRouteTree.match(currentRoutePath);\n      if (!matchedMetaData) {\n        yield {\n          error: `The '${stripLeadingSlash(currentRoutePath)}' route does not match any route defined in the server routing configuration. ` + 'Please ensure this route is added to the server routing configuration.'\n        };\n        continue;\n      }\n      matchedMetaData.presentInClientRouter = true;\n    }\n    yield* handleRoute({\n      ...options,\n      metadata: {\n        renderMode: RenderMode.Prerender,\n        ...matchedMetaData,\n        preload: parentPreloads,\n        // Match Angular router behavior\n        // ['one', 'two', ''] -> 'one/two/'\n        // ['one', 'two', 'three'] -> 'one/two/three'\n        route: path === '' ? addTrailingSlash(currentRoutePath) : currentRoutePath,\n        presentInClientRouter: undefined\n      },\n      currentRoutePath,\n      route\n    });\n  }\n}\n/**\n * Appends preload information to the metadata object based on the specified entry-point and chunk mappings.\n *\n * This function extracts preload data for a given entry-point from the provided chunk mappings. It adds the\n * corresponding browser bundles to the metadata's preload list, ensuring no duplicates and limiting the total\n * preloads to a predefined maximum.\n */\nfunction appendPreloadToMetadata(entryName, entryPointToBrowserMapping, metadata) {\n  const existingPreloads = metadata.preload ?? [];\n  if (!entryPointToBrowserMapping || existingPreloads.length >= MODULE_PRELOAD_MAX) {\n    return;\n  }\n  const preload = entryPointToBrowserMapping[entryName];\n  if (!preload?.length) {\n    return;\n  }\n  // Merge existing preloads with new ones, ensuring uniqueness and limiting the total to the maximum allowed.\n  const combinedPreloads = new Set(existingPreloads);\n  for (const href of preload) {\n    combinedPreloads.add(href);\n    if (combinedPreloads.size === MODULE_PRELOAD_MAX) {\n      break;\n    }\n  }\n  metadata.preload = Array.from(combinedPreloads);\n}\n/**\n * Handles SSG (Static Site Generation) routes by invoking `getPrerenderParams` and yielding\n * all parameterized paths, returning any errors encountered.\n *\n * @param serverConfigRouteTree - The tree representing the server's routing setup.\n * @param redirectTo - Optional path to redirect to, if specified.\n * @param metadata - The metadata associated with the route tree node.\n * @param parentInjector - The dependency injection container for the parent route.\n * @param invokeGetPrerenderParams - A flag indicating whether to invoke the `getPrerenderParams` function.\n * @param includePrerenderFallbackRoutes - A flag indicating whether to include fallback routes in the result.\n * @returns An async iterable iterator that yields route tree node metadata for each SSG path or errors.\n */\nasync function* handleSSGRoute(serverConfigRouteTree, redirectTo, metadata, parentInjector, invokeGetPrerenderParams, includePrerenderFallbackRoutes) {\n  if (metadata.renderMode !== RenderMode.Prerender) {\n    throw new Error(`'handleSSGRoute' was called for a route which rendering mode is not prerender.`);\n  }\n  const {\n    route: currentRoutePath,\n    fallback,\n    ...meta\n  } = metadata;\n  const getPrerenderParams = 'getPrerenderParams' in meta ? meta.getPrerenderParams : undefined;\n  if ('getPrerenderParams' in meta) {\n    delete meta['getPrerenderParams'];\n  }\n  if (redirectTo !== undefined) {\n    meta.redirectTo = resolveRedirectTo(currentRoutePath, redirectTo);\n  }\n  const isCatchAllRoute = CATCH_ALL_REGEXP.test(currentRoutePath);\n  if (isCatchAllRoute && !getPrerenderParams || !isCatchAllRoute && !URL_PARAMETER_REGEXP.test(currentRoutePath)) {\n    // Route has no parameters\n    yield {\n      ...meta,\n      route: currentRoutePath\n    };\n    return;\n  }\n  if (invokeGetPrerenderParams) {\n    if (!getPrerenderParams) {\n      yield {\n        error: `The '${stripLeadingSlash(currentRoutePath)}' route uses prerendering and includes parameters, but 'getPrerenderParams' ` + `is missing. Please define 'getPrerenderParams' function for this route in your server routing configuration ` + `or specify a different 'renderMode'.`\n      };\n      return;\n    }\n    if (serverConfigRouteTree) {\n      // Automatically resolve dynamic parameters for nested routes.\n      const catchAllRoutePath = isCatchAllRoute ? currentRoutePath : joinUrlParts(currentRoutePath, '**');\n      const match = serverConfigRouteTree.match(catchAllRoutePath);\n      if (match && match.renderMode === RenderMode.Prerender && !('getPrerenderParams' in match)) {\n        serverConfigRouteTree.insert(catchAllRoutePath, {\n          ...match,\n          presentInClientRouter: true,\n          getPrerenderParams\n        });\n      }\n    }\n    const parameters = await runInInjectionContext(parentInjector, () => getPrerenderParams());\n    try {\n      for (const params of parameters) {\n        const replacer = handlePrerenderParamsReplacement(params, currentRoutePath);\n        const routeWithResolvedParams = currentRoutePath.replace(URL_PARAMETER_REGEXP, replacer).replace(CATCH_ALL_REGEXP, replacer);\n        yield {\n          ...meta,\n          route: routeWithResolvedParams,\n          redirectTo: redirectTo === undefined ? undefined : resolveRedirectTo(routeWithResolvedParams, redirectTo)\n        };\n      }\n    } catch (error) {\n      yield {\n        error: `${error.message}`\n      };\n      return;\n    }\n  }\n  // Handle fallback render modes\n  if (includePrerenderFallbackRoutes && (fallback !== PrerenderFallback.None || !invokeGetPrerenderParams)) {\n    yield {\n      ...meta,\n      route: currentRoutePath,\n      renderMode: fallback === PrerenderFallback.Client ? RenderMode.Client : RenderMode.Server\n    };\n  }\n}\n/**\n * Creates a replacer function used for substituting parameter placeholders in a route path\n * with their corresponding values provided in the `params` object.\n *\n * @param params - An object mapping parameter names to their string values.\n * @param currentRoutePath - The current route path, used for constructing error messages.\n * @returns A function that replaces a matched parameter placeholder (e.g., ':id') with its corresponding value.\n */\nfunction handlePrerenderParamsReplacement(params, currentRoutePath) {\n  return match => {\n    const parameterName = match.slice(1);\n    const value = params[parameterName];\n    if (typeof value !== 'string') {\n      throw new Error(`The 'getPrerenderParams' function defined for the '${stripLeadingSlash(currentRoutePath)}' route ` + `returned a non-string value for parameter '${parameterName}'. ` + `Please make sure the 'getPrerenderParams' function returns values for all parameters ` + 'specified in this route.');\n    }\n    return parameterName === '**' ? `/${value}` : value;\n  };\n}\n/**\n * Resolves the `redirectTo` property for a given route.\n *\n * This function processes the `redirectTo` property to ensure that it correctly\n * resolves relative to the current route path. If `redirectTo` is an absolute path,\n * it is returned as is. If it is a relative path, it is resolved based on the current route path.\n *\n * @param routePath - The current route path.\n * @param redirectTo - The target path for redirection.\n * @returns The resolved redirect path as a string.\n */\nfunction resolveRedirectTo(routePath, redirectTo) {\n  if (redirectTo[0] === '/') {\n    // If the redirectTo path is absolute, return it as is.\n    return redirectTo;\n  }\n  // Resolve relative redirectTo based on the current route path.\n  const segments = routePath.replace(URL_PARAMETER_REGEXP, '*').split('/');\n  segments.pop(); // Remove the last segment to make it relative.\n  return joinUrlParts(...segments, redirectTo);\n}\n/**\n * Builds a server configuration route tree from the given server routes configuration.\n *\n * @param serverRoutesConfig - The server routes to be used for configuration.\n\n * @returns An object containing:\n * - `serverConfigRouteTree`: A populated `RouteTree` instance, which organizes the server routes\n *   along with their additional metadata.\n * - `errors`: An array of strings that list any errors encountered during the route tree construction\n *   process, such as invalid paths.\n */\nfunction buildServerConfigRouteTree({\n  routes,\n  appShellRoute\n}) {\n  const serverRoutes = [...routes];\n  if (appShellRoute !== undefined) {\n    serverRoutes.unshift({\n      path: appShellRoute,\n      renderMode: RenderMode.Prerender\n    });\n  }\n  const serverConfigRouteTree = new RouteTree();\n  const errors = [];\n  for (const {\n    path,\n    ...metadata\n  } of serverRoutes) {\n    if (path[0] === '/') {\n      errors.push(`Invalid '${path}' route configuration: the path cannot start with a slash.`);\n      continue;\n    }\n    if ('getPrerenderParams' in metadata && (path.includes('/*/') || path.endsWith('/*'))) {\n      errors.push(`Invalid '${path}' route configuration: 'getPrerenderParams' cannot be used with a '*' route.`);\n      continue;\n    }\n    serverConfigRouteTree.insert(path, metadata);\n  }\n  return {\n    serverConfigRouteTree,\n    errors\n  };\n}\n/**\n * Retrieves routes from the given Angular application.\n *\n * This function initializes an Angular platform, bootstraps the application or module,\n * and retrieves routes from the Angular router configuration. It handles both module-based\n * and function-based bootstrapping. It yields the resulting routes as `RouteTreeNodeMetadata` objects or errors.\n *\n * @param bootstrap - A function that returns a promise resolving to an `ApplicationRef` or an Angular module to bootstrap.\n * @param document - The initial HTML document used for server-side rendering.\n * This document is necessary to render the application on the server.\n * @param url - The URL for server-side rendering. The URL is used to configure `ServerPlatformLocation`. This configuration is crucial\n * for ensuring that API requests for relative paths succeed, which is essential for accurate route extraction.\n * @param invokeGetPrerenderParams - A boolean flag indicating whether to invoke `getPrerenderParams` for parameterized SSG routes\n * to handle prerendering paths. Defaults to `false`.\n * @param includePrerenderFallbackRoutes - A flag indicating whether to include fallback routes in the result. Defaults to `true`.\n * @param entryPointToBrowserMapping - Maps the entry-point name to the associated JavaScript browser bundles.\n *\n * @returns A promise that resolves to an object of type `AngularRouterConfigResult` or errors.\n */\nasync function getRoutesFromAngularRouterConfig(bootstrap, document, url, invokeGetPrerenderParams = false, includePrerenderFallbackRoutes = true, entryPointToBrowserMapping = undefined) {\n  const {\n    protocol,\n    host\n  } = url;\n  // Create and initialize the Angular platform for server-side rendering.\n  const platformRef = platformServer([{\n    provide: INITIAL_CONFIG,\n    useValue: {\n      document,\n      url: `${protocol}//${host}/`\n    }\n  }, {\n    // An Angular Console Provider that does not print a set of predefined logs.\n    provide: _Console,\n    // Using `useClass` would necessitate decorating `Console` with `@Injectable`,\n    // which would require switching from `ts_library` to `ng_module`. This change\n    // would also necessitate various patches of `@angular/bazel` to support ESM.\n    useFactory: () => new Console()\n  }, {\n    provide: _ENABLE_ROOT_COMPONENT_BOOTSTRAP,\n    useValue: false\n  }]);\n  try {\n    let applicationRef;\n    if (isNgModule(bootstrap)) {\n      const moduleRef = await platformRef.bootstrapModule(bootstrap);\n      applicationRef = moduleRef.injector.get(ApplicationRef);\n    } else {\n      applicationRef = await bootstrap({\n        platformRef\n      });\n    }\n    const injector = applicationRef.injector;\n    const router = injector.get(Router);\n    // Workaround to unblock navigation when `withEnabledBlockingInitialNavigation()` is used.\n    // This is necessary because route extraction disables component bootstrapping.\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    router.navigationTransitions.afterPreactivation()?.next?.();\n    // Wait until the application is stable.\n    await applicationRef.whenStable();\n    const errors = [];\n    const rawBaseHref = injector.get(APP_BASE_HREF, null, {\n      optional: true\n    }) ?? injector.get(PlatformLocation).getBaseHrefFromDOM();\n    const {\n      pathname: baseHref\n    } = new URL(rawBaseHref, 'http://localhost');\n    const compiler = injector.get(Compiler);\n    const serverRoutesConfig = injector.get(SERVER_ROUTES_CONFIG, null, {\n      optional: true\n    });\n    let serverConfigRouteTree;\n    if (serverRoutesConfig) {\n      const result = buildServerConfigRouteTree(serverRoutesConfig);\n      serverConfigRouteTree = result.serverConfigRouteTree;\n      errors.push(...result.errors);\n    }\n    if (errors.length) {\n      return {\n        baseHref,\n        routes: [],\n        errors\n      };\n    }\n    const routesResults = [];\n    if (router.config.length) {\n      // Retrieve all routes from the Angular router configuration.\n      const traverseRoutes = traverseRoutesConfig({\n        routes: router.config,\n        compiler,\n        parentInjector: injector,\n        parentRoute: '',\n        serverConfigRouteTree,\n        invokeGetPrerenderParams,\n        includePrerenderFallbackRoutes,\n        entryPointToBrowserMapping\n      });\n      const seenRoutes = new Set();\n      for await (const routeMetadata of traverseRoutes) {\n        if ('error' in routeMetadata) {\n          errors.push(routeMetadata.error);\n          continue;\n        }\n        // If a result already exists for the exact same route, subsequent matches should be ignored.\n        // This aligns with Angular's app router behavior, which prioritizes the first route.\n        const routePath = routeMetadata.route;\n        if (!seenRoutes.has(routePath)) {\n          routesResults.push(routeMetadata);\n          seenRoutes.add(routePath);\n        }\n      }\n      // This timeout is necessary to prevent 'adev' from hanging in production builds.\n      // The exact cause is unclear, but removing it leads to the issue.\n      await new Promise(resolve => setTimeout(resolve, 0));\n      if (serverConfigRouteTree) {\n        for (const {\n          route,\n          presentInClientRouter\n        } of serverConfigRouteTree.traverse()) {\n          if (presentInClientRouter || route.endsWith('/**')) {\n            // Skip if matched or it's the catch-all route.\n            continue;\n          }\n          errors.push(`The '${stripLeadingSlash(route)}' server route does not match any routes defined in the Angular ` + `routing configuration (typically provided as a part of the 'provideRouter' call). ` + 'Please make sure that the mentioned server route is present in the Angular routing configuration.');\n        }\n      }\n    } else {\n      const rootRouteMetadata = serverConfigRouteTree?.match('') ?? {\n        route: '',\n        renderMode: RenderMode.Prerender\n      };\n      routesResults.push({\n        ...rootRouteMetadata,\n        // Matched route might be `/*` or `/**`, which would make Angular serve all routes rather than just `/`.\n        // So we limit to just `/` for the empty app router case.\n        route: ''\n      });\n    }\n    return {\n      baseHref,\n      routes: routesResults,\n      errors,\n      appShellRoute: serverRoutesConfig?.appShellRoute\n    };\n  } finally {\n    platformRef.destroy();\n  }\n}\n/**\n * Asynchronously extracts routes from the Angular application configuration\n * and creates a `RouteTree` to manage server-side routing.\n *\n * @param options - An object containing the following options:\n *  - `url`: The URL for server-side rendering. The URL is used to configure `ServerPlatformLocation`. This configuration is crucial\n *     for ensuring that API requests for relative paths succeed, which is essential for accurate route extraction.\n *     See:\n *      - https://github.com/angular/angular/blob/d608b857c689d17a7ffa33bbb510301014d24a17/packages/platform-server/src/location.ts#L51\n *      - https://github.com/angular/angular/blob/6882cc7d9eed26d3caeedca027452367ba25f2b9/packages/platform-server/src/http.ts#L44\n *  - `manifest`: An optional `AngularAppManifest` that contains the application's routing and configuration details.\n *     If not provided, the default manifest is retrieved using `getAngularAppManifest()`.\n *  - `invokeGetPrerenderParams`: A boolean flag indicating whether to invoke `getPrerenderParams` for parameterized SSG routes\n *     to handle prerendering paths. Defaults to `false`.\n *  - `includePrerenderFallbackRoutes`: A flag indicating whether to include fallback routes in the result. Defaults to `true`.\n *  - `signal`: An optional `AbortSignal` that can be used to abort the operation.\n *\n * @returns A promise that resolves to an object containing:\n *  - `routeTree`: A populated `RouteTree` containing all extracted routes from the Angular application.\n *  - `appShellRoute`: The specified route for the app-shell, if configured.\n *  - `errors`: An array of strings representing any errors encountered during the route extraction process.\n */\nfunction extractRoutesAndCreateRouteTree(options) {\n  const {\n    url,\n    manifest = getAngularAppManifest(),\n    invokeGetPrerenderParams = false,\n    includePrerenderFallbackRoutes = true,\n    signal\n  } = options;\n  async function extract() {\n    const routeTree = new RouteTree();\n    const document = await new ServerAssets(manifest).getIndexServerHtml().text();\n    const bootstrap = await manifest.bootstrap();\n    const {\n      baseHref,\n      appShellRoute,\n      routes,\n      errors\n    } = await getRoutesFromAngularRouterConfig(bootstrap, document, url, invokeGetPrerenderParams, includePrerenderFallbackRoutes, manifest.entryPointToBrowserMapping);\n    for (const {\n      route,\n      ...metadata\n    } of routes) {\n      if (metadata.redirectTo !== undefined) {\n        metadata.redirectTo = joinUrlParts(baseHref, metadata.redirectTo);\n      }\n      // Remove undefined fields\n      // Helps avoid unnecessary test updates\n      for (const [key, value] of Object.entries(metadata)) {\n        if (value === undefined) {\n          // eslint-disable-next-line @typescript-eslint/no-explicit-any\n          delete metadata[key];\n        }\n      }\n      const fullRoute = joinUrlParts(baseHref, route);\n      routeTree.insert(fullRoute, metadata);\n    }\n    return {\n      appShellRoute,\n      routeTree,\n      errors\n    };\n  }\n  return signal ? promiseWithAbort(extract(), signal, 'Routes extraction') : extract();\n}\n\n/**\n * Manages a collection of hooks and provides methods to register and execute them.\n * Hooks are functions that can be invoked with specific arguments to allow modifications or enhancements.\n */\nclass Hooks {\n  /**\n   * A map of hook names to arrays of hook functions.\n   * Each hook name can have multiple associated functions, which are executed in sequence.\n   */\n  store = /*#__PURE__*/new Map();\n  /**\n   * Executes all hooks associated with the specified name, passing the given argument to each hook function.\n   * The hooks are invoked sequentially, and the argument may be modified by each hook.\n   *\n   * @template Hook - The type of the hook name. It should be one of the keys of `HooksMapping`.\n   * @param name - The name of the hook whose functions will be executed.\n   * @param context - The input value to be passed to each hook function. The value is mutated by each hook function.\n   * @returns A promise that resolves once all hook functions have been executed.\n   *\n   * @example\n   * ```typescript\n   * const hooks = new Hooks();\n   * hooks.on('html:transform:pre', async (ctx) => {\n   *   ctx.html = ctx.html.replace(/foo/g, 'bar');\n   *   return ctx.html;\n   * });\n   * const result = await hooks.run('html:transform:pre', { html: '<div>foo</div>' });\n   * console.log(result); // '<div>bar</div>'\n   * ```\n   * @internal\n   */\n  async run(name, context) {\n    const hooks = this.store.get(name);\n    switch (name) {\n      case 'html:transform:pre':\n        {\n          if (!hooks) {\n            return context.html;\n          }\n          const ctx = {\n            ...context\n          };\n          for (const hook of hooks) {\n            ctx.html = await hook(ctx);\n          }\n          return ctx.html;\n        }\n      default:\n        throw new Error(`Running hook \"${name}\" is not supported.`);\n    }\n  }\n  /**\n   * Registers a new hook function under the specified hook name.\n   * This function should be a function that takes an argument of type `T` and returns a `string` or `Promise<string>`.\n   *\n   * @template Hook - The type of the hook name. It should be one of the keys of `HooksMapping`.\n   * @param name - The name of the hook under which the function will be registered.\n   * @param handler - A function to be executed when the hook is triggered. The handler will be called with an argument\n   *                  that may be modified by the hook functions.\n   *\n   * @remarks\n   * - If there are existing handlers registered under the given hook name, the new handler will be added to the list.\n   * - If no handlers are registered under the given hook name, a new list will be created with the handler as its first element.\n   *\n   * @example\n   * ```typescript\n   * hooks.on('html:transform:pre', async (ctx) => {\n   *   return ctx.html.replace(/foo/g, 'bar');\n   * });\n   * ```\n   */\n  on(name, handler) {\n    const hooks = this.store.get(name);\n    if (hooks) {\n      hooks.push(handler);\n    } else {\n      this.store.set(name, [handler]);\n    }\n  }\n  /**\n   * Checks if there are any hooks registered under the specified name.\n   *\n   * @param name - The name of the hook to check.\n   * @returns `true` if there are hooks registered under the specified name, otherwise `false`.\n   */\n  has(name) {\n    return !!this.store.get(name)?.length;\n  }\n}\n\n/**\n * Manages the application's server routing logic by building and maintaining a route tree.\n *\n * This class is responsible for constructing the route tree from the Angular application\n * configuration and using it to match incoming requests to the appropriate routes.\n */\nclass ServerRouter {\n  routeTree;\n  /**\n   * Creates an instance of the `ServerRouter`.\n   *\n   * @param routeTree - An instance of `RouteTree` that holds the routing information.\n   * The `RouteTree` is used to match request URLs to the appropriate route metadata.\n   */\n  constructor(routeTree) {\n    this.routeTree = routeTree;\n  }\n  /**\n   * Static property to track the ongoing build promise.\n   */\n  static #extractionPromise;\n  /**\n   * Creates or retrieves a `ServerRouter` instance based on the provided manifest and URL.\n   *\n   * If the manifest contains pre-built routes, a new `ServerRouter` is immediately created.\n   * Otherwise, it builds the router by extracting routes from the Angular configuration\n   * asynchronously. This method ensures that concurrent builds are prevented by re-using\n   * the same promise.\n   *\n   * @param manifest - An instance of `AngularAppManifest` that contains the route information.\n   * @param url - The URL for server-side rendering. The URL is needed to configure `ServerPlatformLocation`.\n   * This is necessary to ensure that API requests for relative paths succeed, which is crucial for correct route extraction.\n   * [Reference](https://github.com/angular/angular/blob/d608b857c689d17a7ffa33bbb510301014d24a17/packages/platform-server/src/location.ts#L51)\n   * @returns A promise resolving to a `ServerRouter` instance.\n   */\n  static from(manifest, url) {\n    if (manifest.routes) {\n      const routeTree = RouteTree.fromObject(manifest.routes);\n      return Promise.resolve(new ServerRouter(routeTree));\n    }\n    // Create and store a new promise for the build process.\n    // This prevents concurrent builds by re-using the same promise.\n    ServerRouter.#extractionPromise ??= extractRoutesAndCreateRouteTree({\n      url,\n      manifest\n    }).then(({\n      routeTree,\n      errors\n    }) => {\n      if (errors.length > 0) {\n        throw new Error('Error(s) occurred while extracting routes:\\n' + errors.map(error => `- ${error}`).join('\\n'));\n      }\n      return new ServerRouter(routeTree);\n    }).finally(() => {\n      ServerRouter.#extractionPromise = undefined;\n    });\n    return ServerRouter.#extractionPromise;\n  }\n  /**\n   * Matches a request URL against the route tree to retrieve route metadata.\n   *\n   * This method strips 'index.html' from the URL if it is present and then attempts\n   * to find a match in the route tree. If a match is found, it returns the associated\n   * route metadata; otherwise, it returns `undefined`.\n   *\n   * @param url - The URL to be matched against the route tree.\n   * @returns The metadata for the matched route or `undefined` if no match is found.\n   */\n  match(url) {\n    // Strip 'index.html' from URL if present.\n    // A request to `http://www.example.com/page/index.html` will render the Angular route corresponding to `http://www.example.com/page`.\n    let {\n      pathname\n    } = stripIndexHtmlFromURL(url);\n    pathname = stripMatrixParams(pathname);\n    pathname = decodeURIComponent(pathname);\n    return this.routeTree.match(pathname);\n  }\n}\n\n/**\n * Generates a SHA-256 hash of the provided string.\n *\n * @param data - The input string to be hashed.\n * @returns A promise that resolves to the SHA-256 hash of the input,\n * represented as a hexadecimal string.\n */\nasync function sha256(data) {\n  const encodedData = new TextEncoder().encode(data);\n  const hashBuffer = await crypto.subtle.digest('SHA-256', encodedData);\n  const hashParts = [];\n  for (const h of new Uint8Array(hashBuffer)) {\n    hashParts.push(h.toString(16).padStart(2, '0'));\n  }\n  return hashParts.join('');\n}\n\n/**\n * Pattern used to extract the media query set by Beasties in an `onload` handler.\n */\nconst MEDIA_SET_HANDLER_PATTERN = /^this\\.media=[\"'](.*)[\"'];?$/;\n/**\n * Name of the attribute used to save the Beasties media query so it can be re-assigned on load.\n */\nconst CSP_MEDIA_ATTR = 'ngCspMedia';\n/**\n * Script that dynamically updates the `media` attribute of `<link>` tags based on a custom attribute (`CSP_MEDIA_ATTR`).\n *\n * NOTE:\n * We do not use `document.querySelectorAll('link').forEach((s) => s.addEventListener('load', ...)`\n * because load events are not always triggered reliably on Chrome.\n * See: https://github.com/angular/angular-cli/issues/26932 and https://crbug.com/1521256\n *\n * The script:\n * - Ensures the event target is a `<link>` tag with the `CSP_MEDIA_ATTR` attribute.\n * - Updates the `media` attribute with the value of `CSP_MEDIA_ATTR` and then removes the attribute.\n * - Removes the event listener when all relevant `<link>` tags have been processed.\n * - Uses event capturing (the `true` parameter) since load events do not bubble up the DOM.\n */\nconst LINK_LOAD_SCRIPT_CONTENT = /* @__PURE__ */(() => `(() => {\n  const CSP_MEDIA_ATTR = '${CSP_MEDIA_ATTR}';\n  const documentElement = document.documentElement;\n\n  // Listener for load events on link tags.\n  const listener = (e) => {\n    const target = e.target;\n    if (\n      !target ||\n      target.tagName !== 'LINK' ||\n      !target.hasAttribute(CSP_MEDIA_ATTR)\n    ) {\n      return;\n    }\n\n    target.media = target.getAttribute(CSP_MEDIA_ATTR);\n    target.removeAttribute(CSP_MEDIA_ATTR);\n\n    if (!document.head.querySelector(\\`link[\\${CSP_MEDIA_ATTR}]\\`)) {\n      documentElement.removeEventListener('load', listener);\n    }\n  };\n\n  documentElement.addEventListener('load', listener, true);\n})();`)();\nclass BeastiesBase extends Beasties {}\n/* eslint-enable @typescript-eslint/no-unsafe-declaration-merging */\nclass InlineCriticalCssProcessor extends BeastiesBase {\n  readFile;\n  outputPath;\n  addedCspScriptsDocuments = /*#__PURE__*/new WeakSet();\n  documentNonces = /*#__PURE__*/new WeakMap();\n  constructor(readFile, outputPath) {\n    super({\n      logger: {\n        // eslint-disable-next-line no-console\n        warn: s => console.warn(s),\n        // eslint-disable-next-line no-console\n        error: s => console.error(s),\n        info: () => {}\n      },\n      logLevel: 'warn',\n      path: outputPath,\n      publicPath: undefined,\n      compress: false,\n      pruneSource: false,\n      reduceInlineStyles: false,\n      mergeStylesheets: false,\n      // Note: if `preload` changes to anything other than `media`, the logic in\n      // `embedLinkedStylesheet` will have to be updated.\n      preload: 'media',\n      noscriptFallback: true,\n      inlineFonts: true\n    });\n    this.readFile = readFile;\n    this.outputPath = outputPath;\n  }\n  /**\n   * Override of the Beasties `embedLinkedStylesheet` method\n   * that makes it work with Angular's CSP APIs.\n   */\n  async embedLinkedStylesheet(link, document) {\n    if (link.getAttribute('media') === 'print' && link.next?.name === 'noscript') {\n      // Workaround for https://github.com/GoogleChromeLabs/critters/issues/64\n      // NB: this is only needed for the webpack based builders.\n      const media = link.getAttribute('onload')?.match(MEDIA_SET_HANDLER_PATTERN);\n      if (media) {\n        link.removeAttribute('onload');\n        link.setAttribute('media', media[1]);\n        link?.next?.remove();\n      }\n    }\n    const returnValue = await super.embedLinkedStylesheet(link, document);\n    const cspNonce = this.findCspNonce(document);\n    if (cspNonce) {\n      const beastiesMedia = link.getAttribute('onload')?.match(MEDIA_SET_HANDLER_PATTERN);\n      if (beastiesMedia) {\n        // If there's a Beasties-generated `onload` handler and the file has an Angular CSP nonce,\n        // we have to remove the handler, because it's incompatible with CSP. We save the value\n        // in a different attribute and we generate a script tag with the nonce that uses\n        // `addEventListener` to apply the media query instead.\n        link.removeAttribute('onload');\n        link.setAttribute(CSP_MEDIA_ATTR, beastiesMedia[1]);\n        this.conditionallyInsertCspLoadingScript(document, cspNonce, link);\n      }\n      // Ideally we would hook in at the time Beasties inserts the `style` tags, but there isn't\n      // a way of doing that at the moment so we fall back to doing it any time a `link` tag is\n      // inserted. We mitigate it by only iterating the direct children of the `<head>` which\n      // should be pretty shallow.\n      document.head.children.forEach(child => {\n        if (child.tagName === 'style' && !child.hasAttribute('nonce')) {\n          child.setAttribute('nonce', cspNonce);\n        }\n      });\n    }\n    return returnValue;\n  }\n  /**\n   * Finds the CSP nonce for a specific document.\n   */\n  findCspNonce(document) {\n    if (this.documentNonces.has(document)) {\n      // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n      return this.documentNonces.get(document);\n    }\n    // HTML attribute are case-insensitive, but the parser used by Beasties is case-sensitive.\n    const nonceElement = document.querySelector('[ngCspNonce], [ngcspnonce]');\n    const cspNonce = nonceElement?.getAttribute('ngCspNonce') || nonceElement?.getAttribute('ngcspnonce') || null;\n    this.documentNonces.set(document, cspNonce);\n    return cspNonce;\n  }\n  /**\n   * Inserts the `script` tag that swaps the critical CSS at runtime,\n   * if one hasn't been inserted into the document already.\n   */\n  conditionallyInsertCspLoadingScript(document, nonce, link) {\n    if (this.addedCspScriptsDocuments.has(document)) {\n      return;\n    }\n    if (document.head.textContent.includes(LINK_LOAD_SCRIPT_CONTENT)) {\n      // Script was already added during the build.\n      this.addedCspScriptsDocuments.add(document);\n      return;\n    }\n    const script = document.createElement('script');\n    script.setAttribute('nonce', nonce);\n    script.textContent = LINK_LOAD_SCRIPT_CONTENT;\n    // Prepend the script to the head since it needs to\n    // run as early as possible, before the `link` tags.\n    document.head.insertBefore(script, link);\n    this.addedCspScriptsDocuments.add(document);\n  }\n}\n\n/**\n * A Least Recently Used (LRU) cache implementation.\n *\n * This cache stores a fixed number of key-value pairs, and when the cache exceeds its capacity,\n * the least recently accessed items are evicted.\n *\n * @template Key - The type of the cache keys.\n * @template Value - The type of the cache values.\n */\nclass LRUCache {\n  /**\n   * The maximum number of items the cache can hold.\n   */\n  capacity;\n  /**\n   * Internal storage for the cache, mapping keys to their associated nodes in the linked list.\n   */\n  cache = /*#__PURE__*/new Map();\n  /**\n   * Head of the doubly linked list, representing the most recently used item.\n   */\n  head;\n  /**\n   * Tail of the doubly linked list, representing the least recently used item.\n   */\n  tail;\n  /**\n   * Creates a new LRUCache instance.\n   * @param capacity The maximum number of items the cache can hold.\n   */\n  constructor(capacity) {\n    this.capacity = capacity;\n  }\n  /**\n   * Gets the value associated with the given key.\n   * @param key The key to retrieve the value for.\n   * @returns The value associated with the key, or undefined if the key is not found.\n   */\n  get(key) {\n    const node = this.cache.get(key);\n    if (node) {\n      this.moveToHead(node);\n      return node.value;\n    }\n    return undefined;\n  }\n  /**\n   * Puts a key-value pair into the cache.\n   * If the key already exists, the value is updated.\n   * If the cache is full, the least recently used item is evicted.\n   * @param key The key to insert or update.\n   * @param value The value to associate with the key.\n   */\n  put(key, value) {\n    const cachedNode = this.cache.get(key);\n    if (cachedNode) {\n      // Update existing node\n      cachedNode.value = value;\n      this.moveToHead(cachedNode);\n      return;\n    }\n    // Create a new node\n    const newNode = {\n      key,\n      value,\n      prev: undefined,\n      next: undefined\n    };\n    this.cache.set(key, newNode);\n    this.addToHead(newNode);\n    if (this.cache.size > this.capacity) {\n      // Evict the LRU item\n      const tail = this.removeTail();\n      if (tail) {\n        this.cache.delete(tail.key);\n      }\n    }\n  }\n  /**\n   * Adds a node to the head of the linked list.\n   * @param node The node to add.\n   */\n  addToHead(node) {\n    node.next = this.head;\n    node.prev = undefined;\n    if (this.head) {\n      this.head.prev = node;\n    }\n    this.head = node;\n    if (!this.tail) {\n      this.tail = node;\n    }\n  }\n  /**\n   * Removes a node from the linked list.\n   * @param node The node to remove.\n   */\n  removeNode(node) {\n    if (node.prev) {\n      node.prev.next = node.next;\n    } else {\n      this.head = node.next;\n    }\n    if (node.next) {\n      node.next.prev = node.prev;\n    } else {\n      this.tail = node.prev;\n    }\n  }\n  /**\n   * Moves a node to the head of the linked list.\n   * @param node The node to move.\n   */\n  moveToHead(node) {\n    this.removeNode(node);\n    this.addToHead(node);\n  }\n  /**\n   * Removes the tail node from the linked list.\n   * @returns The removed tail node, or undefined if the list is empty.\n   */\n  removeTail() {\n    const node = this.tail;\n    if (node) {\n      this.removeNode(node);\n    }\n    return node;\n  }\n}\n\n/**\n * An set of HTTP status codes that are considered valid for redirect responses.\n */\nconst VALID_REDIRECT_RESPONSE_CODES = /*#__PURE__*/new Set([301, 302, 303, 307, 308]);\n/**\n * Checks if the given HTTP status code is a valid redirect response code.\n *\n * @param code The HTTP status code to check.\n * @returns `true` if the code is a valid redirect response code, `false` otherwise.\n */\nfunction isValidRedirectResponseCode(code) {\n  return VALID_REDIRECT_RESPONSE_CODES.has(code);\n}\n/**\n * Creates an HTTP redirect response with a specified location and status code.\n *\n * @param location - The URL to which the response should redirect.\n * @param status - The HTTP status code for the redirection. Defaults to 302 (Found).\n *                 See: https://developer.mozilla.org/en-US/docs/Web/API/Response/redirect_static#status\n * @param headers - Additional headers to include in the response.\n * @returns A `Response` object representing the HTTP redirect.\n */\nfunction createRedirectResponse(location, status = 302, headers) {\n  if (ngDevMode && !isValidRedirectResponseCode(status)) {\n    throw new Error(`Invalid redirect status code: ${status}. ` + `Please use one of the following redirect response codes: ${[...VALID_REDIRECT_RESPONSE_CODES.values()].join(', ')}.`);\n  }\n  const resHeaders = new Headers(headers);\n  if (ngDevMode && resHeaders.has('location')) {\n    // eslint-disable-next-line no-console\n    console.warn(`Location header \"${resHeaders.get('location')}\" will ignored and set to \"${location}\".`);\n  }\n  // Ensure unique values for Vary header\n  const varyArray = resHeaders.get('Vary')?.split(',') ?? [];\n  const varySet = new Set(['X-Forwarded-Prefix']);\n  for (const vary of varyArray) {\n    const value = vary.trim();\n    if (value) {\n      varySet.add(value);\n    }\n  }\n  resHeaders.set('Vary', [...varySet].join(', '));\n  resHeaders.set('Location', location);\n  return new Response(null, {\n    status,\n    headers: resHeaders\n  });\n}\n\n/**\n * Maximum number of critical CSS entries the cache can store.\n * This value determines the capacity of the LRU (Least Recently Used) cache, which stores critical CSS for pages.\n */\nconst MAX_INLINE_CSS_CACHE_ENTRIES = 50;\n/**\n * A mapping of `RenderMode` enum values to corresponding string representations.\n *\n * This record is used to map each `RenderMode` to a specific string value that represents\n * the server context. The string values are used internally to differentiate\n * between various rendering strategies when processing routes.\n *\n * - `RenderMode.Prerender` maps to `'ssg'` (Static Site Generation).\n * - `RenderMode.Server` maps to `'ssr'` (Server-Side Rendering).\n * - `RenderMode.Client` maps to an empty string `''` (Client-Side Rendering, no server context needed).\n */\nconst SERVER_CONTEXT_VALUE = {\n  [RenderMode.Prerender]: 'ssg',\n  [RenderMode.Server]: 'ssr',\n  [RenderMode.Client]: ''\n};\n/**\n * Represents a locale-specific Angular server application managed by the server application engine.\n *\n * The `AngularServerApp` class handles server-side rendering and asset management for a specific locale.\n */\nclass AngularServerApp {\n  options;\n  /**\n   * Whether prerendered routes should be rendered on demand or served directly.\n   *\n   * @see {@link AngularServerAppOptions.allowStaticRouteRender} for more details.\n   */\n  allowStaticRouteRender;\n  /**\n   * Hooks for extending or modifying server behavior.\n   *\n   * @see {@link AngularServerAppOptions.hooks} for more details.\n   */\n  hooks;\n  /**\n   * Constructs an instance of `AngularServerApp`.\n   *\n   * @param options Optional configuration options for the server application.\n   */\n  constructor(options = {}) {\n    this.options = options;\n    this.allowStaticRouteRender = this.options.allowStaticRouteRender ?? false;\n    this.hooks = options.hooks ?? new Hooks();\n    if (this.manifest.inlineCriticalCss) {\n      this.inlineCriticalCssProcessor = new InlineCriticalCssProcessor(path => {\n        const fileName = path.split('/').pop() ?? path;\n        return this.assets.getServerAsset(fileName).text();\n      });\n    }\n  }\n  /**\n   * The manifest associated with this server application.\n   */\n  manifest = /*#__PURE__*/getAngularAppManifest();\n  /**\n   * An instance of ServerAsset that handles server-side asset.\n   */\n  assets = /*#__PURE__*/new ServerAssets(this.manifest);\n  /**\n   * The router instance used for route matching and handling.\n   */\n  router;\n  /**\n   * The `inlineCriticalCssProcessor` is responsible for handling critical CSS inlining.\n   */\n  inlineCriticalCssProcessor;\n  /**\n   * The bootstrap mechanism for the server application.\n   */\n  boostrap;\n  /**\n   * Decorder used to convert a string to a Uint8Array.\n   */\n  textDecoder = /*#__PURE__*/new TextEncoder();\n  /**\n   * A cache that stores critical CSS to avoid re-processing for every request, improving performance.\n   * This cache uses a Least Recently Used (LRU) eviction policy.\n   *\n   * @see {@link MAX_INLINE_CSS_CACHE_ENTRIES} for the maximum number of entries this cache can hold.\n   */\n  criticalCssLRUCache = /*#__PURE__*/new LRUCache(MAX_INLINE_CSS_CACHE_ENTRIES);\n  /**\n   * Handles an incoming HTTP request by serving prerendered content, performing server-side rendering,\n   * or delivering a static file for client-side rendered routes based on the `RenderMode` setting.\n   *\n   * @param request - The HTTP request to handle.\n   * @param requestContext - Optional context for rendering, such as metadata associated with the request.\n   * @returns A promise that resolves to the resulting HTTP response object, or `null` if no matching Angular route is found.\n   *\n   * @remarks A request to `https://www.example.com/page/index.html` will serve or render the Angular route\n   * corresponding to `https://www.example.com/page`.\n   */\n  async handle(request, requestContext) {\n    const url = new URL(request.url);\n    this.router ??= await ServerRouter.from(this.manifest, url);\n    const matchedRoute = this.router.match(url);\n    if (!matchedRoute) {\n      // Not a known Angular route.\n      return null;\n    }\n    const {\n      redirectTo,\n      status,\n      renderMode,\n      headers,\n      preload\n    } = matchedRoute;\n    if (redirectTo !== undefined) {\n      return createRedirectResponse(joinUrlParts(request.headers.get('X-Forwarded-Prefix') ?? '', buildPathWithParams(redirectTo, url.pathname)), status, headers);\n    }\n    if (renderMode === RenderMode.Prerender) {\n      const response = await this.handleServe(request, matchedRoute);\n      if (response) {\n        return response;\n      }\n    }\n    return promiseWithAbort(this.handleRendering(request, matchedRoute, requestContext), request.signal, `Request for: ${request.url}`);\n  }\n  /**\n   * Handles serving a prerendered static asset if available for the matched route.\n   *\n   * This method only supports `GET` and `HEAD` requests.\n   *\n   * @param request - The incoming HTTP request for serving a static page.\n   * @param matchedRoute - The metadata of the matched route for rendering.\n   * @returns A promise that resolves to a `Response` object if the prerendered page is found, or `null`.\n   */\n  async handleServe(request, matchedRoute) {\n    const {\n      headers,\n      renderMode\n    } = matchedRoute;\n    if (renderMode !== RenderMode.Prerender) {\n      return null;\n    }\n    const {\n      method\n    } = request;\n    if (method !== 'GET' && method !== 'HEAD') {\n      return null;\n    }\n    const assetPath = this.buildServerAssetPathFromRequest(request);\n    const {\n      manifest: {\n        locale\n      },\n      assets\n    } = this;\n    if (!assets.hasServerAsset(assetPath)) {\n      return null;\n    }\n    const {\n      text,\n      hash,\n      size\n    } = assets.getServerAsset(assetPath);\n    const etag = `\"${hash}\"`;\n    return request.headers.get('if-none-match') === etag ? new Response(undefined, {\n      status: 304,\n      statusText: 'Not Modified'\n    }) : new Response(await text(), {\n      headers: {\n        'Content-Length': size.toString(),\n        'ETag': etag,\n        'Content-Type': 'text/html;charset=UTF-8',\n        ...(locale !== undefined ? {\n          'Content-Language': locale\n        } : {}),\n        ...headers\n      }\n    });\n  }\n  /**\n   * Handles the server-side rendering process for the given HTTP request.\n   * This method matches the request URL to a route and performs rendering if a matching route is found.\n   *\n   * @param request - The incoming HTTP request to be processed.\n   * @param matchedRoute - The metadata of the matched route for rendering.\n   * @param requestContext - Optional additional context for rendering, such as request metadata.\n   *\n   * @returns A promise that resolves to the rendered response, or null if no matching route is found.\n   */\n  async handleRendering(request, matchedRoute, requestContext) {\n    const {\n      renderMode,\n      headers,\n      status,\n      preload\n    } = matchedRoute;\n    if (!this.allowStaticRouteRender && renderMode === RenderMode.Prerender) {\n      return null;\n    }\n    const url = new URL(request.url);\n    const platformProviders = [];\n    const {\n      manifest: {\n        bootstrap,\n        locale\n      },\n      assets\n    } = this;\n    // Initialize the response with status and headers if available.\n    const responseInit = {\n      status,\n      headers: new Headers({\n        'Content-Type': 'text/html;charset=UTF-8',\n        ...(locale !== undefined ? {\n          'Content-Language': locale\n        } : {}),\n        ...headers\n      })\n    };\n    if (renderMode === RenderMode.Server) {\n      // Configure platform providers for request and response only for SSR.\n      platformProviders.push({\n        provide: REQUEST,\n        useValue: request\n      }, {\n        provide: REQUEST_CONTEXT,\n        useValue: requestContext\n      }, {\n        provide: RESPONSE_INIT,\n        useValue: responseInit\n      });\n    } else if (renderMode === RenderMode.Client) {\n      // Serve the client-side rendered version if the route is configured for CSR.\n      let html = await this.assets.getServerAsset('index.csr.html').text();\n      html = await this.runTransformsOnHtml(html, url, preload);\n      return new Response(html, responseInit);\n    }\n    if (locale !== undefined) {\n      platformProviders.push({\n        provide: LOCALE_ID,\n        useValue: locale\n      });\n    }\n    this.boostrap ??= await bootstrap();\n    let html = await assets.getIndexServerHtml().text();\n    html = await this.runTransformsOnHtml(html, url, preload);\n    const result = await renderAngular(html, this.boostrap, url, platformProviders, SERVER_CONTEXT_VALUE[renderMode]);\n    if (result.hasNavigationError) {\n      return null;\n    }\n    if (result.redirectTo) {\n      return createRedirectResponse(result.redirectTo, responseInit.status, headers);\n    }\n    if (renderMode === RenderMode.Prerender) {\n      const renderedHtml = await result.content();\n      const finalHtml = await this.inlineCriticalCss(renderedHtml, url);\n      return new Response(finalHtml, responseInit);\n    }\n    // Use a stream to send the response before finishing rendering and inling critical CSS, improving performance via header flushing.\n    const stream = new ReadableStream({\n      start: async controller => {\n        const renderedHtml = await result.content();\n        const finalHtml = await this.inlineCriticalCssWithCache(renderedHtml, url);\n        controller.enqueue(finalHtml);\n        controller.close();\n      }\n    });\n    return new Response(stream, responseInit);\n  }\n  /**\n   * Inlines critical CSS into the given HTML content.\n   *\n   * @param html The HTML content to process.\n   * @param url The URL associated with the request, for logging purposes.\n   * @returns A promise that resolves to the HTML with inlined critical CSS.\n   */\n  async inlineCriticalCss(html, url) {\n    const {\n      inlineCriticalCssProcessor\n    } = this;\n    if (!inlineCriticalCssProcessor) {\n      return html;\n    }\n    try {\n      return await inlineCriticalCssProcessor.process(html);\n    } catch (error) {\n      // eslint-disable-next-line no-console\n      console.error(`An error occurred while inlining critical CSS for: ${url}.`, error);\n      return html;\n    }\n  }\n  /**\n   * Inlines critical CSS into the given HTML content.\n   * This method uses a cache to avoid reprocessing the same HTML content multiple times.\n   *\n   * @param html The HTML content to process.\n   * @param url The URL associated with the request, for logging purposes.\n   * @returns A promise that resolves to the HTML with inlined critical CSS.\n   */\n  async inlineCriticalCssWithCache(html, url) {\n    const {\n      inlineCriticalCssProcessor,\n      criticalCssLRUCache,\n      textDecoder\n    } = this;\n    if (!inlineCriticalCssProcessor) {\n      return textDecoder.encode(html);\n    }\n    const cacheKey = url.toString();\n    const cached = criticalCssLRUCache.get(cacheKey);\n    const shaOfContentPreInlinedCss = await sha256(html);\n    if (cached?.shaOfContentPreInlinedCss === shaOfContentPreInlinedCss) {\n      return cached.contentWithCriticialCSS;\n    }\n    const processedHtml = await this.inlineCriticalCss(html, url);\n    const finalHtml = textDecoder.encode(processedHtml);\n    criticalCssLRUCache.put(cacheKey, {\n      shaOfContentPreInlinedCss,\n      contentWithCriticialCSS: finalHtml\n    });\n    return finalHtml;\n  }\n  /**\n   * Constructs the asset path on the server based on the provided HTTP request.\n   *\n   * This method processes the incoming request URL to derive a path corresponding\n   * to the requested asset. It ensures the path points to the correct file (e.g.,\n   * `index.html`) and removes any base href if it is not part of the asset path.\n   *\n   * @param request - The incoming HTTP request object.\n   * @returns The server-relative asset path derived from the request.\n   */\n  buildServerAssetPathFromRequest(request) {\n    let {\n      pathname: assetPath\n    } = new URL(request.url);\n    if (!assetPath.endsWith('/index.html')) {\n      // Append \"index.html\" to build the default asset path.\n      assetPath = joinUrlParts(assetPath, 'index.html');\n    }\n    const {\n      baseHref\n    } = this.manifest;\n    // Check if the asset path starts with the base href and the base href is not (`/` or ``).\n    if (baseHref.length > 1 && assetPath.startsWith(baseHref)) {\n      // Remove the base href from the start of the asset path to align with server-asset expectations.\n      assetPath = assetPath.slice(baseHref.length);\n    }\n    return stripLeadingSlash(assetPath);\n  }\n  /**\n   * Runs the registered transform hooks on the given HTML content.\n   *\n   * @param html - The raw HTML content to be transformed.\n   * @param url - The URL associated with the HTML content, used for context during transformations.\n   * @param preload - An array of URLs representing the JavaScript resources to preload.\n   * @returns A promise that resolves to the transformed HTML string.\n   */\n  async runTransformsOnHtml(html, url, preload) {\n    if (this.hooks.has('html:transform:pre')) {\n      html = await this.hooks.run('html:transform:pre', {\n        html,\n        url\n      });\n    }\n    if (preload?.length) {\n      html = appendPreloadHintsToHtml(html, preload);\n    }\n    return html;\n  }\n  /**\n   * Serves the client-side version of the application.\n   * TODO(alanagius): Remove this method in version 22.\n   * @internal\n   */\n  async serveClientSidePage() {\n    const {\n      manifest: {\n        locale\n      },\n      assets\n    } = this;\n    const html = await assets.getServerAsset('index.csr.html').text();\n    return new Response(html, {\n      headers: new Headers({\n        'Content-Type': 'text/html;charset=UTF-8',\n        ...(locale !== undefined ? {\n          'Content-Language': locale\n        } : {})\n      })\n    });\n  }\n}\nlet angularServerApp;\n/**\n * Retrieves or creates an instance of `AngularServerApp`.\n * - If an instance of `AngularServerApp` already exists, it will return the existing one.\n * - If no instance exists, it will create a new one with the provided options.\n *\n * @param options Optional configuration options for the server application.\n *\n * @returns The existing or newly created instance of `AngularServerApp`.\n */\nfunction getOrCreateAngularServerApp(options) {\n  return angularServerApp ??= new AngularServerApp(options);\n}\n/**\n * Destroys the existing `AngularServerApp` instance, releasing associated resources and resetting the\n * reference to `undefined`.\n *\n * This function is primarily used to enable the recreation of the `AngularServerApp` instance,\n * typically when server configuration or application state needs to be refreshed.\n */\nfunction destroyAngularServerApp() {\n  if (typeof ngDevMode === 'undefined' || ngDevMode) {\n    // Need to clean up GENERATED_COMP_IDS map in `@angular/core`.\n    // Otherwise an incorrect component ID generation collision detected warning will be displayed in development.\n    // See: https://github.com/angular/angular-cli/issues/25924\n    _resetCompiledComponents();\n  }\n  angularServerApp = undefined;\n}\n/**\n * Appends module preload hints to an HTML string for specified JavaScript resources.\n * This function enhances the HTML by injecting `<link rel=\"modulepreload\">` elements\n * for each provided resource, allowing browsers to preload the specified JavaScript\n * modules for better performance.\n *\n * @param html - The original HTML string to which preload hints will be added.\n * @param preload - An array of URLs representing the JavaScript resources to preload.\n * @returns The modified HTML string with the preload hints injected before the closing `</body>` tag.\n *          If `</body>` is not found, the links are not added.\n */\nfunction appendPreloadHintsToHtml(html, preload) {\n  const bodyCloseIdx = html.lastIndexOf('</body>');\n  if (bodyCloseIdx === -1) {\n    return html;\n  }\n  // Note: Module preloads should be placed at the end before the closing body tag to avoid a performance penalty.\n  // Placing them earlier can cause the browser to prioritize downloading these modules\n  // over other critical page resources like images, CSS, and fonts.\n  return [html.slice(0, bodyCloseIdx), ...preload.map(val => `<link rel=\"modulepreload\" href=\"${val}\">`), html.slice(bodyCloseIdx)].join('\\n');\n}\n\n/**\n * Extracts a potential locale ID from a given URL based on the specified base path.\n *\n * This function parses the URL to locate a potential locale identifier that immediately\n * follows the base path segment in the URL's pathname. If the URL does not contain a valid\n * locale ID, an empty string is returned.\n *\n * @param url - The full URL from which to extract the locale ID.\n * @param basePath - The base path used as the reference point for extracting the locale ID.\n * @returns The extracted locale ID if present, or an empty string if no valid locale ID is found.\n *\n * @example\n * ```js\n * const url = new URL('https://example.com/base/en/page');\n * const basePath = '/base';\n * const localeId = getPotentialLocaleIdFromUrl(url, basePath);\n * console.log(localeId); // Output: 'en'\n * ```\n */\nfunction getPotentialLocaleIdFromUrl(url, basePath) {\n  const {\n    pathname\n  } = url;\n  // Move forward of the base path section.\n  let start = basePath.length;\n  if (pathname[start] === '/') {\n    start++;\n  }\n  // Find the next forward slash.\n  let end = pathname.indexOf('/', start);\n  if (end === -1) {\n    end = pathname.length;\n  }\n  // Extract the potential locale id.\n  return pathname.slice(start, end);\n}\n/**\n * Parses the `Accept-Language` header and returns a list of locale preferences with their respective quality values.\n *\n * The `Accept-Language` header is typically a comma-separated list of locales, with optional quality values\n * in the form of `q=<value>`. If no quality value is specified, a default quality of `1` is assumed.\n * Special case: if the header is `*`, it returns the default locale with a quality of `1`.\n *\n * @param header - The value of the `Accept-Language` header, typically a comma-separated list of locales\n *                  with optional quality values (e.g., `en-US;q=0.8,fr-FR;q=0.9`). If the header is `*`,\n *                  it represents a wildcard for any language, returning the default locale.\n *\n * @returns A `ReadonlyMap` where the key is the locale (e.g., `en-US`, `fr-FR`), and the value is\n *          the associated quality value (a number between 0 and 1). If no quality value is provided,\n *          a default of `1` is used.\n *\n * @example\n * ```js\n * parseLanguageHeader('en-US;q=0.8,fr-FR;q=0.9')\n * // returns new Map([['en-US', 0.8], ['fr-FR', 0.9]])\n\n * parseLanguageHeader('*')\n * // returns new Map([['*', 1]])\n * ```\n */\nfunction parseLanguageHeader(header) {\n  if (header === '*') {\n    return new Map([['*', 1]]);\n  }\n  const parsedValues = header.split(',').map(item => {\n    const [locale, qualityValue] = item.split(';', 2).map(v => v.trim());\n    let quality = qualityValue?.startsWith('q=') ? parseFloat(qualityValue.slice(2)) : undefined;\n    if (typeof quality !== 'number' || isNaN(quality) || quality < 0 || quality > 1) {\n      quality = 1; // Invalid quality value defaults to 1\n    }\n    return [locale, quality];\n  }).sort(([_localeA, qualityA], [_localeB, qualityB]) => qualityB - qualityA);\n  return new Map(parsedValues);\n}\n/**\n * Gets the preferred locale based on the highest quality value from the provided `Accept-Language` header\n * and the set of available locales.\n *\n * This function adheres to the HTTP `Accept-Language` header specification as defined in\n * [RFC 7231](https://datatracker.ietf.org/doc/html/rfc7231#section-5.3.5), including:\n * - Case-insensitive matching of language tags.\n * - Quality value handling (e.g., `q=1`, `q=0.8`). If no quality value is provided, it defaults to `q=1`.\n * - Prefix matching (e.g., `en` matching `en-US` or `en-GB`).\n *\n * @param header - The `Accept-Language` header string to parse and evaluate. It may contain multiple\n *                 locales with optional quality values, for example: `'en-US;q=0.8,fr-FR;q=0.9'`.\n * @param supportedLocales - An array of supported locales (e.g., `['en-US', 'fr-FR']`),\n *                           representing the locales available in the application.\n * @returns The best matching locale from the supported languages, or `undefined` if no match is found.\n *\n * @example\n * ```js\n * getPreferredLocale('en-US;q=0.8,fr-FR;q=0.9', ['en-US', 'fr-FR', 'de-DE'])\n * // returns 'fr-FR'\n *\n * getPreferredLocale('en;q=0.9,fr-FR;q=0.8', ['en-US', 'fr-FR', 'de-DE'])\n * // returns 'en-US'\n *\n * getPreferredLocale('es-ES;q=0.7', ['en-US', 'fr-FR', 'de-DE'])\n * // returns undefined\n * ```\n */\nfunction getPreferredLocale(header, supportedLocales) {\n  if (supportedLocales.length < 2) {\n    return supportedLocales[0];\n  }\n  const parsedLocales = parseLanguageHeader(header);\n  // Handle edge cases:\n  // - No preferred locales provided.\n  // - Only one supported locale.\n  // - Wildcard preference.\n  if (parsedLocales.size === 0 || parsedLocales.size === 1 && parsedLocales.has('*')) {\n    return supportedLocales[0];\n  }\n  // Create a map for case-insensitive lookup of supported locales.\n  // Keys are normalized (lowercase) locale values, values are original casing.\n  const normalizedSupportedLocales = new Map();\n  for (const locale of supportedLocales) {\n    normalizedSupportedLocales.set(normalizeLocale(locale), locale);\n  }\n  // Iterate through parsed locales in descending order of quality.\n  let bestMatch;\n  const qualityZeroNormalizedLocales = new Set();\n  for (const [locale, quality] of parsedLocales) {\n    const normalizedLocale = normalizeLocale(locale);\n    if (quality === 0) {\n      qualityZeroNormalizedLocales.add(normalizedLocale);\n      continue; // Skip locales with quality value of 0.\n    }\n    // Exact match found.\n    if (normalizedSupportedLocales.has(normalizedLocale)) {\n      return normalizedSupportedLocales.get(normalizedLocale);\n    }\n    // If an exact match is not found, try prefix matching (e.g., \"en\" matches \"en-US\").\n    // Store the first prefix match encountered, as it has the highest quality value.\n    if (bestMatch !== undefined) {\n      continue;\n    }\n    const [languagePrefix] = normalizedLocale.split('-', 1);\n    for (const supportedLocale of normalizedSupportedLocales.keys()) {\n      if (supportedLocale.startsWith(languagePrefix)) {\n        bestMatch = normalizedSupportedLocales.get(supportedLocale);\n        break; // No need to continue searching for this locale.\n      }\n    }\n  }\n  if (bestMatch !== undefined) {\n    return bestMatch;\n  }\n  // Return the first locale that is not quality zero.\n  for (const [normalizedLocale, locale] of normalizedSupportedLocales) {\n    if (!qualityZeroNormalizedLocales.has(normalizedLocale)) {\n      return locale;\n    }\n  }\n}\n/**\n * Normalizes a locale string by converting it to lowercase.\n *\n * @param locale - The locale string to normalize.\n * @returns The normalized locale string in lowercase.\n *\n * @example\n * ```ts\n * const normalized = normalizeLocale('EN-US');\n * console.log(normalized); // Output: \"en-us\"\n * ```\n */\nfunction normalizeLocale(locale) {\n  return locale.toLowerCase();\n}\n\n/**\n * Angular server application engine.\n * Manages Angular server applications (including localized ones), handles rendering requests,\n * and optionally transforms index HTML before rendering.\n *\n * @remarks This class should be instantiated once and used as a singleton across the server-side\n * application to ensure consistent handling of rendering requests and resource management.\n */\nlet AngularAppEngine = /*#__PURE__*/(() => {\n  class AngularAppEngine {\n    /**\n     * A flag to enable or disable the rendering of prerendered routes.\n     *\n     * Typically used during development to avoid prerendering all routes ahead of time,\n     * allowing them to be rendered on the fly as requested.\n     *\n     * @private\n     */\n    static ɵallowStaticRouteRender = false;\n    /**\n     * Hooks for extending or modifying the behavior of the server application.\n     * These hooks are used by the Angular CLI when running the development server and\n     * provide extensibility points for the application lifecycle.\n     *\n     * @private\n     */\n    static ɵhooks = /* #__PURE__*/new Hooks();\n    /**\n     * A flag to disable the allowed hosts check.\n     *\n     * @private\n     */\n    static ɵdisableAllowedHostsCheck = false;\n    /**\n     * The manifest for the server application.\n     */\n    manifest = getAngularAppEngineManifest();\n    /**\n     * A set of allowed hostnames for the server application.\n     */\n    allowedHosts;\n    /**\n     * A map of supported locales from the server application's manifest.\n     */\n    supportedLocales = Object.keys(this.manifest.supportedLocales);\n    /**\n     * The normalized allowed proxy headers.\n     */\n    trustProxyHeaders;\n    /**\n     * A cache that holds entry points, keyed by their potential locale string.\n     */\n    entryPointsCache = new Map();\n    /**\n     * Creates a new instance of the Angular server application engine.\n     * @param options Options for the Angular server application engine.\n     */\n    constructor(options) {\n      this.allowedHosts = this.getAllowedHosts(options);\n      this.trustProxyHeaders = normalizeTrustProxyHeaders(options?.trustProxyHeaders);\n    }\n    getAllowedHosts(options) {\n      const allowedHosts = new Set([...(options?.allowedHosts ?? []), ...this.manifest.allowedHosts]);\n      if (allowedHosts.has('*')) {\n        // eslint-disable-next-line no-console\n        console.warn('Allowing all hosts via \"*\" is a security risk. This configuration should only be used when ' + 'validation for \"Host\" and \"X-Forwarded-Host\" headers is performed in another layer, such as a load balancer or reverse proxy. ' + 'For more information see: https://angular.dev/best-practices/security#preventing-server-side-request-forgery-ssrf');\n      }\n      return allowedHosts;\n    }\n    /**\n     * Handles an incoming HTTP request by serving prerendered content, performing server-side rendering,\n     * or delivering a static file for client-side rendered routes based on the `RenderMode` setting.\n     *\n     * @param request - The HTTP request to handle.\n     * @param requestContext - Optional context for rendering, such as metadata associated with the request.\n     * @returns A promise that resolves to the resulting HTTP response object, or `null` if no matching Angular route is found.\n     *\n     * @remarks A request to `https://www.example.com/page/index.html` will serve or render the Angular route\n     * corresponding to `https://www.example.com/page`.\n     *\n     * @remarks\n     * To prevent potential Server-Side Request Forgery (SSRF), this function verifies the hostname\n     * of the `request.url` against a list of authorized hosts.\n     * If the hostname is not recognized and `allowedHosts` is not empty, a Client-Side Rendered (CSR) version of the\n     * page is returned otherwise a 400 Bad Request is returned.\n     * Resolution:\n     * Authorize your hostname by configuring `allowedHosts` in `angular.json` in:\n     * `projects.[project-name].architect.build.options.security.allowedHosts`.\n     * Alternatively, you pass it directly through the configuration options of `AngularAppEngine`.\n     *\n     * For more information see: https://angular.dev/best-practices/security#preventing-server-side-request-forgery-ssrf\n     */\n    async handle(request, requestContext) {\n      const allowedHost = this.allowedHosts;\n      const {\n        request: securedRequest,\n        deoptToCSR\n      } = sanitizeRequestHeaders(request, this.trustProxyHeaders);\n      try {\n        validateRequest(securedRequest, allowedHost, AngularAppEngine.ɵdisableAllowedHostsCheck);\n      } catch (error) {\n        return this.handleValidationError(error, securedRequest);\n      }\n      const serverApp = await this.getAngularServerAppForRequest(securedRequest);\n      if (serverApp) {\n        if (deoptToCSR) {\n          return serverApp.serveClientSidePage();\n        }\n        return serverApp.handle(securedRequest, requestContext);\n      }\n      if (this.supportedLocales.length > 1) {\n        // Redirect to the preferred language if i18n is enabled.\n        return this.redirectBasedOnAcceptLanguage(request);\n      }\n      return null;\n    }\n    /**\n     * Handles requests for the base path when i18n is enabled.\n     * Redirects the user to a locale-specific path based on the `Accept-Language` header.\n     *\n     * @param request The incoming request.\n     * @returns A `Response` object with a 302 redirect, or `null` if i18n is not enabled\n     *          or the request is not for the base path.\n     */\n    redirectBasedOnAcceptLanguage(request) {\n      const {\n        basePath,\n        supportedLocales\n      } = this.manifest;\n      // If the request is not for the base path, it's not our responsibility to handle it.\n      const {\n        pathname\n      } = new URL(request.url);\n      if (pathname !== basePath) {\n        return null;\n      }\n      // For requests to the base path (typically '/'), attempt to extract the preferred locale\n      // from the 'Accept-Language' header.\n      const preferredLocale = getPreferredLocale(request.headers.get('Accept-Language') || '*', this.supportedLocales);\n      if (preferredLocale) {\n        const subPath = supportedLocales[preferredLocale];\n        if (subPath !== undefined) {\n          return new Response(null, {\n            status: 302,\n            // Use a 302 redirect as language preference may change.\n            headers: {\n              'Location': joinUrlParts(pathname, subPath),\n              'Vary': 'Accept-Language'\n            }\n          });\n        }\n      }\n      return null;\n    }\n    /**\n     * Retrieves the Angular server application instance for a given request.\n     *\n     * This method checks if the request URL corresponds to an Angular application entry point.\n     * If so, it initializes or retrieves an instance of the Angular server application for that entry point.\n     * Requests that resemble file requests (except for `/index.html`) are skipped.\n     *\n     * @param request - The incoming HTTP request object.\n     * @returns A promise that resolves to an `AngularServerApp` instance if a valid entry point is found,\n     * or `null` if no entry point matches the request URL.\n     */\n    async getAngularServerAppForRequest(request) {\n      // Skip if the request looks like a file but not `/index.html`.\n      const url = new URL(request.url);\n      const entryPoint = await this.getEntryPointExportsForUrl(url);\n      if (!entryPoint) {\n        return null;\n      }\n      // Note: Using `instanceof` is not feasible here because `AngularServerApp` will\n      // be located in separate bundles, making `instanceof` checks unreliable.\n      const ɵgetOrCreateAngularServerApp = entryPoint.ɵgetOrCreateAngularServerApp;\n      const serverApp = ɵgetOrCreateAngularServerApp({\n        allowStaticRouteRender: AngularAppEngine.ɵallowStaticRouteRender,\n        hooks: AngularAppEngine.ɵhooks\n      });\n      return serverApp;\n    }\n    /**\n     * Retrieves the exports for a specific entry point, caching the result.\n     *\n     * @param potentialLocale - The locale string used to find the corresponding entry point.\n     * @returns A promise that resolves to the entry point exports or `undefined` if not found.\n     */\n    getEntryPointExports(potentialLocale) {\n      const cachedEntryPoint = this.entryPointsCache.get(potentialLocale);\n      if (cachedEntryPoint) {\n        return cachedEntryPoint;\n      }\n      const {\n        entryPoints\n      } = this.manifest;\n      const entryPoint = entryPoints[potentialLocale];\n      if (!entryPoint) {\n        return undefined;\n      }\n      const entryPointExports = entryPoint();\n      this.entryPointsCache.set(potentialLocale, entryPointExports);\n      return entryPointExports;\n    }\n    /**\n     * Retrieves the entry point for a given URL by determining the locale and mapping it to\n     * the appropriate application bundle.\n     *\n     * This method determines the appropriate entry point and locale for rendering the application by examining the URL.\n     * If there is only one entry point available, it is returned regardless of the URL.\n     * Otherwise, the method extracts a potential locale identifier from the URL and looks up the corresponding entry point.\n     *\n     * @param url - The URL of the request.\n     * @returns A promise that resolves to the entry point exports or `undefined` if not found.\n     */\n    getEntryPointExportsForUrl(url) {\n      const {\n        basePath,\n        supportedLocales\n      } = this.manifest;\n      if (this.supportedLocales.length === 1) {\n        return this.getEntryPointExports(supportedLocales[this.supportedLocales[0]]);\n      }\n      const potentialLocale = getPotentialLocaleIdFromUrl(url, basePath);\n      return this.getEntryPointExports(potentialLocale) ?? this.getEntryPointExports('');\n    }\n    /**\n     * Handles validation errors by logging the error and returning an appropriate response.\n     *\n     * @param error - The validation error to handle.\n     * @param request - The HTTP request that caused the validation error.\n     * @returns A promise that resolves to a `Response` object with a 400 status code if allowed hosts are configured,\n     * or `null` if allowed hosts are not configured (in which case the request is served client-side).\n     */\n    async handleValidationError(error, request) {\n      const isAllowedHostConfigured = this.allowedHosts.size > 0;\n      const errorMessage = error.message;\n      // eslint-disable-next-line no-console\n      console.error(`ERROR: Bad Request (\"${request.url}\").\\n` + errorMessage + (isAllowedHostConfigured ? '' : '\\nFalling back to client side rendering. This will become a 400 Bad Request in a future major version.') + '\\n\\nFor more information, see https://angular.dev/best-practices/security#preventing-server-side-request-forgery-ssrf');\n      if (isAllowedHostConfigured) {\n        // Allowed hosts has been configured incorrectly, thus we can return a 400 bad request.\n        return new Response(errorMessage, {\n          status: 400,\n          statusText: 'Bad Request',\n          headers: {\n            'Content-Type': 'text/plain'\n          }\n        });\n      }\n      // Fallback to CSR to avoid a breaking change.\n      // TODO(alanagius): Return a 400 and remove this fallback in the next major version (v22).\n      const serverApp = await this.getAngularServerAppForRequest(request);\n      return serverApp?.serveClientSidePage() ?? null;\n    }\n  }\n  return AngularAppEngine;\n})();\n/**\n * Annotates a request handler function with metadata, marking it as a special\n * handler.\n *\n * @param handler - The request handler function to be annotated.\n * @returns The same handler function passed in, with metadata attached.\n *\n * @example\n * Example usage in a Hono application:\n * ```ts\n * const app = new Hono();\n * export default createRequestHandler(app.fetch);\n * ```\n *\n * @example\n * Example usage in a H3 application:\n * ```ts\n * const app = createApp();\n * const handler = toWebHandler(app);\n * export default createRequestHandler(handler);\n * ```\n */\nfunction createRequestHandler(handler) {\n  handler['__ng_request_handler__'] = true;\n  return handler;\n}\nexport { AngularAppEngine, PrerenderFallback, RenderMode, createRequestHandler, provideServerRendering, withAppShell, withRoutes, InlineCriticalCssProcessor as ɵInlineCriticalCssProcessor, destroyAngularServerApp as ɵdestroyAngularServerApp, extractRoutesAndCreateRouteTree as ɵextractRoutesAndCreateRouteTree, getOrCreateAngularServerApp as ɵgetOrCreateAngularServerApp, getRoutesFromAngularRouterConfig as ɵgetRoutesFromAngularRouterConfig, setAngularAppEngineManifest as ɵsetAngularAppEngineManifest, setAngularAppManifest as ɵsetAngularAppManifest };\n","import { Component } from '@angular/core';\r\nimport {myInfo} from '../../data/my-data';\r\nimport {RouterLink} from '@angular/router';\r\nimport {LucideCodeXml, LucideMail, LucideMapPin} from '@lucide/angular';\r\n\r\n@Component({\r\n  selector: 'app-footer',\r\n  standalone: true,\r\n  imports: [\r\n    RouterLink,\r\n    LucideMapPin,\r\n    LucideCodeXml,\r\n    LucideMail\r\n  ],\r\n  templateUrl: './footer.component.html',\r\n  styleUrl: './footer.component.sass'\r\n})\r\nexport class FooterComponent {\r\n  constructor() {\r\n  }\r\n\r\n   protected readonly myData = myInfo;\r\n  readonly currentYear = new Date().getFullYear();\r\n}\r\n","<!-- shared/components/footer/footer.component.html -->\r\n<footer class=\"footer\">\r\n  <div class=\"footer__top-gradient\" aria-hidden=\"true\"></div>\r\n\r\n  <div class=\"footer__container\">\r\n    <div class=\"footer__grid\">\r\n      <!-- Col 1 : À propos -->\r\n      <div class=\"footer__col footer__about\">\r\n        <div class=\"footer__brand\" aria-label=\"Cristian TUDOROIU , Développeur Web Freelance\">\r\n          <span class=\"highlight\">Cristian</span> TUDOROIU<span class=\"footer__brand-dot\">.</span>\r\n        </div>\r\n\r\n        <p class=\"footer__text\">\r\n          Développeur web freelance passionné, spécialisé dans la création de\r\n          sites web performants, esthétiques et sur mesure pour les entreprises\r\n          ambitieuses.\r\n        </p>\r\n\r\n        <div class=\"footer__socials\">\r\n          <a\r\n            class=\"footer__social\"\r\n            target=\"_blank\"\r\n            [href]=\"myData.linkedinLink\"\r\n            aria-label=\"LinkedIn\"\r\n          >\r\n            <!-- Remplace par ton système d’icônes (lucide/angular-material/svg) -->\r\n            <span class=\"footer__icon\" aria-hidden=\"true\"> <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\"\r\n                                                                height=\"24\" viewBox=\"0 0 640 640\" fill=\"currentColor\"><path\r\n              d=\"M196.3 512L103.4 512L103.4 212.9L196.3 212.9L196.3 512zM149.8 172.1C120.1 172.1 96 147.5 96 117.8C96 103.5 101.7 89.9 111.8 79.8C121.9 69.7 135.6 64 149.8 64C164 64 177.7 69.7 187.8 79.8C197.9 89.9 203.6 103.6 203.6 117.8C203.6 147.5 179.5 172.1 149.8 172.1zM543.9 512L451.2 512L451.2 366.4C451.2 331.7 450.5 287.2 402.9 287.2C354.6 287.2 347.2 324.9 347.2 363.9L347.2 512L254.4 512L254.4 212.9L343.5 212.9L343.5 253.7L344.8 253.7C357.2 230.2 387.5 205.4 432.7 205.4C526.7 205.4 544 267.3 544 347.7L544 512L543.9 512z\"/></svg></span>\r\n          </a>\r\n\r\n          <a\r\n            class=\"footer__social\"\r\n            target=\"_blank\"\r\n            [href]=\"myData.githubLink\"\r\n            aria-label=\"GitHub\"\r\n          >\r\n            <span class=\"footer__icon\" aria-hidden=\"true\"><svg xmlns=\"http://www.w3.org/2000/svg\" width=\"24\" height=\"24\"\r\n                                                               viewBox=\"0 0 640 640\" fill=\"currentColor\"><path\r\n              d=\"M237.9 461.4C237.9 463.4 235.6 465 232.7 465C229.4 465.3 227.1 463.7 227.1 461.4C227.1 459.4 229.4 457.8 232.3 457.8C235.3 457.5 237.9 459.1 237.9 461.4zM206.8 456.9C206.1 458.9 208.1 461.2 211.1 461.8C213.7 462.8 216.7 461.8 217.3 459.8C217.9 457.8 216 455.5 213 454.6C210.4 453.9 207.5 454.9 206.8 456.9zM251 455.2C248.1 455.9 246.1 457.8 246.4 460.1C246.7 462.1 249.3 463.4 252.3 462.7C255.2 462 257.2 460.1 256.9 458.1C256.6 456.2 253.9 454.9 251 455.2zM316.8 72C178.1 72 72 177.3 72 316C72 426.9 141.8 521.8 241.5 555.2C254.3 557.5 258.8 549.6 258.8 543.1C258.8 536.9 258.5 502.7 258.5 481.7C258.5 481.7 188.5 496.7 173.8 451.9C173.8 451.9 162.4 422.8 146 415.3C146 415.3 123.1 399.6 147.6 399.9C147.6 399.9 172.5 401.9 186.2 425.7C208.1 464.3 244.8 453.2 259.1 446.6C261.4 430.6 267.9 419.5 275.1 412.9C219.2 406.7 162.8 398.6 162.8 302.4C162.8 274.9 170.4 261.1 186.4 243.5C183.8 237 175.3 210.2 189 175.6C209.9 169.1 258 202.6 258 202.6C278 197 299.5 194.1 320.8 194.1C342.1 194.1 363.6 197 383.6 202.6C383.6 202.6 431.7 169 452.6 175.6C466.3 210.3 457.8 237 455.2 243.5C471.2 261.2 481 275 481 302.4C481 398.9 422.1 406.6 366.2 412.9C375.4 420.8 383.2 435.8 383.2 459.3C383.2 493 382.9 534.7 382.9 542.9C382.9 549.4 387.5 557.3 400.2 555C500.2 521.8 568 426.9 568 316C568 177.3 455.5 72 316.8 72zM169.2 416.9C167.9 417.9 168.2 420.2 169.9 422.1C171.5 423.7 173.8 424.4 175.1 423.1C176.4 422.1 176.1 419.8 174.4 417.9C172.8 416.3 170.5 415.6 169.2 416.9zM158.4 408.8C157.7 410.1 158.7 411.7 160.7 412.7C162.3 413.7 164.3 413.4 165 412C165.7 410.7 164.7 409.1 162.7 408.1C160.7 407.5 159.1 407.8 158.4 408.8zM190.8 444.4C189.2 445.7 189.8 448.7 192.1 450.6C194.4 452.9 197.3 453.2 198.6 451.6C199.9 450.3 199.3 447.3 197.3 445.4C195.1 443.1 192.1 442.8 190.8 444.4zM179.4 429.7C177.8 430.7 177.8 433.3 179.4 435.6C181 437.9 183.7 438.9 185 437.9C186.6 436.6 186.6 434 185 431.7C183.6 429.4 181 428.4 179.4 429.7z\"/></svg></span>\r\n          </a>\r\n          <a href=\"{{myData.googleLink}}\" target=\"_blank\" rel=\"noopener\" class=\"footer__social\"\r\n             aria-label=\"Mon Linkedin\">\r\n            <svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 640 640\" width=\"24\" height=\"24\" fill=\"currentColor\">\r\n              <path\r\n                d=\"M564 325.8C564 467.3 467.1 568 324 568C186.8 568 76 457.2 76 320C76 182.8 186.8 72 324 72C390.8 72 447 96.5 490.3 136.9L422.8 201.8C334.5 116.6 170.3 180.6 170.3 320C170.3 406.5 239.4 476.6 324 476.6C422.2 476.6 459 406.2 464.8 369.7L324 369.7L324 284.4L560.1 284.4C562.4 297.1 564 309.3 564 325.8z\"/>\r\n            </svg>\r\n          </a>\r\n        </div>\r\n      </div>\r\n\r\n      <!-- Col 2 : Services -->\r\n      <div class=\"footer__col\">\r\n        <h3 class=\"footer__title\">Services</h3>\r\n\r\n        <ul class=\"footer__list\">\r\n          <li class=\"footer__item\">\r\n            <a class=\"footer__link\" href=\"#\">\r\n              <span class=\"footer__link-line\" aria-hidden=\"true\"></span>\r\n              Création de site vitrine\r\n            </a>\r\n          </li>\r\n\r\n          <li class=\"footer__item\">\r\n            <a class=\"footer__link\" href=\"#\">\r\n              <span class=\"footer__link-line\" aria-hidden=\"true\"></span>\r\n              Boutique E-commerce\r\n            </a>\r\n          </li>\r\n\r\n          <li class=\"footer__item\">\r\n            <a class=\"footer__link\" href=\"#\">\r\n              <span class=\"footer__link-line\" aria-hidden=\"true\"></span>\r\n              Refonte de site web\r\n            </a>\r\n          </li>\r\n\r\n          <li class=\"footer__item\">\r\n            <a class=\"footer__link\" href=\"#\">\r\n              <span class=\"footer__link-line\" aria-hidden=\"true\"></span>\r\n              Maintenance &amp; Sécurité\r\n            </a>\r\n          </li>\r\n\r\n          <li class=\"footer__item\">\r\n            <a class=\"footer__link\" href=\"#\">\r\n              <span class=\"footer__link-line\" aria-hidden=\"true\"></span>\r\n              Optimisation SEO\r\n            </a>\r\n          </li>\r\n        </ul>\r\n      </div>\r\n\r\n      <!-- Col 3 : Zone d'intervention -->\r\n      <div class=\"footer__col\">\r\n        <h3 class=\"footer__title\">Zone d'intervention</h3>\r\n\r\n        <ul class=\"footer__list footer__list--plain\">\r\n          <li class=\"footer__place\">\r\n            <span class=\"footer__pin\" aria-hidden=\"true\"><svg lucideMapPin></svg></span>\r\n            <span>Pau &amp; Béarn (Présentiel)</span>\r\n          </li>\r\n          <li class=\"footer__place\">\r\n            <span class=\"footer__pin\" aria-hidden=\"true\"><svg lucideMapPin></svg></span>\r\n            <span>Nouvelle-Aquitaine</span>\r\n          </li>\r\n          <li class=\"footer__place\">\r\n            <span class=\"footer__pin\" aria-hidden=\"true\"><svg lucideMapPin></svg></span>\r\n            <span>France entière (100% Remote)</span>\r\n          </li>\r\n          <li class=\"footer__place\">\r\n            <span class=\"footer__pin\" aria-hidden=\"true\"><svg lucideMapPin></svg></span>\r\n            <span>International (Anglophone)</span>\r\n          </li>\r\n        </ul>\r\n      </div>\r\n\r\n      <!-- Col 4 : Contact & légal -->\r\n      <div class=\"footer__col\">\r\n        <h3 class=\"footer__title\">Contact &amp; Légal</h3>\r\n\r\n        <ul class=\"footer__list footer__list--plain\">\r\n          <li class=\"footer__item\">\r\n            <a class=\"footer__mail\" [href]=\"'mailto:' + myData.email\">\r\n              <span class=\"footer__mail-icon\" aria-hidden=\"true\"><svg lucideMail></svg></span>\r\n              {{ myData.email }}\r\n            </a>\r\n          </li>\r\n\r\n          <li class=\"footer__legal\">\r\n\r\n            <a class=\"footer__legal-link\" routerLink=\"/mentions-legales\" target=\"_blank\">\r\n              Mentions légales\r\n            </a>\r\n          </li>\r\n          <li>\r\n            <a class=\"footer__legal-link\" routerLink=\"/politique-de-confidentialite\" target=\"_blank\">Politique de\r\n              confidentialité</a>\r\n          </li>\r\n          <li>\r\n            <a class=\"footer__legal-link\" routerLink=\"/conditions-generales-prestation\" target=\"_blank\">CGP</a>\r\n          </li>\r\n        </ul>\r\n      </div>\r\n      <!-- Col 5 : Liens utiles -->\r\n      <div class=\"footer__col\">\r\n        <h3 class=\"footer__title\">Liens utiles</h3>\r\n\r\n        <ul class=\"footer__list footer__list--plain\">\r\n          <li class=\"footer__item\">\r\n            <a class=\"footer__link\" [routerLink]=\"'/maintenance-applications-metier'\" target=\"_blank\">\r\n              <span class=\"footer__link-line\" aria-hidden=\"true\"></span>\r\n              Maintenance d'applications metier\r\n            </a>\r\n          </li>\r\n          <li class=\"footer__item\">\r\n            <a class=\"footer__link\" [routerLink]=\"'/blog'\" target=\"_blank\">\r\n              <span class=\"footer__link-line\" aria-hidden=\"true\"></span>\r\n              Blog\r\n            </a>\r\n          </li>\r\n\r\n          <li class=\"footer__item\">\r\n            <a class=\"footer__link\" [routerLink]=\"'/questions-frequentes'\" target=\"_blank\">\r\n              <span class=\"footer__link-line\" aria-hidden=\"true\"></span>\r\n              Questions frequentes\r\n            </a>\r\n          </li>\r\n\r\n\r\n        </ul>\r\n      </div>\r\n\r\n  </div>\r\n\r\n\r\n  <!-- Barre du bas -->\r\n  <div class=\"footer__bottom\">\r\n    <p class=\"footer__copyright\">\r\n      &copy; {{ currentYear }} Développeur Web Freelance. Tous droits réservés.\r\n    </p>\r\n\r\n    <div class=\"footer__signature\">\r\n      <span>Fait avec passion à Pau</span>\r\n      <span class=\"footer__heart\" aria-hidden=\"true\"><svg lucideCodeXml></svg></span>\r\n    </div>\r\n  </div>\r\n  </div>\r\n</footer>\r\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.dev/license\n */\n// THIS CODE IS GENERATED - DO NOT MODIFY.\nconst u = undefined;\nfunction plural(val) {\n  const n = val,\n    i = Math.floor(Math.abs(val)),\n    v = val.toString().replace(/^[^.]*\\.?/, '').length,\n    e = parseInt(val.toString().replace(/^[^e]*(e([-+]?\\d+))?/, '$2')) || 0;\n  if (i === 0 || i === 1) return 1;\n  if (e === 0 && !(i === 0) && i % 1000000 === 0 && v === 0 || !(e >= 0 && e <= 5)) return 4;\n  return 5;\n}\nexport default [\"fr\", [[\"AM\", \"PM\"]], u, [[\"D\", \"L\", \"M\", \"M\", \"J\", \"V\", \"S\"], [\"dim.\", \"lun.\", \"mar.\", \"mer.\", \"jeu.\", \"ven.\", \"sam.\"], [\"dimanche\", \"lundi\", \"mardi\", \"mercredi\", \"jeudi\", \"vendredi\", \"samedi\"], [\"di\", \"lu\", \"ma\", \"me\", \"je\", \"ve\", \"sa\"]], u, [[\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"], [\"janv.\", \"févr.\", \"mars\", \"avr.\", \"mai\", \"juin\", \"juil.\", \"août\", \"sept.\", \"oct.\", \"nov.\", \"déc.\"], [\"janvier\", \"février\", \"mars\", \"avril\", \"mai\", \"juin\", \"juillet\", \"août\", \"septembre\", \"octobre\", \"novembre\", \"décembre\"]], u, [[\"av. J.-C.\", \"ap. J.-C.\"], u, [\"avant Jésus-Christ\", \"après Jésus-Christ\"]], 1, [6, 0], [\"dd/MM/y\", \"d MMM y\", \"d MMMM y\", \"EEEE d MMMM y\"], [\"HH:mm\", \"HH:mm:ss\", \"HH:mm:ss z\", \"HH:mm:ss zzzz\"], [\"{1} {0}\", \"{1}, {0}\", \"{1} 'à' {0}\", u], [\",\", \" \", \";\", \"%\", \"+\", \"-\", \"E\", \"×\", \"‰\", \"∞\", \"NaN\", \":\"], [\"#,##0.###\", \"#,##0 %\", \"#,##0.00 ¤\", \"#E0\"], \"EUR\", \"€\", \"euro\", {\n  \"ARS\": [\"$AR\", \"$\"],\n  \"AUD\": [\"$AU\", \"$\"],\n  \"BEF\": [\"FB\"],\n  \"BMD\": [\"$BM\", \"$\"],\n  \"BND\": [\"$BN\", \"$\"],\n  \"BYN\": [u, \"р.\"],\n  \"BZD\": [\"$BZ\", \"$\"],\n  \"CAD\": [\"$CA\", \"$\"],\n  \"CLP\": [\"$CL\", \"$\"],\n  \"CNY\": [u, \"¥\"],\n  \"COP\": [\"$CO\", \"$\"],\n  \"CYP\": [\"£CY\"],\n  \"EGP\": [u, \"£E\"],\n  \"FJD\": [\"$FJ\", \"$\"],\n  \"FKP\": [\"£FK\", \"£\"],\n  \"FRF\": [\"F\"],\n  \"GBP\": [\"£GB\", \"£\"],\n  \"GIP\": [\"£GI\", \"£\"],\n  \"HKD\": [u, \"$\"],\n  \"IEP\": [\"£IE\"],\n  \"ILP\": [\"£IL\"],\n  \"ITL\": [\"₤IT\"],\n  \"JPY\": [u, \"¥\"],\n  \"KMF\": [u, \"FC\"],\n  \"LBP\": [\"£LB\", \"£L\"],\n  \"MTP\": [\"£MT\"],\n  \"MXN\": [\"$MX\", \"$\"],\n  \"NAD\": [\"$NA\", \"$\"],\n  \"NIO\": [u, \"$C\"],\n  \"NZD\": [\"$NZ\", \"$\"],\n  \"PHP\": [u, \"₱\"],\n  \"RHD\": [\"$RH\"],\n  \"RON\": [u, \"L\"],\n  \"RWF\": [u, \"FR\"],\n  \"SBD\": [\"$SB\", \"$\"],\n  \"SGD\": [\"$SG\", \"$\"],\n  \"SRD\": [\"$SR\", \"$\"],\n  \"TOP\": [u, \"$T\"],\n  \"TTD\": [\"$TT\", \"$\"],\n  \"TWD\": [u, \"NT$\"],\n  \"USD\": [\"$US\", \"$\"],\n  \"UYU\": [\"$UY\", \"$\"],\n  \"WST\": [\"$WS\"],\n  \"XCD\": [u, \"$\"],\n  \"XPF\": [\"FCFP\"],\n  \"ZMW\": [u, \"Kw\"]\n}, \"ltr\", plural];\n","import { Component, HostListener, inject, OnInit, PLATFORM_ID, signal} from '@angular/core';\r\nimport {NavigationEnd, Router, RouterOutlet} from '@angular/router';\r\n\r\nimport {filter, take} from 'rxjs';\r\nimport {FooterComponent} from './core/components/footer/footer.component';\r\n\r\nimport {isPlatformBrowser, registerLocaleData} from '@angular/common';\r\nimport localeFr from '@angular/common/locales/fr';\r\nimport {GoogleAdsService} from './core/services/google-ads.service';\r\n\r\nregisterLocaleData(localeFr);\r\n\r\n@Component({\r\n  selector: 'app-root',\r\n  imports: [RouterOutlet, FooterComponent],\r\n  templateUrl: './app.component.html',\r\n  styleUrl: './app.component.sass'\r\n})\r\nexport class AppComponent implements OnInit {\r\n\r\n  private router = inject(Router);\r\n  private platformId = inject(PLATFORM_ID);\r\n  private readonly googleAds = inject(GoogleAdsService);\r\n  private readonly navigationEnd$ =\r\n    this.router.events.pipe(\r\n      filter((e): e is NavigationEnd => e instanceof NavigationEnd)\r\n    );\r\n  private articleElement: HTMLElement | null = null;\r\n  readingProgress = 0;\r\n  showReadingProgress = false;\r\n  readonly appReady = signal(false);\r\n\r\n  constructor() {\r\n\r\n    this.navigationEnd$\r\n      .pipe(take(1))\r\n      .subscribe(() => this.appReady.set(true));\r\n  }\r\n\r\n  ngOnInit() {\r\n    this.navigationEnd$\r\n      .subscribe(event => {\r\n        const url = event.urlAfterRedirects;\r\n\r\n        this.showReadingProgress =\r\n          url.startsWith('/blog/') &&\r\n          url !== '/blog';\r\n\r\n        this.readingProgress = 0;\r\n\r\n        queueMicrotask(() => this.updateReadingProgress());\r\n      });\r\n      this.googleAds.init();\r\n  }\r\n\r\n\r\n  @HostListener('window:scroll')\r\n  onScroll() {\r\n    this.updateReadingProgress();\r\n  }\r\n\r\n  private updateReadingProgress(): void {\r\n\r\n    if (!this.showReadingProgress) return;\r\n    if (!isPlatformBrowser(this.platformId)) return;\r\n\r\n    if (this.articleElement === null) {\r\n      this.articleElement = document.querySelector('.article-content');\r\n    }\r\n\r\n    if (!this.articleElement) return;\r\n\r\n    const articleTop =\r\n      this.articleElement.offsetTop;\r\n\r\n    const articleHeight =\r\n      this.articleElement.offsetHeight;\r\n\r\n    const viewportHeight =\r\n      window.innerHeight;\r\n\r\n    const scroll =\r\n      window.scrollY - articleTop;\r\n\r\n    const maxScroll =\r\n      articleHeight - viewportHeight;\r\n\r\n    this.readingProgress = Math.min(\r\n      100,\r\n      Math.max(0, (scroll / maxScroll) * 100)\r\n    );\r\n  }\r\n\r\n  get isLandingPage() {\r\n    return this.router.url.startsWith('/landing-page');\r\n  }\r\n\r\n  get isMaintenanceLandingPage(){\r\n    return this.router.url.startsWith('/maintenance-applications-metier');\r\n  }\r\n\r\n  get isBlog() {\r\n    return this.router.url === '/blog' || this.router.url.startsWith('/blog/');\r\n  }\r\n\r\n  get isBlogArticle() {\r\n    return this.router.url.startsWith('/blog/');\r\n  }\r\n\r\n}\r\n","@if(appReady()){\r\n  @if (isBlogArticle) {\r\n    <div\r\n      class=\"reading-progress\"\r\n      [style.width.%]=\"readingProgress\"\r\n    >\r\n    </div>\r\n  }\r\n<!--  @if (!isLandingPage && !isMaintenanceLandingPage) {-->\r\n<!--    <app-header></app-header>-->\r\n<!--  }-->\r\n<!--  @if (!isBlog && !isMaintenanceLandingPage) {-->\r\n<!--    <app-floating-helper></app-floating-helper>-->\r\n<!--  }-->\r\n\r\n  <main id=\"main-content\">\r\n    <router-outlet></router-outlet>\r\n  </main>\r\n    <app-footer></app-footer>\r\n\r\n}\r\n","import { inject } from '@angular/core';\r\nimport { ResolveFn, Router } from '@angular/router';\r\nimport { catchError, EMPTY,delay } from 'rxjs';\r\n\r\nimport { BlogService } from '../services/blog.service';\r\nimport {BlogArticleDetailResponse} from '../../../core/interfaces/BlogArticleDetailResponse';\r\n\r\nexport const articleResolver: ResolveFn<BlogArticleDetailResponse> = (route) => {\r\n  const blogService = inject(BlogService);\r\n  const router = inject(Router);\r\n\r\n  const slug = route.paramMap.get('slug')  ?? 'guide-complet-pour-reussir-son-projet-de-creation-de-site-web';\r\n\r\n  return blogService.getArticleBySlug(slug)\r\n};\r\n","import { Routes } from '@angular/router';\r\nimport { articleResolver } from './pages/blog/resolvers/article.resolver';\r\n\r\nexport const routes: Routes = [\r\n  // {\r\n  //   path: '',\r\n  //   loadComponent: () =>\r\n  //     import('./pages/home/home.component').then(m => m.HomeComponent)\r\n  // },\r\n  {\r\n    path: '',\r\n    loadComponent: () =>\r\n      import('./pages/landing-pages/google-ads-landing-page/google-ads-landing-page.component').then(\r\n        m => m.GoogleAdsLandingPageComponent\r\n      )\r\n  },\r\n  {\r\n    path: 'questions-frequentes',\r\n    loadComponent: () =>\r\n      import('./pages/faq-page/faq-page.component').then(\r\n        m => m.FaqPageComponent\r\n      )\r\n  },\r\n\r\n  {\r\n    path: 'mentions-legales',\r\n    loadComponent: () =>\r\n      import('./pages/mentions-legales/mentions-legales.component').then(\r\n        m => m.MentionsLegalesComponent\r\n      )\r\n  },\r\n\r\n  {\r\n    path: 'politique-de-confidentialite',\r\n    loadComponent: () =>\r\n      import('./pages/politique-de-confidentialite/politique-de-confidentialite.component').then(\r\n        m => m.PolitiqueDeConfidentialiteComponent\r\n      )\r\n  },\r\n\r\n  {\r\n    path: 'conditions-generales-prestation',\r\n    loadComponent: () =>\r\n      import('./pages/conditions-generales-prestation/conditions-generales-prestation.component').then(\r\n        m => m.ConditionsGeneralesPrestationComponent\r\n      )\r\n  },\r\n\r\n\r\n\r\n  {\r\n    path: 'maintenance-applications-metier',\r\n    loadComponent: () =>\r\n      import('./pages/landing-pages/maintenance-applications-metier/maintenance-applications-metier.component').then(\r\n        m => m.MaintenanceApplicationsMetierComponent\r\n      )\r\n  },\r\n\r\n  {\r\n    path: 'blog',\r\n    loadComponent: () =>\r\n      import('./pages/blog/pages/blog-list/blog.component').then(\r\n        m => m.BlogComponent\r\n      )\r\n  },\r\n\r\n  {\r\n    path: 'blog/:slug',\r\n    loadComponent: () =>\r\n      import('./pages/blog/pages/blog-detail/blog-detail.component').then(\r\n        m => m.BlogDetailComponent\r\n      ),\r\n    resolve: {\r\n      articleData: articleResolver\r\n    }\r\n  },\r\n\r\n  {\r\n    path: '**',\r\n    redirectTo: ''\r\n  }\r\n];\r\n","import {\r\n  ApplicationConfig,\r\n  importProvidersFrom,\r\n  provideZoneChangeDetection\r\n} from '@angular/core';\r\nimport {provideRouter, withInMemoryScrolling} from '@angular/router';\r\n\r\nimport { routes } from './app.routes';\r\nimport { provideClientHydration } from '@angular/platform-browser';\r\n\r\nimport {provideHttpClient, withFetch} from '@angular/common/http';\r\n\r\nimport { LOCALE_ID } from '@angular/core';\r\nimport {provideMarkdown} from 'ngx-markdown';\r\n\r\n\r\n\r\nexport const appConfig: ApplicationConfig = {\r\n  providers: [\r\n    provideZoneChangeDetection({ eventCoalescing: true }),\r\n    provideRouter(routes,withInMemoryScrolling({\r\n      anchorScrolling: 'enabled',\r\n      scrollPositionRestoration: 'enabled',\r\n    })),\r\n    provideClientHydration(),\r\n    provideHttpClient(withFetch()),\r\n\r\n    {\r\n      provide: LOCALE_ID,\r\n      useValue: 'fr'\r\n    },\r\n    provideMarkdown(),\r\n  ]\r\n};\r\n\r\n","// app.routes.server.ts\r\nimport { RenderMode, ServerRoute } from '@angular/ssr';\r\n\r\nexport const serverRoutes: ServerRoute[] = [\r\n  { path: '', renderMode: RenderMode.Prerender },\r\n  { path: 'questions-frequentes', renderMode: RenderMode.Prerender },\r\n  { path: 'mentions-legales', renderMode: RenderMode.Prerender },\r\n  { path: 'politique-de-confidentialite', renderMode: RenderMode.Prerender },\r\n  { path: 'conditions-generales-prestation', renderMode: RenderMode.Prerender },\r\n  // { path: 'landing-page', renderMode: RenderMode.Prerender },\r\n  { path: 'maintenance-applications-metier', renderMode: RenderMode.Prerender },\r\n  { path: 'blog', renderMode: RenderMode.Prerender },\r\n\r\n  {\r\n    path: 'blog/:slug',\r\n    renderMode: RenderMode.Prerender,\r\n\r\n    async getPrerenderParams() {\r\n      console.log('GET PARAMS');\r\n\r\n      const response = await fetch(\r\n        'https://api.cristian-tudoroiu.fr/api/blog/getSlugs'\r\n      );\r\n\r\n      const slugs: string[] = await response.json();\r\n\r\n      return slugs.map(slug => ({ slug }));\r\n    }\r\n  },\r\n\r\n  {\r\n    path: '**',\r\n    renderMode: RenderMode.Server\r\n  }\r\n];\r\n","import {provideServerRendering, withRoutes} from '@angular/ssr';\r\nimport { mergeApplicationConfig, ApplicationConfig } from '@angular/core';\r\nimport { appConfig } from './app.config';\r\nimport { serverRoutes } from './app.routes.server';\r\nconst serverConfig: ApplicationConfig = {\r\n  providers: [\r\n    provideServerRendering(withRoutes(serverRoutes)),\r\n  ]\r\n};\r\n\r\nexport const config = mergeApplicationConfig(appConfig, serverConfig);\r\n","import { bootstrapApplication, BootstrapContext } from '@angular/platform-browser';\r\nimport { AppComponent } from './app/app.component';\r\nimport { config } from './app/app.config.server';\r\n\r\nconst bootstrap = (context: BootstrapContext) => bootstrapApplication(AppComponent, config, context);\r\n\r\nexport default bootstrap;\r\n"],"mappings":"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","names":["manifest","getDefaultExportFromCjs","x","lib","Event_1","hasRequiredEvent","requireEvent","Event","type","dictionary","p","bubbles","cancelable","UIEvent_1","hasRequiredUIEvent","requireUIEvent","UIEvent","view","detail","MouseEvent_1","hasRequiredMouseEvent","requireMouseEvent","MouseEvent","screenX","screenY","clientX","clientY","ctrlKey","altKey","shiftKey","metaKey","button","relatedTarget","key","utils","config","hasRequiredConfig","requireConfig","hasRequiredUtils","requireUtils","isApiWritable","expr","msg","src","c","a","b","n","m","s","EventTarget_1","hasRequiredEventTarget","requireEventTarget","EventTarget","listener","capture","list","i","l","obj","event","trusted","invoke","target","phase","handler","rv","f","fn","ancestors","ii","nn","activated","click","result","LinkedList","hasRequiredLinkedList","requireLinkedList","LinkedList$1","a_first","a_last","b_first","b_last","prev","next","NodeUtils","hasRequiredNodeUtils","requireNodeUtils","serializeOne","escapeMatchingClosingTag","escapeClosingCommentTag","escapeProcessingInstructionContent","NAMESPACE","hasRawContent","emptyElements","extraNewLine","ESCAPE_REGEXP","ESCAPE_ATTR_REGEXP","escape","escapeAttr","attrname","ns","rawText","parentTag","parentClosingTag","CLOSING_COMMENT_REGEXP","rawContent","kid","parent","html","tagname","j","k","ss","upperTag","parenttag","content","Node_1","hasRequiredNode","requireNode","Node","ELEMENT_NODE","ATTRIBUTE_NODE","TEXT_NODE","CDATA_SECTION_NODE","ENTITY_REFERENCE_NODE","ENTITY_NODE","PROCESSING_INSTRUCTION_NODE","COMMENT_NODE","DOCUMENT_NODE","DOCUMENT_TYPE_NODE","DOCUMENT_FRAGMENT_NODE","NOTATION_NODE","DOCUMENT_POSITION_DISCONNECTED","DOCUMENT_POSITION_PRECEDING","DOCUMENT_POSITION_FOLLOWING","DOCUMENT_POSITION_CONTAINS","DOCUMENT_POSITION_CONTAINED_BY","DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC","node","v","sum","child","isPreinsert","refChild","that","these","those","c1","c2","deep","clone","e","prefix","defaultNamespace","kids","before","isReplace","before_index","child_index","bothRooted","spliceArgs","len","time","prevChild","NodeList_es6","hasRequiredNodeList_es6","requireNodeList_es6","idx","NodeList_es5","hasRequiredNodeList_es5","requireNodeList_es5","item","NodeList","NodeList_1","hasRequiredNodeList","requireNodeList","ContainerNode_1","hasRequiredContainerNode","requireContainerNode","ContainerNode","first","childNodes","root","xmlnames","hasRequiredXmlnames","requireXmlnames","isValidName","isValidQName","simplename","simpleqname","ncnamestartchars","ncnamechars","ncname","namestartchars","namechars","name","qname","hassurrogates","surrogatechars","surrogatepairs","surrogatename","surrogateqname","chars","pairs","attributes","hasRequiredAttributes","requireAttributes","attr","valid","val","missingValueDefault","invalidValueDefault","numberPropDesc","def","unsigned_long","signed_long","unsigned_fallback","min","max","setmin","FilteredElementList_1","hasRequiredFilteredElementList","requireFilteredElementList","FilteredElementList","filter","elt","start","DOMTokenList_1","hasRequiredDOMTokenList","requireDOMTokenList","DOMTokenList","getter","setter","index","getList","token","handleErrors","force","newToken","idx2","fixIndex","clist","oldLength","toArray","length","arr","strProp","str","seen","select","hasRequiredSelect","requireSelect","module","exports","window","compareDocumentPosition","order","el","lastChild","parentIsElement","nodeType","unquote","ch","rules","cp","decodeid","indexOf","makeInside","end","regex","replace","truncateUrl","url","num","parseNth","param_","test","param","cap","nth","last","group","offset","find","advance","rel","pos","selectors","op","operators","sel","compileGroup","args","arg","con","context","href","prop","text","combinators","ref","doc","nodes","compile","sel_","buff","subject","tok","makeSubject","makeSimple","makeTest","value","func","scope","tests","results","id","r","ChildNode_1","hasRequiredChildNode","requireChildNode","createDocumentFragmentFromArguments","document","docFrag","argItem","isNode","ChildNode","argArr","parentNode","nextSibling","prevSibling","NonDocumentTypeChildNode_1","hasRequiredNonDocumentTypeChildNode","requireNonDocumentTypeChildNode","NonDocumentTypeChildNode","NamedNodeMap_1","hasRequiredNamedNodeMap","requireNamedNodeMap","NamedNodeMap","element","qualifiedName","namespace","localName","lname","Element_1","hasRequiredElement","requireElement","Element","xml","uppercaseCache","namespaceURI","recursiveGetText","tn","up","strings","newtext","parser","position","data","textNode","ChildrenCollection","AttributesArray","htmlLocalNameElementFilter","localNameElementFilter","namespaceElementFilter","namespaceLocalNameElementFilter","names","classNamesElementFilter","elementNameFilter","originalElement","isnew","Attr","oldAttrs","oldAttr","onchange","existing","self","dtlist","selector","oldval","newval","namedElts","lclname","Leaf_1","hasRequiredLeaf","requireLeaf","Leaf","HierarchyRequestError","NotFoundError","CharacterData_1","hasRequiredCharacterData","requireCharacterData","CharacterData","count","curtext","suffix","Text_1","hasRequiredText","requireText","Text","nodeValue","newdata","newnode","Comment_1","hasRequiredComment","requireComment","Comment","DocumentFragment_1","hasRequiredDocumentFragment","requireDocumentFragment","DocumentFragment","ProcessingInstruction_1","hasRequiredProcessingInstruction","requireProcessingInstruction","ProcessingInstruction","NodeFilter_1","hasRequiredNodeFilter","requireNodeFilter","NodeFilter","NodeTraversal","hasRequiredNodeTraversal","requireNodeTraversal","nextSkippingChildren","nextAncestorSibling","previous","deepLastChild","stayWithin","TreeWalker_1","hasRequiredTreeWalker","requireTreeWalker","TreeWalker","mapChild","mapSibling","traverseChildren","tw","sibling","traverseSiblings","whatToShow","previousSibling","firstChild","CHILDREN","NodeIterator_1","hasRequiredNodeIterator","requireNodeIterator","NodeIterator","move","directionIsNext","isInclusiveAncestor","possibleChild","traverse","ni","beforeNode","toBeRemovedNode","URL_1","hasRequiredURL","requireURL","URL","match","userinfo","relative","base","t","remove_dot_segments","merge","basepath","refpath","lastslash","path","output","twochars","threechars","fourchars","segment","CustomEvent_1","hasRequiredCustomEvent","requireCustomEvent","CustomEvent","events","hasRequiredEvents","requireEvents","htmlelts","style_parser","hasRequiredStyle_parser","requireStyle_parser","parse","styles","parenDepth","quote","valueStart","propStart","currentProp","hyphenate","styleVal","CSSStyleDeclaration_1","hasRequiredCSSStyleDeclaration","requireCSSStyleDeclaration","style","CSSStyleDeclaration","property","dasherizeProperty","IMPORTANT_BANG","parseStyles","styleValues","NO_CHANGE","priority","newprops","URLUtils_1","hasRequiredURLUtils","requireURLUtils","URLUtils","originForPort","defaultPort","origin","proto","desc","defineElement","hasRequiredDefineElement","requireDefineElement","spec","defaultConstructor","tagList","tagNameToImpl","props","addEventHandlers","tag","EventHandlerBuilder","body","form","EventHandlerChangeHandler","eventHandlerTypes","hasRequiredHtmlelts","requireHtmlelts","htmlElements","htmlNameToImpl","impl","HTMLUnknownElement","define","HTMLElement","CORS","REFERRER","focusableElements","HTMLFormElement","success","formAssociatedProps","items","svg","hasRequiredSvg","requireSvg","svgElements","svgNameToImpl","SVGElement","MutationConstants","hasRequiredMutationConstants","requireMutationConstants","Document_1","hasRequiredDocument","requireDocument","Document","DOMImplementation","requireDOMImplementation","MUTATE","isHTML","address","supportedEvents","replacementEvent","mirrorAttr","defaultValue","o","validateAndExtract","targetNid","details","ve","interfaceName","constructor","toBeRemoved","MultiId","recursivelySetOwner","head","htmlElement","namedHTMLChild","d","recursivelyUproot","recursivelyRoot","newDoc","uproot","owner","nid","DocumentType_1","hasRequiredDocumentType","requireDocumentType","DocumentType","ownerDocument","publicId","systemId","HTMLParser_1","hasRequiredHTMLParser","requireHTMLParser","HTMLParser","pushAll","EOF","TEXT","TAG","ENDTAG","COMMENT","DOCTYPE","NOATTRS","quirkyPublicIds","quirkySystemId","conditionallyQuirkyPublicIds","limitedQuirkyPublicIds","specialSet","addressdivpSet","dddtSet","tablesectionrowSet","impliedEndTagsSet","thoroughImpliedEndTagsSet","tableContextSet","tableBodyContextSet","tableRowContextSet","formassociatedSet","inScopeSet","inListItemScopeSet","inButtonScopeSet","inTableScopeSet","invertedSelectScopeSet","mathmlTextIntegrationPointSet","htmlIntegrationPointSet","foreignAttributes","svgAttrAdjustments","svgTagNameAdjustments","numericCharRefReplacements","namedCharRefs","NAMEDCHARREF","DBLQUOTEATTRVAL","SINGLEQUOTEATTRVAL","UNQUOTEDATTRVAL","TAGNAME","ATTRNAME","CDATATEXT","DATATEXT","RAWTEXT","PLAINTEXT","SIMPLETAG","SIMPLEATTR","NONWS","ALLNONWS","NONWSNONNUL","LEADINGWS","NULCHARS","buf2str","buf","CHUNKSIZE","str2buf","isA","set","tagnames","isMathmlTextIntegrationPoint","isHTMLIntegrationPoint","encoding","adjustSVGTagName","adjustSVGAttributes","attrs","adjustMathMLAttributes","adjustForeignAttributes","transferAttributes","localname","butnot","thorough","endTagSet","equal","attrcopy","newelt","oldelt","oldattrs","oldname","fragmentContext","options","numchars","nextchar","input_complete","scanner_skip_newline","reentrant_invocations","saved_scanner_state","leftovers","first_batch","paused","tokenizer","data_state","return_state","character_reference_code","tagnamebuf","lasttagname","tempbuf","attrnamebuf","attrvaluebuf","commentbuf","doctypenamebuf","doctypepublicbuf","doctypesystembuf","is_end_tag","initial_mode","originalInsertionMode","templateInsertionModes","stack","afe","fragment","head_element_pointer","form_element_pointer","scripting_enabled","frameset_ok","force_quirks","pending_table_text","text_integration_mode","textrun","textIncludesNUL","ignore_linefeed","htmlparser","frag","shouldPauseFunc","moreToDo","scanChars","rcdata_state","plaintext_state","in_template_mode","resetInsertionMode","codepoint","pattern","eof","needsString","addAttribute","handleSimpleAttribute","matched","after_attribute_value_quoted_state","before_attribute_name_state","beginTagName","beginEndTagName","beginTempBuf","beginAttrName","beginAttrValue","beginComment","beginDoctype","beginDoctypePublicId","beginDoctypeSystemId","forcequirks","cdataAllowed","appropriateEndTag","flushText","insertToken","getMatchingChars","emitCharsWhile","emitCharString","emitTag","emitSimpleTag","endtag","emitSelfClosingTag","emitDoctype","emitEOF","arg3","arg4","current","insertForeignToken","insertComment","foster_parent_mode","fosterParent","insertText","createHTMLElt","insertHTMLElement","insertElement","eltFunc","insertForeignElement","lastElementOfType","lastTable","lastTemplate","ancestor","in_select_in_table_mode","in_select_mode","in_row_mode","in_table_body_mode","in_caption_mode","in_column_group_mode","in_table_mode","in_body_mode","in_frameset_mode","before_head_mode","after_head_mode","in_head_mode","in_cell_mode","parseRawText","rawtext_state","text_mode","parseRCDATA","afeclone","afereconstruct","entry","BOOKMARK","adoptionAgency","outer","fmtelt","furthestblock","furthestblockindex","lastnode","nodeindex","nodeafeindex","inner","newelt2","handleScriptEnd","stopParsing","reconsume","new_state","character_reference_state","tag_open_state","rcdata_less_than_sign_state","rawtext_less_than_sign_state","script_data_state","script_data_less_than_sign_state","markup_declaration_open_state","end_tag_open_state","tag_name_state","bogus_comment_state","self_closing_start_tag_state","rcdata_end_tag_open_state","rcdata_end_tag_name_state","rawtext_end_tag_open_state","rawtext_end_tag_name_state","script_data_end_tag_open_state","script_data_escape_start_state","script_data_end_tag_name_state","script_data_escape_start_dash_state","script_data_escaped_dash_dash_state","script_data_escaped_state","script_data_escaped_dash_state","script_data_escaped_less_than_sign_state","script_data_escaped_end_tag_open_state","script_data_double_escape_start_state","script_data_escaped_end_tag_name_state","script_data_double_escaped_state","script_data_double_escaped_dash_state","script_data_double_escaped_less_than_sign_state","script_data_double_escaped_dash_dash_state","script_data_double_escape_end_state","attribute_name_state","after_attribute_name_state","before_attribute_value_state","attribute_value_double_quoted_state","attribute_value_single_quoted_state","attribute_value_unquoted_state","lookahead","comment","comment_start_state","doctype_state","cdata_section_state","comment_start_dash_state","comment_state","comment_end_state","comment_less_than_sign_state","comment_end_dash_state","comment_less_than_sign_bang_state","comment_less_than_sign_bang_dash_state","comment_less_than_sign_bang_dash_dash_state","comment_end_bang_state","before_doctype_name_state","doctype_name_state","after_doctype_name_state","after_doctype_public_keyword_state","after_doctype_system_keyword_state","bogus_doctype_state","before_doctype_public_identifier_state","doctype_public_identifier_double_quoted_state","doctype_public_identifier_single_quoted_state","after_doctype_public_identifier_state","between_doctype_public_and_system_identifiers_state","doctype_system_identifier_double_quoted_state","doctype_system_identifier_single_quoted_state","before_doctype_system_identifier_state","after_doctype_system_identifier_state","cdata_section_bracket_state","cdata_section_end_state","character_reference_end_state","numeric_character_reference_state","named_character_reference_state","hexadecimal_character_reference_start_state","decimal_character_reference_start_state","hexadecimal_character_reference_state","decimal_character_reference_state","numeric_character_reference_end_state","publicid","systemid","before_html_mode","ws","in_head_noscript_mode","activeElement","after_body_mode","openform","getTypeAttr","in_table_text_mode","end_caption","endsect","endrow","switchModeAndReprocess","mode","after_after_body_mode","after_frameset_mode","after_after_frameset_mode","isHTMLFont","input","initialState","lastStartTag","charbychar","tokens","DOMImplementation_1","hasRequiredDOMImplementation","contextObject","supportedFeatures","feature","version","doctype","titleText","title","Location_1","hasRequiredLocation","requireLocation","Location","newurl","NavigatorID_1","hasRequiredNavigatorID","requireNavigatorID","NavigatorID","WindowTimers_1","hasRequiredWindowTimers","requireWindowTimers","WindowTimers","hasRequiredImpl","requireImpl","requireWindow","Window_1","hasRequiredWindow","Window","hasRequiredLib","requireLib","libExports","setDomTypes","parseDocument","serializeDocument","DominoAdapter","BrowserDomAdapter","setRootDomAdapter","evt","win","RuntimeError","INITIAL_CONFIG","InjectionToken","BEFORE_APP_SERIALIZED","ENABLE_DOM_EMULATION","PlatformState","enableDomEmulation","inject","Injector","_doc","measuringLabel","startMeasuring","rendered","stopMeasuring","__ngFactoryType__","ɵɵinject","DOCUMENT","ɵɵdefineInjectable","injector","HTTP_OR_HTTPS_PROTOCOL_REGEX","parseUrl","urlStr","originUrl","resolved","allowProtocolRelative","allowOriginChange","isSafeOriginChange","throwSuspiciousUrlError","ServerXhr","__async","xhr","URL_SCHEMA_REGEXP","relativeUrlsTransformerInterceptorFn","request","trimmedUrl","platformLocation","PlatformLocation","protocol","hostname","port","urlPrefix","baseHref","baseUrl","parsedUrl","SERVER_HTTP_PROVIDERS","XhrFactory","HTTP_ROOT_INTERCEPTOR_FNS","ServerPlatformLocation","Subject","_config","pathname","search","hash","parsedOrigin","getDOM","subscription","oldUrl","newUrl","state","writableThis","ServerEventManagerPlugin","EventManagerPlugin","eventName","TRANSFER_STATE_SERIALIZATION_PROVIDERS","BEFORE_APP_SERIALIZED","serializeTransferStateFactory","createScript","doc","textContent","nonce","script","serializeTransferStateFactory","doc","inject","DOCUMENT","appId","APP_ID","transferStore","TransferState","injector","Injector","measuringLabel","startMeasuring","content","script","createScript","stopMeasuring","INTERNAL_SERVER_PLATFORM_PROVIDERS","_document","PLATFORM_ID","PLATFORM_SERVER_ID","PLATFORM_INITIALIZER","initDominoAdapter","PlatformLocation","ServerPlatformLocation","Optional","INITIAL_CONFIG","PlatformState","_enableDomEmulation","enableDomEmulation","DominoAdapter","BrowserDomAdapter","SERVER_RENDER_PROVIDERS","EVENT_MANAGER_PLUGINS","ServerEventManagerPlugin","PLATFORM_SERVER_PROVIDERS","TRANSFER_STATE_SERIALIZATION_PROVIDERS","SERVER_HTTP_PROVIDERS","Testability","TESTABILITY","ViewportScroller","NullViewportScroller","_document","injector","config","INITIAL_CONFIG","_enableDomEmulation","enableDomEmulation","document","parseDocument","parseUrl","getDOM","setDocument","platformServer","extraProviders","createPlatformFactory","platformCore","INTERNAL_SERVER_PLATFORM_PROVIDERS","provideServerRendering","makeEnvironmentProviders","PLATFORM_SERVER_PROVIDERS","EVENT_DISPATCH_SCRIPT_ID","findEventDispatchScript","doc","EVENT_DISPATCH_SCRIPT_ID","removeEventDispatchScript","prepareForHydration","platformState","applicationRef","measuringLabel","startMeasuring","environmentInjector","IS_HYDRATION_DOM_REUSE_ENABLED","appendSsrContentIntegrityMarker","eventTypesToReplay","annotateForHydration","insertEventRecordScript","APP_ID","CSP_NONCE","stopMeasuring","comment","SSR_CONTENT_INTEGRITY_MARKER","appendServerContextInfo","injector","serverContext","sanitizeServerContext","SERVER_CONTEXT","DEFAULT_SERVER_CONTEXT","componentRef","renderer","Renderer2","element","appId","nonce","regular","capture","eventDispatchScript","replayScriptContents","replayScript","createScript","renderInternal","platformRef","__async","PlatformState","callbacks","BEFORE_APP_SERIALIZED","asyncCallbacks","callback","callbackResult","e","result","DEFAULT_SERVER_CONTEXT","SERVER_CONTEXT","InjectionToken","sanitizeServerContext","serverContext","context","createNotImplementedError","name","notImplemented","writeFile$1","notImplemented","readFile$1","notImplemented","callbackify","fn","fnc","args","cb","error","val","readFile","readFile$1","writeFile","writeFile$1","_DRIVE_LETTER_START_RE","normalizeWindowsPath","input","r","_UNC_REGEX","_IS_ABSOLUTE_RE","_DRIVE_LETTER_RE","_ROOT_FOLDER_RE","sep","delimiter","normalize","path","isUNCPath","isPathAbsolute","isAbsolute","trailingSeparator","normalizeString","join","arguments_","joined","argument","cwd","resolve","resolvedPath","resolvedAbsolute","index","allowAboveRoot","res","lastSegmentLength","lastSlash","dots","char","lastSlashIndex","p","toNamespacedPath","_EXTNAME_RE","extname","match","relative","from","to","_from","_to","_fromCopy","segment","dirname","segments","format","basename","extension","lastSegment","parse$3","root","base","_path","_pathModule","__spreadProps","__spreadValues","getDefaultExportFromCjs","x","getAugmentedNamespace","n","f","a","isInstance","k","d","picocolors_browser","hasRequiredPicocolors_browser","requirePicocolors_browser","create","_nodeResolve_empty","_nodeResolve_empty$1","require$$2","cssSyntaxError","hasRequiredCssSyntaxError","requireCssSyntaxError","pico","terminalHighlight","CssSyntaxError","message","line","column","source","file","plugin","color","css","aside","text","mark","highlight","bold","gray","red","lines","start","end","maxWidth","number","gutter","padding","subLineStart","subLineEnd","subLine","spacing","code","stringifier","hasRequiredStringifier","requireStringifier","STYLE_TAG","COMMENT_OPEN","escapeHTMLInCSS","str","DEFAULT_RAW","capitalize","Stringifier","builder","node","semicolon","raws","name","params","detect","value","buf","depth","indent","step","between","after","nodes","last","isDocument","i","child","before","left","right","rawVal","string","own","parent","cache","method","parts","prop","raw","stringify_1","hasRequiredStringify","requireStringify","stringify","symbols","hasRequiredSymbols","requireSymbols","hasRequiredNode$1","requireNode$1","isClean","my","cloneNode","obj","cloned","type","j","sourceOffset","inputCSS","position","offset","Node","defaults","s","add","overrides","keepBetween","opts","next","pos","inputString","defaultType","bookmark","foundSelf","result","_","inputs","fixed","emitInputs","inputsNextIndex","inputId","data","comment","hasRequiredComment","requireComment","Comment","declaration","hasRequiredDeclaration","requireDeclaration","Declaration","container","hasRequiredContainer$1","requireContainer$1","AtRule","parse","Root","Rule","cleanSource","markTreeDirty","Container","children","callback","iterator","condition","other","exist","existIndex","id","sample","pattern","decl","e","selector","dependant","atRule","hasRequiredAtRule","requireAtRule","document","hasRequiredDocument","requireDocument","LazyResult","Processor","Document","nonSecure","hasRequiredNonSecure","requireNonSecure","urlAlphabet","size","alphabet","defaultSize","previousMap","hasRequiredPreviousMap","requirePreviousMap","existsSync","readFileSync","SourceMapConsumer","SourceMapGenerator","fromBase64","PreviousMap","prev","baseCharsetUri","baseUri","charsetUri","uri","uriMatch","baseUriMatch","encoding","sourceMapString","map","comments","cssFile","trusted","prevPath","unknown","hasRequiredInput","requireInput","nanoid","fileURLToPath","pathToFileURL","lineToIndexCache","sourceMapAvailable","pathAvailable","getLineToIndex","lineToIndex","prevIndex","l","Input","endColumn","endLine","endOffset","origin","lastLine","min","max","mid","consumer","fromUrl","json","hasRequiredRoot","requireRoot","ignore","list_1","hasRequiredList","requireList","list","spaces","separators","array","current","split","func","inQuote","prevQuote","escape","letter","rule","hasRequiredRule","requireRule","values","fromJSON_1","hasRequiredFromJSON","requireFromJSON","fromJSON","_a","ownInputs","__objRest","inputHydrated","_b","mapGenerator","hasRequiredMapGenerator","requireMapGenerator","MapGenerator","cssString","content","eol","startIndex","endIndex","noSource","mapping","annotation","cached","already","fileURL","url","tokenize","hasRequiredTokenize","requireTokenize","SINGLE_QUOTE","DOUBLE_QUOTE","BACKSLASH","SLASH","NEWLINE","SPACE","FEED","TAB","CR","OPEN_SQUARE","CLOSE_SQUARE","OPEN_PARENTHESES","CLOSE_PARENTHESES","OPEN_CURLY","CLOSE_CURLY","SEMICOLON","ASTERISK","COLON","AT","RE_AT_END","RE_WORD_END","RE_BAD_BRACKET","RE_HEX_ESCAPE","options","quote","currentToken","escaped","escapePos","length","buffer","returned","lastBadParen","unclosed","what","endOfFile","nextToken","ignoreUnclosed","controlChar","back","token","parser","hasRequiredParser","requireParser","tokenizer","SAFE_COMMENT_NEIGHBOR","findLastWithPosition","tokens","Parser","shift","open","brackets","colon","founded","element","customProperty","firstSpaces","bracket","clean","all","lastTokenType","parse_1","hasRequiredParse","requireParse","warning","hasRequiredWarning","requireWarning","Warning","range","opt","hasRequiredResult","requireResult","Result","processor","warnOnce","hasRequiredWarnOnce","requireWarnOnce","printed","lazyResult","hasRequiredLazyResult","requireLazyResult","TYPE_TO_CLASS_NAME","PLUGIN_PROPS","NOT_VISITORS","CHILDREN","isPromise","getEvents","key","toStack","events","cleanMarks","postcss","onRejected","onFinally","pluginName","pluginVer","runtimeVer","b","err","event","filter","__async","promise","stack","visitor","roots","subRoot","rootSource","onFulfilled","visitors","visit","noWorkResult","hasRequiredNoWorkResult","requireNoWorkResult","NoWorkResult","self","generatedCSS","generatedMap","hasRequiredProcessor","requireProcessor","plugins","normalized","postcss_1","hasRequiredPostcss","requirePostcss","initializer","warningPrinted","creator","transformer","processOpts","pluginOpts","postcssExports","parse$2","dist","Node$1","hasRequiredNode","requireNode","hasRequiredContainer","requireContainer","_Node","_Node2","_interopRequireDefault","Container$1","_this","hasFilter","filterReg","filtered","parsers","hasRequiredParsers","requireParsers","parseMediaFeature","parseMediaQuery","parseMediaList","_Container","_Container2","modesEntered","lastModeIndex","mediaFeature","mediaFeatureValue","indexLocal","stringNormalized","character","mediaFeatureValueStr","localLevel","insideSomeValue","resetNode","_i","interimIndex","levelLocal","doesHaveUrl","parenthesesLv","_i2","_character","_mediaQueryString","_spaceBefore","mediaQueryString","spaceBefore","hasRequiredDist","requireDist","parseMedia","_parsers","distExports","mediaParser","boolbase$1","hasRequiredBoolbase","requireBoolbase","boolbaseExports","boolbase","SelectorType","AttributeAction","reName","reEscape","CharCode","actionTypes","unpackPseudos","pseudosToPseudoElements","isTraversal$1","stripQuotesFromPseudos","funescape","escapedWhitespace","high","unescapeCSS","isQuote","c","isWhitespace$1","parse$1","subselects","parseSelector","selectorIndex","getName","stripWhitespace","readValueWithParenthesis","counter","ensureNotTraversal","addTraversal","addSpecialAttribute","action","finalizeSubselector","loop","firstChar","namespace","possibleAction","ignoreCase","sectionStart","valueStart","attributeSelector","quot","ElementType","isTag$1","elem","Text$1","Directive","Comment$1","Script","Style","Tag","CDATA$1","Doctype","recursive","DataNode","Text","ProcessingInstruction","NodeWithChildren","CDATA","Element","attribs","isTag","isCDATA","isText","isComment","isDirective","hasChildren","cloneChildren","clone","instruction","childs","defaultOpts","DomHandler","elementCB","lastNode","previousSibling","xmlReplacer","xmlCodeMap","getCodePoint","encodeXML","ret","lastIdx","getEscaper","regex","escapeAttribute","escapeText","elementNames","attributeNames","unencodedElements","replaceQuotes","formatAttributes","attributes","encode","singleTag","render","output","renderNode","renderDirective","renderComment","renderCdata","renderTag","renderText","foreignModeIntegrationPoints","foreignElements","tag","getOuterHTML","getInnerHTML","getText","textContent","innerText","getChildren","getParent","getSiblings","siblings","getAttributeValue","hasAttrib","nextElementSibling","prevElementSibling","removeElement","childsIndex","replaceElement","replacement","appendChild","sibling","append","currNext","prependChild","prepend","test","recurse","limit","find","nodeStack","indexStack","findOneChild","findOne$1","searchedNodes","found","existsOne","findAll$1","Checks","getAttribCheck","attrib","combineFuncs","compileTest","funcs","testElement","getElements","getElementById","getElementsByTagName","tagName","getElementsByClassName","className","getElementsByTagType","removeSubsets","idx","ancestor","DocumentPosition","compareDocumentPosition","nodeA","nodeB","aParents","bParents","maxIdx","sharedParent","aSibling","bSibling","uniqueSort","arr","getFeed","doc","feedRoot","getOneElement","isValidFeed","getAtomFeed","getRssFeed","feed","item","entry","getMediaElements","addConditionally","href","description","fetch","pubDate","updated","MEDIA_KEYS_STRING","MEDIA_KEYS_INT","where","media","DomUtils","reChars","escapeRegex","caseInsensitiveAttributes","shouldIgnoreCase","attributeRules","adapter","attr","len","findAll","query","elems","xmlMode","findOne","getNextSiblings","elemIndex","getElementParent","textControl","aliases","whitespace","ZERO","NINE","formula","sign","readSign","readNumber","skipWhitespace","compile","parsed","absA","bMod","nthCheck","cacheParentResults","cacheResults","matches","resultCache","addResultToCache","filters","itext","equals","currentSibling","_rule","context","dynamicStatePseudo","isDocumentWhiteSpace","pseudos","firstChild","elemName","verifyPseudoArgs","subselect","argIndex","isTraversal","sortRules","ratings","getQuality","procNew","getAttributeQuality","includesScopePseudo","t","PLACEHOLDER_ELEMENT","hasDependsOnCurrentElement","sel","copyOptions","is","compileToken","_context","skipCache","compiled","hasOne","compilePseudoSelector","userPseudo","stringPseudo","alias","pseudo","compileGeneralSelector","hasExpensiveSubselector","previous","lastElement","DESCENDANT_TOKEN","FLEXIBLE_DESCENDANT_TOKEN","SCOPE_TOKEN","absolutize","hasContext","ctx","rootFunc","isArrayContext","finalContext","shouldTestNextSiblings","combineLoop","rules","first","second","or","defaultEquals","defaultOptions","convertOptionFormats","_compileUnsafe","_compileToken","getSelectorFunc","searchFunc","elements","filteredElements","prepareContext","appendNextSiblings","elemsLength","nextSiblings","selectAll","selectOne","htmlDecodeTree","xmlDecodeTree","decodeMap","fromCodePoint","codePoint","replaceCodePoint","CharCodes$1","CharCodes","TO_LOWER_BIT","BinTrieFlags","isNumber","isHexadecimalCharacter","isAsciiAlphaNumeric","isEntityInAttributeInvalidEnd","EntityDecoderState","DecodingMode","EntityDecoder","decodeTree","emitCodePoint","errors","decodeMode","digitCount","lastCp","expectedLength","valueLength","determineBranch","consumed","nodeIndex","branchCount","jumpOffset","lo","hi","midValue","State","isWhitespace","isEndOfTagSection","isASCIIAlpha","QuoteType","Sequences","Tokenizer","decodeEntities","cbs","cp","chunk","isEnd","endOfText","actualIndex","sequence","lower","formTags","pTag","tableSectionTags","ddtTags","rtpTags","openImpliesClose","voidElements","foreignContextElements","htmlIntegrationElements","reNameEnd","_c","_d","_e","_f","impliesClose","isImplied","_g","_h","isOpenImplied","_j","_k","slice","parseDocument","handler","picocolors_browserExports","pc","parseStylesheet","stylesheet","serializeStylesheet","ast","cssParts","prefix","lastItemIdx","markOnly","predicate","applyMarkedSelectors","walkStyleRules","hasNestedRules","filterSelectors","walkStyleRulesWithReverseMirror","node2","splitFilter","_rules","rules2","rule2","aOut","bOut","MEDIA_TYPES","MEDIA_KEYWORDS","MEDIA_FEATURES","feature","validateMediaType","nodeType","nodeValue","validateMediaQuery","mediaTree","nodeTypes","classCache","idCache","buildCache","queue","cls","createDocument","html","extendDocument","extendElement","beastiesContainer","serializeDocument","extended","referenceNode","cachedQuerySelector","selectorTokensCache","selectorTokens","parseRelevantSelectors","relevantTokens","tokenGroup","LOG_LEVELS","defaultLogger","msg","createLogger","logLevel","logLevelIdx","logger","isSubpath","basePath","currentPath","removePseudoClassesAndElementsPattern","implicitUniversalPattern","emptyCombinatorPattern","removeTrailingCommasPattern","Beasties","#selectorCache","filename","fs","reject","externalSheets","link","styles","style","sheet","_style","outputPath","publicPath","normalizedPath","pathPrefix","styleSheetsIncluded","sources","preloadMode","cssLoaderPreamble","noscriptFallback","updateLinkToPreload","noscriptLink","script","js","bodyLink","noscript","sheetInverse","minSize","shouldInline","keyframesMode","astInverse","criticalFonts","failedSelectors","criticalKeyframeNames","includeNext","includeAll","excludeNext","excludeAll","shouldPreloadFonts","shouldInlineFonts","beastiesComment","command","exp","name2","nameTrimmed","preloadedFonts","family","src","preload","afterText","styleInlinedCompletely","formatSize","cssFilePath","percent","normalizedSelector","abbreviations","roundedSize","fractionDigits","ServerAssets","manifest","path","asset","IGNORED_LOGS","Console","message","angularAppManifest","setAngularAppManifest","getAngularAppManifest","stripTrailingSlash","url","stripLeadingSlash","addLeadingSlash","addTrailingSlash","joinUrlParts","parts","normalizedParts","part","start","end","stripIndexHtmlFromURL","modifiedURL","buildPathWithParams","toPath","fromPath","fromPathParts","toPathParts","resolvedParts","index","MATRIX_PARAMS_REGEX","stripMatrixParams","pathname","renderAngular","html","bootstrap","platformProviders","serverContext","__async","urlToRender","platformRef","platformServer","INITIAL_CONFIG","SERVER_CONTEXT","Console","redirectTo","hasNavigationError","applicationRef","isNgModule","ApplicationRef","envInjector","routerIsProvided","ActivatedRoute","lastSuccessfulNavigation","Router","requestPrefix","APP_BASE_HREF","REQUEST","search","hash","PlatformLocation","finalUrl","constructDecodedUrl","resolve","reject","renderInternal","asyncDestroyPlatform","error","value","prefix","urlParts","promiseWithAbort","promise","signal","errorMessagePrefix","abortHandler","ServerRenderingFeatureKind","RenderMode","PrerenderFallback","SERVER_ROUTES_CONFIG","InjectionToken","withRoutes","routes","config","provideServerRendering","features","hasAppShell","hasServerRoutes","providers","ɵkind","ɵproviders","ServerRenderingFeatureKind","makeEnvironmentProviders","RouteTree","_RouteTree","route","metadata","node","segments","normalizedSegments","segment","normalizedSegment","childNode","__spreadProps","__spreadValues","addLeadingSlash","value","tree","_a","_b","__objRest","__yieldStar","currentIndex","exactMatch","match","wildcardMatch","MODULE_PRELOAD_MAX","CATCH_ALL_REGEXP","URL_PARAMETER_REGEXP","VALID_REDIRECT_RESPONSE_CODES$1","handleRoute","options","__asyncGenerator","currentRoutePath","compiler","parentInjector","serverConfigRouteTree","entryPointToBrowserMapping","invokeGetPrerenderParams","includePrerenderFallbackRoutes","redirectTo","loadChildren","loadComponent","children","ɵentryName","appendPreloadToMetadata","RenderMode","handleSSGRoute","resolveRedirectTo","traverseRoutesConfig","routeInjector","createEnvironmentInjector","EnvironmentInjector","loadedChildRoutes","__await","childRoutes","injector","error","routeConfigs","parentPreloads","parentRoute","matcher","path","joinUrlParts","matches","matchedMetaData","stripLeadingSlash","addTrailingSlash","entryName","existingPreloads","preload","combinedPreloads","href","fallback","meta","getPrerenderParams","isCatchAllRoute","catchAllRoutePath","parameters","runInInjectionContext","params","replacer","handlePrerenderParamsReplacement","routeWithResolvedParams","PrerenderFallback","parameterName","routePath","buildServerConfigRouteTree","routes","appShellRoute","serverRoutes","errors","getRoutesFromAngularRouterConfig","bootstrap","document","url","__async","protocol","host","platformRef","platformServer","INITIAL_CONFIG","Console","ENABLE_ROOT_COMPONENT_BOOTSTRAP","applicationRef","isNgModule","ApplicationRef","router","Router","rawBaseHref","APP_BASE_HREF","PlatformLocation","baseHref","Compiler","serverRoutesConfig","SERVER_ROUTES_CONFIG","result","routesResults","traverseRoutes","seenRoutes","iter","__forAwait","more","temp","routeMetadata","resolve","presentInClientRouter","rootRouteMetadata","extractRoutesAndCreateRouteTree","manifest","getAngularAppManifest","signal","extract","routeTree","ServerAssets","key","fullRoute","promiseWithAbort","Hooks","name","context","hooks","ctx","hook","handler","ServerRouter","_ServerRouter","#extractionPromise","pathname","stripIndexHtmlFromURL","stripMatrixParams","sha256","data","encodedData","hashBuffer","hashParts","h","MEDIA_SET_HANDLER_PATTERN","CSP_MEDIA_ATTR","LINK_LOAD_SCRIPT_CONTENT","BeastiesBase","Beasties","InlineCriticalCssProcessor","_InlineCriticalCssProcessor","readFile","outputPath","s","link","media","returnValue","__superGet","cspNonce","beastiesMedia","child","nonceElement","nonce","script","LRUCache","capacity","cachedNode","newNode","tail","createRedirectResponse","location","status","headers","resHeaders","varyArray","varySet","vary","value","MAX_INLINE_CSS_CACHE_ENTRIES","SERVER_CONTEXT_VALUE","RenderMode","AngularServerApp","options","Hooks","InlineCriticalCssProcessor","path","fileName","getAngularAppManifest","ServerAssets","LRUCache","request","requestContext","__async","url","ServerRouter","matchedRoute","redirectTo","renderMode","preload","joinUrlParts","buildPathWithParams","response","promiseWithAbort","method","assetPath","locale","assets","text","hash","size","etag","__spreadValues","platformProviders","bootstrap","responseInit","REQUEST","REQUEST_CONTEXT","RESPONSE_INIT","html","LOCALE_ID","result","renderAngular","renderedHtml","finalHtml","stream","controller","inlineCriticalCssProcessor","error","criticalCssLRUCache","textDecoder","cacheKey","cached","shaOfContentPreInlinedCss","sha256","processedHtml","baseHref","stripLeadingSlash","appendPreloadHintsToHtml","angularServerApp","getOrCreateAngularServerApp","destroyAngularServerApp","bodyCloseIdx","val","setAngularAppManifest","manifest","FooterComponent","constructor","myData","myInfo","currentYear","Date","getFullYear","selectors","decls","vars","consts","template","rf","ctx","ɵɵelementStart","ɵɵelement","ɵɵtext","ɵɵelementEnd","ɵɵadvance","ɵɵproperty","linkedinLink","ɵɵsanitizeUrl","githubLink","ɵɵinterpolate","googleLink","email","ɵɵtextInterpolate1","RouterLink","LucideMapPin","LucideCodeXml","LucideMail","styles","plural","val","n","i","v","e","fr_default","ɵɵelement","ɵɵstyleProp","ctx_r0","readingProgress","ɵɵconditionalCreate","AppComponent_Conditional_0_Conditional_0_Template","ɵɵelementStart","ɵɵelementEnd","ɵɵconditional","isBlogArticle","registerLocaleData","localeFr","AppComponent","router","inject","Router","platformId","PLATFORM_ID","googleAds","GoogleAdsService","navigationEnd$","events","pipe","filter","e","NavigationEnd","articleElement","showReadingProgress","appReady","signal","constructor","take","subscribe","set","ngOnInit","event","url","urlAfterRedirects","startsWith","queueMicrotask","updateReadingProgress","init","onScroll","isPlatformBrowser","document","querySelector","articleTop","offsetTop","articleHeight","offsetHeight","viewportHeight","window","innerHeight","scroll","scrollY","maxScroll","Math","min","max","isLandingPage","isMaintenanceLandingPage","isBlog","selectors","hostBindings","rf","ctx","ɵɵlistener","ɵɵresolveWindow","AppComponent_Conditional_0_Template","RouterOutlet","FooterComponent","styles","articleResolver","route","blogService","inject","BlogService","router","Router","slug","paramMap","get","getArticleBySlug","routes","path","loadComponent","then","m","GoogleAdsLandingPageComponent","FaqPageComponent","MentionsLegalesComponent","PolitiqueDeConfidentialiteComponent","ConditionsGeneralesPrestationComponent","MaintenanceApplicationsMetierComponent","BlogComponent","BlogDetailComponent","resolve","articleData","articleResolver","redirectTo","appConfig","providers","provideZoneChangeDetection","eventCoalescing","provideRouter","routes","withInMemoryScrolling","anchorScrolling","scrollPositionRestoration","provideClientHydration","provideHttpClient","withFetch","provide","LOCALE_ID","useValue","provideMarkdown","serverRoutes","path","renderMode","RenderMode","Prerender","getPrerenderParams","__async","console","log","fetch","json","map","slug","Server","serverConfig","providers","provideServerRendering","withRoutes","serverRoutes","config","mergeApplicationConfig","appConfig","bootstrap","context","bootstrapApplication","AppComponent","config","main_server_default"],"x_google_ignoreList":[1,2,3,4,7]}