ember-source 5.9.0-alpha.2 → 5.9.0-alpha.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/build-metadata.json +3 -3
- package/dist/ember-template-compiler.js +26 -2
- package/dist/ember-template-compiler.map +1 -1
- package/dist/ember-testing.js +1 -1
- package/dist/ember-testing.map +1 -1
- package/dist/ember.debug.js +135 -13
- package/dist/ember.debug.map +1 -1
- package/dist/header/license.js +1 -1
- package/dist/packages/@ember/-internals/deprecations/index.js +99 -0
- package/dist/packages/@ember/-internals/environment/index.js +24 -0
- package/dist/packages/@ember/routing/route.js +3 -11
- package/dist/packages/ember/version.js +1 -1
- package/docs/data.json +91 -65
- package/package.json +3 -3
- package/types/stable/@ember/-internals/deprecations/index.d.ts +21 -0
- package/types/stable/@ember/-internals/environment/lib/env.d.ts +23 -0
- package/types/stable/index.d.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["license.js","loader.js","@ember/-internals/browser-environment/index.js","@ember/-internals/environment/index.js","@ember/-internals/utils/index.js","@ember/canary-features/index.js","@ember/debug/container-debug-adapter.js","@ember/debug/data-adapter.js","@ember/debug/index.js","@ember/debug/lib/capture-render-tree.js","@ember/debug/lib/deprecate.js","@ember/debug/lib/handlers.js","@ember/debug/lib/inspect.js","@ember/debug/lib/testing.js","@ember/debug/lib/warn.js","@ember/deprecated-features/index.js","@glimmer/compiler.js","@glimmer/env.js","@glimmer/syntax.js","@glimmer/util.js","@glimmer/vm.js","@glimmer/wire-format.js","@handlebars/parser/index.js","ember-babel.js","ember-template-compiler/index.js","ember-template-compiler/lib/plugins/assert-against-attrs.js","ember-template-compiler/lib/plugins/assert-against-named-outlets.js","ember-template-compiler/lib/plugins/assert-input-helper-without-block.js","ember-template-compiler/lib/plugins/assert-reserved-named-arguments.js","ember-template-compiler/lib/plugins/assert-splattribute-expression.js","ember-template-compiler/lib/plugins/index.js","ember-template-compiler/lib/plugins/transform-action-syntax.js","ember-template-compiler/lib/plugins/transform-each-in-into-each.js","ember-template-compiler/lib/plugins/transform-each-track-array.js","ember-template-compiler/lib/plugins/transform-in-element.js","ember-template-compiler/lib/plugins/transform-quoted-bindings-into-just-bindings.js","ember-template-compiler/lib/plugins/transform-resolutions.js","ember-template-compiler/lib/plugins/transform-wrap-mount-and-outlet.js","ember-template-compiler/lib/plugins/utils.js","ember-template-compiler/lib/public-api.js","ember-template-compiler/lib/system/bootstrap.js","ember-template-compiler/lib/system/calculate-location-display.js","ember-template-compiler/lib/system/compile-options.js","ember-template-compiler/lib/system/compile.js","ember-template-compiler/lib/system/dasherize-component-name.js","ember-template-compiler/lib/system/initializer.js","ember-template-compiler/lib/system/precompile.js","ember-template-compiler/lib/types.js","ember-template-compiler/minimal.js","ember/version.js","simple-html-tokenizer.js"],"sourcesContent":["/*!\n * @overview Ember - JavaScript Application Framework\n * @copyright Copyright 2011 Tilde Inc. and contributors\n * Portions Copyright 2006-2011 Strobe Inc.\n * Portions Copyright 2008-2011 Apple Inc. All rights reserved.\n * @license Licensed under MIT license\n * See https://raw.github.com/emberjs/ember.js/master/LICENSE\n * @version 5.9.0-alpha.2\n */\n","/* eslint-disable no-var */\n/* globals global globalThis self */\n/* eslint-disable-next-line no-unused-vars */\nvar define, require;\n\n(function () {\n var globalObj =\n typeof globalThis !== 'undefined'\n ? globalThis\n : typeof self !== 'undefined'\n ? self\n : typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : null;\n\n if (globalObj === null) {\n throw new Error('unable to locate global object');\n }\n\n if (typeof globalObj.define === 'function' && typeof globalObj.require === 'function') {\n define = globalObj.define;\n require = globalObj.require;\n\n return;\n }\n\n var registry = Object.create(null);\n var seen = Object.create(null);\n\n function missingModule(name, referrerName) {\n if (referrerName) {\n throw new Error('Could not find module ' + name + ' required by: ' + referrerName);\n } else {\n throw new Error('Could not find module ' + name);\n }\n }\n\n function internalRequire(_name, referrerName) {\n var name = _name;\n var mod = registry[name];\n\n if (!mod) {\n name = name + '/index';\n mod = registry[name];\n }\n\n var exports = seen[name];\n\n if (exports !== undefined) {\n return exports;\n }\n\n exports = seen[name] = {};\n\n if (!mod) {\n missingModule(_name, referrerName);\n }\n\n var deps = mod.deps;\n var callback = mod.callback;\n var reified = new Array(deps.length);\n\n for (var i = 0; i < deps.length; i++) {\n if (deps[i] === 'exports') {\n reified[i] = exports;\n } else if (deps[i] === 'require') {\n reified[i] = require;\n } else {\n reified[i] = require(deps[i], name);\n }\n }\n\n callback.apply(this, reified);\n\n return exports;\n }\n\n require = function (name) {\n return internalRequire(name, null);\n };\n\n define = function (name, deps, callback) {\n registry[name] = { deps: deps, callback: callback };\n };\n\n // setup `require` module\n require['default'] = require;\n\n require.has = function registryHas(moduleName) {\n return Boolean(registry[moduleName]) || Boolean(registry[moduleName + '/index']);\n };\n\n require._eak_seen = require.entries = registry;\n})();\n","define(\"@ember/-internals/browser-environment/index\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.window = _exports.userAgent = _exports.location = _exports.isFirefox = _exports.isChrome = _exports.history = _exports.hasDOM = void 0;\n // check if window exists and actually is the global\n var hasDom = _exports.hasDOM = typeof self === 'object' && self !== null && self.Object === Object && typeof Window !== 'undefined' && self.constructor === Window && typeof document === 'object' && document !== null && self.document === document && typeof location === 'object' && location !== null && self.location === location && typeof history === 'object' && history !== null && self.history === history && typeof navigator === 'object' && navigator !== null && self.navigator === navigator && typeof navigator.userAgent === 'string';\n const window = _exports.window = hasDom ? self : null;\n const location$1 = _exports.location = hasDom ? self.location : null;\n const history$1 = _exports.history = hasDom ? self.history : null;\n const userAgent = _exports.userAgent = hasDom ? self.navigator.userAgent : 'Lynx (textmode)';\n const isChrome = _exports.isChrome = hasDom ? typeof chrome === 'object' && !(typeof opera === 'object') : false;\n const isFirefox = _exports.isFirefox = hasDom ? /Firefox|FxiOS/.test(userAgent) : false;\n});","define(\"@ember/-internals/environment/index\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.context = _exports.ENV = void 0;\n _exports.getENV = getENV;\n _exports.getLookup = getLookup;\n _exports.global = void 0;\n _exports.setLookup = setLookup;\n // from lodash to catch fake globals\n function checkGlobal(value) {\n return value && value.Object === Object ? value : undefined;\n }\n // element ids can ruin global miss checks\n function checkElementIdShadowing(value) {\n return value && value.nodeType === undefined ? value : undefined;\n }\n // export real global\n var global$1 = _exports.global = checkGlobal(checkElementIdShadowing(typeof global === 'object' && global)) || checkGlobal(typeof self === 'object' && self) || checkGlobal(typeof window === 'object' && window) || typeof mainContext !== 'undefined' && mainContext ||\n // set before strict mode in Ember loader/wrapper\n new Function('return this')(); // eval outside of strict mode\n\n // legacy imports/exports/lookup stuff (should we keep this??)\n const context = _exports.context = function (global, Ember) {\n return Ember === undefined ? {\n imports: global,\n exports: global,\n lookup: global\n } : {\n // import jQuery\n imports: Ember.imports || global,\n // export Ember\n exports: Ember.exports || global,\n // search for Namespaces\n lookup: Ember.lookup || global\n };\n }(global$1, global$1.Ember);\n function getLookup() {\n return context.lookup;\n }\n function setLookup(value) {\n context.lookup = value;\n }\n\n /**\n The hash of environment variables used to control various configuration\n settings. To specify your own or override default settings, add the\n desired properties to a global hash named `EmberENV` (or `ENV` for\n backwards compatibility with earlier versions of Ember). The `EmberENV`\n hash must be created before loading Ember.\n \n @class EmberENV\n @type Object\n @public\n */\n const ENV = _exports.ENV = {\n ENABLE_OPTIONAL_FEATURES: false,\n /**\n Determines whether Ember should add to `Array`\n native object prototypes, a few extra methods in order to provide a more\n friendly API.\n We generally recommend leaving this option set to true however, if you need\n to turn it off, you can add the configuration property\n `EXTEND_PROTOTYPES` to `EmberENV` and set it to `false`.\n Note, when disabled (the default configuration for Ember Addons), you will\n instead have to access all methods and functions from the Ember\n namespace.\n @property EXTEND_PROTOTYPES\n @type Boolean\n @default true\n @for EmberENV\n @public\n */\n EXTEND_PROTOTYPES: {\n Array: true\n },\n /**\n The `LOG_STACKTRACE_ON_DEPRECATION` property, when true, tells Ember to log\n a full stack trace during deprecation warnings.\n @property LOG_STACKTRACE_ON_DEPRECATION\n @type Boolean\n @default true\n @for EmberENV\n @public\n */\n LOG_STACKTRACE_ON_DEPRECATION: true,\n /**\n The `LOG_VERSION` property, when true, tells Ember to log versions of all\n dependent libraries in use.\n @property LOG_VERSION\n @type Boolean\n @default true\n @for EmberENV\n @public\n */\n LOG_VERSION: true,\n RAISE_ON_DEPRECATION: false,\n STRUCTURED_PROFILE: false,\n /**\n Whether to insert a `<div class=\"ember-view\" />` wrapper around the\n application template. See RFC #280.\n This is not intended to be set directly, as the implementation may change in\n the future. Use `@ember/optional-features` instead.\n @property _APPLICATION_TEMPLATE_WRAPPER\n @for EmberENV\n @type Boolean\n @default true\n @private\n */\n _APPLICATION_TEMPLATE_WRAPPER: true,\n /**\n Whether to use Glimmer Component semantics (as opposed to the classic \"Curly\"\n components semantics) for template-only components. See RFC #278.\n This is not intended to be set directly, as the implementation may change in\n the future. Use `@ember/optional-features` instead.\n @property _TEMPLATE_ONLY_GLIMMER_COMPONENTS\n @for EmberENV\n @type Boolean\n @default false\n @private\n */\n _TEMPLATE_ONLY_GLIMMER_COMPONENTS: false,\n /**\n Whether to perform extra bookkeeping needed to make the `captureRenderTree`\n API work.\n This has to be set before the ember JavaScript code is evaluated. This is\n usually done by setting `window.EmberENV = { _DEBUG_RENDER_TREE: true };`\n before the \"vendor\" `<script>` tag in `index.html`.\n Setting the flag after Ember is already loaded will not work correctly. It\n may appear to work somewhat, but fundamentally broken.\n This is not intended to be set directly. Ember Inspector will enable the\n flag on behalf of the user as needed.\n This flag is always on in development mode.\n The flag is off by default in production mode, due to the cost associated\n with the the bookkeeping work.\n The expected flow is that Ember Inspector will ask the user to refresh the\n page after enabling the feature. It could also offer a feature where the\n user add some domains to the \"always on\" list. In either case, Ember\n Inspector will inject the code on the page to set the flag if needed.\n @property _DEBUG_RENDER_TREE\n @for EmberENV\n @type Boolean\n @default false\n @private\n */\n _DEBUG_RENDER_TREE: true /* DEBUG */,\n /**\n Whether the app defaults to using async observers.\n This is not intended to be set directly, as the implementation may change in\n the future. Use `@ember/optional-features` instead.\n @property _DEFAULT_ASYNC_OBSERVERS\n @for EmberENV\n @type Boolean\n @default false\n @private\n */\n _DEFAULT_ASYNC_OBSERVERS: false,\n /**\n Whether the app still has default record-loading behavior in the model\n hook from RFC https://rfcs.emberjs.com/id/0774-implicit-record-route-loading\n This will also remove the default store property from the route.\n This is not intended to be set directly, as the implementation may change in\n the future. Use `@ember/optional-features` instead.\n @property _NO_IMPLICIT_ROUTE_MODEL\n @for EmberENV\n @type Boolean\n @default false\n @private\n */\n _NO_IMPLICIT_ROUTE_MODEL: false,\n /**\n Controls the maximum number of scheduled rerenders without \"settling\". In general,\n applications should not need to modify this environment variable, but please\n open an issue so that we can determine if a better default value is needed.\n @property _RERENDER_LOOP_LIMIT\n @for EmberENV\n @type number\n @default 1000\n @private\n */\n _RERENDER_LOOP_LIMIT: 1000,\n EMBER_LOAD_HOOKS: {},\n FEATURES: {}\n };\n (EmberENV => {\n if (typeof EmberENV !== 'object' || EmberENV === null) return;\n for (let flag in EmberENV) {\n if (!Object.prototype.hasOwnProperty.call(EmberENV, flag) || flag === 'EXTEND_PROTOTYPES' || flag === 'EMBER_LOAD_HOOKS') continue;\n let defaultValue = ENV[flag];\n if (defaultValue === true) {\n ENV[flag] = EmberENV[flag] !== false;\n } else if (defaultValue === false) {\n ENV[flag] = EmberENV[flag] === true;\n }\n }\n let {\n EXTEND_PROTOTYPES\n } = EmberENV;\n if (EXTEND_PROTOTYPES !== undefined) {\n if (typeof EXTEND_PROTOTYPES === 'object' && EXTEND_PROTOTYPES !== null) {\n ENV.EXTEND_PROTOTYPES.Array = EXTEND_PROTOTYPES.Array !== false;\n } else {\n ENV.EXTEND_PROTOTYPES.Array = EXTEND_PROTOTYPES !== false;\n }\n }\n // TODO this does not seem to be used by anything,\n // can we remove it? do we need to deprecate it?\n let {\n EMBER_LOAD_HOOKS\n } = EmberENV;\n if (typeof EMBER_LOAD_HOOKS === 'object' && EMBER_LOAD_HOOKS !== null) {\n for (let hookName in EMBER_LOAD_HOOKS) {\n if (!Object.prototype.hasOwnProperty.call(EMBER_LOAD_HOOKS, hookName)) continue;\n let hooks = EMBER_LOAD_HOOKS[hookName];\n if (Array.isArray(hooks)) {\n ENV.EMBER_LOAD_HOOKS[hookName] = hooks.filter(hook => typeof hook === 'function');\n }\n }\n }\n let {\n FEATURES\n } = EmberENV;\n if (typeof FEATURES === 'object' && FEATURES !== null) {\n for (let feature in FEATURES) {\n if (!Object.prototype.hasOwnProperty.call(FEATURES, feature)) continue;\n ENV.FEATURES[feature] = FEATURES[feature] === true;\n }\n }\n if (true /* DEBUG */) {\n ENV._DEBUG_RENDER_TREE = true;\n }\n })(global$1.EmberENV);\n function getENV() {\n return ENV;\n }\n});","define(\"@ember/-internals/utils/index\", [\"exports\", \"@ember/debug\"], function (_exports, _debug) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.ROOT = _exports.GUID_KEY = _exports.Cache = void 0;\n _exports.canInvoke = canInvoke;\n _exports.checkHasSuper = void 0;\n _exports.dictionary = makeDictionary;\n _exports.enumerableSymbol = enumerableSymbol;\n _exports.generateGuid = generateGuid;\n _exports.getDebugName = void 0;\n _exports.getName = getName;\n _exports.guidFor = guidFor;\n _exports.intern = intern;\n _exports.isInternalSymbol = isInternalSymbol;\n _exports.isObject = isObject;\n _exports.isProxy = isProxy;\n _exports.lookupDescriptor = lookupDescriptor;\n _exports.observerListenerMetaFor = observerListenerMetaFor;\n _exports.setListeners = setListeners;\n _exports.setName = setName;\n _exports.setObservers = setObservers;\n _exports.setProxy = setProxy;\n _exports.teardownMandatorySetter = _exports.symbol = _exports.setupMandatorySetter = _exports.setWithMandatorySetter = void 0;\n _exports.toString = toString;\n _exports.uuid = uuid;\n _exports.wrap = wrap;\n /**\n Strongly hint runtimes to intern the provided string.\n \n When do I need to use this function?\n \n For the most part, never. Pre-mature optimization is bad, and often the\n runtime does exactly what you need it to, and more often the trade-off isn't\n worth it.\n \n Why?\n \n Runtimes store strings in at least 2 different representations:\n Ropes and Symbols (interned strings). The Rope provides a memory efficient\n data-structure for strings created from concatenation or some other string\n manipulation like splitting.\n \n Unfortunately checking equality of different ropes can be quite costly as\n runtimes must resort to clever string comparison algorithms. These\n algorithms typically cost in proportion to the length of the string.\n Luckily, this is where the Symbols (interned strings) shine. As Symbols are\n unique by their string content, equality checks can be done by pointer\n comparison.\n \n How do I know if my string is a rope or symbol?\n \n Typically (warning general sweeping statement, but truthy in runtimes at\n present) static strings created as part of the JS source are interned.\n Strings often used for comparisons can be interned at runtime if some\n criteria are met. One of these criteria can be the size of the entire rope.\n For example, in chrome 38 a rope longer then 12 characters will not\n intern, nor will segments of that rope.\n \n Some numbers: http://jsperf.com/eval-vs-keys/8\n \n Known Trick™\n \n @private\n @return {String} interned version of the provided string\n */\n function intern(str) {\n let obj = Object.create(null);\n obj[str] = 1;\n for (let key in obj) {\n if (key === str) {\n return key;\n }\n }\n return str;\n }\n\n /**\n Returns whether Type(value) is Object.\n \n Useful for checking whether a value is a valid WeakMap key.\n \n Refs: https://tc39.github.io/ecma262/#sec-typeof-operator-runtime-semantics-evaluation\n https://tc39.github.io/ecma262/#sec-weakmap.prototype.set\n \n @private\n @function isObject\n */\n function isObject(value) {\n return value !== null && (typeof value === 'object' || typeof value === 'function');\n }\n\n /**\n @module @ember/object\n */\n /**\n @private\n @return {Number} the uuid\n */\n let _uuid = 0;\n /**\n Generates a universally unique identifier. This method\n is used internally by Ember for assisting with\n the generation of GUID's and other unique identifiers.\n \n @public\n @return {Number} [description]\n */\n function uuid() {\n return ++_uuid;\n }\n /**\n Prefix used for guids through out Ember.\n @private\n @property GUID_PREFIX\n @for Ember\n @type String\n @final\n */\n const GUID_PREFIX = 'ember';\n // Used for guid generation...\n const OBJECT_GUIDS = new WeakMap();\n const NON_OBJECT_GUIDS = new Map();\n /**\n A unique key used to assign guids and other private metadata to objects.\n If you inspect an object in your browser debugger you will often see these.\n They can be safely ignored.\n \n On browsers that support it, these properties are added with enumeration\n disabled so they won't show up when you iterate over your properties.\n \n @private\n @property GUID_KEY\n @for Ember\n @type String\n @final\n */\n const GUID_KEY = _exports.GUID_KEY = intern(\"__ember\" + Date.now());\n /**\n Generates a new guid, optionally saving the guid to the object that you\n pass in. You will rarely need to use this method. Instead you should\n call `guidFor(obj)`, which return an existing guid if available.\n \n @private\n @method generateGuid\n @static\n @for @ember/object/internals\n @param {Object} [obj] Object the guid will be used for. If passed in, the guid will\n be saved on the object and reused whenever you pass the same object\n again.\n \n If no object is passed, just generate a new guid.\n @param {String} [prefix] Prefix to place in front of the guid. Useful when you want to\n separate the guid into separate namespaces.\n @return {String} the guid\n */\n function generateGuid(obj, prefix) {\n if (prefix === void 0) {\n prefix = GUID_PREFIX;\n }\n let guid = prefix + uuid().toString();\n if (isObject(obj)) {\n OBJECT_GUIDS.set(obj, guid);\n }\n return guid;\n }\n /**\n Returns a unique id for the object. If the object does not yet have a guid,\n one will be assigned to it. You can call this on any object,\n `EmberObject`-based or not.\n \n You can also use this method on DOM Element objects.\n \n @public\n @static\n @method guidFor\n @for @ember/object/internals\n @param {Object} obj any object, string, number, Element, or primitive\n @return {String} the unique guid for this instance.\n */\n function guidFor(value) {\n let guid;\n if (isObject(value)) {\n guid = OBJECT_GUIDS.get(value);\n if (guid === undefined) {\n guid = \"\" + GUID_PREFIX + uuid();\n OBJECT_GUIDS.set(value, guid);\n }\n } else {\n guid = NON_OBJECT_GUIDS.get(value);\n if (guid === undefined) {\n let type = typeof value;\n if (type === 'string') {\n guid = \"st\" + uuid();\n } else if (type === 'number') {\n guid = \"nu\" + uuid();\n } else if (type === 'symbol') {\n guid = \"sy\" + uuid();\n } else {\n guid = \"(\" + value + \")\";\n }\n NON_OBJECT_GUIDS.set(value, guid);\n }\n }\n return guid;\n }\n const GENERATED_SYMBOLS = [];\n function isInternalSymbol(possibleSymbol) {\n return GENERATED_SYMBOLS.indexOf(possibleSymbol) !== -1;\n }\n // Some legacy symbols still need to be enumerable for a variety of reasons.\n // This code exists for that, and as a fallback in IE11. In general, prefer\n // `symbol` below when creating a new symbol.\n function enumerableSymbol(debugName) {\n // TODO: Investigate using platform symbols, but we do not\n // want to require non-enumerability for this API, which\n // would introduce a large cost.\n let id = GUID_KEY + Math.floor(Math.random() * Date.now()).toString();\n let symbol = intern(\"__\" + debugName + id + \"__\");\n if (true /* DEBUG */) {\n GENERATED_SYMBOLS.push(symbol);\n }\n return symbol;\n }\n const symbol = _exports.symbol = Symbol;\n\n // the delete is meant to hint at runtimes that this object should remain in\n // dictionary mode. This is clearly a runtime specific hack, but currently it\n // appears worthwhile in some usecases. Please note, these deletes do increase\n // the cost of creation dramatically over a plain Object.create. And as this\n // only makes sense for long-lived dictionaries that aren't instantiated often.\n function makeDictionary(parent) {\n let dict = Object.create(parent);\n dict['_dict'] = null;\n delete dict['_dict'];\n return dict;\n }\n let getDebugName;\n if (true /* DEBUG */) {\n let getFunctionName = fn => {\n let functionName = fn.name;\n if (functionName === undefined) {\n let match = Function.prototype.toString.call(fn).match(/function (\\w+)\\s*\\(/);\n functionName = match && match[1] || '';\n }\n return functionName.replace(/^bound /, '');\n };\n let getObjectName = obj => {\n let name;\n let className;\n if (obj.constructor && obj.constructor !== Object) {\n className = getFunctionName(obj.constructor);\n }\n if ('toString' in obj && obj.toString !== Object.prototype.toString && obj.toString !== Function.prototype.toString) {\n name = obj.toString();\n }\n // If the class has a decent looking name, and the `toString` is one of the\n // default Ember toStrings, replace the constructor portion of the toString\n // with the class name. We check the length of the class name to prevent doing\n // this when the value is minified.\n if (name && name.match(/<.*:ember\\d+>/) && className && className[0] !== '_' && className.length > 2 && className !== 'Class') {\n return name.replace(/<.*:/, \"<\" + className + \":\");\n }\n return name || className;\n };\n let getPrimitiveName = value => {\n return String(value);\n };\n getDebugName = value => {\n if (typeof value === 'function') {\n return getFunctionName(value) || \"(unknown function)\";\n } else if (typeof value === 'object' && value !== null) {\n return getObjectName(value) || \"(unknown object)\";\n } else {\n return getPrimitiveName(value);\n }\n };\n }\n var getDebugName$1 = _exports.getDebugName = getDebugName;\n const HAS_SUPER_PATTERN = /\\.(_super|call\\(this|apply\\(this)/;\n const fnToString = Function.prototype.toString;\n const checkHasSuper = _exports.checkHasSuper = (() => {\n let sourceAvailable = fnToString.call(function () {\n return this;\n }).indexOf('return this') > -1;\n if (sourceAvailable) {\n return function checkHasSuper(func) {\n return HAS_SUPER_PATTERN.test(fnToString.call(func));\n };\n }\n return function checkHasSuper() {\n return true;\n };\n })();\n const HAS_SUPER_MAP = new WeakMap();\n const ROOT = _exports.ROOT = Object.freeze(function () {});\n HAS_SUPER_MAP.set(ROOT, false);\n function hasSuper(func) {\n let hasSuper = HAS_SUPER_MAP.get(func);\n if (hasSuper === undefined) {\n hasSuper = checkHasSuper(func);\n HAS_SUPER_MAP.set(func, hasSuper);\n }\n return hasSuper;\n }\n class ObserverListenerMeta {\n constructor() {\n this.listeners = undefined;\n this.observers = undefined;\n }\n }\n const OBSERVERS_LISTENERS_MAP = new WeakMap();\n function createObserverListenerMetaFor(fn) {\n let meta = OBSERVERS_LISTENERS_MAP.get(fn);\n if (meta === undefined) {\n meta = new ObserverListenerMeta();\n OBSERVERS_LISTENERS_MAP.set(fn, meta);\n }\n return meta;\n }\n function observerListenerMetaFor(fn) {\n return OBSERVERS_LISTENERS_MAP.get(fn);\n }\n function setObservers(func, observers) {\n let meta = createObserverListenerMetaFor(func);\n meta.observers = observers;\n }\n function setListeners(func, listeners) {\n let meta = createObserverListenerMetaFor(func);\n meta.listeners = listeners;\n }\n const IS_WRAPPED_FUNCTION_SET = new WeakSet();\n /**\n Wraps the passed function so that `this._super` will point to the superFunc\n when the function is invoked. This is the primitive we use to implement\n calls to super.\n \n @private\n @method wrap\n @for Ember\n @param {Function} func The function to call\n @param {Function} superFunc The super function.\n @return {Function} wrapped function.\n */\n function wrap(func, superFunc) {\n if (!hasSuper(func)) {\n return func;\n }\n // ensure an unwrapped super that calls _super is wrapped with a terminal _super\n if (!IS_WRAPPED_FUNCTION_SET.has(superFunc) && hasSuper(superFunc)) {\n return _wrap(func, _wrap(superFunc, ROOT));\n }\n return _wrap(func, superFunc);\n }\n function _wrap(func, superFunc) {\n function superWrapper() {\n let orig = this._super;\n this._super = superFunc;\n let ret = func.apply(this, arguments);\n this._super = orig;\n return ret;\n }\n IS_WRAPPED_FUNCTION_SET.add(superWrapper);\n let meta = OBSERVERS_LISTENERS_MAP.get(func);\n if (meta !== undefined) {\n OBSERVERS_LISTENERS_MAP.set(superWrapper, meta);\n }\n return superWrapper;\n }\n function lookupDescriptor(obj, keyName) {\n let current = obj;\n do {\n let descriptor = Object.getOwnPropertyDescriptor(current, keyName);\n if (descriptor !== undefined) {\n return descriptor;\n }\n current = Object.getPrototypeOf(current);\n } while (current !== null);\n return null;\n }\n\n /**\n Checks to see if the `methodName` exists on the `obj`.\n \n ```javascript\n let foo = { bar: function() { return 'bar'; }, baz: null };\n \n Ember.canInvoke(foo, 'bar'); // true\n Ember.canInvoke(foo, 'baz'); // false\n Ember.canInvoke(foo, 'bat'); // false\n ```\n \n @method canInvoke\n @for Ember\n @param {Object} obj The object to check for the method\n @param {String} methodName The method name to check for\n @return {Boolean}\n @private\n */\n function canInvoke(obj, methodName) {\n return obj != null && typeof obj[methodName] === 'function';\n }\n /**\n @module @ember/utils\n */\n\n const NAMES = new WeakMap();\n function setName(obj, name) {\n if (isObject(obj)) NAMES.set(obj, name);\n }\n function getName(obj) {\n return NAMES.get(obj);\n }\n const objectToString = Object.prototype.toString;\n function isNone(obj) {\n return obj === null || obj === undefined;\n }\n /*\n A `toString` util function that supports objects without a `toString`\n method, e.g. an object created with `Object.create(null)`.\n */\n function toString(obj) {\n if (typeof obj === 'string') {\n return obj;\n }\n if (null === obj) return 'null';\n if (undefined === obj) return 'undefined';\n if (Array.isArray(obj)) {\n // Reimplement Array.prototype.join according to spec (22.1.3.13)\n // Changing ToString(element) with this safe version of ToString.\n let r = '';\n for (let k = 0; k < obj.length; k++) {\n if (k > 0) {\n r += ',';\n }\n if (!isNone(obj[k])) {\n r += toString(obj[k]);\n }\n }\n return r;\n }\n if (typeof obj.toString === 'function') {\n return obj.toString();\n }\n return objectToString.call(obj);\n }\n const PROXIES = new WeakSet();\n function isProxy(value) {\n if (isObject(value)) {\n return PROXIES.has(value);\n }\n return false;\n }\n function setProxy(object) {\n if (isObject(object)) {\n PROXIES.add(object);\n }\n }\n class Cache {\n constructor(limit, func, store) {\n if (store === void 0) {\n store = new Map();\n }\n this.limit = limit;\n this.func = func;\n this.store = store;\n this.size = 0;\n this.misses = 0;\n this.hits = 0;\n }\n get(key) {\n if (this.store.has(key)) {\n this.hits++;\n // SAFETY: we know the value is present because `.has(key)` was `true`.\n return this.store.get(key);\n } else {\n this.misses++;\n return this.set(key, this.func(key));\n }\n }\n set(key, value) {\n if (this.limit > this.size) {\n this.size++;\n this.store.set(key, value);\n }\n return value;\n }\n purge() {\n this.store.clear();\n this.size = 0;\n this.hits = 0;\n this.misses = 0;\n }\n }\n _exports.Cache = Cache;\n let setupMandatorySetter = _exports.setupMandatorySetter = void 0;\n let teardownMandatorySetter = _exports.teardownMandatorySetter = void 0;\n let setWithMandatorySetter = _exports.setWithMandatorySetter = void 0;\n function isElementKey(key) {\n return typeof key === 'number' ? isPositiveInt(key) : isStringInt(key);\n }\n function isStringInt(str) {\n let num = parseInt(str, 10);\n return isPositiveInt(num) && str === String(num);\n }\n function isPositiveInt(num) {\n return num >= 0 && num % 1 === 0;\n }\n if (true /* DEBUG */) {\n let SEEN_TAGS = new WeakSet();\n let MANDATORY_SETTERS = new WeakMap();\n let propertyIsEnumerable = function (obj, key) {\n return Object.prototype.propertyIsEnumerable.call(obj, key);\n };\n _exports.setupMandatorySetter = setupMandatorySetter = function (tag, obj, keyName) {\n if (SEEN_TAGS.has(tag)) {\n return;\n }\n SEEN_TAGS.add(tag);\n if (Array.isArray(obj) && isElementKey(keyName)) {\n return;\n }\n let desc = lookupDescriptor(obj, keyName) || {};\n if (desc.get || desc.set) {\n // if it has a getter or setter, we can't install the mandatory setter.\n // native setters are allowed, we have to assume that they will resolve\n // to tracked properties.\n return;\n }\n if (desc && (!desc.configurable || !desc.writable)) {\n // if it isn't writable anyways, so we shouldn't provide the setter.\n // if it isn't configurable, we can't overwrite it anyways.\n return;\n }\n let setters = MANDATORY_SETTERS.get(obj);\n if (setters === undefined) {\n setters = {};\n MANDATORY_SETTERS.set(obj, setters);\n }\n desc.hadOwnProperty = Object.hasOwnProperty.call(obj, keyName);\n setters[keyName] = desc;\n Object.defineProperty(obj, keyName, {\n configurable: true,\n enumerable: propertyIsEnumerable(obj, keyName),\n get() {\n if (desc.get) {\n return desc.get.call(this);\n } else {\n return desc.value;\n }\n },\n set(value) {\n (true && !(false) && (0, _debug.assert)(\"You attempted to update \" + this + \".\" + String(keyName) + \" to \\\"\" + String(value) + \"\\\", but it is being tracked by a tracking context, such as a template, computed property, or observer. In order to make sure the context updates properly, you must invalidate the property when updating it. You can mark the property as `@tracked`, or use `@ember/object#set` to do this.\"));\n }\n });\n };\n _exports.teardownMandatorySetter = teardownMandatorySetter = function (obj, keyName) {\n let setters = MANDATORY_SETTERS.get(obj);\n if (setters !== undefined && setters[keyName] !== undefined) {\n Object.defineProperty(obj, keyName, setters[keyName]);\n delete setters[keyName];\n }\n };\n _exports.setWithMandatorySetter = setWithMandatorySetter = function (obj, keyName, value) {\n let setters = MANDATORY_SETTERS.get(obj);\n if (setters !== undefined && setters[keyName] !== undefined) {\n let setter = setters[keyName];\n if (setter.set) {\n setter.set.call(obj, value);\n } else {\n setter.value = value;\n // If the object didn't have own property before, it would have changed\n // the enumerability after setting the value the first time.\n if (!setter.hadOwnProperty) {\n let desc = lookupDescriptor(obj, keyName);\n desc.enumerable = true;\n Object.defineProperty(obj, keyName, desc);\n }\n }\n } else {\n obj[keyName] = value;\n }\n };\n }\n});","define(\"@ember/canary-features/index\", [\"exports\", \"@ember/-internals/environment\"], function (_exports, _environment) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.FEATURES = _exports.DEFAULT_FEATURES = void 0;\n _exports.isEnabled = isEnabled;\n /**\n Set `EmberENV.FEATURES` in your application's `config/environment.js` file\n to enable canary features in your application.\n \n See the [feature flag guide](https://guides.emberjs.com/release/configuring-ember/feature-flags/)\n for more details.\n \n @module @ember/canary-features\n @public\n */\n const DEFAULT_FEATURES = _exports.DEFAULT_FEATURES = {\n // FLAG_NAME: true/false\n };\n /**\n The hash of enabled Canary features. Add to this, any canary features\n before creating your application.\n \n @class FEATURES\n @static\n @since 1.1.0\n @public\n */\n const FEATURES = _exports.FEATURES = Object.assign(DEFAULT_FEATURES, _environment.ENV.FEATURES);\n /**\n Determine whether the specified `feature` is enabled. Used by Ember's\n build tools to exclude experimental features from beta/stable builds.\n \n You can define the following configuration options:\n \n * `EmberENV.ENABLE_OPTIONAL_FEATURES` - enable any features that have not been explicitly\n enabled/disabled.\n \n @method isEnabled\n @param {String} feature The feature to check\n @return {Boolean}\n @since 1.1.0\n @public\n */\n function isEnabled(feature) {\n let value = FEATURES[feature];\n if (value === true || value === false) {\n return value;\n } else if (_environment.ENV.ENABLE_OPTIONAL_FEATURES) {\n return true;\n } else {\n return false;\n }\n }\n // Uncomment the below when features are present:\n // function featureValue(value: null | boolean) {\n // if (ENV.ENABLE_OPTIONAL_FEATURES && value === null) {\n // return true;\n // }\n // return value;\n // }\n // export const FLAG_NAME = featureValue(FEATURES.FLAG_NAME);\n});","define(\"@ember/debug/container-debug-adapter\", [\"exports\", \"@ember/-internals/string\", \"@ember/object\", \"@ember/utils\", \"@ember/-internals/owner\", \"@ember/application/namespace\"], function (_exports, _string, _object, _utils, _owner, _namespace) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n /**\n @module @ember/debug/container-debug-adapter\n */\n /**\n The `ContainerDebugAdapter` helps the container and resolver interface\n with tools that debug Ember such as the\n [Ember Inspector](https://github.com/emberjs/ember-inspector)\n for Chrome and Firefox.\n \n This class can be extended by a custom resolver implementer\n to override some of the methods with library-specific code.\n \n The methods likely to be overridden are:\n \n * `canCatalogEntriesByType`\n * `catalogEntriesByType`\n \n The adapter will need to be registered\n in the application's container as `container-debug-adapter:main`.\n \n Example:\n \n ```javascript\n Application.initializer({\n name: \"containerDebugAdapter\",\n \n initialize(application) {\n application.register('container-debug-adapter:main', require('app/container-debug-adapter'));\n }\n });\n ```\n \n @class ContainerDebugAdapter\n @extends EmberObject\n @since 1.5.0\n @public\n */\n class ContainerDebugAdapter extends _object.default {\n constructor(owner) {\n super(owner);\n this.resolver = (0, _owner.getOwner)(this).lookup('resolver-for-debugging:main');\n }\n /**\n Returns true if it is possible to catalog a list of available\n classes in the resolver for a given type.\n @method canCatalogEntriesByType\n @param {String} type The type. e.g. \"model\", \"controller\", \"route\".\n @return {boolean} whether a list is available for this type.\n @public\n */\n canCatalogEntriesByType(type) {\n if (type === 'model' || type === 'template') {\n return false;\n }\n return true;\n }\n /**\n Returns the available classes a given type.\n @method catalogEntriesByType\n @param {String} type The type. e.g. \"model\", \"controller\", \"route\".\n @return {Array} An array of strings.\n @public\n */\n catalogEntriesByType(type) {\n let namespaces = _namespace.default.NAMESPACES;\n let types = [];\n let typeSuffixRegex = new RegExp((0, _string.classify)(type) + \"$\");\n namespaces.forEach(namespace => {\n for (let key in namespace) {\n if (!Object.prototype.hasOwnProperty.call(namespace, key)) {\n continue;\n }\n if (typeSuffixRegex.test(key)) {\n let klass = namespace[key];\n if ((0, _utils.typeOf)(klass) === 'class') {\n types.push((0, _string.dasherize)(key.replace(typeSuffixRegex, '')));\n }\n }\n }\n });\n return types;\n }\n }\n _exports.default = ContainerDebugAdapter;\n});","define(\"@ember/debug/data-adapter\", [\"exports\", \"@ember/-internals/owner\", \"@ember/runloop\", \"@ember/object\", \"@ember/-internals/string\", \"@ember/application/namespace\", \"@ember/array\", \"@glimmer/validator\", \"@ember/debug\"], function (_exports, _owner, _runloop, _object, _string, _namespace, _array, _validator, _debug) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n function iterate(arr, fn) {\n if (Symbol.iterator in arr) {\n for (let item of arr) {\n fn(item);\n }\n } else {\n // SAFETY: this cast required to work this way to interop between TS 4.8\n // and 4.9. When we drop support for 4.8, it will narrow correctly via the\n // use of the `in` operator above. (Preferably we will solve this by just\n // switching to require `Symbol.iterator` instead.)\n (0, _debug.assert)('', typeof arr.forEach === 'function');\n arr.forEach(fn);\n }\n }\n class RecordsWatcher {\n getCacheForItem(record) {\n let recordCache = this.recordCaches.get(record);\n if (!recordCache) {\n let hasBeenAdded = false;\n recordCache = (0, _validator.createCache)(() => {\n if (!hasBeenAdded) {\n this.added.push(this.wrapRecord(record));\n hasBeenAdded = true;\n } else {\n this.updated.push(this.wrapRecord(record));\n }\n });\n this.recordCaches.set(record, recordCache);\n }\n return recordCache;\n }\n constructor(records, recordsAdded, recordsUpdated, recordsRemoved, wrapRecord, release) {\n this.wrapRecord = wrapRecord;\n this.release = release;\n this.recordCaches = new Map();\n this.added = [];\n this.updated = [];\n this.removed = [];\n this.recordArrayCache = (0, _validator.createCache)(() => {\n let seen = new Set();\n // Track `[]` for legacy support\n (0, _validator.consumeTag)((0, _validator.tagFor)(records, '[]'));\n iterate(records, record => {\n (0, _validator.getValue)(this.getCacheForItem(record));\n seen.add(record);\n });\n // Untrack this operation because these records are being removed, they\n // should not be polled again in the future\n (0, _validator.untrack)(() => {\n this.recordCaches.forEach((_cache, record) => {\n if (!seen.has(record)) {\n this.removed.push(wrapRecord(record));\n this.recordCaches.delete(record);\n }\n });\n });\n if (this.added.length > 0) {\n recordsAdded(this.added);\n this.added = [];\n }\n if (this.updated.length > 0) {\n recordsUpdated(this.updated);\n this.updated = [];\n }\n if (this.removed.length > 0) {\n recordsRemoved(this.removed);\n this.removed = [];\n }\n });\n }\n revalidate() {\n (0, _validator.getValue)(this.recordArrayCache);\n }\n }\n class TypeWatcher {\n constructor(records, onChange, release) {\n this.release = release;\n let hasBeenAccessed = false;\n this.cache = (0, _validator.createCache)(() => {\n // Empty iteration, we're doing this just\n // to track changes to the records array\n iterate(records, () => {});\n // Also track `[]` for legacy support\n (0, _validator.consumeTag)((0, _validator.tagFor)(records, '[]'));\n if (hasBeenAccessed === true) {\n (0, _runloop.next)(onChange);\n } else {\n hasBeenAccessed = true;\n }\n });\n this.release = release;\n }\n revalidate() {\n (0, _validator.getValue)(this.cache);\n }\n }\n /**\n The `DataAdapter` helps a data persistence library\n interface with tools that debug Ember such\n as the [Ember Inspector](https://github.com/emberjs/ember-inspector)\n for Chrome and Firefox.\n \n This class will be extended by a persistence library\n which will override some of the methods with\n library-specific code.\n \n The methods likely to be overridden are:\n \n * `getFilters`\n * `detect`\n * `columnsForType`\n * `getRecords`\n * `getRecordColumnValues`\n * `getRecordKeywords`\n * `getRecordFilterValues`\n * `getRecordColor`\n \n The adapter will need to be registered\n in the application's container as `dataAdapter:main`.\n \n Example:\n \n ```javascript\n Application.initializer({\n name: \"data-adapter\",\n \n initialize: function(application) {\n application.register('data-adapter:main', DS.DataAdapter);\n }\n });\n ```\n \n @class DataAdapter\n @extends EmberObject\n @public\n */\n class DataAdapter extends _object.default {\n constructor(owner) {\n super(owner);\n this.releaseMethods = (0, _array.A)();\n this.recordsWatchers = new Map();\n this.typeWatchers = new Map();\n this.flushWatchers = null;\n /**\n The container-debug-adapter which is used\n to list all models.\n @property containerDebugAdapter\n @default undefined\n @since 1.5.0\n @public\n **/\n /**\n The number of attributes to send\n as columns. (Enough to make the record\n identifiable).\n @private\n @property attributeLimit\n @default 3\n @since 1.3.0\n */\n this.attributeLimit = 3;\n /**\n Ember Data > v1.0.0-beta.18\n requires string model names to be passed\n around instead of the actual factories.\n This is a stamp for the Ember Inspector\n to differentiate between the versions\n to be able to support older versions too.\n @public\n @property acceptsModelName\n */\n this.acceptsModelName = true;\n this.containerDebugAdapter = (0, _owner.getOwner)(this).lookup('container-debug-adapter:main');\n }\n /**\n Map from records arrays to RecordsWatcher instances\n @private\n @property recordsWatchers\n @since 3.26.0\n */\n /**\n Map from records arrays to TypeWatcher instances\n @private\n @property typeWatchers\n @since 3.26.0\n */\n /**\n Callback that is currently scheduled on backburner end to flush and check\n all active watchers.\n @private\n @property flushWatchers\n @since 3.26.0\n */\n /**\n Stores all methods that clear observers.\n These methods will be called on destruction.\n @private\n @property releaseMethods\n @since 1.3.0\n */\n /**\n Specifies how records can be filtered.\n Records returned will need to have a `filterValues`\n property with a key for every name in the returned array.\n @public\n @method getFilters\n @return {Array} List of objects defining filters.\n The object should have a `name` and `desc` property.\n */\n getFilters() {\n return (0, _array.A)();\n }\n /**\n Fetch the model types and observe them for changes.\n @public\n @method watchModelTypes\n @param {Function} typesAdded Callback to call to add types.\n Takes an array of objects containing wrapped types (returned from `wrapModelType`).\n @param {Function} typesUpdated Callback to call when a type has changed.\n Takes an array of objects containing wrapped types.\n @return {Function} Method to call to remove all observers\n */\n watchModelTypes(typesAdded, typesUpdated) {\n let modelTypes = this.getModelTypes();\n let releaseMethods = (0, _array.A)();\n let typesToSend;\n typesToSend = modelTypes.map(type => {\n let klass = type.klass;\n let wrapped = this.wrapModelType(klass, type.name);\n releaseMethods.push(this.observeModelType(type.name, typesUpdated));\n return wrapped;\n });\n typesAdded(typesToSend);\n let release = () => {\n releaseMethods.forEach(fn => fn());\n this.releaseMethods.removeObject(release);\n };\n this.releaseMethods.pushObject(release);\n return release;\n }\n _nameToClass(type) {\n if (typeof type === 'string') {\n let owner = (0, _owner.getOwner)(this);\n let Factory = owner.factoryFor(\"model:\" + type);\n type = Factory && Factory.class;\n }\n return type;\n }\n /**\n Fetch the records of a given type and observe them for changes.\n @public\n @method watchRecords\n @param {String} modelName The model name.\n @param {Function} recordsAdded Callback to call to add records.\n Takes an array of objects containing wrapped records.\n The object should have the following properties:\n columnValues: {Object} The key and value of a table cell.\n object: {Object} The actual record object.\n @param {Function} recordsUpdated Callback to call when a record has changed.\n Takes an array of objects containing wrapped records.\n @param {Function} recordsRemoved Callback to call when a record has removed.\n Takes an array of objects containing wrapped records.\n @return {Function} Method to call to remove all observers.\n */\n watchRecords(modelName, recordsAdded, recordsUpdated, recordsRemoved) {\n let klass = this._nameToClass(modelName);\n let records = this.getRecords(klass, modelName);\n let {\n recordsWatchers\n } = this;\n let recordsWatcher = recordsWatchers.get(records);\n if (!recordsWatcher) {\n recordsWatcher = new RecordsWatcher(records, recordsAdded, recordsUpdated, recordsRemoved, record => this.wrapRecord(record), () => {\n recordsWatchers.delete(records);\n this.updateFlushWatchers();\n });\n recordsWatchers.set(records, recordsWatcher);\n this.updateFlushWatchers();\n recordsWatcher.revalidate();\n }\n return recordsWatcher.release;\n }\n updateFlushWatchers() {\n if (this.flushWatchers === null) {\n if (this.typeWatchers.size > 0 || this.recordsWatchers.size > 0) {\n this.flushWatchers = () => {\n this.typeWatchers.forEach(watcher => watcher.revalidate());\n this.recordsWatchers.forEach(watcher => watcher.revalidate());\n };\n _runloop._backburner.on('end', this.flushWatchers);\n }\n } else if (this.typeWatchers.size === 0 && this.recordsWatchers.size === 0) {\n _runloop._backburner.off('end', this.flushWatchers);\n this.flushWatchers = null;\n }\n }\n /**\n Clear all observers before destruction\n @private\n @method willDestroy\n */\n willDestroy() {\n this._super(...arguments);\n this.typeWatchers.forEach(watcher => watcher.release());\n this.recordsWatchers.forEach(watcher => watcher.release());\n this.releaseMethods.forEach(fn => fn());\n if (this.flushWatchers) {\n _runloop._backburner.off('end', this.flushWatchers);\n }\n }\n /**\n Detect whether a class is a model.\n Test that against the model class\n of your persistence library.\n @public\n @method detect\n @return boolean Whether the class is a model class or not.\n */\n detect(_klass) {\n return false;\n }\n /**\n Get the columns for a given model type.\n @public\n @method columnsForType\n @return {Array} An array of columns of the following format:\n name: {String} The name of the column.\n desc: {String} Humanized description (what would show in a table column name).\n */\n columnsForType(_klass) {\n return (0, _array.A)();\n }\n /**\n Adds observers to a model type class.\n @private\n @method observeModelType\n @param {String} modelName The model type name.\n @param {Function} typesUpdated Called when a type is modified.\n @return {Function} The function to call to remove observers.\n */\n observeModelType(modelName, typesUpdated) {\n let klass = this._nameToClass(modelName);\n let records = this.getRecords(klass, modelName);\n let onChange = () => {\n typesUpdated([this.wrapModelType(klass, modelName)]);\n };\n let {\n typeWatchers\n } = this;\n let typeWatcher = typeWatchers.get(records);\n if (!typeWatcher) {\n typeWatcher = new TypeWatcher(records, onChange, () => {\n typeWatchers.delete(records);\n this.updateFlushWatchers();\n });\n typeWatchers.set(records, typeWatcher);\n this.updateFlushWatchers();\n typeWatcher.revalidate();\n }\n return typeWatcher.release;\n }\n /**\n Wraps a given model type and observes changes to it.\n @private\n @method wrapModelType\n @param {Class} klass A model class.\n @param {String} modelName Name of the class.\n @return {Object} The wrapped type has the following format:\n name: {String} The name of the type.\n count: {Integer} The number of records available.\n columns: {Columns} An array of columns to describe the record.\n object: {Class} The actual Model type class.\n */\n wrapModelType(klass, name) {\n let records = this.getRecords(klass, name);\n return {\n name,\n count: (0, _object.get)(records, 'length'),\n columns: this.columnsForType(klass),\n object: klass\n };\n }\n /**\n Fetches all models defined in the application.\n @private\n @method getModelTypes\n @return {Array} Array of model types.\n */\n getModelTypes() {\n let containerDebugAdapter = this.containerDebugAdapter;\n let stringTypes = containerDebugAdapter.canCatalogEntriesByType('model') ? containerDebugAdapter.catalogEntriesByType('model') : this._getObjectsOnNamespaces();\n // New adapters return strings instead of classes.\n let klassTypes = stringTypes.map(name => {\n return {\n klass: this._nameToClass(name),\n name\n };\n });\n return klassTypes.filter(type => this.detect(type.klass));\n }\n /**\n Loops over all namespaces and all objects\n attached to them.\n @private\n @method _getObjectsOnNamespaces\n @return {Array} Array of model type strings.\n */\n _getObjectsOnNamespaces() {\n let namespaces = _namespace.default.NAMESPACES;\n let types = [];\n namespaces.forEach(namespace => {\n for (let key in namespace) {\n if (!Object.prototype.hasOwnProperty.call(namespace, key)) {\n continue;\n }\n // Even though we will filter again in `getModelTypes`,\n // we should not call `lookupFactory` on non-models\n if (!this.detect(namespace[key])) {\n continue;\n }\n let name = (0, _string.dasherize)(key);\n types.push(name);\n }\n });\n return types;\n }\n /**\n Fetches all loaded records for a given type.\n @public\n @method getRecords\n @return {Array} An array of records.\n This array will be observed for changes,\n so it should update when new records are added/removed.\n */\n getRecords(_klass, _name) {\n return (0, _array.A)();\n }\n /**\n Wraps a record and observers changes to it.\n @private\n @method wrapRecord\n @param {Object} record The record instance.\n @return {Object} The wrapped record. Format:\n columnValues: {Array}\n searchKeywords: {Array}\n */\n wrapRecord(record) {\n return {\n object: record,\n columnValues: this.getRecordColumnValues(record),\n searchKeywords: this.getRecordKeywords(record),\n filterValues: this.getRecordFilterValues(record),\n color: this.getRecordColor(record)\n };\n }\n /**\n Gets the values for each column.\n @public\n @method getRecordColumnValues\n @return {Object} Keys should match column names defined\n by the model type.\n */\n getRecordColumnValues(_record) {\n return {};\n }\n /**\n Returns keywords to match when searching records.\n @public\n @method getRecordKeywords\n @return {Array} Relevant keywords for search.\n */\n getRecordKeywords(_record) {\n return (0, _array.A)();\n }\n /**\n Returns the values of filters defined by `getFilters`.\n @public\n @method getRecordFilterValues\n @param {Object} record The record instance.\n @return {Object} The filter values.\n */\n getRecordFilterValues(_record) {\n return {};\n }\n /**\n Each record can have a color that represents its state.\n @public\n @method getRecordColor\n @param {Object} record The record instance\n @return {String} The records color.\n Possible options: black, red, blue, green.\n */\n getRecordColor(_record) {\n return null;\n }\n }\n _exports.default = DataAdapter;\n});","define(\"@ember/debug/index\", [\"exports\", \"@ember/-internals/browser-environment\", \"@ember/debug/lib/deprecate\", \"@ember/debug/lib/testing\", \"@ember/debug/lib/warn\", \"@ember/debug/lib/inspect\", \"@ember/debug/lib/capture-render-tree\"], function (_exports, _browserEnvironment, _deprecate2, _testing, _warn2, _inspect, _captureRenderTree) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.assert = _exports._warnIfUsingStrippedFeatureFlags = void 0;\n Object.defineProperty(_exports, \"captureRenderTree\", {\n enumerable: true,\n get: function () {\n return _captureRenderTree.default;\n }\n });\n _exports.info = _exports.getDebugFunction = _exports.deprecateFunc = _exports.deprecate = _exports.debugSeal = _exports.debugFreeze = _exports.debug = void 0;\n Object.defineProperty(_exports, \"inspect\", {\n enumerable: true,\n get: function () {\n return _inspect.default;\n }\n });\n Object.defineProperty(_exports, \"isTesting\", {\n enumerable: true,\n get: function () {\n return _testing.isTesting;\n }\n });\n Object.defineProperty(_exports, \"registerDeprecationHandler\", {\n enumerable: true,\n get: function () {\n return _deprecate2.registerHandler;\n }\n });\n Object.defineProperty(_exports, \"registerWarnHandler\", {\n enumerable: true,\n get: function () {\n return _warn2.registerHandler;\n }\n });\n _exports.setDebugFunction = _exports.runInDebug = void 0;\n Object.defineProperty(_exports, \"setTesting\", {\n enumerable: true,\n get: function () {\n return _testing.setTesting;\n }\n });\n _exports.warn = void 0;\n // These are the default production build versions:\n const noop = () => {};\n // SAFETY: these casts are just straight-up lies, but the point is that they do\n // not do anything in production builds.\n let assert = _exports.assert = noop;\n let info = _exports.info = noop;\n let warn = _exports.warn = noop;\n let debug = _exports.debug = noop;\n let deprecate = _exports.deprecate = noop;\n let debugSeal = _exports.debugSeal = noop;\n let debugFreeze = _exports.debugFreeze = noop;\n let runInDebug = _exports.runInDebug = noop;\n let setDebugFunction = _exports.setDebugFunction = noop;\n let getDebugFunction = _exports.getDebugFunction = noop;\n let deprecateFunc = function () {\n return arguments[arguments.length - 1];\n };\n _exports.deprecateFunc = deprecateFunc;\n if (true /* DEBUG */) {\n _exports.setDebugFunction = setDebugFunction = function (type, callback) {\n switch (type) {\n case 'assert':\n return _exports.assert = assert = callback;\n case 'info':\n return _exports.info = info = callback;\n case 'warn':\n return _exports.warn = warn = callback;\n case 'debug':\n return _exports.debug = debug = callback;\n case 'deprecate':\n return _exports.deprecate = deprecate = callback;\n case 'debugSeal':\n return _exports.debugSeal = debugSeal = callback;\n case 'debugFreeze':\n return _exports.debugFreeze = debugFreeze = callback;\n case 'runInDebug':\n return _exports.runInDebug = runInDebug = callback;\n case 'deprecateFunc':\n return _exports.deprecateFunc = deprecateFunc = callback;\n }\n };\n _exports.getDebugFunction = getDebugFunction = function (type) {\n switch (type) {\n case 'assert':\n return assert;\n case 'info':\n return info;\n case 'warn':\n return warn;\n case 'debug':\n return debug;\n case 'deprecate':\n return deprecate;\n case 'debugSeal':\n return debugSeal;\n case 'debugFreeze':\n return debugFreeze;\n case 'runInDebug':\n return runInDebug;\n case 'deprecateFunc':\n return deprecateFunc;\n }\n };\n }\n /**\n @module @ember/debug\n */\n if (true /* DEBUG */) {\n // eslint-disable-next-line no-inner-declarations\n function assert(desc, test) {\n if (!test) {\n throw new Error(\"Assertion Failed: \" + desc);\n }\n }\n setDebugFunction('assert', assert);\n /**\n Display a debug notice.\n Calls to this function are not invoked in production builds.\n ```javascript\n import { debug } from '@ember/debug';\n debug('I\\'m a debug notice!');\n ```\n @method debug\n @for @ember/debug\n @static\n @param {String} message A debug message to display.\n @public\n */\n setDebugFunction('debug', function debug(message) {\n console.debug(\"DEBUG: \" + message); /* eslint-disable-line no-console */\n });\n /**\n Display an info notice.\n Calls to this function are removed from production builds, so they can be\n freely added for documentation and debugging purposes without worries of\n incuring any performance penalty.\n @method info\n @private\n */\n setDebugFunction('info', function info() {\n console.info(...arguments); /* eslint-disable-line no-console */\n });\n /**\n @module @ember/debug\n @public\n */\n /**\n Alias an old, deprecated method with its new counterpart.\n Display a deprecation warning with the provided message and a stack trace\n (Chrome and Firefox only) when the assigned method is called.\n Calls to this function are removed from production builds, so they can be\n freely added for documentation and debugging purposes without worries of\n incuring any performance penalty.\n ```javascript\n import { deprecateFunc } from '@ember/debug';\n Ember.oldMethod = deprecateFunc('Please use the new, updated method', options, Ember.newMethod);\n ```\n @method deprecateFunc\n @static\n @for @ember/debug\n @param {String} message A description of the deprecation.\n @param {Object} [options] The options object for `deprecate`.\n @param {Function} func The new function called to replace its deprecated counterpart.\n @return {Function} A new function that wraps the original function with a deprecation warning\n @private\n */\n setDebugFunction('deprecateFunc', function deprecateFunc() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (args.length === 3) {\n let [message, options, func] = args;\n return function () {\n deprecate(message, false, options);\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n return func.apply(this, args);\n };\n } else {\n let [message, func] = args;\n return function () {\n deprecate(message);\n return func.apply(this, arguments);\n };\n }\n });\n /**\n @module @ember/debug\n @public\n */\n /**\n Run a function meant for debugging.\n Calls to this function are removed from production builds, so they can be\n freely added for documentation and debugging purposes without worries of\n incuring any performance penalty.\n ```javascript\n import Component from '@ember/component';\n import { runInDebug } from '@ember/debug';\n runInDebug(() => {\n Component.reopen({\n didInsertElement() {\n console.log(\"I'm happy\");\n }\n });\n });\n ```\n @method runInDebug\n @for @ember/debug\n @static\n @param {Function} func The function to be executed.\n @since 1.5.0\n @public\n */\n setDebugFunction('runInDebug', function runInDebug(func) {\n func();\n });\n setDebugFunction('debugSeal', function debugSeal(obj) {\n Object.seal(obj);\n });\n setDebugFunction('debugFreeze', function debugFreeze(obj) {\n // re-freezing an already frozen object introduces a significant\n // performance penalty on Chrome (tested through 59).\n //\n // See: https://bugs.chromium.org/p/v8/issues/detail?id=6450\n if (!Object.isFrozen(obj)) {\n Object.freeze(obj);\n }\n });\n setDebugFunction('deprecate', _deprecate2.default);\n setDebugFunction('warn', _warn2.default);\n }\n let _warnIfUsingStrippedFeatureFlags = _exports._warnIfUsingStrippedFeatureFlags = void 0;\n if (true /* DEBUG */ && !(0, _testing.isTesting)()) {\n if (typeof window !== 'undefined' && (_browserEnvironment.isFirefox || _browserEnvironment.isChrome) && window.addEventListener) {\n window.addEventListener('load', () => {\n if (document.documentElement && document.documentElement.dataset && !document.documentElement.dataset['emberExtension']) {\n let downloadURL;\n if (_browserEnvironment.isChrome) {\n downloadURL = 'https://chrome.google.com/webstore/detail/ember-inspector/bmdblncegkenkacieihfhpjfppoconhi';\n } else if (_browserEnvironment.isFirefox) {\n downloadURL = 'https://addons.mozilla.org/en-US/firefox/addon/ember-inspector/';\n }\n debug(\"For more advanced debugging, install the Ember Inspector from \" + downloadURL);\n }\n }, false);\n }\n }\n});","define(\"@ember/debug/lib/capture-render-tree\", [\"exports\", \"@glimmer/util\"], function (_exports, _util) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = captureRenderTree;\n /**\n @module @ember/debug\n */\n /**\n Ember Inspector calls this function to capture the current render tree.\n \n In production mode, this requires turning on `ENV._DEBUG_RENDER_TREE`\n before loading Ember.\n \n @private\n @static\n @method captureRenderTree\n @for @ember/debug\n @param app {ApplicationInstance} An `ApplicationInstance`.\n @since 3.14.0\n */\n function captureRenderTree(app) {\n // SAFETY: Ideally we'd assert here but that causes awkward circular requires since this is also in @ember/debug.\n // This is only for debug stuff so not very risky.\n let renderer = (0, _util.expect)(app.lookup('renderer:-dom'), \"BUG: owner is missing renderer\");\n return renderer.debugRenderTree.capture();\n }\n});","define(\"@ember/debug/lib/deprecate\", [\"exports\", \"@ember/-internals/environment\", \"@ember/debug/index\", \"@ember/debug/lib/handlers\"], function (_exports, _environment, _index, _handlers) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.registerHandler = _exports.missingOptionsIdDeprecation = _exports.missingOptionsDeprecation = _exports.missingOptionDeprecation = _exports.default = void 0;\n /**\n @module @ember/debug\n @public\n */\n /**\n Allows for runtime registration of handler functions that override the default deprecation behavior.\n Deprecations are invoked by calls to [@ember/debug/deprecate](/ember/release/classes/@ember%2Fdebug/methods/deprecate?anchor=deprecate).\n The following example demonstrates its usage by registering a handler that throws an error if the\n message contains the word \"should\", otherwise defers to the default handler.\n \n ```javascript\n import { registerDeprecationHandler } from '@ember/debug';\n \n registerDeprecationHandler((message, options, next) => {\n if (message.indexOf('should') !== -1) {\n throw new Error(`Deprecation message with should: ${message}`);\n } else {\n // defer to whatever handler was registered before this one\n next(message, options);\n }\n });\n ```\n \n The handler function takes the following arguments:\n \n <ul>\n <li> <code>message</code> - The message received from the deprecation call.</li>\n <li> <code>options</code> - An object passed in with the deprecation call containing additional information including:</li>\n <ul>\n <li> <code>id</code> - An id of the deprecation in the form of <code>package-name.specific-deprecation</code>.</li>\n <li> <code>until</code> - The Ember version number the feature and deprecation will be removed in.</li>\n </ul>\n <li> <code>next</code> - A function that calls into the previously registered handler.</li>\n </ul>\n \n @public\n @static\n @method registerDeprecationHandler\n @for @ember/debug\n @param handler {Function} A function to handle deprecation calls.\n @since 2.1.0\n */\n let registerHandler = () => {};\n _exports.registerHandler = registerHandler;\n let missingOptionsDeprecation = _exports.missingOptionsDeprecation = void 0;\n let missingOptionsIdDeprecation = _exports.missingOptionsIdDeprecation = void 0;\n let missingOptionDeprecation = () => '';\n _exports.missingOptionDeprecation = missingOptionDeprecation;\n let deprecate = () => {};\n if (true /* DEBUG */) {\n _exports.registerHandler = registerHandler = function registerHandler(handler) {\n (0, _handlers.registerHandler)('deprecate', handler);\n };\n let formatMessage = function formatMessage(_message, options) {\n let message = _message;\n if (options != null && options.id) {\n message = message + (\" [deprecation id: \" + options.id + \"]\");\n }\n if (options != null && options.until) {\n message = message + (\" This will be removed in \" + options.for + \" \" + options.until + \".\");\n }\n if (options != null && options.url) {\n message += \" See \" + options.url + \" for more details.\";\n }\n return message;\n };\n registerHandler(function logDeprecationToConsole(message, options) {\n let updatedMessage = formatMessage(message, options);\n console.warn(\"DEPRECATION: \" + updatedMessage); // eslint-disable-line no-console\n });\n\n let captureErrorForStack;\n if (new Error().stack) {\n captureErrorForStack = () => new Error();\n } else {\n captureErrorForStack = () => {\n try {\n __fail__.fail();\n return;\n } catch (e) {\n return e;\n }\n };\n }\n registerHandler(function logDeprecationStackTrace(message, options, next) {\n if (_environment.ENV.LOG_STACKTRACE_ON_DEPRECATION) {\n let stackStr = '';\n let error = captureErrorForStack();\n let stack;\n if (error instanceof Error) {\n if (error.stack) {\n if (error['arguments']) {\n // Chrome\n stack = error.stack.replace(/^\\s+at\\s+/gm, '').replace(/^([^(]+?)([\\n$])/gm, '{anonymous}($1)$2').replace(/^Object.<anonymous>\\s*\\(([^)]+)\\)/gm, '{anonymous}($1)').split('\\n');\n stack.shift();\n } else {\n // Firefox\n stack = error.stack.replace(/(?:\\n@:0)?\\s+$/m, '').replace(/^\\(/gm, '{anonymous}(').split('\\n');\n }\n stackStr = \"\\n \" + stack.slice(2).join('\\n ');\n }\n }\n let updatedMessage = formatMessage(message, options);\n console.warn(\"DEPRECATION: \" + updatedMessage + stackStr); // eslint-disable-line no-console\n } else {\n next(message, options);\n }\n });\n registerHandler(function raiseOnDeprecation(message, options, next) {\n if (_environment.ENV.RAISE_ON_DEPRECATION) {\n let updatedMessage = formatMessage(message);\n throw new Error(updatedMessage);\n } else {\n next(message, options);\n }\n });\n _exports.missingOptionsDeprecation = missingOptionsDeprecation = 'When calling `deprecate` you ' + 'must provide an `options` hash as the third parameter. ' + '`options` should include `id` and `until` properties.';\n _exports.missingOptionsIdDeprecation = missingOptionsIdDeprecation = 'When calling `deprecate` you must provide `id` in options.';\n _exports.missingOptionDeprecation = missingOptionDeprecation = (id, missingOption) => {\n return \"When calling `deprecate` you must provide `\" + missingOption + \"` in options. Missing options.\" + missingOption + \" in \\\"\" + id + \"\\\" deprecation\";\n };\n /**\n @module @ember/debug\n @public\n */\n /**\n Display a deprecation warning with the provided message and a stack trace\n (Chrome and Firefox only).\n Ember itself leverages [Semantic Versioning](https://semver.org) to aid\n projects in keeping up with changes to the framework. Before any\n functionality or API is removed, it first flows linearly through a\n deprecation staging process. The staging process currently contains two\n stages: available and enabled.\n Deprecations are initially released into the 'available' stage.\n Deprecations will stay in this stage until the replacement API has been\n marked as a recommended practice via the RFC process and the addon\n ecosystem has generally adopted the change.\n Once a deprecation meets the above criteria, it will move into the\n 'enabled' stage where it will remain until the functionality or API is\n eventually removed.\n For application and addon developers, \"available\" deprecations are not\n urgent and \"enabled\" deprecations require action.\n * In a production build, this method is defined as an empty function (NOP).\n Uses of this method in Ember itself are stripped from the ember.prod.js build.\n ```javascript\n import { deprecate } from '@ember/debug';\n deprecate(\n 'Use of `assign` has been deprecated. Please use `Object.assign` or the spread operator instead.',\n false,\n {\n id: 'ember-polyfills.deprecate-assign',\n until: '5.0.0',\n url: 'https://deprecations.emberjs.com/v4.x/#toc_ember-polyfills-deprecate-assign',\n for: 'ember-source',\n since: {\n available: '4.0.0',\n enabled: '4.0.0',\n },\n }\n );\n ```\n @method deprecate\n @for @ember/debug\n @param {String} message A description of the deprecation.\n @param {Boolean} test A boolean. If falsy, the deprecation will be displayed.\n @param {Object} options\n @param {String} options.id A unique id for this deprecation. The id can be\n used by Ember debugging tools to change the behavior (raise, log or silence)\n for that specific deprecation. The id should be namespaced by dots, e.g.\n \"view.helper.select\".\n @param {string} options.until The version of Ember when this deprecation\n warning will be removed.\n @param {String} options.for A namespace for the deprecation, usually the package name\n @param {Object} options.since Describes when the deprecation became available and enabled.\n @param {String} [options.url] An optional url to the transition guide on the\n emberjs.com website.\n @static\n @public\n @since 1.0.0\n */\n deprecate = function deprecate(message, test, options) {\n (0, _index.assert)(missingOptionsDeprecation, Boolean(options && (options.id || options.until)));\n (0, _index.assert)(missingOptionsIdDeprecation, Boolean(options.id));\n (0, _index.assert)(missingOptionDeprecation(options.id, 'until'), Boolean(options.until));\n (0, _index.assert)(missingOptionDeprecation(options.id, 'for'), Boolean(options.for));\n (0, _index.assert)(missingOptionDeprecation(options.id, 'since'), Boolean(options.since));\n (0, _handlers.invoke)('deprecate', message, test, options);\n };\n }\n var _default = _exports.default = deprecate;\n});","define(\"@ember/debug/lib/handlers\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.registerHandler = _exports.invoke = _exports.HANDLERS = void 0;\n let HANDLERS = _exports.HANDLERS = {};\n let registerHandler = _exports.registerHandler = function registerHandler(_type, _callback) {};\n let invoke = () => {};\n _exports.invoke = invoke;\n if (true /* DEBUG */) {\n _exports.registerHandler = registerHandler = function registerHandler(type, callback) {\n let nextHandler = HANDLERS[type] || (() => {});\n HANDLERS[type] = (message, options) => {\n callback(message, options, nextHandler);\n };\n };\n _exports.invoke = invoke = function invoke(type, message, test, options) {\n if (test) {\n return;\n }\n let handlerForType = HANDLERS[type];\n if (handlerForType) {\n handlerForType(message, options);\n }\n };\n }\n});","define(\"@ember/debug/lib/inspect\", [\"exports\", \"@ember/debug\"], function (_exports, _debug) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = inspect;\n const {\n toString: objectToString\n } = Object.prototype;\n const {\n toString: functionToString\n } = Function.prototype;\n const {\n isArray\n } = Array;\n const {\n keys: objectKeys\n } = Object;\n const {\n stringify\n } = JSON;\n const LIST_LIMIT = 100;\n const DEPTH_LIMIT = 4;\n const SAFE_KEY = /^[\\w$]+$/;\n /**\n @module @ember/debug\n */\n /**\n Convenience method to inspect an object. This method will attempt to\n convert the object into a useful string description.\n \n It is a pretty simple implementation. If you want something more robust,\n use something like JSDump: https://github.com/NV/jsDump\n \n @method inspect\n @static\n @param {Object} obj The object you want to inspect.\n @return {String} A description of the object\n @since 1.4.0\n @private\n */\n function inspect(obj) {\n // detect Node util.inspect call inspect(depth: number, opts: object)\n if (typeof obj === 'number' && arguments.length === 2) {\n return this;\n }\n return inspectValue(obj, 0);\n }\n function inspectValue(value, depth, seen) {\n let valueIsArray = false;\n switch (typeof value) {\n case 'undefined':\n return 'undefined';\n case 'object':\n if (value === null) return 'null';\n if (isArray(value)) {\n valueIsArray = true;\n break;\n }\n // is toString Object.prototype.toString or undefined then traverse\n if (value.toString === objectToString || value.toString === undefined) {\n break;\n }\n // custom toString\n return value.toString();\n case 'function':\n return value.toString === functionToString ? value.name ? \"[Function:\" + value.name + \"]\" : \"[Function]\" : value.toString();\n case 'string':\n return stringify(value);\n case 'symbol':\n case 'boolean':\n case 'number':\n default:\n return value.toString();\n }\n if (seen === undefined) {\n seen = new WeakSet();\n } else {\n if (seen.has(value)) return \"[Circular]\";\n }\n seen.add(value);\n return valueIsArray ? inspectArray(value, depth + 1, seen) : inspectObject(value, depth + 1, seen);\n }\n function inspectKey(key) {\n return SAFE_KEY.test(key) ? key : stringify(key);\n }\n function inspectObject(obj, depth, seen) {\n if (depth > DEPTH_LIMIT) {\n return '[Object]';\n }\n let s = '{';\n let keys = objectKeys(obj);\n for (let i = 0; i < keys.length; i++) {\n s += i === 0 ? ' ' : ', ';\n if (i >= LIST_LIMIT) {\n s += \"... \" + (keys.length - LIST_LIMIT) + \" more keys\";\n break;\n }\n let key = keys[i];\n (true && !(key) && (0, _debug.assert)('has key', key)); // Looping over array\n s += inspectKey(String(key)) + \": \" + inspectValue(obj[key], depth, seen);\n }\n s += ' }';\n return s;\n }\n function inspectArray(arr, depth, seen) {\n if (depth > DEPTH_LIMIT) {\n return '[Array]';\n }\n let s = '[';\n for (let i = 0; i < arr.length; i++) {\n s += i === 0 ? ' ' : ', ';\n if (i >= LIST_LIMIT) {\n s += \"... \" + (arr.length - LIST_LIMIT) + \" more items\";\n break;\n }\n s += inspectValue(arr[i], depth, seen);\n }\n s += ' ]';\n return s;\n }\n});","define(\"@ember/debug/lib/testing\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.isTesting = isTesting;\n _exports.setTesting = setTesting;\n let testing = false;\n function isTesting() {\n return testing;\n }\n function setTesting(value) {\n testing = Boolean(value);\n }\n});","define(\"@ember/debug/lib/warn\", [\"exports\", \"@ember/debug/index\", \"@ember/debug/lib/handlers\"], function (_exports, _index, _handlers) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.registerHandler = _exports.missingOptionsIdDeprecation = _exports.missingOptionsDeprecation = _exports.default = void 0;\n let registerHandler = () => {};\n _exports.registerHandler = registerHandler;\n let warn = () => {};\n let missingOptionsDeprecation = _exports.missingOptionsDeprecation = void 0;\n let missingOptionsIdDeprecation = _exports.missingOptionsIdDeprecation = void 0;\n /**\n @module @ember/debug\n */\n if (true /* DEBUG */) {\n /**\n Allows for runtime registration of handler functions that override the default warning behavior.\n Warnings are invoked by calls made to [@ember/debug/warn](/ember/release/classes/@ember%2Fdebug/methods/warn?anchor=warn).\n The following example demonstrates its usage by registering a handler that does nothing overriding Ember's\n default warning behavior.\n ```javascript\n import { registerWarnHandler } from '@ember/debug';\n // next is not called, so no warnings get the default behavior\n registerWarnHandler(() => {});\n ```\n The handler function takes the following arguments:\n <ul>\n <li> <code>message</code> - The message received from the warn call. </li>\n <li> <code>options</code> - An object passed in with the warn call containing additional information including:</li>\n <ul>\n <li> <code>id</code> - An id of the warning in the form of <code>package-name.specific-warning</code>.</li>\n </ul>\n <li> <code>next</code> - A function that calls into the previously registered handler.</li>\n </ul>\n @public\n @static\n @method registerWarnHandler\n @for @ember/debug\n @param handler {Function} A function to handle warnings.\n @since 2.1.0\n */\n _exports.registerHandler = registerHandler = function registerHandler(handler) {\n (0, _handlers.registerHandler)('warn', handler);\n };\n registerHandler(function logWarning(message) {\n /* eslint-disable no-console */\n console.warn(\"WARNING: \" + message);\n /* eslint-enable no-console */\n });\n\n _exports.missingOptionsDeprecation = missingOptionsDeprecation = 'When calling `warn` you ' + 'must provide an `options` hash as the third parameter. ' + '`options` should include an `id` property.';\n _exports.missingOptionsIdDeprecation = missingOptionsIdDeprecation = 'When calling `warn` you must provide `id` in options.';\n /**\n Display a warning with the provided message.\n * In a production build, this method is defined as an empty function (NOP).\n Uses of this method in Ember itself are stripped from the ember.prod.js build.\n ```javascript\n import { warn } from '@ember/debug';\n import tomsterCount from './tomster-counter'; // a module in my project\n // Log a warning if we have more than 3 tomsters\n warn('Too many tomsters!', tomsterCount <= 3, {\n id: 'ember-debug.too-many-tomsters'\n });\n ```\n @method warn\n @for @ember/debug\n @static\n @param {String} message A warning to display.\n @param {Boolean|Object} test An optional boolean. If falsy, the warning\n will be displayed. If `test` is an object, the `test` parameter can\n be used as the `options` parameter and the warning is displayed.\n @param {Object} options\n @param {String} options.id The `id` can be used by Ember debugging tools\n to change the behavior (raise, log, or silence) for that specific warning.\n The `id` should be namespaced by dots, e.g. \"ember-debug.feature-flag-with-features-stripped\"\n @public\n @since 1.0.0\n */\n warn = function warn(message, test, options) {\n if (arguments.length === 2 && typeof test === 'object') {\n options = test;\n test = false;\n }\n (0, _index.assert)(missingOptionsDeprecation, Boolean(options));\n (0, _index.assert)(missingOptionsIdDeprecation, Boolean(options && options.id));\n // SAFETY: we have explicitly assigned `false` if the user invoked the\n // arity-2 version of the overload, so we know `test` is always either\n // `undefined` or a `boolean` for type-safe callers.\n (0, _handlers.invoke)('warn', message, test, options);\n };\n }\n var _default = _exports.default = warn;\n});","define(\"@ember/deprecated-features/index\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.ASSIGN = void 0;\n /* eslint-disable no-implicit-coercion */\n // These versions should be the version that the deprecation was _introduced_,\n // not the version that the feature will be removed.\n const ASSIGN = _exports.ASSIGN = !!'4.0.0-beta.1';\n});","define(\"@glimmer/compiler\", [\"exports\", \"@glimmer/util\", \"@glimmer/wire-format\", \"@glimmer/syntax\", \"@glimmer/vm\"], function (_exports, _util, _wireFormat, _syntax, _vm) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.WireFormatDebugger = _exports.ProgramSymbols = _exports.NEWLINE = _exports.Builder = void 0;\n _exports.buildStatement = buildStatement;\n _exports.buildStatements = buildStatements;\n _exports.c = c;\n _exports.defaultId = void 0;\n _exports.precompile = precompile;\n _exports.precompileJSON = precompileJSON;\n _exports.s = s;\n _exports.unicode = unicode;\n let HeadKind = /*#__PURE__*/function (HeadKind) {\n HeadKind[\"Block\"] = \"Block\";\n HeadKind[\"Call\"] = \"Call\";\n HeadKind[\"Element\"] = \"Element\";\n HeadKind[\"AppendPath\"] = \"AppendPath\";\n HeadKind[\"AppendExpr\"] = \"AppendExpr\";\n HeadKind[\"Literal\"] = \"Literal\";\n HeadKind[\"Modifier\"] = \"Modifier\";\n HeadKind[\"DynamicComponent\"] = \"DynamicComponent\";\n HeadKind[\"Comment\"] = \"Comment\";\n HeadKind[\"Splat\"] = \"Splat\";\n HeadKind[\"Keyword\"] = \"Keyword\";\n return HeadKind;\n }({});\n let VariableKind = /*#__PURE__*/function (VariableKind) {\n VariableKind[\"Local\"] = \"Local\";\n VariableKind[\"Free\"] = \"Free\";\n VariableKind[\"Arg\"] = \"Arg\";\n VariableKind[\"Block\"] = \"Block\";\n VariableKind[\"This\"] = \"This\";\n return VariableKind;\n }({});\n function normalizeStatement(statement) {\n if (Array.isArray(statement)) {\n if (statementIsExpression(statement)) {\n return normalizeAppendExpression(statement);\n } else if (isSugaryArrayStatement(statement)) {\n return normalizeSugaryArrayStatement(statement);\n } else {\n return normalizeVerboseStatement(statement);\n }\n } else if (typeof statement === 'string') {\n return normalizeAppendHead(normalizeDottedPath(statement), false);\n } else {\n throw (0, _util.assertNever)(statement);\n }\n }\n function normalizeAppendHead(head, trusted) {\n if (head.type === ExpressionKind.GetPath) {\n return {\n kind: HeadKind.AppendPath,\n path: head,\n trusted\n };\n } else {\n return {\n kind: HeadKind.AppendExpr,\n expr: head,\n trusted\n };\n }\n }\n function isSugaryArrayStatement(statement) {\n if (Array.isArray(statement) && typeof statement[0] === 'string') {\n switch (statement[0][0]) {\n case '(':\n case '#':\n case '<':\n case '!':\n return true;\n default:\n return false;\n }\n }\n return false;\n }\n function normalizeSugaryArrayStatement(statement) {\n const name = statement[0];\n switch (name[0]) {\n case '(':\n {\n let params = null;\n let hash = null;\n if (statement.length === 3) {\n params = normalizeParams(statement[1]);\n hash = normalizeHash(statement[2]);\n } else if (statement.length === 2) {\n if (Array.isArray(statement[1])) {\n params = normalizeParams(statement[1]);\n } else {\n hash = normalizeHash(statement[1]);\n }\n }\n return {\n kind: HeadKind.Call,\n head: normalizeCallHead(name),\n params,\n hash,\n trusted: false\n };\n }\n case '#':\n {\n const {\n head: path,\n params,\n hash,\n blocks,\n blockParams\n } = normalizeBuilderBlockStatement(statement);\n return {\n kind: HeadKind.Block,\n head: path,\n params,\n hash,\n blocks,\n blockParams\n };\n }\n case '!':\n {\n const name = statement[0].slice(1);\n const {\n params,\n hash,\n blocks,\n blockParams\n } = normalizeBuilderBlockStatement(statement);\n return {\n kind: HeadKind.Keyword,\n name,\n params,\n hash,\n blocks,\n blockParams\n };\n }\n case '<':\n {\n let attrs = (0, _util.dict)();\n let block = [];\n if (statement.length === 3) {\n attrs = normalizeAttrs(statement[1]);\n block = normalizeBlock(statement[2]);\n } else if (statement.length === 2) {\n if (Array.isArray(statement[1])) {\n block = normalizeBlock(statement[1]);\n } else {\n attrs = normalizeAttrs(statement[1]);\n }\n }\n return {\n kind: HeadKind.Element,\n name: (0, _util.expect)(extractElement(name), \"BUG: expected \" + name + \" to look like a tag name\"),\n attrs,\n block\n };\n }\n default:\n throw new Error(\"Unreachable \" + JSON.stringify(statement) + \" in normalizeSugaryArrayStatement\");\n }\n }\n function normalizeVerboseStatement(statement) {\n switch (statement[0]) {\n case Builder.Literal:\n {\n return {\n kind: HeadKind.Literal,\n value: statement[1]\n };\n }\n case Builder.Append:\n {\n return normalizeAppendExpression(statement[1], statement[2]);\n }\n case Builder.Modifier:\n {\n return {\n kind: HeadKind.Modifier,\n params: normalizeParams(statement[1]),\n hash: normalizeHash(statement[2])\n };\n }\n case Builder.DynamicComponent:\n {\n return {\n kind: HeadKind.DynamicComponent,\n expr: normalizeExpression(statement[1]),\n hash: normalizeHash(statement[2]),\n block: normalizeBlock(statement[3])\n };\n }\n case Builder.Comment:\n {\n return {\n kind: HeadKind.Comment,\n value: statement[1]\n };\n }\n }\n }\n function extractBlockHead(name) {\n const result = /^(#|!)(.*)$/u.exec(name);\n if (result === null) {\n throw new Error(\"Unexpected missing # in block head\");\n }\n return normalizeDottedPath(result[2]);\n }\n function normalizeCallHead(name) {\n const result = /^\\((.*)\\)$/u.exec(name);\n if (result === null) {\n throw new Error(\"Unexpected missing () in call head\");\n }\n return normalizeDottedPath(result[1]);\n }\n function normalizePath(head, tail) {\n if (tail === void 0) {\n tail = [];\n }\n const pathHead = normalizePathHead(head);\n if ((0, _util.isPresentArray)(tail)) {\n return {\n type: ExpressionKind.GetPath,\n path: {\n head: pathHead,\n tail\n }\n };\n } else {\n return {\n type: ExpressionKind.GetVar,\n variable: pathHead\n };\n }\n }\n function normalizeDottedPath(whole) {\n const {\n kind,\n name: rest\n } = normalizePathHead(whole);\n const [name, ...tail] = rest.split('.');\n const variable = {\n kind,\n name,\n mode: 'loose'\n };\n if ((0, _util.isPresentArray)(tail)) {\n return {\n type: ExpressionKind.GetPath,\n path: {\n head: variable,\n tail\n }\n };\n } else {\n return {\n type: ExpressionKind.GetVar,\n variable\n };\n }\n }\n function normalizePathHead(whole) {\n let kind;\n let name;\n if (/^this(?:\\.|$)/u.test(whole)) {\n return {\n kind: VariableKind.This,\n name: whole,\n mode: 'loose'\n };\n }\n switch (whole[0]) {\n case '^':\n kind = VariableKind.Free;\n name = whole.slice(1);\n break;\n case '@':\n kind = VariableKind.Arg;\n name = whole.slice(1);\n break;\n case '&':\n kind = VariableKind.Block;\n name = whole.slice(1);\n break;\n default:\n kind = VariableKind.Local;\n name = whole;\n }\n return {\n kind,\n name,\n mode: 'loose'\n };\n }\n function normalizeBuilderBlockStatement(statement) {\n const head = statement[0];\n let blocks = (0, _util.dict)();\n let params = null;\n let hash = null;\n let blockParams = null;\n if (statement.length === 2) {\n blocks = normalizeBlocks(statement[1]);\n } else if (statement.length === 3) {\n if (Array.isArray(statement[1])) {\n params = normalizeParams(statement[1]);\n } else {\n ({\n hash,\n blockParams\n } = normalizeBlockHash(statement[1]));\n }\n blocks = normalizeBlocks(statement[2]);\n } else if (statement.length === 4) {\n params = normalizeParams(statement[1]);\n ({\n hash,\n blockParams\n } = normalizeBlockHash(statement[2]));\n blocks = normalizeBlocks(statement[3]);\n }\n return {\n head: extractBlockHead(head),\n params,\n hash,\n blockParams,\n blocks\n };\n }\n function normalizeBlockHash(hash) {\n if (hash === null) {\n return {\n hash: null,\n blockParams: null\n };\n }\n let out = null;\n let blockParams = null;\n entries(hash, (key, value) => {\n if (key === 'as') {\n blockParams = Array.isArray(value) ? value : [value];\n } else {\n out = out || (0, _util.dict)();\n out[key] = normalizeExpression(value);\n }\n });\n return {\n hash: out,\n blockParams\n };\n }\n function entries(dict, callback) {\n Object.keys(dict).forEach(key => {\n const value = dict[key];\n callback(key, value);\n });\n }\n function normalizeBlocks(value) {\n if (Array.isArray(value)) {\n return {\n default: normalizeBlock(value)\n };\n } else {\n return mapObject(value, normalizeBlock);\n }\n }\n function normalizeBlock(block) {\n return block.map(s => normalizeStatement(s));\n }\n function normalizeAttrs(attrs) {\n return mapObject(attrs, a => normalizeAttr(a).expr);\n }\n function normalizeAttr(attr) {\n if (attr === 'splat') {\n return {\n expr: HeadKind.Splat,\n trusted: false\n };\n } else {\n const expr = normalizeExpression(attr);\n return {\n expr,\n trusted: false\n };\n }\n }\n function mapObject(object, mapper) {\n const out = (0, _util.dict)();\n Object.keys(object).forEach(k => {\n out[k] = mapper(object[k], k);\n });\n return out;\n }\n function extractElement(input) {\n var _match$;\n const match = /^<([\\d\\-a-z][\\d\\-A-Za-z]*)>$/u.exec(input);\n return (_match$ = match == null ? void 0 : match[1]) != null ? _match$ : null;\n }\n let Builder = _exports.Builder = /*#__PURE__*/function (Builder) {\n Builder[Builder[\"Literal\"] = 0] = \"Literal\";\n Builder[Builder[\"Comment\"] = 1] = \"Comment\";\n Builder[Builder[\"Append\"] = 2] = \"Append\";\n Builder[Builder[\"Modifier\"] = 3] = \"Modifier\";\n Builder[Builder[\"DynamicComponent\"] = 4] = \"DynamicComponent\";\n Builder[Builder[\"Get\"] = 5] = \"Get\";\n Builder[Builder[\"Concat\"] = 6] = \"Concat\";\n Builder[Builder[\"HasBlock\"] = 7] = \"HasBlock\";\n Builder[Builder[\"HasBlockParams\"] = 8] = \"HasBlockParams\";\n return Builder;\n }({});\n let ExpressionKind = /*#__PURE__*/function (ExpressionKind) {\n ExpressionKind[\"Literal\"] = \"Literal\";\n ExpressionKind[\"Call\"] = \"Call\";\n ExpressionKind[\"GetPath\"] = \"GetPath\";\n ExpressionKind[\"GetVar\"] = \"GetVar\";\n ExpressionKind[\"Concat\"] = \"Concat\";\n ExpressionKind[\"HasBlock\"] = \"HasBlock\";\n ExpressionKind[\"HasBlockParams\"] = \"HasBlockParams\";\n return ExpressionKind;\n }({});\n function normalizeAppendExpression(expression, forceTrusted) {\n if (forceTrusted === void 0) {\n forceTrusted = false;\n }\n if (expression === null || expression === undefined) {\n return {\n expr: {\n type: ExpressionKind.Literal,\n value: expression\n },\n kind: HeadKind.AppendExpr,\n trusted: false\n };\n } else if (Array.isArray(expression)) {\n switch (expression[0]) {\n case Builder.Literal:\n return {\n expr: {\n type: ExpressionKind.Literal,\n value: expression[1]\n },\n kind: HeadKind.AppendExpr,\n trusted: false\n };\n case Builder.Get:\n {\n return normalizeAppendHead(normalizePath(expression[1], expression[2]), forceTrusted);\n }\n case Builder.Concat:\n {\n const expr = {\n type: ExpressionKind.Concat,\n params: normalizeParams(expression.slice(1))\n };\n return {\n expr,\n kind: HeadKind.AppendExpr,\n trusted: forceTrusted\n };\n }\n case Builder.HasBlock:\n return {\n expr: {\n type: ExpressionKind.HasBlock,\n name: expression[1]\n },\n kind: HeadKind.AppendExpr,\n trusted: forceTrusted\n };\n case Builder.HasBlockParams:\n return {\n expr: {\n type: ExpressionKind.HasBlockParams,\n name: expression[1]\n },\n kind: HeadKind.AppendExpr,\n trusted: forceTrusted\n };\n default:\n {\n if (isBuilderCallExpression(expression)) {\n return {\n expr: normalizeCallExpression(expression),\n kind: HeadKind.AppendExpr,\n trusted: forceTrusted\n };\n } else {\n throw new Error(\"Unexpected array in expression position (wasn't a tuple expression and \" + expression[0] + \" isn't wrapped in parens, so it isn't a call): \" + JSON.stringify(expression));\n }\n }\n // BuilderCallExpression\n }\n } else if (typeof expression !== 'object') {\n switch (typeof expression) {\n case 'string':\n {\n return normalizeAppendHead(normalizeDottedPath(expression), forceTrusted);\n }\n case 'boolean':\n case 'number':\n return {\n expr: {\n type: ExpressionKind.Literal,\n value: expression\n },\n kind: HeadKind.AppendExpr,\n trusted: true\n };\n default:\n throw (0, _util.assertNever)(expression);\n }\n } else {\n throw (0, _util.assertNever)(expression);\n }\n }\n function normalizeExpression(expression) {\n if (expression === null || expression === undefined) {\n return {\n type: ExpressionKind.Literal,\n value: expression\n };\n } else if (Array.isArray(expression)) {\n switch (expression[0]) {\n case Builder.Literal:\n return {\n type: ExpressionKind.Literal,\n value: expression[1]\n };\n case Builder.Get:\n {\n return normalizePath(expression[1], expression[2]);\n }\n case Builder.Concat:\n {\n const expr = {\n type: ExpressionKind.Concat,\n params: normalizeParams(expression.slice(1))\n };\n return expr;\n }\n case Builder.HasBlock:\n return {\n type: ExpressionKind.HasBlock,\n name: expression[1]\n };\n case Builder.HasBlockParams:\n return {\n type: ExpressionKind.HasBlockParams,\n name: expression[1]\n };\n default:\n {\n if (isBuilderCallExpression(expression)) {\n return normalizeCallExpression(expression);\n } else {\n throw new Error(\"Unexpected array in expression position (wasn't a tuple expression and \" + expression[0] + \" isn't wrapped in parens, so it isn't a call): \" + JSON.stringify(expression));\n }\n }\n // BuilderCallExpression\n }\n } else if (typeof expression !== 'object') {\n switch (typeof expression) {\n case 'string':\n {\n return normalizeDottedPath(expression);\n }\n case 'boolean':\n case 'number':\n return {\n type: ExpressionKind.Literal,\n value: expression\n };\n default:\n throw (0, _util.assertNever)(expression);\n }\n } else {\n throw (0, _util.assertNever)(expression);\n }\n }\n function statementIsExpression(statement) {\n if (!Array.isArray(statement)) {\n return false;\n }\n const name = statement[0];\n if (typeof name === 'number') {\n switch (name) {\n case Builder.Literal:\n case Builder.Get:\n case Builder.Concat:\n case Builder.HasBlock:\n case Builder.HasBlockParams:\n return true;\n default:\n return false;\n }\n }\n if (name[0] === '(') {\n return true;\n }\n return false;\n }\n function isBuilderCallExpression(value) {\n return typeof value[0] === 'string' && value[0][0] === '(';\n }\n function normalizeParams(input) {\n return input.map(normalizeExpression);\n }\n function normalizeHash(input) {\n if (input === null) return null;\n return mapObject(input, normalizeExpression);\n }\n function normalizeCallExpression(expr) {\n switch (expr.length) {\n case 1:\n return {\n type: ExpressionKind.Call,\n head: normalizeCallHead(expr[0]),\n params: null,\n hash: null\n };\n case 2:\n {\n if (Array.isArray(expr[1])) {\n return {\n type: ExpressionKind.Call,\n head: normalizeCallHead(expr[0]),\n params: normalizeParams(expr[1]),\n hash: null\n };\n } else {\n return {\n type: ExpressionKind.Call,\n head: normalizeCallHead(expr[0]),\n params: null,\n hash: normalizeHash(expr[1])\n };\n }\n }\n case 3:\n return {\n type: ExpressionKind.Call,\n head: normalizeCallHead(expr[0]),\n params: normalizeParams(expr[1]),\n hash: normalizeHash(expr[2])\n };\n }\n }\n class ProgramSymbols {\n constructor() {\n this._freeVariables = [];\n this._symbols = ['this'];\n this.top = this;\n }\n toSymbols() {\n return this._symbols.slice(1);\n }\n toUpvars() {\n return this._freeVariables;\n }\n freeVar(name) {\n return addString(this._freeVariables, name);\n }\n block(name) {\n return this.symbol(name);\n }\n arg(name) {\n return addString(this._symbols, name);\n }\n local(name) {\n throw new Error(\"No local \" + name + \" was found. Maybe you meant ^\" + name + \" for upvar, or !\" + name + \" for keyword?\");\n }\n this() {\n return 0;\n }\n hasLocal(_name) {\n return false;\n }\n\n // any symbol\n symbol(name) {\n return addString(this._symbols, name);\n }\n child(locals) {\n return new LocalSymbols(this, locals);\n }\n }\n _exports.ProgramSymbols = ProgramSymbols;\n class LocalSymbols {\n constructor(parent, locals) {\n this.locals = (0, _util.dict)();\n this.parent = parent;\n for (let local of locals) {\n this.locals[local] = parent.top.symbol(local);\n }\n }\n get paramSymbols() {\n return (0, _util.values)(this.locals);\n }\n get top() {\n return this.parent.top;\n }\n freeVar(name) {\n return this.parent.freeVar(name);\n }\n arg(name) {\n return this.parent.arg(name);\n }\n block(name) {\n return this.parent.block(name);\n }\n local(name) {\n if (name in this.locals) {\n return this.locals[name];\n } else {\n return this.parent.local(name);\n }\n }\n this() {\n return this.parent.this();\n }\n hasLocal(name) {\n if (name in this.locals) {\n return true;\n } else {\n return this.parent.hasLocal(name);\n }\n }\n child(locals) {\n return new LocalSymbols(this, locals);\n }\n }\n function addString(array, item) {\n let index = array.indexOf(item);\n if (index === -1) {\n index = array.length;\n array.push(item);\n return index;\n } else {\n return index;\n }\n }\n function unimpl(message) {\n return new Error(\"unimplemented \" + message);\n }\n function buildStatements(statements, symbols) {\n let out = [];\n statements.forEach(s => out.push(...buildStatement(normalizeStatement(s), symbols)));\n return out;\n }\n function buildNormalizedStatements(statements, symbols) {\n let out = [];\n statements.forEach(s => out.push(...buildStatement(s, symbols)));\n return out;\n }\n function buildStatement(normalized, symbols) {\n if (symbols === void 0) {\n symbols = new ProgramSymbols();\n }\n switch (normalized.kind) {\n case HeadKind.AppendPath:\n {\n return [[normalized.trusted ? _wireFormat.SexpOpcodes.TrustingAppend : _wireFormat.SexpOpcodes.Append, buildGetPath(normalized.path, symbols)]];\n }\n case HeadKind.AppendExpr:\n {\n return [[normalized.trusted ? _wireFormat.SexpOpcodes.TrustingAppend : _wireFormat.SexpOpcodes.Append, buildExpression(normalized.expr, normalized.trusted ? 'TrustedAppend' : 'Append', symbols)]];\n }\n case HeadKind.Call:\n {\n let {\n head: path,\n params,\n hash,\n trusted\n } = normalized;\n let builtParams = params ? buildParams(params, symbols) : null;\n let builtHash = hash ? buildHash(hash, symbols) : null;\n let builtExpr = buildCallHead(path, trusted ? _wireFormat.VariableResolutionContext.AmbiguousInvoke : _wireFormat.VariableResolutionContext.AmbiguousAppendInvoke, symbols);\n return [[trusted ? _wireFormat.SexpOpcodes.TrustingAppend : _wireFormat.SexpOpcodes.Append, [_wireFormat.SexpOpcodes.Call, builtExpr, builtParams, builtHash]]];\n }\n case HeadKind.Literal:\n {\n return [[_wireFormat.SexpOpcodes.Append, normalized.value]];\n }\n case HeadKind.Comment:\n {\n return [[_wireFormat.SexpOpcodes.Comment, normalized.value]];\n }\n case HeadKind.Block:\n {\n let blocks = buildBlocks(normalized.blocks, normalized.blockParams, symbols);\n let hash = buildHash(normalized.hash, symbols);\n let params = buildParams(normalized.params, symbols);\n let path = buildCallHead(normalized.head, _wireFormat.VariableResolutionContext.ResolveAsComponentHead, symbols);\n return [[_wireFormat.SexpOpcodes.Block, path, params, hash, blocks]];\n }\n case HeadKind.Keyword:\n {\n return [buildKeyword(normalized, symbols)];\n }\n case HeadKind.Element:\n return buildElement(normalized, symbols);\n case HeadKind.Modifier:\n throw unimpl('modifier');\n case HeadKind.DynamicComponent:\n throw unimpl('dynamic component');\n default:\n throw (0, _util.assertNever)(normalized);\n }\n }\n function s(arr) {\n for (var _len = arguments.length, interpolated = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n interpolated[_key - 1] = arguments[_key];\n }\n let result = arr.reduce((result, string, i) => result + (\"\" + string + (interpolated[i] ? String(interpolated[i]) : '')), '');\n return [Builder.Literal, result];\n }\n function c(arr) {\n for (var _len2 = arguments.length, interpolated = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n interpolated[_key2 - 1] = arguments[_key2];\n }\n let result = arr.reduce((result, string, i) => result + (\"\" + string + (interpolated[i] ? String(interpolated[i]) : '')), '');\n return [Builder.Comment, result];\n }\n function unicode(charCode) {\n return String.fromCharCode(parseInt(charCode, 16));\n }\n const NEWLINE = _exports.NEWLINE = '\\n';\n function buildKeyword(normalized, symbols) {\n let {\n name\n } = normalized;\n let params = buildParams(normalized.params, symbols);\n let childSymbols = symbols.child(normalized.blockParams || []);\n let block = buildBlock(normalized.blocks['default'], childSymbols, childSymbols.paramSymbols);\n let inverse = normalized.blocks['else'] ? buildBlock(normalized.blocks['else'], symbols, []) : null;\n switch (name) {\n case 'with':\n return [_wireFormat.SexpOpcodes.With, (0, _util.expect)(params, 'with requires params')[0], block, inverse];\n case 'if':\n return [_wireFormat.SexpOpcodes.If, (0, _util.expect)(params, 'if requires params')[0], block, inverse];\n case 'each':\n {\n let keyExpr = normalized.hash ? normalized.hash['key'] : null;\n let key = keyExpr ? buildExpression(keyExpr, 'Strict', symbols) : null;\n return [_wireFormat.SexpOpcodes.Each, (0, _util.expect)(params, 'if requires params')[0], key, block, inverse];\n }\n default:\n throw new Error('unimplemented keyword');\n }\n }\n function buildElement(_ref, symbols) {\n let {\n name,\n attrs,\n block\n } = _ref;\n let out = [hasSplat(attrs) ? [_wireFormat.SexpOpcodes.OpenElementWithSplat, name] : [_wireFormat.SexpOpcodes.OpenElement, name]];\n if (attrs) {\n let {\n params,\n args\n } = buildElementParams(attrs, symbols);\n out.push(...params);\n (0, _util.assert)(args === null, \"Can't pass args to a simple element\");\n }\n out.push([_wireFormat.SexpOpcodes.FlushElement]);\n if (Array.isArray(block)) {\n block.forEach(s => out.push(...buildStatement(s, symbols)));\n } else if (block === null) ;else {\n throw (0, _util.assertNever)(block);\n }\n out.push([_wireFormat.SexpOpcodes.CloseElement]);\n return out;\n }\n function hasSplat(attrs) {\n if (attrs === null) return false;\n return Object.keys(attrs).some(a => attrs[a] === HeadKind.Splat);\n }\n function buildElementParams(attrs, symbols) {\n let params = [];\n let keys = [];\n let values = [];\n for (const [key, value] of Object.entries(attrs)) {\n if (value === HeadKind.Splat) {\n params.push([_wireFormat.SexpOpcodes.AttrSplat, symbols.block('&attrs')]);\n } else if (key[0] === '@') {\n keys.push(key);\n values.push(buildExpression(value, 'Strict', symbols));\n } else {\n params.push(...buildAttributeValue(key, value,\n // TODO: extract namespace from key\n extractNamespace(key), symbols));\n }\n }\n return {\n params,\n args: (0, _util.isPresentArray)(keys) && (0, _util.isPresentArray)(values) ? [keys, values] : null\n };\n }\n function extractNamespace(name) {\n if (name === 'xmlns') {\n return _util.NS_XMLNS;\n }\n let match = /^([^:]*):([^:]*)$/u.exec(name);\n if (match === null) {\n return null;\n }\n let namespace = match[1];\n switch (namespace) {\n case 'xlink':\n return _util.NS_XLINK;\n case 'xml':\n return _util.NS_XML;\n case 'xmlns':\n return _util.NS_XMLNS;\n }\n return null;\n }\n function buildAttributeValue(name, value, namespace, symbols) {\n switch (value.type) {\n case ExpressionKind.Literal:\n {\n let val = value.value;\n if (val === false) {\n return [];\n } else if (val === true) {\n return [[_wireFormat.SexpOpcodes.StaticAttr, name, '', namespace != null ? namespace : undefined]];\n } else if (typeof val === 'string') {\n return [[_wireFormat.SexpOpcodes.StaticAttr, name, val, namespace != null ? namespace : undefined]];\n } else {\n throw new Error(\"Unexpected/unimplemented literal attribute \" + JSON.stringify(val));\n }\n }\n default:\n return [[_wireFormat.SexpOpcodes.DynamicAttr, name, buildExpression(value, 'AttrValue', symbols), namespace != null ? namespace : undefined]];\n }\n }\n function varContext(context, bare) {\n switch (context) {\n case 'Append':\n return bare ? 'AppendBare' : 'AppendInvoke';\n case 'TrustedAppend':\n return bare ? 'TrustedAppendBare' : 'TrustedAppendInvoke';\n case 'AttrValue':\n return bare ? 'AttrValueBare' : 'AttrValueInvoke';\n default:\n return context;\n }\n }\n function buildExpression(expr, context, symbols) {\n switch (expr.type) {\n case ExpressionKind.GetPath:\n {\n return buildGetPath(expr, symbols);\n }\n case ExpressionKind.GetVar:\n {\n return buildVar(expr.variable, varContext(context, true), symbols);\n }\n case ExpressionKind.Concat:\n {\n return [_wireFormat.SexpOpcodes.Concat, buildConcat(expr.params, symbols)];\n }\n case ExpressionKind.Call:\n {\n let builtParams = buildParams(expr.params, symbols);\n let builtHash = buildHash(expr.hash, symbols);\n let builtExpr = buildCallHead(expr.head, context === 'Strict' ? 'SubExpression' : varContext(context, false), symbols);\n return [_wireFormat.SexpOpcodes.Call, builtExpr, builtParams, builtHash];\n }\n case ExpressionKind.HasBlock:\n {\n return [_wireFormat.SexpOpcodes.HasBlock, buildVar({\n kind: VariableKind.Block,\n name: expr.name,\n mode: 'loose'\n }, _wireFormat.VariableResolutionContext.Strict, symbols)];\n }\n case ExpressionKind.HasBlockParams:\n {\n return [_wireFormat.SexpOpcodes.HasBlockParams, buildVar({\n kind: VariableKind.Block,\n name: expr.name,\n mode: 'loose'\n }, _wireFormat.VariableResolutionContext.Strict, symbols)];\n }\n case ExpressionKind.Literal:\n {\n if (expr.value === undefined) {\n return [_wireFormat.SexpOpcodes.Undefined];\n } else {\n return expr.value;\n }\n }\n default:\n (0, _util.assertNever)(expr);\n }\n }\n function buildCallHead(callHead, context, symbols) {\n if (callHead.type === ExpressionKind.GetVar) {\n return buildVar(callHead.variable, context, symbols);\n } else {\n return buildGetPath(callHead, symbols);\n }\n }\n function buildGetPath(head, symbols) {\n return buildVar(head.path.head, _wireFormat.VariableResolutionContext.Strict, symbols, head.path.tail);\n }\n function buildVar(head, context, symbols, path) {\n let op = _wireFormat.SexpOpcodes.GetSymbol;\n let sym;\n switch (head.kind) {\n case VariableKind.Free:\n if (context === 'Strict') {\n op = _wireFormat.SexpOpcodes.GetStrictKeyword;\n } else if (context === 'AppendBare') {\n op = _wireFormat.SexpOpcodes.GetFreeAsComponentOrHelperHeadOrThisFallback;\n } else if (context === 'AppendInvoke') {\n op = _wireFormat.SexpOpcodes.GetFreeAsComponentOrHelperHead;\n } else if (context === 'TrustedAppendBare') {\n op = _wireFormat.SexpOpcodes.GetFreeAsHelperHeadOrThisFallback;\n } else if (context === 'TrustedAppendInvoke') {\n op = _wireFormat.SexpOpcodes.GetFreeAsHelperHead;\n } else if (context === 'AttrValueBare') {\n op = _wireFormat.SexpOpcodes.GetFreeAsHelperHeadOrThisFallback;\n } else if (context === 'AttrValueInvoke') {\n op = _wireFormat.SexpOpcodes.GetFreeAsHelperHead;\n } else if (context === 'SubExpression') {\n op = _wireFormat.SexpOpcodes.GetFreeAsHelperHead;\n } else {\n op = expressionContextOp(context);\n }\n sym = symbols.freeVar(head.name);\n break;\n default:\n op = _wireFormat.SexpOpcodes.GetSymbol;\n sym = getSymbolForVar(head.kind, symbols, head.name);\n }\n if (path === undefined || path.length === 0) {\n return [op, sym];\n } else {\n return [op, sym, path];\n }\n }\n function getSymbolForVar(kind, symbols, name) {\n switch (kind) {\n case VariableKind.Arg:\n return symbols.arg(name);\n case VariableKind.Block:\n return symbols.block(name);\n case VariableKind.Local:\n return symbols.local(name);\n case VariableKind.This:\n return symbols.this();\n default:\n return (0, _util.exhausted)(kind);\n }\n }\n function expressionContextOp(context) {\n switch (context) {\n case _wireFormat.VariableResolutionContext.Strict:\n return _wireFormat.SexpOpcodes.GetStrictKeyword;\n case _wireFormat.VariableResolutionContext.AmbiguousAppend:\n return _wireFormat.SexpOpcodes.GetFreeAsComponentOrHelperHeadOrThisFallback;\n case _wireFormat.VariableResolutionContext.AmbiguousAppendInvoke:\n return _wireFormat.SexpOpcodes.GetFreeAsComponentOrHelperHead;\n case _wireFormat.VariableResolutionContext.AmbiguousInvoke:\n return _wireFormat.SexpOpcodes.GetFreeAsHelperHeadOrThisFallback;\n case _wireFormat.VariableResolutionContext.ResolveAsCallHead:\n return _wireFormat.SexpOpcodes.GetFreeAsHelperHead;\n case _wireFormat.VariableResolutionContext.ResolveAsModifierHead:\n return _wireFormat.SexpOpcodes.GetFreeAsModifierHead;\n case _wireFormat.VariableResolutionContext.ResolveAsComponentHead:\n return _wireFormat.SexpOpcodes.GetFreeAsComponentHead;\n default:\n return (0, _util.exhausted)(context);\n }\n }\n function buildParams(exprs, symbols) {\n if (exprs === null || !(0, _util.isPresentArray)(exprs)) return null;\n return exprs.map(e => buildExpression(e, 'Strict', symbols));\n }\n function buildConcat(exprs, symbols) {\n return exprs.map(e => buildExpression(e, 'AttrValue', symbols));\n }\n function buildHash(exprs, symbols) {\n if (exprs === null) return null;\n let out = [[], []];\n for (const [key, value] of Object.entries(exprs)) {\n out[0].push(key);\n out[1].push(buildExpression(value, 'Strict', symbols));\n }\n return out;\n }\n function buildBlocks(blocks, blockParams, parent) {\n let keys = [];\n let values = [];\n for (const [name, block] of Object.entries(blocks)) {\n keys.push(name);\n if (name === 'default') {\n let symbols = parent.child(blockParams || []);\n values.push(buildBlock(block, symbols, symbols.paramSymbols));\n } else {\n values.push(buildBlock(block, parent, []));\n }\n }\n return [keys, values];\n }\n function buildBlock(block, symbols, locals) {\n if (locals === void 0) {\n locals = [];\n }\n return [buildNormalizedStatements(block, symbols), locals];\n }\n class Template extends (0, _syntax.node)('Template').fields() {}\n class InElement extends (0, _syntax.node)('InElement').fields() {}\n class Not extends (0, _syntax.node)('Not').fields() {}\n class If extends (0, _syntax.node)('If').fields() {}\n class IfInline extends (0, _syntax.node)('IfInline').fields() {}\n class Each extends (0, _syntax.node)('Each').fields() {}\n class With extends (0, _syntax.node)('With').fields() {}\n class Let extends (0, _syntax.node)('Let').fields() {}\n class WithDynamicVars extends (0, _syntax.node)('WithDynamicVars').fields() {}\n class GetDynamicVar extends (0, _syntax.node)('GetDynamicVar').fields() {}\n class Log extends (0, _syntax.node)('Log').fields() {}\n class InvokeComponent extends (0, _syntax.node)('InvokeComponent').fields() {}\n class NamedBlocks extends (0, _syntax.node)('NamedBlocks').fields() {}\n class NamedBlock extends (0, _syntax.node)('NamedBlock').fields() {}\n class EndBlock extends (0, _syntax.node)('EndBlock').fields() {}\n class AppendTrustedHTML extends (0, _syntax.node)('AppendTrustedHTML').fields() {}\n class AppendTextNode extends (0, _syntax.node)('AppendTextNode').fields() {}\n class AppendComment extends (0, _syntax.node)('AppendComment').fields() {}\n class Component extends (0, _syntax.node)('Component').fields() {}\n class StaticAttr extends (0, _syntax.node)('StaticAttr').fields() {}\n class DynamicAttr extends (0, _syntax.node)('DynamicAttr').fields() {}\n class SimpleElement extends (0, _syntax.node)('SimpleElement').fields() {}\n class ElementParameters extends (0, _syntax.node)('ElementParameters').fields() {}\n class Yield extends (0, _syntax.node)('Yield').fields() {}\n class Debugger extends (0, _syntax.node)('Debugger').fields() {}\n class CallExpression extends (0, _syntax.node)('CallExpression').fields() {}\n class DeprecatedCallExpression extends (0, _syntax.node)('DeprecatedCallExpression').fields() {}\n class Modifier extends (0, _syntax.node)('Modifier').fields() {}\n class InvokeBlock extends (0, _syntax.node)('InvokeBlock').fields() {}\n class SplatAttr extends (0, _syntax.node)('SplatAttr').fields() {}\n class PathExpression extends (0, _syntax.node)('PathExpression').fields() {}\n class GetWithResolver extends (0, _syntax.node)('GetWithResolver').fields() {}\n class GetSymbol extends (0, _syntax.node)('GetSymbol').fields() {}\n class GetFreeWithContext extends (0, _syntax.node)('GetFreeWithContext').fields() {}\n /** strict mode */\n class GetFree extends (0, _syntax.node)('GetFree').fields() {}\n class Missing extends (0, _syntax.node)('Missing').fields() {}\n class InterpolateExpression extends (0, _syntax.node)('InterpolateExpression').fields() {}\n class HasBlock extends (0, _syntax.node)('HasBlock').fields() {}\n class HasBlockParams extends (0, _syntax.node)('HasBlockParams').fields() {}\n class Curry extends (0, _syntax.node)('Curry').fields() {}\n class Positional extends (0, _syntax.node)('Positional').fields() {}\n class NamedArguments extends (0, _syntax.node)('NamedArguments').fields() {}\n class NamedArgument extends (0, _syntax.node)('NamedArgument').fields() {}\n class Args extends (0, _syntax.node)('Args').fields() {}\n class Tail extends (0, _syntax.node)('Tail').fields() {}\n class PresentList {\n constructor(list) {\n this.list = list;\n }\n toArray() {\n return this.list;\n }\n map(callback) {\n let result = (0, _util.mapPresentArray)(this.list, callback);\n return new PresentList(result);\n }\n filter(predicate) {\n let out = [];\n for (let item of this.list) {\n if (predicate(item)) {\n out.push(item);\n }\n }\n return OptionalList(out);\n }\n toPresentArray() {\n return this.list;\n }\n into(_ref2) {\n let {\n ifPresent\n } = _ref2;\n return ifPresent(this);\n }\n }\n class EmptyList {\n constructor() {\n this.list = [];\n }\n map(_callback) {\n return new EmptyList();\n }\n filter(_predicate) {\n return new EmptyList();\n }\n toArray() {\n return this.list;\n }\n toPresentArray() {\n return null;\n }\n into(_ref3) {\n let {\n ifEmpty\n } = _ref3;\n return ifEmpty();\n }\n }\n\n // export type OptionalList<T> = PresentList<T> | EmptyList<T>;\n\n function OptionalList(value) {\n if ((0, _util.isPresentArray)(value)) {\n return new PresentList(value);\n } else {\n return new EmptyList();\n }\n }\n class ResultImpl {\n static all() {\n let out = [];\n for (var _len3 = arguments.length, results = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n results[_key3] = arguments[_key3];\n }\n for (let result of results) {\n if (result.isErr) {\n return result.cast();\n } else {\n out.push(result.value);\n }\n }\n return Ok(out);\n }\n }\n const Result = ResultImpl;\n class OkImpl extends ResultImpl {\n constructor(value) {\n super();\n this.isOk = true;\n this.isErr = false;\n this.value = value;\n }\n expect(_message) {\n return this.value;\n }\n ifOk(callback) {\n callback(this.value);\n return this;\n }\n andThen(callback) {\n return callback(this.value);\n }\n mapOk(callback) {\n return Ok(callback(this.value));\n }\n ifErr(_callback) {\n return this;\n }\n mapErr(_callback) {\n return this;\n }\n }\n class ErrImpl extends ResultImpl {\n constructor(reason) {\n super();\n this.isOk = false;\n this.isErr = true;\n this.reason = reason;\n }\n expect(message) {\n throw new Error(message || 'expected an Ok, got Err');\n }\n andThen(_callback) {\n return this.cast();\n }\n mapOk(_callback) {\n return this.cast();\n }\n ifOk(_callback) {\n return this;\n }\n mapErr(callback) {\n return Err(callback(this.reason));\n }\n ifErr(callback) {\n callback(this.reason);\n return this;\n }\n cast() {\n return this;\n }\n }\n function Ok(value) {\n return new OkImpl(value);\n }\n function Err(reason) {\n return new ErrImpl(reason);\n }\n class ResultArray {\n constructor(items) {\n if (items === void 0) {\n items = [];\n }\n this.items = items;\n }\n add(item) {\n this.items.push(item);\n }\n toArray() {\n let err = this.items.filter(item => item instanceof ErrImpl)[0];\n if (err !== undefined) {\n return err.cast();\n } else {\n return Ok(this.items.map(item => item.value));\n }\n }\n toOptionalList() {\n return this.toArray().mapOk(arr => OptionalList(arr));\n }\n }\n function hasPath(node) {\n return node.callee.type === 'Path';\n }\n function isHelperInvocation(node) {\n if (!hasPath(node)) {\n return false;\n }\n return !node.args.isEmpty();\n }\n function isSimplePath(path) {\n if (path.type === 'Path') {\n let {\n ref: head,\n tail: parts\n } = path;\n return head.type === 'Free' && !_syntax.ASTv2.isStrictResolution(head.resolution) && parts.length === 0;\n } else {\n return false;\n }\n }\n function isStrictHelper(expr) {\n if (expr.callee.type !== 'Path') {\n return true;\n }\n if (expr.callee.ref.type !== 'Free') {\n return true;\n }\n return _syntax.ASTv2.isStrictResolution(expr.callee.ref.resolution);\n }\n function assertIsValidModifier(helper) {\n if (isStrictHelper(helper) || isSimplePath(helper.callee)) {\n return;\n }\n throw (0, _syntax.generateSyntaxError)(\"`\" + printPath(helper.callee) + \"` is not a valid name for a modifier\", helper.loc);\n }\n function printPath(path) {\n switch (path.type) {\n case 'Literal':\n return JSON.stringify(path.value);\n case 'Path':\n {\n let printedPath = [printPathHead(path.ref)];\n printedPath.push(...path.tail.map(t => t.chars));\n return printedPath.join('.');\n }\n case 'Call':\n return \"(\" + printPath(path.callee) + \" ...)\";\n case 'DeprecatedCall':\n return \"\" + path.callee.name;\n case 'Interpolate':\n throw (0, _util.unreachable)('a concat statement cannot appear as the head of an expression');\n }\n }\n function printPathHead(head) {\n switch (head.type) {\n case 'Arg':\n return head.name.chars;\n case 'Free':\n case 'Local':\n return head.name;\n case 'This':\n return 'this';\n }\n }\n class NormalizeExpressions {\n visit(node, state) {\n switch (node.type) {\n case 'Literal':\n return Ok(this.Literal(node));\n case 'Interpolate':\n return this.Interpolate(node, state);\n case 'Path':\n return this.PathExpression(node);\n case 'Call':\n {\n let translated = CALL_KEYWORDS.translate(node, state);\n if (translated !== null) {\n return translated;\n }\n return this.CallExpression(node, state);\n }\n case 'DeprecatedCall':\n return this.DeprecaedCallExpression(node, state);\n }\n }\n visitList(nodes, state) {\n return new ResultArray(nodes.map(e => VISIT_EXPRS.visit(e, state))).toOptionalList();\n }\n\n /**\n * Normalize paths into `hir.Path` or a `hir.Expr` that corresponds to the ref.\n *\n * TODO since keywords don't support tails anyway, distinguish PathExpression from\n * VariableReference in ASTv2.\n */\n PathExpression(path) {\n let ref = this.VariableReference(path.ref);\n let {\n tail\n } = path;\n if ((0, _util.isPresentArray)(tail)) {\n let tailLoc = tail[0].loc.extend((0, _util.getLast)(tail).loc);\n return Ok(new PathExpression({\n loc: path.loc,\n head: ref,\n tail: new Tail({\n loc: tailLoc,\n members: tail\n })\n }));\n } else {\n return Ok(ref);\n }\n }\n VariableReference(ref) {\n return ref;\n }\n Literal(literal) {\n return literal;\n }\n Interpolate(expr, state) {\n let parts = expr.parts.map(convertPathToCallIfKeyword);\n return VISIT_EXPRS.visitList(parts, state).mapOk(parts => new InterpolateExpression({\n loc: expr.loc,\n parts: parts\n }));\n }\n CallExpression(expr, state) {\n if (!hasPath(expr)) {\n throw new Error(\"unimplemented subexpression at the head of a subexpression\");\n } else {\n return Result.all(VISIT_EXPRS.visit(expr.callee, state), VISIT_EXPRS.Args(expr.args, state)).mapOk(_ref4 => {\n let [callee, args] = _ref4;\n return new CallExpression({\n loc: expr.loc,\n callee,\n args\n });\n });\n }\n }\n DeprecaedCallExpression(_ref5, _state) {\n let {\n arg,\n callee,\n loc\n } = _ref5;\n return Ok(new DeprecatedCallExpression({\n loc,\n arg,\n callee\n }));\n }\n Args(_ref6, state) {\n let {\n positional,\n named,\n loc\n } = _ref6;\n return Result.all(this.Positional(positional, state), this.NamedArguments(named, state)).mapOk(_ref7 => {\n let [positional, named] = _ref7;\n return new Args({\n loc,\n positional,\n named\n });\n });\n }\n Positional(positional, state) {\n return VISIT_EXPRS.visitList(positional.exprs, state).mapOk(list => new Positional({\n loc: positional.loc,\n list\n }));\n }\n NamedArguments(named, state) {\n let pairs = named.entries.map(arg => {\n let value = convertPathToCallIfKeyword(arg.value);\n return VISIT_EXPRS.visit(value, state).mapOk(value => new NamedArgument({\n loc: arg.loc,\n key: arg.name,\n value\n }));\n });\n return new ResultArray(pairs).toOptionalList().mapOk(pairs => new NamedArguments({\n loc: named.loc,\n entries: pairs\n }));\n }\n }\n function convertPathToCallIfKeyword(path) {\n if (path.type === 'Path' && path.ref.type === 'Free' && path.ref.name in _syntax.KEYWORDS_TYPES) {\n return new _syntax.ASTv2.CallExpression({\n callee: path,\n args: _syntax.ASTv2.Args.empty(path.loc),\n loc: path.loc\n });\n }\n return path;\n }\n const VISIT_EXPRS = new NormalizeExpressions();\n class KeywordImpl {\n constructor(keyword, type, delegate) {\n this.types = void 0;\n this.keyword = keyword;\n this.delegate = delegate;\n let nodes = new Set();\n for (let nodeType of KEYWORD_NODES[type]) {\n nodes.add(nodeType);\n }\n this.types = nodes;\n }\n match(node) {\n if (!this.types.has(node.type)) {\n return false;\n }\n let path = getCalleeExpression(node);\n if (path !== null && path.type === 'Path' && path.ref.type === 'Free') {\n if (path.tail.length > 0) {\n if (path.ref.resolution.serialize() === 'Loose') {\n // cannot be a keyword reference, keywords do not allow paths (must be\n // relying on implicit this fallback)\n return false;\n }\n }\n return path.ref.name === this.keyword;\n } else {\n return false;\n }\n }\n translate(node, state) {\n if (this.match(node)) {\n let path = getCalleeExpression(node);\n if (path !== null && path.type === 'Path' && path.tail.length > 0) {\n return Err((0, _syntax.generateSyntaxError)(\"The `\" + this.keyword + \"` keyword was used incorrectly. It was used as `\" + path.loc.asString() + \"`, but it cannot be used with additional path segments. \\n\\nError caused by\", node.loc));\n }\n let param = this.delegate.assert(node, state);\n return param.andThen(param => this.delegate.translate({\n node,\n state\n }, param));\n } else {\n return null;\n }\n }\n }\n const KEYWORD_NODES = {\n Call: ['Call'],\n Block: ['InvokeBlock'],\n Append: ['AppendContent'],\n Modifier: ['ElementModifier']\n };\n\n /**\n * A \"generic\" keyword is something like `has-block`, which makes sense in the context\n * of sub-expression or append\n */\n\n function keyword(keyword, type, delegate) {\n return new KeywordImpl(keyword, type, delegate);\n }\n function getCalleeExpression(node) {\n switch (node.type) {\n // This covers the inside of attributes and expressions, as well as the callee\n // of call nodes\n case 'Path':\n return node;\n case 'AppendContent':\n return getCalleeExpression(node.value);\n case 'Call':\n case 'InvokeBlock':\n case 'ElementModifier':\n return node.callee;\n default:\n return null;\n }\n }\n class Keywords {\n constructor(type) {\n this._keywords = [];\n this._type = void 0;\n this._type = type;\n }\n kw(name, delegate) {\n this._keywords.push(keyword(name, this._type, delegate));\n return this;\n }\n translate(node, state) {\n for (let keyword of this._keywords) {\n let result = keyword.translate(node, state);\n if (result !== null) {\n return result;\n }\n }\n let path = getCalleeExpression(node);\n if (path && path.type === 'Path' && path.ref.type === 'Free' && (0, _syntax.isKeyword)(path.ref.name)) {\n let {\n name\n } = path.ref;\n let usedType = this._type;\n let validTypes = _syntax.KEYWORDS_TYPES[name];\n if (!validTypes.includes(usedType)) {\n return Err((0, _syntax.generateSyntaxError)(\"The `\" + name + \"` keyword was used incorrectly. It was used as \" + typesToReadableName[usedType] + \", but its valid usages are:\\n\\n\" + generateTypesMessage(name, validTypes) + \"\\n\\nError caused by\", node.loc));\n }\n }\n return null;\n }\n }\n const typesToReadableName = {\n Append: 'an append statement',\n Block: 'a block statement',\n Call: 'a call expression',\n Modifier: 'a modifier'\n };\n function generateTypesMessage(name, types) {\n return types.map(type => {\n switch (type) {\n case 'Append':\n return \"- As an append statement, as in: {{\" + name + \"}}\";\n case 'Block':\n return \"- As a block statement, as in: {{#\" + name + \"}}{{/\" + name + \"}}\";\n case 'Call':\n return \"- As an expression, as in: (\" + name + \")\";\n case 'Modifier':\n return \"- As a modifier, as in: <div {{\" + name + \"}}></div>\";\n default:\n return (0, _util.exhausted)(type);\n }\n }).join('\\n\\n');\n }\n\n /**\n * This function builds keyword definitions for a particular type of AST node (`KeywordType`).\n *\n * You can build keyword definitions for:\n *\n * - `Expr`: A `SubExpression` or `PathExpression`\n * - `Block`: A `BlockStatement`\n * - A `BlockStatement` is a keyword candidate if its head is a\n * `PathExpression`\n * - `Append`: An `AppendStatement`\n *\n * A node is a keyword candidate if:\n *\n * - A `PathExpression` is a keyword candidate if it has no tail, and its\n * head expression is a `LocalVarHead` or `FreeVarHead` whose name is\n * the keyword's name.\n * - A `SubExpression`, `AppendStatement`, or `BlockStatement` is a keyword\n * candidate if its head is a keyword candidate.\n *\n * The keyword infrastructure guarantees that:\n *\n * - If a node is not a keyword candidate, it is never passed to any keyword's\n * `assert` method.\n * - If a node is not the `KeywordType` for a particular keyword, it will not\n * be passed to the keyword's `assert` method.\n *\n * `Expr` keywords are used in expression positions and should return HIR\n * expressions. `Block` and `Append` keywords are used in statement\n * positions and should return HIR statements.\n *\n * A keyword definition has two parts:\n *\n * - `match`, which determines whether an AST node matches the keyword, and can\n * optionally return some information extracted from the AST node.\n * - `translate`, which takes a matching AST node as well as the extracted\n * information and returns an appropriate HIR instruction.\n *\n * # Example\n *\n * This keyword:\n *\n * - turns `(hello)` into `\"hello\"`\n * - as long as `hello` is not in scope\n * - makes it an error to pass any arguments (such as `(hello world)`)\n *\n * ```ts\n * keywords('SubExpr').kw('hello', {\n * assert(node: ExprKeywordNode): Result<void> | false {\n * // we don't want to transform `hello` as a `PathExpression`\n * if (node.type !== 'SubExpression') {\n * return false;\n * }\n *\n * // node.head would be `LocalVarHead` if `hello` was in scope\n * if (node.head.type !== 'FreeVarHead') {\n * return false;\n * }\n *\n * if (node.params.length || node.hash) {\n * return Err(generateSyntaxError(`(hello) does not take any arguments`), node.loc);\n * } else {\n * return Ok();\n * }\n * },\n *\n * translate(node: ASTv2.SubExpression): hir.Expression {\n * return ASTv2.builders.literal(\"hello\", node.loc)\n * }\n * })\n * ```\n *\n * The keyword infrastructure checks to make sure that the node is the right\n * type before calling `assert`, so you only need to consider `SubExpression`\n * and `PathExpression` here. It also checks to make sure that the node passed\n * to `assert` has the keyword name in the right place.\n *\n * Note the important difference between returning `false` from `assert`,\n * which just means that the node didn't match, and returning `Err`, which\n * means that the node matched, but there was a keyword-specific syntax\n * error.\n */\n function keywords(type) {\n return new Keywords(type);\n }\n function toAppend(_ref8) {\n let {\n assert,\n translate\n } = _ref8;\n return {\n assert,\n translate(_ref9, value) {\n let {\n node,\n state\n } = _ref9;\n let result = translate({\n node,\n state\n }, value);\n return result.mapOk(text => new AppendTextNode({\n text,\n loc: node.loc\n }));\n }\n };\n }\n const CurriedTypeToReadableType = {\n [_vm.CurriedTypes.Component]: 'component',\n [_vm.CurriedTypes.Helper]: 'helper',\n [_vm.CurriedTypes.Modifier]: 'modifier'\n };\n function assertCurryKeyword(curriedType) {\n return (node, state) => {\n let readableType = CurriedTypeToReadableType[curriedType];\n let stringsAllowed = curriedType === _vm.CurriedTypes.Component;\n let {\n args\n } = node;\n let definition = args.nth(0);\n if (definition === null) {\n return Err((0, _syntax.generateSyntaxError)(\"(\" + readableType + \") requires a \" + readableType + \" definition or identifier as its first positional parameter, did not receive any parameters.\", args.loc));\n }\n if (definition.type === 'Literal') {\n if (stringsAllowed && state.isStrict) {\n return Err((0, _syntax.generateSyntaxError)(\"(\" + readableType + \") cannot resolve string values in strict mode templates\", node.loc));\n } else if (!stringsAllowed) {\n return Err((0, _syntax.generateSyntaxError)(\"(\" + readableType + \") cannot resolve string values, you must pass a \" + readableType + \" definition directly\", node.loc));\n }\n }\n args = new _syntax.ASTv2.Args({\n positional: new _syntax.ASTv2.PositionalArguments({\n exprs: args.positional.exprs.slice(1),\n loc: args.positional.loc\n }),\n named: args.named,\n loc: args.loc\n });\n return Ok({\n definition,\n args\n });\n };\n }\n function translateCurryKeyword(curriedType) {\n return (_ref10, _ref11) => {\n let {\n node,\n state\n } = _ref10;\n let {\n definition,\n args\n } = _ref11;\n let definitionResult = VISIT_EXPRS.visit(definition, state);\n let argsResult = VISIT_EXPRS.Args(args, state);\n return Result.all(definitionResult, argsResult).mapOk(_ref12 => {\n let [definition, args] = _ref12;\n return new Curry({\n loc: node.loc,\n curriedType,\n definition,\n args\n });\n });\n };\n }\n function curryKeyword(curriedType) {\n return {\n assert: assertCurryKeyword(curriedType),\n translate: translateCurryKeyword(curriedType)\n };\n }\n function assertGetDynamicVarKeyword(node) {\n let call = node.type === 'AppendContent' ? node.value : node;\n let named = call.type === 'Call' ? call.args.named : null;\n let positionals = call.type === 'Call' ? call.args.positional : null;\n if (named && !named.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"(-get-dynamic-vars) does not take any named arguments\", node.loc));\n }\n let varName = positionals == null ? void 0 : positionals.nth(0);\n if (!varName) {\n return Err((0, _syntax.generateSyntaxError)(\"(-get-dynamic-vars) requires a var name to get\", node.loc));\n }\n if (positionals && positionals.size > 1) {\n return Err((0, _syntax.generateSyntaxError)(\"(-get-dynamic-vars) only receives one positional arg\", node.loc));\n }\n return Ok(varName);\n }\n function translateGetDynamicVarKeyword(_ref13, name) {\n let {\n node,\n state\n } = _ref13;\n return VISIT_EXPRS.visit(name, state).mapOk(name => new GetDynamicVar({\n name,\n loc: node.loc\n }));\n }\n const getDynamicVarKeyword = {\n assert: assertGetDynamicVarKeyword,\n translate: translateGetDynamicVarKeyword\n };\n function assertHasBlockKeyword(type) {\n return node => {\n let call = node.type === 'AppendContent' ? node.value : node;\n let named = call.type === 'Call' ? call.args.named : null;\n let positionals = call.type === 'Call' ? call.args.positional : null;\n if (named && !named.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"(\" + type + \") does not take any named arguments\", call.loc));\n }\n if (!positionals || positionals.isEmpty()) {\n return Ok(_syntax.SourceSlice.synthetic('default'));\n } else if (positionals.exprs.length === 1) {\n let positional = positionals.exprs[0];\n if (_syntax.ASTv2.isLiteral(positional, 'string')) {\n return Ok(positional.toSlice());\n } else {\n return Err((0, _syntax.generateSyntaxError)(\"(\" + type + \") can only receive a string literal as its first argument\", call.loc));\n }\n } else {\n return Err((0, _syntax.generateSyntaxError)(\"(\" + type + \") only takes a single positional argument\", call.loc));\n }\n };\n }\n function translateHasBlockKeyword(type) {\n return (_ref14, target) => {\n let {\n node,\n state: {\n scope\n }\n } = _ref14;\n let block = type === 'has-block' ? new HasBlock({\n loc: node.loc,\n target,\n symbol: scope.allocateBlock(target.chars)\n }) : new HasBlockParams({\n loc: node.loc,\n target,\n symbol: scope.allocateBlock(target.chars)\n });\n return Ok(block);\n };\n }\n function hasBlockKeyword(type) {\n return {\n assert: assertHasBlockKeyword(type),\n translate: translateHasBlockKeyword(type)\n };\n }\n function assertIfUnlessInlineKeyword(type) {\n return originalNode => {\n let inverted = type === 'unless';\n let node = originalNode.type === 'AppendContent' ? originalNode.value : originalNode;\n let named = node.type === 'Call' ? node.args.named : null;\n let positional = node.type === 'Call' ? node.args.positional : null;\n if (named && !named.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"(\" + type + \") cannot receive named parameters, received \" + named.entries.map(e => e.name.chars).join(', '), originalNode.loc));\n }\n let condition = positional == null ? void 0 : positional.nth(0);\n if (!positional || !condition) {\n return Err((0, _syntax.generateSyntaxError)(\"When used inline, (\" + type + \") requires at least two parameters 1. the condition that determines the state of the (\" + type + \"), and 2. the value to return if the condition is \" + (inverted ? 'false' : 'true') + \". Did not receive any parameters\", originalNode.loc));\n }\n let truthy = positional.nth(1);\n let falsy = positional.nth(2);\n if (truthy === null) {\n return Err((0, _syntax.generateSyntaxError)(\"When used inline, (\" + type + \") requires at least two parameters 1. the condition that determines the state of the (\" + type + \"), and 2. the value to return if the condition is \" + (inverted ? 'false' : 'true') + \". Received only one parameter, the condition\", originalNode.loc));\n }\n if (positional.size > 3) {\n var _positional$size;\n return Err((0, _syntax.generateSyntaxError)(\"When used inline, (\" + type + \") can receive a maximum of three positional parameters 1. the condition that determines the state of the (\" + type + \"), 2. the value to return if the condition is \" + (inverted ? 'false' : 'true') + \", and 3. the value to return if the condition is \" + (inverted ? 'true' : 'false') + \". Received \" + ((_positional$size = positional == null ? void 0 : positional.size) != null ? _positional$size : 0) + \" parameters\", originalNode.loc));\n }\n return Ok({\n condition,\n truthy,\n falsy\n });\n };\n }\n function translateIfUnlessInlineKeyword(type) {\n let inverted = type === 'unless';\n return (_ref15, _ref16) => {\n let {\n node,\n state\n } = _ref15;\n let {\n condition,\n truthy,\n falsy\n } = _ref16;\n let conditionResult = VISIT_EXPRS.visit(condition, state);\n let truthyResult = VISIT_EXPRS.visit(truthy, state);\n let falsyResult = falsy ? VISIT_EXPRS.visit(falsy, state) : Ok(null);\n return Result.all(conditionResult, truthyResult, falsyResult).mapOk(_ref17 => {\n let [condition, truthy, falsy] = _ref17;\n if (inverted) {\n condition = new Not({\n value: condition,\n loc: node.loc\n });\n }\n return new IfInline({\n loc: node.loc,\n condition,\n truthy,\n falsy\n });\n });\n };\n }\n function ifUnlessInlineKeyword(type) {\n return {\n assert: assertIfUnlessInlineKeyword(type),\n translate: translateIfUnlessInlineKeyword(type)\n };\n }\n function assertLogKeyword(node) {\n let {\n args: {\n named,\n positional\n }\n } = node;\n if (named && !named.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"(log) does not take any named arguments\", node.loc));\n }\n return Ok(positional);\n }\n function translateLogKeyword(_ref18, positional) {\n let {\n node,\n state\n } = _ref18;\n return VISIT_EXPRS.Positional(positional, state).mapOk(positional => new Log({\n positional,\n loc: node.loc\n }));\n }\n const logKeyword = {\n assert: assertLogKeyword,\n translate: translateLogKeyword\n };\n const APPEND_KEYWORDS = keywords('Append').kw('has-block', toAppend(hasBlockKeyword('has-block'))).kw('has-block-params', toAppend(hasBlockKeyword('has-block-params'))).kw('-get-dynamic-var', toAppend(getDynamicVarKeyword)).kw('log', toAppend(logKeyword)).kw('if', toAppend(ifUnlessInlineKeyword('if'))).kw('unless', toAppend(ifUnlessInlineKeyword('unless'))).kw('yield', {\n assert(node) {\n let {\n args\n } = node;\n if (args.named.isEmpty()) {\n return Ok({\n target: _syntax.src.SourceSpan.synthetic('default').toSlice(),\n positional: args.positional\n });\n } else {\n let target = args.named.get('to');\n if (args.named.size > 1 || target === null) {\n return Err((0, _syntax.generateSyntaxError)(\"yield only takes a single named argument: 'to'\", args.named.loc));\n }\n if (_syntax.ASTv2.isLiteral(target, 'string')) {\n return Ok({\n target: target.toSlice(),\n positional: args.positional\n });\n } else {\n return Err((0, _syntax.generateSyntaxError)(\"you can only yield to a literal string value\", target.loc));\n }\n }\n },\n translate(_ref19, _ref20) {\n let {\n node,\n state\n } = _ref19;\n let {\n target,\n positional\n } = _ref20;\n return VISIT_EXPRS.Positional(positional, state).mapOk(positional => new Yield({\n loc: node.loc,\n target,\n to: state.scope.allocateBlock(target.chars),\n positional\n }));\n }\n }).kw('debugger', {\n assert(node) {\n let {\n args\n } = node;\n let {\n positional\n } = args;\n if (args.isEmpty()) {\n return Ok(undefined);\n } else {\n if (positional.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"debugger does not take any named arguments\", node.loc));\n } else {\n return Err((0, _syntax.generateSyntaxError)(\"debugger does not take any positional arguments\", node.loc));\n }\n }\n },\n translate(_ref21) {\n let {\n node,\n state: {\n scope\n }\n } = _ref21;\n scope.setHasDebugger();\n return Ok(new Debugger({\n loc: node.loc,\n scope\n }));\n }\n }).kw('component', {\n assert: assertCurryKeyword(_vm.CurriedTypes.Component),\n translate(_ref22, _ref23) {\n let {\n node,\n state\n } = _ref22;\n let {\n definition,\n args\n } = _ref23;\n let definitionResult = VISIT_EXPRS.visit(definition, state);\n let argsResult = VISIT_EXPRS.Args(args, state);\n return Result.all(definitionResult, argsResult).mapOk(_ref24 => {\n let [definition, args] = _ref24;\n return new InvokeComponent({\n loc: node.loc,\n definition,\n args,\n blocks: null\n });\n });\n }\n }).kw('helper', {\n assert: assertCurryKeyword(_vm.CurriedTypes.Helper),\n translate(_ref25, _ref26) {\n let {\n node,\n state\n } = _ref25;\n let {\n definition,\n args\n } = _ref26;\n let definitionResult = VISIT_EXPRS.visit(definition, state);\n let argsResult = VISIT_EXPRS.Args(args, state);\n return Result.all(definitionResult, argsResult).mapOk(_ref27 => {\n let [definition, args] = _ref27;\n let text = new CallExpression({\n callee: definition,\n args,\n loc: node.loc\n });\n return new AppendTextNode({\n loc: node.loc,\n text\n });\n });\n }\n });\n const BLOCK_KEYWORDS = keywords('Block').kw('in-element', {\n assert(node) {\n let {\n args\n } = node;\n let guid = args.get('guid');\n if (guid) {\n return Err((0, _syntax.generateSyntaxError)(\"Cannot pass `guid` to `{{#in-element}}`\", guid.loc));\n }\n let insertBefore = args.get('insertBefore');\n let destination = args.nth(0);\n if (destination === null) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#in-element}} requires a target element as its first positional parameter\", args.loc));\n }\n\n // TODO Better syntax checks\n\n return Ok({\n insertBefore,\n destination\n });\n },\n translate(_ref28, _ref29) {\n let {\n node,\n state\n } = _ref28;\n let {\n insertBefore,\n destination\n } = _ref29;\n let named = node.blocks.get('default');\n let body = VISIT_STMTS.NamedBlock(named, state);\n let destinationResult = VISIT_EXPRS.visit(destination, state);\n return Result.all(body, destinationResult).andThen(_ref30 => {\n let [body, destination] = _ref30;\n if (insertBefore) {\n return VISIT_EXPRS.visit(insertBefore, state).mapOk(insertBefore => ({\n body,\n destination,\n insertBefore\n }));\n } else {\n return Ok({\n body,\n destination,\n insertBefore: new Missing({\n loc: node.callee.loc.collapse('end')\n })\n });\n }\n }).mapOk(_ref31 => {\n let {\n body,\n destination,\n insertBefore\n } = _ref31;\n return new InElement({\n loc: node.loc,\n block: body,\n insertBefore,\n guid: state.generateUniqueCursor(),\n destination\n });\n });\n }\n }).kw('if', {\n assert(node) {\n let {\n args\n } = node;\n if (!args.named.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#if}} cannot receive named parameters, received \" + args.named.entries.map(e => e.name.chars).join(', '), node.loc));\n }\n if (args.positional.size > 1) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#if}} can only receive one positional parameter in block form, the conditional value. Received \" + args.positional.size + \" parameters\", node.loc));\n }\n let condition = args.nth(0);\n if (condition === null) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#if}} requires a condition as its first positional parameter, did not receive any parameters\", node.loc));\n }\n return Ok({\n condition\n });\n },\n translate(_ref32, _ref33) {\n let {\n node,\n state\n } = _ref32;\n let {\n condition\n } = _ref33;\n let block = node.blocks.get('default');\n let inverse = node.blocks.get('else');\n let conditionResult = VISIT_EXPRS.visit(condition, state);\n let blockResult = VISIT_STMTS.NamedBlock(block, state);\n let inverseResult = inverse ? VISIT_STMTS.NamedBlock(inverse, state) : Ok(null);\n return Result.all(conditionResult, blockResult, inverseResult).mapOk(_ref34 => {\n let [condition, block, inverse] = _ref34;\n return new If({\n loc: node.loc,\n condition,\n block,\n inverse\n });\n });\n }\n }).kw('unless', {\n assert(node) {\n let {\n args\n } = node;\n if (!args.named.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#unless}} cannot receive named parameters, received \" + args.named.entries.map(e => e.name.chars).join(', '), node.loc));\n }\n if (args.positional.size > 1) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#unless}} can only receive one positional parameter in block form, the conditional value. Received \" + args.positional.size + \" parameters\", node.loc));\n }\n let condition = args.nth(0);\n if (condition === null) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#unless}} requires a condition as its first positional parameter, did not receive any parameters\", node.loc));\n }\n return Ok({\n condition\n });\n },\n translate(_ref35, _ref36) {\n let {\n node,\n state\n } = _ref35;\n let {\n condition\n } = _ref36;\n let block = node.blocks.get('default');\n let inverse = node.blocks.get('else');\n let conditionResult = VISIT_EXPRS.visit(condition, state);\n let blockResult = VISIT_STMTS.NamedBlock(block, state);\n let inverseResult = inverse ? VISIT_STMTS.NamedBlock(inverse, state) : Ok(null);\n return Result.all(conditionResult, blockResult, inverseResult).mapOk(_ref37 => {\n let [condition, block, inverse] = _ref37;\n return new If({\n loc: node.loc,\n condition: new Not({\n value: condition,\n loc: node.loc\n }),\n block,\n inverse\n });\n });\n }\n }).kw('each', {\n assert(node) {\n let {\n args\n } = node;\n if (!args.named.entries.every(e => e.name.chars === 'key')) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#each}} can only receive the 'key' named parameter, received \" + args.named.entries.filter(e => e.name.chars !== 'key').map(e => e.name.chars).join(', '), args.named.loc));\n }\n if (args.positional.size > 1) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#each}} can only receive one positional parameter, the collection being iterated. Received \" + args.positional.size + \" parameters\", args.positional.loc));\n }\n let value = args.nth(0);\n let key = args.get('key');\n if (value === null) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#each}} requires an iterable value to be passed as its first positional parameter, did not receive any parameters\", args.loc));\n }\n return Ok({\n value,\n key\n });\n },\n translate(_ref38, _ref39) {\n let {\n node,\n state\n } = _ref38;\n let {\n value,\n key\n } = _ref39;\n let block = node.blocks.get('default');\n let inverse = node.blocks.get('else');\n let valueResult = VISIT_EXPRS.visit(value, state);\n let keyResult = key ? VISIT_EXPRS.visit(key, state) : Ok(null);\n let blockResult = VISIT_STMTS.NamedBlock(block, state);\n let inverseResult = inverse ? VISIT_STMTS.NamedBlock(inverse, state) : Ok(null);\n return Result.all(valueResult, keyResult, blockResult, inverseResult).mapOk(_ref40 => {\n let [value, key, block, inverse] = _ref40;\n return new Each({\n loc: node.loc,\n value,\n key,\n block,\n inverse\n });\n });\n }\n }).kw('with', {\n assert(node) {\n let {\n args\n } = node;\n if (!args.named.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#with}} cannot receive named parameters, received \" + args.named.entries.map(e => e.name.chars).join(', '), args.named.loc));\n }\n if (args.positional.size > 1) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#with}} can only receive one positional parameter. Received \" + args.positional.size + \" parameters\", args.positional.loc));\n }\n let value = args.nth(0);\n if (value === null) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#with}} requires a value as its first positional parameter, did not receive any parameters\", args.loc));\n }\n return Ok({\n value\n });\n },\n translate(_ref41, _ref42) {\n let {\n node,\n state\n } = _ref41;\n let {\n value\n } = _ref42;\n let block = node.blocks.get('default');\n let inverse = node.blocks.get('else');\n let valueResult = VISIT_EXPRS.visit(value, state);\n let blockResult = VISIT_STMTS.NamedBlock(block, state);\n let inverseResult = inverse ? VISIT_STMTS.NamedBlock(inverse, state) : Ok(null);\n return Result.all(valueResult, blockResult, inverseResult).mapOk(_ref43 => {\n let [value, block, inverse] = _ref43;\n return new With({\n loc: node.loc,\n value,\n block,\n inverse\n });\n });\n }\n }).kw('let', {\n assert(node) {\n let {\n args\n } = node;\n if (!args.named.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#let}} cannot receive named parameters, received \" + args.named.entries.map(e => e.name.chars).join(', '), args.named.loc));\n }\n if (args.positional.size === 0) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#let}} requires at least one value as its first positional parameter, did not receive any parameters\", args.positional.loc));\n }\n if (node.blocks.get('else')) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#let}} cannot receive an {{else}} block\", args.positional.loc));\n }\n return Ok({\n positional: args.positional\n });\n },\n translate(_ref44, _ref45) {\n let {\n node,\n state\n } = _ref44;\n let {\n positional\n } = _ref45;\n let block = node.blocks.get('default');\n let positionalResult = VISIT_EXPRS.Positional(positional, state);\n let blockResult = VISIT_STMTS.NamedBlock(block, state);\n return Result.all(positionalResult, blockResult).mapOk(_ref46 => {\n let [positional, block] = _ref46;\n return new Let({\n loc: node.loc,\n positional,\n block\n });\n });\n }\n }).kw('-with-dynamic-vars', {\n assert(node) {\n return Ok({\n named: node.args.named\n });\n },\n translate(_ref47, _ref48) {\n let {\n node,\n state\n } = _ref47;\n let {\n named\n } = _ref48;\n let block = node.blocks.get('default');\n let namedResult = VISIT_EXPRS.NamedArguments(named, state);\n let blockResult = VISIT_STMTS.NamedBlock(block, state);\n return Result.all(namedResult, blockResult).mapOk(_ref49 => {\n let [named, block] = _ref49;\n return new WithDynamicVars({\n loc: node.loc,\n named,\n block\n });\n });\n }\n }).kw('component', {\n assert: assertCurryKeyword(_vm.CurriedTypes.Component),\n translate(_ref50, _ref51) {\n let {\n node,\n state\n } = _ref50;\n let {\n definition,\n args\n } = _ref51;\n let definitionResult = VISIT_EXPRS.visit(definition, state);\n let argsResult = VISIT_EXPRS.Args(args, state);\n let blocksResult = VISIT_STMTS.NamedBlocks(node.blocks, state);\n return Result.all(definitionResult, argsResult, blocksResult).mapOk(_ref52 => {\n let [definition, args, blocks] = _ref52;\n return new InvokeComponent({\n loc: node.loc,\n definition,\n args,\n blocks\n });\n });\n }\n });\n const CALL_KEYWORDS = keywords('Call').kw('has-block', hasBlockKeyword('has-block')).kw('has-block-params', hasBlockKeyword('has-block-params')).kw('-get-dynamic-var', getDynamicVarKeyword).kw('log', logKeyword).kw('if', ifUnlessInlineKeyword('if')).kw('unless', ifUnlessInlineKeyword('unless')).kw('component', curryKeyword(_vm.CurriedTypes.Component)).kw('helper', curryKeyword(_vm.CurriedTypes.Helper)).kw('modifier', curryKeyword(_vm.CurriedTypes.Modifier));\n const MODIFIER_KEYWORDS = keywords('Modifier');\n\n // There is a small whitelist of namespaced attributes specially\n // enumerated in\n // https://www.w3.org/TR/html/syntax.html#attributes-0\n //\n // > When a foreign element has one of the namespaced attributes given by\n // > the local name and namespace of the first and second cells of a row\n // > from the following table, it must be written using the name given by\n // > the third cell from the same row.\n //\n // In all other cases, colons are interpreted as a regular character\n // with no special meaning:\n //\n // > No other namespaced attribute can be expressed in the HTML syntax.\n\n const XLINK = 'http://www.w3.org/1999/xlink';\n const XML = 'http://www.w3.org/XML/1998/namespace';\n const XMLNS = 'http://www.w3.org/2000/xmlns/';\n const WHITELIST = {\n 'xlink:actuate': XLINK,\n 'xlink:arcrole': XLINK,\n 'xlink:href': XLINK,\n 'xlink:role': XLINK,\n 'xlink:show': XLINK,\n 'xlink:title': XLINK,\n 'xlink:type': XLINK,\n 'xml:base': XML,\n 'xml:lang': XML,\n 'xml:space': XML,\n xmlns: XMLNS,\n 'xmlns:xlink': XMLNS\n };\n function getAttrNamespace(attrName) {\n return WHITELIST[attrName];\n }\n const DEFLATE_TAG_TABLE = {\n div: _wireFormat.WellKnownTagNames.div,\n span: _wireFormat.WellKnownTagNames.span,\n p: _wireFormat.WellKnownTagNames.p,\n a: _wireFormat.WellKnownTagNames.a\n };\n const INFLATE_TAG_TABLE = ['div', 'span', 'p', 'a'];\n function deflateTagName(tagName) {\n var _DEFLATE_TAG_TABLE$ta;\n return (_DEFLATE_TAG_TABLE$ta = DEFLATE_TAG_TABLE[tagName]) != null ? _DEFLATE_TAG_TABLE$ta : tagName;\n }\n function inflateTagName(tagName) {\n return typeof tagName === 'string' ? tagName : INFLATE_TAG_TABLE[tagName];\n }\n const DEFLATE_ATTR_TABLE = {\n class: _wireFormat.WellKnownAttrNames.class,\n id: _wireFormat.WellKnownAttrNames.id,\n value: _wireFormat.WellKnownAttrNames.value,\n name: _wireFormat.WellKnownAttrNames.name,\n type: _wireFormat.WellKnownAttrNames.type,\n style: _wireFormat.WellKnownAttrNames.style,\n href: _wireFormat.WellKnownAttrNames.href\n };\n const INFLATE_ATTR_TABLE = ['class', 'id', 'value', 'name', 'type', 'style', 'href'];\n function deflateAttrName(attrName) {\n var _DEFLATE_ATTR_TABLE$a;\n return (_DEFLATE_ATTR_TABLE$a = DEFLATE_ATTR_TABLE[attrName]) != null ? _DEFLATE_ATTR_TABLE$a : attrName;\n }\n function inflateAttrName(attrName) {\n return typeof attrName === 'string' ? attrName : INFLATE_ATTR_TABLE[attrName];\n }\n class ClassifiedElement {\n constructor(element, delegate, state) {\n this.delegate = void 0;\n this.element = element;\n this.state = state;\n this.delegate = delegate;\n }\n toStatement() {\n return this.prepare().andThen(prepared => this.delegate.toStatement(this, prepared));\n }\n attr(attr) {\n let name = attr.name;\n let rawValue = attr.value;\n let namespace = getAttrNamespace(name.chars) || undefined;\n if (_syntax.ASTv2.isLiteral(rawValue, 'string')) {\n return Ok(new StaticAttr({\n loc: attr.loc,\n name,\n value: rawValue.toSlice(),\n namespace,\n kind: {\n component: this.delegate.dynamicFeatures\n }\n }));\n }\n return VISIT_EXPRS.visit(convertPathToCallIfKeyword(rawValue), this.state).mapOk(value => {\n let isTrusting = attr.trusting;\n return new DynamicAttr({\n loc: attr.loc,\n name,\n value: value,\n namespace,\n kind: {\n trusting: isTrusting,\n component: this.delegate.dynamicFeatures\n }\n });\n });\n }\n modifier(modifier) {\n if (isHelperInvocation(modifier)) {\n assertIsValidModifier(modifier);\n }\n let translated = MODIFIER_KEYWORDS.translate(modifier, this.state);\n if (translated !== null) {\n return translated;\n }\n let head = VISIT_EXPRS.visit(modifier.callee, this.state);\n let args = VISIT_EXPRS.Args(modifier.args, this.state);\n return Result.all(head, args).mapOk(_ref53 => {\n let [head, args] = _ref53;\n return new Modifier({\n loc: modifier.loc,\n callee: head,\n args\n });\n });\n }\n attrs() {\n let attrs = new ResultArray();\n let args = new ResultArray();\n\n // Unlike most attributes, the `type` attribute can change how\n // subsequent attributes are interpreted by the browser. To address\n // this, in simple cases, we special case the `type` attribute to be set\n // last. For elements with splattributes, where attribute order affects\n // precedence, this re-ordering happens at runtime instead.\n // See https://github.com/glimmerjs/glimmer-vm/pull/726\n let typeAttr = null;\n let simple = this.element.attrs.filter(attr => attr.type === 'SplatAttr').length === 0;\n for (let attr of this.element.attrs) {\n if (attr.type === 'SplatAttr') {\n attrs.add(Ok(new SplatAttr({\n loc: attr.loc,\n symbol: this.state.scope.allocateBlock('attrs')\n })));\n } else if (attr.name.chars === 'type' && simple) {\n typeAttr = attr;\n } else {\n attrs.add(this.attr(attr));\n }\n }\n for (let arg of this.element.componentArgs) {\n args.add(this.delegate.arg(arg, this));\n }\n if (typeAttr) {\n attrs.add(this.attr(typeAttr));\n }\n return Result.all(args.toArray(), attrs.toArray()).mapOk(_ref54 => {\n let [args, attrs] = _ref54;\n return {\n attrs,\n args: new NamedArguments({\n loc: (0, _syntax.maybeLoc)(args, _syntax.src.SourceSpan.NON_EXISTENT),\n entries: OptionalList(args)\n })\n };\n });\n }\n prepare() {\n let attrs = this.attrs();\n let modifiers = new ResultArray(this.element.modifiers.map(m => this.modifier(m))).toArray();\n return Result.all(attrs, modifiers).mapOk(_ref55 => {\n let [result, modifiers] = _ref55;\n let {\n attrs,\n args\n } = result;\n let elementParams = [...attrs, ...modifiers];\n let params = new ElementParameters({\n loc: (0, _syntax.maybeLoc)(elementParams, _syntax.src.SourceSpan.NON_EXISTENT),\n body: OptionalList(elementParams)\n });\n return {\n args,\n params\n };\n });\n }\n }\n function hasDynamicFeatures(_ref56) {\n let {\n attrs,\n modifiers\n } = _ref56;\n // ElementModifier needs the special ComponentOperations\n if (modifiers.length > 0) {\n return true;\n }\n\n // Splattributes need the special ComponentOperations to merge into\n return !!attrs.filter(attr => attr.type === 'SplatAttr')[0];\n }\n class ClassifiedComponent {\n constructor(tag, element) {\n this.dynamicFeatures = true;\n this.tag = tag;\n this.element = element;\n }\n arg(attr, _ref57) {\n let {\n state\n } = _ref57;\n let name = attr.name;\n return VISIT_EXPRS.visit(convertPathToCallIfKeyword(attr.value), state).mapOk(value => new NamedArgument({\n loc: attr.loc,\n key: name,\n value\n }));\n }\n toStatement(component, _ref58) {\n let {\n args,\n params\n } = _ref58;\n let {\n element,\n state\n } = component;\n return this.blocks(state).mapOk(blocks => new Component({\n loc: element.loc,\n tag: this.tag,\n params,\n args,\n blocks\n }));\n }\n blocks(state) {\n return VISIT_STMTS.NamedBlocks(this.element.blocks, state);\n }\n }\n class ClassifiedSimpleElement {\n constructor(tag, element, dynamicFeatures) {\n this.isComponent = false;\n this.tag = tag;\n this.element = element;\n this.dynamicFeatures = dynamicFeatures;\n }\n arg(attr) {\n return Err((0, _syntax.generateSyntaxError)(attr.name.chars + \" is not a valid attribute name. @arguments are only allowed on components, but the tag for this element (`\" + this.tag.chars + \"`) is a regular, non-component HTML element.\", attr.loc));\n }\n toStatement(classified, _ref59) {\n let {\n params\n } = _ref59;\n let {\n state,\n element\n } = classified;\n let body = VISIT_STMTS.visitList(this.element.body, state);\n return body.mapOk(body => new SimpleElement({\n loc: element.loc,\n tag: this.tag,\n params,\n body: body.toArray(),\n dynamicFeatures: this.dynamicFeatures\n }));\n }\n }\n class NormalizationStatements {\n visitList(nodes, state) {\n return new ResultArray(nodes.map(e => VISIT_STMTS.visit(e, state))).toOptionalList().mapOk(list => list.filter(s => s !== null));\n }\n visit(node, state) {\n switch (node.type) {\n case 'GlimmerComment':\n return Ok(null);\n case 'AppendContent':\n return this.AppendContent(node, state);\n case 'HtmlText':\n return Ok(this.TextNode(node));\n case 'HtmlComment':\n return Ok(this.HtmlComment(node));\n case 'InvokeBlock':\n return this.InvokeBlock(node, state);\n case 'InvokeComponent':\n return this.Component(node, state);\n case 'SimpleElement':\n return this.SimpleElement(node, state);\n }\n }\n InvokeBlock(node, state) {\n let translated = BLOCK_KEYWORDS.translate(node, state);\n if (translated !== null) {\n return translated;\n }\n let head = VISIT_EXPRS.visit(node.callee, state);\n let args = VISIT_EXPRS.Args(node.args, state);\n return Result.all(head, args).andThen(_ref60 => {\n let [head, args] = _ref60;\n return this.NamedBlocks(node.blocks, state).mapOk(blocks => new InvokeBlock({\n loc: node.loc,\n head,\n args,\n blocks\n }));\n });\n }\n NamedBlocks(blocks, state) {\n let list = new ResultArray(blocks.blocks.map(b => this.NamedBlock(b, state)));\n return list.toArray().mapOk(list => new NamedBlocks({\n loc: blocks.loc,\n blocks: OptionalList(list)\n }));\n }\n NamedBlock(named, state) {\n let body = state.visitBlock(named.block);\n return body.mapOk(body => {\n return new NamedBlock({\n loc: named.loc,\n name: named.name,\n body: body.toArray(),\n scope: named.block.scope\n });\n });\n }\n SimpleElement(element, state) {\n return new ClassifiedElement(element, new ClassifiedSimpleElement(element.tag, element, hasDynamicFeatures(element)), state).toStatement();\n }\n Component(component, state) {\n return VISIT_EXPRS.visit(component.callee, state).andThen(callee => new ClassifiedElement(component, new ClassifiedComponent(callee, component), state).toStatement());\n }\n AppendContent(append, state) {\n let translated = APPEND_KEYWORDS.translate(append, state);\n if (translated !== null) {\n return translated;\n }\n let value = VISIT_EXPRS.visit(append.value, state);\n return value.mapOk(value => {\n if (append.trusting) {\n return new AppendTrustedHTML({\n loc: append.loc,\n html: value\n });\n } else {\n return new AppendTextNode({\n loc: append.loc,\n text: value\n });\n }\n });\n }\n TextNode(text) {\n return new AppendTextNode({\n loc: text.loc,\n text: new _syntax.ASTv2.LiteralExpression({\n loc: text.loc,\n value: text.chars\n })\n });\n }\n HtmlComment(comment) {\n return new AppendComment({\n loc: comment.loc,\n value: comment.text\n });\n }\n }\n const VISIT_STMTS = new NormalizationStatements();\n\n /**\n * This is the mutable state for this compiler pass.\n */\n class NormalizationState {\n constructor(block, isStrict) {\n this._currentScope = void 0;\n this._cursorCount = 0;\n this.isStrict = isStrict;\n this._currentScope = block;\n }\n generateUniqueCursor() {\n return \"%cursor:\" + this._cursorCount++ + \"%\";\n }\n get scope() {\n return this._currentScope;\n }\n visitBlock(block) {\n let oldBlock = this._currentScope;\n this._currentScope = block.scope;\n try {\n return VISIT_STMTS.visitList(block.body, this);\n } finally {\n this._currentScope = oldBlock;\n }\n }\n }\n\n /**\n * Normalize the AST from @glimmer/syntax into the HIR. The HIR has special\n * instructions for keywords like `{{yield}}`, `(has-block)` and\n * `{{#in-element}}`.\n *\n * Most importantly, it also classifies HTML element syntax into:\n *\n * 1. simple HTML element (with optional splattributes)\n * 2. component invocation\n *\n * Because the @glimmer/syntax AST gives us a string for an element's tag,\n * this pass also normalizes that string into an expression.\n *\n * ```\n * // normalized into a path expression whose head is `this` and tail is\n * // `[\"x\"]`\n * <this.x />\n *\n * {{#let expr as |t|}}\n * // `\"t\"` is normalized into a variable lookup.\n * <t />\n *\n * // normalized into a path expression whose head is the variable lookup\n * // `t` and tail is `[\"input\"]`.\n * <t.input />\n * {{/let}}\n *\n * // normalized into a free variable lookup for `SomeComponent` (with the\n * // context `ComponentHead`).\n * <SomeComponent />\n *\n * // normalized into a path expression whose head is the free variable\n * // `notInScope` (with the context `Expression`), and whose tail is\n * // `[\"SomeComponent\"]`. In resolver mode, this path will be rejected later,\n * // since it cannot serve as an input to the resolver.\n * <notInScope.SomeComponent />\n * ```\n */\n function normalize(source, root, isStrict) {\n // create a new context for the normalization pass\n let state = new NormalizationState(root.table, isStrict);\n let body = VISIT_STMTS.visitList(root.body, state);\n return body.mapOk(body => new Template({\n loc: root.loc,\n scope: root.table,\n body: body.toArray()\n }));\n }\n class WireFormatDebugger {\n constructor(_ref61) {\n let [_statements, symbols, _hasEval, upvars] = _ref61;\n this.upvars = void 0;\n this.symbols = void 0;\n this.upvars = upvars;\n this.symbols = symbols;\n }\n format(program) {\n let out = [];\n for (let statement of program[0]) {\n out.push(this.formatOpcode(statement));\n }\n return out;\n }\n formatOpcode(opcode) {\n if (Array.isArray(opcode)) {\n switch (opcode[0]) {\n case _wireFormat.SexpOpcodes.Append:\n return ['append', this.formatOpcode(opcode[1])];\n case _wireFormat.SexpOpcodes.TrustingAppend:\n return ['trusting-append', this.formatOpcode(opcode[1])];\n case _wireFormat.SexpOpcodes.Block:\n return ['block', this.formatOpcode(opcode[1]), this.formatParams(opcode[2]), this.formatHash(opcode[3]), this.formatBlocks(opcode[4])];\n case _wireFormat.SexpOpcodes.InElement:\n return ['in-element', opcode[1], this.formatOpcode(opcode[2]), opcode[3] ? this.formatOpcode(opcode[3]) : undefined];\n case _wireFormat.SexpOpcodes.OpenElement:\n return ['open-element', inflateTagName(opcode[1])];\n case _wireFormat.SexpOpcodes.OpenElementWithSplat:\n return ['open-element-with-splat', inflateTagName(opcode[1])];\n case _wireFormat.SexpOpcodes.CloseElement:\n return ['close-element'];\n case _wireFormat.SexpOpcodes.FlushElement:\n return ['flush-element'];\n case _wireFormat.SexpOpcodes.StaticAttr:\n return ['static-attr', inflateAttrName(opcode[1]), opcode[2], opcode[3]];\n case _wireFormat.SexpOpcodes.StaticComponentAttr:\n return ['static-component-attr', inflateAttrName(opcode[1]), opcode[2], opcode[3]];\n case _wireFormat.SexpOpcodes.DynamicAttr:\n return ['dynamic-attr', inflateAttrName(opcode[1]), this.formatOpcode(opcode[2]), opcode[3]];\n case _wireFormat.SexpOpcodes.ComponentAttr:\n return ['component-attr', inflateAttrName(opcode[1]), this.formatOpcode(opcode[2]), opcode[3]];\n case _wireFormat.SexpOpcodes.AttrSplat:\n return ['attr-splat'];\n case _wireFormat.SexpOpcodes.Yield:\n return ['yield', opcode[1], this.formatParams(opcode[2])];\n case _wireFormat.SexpOpcodes.DynamicArg:\n return ['dynamic-arg', opcode[1], this.formatOpcode(opcode[2])];\n case _wireFormat.SexpOpcodes.StaticArg:\n return ['static-arg', opcode[1], this.formatOpcode(opcode[2])];\n case _wireFormat.SexpOpcodes.TrustingDynamicAttr:\n return ['trusting-dynamic-attr', inflateAttrName(opcode[1]), this.formatOpcode(opcode[2]), opcode[3]];\n case _wireFormat.SexpOpcodes.TrustingComponentAttr:\n return ['trusting-component-attr', inflateAttrName(opcode[1]), this.formatOpcode(opcode[2]), opcode[3]];\n case _wireFormat.SexpOpcodes.Debugger:\n return ['debugger', opcode[1]];\n case _wireFormat.SexpOpcodes.Comment:\n return ['comment', opcode[1]];\n case _wireFormat.SexpOpcodes.Modifier:\n return ['modifier', this.formatOpcode(opcode[1]), this.formatParams(opcode[2]), this.formatHash(opcode[3])];\n case _wireFormat.SexpOpcodes.Component:\n return ['component', this.formatOpcode(opcode[1]), this.formatElementParams(opcode[2]), this.formatHash(opcode[3]), this.formatBlocks(opcode[4])];\n case _wireFormat.SexpOpcodes.HasBlock:\n return ['has-block', this.formatOpcode(opcode[1])];\n case _wireFormat.SexpOpcodes.HasBlockParams:\n return ['has-block-params', this.formatOpcode(opcode[1])];\n case _wireFormat.SexpOpcodes.Curry:\n return ['curry', this.formatOpcode(opcode[1]), this.formatCurryType(opcode[2]), this.formatParams(opcode[3]), this.formatHash(opcode[4])];\n case _wireFormat.SexpOpcodes.Undefined:\n return ['undefined'];\n case _wireFormat.SexpOpcodes.Call:\n return ['call', this.formatOpcode(opcode[1]), this.formatParams(opcode[2]), this.formatHash(opcode[3])];\n case _wireFormat.SexpOpcodes.Concat:\n return ['concat', this.formatParams(opcode[1])];\n case _wireFormat.SexpOpcodes.GetStrictKeyword:\n return ['get-strict-free', this.upvars[opcode[1]], opcode[2]];\n case _wireFormat.SexpOpcodes.GetFreeAsComponentOrHelperHeadOrThisFallback:\n return ['GetFreeAsComponentOrHelperHeadOrThisFallback', this.upvars[opcode[1]], opcode[2]];\n case _wireFormat.SexpOpcodes.GetFreeAsComponentOrHelperHead:\n return ['GetFreeAsComponentOrHelperHead', this.upvars[opcode[1]], opcode[2]];\n case _wireFormat.SexpOpcodes.GetFreeAsHelperHeadOrThisFallback:\n return ['GetFreeAsHelperHeadOrThisFallback', this.upvars[opcode[1]], opcode[2]];\n case _wireFormat.SexpOpcodes.GetFreeAsDeprecatedHelperHeadOrThisFallback:\n return ['GetFreeAsDeprecatedHelperHeadOrThisFallback', this.upvars[opcode[1]]];\n case _wireFormat.SexpOpcodes.GetFreeAsHelperHead:\n return ['GetFreeAsHelperHead', this.upvars[opcode[1]], opcode[2]];\n case _wireFormat.SexpOpcodes.GetFreeAsComponentHead:\n return ['GetFreeAsComponentHead', this.upvars[opcode[1]], opcode[2]];\n case _wireFormat.SexpOpcodes.GetFreeAsModifierHead:\n return ['GetFreeAsModifierHead', this.upvars[opcode[1]], opcode[2]];\n case _wireFormat.SexpOpcodes.GetSymbol:\n {\n if (opcode[1] === 0) {\n return ['get-symbol', 'this', opcode[2]];\n } else {\n return ['get-symbol', this.symbols[opcode[1] - 1], opcode[2]];\n }\n }\n case _wireFormat.SexpOpcodes.GetLexicalSymbol:\n {\n return ['get-template-symbol', opcode[1], opcode[2]];\n }\n case _wireFormat.SexpOpcodes.If:\n return ['if', this.formatOpcode(opcode[1]), this.formatBlock(opcode[2]), opcode[3] ? this.formatBlock(opcode[3]) : null];\n case _wireFormat.SexpOpcodes.IfInline:\n return ['if-inline'];\n case _wireFormat.SexpOpcodes.Not:\n return ['not'];\n case _wireFormat.SexpOpcodes.Each:\n return ['each', this.formatOpcode(opcode[1]), opcode[2] ? this.formatOpcode(opcode[2]) : null, this.formatBlock(opcode[3]), opcode[4] ? this.formatBlock(opcode[4]) : null];\n case _wireFormat.SexpOpcodes.With:\n return ['with', this.formatOpcode(opcode[1]), this.formatBlock(opcode[2]), opcode[3] ? this.formatBlock(opcode[3]) : null];\n case _wireFormat.SexpOpcodes.Let:\n return ['let', this.formatParams(opcode[1]), this.formatBlock(opcode[2])];\n case _wireFormat.SexpOpcodes.Log:\n return ['log', this.formatParams(opcode[1])];\n case _wireFormat.SexpOpcodes.WithDynamicVars:\n return ['-with-dynamic-vars', this.formatHash(opcode[1]), this.formatBlock(opcode[2])];\n case _wireFormat.SexpOpcodes.GetDynamicVar:\n return ['-get-dynamic-vars', this.formatOpcode(opcode[1])];\n case _wireFormat.SexpOpcodes.InvokeComponent:\n return ['component', this.formatOpcode(opcode[1]), this.formatParams(opcode[2]), this.formatHash(opcode[3]), this.formatBlocks(opcode[4])];\n }\n } else {\n return opcode;\n }\n }\n formatCurryType(value) {\n switch (value) {\n case _vm.CurriedTypes.Component:\n return 'component';\n case _vm.CurriedTypes.Helper:\n return 'helper';\n case _vm.CurriedTypes.Modifier:\n return 'modifier';\n default:\n throw (0, _util.exhausted)(value);\n }\n }\n formatElementParams(opcodes) {\n if (opcodes === null) return null;\n return opcodes.map(o => this.formatOpcode(o));\n }\n formatParams(opcodes) {\n if (opcodes === null) return null;\n return opcodes.map(o => this.formatOpcode(o));\n }\n formatHash(hash) {\n if (hash === null) return null;\n return hash[0].reduce((accum, key, index) => {\n accum[key] = this.formatOpcode(hash[1][index]);\n return accum;\n }, (0, _util.dict)());\n }\n formatBlocks(blocks) {\n if (blocks === null) return null;\n return blocks[0].reduce((accum, key, index) => {\n accum[key] = this.formatBlock(blocks[1][index]);\n return accum;\n }, (0, _util.dict)());\n }\n formatBlock(block) {\n return {\n statements: block[0].map(s => this.formatOpcode(s)),\n parameters: block[1]\n };\n }\n }\n _exports.WireFormatDebugger = WireFormatDebugger;\n class ExpressionEncoder {\n expr(expr) {\n switch (expr.type) {\n case 'Missing':\n return undefined;\n case 'Literal':\n return this.Literal(expr);\n case 'CallExpression':\n return this.CallExpression(expr);\n case 'DeprecatedCallExpression':\n return this.DeprecatedCallExpression(expr);\n case 'PathExpression':\n return this.PathExpression(expr);\n case 'Arg':\n return [_wireFormat.SexpOpcodes.GetSymbol, expr.symbol];\n case 'Local':\n return this.Local(expr);\n case 'This':\n return [_wireFormat.SexpOpcodes.GetSymbol, 0];\n case 'Free':\n return [expr.resolution.resolution(), expr.symbol];\n case 'HasBlock':\n return this.HasBlock(expr);\n case 'HasBlockParams':\n return this.HasBlockParams(expr);\n case 'Curry':\n return this.Curry(expr);\n case 'Not':\n return this.Not(expr);\n case 'IfInline':\n return this.IfInline(expr);\n case 'InterpolateExpression':\n return this.InterpolateExpression(expr);\n case 'GetDynamicVar':\n return this.GetDynamicVar(expr);\n case 'Log':\n return this.Log(expr);\n }\n }\n Literal(_ref62) {\n let {\n value\n } = _ref62;\n if (value === undefined) {\n return [_wireFormat.SexpOpcodes.Undefined];\n } else {\n return value;\n }\n }\n Missing() {\n return undefined;\n }\n HasBlock(_ref63) {\n let {\n symbol\n } = _ref63;\n return [_wireFormat.SexpOpcodes.HasBlock, [_wireFormat.SexpOpcodes.GetSymbol, symbol]];\n }\n HasBlockParams(_ref64) {\n let {\n symbol\n } = _ref64;\n return [_wireFormat.SexpOpcodes.HasBlockParams, [_wireFormat.SexpOpcodes.GetSymbol, symbol]];\n }\n Curry(_ref65) {\n let {\n definition,\n curriedType,\n args\n } = _ref65;\n return [_wireFormat.SexpOpcodes.Curry, EXPR.expr(definition), curriedType, EXPR.Positional(args.positional), EXPR.NamedArguments(args.named)];\n }\n Local(_ref66) {\n let {\n isTemplateLocal,\n symbol\n } = _ref66;\n return [isTemplateLocal ? _wireFormat.SexpOpcodes.GetLexicalSymbol : _wireFormat.SexpOpcodes.GetSymbol, symbol];\n }\n GetWithResolver(_ref67) {\n let {\n symbol\n } = _ref67;\n return [_wireFormat.SexpOpcodes.GetFreeAsComponentOrHelperHeadOrThisFallback, symbol];\n }\n PathExpression(_ref68) {\n let {\n head,\n tail\n } = _ref68;\n let getOp = EXPR.expr(head);\n return [...getOp, EXPR.Tail(tail)];\n }\n InterpolateExpression(_ref69) {\n let {\n parts\n } = _ref69;\n return [_wireFormat.SexpOpcodes.Concat, parts.map(e => EXPR.expr(e)).toArray()];\n }\n CallExpression(_ref70) {\n let {\n callee,\n args\n } = _ref70;\n return [_wireFormat.SexpOpcodes.Call, EXPR.expr(callee), ...EXPR.Args(args)];\n }\n DeprecatedCallExpression(_ref71) {\n let {\n arg,\n callee\n } = _ref71;\n return [_wireFormat.SexpOpcodes.GetFreeAsDeprecatedHelperHeadOrThisFallback, callee.symbol, [arg.chars]];\n }\n Tail(_ref72) {\n let {\n members\n } = _ref72;\n return (0, _util.mapPresentArray)(members, member => member.chars);\n }\n Args(_ref73) {\n let {\n positional,\n named\n } = _ref73;\n return [this.Positional(positional), this.NamedArguments(named)];\n }\n Positional(_ref74) {\n let {\n list\n } = _ref74;\n return list.map(l => EXPR.expr(l)).toPresentArray();\n }\n NamedArgument(_ref75) {\n let {\n key,\n value\n } = _ref75;\n return [key.chars, EXPR.expr(value)];\n }\n NamedArguments(_ref76) {\n let {\n entries: pairs\n } = _ref76;\n let list = pairs.toArray();\n if ((0, _util.isPresentArray)(list)) {\n let names = [];\n let values = [];\n for (let pair of list) {\n let [name, value] = EXPR.NamedArgument(pair);\n names.push(name);\n values.push(value);\n }\n (0, _util.assertPresentArray)(names);\n (0, _util.assertPresentArray)(values);\n return [names, values];\n } else {\n return null;\n }\n }\n Not(_ref77) {\n let {\n value\n } = _ref77;\n return [_wireFormat.SexpOpcodes.Not, EXPR.expr(value)];\n }\n IfInline(_ref78) {\n let {\n condition,\n truthy,\n falsy\n } = _ref78;\n let expr = [_wireFormat.SexpOpcodes.IfInline, EXPR.expr(condition), EXPR.expr(truthy)];\n if (falsy) {\n expr.push(EXPR.expr(falsy));\n }\n return expr;\n }\n GetDynamicVar(_ref79) {\n let {\n name\n } = _ref79;\n return [_wireFormat.SexpOpcodes.GetDynamicVar, EXPR.expr(name)];\n }\n Log(_ref80) {\n let {\n positional\n } = _ref80;\n return [_wireFormat.SexpOpcodes.Log, this.Positional(positional)];\n }\n }\n const EXPR = new ExpressionEncoder();\n class WireStatements {\n constructor(statements) {\n this.statements = statements;\n }\n toArray() {\n return this.statements;\n }\n }\n class ContentEncoder {\n list(statements) {\n let out = [];\n for (let statement of statements) {\n let result = CONTENT.content(statement);\n if (result && result instanceof WireStatements) {\n out.push(...result.toArray());\n } else {\n out.push(result);\n }\n }\n return out;\n }\n content(stmt) {\n return this.visitContent(stmt);\n }\n visitContent(stmt) {\n switch (stmt.type) {\n case 'Debugger':\n return [_wireFormat.SexpOpcodes.Debugger, stmt.scope.getDebugInfo()];\n case 'AppendComment':\n return this.AppendComment(stmt);\n case 'AppendTextNode':\n return this.AppendTextNode(stmt);\n case 'AppendTrustedHTML':\n return this.AppendTrustedHTML(stmt);\n case 'Yield':\n return this.Yield(stmt);\n case 'Component':\n return this.Component(stmt);\n case 'SimpleElement':\n return this.SimpleElement(stmt);\n case 'InElement':\n return this.InElement(stmt);\n case 'InvokeBlock':\n return this.InvokeBlock(stmt);\n case 'If':\n return this.If(stmt);\n case 'Each':\n return this.Each(stmt);\n case 'With':\n return this.With(stmt);\n case 'Let':\n return this.Let(stmt);\n case 'WithDynamicVars':\n return this.WithDynamicVars(stmt);\n case 'InvokeComponent':\n return this.InvokeComponent(stmt);\n default:\n return (0, _util.exhausted)(stmt);\n }\n }\n Yield(_ref81) {\n let {\n to,\n positional\n } = _ref81;\n return [_wireFormat.SexpOpcodes.Yield, to, EXPR.Positional(positional)];\n }\n InElement(_ref82) {\n let {\n guid,\n insertBefore,\n destination,\n block\n } = _ref82;\n let wireBlock = CONTENT.NamedBlock(block)[1];\n // let guid = args.guid;\n let wireDestination = EXPR.expr(destination);\n let wireInsertBefore = EXPR.expr(insertBefore);\n if (wireInsertBefore === undefined) {\n return [_wireFormat.SexpOpcodes.InElement, wireBlock, guid, wireDestination];\n } else {\n return [_wireFormat.SexpOpcodes.InElement, wireBlock, guid, wireDestination, wireInsertBefore];\n }\n }\n InvokeBlock(_ref83) {\n let {\n head,\n args,\n blocks\n } = _ref83;\n return [_wireFormat.SexpOpcodes.Block, EXPR.expr(head), ...EXPR.Args(args), CONTENT.NamedBlocks(blocks)];\n }\n AppendTrustedHTML(_ref84) {\n let {\n html\n } = _ref84;\n return [_wireFormat.SexpOpcodes.TrustingAppend, EXPR.expr(html)];\n }\n AppendTextNode(_ref85) {\n let {\n text\n } = _ref85;\n return [_wireFormat.SexpOpcodes.Append, EXPR.expr(text)];\n }\n AppendComment(_ref86) {\n let {\n value\n } = _ref86;\n return [_wireFormat.SexpOpcodes.Comment, value.chars];\n }\n SimpleElement(_ref87) {\n let {\n tag,\n params,\n body,\n dynamicFeatures\n } = _ref87;\n let op = dynamicFeatures ? _wireFormat.SexpOpcodes.OpenElementWithSplat : _wireFormat.SexpOpcodes.OpenElement;\n return new WireStatements([[op, deflateTagName(tag.chars)], ...CONTENT.ElementParameters(params).toArray(), [_wireFormat.SexpOpcodes.FlushElement], ...CONTENT.list(body), [_wireFormat.SexpOpcodes.CloseElement]]);\n }\n Component(_ref88) {\n let {\n tag,\n params,\n args,\n blocks\n } = _ref88;\n let wireTag = EXPR.expr(tag);\n let wirePositional = CONTENT.ElementParameters(params);\n let wireNamed = EXPR.NamedArguments(args);\n let wireNamedBlocks = CONTENT.NamedBlocks(blocks);\n return [_wireFormat.SexpOpcodes.Component, wireTag, wirePositional.toPresentArray(), wireNamed, wireNamedBlocks];\n }\n ElementParameters(_ref89) {\n let {\n body\n } = _ref89;\n return body.map(p => CONTENT.ElementParameter(p));\n }\n ElementParameter(param) {\n switch (param.type) {\n case 'SplatAttr':\n return [_wireFormat.SexpOpcodes.AttrSplat, param.symbol];\n case 'DynamicAttr':\n return [dynamicAttrOp(param.kind), ...dynamicAttr(param)];\n case 'StaticAttr':\n return [staticAttrOp(param.kind), ...staticAttr(param)];\n case 'Modifier':\n return [_wireFormat.SexpOpcodes.Modifier, EXPR.expr(param.callee), ...EXPR.Args(param.args)];\n }\n }\n NamedBlocks(_ref90) {\n let {\n blocks\n } = _ref90;\n let names = [];\n let serializedBlocks = [];\n for (let block of blocks.toArray()) {\n let [name, serializedBlock] = CONTENT.NamedBlock(block);\n names.push(name);\n serializedBlocks.push(serializedBlock);\n }\n return names.length > 0 ? [names, serializedBlocks] : null;\n }\n NamedBlock(_ref91) {\n let {\n name,\n body,\n scope\n } = _ref91;\n let nameChars = name.chars;\n if (nameChars === 'inverse') {\n nameChars = 'else';\n }\n return [nameChars, [CONTENT.list(body), scope.slots]];\n }\n If(_ref92) {\n let {\n condition,\n block,\n inverse\n } = _ref92;\n return [_wireFormat.SexpOpcodes.If, EXPR.expr(condition), CONTENT.NamedBlock(block)[1], inverse ? CONTENT.NamedBlock(inverse)[1] : null];\n }\n Each(_ref93) {\n let {\n value,\n key,\n block,\n inverse\n } = _ref93;\n return [_wireFormat.SexpOpcodes.Each, EXPR.expr(value), key ? EXPR.expr(key) : null, CONTENT.NamedBlock(block)[1], inverse ? CONTENT.NamedBlock(inverse)[1] : null];\n }\n With(_ref94) {\n let {\n value,\n block,\n inverse\n } = _ref94;\n return [_wireFormat.SexpOpcodes.With, EXPR.expr(value), CONTENT.NamedBlock(block)[1], inverse ? CONTENT.NamedBlock(inverse)[1] : null];\n }\n Let(_ref95) {\n let {\n positional,\n block\n } = _ref95;\n return [_wireFormat.SexpOpcodes.Let, EXPR.Positional(positional), CONTENT.NamedBlock(block)[1]];\n }\n WithDynamicVars(_ref96) {\n let {\n named,\n block\n } = _ref96;\n return [_wireFormat.SexpOpcodes.WithDynamicVars, EXPR.NamedArguments(named), CONTENT.NamedBlock(block)[1]];\n }\n InvokeComponent(_ref97) {\n let {\n definition,\n args,\n blocks\n } = _ref97;\n return [_wireFormat.SexpOpcodes.InvokeComponent, EXPR.expr(definition), EXPR.Positional(args.positional), EXPR.NamedArguments(args.named), blocks ? CONTENT.NamedBlocks(blocks) : null];\n }\n }\n const CONTENT = new ContentEncoder();\n function staticAttr(_ref98) {\n let {\n name,\n value,\n namespace\n } = _ref98;\n let out = [deflateAttrName(name.chars), value.chars];\n if (namespace) {\n out.push(namespace);\n }\n return out;\n }\n function dynamicAttr(_ref99) {\n let {\n name,\n value,\n namespace\n } = _ref99;\n let out = [deflateAttrName(name.chars), EXPR.expr(value)];\n if (namespace) {\n out.push(namespace);\n }\n return out;\n }\n function staticAttrOp(kind) {\n if (kind.component) {\n return _wireFormat.SexpOpcodes.StaticComponentAttr;\n } else {\n return _wireFormat.SexpOpcodes.StaticAttr;\n }\n }\n function dynamicAttrOp(kind) {\n if (kind.component) {\n return kind.trusting ? _wireFormat.SexpOpcodes.TrustingComponentAttr : _wireFormat.SexpOpcodes.ComponentAttr;\n } else {\n return kind.trusting ? _wireFormat.SexpOpcodes.TrustingDynamicAttr : _wireFormat.SexpOpcodes.DynamicAttr;\n }\n }\n function visit(template) {\n let statements = CONTENT.list(template.body);\n let scope = template.scope;\n let block = [statements, scope.symbols, scope.hasEval, scope.upvars];\n return block;\n }\n const defaultId = _exports.defaultId = (() => {\n const req = typeof module === 'object' && typeof module.require === 'function' ? module.require : globalThis.require;\n if (req) {\n try {\n const crypto = req('crypto');\n const idFn = src => {\n const hash = crypto.createHash('sha1');\n hash.update(src, 'utf8');\n // trim to 6 bytes of data (2^48 - 1)\n return hash.digest('base64').substring(0, 8);\n };\n idFn('test');\n return idFn;\n } catch {\n // do nothing\n }\n }\n return function idFn() {\n return null;\n };\n })();\n const defaultOptions = {\n id: defaultId\n };\n\n /*\n * Compile a string into a template javascript string.\n *\n * Example usage:\n * import { precompile } from '@glimmer/compiler';\n * import { templateFactory } from 'glimmer-runtime';\n * let templateJs = precompile(\"Howdy {{name}}\");\n * let factory = templateFactory(new Function(\"return \" + templateJs)());\n * let template = factory.create(env);\n *\n * @method precompile\n * @param {string} string a Glimmer template string\n * @return {string} a template javascript string\n */\n function precompileJSON(string, options) {\n var _options$meta, _options$strictMode;\n if (options === void 0) {\n options = defaultOptions;\n }\n const source = new _syntax.src.Source(string != null ? string : '', (_options$meta = options.meta) == null ? void 0 : _options$meta.moduleName);\n const [ast, locals] = (0, _syntax.normalize)(source, {\n lexicalScope: () => false,\n ...options\n });\n const block = normalize(source, ast, (_options$strictMode = options.strictMode) != null ? _options$strictMode : false).mapOk(pass2In => {\n return visit(pass2In);\n });\n if (block.isOk) {\n return [block.value, locals];\n } else {\n throw block.reason;\n }\n }\n\n // UUID used as a unique placeholder for placing a snippet of JS code into\n // the otherwise JSON stringified value below.\n const SCOPE_PLACEHOLDER = '796d24e6-2450-4fb0-8cdf-b65638b5ef70';\n\n /*\n * Compile a string into a template javascript string.\n *\n * Example usage:\n * import { precompile } from '@glimmer/compiler';\n * import { templateFactory } from 'glimmer-runtime';\n * let templateJs = precompile(\"Howdy {{name}}\");\n * let factory = templateFactory(new Function(\"return \" + templateJs)());\n * let template = factory.create(env);\n *\n * @method precompile\n * @param {string} string a Glimmer template string\n * @return {string} a template javascript string\n */\n function precompile(source, options) {\n var _options$meta2, _options$strictMode2;\n if (options === void 0) {\n options = defaultOptions;\n }\n const [block, usedLocals] = precompileJSON(source, options);\n const moduleName = (_options$meta2 = options.meta) == null ? void 0 : _options$meta2.moduleName;\n const idFn = options.id || defaultId;\n const blockJSON = JSON.stringify(block);\n const templateJSONObject = {\n id: idFn(JSON.stringify(options.meta) + blockJSON),\n block: blockJSON,\n moduleName: moduleName != null ? moduleName : '(unknown template module)',\n // lying to the type checker here because we're going to\n // replace it just below, after stringification\n scope: SCOPE_PLACEHOLDER,\n isStrictMode: (_options$strictMode2 = options.strictMode) != null ? _options$strictMode2 : false\n };\n if (usedLocals.length === 0) {\n delete templateJSONObject.scope;\n }\n\n // JSON is javascript\n let stringified = JSON.stringify(templateJSONObject);\n if (usedLocals.length > 0) {\n const scopeFn = \"()=>[\" + usedLocals.join(',') + \"]\";\n stringified = stringified.replace(\"\\\"\" + SCOPE_PLACEHOLDER + \"\\\"\", scopeFn);\n }\n return stringified;\n }\n});","define(\"@glimmer/env\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.DEBUG = _exports.CI = void 0;\n const DEBUG = _exports.DEBUG = false;\n const CI = _exports.CI = false;\n});","define(\"@glimmer/syntax\", [\"exports\", \"ember-babel\", \"@glimmer/util\", \"@handlebars/parser\", \"simple-html-tokenizer\", \"@glimmer/wire-format\"], function (_exports, _emberBabel, _util, _parser, _simpleHtmlTokenizer, _wireFormat) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.builders = _exports.WalkerPath = _exports.Walker = _exports.SymbolTable = _exports.SpanList = _exports.SourceSlice = _exports.ProgramSymbolTable = _exports.Path = _exports.KEYWORDS_TYPES = _exports.BlockSymbolTable = _exports.ASTv2 = _exports.ASTv1 = _exports.AST = void 0;\n _exports.cannotRemoveNode = cannotRemoveNode;\n _exports.cannotReplaceNode = cannotReplaceNode;\n _exports.generateSyntaxError = generateSyntaxError;\n _exports.getTemplateLocals = getTemplateLocals;\n _exports.getVoidTags = getVoidTags;\n _exports.hasSpan = hasSpan;\n _exports.isKeyword = isKeyword;\n _exports.isVoidTag = isVoidTag;\n _exports.loc = loc;\n _exports.maybeLoc = maybeLoc;\n _exports.node = node;\n _exports.normalize = normalize;\n _exports.preprocess = preprocess;\n _exports.print = build;\n _exports.sortByLoc = sortByLoc;\n _exports.src = void 0;\n _exports.traverse = traverse;\n _exports.visitorKeys = void 0;\n var Char = /*#__PURE__*/function (Char) {\n Char[Char[\"NBSP\"] = 160] = \"NBSP\";\n Char[Char[\"QUOT\"] = 34] = \"QUOT\";\n Char[Char[\"LT\"] = 60] = \"LT\";\n Char[Char[\"GT\"] = 62] = \"GT\";\n Char[Char[\"AMP\"] = 38] = \"AMP\";\n return Char;\n }(Char || {});\n const ATTR_VALUE_REGEX_TEST = /[\"&\\xA0]/u;\n const ATTR_VALUE_REGEX_REPLACE = new RegExp(ATTR_VALUE_REGEX_TEST.source, 'gu');\n const TEXT_REGEX_TEST = /[&<>\\xA0]/u;\n const TEXT_REGEX_REPLACE = new RegExp(TEXT_REGEX_TEST.source, 'gu');\n function attrValueReplacer(char) {\n switch (char.charCodeAt(0)) {\n case Char.NBSP:\n return ' ';\n case Char.QUOT:\n return '"';\n case Char.AMP:\n return '&';\n default:\n return char;\n }\n }\n function textReplacer(char) {\n switch (char.charCodeAt(0)) {\n case Char.NBSP:\n return ' ';\n case Char.AMP:\n return '&';\n case Char.LT:\n return '<';\n case Char.GT:\n return '>';\n default:\n return char;\n }\n }\n function escapeAttrValue(attrValue) {\n if (ATTR_VALUE_REGEX_TEST.test(attrValue)) {\n return attrValue.replace(ATTR_VALUE_REGEX_REPLACE, attrValueReplacer);\n }\n return attrValue;\n }\n function escapeText(text) {\n if (TEXT_REGEX_TEST.test(text)) {\n return text.replace(TEXT_REGEX_REPLACE, textReplacer);\n }\n return text;\n }\n function sortByLoc(a, b) {\n // If either is invisible, don't try to order them\n if (a.loc.isInvisible || b.loc.isInvisible) {\n return 0;\n }\n if (a.loc.startPosition.line < b.loc.startPosition.line) {\n return -1;\n }\n if (a.loc.startPosition.line === b.loc.startPosition.line && a.loc.startPosition.column < b.loc.startPosition.column) {\n return -1;\n }\n if (a.loc.startPosition.line === b.loc.startPosition.line && a.loc.startPosition.column === b.loc.startPosition.column) {\n return 0;\n }\n return 1;\n }\n const voidMap = new Set(['area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr']);\n function getVoidTags() {\n return [...voidMap];\n }\n const NON_WHITESPACE = /^\\S/u;\n /**\n * Examples when true:\n * - link\n * - liNK\n *\n * Examples when false:\n * - Link (component)\n */\n function isVoidTag(tag) {\n var _tag$;\n return voidMap.has(tag.toLowerCase()) && ((_tag$ = tag[0]) == null ? void 0 : _tag$.toLowerCase()) === tag[0];\n }\n class Printer {\n constructor(options) {\n this.buffer = '';\n this.options = void 0;\n this.options = options;\n }\n\n /*\n This is used by _all_ methods on this Printer class that add to `this.buffer`,\n it allows consumers of the printer to use alternate string representations for\n a given node.\n The primary use case for this are things like source -> source codemod utilities.\n For example, ember-template-recast attempts to always preserve the original string\n formatting in each AST node if no modifications are made to it.\n */\n handledByOverride(node, ensureLeadingWhitespace) {\n if (ensureLeadingWhitespace === void 0) {\n ensureLeadingWhitespace = false;\n }\n if (this.options.override !== undefined) {\n let result = this.options.override(node, this.options);\n if (typeof result === 'string') {\n if (ensureLeadingWhitespace && NON_WHITESPACE.test(result)) {\n result = \" \" + result;\n }\n this.buffer += result;\n return true;\n }\n }\n return false;\n }\n Node(node) {\n switch (node.type) {\n case 'MustacheStatement':\n case 'BlockStatement':\n case 'PartialStatement':\n case 'MustacheCommentStatement':\n case 'CommentStatement':\n case 'TextNode':\n case 'ElementNode':\n case 'AttrNode':\n case 'Block':\n case 'Template':\n return this.TopLevelStatement(node);\n case 'StringLiteral':\n case 'BooleanLiteral':\n case 'NumberLiteral':\n case 'UndefinedLiteral':\n case 'NullLiteral':\n case 'PathExpression':\n case 'SubExpression':\n return this.Expression(node);\n case 'Program':\n return this.Block(node);\n case 'ConcatStatement':\n // should have an AttrNode parent\n return this.ConcatStatement(node);\n case 'Hash':\n return this.Hash(node);\n case 'HashPair':\n return this.HashPair(node);\n case 'ElementModifierStatement':\n return this.ElementModifierStatement(node);\n }\n }\n Expression(expression) {\n switch (expression.type) {\n case 'StringLiteral':\n case 'BooleanLiteral':\n case 'NumberLiteral':\n case 'UndefinedLiteral':\n case 'NullLiteral':\n return this.Literal(expression);\n case 'PathExpression':\n return this.PathExpression(expression);\n case 'SubExpression':\n return this.SubExpression(expression);\n }\n }\n Literal(literal) {\n switch (literal.type) {\n case 'StringLiteral':\n return this.StringLiteral(literal);\n case 'BooleanLiteral':\n return this.BooleanLiteral(literal);\n case 'NumberLiteral':\n return this.NumberLiteral(literal);\n case 'UndefinedLiteral':\n return this.UndefinedLiteral(literal);\n case 'NullLiteral':\n return this.NullLiteral(literal);\n }\n }\n TopLevelStatement(statement) {\n switch (statement.type) {\n case 'MustacheStatement':\n return this.MustacheStatement(statement);\n case 'BlockStatement':\n return this.BlockStatement(statement);\n case 'PartialStatement':\n return this.PartialStatement(statement);\n case 'MustacheCommentStatement':\n return this.MustacheCommentStatement(statement);\n case 'CommentStatement':\n return this.CommentStatement(statement);\n case 'TextNode':\n return this.TextNode(statement);\n case 'ElementNode':\n return this.ElementNode(statement);\n case 'Block':\n case 'Template':\n return this.Block(statement);\n case 'AttrNode':\n // should have element\n return this.AttrNode(statement);\n }\n }\n Block(block) {\n /*\n When processing a template like:\n ```hbs\n {{#if whatever}}\n whatever\n {{else if somethingElse}}\n something else\n {{else}}\n fallback\n {{/if}}\n ```\n The AST still _effectively_ looks like:\n ```hbs\n {{#if whatever}}\n whatever\n {{else}}{{#if somethingElse}}\n something else\n {{else}}\n fallback\n {{/if}}{{/if}}\n ```\n The only way we can tell if that is the case is by checking for\n `block.chained`, but unfortunately when the actual statements are\n processed the `block.body[0]` node (which will always be a\n `BlockStatement`) has no clue that its ancestor `Block` node was\n chained.\n This \"forwards\" the `chained` setting so that we can check\n it later when processing the `BlockStatement`.\n */\n if (block.chained) {\n let firstChild = block.body[0];\n firstChild.chained = true;\n }\n if (this.handledByOverride(block)) {\n return;\n }\n this.TopLevelStatements(block.body);\n }\n TopLevelStatements(statements) {\n statements.forEach(statement => this.TopLevelStatement(statement));\n }\n ElementNode(el) {\n if (this.handledByOverride(el)) {\n return;\n }\n this.OpenElementNode(el);\n this.TopLevelStatements(el.children);\n this.CloseElementNode(el);\n }\n OpenElementNode(el) {\n this.buffer += \"<\" + el.tag;\n const parts = [...el.attributes, ...el.modifiers, ...el.comments].sort(sortByLoc);\n for (const part of parts) {\n this.buffer += ' ';\n switch (part.type) {\n case 'AttrNode':\n this.AttrNode(part);\n break;\n case 'ElementModifierStatement':\n this.ElementModifierStatement(part);\n break;\n case 'MustacheCommentStatement':\n this.MustacheCommentStatement(part);\n break;\n }\n }\n if (el.blockParams.length) {\n this.BlockParams(el.blockParams);\n }\n if (el.selfClosing) {\n this.buffer += ' /';\n }\n this.buffer += '>';\n }\n CloseElementNode(el) {\n if (el.selfClosing || isVoidTag(el.tag)) {\n return;\n }\n this.buffer += \"</\" + el.tag + \">\";\n }\n AttrNode(attr) {\n if (this.handledByOverride(attr)) {\n return;\n }\n let {\n name,\n value\n } = attr;\n this.buffer += name;\n if (value.type !== 'TextNode' || value.chars.length > 0) {\n this.buffer += '=';\n this.AttrNodeValue(value);\n }\n }\n AttrNodeValue(value) {\n if (value.type === 'TextNode') {\n this.buffer += '\"';\n this.TextNode(value, true);\n this.buffer += '\"';\n } else {\n this.Node(value);\n }\n }\n TextNode(text, isAttr) {\n if (this.handledByOverride(text)) {\n return;\n }\n if (this.options.entityEncoding === 'raw') {\n this.buffer += text.chars;\n } else if (isAttr) {\n this.buffer += escapeAttrValue(text.chars);\n } else {\n this.buffer += escapeText(text.chars);\n }\n }\n MustacheStatement(mustache) {\n if (this.handledByOverride(mustache)) {\n return;\n }\n this.buffer += mustache.escaped ? '{{' : '{{{';\n if (mustache.strip.open) {\n this.buffer += '~';\n }\n this.Expression(mustache.path);\n this.Params(mustache.params);\n this.Hash(mustache.hash);\n if (mustache.strip.close) {\n this.buffer += '~';\n }\n this.buffer += mustache.escaped ? '}}' : '}}}';\n }\n BlockStatement(block) {\n if (this.handledByOverride(block)) {\n return;\n }\n if (block.chained) {\n this.buffer += block.inverseStrip.open ? '{{~' : '{{';\n this.buffer += 'else ';\n } else {\n this.buffer += block.openStrip.open ? '{{~#' : '{{#';\n }\n this.Expression(block.path);\n this.Params(block.params);\n this.Hash(block.hash);\n if (block.program.blockParams.length) {\n this.BlockParams(block.program.blockParams);\n }\n if (block.chained) {\n this.buffer += block.inverseStrip.close ? '~}}' : '}}';\n } else {\n this.buffer += block.openStrip.close ? '~}}' : '}}';\n }\n this.Block(block.program);\n if (block.inverse) {\n if (!block.inverse.chained) {\n this.buffer += block.inverseStrip.open ? '{{~' : '{{';\n this.buffer += 'else';\n this.buffer += block.inverseStrip.close ? '~}}' : '}}';\n }\n this.Block(block.inverse);\n }\n if (!block.chained) {\n this.buffer += block.closeStrip.open ? '{{~/' : '{{/';\n this.Expression(block.path);\n this.buffer += block.closeStrip.close ? '~}}' : '}}';\n }\n }\n BlockParams(blockParams) {\n this.buffer += \" as |\" + blockParams.join(' ') + \"|\";\n }\n PartialStatement(partial) {\n if (this.handledByOverride(partial)) {\n return;\n }\n this.buffer += '{{>';\n this.Expression(partial.name);\n this.Params(partial.params);\n this.Hash(partial.hash);\n this.buffer += '}}';\n }\n ConcatStatement(concat) {\n if (this.handledByOverride(concat)) {\n return;\n }\n this.buffer += '\"';\n concat.parts.forEach(part => {\n if (part.type === 'TextNode') {\n this.TextNode(part, true);\n } else {\n this.Node(part);\n }\n });\n this.buffer += '\"';\n }\n MustacheCommentStatement(comment) {\n if (this.handledByOverride(comment)) {\n return;\n }\n this.buffer += \"{{!--\" + comment.value + \"--}}\";\n }\n ElementModifierStatement(mod) {\n if (this.handledByOverride(mod)) {\n return;\n }\n this.buffer += '{{';\n this.Expression(mod.path);\n this.Params(mod.params);\n this.Hash(mod.hash);\n this.buffer += '}}';\n }\n CommentStatement(comment) {\n if (this.handledByOverride(comment)) {\n return;\n }\n this.buffer += \"<!--\" + comment.value + \"-->\";\n }\n PathExpression(path) {\n if (this.handledByOverride(path)) {\n return;\n }\n this.buffer += path.original;\n }\n SubExpression(sexp) {\n if (this.handledByOverride(sexp)) {\n return;\n }\n this.buffer += '(';\n this.Expression(sexp.path);\n this.Params(sexp.params);\n this.Hash(sexp.hash);\n this.buffer += ')';\n }\n Params(params) {\n // TODO: implement a top level Params AST node (just like the Hash object)\n // so that this can also be overridden\n if (params.length) {\n params.forEach(param => {\n this.buffer += ' ';\n this.Expression(param);\n });\n }\n }\n Hash(hash) {\n if (this.handledByOverride(hash, true)) {\n return;\n }\n hash.pairs.forEach(pair => {\n this.buffer += ' ';\n this.HashPair(pair);\n });\n }\n HashPair(pair) {\n if (this.handledByOverride(pair)) {\n return;\n }\n this.buffer += pair.key;\n this.buffer += '=';\n this.Node(pair.value);\n }\n StringLiteral(str) {\n if (this.handledByOverride(str)) {\n return;\n }\n this.buffer += JSON.stringify(str.value);\n }\n BooleanLiteral(bool) {\n if (this.handledByOverride(bool)) {\n return;\n }\n this.buffer += bool.value;\n }\n NumberLiteral(number) {\n if (this.handledByOverride(number)) {\n return;\n }\n this.buffer += number.value;\n }\n UndefinedLiteral(node) {\n if (this.handledByOverride(node)) {\n return;\n }\n this.buffer += 'undefined';\n }\n NullLiteral(node) {\n if (this.handledByOverride(node)) {\n return;\n }\n this.buffer += 'null';\n }\n print(node) {\n let {\n options\n } = this;\n if (options.override) {\n let result = options.override(node, options);\n if (result !== undefined) {\n return result;\n }\n }\n this.buffer = '';\n this.Node(node);\n return this.buffer;\n }\n }\n function build(ast, options) {\n if (options === void 0) {\n options = {\n entityEncoding: 'transformed'\n };\n }\n if (!ast) {\n return '';\n }\n let printer = new Printer(options);\n return printer.print(ast);\n }\n function isKeyword(word) {\n return word in KEYWORDS_TYPES;\n }\n\n /**\n * This includes the full list of keywords currently in use in the template\n * language, and where their valid usages are.\n */\n const KEYWORDS_TYPES = _exports.KEYWORDS_TYPES = {\n component: ['Call', 'Append', 'Block'],\n debugger: ['Append'],\n 'each-in': ['Block'],\n each: ['Block'],\n 'has-block-params': ['Call', 'Append'],\n 'has-block': ['Call', 'Append'],\n helper: ['Call', 'Append'],\n if: ['Call', 'Append', 'Block'],\n 'in-element': ['Block'],\n let: ['Block'],\n 'link-to': ['Append', 'Block'],\n log: ['Call', 'Append'],\n modifier: ['Call'],\n mount: ['Append'],\n mut: ['Call', 'Append'],\n outlet: ['Append'],\n 'query-params': ['Call'],\n readonly: ['Call', 'Append'],\n unbound: ['Call', 'Append'],\n unless: ['Call', 'Append', 'Block'],\n with: ['Block'],\n yield: ['Append']\n };\n const UNKNOWN_POSITION = Object.freeze({\n line: 1,\n column: 0\n });\n const SYNTHETIC_LOCATION = Object.freeze({\n source: '(synthetic)',\n start: UNKNOWN_POSITION,\n end: UNKNOWN_POSITION\n });\n const NON_EXISTENT_LOCATION = Object.freeze({\n source: '(nonexistent)',\n start: UNKNOWN_POSITION,\n end: UNKNOWN_POSITION\n });\n const BROKEN_LOCATION = Object.freeze({\n source: '(broken)',\n start: UNKNOWN_POSITION,\n end: UNKNOWN_POSITION\n });\n let OffsetKind = /*#__PURE__*/function (OffsetKind) {\n OffsetKind[\"CharPosition\"] = \"CharPosition\";\n OffsetKind[\"HbsPosition\"] = \"HbsPosition\";\n OffsetKind[\"InternalsSynthetic\"] = \"InternalsSynthetic\";\n OffsetKind[\"NonExistent\"] = \"NonExistent\";\n OffsetKind[\"Broken\"] = \"Broken\";\n return OffsetKind;\n }({});\n\n /**\n * This file implements the DSL used by span and offset in places where they need to exhaustively\n * consider all combinations of states (Handlebars offsets, character offsets and invisible/broken\n * offsets).\n *\n * It's probably overkill, but it makes the code that uses it clear. It could be refactored or\n * removed.\n */\n\n const MatchAny = 'MATCH_ANY';\n const IsInvisible = 'IS_INVISIBLE';\n class WhenList {\n constructor(whens) {\n this._whens = void 0;\n this._whens = whens;\n }\n first(kind) {\n for (const when of this._whens) {\n const value = when.match(kind);\n if ((0, _util.isPresentArray)(value)) {\n return value[0];\n }\n }\n return null;\n }\n }\n class When {\n constructor() {\n this._map = new Map();\n }\n get(pattern, or) {\n let value = this._map.get(pattern);\n if (value) {\n return value;\n }\n value = or();\n this._map.set(pattern, value);\n return value;\n }\n add(pattern, out) {\n this._map.set(pattern, out);\n }\n match(kind) {\n const pattern = patternFor(kind);\n const out = [];\n const exact = this._map.get(pattern);\n const fallback = this._map.get(MatchAny);\n if (exact) {\n out.push(exact);\n }\n if (fallback) {\n out.push(fallback);\n }\n return out;\n }\n }\n function match(callback) {\n return callback(new Matcher()).check();\n }\n class Matcher {\n constructor() {\n this._whens = new When();\n }\n /**\n * You didn't exhaustively match all possibilities.\n */\n check() {\n return (left, right) => this.matchFor(left.kind, right.kind)(left, right);\n }\n matchFor(left, right) {\n const nesteds = this._whens.match(left);\n (0, _util.assert)((0, _util.isPresentArray)(nesteds), \"no match defined for (\" + left + \", \" + right + \") and no AnyMatch defined either\");\n const callback = new WhenList(nesteds).first(right);\n (0, _util.assert)(callback !== null, \"no match defined for (\" + left + \", \" + right + \") and no AnyMatch defined either\");\n return callback;\n }\n\n // This big block is the bulk of the heavy lifting in this file. It facilitates exhaustiveness\n // checking so that matchers can ensure they've actually covered all the cases (and TypeScript\n // will treat it as an exhaustive match).\n when(left, right, callback) {\n this._whens.get(left, () => new When()).add(right, callback);\n return this;\n }\n }\n function patternFor(kind) {\n switch (kind) {\n case OffsetKind.Broken:\n case OffsetKind.InternalsSynthetic:\n case OffsetKind.NonExistent:\n return IsInvisible;\n default:\n return kind;\n }\n }\n class SourceSlice {\n static synthetic(chars) {\n let offsets = SourceSpan.synthetic(chars);\n return new SourceSlice({\n loc: offsets,\n chars: chars\n });\n }\n static load(source, slice) {\n return new SourceSlice({\n loc: SourceSpan.load(source, slice[1]),\n chars: slice[0]\n });\n }\n constructor(options) {\n this.chars = void 0;\n this.loc = void 0;\n this.loc = options.loc;\n this.chars = options.chars;\n }\n getString() {\n return this.chars;\n }\n serialize() {\n return [this.chars, this.loc.serialize()];\n }\n }\n\n /**\n * All spans have these details in common.\n */\n\n /**\n * A `SourceSpan` object represents a span of characters inside of a template source.\n *\n * There are three kinds of `SourceSpan` objects:\n *\n * - `ConcreteSourceSpan`, which contains byte offsets\n * - `LazySourceSpan`, which contains `SourceLocation`s from the Handlebars AST, which can be\n * converted to byte offsets on demand.\n * - `InvisibleSourceSpan`, which represent source strings that aren't present in the source,\n * because:\n * - they were created synthetically\n * - their location is nonsensical (the span is broken)\n * - they represent nothing in the source (this currently happens only when a bug in the\n * upstream Handlebars parser fails to assign a location to empty blocks)\n *\n * At a high level, all `SourceSpan` objects provide:\n *\n * - byte offsets\n * - source in column and line format\n *\n * And you can do these operations on `SourceSpan`s:\n *\n * - collapse it to a `SourceSpan` representing its starting or ending position\n * - slice out some characters, optionally skipping some characters at the beginning or end\n * - create a new `SourceSpan` with a different starting or ending offset\n *\n * All SourceSpan objects implement `SourceLocation`, for compatibility. All SourceSpan\n * objects have a `toJSON` that emits `SourceLocation`, also for compatibility.\n *\n * For compatibility, subclasses of `AbstractSourceSpan` must implement `locDidUpdate`, which\n * happens when an AST plugin attempts to modify the `start` or `end` of a span directly.\n *\n * The goal is to avoid creating any problems for use-cases like AST Explorer.\n */\n _exports.SourceSlice = SourceSlice;\n class SourceSpan {\n static get NON_EXISTENT() {\n return new InvisibleSpan(OffsetKind.NonExistent, NON_EXISTENT_LOCATION).wrap();\n }\n static load(source, serialized) {\n if (typeof serialized === 'number') {\n return SourceSpan.forCharPositions(source, serialized, serialized);\n } else if (typeof serialized === 'string') {\n return SourceSpan.synthetic(serialized);\n } else if (Array.isArray(serialized)) {\n return SourceSpan.forCharPositions(source, serialized[0], serialized[1]);\n } else if (serialized === OffsetKind.NonExistent) {\n return SourceSpan.NON_EXISTENT;\n } else if (serialized === OffsetKind.Broken) {\n return SourceSpan.broken(BROKEN_LOCATION);\n }\n (0, _util.assertNever)(serialized);\n }\n static forHbsLoc(source, loc) {\n const start = new HbsPosition(source, loc.start);\n const end = new HbsPosition(source, loc.end);\n return new HbsSpan(source, {\n start,\n end\n }, loc).wrap();\n }\n static forCharPositions(source, startPos, endPos) {\n const start = new CharPosition(source, startPos);\n const end = new CharPosition(source, endPos);\n return new CharPositionSpan(source, {\n start,\n end\n }).wrap();\n }\n static synthetic(chars) {\n return new InvisibleSpan(OffsetKind.InternalsSynthetic, NON_EXISTENT_LOCATION, chars).wrap();\n }\n static broken(pos) {\n if (pos === void 0) {\n pos = BROKEN_LOCATION;\n }\n return new InvisibleSpan(OffsetKind.Broken, pos).wrap();\n }\n constructor(data) {\n this.isInvisible = void 0;\n this.data = data;\n this.isInvisible = data.kind !== OffsetKind.CharPosition && data.kind !== OffsetKind.HbsPosition;\n }\n getStart() {\n return this.data.getStart().wrap();\n }\n getEnd() {\n return this.data.getEnd().wrap();\n }\n get loc() {\n const span = this.data.toHbsSpan();\n return span === null ? BROKEN_LOCATION : span.toHbsLoc();\n }\n get module() {\n return this.data.getModule();\n }\n\n /**\n * Get the starting `SourcePosition` for this `SourceSpan`, lazily computing it if needed.\n */\n get startPosition() {\n return this.loc.start;\n }\n\n /**\n * Get the ending `SourcePosition` for this `SourceSpan`, lazily computing it if needed.\n */\n get endPosition() {\n return this.loc.end;\n }\n\n /**\n * Support converting ASTv1 nodes into a serialized format using JSON.stringify.\n */\n toJSON() {\n return this.loc;\n }\n\n /**\n * Create a new span with the current span's end and a new beginning.\n */\n withStart(other) {\n return span(other.data, this.data.getEnd());\n }\n\n /**\n * Create a new span with the current span's beginning and a new ending.\n */\n withEnd(other) {\n return span(this.data.getStart(), other.data);\n }\n asString() {\n return this.data.asString();\n }\n\n /**\n * Convert this `SourceSpan` into a `SourceSlice`. In debug mode, this method optionally checks\n * that the byte offsets represented by this `SourceSpan` actually correspond to the expected\n * string.\n */\n toSlice(expected) {\n const chars = this.data.asString();\n if (true /* DEBUG */) {\n if (expected !== undefined && chars !== expected) {\n // eslint-disable-next-line no-console\n console.warn(\"unexpectedly found \" + JSON.stringify(chars) + \" when slicing source, but expected \" + JSON.stringify(expected));\n }\n }\n return new SourceSlice({\n loc: this,\n chars: expected || chars\n });\n }\n\n /**\n * For compatibility with SourceLocation in AST plugins\n *\n * @deprecated use startPosition instead\n */\n get start() {\n return this.loc.start;\n }\n\n /**\n * For compatibility with SourceLocation in AST plugins\n *\n * @deprecated use withStart instead\n */\n set start(position) {\n this.data.locDidUpdate({\n start: position\n });\n }\n\n /**\n * For compatibility with SourceLocation in AST plugins\n *\n * @deprecated use endPosition instead\n */\n get end() {\n return this.loc.end;\n }\n\n /**\n * For compatibility with SourceLocation in AST plugins\n *\n * @deprecated use withEnd instead\n */\n set end(position) {\n this.data.locDidUpdate({\n end: position\n });\n }\n\n /**\n * For compatibility with SourceLocation in AST plugins\n *\n * @deprecated use module instead\n */\n get source() {\n return this.module;\n }\n collapse(where) {\n switch (where) {\n case 'start':\n return this.getStart().collapsed();\n case 'end':\n return this.getEnd().collapsed();\n }\n }\n extend(other) {\n return span(this.data.getStart(), other.data.getEnd());\n }\n serialize() {\n return this.data.serialize();\n }\n slice(_ref) {\n let {\n skipStart = 0,\n skipEnd = 0\n } = _ref;\n return span(this.getStart().move(skipStart).data, this.getEnd().move(-skipEnd).data);\n }\n sliceStartChars(_ref2) {\n let {\n skipStart = 0,\n chars\n } = _ref2;\n return span(this.getStart().move(skipStart).data, this.getStart().move(skipStart + chars).data);\n }\n sliceEndChars(_ref3) {\n let {\n skipEnd = 0,\n chars\n } = _ref3;\n return span(this.getEnd().move(skipEnd - chars).data, this.getStart().move(-skipEnd).data);\n }\n }\n class CharPositionSpan {\n constructor(source, charPositions) {\n this.kind = OffsetKind.CharPosition;\n this._locPosSpan = null;\n this.source = source;\n this.charPositions = charPositions;\n }\n wrap() {\n return new SourceSpan(this);\n }\n asString() {\n return this.source.slice(this.charPositions.start.charPos, this.charPositions.end.charPos);\n }\n getModule() {\n return this.source.module;\n }\n getStart() {\n return this.charPositions.start;\n }\n getEnd() {\n return this.charPositions.end;\n }\n locDidUpdate() {}\n toHbsSpan() {\n let locPosSpan = this._locPosSpan;\n if (locPosSpan === null) {\n const start = this.charPositions.start.toHbsPos();\n const end = this.charPositions.end.toHbsPos();\n if (start === null || end === null) {\n locPosSpan = this._locPosSpan = BROKEN;\n } else {\n locPosSpan = this._locPosSpan = new HbsSpan(this.source, {\n start,\n end\n });\n }\n }\n return locPosSpan === BROKEN ? null : locPosSpan;\n }\n serialize() {\n const {\n start: {\n charPos: start\n },\n end: {\n charPos: end\n }\n } = this.charPositions;\n if (start === end) {\n return start;\n } else {\n return [start, end];\n }\n }\n toCharPosSpan() {\n return this;\n }\n }\n class HbsSpan {\n constructor(source, hbsPositions, providedHbsLoc) {\n if (providedHbsLoc === void 0) {\n providedHbsLoc = null;\n }\n this.kind = OffsetKind.HbsPosition;\n this._charPosSpan = null;\n // the source location from Handlebars + AST Plugins -- could be wrong\n this._providedHbsLoc = void 0;\n this.source = source;\n this.hbsPositions = hbsPositions;\n this._providedHbsLoc = providedHbsLoc;\n }\n serialize() {\n const charPos = this.toCharPosSpan();\n return charPos === null ? OffsetKind.Broken : charPos.wrap().serialize();\n }\n wrap() {\n return new SourceSpan(this);\n }\n updateProvided(pos, edge) {\n if (this._providedHbsLoc) {\n this._providedHbsLoc[edge] = pos;\n }\n\n // invalidate computed character offsets\n this._charPosSpan = null;\n this._providedHbsLoc = {\n start: pos,\n end: pos\n };\n }\n locDidUpdate(_ref4) {\n let {\n start,\n end\n } = _ref4;\n if (start !== undefined) {\n this.updateProvided(start, 'start');\n this.hbsPositions.start = new HbsPosition(this.source, start, null);\n }\n if (end !== undefined) {\n this.updateProvided(end, 'end');\n this.hbsPositions.end = new HbsPosition(this.source, end, null);\n }\n }\n asString() {\n const span = this.toCharPosSpan();\n return span === null ? '' : span.asString();\n }\n getModule() {\n return this.source.module;\n }\n getStart() {\n return this.hbsPositions.start;\n }\n getEnd() {\n return this.hbsPositions.end;\n }\n toHbsLoc() {\n return {\n start: this.hbsPositions.start.hbsPos,\n end: this.hbsPositions.end.hbsPos\n };\n }\n toHbsSpan() {\n return this;\n }\n toCharPosSpan() {\n let charPosSpan = this._charPosSpan;\n if (charPosSpan === null) {\n const start = this.hbsPositions.start.toCharPos();\n const end = this.hbsPositions.end.toCharPos();\n if (start && end) {\n charPosSpan = this._charPosSpan = new CharPositionSpan(this.source, {\n start,\n end\n });\n } else {\n charPosSpan = this._charPosSpan = BROKEN;\n return null;\n }\n }\n return charPosSpan === BROKEN ? null : charPosSpan;\n }\n }\n class InvisibleSpan {\n constructor(kind,\n // whatever was provided, possibly broken\n loc,\n // if the span represents a synthetic string\n string) {\n if (string === void 0) {\n string = null;\n }\n this.kind = kind;\n this.loc = loc;\n this.string = string;\n }\n serialize() {\n switch (this.kind) {\n case OffsetKind.Broken:\n case OffsetKind.NonExistent:\n return this.kind;\n case OffsetKind.InternalsSynthetic:\n return this.string || '';\n }\n }\n wrap() {\n return new SourceSpan(this);\n }\n asString() {\n return this.string || '';\n }\n locDidUpdate(_ref5) {\n let {\n start,\n end\n } = _ref5;\n if (start !== undefined) {\n this.loc.start = start;\n }\n if (end !== undefined) {\n this.loc.end = end;\n }\n }\n getModule() {\n // TODO: Make this reflect the actual module this span originated from\n return 'an unknown module';\n }\n getStart() {\n return new InvisiblePosition(this.kind, this.loc.start);\n }\n getEnd() {\n return new InvisiblePosition(this.kind, this.loc.end);\n }\n toCharPosSpan() {\n return this;\n }\n toHbsSpan() {\n return null;\n }\n toHbsLoc() {\n return BROKEN_LOCATION;\n }\n }\n const span = match(m => m.when(OffsetKind.HbsPosition, OffsetKind.HbsPosition, (left, right) => new HbsSpan(left.source, {\n start: left,\n end: right\n }).wrap()).when(OffsetKind.CharPosition, OffsetKind.CharPosition, (left, right) => new CharPositionSpan(left.source, {\n start: left,\n end: right\n }).wrap()).when(OffsetKind.CharPosition, OffsetKind.HbsPosition, (left, right) => {\n const rightCharPos = right.toCharPos();\n if (rightCharPos === null) {\n return new InvisibleSpan(OffsetKind.Broken, BROKEN_LOCATION).wrap();\n } else {\n return span(left, rightCharPos);\n }\n }).when(OffsetKind.HbsPosition, OffsetKind.CharPosition, (left, right) => {\n const leftCharPos = left.toCharPos();\n if (leftCharPos === null) {\n return new InvisibleSpan(OffsetKind.Broken, BROKEN_LOCATION).wrap();\n } else {\n return span(leftCharPos, right);\n }\n }).when(IsInvisible, MatchAny, left => new InvisibleSpan(left.kind, BROKEN_LOCATION).wrap()).when(MatchAny, IsInvisible, (_, right) => new InvisibleSpan(right.kind, BROKEN_LOCATION).wrap()));\n\n /**\n * All positions have these details in common. Most notably, all three kinds of positions can\n * must be able to attempt to convert themselves into {@see CharPosition}.\n */\n\n /**\n * Used to indicate that an attempt to convert a `SourcePosition` to a character offset failed. It\n * is separate from `null` so that `null` can be used to indicate that the computation wasn't yet\n * attempted (and therefore to cache the failure)\n */\n const BROKEN = 'BROKEN';\n /**\n * A `SourceOffset` represents a single position in the source.\n *\n * There are three kinds of backing data for `SourceOffset` objects:\n *\n * - `CharPosition`, which contains a character offset into the raw source string\n * - `HbsPosition`, which contains a `SourcePosition` from the Handlebars AST, which can be\n * converted to a `CharPosition` on demand.\n * - `InvisiblePosition`, which represents a position not in source (@see {InvisiblePosition})\n */\n class SourceOffset {\n /**\n * Create a `SourceOffset` from a Handlebars `SourcePosition`. It's stored as-is, and converted\n * into a character offset on demand, which avoids unnecessarily computing the offset of every\n * `SourceLocation`, but also means that broken `SourcePosition`s are not always detected.\n */\n static forHbsPos(source, pos) {\n return new HbsPosition(source, pos, null).wrap();\n }\n\n /**\n * Create a `SourceOffset` that corresponds to a broken `SourcePosition`. This means that the\n * calling code determined (or knows) that the `SourceLocation` doesn't correspond correctly to\n * any part of the source.\n */\n static broken(pos) {\n if (pos === void 0) {\n pos = UNKNOWN_POSITION;\n }\n return new InvisiblePosition(OffsetKind.Broken, pos).wrap();\n }\n constructor(data) {\n this.data = data;\n }\n\n /**\n * Get the character offset for this `SourceOffset`, if possible.\n */\n get offset() {\n const charPos = this.data.toCharPos();\n return charPos === null ? null : charPos.offset;\n }\n\n /**\n * Compare this offset with another one.\n *\n * If both offsets are `HbsPosition`s, they're equivalent as long as their lines and columns are\n * the same. This avoids computing offsets unnecessarily.\n *\n * Otherwise, two `SourceOffset`s are equivalent if their successfully computed character offsets\n * are the same.\n */\n eql(right) {\n return eql(this.data, right.data);\n }\n\n /**\n * Create a span that starts from this source offset and ends with another source offset. Avoid\n * computing character offsets if both `SourceOffset`s are still lazy.\n */\n until(other) {\n return span(this.data, other.data);\n }\n\n /**\n * Create a `SourceOffset` by moving the character position represented by this source offset\n * forward or backward (if `by` is negative), if possible.\n *\n * If this `SourceOffset` can't compute a valid character offset, `move` returns a broken offset.\n *\n * If the resulting character offset is less than 0 or greater than the size of the source, `move`\n * returns a broken offset.\n */\n move(by) {\n const charPos = this.data.toCharPos();\n if (charPos === null) {\n return SourceOffset.broken();\n } else {\n const result = charPos.offset + by;\n if (charPos.source.check(result)) {\n return new CharPosition(charPos.source, result).wrap();\n } else {\n return SourceOffset.broken();\n }\n }\n }\n\n /**\n * Create a new `SourceSpan` that represents a collapsed range at this source offset. Avoid\n * computing the character offset if it has not already been computed.\n */\n collapsed() {\n return span(this.data, this.data);\n }\n\n /**\n * Convert this `SourceOffset` into a Handlebars {@see SourcePosition} for compatibility with\n * existing plugins.\n */\n toJSON() {\n return this.data.toJSON();\n }\n }\n class CharPosition {\n constructor(source, charPos) {\n this.kind = OffsetKind.CharPosition;\n /** Computed from char offset */\n this._locPos = null;\n this.source = source;\n this.charPos = charPos;\n }\n\n /**\n * This is already a `CharPosition`.\n *\n * {@see HbsPosition} for the alternative.\n */\n toCharPos() {\n return this;\n }\n\n /**\n * Produce a Handlebars {@see SourcePosition} for this `CharPosition`. If this `CharPosition` was\n * computed using {@see SourceOffset#move}, this will compute the `SourcePosition` for the offset.\n */\n toJSON() {\n const hbs = this.toHbsPos();\n return hbs === null ? UNKNOWN_POSITION : hbs.toJSON();\n }\n wrap() {\n return new SourceOffset(this);\n }\n\n /**\n * A `CharPosition` always has an offset it can produce without any additional computation.\n */\n get offset() {\n return this.charPos;\n }\n\n /**\n * Convert the current character offset to an `HbsPosition`, if it was not already computed. Once\n * a `CharPosition` has computed its `HbsPosition`, it will not need to do compute it again, and\n * the same `CharPosition` is retained when used as one of the ends of a `SourceSpan`, so\n * computing the `HbsPosition` should be a one-time operation.\n */\n toHbsPos() {\n let locPos = this._locPos;\n if (locPos === null) {\n const hbsPos = this.source.hbsPosFor(this.charPos);\n if (hbsPos === null) {\n this._locPos = locPos = BROKEN;\n } else {\n this._locPos = locPos = new HbsPosition(this.source, hbsPos, this.charPos);\n }\n }\n return locPos === BROKEN ? null : locPos;\n }\n }\n class HbsPosition {\n constructor(source, hbsPos, charPos) {\n if (charPos === void 0) {\n charPos = null;\n }\n this.kind = OffsetKind.HbsPosition;\n this._charPos = void 0;\n this.source = source;\n this.hbsPos = hbsPos;\n this._charPos = charPos === null ? null : new CharPosition(source, charPos);\n }\n\n /**\n * Lazily compute the character offset from the {@see SourcePosition}. Once an `HbsPosition` has\n * computed its `CharPosition`, it will not need to do compute it again, and the same\n * `HbsPosition` is retained when used as one of the ends of a `SourceSpan`, so computing the\n * `CharPosition` should be a one-time operation.\n */\n toCharPos() {\n let charPos = this._charPos;\n if (charPos === null) {\n const charPosNumber = this.source.charPosFor(this.hbsPos);\n if (charPosNumber === null) {\n this._charPos = charPos = BROKEN;\n } else {\n this._charPos = charPos = new CharPosition(this.source, charPosNumber);\n }\n }\n return charPos === BROKEN ? null : charPos;\n }\n\n /**\n * Return the {@see SourcePosition} that this `HbsPosition` was instantiated with. This operation\n * does not need to compute anything.\n */\n toJSON() {\n return this.hbsPos;\n }\n wrap() {\n return new SourceOffset(this);\n }\n\n /**\n * This is already an `HbsPosition`.\n *\n * {@see CharPosition} for the alternative.\n */\n toHbsPos() {\n return this;\n }\n }\n class InvisiblePosition {\n constructor(kind,\n // whatever was provided, possibly broken\n pos) {\n this.kind = kind;\n this.pos = pos;\n }\n\n /**\n * A broken position cannot be turned into a {@see CharacterPosition}.\n */\n toCharPos() {\n return null;\n }\n\n /**\n * The serialization of an `InvisiblePosition is whatever Handlebars {@see SourcePosition} was\n * originally identified as broken, non-existent or synthetic.\n *\n * If an `InvisiblePosition` never had an source offset at all, this method returns\n * {@see UNKNOWN_POSITION} for compatibility.\n */\n toJSON() {\n return this.pos;\n }\n wrap() {\n return new SourceOffset(this);\n }\n get offset() {\n return null;\n }\n }\n\n /**\n * Compare two {@see AnyPosition} and determine whether they are equal.\n *\n * @see {SourceOffset#eql}\n */\n const eql = match(m => m.when(OffsetKind.HbsPosition, OffsetKind.HbsPosition, (_ref6, _ref7) => {\n let {\n hbsPos: left\n } = _ref6;\n let {\n hbsPos: right\n } = _ref7;\n return left.column === right.column && left.line === right.line;\n }).when(OffsetKind.CharPosition, OffsetKind.CharPosition, (_ref8, _ref9) => {\n let {\n charPos: left\n } = _ref8;\n let {\n charPos: right\n } = _ref9;\n return left === right;\n }).when(OffsetKind.CharPosition, OffsetKind.HbsPosition, (_ref10, right) => {\n var _right$toCharPos;\n let {\n offset: left\n } = _ref10;\n return left === ((_right$toCharPos = right.toCharPos()) == null ? void 0 : _right$toCharPos.offset);\n }).when(OffsetKind.HbsPosition, OffsetKind.CharPosition, (left, _ref11) => {\n var _left$toCharPos;\n let {\n offset: right\n } = _ref11;\n return ((_left$toCharPos = left.toCharPos()) == null ? void 0 : _left$toCharPos.offset) === right;\n }).when(MatchAny, MatchAny, () => false));\n class Source {\n static from(source, options) {\n var _options$meta;\n if (options === void 0) {\n options = {};\n }\n return new Source(source, (_options$meta = options.meta) == null ? void 0 : _options$meta.moduleName);\n }\n constructor(source, module) {\n if (module === void 0) {\n module = 'an unknown module';\n }\n this.source = source;\n this.module = module;\n }\n\n /**\n * Validate that the character offset represents a position in the source string.\n */\n check(offset) {\n return offset >= 0 && offset <= this.source.length;\n }\n slice(start, end) {\n return this.source.slice(start, end);\n }\n offsetFor(line, column) {\n return SourceOffset.forHbsPos(this, {\n line,\n column\n });\n }\n spanFor(_ref12) {\n let {\n start,\n end\n } = _ref12;\n return SourceSpan.forHbsLoc(this, {\n start: {\n line: start.line,\n column: start.column\n },\n end: {\n line: end.line,\n column: end.column\n }\n });\n }\n hbsPosFor(offset) {\n let seenLines = 0;\n let seenChars = 0;\n if (offset > this.source.length) {\n return null;\n }\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n let nextLine = this.source.indexOf('\\n', seenChars);\n if (offset <= nextLine || nextLine === -1) {\n return {\n line: seenLines + 1,\n column: offset - seenChars\n };\n } else {\n seenLines += 1;\n seenChars = nextLine + 1;\n }\n }\n }\n charPosFor(position) {\n let {\n line,\n column\n } = position;\n let sourceString = this.source;\n let sourceLength = sourceString.length;\n let seenLines = 0;\n let seenChars = 0;\n while (seenChars < sourceLength) {\n let nextLine = this.source.indexOf('\\n', seenChars);\n if (nextLine === -1) nextLine = this.source.length;\n if (seenLines === line - 1) {\n if (seenChars + column > nextLine) return nextLine;\n if (true /* DEBUG */) {\n let roundTrip = this.hbsPosFor(seenChars + column);\n (0, _util.assert)(roundTrip !== null, \"the returned offset failed to round-trip\");\n (0, _util.assert)(roundTrip.line === line, \"the round-tripped line didn't match the original line\");\n (0, _util.assert)(roundTrip.column === column, \"the round-tripped column didn't match the original column\");\n }\n return seenChars + column;\n } else if (nextLine === -1) {\n return 0;\n } else {\n seenLines += 1;\n seenChars = nextLine + 1;\n }\n }\n return sourceLength;\n }\n }\n class SpanList {\n static range(span, fallback) {\n if (fallback === void 0) {\n fallback = SourceSpan.NON_EXISTENT;\n }\n return new SpanList(span.map(loc)).getRangeOffset(fallback);\n }\n constructor(span) {\n if (span === void 0) {\n span = [];\n }\n this._span = void 0;\n this._span = span;\n }\n add(offset) {\n this._span.push(offset);\n }\n getRangeOffset(fallback) {\n if ((0, _util.isPresentArray)(this._span)) {\n let first = (0, _util.getFirst)(this._span);\n let last = (0, _util.getLast)(this._span);\n return first.extend(last);\n } else {\n return fallback;\n }\n }\n }\n _exports.SpanList = SpanList;\n function loc(span) {\n if (Array.isArray(span)) {\n let first = (0, _util.getFirst)(span);\n let last = (0, _util.getLast)(span);\n return loc(first).extend(loc(last));\n } else if (span instanceof SourceSpan) {\n return span;\n } else {\n return span.loc;\n }\n }\n function hasSpan(span) {\n if (Array.isArray(span) && span.length === 0) {\n return false;\n }\n return true;\n }\n function maybeLoc(location, fallback) {\n if (hasSpan(location)) {\n return loc(location);\n } else {\n return fallback;\n }\n }\n var api$2 = _exports.src = /*#__PURE__*/Object.freeze({\n __proto__: null,\n NON_EXISTENT_LOCATION: NON_EXISTENT_LOCATION,\n SYNTHETIC_LOCATION: SYNTHETIC_LOCATION,\n Source: Source,\n SourceOffset: SourceOffset,\n SourceSlice: SourceSlice,\n SourceSpan: SourceSpan,\n SpanList: SpanList,\n UNKNOWN_POSITION: UNKNOWN_POSITION,\n hasSpan: hasSpan,\n loc: loc,\n maybeLoc: maybeLoc\n });\n function generateSyntaxError(message, location) {\n let {\n module,\n loc\n } = location;\n let {\n line,\n column\n } = loc.start;\n let code = location.asString();\n let quotedCode = code ? \"\\n\\n|\\n| \" + code.split('\\n').join('\\n| ') + \"\\n|\\n\\n\" : '';\n let error = new Error(message + \": \" + quotedCode + \"(error occurred in '\" + module + \"' @ line \" + line + \" : column \" + column + \")\");\n error.name = 'SyntaxError';\n error.location = location;\n error.code = code;\n return error;\n }\n\n // ensure stays in sync with typing\n // ParentNode and ChildKey types are derived from VisitorKeysMap\n const visitorKeys = _exports.visitorKeys = {\n Program: ['body'],\n Template: ['body'],\n Block: ['body'],\n MustacheStatement: ['path', 'params', 'hash'],\n BlockStatement: ['path', 'params', 'hash', 'program', 'inverse'],\n ElementModifierStatement: ['path', 'params', 'hash'],\n PartialStatement: ['name', 'params', 'hash'],\n CommentStatement: [],\n MustacheCommentStatement: [],\n ElementNode: ['attributes', 'modifiers', 'children', 'comments'],\n AttrNode: ['value'],\n TextNode: [],\n ConcatStatement: ['parts'],\n SubExpression: ['path', 'params', 'hash'],\n PathExpression: [],\n PathHead: [],\n StringLiteral: [],\n BooleanLiteral: [],\n NumberLiteral: [],\n NullLiteral: [],\n UndefinedLiteral: [],\n Hash: ['pairs'],\n HashPair: ['value'],\n // v2 new nodes\n NamedBlock: ['attributes', 'modifiers', 'children', 'comments'],\n SimpleElement: ['attributes', 'modifiers', 'children', 'comments'],\n Component: ['head', 'attributes', 'modifiers', 'children', 'comments']\n };\n const TraversalError = function () {\n TraversalError.prototype = Object.create(Error.prototype);\n TraversalError.prototype.constructor = TraversalError;\n function TraversalError(message, node, parent, key) {\n let error = Error.call(this, message);\n this.key = key;\n this.message = message;\n this.node = node;\n this.parent = parent;\n if (error.stack) {\n this.stack = error.stack;\n }\n }\n return TraversalError;\n }();\n function cannotRemoveNode(node, parent, key) {\n return new TraversalError('Cannot remove a node unless it is part of an array', node, parent, key);\n }\n function cannotReplaceNode(node, parent, key) {\n return new TraversalError('Cannot replace a node with multiple nodes unless it is part of an array', node, parent, key);\n }\n function cannotReplaceOrRemoveInKeyHandlerYet(node, key) {\n return new TraversalError('Replacing and removing in key handlers is not yet supported.', node, null, key);\n }\n class WalkerPath {\n constructor(node, parent, parentKey) {\n if (parent === void 0) {\n parent = null;\n }\n if (parentKey === void 0) {\n parentKey = null;\n }\n this.node = void 0;\n this.parent = void 0;\n this.parentKey = void 0;\n this.node = node;\n this.parent = parent;\n this.parentKey = parentKey;\n }\n get parentNode() {\n return this.parent ? this.parent.node : null;\n }\n parents() {\n return {\n [Symbol.iterator]: () => {\n return new PathParentsIterator(this);\n }\n };\n }\n }\n _exports.WalkerPath = WalkerPath;\n class PathParentsIterator {\n constructor(path) {\n this.path = void 0;\n this.path = path;\n }\n next() {\n if (this.path.parent) {\n this.path = this.path.parent;\n return {\n done: false,\n value: this.path\n };\n } else {\n return {\n done: true,\n value: null\n };\n }\n }\n }\n function getEnterFunction(handler) {\n if (typeof handler === 'function') {\n return handler;\n } else {\n return handler.enter;\n }\n }\n function getExitFunction(handler) {\n if (typeof handler === 'function') {\n return undefined;\n } else {\n return handler.exit;\n }\n }\n function getKeyHandler(handler, key) {\n let keyVisitor = typeof handler !== 'function' ? handler.keys : undefined;\n if (keyVisitor === undefined) return;\n let keyHandler = keyVisitor[key];\n if (keyHandler !== undefined) {\n return keyHandler;\n }\n return keyVisitor.All;\n }\n function getNodeHandler(visitor, nodeType) {\n if (nodeType === 'Template' || nodeType === 'Block') {\n if (visitor.Program) {\n return visitor.Program;\n }\n }\n let handler = visitor[nodeType];\n if (handler !== undefined) {\n return handler;\n }\n return visitor.All;\n }\n function visitNode(visitor, path) {\n let {\n node,\n parent,\n parentKey\n } = path;\n let handler = getNodeHandler(visitor, node.type);\n let enter;\n let exit;\n if (handler !== undefined) {\n enter = getEnterFunction(handler);\n exit = getExitFunction(handler);\n }\n let result;\n if (enter !== undefined) {\n result = enter(node, path);\n }\n if (result !== undefined && result !== null) {\n if (JSON.stringify(node) === JSON.stringify(result)) {\n result = undefined;\n } else if (Array.isArray(result)) {\n visitArray(visitor, result, parent, parentKey);\n return result;\n } else {\n let path = new WalkerPath(result, parent, parentKey);\n return visitNode(visitor, path) || result;\n }\n }\n if (result === undefined) {\n let keys = visitorKeys[node.type];\n for (let i = 0; i < keys.length; i++) {\n let key = keys[i];\n // we know if it has child keys we can widen to a ParentNode\n visitKey(visitor, handler, path, key);\n }\n if (exit !== undefined) {\n result = exit(node, path);\n }\n }\n return result;\n }\n function get(node, key) {\n return node[key];\n }\n function set(node, key, value) {\n node[key] = value;\n }\n function visitKey(visitor, handler, path, key) {\n let {\n node\n } = path;\n let value = get(node, key);\n if (!value) {\n return;\n }\n let keyEnter;\n let keyExit;\n if (handler !== undefined) {\n let keyHandler = getKeyHandler(handler, key);\n if (keyHandler !== undefined) {\n keyEnter = getEnterFunction(keyHandler);\n keyExit = getExitFunction(keyHandler);\n }\n }\n if (keyEnter !== undefined) {\n if (keyEnter(node, key) !== undefined) {\n throw cannotReplaceOrRemoveInKeyHandlerYet(node, key);\n }\n }\n if (Array.isArray(value)) {\n visitArray(visitor, value, path, key);\n } else {\n let keyPath = new WalkerPath(value, path, key);\n let result = visitNode(visitor, keyPath);\n if (result !== undefined) {\n // TODO: dynamically check the results by having a table of\n // expected node types in value space, not just type space\n\n assignKey(node, key, value, result);\n }\n }\n if (keyExit !== undefined) {\n if (keyExit(node, key) !== undefined) {\n throw cannotReplaceOrRemoveInKeyHandlerYet(node, key);\n }\n }\n }\n function visitArray(visitor, array, parent, parentKey) {\n for (let i = 0; i < array.length; i++) {\n let node = (0, _util.unwrap)(array[i]);\n let path = new WalkerPath(node, parent, parentKey);\n let result = visitNode(visitor, path);\n if (result !== undefined) {\n i += spliceArray(array, i, result) - 1;\n }\n }\n }\n function assignKey(node, key, value, result) {\n if (result === null) {\n throw cannotRemoveNode(value, node, key);\n } else if (Array.isArray(result)) {\n if (result.length === 1) {\n set(node, key, result[0]);\n } else {\n if (result.length === 0) {\n throw cannotRemoveNode(value, node, key);\n } else {\n throw cannotReplaceNode(value, node, key);\n }\n }\n } else {\n set(node, key, result);\n }\n }\n function spliceArray(array, index, result) {\n if (result === null) {\n array.splice(index, 1);\n return 0;\n } else if (Array.isArray(result)) {\n array.splice(index, 1, ...result);\n return result.length;\n } else {\n array.splice(index, 1, result);\n return 1;\n }\n }\n function traverse(node, visitor) {\n let path = new WalkerPath(node);\n visitNode(visitor, path);\n }\n class Walker {\n constructor(order) {\n this.stack = [];\n this.order = order;\n }\n visit(node, visitor) {\n if (!node) {\n return;\n }\n this.stack.push(node);\n if (this.order === 'post') {\n this.children(node, visitor);\n visitor(node, this);\n } else {\n visitor(node, this);\n this.children(node, visitor);\n }\n this.stack.pop();\n }\n children(node, callback) {\n switch (node.type) {\n case 'Block':\n case 'Template':\n return visitors.Program(this, node, callback);\n case 'ElementNode':\n return visitors.ElementNode(this, node, callback);\n case 'BlockStatement':\n return visitors.BlockStatement(this, node, callback);\n default:\n return;\n }\n }\n }\n _exports.Walker = _exports.Path = Walker;\n const visitors = {\n Program(walker, node, callback) {\n walkBody(walker, node.body, callback);\n },\n Template(walker, node, callback) {\n walkBody(walker, node.body, callback);\n },\n Block(walker, node, callback) {\n walkBody(walker, node.body, callback);\n },\n ElementNode(walker, node, callback) {\n walkBody(walker, node.children, callback);\n },\n BlockStatement(walker, node, callback) {\n walker.visit(node.program, callback);\n walker.visit(node.inverse || null, callback);\n }\n };\n function walkBody(walker, body, callback) {\n for (const child of body) {\n walker.visit(child, callback);\n }\n }\n\n // Regex to validate the identifier for block parameters.\n // Based on the ID validation regex in Handlebars.\n\n let ID_INVERSE_PATTERN = /[!\"#%&'()*+./;<=>@[\\\\\\]^`{|}~]/u;\n\n // Checks the element's attributes to see if it uses block params.\n // If it does, registers the block params with the program and\n // removes the corresponding attributes from the element.\n\n function parseElementBlockParams(element) {\n let params = parseBlockParams(element);\n if (params) element.blockParams = params;\n }\n function parseBlockParams(element) {\n let l = element.attributes.length;\n let attrNames = [];\n for (let i = 0; i < l; i++) {\n attrNames.push((0, _util.unwrap)(element.attributes[i]).name);\n }\n let asIndex = attrNames.indexOf('as');\n if (asIndex === -1 && attrNames.length > 0 && (0, _util.unwrap)(attrNames[attrNames.length - 1]).charAt(0) === '|') {\n throw generateSyntaxError('Block parameters must be preceded by the `as` keyword, detected block parameters without `as`', element.loc);\n }\n if (asIndex !== -1 && l > asIndex && (0, _util.unwrap)(attrNames[asIndex + 1]).charAt(0) === '|') {\n // Some basic validation, since we're doing the parsing ourselves\n let paramsString = attrNames.slice(asIndex).join(' ');\n if (paramsString.charAt(paramsString.length - 1) !== '|' || (0, _util.expect)(paramsString.match(/\\|/gu), \"block params must exist here\").length !== 2) {\n throw generateSyntaxError(\"Invalid block parameters syntax, '\" + paramsString + \"'\", element.loc);\n }\n let params = [];\n for (let i = asIndex + 1; i < l; i++) {\n let param = (0, _util.unwrap)(attrNames[i]).replace(/\\|/gu, '');\n if (param !== '') {\n if (ID_INVERSE_PATTERN.test(param)) {\n throw generateSyntaxError(\"Invalid identifier for block parameters, '\" + param + \"'\", element.loc);\n }\n params.push(param);\n }\n }\n if (params.length === 0) {\n throw generateSyntaxError('Cannot use zero block parameters', element.loc);\n }\n element.attributes = element.attributes.slice(0, asIndex);\n return params;\n }\n return null;\n }\n function childrenFor(node) {\n switch (node.type) {\n case 'Block':\n case 'Template':\n return node.body;\n case 'ElementNode':\n return node.children;\n }\n }\n function appendChild(parent, node) {\n childrenFor(parent).push(node);\n }\n function isHBSLiteral(path) {\n return path.type === 'StringLiteral' || path.type === 'BooleanLiteral' || path.type === 'NumberLiteral' || path.type === 'NullLiteral' || path.type === 'UndefinedLiteral';\n }\n function printLiteral(literal) {\n if (literal.type === 'UndefinedLiteral') {\n return 'undefined';\n } else {\n return JSON.stringify(literal.value);\n }\n }\n function isUpperCase(tag) {\n var _tag$2, _tag$3;\n return tag[0] === ((_tag$2 = tag[0]) == null ? void 0 : _tag$2.toUpperCase()) && tag[0] !== ((_tag$3 = tag[0]) == null ? void 0 : _tag$3.toLowerCase());\n }\n function isLowerCase(tag) {\n var _tag$4, _tag$5;\n return tag[0] === ((_tag$4 = tag[0]) == null ? void 0 : _tag$4.toLowerCase()) && tag[0] !== ((_tag$5 = tag[0]) == null ? void 0 : _tag$5.toUpperCase());\n }\n let _SOURCE;\n function SOURCE() {\n if (!_SOURCE) {\n _SOURCE = new Source('', '(synthetic)');\n }\n return _SOURCE;\n }\n\n // const SOURCE = new Source('', '(tests)');\n\n // Statements\n function buildMustache(path, params, hash, raw, loc, strip) {\n if (typeof path === 'string') {\n path = buildPath(path);\n }\n return {\n type: 'MustacheStatement',\n path,\n params: params || [],\n hash: hash || buildHash([]),\n escaped: !raw,\n trusting: !!raw,\n loc: buildLoc(loc || null),\n strip: strip || {\n open: false,\n close: false\n }\n };\n }\n function buildBlock(path, params, hash, _defaultBlock, _elseBlock, loc, openStrip, inverseStrip, closeStrip) {\n let defaultBlock;\n let elseBlock;\n if (_defaultBlock.type === 'Template') {\n defaultBlock = (0, _util.assign)({}, _defaultBlock, {\n type: 'Block'\n });\n } else {\n defaultBlock = _defaultBlock;\n }\n if (_elseBlock !== undefined && _elseBlock !== null && _elseBlock.type === 'Template') {\n elseBlock = (0, _util.assign)({}, _elseBlock, {\n type: 'Block'\n });\n } else {\n elseBlock = _elseBlock;\n }\n return {\n type: 'BlockStatement',\n path: buildPath(path),\n params: params || [],\n hash: hash || buildHash([]),\n program: defaultBlock || null,\n inverse: elseBlock || null,\n loc: buildLoc(loc || null),\n openStrip: openStrip || {\n open: false,\n close: false\n },\n inverseStrip: inverseStrip || {\n open: false,\n close: false\n },\n closeStrip: closeStrip || {\n open: false,\n close: false\n }\n };\n }\n function buildElementModifier(path, params, hash, loc) {\n return {\n type: 'ElementModifierStatement',\n path: buildPath(path),\n params: params || [],\n hash: hash || buildHash([]),\n loc: buildLoc(loc || null)\n };\n }\n function buildPartial(name, params, hash, indent, loc) {\n return {\n type: 'PartialStatement',\n name: name,\n params: params || [],\n hash: hash || buildHash([]),\n indent: indent || '',\n strip: {\n open: false,\n close: false\n },\n loc: buildLoc(loc || null)\n };\n }\n function buildComment(value, loc) {\n return {\n type: 'CommentStatement',\n value: value,\n loc: buildLoc(loc || null)\n };\n }\n function buildMustacheComment(value, loc) {\n return {\n type: 'MustacheCommentStatement',\n value: value,\n loc: buildLoc(loc || null)\n };\n }\n function buildConcat(parts, loc) {\n if (!(0, _util.isPresentArray)(parts)) {\n throw new Error(\"b.concat requires at least one part\");\n }\n return {\n type: 'ConcatStatement',\n parts: parts || [],\n loc: buildLoc(loc || null)\n };\n }\n\n // Nodes\n\n function buildElement(tag, options) {\n if (options === void 0) {\n options = {};\n }\n let {\n attrs,\n blockParams,\n modifiers,\n comments,\n children,\n loc\n } = options;\n let tagName;\n\n // this is used for backwards compat, prior to `selfClosing` being part of the ElementNode AST\n let selfClosing = false;\n if (typeof tag === 'object') {\n selfClosing = tag.selfClosing;\n tagName = tag.name;\n } else if (tag.slice(-1) === '/') {\n tagName = tag.slice(0, -1);\n selfClosing = true;\n } else {\n tagName = tag;\n }\n return {\n type: 'ElementNode',\n tag: tagName,\n selfClosing: selfClosing,\n attributes: attrs || [],\n blockParams: blockParams || [],\n modifiers: modifiers || [],\n comments: comments || [],\n children: children || [],\n loc: buildLoc(loc || null)\n };\n }\n function buildAttr(name, value, loc) {\n return {\n type: 'AttrNode',\n name: name,\n value: value,\n loc: buildLoc(loc || null)\n };\n }\n function buildText(chars, loc) {\n return {\n type: 'TextNode',\n chars: chars || '',\n loc: buildLoc(loc || null)\n };\n }\n\n // Expressions\n\n function buildSexpr(path, params, hash, loc) {\n return {\n type: 'SubExpression',\n path: buildPath(path),\n params: params || [],\n hash: hash || buildHash([]),\n loc: buildLoc(loc || null)\n };\n }\n function headToString$1(head) {\n switch (head.type) {\n case 'AtHead':\n return {\n original: head.name,\n parts: [head.name]\n };\n case 'ThisHead':\n return {\n original: \"this\",\n parts: []\n };\n case 'VarHead':\n return {\n original: head.name,\n parts: [head.name]\n };\n }\n }\n function buildHead(original, loc) {\n let [head, ...tail] = (0, _util.asPresentArray)(original.split('.'));\n let headNode;\n if (head === 'this') {\n headNode = {\n type: 'ThisHead',\n loc: buildLoc(loc || null)\n };\n } else if (head[0] === '@') {\n headNode = {\n type: 'AtHead',\n name: head,\n loc: buildLoc(loc || null)\n };\n } else {\n headNode = {\n type: 'VarHead',\n name: head,\n loc: buildLoc(loc || null)\n };\n }\n return {\n head: headNode,\n tail\n };\n }\n function buildThis(loc) {\n return {\n type: 'ThisHead',\n loc: buildLoc(loc || null)\n };\n }\n function buildAtName(name, loc) {\n // the `@` should be included so we have a complete source range\n (0, _util.assert)(name[0] === '@', \"call builders.at() with a string that starts with '@'\");\n return {\n type: 'AtHead',\n name,\n loc: buildLoc(loc || null)\n };\n }\n function buildVar(name, loc) {\n (0, _util.assert)(name !== 'this', \"You called builders.var() with 'this'. Call builders.this instead\");\n (0, _util.assert)(name[0] !== '@', \"You called builders.var() with '\" + name + \"'. Call builders.at('\" + name + \"') instead\");\n return {\n type: 'VarHead',\n name,\n loc: buildLoc(loc || null)\n };\n }\n function buildHeadFromString(head, loc) {\n if (head[0] === '@') {\n return buildAtName(head, loc);\n } else if (head === 'this') {\n return buildThis(loc);\n } else {\n return buildVar(head, loc);\n }\n }\n function buildNamedBlockName(name, loc) {\n return {\n type: 'NamedBlockName',\n name,\n loc: buildLoc(loc || null)\n };\n }\n function buildCleanPath(head, tail, loc) {\n let {\n original: originalHead,\n parts: headParts\n } = headToString$1(head);\n let parts = [...headParts, ...tail];\n let original = [...originalHead, ...parts].join('.');\n return new PathExpressionImplV1(original, head, tail, buildLoc(loc || null));\n }\n function buildPath(path, loc) {\n if (typeof path !== 'string') {\n if ('type' in path) {\n return path;\n } else {\n let {\n head,\n tail\n } = buildHead(path.head, SourceSpan.broken());\n (0, _util.assert)(tail.length === 0, \"builder.path({ head, tail }) should not be called with a head with dots in it\");\n let {\n original: originalHead\n } = headToString$1(head);\n return new PathExpressionImplV1([originalHead, ...tail].join('.'), head, tail, buildLoc(loc || null));\n }\n }\n let {\n head,\n tail\n } = buildHead(path, SourceSpan.broken());\n return new PathExpressionImplV1(path, head, tail, buildLoc(loc || null));\n }\n function buildLiteral(type, value, loc) {\n return {\n type,\n value,\n original: value,\n loc: buildLoc(loc || null)\n };\n }\n\n // Miscellaneous\n\n function buildHash(pairs, loc) {\n return {\n type: 'Hash',\n pairs: pairs || [],\n loc: buildLoc(loc || null)\n };\n }\n function buildPair(key, value, loc) {\n return {\n type: 'HashPair',\n key: key,\n value,\n loc: buildLoc(loc || null)\n };\n }\n function buildProgram(body, blockParams, loc) {\n return {\n type: 'Template',\n body: body || [],\n blockParams: blockParams || [],\n loc: buildLoc(loc || null)\n };\n }\n function buildBlockItself(body, blockParams, chained, loc) {\n if (chained === void 0) {\n chained = false;\n }\n return {\n type: 'Block',\n body: body || [],\n blockParams: blockParams || [],\n chained,\n loc: buildLoc(loc || null)\n };\n }\n function buildTemplate(body, blockParams, loc) {\n return {\n type: 'Template',\n body: body || [],\n blockParams: blockParams || [],\n loc: buildLoc(loc || null)\n };\n }\n function buildPosition(line, column) {\n return {\n line,\n column\n };\n }\n function buildLoc() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (args.length === 1) {\n let loc = args[0];\n if (loc && typeof loc === 'object') {\n return SourceSpan.forHbsLoc(SOURCE(), loc);\n } else {\n return SourceSpan.forHbsLoc(SOURCE(), SYNTHETIC_LOCATION);\n }\n } else {\n let [startLine, startColumn, endLine, endColumn, _source] = args;\n let source = _source ? new Source('', _source) : SOURCE();\n return SourceSpan.forHbsLoc(source, {\n start: {\n line: startLine,\n column: startColumn\n },\n end: {\n line: endLine,\n column: endColumn\n }\n });\n }\n }\n var publicBuilder = _exports.builders = {\n mustache: buildMustache,\n block: buildBlock,\n partial: buildPartial,\n comment: buildComment,\n mustacheComment: buildMustacheComment,\n element: buildElement,\n elementModifier: buildElementModifier,\n attr: buildAttr,\n text: buildText,\n sexpr: buildSexpr,\n concat: buildConcat,\n hash: buildHash,\n pair: buildPair,\n literal: buildLiteral,\n program: buildProgram,\n blockItself: buildBlockItself,\n template: buildTemplate,\n loc: buildLoc,\n pos: buildPosition,\n path: buildPath,\n fullPath: buildCleanPath,\n head: buildHeadFromString,\n at: buildAtName,\n var: buildVar,\n this: buildThis,\n blockName: buildNamedBlockName,\n string: literal('StringLiteral'),\n boolean: literal('BooleanLiteral'),\n number: literal('NumberLiteral'),\n undefined() {\n return buildLiteral('UndefinedLiteral', undefined);\n },\n null() {\n return buildLiteral('NullLiteral', null);\n }\n };\n function literal(type) {\n return function (value, loc) {\n return buildLiteral(type, value, loc);\n };\n }\n class PathExpressionImplV1 {\n constructor(original, head, tail, loc) {\n this.type = 'PathExpression';\n this.parts = void 0;\n this.this = false;\n this.data = false;\n // Cache for the head value.\n this._head = undefined;\n this.original = original;\n this.loc = loc;\n let parts = tail.slice();\n if (head.type === 'ThisHead') {\n this.this = true;\n } else if (head.type === 'AtHead') {\n this.data = true;\n parts.unshift(head.name.slice(1));\n } else {\n parts.unshift(head.name);\n }\n this.parts = parts;\n }\n get head() {\n if (this._head) {\n return this._head;\n }\n let firstPart;\n if (this.this) {\n firstPart = 'this';\n } else if (this.data) {\n firstPart = \"@\" + (0, _util.getFirst)((0, _util.asPresentArray)(this.parts));\n } else {\n (0, _util.assertPresentArray)(this.parts);\n firstPart = (0, _util.getFirst)(this.parts);\n }\n let firstPartLoc = this.loc.collapse('start').sliceStartChars({\n chars: firstPart.length\n }).loc;\n return this._head = publicBuilder.head(firstPart, firstPartLoc);\n }\n get tail() {\n return this.this ? this.parts : this.parts.slice(1);\n }\n }\n const DEFAULT_STRIP = {\n close: false,\n open: false\n };\n\n /**\n * The Parser Builder differentiates from the public builder API by:\n *\n * 1. Offering fewer different ways to instantiate nodes\n * 2. Mandating source locations\n */\n class Builders {\n pos(line, column) {\n return {\n line,\n column\n };\n }\n blockItself(_ref13) {\n let {\n body = [],\n blockParams = [],\n chained = false,\n loc\n } = _ref13;\n return {\n type: 'Block',\n body: body,\n blockParams: blockParams,\n chained,\n loc\n };\n }\n template(_ref14) {\n let {\n body,\n blockParams,\n loc\n } = _ref14;\n return {\n type: 'Template',\n body: body || [],\n blockParams: blockParams || [],\n loc\n };\n }\n mustache(_ref15) {\n let {\n path,\n params,\n hash,\n trusting,\n loc,\n strip = DEFAULT_STRIP\n } = _ref15;\n return {\n type: 'MustacheStatement',\n path,\n params,\n hash,\n escaped: !trusting,\n trusting,\n loc,\n strip: strip || {\n open: false,\n close: false\n }\n };\n }\n block(_ref16) {\n let {\n path,\n params,\n hash,\n defaultBlock,\n elseBlock = null,\n loc,\n openStrip = DEFAULT_STRIP,\n inverseStrip = DEFAULT_STRIP,\n closeStrip = DEFAULT_STRIP\n } = _ref16;\n return {\n type: 'BlockStatement',\n path: path,\n params,\n hash,\n program: defaultBlock,\n inverse: elseBlock,\n loc: loc,\n openStrip: openStrip,\n inverseStrip: inverseStrip,\n closeStrip: closeStrip\n };\n }\n comment(value, loc) {\n return {\n type: 'CommentStatement',\n value: value,\n loc\n };\n }\n mustacheComment(value, loc) {\n return {\n type: 'MustacheCommentStatement',\n value: value,\n loc\n };\n }\n concat(parts, loc) {\n return {\n type: 'ConcatStatement',\n parts,\n loc\n };\n }\n element(_ref17) {\n let {\n tag,\n selfClosing,\n attrs,\n blockParams,\n modifiers,\n comments,\n children,\n loc\n } = _ref17;\n return {\n type: 'ElementNode',\n tag,\n selfClosing: selfClosing,\n attributes: attrs || [],\n blockParams: blockParams || [],\n modifiers: modifiers || [],\n comments: comments || [],\n children: children || [],\n loc\n };\n }\n elementModifier(_ref18) {\n let {\n path,\n params,\n hash,\n loc\n } = _ref18;\n return {\n type: 'ElementModifierStatement',\n path,\n params,\n hash,\n loc\n };\n }\n attr(_ref19) {\n let {\n name,\n value,\n loc\n } = _ref19;\n return {\n type: 'AttrNode',\n name: name,\n value: value,\n loc\n };\n }\n text(_ref20) {\n let {\n chars,\n loc\n } = _ref20;\n return {\n type: 'TextNode',\n chars,\n loc\n };\n }\n sexpr(_ref21) {\n let {\n path,\n params,\n hash,\n loc\n } = _ref21;\n return {\n type: 'SubExpression',\n path,\n params,\n hash,\n loc\n };\n }\n path(_ref22) {\n let {\n head,\n tail,\n loc\n } = _ref22;\n let {\n original: originalHead\n } = headToString(head);\n let original = [...originalHead, ...tail].join('.');\n return new PathExpressionImplV1(original, head, tail, loc);\n }\n head(head, loc) {\n if (head[0] === '@') {\n return this.atName(head, loc);\n } else if (head === 'this') {\n return this.this(loc);\n } else {\n return this.var(head, loc);\n }\n }\n this(loc) {\n return {\n type: 'ThisHead',\n loc\n };\n }\n atName(name, loc) {\n // the `@` should be included so we have a complete source range\n (0, _util.assert)(name[0] === '@', \"call builders.at() with a string that starts with '@'\");\n return {\n type: 'AtHead',\n name,\n loc\n };\n }\n var(name, loc) {\n (0, _util.assert)(name !== 'this', \"You called builders.var() with 'this'. Call builders.this instead\");\n (0, _util.assert)(name[0] !== '@', \"You called builders.var() with '\" + name + \"'. Call builders.at('\" + name + \"') instead\");\n return {\n type: 'VarHead',\n name,\n loc\n };\n }\n hash(pairs, loc) {\n return {\n type: 'Hash',\n pairs: pairs || [],\n loc\n };\n }\n pair(_ref23) {\n let {\n key,\n value,\n loc\n } = _ref23;\n return {\n type: 'HashPair',\n key: key,\n value,\n loc\n };\n }\n literal(_ref24) {\n let {\n type,\n value,\n loc\n } = _ref24;\n return {\n type,\n value,\n original: value,\n loc\n };\n }\n undefined() {\n return this.literal({\n type: 'UndefinedLiteral',\n value: undefined\n });\n }\n null() {\n return this.literal({\n type: 'NullLiteral',\n value: null\n });\n }\n string(value, loc) {\n return this.literal({\n type: 'StringLiteral',\n value,\n loc\n });\n }\n boolean(value, loc) {\n return this.literal({\n type: 'BooleanLiteral',\n value,\n loc\n });\n }\n number(value, loc) {\n return this.literal({\n type: 'NumberLiteral',\n value,\n loc\n });\n }\n }\n\n // Nodes\n\n // Expressions\n\n function headToString(head) {\n switch (head.type) {\n case 'AtHead':\n return {\n original: head.name,\n parts: [head.name]\n };\n case 'ThisHead':\n return {\n original: \"this\",\n parts: []\n };\n case 'VarHead':\n return {\n original: head.name,\n parts: [head.name]\n };\n }\n }\n var b = new Builders();\n class Parser {\n constructor(source, entityParser, mode) {\n if (entityParser === void 0) {\n entityParser = new _simpleHtmlTokenizer.EntityParser(_simpleHtmlTokenizer.HTML5NamedCharRefs);\n }\n if (mode === void 0) {\n mode = 'precompile';\n }\n this.elementStack = [];\n this.lines = void 0;\n this.source = void 0;\n this.currentAttribute = null;\n this.currentNode = null;\n this.tokenizer = void 0;\n this.source = source;\n this.lines = source.source.split(/\\r\\n?|\\n/u);\n this.tokenizer = new _simpleHtmlTokenizer.EventedTokenizer(this, entityParser, mode);\n }\n offset() {\n let {\n line,\n column\n } = this.tokenizer;\n return this.source.offsetFor(line, column);\n }\n pos(_ref25) {\n let {\n line,\n column\n } = _ref25;\n return this.source.offsetFor(line, column);\n }\n finish(node) {\n return (0, _util.assign)({}, node, {\n loc: node.loc.until(this.offset())\n });\n\n // node.loc = node.loc.withEnd(end);\n }\n\n get currentAttr() {\n return (0, _util.expect)(this.currentAttribute, 'expected attribute');\n }\n get currentTag() {\n let node = this.currentNode;\n (0, _util.assert)(node && (node.type === 'StartTag' || node.type === 'EndTag'), 'expected tag');\n return node;\n }\n get currentStartTag() {\n let node = this.currentNode;\n (0, _util.assert)(node && node.type === 'StartTag', 'expected start tag');\n return node;\n }\n get currentEndTag() {\n let node = this.currentNode;\n (0, _util.assert)(node && node.type === 'EndTag', 'expected end tag');\n return node;\n }\n get currentComment() {\n let node = this.currentNode;\n (0, _util.assert)(node && node.type === 'CommentStatement', 'expected a comment');\n return node;\n }\n get currentData() {\n let node = this.currentNode;\n (0, _util.assert)(node && node.type === 'TextNode', 'expected a text node');\n return node;\n }\n acceptTemplate(node) {\n return this[node.type](node);\n }\n acceptNode(node) {\n return this[node.type](node);\n }\n currentElement() {\n return (0, _util.getLast)((0, _util.asPresentArray)(this.elementStack));\n }\n sourceForNode(node, endNode) {\n let firstLine = node.loc.start.line - 1;\n let currentLine = firstLine - 1;\n let firstColumn = node.loc.start.column;\n let string = [];\n let line;\n let lastLine;\n let lastColumn;\n if (endNode) {\n lastLine = endNode.loc.end.line - 1;\n lastColumn = endNode.loc.end.column;\n } else {\n lastLine = node.loc.end.line - 1;\n lastColumn = node.loc.end.column;\n }\n while (currentLine < lastLine) {\n currentLine++;\n line = (0, _util.unwrap)(this.lines[currentLine]);\n if (currentLine === firstLine) {\n if (firstLine === lastLine) {\n string.push(line.slice(firstColumn, lastColumn));\n } else {\n string.push(line.slice(firstColumn));\n }\n } else if (currentLine === lastLine) {\n string.push(line.slice(0, lastColumn));\n } else {\n string.push(line);\n }\n }\n return string.join('\\n');\n }\n }\n const BEFORE_ATTRIBUTE_NAME = 'beforeAttributeName';\n const ATTRIBUTE_VALUE_UNQUOTED = 'attributeValueUnquoted';\n class HandlebarsNodeVisitors extends Parser {\n get isTopLevel() {\n return this.elementStack.length === 0;\n }\n Program(program) {\n const body = [];\n let node;\n if (this.isTopLevel) {\n node = b.template({\n body,\n blockParams: program.blockParams,\n loc: this.source.spanFor(program.loc)\n });\n } else {\n node = b.blockItself({\n body,\n blockParams: program.blockParams,\n chained: program.chained,\n loc: this.source.spanFor(program.loc)\n });\n }\n let i,\n l = program.body.length;\n this.elementStack.push(node);\n if (l === 0) {\n return this.elementStack.pop();\n }\n for (i = 0; i < l; i++) {\n this.acceptNode((0, _util.unwrap)(program.body[i]));\n }\n\n // Ensure that that the element stack is balanced properly.\n const poppedNode = this.elementStack.pop();\n if (poppedNode !== node) {\n const elementNode = poppedNode;\n throw generateSyntaxError(\"Unclosed element `\" + elementNode.tag + \"`\", elementNode.loc);\n }\n return node;\n }\n BlockStatement(block) {\n if (this.tokenizer.state === 'comment') {\n this.appendToCommentData(this.sourceForNode(block));\n return;\n }\n if (this.tokenizer.state !== 'data' && this.tokenizer.state !== 'beforeData') {\n throw generateSyntaxError('A block may only be used inside an HTML element or another block.', this.source.spanFor(block.loc));\n }\n const {\n path,\n params,\n hash\n } = acceptCallNodes(this, block);\n\n // These are bugs in Handlebars upstream\n if (!block.program.loc) {\n block.program.loc = NON_EXISTENT_LOCATION;\n }\n if (block.inverse && !block.inverse.loc) {\n block.inverse.loc = NON_EXISTENT_LOCATION;\n }\n const program = this.Program(block.program);\n const inverse = block.inverse ? this.Program(block.inverse) : null;\n const node = b.block({\n path,\n params,\n hash,\n defaultBlock: program,\n elseBlock: inverse,\n loc: this.source.spanFor(block.loc),\n openStrip: block.openStrip,\n inverseStrip: block.inverseStrip,\n closeStrip: block.closeStrip\n });\n const parentProgram = this.currentElement();\n appendChild(parentProgram, node);\n }\n MustacheStatement(rawMustache) {\n const {\n tokenizer\n } = this;\n if (tokenizer.state === 'comment') {\n this.appendToCommentData(this.sourceForNode(rawMustache));\n return;\n }\n let mustache;\n const {\n escaped,\n loc,\n strip\n } = rawMustache;\n if (isHBSLiteral(rawMustache.path)) {\n mustache = b.mustache({\n path: this.acceptNode(rawMustache.path),\n params: [],\n hash: b.hash([], this.source.spanFor(rawMustache.path.loc).collapse('end')),\n trusting: !escaped,\n loc: this.source.spanFor(loc),\n strip\n });\n } else {\n const {\n path,\n params,\n hash\n } = acceptCallNodes(this, rawMustache);\n mustache = b.mustache({\n path,\n params,\n hash,\n trusting: !escaped,\n loc: this.source.spanFor(loc),\n strip\n });\n }\n switch (tokenizer.state) {\n // Tag helpers\n case 'tagOpen':\n case 'tagName':\n throw generateSyntaxError(\"Cannot use mustaches in an elements tagname\", mustache.loc);\n case 'beforeAttributeName':\n addElementModifier(this.currentStartTag, mustache);\n break;\n case 'attributeName':\n case 'afterAttributeName':\n this.beginAttributeValue(false);\n this.finishAttributeValue();\n addElementModifier(this.currentStartTag, mustache);\n tokenizer.transitionTo(BEFORE_ATTRIBUTE_NAME);\n break;\n case 'afterAttributeValueQuoted':\n addElementModifier(this.currentStartTag, mustache);\n tokenizer.transitionTo(BEFORE_ATTRIBUTE_NAME);\n break;\n\n // Attribute values\n case 'beforeAttributeValue':\n this.beginAttributeValue(false);\n this.appendDynamicAttributeValuePart(mustache);\n tokenizer.transitionTo(ATTRIBUTE_VALUE_UNQUOTED);\n break;\n case 'attributeValueDoubleQuoted':\n case 'attributeValueSingleQuoted':\n case 'attributeValueUnquoted':\n this.appendDynamicAttributeValuePart(mustache);\n break;\n\n // TODO: Only append child when the tokenizer state makes\n // sense to do so, otherwise throw an error.\n default:\n appendChild(this.currentElement(), mustache);\n }\n return mustache;\n }\n appendDynamicAttributeValuePart(part) {\n this.finalizeTextPart();\n const attr = this.currentAttr;\n attr.isDynamic = true;\n attr.parts.push(part);\n }\n finalizeTextPart() {\n const attr = this.currentAttr;\n const text = attr.currentPart;\n if (text !== null) {\n this.currentAttr.parts.push(text);\n this.startTextPart();\n }\n }\n startTextPart() {\n this.currentAttr.currentPart = null;\n }\n ContentStatement(content) {\n updateTokenizerLocation(this.tokenizer, content);\n this.tokenizer.tokenizePart(content.value);\n this.tokenizer.flushData();\n }\n CommentStatement(rawComment) {\n const {\n tokenizer\n } = this;\n if (tokenizer.state === 'comment') {\n this.appendToCommentData(this.sourceForNode(rawComment));\n return null;\n }\n const {\n value,\n loc\n } = rawComment;\n const comment = b.mustacheComment(value, this.source.spanFor(loc));\n switch (tokenizer.state) {\n case 'beforeAttributeName':\n case 'afterAttributeName':\n this.currentStartTag.comments.push(comment);\n break;\n case 'beforeData':\n case 'data':\n appendChild(this.currentElement(), comment);\n break;\n default:\n throw generateSyntaxError(\"Using a Handlebars comment when in the `\" + tokenizer['state'] + \"` state is not supported\", this.source.spanFor(rawComment.loc));\n }\n return comment;\n }\n PartialStatement(partial) {\n throw generateSyntaxError(\"Handlebars partials are not supported\", this.source.spanFor(partial.loc));\n }\n PartialBlockStatement(partialBlock) {\n throw generateSyntaxError(\"Handlebars partial blocks are not supported\", this.source.spanFor(partialBlock.loc));\n }\n Decorator(decorator) {\n throw generateSyntaxError(\"Handlebars decorators are not supported\", this.source.spanFor(decorator.loc));\n }\n DecoratorBlock(decoratorBlock) {\n throw generateSyntaxError(\"Handlebars decorator blocks are not supported\", this.source.spanFor(decoratorBlock.loc));\n }\n SubExpression(sexpr) {\n const {\n path,\n params,\n hash\n } = acceptCallNodes(this, sexpr);\n return b.sexpr({\n path,\n params,\n hash,\n loc: this.source.spanFor(sexpr.loc)\n });\n }\n PathExpression(path) {\n const {\n original\n } = path;\n let parts;\n if (original.indexOf('/') !== -1) {\n if (original.slice(0, 2) === './') {\n throw generateSyntaxError(\"Using \\\"./\\\" is not supported in Glimmer and unnecessary\", this.source.spanFor(path.loc));\n }\n if (original.slice(0, 3) === '../') {\n throw generateSyntaxError(\"Changing context using \\\"../\\\" is not supported in Glimmer\", this.source.spanFor(path.loc));\n }\n if (original.indexOf('.') !== -1) {\n throw generateSyntaxError(\"Mixing '.' and '/' in paths is not supported in Glimmer; use only '.' to separate property paths\", this.source.spanFor(path.loc));\n }\n parts = [path.parts.join('/')];\n } else if (original === '.') {\n throw generateSyntaxError(\"'.' is not a supported path in Glimmer; check for a path with a trailing '.'\", this.source.spanFor(path.loc));\n } else {\n parts = path.parts;\n }\n let thisHead = false;\n\n // This is to fix a bug in the Handlebars AST where the path expressions in\n // `{{this.foo}}` (and similarly `{{foo-bar this.foo named=this.foo}}` etc)\n // are simply turned into `{{foo}}`. The fix is to push it back onto the\n // parts array and let the runtime see the difference. However, we cannot\n // simply use the string `this` as it means literally the property called\n // \"this\" in the current context (it can be expressed in the syntax as\n // `{{[this]}}`, where the square bracket are generally for this kind of\n // escaping – such as `{{foo.[\"bar.baz\"]}}` would mean lookup a property\n // named literally \"bar.baz\" on `this.foo`). By convention, we use `null`\n // for this purpose.\n if (/^this(?:\\..+)?$/u.test(original)) {\n thisHead = true;\n }\n let pathHead;\n if (thisHead) {\n pathHead = {\n type: 'ThisHead',\n loc: {\n start: path.loc.start,\n end: {\n line: path.loc.start.line,\n column: path.loc.start.column + 4\n }\n }\n };\n } else if (path.data) {\n const head = parts.shift();\n if (head === undefined) {\n throw generateSyntaxError(\"Attempted to parse a path expression, but it was not valid. Paths beginning with @ must start with a-z.\", this.source.spanFor(path.loc));\n }\n pathHead = {\n type: 'AtHead',\n name: \"@\" + head,\n loc: {\n start: path.loc.start,\n end: {\n line: path.loc.start.line,\n column: path.loc.start.column + head.length + 1\n }\n }\n };\n } else {\n const head = parts.shift();\n if (head === undefined) {\n throw generateSyntaxError(\"Attempted to parse a path expression, but it was not valid. Paths must start with a-z or A-Z.\", this.source.spanFor(path.loc));\n }\n pathHead = {\n type: 'VarHead',\n name: head,\n loc: {\n start: path.loc.start,\n end: {\n line: path.loc.start.line,\n column: path.loc.start.column + head.length\n }\n }\n };\n }\n return new PathExpressionImplV1(path.original, pathHead, parts, this.source.spanFor(path.loc));\n }\n Hash(hash) {\n const pairs = hash.pairs.map(pair => b.pair({\n key: pair.key,\n value: this.acceptNode(pair.value),\n loc: this.source.spanFor(pair.loc)\n }));\n return b.hash(pairs, this.source.spanFor(hash.loc));\n }\n StringLiteral(string) {\n return b.literal({\n type: 'StringLiteral',\n value: string.value,\n loc: string.loc\n });\n }\n BooleanLiteral(boolean) {\n return b.literal({\n type: 'BooleanLiteral',\n value: boolean.value,\n loc: boolean.loc\n });\n }\n NumberLiteral(number) {\n return b.literal({\n type: 'NumberLiteral',\n value: number.value,\n loc: number.loc\n });\n }\n UndefinedLiteral(undef) {\n return b.literal({\n type: 'UndefinedLiteral',\n value: undefined,\n loc: undef.loc\n });\n }\n NullLiteral(nul) {\n return b.literal({\n type: 'NullLiteral',\n value: null,\n loc: nul.loc\n });\n }\n }\n function calculateRightStrippedOffsets(original, value) {\n if (value === '') {\n // if it is empty, just return the count of newlines\n // in original\n return {\n lines: original.split('\\n').length - 1,\n columns: 0\n };\n }\n\n // otherwise, return the number of newlines prior to\n // `value`\n const [difference] = original.split(value);\n const lines = difference.split(/\\n/u);\n const lineCount = lines.length - 1;\n return {\n lines: lineCount,\n columns: (0, _util.unwrap)(lines[lineCount]).length\n };\n }\n function updateTokenizerLocation(tokenizer, content) {\n let line = content.loc.start.line;\n let column = content.loc.start.column;\n const offsets = calculateRightStrippedOffsets(content.original, content.value);\n line = line + offsets.lines;\n if (offsets.lines) {\n column = offsets.columns;\n } else {\n column = column + offsets.columns;\n }\n tokenizer.line = line;\n tokenizer.column = column;\n }\n function acceptCallNodes(compiler, node) {\n if (node.path.type.endsWith('Literal')) {\n const path = node.path;\n let value = '';\n if (path.type === 'BooleanLiteral') {\n value = path.original.toString();\n } else if (path.type === 'StringLiteral') {\n value = \"\\\"\" + path.original + \"\\\"\";\n } else if (path.type === 'NullLiteral') {\n value = 'null';\n } else if (path.type === 'NumberLiteral') {\n value = path.value.toString();\n } else {\n value = 'undefined';\n }\n throw generateSyntaxError(path.type + \" \\\"\" + (path.type === 'StringLiteral' ? path.original : value) + \"\\\" cannot be called as a sub-expression, replace (\" + value + \") with \" + value, compiler.source.spanFor(path.loc));\n }\n const path = node.path.type === 'PathExpression' ? compiler.PathExpression(node.path) : compiler.SubExpression(node.path);\n const params = node.params ? node.params.map(e => compiler.acceptNode(e)) : [];\n\n // if there is no hash, position it as a collapsed node immediately after the last param (or the\n // path, if there are also no params)\n const end = (0, _util.isPresentArray)(params) ? (0, _util.getLast)(params).loc : path.loc;\n const hash = node.hash ? compiler.Hash(node.hash) : {\n type: 'Hash',\n pairs: [],\n loc: compiler.source.spanFor(end).collapse('end')\n };\n return {\n path,\n params,\n hash\n };\n }\n function addElementModifier(element, mustache) {\n const {\n path,\n params,\n hash,\n loc\n } = mustache;\n if (isHBSLiteral(path)) {\n const modifier = \"{{\" + printLiteral(path) + \"}}\";\n const tag = \"<\" + element.name + \" ... \" + modifier + \" ...\";\n throw generateSyntaxError(\"In \" + tag + \", \" + modifier + \" is not a valid modifier\", mustache.loc);\n }\n const modifier = b.elementModifier({\n path,\n params,\n hash,\n loc\n });\n element.modifiers.push(modifier);\n }\n class TokenizerEventHandlers extends HandlebarsNodeVisitors {\n constructor() {\n super(...arguments);\n this.tagOpenLine = 0;\n this.tagOpenColumn = 0;\n }\n reset() {\n this.currentNode = null;\n }\n\n // Comment\n\n beginComment() {\n this.currentNode = b.comment('', this.source.offsetFor(this.tagOpenLine, this.tagOpenColumn));\n }\n appendToCommentData(char) {\n this.currentComment.value += char;\n }\n finishComment() {\n appendChild(this.currentElement(), this.finish(this.currentComment));\n }\n\n // Data\n\n beginData() {\n this.currentNode = b.text({\n chars: '',\n loc: this.offset().collapsed()\n });\n }\n appendToData(char) {\n this.currentData.chars += char;\n }\n finishData() {\n this.currentData.loc = this.currentData.loc.withEnd(this.offset());\n appendChild(this.currentElement(), this.currentData);\n }\n\n // Tags - basic\n\n tagOpen() {\n this.tagOpenLine = this.tokenizer.line;\n this.tagOpenColumn = this.tokenizer.column;\n }\n beginStartTag() {\n this.currentNode = {\n type: 'StartTag',\n name: '',\n attributes: [],\n modifiers: [],\n comments: [],\n selfClosing: false,\n loc: this.source.offsetFor(this.tagOpenLine, this.tagOpenColumn)\n };\n }\n beginEndTag() {\n this.currentNode = {\n type: 'EndTag',\n name: '',\n attributes: [],\n modifiers: [],\n comments: [],\n selfClosing: false,\n loc: this.source.offsetFor(this.tagOpenLine, this.tagOpenColumn)\n };\n }\n finishTag() {\n let tag = this.finish(this.currentTag);\n if (tag.type === 'StartTag') {\n this.finishStartTag();\n if (tag.name === ':') {\n throw generateSyntaxError('Invalid named block named detected, you may have created a named block without a name, or you may have began your name with a number. Named blocks must have names that are at least one character long, and begin with a lower case letter', this.source.spanFor({\n start: this.currentTag.loc.toJSON(),\n end: this.offset().toJSON()\n }));\n }\n if (voidMap.has(tag.name) || tag.selfClosing) {\n this.finishEndTag(true);\n }\n } else if (tag.type === 'EndTag') {\n this.finishEndTag(false);\n }\n }\n finishStartTag() {\n let {\n name,\n attributes: attrs,\n modifiers,\n comments,\n selfClosing,\n loc\n } = this.finish(this.currentStartTag);\n let element = b.element({\n tag: name,\n selfClosing,\n attrs,\n modifiers,\n comments,\n children: [],\n blockParams: [],\n loc\n });\n this.elementStack.push(element);\n }\n finishEndTag(isVoid) {\n let tag = this.finish(this.currentTag);\n let element = this.elementStack.pop();\n this.validateEndTag(tag, element, isVoid);\n let parent = this.currentElement();\n element.loc = element.loc.withEnd(this.offset());\n parseElementBlockParams(element);\n appendChild(parent, element);\n }\n markTagAsSelfClosing() {\n this.currentTag.selfClosing = true;\n }\n\n // Tags - name\n\n appendToTagName(char) {\n this.currentTag.name += char;\n }\n\n // Tags - attributes\n\n beginAttribute() {\n let offset = this.offset();\n this.currentAttribute = {\n name: '',\n parts: [],\n currentPart: null,\n isQuoted: false,\n isDynamic: false,\n start: offset,\n valueSpan: offset.collapsed()\n };\n }\n appendToAttributeName(char) {\n this.currentAttr.name += char;\n }\n beginAttributeValue(isQuoted) {\n this.currentAttr.isQuoted = isQuoted;\n this.startTextPart();\n this.currentAttr.valueSpan = this.offset().collapsed();\n }\n appendToAttributeValue(char) {\n let parts = this.currentAttr.parts;\n let lastPart = parts[parts.length - 1];\n let current = this.currentAttr.currentPart;\n if (current) {\n current.chars += char;\n\n // update end location for each added char\n current.loc = current.loc.withEnd(this.offset());\n } else {\n // initially assume the text node is a single char\n let loc = this.offset();\n\n // the tokenizer line/column have already been advanced, correct location info\n if (char === '\\n') {\n loc = lastPart ? lastPart.loc.getEnd() : this.currentAttr.valueSpan.getStart();\n } else {\n loc = loc.move(-1);\n }\n this.currentAttr.currentPart = b.text({\n chars: char,\n loc: loc.collapsed()\n });\n }\n }\n finishAttributeValue() {\n this.finalizeTextPart();\n let tag = this.currentTag;\n let tokenizerPos = this.offset();\n if (tag.type === 'EndTag') {\n throw generateSyntaxError(\"Invalid end tag: closing tag must not have attributes\", this.source.spanFor({\n start: tag.loc.toJSON(),\n end: tokenizerPos.toJSON()\n }));\n }\n let {\n name,\n parts,\n start,\n isQuoted,\n isDynamic,\n valueSpan\n } = this.currentAttr;\n let value = this.assembleAttributeValue(parts, isQuoted, isDynamic, start.until(tokenizerPos));\n value.loc = valueSpan.withEnd(tokenizerPos);\n let attribute = b.attr({\n name,\n value,\n loc: start.until(tokenizerPos)\n });\n this.currentStartTag.attributes.push(attribute);\n }\n reportSyntaxError(message) {\n throw generateSyntaxError(message, this.offset().collapsed());\n }\n assembleConcatenatedValue(parts) {\n for (const part of parts) {\n if (part.type !== 'MustacheStatement' && part.type !== 'TextNode') {\n throw generateSyntaxError(\"Unsupported node in quoted attribute value: \" + part['type'], part.loc);\n }\n }\n (0, _util.assertPresentArray)(parts, \"the concatenation parts of an element should not be empty\");\n let first = (0, _util.getFirst)(parts);\n let last = (0, _util.getLast)(parts);\n return b.concat(parts, this.source.spanFor(first.loc).extend(this.source.spanFor(last.loc)));\n }\n validateEndTag(tag, element, selfClosing) {\n if (voidMap.has(tag.name) && !selfClosing) {\n // EngTag is also called by StartTag for void and self-closing tags (i.e.\n // <input> or <br />, so we need to check for that here. Otherwise, we would\n // throw an error for those cases.\n throw generateSyntaxError(\"<\" + tag.name + \"> elements do not need end tags. You should remove it\", tag.loc);\n } else if (element.tag === undefined) {\n throw generateSyntaxError(\"Closing tag </\" + tag.name + \"> without an open tag\", tag.loc);\n } else if (element.tag !== tag.name) {\n throw generateSyntaxError(\"Closing tag </\" + tag.name + \"> did not match last open tag <\" + element.tag + \"> (on line \" + element.loc.startPosition.line + \")\", tag.loc);\n }\n }\n assembleAttributeValue(parts, isQuoted, isDynamic, span) {\n if (isDynamic) {\n if (isQuoted) {\n return this.assembleConcatenatedValue(parts);\n } else {\n (0, _util.assertPresentArray)(parts);\n const [head, a] = parts;\n if (a === undefined || a.type === 'TextNode' && a.chars === '/') {\n return head;\n } else {\n throw generateSyntaxError(\"An unquoted attribute value must be a string or a mustache, \" + \"preceded by whitespace or a '=' character, and \" + \"followed by whitespace, a '>' character, or '/>'\", span);\n }\n }\n } else if ((0, _util.isPresentArray)(parts)) {\n return parts[0];\n } else {\n return b.text({\n chars: '',\n loc: span\n });\n }\n }\n }\n\n /**\n ASTPlugins can make changes to the Glimmer template AST before\n compilation begins.\n */\n\n const syntax = {\n parse: preprocess,\n builders: publicBuilder,\n print: build,\n traverse,\n Walker\n };\n class CodemodEntityParser extends _simpleHtmlTokenizer.EntityParser {\n // match upstream types, but never match an entity\n constructor() {\n super({});\n }\n parse() {\n return undefined;\n }\n }\n function preprocess(input, options) {\n if (options === void 0) {\n options = {};\n }\n let mode = options.mode || 'precompile';\n let source;\n let ast;\n if (typeof input === 'string') {\n var _options$meta2;\n source = new Source(input, (_options$meta2 = options.meta) == null ? void 0 : _options$meta2.moduleName);\n if (mode === 'codemod') {\n ast = (0, _parser.parseWithoutProcessing)(input, options.parseOptions);\n } else {\n ast = (0, _parser.parse)(input, options.parseOptions);\n }\n } else if (input instanceof Source) {\n source = input;\n if (mode === 'codemod') {\n ast = (0, _parser.parseWithoutProcessing)(input.source, options.parseOptions);\n } else {\n ast = (0, _parser.parse)(input.source, options.parseOptions);\n }\n } else {\n var _options$meta3;\n source = new Source('', (_options$meta3 = options.meta) == null ? void 0 : _options$meta3.moduleName);\n ast = input;\n }\n let entityParser = undefined;\n if (mode === 'codemod') {\n entityParser = new CodemodEntityParser();\n }\n let offsets = SourceSpan.forCharPositions(source, 0, source.source.length);\n ast.loc = {\n source: '(program)',\n start: offsets.startPosition,\n end: offsets.endPosition\n };\n let program = new TokenizerEventHandlers(source, entityParser, mode).acceptTemplate(ast);\n if (options.strictMode) {\n var _options$locals;\n program.blockParams = (_options$locals = options.locals) != null ? _options$locals : [];\n }\n if (options && options.plugins && options.plugins.ast) {\n for (const transform of options.plugins.ast) {\n let env = (0, _util.assign)({}, options, {\n syntax\n }, {\n plugins: undefined\n });\n let pluginResult = transform(env);\n traverse(program, pluginResult.visitor);\n }\n }\n return program;\n }\n\n /**\n * Gets the correct Token from the Node based on it's type\n */\n function tokensFromType(node, scopedTokens, options) {\n if (node.type === 'PathExpression') {\n if (node.head.type === 'AtHead' || node.head.type === 'ThisHead') {\n return;\n }\n const possbleToken = node.head.name;\n if (scopedTokens.indexOf(possbleToken) === -1) {\n return possbleToken;\n }\n } else if (node.type === 'ElementNode') {\n const {\n tag\n } = node;\n const char = tag.charAt(0);\n if (char === ':' || char === '@') {\n return;\n }\n if (!options.includeHtmlElements && tag.indexOf('.') === -1 && tag.toLowerCase() === tag) {\n return;\n }\n if (tag.substr(0, 5) === 'this.') {\n return;\n }\n\n // the tag may be from a yielded object\n // example:\n // <x.button>\n // An ElementNode does not parse the \"tag\" in to a PathExpression\n // so we have to split on `.`, just like how `this` presence is checked.\n if (tag.includes('.')) {\n let [potentialLocal] = tag.split('.');\n if (scopedTokens.includes(potentialLocal)) return;\n }\n if (scopedTokens.includes(tag)) return;\n return tag;\n }\n }\n\n /**\n * Adds tokens to the tokensSet based on their node.type\n */\n function addTokens(tokensSet, node, scopedTokens, options) {\n const maybeTokens = tokensFromType(node, scopedTokens, options);\n (Array.isArray(maybeTokens) ? maybeTokens : [maybeTokens]).forEach(maybeToken => {\n if (maybeToken !== undefined && maybeToken[0] !== '@') {\n const maybeTokenFirstSegment = maybeToken.split('.')[0];\n if (!scopedTokens.includes(maybeTokenFirstSegment)) {\n tokensSet.add(maybeToken.split('.')[0]);\n }\n }\n });\n }\n\n /**\n * Parses and traverses a given handlebars html template to extract all template locals\n * referenced that could possible come from the parent scope. Can exclude known keywords\n * optionally.\n */\n function getTemplateLocals(html, options) {\n var _options;\n if (options === void 0) {\n options = {\n includeHtmlElements: false,\n includeKeywords: false\n };\n }\n const ast = preprocess(html);\n const tokensSet = new Set();\n const scopedTokens = [];\n traverse(ast, {\n Block: {\n enter(_ref26) {\n let {\n blockParams\n } = _ref26;\n blockParams.forEach(param => {\n scopedTokens.push(param);\n });\n },\n exit(_ref27) {\n let {\n blockParams\n } = _ref27;\n blockParams.forEach(() => {\n scopedTokens.pop();\n });\n }\n },\n ElementNode: {\n enter(node) {\n node.blockParams.forEach(param => {\n scopedTokens.push(param);\n });\n addTokens(tokensSet, node, scopedTokens, options);\n },\n exit(_ref28) {\n let {\n blockParams\n } = _ref28;\n blockParams.forEach(() => {\n scopedTokens.pop();\n });\n }\n },\n PathExpression(node) {\n addTokens(tokensSet, node, scopedTokens, options);\n }\n });\n let tokens = [];\n tokensSet.forEach(s => tokens.push(s));\n if (!((_options = options) != null && _options.includeKeywords)) {\n tokens = tokens.filter(token => !isKeyword(token));\n }\n return tokens;\n }\n\n /**\n * This is a convenience function for creating ASTv2 nodes, with an optional name and the node's\n * options.\n *\n * ```ts\n * export class HtmlText extends node('HtmlText').fields<{ chars: string }>() {}\n * ```\n *\n * This creates a new ASTv2 node with the name `'HtmlText'` and one field `chars: string` (in\n * addition to a `loc: SourceOffsets` field, which all nodes have).\n *\n * ```ts\n * export class Args extends node().fields<{\n * positional: PositionalArguments;\n * named: NamedArguments\n * }>() {}\n * ```\n *\n * This creates a new un-named ASTv2 node with two fields (`positional: Positional` and `named:\n * Named`, in addition to the generic `loc: SourceOffsets` field).\n *\n * Once you create a node using `node`, it is instantiated with all of its fields (including `loc`):\n *\n * ```ts\n * new HtmlText({ loc: offsets, chars: someString });\n * ```\n */\n\n function node(name) {\n if (name !== undefined) {\n const type = name;\n return {\n fields() {\n return class {\n constructor(fields) {\n // SAFETY: initialized via `assign` in the constructor.\n this.type = void 0;\n this.type = type;\n (0, _util.assign)(this, fields);\n }\n };\n }\n };\n } else {\n return {\n fields() {\n return class {\n // SAFETY: initialized via `assign` in the constructor.\n\n constructor(fields) {\n (0, _util.assign)(this, fields);\n }\n };\n }\n };\n }\n }\n\n /**\n * Corresponds to syntaxes with positional and named arguments:\n *\n * - SubExpression\n * - Invoking Append\n * - Invoking attributes\n * - InvokeBlock\n *\n * If `Args` is empty, the `SourceOffsets` for this node should be the collapsed position\n * immediately after the parent call node's `callee`.\n */\n class Args extends node().fields() {\n static empty(loc) {\n return new Args({\n loc,\n positional: PositionalArguments.empty(loc),\n named: NamedArguments.empty(loc)\n });\n }\n static named(named) {\n return new Args({\n loc: named.loc,\n positional: PositionalArguments.empty(named.loc.collapse('end')),\n named\n });\n }\n nth(offset) {\n return this.positional.nth(offset);\n }\n get(name) {\n return this.named.get(name);\n }\n isEmpty() {\n return this.positional.isEmpty() && this.named.isEmpty();\n }\n }\n\n /**\n * Corresponds to positional arguments.\n *\n * If `PositionalArguments` is empty, the `SourceOffsets` for this node should be the collapsed\n * position immediately after the parent call node's `callee`.\n */\n class PositionalArguments extends node().fields() {\n static empty(loc) {\n return new PositionalArguments({\n loc,\n exprs: []\n });\n }\n get size() {\n return this.exprs.length;\n }\n nth(offset) {\n return this.exprs[offset] || null;\n }\n isEmpty() {\n return this.exprs.length === 0;\n }\n }\n\n /**\n * Corresponds to named arguments.\n *\n * If `PositionalArguments` and `NamedArguments` are empty, the `SourceOffsets` for this node should\n * be the same as the `Args` node that contains this node.\n *\n * If `PositionalArguments` is not empty but `NamedArguments` is empty, the `SourceOffsets` for this\n * node should be the collapsed position immediately after the last positional argument.\n */\n class NamedArguments extends node().fields() {\n static empty(loc) {\n return new NamedArguments({\n loc,\n entries: []\n });\n }\n get size() {\n return this.entries.length;\n }\n get(name) {\n let entry = this.entries.filter(e => e.name.chars === name)[0];\n return entry ? entry.value : null;\n }\n isEmpty() {\n return this.entries.length === 0;\n }\n }\n\n /**\n * Corresponds to a single named argument.\n *\n * ```hbs\n * x=<expr>\n * ```\n */\n class NamedArgument {\n constructor(options) {\n this.loc = void 0;\n this.name = void 0;\n this.value = void 0;\n this.loc = options.name.loc.extend(options.value.loc);\n this.name = options.name;\n this.value = options.value;\n }\n }\n\n /**\n * Attr nodes look like HTML attributes, but are classified as:\n *\n * 1. `HtmlAttr`, which means a regular HTML attribute in Glimmer\n * 2. `SplatAttr`, which means `...attributes`\n * 3. `ComponentArg`, which means an attribute whose name begins with `@`, and it is therefore a\n * component argument.\n */\n\n /**\n * `HtmlAttr` and `SplatAttr` are grouped together because the order of the `SplatAttr` node,\n * relative to other attributes, matters.\n */\n\n /**\n * \"Attr Block\" nodes are allowed inside an open element tag in templates. They interact with the\n * element (or component).\n */\n\n /**\n * `HtmlAttr` nodes are valid HTML attributes, with or without a value.\n *\n * Exceptions:\n *\n * - `...attributes` is `SplatAttr`\n * - `@x=<value>` is `ComponentArg`\n */\n class HtmlAttr extends node('HtmlAttr').fields() {}\n class SplatAttr extends node('SplatAttr').fields() {}\n\n /**\n * Corresponds to an argument passed by a component (`@x=<value>`)\n */\n class ComponentArg extends node().fields() {\n /**\n * Convert the component argument into a named argument node\n */\n toNamedArgument() {\n return new NamedArgument({\n name: this.name,\n value: this.value\n });\n }\n }\n\n /**\n * An `ElementModifier` is just a normal call node in modifier position.\n */\n class ElementModifier extends node('ElementModifier').fields() {}\n\n /**\n * Content Nodes are allowed in content positions in templates. They correspond to behavior in the\n * [Data][data] tokenization state in HTML.\n *\n * [data]: https://html.spec.whatwg.org/multipage/parsing.html#data-state\n */\n\n class GlimmerComment extends node('GlimmerComment').fields() {}\n class HtmlText extends node('HtmlText').fields() {}\n class HtmlComment extends node('HtmlComment').fields() {}\n class AppendContent extends node('AppendContent').fields() {\n get callee() {\n if (this.value.type === 'Call') {\n return this.value.callee;\n } else {\n return this.value;\n }\n }\n get args() {\n if (this.value.type === 'Call') {\n return this.value.args;\n } else {\n return Args.empty(this.value.loc.collapse('end'));\n }\n }\n }\n class InvokeBlock extends node('InvokeBlock').fields() {}\n /**\n * Corresponds to a component invocation. When the content of a component invocation contains no\n * named blocks, `blocks` contains a single named block named `\"default\"`. When a component\n * invocation is self-closing, `blocks` is empty.\n */\n class InvokeComponent extends node('InvokeComponent').fields() {\n get args() {\n let entries = this.componentArgs.map(a => a.toNamedArgument());\n return Args.named(new NamedArguments({\n loc: SpanList.range(entries, this.callee.loc.collapse('end')),\n entries\n }));\n }\n }\n /**\n * Corresponds to a simple HTML element. The AST allows component arguments and modifiers to support\n * future extensions.\n */\n class SimpleElement extends node('SimpleElement').fields() {\n get args() {\n let entries = this.componentArgs.map(a => a.toNamedArgument());\n return Args.named(new NamedArguments({\n loc: SpanList.range(entries, this.tag.loc.collapse('end')),\n entries\n }));\n }\n }\n\n /**\n * A Handlebars literal.\n *\n * {@link https://handlebarsjs.com/guide/expressions.html#literal-segments}\n */\n\n /**\n * Corresponds to a Handlebars literal.\n *\n * @see {LiteralValue}\n */\n class LiteralExpression extends node('Literal').fields() {\n toSlice() {\n return new SourceSlice({\n loc: this.loc,\n chars: this.value\n });\n }\n }\n /**\n * Returns true if an input {@see ExpressionNode} is a literal.\n */\n function isLiteral(node, kind) {\n if (node.type === 'Literal') {\n if (kind === undefined) {\n return true;\n } else if (kind === 'null') {\n return node.value === null;\n } else {\n return typeof node.value === kind;\n }\n } else {\n return false;\n }\n }\n\n /**\n * Corresponds to a path in expression position.\n *\n * ```hbs\n * this\n * this.x\n * @x\n * @x.y\n * x\n * x.y\n * ```\n */\n class PathExpression extends node('Path').fields() {}\n\n /**\n * Corresponds to a parenthesized call expression.\n *\n * ```hbs\n * (x)\n * (x.y)\n * (x y)\n * (x.y z)\n * ```\n */\n class CallExpression extends node('Call').fields() {}\n\n /**\n * Corresponds to a possible deprecated helper call. Must be:\n *\n * 1. A free variable (not this.foo, not @foo, not local).\n * 2. Argument-less.\n * 3. In a component invocation's named argument position.\n * 4. Not parenthesized (not @bar={{(helper)}}).\n * 5. Not interpolated (not @bar=\"{{helper}}\").\n *\n * ```hbs\n * <Foo @bar={{helper}} />\n * ```\n */\n class DeprecatedCallExpression extends node('DeprecatedCall').fields() {}\n\n /**\n * Corresponds to an interpolation in attribute value position.\n *\n * ```hbs\n * <a href=\"{{url}}.html\"\n * ```\n */\n class InterpolateExpression extends node('Interpolate').fields() {}\n\n /**\n * Corresponds to an entire template.\n */\n class Template extends node().fields() {}\n\n /**\n * Represents a block. In principle this could be merged with `NamedBlock`, because all cases\n * involving blocks have at least a notional name.\n */\n class Block extends node().fields() {}\n\n /**\n * Corresponds to a collection of named blocks.\n */\n class NamedBlocks extends node().fields() {\n /**\n * Get the `NamedBlock` for a given name.\n */\n\n get(name) {\n return this.blocks.filter(block => block.name.chars === name)[0] || null;\n }\n }\n /**\n * Corresponds to a single named block. This is used for anonymous named blocks (`default` and\n * `else`).\n */\n class NamedBlock extends node().fields() {\n get args() {\n let entries = this.componentArgs.map(a => a.toNamedArgument());\n return Args.named(new NamedArguments({\n loc: SpanList.range(entries, this.name.loc.collapse('end')),\n entries\n }));\n }\n }\n\n /**\n * Corresponds to `this` at the head of an expression.\n */\n class ThisReference extends node('This').fields() {}\n\n /**\n * Corresponds to `@<ident>` at the beginning of an expression.\n */\n class ArgReference extends node('Arg').fields() {}\n\n /**\n * Corresponds to `<ident>` at the beginning of an expression, when `<ident>` is in the current\n * block's scope.\n */\n class LocalVarReference extends node('Local').fields() {}\n\n /**\n * Corresponds to `<ident>` at the beginning of an expression, when `<ident>` is *not* in the\n * current block's scope.\n *\n * The `resolution: FreeVarResolution` field describes how to resolve the free variable.\n *\n * Note: In strict mode, it must always be a variable that is in a concrete JavaScript scope that\n * the template will be installed into.\n */\n class FreeVarReference extends node('Free').fields() {}\n\n /**\n * A free variable is resolved according to a resolution rule:\n *\n * 1. Strict resolution\n * 2. Namespaced resolution\n * 3. Fallback resolution\n */\n\n /**\n * Strict resolution is used:\n *\n * 1. in a strict mode template\n * 2. in an unambiguous invocation with dot paths\n */\n const STRICT_RESOLUTION = {\n resolution: () => _wireFormat.SexpOpcodes.GetStrictKeyword,\n serialize: () => 'Strict',\n isAngleBracket: false\n };\n const HTML_RESOLUTION = {\n ...STRICT_RESOLUTION,\n isAngleBracket: true\n };\n function isStrictResolution(value) {\n return value === STRICT_RESOLUTION;\n }\n\n /**\n * A `LooseModeResolution` includes:\n *\n * - 0 or more namespaces to resolve the variable in\n * - optional fallback behavior\n *\n * In practice, there are a limited number of possible combinations of these degrees of freedom,\n * and they are captured by the `Ambiguity` union below.\n */\n class LooseModeResolution {\n /**\n * Namespaced resolution is used in an unambiguous syntax position:\n *\n * 1. `(sexp)` (namespace: `Helper`)\n * 2. `{{#block}}` (namespace: `Component`)\n * 3. `<a {{modifier}}>` (namespace: `Modifier`)\n * 4. `<Component />` (namespace: `Component`)\n *\n * @see {NamespacedAmbiguity}\n */\n static namespaced(namespace, isAngleBracket) {\n if (isAngleBracket === void 0) {\n isAngleBracket = false;\n }\n return new LooseModeResolution({\n namespaces: [namespace],\n fallback: false\n }, isAngleBracket);\n }\n\n /**\n * Fallback resolution is used when no namespaced resolutions are possible, but fallback\n * resolution is still allowed.\n *\n * ```hbs\n * {{x.y}}\n * ```\n *\n * @see {FallbackAmbiguity}\n */\n static fallback() {\n return new LooseModeResolution({\n namespaces: [],\n fallback: true\n });\n }\n\n /**\n * Append resolution is used when the variable should be resolved in both the `component` and\n * `helper` namespaces. Fallback resolution is optional.\n *\n * ```hbs\n * {{x}}\n * ```\n *\n * ^ `x` should be resolved in the `component` and `helper` namespaces with fallback resolution.\n *\n * ```hbs\n * {{x y}}\n * ```\n *\n * ^ `x` should be resolved in the `component` and `helper` namespaces without fallback\n * resolution.\n *\n * @see {ComponentOrHelperAmbiguity}\n */\n static append(_ref29) {\n let {\n invoke\n } = _ref29;\n return new LooseModeResolution({\n namespaces: [FreeVarNamespace.Component, FreeVarNamespace.Helper],\n fallback: !invoke\n });\n }\n\n /**\n * Trusting append resolution is used when the variable should be resolved in both the `component` and\n * `helper` namespaces. Fallback resolution is optional.\n *\n * ```hbs\n * {{{x}}}\n * ```\n *\n * ^ `x` should be resolved in the `component` and `helper` namespaces with fallback resolution.\n *\n * ```hbs\n * {{{x y}}}\n * ```\n *\n * ^ `x` should be resolved in the `component` and `helper` namespaces without fallback\n * resolution.\n *\n * @see {HelperAmbiguity}\n */\n static trustingAppend(_ref30) {\n let {\n invoke\n } = _ref30;\n return new LooseModeResolution({\n namespaces: [FreeVarNamespace.Helper],\n fallback: !invoke\n });\n }\n\n /**\n * Attribute resolution is used when the variable should be resolved as a `helper` with fallback\n * resolution.\n *\n * ```hbs\n * <a href={{x}} />\n * <a href=\"{{x}}.html\" />\n * ```\n *\n * ^ resolved in the `helper` namespace with fallback\n *\n * @see {HelperAmbiguity}\n */\n static attr() {\n return new LooseModeResolution({\n namespaces: [FreeVarNamespace.Helper],\n fallback: true\n });\n }\n constructor(ambiguity, isAngleBracket) {\n if (isAngleBracket === void 0) {\n isAngleBracket = false;\n }\n this.ambiguity = ambiguity;\n this.isAngleBracket = isAngleBracket;\n }\n resolution() {\n if (this.ambiguity.namespaces.length === 0) {\n return _wireFormat.SexpOpcodes.GetStrictKeyword;\n } else if (this.ambiguity.namespaces.length === 1) {\n if (this.ambiguity.fallback) {\n // simple namespaced resolution with fallback must be attr={{x}}\n return _wireFormat.SexpOpcodes.GetFreeAsHelperHeadOrThisFallback;\n } else {\n // simple namespaced resolution without fallback\n switch (this.ambiguity.namespaces[0]) {\n case FreeVarNamespace.Helper:\n return _wireFormat.SexpOpcodes.GetFreeAsHelperHead;\n case FreeVarNamespace.Modifier:\n return _wireFormat.SexpOpcodes.GetFreeAsModifierHead;\n case FreeVarNamespace.Component:\n return _wireFormat.SexpOpcodes.GetFreeAsComponentHead;\n }\n }\n } else if (this.ambiguity.fallback) {\n // component or helper + fallback ({{something}})\n return _wireFormat.SexpOpcodes.GetFreeAsComponentOrHelperHeadOrThisFallback;\n } else {\n // component or helper without fallback ({{something something}})\n return _wireFormat.SexpOpcodes.GetFreeAsComponentOrHelperHead;\n }\n }\n serialize() {\n if (this.ambiguity.namespaces.length === 0) {\n return 'Loose';\n } else if (this.ambiguity.namespaces.length === 1) {\n if (this.ambiguity.fallback) {\n // simple namespaced resolution with fallback must be attr={{x}}\n return ['ambiguous', SerializedAmbiguity.Attr];\n } else {\n return ['ns', this.ambiguity.namespaces[0]];\n }\n } else if (this.ambiguity.fallback) {\n // component or helper + fallback ({{something}})\n return ['ambiguous', SerializedAmbiguity.Append];\n } else {\n // component or helper without fallback ({{something something}})\n return ['ambiguous', SerializedAmbiguity.Invoke];\n }\n }\n }\n const ARGUMENT_RESOLUTION = LooseModeResolution.fallback();\n let FreeVarNamespace = /*#__PURE__*/function (FreeVarNamespace) {\n FreeVarNamespace[\"Helper\"] = \"Helper\";\n FreeVarNamespace[\"Modifier\"] = \"Modifier\";\n FreeVarNamespace[\"Component\"] = \"Component\";\n return FreeVarNamespace;\n }({});\n const HELPER_NAMESPACE = FreeVarNamespace.Helper;\n const MODIFIER_NAMESPACE = FreeVarNamespace.Modifier;\n const COMPONENT_NAMESPACE = FreeVarNamespace.Component;\n\n /**\n * A `ComponentOrHelperAmbiguity` might be a component or a helper, with an optional fallback\n *\n * ```hbs\n * {{x}}\n * ```\n *\n * ^ `x` is resolved in the `component` and `helper` namespaces, with fallback\n *\n * ```hbs\n * {{x y}}\n * ```\n *\n * ^ `x` is resolved in the `component` and `helper` namespaces, without fallback\n */\n\n /**\n * A `HelperAmbiguity` must be a helper, but it has fallback. If it didn't have fallback, it would\n * be a `NamespacedAmbiguity`.\n *\n * ```hbs\n * <a href={{x}} />\n * <a href=\"{{x}}.html\" />\n * ```\n *\n * ^ `x` is resolved in the `helper` namespace with fallback\n */\n\n /**\n * A `NamespacedAmbiguity` must be resolved in a particular namespace, without fallback.\n *\n * ```hbs\n * <X />\n * ```\n *\n * ^ `X` is resolved in the `component` namespace without fallback\n *\n * ```hbs\n * (x)\n * ```\n *\n * ^ `x` is resolved in the `helper` namespace without fallback\n *\n * ```hbs\n * <a {{x}} />\n * ```\n *\n * ^ `x` is resolved in the `modifier` namespace without fallback\n */\n // Serialization\n var SerializedAmbiguity = /*#__PURE__*/function (SerializedAmbiguity) {\n SerializedAmbiguity[\"Append\"] = \"Append\";\n SerializedAmbiguity[\"Attr\"] = \"Attr\";\n SerializedAmbiguity[\"Invoke\"] = \"Invoke\";\n return SerializedAmbiguity;\n }(SerializedAmbiguity || {});\n function loadResolution(resolution) {\n if (typeof resolution === 'string') {\n switch (resolution) {\n case 'Loose':\n return LooseModeResolution.fallback();\n case 'Strict':\n return STRICT_RESOLUTION;\n }\n }\n switch (resolution[0]) {\n case 'ambiguous':\n switch (resolution[1]) {\n case SerializedAmbiguity.Append:\n return LooseModeResolution.append({\n invoke: false\n });\n case SerializedAmbiguity.Attr:\n return LooseModeResolution.attr();\n case SerializedAmbiguity.Invoke:\n return LooseModeResolution.append({\n invoke: true\n });\n }\n case 'ns':\n return LooseModeResolution.namespaced(resolution[1]);\n }\n }\n var api$1 = _exports.ASTv2 = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ARGUMENT_RESOLUTION: ARGUMENT_RESOLUTION,\n AppendContent: AppendContent,\n ArgReference: ArgReference,\n Args: Args,\n Block: Block,\n COMPONENT_NAMESPACE: COMPONENT_NAMESPACE,\n CallExpression: CallExpression,\n ComponentArg: ComponentArg,\n DeprecatedCallExpression: DeprecatedCallExpression,\n ElementModifier: ElementModifier,\n FreeVarNamespace: FreeVarNamespace,\n FreeVarReference: FreeVarReference,\n GlimmerComment: GlimmerComment,\n HELPER_NAMESPACE: HELPER_NAMESPACE,\n HTML_RESOLUTION: HTML_RESOLUTION,\n HtmlAttr: HtmlAttr,\n HtmlComment: HtmlComment,\n HtmlText: HtmlText,\n InterpolateExpression: InterpolateExpression,\n InvokeBlock: InvokeBlock,\n InvokeComponent: InvokeComponent,\n LiteralExpression: LiteralExpression,\n LocalVarReference: LocalVarReference,\n LooseModeResolution: LooseModeResolution,\n MODIFIER_NAMESPACE: MODIFIER_NAMESPACE,\n NamedArgument: NamedArgument,\n NamedArguments: NamedArguments,\n NamedBlock: NamedBlock,\n NamedBlocks: NamedBlocks,\n PathExpression: PathExpression,\n PositionalArguments: PositionalArguments,\n STRICT_RESOLUTION: STRICT_RESOLUTION,\n SimpleElement: SimpleElement,\n SplatAttr: SplatAttr,\n Template: Template,\n ThisReference: ThisReference,\n isLiteral: isLiteral,\n isStrictResolution: isStrictResolution,\n loadResolution: loadResolution,\n node: node\n });\n class SymbolTable {\n static top(locals, options) {\n return new ProgramSymbolTable(locals, options);\n }\n child(locals) {\n let symbols = locals.map(name => this.allocate(name));\n return new BlockSymbolTable(this, locals, symbols);\n }\n }\n _exports.SymbolTable = SymbolTable;\n var _hasDebugger = /*#__PURE__*/(0, _emberBabel.classPrivateFieldLooseKey)(\"hasDebugger\");\n class ProgramSymbolTable extends SymbolTable {\n constructor(templateLocals, options) {\n super();\n this.symbols = [];\n this.upvars = [];\n this.size = 1;\n this.named = (0, _util.dict)();\n this.blocks = (0, _util.dict)();\n this.usedTemplateLocals = [];\n Object.defineProperty(this, _hasDebugger, {\n writable: true,\n value: false\n });\n this.templateLocals = templateLocals;\n this.options = options;\n }\n hasLexical(name) {\n return this.options.lexicalScope(name);\n }\n getLexical(name) {\n return this.allocateFree(name, HTML_RESOLUTION);\n }\n getUsedTemplateLocals() {\n return this.usedTemplateLocals;\n }\n setHasDebugger() {\n (0, _emberBabel.classPrivateFieldLooseBase)(this, _hasDebugger)[_hasDebugger] = true;\n }\n get hasEval() {\n return (0, _emberBabel.classPrivateFieldLooseBase)(this, _hasDebugger)[_hasDebugger];\n }\n has(name) {\n return this.templateLocals.includes(name);\n }\n get(name) {\n let index = this.usedTemplateLocals.indexOf(name);\n if (index !== -1) {\n return [index, true];\n }\n index = this.usedTemplateLocals.length;\n this.usedTemplateLocals.push(name);\n return [index, true];\n }\n getLocalsMap() {\n return (0, _util.dict)();\n }\n getDebugInfo() {\n return Object.values(this.getLocalsMap());\n }\n allocateFree(name, resolution) {\n // If the name in question is an uppercase (i.e. angle-bracket) component invocation, run\n // the optional `customizeComponentName` function provided to the precompiler.\n if (resolution.resolution() === _wireFormat.SexpOpcodes.GetFreeAsComponentHead && resolution.isAngleBracket) {\n name = this.options.customizeComponentName(name);\n }\n let index = this.upvars.indexOf(name);\n if (index !== -1) {\n return index;\n }\n index = this.upvars.length;\n this.upvars.push(name);\n return index;\n }\n allocateNamed(name) {\n let named = this.named[name];\n if (!named) {\n named = this.named[name] = this.allocate(name);\n }\n return named;\n }\n allocateBlock(name) {\n if (name === 'inverse') {\n name = 'else';\n }\n let block = this.blocks[name];\n if (!block) {\n block = this.blocks[name] = this.allocate(\"&\" + name);\n }\n return block;\n }\n allocate(identifier) {\n this.symbols.push(identifier);\n return this.size++;\n }\n }\n _exports.ProgramSymbolTable = ProgramSymbolTable;\n var _get = /*#__PURE__*/(0, _emberBabel.classPrivateFieldLooseKey)(\"get\");\n class BlockSymbolTable extends SymbolTable {\n constructor(parent, symbols, slots) {\n super();\n Object.defineProperty(this, _get, {\n value: _get2\n });\n this.parent = parent;\n this.symbols = symbols;\n this.slots = slots;\n }\n get locals() {\n return this.symbols;\n }\n getLexical(name) {\n return this.parent.getLexical(name);\n }\n hasLexical(name) {\n return this.parent.hasLexical(name);\n }\n has(name) {\n return this.symbols.indexOf(name) !== -1 || this.parent.has(name);\n }\n get(name) {\n let local = (0, _emberBabel.classPrivateFieldLooseBase)(this, _get)[_get](name);\n return local ? [local, false] : this.parent.get(name);\n }\n getLocalsMap() {\n let dict = this.parent.getLocalsMap();\n this.symbols.forEach(symbol => dict[symbol] = this.get(symbol)[0]);\n return dict;\n }\n getDebugInfo() {\n return Object.values(this.getLocalsMap());\n }\n setHasDebugger() {\n this.parent.setHasDebugger();\n }\n allocateFree(name, resolution) {\n return this.parent.allocateFree(name, resolution);\n }\n allocateNamed(name) {\n return this.parent.allocateNamed(name);\n }\n allocateBlock(name) {\n return this.parent.allocateBlock(name);\n }\n allocate(identifier) {\n return this.parent.allocate(identifier);\n }\n }\n _exports.BlockSymbolTable = BlockSymbolTable;\n function _get2(name) {\n let slot = this.symbols.indexOf(name);\n return slot === -1 ? null : (0, _util.unwrap)(this.slots[slot]);\n }\n var api = _exports.ASTv1 = _exports.AST = /*#__PURE__*/Object.freeze({\n __proto__: null\n });\n class Builder {\n // TEMPLATE //\n\n template(symbols, body, loc) {\n return new Template({\n table: symbols,\n body,\n loc\n });\n }\n\n // INTERNAL (these nodes cannot be reached when doing general-purpose visiting) //\n\n block(symbols, body, loc) {\n return new Block({\n scope: symbols,\n body,\n loc\n });\n }\n namedBlock(name, block, loc) {\n return new NamedBlock({\n name,\n block,\n attrs: [],\n componentArgs: [],\n modifiers: [],\n loc\n });\n }\n simpleNamedBlock(name, block, loc) {\n return new BuildElement({\n selfClosing: false,\n attrs: [],\n componentArgs: [],\n modifiers: [],\n comments: []\n }).named(name, block, loc);\n }\n slice(chars, loc) {\n return new SourceSlice({\n loc,\n chars\n });\n }\n args(positional, named, loc) {\n return new Args({\n loc,\n positional,\n named\n });\n }\n positional(exprs, loc) {\n return new PositionalArguments({\n loc,\n exprs\n });\n }\n namedArgument(key, value) {\n return new NamedArgument({\n name: key,\n value\n });\n }\n named(entries, loc) {\n return new NamedArguments({\n loc,\n entries\n });\n }\n attr(_ref31, loc) {\n let {\n name,\n value,\n trusting\n } = _ref31;\n return new HtmlAttr({\n loc,\n name,\n value,\n trusting\n });\n }\n splatAttr(symbol, loc) {\n return new SplatAttr({\n symbol,\n loc\n });\n }\n arg(_ref32, loc) {\n let {\n name,\n value,\n trusting\n } = _ref32;\n return new ComponentArg({\n name,\n value,\n trusting,\n loc\n });\n }\n\n // EXPRESSIONS //\n\n path(head, tail, loc) {\n return new PathExpression({\n loc,\n ref: head,\n tail\n });\n }\n self(loc) {\n return new ThisReference({\n loc\n });\n }\n at(name, symbol, loc) {\n // the `@` should be included so we have a complete source range\n (0, _util.assert)(name[0] === '@', \"call builders.at() with a string that starts with '@'\");\n return new ArgReference({\n loc,\n name: new SourceSlice({\n loc,\n chars: name\n }),\n symbol\n });\n }\n freeVar(_ref33) {\n let {\n name,\n context,\n symbol,\n loc\n } = _ref33;\n (0, _util.assert)(name !== 'this', \"You called builders.freeVar() with 'this'. Call builders.this instead\");\n (0, _util.assert)(name[0] !== '@', \"You called builders.freeVar() with '\" + name + \"'. Call builders.at('\" + name + \"') instead\");\n return new FreeVarReference({\n name,\n resolution: context,\n symbol,\n loc\n });\n }\n localVar(name, symbol, isTemplateLocal, loc) {\n (0, _util.assert)(name !== 'this', \"You called builders.var() with 'this'. Call builders.this instead\");\n (0, _util.assert)(name[0] !== '@', \"You called builders.var() with '\" + name + \"'. Call builders.at('\" + name + \"') instead\");\n return new LocalVarReference({\n loc,\n name,\n isTemplateLocal,\n symbol\n });\n }\n sexp(parts, loc) {\n return new CallExpression({\n loc,\n callee: parts.callee,\n args: parts.args\n });\n }\n deprecatedCall(arg, callee, loc) {\n return new DeprecatedCallExpression({\n loc,\n arg,\n callee\n });\n }\n interpolate(parts, loc) {\n (0, _util.assertPresentArray)(parts);\n return new InterpolateExpression({\n loc,\n parts\n });\n }\n literal(value, loc) {\n return new LiteralExpression({\n loc,\n value\n });\n }\n\n // STATEMENTS //\n\n append(_ref34, loc) {\n let {\n table,\n trusting,\n value\n } = _ref34;\n return new AppendContent({\n table,\n trusting,\n value,\n loc\n });\n }\n modifier(_ref35, loc) {\n let {\n callee,\n args\n } = _ref35;\n return new ElementModifier({\n loc,\n callee,\n args\n });\n }\n namedBlocks(blocks, loc) {\n return new NamedBlocks({\n loc,\n blocks\n });\n }\n blockStatement(_ref36, loc) {\n let {\n program,\n inverse = null,\n ...call\n } = _ref36;\n let blocksLoc = program.loc;\n let blocks = [this.namedBlock(SourceSlice.synthetic('default'), program, program.loc)];\n if (inverse) {\n blocksLoc = blocksLoc.extend(inverse.loc);\n blocks.push(this.namedBlock(SourceSlice.synthetic('else'), inverse, inverse.loc));\n }\n return new InvokeBlock({\n loc,\n blocks: this.namedBlocks(blocks, blocksLoc),\n callee: call.callee,\n args: call.args\n });\n }\n element(options) {\n return new BuildElement(options);\n }\n }\n class BuildElement {\n constructor(base) {\n this.builder = void 0;\n this.base = base;\n this.builder = new Builder();\n }\n simple(tag, body, loc) {\n return new SimpleElement((0, _util.assign)({\n tag,\n body,\n componentArgs: [],\n loc\n }, this.base));\n }\n named(name, block, loc) {\n return new NamedBlock((0, _util.assign)({\n name,\n block,\n componentArgs: [],\n loc\n }, this.base));\n }\n selfClosingComponent(callee, loc) {\n return new InvokeComponent((0, _util.assign)({\n loc,\n callee,\n // point the empty named blocks at the `/` self-closing tag\n blocks: new NamedBlocks({\n blocks: [],\n loc: loc.sliceEndChars({\n skipEnd: 1,\n chars: 1\n })\n })\n }, this.base));\n }\n componentWithDefaultBlock(callee, children, symbols, loc) {\n let block = this.builder.block(symbols, children, loc);\n let namedBlock = this.builder.namedBlock(SourceSlice.synthetic('default'), block, loc); // BUILDER.simpleNamedBlock('default', children, symbols, loc);\n\n return new InvokeComponent((0, _util.assign)({\n loc,\n callee,\n blocks: this.builder.namedBlocks([namedBlock], namedBlock.loc)\n }, this.base));\n }\n componentWithNamedBlocks(callee, blocks, loc) {\n return new InvokeComponent((0, _util.assign)({\n loc,\n callee,\n blocks: this.builder.namedBlocks(blocks, SpanList.range(blocks))\n }, this.base));\n }\n }\n function SexpSyntaxContext(node) {\n if (isSimpleCallee(node)) {\n return LooseModeResolution.namespaced(HELPER_NAMESPACE);\n } else {\n return null;\n }\n }\n function ModifierSyntaxContext(node) {\n if (isSimpleCallee(node)) {\n return LooseModeResolution.namespaced(MODIFIER_NAMESPACE);\n } else {\n return null;\n }\n }\n function BlockSyntaxContext(node) {\n if (isSimpleCallee(node)) {\n return LooseModeResolution.namespaced(COMPONENT_NAMESPACE);\n } else {\n return LooseModeResolution.fallback();\n }\n }\n function ComponentSyntaxContext(node) {\n if (isSimplePath(node)) {\n return LooseModeResolution.namespaced(FreeVarNamespace.Component, true);\n } else {\n return null;\n }\n }\n\n /**\n * This corresponds to append positions (text curlies or attribute\n * curlies). In strict mode, this also corresponds to arg curlies.\n */\n function AttrValueSyntaxContext(node) {\n let isSimple = isSimpleCallee(node);\n let isInvoke = isInvokeNode(node);\n if (isSimple) {\n return isInvoke ? LooseModeResolution.namespaced(FreeVarNamespace.Helper) : LooseModeResolution.attr();\n } else {\n return isInvoke ? STRICT_RESOLUTION : LooseModeResolution.fallback();\n }\n }\n\n /**\n * This corresponds to append positions (text curlies or attribute\n * curlies). In strict mode, this also corresponds to arg curlies.\n */\n function AppendSyntaxContext(node) {\n let isSimple = isSimpleCallee(node);\n let isInvoke = isInvokeNode(node);\n let trusting = node.trusting;\n if (isSimple) {\n return trusting ? LooseModeResolution.trustingAppend({\n invoke: isInvoke\n }) : LooseModeResolution.append({\n invoke: isInvoke\n });\n } else {\n return LooseModeResolution.fallback();\n }\n }\n // UTILITIES\n /**\n * A call node has a simple callee if its head is:\n *\n * - a `PathExpression`\n * - the `PathExpression`'s head is a `VarHead`\n * - it has no tail\n *\n * Simple heads:\n *\n * ```\n * {{x}}\n * {{x y}}\n * ```\n *\n * Not simple heads:\n *\n * ```\n * {{x.y}}\n * {{x.y z}}\n * {{@x}}\n * {{@x a}}\n * {{this}}\n * {{this a}}\n * ```\n */\n function isSimpleCallee(node) {\n let path = node.path;\n return isSimplePath(path);\n }\n function isSimplePath(node) {\n if (node.type === 'PathExpression' && node.head.type === 'VarHead') {\n return node.tail.length === 0;\n } else {\n return false;\n }\n }\n\n /**\n * The call expression has at least one argument.\n */\n function isInvokeNode(node) {\n return node.params.length > 0 || node.hash.pairs.length > 0;\n }\n function normalize(source, options) {\n var _options$customizeCom;\n if (options === void 0) {\n options = {\n lexicalScope: () => false\n };\n }\n let ast = preprocess(source, options);\n let normalizeOptions = {\n strictMode: false,\n locals: [],\n ...options\n };\n let top = SymbolTable.top(normalizeOptions.locals, {\n customizeComponentName: (_options$customizeCom = options.customizeComponentName) != null ? _options$customizeCom : name => name,\n lexicalScope: options.lexicalScope\n });\n let block = new BlockContext(source, normalizeOptions, top);\n let normalizer = new StatementNormalizer(block);\n let astV2 = new TemplateChildren(block.loc(ast.loc), ast.body.map(b => normalizer.normalize(b)), block).assertTemplate(top);\n let locals = top.getUsedTemplateLocals();\n return [astV2, locals];\n }\n\n /**\n * A `BlockContext` represents the block that a particular AST node is contained inside of.\n *\n * `BlockContext` is aware of template-wide options (such as strict mode), as well as the bindings\n * that are in-scope within that block.\n *\n * Concretely, it has the `PrecompileOptions` and current `SymbolTable`, and provides\n * facilities for working with those options.\n *\n * `BlockContext` is stateless.\n */\n class BlockContext {\n constructor(source, options, table) {\n this.builder = void 0;\n this.source = source;\n this.options = options;\n this.table = table;\n this.builder = new Builder();\n }\n get strict() {\n return this.options.strictMode || false;\n }\n loc(loc) {\n return this.source.spanFor(loc);\n }\n resolutionFor(node, resolution) {\n if (this.strict) {\n return {\n result: STRICT_RESOLUTION\n };\n }\n if (this.isFreeVar(node)) {\n let r = resolution(node);\n if (r === null) {\n return {\n result: 'error',\n path: printPath(node),\n head: printHead(node)\n };\n }\n return {\n result: r\n };\n } else {\n return {\n result: STRICT_RESOLUTION\n };\n }\n }\n isLexicalVar(variable) {\n return this.table.hasLexical(variable);\n }\n isFreeVar(callee) {\n if (callee.type === 'PathExpression') {\n if (callee.head.type !== 'VarHead') {\n return false;\n }\n return !this.table.has(callee.head.name);\n } else if (callee.path.type === 'PathExpression') {\n return this.isFreeVar(callee.path);\n } else {\n return false;\n }\n }\n hasBinding(name) {\n return this.table.has(name) || this.table.hasLexical(name);\n }\n child(blockParams) {\n return new BlockContext(this.source, this.options, this.table.child(blockParams));\n }\n customizeComponentName(input) {\n if (this.options.customizeComponentName) {\n return this.options.customizeComponentName(input);\n } else {\n return input;\n }\n }\n }\n\n /**\n * An `ExpressionNormalizer` normalizes expressions within a block.\n *\n * `ExpressionNormalizer` is stateless.\n */\n class ExpressionNormalizer {\n constructor(block) {\n this.block = block;\n }\n\n /**\n * The `normalize` method takes an arbitrary expression and its original syntax context and\n * normalizes it to an ASTv2 expression.\n *\n * @see {SyntaxContext}\n */\n\n normalize(expr, resolution) {\n switch (expr.type) {\n case 'NullLiteral':\n case 'BooleanLiteral':\n case 'NumberLiteral':\n case 'StringLiteral':\n case 'UndefinedLiteral':\n return this.block.builder.literal(expr.value, this.block.loc(expr.loc));\n case 'PathExpression':\n return this.path(expr, resolution);\n case 'SubExpression':\n {\n let resolution = this.block.resolutionFor(expr, SexpSyntaxContext);\n if (resolution.result === 'error') {\n throw generateSyntaxError(\"You attempted to invoke a path (`\" + resolution.path + \"`) but \" + resolution.head + \" was not in scope\", expr.loc);\n }\n return this.block.builder.sexp(this.callParts(expr, resolution.result), this.block.loc(expr.loc));\n }\n }\n }\n path(expr, resolution) {\n let headOffsets = this.block.loc(expr.head.loc);\n let tail = [];\n\n // start with the head\n let offset = headOffsets;\n for (let part of expr.tail) {\n offset = offset.sliceStartChars({\n chars: part.length,\n skipStart: 1\n });\n tail.push(new SourceSlice({\n loc: offset,\n chars: part\n }));\n }\n return this.block.builder.path(this.ref(expr.head, resolution), tail, this.block.loc(expr.loc));\n }\n\n /**\n * The `callParts` method takes ASTv1.CallParts as well as a syntax context and normalizes\n * it to an ASTv2 CallParts.\n */\n callParts(parts, context) {\n let {\n path,\n params,\n hash\n } = parts;\n let callee = this.normalize(path, context);\n let paramList = params.map(p => this.normalize(p, ARGUMENT_RESOLUTION));\n let paramLoc = SpanList.range(paramList, callee.loc.collapse('end'));\n let namedLoc = this.block.loc(hash.loc);\n let argsLoc = SpanList.range([paramLoc, namedLoc]);\n let positional = this.block.builder.positional(params.map(p => this.normalize(p, ARGUMENT_RESOLUTION)), paramLoc);\n let named = this.block.builder.named(hash.pairs.map(p => this.namedArgument(p)), this.block.loc(hash.loc));\n return {\n callee,\n args: this.block.builder.args(positional, named, argsLoc)\n };\n }\n namedArgument(pair) {\n let offsets = this.block.loc(pair.loc);\n let keyOffsets = offsets.sliceStartChars({\n chars: pair.key.length\n });\n return this.block.builder.namedArgument(new SourceSlice({\n chars: pair.key,\n loc: keyOffsets\n }), this.normalize(pair.value, ARGUMENT_RESOLUTION));\n }\n\n /**\n * The `ref` method normalizes an `ASTv1.PathHead` into an `ASTv2.VariableReference`.\n * This method is extremely important, because it is responsible for normalizing free\n * variables into an an ASTv2.PathHead *with appropriate context*.\n *\n * The syntax context is originally determined by the syntactic position that this `PathHead`\n * came from, and is ultimately attached to the `ASTv2.VariableReference` here. In ASTv2,\n * the `VariableReference` node bears full responsibility for loose mode rules that control\n * the behavior of free variables.\n */\n ref(head, resolution) {\n let {\n block\n } = this;\n let {\n builder,\n table\n } = block;\n let offsets = block.loc(head.loc);\n switch (head.type) {\n case 'ThisHead':\n return builder.self(offsets);\n case 'AtHead':\n {\n let symbol = table.allocateNamed(head.name);\n return builder.at(head.name, symbol, offsets);\n }\n case 'VarHead':\n {\n if (block.hasBinding(head.name)) {\n let [symbol, isRoot] = table.get(head.name);\n return block.builder.localVar(head.name, symbol, isRoot, offsets);\n } else {\n let context = block.strict ? STRICT_RESOLUTION : resolution;\n let symbol = block.table.allocateFree(head.name, context);\n return block.builder.freeVar({\n name: head.name,\n context,\n symbol,\n loc: offsets\n });\n }\n }\n }\n }\n }\n\n /**\n * `TemplateNormalizer` normalizes top-level ASTv1 statements to ASTv2.\n */\n class StatementNormalizer {\n constructor(block) {\n this.block = block;\n }\n normalize(node) {\n switch (node.type) {\n case 'PartialStatement':\n throw new Error(\"Handlebars partial syntax ({{> ...}}) is not allowed in Glimmer\");\n case 'BlockStatement':\n return this.BlockStatement(node);\n case 'ElementNode':\n return new ElementNormalizer(this.block).ElementNode(node);\n case 'MustacheStatement':\n return this.MustacheStatement(node);\n\n // These are the same in ASTv2\n case 'MustacheCommentStatement':\n return this.MustacheCommentStatement(node);\n case 'CommentStatement':\n {\n let loc = this.block.loc(node.loc);\n return new HtmlComment({\n loc,\n text: loc.slice({\n skipStart: 4,\n skipEnd: 3\n }).toSlice(node.value)\n });\n }\n case 'TextNode':\n return new HtmlText({\n loc: this.block.loc(node.loc),\n chars: node.chars\n });\n }\n }\n MustacheCommentStatement(node) {\n let loc = this.block.loc(node.loc);\n let textLoc;\n if (loc.asString().slice(0, 5) === '{{!--') {\n textLoc = loc.slice({\n skipStart: 5,\n skipEnd: 4\n });\n } else {\n textLoc = loc.slice({\n skipStart: 3,\n skipEnd: 2\n });\n }\n return new GlimmerComment({\n loc,\n text: textLoc.toSlice(node.value)\n });\n }\n\n /**\n * Normalizes an ASTv1.MustacheStatement to an ASTv2.AppendStatement\n */\n MustacheStatement(mustache) {\n let {\n escaped\n } = mustache;\n let loc = this.block.loc(mustache.loc);\n\n // Normalize the call parts in AppendSyntaxContext\n let callParts = this.expr.callParts({\n path: mustache.path,\n params: mustache.params,\n hash: mustache.hash\n }, AppendSyntaxContext(mustache));\n let value = callParts.args.isEmpty() ? callParts.callee : this.block.builder.sexp(callParts, loc);\n return this.block.builder.append({\n table: this.block.table,\n trusting: !escaped,\n value\n }, loc);\n }\n\n /**\n * Normalizes a ASTv1.BlockStatement to an ASTv2.BlockStatement\n */\n BlockStatement(block) {\n let {\n program,\n inverse\n } = block;\n let loc = this.block.loc(block.loc);\n let resolution = this.block.resolutionFor(block, BlockSyntaxContext);\n if (resolution.result === 'error') {\n throw generateSyntaxError(\"You attempted to invoke a path (`{{#\" + resolution.path + \"}}`) but \" + resolution.head + \" was not in scope\", loc);\n }\n let callParts = this.expr.callParts(block, resolution.result);\n return this.block.builder.blockStatement((0, _util.assign)({\n symbols: this.block.table,\n program: this.Block(program),\n inverse: inverse ? this.Block(inverse) : null\n }, callParts), loc);\n }\n Block(_ref37) {\n let {\n body,\n loc,\n blockParams\n } = _ref37;\n let child = this.block.child(blockParams);\n let normalizer = new StatementNormalizer(child);\n return new BlockChildren(this.block.loc(loc), body.map(b => normalizer.normalize(b)), this.block).assertBlock(child.table);\n }\n get expr() {\n return new ExpressionNormalizer(this.block);\n }\n }\n class ElementNormalizer {\n constructor(ctx) {\n this.ctx = ctx;\n }\n\n /**\n * Normalizes an ASTv1.ElementNode to:\n *\n * - ASTv2.NamedBlock if the tag name begins with `:`\n * - ASTv2.Component if the tag name matches the component heuristics\n * - ASTv2.SimpleElement if the tag name doesn't match the component heuristics\n *\n * A tag name represents a component if:\n *\n * - it begins with `@`\n * - it is exactly `this` or begins with `this.`\n * - the part before the first `.` is a reference to an in-scope variable binding\n * - it begins with an uppercase character\n */\n ElementNode(element) {\n let {\n tag,\n selfClosing,\n comments\n } = element;\n let loc = this.ctx.loc(element.loc);\n let [tagHead, ...rest] = (0, _util.asPresentArray)(tag.split('.'));\n\n // the head, attributes and modifiers are in the current scope\n let path = this.classifyTag(tagHead, rest, element.loc);\n let attrs = element.attributes.filter(a => a.name[0] !== '@').map(a => this.attr(a));\n let args = element.attributes.filter(a => a.name[0] === '@').map(a => this.arg(a));\n let modifiers = element.modifiers.map(m => this.modifier(m));\n\n // the element's block params are in scope for the children\n let child = this.ctx.child(element.blockParams);\n let normalizer = new StatementNormalizer(child);\n let childNodes = element.children.map(s => normalizer.normalize(s));\n let el = this.ctx.builder.element({\n selfClosing,\n attrs,\n componentArgs: args,\n modifiers,\n comments: comments.map(c => new StatementNormalizer(this.ctx).MustacheCommentStatement(c))\n });\n let children = new ElementChildren(el, loc, childNodes, this.ctx);\n let offsets = this.ctx.loc(element.loc);\n let tagOffsets = offsets.sliceStartChars({\n chars: tag.length,\n skipStart: 1\n });\n if (path === 'ElementHead') {\n if (tag[0] === ':') {\n return children.assertNamedBlock(tagOffsets.slice({\n skipStart: 1\n }).toSlice(tag.slice(1)), child.table);\n } else {\n return children.assertElement(tagOffsets.toSlice(tag), element.blockParams.length > 0);\n }\n }\n if (element.selfClosing) {\n return el.selfClosingComponent(path, loc);\n } else {\n let blocks = children.assertComponent(tag, child.table, element.blockParams.length > 0);\n return el.componentWithNamedBlocks(path, blocks, loc);\n }\n }\n modifier(m) {\n let resolution = this.ctx.resolutionFor(m, ModifierSyntaxContext);\n if (resolution.result === 'error') {\n throw generateSyntaxError(\"You attempted to invoke a path (`{{#\" + resolution.path + \"}}`) as a modifier, but \" + resolution.head + \" was not in scope. Try adding `this` to the beginning of the path\", m.loc);\n }\n let callParts = this.expr.callParts(m, resolution.result);\n return this.ctx.builder.modifier(callParts, this.ctx.loc(m.loc));\n }\n\n /**\n * This method handles attribute values that are curlies, as well as curlies nested inside of\n * interpolations:\n *\n * ```hbs\n * <a href={{url}} />\n * <a href=\"{{url}}.html\" />\n * ```\n */\n mustacheAttr(mustache) {\n // Normalize the call parts in AttrValueSyntaxContext\n let sexp = this.ctx.builder.sexp(this.expr.callParts(mustache, AttrValueSyntaxContext(mustache)), this.ctx.loc(mustache.loc));\n\n // If there are no params or hash, just return the function part as its own expression\n if (sexp.args.isEmpty()) {\n return sexp.callee;\n } else {\n return sexp;\n }\n }\n\n /**\n * attrPart is the narrowed down list of valid attribute values that are also\n * allowed as a concat part (you can't nest concats).\n */\n attrPart(part) {\n switch (part.type) {\n case 'MustacheStatement':\n return {\n expr: this.mustacheAttr(part),\n trusting: !part.escaped\n };\n case 'TextNode':\n return {\n expr: this.ctx.builder.literal(part.chars, this.ctx.loc(part.loc)),\n trusting: true\n };\n }\n }\n attrValue(part) {\n switch (part.type) {\n case 'ConcatStatement':\n {\n let parts = part.parts.map(p => this.attrPart(p).expr);\n return {\n expr: this.ctx.builder.interpolate(parts, this.ctx.loc(part.loc)),\n trusting: false\n };\n }\n default:\n return this.attrPart(part);\n }\n }\n attr(m) {\n (0, _util.assert)(m.name[0] !== '@', 'An attr name must not start with `@`');\n if (m.name === '...attributes') {\n return this.ctx.builder.splatAttr(this.ctx.table.allocateBlock('attrs'), this.ctx.loc(m.loc));\n }\n let offsets = this.ctx.loc(m.loc);\n let nameSlice = offsets.sliceStartChars({\n chars: m.name.length\n }).toSlice(m.name);\n let value = this.attrValue(m.value);\n return this.ctx.builder.attr({\n name: nameSlice,\n value: value.expr,\n trusting: value.trusting\n }, offsets);\n }\n maybeDeprecatedCall(arg, part) {\n if (this.ctx.strict) {\n return null;\n }\n if (part.type !== 'MustacheStatement') {\n return null;\n }\n let {\n path\n } = part;\n if (path.type !== 'PathExpression') {\n return null;\n }\n if (path.head.type !== 'VarHead') {\n return null;\n }\n let {\n name\n } = path.head;\n if (name === 'has-block' || name === 'has-block-params') {\n return null;\n }\n if (this.ctx.hasBinding(name)) {\n return null;\n }\n if (path.tail.length !== 0) {\n return null;\n }\n if (part.params.length !== 0 || part.hash.pairs.length !== 0) {\n return null;\n }\n let context = LooseModeResolution.attr();\n let callee = this.ctx.builder.freeVar({\n name,\n context,\n symbol: this.ctx.table.allocateFree(name, context),\n loc: path.loc\n });\n return {\n expr: this.ctx.builder.deprecatedCall(arg, callee, part.loc),\n trusting: false\n };\n }\n arg(arg) {\n (0, _util.assert)(arg.name[0] === '@', 'An arg name must start with `@`');\n let offsets = this.ctx.loc(arg.loc);\n let nameSlice = offsets.sliceStartChars({\n chars: arg.name.length\n }).toSlice(arg.name);\n let value = this.maybeDeprecatedCall(nameSlice, arg.value) || this.attrValue(arg.value);\n return this.ctx.builder.arg({\n name: nameSlice,\n value: value.expr,\n trusting: value.trusting\n }, offsets);\n }\n\n /**\n * This function classifies the head of an ASTv1.Element into an ASTv2.PathHead (if the\n * element is a component) or `'ElementHead'` (if the element is a simple element).\n *\n * Rules:\n *\n * 1. If the variable is an `@arg`, return an `AtHead`\n * 2. If the variable is `this`, return a `ThisHead`\n * 3. If the variable is in the current scope:\n * a. If the scope is the root scope, then return a Free `LocalVarHead`\n * b. Else, return a standard `LocalVarHead`\n * 4. If the tag name is a path and the variable is not in the current scope, Syntax Error\n * 5. If the variable is uppercase return a FreeVar(ResolveAsComponentHead)\n * 6. Otherwise, return `'ElementHead'`\n */\n classifyTag(variable, tail, loc) {\n let uppercase = isUpperCase(variable);\n let inScope = variable[0] === '@' || variable === 'this' || this.ctx.hasBinding(variable);\n if (this.ctx.strict && !inScope) {\n if (uppercase) {\n throw generateSyntaxError(\"Attempted to invoke a component that was not in scope in a strict mode template, `<\" + variable + \">`. If you wanted to create an element with that name, convert it to lowercase - `<\" + variable.toLowerCase() + \">`\", loc);\n }\n\n // In strict mode, values are always elements unless they are in scope\n return 'ElementHead';\n }\n\n // Since the parser handed us the HTML element name as a string, we need\n // to convert it into an ASTv1 path so it can be processed using the\n // expression normalizer.\n let isComponent = inScope || uppercase;\n let variableLoc = loc.sliceStartChars({\n skipStart: 1,\n chars: variable.length\n });\n let tailLength = tail.reduce((accum, part) => accum + 1 + part.length, 0);\n let pathEnd = variableLoc.getEnd().move(tailLength);\n let pathLoc = variableLoc.withEnd(pathEnd);\n if (isComponent) {\n let path = b.path({\n head: b.head(variable, variableLoc),\n tail,\n loc: pathLoc\n });\n let resolution = this.ctx.isLexicalVar(variable) ? {\n result: STRICT_RESOLUTION\n } : this.ctx.resolutionFor(path, ComponentSyntaxContext);\n if (resolution.result === 'error') {\n throw generateSyntaxError(\"You attempted to invoke a path (`<\" + resolution.path + \">`) but \" + resolution.head + \" was not in scope\", loc);\n }\n return new ExpressionNormalizer(this.ctx).normalize(path, resolution.result);\n } else {\n this.ctx.table.allocateFree(variable, STRICT_RESOLUTION);\n }\n\n // If the tag name wasn't a valid component but contained a `.`, it's\n // a syntax error.\n if (tail.length > 0) {\n throw generateSyntaxError(\"You used \" + variable + \".\" + tail.join('.') + \" as a tag name, but \" + variable + \" is not in scope\", loc);\n }\n return 'ElementHead';\n }\n get expr() {\n return new ExpressionNormalizer(this.ctx);\n }\n }\n class Children {\n constructor(loc, children, block) {\n this.namedBlocks = void 0;\n this.hasSemanticContent = void 0;\n this.nonBlockChildren = void 0;\n this.loc = loc;\n this.children = children;\n this.block = block;\n this.namedBlocks = children.filter(c => c instanceof NamedBlock);\n this.hasSemanticContent = Boolean(children.filter(c => {\n if (c instanceof NamedBlock) {\n return false;\n }\n switch (c.type) {\n case 'GlimmerComment':\n case 'HtmlComment':\n return false;\n case 'HtmlText':\n return !/^\\s*$/u.test(c.chars);\n default:\n return true;\n }\n }).length);\n this.nonBlockChildren = children.filter(c => !(c instanceof NamedBlock));\n }\n }\n class TemplateChildren extends Children {\n assertTemplate(table) {\n if ((0, _util.isPresentArray)(this.namedBlocks)) {\n throw generateSyntaxError(\"Unexpected named block at the top-level of a template\", this.loc);\n }\n return this.block.builder.template(table, this.nonBlockChildren, this.block.loc(this.loc));\n }\n }\n class BlockChildren extends Children {\n assertBlock(table) {\n if ((0, _util.isPresentArray)(this.namedBlocks)) {\n throw generateSyntaxError(\"Unexpected named block nested in a normal block\", this.loc);\n }\n return this.block.builder.block(table, this.nonBlockChildren, this.loc);\n }\n }\n class ElementChildren extends Children {\n constructor(el, loc, children, block) {\n super(loc, children, block);\n this.el = el;\n }\n assertNamedBlock(name, table) {\n if (this.el.base.selfClosing) {\n throw generateSyntaxError(\"<:\" + name.chars + \"/> is not a valid named block: named blocks cannot be self-closing\", this.loc);\n }\n if ((0, _util.isPresentArray)(this.namedBlocks)) {\n throw generateSyntaxError(\"Unexpected named block inside <:\" + name.chars + \"> named block: named blocks cannot contain nested named blocks\", this.loc);\n }\n if (!isLowerCase(name.chars)) {\n throw generateSyntaxError(\"<:\" + name.chars + \"> is not a valid named block, and named blocks must begin with a lowercase letter\", this.loc);\n }\n if (this.el.base.attrs.length > 0 || this.el.base.componentArgs.length > 0 || this.el.base.modifiers.length > 0) {\n throw generateSyntaxError(\"named block <:\" + name.chars + \"> cannot have attributes, arguments, or modifiers\", this.loc);\n }\n let offsets = SpanList.range(this.nonBlockChildren, this.loc);\n return this.block.builder.namedBlock(name, this.block.builder.block(table, this.nonBlockChildren, offsets), this.loc);\n }\n assertElement(name, hasBlockParams) {\n if (hasBlockParams) {\n throw generateSyntaxError(\"Unexpected block params in <\" + name + \">: simple elements cannot have block params\", this.loc);\n }\n if ((0, _util.isPresentArray)(this.namedBlocks)) {\n let names = this.namedBlocks.map(b => b.name);\n if (names.length === 1) {\n throw generateSyntaxError(\"Unexpected named block <:foo> inside <\" + name.chars + \"> HTML element\", this.loc);\n } else {\n let printedNames = names.map(n => \"<:\" + n.chars + \">\").join(', ');\n throw generateSyntaxError(\"Unexpected named blocks inside <\" + name.chars + \"> HTML element (\" + printedNames + \")\", this.loc);\n }\n }\n return this.el.simple(name, this.nonBlockChildren, this.loc);\n }\n assertComponent(name, table, hasBlockParams) {\n if ((0, _util.isPresentArray)(this.namedBlocks) && this.hasSemanticContent) {\n throw generateSyntaxError(\"Unexpected content inside <\" + name + \"> component invocation: when using named blocks, the tag cannot contain other content\", this.loc);\n }\n if ((0, _util.isPresentArray)(this.namedBlocks)) {\n if (hasBlockParams) {\n throw generateSyntaxError(\"Unexpected block params list on <\" + name + \"> component invocation: when passing named blocks, the invocation tag cannot take block params\", this.loc);\n }\n let seenNames = new Set();\n for (let block of this.namedBlocks) {\n let name = block.name.chars;\n if (seenNames.has(name)) {\n throw generateSyntaxError(\"Component had two named blocks with the same name, `<:\" + name + \">`. Only one block with a given name may be passed\", this.loc);\n }\n if (name === 'inverse' && seenNames.has('else') || name === 'else' && seenNames.has('inverse')) {\n throw generateSyntaxError(\"Component has both <:else> and <:inverse> block. <:inverse> is an alias for <:else>\", this.loc);\n }\n seenNames.add(name);\n }\n return this.namedBlocks;\n } else {\n return [this.block.builder.namedBlock(SourceSlice.synthetic('default'), this.block.builder.block(table, this.nonBlockChildren, this.loc), this.loc)];\n }\n }\n }\n function printPath(node) {\n if (node.type !== 'PathExpression' && node.path.type === 'PathExpression') {\n return printPath(node.path);\n } else {\n return new Printer({\n entityEncoding: 'raw'\n }).print(node);\n }\n }\n function printHead(node) {\n if (node.type === 'PathExpression') {\n switch (node.head.type) {\n case 'AtHead':\n case 'VarHead':\n return node.head.name;\n case 'ThisHead':\n return 'this';\n }\n } else if (node.path.type === 'PathExpression') {\n return printHead(node.path);\n } else {\n return new Printer({\n entityEncoding: 'raw'\n }).print(node);\n }\n }\n});","define(\"@glimmer/util\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.TEXT_NODE = _exports.Stack = _exports.SERIALIZATION_FIRST_NODE_STRING = _exports.RAW_NODE = _exports.NS_XMLNS = _exports.NS_XML = _exports.NS_XLINK = _exports.NS_SVG = _exports.NS_MATHML = _exports.NS_HTML = _exports.LOGGER = _exports.LOCAL_LOGGER = _exports.ImmediateConstants = _exports.INSERT_BEFORE_END = _exports.INSERT_BEFORE_BEGIN = _exports.INSERT_AFTER_END = _exports.INSERT_AFTER_BEGIN = _exports.EMPTY_STRING_ARRAY = _exports.EMPTY_NUMBER_ARRAY = _exports.EMPTY_ARRAY = _exports.ELEMENT_NODE = _exports.DOCUMENT_TYPE_NODE = _exports.DOCUMENT_NODE = _exports.DOCUMENT_FRAGMENT_NODE = _exports.COMMENT_NODE = void 0;\n _exports.arrayToOption = arrayToOption;\n _exports.asPresentArray = asPresentArray;\n _exports.assert = debugAssert;\n _exports.assertNever = assertNever;\n _exports.assertPresent = assertPresent;\n _exports.assertPresentArray = assertPresentArray;\n _exports.beginTestSteps = _exports.assign = void 0;\n _exports.buildUntouchableThis = buildUntouchableThis;\n _exports.castToBrowser = castToBrowser;\n _exports.castToSimple = castToSimple;\n _exports.checkNode = checkBrowserNode;\n _exports.clearElement = clearElement;\n _exports.constants = constants;\n _exports.debugToString = void 0;\n _exports.decodeHandle = decodeHandle;\n _exports.decodeImmediate = decodeImmediate;\n _exports.decodeNegative = decodeNegative;\n _exports.decodePositive = decodePositive;\n _exports.deprecate = deprecate;\n _exports.dict = dict;\n _exports.emptyArray = emptyArray;\n _exports.encodeHandle = encodeHandle;\n _exports.encodeImmediate = encodeImmediate;\n _exports.encodeNegative = encodeNegative;\n _exports.encodePositive = encodePositive;\n _exports.endTestSteps = void 0;\n _exports.entries = entries;\n _exports.enumerate = enumerate;\n _exports.exhausted = exhausted;\n _exports.expect = expect;\n _exports.extractHandle = extractHandle;\n _exports.getFirst = getFirst;\n _exports.getLast = getLast;\n _exports.ifPresent = ifPresent;\n _exports.intern = intern;\n _exports.isDict = isDict;\n _exports.isElement = isElement;\n _exports.isEmptyArray = isEmptyArray;\n _exports.isErrHandle = isErrHandle;\n _exports.isHandle = isHandle;\n _exports.isNonPrimitiveHandle = isNonPrimitiveHandle;\n _exports.isObject = isObject;\n _exports.isOkHandle = isOkHandle;\n _exports.isPresent = isPresent;\n _exports.isPresentArray = isPresentArray;\n _exports.isSerializationFirstNode = isSerializationFirstNode;\n _exports.isSimpleElement = isSimpleElement;\n _exports.isSmallInt = isSmallInt;\n _exports.keys = keys;\n _exports.logStep = void 0;\n _exports.mapPresentArray = mapPresentArray;\n _exports.reverse = reverse;\n _exports.strip = strip;\n _exports.tuple = void 0;\n _exports.unreachable = unreachable;\n _exports.unwrap = unwrap;\n _exports.unwrapHandle = unwrapHandle;\n _exports.unwrapTemplate = unwrapTemplate;\n _exports.values = values;\n _exports.verifySteps = void 0;\n const EMPTY_ARRAY = _exports.EMPTY_ARRAY = Object.freeze([]);\n function emptyArray() {\n return EMPTY_ARRAY;\n }\n const EMPTY_STRING_ARRAY = _exports.EMPTY_STRING_ARRAY = emptyArray();\n const EMPTY_NUMBER_ARRAY = _exports.EMPTY_NUMBER_ARRAY = emptyArray();\n\n /**\n * This function returns `true` if the input array is the special empty array sentinel,\n * which is sometimes used for optimizations.\n */\n function isEmptyArray(input) {\n return input === EMPTY_ARRAY;\n }\n function* reverse(input) {\n for (let i = input.length - 1; i >= 0; i--) {\n yield input[i];\n }\n }\n function* enumerate(input) {\n let i = 0;\n for (const item of input) {\n yield [i++, item];\n }\n }\n\n // import Logger from './logger';\n\n // let alreadyWarned = false;\n\n function debugAssert(test, msg) {\n // if (!alreadyWarned) {\n // alreadyWarned = true;\n // Logger.warn(\"Don't leave debug assertions on in public builds\");\n // }\n\n if (!test) {\n throw new Error(msg || 'assertion failure');\n }\n }\n function deprecate(desc) {\n LOCAL_LOGGER.warn(\"DEPRECATION: \" + desc);\n }\n function keys(obj) {\n return Object.keys(obj);\n }\n function unwrap(val) {\n if (val === null || val === undefined) throw new Error(\"Expected value to be present\");\n return val;\n }\n function expect(val, message) {\n if (val === null || val === undefined) throw new Error(message);\n return val;\n }\n function unreachable(message) {\n if (message === void 0) {\n message = 'unreachable';\n }\n return new Error(message);\n }\n function exhausted(value) {\n throw new Error(\"Exhausted \" + String(value));\n }\n const tuple = function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return args;\n };\n _exports.tuple = tuple;\n function isPresent(value) {\n return value !== null && value !== undefined;\n }\n function assertPresent(value, message) {\n if (!isPresent(value)) {\n throw new Error(\"Expected present, got \" + (typeof value === 'string' ? value : message));\n }\n }\n function isPresentArray(list) {\n return list.length > 0;\n }\n function ifPresent(list, ifPresent, otherwise) {\n if (isPresentArray(list)) {\n return ifPresent(list);\n } else {\n return otherwise();\n }\n }\n function arrayToOption(list) {\n if (isPresentArray(list)) {\n return list;\n } else {\n return null;\n }\n }\n function assertPresentArray(list, message) {\n if (message === void 0) {\n message = \"unexpected empty list\";\n }\n if (!isPresentArray(list)) {\n throw new Error(message);\n }\n }\n function asPresentArray(list, message) {\n if (message === void 0) {\n message = \"unexpected empty list\";\n }\n assertPresentArray(list, message);\n return list;\n }\n function getLast(list) {\n return list.length === 0 ? undefined : list[list.length - 1];\n }\n function getFirst(list) {\n return list.length === 0 ? undefined : list[0];\n }\n function mapPresentArray(list, mapper) {\n if (list === null) {\n return null;\n }\n let out = [];\n for (let item of list) {\n out.push(mapper(item));\n }\n return out;\n }\n function dict() {\n return Object.create(null);\n }\n function isDict(u) {\n return u !== null && u !== undefined;\n }\n function isObject(u) {\n return typeof u === 'function' || typeof u === 'object' && u !== null;\n }\n class StackImpl {\n constructor(values) {\n if (values === void 0) {\n values = [];\n }\n this.stack = void 0;\n this.current = null;\n this.stack = values;\n }\n get size() {\n return this.stack.length;\n }\n push(item) {\n this.current = item;\n this.stack.push(item);\n }\n pop() {\n var _getLast;\n let item = this.stack.pop();\n this.current = (_getLast = getLast(this.stack)) != null ? _getLast : null;\n return item === undefined ? null : item;\n }\n nth(from) {\n let len = this.stack.length;\n return len < from ? null : unwrap(this.stack[len - from]);\n }\n isEmpty() {\n return this.stack.length === 0;\n }\n toArray() {\n return this.stack;\n }\n }\n\n /// <reference types=\"qunit\" />\n _exports.Stack = StackImpl;\n let beginTestSteps = _exports.beginTestSteps = void 0;\n let endTestSteps = _exports.endTestSteps = void 0;\n let verifySteps = _exports.verifySteps = void 0;\n let logStep = _exports.logStep = void 0;\n let debugToString;\n if (true /* DEBUG */) {\n let getFunctionName = fn => {\n let functionName = fn.name;\n if (functionName === undefined) {\n let match = /function (\\w+)\\s*\\(/u.exec(String(fn));\n functionName = match && match[1] || '';\n }\n return functionName.replace(/^bound /u, '');\n };\n let getObjectName = obj => {\n let name;\n let className;\n if (obj.constructor && typeof obj.constructor === 'function') {\n className = getFunctionName(obj.constructor);\n }\n if ('toString' in obj && obj.toString !== Object.prototype.toString && obj.toString !== Function.prototype.toString) {\n name = obj.toString();\n }\n\n // If the class has a decent looking name, and the `toString` is one of the\n // default Ember toStrings, replace the constructor portion of the toString\n // with the class name. We check the length of the class name to prevent doing\n // this when the value is minified.\n if (name && /<.*:ember\\d+>/u.test(name) && className && className[0] !== '_' && className.length > 2 && className !== 'Class') {\n return name.replace(/<.*:/u, \"<\" + className + \":\");\n }\n return name || className;\n };\n let getPrimitiveName = value => {\n return String(value);\n };\n debugToString = value => {\n if (typeof value === 'function') {\n return getFunctionName(value) || \"(unknown function)\";\n } else if (typeof value === 'object' && value !== null) {\n return getObjectName(value) || \"(unknown object)\";\n } else {\n return getPrimitiveName(value);\n }\n };\n }\n var debugToString$1 = _exports.debugToString = debugToString;\n function clearElement(parent) {\n let current = parent.firstChild;\n while (current) {\n let next = current.nextSibling;\n parent.removeChild(current);\n current = next;\n }\n }\n const RAW_NODE = _exports.RAW_NODE = -1;\n const ELEMENT_NODE = _exports.ELEMENT_NODE = 1;\n const TEXT_NODE = _exports.TEXT_NODE = 3;\n const COMMENT_NODE = _exports.COMMENT_NODE = 8;\n const DOCUMENT_NODE = _exports.DOCUMENT_NODE = 9;\n const DOCUMENT_TYPE_NODE = _exports.DOCUMENT_TYPE_NODE = 10;\n const DOCUMENT_FRAGMENT_NODE = _exports.DOCUMENT_FRAGMENT_NODE = 11;\n const NS_HTML = _exports.NS_HTML = 'http://www.w3.org/1999/xhtml';\n const NS_MATHML = _exports.NS_MATHML = 'http://www.w3.org/1998/Math/MathML';\n const NS_SVG = _exports.NS_SVG = 'http://www.w3.org/2000/svg';\n const NS_XLINK = _exports.NS_XLINK = 'http://www.w3.org/1999/xlink';\n const NS_XML = _exports.NS_XML = 'http://www.w3.org/XML/1998/namespace';\n const NS_XMLNS = _exports.NS_XMLNS = 'http://www.w3.org/2000/xmlns/';\n const INSERT_BEFORE_BEGIN = _exports.INSERT_BEFORE_BEGIN = 'beforebegin';\n const INSERT_AFTER_BEGIN = _exports.INSERT_AFTER_BEGIN = 'afterbegin';\n const INSERT_BEFORE_END = _exports.INSERT_BEFORE_END = 'beforeend';\n const INSERT_AFTER_END = _exports.INSERT_AFTER_END = 'afterend';\n\n /*\n Encoding notes\n \n We use 30 bit integers for encoding, so that we don't ever encode a non-SMI\n integer to push on the stack.\n \n Handles are >= 0\n Immediates are < 0\n \n True, False, Undefined and Null are pushed as handles into the symbol table,\n with well known handles (0, 1, 2, 3)\n \n The negative space is divided into positives and negatives. Positives are\n higher numbers (-1, -2, -3, etc), negatives are lower.\n \n We only encode immediates for two reasons:\n \n 1. To transfer over the wire, so they're smaller in general\n 2. When pushing values onto the stack from the low level/inner VM, which may\n be converted into WASM one day.\n \n This allows the low-level VM to always use SMIs, and to minimize using JS\n values via handles for things like the stack pointer and frame pointer.\n Externally, most code pushes values as JS values, except when being pulled\n from the append byte code where it was already encoded.\n \n Logically, this is because the low level VM doesn't really care about these\n higher level values. For instance, the result of a userland helper may be a\n number, or a boolean, or undefined/null, but it's extra work to figure that\n out and push it correctly, vs. just pushing the value as a JS value with a\n handle.\n \n Note: The details could change here in the future, this is just the current\n strategy.\n */\n\n let ImmediateConstants = _exports.ImmediateConstants = /*#__PURE__*/function (ImmediateConstants) {\n ImmediateConstants[ImmediateConstants[\"MAX_SMI\"] = 1073741823] = \"MAX_SMI\";\n ImmediateConstants[ImmediateConstants[\"MIN_SMI\"] = -1073741824] = \"MIN_SMI\";\n ImmediateConstants[ImmediateConstants[\"SIGN_BIT\"] = -536870913] = \"SIGN_BIT\";\n ImmediateConstants[ImmediateConstants[\"MAX_INT\"] = 536870911] = \"MAX_INT\";\n ImmediateConstants[ImmediateConstants[\"MIN_INT\"] = -536870912] = \"MIN_INT\";\n ImmediateConstants[ImmediateConstants[\"FALSE_HANDLE\"] = 0] = \"FALSE_HANDLE\";\n ImmediateConstants[ImmediateConstants[\"TRUE_HANDLE\"] = 1] = \"TRUE_HANDLE\";\n ImmediateConstants[ImmediateConstants[\"NULL_HANDLE\"] = 2] = \"NULL_HANDLE\";\n ImmediateConstants[ImmediateConstants[\"UNDEFINED_HANDLE\"] = 3] = \"UNDEFINED_HANDLE\";\n ImmediateConstants[ImmediateConstants[\"ENCODED_FALSE_HANDLE\"] = 0] = \"ENCODED_FALSE_HANDLE\";\n ImmediateConstants[ImmediateConstants[\"ENCODED_TRUE_HANDLE\"] = 1] = \"ENCODED_TRUE_HANDLE\";\n ImmediateConstants[ImmediateConstants[\"ENCODED_NULL_HANDLE\"] = 2] = \"ENCODED_NULL_HANDLE\";\n ImmediateConstants[ImmediateConstants[\"ENCODED_UNDEFINED_HANDLE\"] = 3] = \"ENCODED_UNDEFINED_HANDLE\";\n return ImmediateConstants;\n }({});\n function isHandle(value) {\n return value >= 0;\n }\n function isNonPrimitiveHandle(value) {\n return value > ImmediateConstants.ENCODED_UNDEFINED_HANDLE;\n }\n function constants() {\n for (var _len2 = arguments.length, values = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n values[_key2] = arguments[_key2];\n }\n return [false, true, null, undefined, ...values];\n }\n function isSmallInt(value) {\n return value % 1 === 0 && value <= ImmediateConstants.MAX_INT && value >= ImmediateConstants.MIN_INT;\n }\n function encodeNegative(num) {\n return num & ImmediateConstants.SIGN_BIT;\n }\n function decodeNegative(num) {\n return num | ~ImmediateConstants.SIGN_BIT;\n }\n function encodePositive(num) {\n return ~num;\n }\n function decodePositive(num) {\n return ~num;\n }\n function encodeHandle(num) {\n return num;\n }\n function decodeHandle(num) {\n return num;\n }\n function encodeImmediate(num) {\n num |= 0;\n return num < 0 ? encodeNegative(num) : encodePositive(num);\n }\n function decodeImmediate(num) {\n num |= 0;\n return num > ImmediateConstants.SIGN_BIT ? decodePositive(num) : decodeNegative(num);\n }\n [1, -1].forEach(x => decodeImmediate(encodeImmediate(x)));\n\n /**\n Strongly hint runtimes to intern the provided string.\n \n When do I need to use this function?\n \n For the most part, never. Pre-mature optimization is bad, and often the\n runtime does exactly what you need it to, and more often the trade-off isn't\n worth it.\n \n Why?\n \n Runtimes store strings in at least 2 different representations:\n Ropes and Symbols (interned strings). The Rope provides a memory efficient\n data-structure for strings created from concatenation or some other string\n manipulation like splitting.\n \n Unfortunately checking equality of different ropes can be quite costly as\n runtimes must resort to clever string comparison algorithms. These\n algorithms typically cost in proportion to the length of the string.\n Luckily, this is where the Symbols (interned strings) shine. As Symbols are\n unique by their string content, equality checks can be done by pointer\n comparison.\n \n How do I know if my string is a rope or symbol?\n \n Typically (warning general sweeping statement, but truthy in runtimes at\n present) static strings created as part of the JS source are interned.\n Strings often used for comparisons can be interned at runtime if some\n criteria are met. One of these criteria can be the size of the entire rope.\n For example, in chrome 38 a rope longer then 12 characters will not\n intern, nor will segments of that rope.\n \n Some numbers: http://jsperf.com/eval-vs-keys/8\n \n Known Trick™\n \n @private\n @return {String} interned version of the provided string\n */\n function intern(str) {\n let obj = {};\n obj[str] = 1;\n for (let key in obj) {\n if (key === str) {\n return key;\n }\n }\n return str;\n }\n const SERIALIZATION_FIRST_NODE_STRING = _exports.SERIALIZATION_FIRST_NODE_STRING = '%+b:0%';\n function isSerializationFirstNode(node) {\n return node.nodeValue === SERIALIZATION_FIRST_NODE_STRING;\n }\n let assign = _exports.assign = Object.assign;\n function values(obj) {\n return Object.values(obj);\n }\n function entries(dict) {\n return Object.entries(dict);\n }\n function castToSimple(node) {\n if (isDocument(node)) {\n return node;\n } else if (isSimpleElement(node)) {\n return node;\n } else {\n return node;\n }\n }\n\n // If passed a document, verify we're in the browser and return it as a Document\n\n // If we don't know what this is, but the check requires it to be an element,\n // the cast will mandate that it's a browser element\n // Finally, if it's a more generic check, the cast will mandate that it's a\n // browser node and return a BrowserNodeUtils corresponding to the check\n function castToBrowser(node, sugaryCheck) {\n if (node === null || node === undefined) {\n return null;\n }\n if (typeof document === undefined) {\n throw new Error('Attempted to cast to a browser node in a non-browser context');\n }\n if (isDocument(node)) {\n return node;\n }\n if (node.ownerDocument !== document) {\n throw new Error('Attempted to cast to a browser node with a node that was not created from this document');\n }\n return checkBrowserNode(node, sugaryCheck);\n }\n function checkError(from, check) {\n return new Error(\"cannot cast a \" + from + \" into \" + String(check));\n }\n function isDocument(node) {\n return node.nodeType === DOCUMENT_NODE;\n }\n function isSimpleElement(node) {\n return (node == null ? void 0 : node.nodeType) === ELEMENT_NODE;\n }\n function isElement(node) {\n return (node == null ? void 0 : node.nodeType) === ELEMENT_NODE && node instanceof Element;\n }\n function checkBrowserNode(node, check) {\n let isMatch = false;\n if (node !== null) {\n if (typeof check === 'string') {\n isMatch = stringCheckNode(node, check);\n } else if (Array.isArray(check)) {\n isMatch = check.some(c => stringCheckNode(node, c));\n } else {\n throw unreachable();\n }\n }\n if (isMatch && node instanceof Node) {\n return node;\n } else {\n var _node$constructor$nam, _node$constructor;\n throw checkError(\"SimpleElement(\" + ((_node$constructor$nam = node == null || (_node$constructor = node.constructor) == null ? void 0 : _node$constructor.name) != null ? _node$constructor$nam : 'null') + \")\", check);\n }\n }\n function stringCheckNode(node, check) {\n switch (check) {\n case 'NODE':\n return true;\n case 'HTML':\n return node instanceof HTMLElement;\n case 'SVG':\n return node instanceof SVGElement;\n case 'ELEMENT':\n return node instanceof Element;\n default:\n if (check.toUpperCase() === check) {\n throw new Error(\"BUG: this code is missing handling for a generic node type\");\n }\n return node instanceof Element && node.tagName.toLowerCase() === check;\n }\n }\n function strip(strings) {\n let out = '';\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n for (const [i, string] of enumerate(strings)) {\n let dynamic = args[i] !== undefined ? String(args[i]) : '';\n out += \"\" + string + dynamic;\n }\n let lines = out.split('\\n');\n while (isPresentArray(lines) && /^\\s*$/u.test(getFirst(lines))) {\n lines.shift();\n }\n while (isPresentArray(lines) && /^\\s*$/u.test(getLast(lines))) {\n lines.pop();\n }\n let min = Infinity;\n for (let line of lines) {\n let leading = /^\\s*/u.exec(line)[0].length;\n min = Math.min(min, leading);\n }\n let stripped = [];\n for (let line of lines) {\n stripped.push(line.slice(min));\n }\n return stripped.join('\\n');\n }\n function unwrapHandle(handle) {\n if (typeof handle === 'number') {\n return handle;\n } else {\n let error = handle.errors[0];\n throw new Error(\"Compile Error: \" + error.problem + \" @ \" + error.span.start + \"..\" + error.span.end);\n }\n }\n function unwrapTemplate(template) {\n if (template.result === 'error') {\n throw new Error(\"Compile Error: \" + template.problem + \" @ \" + template.span.start + \"..\" + template.span.end);\n }\n return template;\n }\n function extractHandle(handle) {\n if (typeof handle === 'number') {\n return handle;\n } else {\n return handle.handle;\n }\n }\n function isOkHandle(handle) {\n return typeof handle === 'number';\n }\n function isErrHandle(handle) {\n return typeof handle === 'number';\n }\n function buildUntouchableThis(source) {\n let context = null;\n if (true /* DEBUG */) {\n let assertOnProperty = property => {\n let access = typeof property === 'symbol' || typeof property === 'number' ? \"[\" + String(property) + \"]\" : \".\" + property;\n throw new Error(\"You accessed `this\" + access + \"` from a function passed to the \" + source + \", but the function itself was not bound to a valid `this` context. Consider updating to use a bound function (for instance, use an arrow function, `() => {}`).\");\n };\n context = new Proxy({}, {\n get(_target, property) {\n assertOnProperty(property);\n },\n set(_target, property) {\n assertOnProperty(property);\n return false;\n },\n has(_target, property) {\n assertOnProperty(property);\n return false;\n }\n });\n }\n return context;\n }\n\n /**\n * This constant exists to make it easier to differentiate normal logs from\n * errant console.logs. LOCAL_LOGGER should only be used inside a\n * LOCAL_SHOULD_LOG check.\n *\n * It does not alleviate the need to check LOCAL_SHOULD_LOG, which is used\n * for stripping.\n */\n const LOCAL_LOGGER = _exports.LOCAL_LOGGER = console;\n\n /**\n * This constant exists to make it easier to differentiate normal logs from\n * errant console.logs. LOGGER can be used outside of LOCAL_SHOULD_LOG checks,\n * and is meant to be used in the rare situation where a console.* call is\n * actually appropriate.\n */\n const LOGGER = _exports.LOGGER = console;\n function assertNever(value, desc) {\n if (desc === void 0) {\n desc = 'unexpected unreachable branch';\n }\n LOGGER.log('unreachable', value);\n LOGGER.log(desc + \" :: \" + JSON.stringify(value) + \" (\" + value + \")\");\n throw new Error(\"code reached unreachable\");\n }\n});","define(\"@glimmer/vm\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.TemporaryRegister = _exports.TYPE_SIZE = _exports.TYPE_MASK = _exports.SavedRegister = _exports.Op = _exports.OPERAND_LEN_MASK = _exports.MachineRegister = _exports.MachineOp = _exports.MAX_SIZE = _exports.MACHINE_MASK = _exports.InternalComponentCapability = _exports.InternalComponentCapabilities = _exports.CurriedTypes = _exports.CurriedType = _exports.ContentType = _exports.ARG_SHIFT = _exports.$v0 = _exports.$t1 = _exports.$t0 = _exports.$sp = _exports.$s1 = _exports.$s0 = _exports.$ra = _exports.$pc = _exports.$fp = void 0;\n _exports.isLowLevelRegister = isLowLevelRegister;\n _exports.isMachineOp = isMachineOp;\n _exports.isOp = isOp;\n const ContentType = _exports.ContentType = {\n Component: 0,\n Helper: 1,\n String: 2,\n Empty: 3,\n SafeString: 4,\n Fragment: 5,\n Node: 6,\n Other: 8\n };\n const CurriedTypes = _exports.CurriedTypes = _exports.CurriedType = {\n Component: 0,\n Helper: 1,\n Modifier: 2\n };\n const InternalComponentCapabilities = _exports.InternalComponentCapability = _exports.InternalComponentCapabilities = {\n Empty: 0,\n dynamicLayout: 0b0000000000001,\n dynamicTag: 0b0000000000010,\n prepareArgs: 0b0000000000100,\n createArgs: 0b0000000001000,\n attributeHook: 0b0000000010000,\n elementHook: 0b0000000100000,\n dynamicScope: 0b0000001000000,\n createCaller: 0b0000010000000,\n updateHook: 0b0000100000000,\n createInstance: 0b0001000000000,\n wrapped: 0b0010000000000,\n willDestroy: 0b0100000000000,\n hasSubOwner: 0b1000000000000\n };\n const ARG_SHIFT = _exports.ARG_SHIFT = 8;\n const MAX_SIZE = _exports.MAX_SIZE = 0x7fffffff;\n const TYPE_SIZE = _exports.TYPE_SIZE = 0b11111111;\n const TYPE_MASK = _exports.TYPE_MASK = 0b00000000000000000000000011111111;\n const OPERAND_LEN_MASK = _exports.OPERAND_LEN_MASK = 0b00000000000000000000001100000000;\n const MACHINE_MASK = _exports.MACHINE_MASK = 0b00000000000000000000010000000000;\n const MachineOp = _exports.MachineOp = {\n PushFrame: 0,\n PopFrame: 1,\n InvokeVirtual: 2,\n InvokeStatic: 3,\n Jump: 4,\n Return: 5,\n ReturnTo: 6,\n Size: 7\n };\n const Op = _exports.Op = {\n Helper: 16,\n SetNamedVariables: 17,\n SetBlocks: 18,\n SetVariable: 19,\n SetBlock: 20,\n GetVariable: 21,\n GetProperty: 22,\n GetBlock: 23,\n SpreadBlock: 24,\n HasBlock: 25,\n HasBlockParams: 26,\n Concat: 27,\n Constant: 28,\n ConstantReference: 29,\n Primitive: 30,\n PrimitiveReference: 31,\n ReifyU32: 32,\n Dup: 33,\n Pop: 34,\n Load: 35,\n Fetch: 36,\n RootScope: 37,\n VirtualRootScope: 38,\n ChildScope: 39,\n PopScope: 40,\n Text: 41,\n Comment: 42,\n AppendHTML: 43,\n AppendSafeHTML: 44,\n AppendDocumentFragment: 45,\n AppendNode: 46,\n AppendText: 47,\n OpenElement: 48,\n OpenDynamicElement: 49,\n PushRemoteElement: 50,\n StaticAttr: 51,\n DynamicAttr: 52,\n ComponentAttr: 53,\n FlushElement: 54,\n CloseElement: 55,\n PopRemoteElement: 56,\n Modifier: 57,\n BindDynamicScope: 58,\n PushDynamicScope: 59,\n PopDynamicScope: 60,\n CompileBlock: 61,\n PushBlockScope: 62,\n PushSymbolTable: 63,\n InvokeYield: 64,\n JumpIf: 65,\n JumpUnless: 66,\n JumpEq: 67,\n AssertSame: 68,\n Enter: 69,\n Exit: 70,\n ToBoolean: 71,\n EnterList: 72,\n ExitList: 73,\n Iterate: 74,\n Main: 75,\n ContentType: 76,\n Curry: 77,\n PushComponentDefinition: 78,\n PushDynamicComponentInstance: 79,\n ResolveDynamicComponent: 80,\n ResolveCurriedComponent: 81,\n PushArgs: 82,\n PushEmptyArgs: 83,\n PopArgs: 84,\n PrepareArgs: 85,\n CaptureArgs: 86,\n CreateComponent: 87,\n RegisterComponentDestructor: 88,\n PutComponentOperations: 89,\n GetComponentSelf: 90,\n GetComponentTagName: 91,\n GetComponentLayout: 92,\n BindEvalScope: 93,\n SetupForEval: 94,\n PopulateLayout: 95,\n InvokeComponentLayout: 96,\n BeginComponentTransaction: 97,\n CommitComponentTransaction: 98,\n DidCreateElement: 99,\n DidRenderLayout: 100,\n ResolveMaybeLocal: 102,\n Debugger: 103,\n Size: 104,\n StaticComponentAttr: 105,\n DynamicContentType: 106,\n DynamicHelper: 107,\n DynamicModifier: 108,\n IfInline: 109,\n Not: 110,\n GetDynamicVar: 111,\n Log: 112\n };\n function isMachineOp(value) {\n return value >= 0 && value <= 15;\n }\n function isOp(value) {\n return value >= 16;\n }\n\n /**\n * Registers\n *\n * For the most part, these follows MIPS naming conventions, however the\n * register numbers are different.\n */\n\n // $0 or $pc (program counter): pointer into `program` for the next insturction; -1 means exit\n const $pc = _exports.$pc = 0;\n // $1 or $ra (return address): pointer into `program` for the return\n const $ra = _exports.$ra = 1;\n // $2 or $fp (frame pointer): pointer into the `evalStack` for the base of the stack\n const $fp = _exports.$fp = 2;\n // $3 or $sp (stack pointer): pointer into the `evalStack` for the top of the stack\n const $sp = _exports.$sp = 3;\n // $4-$5 or $s0-$s1 (saved): callee saved general-purpose registers\n const $s0 = _exports.$s0 = 4;\n const $s1 = _exports.$s1 = 5;\n // $6-$7 or $t0-$t1 (temporaries): caller saved general-purpose registers\n const $t0 = _exports.$t0 = 6;\n const $t1 = _exports.$t1 = 7;\n // $8 or $v0 (return value)\n const $v0 = _exports.$v0 = 8;\n let MachineRegister = _exports.MachineRegister = /*#__PURE__*/function (MachineRegister) {\n MachineRegister[MachineRegister[\"pc\"] = 0] = \"pc\";\n MachineRegister[MachineRegister[\"ra\"] = 1] = \"ra\";\n MachineRegister[MachineRegister[\"fp\"] = 2] = \"fp\";\n MachineRegister[MachineRegister[\"sp\"] = 3] = \"sp\";\n return MachineRegister;\n }({});\n function isLowLevelRegister(register) {\n return register <= $sp;\n }\n let SavedRegister = _exports.SavedRegister = /*#__PURE__*/function (SavedRegister) {\n SavedRegister[SavedRegister[\"s0\"] = 4] = \"s0\";\n SavedRegister[SavedRegister[\"s1\"] = 5] = \"s1\";\n return SavedRegister;\n }({});\n let TemporaryRegister = _exports.TemporaryRegister = /*#__PURE__*/function (TemporaryRegister) {\n TemporaryRegister[TemporaryRegister[\"t0\"] = 6] = \"t0\";\n TemporaryRegister[TemporaryRegister[\"t1\"] = 7] = \"t1\";\n return TemporaryRegister;\n }({});\n});","define(\"@glimmer/wire-format\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.WellKnownTagNames = _exports.WellKnownAttrNames = _exports.VariableResolutionContext = _exports.SexpOpcodes = void 0;\n _exports.getStringFromValue = getStringFromValue;\n _exports.is = is;\n _exports.isArgument = isArgument;\n _exports.isAttribute = isAttribute;\n _exports.isGet = _exports.isFlushElement = void 0;\n _exports.isHelper = isHelper;\n _exports.isStringLiteral = isStringLiteral;\n const opcodes = _exports.SexpOpcodes = {\n Append: 1,\n TrustingAppend: 2,\n Comment: 3,\n Modifier: 4,\n StrictModifier: 5,\n Block: 6,\n StrictBlock: 7,\n Component: 8,\n OpenElement: 10,\n OpenElementWithSplat: 11,\n FlushElement: 12,\n CloseElement: 13,\n StaticAttr: 14,\n DynamicAttr: 15,\n ComponentAttr: 16,\n AttrSplat: 17,\n Yield: 18,\n DynamicArg: 20,\n StaticArg: 21,\n TrustingDynamicAttr: 22,\n TrustingComponentAttr: 23,\n StaticComponentAttr: 24,\n Debugger: 26,\n Undefined: 27,\n Call: 28,\n Concat: 29,\n GetSymbol: 30,\n GetLexicalSymbol: 32,\n GetStrictKeyword: 31,\n GetFreeAsComponentOrHelperHeadOrThisFallback: 34,\n GetFreeAsComponentOrHelperHead: 35,\n GetFreeAsHelperHeadOrThisFallback: 36,\n GetFreeAsDeprecatedHelperHeadOrThisFallback: 99,\n GetFreeAsHelperHead: 37,\n GetFreeAsModifierHead: 38,\n GetFreeAsComponentHead: 39,\n InElement: 40,\n If: 41,\n Each: 42,\n With: 43,\n Let: 44,\n WithDynamicVars: 45,\n InvokeComponent: 46,\n HasBlock: 48,\n HasBlockParams: 49,\n Curry: 50,\n Not: 51,\n IfInline: 52,\n GetDynamicVar: 53,\n Log: 54\n };\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n\n const resolution = _exports.VariableResolutionContext = {\n Strict: 0,\n AmbiguousAppend: 1,\n AmbiguousAppendInvoke: 2,\n AmbiguousInvoke: 3,\n ResolveAsCallHead: 5,\n ResolveAsModifierHead: 6,\n ResolveAsComponentHead: 7\n };\n const WellKnownAttrNames = _exports.WellKnownAttrNames = {\n class: 0,\n id: 1,\n value: 2,\n name: 3,\n type: 4,\n style: 5,\n href: 6\n };\n const WellKnownTagNames = _exports.WellKnownTagNames = {\n div: 0,\n span: 1,\n p: 2,\n a: 3\n };\n function is(variant) {\n return function (value) {\n return Array.isArray(value) && value[0] === variant;\n };\n }\n\n // Statements\n const isFlushElement = _exports.isFlushElement = is(opcodes.FlushElement);\n function isAttribute(val) {\n return val[0] === opcodes.StaticAttr || val[0] === opcodes.DynamicAttr || val[0] === opcodes.TrustingDynamicAttr || val[0] === opcodes.ComponentAttr || val[0] === opcodes.StaticComponentAttr || val[0] === opcodes.TrustingComponentAttr || val[0] === opcodes.AttrSplat || val[0] === opcodes.Modifier;\n }\n function isStringLiteral(expr) {\n return typeof expr === 'string';\n }\n function getStringFromValue(expr) {\n return expr;\n }\n function isArgument(val) {\n return val[0] === opcodes.StaticArg || val[0] === opcodes.DynamicArg;\n }\n function isHelper(expr) {\n return Array.isArray(expr) && expr[0] === opcodes.Call;\n }\n\n // Expressions\n const isGet = _exports.isGet = is(opcodes.GetSymbol);\n});","define(\"@handlebars/parser/index\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.Exception = Exception;\n _exports.PrintVisitor = PrintVisitor;\n _exports.Visitor = Visitor;\n _exports.WhitespaceControl = WhitespaceControl;\n _exports.parse = parse;\n _exports.parseWithoutProcessing = parseWithoutProcessing;\n _exports.parser = void 0;\n _exports.print = print;\n var errorProps = ['description', 'fileName', 'lineNumber', 'endLineNumber', 'message', 'name', 'number', 'stack'];\n function Exception(message, node) {\n var loc = node && node.loc,\n line,\n endLineNumber,\n column,\n endColumn;\n if (loc) {\n line = loc.start.line;\n endLineNumber = loc.end.line;\n column = loc.start.column;\n endColumn = loc.end.column;\n message += ' - ' + line + ':' + column;\n }\n var tmp = Error.prototype.constructor.call(this, message);\n // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.\n for (var idx = 0; idx < errorProps.length; idx++) {\n this[errorProps[idx]] = tmp[errorProps[idx]];\n }\n /* istanbul ignore else */\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, Exception);\n }\n try {\n if (loc) {\n this.lineNumber = line;\n this.endLineNumber = endLineNumber;\n // Work around issue under safari where we can't directly set the column value\n /* istanbul ignore next */\n if (Object.defineProperty) {\n Object.defineProperty(this, 'column', {\n value: column,\n enumerable: true\n });\n Object.defineProperty(this, 'endColumn', {\n value: endColumn,\n enumerable: true\n });\n } else {\n this.column = column;\n this.endColumn = endColumn;\n }\n }\n } catch (nop) {\n /* Ignore if the browser is very particular */\n }\n }\n Exception.prototype = new Error();\n function Visitor() {\n this.parents = [];\n }\n Visitor.prototype = {\n constructor: Visitor,\n mutating: false,\n // Visits a given value. If mutating, will replace the value if necessary.\n acceptKey: function (node, name) {\n var value = this.accept(node[name]);\n if (this.mutating) {\n // Hacky sanity check: This may have a few false positives for type for the helper\n // methods but will generally do the right thing without a lot of overhead.\n if (value && !Visitor.prototype[value.type]) {\n throw new Exception('Unexpected node type \"' + value.type + '\" found when accepting ' + name + ' on ' + node.type);\n }\n node[name] = value;\n }\n },\n // Performs an accept operation with added sanity check to ensure\n // required keys are not removed.\n acceptRequired: function (node, name) {\n this.acceptKey(node, name);\n if (!node[name]) {\n throw new Exception(node.type + ' requires ' + name);\n }\n },\n // Traverses a given array. If mutating, empty respnses will be removed\n // for child elements.\n acceptArray: function (array) {\n for (var i = 0, l = array.length; i < l; i++) {\n this.acceptKey(array, i);\n if (!array[i]) {\n array.splice(i, 1);\n i--;\n l--;\n }\n }\n },\n accept: function (object) {\n if (!object) {\n return;\n }\n /* istanbul ignore next: Sanity code */\n if (!this[object.type]) {\n throw new Exception('Unknown type: ' + object.type, object);\n }\n if (this.current) {\n this.parents.unshift(this.current);\n }\n this.current = object;\n var ret = this[object.type](object);\n this.current = this.parents.shift();\n if (!this.mutating || ret) {\n return ret;\n } else if (ret !== false) {\n return object;\n }\n },\n Program: function (program) {\n this.acceptArray(program.body);\n },\n MustacheStatement: visitSubExpression,\n Decorator: visitSubExpression,\n BlockStatement: visitBlock,\n DecoratorBlock: visitBlock,\n PartialStatement: visitPartial,\n PartialBlockStatement: function (partial) {\n visitPartial.call(this, partial);\n this.acceptKey(partial, 'program');\n },\n ContentStatement: function /* content */ () {},\n CommentStatement: function /* comment */ () {},\n SubExpression: visitSubExpression,\n PathExpression: function /* path */ () {},\n StringLiteral: function /* string */ () {},\n NumberLiteral: function /* number */ () {},\n BooleanLiteral: function /* bool */ () {},\n UndefinedLiteral: function /* literal */ () {},\n NullLiteral: function /* literal */ () {},\n Hash: function (hash) {\n this.acceptArray(hash.pairs);\n },\n HashPair: function (pair) {\n this.acceptRequired(pair, 'value');\n }\n };\n function visitSubExpression(mustache) {\n this.acceptRequired(mustache, 'path');\n this.acceptArray(mustache.params);\n this.acceptKey(mustache, 'hash');\n }\n function visitBlock(block) {\n visitSubExpression.call(this, block);\n this.acceptKey(block, 'program');\n this.acceptKey(block, 'inverse');\n }\n function visitPartial(partial) {\n this.acceptRequired(partial, 'name');\n this.acceptArray(partial.params);\n this.acceptKey(partial, 'hash');\n }\n function WhitespaceControl(options) {\n if (options === void 0) {\n options = {};\n }\n this.options = options;\n }\n WhitespaceControl.prototype = new Visitor();\n WhitespaceControl.prototype.Program = function (program) {\n var doStandalone = !this.options.ignoreStandalone;\n var isRoot = !this.isRootSeen;\n this.isRootSeen = true;\n var body = program.body;\n for (var i = 0, l = body.length; i < l; i++) {\n var current = body[i],\n strip = this.accept(current);\n if (!strip) {\n continue;\n }\n var _isPrevWhitespace = isPrevWhitespace(body, i, isRoot),\n _isNextWhitespace = isNextWhitespace(body, i, isRoot),\n openStandalone = strip.openStandalone && _isPrevWhitespace,\n closeStandalone = strip.closeStandalone && _isNextWhitespace,\n inlineStandalone = strip.inlineStandalone && _isPrevWhitespace && _isNextWhitespace;\n if (strip.close) {\n omitRight(body, i, true);\n }\n if (strip.open) {\n omitLeft(body, i, true);\n }\n if (doStandalone && inlineStandalone) {\n omitRight(body, i);\n if (omitLeft(body, i)) {\n // If we are on a standalone node, save the indent info for partials\n if (current.type === 'PartialStatement') {\n // Pull out the whitespace from the final line\n current.indent = /([ \\t]+$)/.exec(body[i - 1].original)[1];\n }\n }\n }\n if (doStandalone && openStandalone) {\n omitRight((current.program || current.inverse).body);\n // Strip out the previous content node if it's whitespace only\n omitLeft(body, i);\n }\n if (doStandalone && closeStandalone) {\n // Always strip the next node\n omitRight(body, i);\n omitLeft((current.inverse || current.program).body);\n }\n }\n return program;\n };\n WhitespaceControl.prototype.BlockStatement = WhitespaceControl.prototype.DecoratorBlock = WhitespaceControl.prototype.PartialBlockStatement = function (block) {\n this.accept(block.program);\n this.accept(block.inverse);\n // Find the inverse program that is involed with whitespace stripping.\n var program = block.program || block.inverse,\n inverse = block.program && block.inverse,\n firstInverse = inverse,\n lastInverse = inverse;\n if (inverse && inverse.chained) {\n firstInverse = inverse.body[0].program;\n // Walk the inverse chain to find the last inverse that is actually in the chain.\n while (lastInverse.chained) {\n lastInverse = lastInverse.body[lastInverse.body.length - 1].program;\n }\n }\n var strip = {\n open: block.openStrip.open,\n close: block.closeStrip.close,\n // Determine the standalone candiacy. Basically flag our content as being possibly standalone\n // so our parent can determine if we actually are standalone\n openStandalone: isNextWhitespace(program.body),\n closeStandalone: isPrevWhitespace((firstInverse || program).body)\n };\n if (block.openStrip.close) {\n omitRight(program.body, null, true);\n }\n if (inverse) {\n var inverseStrip = block.inverseStrip;\n if (inverseStrip.open) {\n omitLeft(program.body, null, true);\n }\n if (inverseStrip.close) {\n omitRight(firstInverse.body, null, true);\n }\n if (block.closeStrip.open) {\n omitLeft(lastInverse.body, null, true);\n }\n // Find standalone else statments\n if (!this.options.ignoreStandalone && isPrevWhitespace(program.body) && isNextWhitespace(firstInverse.body)) {\n omitLeft(program.body);\n omitRight(firstInverse.body);\n }\n } else if (block.closeStrip.open) {\n omitLeft(program.body, null, true);\n }\n return strip;\n };\n WhitespaceControl.prototype.Decorator = WhitespaceControl.prototype.MustacheStatement = function (mustache) {\n return mustache.strip;\n };\n WhitespaceControl.prototype.PartialStatement = WhitespaceControl.prototype.CommentStatement = function (node) {\n /* istanbul ignore next */\n var strip = node.strip || {};\n return {\n inlineStandalone: true,\n open: strip.open,\n close: strip.close\n };\n };\n function isPrevWhitespace(body, i, isRoot) {\n if (i === undefined) {\n i = body.length;\n }\n // Nodes that end with newlines are considered whitespace (but are special\n // cased for strip operations)\n var prev = body[i - 1],\n sibling = body[i - 2];\n if (!prev) {\n return isRoot;\n }\n if (prev.type === 'ContentStatement') {\n return (sibling || !isRoot ? /\\r?\\n\\s*?$/ : /(^|\\r?\\n)\\s*?$/).test(prev.original);\n }\n }\n function isNextWhitespace(body, i, isRoot) {\n if (i === undefined) {\n i = -1;\n }\n var next = body[i + 1],\n sibling = body[i + 2];\n if (!next) {\n return isRoot;\n }\n if (next.type === 'ContentStatement') {\n return (sibling || !isRoot ? /^\\s*?\\r?\\n/ : /^\\s*?(\\r?\\n|$)/).test(next.original);\n }\n }\n // Marks the node to the right of the position as omitted.\n // I.e. {{foo}}' ' will mark the ' ' node as omitted.\n //\n // If i is undefined, then the first child will be marked as such.\n //\n // If multiple is truthy then all whitespace will be stripped out until non-whitespace\n // content is met.\n function omitRight(body, i, multiple) {\n var current = body[i == null ? 0 : i + 1];\n if (!current || current.type !== 'ContentStatement' || !multiple && current.rightStripped) {\n return;\n }\n var original = current.value;\n current.value = current.value.replace(multiple ? /^\\s+/ : /^[ \\t]*\\r?\\n?/, '');\n current.rightStripped = current.value !== original;\n }\n // Marks the node to the left of the position as omitted.\n // I.e. ' '{{foo}} will mark the ' ' node as omitted.\n //\n // If i is undefined then the last child will be marked as such.\n //\n // If multiple is truthy then all whitespace will be stripped out until non-whitespace\n // content is met.\n function omitLeft(body, i, multiple) {\n var current = body[i == null ? body.length - 1 : i - 1];\n if (!current || current.type !== 'ContentStatement' || !multiple && current.leftStripped) {\n return;\n }\n // We omit the last node if it's whitespace only and not preceded by a non-content node.\n var original = current.value;\n current.value = current.value.replace(multiple ? /\\s+$/ : /[ \\t]+$/, '');\n current.leftStripped = current.value !== original;\n return current.leftStripped;\n }\n\n /* parser generated by jison 0.4.18 */\n /*\n Returns a Parser object of the following structure:\n \n Parser: {\n yy: {}\n }\n \n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n \n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n \n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n \n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n \n \n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n \n \n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n */\n var parser = _exports.parser = function () {\n var o = function (k, v, o, l) {\n for (o = o || {}, l = k.length; l--; o[k[l]] = v);\n return o;\n },\n $V0 = [2, 44],\n $V1 = [1, 20],\n $V2 = [5, 14, 15, 19, 29, 34, 39, 44, 47, 48, 52, 56, 60],\n $V3 = [1, 35],\n $V4 = [1, 38],\n $V5 = [1, 30],\n $V6 = [1, 31],\n $V7 = [1, 32],\n $V8 = [1, 33],\n $V9 = [1, 34],\n $Va = [1, 37],\n $Vb = [14, 15, 19, 29, 34, 39, 44, 47, 48, 52, 56, 60],\n $Vc = [14, 15, 19, 29, 34, 44, 47, 48, 52, 56, 60],\n $Vd = [15, 18],\n $Ve = [14, 15, 19, 29, 34, 47, 48, 52, 56, 60],\n $Vf = [33, 64, 71, 79, 80, 81, 82, 83, 84],\n $Vg = [23, 33, 55, 64, 67, 71, 74, 79, 80, 81, 82, 83, 84],\n $Vh = [1, 51],\n $Vi = [23, 33, 55, 64, 67, 71, 74, 79, 80, 81, 82, 83, 84, 86],\n $Vj = [2, 43],\n $Vk = [55, 64, 71, 79, 80, 81, 82, 83, 84],\n $Vl = [1, 58],\n $Vm = [1, 59],\n $Vn = [1, 66],\n $Vo = [33, 64, 71, 74, 79, 80, 81, 82, 83, 84],\n $Vp = [23, 64, 71, 79, 80, 81, 82, 83, 84],\n $Vq = [1, 76],\n $Vr = [64, 67, 71, 79, 80, 81, 82, 83, 84],\n $Vs = [33, 74],\n $Vt = [23, 33, 55, 67, 71, 74],\n $Vu = [1, 106],\n $Vv = [1, 118],\n $Vw = [71, 76];\n var parser = {\n trace: function trace() {},\n yy: {},\n symbols_: {\n \"error\": 2,\n \"root\": 3,\n \"program\": 4,\n \"EOF\": 5,\n \"program_repetition0\": 6,\n \"statement\": 7,\n \"mustache\": 8,\n \"block\": 9,\n \"rawBlock\": 10,\n \"partial\": 11,\n \"partialBlock\": 12,\n \"content\": 13,\n \"COMMENT\": 14,\n \"CONTENT\": 15,\n \"openRawBlock\": 16,\n \"rawBlock_repetition0\": 17,\n \"END_RAW_BLOCK\": 18,\n \"OPEN_RAW_BLOCK\": 19,\n \"helperName\": 20,\n \"openRawBlock_repetition0\": 21,\n \"openRawBlock_option0\": 22,\n \"CLOSE_RAW_BLOCK\": 23,\n \"openBlock\": 24,\n \"block_option0\": 25,\n \"closeBlock\": 26,\n \"openInverse\": 27,\n \"block_option1\": 28,\n \"OPEN_BLOCK\": 29,\n \"openBlock_repetition0\": 30,\n \"openBlock_option0\": 31,\n \"openBlock_option1\": 32,\n \"CLOSE\": 33,\n \"OPEN_INVERSE\": 34,\n \"openInverse_repetition0\": 35,\n \"openInverse_option0\": 36,\n \"openInverse_option1\": 37,\n \"openInverseChain\": 38,\n \"OPEN_INVERSE_CHAIN\": 39,\n \"openInverseChain_repetition0\": 40,\n \"openInverseChain_option0\": 41,\n \"openInverseChain_option1\": 42,\n \"inverseAndProgram\": 43,\n \"INVERSE\": 44,\n \"inverseChain\": 45,\n \"inverseChain_option0\": 46,\n \"OPEN_ENDBLOCK\": 47,\n \"OPEN\": 48,\n \"expr\": 49,\n \"mustache_repetition0\": 50,\n \"mustache_option0\": 51,\n \"OPEN_UNESCAPED\": 52,\n \"mustache_repetition1\": 53,\n \"mustache_option1\": 54,\n \"CLOSE_UNESCAPED\": 55,\n \"OPEN_PARTIAL\": 56,\n \"partial_repetition0\": 57,\n \"partial_option0\": 58,\n \"openPartialBlock\": 59,\n \"OPEN_PARTIAL_BLOCK\": 60,\n \"openPartialBlock_repetition0\": 61,\n \"openPartialBlock_option0\": 62,\n \"sexpr\": 63,\n \"OPEN_SEXPR\": 64,\n \"sexpr_repetition0\": 65,\n \"sexpr_option0\": 66,\n \"CLOSE_SEXPR\": 67,\n \"hash\": 68,\n \"hash_repetition_plus0\": 69,\n \"hashSegment\": 70,\n \"ID\": 71,\n \"EQUALS\": 72,\n \"blockParams\": 73,\n \"OPEN_BLOCK_PARAMS\": 74,\n \"blockParams_repetition_plus0\": 75,\n \"CLOSE_BLOCK_PARAMS\": 76,\n \"path\": 77,\n \"dataName\": 78,\n \"STRING\": 79,\n \"NUMBER\": 80,\n \"BOOLEAN\": 81,\n \"UNDEFINED\": 82,\n \"NULL\": 83,\n \"DATA\": 84,\n \"pathSegments\": 85,\n \"SEP\": 86,\n \"$accept\": 0,\n \"$end\": 1\n },\n terminals_: {\n 2: \"error\",\n 5: \"EOF\",\n 14: \"COMMENT\",\n 15: \"CONTENT\",\n 18: \"END_RAW_BLOCK\",\n 19: \"OPEN_RAW_BLOCK\",\n 23: \"CLOSE_RAW_BLOCK\",\n 29: \"OPEN_BLOCK\",\n 33: \"CLOSE\",\n 34: \"OPEN_INVERSE\",\n 39: \"OPEN_INVERSE_CHAIN\",\n 44: \"INVERSE\",\n 47: \"OPEN_ENDBLOCK\",\n 48: \"OPEN\",\n 52: \"OPEN_UNESCAPED\",\n 55: \"CLOSE_UNESCAPED\",\n 56: \"OPEN_PARTIAL\",\n 60: \"OPEN_PARTIAL_BLOCK\",\n 64: \"OPEN_SEXPR\",\n 67: \"CLOSE_SEXPR\",\n 71: \"ID\",\n 72: \"EQUALS\",\n 74: \"OPEN_BLOCK_PARAMS\",\n 76: \"CLOSE_BLOCK_PARAMS\",\n 79: \"STRING\",\n 80: \"NUMBER\",\n 81: \"BOOLEAN\",\n 82: \"UNDEFINED\",\n 83: \"NULL\",\n 84: \"DATA\",\n 86: \"SEP\"\n },\n productions_: [0, [3, 2], [4, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [13, 1], [10, 3], [16, 5], [9, 4], [9, 4], [24, 6], [27, 6], [38, 6], [43, 2], [45, 3], [45, 1], [26, 3], [8, 5], [8, 5], [11, 5], [12, 3], [59, 5], [49, 1], [49, 1], [63, 5], [68, 1], [70, 3], [73, 3], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [78, 2], [77, 1], [85, 3], [85, 1], [6, 0], [6, 2], [17, 0], [17, 2], [21, 0], [21, 2], [22, 0], [22, 1], [25, 0], [25, 1], [28, 0], [28, 1], [30, 0], [30, 2], [31, 0], [31, 1], [32, 0], [32, 1], [35, 0], [35, 2], [36, 0], [36, 1], [37, 0], [37, 1], [40, 0], [40, 2], [41, 0], [41, 1], [42, 0], [42, 1], [46, 0], [46, 1], [50, 0], [50, 2], [51, 0], [51, 1], [53, 0], [53, 2], [54, 0], [54, 1], [57, 0], [57, 2], [58, 0], [58, 1], [61, 0], [61, 2], [62, 0], [62, 1], [65, 0], [65, 2], [66, 0], [66, 1], [69, 1], [69, 2], [75, 1], [75, 2]],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n /* this == yyval */\n var $0 = $$.length - 1;\n switch (yystate) {\n case 1:\n return $$[$0 - 1];\n case 2:\n this.$ = yy.prepareProgram($$[$0]);\n break;\n case 3:\n case 4:\n case 5:\n case 6:\n case 7:\n case 8:\n case 20:\n case 27:\n case 28:\n case 33:\n case 34:\n this.$ = $$[$0];\n break;\n case 9:\n this.$ = {\n type: 'CommentStatement',\n value: yy.stripComment($$[$0]),\n strip: yy.stripFlags($$[$0], $$[$0]),\n loc: yy.locInfo(this._$)\n };\n break;\n case 10:\n this.$ = {\n type: 'ContentStatement',\n original: $$[$0],\n value: $$[$0],\n loc: yy.locInfo(this._$)\n };\n break;\n case 11:\n this.$ = yy.prepareRawBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);\n break;\n case 12:\n this.$ = {\n path: $$[$0 - 3],\n params: $$[$0 - 2],\n hash: $$[$0 - 1]\n };\n break;\n case 13:\n this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], false, this._$);\n break;\n case 14:\n this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], true, this._$);\n break;\n case 15:\n this.$ = {\n open: $$[$0 - 5],\n path: $$[$0 - 4],\n params: $$[$0 - 3],\n hash: $$[$0 - 2],\n blockParams: $$[$0 - 1],\n strip: yy.stripFlags($$[$0 - 5], $$[$0])\n };\n break;\n case 16:\n case 17:\n this.$ = {\n path: $$[$0 - 4],\n params: $$[$0 - 3],\n hash: $$[$0 - 2],\n blockParams: $$[$0 - 1],\n strip: yy.stripFlags($$[$0 - 5], $$[$0])\n };\n break;\n case 18:\n this.$ = {\n strip: yy.stripFlags($$[$0 - 1], $$[$0 - 1]),\n program: $$[$0]\n };\n break;\n case 19:\n var inverse = yy.prepareBlock($$[$0 - 2], $$[$0 - 1], $$[$0], $$[$0], false, this._$),\n program = yy.prepareProgram([inverse], $$[$0 - 1].loc);\n program.chained = true;\n this.$ = {\n strip: $$[$0 - 2].strip,\n program: program,\n chain: true\n };\n break;\n case 21:\n this.$ = {\n path: $$[$0 - 1],\n strip: yy.stripFlags($$[$0 - 2], $$[$0])\n };\n break;\n case 22:\n case 23:\n this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$);\n break;\n case 24:\n this.$ = {\n type: 'PartialStatement',\n name: $$[$0 - 3],\n params: $$[$0 - 2],\n hash: $$[$0 - 1],\n indent: '',\n strip: yy.stripFlags($$[$0 - 4], $$[$0]),\n loc: yy.locInfo(this._$)\n };\n break;\n case 25:\n this.$ = yy.preparePartialBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);\n break;\n case 26:\n this.$ = {\n path: $$[$0 - 3],\n params: $$[$0 - 2],\n hash: $$[$0 - 1],\n strip: yy.stripFlags($$[$0 - 4], $$[$0])\n };\n break;\n case 29:\n this.$ = {\n type: 'SubExpression',\n path: $$[$0 - 3],\n params: $$[$0 - 2],\n hash: $$[$0 - 1],\n loc: yy.locInfo(this._$)\n };\n break;\n case 30:\n this.$ = {\n type: 'Hash',\n pairs: $$[$0],\n loc: yy.locInfo(this._$)\n };\n break;\n case 31:\n this.$ = {\n type: 'HashPair',\n key: yy.id($$[$0 - 2]),\n value: $$[$0],\n loc: yy.locInfo(this._$)\n };\n break;\n case 32:\n this.$ = yy.id($$[$0 - 1]);\n break;\n case 35:\n this.$ = {\n type: 'StringLiteral',\n value: $$[$0],\n original: $$[$0],\n loc: yy.locInfo(this._$)\n };\n break;\n case 36:\n this.$ = {\n type: 'NumberLiteral',\n value: Number($$[$0]),\n original: Number($$[$0]),\n loc: yy.locInfo(this._$)\n };\n break;\n case 37:\n this.$ = {\n type: 'BooleanLiteral',\n value: $$[$0] === 'true',\n original: $$[$0] === 'true',\n loc: yy.locInfo(this._$)\n };\n break;\n case 38:\n this.$ = {\n type: 'UndefinedLiteral',\n original: undefined,\n value: undefined,\n loc: yy.locInfo(this._$)\n };\n break;\n case 39:\n this.$ = {\n type: 'NullLiteral',\n original: null,\n value: null,\n loc: yy.locInfo(this._$)\n };\n break;\n case 40:\n this.$ = yy.preparePath(true, $$[$0], this._$);\n break;\n case 41:\n this.$ = yy.preparePath(false, $$[$0], this._$);\n break;\n case 42:\n $$[$0 - 2].push({\n part: yy.id($$[$0]),\n original: $$[$0],\n separator: $$[$0 - 1]\n });\n this.$ = $$[$0 - 2];\n break;\n case 43:\n this.$ = [{\n part: yy.id($$[$0]),\n original: $$[$0]\n }];\n break;\n case 44:\n case 46:\n case 48:\n case 56:\n case 62:\n case 68:\n case 76:\n case 80:\n case 84:\n case 88:\n case 92:\n this.$ = [];\n break;\n case 45:\n case 47:\n case 49:\n case 57:\n case 63:\n case 69:\n case 77:\n case 81:\n case 85:\n case 89:\n case 93:\n case 97:\n case 99:\n $$[$0 - 1].push($$[$0]);\n break;\n case 96:\n case 98:\n this.$ = [$$[$0]];\n break;\n }\n },\n table: [o([5, 14, 15, 19, 29, 34, 48, 52, 56, 60], $V0, {\n 3: 1,\n 4: 2,\n 6: 3\n }), {\n 1: [3]\n }, {\n 5: [1, 4]\n }, o([5, 39, 44, 47], [2, 2], {\n 7: 5,\n 8: 6,\n 9: 7,\n 10: 8,\n 11: 9,\n 12: 10,\n 13: 11,\n 24: 15,\n 27: 16,\n 16: 17,\n 59: 19,\n 14: [1, 12],\n 15: $V1,\n 19: [1, 23],\n 29: [1, 21],\n 34: [1, 22],\n 48: [1, 13],\n 52: [1, 14],\n 56: [1, 18],\n 60: [1, 24]\n }), {\n 1: [2, 1]\n }, o($V2, [2, 45]), o($V2, [2, 3]), o($V2, [2, 4]), o($V2, [2, 5]), o($V2, [2, 6]), o($V2, [2, 7]), o($V2, [2, 8]), o($V2, [2, 9]), {\n 20: 26,\n 49: 25,\n 63: 27,\n 64: $V3,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, {\n 20: 26,\n 49: 39,\n 63: 27,\n 64: $V3,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($Vb, $V0, {\n 6: 3,\n 4: 40\n }), o($Vc, $V0, {\n 6: 3,\n 4: 41\n }), o($Vd, [2, 46], {\n 17: 42\n }), {\n 20: 26,\n 49: 43,\n 63: 27,\n 64: $V3,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($Ve, $V0, {\n 6: 3,\n 4: 44\n }), o([5, 14, 15, 18, 19, 29, 34, 39, 44, 47, 48, 52, 56, 60], [2, 10]), {\n 20: 45,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, {\n 20: 46,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, {\n 20: 47,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, {\n 20: 26,\n 49: 48,\n 63: 27,\n 64: $V3,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($Vf, [2, 76], {\n 50: 49\n }), o($Vg, [2, 27]), o($Vg, [2, 28]), o($Vg, [2, 33]), o($Vg, [2, 34]), o($Vg, [2, 35]), o($Vg, [2, 36]), o($Vg, [2, 37]), o($Vg, [2, 38]), o($Vg, [2, 39]), {\n 20: 26,\n 49: 50,\n 63: 27,\n 64: $V3,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($Vg, [2, 41], {\n 86: $Vh\n }), {\n 71: $V4,\n 85: 52\n }, o($Vi, $Vj), o($Vk, [2, 80], {\n 53: 53\n }), {\n 25: 54,\n 38: 56,\n 39: $Vl,\n 43: 57,\n 44: $Vm,\n 45: 55,\n 47: [2, 52]\n }, {\n 28: 60,\n 43: 61,\n 44: $Vm,\n 47: [2, 54]\n }, {\n 13: 63,\n 15: $V1,\n 18: [1, 62]\n }, o($Vf, [2, 84], {\n 57: 64\n }), {\n 26: 65,\n 47: $Vn\n }, o($Vo, [2, 56], {\n 30: 67\n }), o($Vo, [2, 62], {\n 35: 68\n }), o($Vp, [2, 48], {\n 21: 69\n }), o($Vf, [2, 88], {\n 61: 70\n }), {\n 20: 26,\n 33: [2, 78],\n 49: 72,\n 51: 71,\n 63: 27,\n 64: $V3,\n 68: 73,\n 69: 74,\n 70: 75,\n 71: $Vq,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($Vr, [2, 92], {\n 65: 77\n }), {\n 71: [1, 78]\n }, o($Vg, [2, 40], {\n 86: $Vh\n }), {\n 20: 26,\n 49: 80,\n 54: 79,\n 55: [2, 82],\n 63: 27,\n 64: $V3,\n 68: 81,\n 69: 74,\n 70: 75,\n 71: $Vq,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, {\n 26: 82,\n 47: $Vn\n }, {\n 47: [2, 53]\n }, o($Vb, $V0, {\n 6: 3,\n 4: 83\n }), {\n 47: [2, 20]\n }, {\n 20: 84,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($Ve, $V0, {\n 6: 3,\n 4: 85\n }), {\n 26: 86,\n 47: $Vn\n }, {\n 47: [2, 55]\n }, o($V2, [2, 11]), o($Vd, [2, 47]), {\n 20: 26,\n 33: [2, 86],\n 49: 88,\n 58: 87,\n 63: 27,\n 64: $V3,\n 68: 89,\n 69: 74,\n 70: 75,\n 71: $Vq,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($V2, [2, 25]), {\n 20: 90,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($Vs, [2, 58], {\n 20: 26,\n 63: 27,\n 77: 28,\n 78: 29,\n 85: 36,\n 69: 74,\n 70: 75,\n 31: 91,\n 49: 92,\n 68: 93,\n 64: $V3,\n 71: $Vq,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va\n }), o($Vs, [2, 64], {\n 20: 26,\n 63: 27,\n 77: 28,\n 78: 29,\n 85: 36,\n 69: 74,\n 70: 75,\n 36: 94,\n 49: 95,\n 68: 96,\n 64: $V3,\n 71: $Vq,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va\n }), {\n 20: 26,\n 22: 97,\n 23: [2, 50],\n 49: 98,\n 63: 27,\n 64: $V3,\n 68: 99,\n 69: 74,\n 70: 75,\n 71: $Vq,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, {\n 20: 26,\n 33: [2, 90],\n 49: 101,\n 62: 100,\n 63: 27,\n 64: $V3,\n 68: 102,\n 69: 74,\n 70: 75,\n 71: $Vq,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, {\n 33: [1, 103]\n }, o($Vf, [2, 77]), {\n 33: [2, 79]\n }, o([23, 33, 55, 67, 74], [2, 30], {\n 70: 104,\n 71: [1, 105]\n }), o($Vt, [2, 96]), o($Vi, $Vj, {\n 72: $Vu\n }), {\n 20: 26,\n 49: 108,\n 63: 27,\n 64: $V3,\n 66: 107,\n 67: [2, 94],\n 68: 109,\n 69: 74,\n 70: 75,\n 71: $Vq,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($Vi, [2, 42]), {\n 55: [1, 110]\n }, o($Vk, [2, 81]), {\n 55: [2, 83]\n }, o($V2, [2, 13]), {\n 38: 56,\n 39: $Vl,\n 43: 57,\n 44: $Vm,\n 45: 112,\n 46: 111,\n 47: [2, 74]\n }, o($Vo, [2, 68], {\n 40: 113\n }), {\n 47: [2, 18]\n }, o($V2, [2, 14]), {\n 33: [1, 114]\n }, o($Vf, [2, 85]), {\n 33: [2, 87]\n }, {\n 33: [1, 115]\n }, {\n 32: 116,\n 33: [2, 60],\n 73: 117,\n 74: $Vv\n }, o($Vo, [2, 57]), o($Vs, [2, 59]), {\n 33: [2, 66],\n 37: 119,\n 73: 120,\n 74: $Vv\n }, o($Vo, [2, 63]), o($Vs, [2, 65]), {\n 23: [1, 121]\n }, o($Vp, [2, 49]), {\n 23: [2, 51]\n }, {\n 33: [1, 122]\n }, o($Vf, [2, 89]), {\n 33: [2, 91]\n }, o($V2, [2, 22]), o($Vt, [2, 97]), {\n 72: $Vu\n }, {\n 20: 26,\n 49: 123,\n 63: 27,\n 64: $V3,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, {\n 67: [1, 124]\n }, o($Vr, [2, 93]), {\n 67: [2, 95]\n }, o($V2, [2, 23]), {\n 47: [2, 19]\n }, {\n 47: [2, 75]\n }, o($Vs, [2, 70], {\n 20: 26,\n 63: 27,\n 77: 28,\n 78: 29,\n 85: 36,\n 69: 74,\n 70: 75,\n 41: 125,\n 49: 126,\n 68: 127,\n 64: $V3,\n 71: $Vq,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va\n }), o($V2, [2, 24]), o($V2, [2, 21]), {\n 33: [1, 128]\n }, {\n 33: [2, 61]\n }, {\n 71: [1, 130],\n 75: 129\n }, {\n 33: [1, 131]\n }, {\n 33: [2, 67]\n }, o($Vd, [2, 12]), o($Ve, [2, 26]), o($Vt, [2, 31]), o($Vg, [2, 29]), {\n 33: [2, 72],\n 42: 132,\n 73: 133,\n 74: $Vv\n }, o($Vo, [2, 69]), o($Vs, [2, 71]), o($Vb, [2, 15]), {\n 71: [1, 135],\n 76: [1, 134]\n }, o($Vw, [2, 98]), o($Vc, [2, 16]), {\n 33: [1, 136]\n }, {\n 33: [2, 73]\n }, {\n 33: [2, 32]\n }, o($Vw, [2, 99]), o($Vb, [2, 17])],\n defaultActions: {\n 4: [2, 1],\n 55: [2, 53],\n 57: [2, 20],\n 61: [2, 55],\n 73: [2, 79],\n 81: [2, 83],\n 85: [2, 18],\n 89: [2, 87],\n 99: [2, 51],\n 102: [2, 91],\n 109: [2, 95],\n 111: [2, 19],\n 112: [2, 75],\n 117: [2, 61],\n 120: [2, 67],\n 133: [2, 73],\n 134: [2, 32]\n },\n parseError: function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n },\n parse: function parse(input) {\n var self = this,\n stack = [0],\n vstack = [null],\n lstack = [],\n table = this.table,\n yytext = '',\n yylineno = 0,\n yyleng = 0,\n TERROR = 2,\n EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = {\n yy: {}\n };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n var lex = function () {\n var token;\n token = lexer.lex() || EOF;\n if (typeof token !== 'number') {\n token = self.symbols_[token] || token;\n }\n return token;\n };\n var symbol,\n state,\n action,\n r,\n yyval = {},\n p,\n len,\n newState,\n expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n }\n r = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }\n };\n /* generated by jison-lex 0.3.4 */\n var lexer = function () {\n var lexer = {\n EOF: 1,\n parseError: function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n // resets the lexer, sets new input\n setInput: function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n },\n // consumes and returns one char from the input\n input: function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n },\n // unshifts one char (or a string) into the input\n unput: function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n // When called from action, caches matched text and appends it on next action\n more: function () {\n this._more = true;\n return this;\n },\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n },\n // retain first n characters of the match\n less: function (n) {\n this.unput(this.match.slice(n));\n },\n // displays already matched input, i.e. for error messages\n pastInput: function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\\n/g, \"\");\n },\n // displays upcoming input, i.e. for error messages\n upcomingInput: function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: function (match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n\n return false;\n },\n // return next match in input\n next: function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n // return next match that has a token\n lex: function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: function begin(condition) {\n this.conditionStack.push(condition);\n },\n // pop the previously active lexer condition state off the condition stack\n popState: function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n // alias for begin(condition)\n pushState: function pushState(condition) {\n this.begin(condition);\n },\n // return the number of states currently on the stack\n stateStackSize: function stateStackSize() {\n return this.conditionStack.length;\n },\n options: {},\n performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n function strip(start, end) {\n return yy_.yytext = yy_.yytext.substring(start, yy_.yyleng - end + start);\n }\n switch ($avoiding_name_collisions) {\n case 0:\n if (yy_.yytext.slice(-2) === \"\\\\\\\\\") {\n strip(0, 1);\n this.begin(\"mu\");\n } else if (yy_.yytext.slice(-1) === \"\\\\\") {\n strip(0, 1);\n this.begin(\"emu\");\n } else {\n this.begin(\"mu\");\n }\n if (yy_.yytext) return 15;\n break;\n case 1:\n return 15;\n case 2:\n this.popState();\n return 15;\n case 3:\n this.begin('raw');\n return 15;\n case 4:\n this.popState();\n // Should be using `this.topState()` below, but it currently\n // returns the second top instead of the first top. Opened an\n // issue about it at https://github.com/zaach/jison/issues/291\n if (this.conditionStack[this.conditionStack.length - 1] === 'raw') {\n return 15;\n } else {\n strip(5, 9);\n return 18;\n }\n case 5:\n return 15;\n case 6:\n this.popState();\n return 14;\n case 7:\n return 64;\n case 8:\n return 67;\n case 9:\n return 19;\n case 10:\n this.popState();\n this.begin('raw');\n return 23;\n case 11:\n return 56;\n case 12:\n return 60;\n case 13:\n return 29;\n case 14:\n return 47;\n case 15:\n this.popState();\n return 44;\n case 16:\n this.popState();\n return 44;\n case 17:\n return 34;\n case 18:\n return 39;\n case 19:\n return 52;\n case 20:\n return 48;\n case 21:\n this.unput(yy_.yytext);\n this.popState();\n this.begin('com');\n break;\n case 22:\n this.popState();\n return 14;\n case 23:\n return 48;\n case 24:\n return 72;\n case 25:\n return 71;\n case 26:\n return 71;\n case 27:\n return 86;\n case 28:\n // ignore whitespace\n break;\n case 29:\n this.popState();\n return 55;\n case 30:\n this.popState();\n return 33;\n case 31:\n yy_.yytext = strip(1, 2).replace(/\\\\\"/g, '\"');\n return 79;\n case 32:\n yy_.yytext = strip(1, 2).replace(/\\\\'/g, \"'\");\n return 79;\n case 33:\n return 84;\n case 34:\n return 81;\n case 35:\n return 81;\n case 36:\n return 82;\n case 37:\n return 83;\n case 38:\n return 80;\n case 39:\n return 74;\n case 40:\n return 76;\n case 41:\n return 71;\n case 42:\n yy_.yytext = yy_.yytext.replace(/\\\\([\\\\\\]])/g, '$1');\n return 71;\n case 43:\n return 'INVALID';\n case 44:\n return 5;\n }\n },\n rules: [/^(?:[^\\x00]*?(?=(\\{\\{)))/, /^(?:[^\\x00]+)/, /^(?:[^\\x00]{2,}?(?=(\\{\\{|\\\\\\{\\{|\\\\\\\\\\{\\{|$)))/, /^(?:\\{\\{\\{\\{(?=[^/]))/, /^(?:\\{\\{\\{\\{\\/[^\\s!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]+(?=[=}\\s\\/.])\\}\\}\\}\\})/, /^(?:[^\\x00]+?(?=(\\{\\{\\{\\{)))/, /^(?:[\\s\\S]*?--(~)?\\}\\})/, /^(?:\\()/, /^(?:\\))/, /^(?:\\{\\{\\{\\{)/, /^(?:\\}\\}\\}\\})/, /^(?:\\{\\{(~)?>)/, /^(?:\\{\\{(~)?#>)/, /^(?:\\{\\{(~)?#\\*?)/, /^(?:\\{\\{(~)?\\/)/, /^(?:\\{\\{(~)?\\^\\s*(~)?\\}\\})/, /^(?:\\{\\{(~)?\\s*else\\s*(~)?\\}\\})/, /^(?:\\{\\{(~)?\\^)/, /^(?:\\{\\{(~)?\\s*else\\b)/, /^(?:\\{\\{(~)?\\{)/, /^(?:\\{\\{(~)?&)/, /^(?:\\{\\{(~)?!--)/, /^(?:\\{\\{(~)?![\\s\\S]*?\\}\\})/, /^(?:\\{\\{(~)?\\*?)/, /^(?:=)/, /^(?:\\.\\.)/, /^(?:\\.(?=([=~}\\s\\/.)|])))/, /^(?:[\\/.])/, /^(?:\\s+)/, /^(?:\\}(~)?\\}\\})/, /^(?:(~)?\\}\\})/, /^(?:\"(\\\\[\"]|[^\"])*\")/, /^(?:'(\\\\[']|[^'])*')/, /^(?:@)/, /^(?:true(?=([~}\\s)])))/, /^(?:false(?=([~}\\s)])))/, /^(?:undefined(?=([~}\\s)])))/, /^(?:null(?=([~}\\s)])))/, /^(?:-?[0-9]+(?:\\.[0-9]+)?(?=([~}\\s)])))/, /^(?:as\\s+\\|)/, /^(?:\\|)/, /^(?:([^\\s!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]+(?=([=~}\\s\\/.)|]))))/, /^(?:\\[(\\\\\\]|[^\\]])*\\])/, /^(?:.)/, /^(?:$)/],\n conditions: {\n \"mu\": {\n \"rules\": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44],\n \"inclusive\": false\n },\n \"emu\": {\n \"rules\": [2],\n \"inclusive\": false\n },\n \"com\": {\n \"rules\": [6],\n \"inclusive\": false\n },\n \"raw\": {\n \"rules\": [3, 4, 5],\n \"inclusive\": false\n },\n \"INITIAL\": {\n \"rules\": [0, 1, 44],\n \"inclusive\": true\n }\n }\n };\n return lexer;\n }();\n parser.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n Parser.prototype = parser;\n parser.Parser = Parser;\n return new Parser();\n }();\n\n /* eslint-disable new-cap */\n function print(ast) {\n return new PrintVisitor().accept(ast);\n }\n function PrintVisitor() {\n this.padding = 0;\n }\n PrintVisitor.prototype = new Visitor();\n PrintVisitor.prototype.pad = function (string) {\n var out = '';\n for (var i = 0, l = this.padding; i < l; i++) {\n out += ' ';\n }\n out += string + '\\n';\n return out;\n };\n PrintVisitor.prototype.Program = function (program) {\n var out = '',\n body = program.body,\n i,\n l;\n if (program.blockParams) {\n var blockParams = 'BLOCK PARAMS: [';\n for (i = 0, l = program.blockParams.length; i < l; i++) {\n blockParams += ' ' + program.blockParams[i];\n }\n blockParams += ' ]';\n out += this.pad(blockParams);\n }\n for (i = 0, l = body.length; i < l; i++) {\n out += this.accept(body[i]);\n }\n this.padding--;\n return out;\n };\n PrintVisitor.prototype.MustacheStatement = function (mustache) {\n return this.pad('{{ ' + this.SubExpression(mustache) + ' }}');\n };\n PrintVisitor.prototype.Decorator = function (mustache) {\n return this.pad('{{ DIRECTIVE ' + this.SubExpression(mustache) + ' }}');\n };\n PrintVisitor.prototype.BlockStatement = PrintVisitor.prototype.DecoratorBlock = function (block) {\n var out = '';\n out += this.pad((block.type === 'DecoratorBlock' ? 'DIRECTIVE ' : '') + 'BLOCK:');\n this.padding++;\n out += this.pad(this.SubExpression(block));\n if (block.program) {\n out += this.pad('PROGRAM:');\n this.padding++;\n out += this.accept(block.program);\n this.padding--;\n }\n if (block.inverse) {\n if (block.program) {\n this.padding++;\n }\n out += this.pad('{{^}}');\n this.padding++;\n out += this.accept(block.inverse);\n this.padding--;\n if (block.program) {\n this.padding--;\n }\n }\n this.padding--;\n return out;\n };\n PrintVisitor.prototype.PartialStatement = function (partial) {\n var content = 'PARTIAL:' + partial.name.original;\n if (partial.params[0]) {\n content += ' ' + this.accept(partial.params[0]);\n }\n if (partial.hash) {\n content += ' ' + this.accept(partial.hash);\n }\n return this.pad('{{> ' + content + ' }}');\n };\n PrintVisitor.prototype.PartialBlockStatement = function (partial) {\n var content = 'PARTIAL BLOCK:' + partial.name.original;\n if (partial.params[0]) {\n content += ' ' + this.accept(partial.params[0]);\n }\n if (partial.hash) {\n content += ' ' + this.accept(partial.hash);\n }\n content += ' ' + this.pad('PROGRAM:');\n this.padding++;\n content += this.accept(partial.program);\n this.padding--;\n return this.pad('{{> ' + content + ' }}');\n };\n PrintVisitor.prototype.ContentStatement = function (content) {\n return this.pad(\"CONTENT[ '\" + content.value + \"' ]\");\n };\n PrintVisitor.prototype.CommentStatement = function (comment) {\n return this.pad(\"{{! '\" + comment.value + \"' }}\");\n };\n PrintVisitor.prototype.SubExpression = function (sexpr) {\n var params = sexpr.params,\n paramStrings = [],\n hash;\n for (var i = 0, l = params.length; i < l; i++) {\n paramStrings.push(this.accept(params[i]));\n }\n params = '[' + paramStrings.join(', ') + ']';\n hash = sexpr.hash ? ' ' + this.accept(sexpr.hash) : '';\n return this.accept(sexpr.path) + ' ' + params + hash;\n };\n PrintVisitor.prototype.PathExpression = function (id) {\n var path = id.parts.join('/');\n return (id.data ? '@' : '') + 'PATH:' + path;\n };\n PrintVisitor.prototype.StringLiteral = function (string) {\n return '\"' + string.value + '\"';\n };\n PrintVisitor.prototype.NumberLiteral = function (number) {\n return 'NUMBER{' + number.value + '}';\n };\n PrintVisitor.prototype.BooleanLiteral = function (bool) {\n return 'BOOLEAN{' + bool.value + '}';\n };\n PrintVisitor.prototype.UndefinedLiteral = function () {\n return 'UNDEFINED';\n };\n PrintVisitor.prototype.NullLiteral = function () {\n return 'NULL';\n };\n PrintVisitor.prototype.Hash = function (hash) {\n var pairs = hash.pairs,\n joinedPairs = [];\n for (var i = 0, l = pairs.length; i < l; i++) {\n joinedPairs.push(this.accept(pairs[i]));\n }\n return 'HASH{' + joinedPairs.join(', ') + '}';\n };\n PrintVisitor.prototype.HashPair = function (pair) {\n return pair.key + '=' + this.accept(pair.value);\n };\n /* eslint-enable new-cap */\n\n function validateClose(open, close) {\n close = close.path ? close.path.original : close;\n if (open.path.original !== close) {\n var errorNode = {\n loc: open.path.loc\n };\n throw new Exception(open.path.original + \" doesn't match \" + close, errorNode);\n }\n }\n function SourceLocation(source, locInfo) {\n this.source = source;\n this.start = {\n line: locInfo.first_line,\n column: locInfo.first_column\n };\n this.end = {\n line: locInfo.last_line,\n column: locInfo.last_column\n };\n }\n function id(token) {\n if (/^\\[.*\\]$/.test(token)) {\n return token.substring(1, token.length - 1);\n } else {\n return token;\n }\n }\n function stripFlags(open, close) {\n return {\n open: open.charAt(2) === '~',\n close: close.charAt(close.length - 3) === '~'\n };\n }\n function stripComment(comment) {\n return comment.replace(/^\\{\\{~?!-?-?/, '').replace(/-?-?~?\\}\\}$/, '');\n }\n function preparePath(data, parts, loc) {\n loc = this.locInfo(loc);\n var original = data ? '@' : '',\n dig = [],\n depth = 0;\n for (var i = 0, l = parts.length; i < l; i++) {\n var part = parts[i].part,\n // If we have [] syntax then we do not treat path references as operators,\n // i.e. foo.[this] resolves to approximately context.foo['this']\n isLiteral = parts[i].original !== part;\n original += (parts[i].separator || '') + part;\n if (!isLiteral && (part === '..' || part === '.' || part === 'this')) {\n if (dig.length > 0) {\n throw new Exception('Invalid path: ' + original, {\n loc: loc\n });\n } else if (part === '..') {\n depth++;\n }\n } else {\n dig.push(part);\n }\n }\n return {\n type: 'PathExpression',\n data: data,\n depth: depth,\n parts: dig,\n original: original,\n loc: loc\n };\n }\n function prepareMustache(path, params, hash, open, strip, locInfo) {\n // Must use charAt to support IE pre-10\n var escapeFlag = open.charAt(3) || open.charAt(2),\n escaped = escapeFlag !== '{' && escapeFlag !== '&';\n var decorator = /\\*/.test(open);\n return {\n type: decorator ? 'Decorator' : 'MustacheStatement',\n path: path,\n params: params,\n hash: hash,\n escaped: escaped,\n strip: strip,\n loc: this.locInfo(locInfo)\n };\n }\n function prepareRawBlock(openRawBlock, contents, close, locInfo) {\n validateClose(openRawBlock, close);\n locInfo = this.locInfo(locInfo);\n var program = {\n type: 'Program',\n body: contents,\n strip: {},\n loc: locInfo\n };\n return {\n type: 'BlockStatement',\n path: openRawBlock.path,\n params: openRawBlock.params,\n hash: openRawBlock.hash,\n program: program,\n openStrip: {},\n inverseStrip: {},\n closeStrip: {},\n loc: locInfo\n };\n }\n function prepareBlock(openBlock, program, inverseAndProgram, close, inverted, locInfo) {\n if (close && close.path) {\n validateClose(openBlock, close);\n }\n var decorator = /\\*/.test(openBlock.open);\n program.blockParams = openBlock.blockParams;\n var inverse, inverseStrip;\n if (inverseAndProgram) {\n if (decorator) {\n throw new Exception('Unexpected inverse block on decorator', inverseAndProgram);\n }\n if (inverseAndProgram.chain) {\n inverseAndProgram.program.body[0].closeStrip = close.strip;\n }\n inverseStrip = inverseAndProgram.strip;\n inverse = inverseAndProgram.program;\n }\n if (inverted) {\n inverted = inverse;\n inverse = program;\n program = inverted;\n }\n return {\n type: decorator ? 'DecoratorBlock' : 'BlockStatement',\n path: openBlock.path,\n params: openBlock.params,\n hash: openBlock.hash,\n program: program,\n inverse: inverse,\n openStrip: openBlock.strip,\n inverseStrip: inverseStrip,\n closeStrip: close && close.strip,\n loc: this.locInfo(locInfo)\n };\n }\n function prepareProgram(statements, loc) {\n if (!loc && statements.length) {\n var firstLoc = statements[0].loc,\n lastLoc = statements[statements.length - 1].loc;\n /* istanbul ignore else */\n if (firstLoc && lastLoc) {\n loc = {\n source: firstLoc.source,\n start: {\n line: firstLoc.start.line,\n column: firstLoc.start.column\n },\n end: {\n line: lastLoc.end.line,\n column: lastLoc.end.column\n }\n };\n }\n }\n return {\n type: 'Program',\n body: statements,\n strip: {},\n loc: loc\n };\n }\n function preparePartialBlock(open, program, close, locInfo) {\n validateClose(open, close);\n return {\n type: 'PartialBlockStatement',\n name: open.path,\n params: open.params,\n hash: open.hash,\n program: program,\n openStrip: open.strip,\n closeStrip: close && close.strip,\n loc: this.locInfo(locInfo)\n };\n }\n var Helpers = /*#__PURE__*/Object.freeze({\n __proto__: null,\n SourceLocation: SourceLocation,\n id: id,\n prepareBlock: prepareBlock,\n prepareMustache: prepareMustache,\n preparePartialBlock: preparePartialBlock,\n preparePath: preparePath,\n prepareProgram: prepareProgram,\n prepareRawBlock: prepareRawBlock,\n stripComment: stripComment,\n stripFlags: stripFlags\n });\n var baseHelpers = {};\n for (var helper in Helpers) {\n if (Object.prototype.hasOwnProperty.call(Helpers, helper)) {\n baseHelpers[helper] = Helpers[helper];\n }\n }\n function parseWithoutProcessing(input, options) {\n // Just return if an already-compiled AST was passed in.\n if (input.type === 'Program') {\n return input;\n }\n parser.yy = baseHelpers;\n // Altering the shared object here, but this is ok as parser is a sync operation\n parser.yy.locInfo = function (locInfo) {\n return new SourceLocation(options && options.srcName, locInfo);\n };\n var ast = parser.parse(input);\n return ast;\n }\n function parse(input, options) {\n var ast = parseWithoutProcessing(input, options);\n var strip = new WhitespaceControl(options);\n return strip.accept(ast);\n }\n});","define(\"ember-babel\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.assertThisInitialized = assertThisInitialized;\n _exports.classCallCheck = classCallCheck;\n _exports.classPrivateFieldLooseBase = classPrivateFieldLooseBase;\n _exports.classPrivateFieldLooseKey = classPrivateFieldLooseKey;\n _exports.createClass = createClass;\n _exports.createForOfIteratorHelperLoose = createForOfIteratorHelperLoose;\n _exports.createSuper = createSuper;\n _exports.inheritsLoose = inheritsLoose;\n _exports.objectDestructuringEmpty = objectDestructuringEmpty;\n _exports.possibleConstructorReturn = possibleConstructorReturn;\n _exports.taggedTemplateLiteralLoose = taggedTemplateLiteralLoose;\n _exports.wrapNativeSuper = wrapNativeSuper;\n /* globals Reflect */\n\n const setPrototypeOf = Object.setPrototypeOf;\n const getPrototypeOf = Object.getPrototypeOf;\n const hasReflectConstruct = typeof Reflect === 'object' && typeof Reflect.construct === 'function';\n const nativeWrapperCache = new Map();\n\n // Implementations:\n // https://github.com/babel/babel/blob/436d78920883603668666210a4aacf524257bc3b/packages/babel-helpers/src/helpers.ts#L958\n let privateFieldId = 0;\n function classPrivateFieldLooseKey(name) {\n return '__private_' + privateFieldId++ + '_' + name;\n }\n function classPrivateFieldLooseBase(receiver, privateKey) {\n if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {\n throw new TypeError('attempted to use private field on non-instance');\n }\n return receiver;\n }\n\n // Super minimal version of Babel's wrapNativeSuper. We only use this for\n // extending Function, for ComputedDecoratorImpl and AliasDecoratorImpl. We know\n // we will never directly create an instance of these classes so no need to\n // include `construct` code or other helpers.\n function wrapNativeSuper(Class) {\n if (nativeWrapperCache.has(Class)) {\n return nativeWrapperCache.get(Class);\n }\n function Wrapper() {}\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n nativeWrapperCache.set(Class, Wrapper);\n return setPrototypeOf(Wrapper, Class);\n }\n function classCallCheck(instance, Constructor) {\n if (true /* DEBUG */) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n }\n }\n\n /*\n Overrides default `inheritsLoose` to _also_ call `Object.setPrototypeOf`.\n This is needed so that we can use `loose` option with the\n `@babel/plugin-transform-classes` (because we want simple assignment to the\n prototype wherever possible) but also keep our constructor based prototypal\n inheritance working properly\n */\n function inheritsLoose(subClass, superClass) {\n if (true /* DEBUG */) {\n if (typeof superClass !== 'function' && superClass !== null) {\n throw new TypeError('Super expression must either be null or a function');\n }\n }\n subClass.prototype = Object.create(superClass === null ? null : superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass !== null) {\n setPrototypeOf(subClass, superClass);\n }\n }\n function taggedTemplateLiteralLoose(strings, raw) {\n if (!raw) {\n raw = strings.slice(0);\n }\n strings.raw = raw;\n return strings;\n }\n function _defineProperties(target, props) {\n for (let i = 0; i < props.length; i++) {\n let descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n /*\n Differs from default implementation by avoiding boolean coercion of\n `protoProps` and `staticProps`.\n */\n function createClass(Constructor, protoProps, staticProps) {\n if (protoProps !== null && protoProps !== undefined) {\n _defineProperties(Constructor.prototype, protoProps);\n }\n if (staticProps !== null && staticProps !== undefined) {\n _defineProperties(Constructor, staticProps);\n }\n return Constructor;\n }\n function assertThisInitialized(self) {\n if (true /* DEBUG */ && self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return self;\n }\n\n /*\n Adds `DEBUG` guard to error being thrown, and avoids boolean coercion of `call`.\n */\n function possibleConstructorReturn(self, call) {\n if (typeof call === 'object' && call !== null || typeof call === 'function') {\n return call;\n }\n return assertThisInitialized(self);\n }\n function objectDestructuringEmpty(obj) {\n if (true /* DEBUG */ && (obj === null || obj === undefined)) {\n throw new TypeError('Cannot destructure undefined');\n }\n }\n\n /*\n Differs from default implementation by checking for _any_ `Reflect.construct`\n (the default implementation tries to ensure that `Reflect.construct` is truly\n the native one).\n \n Original source: https://github.com/babel/babel/blob/v7.9.2/packages/babel-helpers/src/helpers.js#L738-L757\n */\n function createSuper(Derived) {\n return function () {\n let Super = getPrototypeOf(Derived);\n let result;\n if (hasReflectConstruct) {\n // NOTE: This doesn't work if this.__proto__.constructor has been modified.\n let NewTarget = getPrototypeOf(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n return possibleConstructorReturn(this, result);\n };\n }\n\n /*\n Does not differ from default implementation.\n */\n function arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n let arr2 = new Array(len);\n for (let i = 0; i < len; i++) {\n arr2[i] = arr[i];\n }\n return arr2;\n }\n\n /*\n Does not differ from default implementation.\n */\n function unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === 'string') return arrayLikeToArray(o, minLen);\n let n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === 'Object' && o.constructor) n = o.constructor.name;\n if (n === 'Map' || n === 'Set') return Array.from(n);\n if (n === 'Arguments' || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n }\n\n /*\n Does not differ from default implementation.\n */\n function createForOfIteratorHelperLoose(o) {\n let i = 0;\n if (typeof Symbol === 'undefined' || o[Symbol.iterator] == null) {\n // Fallback for engines without symbol support\n if (Array.isArray(o) || (o = unsupportedIterableToArray(o))) return function () {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n };\n throw new TypeError('Invalid attempt to iterate non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.');\n }\n i = o[Symbol.iterator]();\n return i.next.bind(i);\n }\n});","define(\"ember-template-compiler/index\", [\"exports\", \"ember-template-compiler/lib/public-api\", \"@ember/template-compilation\", \"ember-template-compiler/lib/system/bootstrap\", \"ember-template-compiler/lib/system/initializer\"], function (_exports, ETC, _templateCompilation, _bootstrap, _initializer) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n Object.keys(ETC).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in _exports && _exports[key] === ETC[key]) return;\n Object.defineProperty(_exports, key, {\n enumerable: true,\n get: function () {\n return ETC[key];\n }\n });\n });\n (0, _templateCompilation.__registerTemplateCompiler)(ETC);\n // used to bootstrap templates\n\n // add domTemplates initializer (only does something if `ember-template-compiler`\n // is loaded already)\n});","define(\"ember-template-compiler/lib/plugins/assert-against-attrs\", [\"exports\", \"@ember/debug\", \"ember-template-compiler/lib/system/calculate-location-display\"], function (_exports, _debug, _calculateLocationDisplay) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = assertAgainstAttrs;\n /**\n @module ember\n */\n /**\n A Glimmer2 AST transformation that asserts against\n \n ```handlebars\n {{attrs.foo.bar}}\n ```\n \n ...as well as `{{#if attrs.foo}}`, `{{deeply (nested attrs.foobar.baz)}}`.\n \n @private\n @class AssertAgainstAttrs\n */\n function assertAgainstAttrs(env) {\n var _env$meta;\n let {\n builders: b\n } = env.syntax;\n let moduleName = (_env$meta = env.meta) == null ? void 0 : _env$meta.moduleName;\n let stack = [[]];\n function updateBlockParamsStack(blockParams) {\n let parent = stack[stack.length - 1];\n (true && !(parent) && (0, _debug.assert)('has parent', parent));\n stack.push(parent.concat(blockParams));\n }\n return {\n name: 'assert-against-attrs',\n visitor: {\n Program: {\n enter(node) {\n updateBlockParamsStack(node.blockParams);\n },\n exit() {\n stack.pop();\n }\n },\n ElementNode: {\n enter(node) {\n updateBlockParamsStack(node.blockParams);\n },\n exit() {\n stack.pop();\n }\n },\n PathExpression(node) {\n if (isAttrs(node, stack[stack.length - 1])) {\n let path = b.path(node.original.substring(6));\n (true && !(node.this !== false) && (0, _debug.assert)(\"Using {{attrs}} to reference named arguments is not supported. {{attrs.\" + path.original + \"}} should be updated to {{@\" + path.original + \"}}. \" + (0, _calculateLocationDisplay.default)(moduleName, node.loc), node.this !== false));\n }\n }\n }\n };\n }\n function isAttrs(node, symbols) {\n let name = node.parts[0];\n if (name && symbols.indexOf(name) !== -1) {\n return false;\n }\n if (name === 'attrs') {\n if (node.this === true) {\n node.parts.shift();\n node.original = node.original.slice(5);\n }\n return true;\n }\n return false;\n }\n});","define(\"ember-template-compiler/lib/plugins/assert-against-named-outlets\", [\"exports\", \"@ember/debug\", \"ember-template-compiler/lib/system/calculate-location-display\"], function (_exports, _debug, _calculateLocationDisplay) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = assertAgainstNamedOutlets;\n /**\n @module ember\n */\n /**\n Prevents usage of named outlets, a legacy concept in Ember removed in 4.0.\n \n @private\n @class AssertAgainstNamedOutlets\n */\n function assertAgainstNamedOutlets(env) {\n var _env$meta;\n let moduleName = (_env$meta = env.meta) == null ? void 0 : _env$meta.moduleName;\n return {\n name: 'assert-against-named-outlets',\n visitor: {\n MustacheStatement(node) {\n if (node.path.type === 'PathExpression' && node.path.original === 'outlet' && node.params[0]) {\n let sourceInformation = (0, _calculateLocationDisplay.default)(moduleName, node.loc);\n (true && !(false) && (0, _debug.assert)(\"Named outlets were removed in Ember 4.0. See https://deprecations.emberjs.com/v3.x#toc_route-render-template for guidance on alternative APIs for named outlet use cases. \" + sourceInformation));\n }\n }\n }\n };\n }\n});","define(\"ember-template-compiler/lib/plugins/assert-input-helper-without-block\", [\"exports\", \"@ember/debug\", \"ember-template-compiler/lib/system/calculate-location-display\", \"ember-template-compiler/lib/plugins/utils\"], function (_exports, _debug, _calculateLocationDisplay, _utils) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = errorOnInputWithContent;\n function errorOnInputWithContent(env) {\n var _env$meta;\n let moduleName = (_env$meta = env.meta) == null ? void 0 : _env$meta.moduleName;\n return {\n name: 'assert-input-helper-without-block',\n visitor: {\n BlockStatement(node) {\n if ((0, _utils.isPath)(node.path) && node.path.original === 'input') {\n (true && !(false) && (0, _debug.assert)(assertMessage(moduleName, node)));\n }\n }\n }\n };\n }\n function assertMessage(moduleName, node) {\n let sourceInformation = (0, _calculateLocationDisplay.default)(moduleName, node.loc);\n return \"The {{input}} helper cannot be used in block form. \" + sourceInformation;\n }\n});","define(\"ember-template-compiler/lib/plugins/assert-reserved-named-arguments\", [\"exports\", \"@ember/debug\", \"ember-template-compiler/lib/system/calculate-location-display\"], function (_exports, _debug, _calculateLocationDisplay) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = assertReservedNamedArguments;\n function assertReservedNamedArguments(env) {\n var _env$meta;\n let moduleName = (_env$meta = env.meta) == null ? void 0 : _env$meta.moduleName;\n return {\n name: 'assert-reserved-named-arguments',\n visitor: {\n // In general, we don't assert on the invocation side to avoid creating migration\n // hazards (e.g. using angle bracket to invoke a classic component that uses\n // `this.someReservedName`. However, we want to avoid leaking special internal\n // things, such as `__ARGS__`, so those would need to be asserted on both sides.\n AttrNode(_ref) {\n let {\n name,\n loc\n } = _ref;\n if (name === '@__ARGS__') {\n (true && !(false) && (0, _debug.assert)(assertMessage(name) + \" \" + (0, _calculateLocationDisplay.default)(moduleName, loc)));\n }\n },\n HashPair(_ref2) {\n let {\n key,\n loc\n } = _ref2;\n if (key === '__ARGS__') {\n (true && !(false) && (0, _debug.assert)(assertMessage(key) + \" \" + (0, _calculateLocationDisplay.default)(moduleName, loc)));\n }\n },\n PathExpression(_ref3) {\n let {\n original,\n loc\n } = _ref3;\n if (isReserved(original)) {\n (true && !(false) && (0, _debug.assert)(assertMessage(original) + \" \" + (0, _calculateLocationDisplay.default)(moduleName, loc)));\n }\n }\n }\n };\n }\n const RESERVED = ['@arguments', '@args', '@block', '@else'];\n function isReserved(name) {\n return RESERVED.indexOf(name) !== -1 || Boolean(name.match(/^@[^a-z]/));\n }\n function assertMessage(name) {\n return \"'\" + name + \"' is reserved.\";\n }\n});","define(\"ember-template-compiler/lib/plugins/assert-splattribute-expression\", [\"exports\", \"@ember/debug\", \"ember-template-compiler/lib/system/calculate-location-display\"], function (_exports, _debug, _calculateLocationDisplay) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = assertSplattributeExpressions;\n function assertSplattributeExpressions(env) {\n var _env$meta;\n let moduleName = (_env$meta = env.meta) == null ? void 0 : _env$meta.moduleName;\n return {\n name: 'assert-splattribute-expressions',\n visitor: {\n PathExpression(_ref) {\n let {\n original,\n loc\n } = _ref;\n if (original === '...attributes') {\n (true && !(false) && (0, _debug.assert)(errorMessage() + \" \" + (0, _calculateLocationDisplay.default)(moduleName, loc)));\n }\n }\n }\n };\n }\n function errorMessage() {\n return '`...attributes` can only be used in the element position e.g. `<div ...attributes />`. It cannot be used as a path.';\n }\n});","define(\"ember-template-compiler/lib/plugins/index\", [\"exports\", \"ember-template-compiler/lib/plugins/assert-against-attrs\", \"ember-template-compiler/lib/plugins/assert-against-named-outlets\", \"ember-template-compiler/lib/plugins/assert-input-helper-without-block\", \"ember-template-compiler/lib/plugins/assert-reserved-named-arguments\", \"ember-template-compiler/lib/plugins/assert-splattribute-expression\", \"ember-template-compiler/lib/plugins/transform-action-syntax\", \"ember-template-compiler/lib/plugins/transform-each-in-into-each\", \"ember-template-compiler/lib/plugins/transform-each-track-array\", \"ember-template-compiler/lib/plugins/transform-in-element\", \"ember-template-compiler/lib/plugins/transform-quoted-bindings-into-just-bindings\", \"ember-template-compiler/lib/plugins/transform-resolutions\", \"ember-template-compiler/lib/plugins/transform-wrap-mount-and-outlet\"], function (_exports, _assertAgainstAttrs, _assertAgainstNamedOutlets, _assertInputHelperWithoutBlock, _assertReservedNamedArguments, _assertSplattributeExpression, _transformActionSyntax, _transformEachInIntoEach, _transformEachTrackArray, _transformInElement, _transformQuotedBindingsIntoJustBindings, _transformResolutions, _transformWrapMountAndOutlet) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.STRICT_MODE_TRANSFORMS = _exports.RESOLUTION_MODE_TRANSFORMS = void 0;\n // order of plugins is important\n const RESOLUTION_MODE_TRANSFORMS = _exports.RESOLUTION_MODE_TRANSFORMS = Object.freeze([_transformQuotedBindingsIntoJustBindings.default, _assertReservedNamedArguments.default, _transformActionSyntax.default, _assertAgainstAttrs.default, _transformEachInIntoEach.default, _assertInputHelperWithoutBlock.default, _transformInElement.default, _assertSplattributeExpression.default, _transformEachTrackArray.default, _assertAgainstNamedOutlets.default, _transformWrapMountAndOutlet.default, _transformResolutions.default].filter(notNull));\n const STRICT_MODE_TRANSFORMS = _exports.STRICT_MODE_TRANSFORMS = Object.freeze([_transformQuotedBindingsIntoJustBindings.default, _assertReservedNamedArguments.default, _transformActionSyntax.default, _transformEachInIntoEach.default, _transformInElement.default, _assertSplattributeExpression.default, _transformEachTrackArray.default, _assertAgainstNamedOutlets.default, _transformWrapMountAndOutlet.default].filter(notNull));\n function notNull(value) {\n return value !== null;\n }\n});","define(\"ember-template-compiler/lib/plugins/transform-action-syntax\", [\"exports\", \"ember-template-compiler/lib/plugins/utils\"], function (_exports, _utils) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = transformActionSyntax;\n /**\n @module ember\n */\n /**\n A Glimmer2 AST transformation that replaces all instances of\n \n ```handlebars\n <button {{action 'foo'}}>\n <button onblur={{action 'foo'}}>\n <button onblur={{action (action 'foo') 'bar'}}>\n ```\n \n with\n \n ```handlebars\n <button {{action this 'foo'}}>\n <button onblur={{action this 'foo'}}>\n <button onblur={{action this (action this 'foo') 'bar'}}>\n ```\n \n @private\n @class TransformActionSyntax\n */\n function transformActionSyntax(_ref) {\n let {\n syntax\n } = _ref;\n let {\n builders: b\n } = syntax;\n return {\n name: 'transform-action-syntax',\n visitor: {\n ElementModifierStatement(node) {\n if (isAction(node)) {\n insertThisAsFirstParam(node, b);\n }\n },\n MustacheStatement(node) {\n if (isAction(node)) {\n insertThisAsFirstParam(node, b);\n }\n },\n SubExpression(node) {\n if (isAction(node)) {\n insertThisAsFirstParam(node, b);\n }\n }\n }\n };\n }\n function isAction(node) {\n return (0, _utils.isPath)(node.path) && node.path.original === 'action';\n }\n function insertThisAsFirstParam(node, builders) {\n node.params.unshift(builders.path('this'));\n }\n});","define(\"ember-template-compiler/lib/plugins/transform-each-in-into-each\", [\"exports\", \"ember-template-compiler/lib/plugins/utils\"], function (_exports, _utils) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = transformEachInIntoEach;\n /**\n @module ember\n */\n /**\n A Glimmer2 AST transformation that replaces all instances of\n \n ```handlebars\n {{#each-in iterableThing as |key value|}}\n ```\n \n with\n \n ```handlebars\n {{#each (-each-in iterableThing) as |value key|}}\n ```\n \n @private\n @class TransformHasBlockSyntax\n */\n function transformEachInIntoEach(env) {\n let {\n builders: b\n } = env.syntax;\n return {\n name: 'transform-each-in-into-each',\n visitor: {\n BlockStatement(node) {\n if ((0, _utils.isPath)(node.path) && node.path.original === 'each-in') {\n node.params[0] = b.sexpr(b.path('-each-in'), [node.params[0]]);\n let blockParams = node.program.blockParams;\n if (!blockParams || blockParams.length === 0) {\n // who uses {{#each-in}} without block params?!\n } else if (blockParams.length === 1) {\n // insert a dummy variable for the first slot\n // pick a name that won't parse so it won't shadow any real variables\n blockParams = ['( unused value )', blockParams[0]];\n } else {\n let key = blockParams.shift();\n let value = blockParams.shift();\n blockParams = [value, key, ...blockParams];\n }\n node.program.blockParams = blockParams;\n return b.block(b.path('each'), node.params, node.hash, node.program, node.inverse, node.loc);\n }\n }\n }\n };\n }\n});","define(\"ember-template-compiler/lib/plugins/transform-each-track-array\", [\"exports\", \"@ember/debug\", \"ember-template-compiler/lib/plugins/utils\"], function (_exports, _debug, _utils) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = transformEachTrackArray;\n /**\n @module ember\n */\n /**\n A Glimmer2 AST transformation that replaces all instances of\n \n ```handlebars\n {{#each iterableThing as |key value|}}\n ```\n \n with\n \n ```handlebars\n {{#each (-track-array iterableThing) as |key value|}}\n ```\n \n @private\n @class TransformHasBlockSyntax\n */\n function transformEachTrackArray(env) {\n let {\n builders: b\n } = env.syntax;\n return {\n name: 'transform-each-track-array',\n visitor: {\n BlockStatement(node) {\n if ((0, _utils.isPath)(node.path) && node.path.original === 'each') {\n let firstParam = node.params[0];\n (true && !(firstParam) && (0, _debug.assert)('has firstParam', firstParam));\n if (firstParam.type === 'SubExpression' && firstParam.path.type === 'PathExpression' && firstParam.path.original === '-each-in') {\n return;\n }\n node.params[0] = b.sexpr(b.path('-track-array'), [firstParam]);\n return b.block(b.path('each'), node.params, node.hash, node.program, node.inverse, node.loc);\n }\n }\n }\n };\n }\n});","define(\"ember-template-compiler/lib/plugins/transform-in-element\", [\"exports\", \"@ember/debug\", \"ember-template-compiler/lib/plugins/utils\"], function (_exports, _debug, _utils) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = transformInElement;\n /**\n @module ember\n */\n /**\n A Glimmer2 AST transformation that handles the public `{{in-element}}` as per RFC287.\n \n Issues a build time assertion for:\n \n ```handlebars\n {{#in-element someElement insertBefore=\"some-none-null-value\"}}\n {{modal-display text=text}}\n {{/in-element}}\n ```\n \n @private\n @class TransformInElement\n */\n function transformInElement(env) {\n let {\n builders: b\n } = env.syntax;\n return {\n name: 'transform-in-element',\n visitor: {\n BlockStatement(node) {\n if (!(0, _utils.isPath)(node.path)) return;\n if (node.path.original === 'in-element') {\n let originalValue = node.params[0];\n if (originalValue && !env.isProduction) {\n let subExpr = b.sexpr('-in-el-null', [originalValue]);\n node.params.shift();\n node.params.unshift(subExpr);\n }\n node.hash.pairs.forEach(pair => {\n if (pair.key === 'insertBefore') {\n (true && !(pair.value.type === 'NullLiteral' || pair.value.type === 'UndefinedLiteral') && (0, _debug.assert)(\"Can only pass null to insertBefore in in-element, received: \" + JSON.stringify(pair.value), pair.value.type === 'NullLiteral' || pair.value.type === 'UndefinedLiteral'));\n }\n });\n }\n }\n }\n };\n }\n});","define(\"ember-template-compiler/lib/plugins/transform-quoted-bindings-into-just-bindings\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = transformQuotedBindingsIntoJustBindings;\n function transformQuotedBindingsIntoJustBindings( /* env */\n ) {\n return {\n name: 'transform-quoted-bindings-into-just-bindings',\n visitor: {\n ElementNode(node) {\n let styleAttr = getStyleAttr(node);\n if (!validStyleAttr(styleAttr)) {\n return;\n }\n styleAttr.value = styleAttr.value.parts[0];\n }\n }\n };\n }\n function validStyleAttr(attr) {\n if (!attr) {\n return false;\n }\n let value = attr.value;\n if (!value || value.type !== 'ConcatStatement' || value.parts.length !== 1) {\n return false;\n }\n let onlyPart = value.parts[0];\n return onlyPart.type === 'MustacheStatement';\n }\n function getStyleAttr(node) {\n let attributes = node.attributes;\n for (let attribute of attributes) {\n if (attribute.name === 'style') {\n return attribute;\n }\n }\n return undefined;\n }\n});","define(\"ember-template-compiler/lib/plugins/transform-resolutions\", [\"exports\", \"@ember/debug\", \"@glimmer/syntax\", \"ember-template-compiler/lib/system/calculate-location-display\", \"ember-template-compiler/lib/plugins/utils\"], function (_exports, _debug, _syntax, _calculateLocationDisplay, _utils) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = transformResolutions;\n /**\n @module ember\n */\n /**\n A Glimmer2 AST transformation that replaces all instances of\n \n ```handlebars\n {{helper \"...\" ...}}\n ```\n \n with\n \n ```handlebars\n {{helper (-resolve \"helper:...\") ...}}\n ```\n \n and\n \n ```handlebars\n {{helper ... ...}}\n ```\n \n with\n \n ```handlebars\n {{helper (-disallow-dynamic-resolution ...) ...}}\n ```\n \n and\n \n ```handlebars\n {{modifier \"...\" ...}}\n ```\n \n with\n \n ```handlebars\n {{modifier (-resolve \"modifier:...\") ...}}\n ```\n and\n \n ```handlebars\n {{modifier ... ...}}\n ```\n \n with\n \n ```handlebars\n {{modifier (-disallow-dynamic-resolution ...) ...}}\n ```\n \n @private\n @class TransformResolutions\n */\n const TARGETS = Object.freeze(['helper', 'modifier']);\n function transformResolutions(env) {\n var _env$meta;\n let {\n builders: b\n } = env.syntax;\n let moduleName = (_env$meta = env.meta) == null ? void 0 : _env$meta.moduleName;\n let {\n hasLocal,\n node: tracker\n } = (0, _utils.trackLocals)();\n let seen;\n return {\n name: 'transform-resolutions',\n visitor: {\n Template: {\n enter() {\n seen = new Set();\n },\n exit() {\n seen = undefined;\n }\n },\n Block: tracker,\n ElementNode: {\n keys: {\n children: tracker\n }\n },\n MustacheStatement(node) {\n (true && !(seen) && (0, _debug.assert)('[BUG] seen set should be available', seen));\n if (seen.has(node)) {\n return;\n }\n if ((0, _utils.isPath)(node.path) && !isLocalVariable(node.path, hasLocal) && TARGETS.indexOf(node.path.original) !== -1) {\n let result = b.mustache(node.path, transformParams(b, node.params, node.path.original, moduleName, node.loc), node.hash, node.trusting, node.loc, node.strip);\n // Avoid double/infinite-processing\n seen.add(result);\n return result;\n }\n },\n SubExpression(node) {\n (true && !(seen) && (0, _debug.assert)('[BUG] seen set should be available', seen));\n if (seen.has(node)) {\n return;\n }\n if ((0, _utils.isPath)(node.path) && !isLocalVariable(node.path, hasLocal) && TARGETS.indexOf(node.path.original) !== -1) {\n let result = b.sexpr(node.path, transformParams(b, node.params, node.path.original, moduleName, node.loc), node.hash, node.loc);\n // Avoid double/infinite-processing\n seen.add(result);\n return result;\n }\n }\n }\n };\n }\n function isLocalVariable(node, hasLocal) {\n return !node.this && node.parts.length === 1 && hasLocal(node.parts[0]);\n }\n function transformParams(b, params, type, moduleName, loc) {\n let [first, ...rest] = params;\n (true && !(first) && (0, _debug.assert)(\"The \" + type + \" keyword requires at least one positional arguments \" + (0, _calculateLocationDisplay.default)(moduleName, loc), first));\n if ((0, _utils.isStringLiteral)(first)) {\n return [b.sexpr(b.path('-resolve', first.loc), [b.string(type + \":\" + first.value)], undefined, first.loc), ...rest];\n } else if (true /* DEBUG */) {\n return [b.sexpr(b.path('-disallow-dynamic-resolution', first.loc), [first], b.hash([b.pair('type', b.string(type), first.loc), b.pair('loc', b.string((0, _calculateLocationDisplay.default)(moduleName, loc)), first.loc), b.pair('original', b.string((0, _syntax.print)(first)))]), first.loc), ...rest];\n } else {\n return params;\n }\n }\n});","define(\"ember-template-compiler/lib/plugins/transform-wrap-mount-and-outlet\", [\"exports\", \"ember-template-compiler/lib/plugins/utils\"], function (_exports, _utils) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = transformWrapMountAndOutlet;\n /**\n @module ember\n */\n /**\n A Glimmer2 AST transformation that replaces all instances of\n \n ```handlebars\n {{mount \"engine\" model=this.model}}\n ```\n \n with\n \n ```handlebars\n {{component (-mount \"engine\" model=this.model)}}\n ```\n \n and\n \n ```handlebars\n {{outlet}}\n ```\n \n with\n \n ```handlebars\n {{component (-outlet)}}\n ```\n \n @private\n @class TransformHasBlockSyntax\n */\n function transformWrapMountAndOutlet(env) {\n let {\n builders: b\n } = env.syntax;\n let {\n hasLocal,\n node\n } = (0, _utils.trackLocals)();\n return {\n name: 'transform-wrap-mount-and-outlet',\n visitor: {\n Program: node,\n ElementNode: node,\n MustacheStatement(node) {\n if ((0, _utils.isPath)(node.path) && (node.path.original === 'mount' || node.path.original === 'outlet') && !hasLocal(node.path.original)) {\n let subexpression = b.sexpr(b.path(\"-\" + node.path.original), node.params, node.hash, node.loc);\n return b.mustache(b.path('component'), [subexpression], b.hash(), undefined, node.loc);\n }\n }\n }\n };\n }\n});","define(\"ember-template-compiler/lib/plugins/utils\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.isPath = isPath;\n _exports.isStringLiteral = isStringLiteral;\n _exports.isSubExpression = isSubExpression;\n _exports.trackLocals = trackLocals;\n function isPath(node) {\n return node.type === 'PathExpression';\n }\n function isSubExpression(node) {\n return node.type === 'SubExpression';\n }\n function isStringLiteral(node) {\n return node.type === 'StringLiteral';\n }\n function trackLocals() {\n let locals = new Map();\n let node = {\n enter(node) {\n for (let param of node.blockParams) {\n let value = locals.get(param) || 0;\n locals.set(param, value + 1);\n }\n },\n exit(node) {\n for (let param of node.blockParams) {\n let value = locals.get(param) - 1;\n if (value === 0) {\n locals.delete(param);\n } else {\n locals.set(param, value);\n }\n }\n }\n };\n return {\n hasLocal: key => locals.has(key),\n node\n };\n }\n});","define(\"ember-template-compiler/lib/public-api\", [\"exports\", \"ember\", \"ember/version\", \"@glimmer/syntax\", \"ember-template-compiler/lib/system/precompile\", \"ember-template-compiler/lib/system/compile\", \"ember-template-compiler/lib/system/compile-options\", \"ember-template-compiler/lib/plugins\", \"@glimmer/compiler\"], function (_exports, _ember, _version, _GlimmerSyntax, _precompile, _compile, _compileOptions, _plugins, _compiler) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n Object.defineProperty(_exports, \"RESOLUTION_MODE_TRANSFORMS\", {\n enumerable: true,\n get: function () {\n return _plugins.RESOLUTION_MODE_TRANSFORMS;\n }\n });\n Object.defineProperty(_exports, \"STRICT_MODE_TRANSFORMS\", {\n enumerable: true,\n get: function () {\n return _plugins.STRICT_MODE_TRANSFORMS;\n }\n });\n Object.defineProperty(_exports, \"VERSION\", {\n enumerable: true,\n get: function () {\n return _version.default;\n }\n });\n Object.defineProperty(_exports, \"_Ember\", {\n enumerable: true,\n get: function () {\n return _ember.default;\n }\n });\n _exports._GlimmerSyntax = void 0;\n Object.defineProperty(_exports, \"_buildCompileOptions\", {\n enumerable: true,\n get: function () {\n return _compileOptions.buildCompileOptions;\n }\n });\n Object.defineProperty(_exports, \"_precompile\", {\n enumerable: true,\n get: function () {\n return _compiler.precompile;\n }\n });\n Object.defineProperty(_exports, \"_preprocess\", {\n enumerable: true,\n get: function () {\n return _GlimmerSyntax.preprocess;\n }\n });\n Object.defineProperty(_exports, \"_print\", {\n enumerable: true,\n get: function () {\n return _GlimmerSyntax.print;\n }\n });\n Object.defineProperty(_exports, \"_transformsFor\", {\n enumerable: true,\n get: function () {\n return _compileOptions.transformsFor;\n }\n });\n Object.defineProperty(_exports, \"compile\", {\n enumerable: true,\n get: function () {\n return _compile.default;\n }\n });\n Object.defineProperty(_exports, \"compileOptions\", {\n enumerable: true,\n get: function () {\n return _compileOptions.default;\n }\n });\n Object.defineProperty(_exports, \"precompile\", {\n enumerable: true,\n get: function () {\n return _precompile.default;\n }\n });\n _exports._GlimmerSyntax = _GlimmerSyntax;\n});","define(\"ember-template-compiler/lib/system/bootstrap\", [\"exports\", \"ember-template-compiler/lib/system/compile\"], function (_exports, _compile) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n /**\n @module ember\n */\n\n /**\n Find templates stored in the head tag as script tags and make them available\n to `Ember.CoreView` in the global `Ember.TEMPLATES` object.\n \n Script tags with `text/x-handlebars` will be compiled\n with Ember's template compiler and are suitable for use as a view's template.\n \n @private\n @method bootstrap\n @for Ember.HTMLBars\n @static\n @param ctx\n */\n function bootstrap(_ref) {\n let {\n context,\n hasTemplate,\n setTemplate\n } = _ref;\n if (!context) {\n context = document;\n }\n let selector = 'script[type=\"text/x-handlebars\"]';\n let elements = context.querySelectorAll(selector);\n for (let script of elements) {\n // Get the name of the script\n // First look for data-template-name attribute, then fall back to its\n // id if no name is found.\n let templateName = script.getAttribute('data-template-name') || script.getAttribute('id') || 'application';\n let template;\n template = (0, _compile.default)(script.innerHTML, {\n moduleName: templateName\n });\n // Check if template of same name already exists.\n if (hasTemplate(templateName)) {\n throw new Error(\"Template named \\\"\" + templateName + \"\\\" already exists.\");\n }\n // For templates which have a name, we save them and then remove them from the DOM.\n setTemplate(templateName, template);\n // Remove script tag from DOM.\n script.parentNode.removeChild(script);\n }\n }\n var _default = _exports.default = bootstrap;\n});","define(\"ember-template-compiler/lib/system/calculate-location-display\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = calculateLocationDisplay;\n function calculateLocationDisplay(moduleName, loc) {\n let moduleInfo = '';\n if (moduleName) {\n moduleInfo += \"'\" + moduleName + \"' \";\n }\n if (loc) {\n let {\n column,\n line\n } = loc.start || {\n line: undefined,\n column: undefined\n };\n if (line !== undefined && column !== undefined) {\n if (moduleName) {\n // only prepend @ if the moduleName was present\n moduleInfo += '@ ';\n }\n moduleInfo += \"L\" + line + \":C\" + column;\n }\n }\n if (moduleInfo) {\n moduleInfo = \"(\" + moduleInfo + \") \";\n }\n return moduleInfo;\n }\n});","define(\"ember-template-compiler/lib/system/compile-options\", [\"exports\", \"@ember/debug\", \"ember-template-compiler/lib/plugins/index\", \"ember-template-compiler/lib/system/dasherize-component-name\"], function (_exports, _debug, _index, _dasherizeComponentName) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.buildCompileOptions = buildCompileOptions;\n _exports.default = compileOptions;\n _exports.transformsFor = transformsFor;\n let USER_PLUGINS = [];\n function malformedComponentLookup(string) {\n return string.indexOf('::') === -1 && string.indexOf(':') > -1;\n }\n function buildCompileOptions(_options) {\n let moduleName = _options.moduleName;\n let options = Object.assign({\n meta: {},\n isProduction: false,\n plugins: {\n ast: []\n }\n }, _options, {\n moduleName,\n customizeComponentName(tagname) {\n (true && !(!malformedComponentLookup(tagname)) && (0, _debug.assert)(\"You tried to invoke a component named <\" + tagname + \" /> in \\\"\" + (moduleName != null ? moduleName : '[NO MODULE]') + \"\\\", but that is not a valid name for a component. Did you mean to use the \\\"::\\\" syntax for nested components?\", !malformedComponentLookup(tagname)));\n return _dasherizeComponentName.default.get(tagname);\n }\n });\n if ('locals' in options && !options.locals) {\n // Glimmer's precompile options declare `locals` like:\n // locals?: string[]\n // but many in-use versions of babel-plugin-htmlbars-inline-precompile will\n // set locals to `null`. This used to work but only because glimmer was\n // ignoring locals for non-strict templates, and now it supports that case.\n delete options.locals;\n }\n // move `moduleName` into `meta` property\n if (options.moduleName) {\n let meta = options.meta;\n (true && !(meta) && (0, _debug.assert)('has meta', meta)); // We just set it\n meta.moduleName = options.moduleName;\n }\n return options;\n }\n function transformsFor(options) {\n return options.strictMode ? _index.STRICT_MODE_TRANSFORMS : _index.RESOLUTION_MODE_TRANSFORMS;\n }\n function compileOptions(_options) {\n if (_options === void 0) {\n _options = {};\n }\n let options = buildCompileOptions(_options);\n let builtInPlugins = transformsFor(options);\n if (!_options.plugins) {\n options.plugins = {\n ast: [...USER_PLUGINS, ...builtInPlugins]\n };\n } else {\n let potententialPugins = [...USER_PLUGINS, ...builtInPlugins];\n (true && !(options.plugins) && (0, _debug.assert)('expected plugins', options.plugins));\n let pluginsToAdd = potententialPugins.filter(plugin => {\n (true && !(options.plugins) && (0, _debug.assert)('expected plugins', options.plugins));\n return options.plugins.ast.indexOf(plugin) === -1;\n });\n options.plugins.ast = options.plugins.ast.concat(pluginsToAdd);\n }\n return options;\n }\n});","define(\"ember-template-compiler/lib/system/compile\", [\"exports\", \"ember-template-compiler/lib/system/precompile\", \"@ember/-internals/glimmer\"], function (_exports, _precompile, _glimmer) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = compile;\n /**\n Uses HTMLBars `compile` function to process a string into a compiled template.\n This is not present in production builds.\n @private\n @method compile\n @param {String} templateString This is the string to be compiled by HTMLBars.\n @param {Object} options This is an options hash to augment the compiler options.\n */\n function compile(templateString, options) {\n if (options === void 0) {\n options = {};\n }\n if (!_glimmer.template) {\n throw new Error('Cannot call `compile` with only the template compiler loaded. Please load `ember.debug.js` or `ember.prod.js` prior to calling `compile`.');\n }\n return (0, _glimmer.template)(evaluate((0, _precompile.default)(templateString, options)));\n }\n function evaluate(precompiled) {\n return new Function(\"return \" + precompiled)();\n }\n});","define(\"ember-template-compiler/lib/system/dasherize-component-name\", [\"exports\", \"@ember/-internals/utils\"], function (_exports, _utils) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n /*\n This diverges from `Ember.String.dasherize` so that`<XFoo />` can resolve to `x-foo`.\n `Ember.String.dasherize` would resolve it to `xfoo`..\n */\n const SIMPLE_DASHERIZE_REGEXP = /[A-Z]|::/g;\n const ALPHA = /[A-Za-z0-9]/;\n var _default = _exports.default = new _utils.Cache(1000, key => key.replace(SIMPLE_DASHERIZE_REGEXP, (char, index) => {\n if (char === '::') {\n return '/';\n }\n if (index === 0 || !ALPHA.test(key[index - 1])) {\n return char.toLowerCase();\n }\n return \"-\" + char.toLowerCase();\n }));\n});","define(\"ember-template-compiler/lib/system/initializer\", [\"ember-template-compiler/lib/system/bootstrap\", \"@ember/-internals/browser-environment\", \"@ember/-internals/glimmer\", \"@ember/application\"], function (_bootstrap, emberEnv, emberGlimmer, emberApp) {\n \"use strict\";\n\n // Globals mode template compiler\n if (emberApp.default) {\n let Application = emberApp.default;\n let {\n hasTemplate,\n setTemplate\n } = emberGlimmer;\n let {\n hasDOM\n } = emberEnv;\n Application.initializer({\n name: 'domTemplates',\n initialize() {\n if (hasDOM) {\n (0, _bootstrap.default)({\n context: document,\n hasTemplate,\n setTemplate\n });\n }\n }\n });\n }\n});","define(\"ember-template-compiler/lib/system/precompile\", [\"exports\", \"@glimmer/compiler\", \"ember-template-compiler/lib/system/compile-options\"], function (_exports, _compiler, _compileOptions) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = precompile;\n /**\n @module ember\n */\n\n /**\n Uses HTMLBars `compile` function to process a string into a compiled template string.\n The returned string must be passed through `Ember.HTMLBars.template`.\n \n This is not present in production builds.\n \n @private\n @method precompile\n @param {String} templateString This is the string to be compiled by HTMLBars.\n */\n function precompile(templateString, options) {\n if (options === void 0) {\n options = {};\n }\n return (0, _compiler.precompile)(templateString, (0, _compileOptions.default)(options));\n }\n});","define(\"ember-template-compiler/lib/types\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n});","define(\"ember-template-compiler/minimal\", [\"exports\", \"ember-template-compiler/lib/system/precompile\", \"ember-template-compiler/lib/system/compile-options\", \"@glimmer/syntax\"], function (_exports, _precompile, _compileOptions, _syntax) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n Object.defineProperty(_exports, \"_buildCompileOptions\", {\n enumerable: true,\n get: function () {\n return _compileOptions.buildCompileOptions;\n }\n });\n Object.defineProperty(_exports, \"_preprocess\", {\n enumerable: true,\n get: function () {\n return _syntax.preprocess;\n }\n });\n Object.defineProperty(_exports, \"_print\", {\n enumerable: true,\n get: function () {\n return _syntax.print;\n }\n });\n Object.defineProperty(_exports, \"precompile\", {\n enumerable: true,\n get: function () {\n return _precompile.default;\n }\n });\n});","define(\"ember/version\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _default = _exports.default = \"5.9.0-alpha.2\";\n});","define(\"simple-html-tokenizer\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.Tokenizer = _exports.HTML5NamedCharRefs = _exports.EventedTokenizer = _exports.EntityParser = void 0;\n _exports.tokenize = tokenize;\n /**\n * generated from https://raw.githubusercontent.com/w3c/html/26b5126f96f736f796b9e29718138919dd513744/entities.json\n * do not edit\n */\n var namedCharRefs = _exports.HTML5NamedCharRefs = {\n Aacute: \"Á\",\n aacute: \"á\",\n Abreve: \"Ă\",\n abreve: \"ă\",\n ac: \"∾\",\n acd: \"∿\",\n acE: \"∾̳\",\n Acirc: \"Â\",\n acirc: \"â\",\n acute: \"´\",\n Acy: \"А\",\n acy: \"а\",\n AElig: \"Æ\",\n aelig: \"æ\",\n af: \"\\u2061\",\n Afr: \"𝔄\",\n afr: \"𝔞\",\n Agrave: \"À\",\n agrave: \"à\",\n alefsym: \"ℵ\",\n aleph: \"ℵ\",\n Alpha: \"Α\",\n alpha: \"α\",\n Amacr: \"Ā\",\n amacr: \"ā\",\n amalg: \"⨿\",\n amp: \"&\",\n AMP: \"&\",\n andand: \"⩕\",\n And: \"⩓\",\n and: \"∧\",\n andd: \"⩜\",\n andslope: \"⩘\",\n andv: \"⩚\",\n ang: \"∠\",\n ange: \"⦤\",\n angle: \"∠\",\n angmsdaa: \"⦨\",\n angmsdab: \"⦩\",\n angmsdac: \"⦪\",\n angmsdad: \"⦫\",\n angmsdae: \"⦬\",\n angmsdaf: \"⦭\",\n angmsdag: \"⦮\",\n angmsdah: \"⦯\",\n angmsd: \"∡\",\n angrt: \"∟\",\n angrtvb: \"⊾\",\n angrtvbd: \"⦝\",\n angsph: \"∢\",\n angst: \"Å\",\n angzarr: \"⍼\",\n Aogon: \"Ą\",\n aogon: \"ą\",\n Aopf: \"𝔸\",\n aopf: \"𝕒\",\n apacir: \"⩯\",\n ap: \"≈\",\n apE: \"⩰\",\n ape: \"≊\",\n apid: \"≋\",\n apos: \"'\",\n ApplyFunction: \"\\u2061\",\n approx: \"≈\",\n approxeq: \"≊\",\n Aring: \"Å\",\n aring: \"å\",\n Ascr: \"𝒜\",\n ascr: \"𝒶\",\n Assign: \"≔\",\n ast: \"*\",\n asymp: \"≈\",\n asympeq: \"≍\",\n Atilde: \"Ã\",\n atilde: \"ã\",\n Auml: \"Ä\",\n auml: \"ä\",\n awconint: \"∳\",\n awint: \"⨑\",\n backcong: \"≌\",\n backepsilon: \"϶\",\n backprime: \"‵\",\n backsim: \"∽\",\n backsimeq: \"⋍\",\n Backslash: \"∖\",\n Barv: \"⫧\",\n barvee: \"⊽\",\n barwed: \"⌅\",\n Barwed: \"⌆\",\n barwedge: \"⌅\",\n bbrk: \"⎵\",\n bbrktbrk: \"⎶\",\n bcong: \"≌\",\n Bcy: \"Б\",\n bcy: \"б\",\n bdquo: \"„\",\n becaus: \"∵\",\n because: \"∵\",\n Because: \"∵\",\n bemptyv: \"⦰\",\n bepsi: \"϶\",\n bernou: \"ℬ\",\n Bernoullis: \"ℬ\",\n Beta: \"Β\",\n beta: \"β\",\n beth: \"ℶ\",\n between: \"≬\",\n Bfr: \"𝔅\",\n bfr: \"𝔟\",\n bigcap: \"⋂\",\n bigcirc: \"◯\",\n bigcup: \"⋃\",\n bigodot: \"⨀\",\n bigoplus: \"⨁\",\n bigotimes: \"⨂\",\n bigsqcup: \"⨆\",\n bigstar: \"★\",\n bigtriangledown: \"▽\",\n bigtriangleup: \"△\",\n biguplus: \"⨄\",\n bigvee: \"⋁\",\n bigwedge: \"⋀\",\n bkarow: \"⤍\",\n blacklozenge: \"⧫\",\n blacksquare: \"▪\",\n blacktriangle: \"▴\",\n blacktriangledown: \"▾\",\n blacktriangleleft: \"◂\",\n blacktriangleright: \"▸\",\n blank: \"␣\",\n blk12: \"▒\",\n blk14: \"░\",\n blk34: \"▓\",\n block: \"█\",\n bne: \"=⃥\",\n bnequiv: \"≡⃥\",\n bNot: \"⫭\",\n bnot: \"⌐\",\n Bopf: \"𝔹\",\n bopf: \"𝕓\",\n bot: \"⊥\",\n bottom: \"⊥\",\n bowtie: \"⋈\",\n boxbox: \"⧉\",\n boxdl: \"┐\",\n boxdL: \"╕\",\n boxDl: \"╖\",\n boxDL: \"╗\",\n boxdr: \"┌\",\n boxdR: \"╒\",\n boxDr: \"╓\",\n boxDR: \"╔\",\n boxh: \"─\",\n boxH: \"═\",\n boxhd: \"┬\",\n boxHd: \"╤\",\n boxhD: \"╥\",\n boxHD: \"╦\",\n boxhu: \"┴\",\n boxHu: \"╧\",\n boxhU: \"╨\",\n boxHU: \"╩\",\n boxminus: \"⊟\",\n boxplus: \"⊞\",\n boxtimes: \"⊠\",\n boxul: \"┘\",\n boxuL: \"╛\",\n boxUl: \"╜\",\n boxUL: \"╝\",\n boxur: \"└\",\n boxuR: \"╘\",\n boxUr: \"╙\",\n boxUR: \"╚\",\n boxv: \"│\",\n boxV: \"║\",\n boxvh: \"┼\",\n boxvH: \"╪\",\n boxVh: \"╫\",\n boxVH: \"╬\",\n boxvl: \"┤\",\n boxvL: \"╡\",\n boxVl: \"╢\",\n boxVL: \"╣\",\n boxvr: \"├\",\n boxvR: \"╞\",\n boxVr: \"╟\",\n boxVR: \"╠\",\n bprime: \"‵\",\n breve: \"˘\",\n Breve: \"˘\",\n brvbar: \"¦\",\n bscr: \"𝒷\",\n Bscr: \"ℬ\",\n bsemi: \"⁏\",\n bsim: \"∽\",\n bsime: \"⋍\",\n bsolb: \"⧅\",\n bsol: \"\\\\\",\n bsolhsub: \"⟈\",\n bull: \"•\",\n bullet: \"•\",\n bump: \"≎\",\n bumpE: \"⪮\",\n bumpe: \"≏\",\n Bumpeq: \"≎\",\n bumpeq: \"≏\",\n Cacute: \"Ć\",\n cacute: \"ć\",\n capand: \"⩄\",\n capbrcup: \"⩉\",\n capcap: \"⩋\",\n cap: \"∩\",\n Cap: \"⋒\",\n capcup: \"⩇\",\n capdot: \"⩀\",\n CapitalDifferentialD: \"ⅅ\",\n caps: \"∩︀\",\n caret: \"⁁\",\n caron: \"ˇ\",\n Cayleys: \"ℭ\",\n ccaps: \"⩍\",\n Ccaron: \"Č\",\n ccaron: \"č\",\n Ccedil: \"Ç\",\n ccedil: \"ç\",\n Ccirc: \"Ĉ\",\n ccirc: \"ĉ\",\n Cconint: \"∰\",\n ccups: \"⩌\",\n ccupssm: \"⩐\",\n Cdot: \"Ċ\",\n cdot: \"ċ\",\n cedil: \"¸\",\n Cedilla: \"¸\",\n cemptyv: \"⦲\",\n cent: \"¢\",\n centerdot: \"·\",\n CenterDot: \"·\",\n cfr: \"𝔠\",\n Cfr: \"ℭ\",\n CHcy: \"Ч\",\n chcy: \"ч\",\n check: \"✓\",\n checkmark: \"✓\",\n Chi: \"Χ\",\n chi: \"χ\",\n circ: \"ˆ\",\n circeq: \"≗\",\n circlearrowleft: \"↺\",\n circlearrowright: \"↻\",\n circledast: \"⊛\",\n circledcirc: \"⊚\",\n circleddash: \"⊝\",\n CircleDot: \"⊙\",\n circledR: \"®\",\n circledS: \"Ⓢ\",\n CircleMinus: \"⊖\",\n CirclePlus: \"⊕\",\n CircleTimes: \"⊗\",\n cir: \"○\",\n cirE: \"⧃\",\n cire: \"≗\",\n cirfnint: \"⨐\",\n cirmid: \"⫯\",\n cirscir: \"⧂\",\n ClockwiseContourIntegral: \"∲\",\n CloseCurlyDoubleQuote: \"”\",\n CloseCurlyQuote: \"’\",\n clubs: \"♣\",\n clubsuit: \"♣\",\n colon: \":\",\n Colon: \"∷\",\n Colone: \"⩴\",\n colone: \"≔\",\n coloneq: \"≔\",\n comma: \",\",\n commat: \"@\",\n comp: \"∁\",\n compfn: \"∘\",\n complement: \"∁\",\n complexes: \"ℂ\",\n cong: \"≅\",\n congdot: \"⩭\",\n Congruent: \"≡\",\n conint: \"∮\",\n Conint: \"∯\",\n ContourIntegral: \"∮\",\n copf: \"𝕔\",\n Copf: \"ℂ\",\n coprod: \"∐\",\n Coproduct: \"∐\",\n copy: \"©\",\n COPY: \"©\",\n copysr: \"℗\",\n CounterClockwiseContourIntegral: \"∳\",\n crarr: \"↵\",\n cross: \"✗\",\n Cross: \"⨯\",\n Cscr: \"𝒞\",\n cscr: \"𝒸\",\n csub: \"⫏\",\n csube: \"⫑\",\n csup: \"⫐\",\n csupe: \"⫒\",\n ctdot: \"⋯\",\n cudarrl: \"⤸\",\n cudarrr: \"⤵\",\n cuepr: \"⋞\",\n cuesc: \"⋟\",\n cularr: \"↶\",\n cularrp: \"⤽\",\n cupbrcap: \"⩈\",\n cupcap: \"⩆\",\n CupCap: \"≍\",\n cup: \"∪\",\n Cup: \"⋓\",\n cupcup: \"⩊\",\n cupdot: \"⊍\",\n cupor: \"⩅\",\n cups: \"∪︀\",\n curarr: \"↷\",\n curarrm: \"⤼\",\n curlyeqprec: \"⋞\",\n curlyeqsucc: \"⋟\",\n curlyvee: \"⋎\",\n curlywedge: \"⋏\",\n curren: \"¤\",\n curvearrowleft: \"↶\",\n curvearrowright: \"↷\",\n cuvee: \"⋎\",\n cuwed: \"⋏\",\n cwconint: \"∲\",\n cwint: \"∱\",\n cylcty: \"⌭\",\n dagger: \"†\",\n Dagger: \"‡\",\n daleth: \"ℸ\",\n darr: \"↓\",\n Darr: \"↡\",\n dArr: \"⇓\",\n dash: \"‐\",\n Dashv: \"⫤\",\n dashv: \"⊣\",\n dbkarow: \"⤏\",\n dblac: \"˝\",\n Dcaron: \"Ď\",\n dcaron: \"ď\",\n Dcy: \"Д\",\n dcy: \"д\",\n ddagger: \"‡\",\n ddarr: \"⇊\",\n DD: \"ⅅ\",\n dd: \"ⅆ\",\n DDotrahd: \"⤑\",\n ddotseq: \"⩷\",\n deg: \"°\",\n Del: \"∇\",\n Delta: \"Δ\",\n delta: \"δ\",\n demptyv: \"⦱\",\n dfisht: \"⥿\",\n Dfr: \"𝔇\",\n dfr: \"𝔡\",\n dHar: \"⥥\",\n dharl: \"⇃\",\n dharr: \"⇂\",\n DiacriticalAcute: \"´\",\n DiacriticalDot: \"˙\",\n DiacriticalDoubleAcute: \"˝\",\n DiacriticalGrave: \"`\",\n DiacriticalTilde: \"˜\",\n diam: \"⋄\",\n diamond: \"⋄\",\n Diamond: \"⋄\",\n diamondsuit: \"♦\",\n diams: \"♦\",\n die: \"¨\",\n DifferentialD: \"ⅆ\",\n digamma: \"ϝ\",\n disin: \"⋲\",\n div: \"÷\",\n divide: \"÷\",\n divideontimes: \"⋇\",\n divonx: \"⋇\",\n DJcy: \"Ђ\",\n djcy: \"ђ\",\n dlcorn: \"⌞\",\n dlcrop: \"⌍\",\n dollar: \"$\",\n Dopf: \"𝔻\",\n dopf: \"𝕕\",\n Dot: \"¨\",\n dot: \"˙\",\n DotDot: \"⃜\",\n doteq: \"≐\",\n doteqdot: \"≑\",\n DotEqual: \"≐\",\n dotminus: \"∸\",\n dotplus: \"∔\",\n dotsquare: \"⊡\",\n doublebarwedge: \"⌆\",\n DoubleContourIntegral: \"∯\",\n DoubleDot: \"¨\",\n DoubleDownArrow: \"⇓\",\n DoubleLeftArrow: \"⇐\",\n DoubleLeftRightArrow: \"⇔\",\n DoubleLeftTee: \"⫤\",\n DoubleLongLeftArrow: \"⟸\",\n DoubleLongLeftRightArrow: \"⟺\",\n DoubleLongRightArrow: \"⟹\",\n DoubleRightArrow: \"⇒\",\n DoubleRightTee: \"⊨\",\n DoubleUpArrow: \"⇑\",\n DoubleUpDownArrow: \"⇕\",\n DoubleVerticalBar: \"∥\",\n DownArrowBar: \"⤓\",\n downarrow: \"↓\",\n DownArrow: \"↓\",\n Downarrow: \"⇓\",\n DownArrowUpArrow: \"⇵\",\n DownBreve: \"̑\",\n downdownarrows: \"⇊\",\n downharpoonleft: \"⇃\",\n downharpoonright: \"⇂\",\n DownLeftRightVector: \"⥐\",\n DownLeftTeeVector: \"⥞\",\n DownLeftVectorBar: \"⥖\",\n DownLeftVector: \"↽\",\n DownRightTeeVector: \"⥟\",\n DownRightVectorBar: \"⥗\",\n DownRightVector: \"⇁\",\n DownTeeArrow: \"↧\",\n DownTee: \"⊤\",\n drbkarow: \"⤐\",\n drcorn: \"⌟\",\n drcrop: \"⌌\",\n Dscr: \"𝒟\",\n dscr: \"𝒹\",\n DScy: \"Ѕ\",\n dscy: \"ѕ\",\n dsol: \"⧶\",\n Dstrok: \"Đ\",\n dstrok: \"đ\",\n dtdot: \"⋱\",\n dtri: \"▿\",\n dtrif: \"▾\",\n duarr: \"⇵\",\n duhar: \"⥯\",\n dwangle: \"⦦\",\n DZcy: \"Џ\",\n dzcy: \"џ\",\n dzigrarr: \"⟿\",\n Eacute: \"É\",\n eacute: \"é\",\n easter: \"⩮\",\n Ecaron: \"Ě\",\n ecaron: \"ě\",\n Ecirc: \"Ê\",\n ecirc: \"ê\",\n ecir: \"≖\",\n ecolon: \"≕\",\n Ecy: \"Э\",\n ecy: \"э\",\n eDDot: \"⩷\",\n Edot: \"Ė\",\n edot: \"ė\",\n eDot: \"≑\",\n ee: \"ⅇ\",\n efDot: \"≒\",\n Efr: \"𝔈\",\n efr: \"𝔢\",\n eg: \"⪚\",\n Egrave: \"È\",\n egrave: \"è\",\n egs: \"⪖\",\n egsdot: \"⪘\",\n el: \"⪙\",\n Element: \"∈\",\n elinters: \"⏧\",\n ell: \"ℓ\",\n els: \"⪕\",\n elsdot: \"⪗\",\n Emacr: \"Ē\",\n emacr: \"ē\",\n empty: \"∅\",\n emptyset: \"∅\",\n EmptySmallSquare: \"◻\",\n emptyv: \"∅\",\n EmptyVerySmallSquare: \"▫\",\n emsp13: \" \",\n emsp14: \" \",\n emsp: \" \",\n ENG: \"Ŋ\",\n eng: \"ŋ\",\n ensp: \" \",\n Eogon: \"Ę\",\n eogon: \"ę\",\n Eopf: \"𝔼\",\n eopf: \"𝕖\",\n epar: \"⋕\",\n eparsl: \"⧣\",\n eplus: \"⩱\",\n epsi: \"ε\",\n Epsilon: \"Ε\",\n epsilon: \"ε\",\n epsiv: \"ϵ\",\n eqcirc: \"≖\",\n eqcolon: \"≕\",\n eqsim: \"≂\",\n eqslantgtr: \"⪖\",\n eqslantless: \"⪕\",\n Equal: \"⩵\",\n equals: \"=\",\n EqualTilde: \"≂\",\n equest: \"≟\",\n Equilibrium: \"⇌\",\n equiv: \"≡\",\n equivDD: \"⩸\",\n eqvparsl: \"⧥\",\n erarr: \"⥱\",\n erDot: \"≓\",\n escr: \"ℯ\",\n Escr: \"ℰ\",\n esdot: \"≐\",\n Esim: \"⩳\",\n esim: \"≂\",\n Eta: \"Η\",\n eta: \"η\",\n ETH: \"Ð\",\n eth: \"ð\",\n Euml: \"Ë\",\n euml: \"ë\",\n euro: \"€\",\n excl: \"!\",\n exist: \"∃\",\n Exists: \"∃\",\n expectation: \"ℰ\",\n exponentiale: \"ⅇ\",\n ExponentialE: \"ⅇ\",\n fallingdotseq: \"≒\",\n Fcy: \"Ф\",\n fcy: \"ф\",\n female: \"♀\",\n ffilig: \"ffi\",\n fflig: \"ff\",\n ffllig: \"ffl\",\n Ffr: \"𝔉\",\n ffr: \"𝔣\",\n filig: \"fi\",\n FilledSmallSquare: \"◼\",\n FilledVerySmallSquare: \"▪\",\n fjlig: \"fj\",\n flat: \"♭\",\n fllig: \"fl\",\n fltns: \"▱\",\n fnof: \"ƒ\",\n Fopf: \"𝔽\",\n fopf: \"𝕗\",\n forall: \"∀\",\n ForAll: \"∀\",\n fork: \"⋔\",\n forkv: \"⫙\",\n Fouriertrf: \"ℱ\",\n fpartint: \"⨍\",\n frac12: \"½\",\n frac13: \"⅓\",\n frac14: \"¼\",\n frac15: \"⅕\",\n frac16: \"⅙\",\n frac18: \"⅛\",\n frac23: \"⅔\",\n frac25: \"⅖\",\n frac34: \"¾\",\n frac35: \"⅗\",\n frac38: \"⅜\",\n frac45: \"⅘\",\n frac56: \"⅚\",\n frac58: \"⅝\",\n frac78: \"⅞\",\n frasl: \"⁄\",\n frown: \"⌢\",\n fscr: \"𝒻\",\n Fscr: \"ℱ\",\n gacute: \"ǵ\",\n Gamma: \"Γ\",\n gamma: \"γ\",\n Gammad: \"Ϝ\",\n gammad: \"ϝ\",\n gap: \"⪆\",\n Gbreve: \"Ğ\",\n gbreve: \"ğ\",\n Gcedil: \"Ģ\",\n Gcirc: \"Ĝ\",\n gcirc: \"ĝ\",\n Gcy: \"Г\",\n gcy: \"г\",\n Gdot: \"Ġ\",\n gdot: \"ġ\",\n ge: \"≥\",\n gE: \"≧\",\n gEl: \"⪌\",\n gel: \"⋛\",\n geq: \"≥\",\n geqq: \"≧\",\n geqslant: \"⩾\",\n gescc: \"⪩\",\n ges: \"⩾\",\n gesdot: \"⪀\",\n gesdoto: \"⪂\",\n gesdotol: \"⪄\",\n gesl: \"⋛︀\",\n gesles: \"⪔\",\n Gfr: \"𝔊\",\n gfr: \"𝔤\",\n gg: \"≫\",\n Gg: \"⋙\",\n ggg: \"⋙\",\n gimel: \"ℷ\",\n GJcy: \"Ѓ\",\n gjcy: \"ѓ\",\n gla: \"⪥\",\n gl: \"≷\",\n glE: \"⪒\",\n glj: \"⪤\",\n gnap: \"⪊\",\n gnapprox: \"⪊\",\n gne: \"⪈\",\n gnE: \"≩\",\n gneq: \"⪈\",\n gneqq: \"≩\",\n gnsim: \"⋧\",\n Gopf: \"𝔾\",\n gopf: \"𝕘\",\n grave: \"`\",\n GreaterEqual: \"≥\",\n GreaterEqualLess: \"⋛\",\n GreaterFullEqual: \"≧\",\n GreaterGreater: \"⪢\",\n GreaterLess: \"≷\",\n GreaterSlantEqual: \"⩾\",\n GreaterTilde: \"≳\",\n Gscr: \"𝒢\",\n gscr: \"ℊ\",\n gsim: \"≳\",\n gsime: \"⪎\",\n gsiml: \"⪐\",\n gtcc: \"⪧\",\n gtcir: \"⩺\",\n gt: \">\",\n GT: \">\",\n Gt: \"≫\",\n gtdot: \"⋗\",\n gtlPar: \"⦕\",\n gtquest: \"⩼\",\n gtrapprox: \"⪆\",\n gtrarr: \"⥸\",\n gtrdot: \"⋗\",\n gtreqless: \"⋛\",\n gtreqqless: \"⪌\",\n gtrless: \"≷\",\n gtrsim: \"≳\",\n gvertneqq: \"≩︀\",\n gvnE: \"≩︀\",\n Hacek: \"ˇ\",\n hairsp: \" \",\n half: \"½\",\n hamilt: \"ℋ\",\n HARDcy: \"Ъ\",\n hardcy: \"ъ\",\n harrcir: \"⥈\",\n harr: \"↔\",\n hArr: \"⇔\",\n harrw: \"↭\",\n Hat: \"^\",\n hbar: \"ℏ\",\n Hcirc: \"Ĥ\",\n hcirc: \"ĥ\",\n hearts: \"♥\",\n heartsuit: \"♥\",\n hellip: \"…\",\n hercon: \"⊹\",\n hfr: \"𝔥\",\n Hfr: \"ℌ\",\n HilbertSpace: \"ℋ\",\n hksearow: \"⤥\",\n hkswarow: \"⤦\",\n hoarr: \"⇿\",\n homtht: \"∻\",\n hookleftarrow: \"↩\",\n hookrightarrow: \"↪\",\n hopf: \"𝕙\",\n Hopf: \"ℍ\",\n horbar: \"―\",\n HorizontalLine: \"─\",\n hscr: \"𝒽\",\n Hscr: \"ℋ\",\n hslash: \"ℏ\",\n Hstrok: \"Ħ\",\n hstrok: \"ħ\",\n HumpDownHump: \"≎\",\n HumpEqual: \"≏\",\n hybull: \"⁃\",\n hyphen: \"‐\",\n Iacute: \"Í\",\n iacute: \"í\",\n ic: \"\\u2063\",\n Icirc: \"Î\",\n icirc: \"î\",\n Icy: \"И\",\n icy: \"и\",\n Idot: \"İ\",\n IEcy: \"Е\",\n iecy: \"е\",\n iexcl: \"¡\",\n iff: \"⇔\",\n ifr: \"𝔦\",\n Ifr: \"ℑ\",\n Igrave: \"Ì\",\n igrave: \"ì\",\n ii: \"ⅈ\",\n iiiint: \"⨌\",\n iiint: \"∭\",\n iinfin: \"⧜\",\n iiota: \"℩\",\n IJlig: \"IJ\",\n ijlig: \"ij\",\n Imacr: \"Ī\",\n imacr: \"ī\",\n image: \"ℑ\",\n ImaginaryI: \"ⅈ\",\n imagline: \"ℐ\",\n imagpart: \"ℑ\",\n imath: \"ı\",\n Im: \"ℑ\",\n imof: \"⊷\",\n imped: \"Ƶ\",\n Implies: \"⇒\",\n incare: \"℅\",\n in: \"∈\",\n infin: \"∞\",\n infintie: \"⧝\",\n inodot: \"ı\",\n intcal: \"⊺\",\n int: \"∫\",\n Int: \"∬\",\n integers: \"ℤ\",\n Integral: \"∫\",\n intercal: \"⊺\",\n Intersection: \"⋂\",\n intlarhk: \"⨗\",\n intprod: \"⨼\",\n InvisibleComma: \"\\u2063\",\n InvisibleTimes: \"\\u2062\",\n IOcy: \"Ё\",\n iocy: \"ё\",\n Iogon: \"Į\",\n iogon: \"į\",\n Iopf: \"𝕀\",\n iopf: \"𝕚\",\n Iota: \"Ι\",\n iota: \"ι\",\n iprod: \"⨼\",\n iquest: \"¿\",\n iscr: \"𝒾\",\n Iscr: \"ℐ\",\n isin: \"∈\",\n isindot: \"⋵\",\n isinE: \"⋹\",\n isins: \"⋴\",\n isinsv: \"⋳\",\n isinv: \"∈\",\n it: \"\\u2062\",\n Itilde: \"Ĩ\",\n itilde: \"ĩ\",\n Iukcy: \"І\",\n iukcy: \"і\",\n Iuml: \"Ï\",\n iuml: \"ï\",\n Jcirc: \"Ĵ\",\n jcirc: \"ĵ\",\n Jcy: \"Й\",\n jcy: \"й\",\n Jfr: \"𝔍\",\n jfr: \"𝔧\",\n jmath: \"ȷ\",\n Jopf: \"𝕁\",\n jopf: \"𝕛\",\n Jscr: \"𝒥\",\n jscr: \"𝒿\",\n Jsercy: \"Ј\",\n jsercy: \"ј\",\n Jukcy: \"Є\",\n jukcy: \"є\",\n Kappa: \"Κ\",\n kappa: \"κ\",\n kappav: \"ϰ\",\n Kcedil: \"Ķ\",\n kcedil: \"ķ\",\n Kcy: \"К\",\n kcy: \"к\",\n Kfr: \"𝔎\",\n kfr: \"𝔨\",\n kgreen: \"ĸ\",\n KHcy: \"Х\",\n khcy: \"х\",\n KJcy: \"Ќ\",\n kjcy: \"ќ\",\n Kopf: \"𝕂\",\n kopf: \"𝕜\",\n Kscr: \"𝒦\",\n kscr: \"𝓀\",\n lAarr: \"⇚\",\n Lacute: \"Ĺ\",\n lacute: \"ĺ\",\n laemptyv: \"⦴\",\n lagran: \"ℒ\",\n Lambda: \"Λ\",\n lambda: \"λ\",\n lang: \"⟨\",\n Lang: \"⟪\",\n langd: \"⦑\",\n langle: \"⟨\",\n lap: \"⪅\",\n Laplacetrf: \"ℒ\",\n laquo: \"«\",\n larrb: \"⇤\",\n larrbfs: \"⤟\",\n larr: \"←\",\n Larr: \"↞\",\n lArr: \"⇐\",\n larrfs: \"⤝\",\n larrhk: \"↩\",\n larrlp: \"↫\",\n larrpl: \"⤹\",\n larrsim: \"⥳\",\n larrtl: \"↢\",\n latail: \"⤙\",\n lAtail: \"⤛\",\n lat: \"⪫\",\n late: \"⪭\",\n lates: \"⪭︀\",\n lbarr: \"⤌\",\n lBarr: \"⤎\",\n lbbrk: \"❲\",\n lbrace: \"{\",\n lbrack: \"[\",\n lbrke: \"⦋\",\n lbrksld: \"⦏\",\n lbrkslu: \"⦍\",\n Lcaron: \"Ľ\",\n lcaron: \"ľ\",\n Lcedil: \"Ļ\",\n lcedil: \"ļ\",\n lceil: \"⌈\",\n lcub: \"{\",\n Lcy: \"Л\",\n lcy: \"л\",\n ldca: \"⤶\",\n ldquo: \"“\",\n ldquor: \"„\",\n ldrdhar: \"⥧\",\n ldrushar: \"⥋\",\n ldsh: \"↲\",\n le: \"≤\",\n lE: \"≦\",\n LeftAngleBracket: \"⟨\",\n LeftArrowBar: \"⇤\",\n leftarrow: \"←\",\n LeftArrow: \"←\",\n Leftarrow: \"⇐\",\n LeftArrowRightArrow: \"⇆\",\n leftarrowtail: \"↢\",\n LeftCeiling: \"⌈\",\n LeftDoubleBracket: \"⟦\",\n LeftDownTeeVector: \"⥡\",\n LeftDownVectorBar: \"⥙\",\n LeftDownVector: \"⇃\",\n LeftFloor: \"⌊\",\n leftharpoondown: \"↽\",\n leftharpoonup: \"↼\",\n leftleftarrows: \"⇇\",\n leftrightarrow: \"↔\",\n LeftRightArrow: \"↔\",\n Leftrightarrow: \"⇔\",\n leftrightarrows: \"⇆\",\n leftrightharpoons: \"⇋\",\n leftrightsquigarrow: \"↭\",\n LeftRightVector: \"⥎\",\n LeftTeeArrow: \"↤\",\n LeftTee: \"⊣\",\n LeftTeeVector: \"⥚\",\n leftthreetimes: \"⋋\",\n LeftTriangleBar: \"⧏\",\n LeftTriangle: \"⊲\",\n LeftTriangleEqual: \"⊴\",\n LeftUpDownVector: \"⥑\",\n LeftUpTeeVector: \"⥠\",\n LeftUpVectorBar: \"⥘\",\n LeftUpVector: \"↿\",\n LeftVectorBar: \"⥒\",\n LeftVector: \"↼\",\n lEg: \"⪋\",\n leg: \"⋚\",\n leq: \"≤\",\n leqq: \"≦\",\n leqslant: \"⩽\",\n lescc: \"⪨\",\n les: \"⩽\",\n lesdot: \"⩿\",\n lesdoto: \"⪁\",\n lesdotor: \"⪃\",\n lesg: \"⋚︀\",\n lesges: \"⪓\",\n lessapprox: \"⪅\",\n lessdot: \"⋖\",\n lesseqgtr: \"⋚\",\n lesseqqgtr: \"⪋\",\n LessEqualGreater: \"⋚\",\n LessFullEqual: \"≦\",\n LessGreater: \"≶\",\n lessgtr: \"≶\",\n LessLess: \"⪡\",\n lesssim: \"≲\",\n LessSlantEqual: \"⩽\",\n LessTilde: \"≲\",\n lfisht: \"⥼\",\n lfloor: \"⌊\",\n Lfr: \"𝔏\",\n lfr: \"𝔩\",\n lg: \"≶\",\n lgE: \"⪑\",\n lHar: \"⥢\",\n lhard: \"↽\",\n lharu: \"↼\",\n lharul: \"⥪\",\n lhblk: \"▄\",\n LJcy: \"Љ\",\n ljcy: \"љ\",\n llarr: \"⇇\",\n ll: \"≪\",\n Ll: \"⋘\",\n llcorner: \"⌞\",\n Lleftarrow: \"⇚\",\n llhard: \"⥫\",\n lltri: \"◺\",\n Lmidot: \"Ŀ\",\n lmidot: \"ŀ\",\n lmoustache: \"⎰\",\n lmoust: \"⎰\",\n lnap: \"⪉\",\n lnapprox: \"⪉\",\n lne: \"⪇\",\n lnE: \"≨\",\n lneq: \"⪇\",\n lneqq: \"≨\",\n lnsim: \"⋦\",\n loang: \"⟬\",\n loarr: \"⇽\",\n lobrk: \"⟦\",\n longleftarrow: \"⟵\",\n LongLeftArrow: \"⟵\",\n Longleftarrow: \"⟸\",\n longleftrightarrow: \"⟷\",\n LongLeftRightArrow: \"⟷\",\n Longleftrightarrow: \"⟺\",\n longmapsto: \"⟼\",\n longrightarrow: \"⟶\",\n LongRightArrow: \"⟶\",\n Longrightarrow: \"⟹\",\n looparrowleft: \"↫\",\n looparrowright: \"↬\",\n lopar: \"⦅\",\n Lopf: \"𝕃\",\n lopf: \"𝕝\",\n loplus: \"⨭\",\n lotimes: \"⨴\",\n lowast: \"∗\",\n lowbar: \"_\",\n LowerLeftArrow: \"↙\",\n LowerRightArrow: \"↘\",\n loz: \"◊\",\n lozenge: \"◊\",\n lozf: \"⧫\",\n lpar: \"(\",\n lparlt: \"⦓\",\n lrarr: \"⇆\",\n lrcorner: \"⌟\",\n lrhar: \"⇋\",\n lrhard: \"⥭\",\n lrm: \"\\u200e\",\n lrtri: \"⊿\",\n lsaquo: \"‹\",\n lscr: \"𝓁\",\n Lscr: \"ℒ\",\n lsh: \"↰\",\n Lsh: \"↰\",\n lsim: \"≲\",\n lsime: \"⪍\",\n lsimg: \"⪏\",\n lsqb: \"[\",\n lsquo: \"‘\",\n lsquor: \"‚\",\n Lstrok: \"Ł\",\n lstrok: \"ł\",\n ltcc: \"⪦\",\n ltcir: \"⩹\",\n lt: \"<\",\n LT: \"<\",\n Lt: \"≪\",\n ltdot: \"⋖\",\n lthree: \"⋋\",\n ltimes: \"⋉\",\n ltlarr: \"⥶\",\n ltquest: \"⩻\",\n ltri: \"◃\",\n ltrie: \"⊴\",\n ltrif: \"◂\",\n ltrPar: \"⦖\",\n lurdshar: \"⥊\",\n luruhar: \"⥦\",\n lvertneqq: \"≨︀\",\n lvnE: \"≨︀\",\n macr: \"¯\",\n male: \"♂\",\n malt: \"✠\",\n maltese: \"✠\",\n Map: \"⤅\",\n map: \"↦\",\n mapsto: \"↦\",\n mapstodown: \"↧\",\n mapstoleft: \"↤\",\n mapstoup: \"↥\",\n marker: \"▮\",\n mcomma: \"⨩\",\n Mcy: \"М\",\n mcy: \"м\",\n mdash: \"—\",\n mDDot: \"∺\",\n measuredangle: \"∡\",\n MediumSpace: \" \",\n Mellintrf: \"ℳ\",\n Mfr: \"𝔐\",\n mfr: \"𝔪\",\n mho: \"℧\",\n micro: \"µ\",\n midast: \"*\",\n midcir: \"⫰\",\n mid: \"∣\",\n middot: \"·\",\n minusb: \"⊟\",\n minus: \"−\",\n minusd: \"∸\",\n minusdu: \"⨪\",\n MinusPlus: \"∓\",\n mlcp: \"⫛\",\n mldr: \"…\",\n mnplus: \"∓\",\n models: \"⊧\",\n Mopf: \"𝕄\",\n mopf: \"𝕞\",\n mp: \"∓\",\n mscr: \"𝓂\",\n Mscr: \"ℳ\",\n mstpos: \"∾\",\n Mu: \"Μ\",\n mu: \"μ\",\n multimap: \"⊸\",\n mumap: \"⊸\",\n nabla: \"∇\",\n Nacute: \"Ń\",\n nacute: \"ń\",\n nang: \"∠⃒\",\n nap: \"≉\",\n napE: \"⩰̸\",\n napid: \"≋̸\",\n napos: \"ʼn\",\n napprox: \"≉\",\n natural: \"♮\",\n naturals: \"ℕ\",\n natur: \"♮\",\n nbsp: \" \",\n nbump: \"≎̸\",\n nbumpe: \"≏̸\",\n ncap: \"⩃\",\n Ncaron: \"Ň\",\n ncaron: \"ň\",\n Ncedil: \"Ņ\",\n ncedil: \"ņ\",\n ncong: \"≇\",\n ncongdot: \"⩭̸\",\n ncup: \"⩂\",\n Ncy: \"Н\",\n ncy: \"н\",\n ndash: \"–\",\n nearhk: \"⤤\",\n nearr: \"↗\",\n neArr: \"⇗\",\n nearrow: \"↗\",\n ne: \"≠\",\n nedot: \"≐̸\",\n NegativeMediumSpace: \"\",\n NegativeThickSpace: \"\",\n NegativeThinSpace: \"\",\n NegativeVeryThinSpace: \"\",\n nequiv: \"≢\",\n nesear: \"⤨\",\n nesim: \"≂̸\",\n NestedGreaterGreater: \"≫\",\n NestedLessLess: \"≪\",\n NewLine: \"\\u000a\",\n nexist: \"∄\",\n nexists: \"∄\",\n Nfr: \"𝔑\",\n nfr: \"𝔫\",\n ngE: \"≧̸\",\n nge: \"≱\",\n ngeq: \"≱\",\n ngeqq: \"≧̸\",\n ngeqslant: \"⩾̸\",\n nges: \"⩾̸\",\n nGg: \"⋙̸\",\n ngsim: \"≵\",\n nGt: \"≫⃒\",\n ngt: \"≯\",\n ngtr: \"≯\",\n nGtv: \"≫̸\",\n nharr: \"↮\",\n nhArr: \"⇎\",\n nhpar: \"⫲\",\n ni: \"∋\",\n nis: \"⋼\",\n nisd: \"⋺\",\n niv: \"∋\",\n NJcy: \"Њ\",\n njcy: \"њ\",\n nlarr: \"↚\",\n nlArr: \"⇍\",\n nldr: \"‥\",\n nlE: \"≦̸\",\n nle: \"≰\",\n nleftarrow: \"↚\",\n nLeftarrow: \"⇍\",\n nleftrightarrow: \"↮\",\n nLeftrightarrow: \"⇎\",\n nleq: \"≰\",\n nleqq: \"≦̸\",\n nleqslant: \"⩽̸\",\n nles: \"⩽̸\",\n nless: \"≮\",\n nLl: \"⋘̸\",\n nlsim: \"≴\",\n nLt: \"≪⃒\",\n nlt: \"≮\",\n nltri: \"⋪\",\n nltrie: \"⋬\",\n nLtv: \"≪̸\",\n nmid: \"∤\",\n NoBreak: \"\\u2060\",\n NonBreakingSpace: \" \",\n nopf: \"𝕟\",\n Nopf: \"ℕ\",\n Not: \"⫬\",\n not: \"¬\",\n NotCongruent: \"≢\",\n NotCupCap: \"≭\",\n NotDoubleVerticalBar: \"∦\",\n NotElement: \"∉\",\n NotEqual: \"≠\",\n NotEqualTilde: \"≂̸\",\n NotExists: \"∄\",\n NotGreater: \"≯\",\n NotGreaterEqual: \"≱\",\n NotGreaterFullEqual: \"≧̸\",\n NotGreaterGreater: \"≫̸\",\n NotGreaterLess: \"≹\",\n NotGreaterSlantEqual: \"⩾̸\",\n NotGreaterTilde: \"≵\",\n NotHumpDownHump: \"≎̸\",\n NotHumpEqual: \"≏̸\",\n notin: \"∉\",\n notindot: \"⋵̸\",\n notinE: \"⋹̸\",\n notinva: \"∉\",\n notinvb: \"⋷\",\n notinvc: \"⋶\",\n NotLeftTriangleBar: \"⧏̸\",\n NotLeftTriangle: \"⋪\",\n NotLeftTriangleEqual: \"⋬\",\n NotLess: \"≮\",\n NotLessEqual: \"≰\",\n NotLessGreater: \"≸\",\n NotLessLess: \"≪̸\",\n NotLessSlantEqual: \"⩽̸\",\n NotLessTilde: \"≴\",\n NotNestedGreaterGreater: \"⪢̸\",\n NotNestedLessLess: \"⪡̸\",\n notni: \"∌\",\n notniva: \"∌\",\n notnivb: \"⋾\",\n notnivc: \"⋽\",\n NotPrecedes: \"⊀\",\n NotPrecedesEqual: \"⪯̸\",\n NotPrecedesSlantEqual: \"⋠\",\n NotReverseElement: \"∌\",\n NotRightTriangleBar: \"⧐̸\",\n NotRightTriangle: \"⋫\",\n NotRightTriangleEqual: \"⋭\",\n NotSquareSubset: \"⊏̸\",\n NotSquareSubsetEqual: \"⋢\",\n NotSquareSuperset: \"⊐̸\",\n NotSquareSupersetEqual: \"⋣\",\n NotSubset: \"⊂⃒\",\n NotSubsetEqual: \"⊈\",\n NotSucceeds: \"⊁\",\n NotSucceedsEqual: \"⪰̸\",\n NotSucceedsSlantEqual: \"⋡\",\n NotSucceedsTilde: \"≿̸\",\n NotSuperset: \"⊃⃒\",\n NotSupersetEqual: \"⊉\",\n NotTilde: \"≁\",\n NotTildeEqual: \"≄\",\n NotTildeFullEqual: \"≇\",\n NotTildeTilde: \"≉\",\n NotVerticalBar: \"∤\",\n nparallel: \"∦\",\n npar: \"∦\",\n nparsl: \"⫽⃥\",\n npart: \"∂̸\",\n npolint: \"⨔\",\n npr: \"⊀\",\n nprcue: \"⋠\",\n nprec: \"⊀\",\n npreceq: \"⪯̸\",\n npre: \"⪯̸\",\n nrarrc: \"⤳̸\",\n nrarr: \"↛\",\n nrArr: \"⇏\",\n nrarrw: \"↝̸\",\n nrightarrow: \"↛\",\n nRightarrow: \"⇏\",\n nrtri: \"⋫\",\n nrtrie: \"⋭\",\n nsc: \"⊁\",\n nsccue: \"⋡\",\n nsce: \"⪰̸\",\n Nscr: \"𝒩\",\n nscr: \"𝓃\",\n nshortmid: \"∤\",\n nshortparallel: \"∦\",\n nsim: \"≁\",\n nsime: \"≄\",\n nsimeq: \"≄\",\n nsmid: \"∤\",\n nspar: \"∦\",\n nsqsube: \"⋢\",\n nsqsupe: \"⋣\",\n nsub: \"⊄\",\n nsubE: \"⫅̸\",\n nsube: \"⊈\",\n nsubset: \"⊂⃒\",\n nsubseteq: \"⊈\",\n nsubseteqq: \"⫅̸\",\n nsucc: \"⊁\",\n nsucceq: \"⪰̸\",\n nsup: \"⊅\",\n nsupE: \"⫆̸\",\n nsupe: \"⊉\",\n nsupset: \"⊃⃒\",\n nsupseteq: \"⊉\",\n nsupseteqq: \"⫆̸\",\n ntgl: \"≹\",\n Ntilde: \"Ñ\",\n ntilde: \"ñ\",\n ntlg: \"≸\",\n ntriangleleft: \"⋪\",\n ntrianglelefteq: \"⋬\",\n ntriangleright: \"⋫\",\n ntrianglerighteq: \"⋭\",\n Nu: \"Ν\",\n nu: \"ν\",\n num: \"#\",\n numero: \"№\",\n numsp: \" \",\n nvap: \"≍⃒\",\n nvdash: \"⊬\",\n nvDash: \"⊭\",\n nVdash: \"⊮\",\n nVDash: \"⊯\",\n nvge: \"≥⃒\",\n nvgt: \">⃒\",\n nvHarr: \"⤄\",\n nvinfin: \"⧞\",\n nvlArr: \"⤂\",\n nvle: \"≤⃒\",\n nvlt: \"<⃒\",\n nvltrie: \"⊴⃒\",\n nvrArr: \"⤃\",\n nvrtrie: \"⊵⃒\",\n nvsim: \"∼⃒\",\n nwarhk: \"⤣\",\n nwarr: \"↖\",\n nwArr: \"⇖\",\n nwarrow: \"↖\",\n nwnear: \"⤧\",\n Oacute: \"Ó\",\n oacute: \"ó\",\n oast: \"⊛\",\n Ocirc: \"Ô\",\n ocirc: \"ô\",\n ocir: \"⊚\",\n Ocy: \"О\",\n ocy: \"о\",\n odash: \"⊝\",\n Odblac: \"Ő\",\n odblac: \"ő\",\n odiv: \"⨸\",\n odot: \"⊙\",\n odsold: \"⦼\",\n OElig: \"Œ\",\n oelig: \"œ\",\n ofcir: \"⦿\",\n Ofr: \"𝔒\",\n ofr: \"𝔬\",\n ogon: \"˛\",\n Ograve: \"Ò\",\n ograve: \"ò\",\n ogt: \"⧁\",\n ohbar: \"⦵\",\n ohm: \"Ω\",\n oint: \"∮\",\n olarr: \"↺\",\n olcir: \"⦾\",\n olcross: \"⦻\",\n oline: \"‾\",\n olt: \"⧀\",\n Omacr: \"Ō\",\n omacr: \"ō\",\n Omega: \"Ω\",\n omega: \"ω\",\n Omicron: \"Ο\",\n omicron: \"ο\",\n omid: \"⦶\",\n ominus: \"⊖\",\n Oopf: \"𝕆\",\n oopf: \"𝕠\",\n opar: \"⦷\",\n OpenCurlyDoubleQuote: \"“\",\n OpenCurlyQuote: \"‘\",\n operp: \"⦹\",\n oplus: \"⊕\",\n orarr: \"↻\",\n Or: \"⩔\",\n or: \"∨\",\n ord: \"⩝\",\n order: \"ℴ\",\n orderof: \"ℴ\",\n ordf: \"ª\",\n ordm: \"º\",\n origof: \"⊶\",\n oror: \"⩖\",\n orslope: \"⩗\",\n orv: \"⩛\",\n oS: \"Ⓢ\",\n Oscr: \"𝒪\",\n oscr: \"ℴ\",\n Oslash: \"Ø\",\n oslash: \"ø\",\n osol: \"⊘\",\n Otilde: \"Õ\",\n otilde: \"õ\",\n otimesas: \"⨶\",\n Otimes: \"⨷\",\n otimes: \"⊗\",\n Ouml: \"Ö\",\n ouml: \"ö\",\n ovbar: \"⌽\",\n OverBar: \"‾\",\n OverBrace: \"⏞\",\n OverBracket: \"⎴\",\n OverParenthesis: \"⏜\",\n para: \"¶\",\n parallel: \"∥\",\n par: \"∥\",\n parsim: \"⫳\",\n parsl: \"⫽\",\n part: \"∂\",\n PartialD: \"∂\",\n Pcy: \"П\",\n pcy: \"п\",\n percnt: \"%\",\n period: \".\",\n permil: \"‰\",\n perp: \"⊥\",\n pertenk: \"‱\",\n Pfr: \"𝔓\",\n pfr: \"𝔭\",\n Phi: \"Φ\",\n phi: \"φ\",\n phiv: \"ϕ\",\n phmmat: \"ℳ\",\n phone: \"☎\",\n Pi: \"Π\",\n pi: \"π\",\n pitchfork: \"⋔\",\n piv: \"ϖ\",\n planck: \"ℏ\",\n planckh: \"ℎ\",\n plankv: \"ℏ\",\n plusacir: \"⨣\",\n plusb: \"⊞\",\n pluscir: \"⨢\",\n plus: \"+\",\n plusdo: \"∔\",\n plusdu: \"⨥\",\n pluse: \"⩲\",\n PlusMinus: \"±\",\n plusmn: \"±\",\n plussim: \"⨦\",\n plustwo: \"⨧\",\n pm: \"±\",\n Poincareplane: \"ℌ\",\n pointint: \"⨕\",\n popf: \"𝕡\",\n Popf: \"ℙ\",\n pound: \"£\",\n prap: \"⪷\",\n Pr: \"⪻\",\n pr: \"≺\",\n prcue: \"≼\",\n precapprox: \"⪷\",\n prec: \"≺\",\n preccurlyeq: \"≼\",\n Precedes: \"≺\",\n PrecedesEqual: \"⪯\",\n PrecedesSlantEqual: \"≼\",\n PrecedesTilde: \"≾\",\n preceq: \"⪯\",\n precnapprox: \"⪹\",\n precneqq: \"⪵\",\n precnsim: \"⋨\",\n pre: \"⪯\",\n prE: \"⪳\",\n precsim: \"≾\",\n prime: \"′\",\n Prime: \"″\",\n primes: \"ℙ\",\n prnap: \"⪹\",\n prnE: \"⪵\",\n prnsim: \"⋨\",\n prod: \"∏\",\n Product: \"∏\",\n profalar: \"⌮\",\n profline: \"⌒\",\n profsurf: \"⌓\",\n prop: \"∝\",\n Proportional: \"∝\",\n Proportion: \"∷\",\n propto: \"∝\",\n prsim: \"≾\",\n prurel: \"⊰\",\n Pscr: \"𝒫\",\n pscr: \"𝓅\",\n Psi: \"Ψ\",\n psi: \"ψ\",\n puncsp: \" \",\n Qfr: \"𝔔\",\n qfr: \"𝔮\",\n qint: \"⨌\",\n qopf: \"𝕢\",\n Qopf: \"ℚ\",\n qprime: \"⁗\",\n Qscr: \"𝒬\",\n qscr: \"𝓆\",\n quaternions: \"ℍ\",\n quatint: \"⨖\",\n quest: \"?\",\n questeq: \"≟\",\n quot: \"\\\"\",\n QUOT: \"\\\"\",\n rAarr: \"⇛\",\n race: \"∽̱\",\n Racute: \"Ŕ\",\n racute: \"ŕ\",\n radic: \"√\",\n raemptyv: \"⦳\",\n rang: \"⟩\",\n Rang: \"⟫\",\n rangd: \"⦒\",\n range: \"⦥\",\n rangle: \"⟩\",\n raquo: \"»\",\n rarrap: \"⥵\",\n rarrb: \"⇥\",\n rarrbfs: \"⤠\",\n rarrc: \"⤳\",\n rarr: \"→\",\n Rarr: \"↠\",\n rArr: \"⇒\",\n rarrfs: \"⤞\",\n rarrhk: \"↪\",\n rarrlp: \"↬\",\n rarrpl: \"⥅\",\n rarrsim: \"⥴\",\n Rarrtl: \"⤖\",\n rarrtl: \"↣\",\n rarrw: \"↝\",\n ratail: \"⤚\",\n rAtail: \"⤜\",\n ratio: \"∶\",\n rationals: \"ℚ\",\n rbarr: \"⤍\",\n rBarr: \"⤏\",\n RBarr: \"⤐\",\n rbbrk: \"❳\",\n rbrace: \"}\",\n rbrack: \"]\",\n rbrke: \"⦌\",\n rbrksld: \"⦎\",\n rbrkslu: \"⦐\",\n Rcaron: \"Ř\",\n rcaron: \"ř\",\n Rcedil: \"Ŗ\",\n rcedil: \"ŗ\",\n rceil: \"⌉\",\n rcub: \"}\",\n Rcy: \"Р\",\n rcy: \"р\",\n rdca: \"⤷\",\n rdldhar: \"⥩\",\n rdquo: \"”\",\n rdquor: \"”\",\n rdsh: \"↳\",\n real: \"ℜ\",\n realine: \"ℛ\",\n realpart: \"ℜ\",\n reals: \"ℝ\",\n Re: \"ℜ\",\n rect: \"▭\",\n reg: \"®\",\n REG: \"®\",\n ReverseElement: \"∋\",\n ReverseEquilibrium: \"⇋\",\n ReverseUpEquilibrium: \"⥯\",\n rfisht: \"⥽\",\n rfloor: \"⌋\",\n rfr: \"𝔯\",\n Rfr: \"ℜ\",\n rHar: \"⥤\",\n rhard: \"⇁\",\n rharu: \"⇀\",\n rharul: \"⥬\",\n Rho: \"Ρ\",\n rho: \"ρ\",\n rhov: \"ϱ\",\n RightAngleBracket: \"⟩\",\n RightArrowBar: \"⇥\",\n rightarrow: \"→\",\n RightArrow: \"→\",\n Rightarrow: \"⇒\",\n RightArrowLeftArrow: \"⇄\",\n rightarrowtail: \"↣\",\n RightCeiling: \"⌉\",\n RightDoubleBracket: \"⟧\",\n RightDownTeeVector: \"⥝\",\n RightDownVectorBar: \"⥕\",\n RightDownVector: \"⇂\",\n RightFloor: \"⌋\",\n rightharpoondown: \"⇁\",\n rightharpoonup: \"⇀\",\n rightleftarrows: \"⇄\",\n rightleftharpoons: \"⇌\",\n rightrightarrows: \"⇉\",\n rightsquigarrow: \"↝\",\n RightTeeArrow: \"↦\",\n RightTee: \"⊢\",\n RightTeeVector: \"⥛\",\n rightthreetimes: \"⋌\",\n RightTriangleBar: \"⧐\",\n RightTriangle: \"⊳\",\n RightTriangleEqual: \"⊵\",\n RightUpDownVector: \"⥏\",\n RightUpTeeVector: \"⥜\",\n RightUpVectorBar: \"⥔\",\n RightUpVector: \"↾\",\n RightVectorBar: \"⥓\",\n RightVector: \"⇀\",\n ring: \"˚\",\n risingdotseq: \"≓\",\n rlarr: \"⇄\",\n rlhar: \"⇌\",\n rlm: \"\\u200f\",\n rmoustache: \"⎱\",\n rmoust: \"⎱\",\n rnmid: \"⫮\",\n roang: \"⟭\",\n roarr: \"⇾\",\n robrk: \"⟧\",\n ropar: \"⦆\",\n ropf: \"𝕣\",\n Ropf: \"ℝ\",\n roplus: \"⨮\",\n rotimes: \"⨵\",\n RoundImplies: \"⥰\",\n rpar: \")\",\n rpargt: \"⦔\",\n rppolint: \"⨒\",\n rrarr: \"⇉\",\n Rrightarrow: \"⇛\",\n rsaquo: \"›\",\n rscr: \"𝓇\",\n Rscr: \"ℛ\",\n rsh: \"↱\",\n Rsh: \"↱\",\n rsqb: \"]\",\n rsquo: \"’\",\n rsquor: \"’\",\n rthree: \"⋌\",\n rtimes: \"⋊\",\n rtri: \"▹\",\n rtrie: \"⊵\",\n rtrif: \"▸\",\n rtriltri: \"⧎\",\n RuleDelayed: \"⧴\",\n ruluhar: \"⥨\",\n rx: \"℞\",\n Sacute: \"Ś\",\n sacute: \"ś\",\n sbquo: \"‚\",\n scap: \"⪸\",\n Scaron: \"Š\",\n scaron: \"š\",\n Sc: \"⪼\",\n sc: \"≻\",\n sccue: \"≽\",\n sce: \"⪰\",\n scE: \"⪴\",\n Scedil: \"Ş\",\n scedil: \"ş\",\n Scirc: \"Ŝ\",\n scirc: \"ŝ\",\n scnap: \"⪺\",\n scnE: \"⪶\",\n scnsim: \"⋩\",\n scpolint: \"⨓\",\n scsim: \"≿\",\n Scy: \"С\",\n scy: \"с\",\n sdotb: \"⊡\",\n sdot: \"⋅\",\n sdote: \"⩦\",\n searhk: \"⤥\",\n searr: \"↘\",\n seArr: \"⇘\",\n searrow: \"↘\",\n sect: \"§\",\n semi: \";\",\n seswar: \"⤩\",\n setminus: \"∖\",\n setmn: \"∖\",\n sext: \"✶\",\n Sfr: \"𝔖\",\n sfr: \"𝔰\",\n sfrown: \"⌢\",\n sharp: \"♯\",\n SHCHcy: \"Щ\",\n shchcy: \"щ\",\n SHcy: \"Ш\",\n shcy: \"ш\",\n ShortDownArrow: \"↓\",\n ShortLeftArrow: \"←\",\n shortmid: \"∣\",\n shortparallel: \"∥\",\n ShortRightArrow: \"→\",\n ShortUpArrow: \"↑\",\n shy: \"\\u00ad\",\n Sigma: \"Σ\",\n sigma: \"σ\",\n sigmaf: \"ς\",\n sigmav: \"ς\",\n sim: \"∼\",\n simdot: \"⩪\",\n sime: \"≃\",\n simeq: \"≃\",\n simg: \"⪞\",\n simgE: \"⪠\",\n siml: \"⪝\",\n simlE: \"⪟\",\n simne: \"≆\",\n simplus: \"⨤\",\n simrarr: \"⥲\",\n slarr: \"←\",\n SmallCircle: \"∘\",\n smallsetminus: \"∖\",\n smashp: \"⨳\",\n smeparsl: \"⧤\",\n smid: \"∣\",\n smile: \"⌣\",\n smt: \"⪪\",\n smte: \"⪬\",\n smtes: \"⪬︀\",\n SOFTcy: \"Ь\",\n softcy: \"ь\",\n solbar: \"⌿\",\n solb: \"⧄\",\n sol: \"/\",\n Sopf: \"𝕊\",\n sopf: \"𝕤\",\n spades: \"♠\",\n spadesuit: \"♠\",\n spar: \"∥\",\n sqcap: \"⊓\",\n sqcaps: \"⊓︀\",\n sqcup: \"⊔\",\n sqcups: \"⊔︀\",\n Sqrt: \"√\",\n sqsub: \"⊏\",\n sqsube: \"⊑\",\n sqsubset: \"⊏\",\n sqsubseteq: \"⊑\",\n sqsup: \"⊐\",\n sqsupe: \"⊒\",\n sqsupset: \"⊐\",\n sqsupseteq: \"⊒\",\n square: \"□\",\n Square: \"□\",\n SquareIntersection: \"⊓\",\n SquareSubset: \"⊏\",\n SquareSubsetEqual: \"⊑\",\n SquareSuperset: \"⊐\",\n SquareSupersetEqual: \"⊒\",\n SquareUnion: \"⊔\",\n squarf: \"▪\",\n squ: \"□\",\n squf: \"▪\",\n srarr: \"→\",\n Sscr: \"𝒮\",\n sscr: \"𝓈\",\n ssetmn: \"∖\",\n ssmile: \"⌣\",\n sstarf: \"⋆\",\n Star: \"⋆\",\n star: \"☆\",\n starf: \"★\",\n straightepsilon: \"ϵ\",\n straightphi: \"ϕ\",\n strns: \"¯\",\n sub: \"⊂\",\n Sub: \"⋐\",\n subdot: \"⪽\",\n subE: \"⫅\",\n sube: \"⊆\",\n subedot: \"⫃\",\n submult: \"⫁\",\n subnE: \"⫋\",\n subne: \"⊊\",\n subplus: \"⪿\",\n subrarr: \"⥹\",\n subset: \"⊂\",\n Subset: \"⋐\",\n subseteq: \"⊆\",\n subseteqq: \"⫅\",\n SubsetEqual: \"⊆\",\n subsetneq: \"⊊\",\n subsetneqq: \"⫋\",\n subsim: \"⫇\",\n subsub: \"⫕\",\n subsup: \"⫓\",\n succapprox: \"⪸\",\n succ: \"≻\",\n succcurlyeq: \"≽\",\n Succeeds: \"≻\",\n SucceedsEqual: \"⪰\",\n SucceedsSlantEqual: \"≽\",\n SucceedsTilde: \"≿\",\n succeq: \"⪰\",\n succnapprox: \"⪺\",\n succneqq: \"⪶\",\n succnsim: \"⋩\",\n succsim: \"≿\",\n SuchThat: \"∋\",\n sum: \"∑\",\n Sum: \"∑\",\n sung: \"♪\",\n sup1: \"¹\",\n sup2: \"²\",\n sup3: \"³\",\n sup: \"⊃\",\n Sup: \"⋑\",\n supdot: \"⪾\",\n supdsub: \"⫘\",\n supE: \"⫆\",\n supe: \"⊇\",\n supedot: \"⫄\",\n Superset: \"⊃\",\n SupersetEqual: \"⊇\",\n suphsol: \"⟉\",\n suphsub: \"⫗\",\n suplarr: \"⥻\",\n supmult: \"⫂\",\n supnE: \"⫌\",\n supne: \"⊋\",\n supplus: \"⫀\",\n supset: \"⊃\",\n Supset: \"⋑\",\n supseteq: \"⊇\",\n supseteqq: \"⫆\",\n supsetneq: \"⊋\",\n supsetneqq: \"⫌\",\n supsim: \"⫈\",\n supsub: \"⫔\",\n supsup: \"⫖\",\n swarhk: \"⤦\",\n swarr: \"↙\",\n swArr: \"⇙\",\n swarrow: \"↙\",\n swnwar: \"⤪\",\n szlig: \"ß\",\n Tab: \"\\u0009\",\n target: \"⌖\",\n Tau: \"Τ\",\n tau: \"τ\",\n tbrk: \"⎴\",\n Tcaron: \"Ť\",\n tcaron: \"ť\",\n Tcedil: \"Ţ\",\n tcedil: \"ţ\",\n Tcy: \"Т\",\n tcy: \"т\",\n tdot: \"⃛\",\n telrec: \"⌕\",\n Tfr: \"𝔗\",\n tfr: \"𝔱\",\n there4: \"∴\",\n therefore: \"∴\",\n Therefore: \"∴\",\n Theta: \"Θ\",\n theta: \"θ\",\n thetasym: \"ϑ\",\n thetav: \"ϑ\",\n thickapprox: \"≈\",\n thicksim: \"∼\",\n ThickSpace: \" \",\n ThinSpace: \" \",\n thinsp: \" \",\n thkap: \"≈\",\n thksim: \"∼\",\n THORN: \"Þ\",\n thorn: \"þ\",\n tilde: \"˜\",\n Tilde: \"∼\",\n TildeEqual: \"≃\",\n TildeFullEqual: \"≅\",\n TildeTilde: \"≈\",\n timesbar: \"⨱\",\n timesb: \"⊠\",\n times: \"×\",\n timesd: \"⨰\",\n tint: \"∭\",\n toea: \"⤨\",\n topbot: \"⌶\",\n topcir: \"⫱\",\n top: \"⊤\",\n Topf: \"𝕋\",\n topf: \"𝕥\",\n topfork: \"⫚\",\n tosa: \"⤩\",\n tprime: \"‴\",\n trade: \"™\",\n TRADE: \"™\",\n triangle: \"▵\",\n triangledown: \"▿\",\n triangleleft: \"◃\",\n trianglelefteq: \"⊴\",\n triangleq: \"≜\",\n triangleright: \"▹\",\n trianglerighteq: \"⊵\",\n tridot: \"◬\",\n trie: \"≜\",\n triminus: \"⨺\",\n TripleDot: \"⃛\",\n triplus: \"⨹\",\n trisb: \"⧍\",\n tritime: \"⨻\",\n trpezium: \"⏢\",\n Tscr: \"𝒯\",\n tscr: \"𝓉\",\n TScy: \"Ц\",\n tscy: \"ц\",\n TSHcy: \"Ћ\",\n tshcy: \"ћ\",\n Tstrok: \"Ŧ\",\n tstrok: \"ŧ\",\n twixt: \"≬\",\n twoheadleftarrow: \"↞\",\n twoheadrightarrow: \"↠\",\n Uacute: \"Ú\",\n uacute: \"ú\",\n uarr: \"↑\",\n Uarr: \"↟\",\n uArr: \"⇑\",\n Uarrocir: \"⥉\",\n Ubrcy: \"Ў\",\n ubrcy: \"ў\",\n Ubreve: \"Ŭ\",\n ubreve: \"ŭ\",\n Ucirc: \"Û\",\n ucirc: \"û\",\n Ucy: \"У\",\n ucy: \"у\",\n udarr: \"⇅\",\n Udblac: \"Ű\",\n udblac: \"ű\",\n udhar: \"⥮\",\n ufisht: \"⥾\",\n Ufr: \"𝔘\",\n ufr: \"𝔲\",\n Ugrave: \"Ù\",\n ugrave: \"ù\",\n uHar: \"⥣\",\n uharl: \"↿\",\n uharr: \"↾\",\n uhblk: \"▀\",\n ulcorn: \"⌜\",\n ulcorner: \"⌜\",\n ulcrop: \"⌏\",\n ultri: \"◸\",\n Umacr: \"Ū\",\n umacr: \"ū\",\n uml: \"¨\",\n UnderBar: \"_\",\n UnderBrace: \"⏟\",\n UnderBracket: \"⎵\",\n UnderParenthesis: \"⏝\",\n Union: \"⋃\",\n UnionPlus: \"⊎\",\n Uogon: \"Ų\",\n uogon: \"ų\",\n Uopf: \"𝕌\",\n uopf: \"𝕦\",\n UpArrowBar: \"⤒\",\n uparrow: \"↑\",\n UpArrow: \"↑\",\n Uparrow: \"⇑\",\n UpArrowDownArrow: \"⇅\",\n updownarrow: \"↕\",\n UpDownArrow: \"↕\",\n Updownarrow: \"⇕\",\n UpEquilibrium: \"⥮\",\n upharpoonleft: \"↿\",\n upharpoonright: \"↾\",\n uplus: \"⊎\",\n UpperLeftArrow: \"↖\",\n UpperRightArrow: \"↗\",\n upsi: \"υ\",\n Upsi: \"ϒ\",\n upsih: \"ϒ\",\n Upsilon: \"Υ\",\n upsilon: \"υ\",\n UpTeeArrow: \"↥\",\n UpTee: \"⊥\",\n upuparrows: \"⇈\",\n urcorn: \"⌝\",\n urcorner: \"⌝\",\n urcrop: \"⌎\",\n Uring: \"Ů\",\n uring: \"ů\",\n urtri: \"◹\",\n Uscr: \"𝒰\",\n uscr: \"𝓊\",\n utdot: \"⋰\",\n Utilde: \"Ũ\",\n utilde: \"ũ\",\n utri: \"▵\",\n utrif: \"▴\",\n uuarr: \"⇈\",\n Uuml: \"Ü\",\n uuml: \"ü\",\n uwangle: \"⦧\",\n vangrt: \"⦜\",\n varepsilon: \"ϵ\",\n varkappa: \"ϰ\",\n varnothing: \"∅\",\n varphi: \"ϕ\",\n varpi: \"ϖ\",\n varpropto: \"∝\",\n varr: \"↕\",\n vArr: \"⇕\",\n varrho: \"ϱ\",\n varsigma: \"ς\",\n varsubsetneq: \"⊊︀\",\n varsubsetneqq: \"⫋︀\",\n varsupsetneq: \"⊋︀\",\n varsupsetneqq: \"⫌︀\",\n vartheta: \"ϑ\",\n vartriangleleft: \"⊲\",\n vartriangleright: \"⊳\",\n vBar: \"⫨\",\n Vbar: \"⫫\",\n vBarv: \"⫩\",\n Vcy: \"В\",\n vcy: \"в\",\n vdash: \"⊢\",\n vDash: \"⊨\",\n Vdash: \"⊩\",\n VDash: \"⊫\",\n Vdashl: \"⫦\",\n veebar: \"⊻\",\n vee: \"∨\",\n Vee: \"⋁\",\n veeeq: \"≚\",\n vellip: \"⋮\",\n verbar: \"|\",\n Verbar: \"‖\",\n vert: \"|\",\n Vert: \"‖\",\n VerticalBar: \"∣\",\n VerticalLine: \"|\",\n VerticalSeparator: \"❘\",\n VerticalTilde: \"≀\",\n VeryThinSpace: \" \",\n Vfr: \"𝔙\",\n vfr: \"𝔳\",\n vltri: \"⊲\",\n vnsub: \"⊂⃒\",\n vnsup: \"⊃⃒\",\n Vopf: \"𝕍\",\n vopf: \"𝕧\",\n vprop: \"∝\",\n vrtri: \"⊳\",\n Vscr: \"𝒱\",\n vscr: \"𝓋\",\n vsubnE: \"⫋︀\",\n vsubne: \"⊊︀\",\n vsupnE: \"⫌︀\",\n vsupne: \"⊋︀\",\n Vvdash: \"⊪\",\n vzigzag: \"⦚\",\n Wcirc: \"Ŵ\",\n wcirc: \"ŵ\",\n wedbar: \"⩟\",\n wedge: \"∧\",\n Wedge: \"⋀\",\n wedgeq: \"≙\",\n weierp: \"℘\",\n Wfr: \"𝔚\",\n wfr: \"𝔴\",\n Wopf: \"𝕎\",\n wopf: \"𝕨\",\n wp: \"℘\",\n wr: \"≀\",\n wreath: \"≀\",\n Wscr: \"𝒲\",\n wscr: \"𝓌\",\n xcap: \"⋂\",\n xcirc: \"◯\",\n xcup: \"⋃\",\n xdtri: \"▽\",\n Xfr: \"𝔛\",\n xfr: \"𝔵\",\n xharr: \"⟷\",\n xhArr: \"⟺\",\n Xi: \"Ξ\",\n xi: \"ξ\",\n xlarr: \"⟵\",\n xlArr: \"⟸\",\n xmap: \"⟼\",\n xnis: \"⋻\",\n xodot: \"⨀\",\n Xopf: \"𝕏\",\n xopf: \"𝕩\",\n xoplus: \"⨁\",\n xotime: \"⨂\",\n xrarr: \"⟶\",\n xrArr: \"⟹\",\n Xscr: \"𝒳\",\n xscr: \"𝓍\",\n xsqcup: \"⨆\",\n xuplus: \"⨄\",\n xutri: \"△\",\n xvee: \"⋁\",\n xwedge: \"⋀\",\n Yacute: \"Ý\",\n yacute: \"ý\",\n YAcy: \"Я\",\n yacy: \"я\",\n Ycirc: \"Ŷ\",\n ycirc: \"ŷ\",\n Ycy: \"Ы\",\n ycy: \"ы\",\n yen: \"¥\",\n Yfr: \"𝔜\",\n yfr: \"𝔶\",\n YIcy: \"Ї\",\n yicy: \"ї\",\n Yopf: \"𝕐\",\n yopf: \"𝕪\",\n Yscr: \"𝒴\",\n yscr: \"𝓎\",\n YUcy: \"Ю\",\n yucy: \"ю\",\n yuml: \"ÿ\",\n Yuml: \"Ÿ\",\n Zacute: \"Ź\",\n zacute: \"ź\",\n Zcaron: \"Ž\",\n zcaron: \"ž\",\n Zcy: \"З\",\n zcy: \"з\",\n Zdot: \"Ż\",\n zdot: \"ż\",\n zeetrf: \"ℨ\",\n ZeroWidthSpace: \"\",\n Zeta: \"Ζ\",\n zeta: \"ζ\",\n zfr: \"𝔷\",\n Zfr: \"ℨ\",\n ZHcy: \"Ж\",\n zhcy: \"ж\",\n zigrarr: \"⇝\",\n zopf: \"𝕫\",\n Zopf: \"ℤ\",\n Zscr: \"𝒵\",\n zscr: \"𝓏\",\n zwj: \"\\u200d\",\n zwnj: \"\\u200c\"\n };\n var HEXCHARCODE = /^#[xX]([A-Fa-f0-9]+)$/;\n var CHARCODE = /^#([0-9]+)$/;\n var NAMED = /^([A-Za-z0-9]+)$/;\n var EntityParser = _exports.EntityParser = /** @class */function () {\n function EntityParser(named) {\n this.named = named;\n }\n EntityParser.prototype.parse = function (entity) {\n if (!entity) {\n return;\n }\n var matches = entity.match(HEXCHARCODE);\n if (matches) {\n return String.fromCharCode(parseInt(matches[1], 16));\n }\n matches = entity.match(CHARCODE);\n if (matches) {\n return String.fromCharCode(parseInt(matches[1], 10));\n }\n matches = entity.match(NAMED);\n if (matches) {\n return this.named[matches[1]];\n }\n };\n return EntityParser;\n }();\n var WSP = /[\\t\\n\\f ]/;\n var ALPHA = /[A-Za-z]/;\n var CRLF = /\\r\\n?/g;\n function isSpace(char) {\n return WSP.test(char);\n }\n function isAlpha(char) {\n return ALPHA.test(char);\n }\n function preprocessInput(input) {\n return input.replace(CRLF, '\\n');\n }\n var EventedTokenizer = _exports.EventedTokenizer = /** @class */function () {\n function EventedTokenizer(delegate, entityParser, mode) {\n if (mode === void 0) {\n mode = 'precompile';\n }\n this.delegate = delegate;\n this.entityParser = entityParser;\n this.mode = mode;\n this.state = \"beforeData\" /* beforeData */;\n this.line = -1;\n this.column = -1;\n this.input = '';\n this.index = -1;\n this.tagNameBuffer = '';\n this.states = {\n beforeData: function () {\n var char = this.peek();\n if (char === '<' && !this.isIgnoredEndTag()) {\n this.transitionTo(\"tagOpen\" /* tagOpen */);\n this.markTagStart();\n this.consume();\n } else {\n if (this.mode === 'precompile' && char === '\\n') {\n var tag = this.tagNameBuffer.toLowerCase();\n if (tag === 'pre' || tag === 'textarea') {\n this.consume();\n }\n }\n this.transitionTo(\"data\" /* data */);\n this.delegate.beginData();\n }\n },\n data: function () {\n var char = this.peek();\n var tag = this.tagNameBuffer;\n if (char === '<' && !this.isIgnoredEndTag()) {\n this.delegate.finishData();\n this.transitionTo(\"tagOpen\" /* tagOpen */);\n this.markTagStart();\n this.consume();\n } else if (char === '&' && tag !== 'script' && tag !== 'style') {\n this.consume();\n this.delegate.appendToData(this.consumeCharRef() || '&');\n } else {\n this.consume();\n this.delegate.appendToData(char);\n }\n },\n tagOpen: function () {\n var char = this.consume();\n if (char === '!') {\n this.transitionTo(\"markupDeclarationOpen\" /* markupDeclarationOpen */);\n } else if (char === '/') {\n this.transitionTo(\"endTagOpen\" /* endTagOpen */);\n } else if (char === '@' || char === ':' || isAlpha(char)) {\n this.transitionTo(\"tagName\" /* tagName */);\n this.tagNameBuffer = '';\n this.delegate.beginStartTag();\n this.appendToTagName(char);\n }\n },\n markupDeclarationOpen: function () {\n var char = this.consume();\n if (char === '-' && this.peek() === '-') {\n this.consume();\n this.transitionTo(\"commentStart\" /* commentStart */);\n this.delegate.beginComment();\n } else {\n var maybeDoctype = char.toUpperCase() + this.input.substring(this.index, this.index + 6).toUpperCase();\n if (maybeDoctype === 'DOCTYPE') {\n this.consume();\n this.consume();\n this.consume();\n this.consume();\n this.consume();\n this.consume();\n this.transitionTo(\"doctype\" /* doctype */);\n if (this.delegate.beginDoctype) this.delegate.beginDoctype();\n }\n }\n },\n doctype: function () {\n var char = this.consume();\n if (isSpace(char)) {\n this.transitionTo(\"beforeDoctypeName\" /* beforeDoctypeName */);\n }\n },\n\n beforeDoctypeName: function () {\n var char = this.consume();\n if (isSpace(char)) {\n return;\n } else {\n this.transitionTo(\"doctypeName\" /* doctypeName */);\n if (this.delegate.appendToDoctypeName) this.delegate.appendToDoctypeName(char.toLowerCase());\n }\n },\n doctypeName: function () {\n var char = this.consume();\n if (isSpace(char)) {\n this.transitionTo(\"afterDoctypeName\" /* afterDoctypeName */);\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n if (this.delegate.appendToDoctypeName) this.delegate.appendToDoctypeName(char.toLowerCase());\n }\n },\n afterDoctypeName: function () {\n var char = this.consume();\n if (isSpace(char)) {\n return;\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n var nextSixChars = char.toUpperCase() + this.input.substring(this.index, this.index + 5).toUpperCase();\n var isPublic = nextSixChars.toUpperCase() === 'PUBLIC';\n var isSystem = nextSixChars.toUpperCase() === 'SYSTEM';\n if (isPublic || isSystem) {\n this.consume();\n this.consume();\n this.consume();\n this.consume();\n this.consume();\n this.consume();\n }\n if (isPublic) {\n this.transitionTo(\"afterDoctypePublicKeyword\" /* afterDoctypePublicKeyword */);\n } else if (isSystem) {\n this.transitionTo(\"afterDoctypeSystemKeyword\" /* afterDoctypeSystemKeyword */);\n }\n }\n },\n\n afterDoctypePublicKeyword: function () {\n var char = this.peek();\n if (isSpace(char)) {\n this.transitionTo(\"beforeDoctypePublicIdentifier\" /* beforeDoctypePublicIdentifier */);\n this.consume();\n } else if (char === '\"') {\n this.transitionTo(\"doctypePublicIdentifierDoubleQuoted\" /* doctypePublicIdentifierDoubleQuoted */);\n this.consume();\n } else if (char === \"'\") {\n this.transitionTo(\"doctypePublicIdentifierSingleQuoted\" /* doctypePublicIdentifierSingleQuoted */);\n this.consume();\n } else if (char === '>') {\n this.consume();\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n }\n },\n\n doctypePublicIdentifierDoubleQuoted: function () {\n var char = this.consume();\n if (char === '\"') {\n this.transitionTo(\"afterDoctypePublicIdentifier\" /* afterDoctypePublicIdentifier */);\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n if (this.delegate.appendToDoctypePublicIdentifier) this.delegate.appendToDoctypePublicIdentifier(char);\n }\n },\n doctypePublicIdentifierSingleQuoted: function () {\n var char = this.consume();\n if (char === \"'\") {\n this.transitionTo(\"afterDoctypePublicIdentifier\" /* afterDoctypePublicIdentifier */);\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n if (this.delegate.appendToDoctypePublicIdentifier) this.delegate.appendToDoctypePublicIdentifier(char);\n }\n },\n afterDoctypePublicIdentifier: function () {\n var char = this.consume();\n if (isSpace(char)) {\n this.transitionTo(\"betweenDoctypePublicAndSystemIdentifiers\" /* betweenDoctypePublicAndSystemIdentifiers */);\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else if (char === '\"') {\n this.transitionTo(\"doctypeSystemIdentifierDoubleQuoted\" /* doctypeSystemIdentifierDoubleQuoted */);\n } else if (char === \"'\") {\n this.transitionTo(\"doctypeSystemIdentifierSingleQuoted\" /* doctypeSystemIdentifierSingleQuoted */);\n }\n },\n\n betweenDoctypePublicAndSystemIdentifiers: function () {\n var char = this.consume();\n if (isSpace(char)) {\n return;\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else if (char === '\"') {\n this.transitionTo(\"doctypeSystemIdentifierDoubleQuoted\" /* doctypeSystemIdentifierDoubleQuoted */);\n } else if (char === \"'\") {\n this.transitionTo(\"doctypeSystemIdentifierSingleQuoted\" /* doctypeSystemIdentifierSingleQuoted */);\n }\n },\n\n doctypeSystemIdentifierDoubleQuoted: function () {\n var char = this.consume();\n if (char === '\"') {\n this.transitionTo(\"afterDoctypeSystemIdentifier\" /* afterDoctypeSystemIdentifier */);\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n if (this.delegate.appendToDoctypeSystemIdentifier) this.delegate.appendToDoctypeSystemIdentifier(char);\n }\n },\n doctypeSystemIdentifierSingleQuoted: function () {\n var char = this.consume();\n if (char === \"'\") {\n this.transitionTo(\"afterDoctypeSystemIdentifier\" /* afterDoctypeSystemIdentifier */);\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n if (this.delegate.appendToDoctypeSystemIdentifier) this.delegate.appendToDoctypeSystemIdentifier(char);\n }\n },\n afterDoctypeSystemIdentifier: function () {\n var char = this.consume();\n if (isSpace(char)) {\n return;\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n }\n },\n\n commentStart: function () {\n var char = this.consume();\n if (char === '-') {\n this.transitionTo(\"commentStartDash\" /* commentStartDash */);\n } else if (char === '>') {\n this.delegate.finishComment();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.delegate.appendToCommentData(char);\n this.transitionTo(\"comment\" /* comment */);\n }\n },\n\n commentStartDash: function () {\n var char = this.consume();\n if (char === '-') {\n this.transitionTo(\"commentEnd\" /* commentEnd */);\n } else if (char === '>') {\n this.delegate.finishComment();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.delegate.appendToCommentData('-');\n this.transitionTo(\"comment\" /* comment */);\n }\n },\n\n comment: function () {\n var char = this.consume();\n if (char === '-') {\n this.transitionTo(\"commentEndDash\" /* commentEndDash */);\n } else {\n this.delegate.appendToCommentData(char);\n }\n },\n commentEndDash: function () {\n var char = this.consume();\n if (char === '-') {\n this.transitionTo(\"commentEnd\" /* commentEnd */);\n } else {\n this.delegate.appendToCommentData('-' + char);\n this.transitionTo(\"comment\" /* comment */);\n }\n },\n\n commentEnd: function () {\n var char = this.consume();\n if (char === '>') {\n this.delegate.finishComment();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.delegate.appendToCommentData('--' + char);\n this.transitionTo(\"comment\" /* comment */);\n }\n },\n\n tagName: function () {\n var char = this.consume();\n if (isSpace(char)) {\n this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n } else if (char === '/') {\n this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n } else if (char === '>') {\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.appendToTagName(char);\n }\n },\n endTagName: function () {\n var char = this.consume();\n if (isSpace(char)) {\n this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n this.tagNameBuffer = '';\n } else if (char === '/') {\n this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n this.tagNameBuffer = '';\n } else if (char === '>') {\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n this.tagNameBuffer = '';\n } else {\n this.appendToTagName(char);\n }\n },\n beforeAttributeName: function () {\n var char = this.peek();\n if (isSpace(char)) {\n this.consume();\n return;\n } else if (char === '/') {\n this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n this.consume();\n } else if (char === '>') {\n this.consume();\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else if (char === '=') {\n this.delegate.reportSyntaxError('attribute name cannot start with equals sign');\n this.transitionTo(\"attributeName\" /* attributeName */);\n this.delegate.beginAttribute();\n this.consume();\n this.delegate.appendToAttributeName(char);\n } else {\n this.transitionTo(\"attributeName\" /* attributeName */);\n this.delegate.beginAttribute();\n }\n },\n attributeName: function () {\n var char = this.peek();\n if (isSpace(char)) {\n this.transitionTo(\"afterAttributeName\" /* afterAttributeName */);\n this.consume();\n } else if (char === '/') {\n this.delegate.beginAttributeValue(false);\n this.delegate.finishAttributeValue();\n this.consume();\n this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n } else if (char === '=') {\n this.transitionTo(\"beforeAttributeValue\" /* beforeAttributeValue */);\n this.consume();\n } else if (char === '>') {\n this.delegate.beginAttributeValue(false);\n this.delegate.finishAttributeValue();\n this.consume();\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else if (char === '\"' || char === \"'\" || char === '<') {\n this.delegate.reportSyntaxError(char + ' is not a valid character within attribute names');\n this.consume();\n this.delegate.appendToAttributeName(char);\n } else {\n this.consume();\n this.delegate.appendToAttributeName(char);\n }\n },\n afterAttributeName: function () {\n var char = this.peek();\n if (isSpace(char)) {\n this.consume();\n return;\n } else if (char === '/') {\n this.delegate.beginAttributeValue(false);\n this.delegate.finishAttributeValue();\n this.consume();\n this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n } else if (char === '=') {\n this.consume();\n this.transitionTo(\"beforeAttributeValue\" /* beforeAttributeValue */);\n } else if (char === '>') {\n this.delegate.beginAttributeValue(false);\n this.delegate.finishAttributeValue();\n this.consume();\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.delegate.beginAttributeValue(false);\n this.delegate.finishAttributeValue();\n this.transitionTo(\"attributeName\" /* attributeName */);\n this.delegate.beginAttribute();\n this.consume();\n this.delegate.appendToAttributeName(char);\n }\n },\n beforeAttributeValue: function () {\n var char = this.peek();\n if (isSpace(char)) {\n this.consume();\n } else if (char === '\"') {\n this.transitionTo(\"attributeValueDoubleQuoted\" /* attributeValueDoubleQuoted */);\n this.delegate.beginAttributeValue(true);\n this.consume();\n } else if (char === \"'\") {\n this.transitionTo(\"attributeValueSingleQuoted\" /* attributeValueSingleQuoted */);\n this.delegate.beginAttributeValue(true);\n this.consume();\n } else if (char === '>') {\n this.delegate.beginAttributeValue(false);\n this.delegate.finishAttributeValue();\n this.consume();\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.transitionTo(\"attributeValueUnquoted\" /* attributeValueUnquoted */);\n this.delegate.beginAttributeValue(false);\n this.consume();\n this.delegate.appendToAttributeValue(char);\n }\n },\n attributeValueDoubleQuoted: function () {\n var char = this.consume();\n if (char === '\"') {\n this.delegate.finishAttributeValue();\n this.transitionTo(\"afterAttributeValueQuoted\" /* afterAttributeValueQuoted */);\n } else if (char === '&') {\n this.delegate.appendToAttributeValue(this.consumeCharRef() || '&');\n } else {\n this.delegate.appendToAttributeValue(char);\n }\n },\n attributeValueSingleQuoted: function () {\n var char = this.consume();\n if (char === \"'\") {\n this.delegate.finishAttributeValue();\n this.transitionTo(\"afterAttributeValueQuoted\" /* afterAttributeValueQuoted */);\n } else if (char === '&') {\n this.delegate.appendToAttributeValue(this.consumeCharRef() || '&');\n } else {\n this.delegate.appendToAttributeValue(char);\n }\n },\n attributeValueUnquoted: function () {\n var char = this.peek();\n if (isSpace(char)) {\n this.delegate.finishAttributeValue();\n this.consume();\n this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n } else if (char === '/') {\n this.delegate.finishAttributeValue();\n this.consume();\n this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n } else if (char === '&') {\n this.consume();\n this.delegate.appendToAttributeValue(this.consumeCharRef() || '&');\n } else if (char === '>') {\n this.delegate.finishAttributeValue();\n this.consume();\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.consume();\n this.delegate.appendToAttributeValue(char);\n }\n },\n afterAttributeValueQuoted: function () {\n var char = this.peek();\n if (isSpace(char)) {\n this.consume();\n this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n } else if (char === '/') {\n this.consume();\n this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n } else if (char === '>') {\n this.consume();\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n }\n },\n\n selfClosingStartTag: function () {\n var char = this.peek();\n if (char === '>') {\n this.consume();\n this.delegate.markTagAsSelfClosing();\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n }\n },\n\n endTagOpen: function () {\n var char = this.consume();\n if (char === '@' || char === ':' || isAlpha(char)) {\n this.transitionTo(\"endTagName\" /* endTagName */);\n this.tagNameBuffer = '';\n this.delegate.beginEndTag();\n this.appendToTagName(char);\n }\n }\n };\n this.reset();\n }\n EventedTokenizer.prototype.reset = function () {\n this.transitionTo(\"beforeData\" /* beforeData */);\n this.input = '';\n this.tagNameBuffer = '';\n this.index = 0;\n this.line = 1;\n this.column = 0;\n this.delegate.reset();\n };\n EventedTokenizer.prototype.transitionTo = function (state) {\n this.state = state;\n };\n EventedTokenizer.prototype.tokenize = function (input) {\n this.reset();\n this.tokenizePart(input);\n this.tokenizeEOF();\n };\n EventedTokenizer.prototype.tokenizePart = function (input) {\n this.input += preprocessInput(input);\n while (this.index < this.input.length) {\n var handler = this.states[this.state];\n if (handler !== undefined) {\n handler.call(this);\n } else {\n throw new Error(\"unhandled state \" + this.state);\n }\n }\n };\n EventedTokenizer.prototype.tokenizeEOF = function () {\n this.flushData();\n };\n EventedTokenizer.prototype.flushData = function () {\n if (this.state === 'data') {\n this.delegate.finishData();\n this.transitionTo(\"beforeData\" /* beforeData */);\n }\n };\n\n EventedTokenizer.prototype.peek = function () {\n return this.input.charAt(this.index);\n };\n EventedTokenizer.prototype.consume = function () {\n var char = this.peek();\n this.index++;\n if (char === '\\n') {\n this.line++;\n this.column = 0;\n } else {\n this.column++;\n }\n return char;\n };\n EventedTokenizer.prototype.consumeCharRef = function () {\n var endIndex = this.input.indexOf(';', this.index);\n if (endIndex === -1) {\n return;\n }\n var entity = this.input.slice(this.index, endIndex);\n var chars = this.entityParser.parse(entity);\n if (chars) {\n var count = entity.length;\n // consume the entity chars\n while (count) {\n this.consume();\n count--;\n }\n // consume the `;`\n this.consume();\n return chars;\n }\n };\n EventedTokenizer.prototype.markTagStart = function () {\n this.delegate.tagOpen();\n };\n EventedTokenizer.prototype.appendToTagName = function (char) {\n this.tagNameBuffer += char;\n this.delegate.appendToTagName(char);\n };\n EventedTokenizer.prototype.isIgnoredEndTag = function () {\n var tag = this.tagNameBuffer;\n return tag === 'title' && this.input.substring(this.index, this.index + 8) !== '</title>' || tag === 'style' && this.input.substring(this.index, this.index + 8) !== '</style>' || tag === 'script' && this.input.substring(this.index, this.index + 9) !== '</script>';\n };\n return EventedTokenizer;\n }();\n var Tokenizer = _exports.Tokenizer = /** @class */function () {\n function Tokenizer(entityParser, options) {\n if (options === void 0) {\n options = {};\n }\n this.options = options;\n this.token = null;\n this.startLine = 1;\n this.startColumn = 0;\n this.tokens = [];\n this.tokenizer = new EventedTokenizer(this, entityParser, options.mode);\n this._currentAttribute = undefined;\n }\n Tokenizer.prototype.tokenize = function (input) {\n this.tokens = [];\n this.tokenizer.tokenize(input);\n return this.tokens;\n };\n Tokenizer.prototype.tokenizePart = function (input) {\n this.tokens = [];\n this.tokenizer.tokenizePart(input);\n return this.tokens;\n };\n Tokenizer.prototype.tokenizeEOF = function () {\n this.tokens = [];\n this.tokenizer.tokenizeEOF();\n return this.tokens[0];\n };\n Tokenizer.prototype.reset = function () {\n this.token = null;\n this.startLine = 1;\n this.startColumn = 0;\n };\n Tokenizer.prototype.current = function () {\n var token = this.token;\n if (token === null) {\n throw new Error('token was unexpectedly null');\n }\n if (arguments.length === 0) {\n return token;\n }\n for (var i = 0; i < arguments.length; i++) {\n if (token.type === arguments[i]) {\n return token;\n }\n }\n throw new Error(\"token type was unexpectedly \" + token.type);\n };\n Tokenizer.prototype.push = function (token) {\n this.token = token;\n this.tokens.push(token);\n };\n Tokenizer.prototype.currentAttribute = function () {\n return this._currentAttribute;\n };\n Tokenizer.prototype.addLocInfo = function () {\n if (this.options.loc) {\n this.current().loc = {\n start: {\n line: this.startLine,\n column: this.startColumn\n },\n end: {\n line: this.tokenizer.line,\n column: this.tokenizer.column\n }\n };\n }\n this.startLine = this.tokenizer.line;\n this.startColumn = this.tokenizer.column;\n };\n // Data\n Tokenizer.prototype.beginDoctype = function () {\n this.push({\n type: \"Doctype\" /* Doctype */,\n name: ''\n });\n };\n Tokenizer.prototype.appendToDoctypeName = function (char) {\n this.current(\"Doctype\" /* Doctype */).name += char;\n };\n Tokenizer.prototype.appendToDoctypePublicIdentifier = function (char) {\n var doctype = this.current(\"Doctype\" /* Doctype */);\n if (doctype.publicIdentifier === undefined) {\n doctype.publicIdentifier = char;\n } else {\n doctype.publicIdentifier += char;\n }\n };\n Tokenizer.prototype.appendToDoctypeSystemIdentifier = function (char) {\n var doctype = this.current(\"Doctype\" /* Doctype */);\n if (doctype.systemIdentifier === undefined) {\n doctype.systemIdentifier = char;\n } else {\n doctype.systemIdentifier += char;\n }\n };\n Tokenizer.prototype.endDoctype = function () {\n this.addLocInfo();\n };\n Tokenizer.prototype.beginData = function () {\n this.push({\n type: \"Chars\" /* Chars */,\n chars: ''\n });\n };\n Tokenizer.prototype.appendToData = function (char) {\n this.current(\"Chars\" /* Chars */).chars += char;\n };\n Tokenizer.prototype.finishData = function () {\n this.addLocInfo();\n };\n // Comment\n Tokenizer.prototype.beginComment = function () {\n this.push({\n type: \"Comment\" /* Comment */,\n chars: ''\n });\n };\n Tokenizer.prototype.appendToCommentData = function (char) {\n this.current(\"Comment\" /* Comment */).chars += char;\n };\n Tokenizer.prototype.finishComment = function () {\n this.addLocInfo();\n };\n // Tags - basic\n Tokenizer.prototype.tagOpen = function () {};\n Tokenizer.prototype.beginStartTag = function () {\n this.push({\n type: \"StartTag\" /* StartTag */,\n tagName: '',\n attributes: [],\n selfClosing: false\n });\n };\n Tokenizer.prototype.beginEndTag = function () {\n this.push({\n type: \"EndTag\" /* EndTag */,\n tagName: ''\n });\n };\n Tokenizer.prototype.finishTag = function () {\n this.addLocInfo();\n };\n Tokenizer.prototype.markTagAsSelfClosing = function () {\n this.current(\"StartTag\" /* StartTag */).selfClosing = true;\n };\n // Tags - name\n Tokenizer.prototype.appendToTagName = function (char) {\n this.current(\"StartTag\" /* StartTag */, \"EndTag\" /* EndTag */).tagName += char;\n };\n // Tags - attributes\n Tokenizer.prototype.beginAttribute = function () {\n this._currentAttribute = ['', '', false];\n };\n Tokenizer.prototype.appendToAttributeName = function (char) {\n this.currentAttribute()[0] += char;\n };\n Tokenizer.prototype.beginAttributeValue = function (isQuoted) {\n this.currentAttribute()[2] = isQuoted;\n };\n Tokenizer.prototype.appendToAttributeValue = function (char) {\n this.currentAttribute()[1] += char;\n };\n Tokenizer.prototype.finishAttributeValue = function () {\n this.current(\"StartTag\" /* StartTag */).attributes.push(this._currentAttribute);\n };\n Tokenizer.prototype.reportSyntaxError = function (message) {\n this.current().syntaxError = message;\n };\n return Tokenizer;\n }();\n function tokenize(input, options) {\n var tokenizer = new Tokenizer(new EntityParser(namedCharRefs), options);\n return tokenizer.tokenize(input);\n }\n});"],"names":[],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5OA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzkBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnjHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpyLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtoBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjwEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","file":"ember-template-compiler.js"}
|
|
1
|
+
{"version":3,"sources":["license.js","loader.js","@ember/-internals/browser-environment/index.js","@ember/-internals/environment/index.js","@ember/-internals/utils/index.js","@ember/canary-features/index.js","@ember/debug/container-debug-adapter.js","@ember/debug/data-adapter.js","@ember/debug/index.js","@ember/debug/lib/capture-render-tree.js","@ember/debug/lib/deprecate.js","@ember/debug/lib/handlers.js","@ember/debug/lib/inspect.js","@ember/debug/lib/testing.js","@ember/debug/lib/warn.js","@ember/deprecated-features/index.js","@glimmer/compiler.js","@glimmer/env.js","@glimmer/syntax.js","@glimmer/util.js","@glimmer/vm.js","@glimmer/wire-format.js","@handlebars/parser/index.js","ember-babel.js","ember-template-compiler/index.js","ember-template-compiler/lib/plugins/assert-against-attrs.js","ember-template-compiler/lib/plugins/assert-against-named-outlets.js","ember-template-compiler/lib/plugins/assert-input-helper-without-block.js","ember-template-compiler/lib/plugins/assert-reserved-named-arguments.js","ember-template-compiler/lib/plugins/assert-splattribute-expression.js","ember-template-compiler/lib/plugins/index.js","ember-template-compiler/lib/plugins/transform-action-syntax.js","ember-template-compiler/lib/plugins/transform-each-in-into-each.js","ember-template-compiler/lib/plugins/transform-each-track-array.js","ember-template-compiler/lib/plugins/transform-in-element.js","ember-template-compiler/lib/plugins/transform-quoted-bindings-into-just-bindings.js","ember-template-compiler/lib/plugins/transform-resolutions.js","ember-template-compiler/lib/plugins/transform-wrap-mount-and-outlet.js","ember-template-compiler/lib/plugins/utils.js","ember-template-compiler/lib/public-api.js","ember-template-compiler/lib/system/bootstrap.js","ember-template-compiler/lib/system/calculate-location-display.js","ember-template-compiler/lib/system/compile-options.js","ember-template-compiler/lib/system/compile.js","ember-template-compiler/lib/system/dasherize-component-name.js","ember-template-compiler/lib/system/initializer.js","ember-template-compiler/lib/system/precompile.js","ember-template-compiler/lib/types.js","ember-template-compiler/minimal.js","ember/version.js","simple-html-tokenizer.js"],"sourcesContent":["/*!\n * @overview Ember - JavaScript Application Framework\n * @copyright Copyright 2011 Tilde Inc. and contributors\n * Portions Copyright 2006-2011 Strobe Inc.\n * Portions Copyright 2008-2011 Apple Inc. All rights reserved.\n * @license Licensed under MIT license\n * See https://raw.github.com/emberjs/ember.js/master/LICENSE\n * @version 5.9.0-alpha.4\n */\n","/* eslint-disable no-var */\n/* globals global globalThis self */\n/* eslint-disable-next-line no-unused-vars */\nvar define, require;\n\n(function () {\n var globalObj =\n typeof globalThis !== 'undefined'\n ? globalThis\n : typeof self !== 'undefined'\n ? self\n : typeof window !== 'undefined'\n ? window\n : typeof global !== 'undefined'\n ? global\n : null;\n\n if (globalObj === null) {\n throw new Error('unable to locate global object');\n }\n\n if (typeof globalObj.define === 'function' && typeof globalObj.require === 'function') {\n define = globalObj.define;\n require = globalObj.require;\n\n return;\n }\n\n var registry = Object.create(null);\n var seen = Object.create(null);\n\n function missingModule(name, referrerName) {\n if (referrerName) {\n throw new Error('Could not find module ' + name + ' required by: ' + referrerName);\n } else {\n throw new Error('Could not find module ' + name);\n }\n }\n\n function internalRequire(_name, referrerName) {\n var name = _name;\n var mod = registry[name];\n\n if (!mod) {\n name = name + '/index';\n mod = registry[name];\n }\n\n var exports = seen[name];\n\n if (exports !== undefined) {\n return exports;\n }\n\n exports = seen[name] = {};\n\n if (!mod) {\n missingModule(_name, referrerName);\n }\n\n var deps = mod.deps;\n var callback = mod.callback;\n var reified = new Array(deps.length);\n\n for (var i = 0; i < deps.length; i++) {\n if (deps[i] === 'exports') {\n reified[i] = exports;\n } else if (deps[i] === 'require') {\n reified[i] = require;\n } else {\n reified[i] = require(deps[i], name);\n }\n }\n\n callback.apply(this, reified);\n\n return exports;\n }\n\n require = function (name) {\n return internalRequire(name, null);\n };\n\n define = function (name, deps, callback) {\n registry[name] = { deps: deps, callback: callback };\n };\n\n // setup `require` module\n require['default'] = require;\n\n require.has = function registryHas(moduleName) {\n return Boolean(registry[moduleName]) || Boolean(registry[moduleName + '/index']);\n };\n\n require._eak_seen = require.entries = registry;\n})();\n","define(\"@ember/-internals/browser-environment/index\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.window = _exports.userAgent = _exports.location = _exports.isFirefox = _exports.isChrome = _exports.history = _exports.hasDOM = void 0;\n // check if window exists and actually is the global\n var hasDom = _exports.hasDOM = typeof self === 'object' && self !== null && self.Object === Object && typeof Window !== 'undefined' && self.constructor === Window && typeof document === 'object' && document !== null && self.document === document && typeof location === 'object' && location !== null && self.location === location && typeof history === 'object' && history !== null && self.history === history && typeof navigator === 'object' && navigator !== null && self.navigator === navigator && typeof navigator.userAgent === 'string';\n const window = _exports.window = hasDom ? self : null;\n const location$1 = _exports.location = hasDom ? self.location : null;\n const history$1 = _exports.history = hasDom ? self.history : null;\n const userAgent = _exports.userAgent = hasDom ? self.navigator.userAgent : 'Lynx (textmode)';\n const isChrome = _exports.isChrome = hasDom ? typeof chrome === 'object' && !(typeof opera === 'object') : false;\n const isFirefox = _exports.isFirefox = hasDom ? /Firefox|FxiOS/.test(userAgent) : false;\n});","define(\"@ember/-internals/environment/index\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.context = _exports.ENV = void 0;\n _exports.getENV = getENV;\n _exports.getLookup = getLookup;\n _exports.global = void 0;\n _exports.setLookup = setLookup;\n // from lodash to catch fake globals\n function checkGlobal(value) {\n return value && value.Object === Object ? value : undefined;\n }\n // element ids can ruin global miss checks\n function checkElementIdShadowing(value) {\n return value && value.nodeType === undefined ? value : undefined;\n }\n // export real global\n var global$1 = _exports.global = checkGlobal(checkElementIdShadowing(typeof global === 'object' && global)) || checkGlobal(typeof self === 'object' && self) || checkGlobal(typeof window === 'object' && window) || typeof mainContext !== 'undefined' && mainContext ||\n // set before strict mode in Ember loader/wrapper\n new Function('return this')(); // eval outside of strict mode\n\n // legacy imports/exports/lookup stuff (should we keep this??)\n const context = _exports.context = function (global, Ember) {\n return Ember === undefined ? {\n imports: global,\n exports: global,\n lookup: global\n } : {\n // import jQuery\n imports: Ember.imports || global,\n // export Ember\n exports: Ember.exports || global,\n // search for Namespaces\n lookup: Ember.lookup || global\n };\n }(global$1, global$1.Ember);\n function getLookup() {\n return context.lookup;\n }\n function setLookup(value) {\n context.lookup = value;\n }\n\n /**\n The hash of environment variables used to control various configuration\n settings. To specify your own or override default settings, add the\n desired properties to a global hash named `EmberENV` (or `ENV` for\n backwards compatibility with earlier versions of Ember). The `EmberENV`\n hash must be created before loading Ember.\n \n @class EmberENV\n @type Object\n @public\n */\n const ENV = _exports.ENV = {\n ENABLE_OPTIONAL_FEATURES: false,\n /**\n Determines whether Ember should add to `Array`\n native object prototypes, a few extra methods in order to provide a more\n friendly API.\n We generally recommend leaving this option set to true however, if you need\n to turn it off, you can add the configuration property\n `EXTEND_PROTOTYPES` to `EmberENV` and set it to `false`.\n Note, when disabled (the default configuration for Ember Addons), you will\n instead have to access all methods and functions from the Ember\n namespace.\n @property EXTEND_PROTOTYPES\n @type Boolean\n @default true\n @for EmberENV\n @public\n */\n EXTEND_PROTOTYPES: {\n Array: true\n },\n /**\n The `LOG_STACKTRACE_ON_DEPRECATION` property, when true, tells Ember to log\n a full stack trace during deprecation warnings.\n @property LOG_STACKTRACE_ON_DEPRECATION\n @type Boolean\n @default true\n @for EmberENV\n @public\n */\n LOG_STACKTRACE_ON_DEPRECATION: true,\n /**\n The `LOG_VERSION` property, when true, tells Ember to log versions of all\n dependent libraries in use.\n @property LOG_VERSION\n @type Boolean\n @default true\n @for EmberENV\n @public\n */\n LOG_VERSION: true,\n RAISE_ON_DEPRECATION: false,\n STRUCTURED_PROFILE: false,\n /**\n Whether to insert a `<div class=\"ember-view\" />` wrapper around the\n application template. See RFC #280.\n This is not intended to be set directly, as the implementation may change in\n the future. Use `@ember/optional-features` instead.\n @property _APPLICATION_TEMPLATE_WRAPPER\n @for EmberENV\n @type Boolean\n @default true\n @private\n */\n _APPLICATION_TEMPLATE_WRAPPER: true,\n /**\n Whether to use Glimmer Component semantics (as opposed to the classic \"Curly\"\n components semantics) for template-only components. See RFC #278.\n This is not intended to be set directly, as the implementation may change in\n the future. Use `@ember/optional-features` instead.\n @property _TEMPLATE_ONLY_GLIMMER_COMPONENTS\n @for EmberENV\n @type Boolean\n @default false\n @private\n */\n _TEMPLATE_ONLY_GLIMMER_COMPONENTS: false,\n /**\n Whether to perform extra bookkeeping needed to make the `captureRenderTree`\n API work.\n This has to be set before the ember JavaScript code is evaluated. This is\n usually done by setting `window.EmberENV = { _DEBUG_RENDER_TREE: true };`\n before the \"vendor\" `<script>` tag in `index.html`.\n Setting the flag after Ember is already loaded will not work correctly. It\n may appear to work somewhat, but fundamentally broken.\n This is not intended to be set directly. Ember Inspector will enable the\n flag on behalf of the user as needed.\n This flag is always on in development mode.\n The flag is off by default in production mode, due to the cost associated\n with the the bookkeeping work.\n The expected flow is that Ember Inspector will ask the user to refresh the\n page after enabling the feature. It could also offer a feature where the\n user add some domains to the \"always on\" list. In either case, Ember\n Inspector will inject the code on the page to set the flag if needed.\n @property _DEBUG_RENDER_TREE\n @for EmberENV\n @type Boolean\n @default false\n @private\n */\n _DEBUG_RENDER_TREE: true /* DEBUG */,\n /**\n Whether to force all deprecations to be enabled. This is used internally by\n Ember to enable deprecations in tests. It is not intended to be set in\n projects.\n @property _ALL_DEPRECATIONS_ENABLED\n @for EmberENV\n @type Boolean\n @default false\n @private\n */\n _ALL_DEPRECATIONS_ENABLED: false,\n /**\n Override the version of ember-source used to determine when deprecations \"break\".\n This is used internally by Ember to test with deprecated features \"removed\".\n This is never intended to be set by projects.\n @property _OVERRIDE_DEPRECATION_VERSION\n @for EmberENV\n @type string | null\n @default null\n @private\n */\n _OVERRIDE_DEPRECATION_VERSION: null,\n /**\n Whether the app defaults to using async observers.\n This is not intended to be set directly, as the implementation may change in\n the future. Use `@ember/optional-features` instead.\n @property _DEFAULT_ASYNC_OBSERVERS\n @for EmberENV\n @type Boolean\n @default false\n @private\n */\n _DEFAULT_ASYNC_OBSERVERS: false,\n /**\n Whether the app still has default record-loading behavior in the model\n hook from RFC https://rfcs.emberjs.com/id/0774-implicit-record-route-loading\n This will also remove the default store property from the route.\n This is not intended to be set directly, as the implementation may change in\n the future. Use `@ember/optional-features` instead.\n @property _NO_IMPLICIT_ROUTE_MODEL\n @for EmberENV\n @type Boolean\n @default false\n @private\n */\n _NO_IMPLICIT_ROUTE_MODEL: false,\n /**\n Controls the maximum number of scheduled rerenders without \"settling\". In general,\n applications should not need to modify this environment variable, but please\n open an issue so that we can determine if a better default value is needed.\n @property _RERENDER_LOOP_LIMIT\n @for EmberENV\n @type number\n @default 1000\n @private\n */\n _RERENDER_LOOP_LIMIT: 1000,\n EMBER_LOAD_HOOKS: {},\n FEATURES: {}\n };\n (EmberENV => {\n if (typeof EmberENV !== 'object' || EmberENV === null) return;\n for (let flag in EmberENV) {\n if (!Object.prototype.hasOwnProperty.call(EmberENV, flag) || flag === 'EXTEND_PROTOTYPES' || flag === 'EMBER_LOAD_HOOKS') continue;\n let defaultValue = ENV[flag];\n if (defaultValue === true) {\n ENV[flag] = EmberENV[flag] !== false;\n } else if (defaultValue === false) {\n ENV[flag] = EmberENV[flag] === true;\n } else {\n ENV[flag] = EmberENV[flag];\n }\n }\n let {\n EXTEND_PROTOTYPES\n } = EmberENV;\n if (EXTEND_PROTOTYPES !== undefined) {\n if (typeof EXTEND_PROTOTYPES === 'object' && EXTEND_PROTOTYPES !== null) {\n ENV.EXTEND_PROTOTYPES.Array = EXTEND_PROTOTYPES.Array !== false;\n } else {\n ENV.EXTEND_PROTOTYPES.Array = EXTEND_PROTOTYPES !== false;\n }\n }\n // TODO this does not seem to be used by anything,\n // can we remove it? do we need to deprecate it?\n let {\n EMBER_LOAD_HOOKS\n } = EmberENV;\n if (typeof EMBER_LOAD_HOOKS === 'object' && EMBER_LOAD_HOOKS !== null) {\n for (let hookName in EMBER_LOAD_HOOKS) {\n if (!Object.prototype.hasOwnProperty.call(EMBER_LOAD_HOOKS, hookName)) continue;\n let hooks = EMBER_LOAD_HOOKS[hookName];\n if (Array.isArray(hooks)) {\n ENV.EMBER_LOAD_HOOKS[hookName] = hooks.filter(hook => typeof hook === 'function');\n }\n }\n }\n let {\n FEATURES\n } = EmberENV;\n if (typeof FEATURES === 'object' && FEATURES !== null) {\n for (let feature in FEATURES) {\n if (!Object.prototype.hasOwnProperty.call(FEATURES, feature)) continue;\n ENV.FEATURES[feature] = FEATURES[feature] === true;\n }\n }\n if (true /* DEBUG */) {\n ENV._DEBUG_RENDER_TREE = true;\n }\n })(global$1.EmberENV);\n function getENV() {\n return ENV;\n }\n});","define(\"@ember/-internals/utils/index\", [\"exports\", \"@ember/debug\"], function (_exports, _debug) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.ROOT = _exports.GUID_KEY = _exports.Cache = void 0;\n _exports.canInvoke = canInvoke;\n _exports.checkHasSuper = void 0;\n _exports.dictionary = makeDictionary;\n _exports.enumerableSymbol = enumerableSymbol;\n _exports.generateGuid = generateGuid;\n _exports.getDebugName = void 0;\n _exports.getName = getName;\n _exports.guidFor = guidFor;\n _exports.intern = intern;\n _exports.isInternalSymbol = isInternalSymbol;\n _exports.isObject = isObject;\n _exports.isProxy = isProxy;\n _exports.lookupDescriptor = lookupDescriptor;\n _exports.observerListenerMetaFor = observerListenerMetaFor;\n _exports.setListeners = setListeners;\n _exports.setName = setName;\n _exports.setObservers = setObservers;\n _exports.setProxy = setProxy;\n _exports.teardownMandatorySetter = _exports.symbol = _exports.setupMandatorySetter = _exports.setWithMandatorySetter = void 0;\n _exports.toString = toString;\n _exports.uuid = uuid;\n _exports.wrap = wrap;\n /**\n Strongly hint runtimes to intern the provided string.\n \n When do I need to use this function?\n \n For the most part, never. Pre-mature optimization is bad, and often the\n runtime does exactly what you need it to, and more often the trade-off isn't\n worth it.\n \n Why?\n \n Runtimes store strings in at least 2 different representations:\n Ropes and Symbols (interned strings). The Rope provides a memory efficient\n data-structure for strings created from concatenation or some other string\n manipulation like splitting.\n \n Unfortunately checking equality of different ropes can be quite costly as\n runtimes must resort to clever string comparison algorithms. These\n algorithms typically cost in proportion to the length of the string.\n Luckily, this is where the Symbols (interned strings) shine. As Symbols are\n unique by their string content, equality checks can be done by pointer\n comparison.\n \n How do I know if my string is a rope or symbol?\n \n Typically (warning general sweeping statement, but truthy in runtimes at\n present) static strings created as part of the JS source are interned.\n Strings often used for comparisons can be interned at runtime if some\n criteria are met. One of these criteria can be the size of the entire rope.\n For example, in chrome 38 a rope longer then 12 characters will not\n intern, nor will segments of that rope.\n \n Some numbers: http://jsperf.com/eval-vs-keys/8\n \n Known Trick™\n \n @private\n @return {String} interned version of the provided string\n */\n function intern(str) {\n let obj = Object.create(null);\n obj[str] = 1;\n for (let key in obj) {\n if (key === str) {\n return key;\n }\n }\n return str;\n }\n\n /**\n Returns whether Type(value) is Object.\n \n Useful for checking whether a value is a valid WeakMap key.\n \n Refs: https://tc39.github.io/ecma262/#sec-typeof-operator-runtime-semantics-evaluation\n https://tc39.github.io/ecma262/#sec-weakmap.prototype.set\n \n @private\n @function isObject\n */\n function isObject(value) {\n return value !== null && (typeof value === 'object' || typeof value === 'function');\n }\n\n /**\n @module @ember/object\n */\n /**\n @private\n @return {Number} the uuid\n */\n let _uuid = 0;\n /**\n Generates a universally unique identifier. This method\n is used internally by Ember for assisting with\n the generation of GUID's and other unique identifiers.\n \n @public\n @return {Number} [description]\n */\n function uuid() {\n return ++_uuid;\n }\n /**\n Prefix used for guids through out Ember.\n @private\n @property GUID_PREFIX\n @for Ember\n @type String\n @final\n */\n const GUID_PREFIX = 'ember';\n // Used for guid generation...\n const OBJECT_GUIDS = new WeakMap();\n const NON_OBJECT_GUIDS = new Map();\n /**\n A unique key used to assign guids and other private metadata to objects.\n If you inspect an object in your browser debugger you will often see these.\n They can be safely ignored.\n \n On browsers that support it, these properties are added with enumeration\n disabled so they won't show up when you iterate over your properties.\n \n @private\n @property GUID_KEY\n @for Ember\n @type String\n @final\n */\n const GUID_KEY = _exports.GUID_KEY = intern(\"__ember\" + Date.now());\n /**\n Generates a new guid, optionally saving the guid to the object that you\n pass in. You will rarely need to use this method. Instead you should\n call `guidFor(obj)`, which return an existing guid if available.\n \n @private\n @method generateGuid\n @static\n @for @ember/object/internals\n @param {Object} [obj] Object the guid will be used for. If passed in, the guid will\n be saved on the object and reused whenever you pass the same object\n again.\n \n If no object is passed, just generate a new guid.\n @param {String} [prefix] Prefix to place in front of the guid. Useful when you want to\n separate the guid into separate namespaces.\n @return {String} the guid\n */\n function generateGuid(obj, prefix) {\n if (prefix === void 0) {\n prefix = GUID_PREFIX;\n }\n let guid = prefix + uuid().toString();\n if (isObject(obj)) {\n OBJECT_GUIDS.set(obj, guid);\n }\n return guid;\n }\n /**\n Returns a unique id for the object. If the object does not yet have a guid,\n one will be assigned to it. You can call this on any object,\n `EmberObject`-based or not.\n \n You can also use this method on DOM Element objects.\n \n @public\n @static\n @method guidFor\n @for @ember/object/internals\n @param {Object} obj any object, string, number, Element, or primitive\n @return {String} the unique guid for this instance.\n */\n function guidFor(value) {\n let guid;\n if (isObject(value)) {\n guid = OBJECT_GUIDS.get(value);\n if (guid === undefined) {\n guid = \"\" + GUID_PREFIX + uuid();\n OBJECT_GUIDS.set(value, guid);\n }\n } else {\n guid = NON_OBJECT_GUIDS.get(value);\n if (guid === undefined) {\n let type = typeof value;\n if (type === 'string') {\n guid = \"st\" + uuid();\n } else if (type === 'number') {\n guid = \"nu\" + uuid();\n } else if (type === 'symbol') {\n guid = \"sy\" + uuid();\n } else {\n guid = \"(\" + value + \")\";\n }\n NON_OBJECT_GUIDS.set(value, guid);\n }\n }\n return guid;\n }\n const GENERATED_SYMBOLS = [];\n function isInternalSymbol(possibleSymbol) {\n return GENERATED_SYMBOLS.indexOf(possibleSymbol) !== -1;\n }\n // Some legacy symbols still need to be enumerable for a variety of reasons.\n // This code exists for that, and as a fallback in IE11. In general, prefer\n // `symbol` below when creating a new symbol.\n function enumerableSymbol(debugName) {\n // TODO: Investigate using platform symbols, but we do not\n // want to require non-enumerability for this API, which\n // would introduce a large cost.\n let id = GUID_KEY + Math.floor(Math.random() * Date.now()).toString();\n let symbol = intern(\"__\" + debugName + id + \"__\");\n if (true /* DEBUG */) {\n GENERATED_SYMBOLS.push(symbol);\n }\n return symbol;\n }\n const symbol = _exports.symbol = Symbol;\n\n // the delete is meant to hint at runtimes that this object should remain in\n // dictionary mode. This is clearly a runtime specific hack, but currently it\n // appears worthwhile in some usecases. Please note, these deletes do increase\n // the cost of creation dramatically over a plain Object.create. And as this\n // only makes sense for long-lived dictionaries that aren't instantiated often.\n function makeDictionary(parent) {\n let dict = Object.create(parent);\n dict['_dict'] = null;\n delete dict['_dict'];\n return dict;\n }\n let getDebugName;\n if (true /* DEBUG */) {\n let getFunctionName = fn => {\n let functionName = fn.name;\n if (functionName === undefined) {\n let match = Function.prototype.toString.call(fn).match(/function (\\w+)\\s*\\(/);\n functionName = match && match[1] || '';\n }\n return functionName.replace(/^bound /, '');\n };\n let getObjectName = obj => {\n let name;\n let className;\n if (obj.constructor && obj.constructor !== Object) {\n className = getFunctionName(obj.constructor);\n }\n if ('toString' in obj && obj.toString !== Object.prototype.toString && obj.toString !== Function.prototype.toString) {\n name = obj.toString();\n }\n // If the class has a decent looking name, and the `toString` is one of the\n // default Ember toStrings, replace the constructor portion of the toString\n // with the class name. We check the length of the class name to prevent doing\n // this when the value is minified.\n if (name && name.match(/<.*:ember\\d+>/) && className && className[0] !== '_' && className.length > 2 && className !== 'Class') {\n return name.replace(/<.*:/, \"<\" + className + \":\");\n }\n return name || className;\n };\n let getPrimitiveName = value => {\n return String(value);\n };\n getDebugName = value => {\n if (typeof value === 'function') {\n return getFunctionName(value) || \"(unknown function)\";\n } else if (typeof value === 'object' && value !== null) {\n return getObjectName(value) || \"(unknown object)\";\n } else {\n return getPrimitiveName(value);\n }\n };\n }\n var getDebugName$1 = _exports.getDebugName = getDebugName;\n const HAS_SUPER_PATTERN = /\\.(_super|call\\(this|apply\\(this)/;\n const fnToString = Function.prototype.toString;\n const checkHasSuper = _exports.checkHasSuper = (() => {\n let sourceAvailable = fnToString.call(function () {\n return this;\n }).indexOf('return this') > -1;\n if (sourceAvailable) {\n return function checkHasSuper(func) {\n return HAS_SUPER_PATTERN.test(fnToString.call(func));\n };\n }\n return function checkHasSuper() {\n return true;\n };\n })();\n const HAS_SUPER_MAP = new WeakMap();\n const ROOT = _exports.ROOT = Object.freeze(function () {});\n HAS_SUPER_MAP.set(ROOT, false);\n function hasSuper(func) {\n let hasSuper = HAS_SUPER_MAP.get(func);\n if (hasSuper === undefined) {\n hasSuper = checkHasSuper(func);\n HAS_SUPER_MAP.set(func, hasSuper);\n }\n return hasSuper;\n }\n class ObserverListenerMeta {\n constructor() {\n this.listeners = undefined;\n this.observers = undefined;\n }\n }\n const OBSERVERS_LISTENERS_MAP = new WeakMap();\n function createObserverListenerMetaFor(fn) {\n let meta = OBSERVERS_LISTENERS_MAP.get(fn);\n if (meta === undefined) {\n meta = new ObserverListenerMeta();\n OBSERVERS_LISTENERS_MAP.set(fn, meta);\n }\n return meta;\n }\n function observerListenerMetaFor(fn) {\n return OBSERVERS_LISTENERS_MAP.get(fn);\n }\n function setObservers(func, observers) {\n let meta = createObserverListenerMetaFor(func);\n meta.observers = observers;\n }\n function setListeners(func, listeners) {\n let meta = createObserverListenerMetaFor(func);\n meta.listeners = listeners;\n }\n const IS_WRAPPED_FUNCTION_SET = new WeakSet();\n /**\n Wraps the passed function so that `this._super` will point to the superFunc\n when the function is invoked. This is the primitive we use to implement\n calls to super.\n \n @private\n @method wrap\n @for Ember\n @param {Function} func The function to call\n @param {Function} superFunc The super function.\n @return {Function} wrapped function.\n */\n function wrap(func, superFunc) {\n if (!hasSuper(func)) {\n return func;\n }\n // ensure an unwrapped super that calls _super is wrapped with a terminal _super\n if (!IS_WRAPPED_FUNCTION_SET.has(superFunc) && hasSuper(superFunc)) {\n return _wrap(func, _wrap(superFunc, ROOT));\n }\n return _wrap(func, superFunc);\n }\n function _wrap(func, superFunc) {\n function superWrapper() {\n let orig = this._super;\n this._super = superFunc;\n let ret = func.apply(this, arguments);\n this._super = orig;\n return ret;\n }\n IS_WRAPPED_FUNCTION_SET.add(superWrapper);\n let meta = OBSERVERS_LISTENERS_MAP.get(func);\n if (meta !== undefined) {\n OBSERVERS_LISTENERS_MAP.set(superWrapper, meta);\n }\n return superWrapper;\n }\n function lookupDescriptor(obj, keyName) {\n let current = obj;\n do {\n let descriptor = Object.getOwnPropertyDescriptor(current, keyName);\n if (descriptor !== undefined) {\n return descriptor;\n }\n current = Object.getPrototypeOf(current);\n } while (current !== null);\n return null;\n }\n\n /**\n Checks to see if the `methodName` exists on the `obj`.\n \n ```javascript\n let foo = { bar: function() { return 'bar'; }, baz: null };\n \n Ember.canInvoke(foo, 'bar'); // true\n Ember.canInvoke(foo, 'baz'); // false\n Ember.canInvoke(foo, 'bat'); // false\n ```\n \n @method canInvoke\n @for Ember\n @param {Object} obj The object to check for the method\n @param {String} methodName The method name to check for\n @return {Boolean}\n @private\n */\n function canInvoke(obj, methodName) {\n return obj != null && typeof obj[methodName] === 'function';\n }\n /**\n @module @ember/utils\n */\n\n const NAMES = new WeakMap();\n function setName(obj, name) {\n if (isObject(obj)) NAMES.set(obj, name);\n }\n function getName(obj) {\n return NAMES.get(obj);\n }\n const objectToString = Object.prototype.toString;\n function isNone(obj) {\n return obj === null || obj === undefined;\n }\n /*\n A `toString` util function that supports objects without a `toString`\n method, e.g. an object created with `Object.create(null)`.\n */\n function toString(obj) {\n if (typeof obj === 'string') {\n return obj;\n }\n if (null === obj) return 'null';\n if (undefined === obj) return 'undefined';\n if (Array.isArray(obj)) {\n // Reimplement Array.prototype.join according to spec (22.1.3.13)\n // Changing ToString(element) with this safe version of ToString.\n let r = '';\n for (let k = 0; k < obj.length; k++) {\n if (k > 0) {\n r += ',';\n }\n if (!isNone(obj[k])) {\n r += toString(obj[k]);\n }\n }\n return r;\n }\n if (typeof obj.toString === 'function') {\n return obj.toString();\n }\n return objectToString.call(obj);\n }\n const PROXIES = new WeakSet();\n function isProxy(value) {\n if (isObject(value)) {\n return PROXIES.has(value);\n }\n return false;\n }\n function setProxy(object) {\n if (isObject(object)) {\n PROXIES.add(object);\n }\n }\n class Cache {\n constructor(limit, func, store) {\n if (store === void 0) {\n store = new Map();\n }\n this.limit = limit;\n this.func = func;\n this.store = store;\n this.size = 0;\n this.misses = 0;\n this.hits = 0;\n }\n get(key) {\n if (this.store.has(key)) {\n this.hits++;\n // SAFETY: we know the value is present because `.has(key)` was `true`.\n return this.store.get(key);\n } else {\n this.misses++;\n return this.set(key, this.func(key));\n }\n }\n set(key, value) {\n if (this.limit > this.size) {\n this.size++;\n this.store.set(key, value);\n }\n return value;\n }\n purge() {\n this.store.clear();\n this.size = 0;\n this.hits = 0;\n this.misses = 0;\n }\n }\n _exports.Cache = Cache;\n let setupMandatorySetter = _exports.setupMandatorySetter = void 0;\n let teardownMandatorySetter = _exports.teardownMandatorySetter = void 0;\n let setWithMandatorySetter = _exports.setWithMandatorySetter = void 0;\n function isElementKey(key) {\n return typeof key === 'number' ? isPositiveInt(key) : isStringInt(key);\n }\n function isStringInt(str) {\n let num = parseInt(str, 10);\n return isPositiveInt(num) && str === String(num);\n }\n function isPositiveInt(num) {\n return num >= 0 && num % 1 === 0;\n }\n if (true /* DEBUG */) {\n let SEEN_TAGS = new WeakSet();\n let MANDATORY_SETTERS = new WeakMap();\n let propertyIsEnumerable = function (obj, key) {\n return Object.prototype.propertyIsEnumerable.call(obj, key);\n };\n _exports.setupMandatorySetter = setupMandatorySetter = function (tag, obj, keyName) {\n if (SEEN_TAGS.has(tag)) {\n return;\n }\n SEEN_TAGS.add(tag);\n if (Array.isArray(obj) && isElementKey(keyName)) {\n return;\n }\n let desc = lookupDescriptor(obj, keyName) || {};\n if (desc.get || desc.set) {\n // if it has a getter or setter, we can't install the mandatory setter.\n // native setters are allowed, we have to assume that they will resolve\n // to tracked properties.\n return;\n }\n if (desc && (!desc.configurable || !desc.writable)) {\n // if it isn't writable anyways, so we shouldn't provide the setter.\n // if it isn't configurable, we can't overwrite it anyways.\n return;\n }\n let setters = MANDATORY_SETTERS.get(obj);\n if (setters === undefined) {\n setters = {};\n MANDATORY_SETTERS.set(obj, setters);\n }\n desc.hadOwnProperty = Object.hasOwnProperty.call(obj, keyName);\n setters[keyName] = desc;\n Object.defineProperty(obj, keyName, {\n configurable: true,\n enumerable: propertyIsEnumerable(obj, keyName),\n get() {\n if (desc.get) {\n return desc.get.call(this);\n } else {\n return desc.value;\n }\n },\n set(value) {\n (true && !(false) && (0, _debug.assert)(\"You attempted to update \" + this + \".\" + String(keyName) + \" to \\\"\" + String(value) + \"\\\", but it is being tracked by a tracking context, such as a template, computed property, or observer. In order to make sure the context updates properly, you must invalidate the property when updating it. You can mark the property as `@tracked`, or use `@ember/object#set` to do this.\"));\n }\n });\n };\n _exports.teardownMandatorySetter = teardownMandatorySetter = function (obj, keyName) {\n let setters = MANDATORY_SETTERS.get(obj);\n if (setters !== undefined && setters[keyName] !== undefined) {\n Object.defineProperty(obj, keyName, setters[keyName]);\n delete setters[keyName];\n }\n };\n _exports.setWithMandatorySetter = setWithMandatorySetter = function (obj, keyName, value) {\n let setters = MANDATORY_SETTERS.get(obj);\n if (setters !== undefined && setters[keyName] !== undefined) {\n let setter = setters[keyName];\n if (setter.set) {\n setter.set.call(obj, value);\n } else {\n setter.value = value;\n // If the object didn't have own property before, it would have changed\n // the enumerability after setting the value the first time.\n if (!setter.hadOwnProperty) {\n let desc = lookupDescriptor(obj, keyName);\n desc.enumerable = true;\n Object.defineProperty(obj, keyName, desc);\n }\n }\n } else {\n obj[keyName] = value;\n }\n };\n }\n});","define(\"@ember/canary-features/index\", [\"exports\", \"@ember/-internals/environment\"], function (_exports, _environment) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.FEATURES = _exports.DEFAULT_FEATURES = void 0;\n _exports.isEnabled = isEnabled;\n /**\n Set `EmberENV.FEATURES` in your application's `config/environment.js` file\n to enable canary features in your application.\n \n See the [feature flag guide](https://guides.emberjs.com/release/configuring-ember/feature-flags/)\n for more details.\n \n @module @ember/canary-features\n @public\n */\n const DEFAULT_FEATURES = _exports.DEFAULT_FEATURES = {\n // FLAG_NAME: true/false\n };\n /**\n The hash of enabled Canary features. Add to this, any canary features\n before creating your application.\n \n @class FEATURES\n @static\n @since 1.1.0\n @public\n */\n const FEATURES = _exports.FEATURES = Object.assign(DEFAULT_FEATURES, _environment.ENV.FEATURES);\n /**\n Determine whether the specified `feature` is enabled. Used by Ember's\n build tools to exclude experimental features from beta/stable builds.\n \n You can define the following configuration options:\n \n * `EmberENV.ENABLE_OPTIONAL_FEATURES` - enable any features that have not been explicitly\n enabled/disabled.\n \n @method isEnabled\n @param {String} feature The feature to check\n @return {Boolean}\n @since 1.1.0\n @public\n */\n function isEnabled(feature) {\n let value = FEATURES[feature];\n if (value === true || value === false) {\n return value;\n } else if (_environment.ENV.ENABLE_OPTIONAL_FEATURES) {\n return true;\n } else {\n return false;\n }\n }\n // Uncomment the below when features are present:\n // function featureValue(value: null | boolean) {\n // if (ENV.ENABLE_OPTIONAL_FEATURES && value === null) {\n // return true;\n // }\n // return value;\n // }\n // export const FLAG_NAME = featureValue(FEATURES.FLAG_NAME);\n});","define(\"@ember/debug/container-debug-adapter\", [\"exports\", \"@ember/-internals/string\", \"@ember/object\", \"@ember/utils\", \"@ember/-internals/owner\", \"@ember/application/namespace\"], function (_exports, _string, _object, _utils, _owner, _namespace) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n /**\n @module @ember/debug/container-debug-adapter\n */\n /**\n The `ContainerDebugAdapter` helps the container and resolver interface\n with tools that debug Ember such as the\n [Ember Inspector](https://github.com/emberjs/ember-inspector)\n for Chrome and Firefox.\n \n This class can be extended by a custom resolver implementer\n to override some of the methods with library-specific code.\n \n The methods likely to be overridden are:\n \n * `canCatalogEntriesByType`\n * `catalogEntriesByType`\n \n The adapter will need to be registered\n in the application's container as `container-debug-adapter:main`.\n \n Example:\n \n ```javascript\n Application.initializer({\n name: \"containerDebugAdapter\",\n \n initialize(application) {\n application.register('container-debug-adapter:main', require('app/container-debug-adapter'));\n }\n });\n ```\n \n @class ContainerDebugAdapter\n @extends EmberObject\n @since 1.5.0\n @public\n */\n class ContainerDebugAdapter extends _object.default {\n constructor(owner) {\n super(owner);\n this.resolver = (0, _owner.getOwner)(this).lookup('resolver-for-debugging:main');\n }\n /**\n Returns true if it is possible to catalog a list of available\n classes in the resolver for a given type.\n @method canCatalogEntriesByType\n @param {String} type The type. e.g. \"model\", \"controller\", \"route\".\n @return {boolean} whether a list is available for this type.\n @public\n */\n canCatalogEntriesByType(type) {\n if (type === 'model' || type === 'template') {\n return false;\n }\n return true;\n }\n /**\n Returns the available classes a given type.\n @method catalogEntriesByType\n @param {String} type The type. e.g. \"model\", \"controller\", \"route\".\n @return {Array} An array of strings.\n @public\n */\n catalogEntriesByType(type) {\n let namespaces = _namespace.default.NAMESPACES;\n let types = [];\n let typeSuffixRegex = new RegExp((0, _string.classify)(type) + \"$\");\n namespaces.forEach(namespace => {\n for (let key in namespace) {\n if (!Object.prototype.hasOwnProperty.call(namespace, key)) {\n continue;\n }\n if (typeSuffixRegex.test(key)) {\n let klass = namespace[key];\n if ((0, _utils.typeOf)(klass) === 'class') {\n types.push((0, _string.dasherize)(key.replace(typeSuffixRegex, '')));\n }\n }\n }\n });\n return types;\n }\n }\n _exports.default = ContainerDebugAdapter;\n});","define(\"@ember/debug/data-adapter\", [\"exports\", \"@ember/-internals/owner\", \"@ember/runloop\", \"@ember/object\", \"@ember/-internals/string\", \"@ember/application/namespace\", \"@ember/array\", \"@glimmer/validator\", \"@ember/debug\"], function (_exports, _owner, _runloop, _object, _string, _namespace, _array, _validator, _debug) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n function iterate(arr, fn) {\n if (Symbol.iterator in arr) {\n for (let item of arr) {\n fn(item);\n }\n } else {\n // SAFETY: this cast required to work this way to interop between TS 4.8\n // and 4.9. When we drop support for 4.8, it will narrow correctly via the\n // use of the `in` operator above. (Preferably we will solve this by just\n // switching to require `Symbol.iterator` instead.)\n (0, _debug.assert)('', typeof arr.forEach === 'function');\n arr.forEach(fn);\n }\n }\n class RecordsWatcher {\n getCacheForItem(record) {\n let recordCache = this.recordCaches.get(record);\n if (!recordCache) {\n let hasBeenAdded = false;\n recordCache = (0, _validator.createCache)(() => {\n if (!hasBeenAdded) {\n this.added.push(this.wrapRecord(record));\n hasBeenAdded = true;\n } else {\n this.updated.push(this.wrapRecord(record));\n }\n });\n this.recordCaches.set(record, recordCache);\n }\n return recordCache;\n }\n constructor(records, recordsAdded, recordsUpdated, recordsRemoved, wrapRecord, release) {\n this.wrapRecord = wrapRecord;\n this.release = release;\n this.recordCaches = new Map();\n this.added = [];\n this.updated = [];\n this.removed = [];\n this.recordArrayCache = (0, _validator.createCache)(() => {\n let seen = new Set();\n // Track `[]` for legacy support\n (0, _validator.consumeTag)((0, _validator.tagFor)(records, '[]'));\n iterate(records, record => {\n (0, _validator.getValue)(this.getCacheForItem(record));\n seen.add(record);\n });\n // Untrack this operation because these records are being removed, they\n // should not be polled again in the future\n (0, _validator.untrack)(() => {\n this.recordCaches.forEach((_cache, record) => {\n if (!seen.has(record)) {\n this.removed.push(wrapRecord(record));\n this.recordCaches.delete(record);\n }\n });\n });\n if (this.added.length > 0) {\n recordsAdded(this.added);\n this.added = [];\n }\n if (this.updated.length > 0) {\n recordsUpdated(this.updated);\n this.updated = [];\n }\n if (this.removed.length > 0) {\n recordsRemoved(this.removed);\n this.removed = [];\n }\n });\n }\n revalidate() {\n (0, _validator.getValue)(this.recordArrayCache);\n }\n }\n class TypeWatcher {\n constructor(records, onChange, release) {\n this.release = release;\n let hasBeenAccessed = false;\n this.cache = (0, _validator.createCache)(() => {\n // Empty iteration, we're doing this just\n // to track changes to the records array\n iterate(records, () => {});\n // Also track `[]` for legacy support\n (0, _validator.consumeTag)((0, _validator.tagFor)(records, '[]'));\n if (hasBeenAccessed === true) {\n (0, _runloop.next)(onChange);\n } else {\n hasBeenAccessed = true;\n }\n });\n this.release = release;\n }\n revalidate() {\n (0, _validator.getValue)(this.cache);\n }\n }\n /**\n The `DataAdapter` helps a data persistence library\n interface with tools that debug Ember such\n as the [Ember Inspector](https://github.com/emberjs/ember-inspector)\n for Chrome and Firefox.\n \n This class will be extended by a persistence library\n which will override some of the methods with\n library-specific code.\n \n The methods likely to be overridden are:\n \n * `getFilters`\n * `detect`\n * `columnsForType`\n * `getRecords`\n * `getRecordColumnValues`\n * `getRecordKeywords`\n * `getRecordFilterValues`\n * `getRecordColor`\n \n The adapter will need to be registered\n in the application's container as `dataAdapter:main`.\n \n Example:\n \n ```javascript\n Application.initializer({\n name: \"data-adapter\",\n \n initialize: function(application) {\n application.register('data-adapter:main', DS.DataAdapter);\n }\n });\n ```\n \n @class DataAdapter\n @extends EmberObject\n @public\n */\n class DataAdapter extends _object.default {\n constructor(owner) {\n super(owner);\n this.releaseMethods = (0, _array.A)();\n this.recordsWatchers = new Map();\n this.typeWatchers = new Map();\n this.flushWatchers = null;\n /**\n The container-debug-adapter which is used\n to list all models.\n @property containerDebugAdapter\n @default undefined\n @since 1.5.0\n @public\n **/\n /**\n The number of attributes to send\n as columns. (Enough to make the record\n identifiable).\n @private\n @property attributeLimit\n @default 3\n @since 1.3.0\n */\n this.attributeLimit = 3;\n /**\n Ember Data > v1.0.0-beta.18\n requires string model names to be passed\n around instead of the actual factories.\n This is a stamp for the Ember Inspector\n to differentiate between the versions\n to be able to support older versions too.\n @public\n @property acceptsModelName\n */\n this.acceptsModelName = true;\n this.containerDebugAdapter = (0, _owner.getOwner)(this).lookup('container-debug-adapter:main');\n }\n /**\n Map from records arrays to RecordsWatcher instances\n @private\n @property recordsWatchers\n @since 3.26.0\n */\n /**\n Map from records arrays to TypeWatcher instances\n @private\n @property typeWatchers\n @since 3.26.0\n */\n /**\n Callback that is currently scheduled on backburner end to flush and check\n all active watchers.\n @private\n @property flushWatchers\n @since 3.26.0\n */\n /**\n Stores all methods that clear observers.\n These methods will be called on destruction.\n @private\n @property releaseMethods\n @since 1.3.0\n */\n /**\n Specifies how records can be filtered.\n Records returned will need to have a `filterValues`\n property with a key for every name in the returned array.\n @public\n @method getFilters\n @return {Array} List of objects defining filters.\n The object should have a `name` and `desc` property.\n */\n getFilters() {\n return (0, _array.A)();\n }\n /**\n Fetch the model types and observe them for changes.\n @public\n @method watchModelTypes\n @param {Function} typesAdded Callback to call to add types.\n Takes an array of objects containing wrapped types (returned from `wrapModelType`).\n @param {Function} typesUpdated Callback to call when a type has changed.\n Takes an array of objects containing wrapped types.\n @return {Function} Method to call to remove all observers\n */\n watchModelTypes(typesAdded, typesUpdated) {\n let modelTypes = this.getModelTypes();\n let releaseMethods = (0, _array.A)();\n let typesToSend;\n typesToSend = modelTypes.map(type => {\n let klass = type.klass;\n let wrapped = this.wrapModelType(klass, type.name);\n releaseMethods.push(this.observeModelType(type.name, typesUpdated));\n return wrapped;\n });\n typesAdded(typesToSend);\n let release = () => {\n releaseMethods.forEach(fn => fn());\n this.releaseMethods.removeObject(release);\n };\n this.releaseMethods.pushObject(release);\n return release;\n }\n _nameToClass(type) {\n if (typeof type === 'string') {\n let owner = (0, _owner.getOwner)(this);\n let Factory = owner.factoryFor(\"model:\" + type);\n type = Factory && Factory.class;\n }\n return type;\n }\n /**\n Fetch the records of a given type and observe them for changes.\n @public\n @method watchRecords\n @param {String} modelName The model name.\n @param {Function} recordsAdded Callback to call to add records.\n Takes an array of objects containing wrapped records.\n The object should have the following properties:\n columnValues: {Object} The key and value of a table cell.\n object: {Object} The actual record object.\n @param {Function} recordsUpdated Callback to call when a record has changed.\n Takes an array of objects containing wrapped records.\n @param {Function} recordsRemoved Callback to call when a record has removed.\n Takes an array of objects containing wrapped records.\n @return {Function} Method to call to remove all observers.\n */\n watchRecords(modelName, recordsAdded, recordsUpdated, recordsRemoved) {\n let klass = this._nameToClass(modelName);\n let records = this.getRecords(klass, modelName);\n let {\n recordsWatchers\n } = this;\n let recordsWatcher = recordsWatchers.get(records);\n if (!recordsWatcher) {\n recordsWatcher = new RecordsWatcher(records, recordsAdded, recordsUpdated, recordsRemoved, record => this.wrapRecord(record), () => {\n recordsWatchers.delete(records);\n this.updateFlushWatchers();\n });\n recordsWatchers.set(records, recordsWatcher);\n this.updateFlushWatchers();\n recordsWatcher.revalidate();\n }\n return recordsWatcher.release;\n }\n updateFlushWatchers() {\n if (this.flushWatchers === null) {\n if (this.typeWatchers.size > 0 || this.recordsWatchers.size > 0) {\n this.flushWatchers = () => {\n this.typeWatchers.forEach(watcher => watcher.revalidate());\n this.recordsWatchers.forEach(watcher => watcher.revalidate());\n };\n _runloop._backburner.on('end', this.flushWatchers);\n }\n } else if (this.typeWatchers.size === 0 && this.recordsWatchers.size === 0) {\n _runloop._backburner.off('end', this.flushWatchers);\n this.flushWatchers = null;\n }\n }\n /**\n Clear all observers before destruction\n @private\n @method willDestroy\n */\n willDestroy() {\n this._super(...arguments);\n this.typeWatchers.forEach(watcher => watcher.release());\n this.recordsWatchers.forEach(watcher => watcher.release());\n this.releaseMethods.forEach(fn => fn());\n if (this.flushWatchers) {\n _runloop._backburner.off('end', this.flushWatchers);\n }\n }\n /**\n Detect whether a class is a model.\n Test that against the model class\n of your persistence library.\n @public\n @method detect\n @return boolean Whether the class is a model class or not.\n */\n detect(_klass) {\n return false;\n }\n /**\n Get the columns for a given model type.\n @public\n @method columnsForType\n @return {Array} An array of columns of the following format:\n name: {String} The name of the column.\n desc: {String} Humanized description (what would show in a table column name).\n */\n columnsForType(_klass) {\n return (0, _array.A)();\n }\n /**\n Adds observers to a model type class.\n @private\n @method observeModelType\n @param {String} modelName The model type name.\n @param {Function} typesUpdated Called when a type is modified.\n @return {Function} The function to call to remove observers.\n */\n observeModelType(modelName, typesUpdated) {\n let klass = this._nameToClass(modelName);\n let records = this.getRecords(klass, modelName);\n let onChange = () => {\n typesUpdated([this.wrapModelType(klass, modelName)]);\n };\n let {\n typeWatchers\n } = this;\n let typeWatcher = typeWatchers.get(records);\n if (!typeWatcher) {\n typeWatcher = new TypeWatcher(records, onChange, () => {\n typeWatchers.delete(records);\n this.updateFlushWatchers();\n });\n typeWatchers.set(records, typeWatcher);\n this.updateFlushWatchers();\n typeWatcher.revalidate();\n }\n return typeWatcher.release;\n }\n /**\n Wraps a given model type and observes changes to it.\n @private\n @method wrapModelType\n @param {Class} klass A model class.\n @param {String} modelName Name of the class.\n @return {Object} The wrapped type has the following format:\n name: {String} The name of the type.\n count: {Integer} The number of records available.\n columns: {Columns} An array of columns to describe the record.\n object: {Class} The actual Model type class.\n */\n wrapModelType(klass, name) {\n let records = this.getRecords(klass, name);\n return {\n name,\n count: (0, _object.get)(records, 'length'),\n columns: this.columnsForType(klass),\n object: klass\n };\n }\n /**\n Fetches all models defined in the application.\n @private\n @method getModelTypes\n @return {Array} Array of model types.\n */\n getModelTypes() {\n let containerDebugAdapter = this.containerDebugAdapter;\n let stringTypes = containerDebugAdapter.canCatalogEntriesByType('model') ? containerDebugAdapter.catalogEntriesByType('model') : this._getObjectsOnNamespaces();\n // New adapters return strings instead of classes.\n let klassTypes = stringTypes.map(name => {\n return {\n klass: this._nameToClass(name),\n name\n };\n });\n return klassTypes.filter(type => this.detect(type.klass));\n }\n /**\n Loops over all namespaces and all objects\n attached to them.\n @private\n @method _getObjectsOnNamespaces\n @return {Array} Array of model type strings.\n */\n _getObjectsOnNamespaces() {\n let namespaces = _namespace.default.NAMESPACES;\n let types = [];\n namespaces.forEach(namespace => {\n for (let key in namespace) {\n if (!Object.prototype.hasOwnProperty.call(namespace, key)) {\n continue;\n }\n // Even though we will filter again in `getModelTypes`,\n // we should not call `lookupFactory` on non-models\n if (!this.detect(namespace[key])) {\n continue;\n }\n let name = (0, _string.dasherize)(key);\n types.push(name);\n }\n });\n return types;\n }\n /**\n Fetches all loaded records for a given type.\n @public\n @method getRecords\n @return {Array} An array of records.\n This array will be observed for changes,\n so it should update when new records are added/removed.\n */\n getRecords(_klass, _name) {\n return (0, _array.A)();\n }\n /**\n Wraps a record and observers changes to it.\n @private\n @method wrapRecord\n @param {Object} record The record instance.\n @return {Object} The wrapped record. Format:\n columnValues: {Array}\n searchKeywords: {Array}\n */\n wrapRecord(record) {\n return {\n object: record,\n columnValues: this.getRecordColumnValues(record),\n searchKeywords: this.getRecordKeywords(record),\n filterValues: this.getRecordFilterValues(record),\n color: this.getRecordColor(record)\n };\n }\n /**\n Gets the values for each column.\n @public\n @method getRecordColumnValues\n @return {Object} Keys should match column names defined\n by the model type.\n */\n getRecordColumnValues(_record) {\n return {};\n }\n /**\n Returns keywords to match when searching records.\n @public\n @method getRecordKeywords\n @return {Array} Relevant keywords for search.\n */\n getRecordKeywords(_record) {\n return (0, _array.A)();\n }\n /**\n Returns the values of filters defined by `getFilters`.\n @public\n @method getRecordFilterValues\n @param {Object} record The record instance.\n @return {Object} The filter values.\n */\n getRecordFilterValues(_record) {\n return {};\n }\n /**\n Each record can have a color that represents its state.\n @public\n @method getRecordColor\n @param {Object} record The record instance\n @return {String} The records color.\n Possible options: black, red, blue, green.\n */\n getRecordColor(_record) {\n return null;\n }\n }\n _exports.default = DataAdapter;\n});","define(\"@ember/debug/index\", [\"exports\", \"@ember/-internals/browser-environment\", \"@ember/debug/lib/deprecate\", \"@ember/debug/lib/testing\", \"@ember/debug/lib/warn\", \"@ember/debug/lib/inspect\", \"@ember/debug/lib/capture-render-tree\"], function (_exports, _browserEnvironment, _deprecate2, _testing, _warn2, _inspect, _captureRenderTree) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.assert = _exports._warnIfUsingStrippedFeatureFlags = void 0;\n Object.defineProperty(_exports, \"captureRenderTree\", {\n enumerable: true,\n get: function () {\n return _captureRenderTree.default;\n }\n });\n _exports.info = _exports.getDebugFunction = _exports.deprecateFunc = _exports.deprecate = _exports.debugSeal = _exports.debugFreeze = _exports.debug = void 0;\n Object.defineProperty(_exports, \"inspect\", {\n enumerable: true,\n get: function () {\n return _inspect.default;\n }\n });\n Object.defineProperty(_exports, \"isTesting\", {\n enumerable: true,\n get: function () {\n return _testing.isTesting;\n }\n });\n Object.defineProperty(_exports, \"registerDeprecationHandler\", {\n enumerable: true,\n get: function () {\n return _deprecate2.registerHandler;\n }\n });\n Object.defineProperty(_exports, \"registerWarnHandler\", {\n enumerable: true,\n get: function () {\n return _warn2.registerHandler;\n }\n });\n _exports.setDebugFunction = _exports.runInDebug = void 0;\n Object.defineProperty(_exports, \"setTesting\", {\n enumerable: true,\n get: function () {\n return _testing.setTesting;\n }\n });\n _exports.warn = void 0;\n // These are the default production build versions:\n const noop = () => {};\n // SAFETY: these casts are just straight-up lies, but the point is that they do\n // not do anything in production builds.\n let assert = _exports.assert = noop;\n let info = _exports.info = noop;\n let warn = _exports.warn = noop;\n let debug = _exports.debug = noop;\n let deprecate = _exports.deprecate = noop;\n let debugSeal = _exports.debugSeal = noop;\n let debugFreeze = _exports.debugFreeze = noop;\n let runInDebug = _exports.runInDebug = noop;\n let setDebugFunction = _exports.setDebugFunction = noop;\n let getDebugFunction = _exports.getDebugFunction = noop;\n let deprecateFunc = function () {\n return arguments[arguments.length - 1];\n };\n _exports.deprecateFunc = deprecateFunc;\n if (true /* DEBUG */) {\n _exports.setDebugFunction = setDebugFunction = function (type, callback) {\n switch (type) {\n case 'assert':\n return _exports.assert = assert = callback;\n case 'info':\n return _exports.info = info = callback;\n case 'warn':\n return _exports.warn = warn = callback;\n case 'debug':\n return _exports.debug = debug = callback;\n case 'deprecate':\n return _exports.deprecate = deprecate = callback;\n case 'debugSeal':\n return _exports.debugSeal = debugSeal = callback;\n case 'debugFreeze':\n return _exports.debugFreeze = debugFreeze = callback;\n case 'runInDebug':\n return _exports.runInDebug = runInDebug = callback;\n case 'deprecateFunc':\n return _exports.deprecateFunc = deprecateFunc = callback;\n }\n };\n _exports.getDebugFunction = getDebugFunction = function (type) {\n switch (type) {\n case 'assert':\n return assert;\n case 'info':\n return info;\n case 'warn':\n return warn;\n case 'debug':\n return debug;\n case 'deprecate':\n return deprecate;\n case 'debugSeal':\n return debugSeal;\n case 'debugFreeze':\n return debugFreeze;\n case 'runInDebug':\n return runInDebug;\n case 'deprecateFunc':\n return deprecateFunc;\n }\n };\n }\n /**\n @module @ember/debug\n */\n if (true /* DEBUG */) {\n // eslint-disable-next-line no-inner-declarations\n function assert(desc, test) {\n if (!test) {\n throw new Error(\"Assertion Failed: \" + desc);\n }\n }\n setDebugFunction('assert', assert);\n /**\n Display a debug notice.\n Calls to this function are not invoked in production builds.\n ```javascript\n import { debug } from '@ember/debug';\n debug('I\\'m a debug notice!');\n ```\n @method debug\n @for @ember/debug\n @static\n @param {String} message A debug message to display.\n @public\n */\n setDebugFunction('debug', function debug(message) {\n console.debug(\"DEBUG: \" + message); /* eslint-disable-line no-console */\n });\n /**\n Display an info notice.\n Calls to this function are removed from production builds, so they can be\n freely added for documentation and debugging purposes without worries of\n incuring any performance penalty.\n @method info\n @private\n */\n setDebugFunction('info', function info() {\n console.info(...arguments); /* eslint-disable-line no-console */\n });\n /**\n @module @ember/debug\n @public\n */\n /**\n Alias an old, deprecated method with its new counterpart.\n Display a deprecation warning with the provided message and a stack trace\n (Chrome and Firefox only) when the assigned method is called.\n Calls to this function are removed from production builds, so they can be\n freely added for documentation and debugging purposes without worries of\n incuring any performance penalty.\n ```javascript\n import { deprecateFunc } from '@ember/debug';\n Ember.oldMethod = deprecateFunc('Please use the new, updated method', options, Ember.newMethod);\n ```\n @method deprecateFunc\n @static\n @for @ember/debug\n @param {String} message A description of the deprecation.\n @param {Object} [options] The options object for `deprecate`.\n @param {Function} func The new function called to replace its deprecated counterpart.\n @return {Function} A new function that wraps the original function with a deprecation warning\n @private\n */\n setDebugFunction('deprecateFunc', function deprecateFunc() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (args.length === 3) {\n let [message, options, func] = args;\n return function () {\n deprecate(message, false, options);\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n return func.apply(this, args);\n };\n } else {\n let [message, func] = args;\n return function () {\n deprecate(message);\n return func.apply(this, arguments);\n };\n }\n });\n /**\n @module @ember/debug\n @public\n */\n /**\n Run a function meant for debugging.\n Calls to this function are removed from production builds, so they can be\n freely added for documentation and debugging purposes without worries of\n incuring any performance penalty.\n ```javascript\n import Component from '@ember/component';\n import { runInDebug } from '@ember/debug';\n runInDebug(() => {\n Component.reopen({\n didInsertElement() {\n console.log(\"I'm happy\");\n }\n });\n });\n ```\n @method runInDebug\n @for @ember/debug\n @static\n @param {Function} func The function to be executed.\n @since 1.5.0\n @public\n */\n setDebugFunction('runInDebug', function runInDebug(func) {\n func();\n });\n setDebugFunction('debugSeal', function debugSeal(obj) {\n Object.seal(obj);\n });\n setDebugFunction('debugFreeze', function debugFreeze(obj) {\n // re-freezing an already frozen object introduces a significant\n // performance penalty on Chrome (tested through 59).\n //\n // See: https://bugs.chromium.org/p/v8/issues/detail?id=6450\n if (!Object.isFrozen(obj)) {\n Object.freeze(obj);\n }\n });\n setDebugFunction('deprecate', _deprecate2.default);\n setDebugFunction('warn', _warn2.default);\n }\n let _warnIfUsingStrippedFeatureFlags = _exports._warnIfUsingStrippedFeatureFlags = void 0;\n if (true /* DEBUG */ && !(0, _testing.isTesting)()) {\n if (typeof window !== 'undefined' && (_browserEnvironment.isFirefox || _browserEnvironment.isChrome) && window.addEventListener) {\n window.addEventListener('load', () => {\n if (document.documentElement && document.documentElement.dataset && !document.documentElement.dataset['emberExtension']) {\n let downloadURL;\n if (_browserEnvironment.isChrome) {\n downloadURL = 'https://chrome.google.com/webstore/detail/ember-inspector/bmdblncegkenkacieihfhpjfppoconhi';\n } else if (_browserEnvironment.isFirefox) {\n downloadURL = 'https://addons.mozilla.org/en-US/firefox/addon/ember-inspector/';\n }\n debug(\"For more advanced debugging, install the Ember Inspector from \" + downloadURL);\n }\n }, false);\n }\n }\n});","define(\"@ember/debug/lib/capture-render-tree\", [\"exports\", \"@glimmer/util\"], function (_exports, _util) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = captureRenderTree;\n /**\n @module @ember/debug\n */\n /**\n Ember Inspector calls this function to capture the current render tree.\n \n In production mode, this requires turning on `ENV._DEBUG_RENDER_TREE`\n before loading Ember.\n \n @private\n @static\n @method captureRenderTree\n @for @ember/debug\n @param app {ApplicationInstance} An `ApplicationInstance`.\n @since 3.14.0\n */\n function captureRenderTree(app) {\n // SAFETY: Ideally we'd assert here but that causes awkward circular requires since this is also in @ember/debug.\n // This is only for debug stuff so not very risky.\n let renderer = (0, _util.expect)(app.lookup('renderer:-dom'), \"BUG: owner is missing renderer\");\n return renderer.debugRenderTree.capture();\n }\n});","define(\"@ember/debug/lib/deprecate\", [\"exports\", \"@ember/-internals/environment\", \"@ember/debug/index\", \"@ember/debug/lib/handlers\"], function (_exports, _environment, _index, _handlers) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.registerHandler = _exports.missingOptionsIdDeprecation = _exports.missingOptionsDeprecation = _exports.missingOptionDeprecation = _exports.default = void 0;\n /**\n @module @ember/debug\n @public\n */\n /**\n Allows for runtime registration of handler functions that override the default deprecation behavior.\n Deprecations are invoked by calls to [@ember/debug/deprecate](/ember/release/classes/@ember%2Fdebug/methods/deprecate?anchor=deprecate).\n The following example demonstrates its usage by registering a handler that throws an error if the\n message contains the word \"should\", otherwise defers to the default handler.\n \n ```javascript\n import { registerDeprecationHandler } from '@ember/debug';\n \n registerDeprecationHandler((message, options, next) => {\n if (message.indexOf('should') !== -1) {\n throw new Error(`Deprecation message with should: ${message}`);\n } else {\n // defer to whatever handler was registered before this one\n next(message, options);\n }\n });\n ```\n \n The handler function takes the following arguments:\n \n <ul>\n <li> <code>message</code> - The message received from the deprecation call.</li>\n <li> <code>options</code> - An object passed in with the deprecation call containing additional information including:</li>\n <ul>\n <li> <code>id</code> - An id of the deprecation in the form of <code>package-name.specific-deprecation</code>.</li>\n <li> <code>until</code> - The Ember version number the feature and deprecation will be removed in.</li>\n </ul>\n <li> <code>next</code> - A function that calls into the previously registered handler.</li>\n </ul>\n \n @public\n @static\n @method registerDeprecationHandler\n @for @ember/debug\n @param handler {Function} A function to handle deprecation calls.\n @since 2.1.0\n */\n let registerHandler = () => {};\n _exports.registerHandler = registerHandler;\n let missingOptionsDeprecation = _exports.missingOptionsDeprecation = void 0;\n let missingOptionsIdDeprecation = _exports.missingOptionsIdDeprecation = void 0;\n let missingOptionDeprecation = () => '';\n _exports.missingOptionDeprecation = missingOptionDeprecation;\n let deprecate = () => {};\n if (true /* DEBUG */) {\n _exports.registerHandler = registerHandler = function registerHandler(handler) {\n (0, _handlers.registerHandler)('deprecate', handler);\n };\n let formatMessage = function formatMessage(_message, options) {\n let message = _message;\n if (options != null && options.id) {\n message = message + (\" [deprecation id: \" + options.id + \"]\");\n }\n if (options != null && options.until) {\n message = message + (\" This will be removed in \" + options.for + \" \" + options.until + \".\");\n }\n if (options != null && options.url) {\n message += \" See \" + options.url + \" for more details.\";\n }\n return message;\n };\n registerHandler(function logDeprecationToConsole(message, options) {\n let updatedMessage = formatMessage(message, options);\n console.warn(\"DEPRECATION: \" + updatedMessage); // eslint-disable-line no-console\n });\n\n let captureErrorForStack;\n if (new Error().stack) {\n captureErrorForStack = () => new Error();\n } else {\n captureErrorForStack = () => {\n try {\n __fail__.fail();\n return;\n } catch (e) {\n return e;\n }\n };\n }\n registerHandler(function logDeprecationStackTrace(message, options, next) {\n if (_environment.ENV.LOG_STACKTRACE_ON_DEPRECATION) {\n let stackStr = '';\n let error = captureErrorForStack();\n let stack;\n if (error instanceof Error) {\n if (error.stack) {\n if (error['arguments']) {\n // Chrome\n stack = error.stack.replace(/^\\s+at\\s+/gm, '').replace(/^([^(]+?)([\\n$])/gm, '{anonymous}($1)$2').replace(/^Object.<anonymous>\\s*\\(([^)]+)\\)/gm, '{anonymous}($1)').split('\\n');\n stack.shift();\n } else {\n // Firefox\n stack = error.stack.replace(/(?:\\n@:0)?\\s+$/m, '').replace(/^\\(/gm, '{anonymous}(').split('\\n');\n }\n stackStr = \"\\n \" + stack.slice(2).join('\\n ');\n }\n }\n let updatedMessage = formatMessage(message, options);\n console.warn(\"DEPRECATION: \" + updatedMessage + stackStr); // eslint-disable-line no-console\n } else {\n next(message, options);\n }\n });\n registerHandler(function raiseOnDeprecation(message, options, next) {\n if (_environment.ENV.RAISE_ON_DEPRECATION) {\n let updatedMessage = formatMessage(message);\n throw new Error(updatedMessage);\n } else {\n next(message, options);\n }\n });\n _exports.missingOptionsDeprecation = missingOptionsDeprecation = 'When calling `deprecate` you ' + 'must provide an `options` hash as the third parameter. ' + '`options` should include `id` and `until` properties.';\n _exports.missingOptionsIdDeprecation = missingOptionsIdDeprecation = 'When calling `deprecate` you must provide `id` in options.';\n _exports.missingOptionDeprecation = missingOptionDeprecation = (id, missingOption) => {\n return \"When calling `deprecate` you must provide `\" + missingOption + \"` in options. Missing options.\" + missingOption + \" in \\\"\" + id + \"\\\" deprecation\";\n };\n /**\n @module @ember/debug\n @public\n */\n /**\n Display a deprecation warning with the provided message and a stack trace\n (Chrome and Firefox only).\n Ember itself leverages [Semantic Versioning](https://semver.org) to aid\n projects in keeping up with changes to the framework. Before any\n functionality or API is removed, it first flows linearly through a\n deprecation staging process. The staging process currently contains two\n stages: available and enabled.\n Deprecations are initially released into the 'available' stage.\n Deprecations will stay in this stage until the replacement API has been\n marked as a recommended practice via the RFC process and the addon\n ecosystem has generally adopted the change.\n Once a deprecation meets the above criteria, it will move into the\n 'enabled' stage where it will remain until the functionality or API is\n eventually removed.\n For application and addon developers, \"available\" deprecations are not\n urgent and \"enabled\" deprecations require action.\n * In a production build, this method is defined as an empty function (NOP).\n Uses of this method in Ember itself are stripped from the ember.prod.js build.\n ```javascript\n import { deprecate } from '@ember/debug';\n deprecate(\n 'Use of `assign` has been deprecated. Please use `Object.assign` or the spread operator instead.',\n false,\n {\n id: 'ember-polyfills.deprecate-assign',\n until: '5.0.0',\n url: 'https://deprecations.emberjs.com/v4.x/#toc_ember-polyfills-deprecate-assign',\n for: 'ember-source',\n since: {\n available: '4.0.0',\n enabled: '4.0.0',\n },\n }\n );\n ```\n @method deprecate\n @for @ember/debug\n @param {String} message A description of the deprecation.\n @param {Boolean} test A boolean. If falsy, the deprecation will be displayed.\n @param {Object} options\n @param {String} options.id A unique id for this deprecation. The id can be\n used by Ember debugging tools to change the behavior (raise, log or silence)\n for that specific deprecation. The id should be namespaced by dots, e.g.\n \"view.helper.select\".\n @param {string} options.until The version of Ember when this deprecation\n warning will be removed.\n @param {String} options.for A namespace for the deprecation, usually the package name\n @param {Object} options.since Describes when the deprecation became available and enabled.\n @param {String} [options.url] An optional url to the transition guide on the\n emberjs.com website.\n @static\n @public\n @since 1.0.0\n */\n deprecate = function deprecate(message, test, options) {\n (0, _index.assert)(missingOptionsDeprecation, Boolean(options && (options.id || options.until)));\n (0, _index.assert)(missingOptionsIdDeprecation, Boolean(options.id));\n (0, _index.assert)(missingOptionDeprecation(options.id, 'until'), Boolean(options.until));\n (0, _index.assert)(missingOptionDeprecation(options.id, 'for'), Boolean(options.for));\n (0, _index.assert)(missingOptionDeprecation(options.id, 'since'), Boolean(options.since));\n (0, _handlers.invoke)('deprecate', message, test, options);\n };\n }\n var _default = _exports.default = deprecate;\n});","define(\"@ember/debug/lib/handlers\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.registerHandler = _exports.invoke = _exports.HANDLERS = void 0;\n let HANDLERS = _exports.HANDLERS = {};\n let registerHandler = _exports.registerHandler = function registerHandler(_type, _callback) {};\n let invoke = () => {};\n _exports.invoke = invoke;\n if (true /* DEBUG */) {\n _exports.registerHandler = registerHandler = function registerHandler(type, callback) {\n let nextHandler = HANDLERS[type] || (() => {});\n HANDLERS[type] = (message, options) => {\n callback(message, options, nextHandler);\n };\n };\n _exports.invoke = invoke = function invoke(type, message, test, options) {\n if (test) {\n return;\n }\n let handlerForType = HANDLERS[type];\n if (handlerForType) {\n handlerForType(message, options);\n }\n };\n }\n});","define(\"@ember/debug/lib/inspect\", [\"exports\", \"@ember/debug\"], function (_exports, _debug) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = inspect;\n const {\n toString: objectToString\n } = Object.prototype;\n const {\n toString: functionToString\n } = Function.prototype;\n const {\n isArray\n } = Array;\n const {\n keys: objectKeys\n } = Object;\n const {\n stringify\n } = JSON;\n const LIST_LIMIT = 100;\n const DEPTH_LIMIT = 4;\n const SAFE_KEY = /^[\\w$]+$/;\n /**\n @module @ember/debug\n */\n /**\n Convenience method to inspect an object. This method will attempt to\n convert the object into a useful string description.\n \n It is a pretty simple implementation. If you want something more robust,\n use something like JSDump: https://github.com/NV/jsDump\n \n @method inspect\n @static\n @param {Object} obj The object you want to inspect.\n @return {String} A description of the object\n @since 1.4.0\n @private\n */\n function inspect(obj) {\n // detect Node util.inspect call inspect(depth: number, opts: object)\n if (typeof obj === 'number' && arguments.length === 2) {\n return this;\n }\n return inspectValue(obj, 0);\n }\n function inspectValue(value, depth, seen) {\n let valueIsArray = false;\n switch (typeof value) {\n case 'undefined':\n return 'undefined';\n case 'object':\n if (value === null) return 'null';\n if (isArray(value)) {\n valueIsArray = true;\n break;\n }\n // is toString Object.prototype.toString or undefined then traverse\n if (value.toString === objectToString || value.toString === undefined) {\n break;\n }\n // custom toString\n return value.toString();\n case 'function':\n return value.toString === functionToString ? value.name ? \"[Function:\" + value.name + \"]\" : \"[Function]\" : value.toString();\n case 'string':\n return stringify(value);\n case 'symbol':\n case 'boolean':\n case 'number':\n default:\n return value.toString();\n }\n if (seen === undefined) {\n seen = new WeakSet();\n } else {\n if (seen.has(value)) return \"[Circular]\";\n }\n seen.add(value);\n return valueIsArray ? inspectArray(value, depth + 1, seen) : inspectObject(value, depth + 1, seen);\n }\n function inspectKey(key) {\n return SAFE_KEY.test(key) ? key : stringify(key);\n }\n function inspectObject(obj, depth, seen) {\n if (depth > DEPTH_LIMIT) {\n return '[Object]';\n }\n let s = '{';\n let keys = objectKeys(obj);\n for (let i = 0; i < keys.length; i++) {\n s += i === 0 ? ' ' : ', ';\n if (i >= LIST_LIMIT) {\n s += \"... \" + (keys.length - LIST_LIMIT) + \" more keys\";\n break;\n }\n let key = keys[i];\n (true && !(key) && (0, _debug.assert)('has key', key)); // Looping over array\n s += inspectKey(String(key)) + \": \" + inspectValue(obj[key], depth, seen);\n }\n s += ' }';\n return s;\n }\n function inspectArray(arr, depth, seen) {\n if (depth > DEPTH_LIMIT) {\n return '[Array]';\n }\n let s = '[';\n for (let i = 0; i < arr.length; i++) {\n s += i === 0 ? ' ' : ', ';\n if (i >= LIST_LIMIT) {\n s += \"... \" + (arr.length - LIST_LIMIT) + \" more items\";\n break;\n }\n s += inspectValue(arr[i], depth, seen);\n }\n s += ' ]';\n return s;\n }\n});","define(\"@ember/debug/lib/testing\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.isTesting = isTesting;\n _exports.setTesting = setTesting;\n let testing = false;\n function isTesting() {\n return testing;\n }\n function setTesting(value) {\n testing = Boolean(value);\n }\n});","define(\"@ember/debug/lib/warn\", [\"exports\", \"@ember/debug/index\", \"@ember/debug/lib/handlers\"], function (_exports, _index, _handlers) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.registerHandler = _exports.missingOptionsIdDeprecation = _exports.missingOptionsDeprecation = _exports.default = void 0;\n let registerHandler = () => {};\n _exports.registerHandler = registerHandler;\n let warn = () => {};\n let missingOptionsDeprecation = _exports.missingOptionsDeprecation = void 0;\n let missingOptionsIdDeprecation = _exports.missingOptionsIdDeprecation = void 0;\n /**\n @module @ember/debug\n */\n if (true /* DEBUG */) {\n /**\n Allows for runtime registration of handler functions that override the default warning behavior.\n Warnings are invoked by calls made to [@ember/debug/warn](/ember/release/classes/@ember%2Fdebug/methods/warn?anchor=warn).\n The following example demonstrates its usage by registering a handler that does nothing overriding Ember's\n default warning behavior.\n ```javascript\n import { registerWarnHandler } from '@ember/debug';\n // next is not called, so no warnings get the default behavior\n registerWarnHandler(() => {});\n ```\n The handler function takes the following arguments:\n <ul>\n <li> <code>message</code> - The message received from the warn call. </li>\n <li> <code>options</code> - An object passed in with the warn call containing additional information including:</li>\n <ul>\n <li> <code>id</code> - An id of the warning in the form of <code>package-name.specific-warning</code>.</li>\n </ul>\n <li> <code>next</code> - A function that calls into the previously registered handler.</li>\n </ul>\n @public\n @static\n @method registerWarnHandler\n @for @ember/debug\n @param handler {Function} A function to handle warnings.\n @since 2.1.0\n */\n _exports.registerHandler = registerHandler = function registerHandler(handler) {\n (0, _handlers.registerHandler)('warn', handler);\n };\n registerHandler(function logWarning(message) {\n /* eslint-disable no-console */\n console.warn(\"WARNING: \" + message);\n /* eslint-enable no-console */\n });\n\n _exports.missingOptionsDeprecation = missingOptionsDeprecation = 'When calling `warn` you ' + 'must provide an `options` hash as the third parameter. ' + '`options` should include an `id` property.';\n _exports.missingOptionsIdDeprecation = missingOptionsIdDeprecation = 'When calling `warn` you must provide `id` in options.';\n /**\n Display a warning with the provided message.\n * In a production build, this method is defined as an empty function (NOP).\n Uses of this method in Ember itself are stripped from the ember.prod.js build.\n ```javascript\n import { warn } from '@ember/debug';\n import tomsterCount from './tomster-counter'; // a module in my project\n // Log a warning if we have more than 3 tomsters\n warn('Too many tomsters!', tomsterCount <= 3, {\n id: 'ember-debug.too-many-tomsters'\n });\n ```\n @method warn\n @for @ember/debug\n @static\n @param {String} message A warning to display.\n @param {Boolean|Object} test An optional boolean. If falsy, the warning\n will be displayed. If `test` is an object, the `test` parameter can\n be used as the `options` parameter and the warning is displayed.\n @param {Object} options\n @param {String} options.id The `id` can be used by Ember debugging tools\n to change the behavior (raise, log, or silence) for that specific warning.\n The `id` should be namespaced by dots, e.g. \"ember-debug.feature-flag-with-features-stripped\"\n @public\n @since 1.0.0\n */\n warn = function warn(message, test, options) {\n if (arguments.length === 2 && typeof test === 'object') {\n options = test;\n test = false;\n }\n (0, _index.assert)(missingOptionsDeprecation, Boolean(options));\n (0, _index.assert)(missingOptionsIdDeprecation, Boolean(options && options.id));\n // SAFETY: we have explicitly assigned `false` if the user invoked the\n // arity-2 version of the overload, so we know `test` is always either\n // `undefined` or a `boolean` for type-safe callers.\n (0, _handlers.invoke)('warn', message, test, options);\n };\n }\n var _default = _exports.default = warn;\n});","define(\"@ember/deprecated-features/index\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.ASSIGN = void 0;\n /* eslint-disable no-implicit-coercion */\n // These versions should be the version that the deprecation was _introduced_,\n // not the version that the feature will be removed.\n const ASSIGN = _exports.ASSIGN = !!'4.0.0-beta.1';\n});","define(\"@glimmer/compiler\", [\"exports\", \"@glimmer/util\", \"@glimmer/wire-format\", \"@glimmer/syntax\", \"@glimmer/vm\"], function (_exports, _util, _wireFormat, _syntax, _vm) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.WireFormatDebugger = _exports.ProgramSymbols = _exports.NEWLINE = _exports.Builder = void 0;\n _exports.buildStatement = buildStatement;\n _exports.buildStatements = buildStatements;\n _exports.c = c;\n _exports.defaultId = void 0;\n _exports.precompile = precompile;\n _exports.precompileJSON = precompileJSON;\n _exports.s = s;\n _exports.unicode = unicode;\n let HeadKind = /*#__PURE__*/function (HeadKind) {\n HeadKind[\"Block\"] = \"Block\";\n HeadKind[\"Call\"] = \"Call\";\n HeadKind[\"Element\"] = \"Element\";\n HeadKind[\"AppendPath\"] = \"AppendPath\";\n HeadKind[\"AppendExpr\"] = \"AppendExpr\";\n HeadKind[\"Literal\"] = \"Literal\";\n HeadKind[\"Modifier\"] = \"Modifier\";\n HeadKind[\"DynamicComponent\"] = \"DynamicComponent\";\n HeadKind[\"Comment\"] = \"Comment\";\n HeadKind[\"Splat\"] = \"Splat\";\n HeadKind[\"Keyword\"] = \"Keyword\";\n return HeadKind;\n }({});\n let VariableKind = /*#__PURE__*/function (VariableKind) {\n VariableKind[\"Local\"] = \"Local\";\n VariableKind[\"Free\"] = \"Free\";\n VariableKind[\"Arg\"] = \"Arg\";\n VariableKind[\"Block\"] = \"Block\";\n VariableKind[\"This\"] = \"This\";\n return VariableKind;\n }({});\n function normalizeStatement(statement) {\n if (Array.isArray(statement)) {\n if (statementIsExpression(statement)) {\n return normalizeAppendExpression(statement);\n } else if (isSugaryArrayStatement(statement)) {\n return normalizeSugaryArrayStatement(statement);\n } else {\n return normalizeVerboseStatement(statement);\n }\n } else if (typeof statement === 'string') {\n return normalizeAppendHead(normalizeDottedPath(statement), false);\n } else {\n throw (0, _util.assertNever)(statement);\n }\n }\n function normalizeAppendHead(head, trusted) {\n if (head.type === ExpressionKind.GetPath) {\n return {\n kind: HeadKind.AppendPath,\n path: head,\n trusted\n };\n } else {\n return {\n kind: HeadKind.AppendExpr,\n expr: head,\n trusted\n };\n }\n }\n function isSugaryArrayStatement(statement) {\n if (Array.isArray(statement) && typeof statement[0] === 'string') {\n switch (statement[0][0]) {\n case '(':\n case '#':\n case '<':\n case '!':\n return true;\n default:\n return false;\n }\n }\n return false;\n }\n function normalizeSugaryArrayStatement(statement) {\n const name = statement[0];\n switch (name[0]) {\n case '(':\n {\n let params = null;\n let hash = null;\n if (statement.length === 3) {\n params = normalizeParams(statement[1]);\n hash = normalizeHash(statement[2]);\n } else if (statement.length === 2) {\n if (Array.isArray(statement[1])) {\n params = normalizeParams(statement[1]);\n } else {\n hash = normalizeHash(statement[1]);\n }\n }\n return {\n kind: HeadKind.Call,\n head: normalizeCallHead(name),\n params,\n hash,\n trusted: false\n };\n }\n case '#':\n {\n const {\n head: path,\n params,\n hash,\n blocks,\n blockParams\n } = normalizeBuilderBlockStatement(statement);\n return {\n kind: HeadKind.Block,\n head: path,\n params,\n hash,\n blocks,\n blockParams\n };\n }\n case '!':\n {\n const name = statement[0].slice(1);\n const {\n params,\n hash,\n blocks,\n blockParams\n } = normalizeBuilderBlockStatement(statement);\n return {\n kind: HeadKind.Keyword,\n name,\n params,\n hash,\n blocks,\n blockParams\n };\n }\n case '<':\n {\n let attrs = (0, _util.dict)();\n let block = [];\n if (statement.length === 3) {\n attrs = normalizeAttrs(statement[1]);\n block = normalizeBlock(statement[2]);\n } else if (statement.length === 2) {\n if (Array.isArray(statement[1])) {\n block = normalizeBlock(statement[1]);\n } else {\n attrs = normalizeAttrs(statement[1]);\n }\n }\n return {\n kind: HeadKind.Element,\n name: (0, _util.expect)(extractElement(name), \"BUG: expected \" + name + \" to look like a tag name\"),\n attrs,\n block\n };\n }\n default:\n throw new Error(\"Unreachable \" + JSON.stringify(statement) + \" in normalizeSugaryArrayStatement\");\n }\n }\n function normalizeVerboseStatement(statement) {\n switch (statement[0]) {\n case Builder.Literal:\n {\n return {\n kind: HeadKind.Literal,\n value: statement[1]\n };\n }\n case Builder.Append:\n {\n return normalizeAppendExpression(statement[1], statement[2]);\n }\n case Builder.Modifier:\n {\n return {\n kind: HeadKind.Modifier,\n params: normalizeParams(statement[1]),\n hash: normalizeHash(statement[2])\n };\n }\n case Builder.DynamicComponent:\n {\n return {\n kind: HeadKind.DynamicComponent,\n expr: normalizeExpression(statement[1]),\n hash: normalizeHash(statement[2]),\n block: normalizeBlock(statement[3])\n };\n }\n case Builder.Comment:\n {\n return {\n kind: HeadKind.Comment,\n value: statement[1]\n };\n }\n }\n }\n function extractBlockHead(name) {\n const result = /^(#|!)(.*)$/u.exec(name);\n if (result === null) {\n throw new Error(\"Unexpected missing # in block head\");\n }\n return normalizeDottedPath(result[2]);\n }\n function normalizeCallHead(name) {\n const result = /^\\((.*)\\)$/u.exec(name);\n if (result === null) {\n throw new Error(\"Unexpected missing () in call head\");\n }\n return normalizeDottedPath(result[1]);\n }\n function normalizePath(head, tail) {\n if (tail === void 0) {\n tail = [];\n }\n const pathHead = normalizePathHead(head);\n if ((0, _util.isPresentArray)(tail)) {\n return {\n type: ExpressionKind.GetPath,\n path: {\n head: pathHead,\n tail\n }\n };\n } else {\n return {\n type: ExpressionKind.GetVar,\n variable: pathHead\n };\n }\n }\n function normalizeDottedPath(whole) {\n const {\n kind,\n name: rest\n } = normalizePathHead(whole);\n const [name, ...tail] = rest.split('.');\n const variable = {\n kind,\n name,\n mode: 'loose'\n };\n if ((0, _util.isPresentArray)(tail)) {\n return {\n type: ExpressionKind.GetPath,\n path: {\n head: variable,\n tail\n }\n };\n } else {\n return {\n type: ExpressionKind.GetVar,\n variable\n };\n }\n }\n function normalizePathHead(whole) {\n let kind;\n let name;\n if (/^this(?:\\.|$)/u.test(whole)) {\n return {\n kind: VariableKind.This,\n name: whole,\n mode: 'loose'\n };\n }\n switch (whole[0]) {\n case '^':\n kind = VariableKind.Free;\n name = whole.slice(1);\n break;\n case '@':\n kind = VariableKind.Arg;\n name = whole.slice(1);\n break;\n case '&':\n kind = VariableKind.Block;\n name = whole.slice(1);\n break;\n default:\n kind = VariableKind.Local;\n name = whole;\n }\n return {\n kind,\n name,\n mode: 'loose'\n };\n }\n function normalizeBuilderBlockStatement(statement) {\n const head = statement[0];\n let blocks = (0, _util.dict)();\n let params = null;\n let hash = null;\n let blockParams = null;\n if (statement.length === 2) {\n blocks = normalizeBlocks(statement[1]);\n } else if (statement.length === 3) {\n if (Array.isArray(statement[1])) {\n params = normalizeParams(statement[1]);\n } else {\n ({\n hash,\n blockParams\n } = normalizeBlockHash(statement[1]));\n }\n blocks = normalizeBlocks(statement[2]);\n } else if (statement.length === 4) {\n params = normalizeParams(statement[1]);\n ({\n hash,\n blockParams\n } = normalizeBlockHash(statement[2]));\n blocks = normalizeBlocks(statement[3]);\n }\n return {\n head: extractBlockHead(head),\n params,\n hash,\n blockParams,\n blocks\n };\n }\n function normalizeBlockHash(hash) {\n if (hash === null) {\n return {\n hash: null,\n blockParams: null\n };\n }\n let out = null;\n let blockParams = null;\n entries(hash, (key, value) => {\n if (key === 'as') {\n blockParams = Array.isArray(value) ? value : [value];\n } else {\n out = out || (0, _util.dict)();\n out[key] = normalizeExpression(value);\n }\n });\n return {\n hash: out,\n blockParams\n };\n }\n function entries(dict, callback) {\n Object.keys(dict).forEach(key => {\n const value = dict[key];\n callback(key, value);\n });\n }\n function normalizeBlocks(value) {\n if (Array.isArray(value)) {\n return {\n default: normalizeBlock(value)\n };\n } else {\n return mapObject(value, normalizeBlock);\n }\n }\n function normalizeBlock(block) {\n return block.map(s => normalizeStatement(s));\n }\n function normalizeAttrs(attrs) {\n return mapObject(attrs, a => normalizeAttr(a).expr);\n }\n function normalizeAttr(attr) {\n if (attr === 'splat') {\n return {\n expr: HeadKind.Splat,\n trusted: false\n };\n } else {\n const expr = normalizeExpression(attr);\n return {\n expr,\n trusted: false\n };\n }\n }\n function mapObject(object, mapper) {\n const out = (0, _util.dict)();\n Object.keys(object).forEach(k => {\n out[k] = mapper(object[k], k);\n });\n return out;\n }\n function extractElement(input) {\n var _match$;\n const match = /^<([\\d\\-a-z][\\d\\-A-Za-z]*)>$/u.exec(input);\n return (_match$ = match == null ? void 0 : match[1]) != null ? _match$ : null;\n }\n let Builder = _exports.Builder = /*#__PURE__*/function (Builder) {\n Builder[Builder[\"Literal\"] = 0] = \"Literal\";\n Builder[Builder[\"Comment\"] = 1] = \"Comment\";\n Builder[Builder[\"Append\"] = 2] = \"Append\";\n Builder[Builder[\"Modifier\"] = 3] = \"Modifier\";\n Builder[Builder[\"DynamicComponent\"] = 4] = \"DynamicComponent\";\n Builder[Builder[\"Get\"] = 5] = \"Get\";\n Builder[Builder[\"Concat\"] = 6] = \"Concat\";\n Builder[Builder[\"HasBlock\"] = 7] = \"HasBlock\";\n Builder[Builder[\"HasBlockParams\"] = 8] = \"HasBlockParams\";\n return Builder;\n }({});\n let ExpressionKind = /*#__PURE__*/function (ExpressionKind) {\n ExpressionKind[\"Literal\"] = \"Literal\";\n ExpressionKind[\"Call\"] = \"Call\";\n ExpressionKind[\"GetPath\"] = \"GetPath\";\n ExpressionKind[\"GetVar\"] = \"GetVar\";\n ExpressionKind[\"Concat\"] = \"Concat\";\n ExpressionKind[\"HasBlock\"] = \"HasBlock\";\n ExpressionKind[\"HasBlockParams\"] = \"HasBlockParams\";\n return ExpressionKind;\n }({});\n function normalizeAppendExpression(expression, forceTrusted) {\n if (forceTrusted === void 0) {\n forceTrusted = false;\n }\n if (expression === null || expression === undefined) {\n return {\n expr: {\n type: ExpressionKind.Literal,\n value: expression\n },\n kind: HeadKind.AppendExpr,\n trusted: false\n };\n } else if (Array.isArray(expression)) {\n switch (expression[0]) {\n case Builder.Literal:\n return {\n expr: {\n type: ExpressionKind.Literal,\n value: expression[1]\n },\n kind: HeadKind.AppendExpr,\n trusted: false\n };\n case Builder.Get:\n {\n return normalizeAppendHead(normalizePath(expression[1], expression[2]), forceTrusted);\n }\n case Builder.Concat:\n {\n const expr = {\n type: ExpressionKind.Concat,\n params: normalizeParams(expression.slice(1))\n };\n return {\n expr,\n kind: HeadKind.AppendExpr,\n trusted: forceTrusted\n };\n }\n case Builder.HasBlock:\n return {\n expr: {\n type: ExpressionKind.HasBlock,\n name: expression[1]\n },\n kind: HeadKind.AppendExpr,\n trusted: forceTrusted\n };\n case Builder.HasBlockParams:\n return {\n expr: {\n type: ExpressionKind.HasBlockParams,\n name: expression[1]\n },\n kind: HeadKind.AppendExpr,\n trusted: forceTrusted\n };\n default:\n {\n if (isBuilderCallExpression(expression)) {\n return {\n expr: normalizeCallExpression(expression),\n kind: HeadKind.AppendExpr,\n trusted: forceTrusted\n };\n } else {\n throw new Error(\"Unexpected array in expression position (wasn't a tuple expression and \" + expression[0] + \" isn't wrapped in parens, so it isn't a call): \" + JSON.stringify(expression));\n }\n }\n // BuilderCallExpression\n }\n } else if (typeof expression !== 'object') {\n switch (typeof expression) {\n case 'string':\n {\n return normalizeAppendHead(normalizeDottedPath(expression), forceTrusted);\n }\n case 'boolean':\n case 'number':\n return {\n expr: {\n type: ExpressionKind.Literal,\n value: expression\n },\n kind: HeadKind.AppendExpr,\n trusted: true\n };\n default:\n throw (0, _util.assertNever)(expression);\n }\n } else {\n throw (0, _util.assertNever)(expression);\n }\n }\n function normalizeExpression(expression) {\n if (expression === null || expression === undefined) {\n return {\n type: ExpressionKind.Literal,\n value: expression\n };\n } else if (Array.isArray(expression)) {\n switch (expression[0]) {\n case Builder.Literal:\n return {\n type: ExpressionKind.Literal,\n value: expression[1]\n };\n case Builder.Get:\n {\n return normalizePath(expression[1], expression[2]);\n }\n case Builder.Concat:\n {\n const expr = {\n type: ExpressionKind.Concat,\n params: normalizeParams(expression.slice(1))\n };\n return expr;\n }\n case Builder.HasBlock:\n return {\n type: ExpressionKind.HasBlock,\n name: expression[1]\n };\n case Builder.HasBlockParams:\n return {\n type: ExpressionKind.HasBlockParams,\n name: expression[1]\n };\n default:\n {\n if (isBuilderCallExpression(expression)) {\n return normalizeCallExpression(expression);\n } else {\n throw new Error(\"Unexpected array in expression position (wasn't a tuple expression and \" + expression[0] + \" isn't wrapped in parens, so it isn't a call): \" + JSON.stringify(expression));\n }\n }\n // BuilderCallExpression\n }\n } else if (typeof expression !== 'object') {\n switch (typeof expression) {\n case 'string':\n {\n return normalizeDottedPath(expression);\n }\n case 'boolean':\n case 'number':\n return {\n type: ExpressionKind.Literal,\n value: expression\n };\n default:\n throw (0, _util.assertNever)(expression);\n }\n } else {\n throw (0, _util.assertNever)(expression);\n }\n }\n function statementIsExpression(statement) {\n if (!Array.isArray(statement)) {\n return false;\n }\n const name = statement[0];\n if (typeof name === 'number') {\n switch (name) {\n case Builder.Literal:\n case Builder.Get:\n case Builder.Concat:\n case Builder.HasBlock:\n case Builder.HasBlockParams:\n return true;\n default:\n return false;\n }\n }\n if (name[0] === '(') {\n return true;\n }\n return false;\n }\n function isBuilderCallExpression(value) {\n return typeof value[0] === 'string' && value[0][0] === '(';\n }\n function normalizeParams(input) {\n return input.map(normalizeExpression);\n }\n function normalizeHash(input) {\n if (input === null) return null;\n return mapObject(input, normalizeExpression);\n }\n function normalizeCallExpression(expr) {\n switch (expr.length) {\n case 1:\n return {\n type: ExpressionKind.Call,\n head: normalizeCallHead(expr[0]),\n params: null,\n hash: null\n };\n case 2:\n {\n if (Array.isArray(expr[1])) {\n return {\n type: ExpressionKind.Call,\n head: normalizeCallHead(expr[0]),\n params: normalizeParams(expr[1]),\n hash: null\n };\n } else {\n return {\n type: ExpressionKind.Call,\n head: normalizeCallHead(expr[0]),\n params: null,\n hash: normalizeHash(expr[1])\n };\n }\n }\n case 3:\n return {\n type: ExpressionKind.Call,\n head: normalizeCallHead(expr[0]),\n params: normalizeParams(expr[1]),\n hash: normalizeHash(expr[2])\n };\n }\n }\n class ProgramSymbols {\n constructor() {\n this._freeVariables = [];\n this._symbols = ['this'];\n this.top = this;\n }\n toSymbols() {\n return this._symbols.slice(1);\n }\n toUpvars() {\n return this._freeVariables;\n }\n freeVar(name) {\n return addString(this._freeVariables, name);\n }\n block(name) {\n return this.symbol(name);\n }\n arg(name) {\n return addString(this._symbols, name);\n }\n local(name) {\n throw new Error(\"No local \" + name + \" was found. Maybe you meant ^\" + name + \" for upvar, or !\" + name + \" for keyword?\");\n }\n this() {\n return 0;\n }\n hasLocal(_name) {\n return false;\n }\n\n // any symbol\n symbol(name) {\n return addString(this._symbols, name);\n }\n child(locals) {\n return new LocalSymbols(this, locals);\n }\n }\n _exports.ProgramSymbols = ProgramSymbols;\n class LocalSymbols {\n constructor(parent, locals) {\n this.locals = (0, _util.dict)();\n this.parent = parent;\n for (let local of locals) {\n this.locals[local] = parent.top.symbol(local);\n }\n }\n get paramSymbols() {\n return (0, _util.values)(this.locals);\n }\n get top() {\n return this.parent.top;\n }\n freeVar(name) {\n return this.parent.freeVar(name);\n }\n arg(name) {\n return this.parent.arg(name);\n }\n block(name) {\n return this.parent.block(name);\n }\n local(name) {\n if (name in this.locals) {\n return this.locals[name];\n } else {\n return this.parent.local(name);\n }\n }\n this() {\n return this.parent.this();\n }\n hasLocal(name) {\n if (name in this.locals) {\n return true;\n } else {\n return this.parent.hasLocal(name);\n }\n }\n child(locals) {\n return new LocalSymbols(this, locals);\n }\n }\n function addString(array, item) {\n let index = array.indexOf(item);\n if (index === -1) {\n index = array.length;\n array.push(item);\n return index;\n } else {\n return index;\n }\n }\n function unimpl(message) {\n return new Error(\"unimplemented \" + message);\n }\n function buildStatements(statements, symbols) {\n let out = [];\n statements.forEach(s => out.push(...buildStatement(normalizeStatement(s), symbols)));\n return out;\n }\n function buildNormalizedStatements(statements, symbols) {\n let out = [];\n statements.forEach(s => out.push(...buildStatement(s, symbols)));\n return out;\n }\n function buildStatement(normalized, symbols) {\n if (symbols === void 0) {\n symbols = new ProgramSymbols();\n }\n switch (normalized.kind) {\n case HeadKind.AppendPath:\n {\n return [[normalized.trusted ? _wireFormat.SexpOpcodes.TrustingAppend : _wireFormat.SexpOpcodes.Append, buildGetPath(normalized.path, symbols)]];\n }\n case HeadKind.AppendExpr:\n {\n return [[normalized.trusted ? _wireFormat.SexpOpcodes.TrustingAppend : _wireFormat.SexpOpcodes.Append, buildExpression(normalized.expr, normalized.trusted ? 'TrustedAppend' : 'Append', symbols)]];\n }\n case HeadKind.Call:\n {\n let {\n head: path,\n params,\n hash,\n trusted\n } = normalized;\n let builtParams = params ? buildParams(params, symbols) : null;\n let builtHash = hash ? buildHash(hash, symbols) : null;\n let builtExpr = buildCallHead(path, trusted ? _wireFormat.VariableResolutionContext.AmbiguousInvoke : _wireFormat.VariableResolutionContext.AmbiguousAppendInvoke, symbols);\n return [[trusted ? _wireFormat.SexpOpcodes.TrustingAppend : _wireFormat.SexpOpcodes.Append, [_wireFormat.SexpOpcodes.Call, builtExpr, builtParams, builtHash]]];\n }\n case HeadKind.Literal:\n {\n return [[_wireFormat.SexpOpcodes.Append, normalized.value]];\n }\n case HeadKind.Comment:\n {\n return [[_wireFormat.SexpOpcodes.Comment, normalized.value]];\n }\n case HeadKind.Block:\n {\n let blocks = buildBlocks(normalized.blocks, normalized.blockParams, symbols);\n let hash = buildHash(normalized.hash, symbols);\n let params = buildParams(normalized.params, symbols);\n let path = buildCallHead(normalized.head, _wireFormat.VariableResolutionContext.ResolveAsComponentHead, symbols);\n return [[_wireFormat.SexpOpcodes.Block, path, params, hash, blocks]];\n }\n case HeadKind.Keyword:\n {\n return [buildKeyword(normalized, symbols)];\n }\n case HeadKind.Element:\n return buildElement(normalized, symbols);\n case HeadKind.Modifier:\n throw unimpl('modifier');\n case HeadKind.DynamicComponent:\n throw unimpl('dynamic component');\n default:\n throw (0, _util.assertNever)(normalized);\n }\n }\n function s(arr) {\n for (var _len = arguments.length, interpolated = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) {\n interpolated[_key - 1] = arguments[_key];\n }\n let result = arr.reduce((result, string, i) => result + (\"\" + string + (interpolated[i] ? String(interpolated[i]) : '')), '');\n return [Builder.Literal, result];\n }\n function c(arr) {\n for (var _len2 = arguments.length, interpolated = new Array(_len2 > 1 ? _len2 - 1 : 0), _key2 = 1; _key2 < _len2; _key2++) {\n interpolated[_key2 - 1] = arguments[_key2];\n }\n let result = arr.reduce((result, string, i) => result + (\"\" + string + (interpolated[i] ? String(interpolated[i]) : '')), '');\n return [Builder.Comment, result];\n }\n function unicode(charCode) {\n return String.fromCharCode(parseInt(charCode, 16));\n }\n const NEWLINE = _exports.NEWLINE = '\\n';\n function buildKeyword(normalized, symbols) {\n let {\n name\n } = normalized;\n let params = buildParams(normalized.params, symbols);\n let childSymbols = symbols.child(normalized.blockParams || []);\n let block = buildBlock(normalized.blocks['default'], childSymbols, childSymbols.paramSymbols);\n let inverse = normalized.blocks['else'] ? buildBlock(normalized.blocks['else'], symbols, []) : null;\n switch (name) {\n case 'with':\n return [_wireFormat.SexpOpcodes.With, (0, _util.expect)(params, 'with requires params')[0], block, inverse];\n case 'if':\n return [_wireFormat.SexpOpcodes.If, (0, _util.expect)(params, 'if requires params')[0], block, inverse];\n case 'each':\n {\n let keyExpr = normalized.hash ? normalized.hash['key'] : null;\n let key = keyExpr ? buildExpression(keyExpr, 'Strict', symbols) : null;\n return [_wireFormat.SexpOpcodes.Each, (0, _util.expect)(params, 'if requires params')[0], key, block, inverse];\n }\n default:\n throw new Error('unimplemented keyword');\n }\n }\n function buildElement(_ref, symbols) {\n let {\n name,\n attrs,\n block\n } = _ref;\n let out = [hasSplat(attrs) ? [_wireFormat.SexpOpcodes.OpenElementWithSplat, name] : [_wireFormat.SexpOpcodes.OpenElement, name]];\n if (attrs) {\n let {\n params,\n args\n } = buildElementParams(attrs, symbols);\n out.push(...params);\n (0, _util.assert)(args === null, \"Can't pass args to a simple element\");\n }\n out.push([_wireFormat.SexpOpcodes.FlushElement]);\n if (Array.isArray(block)) {\n block.forEach(s => out.push(...buildStatement(s, symbols)));\n } else if (block === null) ;else {\n throw (0, _util.assertNever)(block);\n }\n out.push([_wireFormat.SexpOpcodes.CloseElement]);\n return out;\n }\n function hasSplat(attrs) {\n if (attrs === null) return false;\n return Object.keys(attrs).some(a => attrs[a] === HeadKind.Splat);\n }\n function buildElementParams(attrs, symbols) {\n let params = [];\n let keys = [];\n let values = [];\n for (const [key, value] of Object.entries(attrs)) {\n if (value === HeadKind.Splat) {\n params.push([_wireFormat.SexpOpcodes.AttrSplat, symbols.block('&attrs')]);\n } else if (key[0] === '@') {\n keys.push(key);\n values.push(buildExpression(value, 'Strict', symbols));\n } else {\n params.push(...buildAttributeValue(key, value,\n // TODO: extract namespace from key\n extractNamespace(key), symbols));\n }\n }\n return {\n params,\n args: (0, _util.isPresentArray)(keys) && (0, _util.isPresentArray)(values) ? [keys, values] : null\n };\n }\n function extractNamespace(name) {\n if (name === 'xmlns') {\n return _util.NS_XMLNS;\n }\n let match = /^([^:]*):([^:]*)$/u.exec(name);\n if (match === null) {\n return null;\n }\n let namespace = match[1];\n switch (namespace) {\n case 'xlink':\n return _util.NS_XLINK;\n case 'xml':\n return _util.NS_XML;\n case 'xmlns':\n return _util.NS_XMLNS;\n }\n return null;\n }\n function buildAttributeValue(name, value, namespace, symbols) {\n switch (value.type) {\n case ExpressionKind.Literal:\n {\n let val = value.value;\n if (val === false) {\n return [];\n } else if (val === true) {\n return [[_wireFormat.SexpOpcodes.StaticAttr, name, '', namespace != null ? namespace : undefined]];\n } else if (typeof val === 'string') {\n return [[_wireFormat.SexpOpcodes.StaticAttr, name, val, namespace != null ? namespace : undefined]];\n } else {\n throw new Error(\"Unexpected/unimplemented literal attribute \" + JSON.stringify(val));\n }\n }\n default:\n return [[_wireFormat.SexpOpcodes.DynamicAttr, name, buildExpression(value, 'AttrValue', symbols), namespace != null ? namespace : undefined]];\n }\n }\n function varContext(context, bare) {\n switch (context) {\n case 'Append':\n return bare ? 'AppendBare' : 'AppendInvoke';\n case 'TrustedAppend':\n return bare ? 'TrustedAppendBare' : 'TrustedAppendInvoke';\n case 'AttrValue':\n return bare ? 'AttrValueBare' : 'AttrValueInvoke';\n default:\n return context;\n }\n }\n function buildExpression(expr, context, symbols) {\n switch (expr.type) {\n case ExpressionKind.GetPath:\n {\n return buildGetPath(expr, symbols);\n }\n case ExpressionKind.GetVar:\n {\n return buildVar(expr.variable, varContext(context, true), symbols);\n }\n case ExpressionKind.Concat:\n {\n return [_wireFormat.SexpOpcodes.Concat, buildConcat(expr.params, symbols)];\n }\n case ExpressionKind.Call:\n {\n let builtParams = buildParams(expr.params, symbols);\n let builtHash = buildHash(expr.hash, symbols);\n let builtExpr = buildCallHead(expr.head, context === 'Strict' ? 'SubExpression' : varContext(context, false), symbols);\n return [_wireFormat.SexpOpcodes.Call, builtExpr, builtParams, builtHash];\n }\n case ExpressionKind.HasBlock:\n {\n return [_wireFormat.SexpOpcodes.HasBlock, buildVar({\n kind: VariableKind.Block,\n name: expr.name,\n mode: 'loose'\n }, _wireFormat.VariableResolutionContext.Strict, symbols)];\n }\n case ExpressionKind.HasBlockParams:\n {\n return [_wireFormat.SexpOpcodes.HasBlockParams, buildVar({\n kind: VariableKind.Block,\n name: expr.name,\n mode: 'loose'\n }, _wireFormat.VariableResolutionContext.Strict, symbols)];\n }\n case ExpressionKind.Literal:\n {\n if (expr.value === undefined) {\n return [_wireFormat.SexpOpcodes.Undefined];\n } else {\n return expr.value;\n }\n }\n default:\n (0, _util.assertNever)(expr);\n }\n }\n function buildCallHead(callHead, context, symbols) {\n if (callHead.type === ExpressionKind.GetVar) {\n return buildVar(callHead.variable, context, symbols);\n } else {\n return buildGetPath(callHead, symbols);\n }\n }\n function buildGetPath(head, symbols) {\n return buildVar(head.path.head, _wireFormat.VariableResolutionContext.Strict, symbols, head.path.tail);\n }\n function buildVar(head, context, symbols, path) {\n let op = _wireFormat.SexpOpcodes.GetSymbol;\n let sym;\n switch (head.kind) {\n case VariableKind.Free:\n if (context === 'Strict') {\n op = _wireFormat.SexpOpcodes.GetStrictKeyword;\n } else if (context === 'AppendBare') {\n op = _wireFormat.SexpOpcodes.GetFreeAsComponentOrHelperHeadOrThisFallback;\n } else if (context === 'AppendInvoke') {\n op = _wireFormat.SexpOpcodes.GetFreeAsComponentOrHelperHead;\n } else if (context === 'TrustedAppendBare') {\n op = _wireFormat.SexpOpcodes.GetFreeAsHelperHeadOrThisFallback;\n } else if (context === 'TrustedAppendInvoke') {\n op = _wireFormat.SexpOpcodes.GetFreeAsHelperHead;\n } else if (context === 'AttrValueBare') {\n op = _wireFormat.SexpOpcodes.GetFreeAsHelperHeadOrThisFallback;\n } else if (context === 'AttrValueInvoke') {\n op = _wireFormat.SexpOpcodes.GetFreeAsHelperHead;\n } else if (context === 'SubExpression') {\n op = _wireFormat.SexpOpcodes.GetFreeAsHelperHead;\n } else {\n op = expressionContextOp(context);\n }\n sym = symbols.freeVar(head.name);\n break;\n default:\n op = _wireFormat.SexpOpcodes.GetSymbol;\n sym = getSymbolForVar(head.kind, symbols, head.name);\n }\n if (path === undefined || path.length === 0) {\n return [op, sym];\n } else {\n return [op, sym, path];\n }\n }\n function getSymbolForVar(kind, symbols, name) {\n switch (kind) {\n case VariableKind.Arg:\n return symbols.arg(name);\n case VariableKind.Block:\n return symbols.block(name);\n case VariableKind.Local:\n return symbols.local(name);\n case VariableKind.This:\n return symbols.this();\n default:\n return (0, _util.exhausted)(kind);\n }\n }\n function expressionContextOp(context) {\n switch (context) {\n case _wireFormat.VariableResolutionContext.Strict:\n return _wireFormat.SexpOpcodes.GetStrictKeyword;\n case _wireFormat.VariableResolutionContext.AmbiguousAppend:\n return _wireFormat.SexpOpcodes.GetFreeAsComponentOrHelperHeadOrThisFallback;\n case _wireFormat.VariableResolutionContext.AmbiguousAppendInvoke:\n return _wireFormat.SexpOpcodes.GetFreeAsComponentOrHelperHead;\n case _wireFormat.VariableResolutionContext.AmbiguousInvoke:\n return _wireFormat.SexpOpcodes.GetFreeAsHelperHeadOrThisFallback;\n case _wireFormat.VariableResolutionContext.ResolveAsCallHead:\n return _wireFormat.SexpOpcodes.GetFreeAsHelperHead;\n case _wireFormat.VariableResolutionContext.ResolveAsModifierHead:\n return _wireFormat.SexpOpcodes.GetFreeAsModifierHead;\n case _wireFormat.VariableResolutionContext.ResolveAsComponentHead:\n return _wireFormat.SexpOpcodes.GetFreeAsComponentHead;\n default:\n return (0, _util.exhausted)(context);\n }\n }\n function buildParams(exprs, symbols) {\n if (exprs === null || !(0, _util.isPresentArray)(exprs)) return null;\n return exprs.map(e => buildExpression(e, 'Strict', symbols));\n }\n function buildConcat(exprs, symbols) {\n return exprs.map(e => buildExpression(e, 'AttrValue', symbols));\n }\n function buildHash(exprs, symbols) {\n if (exprs === null) return null;\n let out = [[], []];\n for (const [key, value] of Object.entries(exprs)) {\n out[0].push(key);\n out[1].push(buildExpression(value, 'Strict', symbols));\n }\n return out;\n }\n function buildBlocks(blocks, blockParams, parent) {\n let keys = [];\n let values = [];\n for (const [name, block] of Object.entries(blocks)) {\n keys.push(name);\n if (name === 'default') {\n let symbols = parent.child(blockParams || []);\n values.push(buildBlock(block, symbols, symbols.paramSymbols));\n } else {\n values.push(buildBlock(block, parent, []));\n }\n }\n return [keys, values];\n }\n function buildBlock(block, symbols, locals) {\n if (locals === void 0) {\n locals = [];\n }\n return [buildNormalizedStatements(block, symbols), locals];\n }\n class Template extends (0, _syntax.node)('Template').fields() {}\n class InElement extends (0, _syntax.node)('InElement').fields() {}\n class Not extends (0, _syntax.node)('Not').fields() {}\n class If extends (0, _syntax.node)('If').fields() {}\n class IfInline extends (0, _syntax.node)('IfInline').fields() {}\n class Each extends (0, _syntax.node)('Each').fields() {}\n class With extends (0, _syntax.node)('With').fields() {}\n class Let extends (0, _syntax.node)('Let').fields() {}\n class WithDynamicVars extends (0, _syntax.node)('WithDynamicVars').fields() {}\n class GetDynamicVar extends (0, _syntax.node)('GetDynamicVar').fields() {}\n class Log extends (0, _syntax.node)('Log').fields() {}\n class InvokeComponent extends (0, _syntax.node)('InvokeComponent').fields() {}\n class NamedBlocks extends (0, _syntax.node)('NamedBlocks').fields() {}\n class NamedBlock extends (0, _syntax.node)('NamedBlock').fields() {}\n class EndBlock extends (0, _syntax.node)('EndBlock').fields() {}\n class AppendTrustedHTML extends (0, _syntax.node)('AppendTrustedHTML').fields() {}\n class AppendTextNode extends (0, _syntax.node)('AppendTextNode').fields() {}\n class AppendComment extends (0, _syntax.node)('AppendComment').fields() {}\n class Component extends (0, _syntax.node)('Component').fields() {}\n class StaticAttr extends (0, _syntax.node)('StaticAttr').fields() {}\n class DynamicAttr extends (0, _syntax.node)('DynamicAttr').fields() {}\n class SimpleElement extends (0, _syntax.node)('SimpleElement').fields() {}\n class ElementParameters extends (0, _syntax.node)('ElementParameters').fields() {}\n class Yield extends (0, _syntax.node)('Yield').fields() {}\n class Debugger extends (0, _syntax.node)('Debugger').fields() {}\n class CallExpression extends (0, _syntax.node)('CallExpression').fields() {}\n class DeprecatedCallExpression extends (0, _syntax.node)('DeprecatedCallExpression').fields() {}\n class Modifier extends (0, _syntax.node)('Modifier').fields() {}\n class InvokeBlock extends (0, _syntax.node)('InvokeBlock').fields() {}\n class SplatAttr extends (0, _syntax.node)('SplatAttr').fields() {}\n class PathExpression extends (0, _syntax.node)('PathExpression').fields() {}\n class GetWithResolver extends (0, _syntax.node)('GetWithResolver').fields() {}\n class GetSymbol extends (0, _syntax.node)('GetSymbol').fields() {}\n class GetFreeWithContext extends (0, _syntax.node)('GetFreeWithContext').fields() {}\n /** strict mode */\n class GetFree extends (0, _syntax.node)('GetFree').fields() {}\n class Missing extends (0, _syntax.node)('Missing').fields() {}\n class InterpolateExpression extends (0, _syntax.node)('InterpolateExpression').fields() {}\n class HasBlock extends (0, _syntax.node)('HasBlock').fields() {}\n class HasBlockParams extends (0, _syntax.node)('HasBlockParams').fields() {}\n class Curry extends (0, _syntax.node)('Curry').fields() {}\n class Positional extends (0, _syntax.node)('Positional').fields() {}\n class NamedArguments extends (0, _syntax.node)('NamedArguments').fields() {}\n class NamedArgument extends (0, _syntax.node)('NamedArgument').fields() {}\n class Args extends (0, _syntax.node)('Args').fields() {}\n class Tail extends (0, _syntax.node)('Tail').fields() {}\n class PresentList {\n constructor(list) {\n this.list = list;\n }\n toArray() {\n return this.list;\n }\n map(callback) {\n let result = (0, _util.mapPresentArray)(this.list, callback);\n return new PresentList(result);\n }\n filter(predicate) {\n let out = [];\n for (let item of this.list) {\n if (predicate(item)) {\n out.push(item);\n }\n }\n return OptionalList(out);\n }\n toPresentArray() {\n return this.list;\n }\n into(_ref2) {\n let {\n ifPresent\n } = _ref2;\n return ifPresent(this);\n }\n }\n class EmptyList {\n constructor() {\n this.list = [];\n }\n map(_callback) {\n return new EmptyList();\n }\n filter(_predicate) {\n return new EmptyList();\n }\n toArray() {\n return this.list;\n }\n toPresentArray() {\n return null;\n }\n into(_ref3) {\n let {\n ifEmpty\n } = _ref3;\n return ifEmpty();\n }\n }\n\n // export type OptionalList<T> = PresentList<T> | EmptyList<T>;\n\n function OptionalList(value) {\n if ((0, _util.isPresentArray)(value)) {\n return new PresentList(value);\n } else {\n return new EmptyList();\n }\n }\n class ResultImpl {\n static all() {\n let out = [];\n for (var _len3 = arguments.length, results = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n results[_key3] = arguments[_key3];\n }\n for (let result of results) {\n if (result.isErr) {\n return result.cast();\n } else {\n out.push(result.value);\n }\n }\n return Ok(out);\n }\n }\n const Result = ResultImpl;\n class OkImpl extends ResultImpl {\n constructor(value) {\n super();\n this.isOk = true;\n this.isErr = false;\n this.value = value;\n }\n expect(_message) {\n return this.value;\n }\n ifOk(callback) {\n callback(this.value);\n return this;\n }\n andThen(callback) {\n return callback(this.value);\n }\n mapOk(callback) {\n return Ok(callback(this.value));\n }\n ifErr(_callback) {\n return this;\n }\n mapErr(_callback) {\n return this;\n }\n }\n class ErrImpl extends ResultImpl {\n constructor(reason) {\n super();\n this.isOk = false;\n this.isErr = true;\n this.reason = reason;\n }\n expect(message) {\n throw new Error(message || 'expected an Ok, got Err');\n }\n andThen(_callback) {\n return this.cast();\n }\n mapOk(_callback) {\n return this.cast();\n }\n ifOk(_callback) {\n return this;\n }\n mapErr(callback) {\n return Err(callback(this.reason));\n }\n ifErr(callback) {\n callback(this.reason);\n return this;\n }\n cast() {\n return this;\n }\n }\n function Ok(value) {\n return new OkImpl(value);\n }\n function Err(reason) {\n return new ErrImpl(reason);\n }\n class ResultArray {\n constructor(items) {\n if (items === void 0) {\n items = [];\n }\n this.items = items;\n }\n add(item) {\n this.items.push(item);\n }\n toArray() {\n let err = this.items.filter(item => item instanceof ErrImpl)[0];\n if (err !== undefined) {\n return err.cast();\n } else {\n return Ok(this.items.map(item => item.value));\n }\n }\n toOptionalList() {\n return this.toArray().mapOk(arr => OptionalList(arr));\n }\n }\n function hasPath(node) {\n return node.callee.type === 'Path';\n }\n function isHelperInvocation(node) {\n if (!hasPath(node)) {\n return false;\n }\n return !node.args.isEmpty();\n }\n function isSimplePath(path) {\n if (path.type === 'Path') {\n let {\n ref: head,\n tail: parts\n } = path;\n return head.type === 'Free' && !_syntax.ASTv2.isStrictResolution(head.resolution) && parts.length === 0;\n } else {\n return false;\n }\n }\n function isStrictHelper(expr) {\n if (expr.callee.type !== 'Path') {\n return true;\n }\n if (expr.callee.ref.type !== 'Free') {\n return true;\n }\n return _syntax.ASTv2.isStrictResolution(expr.callee.ref.resolution);\n }\n function assertIsValidModifier(helper) {\n if (isStrictHelper(helper) || isSimplePath(helper.callee)) {\n return;\n }\n throw (0, _syntax.generateSyntaxError)(\"`\" + printPath(helper.callee) + \"` is not a valid name for a modifier\", helper.loc);\n }\n function printPath(path) {\n switch (path.type) {\n case 'Literal':\n return JSON.stringify(path.value);\n case 'Path':\n {\n let printedPath = [printPathHead(path.ref)];\n printedPath.push(...path.tail.map(t => t.chars));\n return printedPath.join('.');\n }\n case 'Call':\n return \"(\" + printPath(path.callee) + \" ...)\";\n case 'DeprecatedCall':\n return \"\" + path.callee.name;\n case 'Interpolate':\n throw (0, _util.unreachable)('a concat statement cannot appear as the head of an expression');\n }\n }\n function printPathHead(head) {\n switch (head.type) {\n case 'Arg':\n return head.name.chars;\n case 'Free':\n case 'Local':\n return head.name;\n case 'This':\n return 'this';\n }\n }\n class NormalizeExpressions {\n visit(node, state) {\n switch (node.type) {\n case 'Literal':\n return Ok(this.Literal(node));\n case 'Interpolate':\n return this.Interpolate(node, state);\n case 'Path':\n return this.PathExpression(node);\n case 'Call':\n {\n let translated = CALL_KEYWORDS.translate(node, state);\n if (translated !== null) {\n return translated;\n }\n return this.CallExpression(node, state);\n }\n case 'DeprecatedCall':\n return this.DeprecaedCallExpression(node, state);\n }\n }\n visitList(nodes, state) {\n return new ResultArray(nodes.map(e => VISIT_EXPRS.visit(e, state))).toOptionalList();\n }\n\n /**\n * Normalize paths into `hir.Path` or a `hir.Expr` that corresponds to the ref.\n *\n * TODO since keywords don't support tails anyway, distinguish PathExpression from\n * VariableReference in ASTv2.\n */\n PathExpression(path) {\n let ref = this.VariableReference(path.ref);\n let {\n tail\n } = path;\n if ((0, _util.isPresentArray)(tail)) {\n let tailLoc = tail[0].loc.extend((0, _util.getLast)(tail).loc);\n return Ok(new PathExpression({\n loc: path.loc,\n head: ref,\n tail: new Tail({\n loc: tailLoc,\n members: tail\n })\n }));\n } else {\n return Ok(ref);\n }\n }\n VariableReference(ref) {\n return ref;\n }\n Literal(literal) {\n return literal;\n }\n Interpolate(expr, state) {\n let parts = expr.parts.map(convertPathToCallIfKeyword);\n return VISIT_EXPRS.visitList(parts, state).mapOk(parts => new InterpolateExpression({\n loc: expr.loc,\n parts: parts\n }));\n }\n CallExpression(expr, state) {\n if (!hasPath(expr)) {\n throw new Error(\"unimplemented subexpression at the head of a subexpression\");\n } else {\n return Result.all(VISIT_EXPRS.visit(expr.callee, state), VISIT_EXPRS.Args(expr.args, state)).mapOk(_ref4 => {\n let [callee, args] = _ref4;\n return new CallExpression({\n loc: expr.loc,\n callee,\n args\n });\n });\n }\n }\n DeprecaedCallExpression(_ref5, _state) {\n let {\n arg,\n callee,\n loc\n } = _ref5;\n return Ok(new DeprecatedCallExpression({\n loc,\n arg,\n callee\n }));\n }\n Args(_ref6, state) {\n let {\n positional,\n named,\n loc\n } = _ref6;\n return Result.all(this.Positional(positional, state), this.NamedArguments(named, state)).mapOk(_ref7 => {\n let [positional, named] = _ref7;\n return new Args({\n loc,\n positional,\n named\n });\n });\n }\n Positional(positional, state) {\n return VISIT_EXPRS.visitList(positional.exprs, state).mapOk(list => new Positional({\n loc: positional.loc,\n list\n }));\n }\n NamedArguments(named, state) {\n let pairs = named.entries.map(arg => {\n let value = convertPathToCallIfKeyword(arg.value);\n return VISIT_EXPRS.visit(value, state).mapOk(value => new NamedArgument({\n loc: arg.loc,\n key: arg.name,\n value\n }));\n });\n return new ResultArray(pairs).toOptionalList().mapOk(pairs => new NamedArguments({\n loc: named.loc,\n entries: pairs\n }));\n }\n }\n function convertPathToCallIfKeyword(path) {\n if (path.type === 'Path' && path.ref.type === 'Free' && path.ref.name in _syntax.KEYWORDS_TYPES) {\n return new _syntax.ASTv2.CallExpression({\n callee: path,\n args: _syntax.ASTv2.Args.empty(path.loc),\n loc: path.loc\n });\n }\n return path;\n }\n const VISIT_EXPRS = new NormalizeExpressions();\n class KeywordImpl {\n constructor(keyword, type, delegate) {\n this.types = void 0;\n this.keyword = keyword;\n this.delegate = delegate;\n let nodes = new Set();\n for (let nodeType of KEYWORD_NODES[type]) {\n nodes.add(nodeType);\n }\n this.types = nodes;\n }\n match(node) {\n if (!this.types.has(node.type)) {\n return false;\n }\n let path = getCalleeExpression(node);\n if (path !== null && path.type === 'Path' && path.ref.type === 'Free') {\n if (path.tail.length > 0) {\n if (path.ref.resolution.serialize() === 'Loose') {\n // cannot be a keyword reference, keywords do not allow paths (must be\n // relying on implicit this fallback)\n return false;\n }\n }\n return path.ref.name === this.keyword;\n } else {\n return false;\n }\n }\n translate(node, state) {\n if (this.match(node)) {\n let path = getCalleeExpression(node);\n if (path !== null && path.type === 'Path' && path.tail.length > 0) {\n return Err((0, _syntax.generateSyntaxError)(\"The `\" + this.keyword + \"` keyword was used incorrectly. It was used as `\" + path.loc.asString() + \"`, but it cannot be used with additional path segments. \\n\\nError caused by\", node.loc));\n }\n let param = this.delegate.assert(node, state);\n return param.andThen(param => this.delegate.translate({\n node,\n state\n }, param));\n } else {\n return null;\n }\n }\n }\n const KEYWORD_NODES = {\n Call: ['Call'],\n Block: ['InvokeBlock'],\n Append: ['AppendContent'],\n Modifier: ['ElementModifier']\n };\n\n /**\n * A \"generic\" keyword is something like `has-block`, which makes sense in the context\n * of sub-expression or append\n */\n\n function keyword(keyword, type, delegate) {\n return new KeywordImpl(keyword, type, delegate);\n }\n function getCalleeExpression(node) {\n switch (node.type) {\n // This covers the inside of attributes and expressions, as well as the callee\n // of call nodes\n case 'Path':\n return node;\n case 'AppendContent':\n return getCalleeExpression(node.value);\n case 'Call':\n case 'InvokeBlock':\n case 'ElementModifier':\n return node.callee;\n default:\n return null;\n }\n }\n class Keywords {\n constructor(type) {\n this._keywords = [];\n this._type = void 0;\n this._type = type;\n }\n kw(name, delegate) {\n this._keywords.push(keyword(name, this._type, delegate));\n return this;\n }\n translate(node, state) {\n for (let keyword of this._keywords) {\n let result = keyword.translate(node, state);\n if (result !== null) {\n return result;\n }\n }\n let path = getCalleeExpression(node);\n if (path && path.type === 'Path' && path.ref.type === 'Free' && (0, _syntax.isKeyword)(path.ref.name)) {\n let {\n name\n } = path.ref;\n let usedType = this._type;\n let validTypes = _syntax.KEYWORDS_TYPES[name];\n if (!validTypes.includes(usedType)) {\n return Err((0, _syntax.generateSyntaxError)(\"The `\" + name + \"` keyword was used incorrectly. It was used as \" + typesToReadableName[usedType] + \", but its valid usages are:\\n\\n\" + generateTypesMessage(name, validTypes) + \"\\n\\nError caused by\", node.loc));\n }\n }\n return null;\n }\n }\n const typesToReadableName = {\n Append: 'an append statement',\n Block: 'a block statement',\n Call: 'a call expression',\n Modifier: 'a modifier'\n };\n function generateTypesMessage(name, types) {\n return types.map(type => {\n switch (type) {\n case 'Append':\n return \"- As an append statement, as in: {{\" + name + \"}}\";\n case 'Block':\n return \"- As a block statement, as in: {{#\" + name + \"}}{{/\" + name + \"}}\";\n case 'Call':\n return \"- As an expression, as in: (\" + name + \")\";\n case 'Modifier':\n return \"- As a modifier, as in: <div {{\" + name + \"}}></div>\";\n default:\n return (0, _util.exhausted)(type);\n }\n }).join('\\n\\n');\n }\n\n /**\n * This function builds keyword definitions for a particular type of AST node (`KeywordType`).\n *\n * You can build keyword definitions for:\n *\n * - `Expr`: A `SubExpression` or `PathExpression`\n * - `Block`: A `BlockStatement`\n * - A `BlockStatement` is a keyword candidate if its head is a\n * `PathExpression`\n * - `Append`: An `AppendStatement`\n *\n * A node is a keyword candidate if:\n *\n * - A `PathExpression` is a keyword candidate if it has no tail, and its\n * head expression is a `LocalVarHead` or `FreeVarHead` whose name is\n * the keyword's name.\n * - A `SubExpression`, `AppendStatement`, or `BlockStatement` is a keyword\n * candidate if its head is a keyword candidate.\n *\n * The keyword infrastructure guarantees that:\n *\n * - If a node is not a keyword candidate, it is never passed to any keyword's\n * `assert` method.\n * - If a node is not the `KeywordType` for a particular keyword, it will not\n * be passed to the keyword's `assert` method.\n *\n * `Expr` keywords are used in expression positions and should return HIR\n * expressions. `Block` and `Append` keywords are used in statement\n * positions and should return HIR statements.\n *\n * A keyword definition has two parts:\n *\n * - `match`, which determines whether an AST node matches the keyword, and can\n * optionally return some information extracted from the AST node.\n * - `translate`, which takes a matching AST node as well as the extracted\n * information and returns an appropriate HIR instruction.\n *\n * # Example\n *\n * This keyword:\n *\n * - turns `(hello)` into `\"hello\"`\n * - as long as `hello` is not in scope\n * - makes it an error to pass any arguments (such as `(hello world)`)\n *\n * ```ts\n * keywords('SubExpr').kw('hello', {\n * assert(node: ExprKeywordNode): Result<void> | false {\n * // we don't want to transform `hello` as a `PathExpression`\n * if (node.type !== 'SubExpression') {\n * return false;\n * }\n *\n * // node.head would be `LocalVarHead` if `hello` was in scope\n * if (node.head.type !== 'FreeVarHead') {\n * return false;\n * }\n *\n * if (node.params.length || node.hash) {\n * return Err(generateSyntaxError(`(hello) does not take any arguments`), node.loc);\n * } else {\n * return Ok();\n * }\n * },\n *\n * translate(node: ASTv2.SubExpression): hir.Expression {\n * return ASTv2.builders.literal(\"hello\", node.loc)\n * }\n * })\n * ```\n *\n * The keyword infrastructure checks to make sure that the node is the right\n * type before calling `assert`, so you only need to consider `SubExpression`\n * and `PathExpression` here. It also checks to make sure that the node passed\n * to `assert` has the keyword name in the right place.\n *\n * Note the important difference between returning `false` from `assert`,\n * which just means that the node didn't match, and returning `Err`, which\n * means that the node matched, but there was a keyword-specific syntax\n * error.\n */\n function keywords(type) {\n return new Keywords(type);\n }\n function toAppend(_ref8) {\n let {\n assert,\n translate\n } = _ref8;\n return {\n assert,\n translate(_ref9, value) {\n let {\n node,\n state\n } = _ref9;\n let result = translate({\n node,\n state\n }, value);\n return result.mapOk(text => new AppendTextNode({\n text,\n loc: node.loc\n }));\n }\n };\n }\n const CurriedTypeToReadableType = {\n [_vm.CurriedTypes.Component]: 'component',\n [_vm.CurriedTypes.Helper]: 'helper',\n [_vm.CurriedTypes.Modifier]: 'modifier'\n };\n function assertCurryKeyword(curriedType) {\n return (node, state) => {\n let readableType = CurriedTypeToReadableType[curriedType];\n let stringsAllowed = curriedType === _vm.CurriedTypes.Component;\n let {\n args\n } = node;\n let definition = args.nth(0);\n if (definition === null) {\n return Err((0, _syntax.generateSyntaxError)(\"(\" + readableType + \") requires a \" + readableType + \" definition or identifier as its first positional parameter, did not receive any parameters.\", args.loc));\n }\n if (definition.type === 'Literal') {\n if (stringsAllowed && state.isStrict) {\n return Err((0, _syntax.generateSyntaxError)(\"(\" + readableType + \") cannot resolve string values in strict mode templates\", node.loc));\n } else if (!stringsAllowed) {\n return Err((0, _syntax.generateSyntaxError)(\"(\" + readableType + \") cannot resolve string values, you must pass a \" + readableType + \" definition directly\", node.loc));\n }\n }\n args = new _syntax.ASTv2.Args({\n positional: new _syntax.ASTv2.PositionalArguments({\n exprs: args.positional.exprs.slice(1),\n loc: args.positional.loc\n }),\n named: args.named,\n loc: args.loc\n });\n return Ok({\n definition,\n args\n });\n };\n }\n function translateCurryKeyword(curriedType) {\n return (_ref10, _ref11) => {\n let {\n node,\n state\n } = _ref10;\n let {\n definition,\n args\n } = _ref11;\n let definitionResult = VISIT_EXPRS.visit(definition, state);\n let argsResult = VISIT_EXPRS.Args(args, state);\n return Result.all(definitionResult, argsResult).mapOk(_ref12 => {\n let [definition, args] = _ref12;\n return new Curry({\n loc: node.loc,\n curriedType,\n definition,\n args\n });\n });\n };\n }\n function curryKeyword(curriedType) {\n return {\n assert: assertCurryKeyword(curriedType),\n translate: translateCurryKeyword(curriedType)\n };\n }\n function assertGetDynamicVarKeyword(node) {\n let call = node.type === 'AppendContent' ? node.value : node;\n let named = call.type === 'Call' ? call.args.named : null;\n let positionals = call.type === 'Call' ? call.args.positional : null;\n if (named && !named.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"(-get-dynamic-vars) does not take any named arguments\", node.loc));\n }\n let varName = positionals == null ? void 0 : positionals.nth(0);\n if (!varName) {\n return Err((0, _syntax.generateSyntaxError)(\"(-get-dynamic-vars) requires a var name to get\", node.loc));\n }\n if (positionals && positionals.size > 1) {\n return Err((0, _syntax.generateSyntaxError)(\"(-get-dynamic-vars) only receives one positional arg\", node.loc));\n }\n return Ok(varName);\n }\n function translateGetDynamicVarKeyword(_ref13, name) {\n let {\n node,\n state\n } = _ref13;\n return VISIT_EXPRS.visit(name, state).mapOk(name => new GetDynamicVar({\n name,\n loc: node.loc\n }));\n }\n const getDynamicVarKeyword = {\n assert: assertGetDynamicVarKeyword,\n translate: translateGetDynamicVarKeyword\n };\n function assertHasBlockKeyword(type) {\n return node => {\n let call = node.type === 'AppendContent' ? node.value : node;\n let named = call.type === 'Call' ? call.args.named : null;\n let positionals = call.type === 'Call' ? call.args.positional : null;\n if (named && !named.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"(\" + type + \") does not take any named arguments\", call.loc));\n }\n if (!positionals || positionals.isEmpty()) {\n return Ok(_syntax.SourceSlice.synthetic('default'));\n } else if (positionals.exprs.length === 1) {\n let positional = positionals.exprs[0];\n if (_syntax.ASTv2.isLiteral(positional, 'string')) {\n return Ok(positional.toSlice());\n } else {\n return Err((0, _syntax.generateSyntaxError)(\"(\" + type + \") can only receive a string literal as its first argument\", call.loc));\n }\n } else {\n return Err((0, _syntax.generateSyntaxError)(\"(\" + type + \") only takes a single positional argument\", call.loc));\n }\n };\n }\n function translateHasBlockKeyword(type) {\n return (_ref14, target) => {\n let {\n node,\n state: {\n scope\n }\n } = _ref14;\n let block = type === 'has-block' ? new HasBlock({\n loc: node.loc,\n target,\n symbol: scope.allocateBlock(target.chars)\n }) : new HasBlockParams({\n loc: node.loc,\n target,\n symbol: scope.allocateBlock(target.chars)\n });\n return Ok(block);\n };\n }\n function hasBlockKeyword(type) {\n return {\n assert: assertHasBlockKeyword(type),\n translate: translateHasBlockKeyword(type)\n };\n }\n function assertIfUnlessInlineKeyword(type) {\n return originalNode => {\n let inverted = type === 'unless';\n let node = originalNode.type === 'AppendContent' ? originalNode.value : originalNode;\n let named = node.type === 'Call' ? node.args.named : null;\n let positional = node.type === 'Call' ? node.args.positional : null;\n if (named && !named.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"(\" + type + \") cannot receive named parameters, received \" + named.entries.map(e => e.name.chars).join(', '), originalNode.loc));\n }\n let condition = positional == null ? void 0 : positional.nth(0);\n if (!positional || !condition) {\n return Err((0, _syntax.generateSyntaxError)(\"When used inline, (\" + type + \") requires at least two parameters 1. the condition that determines the state of the (\" + type + \"), and 2. the value to return if the condition is \" + (inverted ? 'false' : 'true') + \". Did not receive any parameters\", originalNode.loc));\n }\n let truthy = positional.nth(1);\n let falsy = positional.nth(2);\n if (truthy === null) {\n return Err((0, _syntax.generateSyntaxError)(\"When used inline, (\" + type + \") requires at least two parameters 1. the condition that determines the state of the (\" + type + \"), and 2. the value to return if the condition is \" + (inverted ? 'false' : 'true') + \". Received only one parameter, the condition\", originalNode.loc));\n }\n if (positional.size > 3) {\n var _positional$size;\n return Err((0, _syntax.generateSyntaxError)(\"When used inline, (\" + type + \") can receive a maximum of three positional parameters 1. the condition that determines the state of the (\" + type + \"), 2. the value to return if the condition is \" + (inverted ? 'false' : 'true') + \", and 3. the value to return if the condition is \" + (inverted ? 'true' : 'false') + \". Received \" + ((_positional$size = positional == null ? void 0 : positional.size) != null ? _positional$size : 0) + \" parameters\", originalNode.loc));\n }\n return Ok({\n condition,\n truthy,\n falsy\n });\n };\n }\n function translateIfUnlessInlineKeyword(type) {\n let inverted = type === 'unless';\n return (_ref15, _ref16) => {\n let {\n node,\n state\n } = _ref15;\n let {\n condition,\n truthy,\n falsy\n } = _ref16;\n let conditionResult = VISIT_EXPRS.visit(condition, state);\n let truthyResult = VISIT_EXPRS.visit(truthy, state);\n let falsyResult = falsy ? VISIT_EXPRS.visit(falsy, state) : Ok(null);\n return Result.all(conditionResult, truthyResult, falsyResult).mapOk(_ref17 => {\n let [condition, truthy, falsy] = _ref17;\n if (inverted) {\n condition = new Not({\n value: condition,\n loc: node.loc\n });\n }\n return new IfInline({\n loc: node.loc,\n condition,\n truthy,\n falsy\n });\n });\n };\n }\n function ifUnlessInlineKeyword(type) {\n return {\n assert: assertIfUnlessInlineKeyword(type),\n translate: translateIfUnlessInlineKeyword(type)\n };\n }\n function assertLogKeyword(node) {\n let {\n args: {\n named,\n positional\n }\n } = node;\n if (named && !named.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"(log) does not take any named arguments\", node.loc));\n }\n return Ok(positional);\n }\n function translateLogKeyword(_ref18, positional) {\n let {\n node,\n state\n } = _ref18;\n return VISIT_EXPRS.Positional(positional, state).mapOk(positional => new Log({\n positional,\n loc: node.loc\n }));\n }\n const logKeyword = {\n assert: assertLogKeyword,\n translate: translateLogKeyword\n };\n const APPEND_KEYWORDS = keywords('Append').kw('has-block', toAppend(hasBlockKeyword('has-block'))).kw('has-block-params', toAppend(hasBlockKeyword('has-block-params'))).kw('-get-dynamic-var', toAppend(getDynamicVarKeyword)).kw('log', toAppend(logKeyword)).kw('if', toAppend(ifUnlessInlineKeyword('if'))).kw('unless', toAppend(ifUnlessInlineKeyword('unless'))).kw('yield', {\n assert(node) {\n let {\n args\n } = node;\n if (args.named.isEmpty()) {\n return Ok({\n target: _syntax.src.SourceSpan.synthetic('default').toSlice(),\n positional: args.positional\n });\n } else {\n let target = args.named.get('to');\n if (args.named.size > 1 || target === null) {\n return Err((0, _syntax.generateSyntaxError)(\"yield only takes a single named argument: 'to'\", args.named.loc));\n }\n if (_syntax.ASTv2.isLiteral(target, 'string')) {\n return Ok({\n target: target.toSlice(),\n positional: args.positional\n });\n } else {\n return Err((0, _syntax.generateSyntaxError)(\"you can only yield to a literal string value\", target.loc));\n }\n }\n },\n translate(_ref19, _ref20) {\n let {\n node,\n state\n } = _ref19;\n let {\n target,\n positional\n } = _ref20;\n return VISIT_EXPRS.Positional(positional, state).mapOk(positional => new Yield({\n loc: node.loc,\n target,\n to: state.scope.allocateBlock(target.chars),\n positional\n }));\n }\n }).kw('debugger', {\n assert(node) {\n let {\n args\n } = node;\n let {\n positional\n } = args;\n if (args.isEmpty()) {\n return Ok(undefined);\n } else {\n if (positional.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"debugger does not take any named arguments\", node.loc));\n } else {\n return Err((0, _syntax.generateSyntaxError)(\"debugger does not take any positional arguments\", node.loc));\n }\n }\n },\n translate(_ref21) {\n let {\n node,\n state: {\n scope\n }\n } = _ref21;\n scope.setHasDebugger();\n return Ok(new Debugger({\n loc: node.loc,\n scope\n }));\n }\n }).kw('component', {\n assert: assertCurryKeyword(_vm.CurriedTypes.Component),\n translate(_ref22, _ref23) {\n let {\n node,\n state\n } = _ref22;\n let {\n definition,\n args\n } = _ref23;\n let definitionResult = VISIT_EXPRS.visit(definition, state);\n let argsResult = VISIT_EXPRS.Args(args, state);\n return Result.all(definitionResult, argsResult).mapOk(_ref24 => {\n let [definition, args] = _ref24;\n return new InvokeComponent({\n loc: node.loc,\n definition,\n args,\n blocks: null\n });\n });\n }\n }).kw('helper', {\n assert: assertCurryKeyword(_vm.CurriedTypes.Helper),\n translate(_ref25, _ref26) {\n let {\n node,\n state\n } = _ref25;\n let {\n definition,\n args\n } = _ref26;\n let definitionResult = VISIT_EXPRS.visit(definition, state);\n let argsResult = VISIT_EXPRS.Args(args, state);\n return Result.all(definitionResult, argsResult).mapOk(_ref27 => {\n let [definition, args] = _ref27;\n let text = new CallExpression({\n callee: definition,\n args,\n loc: node.loc\n });\n return new AppendTextNode({\n loc: node.loc,\n text\n });\n });\n }\n });\n const BLOCK_KEYWORDS = keywords('Block').kw('in-element', {\n assert(node) {\n let {\n args\n } = node;\n let guid = args.get('guid');\n if (guid) {\n return Err((0, _syntax.generateSyntaxError)(\"Cannot pass `guid` to `{{#in-element}}`\", guid.loc));\n }\n let insertBefore = args.get('insertBefore');\n let destination = args.nth(0);\n if (destination === null) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#in-element}} requires a target element as its first positional parameter\", args.loc));\n }\n\n // TODO Better syntax checks\n\n return Ok({\n insertBefore,\n destination\n });\n },\n translate(_ref28, _ref29) {\n let {\n node,\n state\n } = _ref28;\n let {\n insertBefore,\n destination\n } = _ref29;\n let named = node.blocks.get('default');\n let body = VISIT_STMTS.NamedBlock(named, state);\n let destinationResult = VISIT_EXPRS.visit(destination, state);\n return Result.all(body, destinationResult).andThen(_ref30 => {\n let [body, destination] = _ref30;\n if (insertBefore) {\n return VISIT_EXPRS.visit(insertBefore, state).mapOk(insertBefore => ({\n body,\n destination,\n insertBefore\n }));\n } else {\n return Ok({\n body,\n destination,\n insertBefore: new Missing({\n loc: node.callee.loc.collapse('end')\n })\n });\n }\n }).mapOk(_ref31 => {\n let {\n body,\n destination,\n insertBefore\n } = _ref31;\n return new InElement({\n loc: node.loc,\n block: body,\n insertBefore,\n guid: state.generateUniqueCursor(),\n destination\n });\n });\n }\n }).kw('if', {\n assert(node) {\n let {\n args\n } = node;\n if (!args.named.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#if}} cannot receive named parameters, received \" + args.named.entries.map(e => e.name.chars).join(', '), node.loc));\n }\n if (args.positional.size > 1) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#if}} can only receive one positional parameter in block form, the conditional value. Received \" + args.positional.size + \" parameters\", node.loc));\n }\n let condition = args.nth(0);\n if (condition === null) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#if}} requires a condition as its first positional parameter, did not receive any parameters\", node.loc));\n }\n return Ok({\n condition\n });\n },\n translate(_ref32, _ref33) {\n let {\n node,\n state\n } = _ref32;\n let {\n condition\n } = _ref33;\n let block = node.blocks.get('default');\n let inverse = node.blocks.get('else');\n let conditionResult = VISIT_EXPRS.visit(condition, state);\n let blockResult = VISIT_STMTS.NamedBlock(block, state);\n let inverseResult = inverse ? VISIT_STMTS.NamedBlock(inverse, state) : Ok(null);\n return Result.all(conditionResult, blockResult, inverseResult).mapOk(_ref34 => {\n let [condition, block, inverse] = _ref34;\n return new If({\n loc: node.loc,\n condition,\n block,\n inverse\n });\n });\n }\n }).kw('unless', {\n assert(node) {\n let {\n args\n } = node;\n if (!args.named.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#unless}} cannot receive named parameters, received \" + args.named.entries.map(e => e.name.chars).join(', '), node.loc));\n }\n if (args.positional.size > 1) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#unless}} can only receive one positional parameter in block form, the conditional value. Received \" + args.positional.size + \" parameters\", node.loc));\n }\n let condition = args.nth(0);\n if (condition === null) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#unless}} requires a condition as its first positional parameter, did not receive any parameters\", node.loc));\n }\n return Ok({\n condition\n });\n },\n translate(_ref35, _ref36) {\n let {\n node,\n state\n } = _ref35;\n let {\n condition\n } = _ref36;\n let block = node.blocks.get('default');\n let inverse = node.blocks.get('else');\n let conditionResult = VISIT_EXPRS.visit(condition, state);\n let blockResult = VISIT_STMTS.NamedBlock(block, state);\n let inverseResult = inverse ? VISIT_STMTS.NamedBlock(inverse, state) : Ok(null);\n return Result.all(conditionResult, blockResult, inverseResult).mapOk(_ref37 => {\n let [condition, block, inverse] = _ref37;\n return new If({\n loc: node.loc,\n condition: new Not({\n value: condition,\n loc: node.loc\n }),\n block,\n inverse\n });\n });\n }\n }).kw('each', {\n assert(node) {\n let {\n args\n } = node;\n if (!args.named.entries.every(e => e.name.chars === 'key')) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#each}} can only receive the 'key' named parameter, received \" + args.named.entries.filter(e => e.name.chars !== 'key').map(e => e.name.chars).join(', '), args.named.loc));\n }\n if (args.positional.size > 1) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#each}} can only receive one positional parameter, the collection being iterated. Received \" + args.positional.size + \" parameters\", args.positional.loc));\n }\n let value = args.nth(0);\n let key = args.get('key');\n if (value === null) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#each}} requires an iterable value to be passed as its first positional parameter, did not receive any parameters\", args.loc));\n }\n return Ok({\n value,\n key\n });\n },\n translate(_ref38, _ref39) {\n let {\n node,\n state\n } = _ref38;\n let {\n value,\n key\n } = _ref39;\n let block = node.blocks.get('default');\n let inverse = node.blocks.get('else');\n let valueResult = VISIT_EXPRS.visit(value, state);\n let keyResult = key ? VISIT_EXPRS.visit(key, state) : Ok(null);\n let blockResult = VISIT_STMTS.NamedBlock(block, state);\n let inverseResult = inverse ? VISIT_STMTS.NamedBlock(inverse, state) : Ok(null);\n return Result.all(valueResult, keyResult, blockResult, inverseResult).mapOk(_ref40 => {\n let [value, key, block, inverse] = _ref40;\n return new Each({\n loc: node.loc,\n value,\n key,\n block,\n inverse\n });\n });\n }\n }).kw('with', {\n assert(node) {\n let {\n args\n } = node;\n if (!args.named.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#with}} cannot receive named parameters, received \" + args.named.entries.map(e => e.name.chars).join(', '), args.named.loc));\n }\n if (args.positional.size > 1) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#with}} can only receive one positional parameter. Received \" + args.positional.size + \" parameters\", args.positional.loc));\n }\n let value = args.nth(0);\n if (value === null) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#with}} requires a value as its first positional parameter, did not receive any parameters\", args.loc));\n }\n return Ok({\n value\n });\n },\n translate(_ref41, _ref42) {\n let {\n node,\n state\n } = _ref41;\n let {\n value\n } = _ref42;\n let block = node.blocks.get('default');\n let inverse = node.blocks.get('else');\n let valueResult = VISIT_EXPRS.visit(value, state);\n let blockResult = VISIT_STMTS.NamedBlock(block, state);\n let inverseResult = inverse ? VISIT_STMTS.NamedBlock(inverse, state) : Ok(null);\n return Result.all(valueResult, blockResult, inverseResult).mapOk(_ref43 => {\n let [value, block, inverse] = _ref43;\n return new With({\n loc: node.loc,\n value,\n block,\n inverse\n });\n });\n }\n }).kw('let', {\n assert(node) {\n let {\n args\n } = node;\n if (!args.named.isEmpty()) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#let}} cannot receive named parameters, received \" + args.named.entries.map(e => e.name.chars).join(', '), args.named.loc));\n }\n if (args.positional.size === 0) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#let}} requires at least one value as its first positional parameter, did not receive any parameters\", args.positional.loc));\n }\n if (node.blocks.get('else')) {\n return Err((0, _syntax.generateSyntaxError)(\"{{#let}} cannot receive an {{else}} block\", args.positional.loc));\n }\n return Ok({\n positional: args.positional\n });\n },\n translate(_ref44, _ref45) {\n let {\n node,\n state\n } = _ref44;\n let {\n positional\n } = _ref45;\n let block = node.blocks.get('default');\n let positionalResult = VISIT_EXPRS.Positional(positional, state);\n let blockResult = VISIT_STMTS.NamedBlock(block, state);\n return Result.all(positionalResult, blockResult).mapOk(_ref46 => {\n let [positional, block] = _ref46;\n return new Let({\n loc: node.loc,\n positional,\n block\n });\n });\n }\n }).kw('-with-dynamic-vars', {\n assert(node) {\n return Ok({\n named: node.args.named\n });\n },\n translate(_ref47, _ref48) {\n let {\n node,\n state\n } = _ref47;\n let {\n named\n } = _ref48;\n let block = node.blocks.get('default');\n let namedResult = VISIT_EXPRS.NamedArguments(named, state);\n let blockResult = VISIT_STMTS.NamedBlock(block, state);\n return Result.all(namedResult, blockResult).mapOk(_ref49 => {\n let [named, block] = _ref49;\n return new WithDynamicVars({\n loc: node.loc,\n named,\n block\n });\n });\n }\n }).kw('component', {\n assert: assertCurryKeyword(_vm.CurriedTypes.Component),\n translate(_ref50, _ref51) {\n let {\n node,\n state\n } = _ref50;\n let {\n definition,\n args\n } = _ref51;\n let definitionResult = VISIT_EXPRS.visit(definition, state);\n let argsResult = VISIT_EXPRS.Args(args, state);\n let blocksResult = VISIT_STMTS.NamedBlocks(node.blocks, state);\n return Result.all(definitionResult, argsResult, blocksResult).mapOk(_ref52 => {\n let [definition, args, blocks] = _ref52;\n return new InvokeComponent({\n loc: node.loc,\n definition,\n args,\n blocks\n });\n });\n }\n });\n const CALL_KEYWORDS = keywords('Call').kw('has-block', hasBlockKeyword('has-block')).kw('has-block-params', hasBlockKeyword('has-block-params')).kw('-get-dynamic-var', getDynamicVarKeyword).kw('log', logKeyword).kw('if', ifUnlessInlineKeyword('if')).kw('unless', ifUnlessInlineKeyword('unless')).kw('component', curryKeyword(_vm.CurriedTypes.Component)).kw('helper', curryKeyword(_vm.CurriedTypes.Helper)).kw('modifier', curryKeyword(_vm.CurriedTypes.Modifier));\n const MODIFIER_KEYWORDS = keywords('Modifier');\n\n // There is a small whitelist of namespaced attributes specially\n // enumerated in\n // https://www.w3.org/TR/html/syntax.html#attributes-0\n //\n // > When a foreign element has one of the namespaced attributes given by\n // > the local name and namespace of the first and second cells of a row\n // > from the following table, it must be written using the name given by\n // > the third cell from the same row.\n //\n // In all other cases, colons are interpreted as a regular character\n // with no special meaning:\n //\n // > No other namespaced attribute can be expressed in the HTML syntax.\n\n const XLINK = 'http://www.w3.org/1999/xlink';\n const XML = 'http://www.w3.org/XML/1998/namespace';\n const XMLNS = 'http://www.w3.org/2000/xmlns/';\n const WHITELIST = {\n 'xlink:actuate': XLINK,\n 'xlink:arcrole': XLINK,\n 'xlink:href': XLINK,\n 'xlink:role': XLINK,\n 'xlink:show': XLINK,\n 'xlink:title': XLINK,\n 'xlink:type': XLINK,\n 'xml:base': XML,\n 'xml:lang': XML,\n 'xml:space': XML,\n xmlns: XMLNS,\n 'xmlns:xlink': XMLNS\n };\n function getAttrNamespace(attrName) {\n return WHITELIST[attrName];\n }\n const DEFLATE_TAG_TABLE = {\n div: _wireFormat.WellKnownTagNames.div,\n span: _wireFormat.WellKnownTagNames.span,\n p: _wireFormat.WellKnownTagNames.p,\n a: _wireFormat.WellKnownTagNames.a\n };\n const INFLATE_TAG_TABLE = ['div', 'span', 'p', 'a'];\n function deflateTagName(tagName) {\n var _DEFLATE_TAG_TABLE$ta;\n return (_DEFLATE_TAG_TABLE$ta = DEFLATE_TAG_TABLE[tagName]) != null ? _DEFLATE_TAG_TABLE$ta : tagName;\n }\n function inflateTagName(tagName) {\n return typeof tagName === 'string' ? tagName : INFLATE_TAG_TABLE[tagName];\n }\n const DEFLATE_ATTR_TABLE = {\n class: _wireFormat.WellKnownAttrNames.class,\n id: _wireFormat.WellKnownAttrNames.id,\n value: _wireFormat.WellKnownAttrNames.value,\n name: _wireFormat.WellKnownAttrNames.name,\n type: _wireFormat.WellKnownAttrNames.type,\n style: _wireFormat.WellKnownAttrNames.style,\n href: _wireFormat.WellKnownAttrNames.href\n };\n const INFLATE_ATTR_TABLE = ['class', 'id', 'value', 'name', 'type', 'style', 'href'];\n function deflateAttrName(attrName) {\n var _DEFLATE_ATTR_TABLE$a;\n return (_DEFLATE_ATTR_TABLE$a = DEFLATE_ATTR_TABLE[attrName]) != null ? _DEFLATE_ATTR_TABLE$a : attrName;\n }\n function inflateAttrName(attrName) {\n return typeof attrName === 'string' ? attrName : INFLATE_ATTR_TABLE[attrName];\n }\n class ClassifiedElement {\n constructor(element, delegate, state) {\n this.delegate = void 0;\n this.element = element;\n this.state = state;\n this.delegate = delegate;\n }\n toStatement() {\n return this.prepare().andThen(prepared => this.delegate.toStatement(this, prepared));\n }\n attr(attr) {\n let name = attr.name;\n let rawValue = attr.value;\n let namespace = getAttrNamespace(name.chars) || undefined;\n if (_syntax.ASTv2.isLiteral(rawValue, 'string')) {\n return Ok(new StaticAttr({\n loc: attr.loc,\n name,\n value: rawValue.toSlice(),\n namespace,\n kind: {\n component: this.delegate.dynamicFeatures\n }\n }));\n }\n return VISIT_EXPRS.visit(convertPathToCallIfKeyword(rawValue), this.state).mapOk(value => {\n let isTrusting = attr.trusting;\n return new DynamicAttr({\n loc: attr.loc,\n name,\n value: value,\n namespace,\n kind: {\n trusting: isTrusting,\n component: this.delegate.dynamicFeatures\n }\n });\n });\n }\n modifier(modifier) {\n if (isHelperInvocation(modifier)) {\n assertIsValidModifier(modifier);\n }\n let translated = MODIFIER_KEYWORDS.translate(modifier, this.state);\n if (translated !== null) {\n return translated;\n }\n let head = VISIT_EXPRS.visit(modifier.callee, this.state);\n let args = VISIT_EXPRS.Args(modifier.args, this.state);\n return Result.all(head, args).mapOk(_ref53 => {\n let [head, args] = _ref53;\n return new Modifier({\n loc: modifier.loc,\n callee: head,\n args\n });\n });\n }\n attrs() {\n let attrs = new ResultArray();\n let args = new ResultArray();\n\n // Unlike most attributes, the `type` attribute can change how\n // subsequent attributes are interpreted by the browser. To address\n // this, in simple cases, we special case the `type` attribute to be set\n // last. For elements with splattributes, where attribute order affects\n // precedence, this re-ordering happens at runtime instead.\n // See https://github.com/glimmerjs/glimmer-vm/pull/726\n let typeAttr = null;\n let simple = this.element.attrs.filter(attr => attr.type === 'SplatAttr').length === 0;\n for (let attr of this.element.attrs) {\n if (attr.type === 'SplatAttr') {\n attrs.add(Ok(new SplatAttr({\n loc: attr.loc,\n symbol: this.state.scope.allocateBlock('attrs')\n })));\n } else if (attr.name.chars === 'type' && simple) {\n typeAttr = attr;\n } else {\n attrs.add(this.attr(attr));\n }\n }\n for (let arg of this.element.componentArgs) {\n args.add(this.delegate.arg(arg, this));\n }\n if (typeAttr) {\n attrs.add(this.attr(typeAttr));\n }\n return Result.all(args.toArray(), attrs.toArray()).mapOk(_ref54 => {\n let [args, attrs] = _ref54;\n return {\n attrs,\n args: new NamedArguments({\n loc: (0, _syntax.maybeLoc)(args, _syntax.src.SourceSpan.NON_EXISTENT),\n entries: OptionalList(args)\n })\n };\n });\n }\n prepare() {\n let attrs = this.attrs();\n let modifiers = new ResultArray(this.element.modifiers.map(m => this.modifier(m))).toArray();\n return Result.all(attrs, modifiers).mapOk(_ref55 => {\n let [result, modifiers] = _ref55;\n let {\n attrs,\n args\n } = result;\n let elementParams = [...attrs, ...modifiers];\n let params = new ElementParameters({\n loc: (0, _syntax.maybeLoc)(elementParams, _syntax.src.SourceSpan.NON_EXISTENT),\n body: OptionalList(elementParams)\n });\n return {\n args,\n params\n };\n });\n }\n }\n function hasDynamicFeatures(_ref56) {\n let {\n attrs,\n modifiers\n } = _ref56;\n // ElementModifier needs the special ComponentOperations\n if (modifiers.length > 0) {\n return true;\n }\n\n // Splattributes need the special ComponentOperations to merge into\n return !!attrs.filter(attr => attr.type === 'SplatAttr')[0];\n }\n class ClassifiedComponent {\n constructor(tag, element) {\n this.dynamicFeatures = true;\n this.tag = tag;\n this.element = element;\n }\n arg(attr, _ref57) {\n let {\n state\n } = _ref57;\n let name = attr.name;\n return VISIT_EXPRS.visit(convertPathToCallIfKeyword(attr.value), state).mapOk(value => new NamedArgument({\n loc: attr.loc,\n key: name,\n value\n }));\n }\n toStatement(component, _ref58) {\n let {\n args,\n params\n } = _ref58;\n let {\n element,\n state\n } = component;\n return this.blocks(state).mapOk(blocks => new Component({\n loc: element.loc,\n tag: this.tag,\n params,\n args,\n blocks\n }));\n }\n blocks(state) {\n return VISIT_STMTS.NamedBlocks(this.element.blocks, state);\n }\n }\n class ClassifiedSimpleElement {\n constructor(tag, element, dynamicFeatures) {\n this.isComponent = false;\n this.tag = tag;\n this.element = element;\n this.dynamicFeatures = dynamicFeatures;\n }\n arg(attr) {\n return Err((0, _syntax.generateSyntaxError)(attr.name.chars + \" is not a valid attribute name. @arguments are only allowed on components, but the tag for this element (`\" + this.tag.chars + \"`) is a regular, non-component HTML element.\", attr.loc));\n }\n toStatement(classified, _ref59) {\n let {\n params\n } = _ref59;\n let {\n state,\n element\n } = classified;\n let body = VISIT_STMTS.visitList(this.element.body, state);\n return body.mapOk(body => new SimpleElement({\n loc: element.loc,\n tag: this.tag,\n params,\n body: body.toArray(),\n dynamicFeatures: this.dynamicFeatures\n }));\n }\n }\n class NormalizationStatements {\n visitList(nodes, state) {\n return new ResultArray(nodes.map(e => VISIT_STMTS.visit(e, state))).toOptionalList().mapOk(list => list.filter(s => s !== null));\n }\n visit(node, state) {\n switch (node.type) {\n case 'GlimmerComment':\n return Ok(null);\n case 'AppendContent':\n return this.AppendContent(node, state);\n case 'HtmlText':\n return Ok(this.TextNode(node));\n case 'HtmlComment':\n return Ok(this.HtmlComment(node));\n case 'InvokeBlock':\n return this.InvokeBlock(node, state);\n case 'InvokeComponent':\n return this.Component(node, state);\n case 'SimpleElement':\n return this.SimpleElement(node, state);\n }\n }\n InvokeBlock(node, state) {\n let translated = BLOCK_KEYWORDS.translate(node, state);\n if (translated !== null) {\n return translated;\n }\n let head = VISIT_EXPRS.visit(node.callee, state);\n let args = VISIT_EXPRS.Args(node.args, state);\n return Result.all(head, args).andThen(_ref60 => {\n let [head, args] = _ref60;\n return this.NamedBlocks(node.blocks, state).mapOk(blocks => new InvokeBlock({\n loc: node.loc,\n head,\n args,\n blocks\n }));\n });\n }\n NamedBlocks(blocks, state) {\n let list = new ResultArray(blocks.blocks.map(b => this.NamedBlock(b, state)));\n return list.toArray().mapOk(list => new NamedBlocks({\n loc: blocks.loc,\n blocks: OptionalList(list)\n }));\n }\n NamedBlock(named, state) {\n let body = state.visitBlock(named.block);\n return body.mapOk(body => {\n return new NamedBlock({\n loc: named.loc,\n name: named.name,\n body: body.toArray(),\n scope: named.block.scope\n });\n });\n }\n SimpleElement(element, state) {\n return new ClassifiedElement(element, new ClassifiedSimpleElement(element.tag, element, hasDynamicFeatures(element)), state).toStatement();\n }\n Component(component, state) {\n return VISIT_EXPRS.visit(component.callee, state).andThen(callee => new ClassifiedElement(component, new ClassifiedComponent(callee, component), state).toStatement());\n }\n AppendContent(append, state) {\n let translated = APPEND_KEYWORDS.translate(append, state);\n if (translated !== null) {\n return translated;\n }\n let value = VISIT_EXPRS.visit(append.value, state);\n return value.mapOk(value => {\n if (append.trusting) {\n return new AppendTrustedHTML({\n loc: append.loc,\n html: value\n });\n } else {\n return new AppendTextNode({\n loc: append.loc,\n text: value\n });\n }\n });\n }\n TextNode(text) {\n return new AppendTextNode({\n loc: text.loc,\n text: new _syntax.ASTv2.LiteralExpression({\n loc: text.loc,\n value: text.chars\n })\n });\n }\n HtmlComment(comment) {\n return new AppendComment({\n loc: comment.loc,\n value: comment.text\n });\n }\n }\n const VISIT_STMTS = new NormalizationStatements();\n\n /**\n * This is the mutable state for this compiler pass.\n */\n class NormalizationState {\n constructor(block, isStrict) {\n this._currentScope = void 0;\n this._cursorCount = 0;\n this.isStrict = isStrict;\n this._currentScope = block;\n }\n generateUniqueCursor() {\n return \"%cursor:\" + this._cursorCount++ + \"%\";\n }\n get scope() {\n return this._currentScope;\n }\n visitBlock(block) {\n let oldBlock = this._currentScope;\n this._currentScope = block.scope;\n try {\n return VISIT_STMTS.visitList(block.body, this);\n } finally {\n this._currentScope = oldBlock;\n }\n }\n }\n\n /**\n * Normalize the AST from @glimmer/syntax into the HIR. The HIR has special\n * instructions for keywords like `{{yield}}`, `(has-block)` and\n * `{{#in-element}}`.\n *\n * Most importantly, it also classifies HTML element syntax into:\n *\n * 1. simple HTML element (with optional splattributes)\n * 2. component invocation\n *\n * Because the @glimmer/syntax AST gives us a string for an element's tag,\n * this pass also normalizes that string into an expression.\n *\n * ```\n * // normalized into a path expression whose head is `this` and tail is\n * // `[\"x\"]`\n * <this.x />\n *\n * {{#let expr as |t|}}\n * // `\"t\"` is normalized into a variable lookup.\n * <t />\n *\n * // normalized into a path expression whose head is the variable lookup\n * // `t` and tail is `[\"input\"]`.\n * <t.input />\n * {{/let}}\n *\n * // normalized into a free variable lookup for `SomeComponent` (with the\n * // context `ComponentHead`).\n * <SomeComponent />\n *\n * // normalized into a path expression whose head is the free variable\n * // `notInScope` (with the context `Expression`), and whose tail is\n * // `[\"SomeComponent\"]`. In resolver mode, this path will be rejected later,\n * // since it cannot serve as an input to the resolver.\n * <notInScope.SomeComponent />\n * ```\n */\n function normalize(source, root, isStrict) {\n // create a new context for the normalization pass\n let state = new NormalizationState(root.table, isStrict);\n let body = VISIT_STMTS.visitList(root.body, state);\n return body.mapOk(body => new Template({\n loc: root.loc,\n scope: root.table,\n body: body.toArray()\n }));\n }\n class WireFormatDebugger {\n constructor(_ref61) {\n let [_statements, symbols, _hasEval, upvars] = _ref61;\n this.upvars = void 0;\n this.symbols = void 0;\n this.upvars = upvars;\n this.symbols = symbols;\n }\n format(program) {\n let out = [];\n for (let statement of program[0]) {\n out.push(this.formatOpcode(statement));\n }\n return out;\n }\n formatOpcode(opcode) {\n if (Array.isArray(opcode)) {\n switch (opcode[0]) {\n case _wireFormat.SexpOpcodes.Append:\n return ['append', this.formatOpcode(opcode[1])];\n case _wireFormat.SexpOpcodes.TrustingAppend:\n return ['trusting-append', this.formatOpcode(opcode[1])];\n case _wireFormat.SexpOpcodes.Block:\n return ['block', this.formatOpcode(opcode[1]), this.formatParams(opcode[2]), this.formatHash(opcode[3]), this.formatBlocks(opcode[4])];\n case _wireFormat.SexpOpcodes.InElement:\n return ['in-element', opcode[1], this.formatOpcode(opcode[2]), opcode[3] ? this.formatOpcode(opcode[3]) : undefined];\n case _wireFormat.SexpOpcodes.OpenElement:\n return ['open-element', inflateTagName(opcode[1])];\n case _wireFormat.SexpOpcodes.OpenElementWithSplat:\n return ['open-element-with-splat', inflateTagName(opcode[1])];\n case _wireFormat.SexpOpcodes.CloseElement:\n return ['close-element'];\n case _wireFormat.SexpOpcodes.FlushElement:\n return ['flush-element'];\n case _wireFormat.SexpOpcodes.StaticAttr:\n return ['static-attr', inflateAttrName(opcode[1]), opcode[2], opcode[3]];\n case _wireFormat.SexpOpcodes.StaticComponentAttr:\n return ['static-component-attr', inflateAttrName(opcode[1]), opcode[2], opcode[3]];\n case _wireFormat.SexpOpcodes.DynamicAttr:\n return ['dynamic-attr', inflateAttrName(opcode[1]), this.formatOpcode(opcode[2]), opcode[3]];\n case _wireFormat.SexpOpcodes.ComponentAttr:\n return ['component-attr', inflateAttrName(opcode[1]), this.formatOpcode(opcode[2]), opcode[3]];\n case _wireFormat.SexpOpcodes.AttrSplat:\n return ['attr-splat'];\n case _wireFormat.SexpOpcodes.Yield:\n return ['yield', opcode[1], this.formatParams(opcode[2])];\n case _wireFormat.SexpOpcodes.DynamicArg:\n return ['dynamic-arg', opcode[1], this.formatOpcode(opcode[2])];\n case _wireFormat.SexpOpcodes.StaticArg:\n return ['static-arg', opcode[1], this.formatOpcode(opcode[2])];\n case _wireFormat.SexpOpcodes.TrustingDynamicAttr:\n return ['trusting-dynamic-attr', inflateAttrName(opcode[1]), this.formatOpcode(opcode[2]), opcode[3]];\n case _wireFormat.SexpOpcodes.TrustingComponentAttr:\n return ['trusting-component-attr', inflateAttrName(opcode[1]), this.formatOpcode(opcode[2]), opcode[3]];\n case _wireFormat.SexpOpcodes.Debugger:\n return ['debugger', opcode[1]];\n case _wireFormat.SexpOpcodes.Comment:\n return ['comment', opcode[1]];\n case _wireFormat.SexpOpcodes.Modifier:\n return ['modifier', this.formatOpcode(opcode[1]), this.formatParams(opcode[2]), this.formatHash(opcode[3])];\n case _wireFormat.SexpOpcodes.Component:\n return ['component', this.formatOpcode(opcode[1]), this.formatElementParams(opcode[2]), this.formatHash(opcode[3]), this.formatBlocks(opcode[4])];\n case _wireFormat.SexpOpcodes.HasBlock:\n return ['has-block', this.formatOpcode(opcode[1])];\n case _wireFormat.SexpOpcodes.HasBlockParams:\n return ['has-block-params', this.formatOpcode(opcode[1])];\n case _wireFormat.SexpOpcodes.Curry:\n return ['curry', this.formatOpcode(opcode[1]), this.formatCurryType(opcode[2]), this.formatParams(opcode[3]), this.formatHash(opcode[4])];\n case _wireFormat.SexpOpcodes.Undefined:\n return ['undefined'];\n case _wireFormat.SexpOpcodes.Call:\n return ['call', this.formatOpcode(opcode[1]), this.formatParams(opcode[2]), this.formatHash(opcode[3])];\n case _wireFormat.SexpOpcodes.Concat:\n return ['concat', this.formatParams(opcode[1])];\n case _wireFormat.SexpOpcodes.GetStrictKeyword:\n return ['get-strict-free', this.upvars[opcode[1]], opcode[2]];\n case _wireFormat.SexpOpcodes.GetFreeAsComponentOrHelperHeadOrThisFallback:\n return ['GetFreeAsComponentOrHelperHeadOrThisFallback', this.upvars[opcode[1]], opcode[2]];\n case _wireFormat.SexpOpcodes.GetFreeAsComponentOrHelperHead:\n return ['GetFreeAsComponentOrHelperHead', this.upvars[opcode[1]], opcode[2]];\n case _wireFormat.SexpOpcodes.GetFreeAsHelperHeadOrThisFallback:\n return ['GetFreeAsHelperHeadOrThisFallback', this.upvars[opcode[1]], opcode[2]];\n case _wireFormat.SexpOpcodes.GetFreeAsDeprecatedHelperHeadOrThisFallback:\n return ['GetFreeAsDeprecatedHelperHeadOrThisFallback', this.upvars[opcode[1]]];\n case _wireFormat.SexpOpcodes.GetFreeAsHelperHead:\n return ['GetFreeAsHelperHead', this.upvars[opcode[1]], opcode[2]];\n case _wireFormat.SexpOpcodes.GetFreeAsComponentHead:\n return ['GetFreeAsComponentHead', this.upvars[opcode[1]], opcode[2]];\n case _wireFormat.SexpOpcodes.GetFreeAsModifierHead:\n return ['GetFreeAsModifierHead', this.upvars[opcode[1]], opcode[2]];\n case _wireFormat.SexpOpcodes.GetSymbol:\n {\n if (opcode[1] === 0) {\n return ['get-symbol', 'this', opcode[2]];\n } else {\n return ['get-symbol', this.symbols[opcode[1] - 1], opcode[2]];\n }\n }\n case _wireFormat.SexpOpcodes.GetLexicalSymbol:\n {\n return ['get-template-symbol', opcode[1], opcode[2]];\n }\n case _wireFormat.SexpOpcodes.If:\n return ['if', this.formatOpcode(opcode[1]), this.formatBlock(opcode[2]), opcode[3] ? this.formatBlock(opcode[3]) : null];\n case _wireFormat.SexpOpcodes.IfInline:\n return ['if-inline'];\n case _wireFormat.SexpOpcodes.Not:\n return ['not'];\n case _wireFormat.SexpOpcodes.Each:\n return ['each', this.formatOpcode(opcode[1]), opcode[2] ? this.formatOpcode(opcode[2]) : null, this.formatBlock(opcode[3]), opcode[4] ? this.formatBlock(opcode[4]) : null];\n case _wireFormat.SexpOpcodes.With:\n return ['with', this.formatOpcode(opcode[1]), this.formatBlock(opcode[2]), opcode[3] ? this.formatBlock(opcode[3]) : null];\n case _wireFormat.SexpOpcodes.Let:\n return ['let', this.formatParams(opcode[1]), this.formatBlock(opcode[2])];\n case _wireFormat.SexpOpcodes.Log:\n return ['log', this.formatParams(opcode[1])];\n case _wireFormat.SexpOpcodes.WithDynamicVars:\n return ['-with-dynamic-vars', this.formatHash(opcode[1]), this.formatBlock(opcode[2])];\n case _wireFormat.SexpOpcodes.GetDynamicVar:\n return ['-get-dynamic-vars', this.formatOpcode(opcode[1])];\n case _wireFormat.SexpOpcodes.InvokeComponent:\n return ['component', this.formatOpcode(opcode[1]), this.formatParams(opcode[2]), this.formatHash(opcode[3]), this.formatBlocks(opcode[4])];\n }\n } else {\n return opcode;\n }\n }\n formatCurryType(value) {\n switch (value) {\n case _vm.CurriedTypes.Component:\n return 'component';\n case _vm.CurriedTypes.Helper:\n return 'helper';\n case _vm.CurriedTypes.Modifier:\n return 'modifier';\n default:\n throw (0, _util.exhausted)(value);\n }\n }\n formatElementParams(opcodes) {\n if (opcodes === null) return null;\n return opcodes.map(o => this.formatOpcode(o));\n }\n formatParams(opcodes) {\n if (opcodes === null) return null;\n return opcodes.map(o => this.formatOpcode(o));\n }\n formatHash(hash) {\n if (hash === null) return null;\n return hash[0].reduce((accum, key, index) => {\n accum[key] = this.formatOpcode(hash[1][index]);\n return accum;\n }, (0, _util.dict)());\n }\n formatBlocks(blocks) {\n if (blocks === null) return null;\n return blocks[0].reduce((accum, key, index) => {\n accum[key] = this.formatBlock(blocks[1][index]);\n return accum;\n }, (0, _util.dict)());\n }\n formatBlock(block) {\n return {\n statements: block[0].map(s => this.formatOpcode(s)),\n parameters: block[1]\n };\n }\n }\n _exports.WireFormatDebugger = WireFormatDebugger;\n class ExpressionEncoder {\n expr(expr) {\n switch (expr.type) {\n case 'Missing':\n return undefined;\n case 'Literal':\n return this.Literal(expr);\n case 'CallExpression':\n return this.CallExpression(expr);\n case 'DeprecatedCallExpression':\n return this.DeprecatedCallExpression(expr);\n case 'PathExpression':\n return this.PathExpression(expr);\n case 'Arg':\n return [_wireFormat.SexpOpcodes.GetSymbol, expr.symbol];\n case 'Local':\n return this.Local(expr);\n case 'This':\n return [_wireFormat.SexpOpcodes.GetSymbol, 0];\n case 'Free':\n return [expr.resolution.resolution(), expr.symbol];\n case 'HasBlock':\n return this.HasBlock(expr);\n case 'HasBlockParams':\n return this.HasBlockParams(expr);\n case 'Curry':\n return this.Curry(expr);\n case 'Not':\n return this.Not(expr);\n case 'IfInline':\n return this.IfInline(expr);\n case 'InterpolateExpression':\n return this.InterpolateExpression(expr);\n case 'GetDynamicVar':\n return this.GetDynamicVar(expr);\n case 'Log':\n return this.Log(expr);\n }\n }\n Literal(_ref62) {\n let {\n value\n } = _ref62;\n if (value === undefined) {\n return [_wireFormat.SexpOpcodes.Undefined];\n } else {\n return value;\n }\n }\n Missing() {\n return undefined;\n }\n HasBlock(_ref63) {\n let {\n symbol\n } = _ref63;\n return [_wireFormat.SexpOpcodes.HasBlock, [_wireFormat.SexpOpcodes.GetSymbol, symbol]];\n }\n HasBlockParams(_ref64) {\n let {\n symbol\n } = _ref64;\n return [_wireFormat.SexpOpcodes.HasBlockParams, [_wireFormat.SexpOpcodes.GetSymbol, symbol]];\n }\n Curry(_ref65) {\n let {\n definition,\n curriedType,\n args\n } = _ref65;\n return [_wireFormat.SexpOpcodes.Curry, EXPR.expr(definition), curriedType, EXPR.Positional(args.positional), EXPR.NamedArguments(args.named)];\n }\n Local(_ref66) {\n let {\n isTemplateLocal,\n symbol\n } = _ref66;\n return [isTemplateLocal ? _wireFormat.SexpOpcodes.GetLexicalSymbol : _wireFormat.SexpOpcodes.GetSymbol, symbol];\n }\n GetWithResolver(_ref67) {\n let {\n symbol\n } = _ref67;\n return [_wireFormat.SexpOpcodes.GetFreeAsComponentOrHelperHeadOrThisFallback, symbol];\n }\n PathExpression(_ref68) {\n let {\n head,\n tail\n } = _ref68;\n let getOp = EXPR.expr(head);\n return [...getOp, EXPR.Tail(tail)];\n }\n InterpolateExpression(_ref69) {\n let {\n parts\n } = _ref69;\n return [_wireFormat.SexpOpcodes.Concat, parts.map(e => EXPR.expr(e)).toArray()];\n }\n CallExpression(_ref70) {\n let {\n callee,\n args\n } = _ref70;\n return [_wireFormat.SexpOpcodes.Call, EXPR.expr(callee), ...EXPR.Args(args)];\n }\n DeprecatedCallExpression(_ref71) {\n let {\n arg,\n callee\n } = _ref71;\n return [_wireFormat.SexpOpcodes.GetFreeAsDeprecatedHelperHeadOrThisFallback, callee.symbol, [arg.chars]];\n }\n Tail(_ref72) {\n let {\n members\n } = _ref72;\n return (0, _util.mapPresentArray)(members, member => member.chars);\n }\n Args(_ref73) {\n let {\n positional,\n named\n } = _ref73;\n return [this.Positional(positional), this.NamedArguments(named)];\n }\n Positional(_ref74) {\n let {\n list\n } = _ref74;\n return list.map(l => EXPR.expr(l)).toPresentArray();\n }\n NamedArgument(_ref75) {\n let {\n key,\n value\n } = _ref75;\n return [key.chars, EXPR.expr(value)];\n }\n NamedArguments(_ref76) {\n let {\n entries: pairs\n } = _ref76;\n let list = pairs.toArray();\n if ((0, _util.isPresentArray)(list)) {\n let names = [];\n let values = [];\n for (let pair of list) {\n let [name, value] = EXPR.NamedArgument(pair);\n names.push(name);\n values.push(value);\n }\n (0, _util.assertPresentArray)(names);\n (0, _util.assertPresentArray)(values);\n return [names, values];\n } else {\n return null;\n }\n }\n Not(_ref77) {\n let {\n value\n } = _ref77;\n return [_wireFormat.SexpOpcodes.Not, EXPR.expr(value)];\n }\n IfInline(_ref78) {\n let {\n condition,\n truthy,\n falsy\n } = _ref78;\n let expr = [_wireFormat.SexpOpcodes.IfInline, EXPR.expr(condition), EXPR.expr(truthy)];\n if (falsy) {\n expr.push(EXPR.expr(falsy));\n }\n return expr;\n }\n GetDynamicVar(_ref79) {\n let {\n name\n } = _ref79;\n return [_wireFormat.SexpOpcodes.GetDynamicVar, EXPR.expr(name)];\n }\n Log(_ref80) {\n let {\n positional\n } = _ref80;\n return [_wireFormat.SexpOpcodes.Log, this.Positional(positional)];\n }\n }\n const EXPR = new ExpressionEncoder();\n class WireStatements {\n constructor(statements) {\n this.statements = statements;\n }\n toArray() {\n return this.statements;\n }\n }\n class ContentEncoder {\n list(statements) {\n let out = [];\n for (let statement of statements) {\n let result = CONTENT.content(statement);\n if (result && result instanceof WireStatements) {\n out.push(...result.toArray());\n } else {\n out.push(result);\n }\n }\n return out;\n }\n content(stmt) {\n return this.visitContent(stmt);\n }\n visitContent(stmt) {\n switch (stmt.type) {\n case 'Debugger':\n return [_wireFormat.SexpOpcodes.Debugger, stmt.scope.getDebugInfo()];\n case 'AppendComment':\n return this.AppendComment(stmt);\n case 'AppendTextNode':\n return this.AppendTextNode(stmt);\n case 'AppendTrustedHTML':\n return this.AppendTrustedHTML(stmt);\n case 'Yield':\n return this.Yield(stmt);\n case 'Component':\n return this.Component(stmt);\n case 'SimpleElement':\n return this.SimpleElement(stmt);\n case 'InElement':\n return this.InElement(stmt);\n case 'InvokeBlock':\n return this.InvokeBlock(stmt);\n case 'If':\n return this.If(stmt);\n case 'Each':\n return this.Each(stmt);\n case 'With':\n return this.With(stmt);\n case 'Let':\n return this.Let(stmt);\n case 'WithDynamicVars':\n return this.WithDynamicVars(stmt);\n case 'InvokeComponent':\n return this.InvokeComponent(stmt);\n default:\n return (0, _util.exhausted)(stmt);\n }\n }\n Yield(_ref81) {\n let {\n to,\n positional\n } = _ref81;\n return [_wireFormat.SexpOpcodes.Yield, to, EXPR.Positional(positional)];\n }\n InElement(_ref82) {\n let {\n guid,\n insertBefore,\n destination,\n block\n } = _ref82;\n let wireBlock = CONTENT.NamedBlock(block)[1];\n // let guid = args.guid;\n let wireDestination = EXPR.expr(destination);\n let wireInsertBefore = EXPR.expr(insertBefore);\n if (wireInsertBefore === undefined) {\n return [_wireFormat.SexpOpcodes.InElement, wireBlock, guid, wireDestination];\n } else {\n return [_wireFormat.SexpOpcodes.InElement, wireBlock, guid, wireDestination, wireInsertBefore];\n }\n }\n InvokeBlock(_ref83) {\n let {\n head,\n args,\n blocks\n } = _ref83;\n return [_wireFormat.SexpOpcodes.Block, EXPR.expr(head), ...EXPR.Args(args), CONTENT.NamedBlocks(blocks)];\n }\n AppendTrustedHTML(_ref84) {\n let {\n html\n } = _ref84;\n return [_wireFormat.SexpOpcodes.TrustingAppend, EXPR.expr(html)];\n }\n AppendTextNode(_ref85) {\n let {\n text\n } = _ref85;\n return [_wireFormat.SexpOpcodes.Append, EXPR.expr(text)];\n }\n AppendComment(_ref86) {\n let {\n value\n } = _ref86;\n return [_wireFormat.SexpOpcodes.Comment, value.chars];\n }\n SimpleElement(_ref87) {\n let {\n tag,\n params,\n body,\n dynamicFeatures\n } = _ref87;\n let op = dynamicFeatures ? _wireFormat.SexpOpcodes.OpenElementWithSplat : _wireFormat.SexpOpcodes.OpenElement;\n return new WireStatements([[op, deflateTagName(tag.chars)], ...CONTENT.ElementParameters(params).toArray(), [_wireFormat.SexpOpcodes.FlushElement], ...CONTENT.list(body), [_wireFormat.SexpOpcodes.CloseElement]]);\n }\n Component(_ref88) {\n let {\n tag,\n params,\n args,\n blocks\n } = _ref88;\n let wireTag = EXPR.expr(tag);\n let wirePositional = CONTENT.ElementParameters(params);\n let wireNamed = EXPR.NamedArguments(args);\n let wireNamedBlocks = CONTENT.NamedBlocks(blocks);\n return [_wireFormat.SexpOpcodes.Component, wireTag, wirePositional.toPresentArray(), wireNamed, wireNamedBlocks];\n }\n ElementParameters(_ref89) {\n let {\n body\n } = _ref89;\n return body.map(p => CONTENT.ElementParameter(p));\n }\n ElementParameter(param) {\n switch (param.type) {\n case 'SplatAttr':\n return [_wireFormat.SexpOpcodes.AttrSplat, param.symbol];\n case 'DynamicAttr':\n return [dynamicAttrOp(param.kind), ...dynamicAttr(param)];\n case 'StaticAttr':\n return [staticAttrOp(param.kind), ...staticAttr(param)];\n case 'Modifier':\n return [_wireFormat.SexpOpcodes.Modifier, EXPR.expr(param.callee), ...EXPR.Args(param.args)];\n }\n }\n NamedBlocks(_ref90) {\n let {\n blocks\n } = _ref90;\n let names = [];\n let serializedBlocks = [];\n for (let block of blocks.toArray()) {\n let [name, serializedBlock] = CONTENT.NamedBlock(block);\n names.push(name);\n serializedBlocks.push(serializedBlock);\n }\n return names.length > 0 ? [names, serializedBlocks] : null;\n }\n NamedBlock(_ref91) {\n let {\n name,\n body,\n scope\n } = _ref91;\n let nameChars = name.chars;\n if (nameChars === 'inverse') {\n nameChars = 'else';\n }\n return [nameChars, [CONTENT.list(body), scope.slots]];\n }\n If(_ref92) {\n let {\n condition,\n block,\n inverse\n } = _ref92;\n return [_wireFormat.SexpOpcodes.If, EXPR.expr(condition), CONTENT.NamedBlock(block)[1], inverse ? CONTENT.NamedBlock(inverse)[1] : null];\n }\n Each(_ref93) {\n let {\n value,\n key,\n block,\n inverse\n } = _ref93;\n return [_wireFormat.SexpOpcodes.Each, EXPR.expr(value), key ? EXPR.expr(key) : null, CONTENT.NamedBlock(block)[1], inverse ? CONTENT.NamedBlock(inverse)[1] : null];\n }\n With(_ref94) {\n let {\n value,\n block,\n inverse\n } = _ref94;\n return [_wireFormat.SexpOpcodes.With, EXPR.expr(value), CONTENT.NamedBlock(block)[1], inverse ? CONTENT.NamedBlock(inverse)[1] : null];\n }\n Let(_ref95) {\n let {\n positional,\n block\n } = _ref95;\n return [_wireFormat.SexpOpcodes.Let, EXPR.Positional(positional), CONTENT.NamedBlock(block)[1]];\n }\n WithDynamicVars(_ref96) {\n let {\n named,\n block\n } = _ref96;\n return [_wireFormat.SexpOpcodes.WithDynamicVars, EXPR.NamedArguments(named), CONTENT.NamedBlock(block)[1]];\n }\n InvokeComponent(_ref97) {\n let {\n definition,\n args,\n blocks\n } = _ref97;\n return [_wireFormat.SexpOpcodes.InvokeComponent, EXPR.expr(definition), EXPR.Positional(args.positional), EXPR.NamedArguments(args.named), blocks ? CONTENT.NamedBlocks(blocks) : null];\n }\n }\n const CONTENT = new ContentEncoder();\n function staticAttr(_ref98) {\n let {\n name,\n value,\n namespace\n } = _ref98;\n let out = [deflateAttrName(name.chars), value.chars];\n if (namespace) {\n out.push(namespace);\n }\n return out;\n }\n function dynamicAttr(_ref99) {\n let {\n name,\n value,\n namespace\n } = _ref99;\n let out = [deflateAttrName(name.chars), EXPR.expr(value)];\n if (namespace) {\n out.push(namespace);\n }\n return out;\n }\n function staticAttrOp(kind) {\n if (kind.component) {\n return _wireFormat.SexpOpcodes.StaticComponentAttr;\n } else {\n return _wireFormat.SexpOpcodes.StaticAttr;\n }\n }\n function dynamicAttrOp(kind) {\n if (kind.component) {\n return kind.trusting ? _wireFormat.SexpOpcodes.TrustingComponentAttr : _wireFormat.SexpOpcodes.ComponentAttr;\n } else {\n return kind.trusting ? _wireFormat.SexpOpcodes.TrustingDynamicAttr : _wireFormat.SexpOpcodes.DynamicAttr;\n }\n }\n function visit(template) {\n let statements = CONTENT.list(template.body);\n let scope = template.scope;\n let block = [statements, scope.symbols, scope.hasEval, scope.upvars];\n return block;\n }\n const defaultId = _exports.defaultId = (() => {\n const req = typeof module === 'object' && typeof module.require === 'function' ? module.require : globalThis.require;\n if (req) {\n try {\n const crypto = req('crypto');\n const idFn = src => {\n const hash = crypto.createHash('sha1');\n hash.update(src, 'utf8');\n // trim to 6 bytes of data (2^48 - 1)\n return hash.digest('base64').substring(0, 8);\n };\n idFn('test');\n return idFn;\n } catch {\n // do nothing\n }\n }\n return function idFn() {\n return null;\n };\n })();\n const defaultOptions = {\n id: defaultId\n };\n\n /*\n * Compile a string into a template javascript string.\n *\n * Example usage:\n * import { precompile } from '@glimmer/compiler';\n * import { templateFactory } from 'glimmer-runtime';\n * let templateJs = precompile(\"Howdy {{name}}\");\n * let factory = templateFactory(new Function(\"return \" + templateJs)());\n * let template = factory.create(env);\n *\n * @method precompile\n * @param {string} string a Glimmer template string\n * @return {string} a template javascript string\n */\n function precompileJSON(string, options) {\n var _options$meta, _options$strictMode;\n if (options === void 0) {\n options = defaultOptions;\n }\n const source = new _syntax.src.Source(string != null ? string : '', (_options$meta = options.meta) == null ? void 0 : _options$meta.moduleName);\n const [ast, locals] = (0, _syntax.normalize)(source, {\n lexicalScope: () => false,\n ...options\n });\n const block = normalize(source, ast, (_options$strictMode = options.strictMode) != null ? _options$strictMode : false).mapOk(pass2In => {\n return visit(pass2In);\n });\n if (block.isOk) {\n return [block.value, locals];\n } else {\n throw block.reason;\n }\n }\n\n // UUID used as a unique placeholder for placing a snippet of JS code into\n // the otherwise JSON stringified value below.\n const SCOPE_PLACEHOLDER = '796d24e6-2450-4fb0-8cdf-b65638b5ef70';\n\n /*\n * Compile a string into a template javascript string.\n *\n * Example usage:\n * import { precompile } from '@glimmer/compiler';\n * import { templateFactory } from 'glimmer-runtime';\n * let templateJs = precompile(\"Howdy {{name}}\");\n * let factory = templateFactory(new Function(\"return \" + templateJs)());\n * let template = factory.create(env);\n *\n * @method precompile\n * @param {string} string a Glimmer template string\n * @return {string} a template javascript string\n */\n function precompile(source, options) {\n var _options$meta2, _options$strictMode2;\n if (options === void 0) {\n options = defaultOptions;\n }\n const [block, usedLocals] = precompileJSON(source, options);\n const moduleName = (_options$meta2 = options.meta) == null ? void 0 : _options$meta2.moduleName;\n const idFn = options.id || defaultId;\n const blockJSON = JSON.stringify(block);\n const templateJSONObject = {\n id: idFn(JSON.stringify(options.meta) + blockJSON),\n block: blockJSON,\n moduleName: moduleName != null ? moduleName : '(unknown template module)',\n // lying to the type checker here because we're going to\n // replace it just below, after stringification\n scope: SCOPE_PLACEHOLDER,\n isStrictMode: (_options$strictMode2 = options.strictMode) != null ? _options$strictMode2 : false\n };\n if (usedLocals.length === 0) {\n delete templateJSONObject.scope;\n }\n\n // JSON is javascript\n let stringified = JSON.stringify(templateJSONObject);\n if (usedLocals.length > 0) {\n const scopeFn = \"()=>[\" + usedLocals.join(',') + \"]\";\n stringified = stringified.replace(\"\\\"\" + SCOPE_PLACEHOLDER + \"\\\"\", scopeFn);\n }\n return stringified;\n }\n});","define(\"@glimmer/env\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.DEBUG = _exports.CI = void 0;\n const DEBUG = _exports.DEBUG = false;\n const CI = _exports.CI = false;\n});","define(\"@glimmer/syntax\", [\"exports\", \"ember-babel\", \"@glimmer/util\", \"@handlebars/parser\", \"simple-html-tokenizer\", \"@glimmer/wire-format\"], function (_exports, _emberBabel, _util, _parser, _simpleHtmlTokenizer, _wireFormat) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.builders = _exports.WalkerPath = _exports.Walker = _exports.SymbolTable = _exports.SpanList = _exports.SourceSlice = _exports.ProgramSymbolTable = _exports.Path = _exports.KEYWORDS_TYPES = _exports.BlockSymbolTable = _exports.ASTv2 = _exports.ASTv1 = _exports.AST = void 0;\n _exports.cannotRemoveNode = cannotRemoveNode;\n _exports.cannotReplaceNode = cannotReplaceNode;\n _exports.generateSyntaxError = generateSyntaxError;\n _exports.getTemplateLocals = getTemplateLocals;\n _exports.getVoidTags = getVoidTags;\n _exports.hasSpan = hasSpan;\n _exports.isKeyword = isKeyword;\n _exports.isVoidTag = isVoidTag;\n _exports.loc = loc;\n _exports.maybeLoc = maybeLoc;\n _exports.node = node;\n _exports.normalize = normalize;\n _exports.preprocess = preprocess;\n _exports.print = build;\n _exports.sortByLoc = sortByLoc;\n _exports.src = void 0;\n _exports.traverse = traverse;\n _exports.visitorKeys = void 0;\n var Char = /*#__PURE__*/function (Char) {\n Char[Char[\"NBSP\"] = 160] = \"NBSP\";\n Char[Char[\"QUOT\"] = 34] = \"QUOT\";\n Char[Char[\"LT\"] = 60] = \"LT\";\n Char[Char[\"GT\"] = 62] = \"GT\";\n Char[Char[\"AMP\"] = 38] = \"AMP\";\n return Char;\n }(Char || {});\n const ATTR_VALUE_REGEX_TEST = /[\"&\\xA0]/u;\n const ATTR_VALUE_REGEX_REPLACE = new RegExp(ATTR_VALUE_REGEX_TEST.source, 'gu');\n const TEXT_REGEX_TEST = /[&<>\\xA0]/u;\n const TEXT_REGEX_REPLACE = new RegExp(TEXT_REGEX_TEST.source, 'gu');\n function attrValueReplacer(char) {\n switch (char.charCodeAt(0)) {\n case Char.NBSP:\n return ' ';\n case Char.QUOT:\n return '"';\n case Char.AMP:\n return '&';\n default:\n return char;\n }\n }\n function textReplacer(char) {\n switch (char.charCodeAt(0)) {\n case Char.NBSP:\n return ' ';\n case Char.AMP:\n return '&';\n case Char.LT:\n return '<';\n case Char.GT:\n return '>';\n default:\n return char;\n }\n }\n function escapeAttrValue(attrValue) {\n if (ATTR_VALUE_REGEX_TEST.test(attrValue)) {\n return attrValue.replace(ATTR_VALUE_REGEX_REPLACE, attrValueReplacer);\n }\n return attrValue;\n }\n function escapeText(text) {\n if (TEXT_REGEX_TEST.test(text)) {\n return text.replace(TEXT_REGEX_REPLACE, textReplacer);\n }\n return text;\n }\n function sortByLoc(a, b) {\n // If either is invisible, don't try to order them\n if (a.loc.isInvisible || b.loc.isInvisible) {\n return 0;\n }\n if (a.loc.startPosition.line < b.loc.startPosition.line) {\n return -1;\n }\n if (a.loc.startPosition.line === b.loc.startPosition.line && a.loc.startPosition.column < b.loc.startPosition.column) {\n return -1;\n }\n if (a.loc.startPosition.line === b.loc.startPosition.line && a.loc.startPosition.column === b.loc.startPosition.column) {\n return 0;\n }\n return 1;\n }\n const voidMap = new Set(['area', 'base', 'br', 'col', 'command', 'embed', 'hr', 'img', 'input', 'keygen', 'link', 'meta', 'param', 'source', 'track', 'wbr']);\n function getVoidTags() {\n return [...voidMap];\n }\n const NON_WHITESPACE = /^\\S/u;\n /**\n * Examples when true:\n * - link\n * - liNK\n *\n * Examples when false:\n * - Link (component)\n */\n function isVoidTag(tag) {\n var _tag$;\n return voidMap.has(tag.toLowerCase()) && ((_tag$ = tag[0]) == null ? void 0 : _tag$.toLowerCase()) === tag[0];\n }\n class Printer {\n constructor(options) {\n this.buffer = '';\n this.options = void 0;\n this.options = options;\n }\n\n /*\n This is used by _all_ methods on this Printer class that add to `this.buffer`,\n it allows consumers of the printer to use alternate string representations for\n a given node.\n The primary use case for this are things like source -> source codemod utilities.\n For example, ember-template-recast attempts to always preserve the original string\n formatting in each AST node if no modifications are made to it.\n */\n handledByOverride(node, ensureLeadingWhitespace) {\n if (ensureLeadingWhitespace === void 0) {\n ensureLeadingWhitespace = false;\n }\n if (this.options.override !== undefined) {\n let result = this.options.override(node, this.options);\n if (typeof result === 'string') {\n if (ensureLeadingWhitespace && NON_WHITESPACE.test(result)) {\n result = \" \" + result;\n }\n this.buffer += result;\n return true;\n }\n }\n return false;\n }\n Node(node) {\n switch (node.type) {\n case 'MustacheStatement':\n case 'BlockStatement':\n case 'PartialStatement':\n case 'MustacheCommentStatement':\n case 'CommentStatement':\n case 'TextNode':\n case 'ElementNode':\n case 'AttrNode':\n case 'Block':\n case 'Template':\n return this.TopLevelStatement(node);\n case 'StringLiteral':\n case 'BooleanLiteral':\n case 'NumberLiteral':\n case 'UndefinedLiteral':\n case 'NullLiteral':\n case 'PathExpression':\n case 'SubExpression':\n return this.Expression(node);\n case 'Program':\n return this.Block(node);\n case 'ConcatStatement':\n // should have an AttrNode parent\n return this.ConcatStatement(node);\n case 'Hash':\n return this.Hash(node);\n case 'HashPair':\n return this.HashPair(node);\n case 'ElementModifierStatement':\n return this.ElementModifierStatement(node);\n }\n }\n Expression(expression) {\n switch (expression.type) {\n case 'StringLiteral':\n case 'BooleanLiteral':\n case 'NumberLiteral':\n case 'UndefinedLiteral':\n case 'NullLiteral':\n return this.Literal(expression);\n case 'PathExpression':\n return this.PathExpression(expression);\n case 'SubExpression':\n return this.SubExpression(expression);\n }\n }\n Literal(literal) {\n switch (literal.type) {\n case 'StringLiteral':\n return this.StringLiteral(literal);\n case 'BooleanLiteral':\n return this.BooleanLiteral(literal);\n case 'NumberLiteral':\n return this.NumberLiteral(literal);\n case 'UndefinedLiteral':\n return this.UndefinedLiteral(literal);\n case 'NullLiteral':\n return this.NullLiteral(literal);\n }\n }\n TopLevelStatement(statement) {\n switch (statement.type) {\n case 'MustacheStatement':\n return this.MustacheStatement(statement);\n case 'BlockStatement':\n return this.BlockStatement(statement);\n case 'PartialStatement':\n return this.PartialStatement(statement);\n case 'MustacheCommentStatement':\n return this.MustacheCommentStatement(statement);\n case 'CommentStatement':\n return this.CommentStatement(statement);\n case 'TextNode':\n return this.TextNode(statement);\n case 'ElementNode':\n return this.ElementNode(statement);\n case 'Block':\n case 'Template':\n return this.Block(statement);\n case 'AttrNode':\n // should have element\n return this.AttrNode(statement);\n }\n }\n Block(block) {\n /*\n When processing a template like:\n ```hbs\n {{#if whatever}}\n whatever\n {{else if somethingElse}}\n something else\n {{else}}\n fallback\n {{/if}}\n ```\n The AST still _effectively_ looks like:\n ```hbs\n {{#if whatever}}\n whatever\n {{else}}{{#if somethingElse}}\n something else\n {{else}}\n fallback\n {{/if}}{{/if}}\n ```\n The only way we can tell if that is the case is by checking for\n `block.chained`, but unfortunately when the actual statements are\n processed the `block.body[0]` node (which will always be a\n `BlockStatement`) has no clue that its ancestor `Block` node was\n chained.\n This \"forwards\" the `chained` setting so that we can check\n it later when processing the `BlockStatement`.\n */\n if (block.chained) {\n let firstChild = block.body[0];\n firstChild.chained = true;\n }\n if (this.handledByOverride(block)) {\n return;\n }\n this.TopLevelStatements(block.body);\n }\n TopLevelStatements(statements) {\n statements.forEach(statement => this.TopLevelStatement(statement));\n }\n ElementNode(el) {\n if (this.handledByOverride(el)) {\n return;\n }\n this.OpenElementNode(el);\n this.TopLevelStatements(el.children);\n this.CloseElementNode(el);\n }\n OpenElementNode(el) {\n this.buffer += \"<\" + el.tag;\n const parts = [...el.attributes, ...el.modifiers, ...el.comments].sort(sortByLoc);\n for (const part of parts) {\n this.buffer += ' ';\n switch (part.type) {\n case 'AttrNode':\n this.AttrNode(part);\n break;\n case 'ElementModifierStatement':\n this.ElementModifierStatement(part);\n break;\n case 'MustacheCommentStatement':\n this.MustacheCommentStatement(part);\n break;\n }\n }\n if (el.blockParams.length) {\n this.BlockParams(el.blockParams);\n }\n if (el.selfClosing) {\n this.buffer += ' /';\n }\n this.buffer += '>';\n }\n CloseElementNode(el) {\n if (el.selfClosing || isVoidTag(el.tag)) {\n return;\n }\n this.buffer += \"</\" + el.tag + \">\";\n }\n AttrNode(attr) {\n if (this.handledByOverride(attr)) {\n return;\n }\n let {\n name,\n value\n } = attr;\n this.buffer += name;\n if (value.type !== 'TextNode' || value.chars.length > 0) {\n this.buffer += '=';\n this.AttrNodeValue(value);\n }\n }\n AttrNodeValue(value) {\n if (value.type === 'TextNode') {\n this.buffer += '\"';\n this.TextNode(value, true);\n this.buffer += '\"';\n } else {\n this.Node(value);\n }\n }\n TextNode(text, isAttr) {\n if (this.handledByOverride(text)) {\n return;\n }\n if (this.options.entityEncoding === 'raw') {\n this.buffer += text.chars;\n } else if (isAttr) {\n this.buffer += escapeAttrValue(text.chars);\n } else {\n this.buffer += escapeText(text.chars);\n }\n }\n MustacheStatement(mustache) {\n if (this.handledByOverride(mustache)) {\n return;\n }\n this.buffer += mustache.escaped ? '{{' : '{{{';\n if (mustache.strip.open) {\n this.buffer += '~';\n }\n this.Expression(mustache.path);\n this.Params(mustache.params);\n this.Hash(mustache.hash);\n if (mustache.strip.close) {\n this.buffer += '~';\n }\n this.buffer += mustache.escaped ? '}}' : '}}}';\n }\n BlockStatement(block) {\n if (this.handledByOverride(block)) {\n return;\n }\n if (block.chained) {\n this.buffer += block.inverseStrip.open ? '{{~' : '{{';\n this.buffer += 'else ';\n } else {\n this.buffer += block.openStrip.open ? '{{~#' : '{{#';\n }\n this.Expression(block.path);\n this.Params(block.params);\n this.Hash(block.hash);\n if (block.program.blockParams.length) {\n this.BlockParams(block.program.blockParams);\n }\n if (block.chained) {\n this.buffer += block.inverseStrip.close ? '~}}' : '}}';\n } else {\n this.buffer += block.openStrip.close ? '~}}' : '}}';\n }\n this.Block(block.program);\n if (block.inverse) {\n if (!block.inverse.chained) {\n this.buffer += block.inverseStrip.open ? '{{~' : '{{';\n this.buffer += 'else';\n this.buffer += block.inverseStrip.close ? '~}}' : '}}';\n }\n this.Block(block.inverse);\n }\n if (!block.chained) {\n this.buffer += block.closeStrip.open ? '{{~/' : '{{/';\n this.Expression(block.path);\n this.buffer += block.closeStrip.close ? '~}}' : '}}';\n }\n }\n BlockParams(blockParams) {\n this.buffer += \" as |\" + blockParams.join(' ') + \"|\";\n }\n PartialStatement(partial) {\n if (this.handledByOverride(partial)) {\n return;\n }\n this.buffer += '{{>';\n this.Expression(partial.name);\n this.Params(partial.params);\n this.Hash(partial.hash);\n this.buffer += '}}';\n }\n ConcatStatement(concat) {\n if (this.handledByOverride(concat)) {\n return;\n }\n this.buffer += '\"';\n concat.parts.forEach(part => {\n if (part.type === 'TextNode') {\n this.TextNode(part, true);\n } else {\n this.Node(part);\n }\n });\n this.buffer += '\"';\n }\n MustacheCommentStatement(comment) {\n if (this.handledByOverride(comment)) {\n return;\n }\n this.buffer += \"{{!--\" + comment.value + \"--}}\";\n }\n ElementModifierStatement(mod) {\n if (this.handledByOverride(mod)) {\n return;\n }\n this.buffer += '{{';\n this.Expression(mod.path);\n this.Params(mod.params);\n this.Hash(mod.hash);\n this.buffer += '}}';\n }\n CommentStatement(comment) {\n if (this.handledByOverride(comment)) {\n return;\n }\n this.buffer += \"<!--\" + comment.value + \"-->\";\n }\n PathExpression(path) {\n if (this.handledByOverride(path)) {\n return;\n }\n this.buffer += path.original;\n }\n SubExpression(sexp) {\n if (this.handledByOverride(sexp)) {\n return;\n }\n this.buffer += '(';\n this.Expression(sexp.path);\n this.Params(sexp.params);\n this.Hash(sexp.hash);\n this.buffer += ')';\n }\n Params(params) {\n // TODO: implement a top level Params AST node (just like the Hash object)\n // so that this can also be overridden\n if (params.length) {\n params.forEach(param => {\n this.buffer += ' ';\n this.Expression(param);\n });\n }\n }\n Hash(hash) {\n if (this.handledByOverride(hash, true)) {\n return;\n }\n hash.pairs.forEach(pair => {\n this.buffer += ' ';\n this.HashPair(pair);\n });\n }\n HashPair(pair) {\n if (this.handledByOverride(pair)) {\n return;\n }\n this.buffer += pair.key;\n this.buffer += '=';\n this.Node(pair.value);\n }\n StringLiteral(str) {\n if (this.handledByOverride(str)) {\n return;\n }\n this.buffer += JSON.stringify(str.value);\n }\n BooleanLiteral(bool) {\n if (this.handledByOverride(bool)) {\n return;\n }\n this.buffer += bool.value;\n }\n NumberLiteral(number) {\n if (this.handledByOverride(number)) {\n return;\n }\n this.buffer += number.value;\n }\n UndefinedLiteral(node) {\n if (this.handledByOverride(node)) {\n return;\n }\n this.buffer += 'undefined';\n }\n NullLiteral(node) {\n if (this.handledByOverride(node)) {\n return;\n }\n this.buffer += 'null';\n }\n print(node) {\n let {\n options\n } = this;\n if (options.override) {\n let result = options.override(node, options);\n if (result !== undefined) {\n return result;\n }\n }\n this.buffer = '';\n this.Node(node);\n return this.buffer;\n }\n }\n function build(ast, options) {\n if (options === void 0) {\n options = {\n entityEncoding: 'transformed'\n };\n }\n if (!ast) {\n return '';\n }\n let printer = new Printer(options);\n return printer.print(ast);\n }\n function isKeyword(word) {\n return word in KEYWORDS_TYPES;\n }\n\n /**\n * This includes the full list of keywords currently in use in the template\n * language, and where their valid usages are.\n */\n const KEYWORDS_TYPES = _exports.KEYWORDS_TYPES = {\n component: ['Call', 'Append', 'Block'],\n debugger: ['Append'],\n 'each-in': ['Block'],\n each: ['Block'],\n 'has-block-params': ['Call', 'Append'],\n 'has-block': ['Call', 'Append'],\n helper: ['Call', 'Append'],\n if: ['Call', 'Append', 'Block'],\n 'in-element': ['Block'],\n let: ['Block'],\n 'link-to': ['Append', 'Block'],\n log: ['Call', 'Append'],\n modifier: ['Call'],\n mount: ['Append'],\n mut: ['Call', 'Append'],\n outlet: ['Append'],\n 'query-params': ['Call'],\n readonly: ['Call', 'Append'],\n unbound: ['Call', 'Append'],\n unless: ['Call', 'Append', 'Block'],\n with: ['Block'],\n yield: ['Append']\n };\n const UNKNOWN_POSITION = Object.freeze({\n line: 1,\n column: 0\n });\n const SYNTHETIC_LOCATION = Object.freeze({\n source: '(synthetic)',\n start: UNKNOWN_POSITION,\n end: UNKNOWN_POSITION\n });\n const NON_EXISTENT_LOCATION = Object.freeze({\n source: '(nonexistent)',\n start: UNKNOWN_POSITION,\n end: UNKNOWN_POSITION\n });\n const BROKEN_LOCATION = Object.freeze({\n source: '(broken)',\n start: UNKNOWN_POSITION,\n end: UNKNOWN_POSITION\n });\n let OffsetKind = /*#__PURE__*/function (OffsetKind) {\n OffsetKind[\"CharPosition\"] = \"CharPosition\";\n OffsetKind[\"HbsPosition\"] = \"HbsPosition\";\n OffsetKind[\"InternalsSynthetic\"] = \"InternalsSynthetic\";\n OffsetKind[\"NonExistent\"] = \"NonExistent\";\n OffsetKind[\"Broken\"] = \"Broken\";\n return OffsetKind;\n }({});\n\n /**\n * This file implements the DSL used by span and offset in places where they need to exhaustively\n * consider all combinations of states (Handlebars offsets, character offsets and invisible/broken\n * offsets).\n *\n * It's probably overkill, but it makes the code that uses it clear. It could be refactored or\n * removed.\n */\n\n const MatchAny = 'MATCH_ANY';\n const IsInvisible = 'IS_INVISIBLE';\n class WhenList {\n constructor(whens) {\n this._whens = void 0;\n this._whens = whens;\n }\n first(kind) {\n for (const when of this._whens) {\n const value = when.match(kind);\n if ((0, _util.isPresentArray)(value)) {\n return value[0];\n }\n }\n return null;\n }\n }\n class When {\n constructor() {\n this._map = new Map();\n }\n get(pattern, or) {\n let value = this._map.get(pattern);\n if (value) {\n return value;\n }\n value = or();\n this._map.set(pattern, value);\n return value;\n }\n add(pattern, out) {\n this._map.set(pattern, out);\n }\n match(kind) {\n const pattern = patternFor(kind);\n const out = [];\n const exact = this._map.get(pattern);\n const fallback = this._map.get(MatchAny);\n if (exact) {\n out.push(exact);\n }\n if (fallback) {\n out.push(fallback);\n }\n return out;\n }\n }\n function match(callback) {\n return callback(new Matcher()).check();\n }\n class Matcher {\n constructor() {\n this._whens = new When();\n }\n /**\n * You didn't exhaustively match all possibilities.\n */\n check() {\n return (left, right) => this.matchFor(left.kind, right.kind)(left, right);\n }\n matchFor(left, right) {\n const nesteds = this._whens.match(left);\n (0, _util.assert)((0, _util.isPresentArray)(nesteds), \"no match defined for (\" + left + \", \" + right + \") and no AnyMatch defined either\");\n const callback = new WhenList(nesteds).first(right);\n (0, _util.assert)(callback !== null, \"no match defined for (\" + left + \", \" + right + \") and no AnyMatch defined either\");\n return callback;\n }\n\n // This big block is the bulk of the heavy lifting in this file. It facilitates exhaustiveness\n // checking so that matchers can ensure they've actually covered all the cases (and TypeScript\n // will treat it as an exhaustive match).\n when(left, right, callback) {\n this._whens.get(left, () => new When()).add(right, callback);\n return this;\n }\n }\n function patternFor(kind) {\n switch (kind) {\n case OffsetKind.Broken:\n case OffsetKind.InternalsSynthetic:\n case OffsetKind.NonExistent:\n return IsInvisible;\n default:\n return kind;\n }\n }\n class SourceSlice {\n static synthetic(chars) {\n let offsets = SourceSpan.synthetic(chars);\n return new SourceSlice({\n loc: offsets,\n chars: chars\n });\n }\n static load(source, slice) {\n return new SourceSlice({\n loc: SourceSpan.load(source, slice[1]),\n chars: slice[0]\n });\n }\n constructor(options) {\n this.chars = void 0;\n this.loc = void 0;\n this.loc = options.loc;\n this.chars = options.chars;\n }\n getString() {\n return this.chars;\n }\n serialize() {\n return [this.chars, this.loc.serialize()];\n }\n }\n\n /**\n * All spans have these details in common.\n */\n\n /**\n * A `SourceSpan` object represents a span of characters inside of a template source.\n *\n * There are three kinds of `SourceSpan` objects:\n *\n * - `ConcreteSourceSpan`, which contains byte offsets\n * - `LazySourceSpan`, which contains `SourceLocation`s from the Handlebars AST, which can be\n * converted to byte offsets on demand.\n * - `InvisibleSourceSpan`, which represent source strings that aren't present in the source,\n * because:\n * - they were created synthetically\n * - their location is nonsensical (the span is broken)\n * - they represent nothing in the source (this currently happens only when a bug in the\n * upstream Handlebars parser fails to assign a location to empty blocks)\n *\n * At a high level, all `SourceSpan` objects provide:\n *\n * - byte offsets\n * - source in column and line format\n *\n * And you can do these operations on `SourceSpan`s:\n *\n * - collapse it to a `SourceSpan` representing its starting or ending position\n * - slice out some characters, optionally skipping some characters at the beginning or end\n * - create a new `SourceSpan` with a different starting or ending offset\n *\n * All SourceSpan objects implement `SourceLocation`, for compatibility. All SourceSpan\n * objects have a `toJSON` that emits `SourceLocation`, also for compatibility.\n *\n * For compatibility, subclasses of `AbstractSourceSpan` must implement `locDidUpdate`, which\n * happens when an AST plugin attempts to modify the `start` or `end` of a span directly.\n *\n * The goal is to avoid creating any problems for use-cases like AST Explorer.\n */\n _exports.SourceSlice = SourceSlice;\n class SourceSpan {\n static get NON_EXISTENT() {\n return new InvisibleSpan(OffsetKind.NonExistent, NON_EXISTENT_LOCATION).wrap();\n }\n static load(source, serialized) {\n if (typeof serialized === 'number') {\n return SourceSpan.forCharPositions(source, serialized, serialized);\n } else if (typeof serialized === 'string') {\n return SourceSpan.synthetic(serialized);\n } else if (Array.isArray(serialized)) {\n return SourceSpan.forCharPositions(source, serialized[0], serialized[1]);\n } else if (serialized === OffsetKind.NonExistent) {\n return SourceSpan.NON_EXISTENT;\n } else if (serialized === OffsetKind.Broken) {\n return SourceSpan.broken(BROKEN_LOCATION);\n }\n (0, _util.assertNever)(serialized);\n }\n static forHbsLoc(source, loc) {\n const start = new HbsPosition(source, loc.start);\n const end = new HbsPosition(source, loc.end);\n return new HbsSpan(source, {\n start,\n end\n }, loc).wrap();\n }\n static forCharPositions(source, startPos, endPos) {\n const start = new CharPosition(source, startPos);\n const end = new CharPosition(source, endPos);\n return new CharPositionSpan(source, {\n start,\n end\n }).wrap();\n }\n static synthetic(chars) {\n return new InvisibleSpan(OffsetKind.InternalsSynthetic, NON_EXISTENT_LOCATION, chars).wrap();\n }\n static broken(pos) {\n if (pos === void 0) {\n pos = BROKEN_LOCATION;\n }\n return new InvisibleSpan(OffsetKind.Broken, pos).wrap();\n }\n constructor(data) {\n this.isInvisible = void 0;\n this.data = data;\n this.isInvisible = data.kind !== OffsetKind.CharPosition && data.kind !== OffsetKind.HbsPosition;\n }\n getStart() {\n return this.data.getStart().wrap();\n }\n getEnd() {\n return this.data.getEnd().wrap();\n }\n get loc() {\n const span = this.data.toHbsSpan();\n return span === null ? BROKEN_LOCATION : span.toHbsLoc();\n }\n get module() {\n return this.data.getModule();\n }\n\n /**\n * Get the starting `SourcePosition` for this `SourceSpan`, lazily computing it if needed.\n */\n get startPosition() {\n return this.loc.start;\n }\n\n /**\n * Get the ending `SourcePosition` for this `SourceSpan`, lazily computing it if needed.\n */\n get endPosition() {\n return this.loc.end;\n }\n\n /**\n * Support converting ASTv1 nodes into a serialized format using JSON.stringify.\n */\n toJSON() {\n return this.loc;\n }\n\n /**\n * Create a new span with the current span's end and a new beginning.\n */\n withStart(other) {\n return span(other.data, this.data.getEnd());\n }\n\n /**\n * Create a new span with the current span's beginning and a new ending.\n */\n withEnd(other) {\n return span(this.data.getStart(), other.data);\n }\n asString() {\n return this.data.asString();\n }\n\n /**\n * Convert this `SourceSpan` into a `SourceSlice`. In debug mode, this method optionally checks\n * that the byte offsets represented by this `SourceSpan` actually correspond to the expected\n * string.\n */\n toSlice(expected) {\n const chars = this.data.asString();\n if (true /* DEBUG */) {\n if (expected !== undefined && chars !== expected) {\n // eslint-disable-next-line no-console\n console.warn(\"unexpectedly found \" + JSON.stringify(chars) + \" when slicing source, but expected \" + JSON.stringify(expected));\n }\n }\n return new SourceSlice({\n loc: this,\n chars: expected || chars\n });\n }\n\n /**\n * For compatibility with SourceLocation in AST plugins\n *\n * @deprecated use startPosition instead\n */\n get start() {\n return this.loc.start;\n }\n\n /**\n * For compatibility with SourceLocation in AST plugins\n *\n * @deprecated use withStart instead\n */\n set start(position) {\n this.data.locDidUpdate({\n start: position\n });\n }\n\n /**\n * For compatibility with SourceLocation in AST plugins\n *\n * @deprecated use endPosition instead\n */\n get end() {\n return this.loc.end;\n }\n\n /**\n * For compatibility with SourceLocation in AST plugins\n *\n * @deprecated use withEnd instead\n */\n set end(position) {\n this.data.locDidUpdate({\n end: position\n });\n }\n\n /**\n * For compatibility with SourceLocation in AST plugins\n *\n * @deprecated use module instead\n */\n get source() {\n return this.module;\n }\n collapse(where) {\n switch (where) {\n case 'start':\n return this.getStart().collapsed();\n case 'end':\n return this.getEnd().collapsed();\n }\n }\n extend(other) {\n return span(this.data.getStart(), other.data.getEnd());\n }\n serialize() {\n return this.data.serialize();\n }\n slice(_ref) {\n let {\n skipStart = 0,\n skipEnd = 0\n } = _ref;\n return span(this.getStart().move(skipStart).data, this.getEnd().move(-skipEnd).data);\n }\n sliceStartChars(_ref2) {\n let {\n skipStart = 0,\n chars\n } = _ref2;\n return span(this.getStart().move(skipStart).data, this.getStart().move(skipStart + chars).data);\n }\n sliceEndChars(_ref3) {\n let {\n skipEnd = 0,\n chars\n } = _ref3;\n return span(this.getEnd().move(skipEnd - chars).data, this.getStart().move(-skipEnd).data);\n }\n }\n class CharPositionSpan {\n constructor(source, charPositions) {\n this.kind = OffsetKind.CharPosition;\n this._locPosSpan = null;\n this.source = source;\n this.charPositions = charPositions;\n }\n wrap() {\n return new SourceSpan(this);\n }\n asString() {\n return this.source.slice(this.charPositions.start.charPos, this.charPositions.end.charPos);\n }\n getModule() {\n return this.source.module;\n }\n getStart() {\n return this.charPositions.start;\n }\n getEnd() {\n return this.charPositions.end;\n }\n locDidUpdate() {}\n toHbsSpan() {\n let locPosSpan = this._locPosSpan;\n if (locPosSpan === null) {\n const start = this.charPositions.start.toHbsPos();\n const end = this.charPositions.end.toHbsPos();\n if (start === null || end === null) {\n locPosSpan = this._locPosSpan = BROKEN;\n } else {\n locPosSpan = this._locPosSpan = new HbsSpan(this.source, {\n start,\n end\n });\n }\n }\n return locPosSpan === BROKEN ? null : locPosSpan;\n }\n serialize() {\n const {\n start: {\n charPos: start\n },\n end: {\n charPos: end\n }\n } = this.charPositions;\n if (start === end) {\n return start;\n } else {\n return [start, end];\n }\n }\n toCharPosSpan() {\n return this;\n }\n }\n class HbsSpan {\n constructor(source, hbsPositions, providedHbsLoc) {\n if (providedHbsLoc === void 0) {\n providedHbsLoc = null;\n }\n this.kind = OffsetKind.HbsPosition;\n this._charPosSpan = null;\n // the source location from Handlebars + AST Plugins -- could be wrong\n this._providedHbsLoc = void 0;\n this.source = source;\n this.hbsPositions = hbsPositions;\n this._providedHbsLoc = providedHbsLoc;\n }\n serialize() {\n const charPos = this.toCharPosSpan();\n return charPos === null ? OffsetKind.Broken : charPos.wrap().serialize();\n }\n wrap() {\n return new SourceSpan(this);\n }\n updateProvided(pos, edge) {\n if (this._providedHbsLoc) {\n this._providedHbsLoc[edge] = pos;\n }\n\n // invalidate computed character offsets\n this._charPosSpan = null;\n this._providedHbsLoc = {\n start: pos,\n end: pos\n };\n }\n locDidUpdate(_ref4) {\n let {\n start,\n end\n } = _ref4;\n if (start !== undefined) {\n this.updateProvided(start, 'start');\n this.hbsPositions.start = new HbsPosition(this.source, start, null);\n }\n if (end !== undefined) {\n this.updateProvided(end, 'end');\n this.hbsPositions.end = new HbsPosition(this.source, end, null);\n }\n }\n asString() {\n const span = this.toCharPosSpan();\n return span === null ? '' : span.asString();\n }\n getModule() {\n return this.source.module;\n }\n getStart() {\n return this.hbsPositions.start;\n }\n getEnd() {\n return this.hbsPositions.end;\n }\n toHbsLoc() {\n return {\n start: this.hbsPositions.start.hbsPos,\n end: this.hbsPositions.end.hbsPos\n };\n }\n toHbsSpan() {\n return this;\n }\n toCharPosSpan() {\n let charPosSpan = this._charPosSpan;\n if (charPosSpan === null) {\n const start = this.hbsPositions.start.toCharPos();\n const end = this.hbsPositions.end.toCharPos();\n if (start && end) {\n charPosSpan = this._charPosSpan = new CharPositionSpan(this.source, {\n start,\n end\n });\n } else {\n charPosSpan = this._charPosSpan = BROKEN;\n return null;\n }\n }\n return charPosSpan === BROKEN ? null : charPosSpan;\n }\n }\n class InvisibleSpan {\n constructor(kind,\n // whatever was provided, possibly broken\n loc,\n // if the span represents a synthetic string\n string) {\n if (string === void 0) {\n string = null;\n }\n this.kind = kind;\n this.loc = loc;\n this.string = string;\n }\n serialize() {\n switch (this.kind) {\n case OffsetKind.Broken:\n case OffsetKind.NonExistent:\n return this.kind;\n case OffsetKind.InternalsSynthetic:\n return this.string || '';\n }\n }\n wrap() {\n return new SourceSpan(this);\n }\n asString() {\n return this.string || '';\n }\n locDidUpdate(_ref5) {\n let {\n start,\n end\n } = _ref5;\n if (start !== undefined) {\n this.loc.start = start;\n }\n if (end !== undefined) {\n this.loc.end = end;\n }\n }\n getModule() {\n // TODO: Make this reflect the actual module this span originated from\n return 'an unknown module';\n }\n getStart() {\n return new InvisiblePosition(this.kind, this.loc.start);\n }\n getEnd() {\n return new InvisiblePosition(this.kind, this.loc.end);\n }\n toCharPosSpan() {\n return this;\n }\n toHbsSpan() {\n return null;\n }\n toHbsLoc() {\n return BROKEN_LOCATION;\n }\n }\n const span = match(m => m.when(OffsetKind.HbsPosition, OffsetKind.HbsPosition, (left, right) => new HbsSpan(left.source, {\n start: left,\n end: right\n }).wrap()).when(OffsetKind.CharPosition, OffsetKind.CharPosition, (left, right) => new CharPositionSpan(left.source, {\n start: left,\n end: right\n }).wrap()).when(OffsetKind.CharPosition, OffsetKind.HbsPosition, (left, right) => {\n const rightCharPos = right.toCharPos();\n if (rightCharPos === null) {\n return new InvisibleSpan(OffsetKind.Broken, BROKEN_LOCATION).wrap();\n } else {\n return span(left, rightCharPos);\n }\n }).when(OffsetKind.HbsPosition, OffsetKind.CharPosition, (left, right) => {\n const leftCharPos = left.toCharPos();\n if (leftCharPos === null) {\n return new InvisibleSpan(OffsetKind.Broken, BROKEN_LOCATION).wrap();\n } else {\n return span(leftCharPos, right);\n }\n }).when(IsInvisible, MatchAny, left => new InvisibleSpan(left.kind, BROKEN_LOCATION).wrap()).when(MatchAny, IsInvisible, (_, right) => new InvisibleSpan(right.kind, BROKEN_LOCATION).wrap()));\n\n /**\n * All positions have these details in common. Most notably, all three kinds of positions can\n * must be able to attempt to convert themselves into {@see CharPosition}.\n */\n\n /**\n * Used to indicate that an attempt to convert a `SourcePosition` to a character offset failed. It\n * is separate from `null` so that `null` can be used to indicate that the computation wasn't yet\n * attempted (and therefore to cache the failure)\n */\n const BROKEN = 'BROKEN';\n /**\n * A `SourceOffset` represents a single position in the source.\n *\n * There are three kinds of backing data for `SourceOffset` objects:\n *\n * - `CharPosition`, which contains a character offset into the raw source string\n * - `HbsPosition`, which contains a `SourcePosition` from the Handlebars AST, which can be\n * converted to a `CharPosition` on demand.\n * - `InvisiblePosition`, which represents a position not in source (@see {InvisiblePosition})\n */\n class SourceOffset {\n /**\n * Create a `SourceOffset` from a Handlebars `SourcePosition`. It's stored as-is, and converted\n * into a character offset on demand, which avoids unnecessarily computing the offset of every\n * `SourceLocation`, but also means that broken `SourcePosition`s are not always detected.\n */\n static forHbsPos(source, pos) {\n return new HbsPosition(source, pos, null).wrap();\n }\n\n /**\n * Create a `SourceOffset` that corresponds to a broken `SourcePosition`. This means that the\n * calling code determined (or knows) that the `SourceLocation` doesn't correspond correctly to\n * any part of the source.\n */\n static broken(pos) {\n if (pos === void 0) {\n pos = UNKNOWN_POSITION;\n }\n return new InvisiblePosition(OffsetKind.Broken, pos).wrap();\n }\n constructor(data) {\n this.data = data;\n }\n\n /**\n * Get the character offset for this `SourceOffset`, if possible.\n */\n get offset() {\n const charPos = this.data.toCharPos();\n return charPos === null ? null : charPos.offset;\n }\n\n /**\n * Compare this offset with another one.\n *\n * If both offsets are `HbsPosition`s, they're equivalent as long as their lines and columns are\n * the same. This avoids computing offsets unnecessarily.\n *\n * Otherwise, two `SourceOffset`s are equivalent if their successfully computed character offsets\n * are the same.\n */\n eql(right) {\n return eql(this.data, right.data);\n }\n\n /**\n * Create a span that starts from this source offset and ends with another source offset. Avoid\n * computing character offsets if both `SourceOffset`s are still lazy.\n */\n until(other) {\n return span(this.data, other.data);\n }\n\n /**\n * Create a `SourceOffset` by moving the character position represented by this source offset\n * forward or backward (if `by` is negative), if possible.\n *\n * If this `SourceOffset` can't compute a valid character offset, `move` returns a broken offset.\n *\n * If the resulting character offset is less than 0 or greater than the size of the source, `move`\n * returns a broken offset.\n */\n move(by) {\n const charPos = this.data.toCharPos();\n if (charPos === null) {\n return SourceOffset.broken();\n } else {\n const result = charPos.offset + by;\n if (charPos.source.check(result)) {\n return new CharPosition(charPos.source, result).wrap();\n } else {\n return SourceOffset.broken();\n }\n }\n }\n\n /**\n * Create a new `SourceSpan` that represents a collapsed range at this source offset. Avoid\n * computing the character offset if it has not already been computed.\n */\n collapsed() {\n return span(this.data, this.data);\n }\n\n /**\n * Convert this `SourceOffset` into a Handlebars {@see SourcePosition} for compatibility with\n * existing plugins.\n */\n toJSON() {\n return this.data.toJSON();\n }\n }\n class CharPosition {\n constructor(source, charPos) {\n this.kind = OffsetKind.CharPosition;\n /** Computed from char offset */\n this._locPos = null;\n this.source = source;\n this.charPos = charPos;\n }\n\n /**\n * This is already a `CharPosition`.\n *\n * {@see HbsPosition} for the alternative.\n */\n toCharPos() {\n return this;\n }\n\n /**\n * Produce a Handlebars {@see SourcePosition} for this `CharPosition`. If this `CharPosition` was\n * computed using {@see SourceOffset#move}, this will compute the `SourcePosition` for the offset.\n */\n toJSON() {\n const hbs = this.toHbsPos();\n return hbs === null ? UNKNOWN_POSITION : hbs.toJSON();\n }\n wrap() {\n return new SourceOffset(this);\n }\n\n /**\n * A `CharPosition` always has an offset it can produce without any additional computation.\n */\n get offset() {\n return this.charPos;\n }\n\n /**\n * Convert the current character offset to an `HbsPosition`, if it was not already computed. Once\n * a `CharPosition` has computed its `HbsPosition`, it will not need to do compute it again, and\n * the same `CharPosition` is retained when used as one of the ends of a `SourceSpan`, so\n * computing the `HbsPosition` should be a one-time operation.\n */\n toHbsPos() {\n let locPos = this._locPos;\n if (locPos === null) {\n const hbsPos = this.source.hbsPosFor(this.charPos);\n if (hbsPos === null) {\n this._locPos = locPos = BROKEN;\n } else {\n this._locPos = locPos = new HbsPosition(this.source, hbsPos, this.charPos);\n }\n }\n return locPos === BROKEN ? null : locPos;\n }\n }\n class HbsPosition {\n constructor(source, hbsPos, charPos) {\n if (charPos === void 0) {\n charPos = null;\n }\n this.kind = OffsetKind.HbsPosition;\n this._charPos = void 0;\n this.source = source;\n this.hbsPos = hbsPos;\n this._charPos = charPos === null ? null : new CharPosition(source, charPos);\n }\n\n /**\n * Lazily compute the character offset from the {@see SourcePosition}. Once an `HbsPosition` has\n * computed its `CharPosition`, it will not need to do compute it again, and the same\n * `HbsPosition` is retained when used as one of the ends of a `SourceSpan`, so computing the\n * `CharPosition` should be a one-time operation.\n */\n toCharPos() {\n let charPos = this._charPos;\n if (charPos === null) {\n const charPosNumber = this.source.charPosFor(this.hbsPos);\n if (charPosNumber === null) {\n this._charPos = charPos = BROKEN;\n } else {\n this._charPos = charPos = new CharPosition(this.source, charPosNumber);\n }\n }\n return charPos === BROKEN ? null : charPos;\n }\n\n /**\n * Return the {@see SourcePosition} that this `HbsPosition` was instantiated with. This operation\n * does not need to compute anything.\n */\n toJSON() {\n return this.hbsPos;\n }\n wrap() {\n return new SourceOffset(this);\n }\n\n /**\n * This is already an `HbsPosition`.\n *\n * {@see CharPosition} for the alternative.\n */\n toHbsPos() {\n return this;\n }\n }\n class InvisiblePosition {\n constructor(kind,\n // whatever was provided, possibly broken\n pos) {\n this.kind = kind;\n this.pos = pos;\n }\n\n /**\n * A broken position cannot be turned into a {@see CharacterPosition}.\n */\n toCharPos() {\n return null;\n }\n\n /**\n * The serialization of an `InvisiblePosition is whatever Handlebars {@see SourcePosition} was\n * originally identified as broken, non-existent or synthetic.\n *\n * If an `InvisiblePosition` never had an source offset at all, this method returns\n * {@see UNKNOWN_POSITION} for compatibility.\n */\n toJSON() {\n return this.pos;\n }\n wrap() {\n return new SourceOffset(this);\n }\n get offset() {\n return null;\n }\n }\n\n /**\n * Compare two {@see AnyPosition} and determine whether they are equal.\n *\n * @see {SourceOffset#eql}\n */\n const eql = match(m => m.when(OffsetKind.HbsPosition, OffsetKind.HbsPosition, (_ref6, _ref7) => {\n let {\n hbsPos: left\n } = _ref6;\n let {\n hbsPos: right\n } = _ref7;\n return left.column === right.column && left.line === right.line;\n }).when(OffsetKind.CharPosition, OffsetKind.CharPosition, (_ref8, _ref9) => {\n let {\n charPos: left\n } = _ref8;\n let {\n charPos: right\n } = _ref9;\n return left === right;\n }).when(OffsetKind.CharPosition, OffsetKind.HbsPosition, (_ref10, right) => {\n var _right$toCharPos;\n let {\n offset: left\n } = _ref10;\n return left === ((_right$toCharPos = right.toCharPos()) == null ? void 0 : _right$toCharPos.offset);\n }).when(OffsetKind.HbsPosition, OffsetKind.CharPosition, (left, _ref11) => {\n var _left$toCharPos;\n let {\n offset: right\n } = _ref11;\n return ((_left$toCharPos = left.toCharPos()) == null ? void 0 : _left$toCharPos.offset) === right;\n }).when(MatchAny, MatchAny, () => false));\n class Source {\n static from(source, options) {\n var _options$meta;\n if (options === void 0) {\n options = {};\n }\n return new Source(source, (_options$meta = options.meta) == null ? void 0 : _options$meta.moduleName);\n }\n constructor(source, module) {\n if (module === void 0) {\n module = 'an unknown module';\n }\n this.source = source;\n this.module = module;\n }\n\n /**\n * Validate that the character offset represents a position in the source string.\n */\n check(offset) {\n return offset >= 0 && offset <= this.source.length;\n }\n slice(start, end) {\n return this.source.slice(start, end);\n }\n offsetFor(line, column) {\n return SourceOffset.forHbsPos(this, {\n line,\n column\n });\n }\n spanFor(_ref12) {\n let {\n start,\n end\n } = _ref12;\n return SourceSpan.forHbsLoc(this, {\n start: {\n line: start.line,\n column: start.column\n },\n end: {\n line: end.line,\n column: end.column\n }\n });\n }\n hbsPosFor(offset) {\n let seenLines = 0;\n let seenChars = 0;\n if (offset > this.source.length) {\n return null;\n }\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n let nextLine = this.source.indexOf('\\n', seenChars);\n if (offset <= nextLine || nextLine === -1) {\n return {\n line: seenLines + 1,\n column: offset - seenChars\n };\n } else {\n seenLines += 1;\n seenChars = nextLine + 1;\n }\n }\n }\n charPosFor(position) {\n let {\n line,\n column\n } = position;\n let sourceString = this.source;\n let sourceLength = sourceString.length;\n let seenLines = 0;\n let seenChars = 0;\n while (seenChars < sourceLength) {\n let nextLine = this.source.indexOf('\\n', seenChars);\n if (nextLine === -1) nextLine = this.source.length;\n if (seenLines === line - 1) {\n if (seenChars + column > nextLine) return nextLine;\n if (true /* DEBUG */) {\n let roundTrip = this.hbsPosFor(seenChars + column);\n (0, _util.assert)(roundTrip !== null, \"the returned offset failed to round-trip\");\n (0, _util.assert)(roundTrip.line === line, \"the round-tripped line didn't match the original line\");\n (0, _util.assert)(roundTrip.column === column, \"the round-tripped column didn't match the original column\");\n }\n return seenChars + column;\n } else if (nextLine === -1) {\n return 0;\n } else {\n seenLines += 1;\n seenChars = nextLine + 1;\n }\n }\n return sourceLength;\n }\n }\n class SpanList {\n static range(span, fallback) {\n if (fallback === void 0) {\n fallback = SourceSpan.NON_EXISTENT;\n }\n return new SpanList(span.map(loc)).getRangeOffset(fallback);\n }\n constructor(span) {\n if (span === void 0) {\n span = [];\n }\n this._span = void 0;\n this._span = span;\n }\n add(offset) {\n this._span.push(offset);\n }\n getRangeOffset(fallback) {\n if ((0, _util.isPresentArray)(this._span)) {\n let first = (0, _util.getFirst)(this._span);\n let last = (0, _util.getLast)(this._span);\n return first.extend(last);\n } else {\n return fallback;\n }\n }\n }\n _exports.SpanList = SpanList;\n function loc(span) {\n if (Array.isArray(span)) {\n let first = (0, _util.getFirst)(span);\n let last = (0, _util.getLast)(span);\n return loc(first).extend(loc(last));\n } else if (span instanceof SourceSpan) {\n return span;\n } else {\n return span.loc;\n }\n }\n function hasSpan(span) {\n if (Array.isArray(span) && span.length === 0) {\n return false;\n }\n return true;\n }\n function maybeLoc(location, fallback) {\n if (hasSpan(location)) {\n return loc(location);\n } else {\n return fallback;\n }\n }\n var api$2 = _exports.src = /*#__PURE__*/Object.freeze({\n __proto__: null,\n NON_EXISTENT_LOCATION: NON_EXISTENT_LOCATION,\n SYNTHETIC_LOCATION: SYNTHETIC_LOCATION,\n Source: Source,\n SourceOffset: SourceOffset,\n SourceSlice: SourceSlice,\n SourceSpan: SourceSpan,\n SpanList: SpanList,\n UNKNOWN_POSITION: UNKNOWN_POSITION,\n hasSpan: hasSpan,\n loc: loc,\n maybeLoc: maybeLoc\n });\n function generateSyntaxError(message, location) {\n let {\n module,\n loc\n } = location;\n let {\n line,\n column\n } = loc.start;\n let code = location.asString();\n let quotedCode = code ? \"\\n\\n|\\n| \" + code.split('\\n').join('\\n| ') + \"\\n|\\n\\n\" : '';\n let error = new Error(message + \": \" + quotedCode + \"(error occurred in '\" + module + \"' @ line \" + line + \" : column \" + column + \")\");\n error.name = 'SyntaxError';\n error.location = location;\n error.code = code;\n return error;\n }\n\n // ensure stays in sync with typing\n // ParentNode and ChildKey types are derived from VisitorKeysMap\n const visitorKeys = _exports.visitorKeys = {\n Program: ['body'],\n Template: ['body'],\n Block: ['body'],\n MustacheStatement: ['path', 'params', 'hash'],\n BlockStatement: ['path', 'params', 'hash', 'program', 'inverse'],\n ElementModifierStatement: ['path', 'params', 'hash'],\n PartialStatement: ['name', 'params', 'hash'],\n CommentStatement: [],\n MustacheCommentStatement: [],\n ElementNode: ['attributes', 'modifiers', 'children', 'comments'],\n AttrNode: ['value'],\n TextNode: [],\n ConcatStatement: ['parts'],\n SubExpression: ['path', 'params', 'hash'],\n PathExpression: [],\n PathHead: [],\n StringLiteral: [],\n BooleanLiteral: [],\n NumberLiteral: [],\n NullLiteral: [],\n UndefinedLiteral: [],\n Hash: ['pairs'],\n HashPair: ['value'],\n // v2 new nodes\n NamedBlock: ['attributes', 'modifiers', 'children', 'comments'],\n SimpleElement: ['attributes', 'modifiers', 'children', 'comments'],\n Component: ['head', 'attributes', 'modifiers', 'children', 'comments']\n };\n const TraversalError = function () {\n TraversalError.prototype = Object.create(Error.prototype);\n TraversalError.prototype.constructor = TraversalError;\n function TraversalError(message, node, parent, key) {\n let error = Error.call(this, message);\n this.key = key;\n this.message = message;\n this.node = node;\n this.parent = parent;\n if (error.stack) {\n this.stack = error.stack;\n }\n }\n return TraversalError;\n }();\n function cannotRemoveNode(node, parent, key) {\n return new TraversalError('Cannot remove a node unless it is part of an array', node, parent, key);\n }\n function cannotReplaceNode(node, parent, key) {\n return new TraversalError('Cannot replace a node with multiple nodes unless it is part of an array', node, parent, key);\n }\n function cannotReplaceOrRemoveInKeyHandlerYet(node, key) {\n return new TraversalError('Replacing and removing in key handlers is not yet supported.', node, null, key);\n }\n class WalkerPath {\n constructor(node, parent, parentKey) {\n if (parent === void 0) {\n parent = null;\n }\n if (parentKey === void 0) {\n parentKey = null;\n }\n this.node = void 0;\n this.parent = void 0;\n this.parentKey = void 0;\n this.node = node;\n this.parent = parent;\n this.parentKey = parentKey;\n }\n get parentNode() {\n return this.parent ? this.parent.node : null;\n }\n parents() {\n return {\n [Symbol.iterator]: () => {\n return new PathParentsIterator(this);\n }\n };\n }\n }\n _exports.WalkerPath = WalkerPath;\n class PathParentsIterator {\n constructor(path) {\n this.path = void 0;\n this.path = path;\n }\n next() {\n if (this.path.parent) {\n this.path = this.path.parent;\n return {\n done: false,\n value: this.path\n };\n } else {\n return {\n done: true,\n value: null\n };\n }\n }\n }\n function getEnterFunction(handler) {\n if (typeof handler === 'function') {\n return handler;\n } else {\n return handler.enter;\n }\n }\n function getExitFunction(handler) {\n if (typeof handler === 'function') {\n return undefined;\n } else {\n return handler.exit;\n }\n }\n function getKeyHandler(handler, key) {\n let keyVisitor = typeof handler !== 'function' ? handler.keys : undefined;\n if (keyVisitor === undefined) return;\n let keyHandler = keyVisitor[key];\n if (keyHandler !== undefined) {\n return keyHandler;\n }\n return keyVisitor.All;\n }\n function getNodeHandler(visitor, nodeType) {\n if (nodeType === 'Template' || nodeType === 'Block') {\n if (visitor.Program) {\n return visitor.Program;\n }\n }\n let handler = visitor[nodeType];\n if (handler !== undefined) {\n return handler;\n }\n return visitor.All;\n }\n function visitNode(visitor, path) {\n let {\n node,\n parent,\n parentKey\n } = path;\n let handler = getNodeHandler(visitor, node.type);\n let enter;\n let exit;\n if (handler !== undefined) {\n enter = getEnterFunction(handler);\n exit = getExitFunction(handler);\n }\n let result;\n if (enter !== undefined) {\n result = enter(node, path);\n }\n if (result !== undefined && result !== null) {\n if (JSON.stringify(node) === JSON.stringify(result)) {\n result = undefined;\n } else if (Array.isArray(result)) {\n visitArray(visitor, result, parent, parentKey);\n return result;\n } else {\n let path = new WalkerPath(result, parent, parentKey);\n return visitNode(visitor, path) || result;\n }\n }\n if (result === undefined) {\n let keys = visitorKeys[node.type];\n for (let i = 0; i < keys.length; i++) {\n let key = keys[i];\n // we know if it has child keys we can widen to a ParentNode\n visitKey(visitor, handler, path, key);\n }\n if (exit !== undefined) {\n result = exit(node, path);\n }\n }\n return result;\n }\n function get(node, key) {\n return node[key];\n }\n function set(node, key, value) {\n node[key] = value;\n }\n function visitKey(visitor, handler, path, key) {\n let {\n node\n } = path;\n let value = get(node, key);\n if (!value) {\n return;\n }\n let keyEnter;\n let keyExit;\n if (handler !== undefined) {\n let keyHandler = getKeyHandler(handler, key);\n if (keyHandler !== undefined) {\n keyEnter = getEnterFunction(keyHandler);\n keyExit = getExitFunction(keyHandler);\n }\n }\n if (keyEnter !== undefined) {\n if (keyEnter(node, key) !== undefined) {\n throw cannotReplaceOrRemoveInKeyHandlerYet(node, key);\n }\n }\n if (Array.isArray(value)) {\n visitArray(visitor, value, path, key);\n } else {\n let keyPath = new WalkerPath(value, path, key);\n let result = visitNode(visitor, keyPath);\n if (result !== undefined) {\n // TODO: dynamically check the results by having a table of\n // expected node types in value space, not just type space\n\n assignKey(node, key, value, result);\n }\n }\n if (keyExit !== undefined) {\n if (keyExit(node, key) !== undefined) {\n throw cannotReplaceOrRemoveInKeyHandlerYet(node, key);\n }\n }\n }\n function visitArray(visitor, array, parent, parentKey) {\n for (let i = 0; i < array.length; i++) {\n let node = (0, _util.unwrap)(array[i]);\n let path = new WalkerPath(node, parent, parentKey);\n let result = visitNode(visitor, path);\n if (result !== undefined) {\n i += spliceArray(array, i, result) - 1;\n }\n }\n }\n function assignKey(node, key, value, result) {\n if (result === null) {\n throw cannotRemoveNode(value, node, key);\n } else if (Array.isArray(result)) {\n if (result.length === 1) {\n set(node, key, result[0]);\n } else {\n if (result.length === 0) {\n throw cannotRemoveNode(value, node, key);\n } else {\n throw cannotReplaceNode(value, node, key);\n }\n }\n } else {\n set(node, key, result);\n }\n }\n function spliceArray(array, index, result) {\n if (result === null) {\n array.splice(index, 1);\n return 0;\n } else if (Array.isArray(result)) {\n array.splice(index, 1, ...result);\n return result.length;\n } else {\n array.splice(index, 1, result);\n return 1;\n }\n }\n function traverse(node, visitor) {\n let path = new WalkerPath(node);\n visitNode(visitor, path);\n }\n class Walker {\n constructor(order) {\n this.stack = [];\n this.order = order;\n }\n visit(node, visitor) {\n if (!node) {\n return;\n }\n this.stack.push(node);\n if (this.order === 'post') {\n this.children(node, visitor);\n visitor(node, this);\n } else {\n visitor(node, this);\n this.children(node, visitor);\n }\n this.stack.pop();\n }\n children(node, callback) {\n switch (node.type) {\n case 'Block':\n case 'Template':\n return visitors.Program(this, node, callback);\n case 'ElementNode':\n return visitors.ElementNode(this, node, callback);\n case 'BlockStatement':\n return visitors.BlockStatement(this, node, callback);\n default:\n return;\n }\n }\n }\n _exports.Walker = _exports.Path = Walker;\n const visitors = {\n Program(walker, node, callback) {\n walkBody(walker, node.body, callback);\n },\n Template(walker, node, callback) {\n walkBody(walker, node.body, callback);\n },\n Block(walker, node, callback) {\n walkBody(walker, node.body, callback);\n },\n ElementNode(walker, node, callback) {\n walkBody(walker, node.children, callback);\n },\n BlockStatement(walker, node, callback) {\n walker.visit(node.program, callback);\n walker.visit(node.inverse || null, callback);\n }\n };\n function walkBody(walker, body, callback) {\n for (const child of body) {\n walker.visit(child, callback);\n }\n }\n\n // Regex to validate the identifier for block parameters.\n // Based on the ID validation regex in Handlebars.\n\n let ID_INVERSE_PATTERN = /[!\"#%&'()*+./;<=>@[\\\\\\]^`{|}~]/u;\n\n // Checks the element's attributes to see if it uses block params.\n // If it does, registers the block params with the program and\n // removes the corresponding attributes from the element.\n\n function parseElementBlockParams(element) {\n let params = parseBlockParams(element);\n if (params) element.blockParams = params;\n }\n function parseBlockParams(element) {\n let l = element.attributes.length;\n let attrNames = [];\n for (let i = 0; i < l; i++) {\n attrNames.push((0, _util.unwrap)(element.attributes[i]).name);\n }\n let asIndex = attrNames.indexOf('as');\n if (asIndex === -1 && attrNames.length > 0 && (0, _util.unwrap)(attrNames[attrNames.length - 1]).charAt(0) === '|') {\n throw generateSyntaxError('Block parameters must be preceded by the `as` keyword, detected block parameters without `as`', element.loc);\n }\n if (asIndex !== -1 && l > asIndex && (0, _util.unwrap)(attrNames[asIndex + 1]).charAt(0) === '|') {\n // Some basic validation, since we're doing the parsing ourselves\n let paramsString = attrNames.slice(asIndex).join(' ');\n if (paramsString.charAt(paramsString.length - 1) !== '|' || (0, _util.expect)(paramsString.match(/\\|/gu), \"block params must exist here\").length !== 2) {\n throw generateSyntaxError(\"Invalid block parameters syntax, '\" + paramsString + \"'\", element.loc);\n }\n let params = [];\n for (let i = asIndex + 1; i < l; i++) {\n let param = (0, _util.unwrap)(attrNames[i]).replace(/\\|/gu, '');\n if (param !== '') {\n if (ID_INVERSE_PATTERN.test(param)) {\n throw generateSyntaxError(\"Invalid identifier for block parameters, '\" + param + \"'\", element.loc);\n }\n params.push(param);\n }\n }\n if (params.length === 0) {\n throw generateSyntaxError('Cannot use zero block parameters', element.loc);\n }\n element.attributes = element.attributes.slice(0, asIndex);\n return params;\n }\n return null;\n }\n function childrenFor(node) {\n switch (node.type) {\n case 'Block':\n case 'Template':\n return node.body;\n case 'ElementNode':\n return node.children;\n }\n }\n function appendChild(parent, node) {\n childrenFor(parent).push(node);\n }\n function isHBSLiteral(path) {\n return path.type === 'StringLiteral' || path.type === 'BooleanLiteral' || path.type === 'NumberLiteral' || path.type === 'NullLiteral' || path.type === 'UndefinedLiteral';\n }\n function printLiteral(literal) {\n if (literal.type === 'UndefinedLiteral') {\n return 'undefined';\n } else {\n return JSON.stringify(literal.value);\n }\n }\n function isUpperCase(tag) {\n var _tag$2, _tag$3;\n return tag[0] === ((_tag$2 = tag[0]) == null ? void 0 : _tag$2.toUpperCase()) && tag[0] !== ((_tag$3 = tag[0]) == null ? void 0 : _tag$3.toLowerCase());\n }\n function isLowerCase(tag) {\n var _tag$4, _tag$5;\n return tag[0] === ((_tag$4 = tag[0]) == null ? void 0 : _tag$4.toLowerCase()) && tag[0] !== ((_tag$5 = tag[0]) == null ? void 0 : _tag$5.toUpperCase());\n }\n let _SOURCE;\n function SOURCE() {\n if (!_SOURCE) {\n _SOURCE = new Source('', '(synthetic)');\n }\n return _SOURCE;\n }\n\n // const SOURCE = new Source('', '(tests)');\n\n // Statements\n function buildMustache(path, params, hash, raw, loc, strip) {\n if (typeof path === 'string') {\n path = buildPath(path);\n }\n return {\n type: 'MustacheStatement',\n path,\n params: params || [],\n hash: hash || buildHash([]),\n escaped: !raw,\n trusting: !!raw,\n loc: buildLoc(loc || null),\n strip: strip || {\n open: false,\n close: false\n }\n };\n }\n function buildBlock(path, params, hash, _defaultBlock, _elseBlock, loc, openStrip, inverseStrip, closeStrip) {\n let defaultBlock;\n let elseBlock;\n if (_defaultBlock.type === 'Template') {\n defaultBlock = (0, _util.assign)({}, _defaultBlock, {\n type: 'Block'\n });\n } else {\n defaultBlock = _defaultBlock;\n }\n if (_elseBlock !== undefined && _elseBlock !== null && _elseBlock.type === 'Template') {\n elseBlock = (0, _util.assign)({}, _elseBlock, {\n type: 'Block'\n });\n } else {\n elseBlock = _elseBlock;\n }\n return {\n type: 'BlockStatement',\n path: buildPath(path),\n params: params || [],\n hash: hash || buildHash([]),\n program: defaultBlock || null,\n inverse: elseBlock || null,\n loc: buildLoc(loc || null),\n openStrip: openStrip || {\n open: false,\n close: false\n },\n inverseStrip: inverseStrip || {\n open: false,\n close: false\n },\n closeStrip: closeStrip || {\n open: false,\n close: false\n }\n };\n }\n function buildElementModifier(path, params, hash, loc) {\n return {\n type: 'ElementModifierStatement',\n path: buildPath(path),\n params: params || [],\n hash: hash || buildHash([]),\n loc: buildLoc(loc || null)\n };\n }\n function buildPartial(name, params, hash, indent, loc) {\n return {\n type: 'PartialStatement',\n name: name,\n params: params || [],\n hash: hash || buildHash([]),\n indent: indent || '',\n strip: {\n open: false,\n close: false\n },\n loc: buildLoc(loc || null)\n };\n }\n function buildComment(value, loc) {\n return {\n type: 'CommentStatement',\n value: value,\n loc: buildLoc(loc || null)\n };\n }\n function buildMustacheComment(value, loc) {\n return {\n type: 'MustacheCommentStatement',\n value: value,\n loc: buildLoc(loc || null)\n };\n }\n function buildConcat(parts, loc) {\n if (!(0, _util.isPresentArray)(parts)) {\n throw new Error(\"b.concat requires at least one part\");\n }\n return {\n type: 'ConcatStatement',\n parts: parts || [],\n loc: buildLoc(loc || null)\n };\n }\n\n // Nodes\n\n function buildElement(tag, options) {\n if (options === void 0) {\n options = {};\n }\n let {\n attrs,\n blockParams,\n modifiers,\n comments,\n children,\n loc\n } = options;\n let tagName;\n\n // this is used for backwards compat, prior to `selfClosing` being part of the ElementNode AST\n let selfClosing = false;\n if (typeof tag === 'object') {\n selfClosing = tag.selfClosing;\n tagName = tag.name;\n } else if (tag.slice(-1) === '/') {\n tagName = tag.slice(0, -1);\n selfClosing = true;\n } else {\n tagName = tag;\n }\n return {\n type: 'ElementNode',\n tag: tagName,\n selfClosing: selfClosing,\n attributes: attrs || [],\n blockParams: blockParams || [],\n modifiers: modifiers || [],\n comments: comments || [],\n children: children || [],\n loc: buildLoc(loc || null)\n };\n }\n function buildAttr(name, value, loc) {\n return {\n type: 'AttrNode',\n name: name,\n value: value,\n loc: buildLoc(loc || null)\n };\n }\n function buildText(chars, loc) {\n return {\n type: 'TextNode',\n chars: chars || '',\n loc: buildLoc(loc || null)\n };\n }\n\n // Expressions\n\n function buildSexpr(path, params, hash, loc) {\n return {\n type: 'SubExpression',\n path: buildPath(path),\n params: params || [],\n hash: hash || buildHash([]),\n loc: buildLoc(loc || null)\n };\n }\n function headToString$1(head) {\n switch (head.type) {\n case 'AtHead':\n return {\n original: head.name,\n parts: [head.name]\n };\n case 'ThisHead':\n return {\n original: \"this\",\n parts: []\n };\n case 'VarHead':\n return {\n original: head.name,\n parts: [head.name]\n };\n }\n }\n function buildHead(original, loc) {\n let [head, ...tail] = (0, _util.asPresentArray)(original.split('.'));\n let headNode;\n if (head === 'this') {\n headNode = {\n type: 'ThisHead',\n loc: buildLoc(loc || null)\n };\n } else if (head[0] === '@') {\n headNode = {\n type: 'AtHead',\n name: head,\n loc: buildLoc(loc || null)\n };\n } else {\n headNode = {\n type: 'VarHead',\n name: head,\n loc: buildLoc(loc || null)\n };\n }\n return {\n head: headNode,\n tail\n };\n }\n function buildThis(loc) {\n return {\n type: 'ThisHead',\n loc: buildLoc(loc || null)\n };\n }\n function buildAtName(name, loc) {\n // the `@` should be included so we have a complete source range\n (0, _util.assert)(name[0] === '@', \"call builders.at() with a string that starts with '@'\");\n return {\n type: 'AtHead',\n name,\n loc: buildLoc(loc || null)\n };\n }\n function buildVar(name, loc) {\n (0, _util.assert)(name !== 'this', \"You called builders.var() with 'this'. Call builders.this instead\");\n (0, _util.assert)(name[0] !== '@', \"You called builders.var() with '\" + name + \"'. Call builders.at('\" + name + \"') instead\");\n return {\n type: 'VarHead',\n name,\n loc: buildLoc(loc || null)\n };\n }\n function buildHeadFromString(head, loc) {\n if (head[0] === '@') {\n return buildAtName(head, loc);\n } else if (head === 'this') {\n return buildThis(loc);\n } else {\n return buildVar(head, loc);\n }\n }\n function buildNamedBlockName(name, loc) {\n return {\n type: 'NamedBlockName',\n name,\n loc: buildLoc(loc || null)\n };\n }\n function buildCleanPath(head, tail, loc) {\n let {\n original: originalHead,\n parts: headParts\n } = headToString$1(head);\n let parts = [...headParts, ...tail];\n let original = [...originalHead, ...parts].join('.');\n return new PathExpressionImplV1(original, head, tail, buildLoc(loc || null));\n }\n function buildPath(path, loc) {\n if (typeof path !== 'string') {\n if ('type' in path) {\n return path;\n } else {\n let {\n head,\n tail\n } = buildHead(path.head, SourceSpan.broken());\n (0, _util.assert)(tail.length === 0, \"builder.path({ head, tail }) should not be called with a head with dots in it\");\n let {\n original: originalHead\n } = headToString$1(head);\n return new PathExpressionImplV1([originalHead, ...tail].join('.'), head, tail, buildLoc(loc || null));\n }\n }\n let {\n head,\n tail\n } = buildHead(path, SourceSpan.broken());\n return new PathExpressionImplV1(path, head, tail, buildLoc(loc || null));\n }\n function buildLiteral(type, value, loc) {\n return {\n type,\n value,\n original: value,\n loc: buildLoc(loc || null)\n };\n }\n\n // Miscellaneous\n\n function buildHash(pairs, loc) {\n return {\n type: 'Hash',\n pairs: pairs || [],\n loc: buildLoc(loc || null)\n };\n }\n function buildPair(key, value, loc) {\n return {\n type: 'HashPair',\n key: key,\n value,\n loc: buildLoc(loc || null)\n };\n }\n function buildProgram(body, blockParams, loc) {\n return {\n type: 'Template',\n body: body || [],\n blockParams: blockParams || [],\n loc: buildLoc(loc || null)\n };\n }\n function buildBlockItself(body, blockParams, chained, loc) {\n if (chained === void 0) {\n chained = false;\n }\n return {\n type: 'Block',\n body: body || [],\n blockParams: blockParams || [],\n chained,\n loc: buildLoc(loc || null)\n };\n }\n function buildTemplate(body, blockParams, loc) {\n return {\n type: 'Template',\n body: body || [],\n blockParams: blockParams || [],\n loc: buildLoc(loc || null)\n };\n }\n function buildPosition(line, column) {\n return {\n line,\n column\n };\n }\n function buildLoc() {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n if (args.length === 1) {\n let loc = args[0];\n if (loc && typeof loc === 'object') {\n return SourceSpan.forHbsLoc(SOURCE(), loc);\n } else {\n return SourceSpan.forHbsLoc(SOURCE(), SYNTHETIC_LOCATION);\n }\n } else {\n let [startLine, startColumn, endLine, endColumn, _source] = args;\n let source = _source ? new Source('', _source) : SOURCE();\n return SourceSpan.forHbsLoc(source, {\n start: {\n line: startLine,\n column: startColumn\n },\n end: {\n line: endLine,\n column: endColumn\n }\n });\n }\n }\n var publicBuilder = _exports.builders = {\n mustache: buildMustache,\n block: buildBlock,\n partial: buildPartial,\n comment: buildComment,\n mustacheComment: buildMustacheComment,\n element: buildElement,\n elementModifier: buildElementModifier,\n attr: buildAttr,\n text: buildText,\n sexpr: buildSexpr,\n concat: buildConcat,\n hash: buildHash,\n pair: buildPair,\n literal: buildLiteral,\n program: buildProgram,\n blockItself: buildBlockItself,\n template: buildTemplate,\n loc: buildLoc,\n pos: buildPosition,\n path: buildPath,\n fullPath: buildCleanPath,\n head: buildHeadFromString,\n at: buildAtName,\n var: buildVar,\n this: buildThis,\n blockName: buildNamedBlockName,\n string: literal('StringLiteral'),\n boolean: literal('BooleanLiteral'),\n number: literal('NumberLiteral'),\n undefined() {\n return buildLiteral('UndefinedLiteral', undefined);\n },\n null() {\n return buildLiteral('NullLiteral', null);\n }\n };\n function literal(type) {\n return function (value, loc) {\n return buildLiteral(type, value, loc);\n };\n }\n class PathExpressionImplV1 {\n constructor(original, head, tail, loc) {\n this.type = 'PathExpression';\n this.parts = void 0;\n this.this = false;\n this.data = false;\n // Cache for the head value.\n this._head = undefined;\n this.original = original;\n this.loc = loc;\n let parts = tail.slice();\n if (head.type === 'ThisHead') {\n this.this = true;\n } else if (head.type === 'AtHead') {\n this.data = true;\n parts.unshift(head.name.slice(1));\n } else {\n parts.unshift(head.name);\n }\n this.parts = parts;\n }\n get head() {\n if (this._head) {\n return this._head;\n }\n let firstPart;\n if (this.this) {\n firstPart = 'this';\n } else if (this.data) {\n firstPart = \"@\" + (0, _util.getFirst)((0, _util.asPresentArray)(this.parts));\n } else {\n (0, _util.assertPresentArray)(this.parts);\n firstPart = (0, _util.getFirst)(this.parts);\n }\n let firstPartLoc = this.loc.collapse('start').sliceStartChars({\n chars: firstPart.length\n }).loc;\n return this._head = publicBuilder.head(firstPart, firstPartLoc);\n }\n get tail() {\n return this.this ? this.parts : this.parts.slice(1);\n }\n }\n const DEFAULT_STRIP = {\n close: false,\n open: false\n };\n\n /**\n * The Parser Builder differentiates from the public builder API by:\n *\n * 1. Offering fewer different ways to instantiate nodes\n * 2. Mandating source locations\n */\n class Builders {\n pos(line, column) {\n return {\n line,\n column\n };\n }\n blockItself(_ref13) {\n let {\n body = [],\n blockParams = [],\n chained = false,\n loc\n } = _ref13;\n return {\n type: 'Block',\n body: body,\n blockParams: blockParams,\n chained,\n loc\n };\n }\n template(_ref14) {\n let {\n body,\n blockParams,\n loc\n } = _ref14;\n return {\n type: 'Template',\n body: body || [],\n blockParams: blockParams || [],\n loc\n };\n }\n mustache(_ref15) {\n let {\n path,\n params,\n hash,\n trusting,\n loc,\n strip = DEFAULT_STRIP\n } = _ref15;\n return {\n type: 'MustacheStatement',\n path,\n params,\n hash,\n escaped: !trusting,\n trusting,\n loc,\n strip: strip || {\n open: false,\n close: false\n }\n };\n }\n block(_ref16) {\n let {\n path,\n params,\n hash,\n defaultBlock,\n elseBlock = null,\n loc,\n openStrip = DEFAULT_STRIP,\n inverseStrip = DEFAULT_STRIP,\n closeStrip = DEFAULT_STRIP\n } = _ref16;\n return {\n type: 'BlockStatement',\n path: path,\n params,\n hash,\n program: defaultBlock,\n inverse: elseBlock,\n loc: loc,\n openStrip: openStrip,\n inverseStrip: inverseStrip,\n closeStrip: closeStrip\n };\n }\n comment(value, loc) {\n return {\n type: 'CommentStatement',\n value: value,\n loc\n };\n }\n mustacheComment(value, loc) {\n return {\n type: 'MustacheCommentStatement',\n value: value,\n loc\n };\n }\n concat(parts, loc) {\n return {\n type: 'ConcatStatement',\n parts,\n loc\n };\n }\n element(_ref17) {\n let {\n tag,\n selfClosing,\n attrs,\n blockParams,\n modifiers,\n comments,\n children,\n loc\n } = _ref17;\n return {\n type: 'ElementNode',\n tag,\n selfClosing: selfClosing,\n attributes: attrs || [],\n blockParams: blockParams || [],\n modifiers: modifiers || [],\n comments: comments || [],\n children: children || [],\n loc\n };\n }\n elementModifier(_ref18) {\n let {\n path,\n params,\n hash,\n loc\n } = _ref18;\n return {\n type: 'ElementModifierStatement',\n path,\n params,\n hash,\n loc\n };\n }\n attr(_ref19) {\n let {\n name,\n value,\n loc\n } = _ref19;\n return {\n type: 'AttrNode',\n name: name,\n value: value,\n loc\n };\n }\n text(_ref20) {\n let {\n chars,\n loc\n } = _ref20;\n return {\n type: 'TextNode',\n chars,\n loc\n };\n }\n sexpr(_ref21) {\n let {\n path,\n params,\n hash,\n loc\n } = _ref21;\n return {\n type: 'SubExpression',\n path,\n params,\n hash,\n loc\n };\n }\n path(_ref22) {\n let {\n head,\n tail,\n loc\n } = _ref22;\n let {\n original: originalHead\n } = headToString(head);\n let original = [...originalHead, ...tail].join('.');\n return new PathExpressionImplV1(original, head, tail, loc);\n }\n head(head, loc) {\n if (head[0] === '@') {\n return this.atName(head, loc);\n } else if (head === 'this') {\n return this.this(loc);\n } else {\n return this.var(head, loc);\n }\n }\n this(loc) {\n return {\n type: 'ThisHead',\n loc\n };\n }\n atName(name, loc) {\n // the `@` should be included so we have a complete source range\n (0, _util.assert)(name[0] === '@', \"call builders.at() with a string that starts with '@'\");\n return {\n type: 'AtHead',\n name,\n loc\n };\n }\n var(name, loc) {\n (0, _util.assert)(name !== 'this', \"You called builders.var() with 'this'. Call builders.this instead\");\n (0, _util.assert)(name[0] !== '@', \"You called builders.var() with '\" + name + \"'. Call builders.at('\" + name + \"') instead\");\n return {\n type: 'VarHead',\n name,\n loc\n };\n }\n hash(pairs, loc) {\n return {\n type: 'Hash',\n pairs: pairs || [],\n loc\n };\n }\n pair(_ref23) {\n let {\n key,\n value,\n loc\n } = _ref23;\n return {\n type: 'HashPair',\n key: key,\n value,\n loc\n };\n }\n literal(_ref24) {\n let {\n type,\n value,\n loc\n } = _ref24;\n return {\n type,\n value,\n original: value,\n loc\n };\n }\n undefined() {\n return this.literal({\n type: 'UndefinedLiteral',\n value: undefined\n });\n }\n null() {\n return this.literal({\n type: 'NullLiteral',\n value: null\n });\n }\n string(value, loc) {\n return this.literal({\n type: 'StringLiteral',\n value,\n loc\n });\n }\n boolean(value, loc) {\n return this.literal({\n type: 'BooleanLiteral',\n value,\n loc\n });\n }\n number(value, loc) {\n return this.literal({\n type: 'NumberLiteral',\n value,\n loc\n });\n }\n }\n\n // Nodes\n\n // Expressions\n\n function headToString(head) {\n switch (head.type) {\n case 'AtHead':\n return {\n original: head.name,\n parts: [head.name]\n };\n case 'ThisHead':\n return {\n original: \"this\",\n parts: []\n };\n case 'VarHead':\n return {\n original: head.name,\n parts: [head.name]\n };\n }\n }\n var b = new Builders();\n class Parser {\n constructor(source, entityParser, mode) {\n if (entityParser === void 0) {\n entityParser = new _simpleHtmlTokenizer.EntityParser(_simpleHtmlTokenizer.HTML5NamedCharRefs);\n }\n if (mode === void 0) {\n mode = 'precompile';\n }\n this.elementStack = [];\n this.lines = void 0;\n this.source = void 0;\n this.currentAttribute = null;\n this.currentNode = null;\n this.tokenizer = void 0;\n this.source = source;\n this.lines = source.source.split(/\\r\\n?|\\n/u);\n this.tokenizer = new _simpleHtmlTokenizer.EventedTokenizer(this, entityParser, mode);\n }\n offset() {\n let {\n line,\n column\n } = this.tokenizer;\n return this.source.offsetFor(line, column);\n }\n pos(_ref25) {\n let {\n line,\n column\n } = _ref25;\n return this.source.offsetFor(line, column);\n }\n finish(node) {\n return (0, _util.assign)({}, node, {\n loc: node.loc.until(this.offset())\n });\n\n // node.loc = node.loc.withEnd(end);\n }\n\n get currentAttr() {\n return (0, _util.expect)(this.currentAttribute, 'expected attribute');\n }\n get currentTag() {\n let node = this.currentNode;\n (0, _util.assert)(node && (node.type === 'StartTag' || node.type === 'EndTag'), 'expected tag');\n return node;\n }\n get currentStartTag() {\n let node = this.currentNode;\n (0, _util.assert)(node && node.type === 'StartTag', 'expected start tag');\n return node;\n }\n get currentEndTag() {\n let node = this.currentNode;\n (0, _util.assert)(node && node.type === 'EndTag', 'expected end tag');\n return node;\n }\n get currentComment() {\n let node = this.currentNode;\n (0, _util.assert)(node && node.type === 'CommentStatement', 'expected a comment');\n return node;\n }\n get currentData() {\n let node = this.currentNode;\n (0, _util.assert)(node && node.type === 'TextNode', 'expected a text node');\n return node;\n }\n acceptTemplate(node) {\n return this[node.type](node);\n }\n acceptNode(node) {\n return this[node.type](node);\n }\n currentElement() {\n return (0, _util.getLast)((0, _util.asPresentArray)(this.elementStack));\n }\n sourceForNode(node, endNode) {\n let firstLine = node.loc.start.line - 1;\n let currentLine = firstLine - 1;\n let firstColumn = node.loc.start.column;\n let string = [];\n let line;\n let lastLine;\n let lastColumn;\n if (endNode) {\n lastLine = endNode.loc.end.line - 1;\n lastColumn = endNode.loc.end.column;\n } else {\n lastLine = node.loc.end.line - 1;\n lastColumn = node.loc.end.column;\n }\n while (currentLine < lastLine) {\n currentLine++;\n line = (0, _util.unwrap)(this.lines[currentLine]);\n if (currentLine === firstLine) {\n if (firstLine === lastLine) {\n string.push(line.slice(firstColumn, lastColumn));\n } else {\n string.push(line.slice(firstColumn));\n }\n } else if (currentLine === lastLine) {\n string.push(line.slice(0, lastColumn));\n } else {\n string.push(line);\n }\n }\n return string.join('\\n');\n }\n }\n const BEFORE_ATTRIBUTE_NAME = 'beforeAttributeName';\n const ATTRIBUTE_VALUE_UNQUOTED = 'attributeValueUnquoted';\n class HandlebarsNodeVisitors extends Parser {\n get isTopLevel() {\n return this.elementStack.length === 0;\n }\n Program(program) {\n const body = [];\n let node;\n if (this.isTopLevel) {\n node = b.template({\n body,\n blockParams: program.blockParams,\n loc: this.source.spanFor(program.loc)\n });\n } else {\n node = b.blockItself({\n body,\n blockParams: program.blockParams,\n chained: program.chained,\n loc: this.source.spanFor(program.loc)\n });\n }\n let i,\n l = program.body.length;\n this.elementStack.push(node);\n if (l === 0) {\n return this.elementStack.pop();\n }\n for (i = 0; i < l; i++) {\n this.acceptNode((0, _util.unwrap)(program.body[i]));\n }\n\n // Ensure that that the element stack is balanced properly.\n const poppedNode = this.elementStack.pop();\n if (poppedNode !== node) {\n const elementNode = poppedNode;\n throw generateSyntaxError(\"Unclosed element `\" + elementNode.tag + \"`\", elementNode.loc);\n }\n return node;\n }\n BlockStatement(block) {\n if (this.tokenizer.state === 'comment') {\n this.appendToCommentData(this.sourceForNode(block));\n return;\n }\n if (this.tokenizer.state !== 'data' && this.tokenizer.state !== 'beforeData') {\n throw generateSyntaxError('A block may only be used inside an HTML element or another block.', this.source.spanFor(block.loc));\n }\n const {\n path,\n params,\n hash\n } = acceptCallNodes(this, block);\n\n // These are bugs in Handlebars upstream\n if (!block.program.loc) {\n block.program.loc = NON_EXISTENT_LOCATION;\n }\n if (block.inverse && !block.inverse.loc) {\n block.inverse.loc = NON_EXISTENT_LOCATION;\n }\n const program = this.Program(block.program);\n const inverse = block.inverse ? this.Program(block.inverse) : null;\n const node = b.block({\n path,\n params,\n hash,\n defaultBlock: program,\n elseBlock: inverse,\n loc: this.source.spanFor(block.loc),\n openStrip: block.openStrip,\n inverseStrip: block.inverseStrip,\n closeStrip: block.closeStrip\n });\n const parentProgram = this.currentElement();\n appendChild(parentProgram, node);\n }\n MustacheStatement(rawMustache) {\n const {\n tokenizer\n } = this;\n if (tokenizer.state === 'comment') {\n this.appendToCommentData(this.sourceForNode(rawMustache));\n return;\n }\n let mustache;\n const {\n escaped,\n loc,\n strip\n } = rawMustache;\n if (isHBSLiteral(rawMustache.path)) {\n mustache = b.mustache({\n path: this.acceptNode(rawMustache.path),\n params: [],\n hash: b.hash([], this.source.spanFor(rawMustache.path.loc).collapse('end')),\n trusting: !escaped,\n loc: this.source.spanFor(loc),\n strip\n });\n } else {\n const {\n path,\n params,\n hash\n } = acceptCallNodes(this, rawMustache);\n mustache = b.mustache({\n path,\n params,\n hash,\n trusting: !escaped,\n loc: this.source.spanFor(loc),\n strip\n });\n }\n switch (tokenizer.state) {\n // Tag helpers\n case 'tagOpen':\n case 'tagName':\n throw generateSyntaxError(\"Cannot use mustaches in an elements tagname\", mustache.loc);\n case 'beforeAttributeName':\n addElementModifier(this.currentStartTag, mustache);\n break;\n case 'attributeName':\n case 'afterAttributeName':\n this.beginAttributeValue(false);\n this.finishAttributeValue();\n addElementModifier(this.currentStartTag, mustache);\n tokenizer.transitionTo(BEFORE_ATTRIBUTE_NAME);\n break;\n case 'afterAttributeValueQuoted':\n addElementModifier(this.currentStartTag, mustache);\n tokenizer.transitionTo(BEFORE_ATTRIBUTE_NAME);\n break;\n\n // Attribute values\n case 'beforeAttributeValue':\n this.beginAttributeValue(false);\n this.appendDynamicAttributeValuePart(mustache);\n tokenizer.transitionTo(ATTRIBUTE_VALUE_UNQUOTED);\n break;\n case 'attributeValueDoubleQuoted':\n case 'attributeValueSingleQuoted':\n case 'attributeValueUnquoted':\n this.appendDynamicAttributeValuePart(mustache);\n break;\n\n // TODO: Only append child when the tokenizer state makes\n // sense to do so, otherwise throw an error.\n default:\n appendChild(this.currentElement(), mustache);\n }\n return mustache;\n }\n appendDynamicAttributeValuePart(part) {\n this.finalizeTextPart();\n const attr = this.currentAttr;\n attr.isDynamic = true;\n attr.parts.push(part);\n }\n finalizeTextPart() {\n const attr = this.currentAttr;\n const text = attr.currentPart;\n if (text !== null) {\n this.currentAttr.parts.push(text);\n this.startTextPart();\n }\n }\n startTextPart() {\n this.currentAttr.currentPart = null;\n }\n ContentStatement(content) {\n updateTokenizerLocation(this.tokenizer, content);\n this.tokenizer.tokenizePart(content.value);\n this.tokenizer.flushData();\n }\n CommentStatement(rawComment) {\n const {\n tokenizer\n } = this;\n if (tokenizer.state === 'comment') {\n this.appendToCommentData(this.sourceForNode(rawComment));\n return null;\n }\n const {\n value,\n loc\n } = rawComment;\n const comment = b.mustacheComment(value, this.source.spanFor(loc));\n switch (tokenizer.state) {\n case 'beforeAttributeName':\n case 'afterAttributeName':\n this.currentStartTag.comments.push(comment);\n break;\n case 'beforeData':\n case 'data':\n appendChild(this.currentElement(), comment);\n break;\n default:\n throw generateSyntaxError(\"Using a Handlebars comment when in the `\" + tokenizer['state'] + \"` state is not supported\", this.source.spanFor(rawComment.loc));\n }\n return comment;\n }\n PartialStatement(partial) {\n throw generateSyntaxError(\"Handlebars partials are not supported\", this.source.spanFor(partial.loc));\n }\n PartialBlockStatement(partialBlock) {\n throw generateSyntaxError(\"Handlebars partial blocks are not supported\", this.source.spanFor(partialBlock.loc));\n }\n Decorator(decorator) {\n throw generateSyntaxError(\"Handlebars decorators are not supported\", this.source.spanFor(decorator.loc));\n }\n DecoratorBlock(decoratorBlock) {\n throw generateSyntaxError(\"Handlebars decorator blocks are not supported\", this.source.spanFor(decoratorBlock.loc));\n }\n SubExpression(sexpr) {\n const {\n path,\n params,\n hash\n } = acceptCallNodes(this, sexpr);\n return b.sexpr({\n path,\n params,\n hash,\n loc: this.source.spanFor(sexpr.loc)\n });\n }\n PathExpression(path) {\n const {\n original\n } = path;\n let parts;\n if (original.indexOf('/') !== -1) {\n if (original.slice(0, 2) === './') {\n throw generateSyntaxError(\"Using \\\"./\\\" is not supported in Glimmer and unnecessary\", this.source.spanFor(path.loc));\n }\n if (original.slice(0, 3) === '../') {\n throw generateSyntaxError(\"Changing context using \\\"../\\\" is not supported in Glimmer\", this.source.spanFor(path.loc));\n }\n if (original.indexOf('.') !== -1) {\n throw generateSyntaxError(\"Mixing '.' and '/' in paths is not supported in Glimmer; use only '.' to separate property paths\", this.source.spanFor(path.loc));\n }\n parts = [path.parts.join('/')];\n } else if (original === '.') {\n throw generateSyntaxError(\"'.' is not a supported path in Glimmer; check for a path with a trailing '.'\", this.source.spanFor(path.loc));\n } else {\n parts = path.parts;\n }\n let thisHead = false;\n\n // This is to fix a bug in the Handlebars AST where the path expressions in\n // `{{this.foo}}` (and similarly `{{foo-bar this.foo named=this.foo}}` etc)\n // are simply turned into `{{foo}}`. The fix is to push it back onto the\n // parts array and let the runtime see the difference. However, we cannot\n // simply use the string `this` as it means literally the property called\n // \"this\" in the current context (it can be expressed in the syntax as\n // `{{[this]}}`, where the square bracket are generally for this kind of\n // escaping – such as `{{foo.[\"bar.baz\"]}}` would mean lookup a property\n // named literally \"bar.baz\" on `this.foo`). By convention, we use `null`\n // for this purpose.\n if (/^this(?:\\..+)?$/u.test(original)) {\n thisHead = true;\n }\n let pathHead;\n if (thisHead) {\n pathHead = {\n type: 'ThisHead',\n loc: {\n start: path.loc.start,\n end: {\n line: path.loc.start.line,\n column: path.loc.start.column + 4\n }\n }\n };\n } else if (path.data) {\n const head = parts.shift();\n if (head === undefined) {\n throw generateSyntaxError(\"Attempted to parse a path expression, but it was not valid. Paths beginning with @ must start with a-z.\", this.source.spanFor(path.loc));\n }\n pathHead = {\n type: 'AtHead',\n name: \"@\" + head,\n loc: {\n start: path.loc.start,\n end: {\n line: path.loc.start.line,\n column: path.loc.start.column + head.length + 1\n }\n }\n };\n } else {\n const head = parts.shift();\n if (head === undefined) {\n throw generateSyntaxError(\"Attempted to parse a path expression, but it was not valid. Paths must start with a-z or A-Z.\", this.source.spanFor(path.loc));\n }\n pathHead = {\n type: 'VarHead',\n name: head,\n loc: {\n start: path.loc.start,\n end: {\n line: path.loc.start.line,\n column: path.loc.start.column + head.length\n }\n }\n };\n }\n return new PathExpressionImplV1(path.original, pathHead, parts, this.source.spanFor(path.loc));\n }\n Hash(hash) {\n const pairs = hash.pairs.map(pair => b.pair({\n key: pair.key,\n value: this.acceptNode(pair.value),\n loc: this.source.spanFor(pair.loc)\n }));\n return b.hash(pairs, this.source.spanFor(hash.loc));\n }\n StringLiteral(string) {\n return b.literal({\n type: 'StringLiteral',\n value: string.value,\n loc: string.loc\n });\n }\n BooleanLiteral(boolean) {\n return b.literal({\n type: 'BooleanLiteral',\n value: boolean.value,\n loc: boolean.loc\n });\n }\n NumberLiteral(number) {\n return b.literal({\n type: 'NumberLiteral',\n value: number.value,\n loc: number.loc\n });\n }\n UndefinedLiteral(undef) {\n return b.literal({\n type: 'UndefinedLiteral',\n value: undefined,\n loc: undef.loc\n });\n }\n NullLiteral(nul) {\n return b.literal({\n type: 'NullLiteral',\n value: null,\n loc: nul.loc\n });\n }\n }\n function calculateRightStrippedOffsets(original, value) {\n if (value === '') {\n // if it is empty, just return the count of newlines\n // in original\n return {\n lines: original.split('\\n').length - 1,\n columns: 0\n };\n }\n\n // otherwise, return the number of newlines prior to\n // `value`\n const [difference] = original.split(value);\n const lines = difference.split(/\\n/u);\n const lineCount = lines.length - 1;\n return {\n lines: lineCount,\n columns: (0, _util.unwrap)(lines[lineCount]).length\n };\n }\n function updateTokenizerLocation(tokenizer, content) {\n let line = content.loc.start.line;\n let column = content.loc.start.column;\n const offsets = calculateRightStrippedOffsets(content.original, content.value);\n line = line + offsets.lines;\n if (offsets.lines) {\n column = offsets.columns;\n } else {\n column = column + offsets.columns;\n }\n tokenizer.line = line;\n tokenizer.column = column;\n }\n function acceptCallNodes(compiler, node) {\n if (node.path.type.endsWith('Literal')) {\n const path = node.path;\n let value = '';\n if (path.type === 'BooleanLiteral') {\n value = path.original.toString();\n } else if (path.type === 'StringLiteral') {\n value = \"\\\"\" + path.original + \"\\\"\";\n } else if (path.type === 'NullLiteral') {\n value = 'null';\n } else if (path.type === 'NumberLiteral') {\n value = path.value.toString();\n } else {\n value = 'undefined';\n }\n throw generateSyntaxError(path.type + \" \\\"\" + (path.type === 'StringLiteral' ? path.original : value) + \"\\\" cannot be called as a sub-expression, replace (\" + value + \") with \" + value, compiler.source.spanFor(path.loc));\n }\n const path = node.path.type === 'PathExpression' ? compiler.PathExpression(node.path) : compiler.SubExpression(node.path);\n const params = node.params ? node.params.map(e => compiler.acceptNode(e)) : [];\n\n // if there is no hash, position it as a collapsed node immediately after the last param (or the\n // path, if there are also no params)\n const end = (0, _util.isPresentArray)(params) ? (0, _util.getLast)(params).loc : path.loc;\n const hash = node.hash ? compiler.Hash(node.hash) : {\n type: 'Hash',\n pairs: [],\n loc: compiler.source.spanFor(end).collapse('end')\n };\n return {\n path,\n params,\n hash\n };\n }\n function addElementModifier(element, mustache) {\n const {\n path,\n params,\n hash,\n loc\n } = mustache;\n if (isHBSLiteral(path)) {\n const modifier = \"{{\" + printLiteral(path) + \"}}\";\n const tag = \"<\" + element.name + \" ... \" + modifier + \" ...\";\n throw generateSyntaxError(\"In \" + tag + \", \" + modifier + \" is not a valid modifier\", mustache.loc);\n }\n const modifier = b.elementModifier({\n path,\n params,\n hash,\n loc\n });\n element.modifiers.push(modifier);\n }\n class TokenizerEventHandlers extends HandlebarsNodeVisitors {\n constructor() {\n super(...arguments);\n this.tagOpenLine = 0;\n this.tagOpenColumn = 0;\n }\n reset() {\n this.currentNode = null;\n }\n\n // Comment\n\n beginComment() {\n this.currentNode = b.comment('', this.source.offsetFor(this.tagOpenLine, this.tagOpenColumn));\n }\n appendToCommentData(char) {\n this.currentComment.value += char;\n }\n finishComment() {\n appendChild(this.currentElement(), this.finish(this.currentComment));\n }\n\n // Data\n\n beginData() {\n this.currentNode = b.text({\n chars: '',\n loc: this.offset().collapsed()\n });\n }\n appendToData(char) {\n this.currentData.chars += char;\n }\n finishData() {\n this.currentData.loc = this.currentData.loc.withEnd(this.offset());\n appendChild(this.currentElement(), this.currentData);\n }\n\n // Tags - basic\n\n tagOpen() {\n this.tagOpenLine = this.tokenizer.line;\n this.tagOpenColumn = this.tokenizer.column;\n }\n beginStartTag() {\n this.currentNode = {\n type: 'StartTag',\n name: '',\n attributes: [],\n modifiers: [],\n comments: [],\n selfClosing: false,\n loc: this.source.offsetFor(this.tagOpenLine, this.tagOpenColumn)\n };\n }\n beginEndTag() {\n this.currentNode = {\n type: 'EndTag',\n name: '',\n attributes: [],\n modifiers: [],\n comments: [],\n selfClosing: false,\n loc: this.source.offsetFor(this.tagOpenLine, this.tagOpenColumn)\n };\n }\n finishTag() {\n let tag = this.finish(this.currentTag);\n if (tag.type === 'StartTag') {\n this.finishStartTag();\n if (tag.name === ':') {\n throw generateSyntaxError('Invalid named block named detected, you may have created a named block without a name, or you may have began your name with a number. Named blocks must have names that are at least one character long, and begin with a lower case letter', this.source.spanFor({\n start: this.currentTag.loc.toJSON(),\n end: this.offset().toJSON()\n }));\n }\n if (voidMap.has(tag.name) || tag.selfClosing) {\n this.finishEndTag(true);\n }\n } else if (tag.type === 'EndTag') {\n this.finishEndTag(false);\n }\n }\n finishStartTag() {\n let {\n name,\n attributes: attrs,\n modifiers,\n comments,\n selfClosing,\n loc\n } = this.finish(this.currentStartTag);\n let element = b.element({\n tag: name,\n selfClosing,\n attrs,\n modifiers,\n comments,\n children: [],\n blockParams: [],\n loc\n });\n this.elementStack.push(element);\n }\n finishEndTag(isVoid) {\n let tag = this.finish(this.currentTag);\n let element = this.elementStack.pop();\n this.validateEndTag(tag, element, isVoid);\n let parent = this.currentElement();\n element.loc = element.loc.withEnd(this.offset());\n parseElementBlockParams(element);\n appendChild(parent, element);\n }\n markTagAsSelfClosing() {\n this.currentTag.selfClosing = true;\n }\n\n // Tags - name\n\n appendToTagName(char) {\n this.currentTag.name += char;\n }\n\n // Tags - attributes\n\n beginAttribute() {\n let offset = this.offset();\n this.currentAttribute = {\n name: '',\n parts: [],\n currentPart: null,\n isQuoted: false,\n isDynamic: false,\n start: offset,\n valueSpan: offset.collapsed()\n };\n }\n appendToAttributeName(char) {\n this.currentAttr.name += char;\n }\n beginAttributeValue(isQuoted) {\n this.currentAttr.isQuoted = isQuoted;\n this.startTextPart();\n this.currentAttr.valueSpan = this.offset().collapsed();\n }\n appendToAttributeValue(char) {\n let parts = this.currentAttr.parts;\n let lastPart = parts[parts.length - 1];\n let current = this.currentAttr.currentPart;\n if (current) {\n current.chars += char;\n\n // update end location for each added char\n current.loc = current.loc.withEnd(this.offset());\n } else {\n // initially assume the text node is a single char\n let loc = this.offset();\n\n // the tokenizer line/column have already been advanced, correct location info\n if (char === '\\n') {\n loc = lastPart ? lastPart.loc.getEnd() : this.currentAttr.valueSpan.getStart();\n } else {\n loc = loc.move(-1);\n }\n this.currentAttr.currentPart = b.text({\n chars: char,\n loc: loc.collapsed()\n });\n }\n }\n finishAttributeValue() {\n this.finalizeTextPart();\n let tag = this.currentTag;\n let tokenizerPos = this.offset();\n if (tag.type === 'EndTag') {\n throw generateSyntaxError(\"Invalid end tag: closing tag must not have attributes\", this.source.spanFor({\n start: tag.loc.toJSON(),\n end: tokenizerPos.toJSON()\n }));\n }\n let {\n name,\n parts,\n start,\n isQuoted,\n isDynamic,\n valueSpan\n } = this.currentAttr;\n let value = this.assembleAttributeValue(parts, isQuoted, isDynamic, start.until(tokenizerPos));\n value.loc = valueSpan.withEnd(tokenizerPos);\n let attribute = b.attr({\n name,\n value,\n loc: start.until(tokenizerPos)\n });\n this.currentStartTag.attributes.push(attribute);\n }\n reportSyntaxError(message) {\n throw generateSyntaxError(message, this.offset().collapsed());\n }\n assembleConcatenatedValue(parts) {\n for (const part of parts) {\n if (part.type !== 'MustacheStatement' && part.type !== 'TextNode') {\n throw generateSyntaxError(\"Unsupported node in quoted attribute value: \" + part['type'], part.loc);\n }\n }\n (0, _util.assertPresentArray)(parts, \"the concatenation parts of an element should not be empty\");\n let first = (0, _util.getFirst)(parts);\n let last = (0, _util.getLast)(parts);\n return b.concat(parts, this.source.spanFor(first.loc).extend(this.source.spanFor(last.loc)));\n }\n validateEndTag(tag, element, selfClosing) {\n if (voidMap.has(tag.name) && !selfClosing) {\n // EngTag is also called by StartTag for void and self-closing tags (i.e.\n // <input> or <br />, so we need to check for that here. Otherwise, we would\n // throw an error for those cases.\n throw generateSyntaxError(\"<\" + tag.name + \"> elements do not need end tags. You should remove it\", tag.loc);\n } else if (element.tag === undefined) {\n throw generateSyntaxError(\"Closing tag </\" + tag.name + \"> without an open tag\", tag.loc);\n } else if (element.tag !== tag.name) {\n throw generateSyntaxError(\"Closing tag </\" + tag.name + \"> did not match last open tag <\" + element.tag + \"> (on line \" + element.loc.startPosition.line + \")\", tag.loc);\n }\n }\n assembleAttributeValue(parts, isQuoted, isDynamic, span) {\n if (isDynamic) {\n if (isQuoted) {\n return this.assembleConcatenatedValue(parts);\n } else {\n (0, _util.assertPresentArray)(parts);\n const [head, a] = parts;\n if (a === undefined || a.type === 'TextNode' && a.chars === '/') {\n return head;\n } else {\n throw generateSyntaxError(\"An unquoted attribute value must be a string or a mustache, \" + \"preceded by whitespace or a '=' character, and \" + \"followed by whitespace, a '>' character, or '/>'\", span);\n }\n }\n } else if ((0, _util.isPresentArray)(parts)) {\n return parts[0];\n } else {\n return b.text({\n chars: '',\n loc: span\n });\n }\n }\n }\n\n /**\n ASTPlugins can make changes to the Glimmer template AST before\n compilation begins.\n */\n\n const syntax = {\n parse: preprocess,\n builders: publicBuilder,\n print: build,\n traverse,\n Walker\n };\n class CodemodEntityParser extends _simpleHtmlTokenizer.EntityParser {\n // match upstream types, but never match an entity\n constructor() {\n super({});\n }\n parse() {\n return undefined;\n }\n }\n function preprocess(input, options) {\n if (options === void 0) {\n options = {};\n }\n let mode = options.mode || 'precompile';\n let source;\n let ast;\n if (typeof input === 'string') {\n var _options$meta2;\n source = new Source(input, (_options$meta2 = options.meta) == null ? void 0 : _options$meta2.moduleName);\n if (mode === 'codemod') {\n ast = (0, _parser.parseWithoutProcessing)(input, options.parseOptions);\n } else {\n ast = (0, _parser.parse)(input, options.parseOptions);\n }\n } else if (input instanceof Source) {\n source = input;\n if (mode === 'codemod') {\n ast = (0, _parser.parseWithoutProcessing)(input.source, options.parseOptions);\n } else {\n ast = (0, _parser.parse)(input.source, options.parseOptions);\n }\n } else {\n var _options$meta3;\n source = new Source('', (_options$meta3 = options.meta) == null ? void 0 : _options$meta3.moduleName);\n ast = input;\n }\n let entityParser = undefined;\n if (mode === 'codemod') {\n entityParser = new CodemodEntityParser();\n }\n let offsets = SourceSpan.forCharPositions(source, 0, source.source.length);\n ast.loc = {\n source: '(program)',\n start: offsets.startPosition,\n end: offsets.endPosition\n };\n let program = new TokenizerEventHandlers(source, entityParser, mode).acceptTemplate(ast);\n if (options.strictMode) {\n var _options$locals;\n program.blockParams = (_options$locals = options.locals) != null ? _options$locals : [];\n }\n if (options && options.plugins && options.plugins.ast) {\n for (const transform of options.plugins.ast) {\n let env = (0, _util.assign)({}, options, {\n syntax\n }, {\n plugins: undefined\n });\n let pluginResult = transform(env);\n traverse(program, pluginResult.visitor);\n }\n }\n return program;\n }\n\n /**\n * Gets the correct Token from the Node based on it's type\n */\n function tokensFromType(node, scopedTokens, options) {\n if (node.type === 'PathExpression') {\n if (node.head.type === 'AtHead' || node.head.type === 'ThisHead') {\n return;\n }\n const possbleToken = node.head.name;\n if (scopedTokens.indexOf(possbleToken) === -1) {\n return possbleToken;\n }\n } else if (node.type === 'ElementNode') {\n const {\n tag\n } = node;\n const char = tag.charAt(0);\n if (char === ':' || char === '@') {\n return;\n }\n if (!options.includeHtmlElements && tag.indexOf('.') === -1 && tag.toLowerCase() === tag) {\n return;\n }\n if (tag.substr(0, 5) === 'this.') {\n return;\n }\n\n // the tag may be from a yielded object\n // example:\n // <x.button>\n // An ElementNode does not parse the \"tag\" in to a PathExpression\n // so we have to split on `.`, just like how `this` presence is checked.\n if (tag.includes('.')) {\n let [potentialLocal] = tag.split('.');\n if (scopedTokens.includes(potentialLocal)) return;\n }\n if (scopedTokens.includes(tag)) return;\n return tag;\n }\n }\n\n /**\n * Adds tokens to the tokensSet based on their node.type\n */\n function addTokens(tokensSet, node, scopedTokens, options) {\n const maybeTokens = tokensFromType(node, scopedTokens, options);\n (Array.isArray(maybeTokens) ? maybeTokens : [maybeTokens]).forEach(maybeToken => {\n if (maybeToken !== undefined && maybeToken[0] !== '@') {\n const maybeTokenFirstSegment = maybeToken.split('.')[0];\n if (!scopedTokens.includes(maybeTokenFirstSegment)) {\n tokensSet.add(maybeToken.split('.')[0]);\n }\n }\n });\n }\n\n /**\n * Parses and traverses a given handlebars html template to extract all template locals\n * referenced that could possible come from the parent scope. Can exclude known keywords\n * optionally.\n */\n function getTemplateLocals(html, options) {\n var _options;\n if (options === void 0) {\n options = {\n includeHtmlElements: false,\n includeKeywords: false\n };\n }\n const ast = preprocess(html);\n const tokensSet = new Set();\n const scopedTokens = [];\n traverse(ast, {\n Block: {\n enter(_ref26) {\n let {\n blockParams\n } = _ref26;\n blockParams.forEach(param => {\n scopedTokens.push(param);\n });\n },\n exit(_ref27) {\n let {\n blockParams\n } = _ref27;\n blockParams.forEach(() => {\n scopedTokens.pop();\n });\n }\n },\n ElementNode: {\n enter(node) {\n node.blockParams.forEach(param => {\n scopedTokens.push(param);\n });\n addTokens(tokensSet, node, scopedTokens, options);\n },\n exit(_ref28) {\n let {\n blockParams\n } = _ref28;\n blockParams.forEach(() => {\n scopedTokens.pop();\n });\n }\n },\n PathExpression(node) {\n addTokens(tokensSet, node, scopedTokens, options);\n }\n });\n let tokens = [];\n tokensSet.forEach(s => tokens.push(s));\n if (!((_options = options) != null && _options.includeKeywords)) {\n tokens = tokens.filter(token => !isKeyword(token));\n }\n return tokens;\n }\n\n /**\n * This is a convenience function for creating ASTv2 nodes, with an optional name and the node's\n * options.\n *\n * ```ts\n * export class HtmlText extends node('HtmlText').fields<{ chars: string }>() {}\n * ```\n *\n * This creates a new ASTv2 node with the name `'HtmlText'` and one field `chars: string` (in\n * addition to a `loc: SourceOffsets` field, which all nodes have).\n *\n * ```ts\n * export class Args extends node().fields<{\n * positional: PositionalArguments;\n * named: NamedArguments\n * }>() {}\n * ```\n *\n * This creates a new un-named ASTv2 node with two fields (`positional: Positional` and `named:\n * Named`, in addition to the generic `loc: SourceOffsets` field).\n *\n * Once you create a node using `node`, it is instantiated with all of its fields (including `loc`):\n *\n * ```ts\n * new HtmlText({ loc: offsets, chars: someString });\n * ```\n */\n\n function node(name) {\n if (name !== undefined) {\n const type = name;\n return {\n fields() {\n return class {\n constructor(fields) {\n // SAFETY: initialized via `assign` in the constructor.\n this.type = void 0;\n this.type = type;\n (0, _util.assign)(this, fields);\n }\n };\n }\n };\n } else {\n return {\n fields() {\n return class {\n // SAFETY: initialized via `assign` in the constructor.\n\n constructor(fields) {\n (0, _util.assign)(this, fields);\n }\n };\n }\n };\n }\n }\n\n /**\n * Corresponds to syntaxes with positional and named arguments:\n *\n * - SubExpression\n * - Invoking Append\n * - Invoking attributes\n * - InvokeBlock\n *\n * If `Args` is empty, the `SourceOffsets` for this node should be the collapsed position\n * immediately after the parent call node's `callee`.\n */\n class Args extends node().fields() {\n static empty(loc) {\n return new Args({\n loc,\n positional: PositionalArguments.empty(loc),\n named: NamedArguments.empty(loc)\n });\n }\n static named(named) {\n return new Args({\n loc: named.loc,\n positional: PositionalArguments.empty(named.loc.collapse('end')),\n named\n });\n }\n nth(offset) {\n return this.positional.nth(offset);\n }\n get(name) {\n return this.named.get(name);\n }\n isEmpty() {\n return this.positional.isEmpty() && this.named.isEmpty();\n }\n }\n\n /**\n * Corresponds to positional arguments.\n *\n * If `PositionalArguments` is empty, the `SourceOffsets` for this node should be the collapsed\n * position immediately after the parent call node's `callee`.\n */\n class PositionalArguments extends node().fields() {\n static empty(loc) {\n return new PositionalArguments({\n loc,\n exprs: []\n });\n }\n get size() {\n return this.exprs.length;\n }\n nth(offset) {\n return this.exprs[offset] || null;\n }\n isEmpty() {\n return this.exprs.length === 0;\n }\n }\n\n /**\n * Corresponds to named arguments.\n *\n * If `PositionalArguments` and `NamedArguments` are empty, the `SourceOffsets` for this node should\n * be the same as the `Args` node that contains this node.\n *\n * If `PositionalArguments` is not empty but `NamedArguments` is empty, the `SourceOffsets` for this\n * node should be the collapsed position immediately after the last positional argument.\n */\n class NamedArguments extends node().fields() {\n static empty(loc) {\n return new NamedArguments({\n loc,\n entries: []\n });\n }\n get size() {\n return this.entries.length;\n }\n get(name) {\n let entry = this.entries.filter(e => e.name.chars === name)[0];\n return entry ? entry.value : null;\n }\n isEmpty() {\n return this.entries.length === 0;\n }\n }\n\n /**\n * Corresponds to a single named argument.\n *\n * ```hbs\n * x=<expr>\n * ```\n */\n class NamedArgument {\n constructor(options) {\n this.loc = void 0;\n this.name = void 0;\n this.value = void 0;\n this.loc = options.name.loc.extend(options.value.loc);\n this.name = options.name;\n this.value = options.value;\n }\n }\n\n /**\n * Attr nodes look like HTML attributes, but are classified as:\n *\n * 1. `HtmlAttr`, which means a regular HTML attribute in Glimmer\n * 2. `SplatAttr`, which means `...attributes`\n * 3. `ComponentArg`, which means an attribute whose name begins with `@`, and it is therefore a\n * component argument.\n */\n\n /**\n * `HtmlAttr` and `SplatAttr` are grouped together because the order of the `SplatAttr` node,\n * relative to other attributes, matters.\n */\n\n /**\n * \"Attr Block\" nodes are allowed inside an open element tag in templates. They interact with the\n * element (or component).\n */\n\n /**\n * `HtmlAttr` nodes are valid HTML attributes, with or without a value.\n *\n * Exceptions:\n *\n * - `...attributes` is `SplatAttr`\n * - `@x=<value>` is `ComponentArg`\n */\n class HtmlAttr extends node('HtmlAttr').fields() {}\n class SplatAttr extends node('SplatAttr').fields() {}\n\n /**\n * Corresponds to an argument passed by a component (`@x=<value>`)\n */\n class ComponentArg extends node().fields() {\n /**\n * Convert the component argument into a named argument node\n */\n toNamedArgument() {\n return new NamedArgument({\n name: this.name,\n value: this.value\n });\n }\n }\n\n /**\n * An `ElementModifier` is just a normal call node in modifier position.\n */\n class ElementModifier extends node('ElementModifier').fields() {}\n\n /**\n * Content Nodes are allowed in content positions in templates. They correspond to behavior in the\n * [Data][data] tokenization state in HTML.\n *\n * [data]: https://html.spec.whatwg.org/multipage/parsing.html#data-state\n */\n\n class GlimmerComment extends node('GlimmerComment').fields() {}\n class HtmlText extends node('HtmlText').fields() {}\n class HtmlComment extends node('HtmlComment').fields() {}\n class AppendContent extends node('AppendContent').fields() {\n get callee() {\n if (this.value.type === 'Call') {\n return this.value.callee;\n } else {\n return this.value;\n }\n }\n get args() {\n if (this.value.type === 'Call') {\n return this.value.args;\n } else {\n return Args.empty(this.value.loc.collapse('end'));\n }\n }\n }\n class InvokeBlock extends node('InvokeBlock').fields() {}\n /**\n * Corresponds to a component invocation. When the content of a component invocation contains no\n * named blocks, `blocks` contains a single named block named `\"default\"`. When a component\n * invocation is self-closing, `blocks` is empty.\n */\n class InvokeComponent extends node('InvokeComponent').fields() {\n get args() {\n let entries = this.componentArgs.map(a => a.toNamedArgument());\n return Args.named(new NamedArguments({\n loc: SpanList.range(entries, this.callee.loc.collapse('end')),\n entries\n }));\n }\n }\n /**\n * Corresponds to a simple HTML element. The AST allows component arguments and modifiers to support\n * future extensions.\n */\n class SimpleElement extends node('SimpleElement').fields() {\n get args() {\n let entries = this.componentArgs.map(a => a.toNamedArgument());\n return Args.named(new NamedArguments({\n loc: SpanList.range(entries, this.tag.loc.collapse('end')),\n entries\n }));\n }\n }\n\n /**\n * A Handlebars literal.\n *\n * {@link https://handlebarsjs.com/guide/expressions.html#literal-segments}\n */\n\n /**\n * Corresponds to a Handlebars literal.\n *\n * @see {LiteralValue}\n */\n class LiteralExpression extends node('Literal').fields() {\n toSlice() {\n return new SourceSlice({\n loc: this.loc,\n chars: this.value\n });\n }\n }\n /**\n * Returns true if an input {@see ExpressionNode} is a literal.\n */\n function isLiteral(node, kind) {\n if (node.type === 'Literal') {\n if (kind === undefined) {\n return true;\n } else if (kind === 'null') {\n return node.value === null;\n } else {\n return typeof node.value === kind;\n }\n } else {\n return false;\n }\n }\n\n /**\n * Corresponds to a path in expression position.\n *\n * ```hbs\n * this\n * this.x\n * @x\n * @x.y\n * x\n * x.y\n * ```\n */\n class PathExpression extends node('Path').fields() {}\n\n /**\n * Corresponds to a parenthesized call expression.\n *\n * ```hbs\n * (x)\n * (x.y)\n * (x y)\n * (x.y z)\n * ```\n */\n class CallExpression extends node('Call').fields() {}\n\n /**\n * Corresponds to a possible deprecated helper call. Must be:\n *\n * 1. A free variable (not this.foo, not @foo, not local).\n * 2. Argument-less.\n * 3. In a component invocation's named argument position.\n * 4. Not parenthesized (not @bar={{(helper)}}).\n * 5. Not interpolated (not @bar=\"{{helper}}\").\n *\n * ```hbs\n * <Foo @bar={{helper}} />\n * ```\n */\n class DeprecatedCallExpression extends node('DeprecatedCall').fields() {}\n\n /**\n * Corresponds to an interpolation in attribute value position.\n *\n * ```hbs\n * <a href=\"{{url}}.html\"\n * ```\n */\n class InterpolateExpression extends node('Interpolate').fields() {}\n\n /**\n * Corresponds to an entire template.\n */\n class Template extends node().fields() {}\n\n /**\n * Represents a block. In principle this could be merged with `NamedBlock`, because all cases\n * involving blocks have at least a notional name.\n */\n class Block extends node().fields() {}\n\n /**\n * Corresponds to a collection of named blocks.\n */\n class NamedBlocks extends node().fields() {\n /**\n * Get the `NamedBlock` for a given name.\n */\n\n get(name) {\n return this.blocks.filter(block => block.name.chars === name)[0] || null;\n }\n }\n /**\n * Corresponds to a single named block. This is used for anonymous named blocks (`default` and\n * `else`).\n */\n class NamedBlock extends node().fields() {\n get args() {\n let entries = this.componentArgs.map(a => a.toNamedArgument());\n return Args.named(new NamedArguments({\n loc: SpanList.range(entries, this.name.loc.collapse('end')),\n entries\n }));\n }\n }\n\n /**\n * Corresponds to `this` at the head of an expression.\n */\n class ThisReference extends node('This').fields() {}\n\n /**\n * Corresponds to `@<ident>` at the beginning of an expression.\n */\n class ArgReference extends node('Arg').fields() {}\n\n /**\n * Corresponds to `<ident>` at the beginning of an expression, when `<ident>` is in the current\n * block's scope.\n */\n class LocalVarReference extends node('Local').fields() {}\n\n /**\n * Corresponds to `<ident>` at the beginning of an expression, when `<ident>` is *not* in the\n * current block's scope.\n *\n * The `resolution: FreeVarResolution` field describes how to resolve the free variable.\n *\n * Note: In strict mode, it must always be a variable that is in a concrete JavaScript scope that\n * the template will be installed into.\n */\n class FreeVarReference extends node('Free').fields() {}\n\n /**\n * A free variable is resolved according to a resolution rule:\n *\n * 1. Strict resolution\n * 2. Namespaced resolution\n * 3. Fallback resolution\n */\n\n /**\n * Strict resolution is used:\n *\n * 1. in a strict mode template\n * 2. in an unambiguous invocation with dot paths\n */\n const STRICT_RESOLUTION = {\n resolution: () => _wireFormat.SexpOpcodes.GetStrictKeyword,\n serialize: () => 'Strict',\n isAngleBracket: false\n };\n const HTML_RESOLUTION = {\n ...STRICT_RESOLUTION,\n isAngleBracket: true\n };\n function isStrictResolution(value) {\n return value === STRICT_RESOLUTION;\n }\n\n /**\n * A `LooseModeResolution` includes:\n *\n * - 0 or more namespaces to resolve the variable in\n * - optional fallback behavior\n *\n * In practice, there are a limited number of possible combinations of these degrees of freedom,\n * and they are captured by the `Ambiguity` union below.\n */\n class LooseModeResolution {\n /**\n * Namespaced resolution is used in an unambiguous syntax position:\n *\n * 1. `(sexp)` (namespace: `Helper`)\n * 2. `{{#block}}` (namespace: `Component`)\n * 3. `<a {{modifier}}>` (namespace: `Modifier`)\n * 4. `<Component />` (namespace: `Component`)\n *\n * @see {NamespacedAmbiguity}\n */\n static namespaced(namespace, isAngleBracket) {\n if (isAngleBracket === void 0) {\n isAngleBracket = false;\n }\n return new LooseModeResolution({\n namespaces: [namespace],\n fallback: false\n }, isAngleBracket);\n }\n\n /**\n * Fallback resolution is used when no namespaced resolutions are possible, but fallback\n * resolution is still allowed.\n *\n * ```hbs\n * {{x.y}}\n * ```\n *\n * @see {FallbackAmbiguity}\n */\n static fallback() {\n return new LooseModeResolution({\n namespaces: [],\n fallback: true\n });\n }\n\n /**\n * Append resolution is used when the variable should be resolved in both the `component` and\n * `helper` namespaces. Fallback resolution is optional.\n *\n * ```hbs\n * {{x}}\n * ```\n *\n * ^ `x` should be resolved in the `component` and `helper` namespaces with fallback resolution.\n *\n * ```hbs\n * {{x y}}\n * ```\n *\n * ^ `x` should be resolved in the `component` and `helper` namespaces without fallback\n * resolution.\n *\n * @see {ComponentOrHelperAmbiguity}\n */\n static append(_ref29) {\n let {\n invoke\n } = _ref29;\n return new LooseModeResolution({\n namespaces: [FreeVarNamespace.Component, FreeVarNamespace.Helper],\n fallback: !invoke\n });\n }\n\n /**\n * Trusting append resolution is used when the variable should be resolved in both the `component` and\n * `helper` namespaces. Fallback resolution is optional.\n *\n * ```hbs\n * {{{x}}}\n * ```\n *\n * ^ `x` should be resolved in the `component` and `helper` namespaces with fallback resolution.\n *\n * ```hbs\n * {{{x y}}}\n * ```\n *\n * ^ `x` should be resolved in the `component` and `helper` namespaces without fallback\n * resolution.\n *\n * @see {HelperAmbiguity}\n */\n static trustingAppend(_ref30) {\n let {\n invoke\n } = _ref30;\n return new LooseModeResolution({\n namespaces: [FreeVarNamespace.Helper],\n fallback: !invoke\n });\n }\n\n /**\n * Attribute resolution is used when the variable should be resolved as a `helper` with fallback\n * resolution.\n *\n * ```hbs\n * <a href={{x}} />\n * <a href=\"{{x}}.html\" />\n * ```\n *\n * ^ resolved in the `helper` namespace with fallback\n *\n * @see {HelperAmbiguity}\n */\n static attr() {\n return new LooseModeResolution({\n namespaces: [FreeVarNamespace.Helper],\n fallback: true\n });\n }\n constructor(ambiguity, isAngleBracket) {\n if (isAngleBracket === void 0) {\n isAngleBracket = false;\n }\n this.ambiguity = ambiguity;\n this.isAngleBracket = isAngleBracket;\n }\n resolution() {\n if (this.ambiguity.namespaces.length === 0) {\n return _wireFormat.SexpOpcodes.GetStrictKeyword;\n } else if (this.ambiguity.namespaces.length === 1) {\n if (this.ambiguity.fallback) {\n // simple namespaced resolution with fallback must be attr={{x}}\n return _wireFormat.SexpOpcodes.GetFreeAsHelperHeadOrThisFallback;\n } else {\n // simple namespaced resolution without fallback\n switch (this.ambiguity.namespaces[0]) {\n case FreeVarNamespace.Helper:\n return _wireFormat.SexpOpcodes.GetFreeAsHelperHead;\n case FreeVarNamespace.Modifier:\n return _wireFormat.SexpOpcodes.GetFreeAsModifierHead;\n case FreeVarNamespace.Component:\n return _wireFormat.SexpOpcodes.GetFreeAsComponentHead;\n }\n }\n } else if (this.ambiguity.fallback) {\n // component or helper + fallback ({{something}})\n return _wireFormat.SexpOpcodes.GetFreeAsComponentOrHelperHeadOrThisFallback;\n } else {\n // component or helper without fallback ({{something something}})\n return _wireFormat.SexpOpcodes.GetFreeAsComponentOrHelperHead;\n }\n }\n serialize() {\n if (this.ambiguity.namespaces.length === 0) {\n return 'Loose';\n } else if (this.ambiguity.namespaces.length === 1) {\n if (this.ambiguity.fallback) {\n // simple namespaced resolution with fallback must be attr={{x}}\n return ['ambiguous', SerializedAmbiguity.Attr];\n } else {\n return ['ns', this.ambiguity.namespaces[0]];\n }\n } else if (this.ambiguity.fallback) {\n // component or helper + fallback ({{something}})\n return ['ambiguous', SerializedAmbiguity.Append];\n } else {\n // component or helper without fallback ({{something something}})\n return ['ambiguous', SerializedAmbiguity.Invoke];\n }\n }\n }\n const ARGUMENT_RESOLUTION = LooseModeResolution.fallback();\n let FreeVarNamespace = /*#__PURE__*/function (FreeVarNamespace) {\n FreeVarNamespace[\"Helper\"] = \"Helper\";\n FreeVarNamespace[\"Modifier\"] = \"Modifier\";\n FreeVarNamespace[\"Component\"] = \"Component\";\n return FreeVarNamespace;\n }({});\n const HELPER_NAMESPACE = FreeVarNamespace.Helper;\n const MODIFIER_NAMESPACE = FreeVarNamespace.Modifier;\n const COMPONENT_NAMESPACE = FreeVarNamespace.Component;\n\n /**\n * A `ComponentOrHelperAmbiguity` might be a component or a helper, with an optional fallback\n *\n * ```hbs\n * {{x}}\n * ```\n *\n * ^ `x` is resolved in the `component` and `helper` namespaces, with fallback\n *\n * ```hbs\n * {{x y}}\n * ```\n *\n * ^ `x` is resolved in the `component` and `helper` namespaces, without fallback\n */\n\n /**\n * A `HelperAmbiguity` must be a helper, but it has fallback. If it didn't have fallback, it would\n * be a `NamespacedAmbiguity`.\n *\n * ```hbs\n * <a href={{x}} />\n * <a href=\"{{x}}.html\" />\n * ```\n *\n * ^ `x` is resolved in the `helper` namespace with fallback\n */\n\n /**\n * A `NamespacedAmbiguity` must be resolved in a particular namespace, without fallback.\n *\n * ```hbs\n * <X />\n * ```\n *\n * ^ `X` is resolved in the `component` namespace without fallback\n *\n * ```hbs\n * (x)\n * ```\n *\n * ^ `x` is resolved in the `helper` namespace without fallback\n *\n * ```hbs\n * <a {{x}} />\n * ```\n *\n * ^ `x` is resolved in the `modifier` namespace without fallback\n */\n // Serialization\n var SerializedAmbiguity = /*#__PURE__*/function (SerializedAmbiguity) {\n SerializedAmbiguity[\"Append\"] = \"Append\";\n SerializedAmbiguity[\"Attr\"] = \"Attr\";\n SerializedAmbiguity[\"Invoke\"] = \"Invoke\";\n return SerializedAmbiguity;\n }(SerializedAmbiguity || {});\n function loadResolution(resolution) {\n if (typeof resolution === 'string') {\n switch (resolution) {\n case 'Loose':\n return LooseModeResolution.fallback();\n case 'Strict':\n return STRICT_RESOLUTION;\n }\n }\n switch (resolution[0]) {\n case 'ambiguous':\n switch (resolution[1]) {\n case SerializedAmbiguity.Append:\n return LooseModeResolution.append({\n invoke: false\n });\n case SerializedAmbiguity.Attr:\n return LooseModeResolution.attr();\n case SerializedAmbiguity.Invoke:\n return LooseModeResolution.append({\n invoke: true\n });\n }\n case 'ns':\n return LooseModeResolution.namespaced(resolution[1]);\n }\n }\n var api$1 = _exports.ASTv2 = /*#__PURE__*/Object.freeze({\n __proto__: null,\n ARGUMENT_RESOLUTION: ARGUMENT_RESOLUTION,\n AppendContent: AppendContent,\n ArgReference: ArgReference,\n Args: Args,\n Block: Block,\n COMPONENT_NAMESPACE: COMPONENT_NAMESPACE,\n CallExpression: CallExpression,\n ComponentArg: ComponentArg,\n DeprecatedCallExpression: DeprecatedCallExpression,\n ElementModifier: ElementModifier,\n FreeVarNamespace: FreeVarNamespace,\n FreeVarReference: FreeVarReference,\n GlimmerComment: GlimmerComment,\n HELPER_NAMESPACE: HELPER_NAMESPACE,\n HTML_RESOLUTION: HTML_RESOLUTION,\n HtmlAttr: HtmlAttr,\n HtmlComment: HtmlComment,\n HtmlText: HtmlText,\n InterpolateExpression: InterpolateExpression,\n InvokeBlock: InvokeBlock,\n InvokeComponent: InvokeComponent,\n LiteralExpression: LiteralExpression,\n LocalVarReference: LocalVarReference,\n LooseModeResolution: LooseModeResolution,\n MODIFIER_NAMESPACE: MODIFIER_NAMESPACE,\n NamedArgument: NamedArgument,\n NamedArguments: NamedArguments,\n NamedBlock: NamedBlock,\n NamedBlocks: NamedBlocks,\n PathExpression: PathExpression,\n PositionalArguments: PositionalArguments,\n STRICT_RESOLUTION: STRICT_RESOLUTION,\n SimpleElement: SimpleElement,\n SplatAttr: SplatAttr,\n Template: Template,\n ThisReference: ThisReference,\n isLiteral: isLiteral,\n isStrictResolution: isStrictResolution,\n loadResolution: loadResolution,\n node: node\n });\n class SymbolTable {\n static top(locals, options) {\n return new ProgramSymbolTable(locals, options);\n }\n child(locals) {\n let symbols = locals.map(name => this.allocate(name));\n return new BlockSymbolTable(this, locals, symbols);\n }\n }\n _exports.SymbolTable = SymbolTable;\n var _hasDebugger = /*#__PURE__*/(0, _emberBabel.classPrivateFieldLooseKey)(\"hasDebugger\");\n class ProgramSymbolTable extends SymbolTable {\n constructor(templateLocals, options) {\n super();\n this.symbols = [];\n this.upvars = [];\n this.size = 1;\n this.named = (0, _util.dict)();\n this.blocks = (0, _util.dict)();\n this.usedTemplateLocals = [];\n Object.defineProperty(this, _hasDebugger, {\n writable: true,\n value: false\n });\n this.templateLocals = templateLocals;\n this.options = options;\n }\n hasLexical(name) {\n return this.options.lexicalScope(name);\n }\n getLexical(name) {\n return this.allocateFree(name, HTML_RESOLUTION);\n }\n getUsedTemplateLocals() {\n return this.usedTemplateLocals;\n }\n setHasDebugger() {\n (0, _emberBabel.classPrivateFieldLooseBase)(this, _hasDebugger)[_hasDebugger] = true;\n }\n get hasEval() {\n return (0, _emberBabel.classPrivateFieldLooseBase)(this, _hasDebugger)[_hasDebugger];\n }\n has(name) {\n return this.templateLocals.includes(name);\n }\n get(name) {\n let index = this.usedTemplateLocals.indexOf(name);\n if (index !== -1) {\n return [index, true];\n }\n index = this.usedTemplateLocals.length;\n this.usedTemplateLocals.push(name);\n return [index, true];\n }\n getLocalsMap() {\n return (0, _util.dict)();\n }\n getDebugInfo() {\n return Object.values(this.getLocalsMap());\n }\n allocateFree(name, resolution) {\n // If the name in question is an uppercase (i.e. angle-bracket) component invocation, run\n // the optional `customizeComponentName` function provided to the precompiler.\n if (resolution.resolution() === _wireFormat.SexpOpcodes.GetFreeAsComponentHead && resolution.isAngleBracket) {\n name = this.options.customizeComponentName(name);\n }\n let index = this.upvars.indexOf(name);\n if (index !== -1) {\n return index;\n }\n index = this.upvars.length;\n this.upvars.push(name);\n return index;\n }\n allocateNamed(name) {\n let named = this.named[name];\n if (!named) {\n named = this.named[name] = this.allocate(name);\n }\n return named;\n }\n allocateBlock(name) {\n if (name === 'inverse') {\n name = 'else';\n }\n let block = this.blocks[name];\n if (!block) {\n block = this.blocks[name] = this.allocate(\"&\" + name);\n }\n return block;\n }\n allocate(identifier) {\n this.symbols.push(identifier);\n return this.size++;\n }\n }\n _exports.ProgramSymbolTable = ProgramSymbolTable;\n var _get = /*#__PURE__*/(0, _emberBabel.classPrivateFieldLooseKey)(\"get\");\n class BlockSymbolTable extends SymbolTable {\n constructor(parent, symbols, slots) {\n super();\n Object.defineProperty(this, _get, {\n value: _get2\n });\n this.parent = parent;\n this.symbols = symbols;\n this.slots = slots;\n }\n get locals() {\n return this.symbols;\n }\n getLexical(name) {\n return this.parent.getLexical(name);\n }\n hasLexical(name) {\n return this.parent.hasLexical(name);\n }\n has(name) {\n return this.symbols.indexOf(name) !== -1 || this.parent.has(name);\n }\n get(name) {\n let local = (0, _emberBabel.classPrivateFieldLooseBase)(this, _get)[_get](name);\n return local ? [local, false] : this.parent.get(name);\n }\n getLocalsMap() {\n let dict = this.parent.getLocalsMap();\n this.symbols.forEach(symbol => dict[symbol] = this.get(symbol)[0]);\n return dict;\n }\n getDebugInfo() {\n return Object.values(this.getLocalsMap());\n }\n setHasDebugger() {\n this.parent.setHasDebugger();\n }\n allocateFree(name, resolution) {\n return this.parent.allocateFree(name, resolution);\n }\n allocateNamed(name) {\n return this.parent.allocateNamed(name);\n }\n allocateBlock(name) {\n return this.parent.allocateBlock(name);\n }\n allocate(identifier) {\n return this.parent.allocate(identifier);\n }\n }\n _exports.BlockSymbolTable = BlockSymbolTable;\n function _get2(name) {\n let slot = this.symbols.indexOf(name);\n return slot === -1 ? null : (0, _util.unwrap)(this.slots[slot]);\n }\n var api = _exports.ASTv1 = _exports.AST = /*#__PURE__*/Object.freeze({\n __proto__: null\n });\n class Builder {\n // TEMPLATE //\n\n template(symbols, body, loc) {\n return new Template({\n table: symbols,\n body,\n loc\n });\n }\n\n // INTERNAL (these nodes cannot be reached when doing general-purpose visiting) //\n\n block(symbols, body, loc) {\n return new Block({\n scope: symbols,\n body,\n loc\n });\n }\n namedBlock(name, block, loc) {\n return new NamedBlock({\n name,\n block,\n attrs: [],\n componentArgs: [],\n modifiers: [],\n loc\n });\n }\n simpleNamedBlock(name, block, loc) {\n return new BuildElement({\n selfClosing: false,\n attrs: [],\n componentArgs: [],\n modifiers: [],\n comments: []\n }).named(name, block, loc);\n }\n slice(chars, loc) {\n return new SourceSlice({\n loc,\n chars\n });\n }\n args(positional, named, loc) {\n return new Args({\n loc,\n positional,\n named\n });\n }\n positional(exprs, loc) {\n return new PositionalArguments({\n loc,\n exprs\n });\n }\n namedArgument(key, value) {\n return new NamedArgument({\n name: key,\n value\n });\n }\n named(entries, loc) {\n return new NamedArguments({\n loc,\n entries\n });\n }\n attr(_ref31, loc) {\n let {\n name,\n value,\n trusting\n } = _ref31;\n return new HtmlAttr({\n loc,\n name,\n value,\n trusting\n });\n }\n splatAttr(symbol, loc) {\n return new SplatAttr({\n symbol,\n loc\n });\n }\n arg(_ref32, loc) {\n let {\n name,\n value,\n trusting\n } = _ref32;\n return new ComponentArg({\n name,\n value,\n trusting,\n loc\n });\n }\n\n // EXPRESSIONS //\n\n path(head, tail, loc) {\n return new PathExpression({\n loc,\n ref: head,\n tail\n });\n }\n self(loc) {\n return new ThisReference({\n loc\n });\n }\n at(name, symbol, loc) {\n // the `@` should be included so we have a complete source range\n (0, _util.assert)(name[0] === '@', \"call builders.at() with a string that starts with '@'\");\n return new ArgReference({\n loc,\n name: new SourceSlice({\n loc,\n chars: name\n }),\n symbol\n });\n }\n freeVar(_ref33) {\n let {\n name,\n context,\n symbol,\n loc\n } = _ref33;\n (0, _util.assert)(name !== 'this', \"You called builders.freeVar() with 'this'. Call builders.this instead\");\n (0, _util.assert)(name[0] !== '@', \"You called builders.freeVar() with '\" + name + \"'. Call builders.at('\" + name + \"') instead\");\n return new FreeVarReference({\n name,\n resolution: context,\n symbol,\n loc\n });\n }\n localVar(name, symbol, isTemplateLocal, loc) {\n (0, _util.assert)(name !== 'this', \"You called builders.var() with 'this'. Call builders.this instead\");\n (0, _util.assert)(name[0] !== '@', \"You called builders.var() with '\" + name + \"'. Call builders.at('\" + name + \"') instead\");\n return new LocalVarReference({\n loc,\n name,\n isTemplateLocal,\n symbol\n });\n }\n sexp(parts, loc) {\n return new CallExpression({\n loc,\n callee: parts.callee,\n args: parts.args\n });\n }\n deprecatedCall(arg, callee, loc) {\n return new DeprecatedCallExpression({\n loc,\n arg,\n callee\n });\n }\n interpolate(parts, loc) {\n (0, _util.assertPresentArray)(parts);\n return new InterpolateExpression({\n loc,\n parts\n });\n }\n literal(value, loc) {\n return new LiteralExpression({\n loc,\n value\n });\n }\n\n // STATEMENTS //\n\n append(_ref34, loc) {\n let {\n table,\n trusting,\n value\n } = _ref34;\n return new AppendContent({\n table,\n trusting,\n value,\n loc\n });\n }\n modifier(_ref35, loc) {\n let {\n callee,\n args\n } = _ref35;\n return new ElementModifier({\n loc,\n callee,\n args\n });\n }\n namedBlocks(blocks, loc) {\n return new NamedBlocks({\n loc,\n blocks\n });\n }\n blockStatement(_ref36, loc) {\n let {\n program,\n inverse = null,\n ...call\n } = _ref36;\n let blocksLoc = program.loc;\n let blocks = [this.namedBlock(SourceSlice.synthetic('default'), program, program.loc)];\n if (inverse) {\n blocksLoc = blocksLoc.extend(inverse.loc);\n blocks.push(this.namedBlock(SourceSlice.synthetic('else'), inverse, inverse.loc));\n }\n return new InvokeBlock({\n loc,\n blocks: this.namedBlocks(blocks, blocksLoc),\n callee: call.callee,\n args: call.args\n });\n }\n element(options) {\n return new BuildElement(options);\n }\n }\n class BuildElement {\n constructor(base) {\n this.builder = void 0;\n this.base = base;\n this.builder = new Builder();\n }\n simple(tag, body, loc) {\n return new SimpleElement((0, _util.assign)({\n tag,\n body,\n componentArgs: [],\n loc\n }, this.base));\n }\n named(name, block, loc) {\n return new NamedBlock((0, _util.assign)({\n name,\n block,\n componentArgs: [],\n loc\n }, this.base));\n }\n selfClosingComponent(callee, loc) {\n return new InvokeComponent((0, _util.assign)({\n loc,\n callee,\n // point the empty named blocks at the `/` self-closing tag\n blocks: new NamedBlocks({\n blocks: [],\n loc: loc.sliceEndChars({\n skipEnd: 1,\n chars: 1\n })\n })\n }, this.base));\n }\n componentWithDefaultBlock(callee, children, symbols, loc) {\n let block = this.builder.block(symbols, children, loc);\n let namedBlock = this.builder.namedBlock(SourceSlice.synthetic('default'), block, loc); // BUILDER.simpleNamedBlock('default', children, symbols, loc);\n\n return new InvokeComponent((0, _util.assign)({\n loc,\n callee,\n blocks: this.builder.namedBlocks([namedBlock], namedBlock.loc)\n }, this.base));\n }\n componentWithNamedBlocks(callee, blocks, loc) {\n return new InvokeComponent((0, _util.assign)({\n loc,\n callee,\n blocks: this.builder.namedBlocks(blocks, SpanList.range(blocks))\n }, this.base));\n }\n }\n function SexpSyntaxContext(node) {\n if (isSimpleCallee(node)) {\n return LooseModeResolution.namespaced(HELPER_NAMESPACE);\n } else {\n return null;\n }\n }\n function ModifierSyntaxContext(node) {\n if (isSimpleCallee(node)) {\n return LooseModeResolution.namespaced(MODIFIER_NAMESPACE);\n } else {\n return null;\n }\n }\n function BlockSyntaxContext(node) {\n if (isSimpleCallee(node)) {\n return LooseModeResolution.namespaced(COMPONENT_NAMESPACE);\n } else {\n return LooseModeResolution.fallback();\n }\n }\n function ComponentSyntaxContext(node) {\n if (isSimplePath(node)) {\n return LooseModeResolution.namespaced(FreeVarNamespace.Component, true);\n } else {\n return null;\n }\n }\n\n /**\n * This corresponds to append positions (text curlies or attribute\n * curlies). In strict mode, this also corresponds to arg curlies.\n */\n function AttrValueSyntaxContext(node) {\n let isSimple = isSimpleCallee(node);\n let isInvoke = isInvokeNode(node);\n if (isSimple) {\n return isInvoke ? LooseModeResolution.namespaced(FreeVarNamespace.Helper) : LooseModeResolution.attr();\n } else {\n return isInvoke ? STRICT_RESOLUTION : LooseModeResolution.fallback();\n }\n }\n\n /**\n * This corresponds to append positions (text curlies or attribute\n * curlies). In strict mode, this also corresponds to arg curlies.\n */\n function AppendSyntaxContext(node) {\n let isSimple = isSimpleCallee(node);\n let isInvoke = isInvokeNode(node);\n let trusting = node.trusting;\n if (isSimple) {\n return trusting ? LooseModeResolution.trustingAppend({\n invoke: isInvoke\n }) : LooseModeResolution.append({\n invoke: isInvoke\n });\n } else {\n return LooseModeResolution.fallback();\n }\n }\n // UTILITIES\n /**\n * A call node has a simple callee if its head is:\n *\n * - a `PathExpression`\n * - the `PathExpression`'s head is a `VarHead`\n * - it has no tail\n *\n * Simple heads:\n *\n * ```\n * {{x}}\n * {{x y}}\n * ```\n *\n * Not simple heads:\n *\n * ```\n * {{x.y}}\n * {{x.y z}}\n * {{@x}}\n * {{@x a}}\n * {{this}}\n * {{this a}}\n * ```\n */\n function isSimpleCallee(node) {\n let path = node.path;\n return isSimplePath(path);\n }\n function isSimplePath(node) {\n if (node.type === 'PathExpression' && node.head.type === 'VarHead') {\n return node.tail.length === 0;\n } else {\n return false;\n }\n }\n\n /**\n * The call expression has at least one argument.\n */\n function isInvokeNode(node) {\n return node.params.length > 0 || node.hash.pairs.length > 0;\n }\n function normalize(source, options) {\n var _options$customizeCom;\n if (options === void 0) {\n options = {\n lexicalScope: () => false\n };\n }\n let ast = preprocess(source, options);\n let normalizeOptions = {\n strictMode: false,\n locals: [],\n ...options\n };\n let top = SymbolTable.top(normalizeOptions.locals, {\n customizeComponentName: (_options$customizeCom = options.customizeComponentName) != null ? _options$customizeCom : name => name,\n lexicalScope: options.lexicalScope\n });\n let block = new BlockContext(source, normalizeOptions, top);\n let normalizer = new StatementNormalizer(block);\n let astV2 = new TemplateChildren(block.loc(ast.loc), ast.body.map(b => normalizer.normalize(b)), block).assertTemplate(top);\n let locals = top.getUsedTemplateLocals();\n return [astV2, locals];\n }\n\n /**\n * A `BlockContext` represents the block that a particular AST node is contained inside of.\n *\n * `BlockContext` is aware of template-wide options (such as strict mode), as well as the bindings\n * that are in-scope within that block.\n *\n * Concretely, it has the `PrecompileOptions` and current `SymbolTable`, and provides\n * facilities for working with those options.\n *\n * `BlockContext` is stateless.\n */\n class BlockContext {\n constructor(source, options, table) {\n this.builder = void 0;\n this.source = source;\n this.options = options;\n this.table = table;\n this.builder = new Builder();\n }\n get strict() {\n return this.options.strictMode || false;\n }\n loc(loc) {\n return this.source.spanFor(loc);\n }\n resolutionFor(node, resolution) {\n if (this.strict) {\n return {\n result: STRICT_RESOLUTION\n };\n }\n if (this.isFreeVar(node)) {\n let r = resolution(node);\n if (r === null) {\n return {\n result: 'error',\n path: printPath(node),\n head: printHead(node)\n };\n }\n return {\n result: r\n };\n } else {\n return {\n result: STRICT_RESOLUTION\n };\n }\n }\n isLexicalVar(variable) {\n return this.table.hasLexical(variable);\n }\n isFreeVar(callee) {\n if (callee.type === 'PathExpression') {\n if (callee.head.type !== 'VarHead') {\n return false;\n }\n return !this.table.has(callee.head.name);\n } else if (callee.path.type === 'PathExpression') {\n return this.isFreeVar(callee.path);\n } else {\n return false;\n }\n }\n hasBinding(name) {\n return this.table.has(name) || this.table.hasLexical(name);\n }\n child(blockParams) {\n return new BlockContext(this.source, this.options, this.table.child(blockParams));\n }\n customizeComponentName(input) {\n if (this.options.customizeComponentName) {\n return this.options.customizeComponentName(input);\n } else {\n return input;\n }\n }\n }\n\n /**\n * An `ExpressionNormalizer` normalizes expressions within a block.\n *\n * `ExpressionNormalizer` is stateless.\n */\n class ExpressionNormalizer {\n constructor(block) {\n this.block = block;\n }\n\n /**\n * The `normalize` method takes an arbitrary expression and its original syntax context and\n * normalizes it to an ASTv2 expression.\n *\n * @see {SyntaxContext}\n */\n\n normalize(expr, resolution) {\n switch (expr.type) {\n case 'NullLiteral':\n case 'BooleanLiteral':\n case 'NumberLiteral':\n case 'StringLiteral':\n case 'UndefinedLiteral':\n return this.block.builder.literal(expr.value, this.block.loc(expr.loc));\n case 'PathExpression':\n return this.path(expr, resolution);\n case 'SubExpression':\n {\n let resolution = this.block.resolutionFor(expr, SexpSyntaxContext);\n if (resolution.result === 'error') {\n throw generateSyntaxError(\"You attempted to invoke a path (`\" + resolution.path + \"`) but \" + resolution.head + \" was not in scope\", expr.loc);\n }\n return this.block.builder.sexp(this.callParts(expr, resolution.result), this.block.loc(expr.loc));\n }\n }\n }\n path(expr, resolution) {\n let headOffsets = this.block.loc(expr.head.loc);\n let tail = [];\n\n // start with the head\n let offset = headOffsets;\n for (let part of expr.tail) {\n offset = offset.sliceStartChars({\n chars: part.length,\n skipStart: 1\n });\n tail.push(new SourceSlice({\n loc: offset,\n chars: part\n }));\n }\n return this.block.builder.path(this.ref(expr.head, resolution), tail, this.block.loc(expr.loc));\n }\n\n /**\n * The `callParts` method takes ASTv1.CallParts as well as a syntax context and normalizes\n * it to an ASTv2 CallParts.\n */\n callParts(parts, context) {\n let {\n path,\n params,\n hash\n } = parts;\n let callee = this.normalize(path, context);\n let paramList = params.map(p => this.normalize(p, ARGUMENT_RESOLUTION));\n let paramLoc = SpanList.range(paramList, callee.loc.collapse('end'));\n let namedLoc = this.block.loc(hash.loc);\n let argsLoc = SpanList.range([paramLoc, namedLoc]);\n let positional = this.block.builder.positional(params.map(p => this.normalize(p, ARGUMENT_RESOLUTION)), paramLoc);\n let named = this.block.builder.named(hash.pairs.map(p => this.namedArgument(p)), this.block.loc(hash.loc));\n return {\n callee,\n args: this.block.builder.args(positional, named, argsLoc)\n };\n }\n namedArgument(pair) {\n let offsets = this.block.loc(pair.loc);\n let keyOffsets = offsets.sliceStartChars({\n chars: pair.key.length\n });\n return this.block.builder.namedArgument(new SourceSlice({\n chars: pair.key,\n loc: keyOffsets\n }), this.normalize(pair.value, ARGUMENT_RESOLUTION));\n }\n\n /**\n * The `ref` method normalizes an `ASTv1.PathHead` into an `ASTv2.VariableReference`.\n * This method is extremely important, because it is responsible for normalizing free\n * variables into an an ASTv2.PathHead *with appropriate context*.\n *\n * The syntax context is originally determined by the syntactic position that this `PathHead`\n * came from, and is ultimately attached to the `ASTv2.VariableReference` here. In ASTv2,\n * the `VariableReference` node bears full responsibility for loose mode rules that control\n * the behavior of free variables.\n */\n ref(head, resolution) {\n let {\n block\n } = this;\n let {\n builder,\n table\n } = block;\n let offsets = block.loc(head.loc);\n switch (head.type) {\n case 'ThisHead':\n return builder.self(offsets);\n case 'AtHead':\n {\n let symbol = table.allocateNamed(head.name);\n return builder.at(head.name, symbol, offsets);\n }\n case 'VarHead':\n {\n if (block.hasBinding(head.name)) {\n let [symbol, isRoot] = table.get(head.name);\n return block.builder.localVar(head.name, symbol, isRoot, offsets);\n } else {\n let context = block.strict ? STRICT_RESOLUTION : resolution;\n let symbol = block.table.allocateFree(head.name, context);\n return block.builder.freeVar({\n name: head.name,\n context,\n symbol,\n loc: offsets\n });\n }\n }\n }\n }\n }\n\n /**\n * `TemplateNormalizer` normalizes top-level ASTv1 statements to ASTv2.\n */\n class StatementNormalizer {\n constructor(block) {\n this.block = block;\n }\n normalize(node) {\n switch (node.type) {\n case 'PartialStatement':\n throw new Error(\"Handlebars partial syntax ({{> ...}}) is not allowed in Glimmer\");\n case 'BlockStatement':\n return this.BlockStatement(node);\n case 'ElementNode':\n return new ElementNormalizer(this.block).ElementNode(node);\n case 'MustacheStatement':\n return this.MustacheStatement(node);\n\n // These are the same in ASTv2\n case 'MustacheCommentStatement':\n return this.MustacheCommentStatement(node);\n case 'CommentStatement':\n {\n let loc = this.block.loc(node.loc);\n return new HtmlComment({\n loc,\n text: loc.slice({\n skipStart: 4,\n skipEnd: 3\n }).toSlice(node.value)\n });\n }\n case 'TextNode':\n return new HtmlText({\n loc: this.block.loc(node.loc),\n chars: node.chars\n });\n }\n }\n MustacheCommentStatement(node) {\n let loc = this.block.loc(node.loc);\n let textLoc;\n if (loc.asString().slice(0, 5) === '{{!--') {\n textLoc = loc.slice({\n skipStart: 5,\n skipEnd: 4\n });\n } else {\n textLoc = loc.slice({\n skipStart: 3,\n skipEnd: 2\n });\n }\n return new GlimmerComment({\n loc,\n text: textLoc.toSlice(node.value)\n });\n }\n\n /**\n * Normalizes an ASTv1.MustacheStatement to an ASTv2.AppendStatement\n */\n MustacheStatement(mustache) {\n let {\n escaped\n } = mustache;\n let loc = this.block.loc(mustache.loc);\n\n // Normalize the call parts in AppendSyntaxContext\n let callParts = this.expr.callParts({\n path: mustache.path,\n params: mustache.params,\n hash: mustache.hash\n }, AppendSyntaxContext(mustache));\n let value = callParts.args.isEmpty() ? callParts.callee : this.block.builder.sexp(callParts, loc);\n return this.block.builder.append({\n table: this.block.table,\n trusting: !escaped,\n value\n }, loc);\n }\n\n /**\n * Normalizes a ASTv1.BlockStatement to an ASTv2.BlockStatement\n */\n BlockStatement(block) {\n let {\n program,\n inverse\n } = block;\n let loc = this.block.loc(block.loc);\n let resolution = this.block.resolutionFor(block, BlockSyntaxContext);\n if (resolution.result === 'error') {\n throw generateSyntaxError(\"You attempted to invoke a path (`{{#\" + resolution.path + \"}}`) but \" + resolution.head + \" was not in scope\", loc);\n }\n let callParts = this.expr.callParts(block, resolution.result);\n return this.block.builder.blockStatement((0, _util.assign)({\n symbols: this.block.table,\n program: this.Block(program),\n inverse: inverse ? this.Block(inverse) : null\n }, callParts), loc);\n }\n Block(_ref37) {\n let {\n body,\n loc,\n blockParams\n } = _ref37;\n let child = this.block.child(blockParams);\n let normalizer = new StatementNormalizer(child);\n return new BlockChildren(this.block.loc(loc), body.map(b => normalizer.normalize(b)), this.block).assertBlock(child.table);\n }\n get expr() {\n return new ExpressionNormalizer(this.block);\n }\n }\n class ElementNormalizer {\n constructor(ctx) {\n this.ctx = ctx;\n }\n\n /**\n * Normalizes an ASTv1.ElementNode to:\n *\n * - ASTv2.NamedBlock if the tag name begins with `:`\n * - ASTv2.Component if the tag name matches the component heuristics\n * - ASTv2.SimpleElement if the tag name doesn't match the component heuristics\n *\n * A tag name represents a component if:\n *\n * - it begins with `@`\n * - it is exactly `this` or begins with `this.`\n * - the part before the first `.` is a reference to an in-scope variable binding\n * - it begins with an uppercase character\n */\n ElementNode(element) {\n let {\n tag,\n selfClosing,\n comments\n } = element;\n let loc = this.ctx.loc(element.loc);\n let [tagHead, ...rest] = (0, _util.asPresentArray)(tag.split('.'));\n\n // the head, attributes and modifiers are in the current scope\n let path = this.classifyTag(tagHead, rest, element.loc);\n let attrs = element.attributes.filter(a => a.name[0] !== '@').map(a => this.attr(a));\n let args = element.attributes.filter(a => a.name[0] === '@').map(a => this.arg(a));\n let modifiers = element.modifiers.map(m => this.modifier(m));\n\n // the element's block params are in scope for the children\n let child = this.ctx.child(element.blockParams);\n let normalizer = new StatementNormalizer(child);\n let childNodes = element.children.map(s => normalizer.normalize(s));\n let el = this.ctx.builder.element({\n selfClosing,\n attrs,\n componentArgs: args,\n modifiers,\n comments: comments.map(c => new StatementNormalizer(this.ctx).MustacheCommentStatement(c))\n });\n let children = new ElementChildren(el, loc, childNodes, this.ctx);\n let offsets = this.ctx.loc(element.loc);\n let tagOffsets = offsets.sliceStartChars({\n chars: tag.length,\n skipStart: 1\n });\n if (path === 'ElementHead') {\n if (tag[0] === ':') {\n return children.assertNamedBlock(tagOffsets.slice({\n skipStart: 1\n }).toSlice(tag.slice(1)), child.table);\n } else {\n return children.assertElement(tagOffsets.toSlice(tag), element.blockParams.length > 0);\n }\n }\n if (element.selfClosing) {\n return el.selfClosingComponent(path, loc);\n } else {\n let blocks = children.assertComponent(tag, child.table, element.blockParams.length > 0);\n return el.componentWithNamedBlocks(path, blocks, loc);\n }\n }\n modifier(m) {\n let resolution = this.ctx.resolutionFor(m, ModifierSyntaxContext);\n if (resolution.result === 'error') {\n throw generateSyntaxError(\"You attempted to invoke a path (`{{#\" + resolution.path + \"}}`) as a modifier, but \" + resolution.head + \" was not in scope. Try adding `this` to the beginning of the path\", m.loc);\n }\n let callParts = this.expr.callParts(m, resolution.result);\n return this.ctx.builder.modifier(callParts, this.ctx.loc(m.loc));\n }\n\n /**\n * This method handles attribute values that are curlies, as well as curlies nested inside of\n * interpolations:\n *\n * ```hbs\n * <a href={{url}} />\n * <a href=\"{{url}}.html\" />\n * ```\n */\n mustacheAttr(mustache) {\n // Normalize the call parts in AttrValueSyntaxContext\n let sexp = this.ctx.builder.sexp(this.expr.callParts(mustache, AttrValueSyntaxContext(mustache)), this.ctx.loc(mustache.loc));\n\n // If there are no params or hash, just return the function part as its own expression\n if (sexp.args.isEmpty()) {\n return sexp.callee;\n } else {\n return sexp;\n }\n }\n\n /**\n * attrPart is the narrowed down list of valid attribute values that are also\n * allowed as a concat part (you can't nest concats).\n */\n attrPart(part) {\n switch (part.type) {\n case 'MustacheStatement':\n return {\n expr: this.mustacheAttr(part),\n trusting: !part.escaped\n };\n case 'TextNode':\n return {\n expr: this.ctx.builder.literal(part.chars, this.ctx.loc(part.loc)),\n trusting: true\n };\n }\n }\n attrValue(part) {\n switch (part.type) {\n case 'ConcatStatement':\n {\n let parts = part.parts.map(p => this.attrPart(p).expr);\n return {\n expr: this.ctx.builder.interpolate(parts, this.ctx.loc(part.loc)),\n trusting: false\n };\n }\n default:\n return this.attrPart(part);\n }\n }\n attr(m) {\n (0, _util.assert)(m.name[0] !== '@', 'An attr name must not start with `@`');\n if (m.name === '...attributes') {\n return this.ctx.builder.splatAttr(this.ctx.table.allocateBlock('attrs'), this.ctx.loc(m.loc));\n }\n let offsets = this.ctx.loc(m.loc);\n let nameSlice = offsets.sliceStartChars({\n chars: m.name.length\n }).toSlice(m.name);\n let value = this.attrValue(m.value);\n return this.ctx.builder.attr({\n name: nameSlice,\n value: value.expr,\n trusting: value.trusting\n }, offsets);\n }\n maybeDeprecatedCall(arg, part) {\n if (this.ctx.strict) {\n return null;\n }\n if (part.type !== 'MustacheStatement') {\n return null;\n }\n let {\n path\n } = part;\n if (path.type !== 'PathExpression') {\n return null;\n }\n if (path.head.type !== 'VarHead') {\n return null;\n }\n let {\n name\n } = path.head;\n if (name === 'has-block' || name === 'has-block-params') {\n return null;\n }\n if (this.ctx.hasBinding(name)) {\n return null;\n }\n if (path.tail.length !== 0) {\n return null;\n }\n if (part.params.length !== 0 || part.hash.pairs.length !== 0) {\n return null;\n }\n let context = LooseModeResolution.attr();\n let callee = this.ctx.builder.freeVar({\n name,\n context,\n symbol: this.ctx.table.allocateFree(name, context),\n loc: path.loc\n });\n return {\n expr: this.ctx.builder.deprecatedCall(arg, callee, part.loc),\n trusting: false\n };\n }\n arg(arg) {\n (0, _util.assert)(arg.name[0] === '@', 'An arg name must start with `@`');\n let offsets = this.ctx.loc(arg.loc);\n let nameSlice = offsets.sliceStartChars({\n chars: arg.name.length\n }).toSlice(arg.name);\n let value = this.maybeDeprecatedCall(nameSlice, arg.value) || this.attrValue(arg.value);\n return this.ctx.builder.arg({\n name: nameSlice,\n value: value.expr,\n trusting: value.trusting\n }, offsets);\n }\n\n /**\n * This function classifies the head of an ASTv1.Element into an ASTv2.PathHead (if the\n * element is a component) or `'ElementHead'` (if the element is a simple element).\n *\n * Rules:\n *\n * 1. If the variable is an `@arg`, return an `AtHead`\n * 2. If the variable is `this`, return a `ThisHead`\n * 3. If the variable is in the current scope:\n * a. If the scope is the root scope, then return a Free `LocalVarHead`\n * b. Else, return a standard `LocalVarHead`\n * 4. If the tag name is a path and the variable is not in the current scope, Syntax Error\n * 5. If the variable is uppercase return a FreeVar(ResolveAsComponentHead)\n * 6. Otherwise, return `'ElementHead'`\n */\n classifyTag(variable, tail, loc) {\n let uppercase = isUpperCase(variable);\n let inScope = variable[0] === '@' || variable === 'this' || this.ctx.hasBinding(variable);\n if (this.ctx.strict && !inScope) {\n if (uppercase) {\n throw generateSyntaxError(\"Attempted to invoke a component that was not in scope in a strict mode template, `<\" + variable + \">`. If you wanted to create an element with that name, convert it to lowercase - `<\" + variable.toLowerCase() + \">`\", loc);\n }\n\n // In strict mode, values are always elements unless they are in scope\n return 'ElementHead';\n }\n\n // Since the parser handed us the HTML element name as a string, we need\n // to convert it into an ASTv1 path so it can be processed using the\n // expression normalizer.\n let isComponent = inScope || uppercase;\n let variableLoc = loc.sliceStartChars({\n skipStart: 1,\n chars: variable.length\n });\n let tailLength = tail.reduce((accum, part) => accum + 1 + part.length, 0);\n let pathEnd = variableLoc.getEnd().move(tailLength);\n let pathLoc = variableLoc.withEnd(pathEnd);\n if (isComponent) {\n let path = b.path({\n head: b.head(variable, variableLoc),\n tail,\n loc: pathLoc\n });\n let resolution = this.ctx.isLexicalVar(variable) ? {\n result: STRICT_RESOLUTION\n } : this.ctx.resolutionFor(path, ComponentSyntaxContext);\n if (resolution.result === 'error') {\n throw generateSyntaxError(\"You attempted to invoke a path (`<\" + resolution.path + \">`) but \" + resolution.head + \" was not in scope\", loc);\n }\n return new ExpressionNormalizer(this.ctx).normalize(path, resolution.result);\n } else {\n this.ctx.table.allocateFree(variable, STRICT_RESOLUTION);\n }\n\n // If the tag name wasn't a valid component but contained a `.`, it's\n // a syntax error.\n if (tail.length > 0) {\n throw generateSyntaxError(\"You used \" + variable + \".\" + tail.join('.') + \" as a tag name, but \" + variable + \" is not in scope\", loc);\n }\n return 'ElementHead';\n }\n get expr() {\n return new ExpressionNormalizer(this.ctx);\n }\n }\n class Children {\n constructor(loc, children, block) {\n this.namedBlocks = void 0;\n this.hasSemanticContent = void 0;\n this.nonBlockChildren = void 0;\n this.loc = loc;\n this.children = children;\n this.block = block;\n this.namedBlocks = children.filter(c => c instanceof NamedBlock);\n this.hasSemanticContent = Boolean(children.filter(c => {\n if (c instanceof NamedBlock) {\n return false;\n }\n switch (c.type) {\n case 'GlimmerComment':\n case 'HtmlComment':\n return false;\n case 'HtmlText':\n return !/^\\s*$/u.test(c.chars);\n default:\n return true;\n }\n }).length);\n this.nonBlockChildren = children.filter(c => !(c instanceof NamedBlock));\n }\n }\n class TemplateChildren extends Children {\n assertTemplate(table) {\n if ((0, _util.isPresentArray)(this.namedBlocks)) {\n throw generateSyntaxError(\"Unexpected named block at the top-level of a template\", this.loc);\n }\n return this.block.builder.template(table, this.nonBlockChildren, this.block.loc(this.loc));\n }\n }\n class BlockChildren extends Children {\n assertBlock(table) {\n if ((0, _util.isPresentArray)(this.namedBlocks)) {\n throw generateSyntaxError(\"Unexpected named block nested in a normal block\", this.loc);\n }\n return this.block.builder.block(table, this.nonBlockChildren, this.loc);\n }\n }\n class ElementChildren extends Children {\n constructor(el, loc, children, block) {\n super(loc, children, block);\n this.el = el;\n }\n assertNamedBlock(name, table) {\n if (this.el.base.selfClosing) {\n throw generateSyntaxError(\"<:\" + name.chars + \"/> is not a valid named block: named blocks cannot be self-closing\", this.loc);\n }\n if ((0, _util.isPresentArray)(this.namedBlocks)) {\n throw generateSyntaxError(\"Unexpected named block inside <:\" + name.chars + \"> named block: named blocks cannot contain nested named blocks\", this.loc);\n }\n if (!isLowerCase(name.chars)) {\n throw generateSyntaxError(\"<:\" + name.chars + \"> is not a valid named block, and named blocks must begin with a lowercase letter\", this.loc);\n }\n if (this.el.base.attrs.length > 0 || this.el.base.componentArgs.length > 0 || this.el.base.modifiers.length > 0) {\n throw generateSyntaxError(\"named block <:\" + name.chars + \"> cannot have attributes, arguments, or modifiers\", this.loc);\n }\n let offsets = SpanList.range(this.nonBlockChildren, this.loc);\n return this.block.builder.namedBlock(name, this.block.builder.block(table, this.nonBlockChildren, offsets), this.loc);\n }\n assertElement(name, hasBlockParams) {\n if (hasBlockParams) {\n throw generateSyntaxError(\"Unexpected block params in <\" + name + \">: simple elements cannot have block params\", this.loc);\n }\n if ((0, _util.isPresentArray)(this.namedBlocks)) {\n let names = this.namedBlocks.map(b => b.name);\n if (names.length === 1) {\n throw generateSyntaxError(\"Unexpected named block <:foo> inside <\" + name.chars + \"> HTML element\", this.loc);\n } else {\n let printedNames = names.map(n => \"<:\" + n.chars + \">\").join(', ');\n throw generateSyntaxError(\"Unexpected named blocks inside <\" + name.chars + \"> HTML element (\" + printedNames + \")\", this.loc);\n }\n }\n return this.el.simple(name, this.nonBlockChildren, this.loc);\n }\n assertComponent(name, table, hasBlockParams) {\n if ((0, _util.isPresentArray)(this.namedBlocks) && this.hasSemanticContent) {\n throw generateSyntaxError(\"Unexpected content inside <\" + name + \"> component invocation: when using named blocks, the tag cannot contain other content\", this.loc);\n }\n if ((0, _util.isPresentArray)(this.namedBlocks)) {\n if (hasBlockParams) {\n throw generateSyntaxError(\"Unexpected block params list on <\" + name + \"> component invocation: when passing named blocks, the invocation tag cannot take block params\", this.loc);\n }\n let seenNames = new Set();\n for (let block of this.namedBlocks) {\n let name = block.name.chars;\n if (seenNames.has(name)) {\n throw generateSyntaxError(\"Component had two named blocks with the same name, `<:\" + name + \">`. Only one block with a given name may be passed\", this.loc);\n }\n if (name === 'inverse' && seenNames.has('else') || name === 'else' && seenNames.has('inverse')) {\n throw generateSyntaxError(\"Component has both <:else> and <:inverse> block. <:inverse> is an alias for <:else>\", this.loc);\n }\n seenNames.add(name);\n }\n return this.namedBlocks;\n } else {\n return [this.block.builder.namedBlock(SourceSlice.synthetic('default'), this.block.builder.block(table, this.nonBlockChildren, this.loc), this.loc)];\n }\n }\n }\n function printPath(node) {\n if (node.type !== 'PathExpression' && node.path.type === 'PathExpression') {\n return printPath(node.path);\n } else {\n return new Printer({\n entityEncoding: 'raw'\n }).print(node);\n }\n }\n function printHead(node) {\n if (node.type === 'PathExpression') {\n switch (node.head.type) {\n case 'AtHead':\n case 'VarHead':\n return node.head.name;\n case 'ThisHead':\n return 'this';\n }\n } else if (node.path.type === 'PathExpression') {\n return printHead(node.path);\n } else {\n return new Printer({\n entityEncoding: 'raw'\n }).print(node);\n }\n }\n});","define(\"@glimmer/util\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.TEXT_NODE = _exports.Stack = _exports.SERIALIZATION_FIRST_NODE_STRING = _exports.RAW_NODE = _exports.NS_XMLNS = _exports.NS_XML = _exports.NS_XLINK = _exports.NS_SVG = _exports.NS_MATHML = _exports.NS_HTML = _exports.LOGGER = _exports.LOCAL_LOGGER = _exports.ImmediateConstants = _exports.INSERT_BEFORE_END = _exports.INSERT_BEFORE_BEGIN = _exports.INSERT_AFTER_END = _exports.INSERT_AFTER_BEGIN = _exports.EMPTY_STRING_ARRAY = _exports.EMPTY_NUMBER_ARRAY = _exports.EMPTY_ARRAY = _exports.ELEMENT_NODE = _exports.DOCUMENT_TYPE_NODE = _exports.DOCUMENT_NODE = _exports.DOCUMENT_FRAGMENT_NODE = _exports.COMMENT_NODE = void 0;\n _exports.arrayToOption = arrayToOption;\n _exports.asPresentArray = asPresentArray;\n _exports.assert = debugAssert;\n _exports.assertNever = assertNever;\n _exports.assertPresent = assertPresent;\n _exports.assertPresentArray = assertPresentArray;\n _exports.beginTestSteps = _exports.assign = void 0;\n _exports.buildUntouchableThis = buildUntouchableThis;\n _exports.castToBrowser = castToBrowser;\n _exports.castToSimple = castToSimple;\n _exports.checkNode = checkBrowserNode;\n _exports.clearElement = clearElement;\n _exports.constants = constants;\n _exports.debugToString = void 0;\n _exports.decodeHandle = decodeHandle;\n _exports.decodeImmediate = decodeImmediate;\n _exports.decodeNegative = decodeNegative;\n _exports.decodePositive = decodePositive;\n _exports.deprecate = deprecate;\n _exports.dict = dict;\n _exports.emptyArray = emptyArray;\n _exports.encodeHandle = encodeHandle;\n _exports.encodeImmediate = encodeImmediate;\n _exports.encodeNegative = encodeNegative;\n _exports.encodePositive = encodePositive;\n _exports.endTestSteps = void 0;\n _exports.entries = entries;\n _exports.enumerate = enumerate;\n _exports.exhausted = exhausted;\n _exports.expect = expect;\n _exports.extractHandle = extractHandle;\n _exports.getFirst = getFirst;\n _exports.getLast = getLast;\n _exports.ifPresent = ifPresent;\n _exports.intern = intern;\n _exports.isDict = isDict;\n _exports.isElement = isElement;\n _exports.isEmptyArray = isEmptyArray;\n _exports.isErrHandle = isErrHandle;\n _exports.isHandle = isHandle;\n _exports.isNonPrimitiveHandle = isNonPrimitiveHandle;\n _exports.isObject = isObject;\n _exports.isOkHandle = isOkHandle;\n _exports.isPresent = isPresent;\n _exports.isPresentArray = isPresentArray;\n _exports.isSerializationFirstNode = isSerializationFirstNode;\n _exports.isSimpleElement = isSimpleElement;\n _exports.isSmallInt = isSmallInt;\n _exports.keys = keys;\n _exports.logStep = void 0;\n _exports.mapPresentArray = mapPresentArray;\n _exports.reverse = reverse;\n _exports.strip = strip;\n _exports.tuple = void 0;\n _exports.unreachable = unreachable;\n _exports.unwrap = unwrap;\n _exports.unwrapHandle = unwrapHandle;\n _exports.unwrapTemplate = unwrapTemplate;\n _exports.values = values;\n _exports.verifySteps = void 0;\n const EMPTY_ARRAY = _exports.EMPTY_ARRAY = Object.freeze([]);\n function emptyArray() {\n return EMPTY_ARRAY;\n }\n const EMPTY_STRING_ARRAY = _exports.EMPTY_STRING_ARRAY = emptyArray();\n const EMPTY_NUMBER_ARRAY = _exports.EMPTY_NUMBER_ARRAY = emptyArray();\n\n /**\n * This function returns `true` if the input array is the special empty array sentinel,\n * which is sometimes used for optimizations.\n */\n function isEmptyArray(input) {\n return input === EMPTY_ARRAY;\n }\n function* reverse(input) {\n for (let i = input.length - 1; i >= 0; i--) {\n yield input[i];\n }\n }\n function* enumerate(input) {\n let i = 0;\n for (const item of input) {\n yield [i++, item];\n }\n }\n\n // import Logger from './logger';\n\n // let alreadyWarned = false;\n\n function debugAssert(test, msg) {\n // if (!alreadyWarned) {\n // alreadyWarned = true;\n // Logger.warn(\"Don't leave debug assertions on in public builds\");\n // }\n\n if (!test) {\n throw new Error(msg || 'assertion failure');\n }\n }\n function deprecate(desc) {\n LOCAL_LOGGER.warn(\"DEPRECATION: \" + desc);\n }\n function keys(obj) {\n return Object.keys(obj);\n }\n function unwrap(val) {\n if (val === null || val === undefined) throw new Error(\"Expected value to be present\");\n return val;\n }\n function expect(val, message) {\n if (val === null || val === undefined) throw new Error(message);\n return val;\n }\n function unreachable(message) {\n if (message === void 0) {\n message = 'unreachable';\n }\n return new Error(message);\n }\n function exhausted(value) {\n throw new Error(\"Exhausted \" + String(value));\n }\n const tuple = function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n return args;\n };\n _exports.tuple = tuple;\n function isPresent(value) {\n return value !== null && value !== undefined;\n }\n function assertPresent(value, message) {\n if (!isPresent(value)) {\n throw new Error(\"Expected present, got \" + (typeof value === 'string' ? value : message));\n }\n }\n function isPresentArray(list) {\n return list.length > 0;\n }\n function ifPresent(list, ifPresent, otherwise) {\n if (isPresentArray(list)) {\n return ifPresent(list);\n } else {\n return otherwise();\n }\n }\n function arrayToOption(list) {\n if (isPresentArray(list)) {\n return list;\n } else {\n return null;\n }\n }\n function assertPresentArray(list, message) {\n if (message === void 0) {\n message = \"unexpected empty list\";\n }\n if (!isPresentArray(list)) {\n throw new Error(message);\n }\n }\n function asPresentArray(list, message) {\n if (message === void 0) {\n message = \"unexpected empty list\";\n }\n assertPresentArray(list, message);\n return list;\n }\n function getLast(list) {\n return list.length === 0 ? undefined : list[list.length - 1];\n }\n function getFirst(list) {\n return list.length === 0 ? undefined : list[0];\n }\n function mapPresentArray(list, mapper) {\n if (list === null) {\n return null;\n }\n let out = [];\n for (let item of list) {\n out.push(mapper(item));\n }\n return out;\n }\n function dict() {\n return Object.create(null);\n }\n function isDict(u) {\n return u !== null && u !== undefined;\n }\n function isObject(u) {\n return typeof u === 'function' || typeof u === 'object' && u !== null;\n }\n class StackImpl {\n constructor(values) {\n if (values === void 0) {\n values = [];\n }\n this.stack = void 0;\n this.current = null;\n this.stack = values;\n }\n get size() {\n return this.stack.length;\n }\n push(item) {\n this.current = item;\n this.stack.push(item);\n }\n pop() {\n var _getLast;\n let item = this.stack.pop();\n this.current = (_getLast = getLast(this.stack)) != null ? _getLast : null;\n return item === undefined ? null : item;\n }\n nth(from) {\n let len = this.stack.length;\n return len < from ? null : unwrap(this.stack[len - from]);\n }\n isEmpty() {\n return this.stack.length === 0;\n }\n toArray() {\n return this.stack;\n }\n }\n\n /// <reference types=\"qunit\" />\n _exports.Stack = StackImpl;\n let beginTestSteps = _exports.beginTestSteps = void 0;\n let endTestSteps = _exports.endTestSteps = void 0;\n let verifySteps = _exports.verifySteps = void 0;\n let logStep = _exports.logStep = void 0;\n let debugToString;\n if (true /* DEBUG */) {\n let getFunctionName = fn => {\n let functionName = fn.name;\n if (functionName === undefined) {\n let match = /function (\\w+)\\s*\\(/u.exec(String(fn));\n functionName = match && match[1] || '';\n }\n return functionName.replace(/^bound /u, '');\n };\n let getObjectName = obj => {\n let name;\n let className;\n if (obj.constructor && typeof obj.constructor === 'function') {\n className = getFunctionName(obj.constructor);\n }\n if ('toString' in obj && obj.toString !== Object.prototype.toString && obj.toString !== Function.prototype.toString) {\n name = obj.toString();\n }\n\n // If the class has a decent looking name, and the `toString` is one of the\n // default Ember toStrings, replace the constructor portion of the toString\n // with the class name. We check the length of the class name to prevent doing\n // this when the value is minified.\n if (name && /<.*:ember\\d+>/u.test(name) && className && className[0] !== '_' && className.length > 2 && className !== 'Class') {\n return name.replace(/<.*:/u, \"<\" + className + \":\");\n }\n return name || className;\n };\n let getPrimitiveName = value => {\n return String(value);\n };\n debugToString = value => {\n if (typeof value === 'function') {\n return getFunctionName(value) || \"(unknown function)\";\n } else if (typeof value === 'object' && value !== null) {\n return getObjectName(value) || \"(unknown object)\";\n } else {\n return getPrimitiveName(value);\n }\n };\n }\n var debugToString$1 = _exports.debugToString = debugToString;\n function clearElement(parent) {\n let current = parent.firstChild;\n while (current) {\n let next = current.nextSibling;\n parent.removeChild(current);\n current = next;\n }\n }\n const RAW_NODE = _exports.RAW_NODE = -1;\n const ELEMENT_NODE = _exports.ELEMENT_NODE = 1;\n const TEXT_NODE = _exports.TEXT_NODE = 3;\n const COMMENT_NODE = _exports.COMMENT_NODE = 8;\n const DOCUMENT_NODE = _exports.DOCUMENT_NODE = 9;\n const DOCUMENT_TYPE_NODE = _exports.DOCUMENT_TYPE_NODE = 10;\n const DOCUMENT_FRAGMENT_NODE = _exports.DOCUMENT_FRAGMENT_NODE = 11;\n const NS_HTML = _exports.NS_HTML = 'http://www.w3.org/1999/xhtml';\n const NS_MATHML = _exports.NS_MATHML = 'http://www.w3.org/1998/Math/MathML';\n const NS_SVG = _exports.NS_SVG = 'http://www.w3.org/2000/svg';\n const NS_XLINK = _exports.NS_XLINK = 'http://www.w3.org/1999/xlink';\n const NS_XML = _exports.NS_XML = 'http://www.w3.org/XML/1998/namespace';\n const NS_XMLNS = _exports.NS_XMLNS = 'http://www.w3.org/2000/xmlns/';\n const INSERT_BEFORE_BEGIN = _exports.INSERT_BEFORE_BEGIN = 'beforebegin';\n const INSERT_AFTER_BEGIN = _exports.INSERT_AFTER_BEGIN = 'afterbegin';\n const INSERT_BEFORE_END = _exports.INSERT_BEFORE_END = 'beforeend';\n const INSERT_AFTER_END = _exports.INSERT_AFTER_END = 'afterend';\n\n /*\n Encoding notes\n \n We use 30 bit integers for encoding, so that we don't ever encode a non-SMI\n integer to push on the stack.\n \n Handles are >= 0\n Immediates are < 0\n \n True, False, Undefined and Null are pushed as handles into the symbol table,\n with well known handles (0, 1, 2, 3)\n \n The negative space is divided into positives and negatives. Positives are\n higher numbers (-1, -2, -3, etc), negatives are lower.\n \n We only encode immediates for two reasons:\n \n 1. To transfer over the wire, so they're smaller in general\n 2. When pushing values onto the stack from the low level/inner VM, which may\n be converted into WASM one day.\n \n This allows the low-level VM to always use SMIs, and to minimize using JS\n values via handles for things like the stack pointer and frame pointer.\n Externally, most code pushes values as JS values, except when being pulled\n from the append byte code where it was already encoded.\n \n Logically, this is because the low level VM doesn't really care about these\n higher level values. For instance, the result of a userland helper may be a\n number, or a boolean, or undefined/null, but it's extra work to figure that\n out and push it correctly, vs. just pushing the value as a JS value with a\n handle.\n \n Note: The details could change here in the future, this is just the current\n strategy.\n */\n\n let ImmediateConstants = _exports.ImmediateConstants = /*#__PURE__*/function (ImmediateConstants) {\n ImmediateConstants[ImmediateConstants[\"MAX_SMI\"] = 1073741823] = \"MAX_SMI\";\n ImmediateConstants[ImmediateConstants[\"MIN_SMI\"] = -1073741824] = \"MIN_SMI\";\n ImmediateConstants[ImmediateConstants[\"SIGN_BIT\"] = -536870913] = \"SIGN_BIT\";\n ImmediateConstants[ImmediateConstants[\"MAX_INT\"] = 536870911] = \"MAX_INT\";\n ImmediateConstants[ImmediateConstants[\"MIN_INT\"] = -536870912] = \"MIN_INT\";\n ImmediateConstants[ImmediateConstants[\"FALSE_HANDLE\"] = 0] = \"FALSE_HANDLE\";\n ImmediateConstants[ImmediateConstants[\"TRUE_HANDLE\"] = 1] = \"TRUE_HANDLE\";\n ImmediateConstants[ImmediateConstants[\"NULL_HANDLE\"] = 2] = \"NULL_HANDLE\";\n ImmediateConstants[ImmediateConstants[\"UNDEFINED_HANDLE\"] = 3] = \"UNDEFINED_HANDLE\";\n ImmediateConstants[ImmediateConstants[\"ENCODED_FALSE_HANDLE\"] = 0] = \"ENCODED_FALSE_HANDLE\";\n ImmediateConstants[ImmediateConstants[\"ENCODED_TRUE_HANDLE\"] = 1] = \"ENCODED_TRUE_HANDLE\";\n ImmediateConstants[ImmediateConstants[\"ENCODED_NULL_HANDLE\"] = 2] = \"ENCODED_NULL_HANDLE\";\n ImmediateConstants[ImmediateConstants[\"ENCODED_UNDEFINED_HANDLE\"] = 3] = \"ENCODED_UNDEFINED_HANDLE\";\n return ImmediateConstants;\n }({});\n function isHandle(value) {\n return value >= 0;\n }\n function isNonPrimitiveHandle(value) {\n return value > ImmediateConstants.ENCODED_UNDEFINED_HANDLE;\n }\n function constants() {\n for (var _len2 = arguments.length, values = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n values[_key2] = arguments[_key2];\n }\n return [false, true, null, undefined, ...values];\n }\n function isSmallInt(value) {\n return value % 1 === 0 && value <= ImmediateConstants.MAX_INT && value >= ImmediateConstants.MIN_INT;\n }\n function encodeNegative(num) {\n return num & ImmediateConstants.SIGN_BIT;\n }\n function decodeNegative(num) {\n return num | ~ImmediateConstants.SIGN_BIT;\n }\n function encodePositive(num) {\n return ~num;\n }\n function decodePositive(num) {\n return ~num;\n }\n function encodeHandle(num) {\n return num;\n }\n function decodeHandle(num) {\n return num;\n }\n function encodeImmediate(num) {\n num |= 0;\n return num < 0 ? encodeNegative(num) : encodePositive(num);\n }\n function decodeImmediate(num) {\n num |= 0;\n return num > ImmediateConstants.SIGN_BIT ? decodePositive(num) : decodeNegative(num);\n }\n [1, -1].forEach(x => decodeImmediate(encodeImmediate(x)));\n\n /**\n Strongly hint runtimes to intern the provided string.\n \n When do I need to use this function?\n \n For the most part, never. Pre-mature optimization is bad, and often the\n runtime does exactly what you need it to, and more often the trade-off isn't\n worth it.\n \n Why?\n \n Runtimes store strings in at least 2 different representations:\n Ropes and Symbols (interned strings). The Rope provides a memory efficient\n data-structure for strings created from concatenation or some other string\n manipulation like splitting.\n \n Unfortunately checking equality of different ropes can be quite costly as\n runtimes must resort to clever string comparison algorithms. These\n algorithms typically cost in proportion to the length of the string.\n Luckily, this is where the Symbols (interned strings) shine. As Symbols are\n unique by their string content, equality checks can be done by pointer\n comparison.\n \n How do I know if my string is a rope or symbol?\n \n Typically (warning general sweeping statement, but truthy in runtimes at\n present) static strings created as part of the JS source are interned.\n Strings often used for comparisons can be interned at runtime if some\n criteria are met. One of these criteria can be the size of the entire rope.\n For example, in chrome 38 a rope longer then 12 characters will not\n intern, nor will segments of that rope.\n \n Some numbers: http://jsperf.com/eval-vs-keys/8\n \n Known Trick™\n \n @private\n @return {String} interned version of the provided string\n */\n function intern(str) {\n let obj = {};\n obj[str] = 1;\n for (let key in obj) {\n if (key === str) {\n return key;\n }\n }\n return str;\n }\n const SERIALIZATION_FIRST_NODE_STRING = _exports.SERIALIZATION_FIRST_NODE_STRING = '%+b:0%';\n function isSerializationFirstNode(node) {\n return node.nodeValue === SERIALIZATION_FIRST_NODE_STRING;\n }\n let assign = _exports.assign = Object.assign;\n function values(obj) {\n return Object.values(obj);\n }\n function entries(dict) {\n return Object.entries(dict);\n }\n function castToSimple(node) {\n if (isDocument(node)) {\n return node;\n } else if (isSimpleElement(node)) {\n return node;\n } else {\n return node;\n }\n }\n\n // If passed a document, verify we're in the browser and return it as a Document\n\n // If we don't know what this is, but the check requires it to be an element,\n // the cast will mandate that it's a browser element\n // Finally, if it's a more generic check, the cast will mandate that it's a\n // browser node and return a BrowserNodeUtils corresponding to the check\n function castToBrowser(node, sugaryCheck) {\n if (node === null || node === undefined) {\n return null;\n }\n if (typeof document === undefined) {\n throw new Error('Attempted to cast to a browser node in a non-browser context');\n }\n if (isDocument(node)) {\n return node;\n }\n if (node.ownerDocument !== document) {\n throw new Error('Attempted to cast to a browser node with a node that was not created from this document');\n }\n return checkBrowserNode(node, sugaryCheck);\n }\n function checkError(from, check) {\n return new Error(\"cannot cast a \" + from + \" into \" + String(check));\n }\n function isDocument(node) {\n return node.nodeType === DOCUMENT_NODE;\n }\n function isSimpleElement(node) {\n return (node == null ? void 0 : node.nodeType) === ELEMENT_NODE;\n }\n function isElement(node) {\n return (node == null ? void 0 : node.nodeType) === ELEMENT_NODE && node instanceof Element;\n }\n function checkBrowserNode(node, check) {\n let isMatch = false;\n if (node !== null) {\n if (typeof check === 'string') {\n isMatch = stringCheckNode(node, check);\n } else if (Array.isArray(check)) {\n isMatch = check.some(c => stringCheckNode(node, c));\n } else {\n throw unreachable();\n }\n }\n if (isMatch && node instanceof Node) {\n return node;\n } else {\n var _node$constructor$nam, _node$constructor;\n throw checkError(\"SimpleElement(\" + ((_node$constructor$nam = node == null || (_node$constructor = node.constructor) == null ? void 0 : _node$constructor.name) != null ? _node$constructor$nam : 'null') + \")\", check);\n }\n }\n function stringCheckNode(node, check) {\n switch (check) {\n case 'NODE':\n return true;\n case 'HTML':\n return node instanceof HTMLElement;\n case 'SVG':\n return node instanceof SVGElement;\n case 'ELEMENT':\n return node instanceof Element;\n default:\n if (check.toUpperCase() === check) {\n throw new Error(\"BUG: this code is missing handling for a generic node type\");\n }\n return node instanceof Element && node.tagName.toLowerCase() === check;\n }\n }\n function strip(strings) {\n let out = '';\n for (var _len3 = arguments.length, args = new Array(_len3 > 1 ? _len3 - 1 : 0), _key3 = 1; _key3 < _len3; _key3++) {\n args[_key3 - 1] = arguments[_key3];\n }\n for (const [i, string] of enumerate(strings)) {\n let dynamic = args[i] !== undefined ? String(args[i]) : '';\n out += \"\" + string + dynamic;\n }\n let lines = out.split('\\n');\n while (isPresentArray(lines) && /^\\s*$/u.test(getFirst(lines))) {\n lines.shift();\n }\n while (isPresentArray(lines) && /^\\s*$/u.test(getLast(lines))) {\n lines.pop();\n }\n let min = Infinity;\n for (let line of lines) {\n let leading = /^\\s*/u.exec(line)[0].length;\n min = Math.min(min, leading);\n }\n let stripped = [];\n for (let line of lines) {\n stripped.push(line.slice(min));\n }\n return stripped.join('\\n');\n }\n function unwrapHandle(handle) {\n if (typeof handle === 'number') {\n return handle;\n } else {\n let error = handle.errors[0];\n throw new Error(\"Compile Error: \" + error.problem + \" @ \" + error.span.start + \"..\" + error.span.end);\n }\n }\n function unwrapTemplate(template) {\n if (template.result === 'error') {\n throw new Error(\"Compile Error: \" + template.problem + \" @ \" + template.span.start + \"..\" + template.span.end);\n }\n return template;\n }\n function extractHandle(handle) {\n if (typeof handle === 'number') {\n return handle;\n } else {\n return handle.handle;\n }\n }\n function isOkHandle(handle) {\n return typeof handle === 'number';\n }\n function isErrHandle(handle) {\n return typeof handle === 'number';\n }\n function buildUntouchableThis(source) {\n let context = null;\n if (true /* DEBUG */) {\n let assertOnProperty = property => {\n let access = typeof property === 'symbol' || typeof property === 'number' ? \"[\" + String(property) + \"]\" : \".\" + property;\n throw new Error(\"You accessed `this\" + access + \"` from a function passed to the \" + source + \", but the function itself was not bound to a valid `this` context. Consider updating to use a bound function (for instance, use an arrow function, `() => {}`).\");\n };\n context = new Proxy({}, {\n get(_target, property) {\n assertOnProperty(property);\n },\n set(_target, property) {\n assertOnProperty(property);\n return false;\n },\n has(_target, property) {\n assertOnProperty(property);\n return false;\n }\n });\n }\n return context;\n }\n\n /**\n * This constant exists to make it easier to differentiate normal logs from\n * errant console.logs. LOCAL_LOGGER should only be used inside a\n * LOCAL_SHOULD_LOG check.\n *\n * It does not alleviate the need to check LOCAL_SHOULD_LOG, which is used\n * for stripping.\n */\n const LOCAL_LOGGER = _exports.LOCAL_LOGGER = console;\n\n /**\n * This constant exists to make it easier to differentiate normal logs from\n * errant console.logs. LOGGER can be used outside of LOCAL_SHOULD_LOG checks,\n * and is meant to be used in the rare situation where a console.* call is\n * actually appropriate.\n */\n const LOGGER = _exports.LOGGER = console;\n function assertNever(value, desc) {\n if (desc === void 0) {\n desc = 'unexpected unreachable branch';\n }\n LOGGER.log('unreachable', value);\n LOGGER.log(desc + \" :: \" + JSON.stringify(value) + \" (\" + value + \")\");\n throw new Error(\"code reached unreachable\");\n }\n});","define(\"@glimmer/vm\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.TemporaryRegister = _exports.TYPE_SIZE = _exports.TYPE_MASK = _exports.SavedRegister = _exports.Op = _exports.OPERAND_LEN_MASK = _exports.MachineRegister = _exports.MachineOp = _exports.MAX_SIZE = _exports.MACHINE_MASK = _exports.InternalComponentCapability = _exports.InternalComponentCapabilities = _exports.CurriedTypes = _exports.CurriedType = _exports.ContentType = _exports.ARG_SHIFT = _exports.$v0 = _exports.$t1 = _exports.$t0 = _exports.$sp = _exports.$s1 = _exports.$s0 = _exports.$ra = _exports.$pc = _exports.$fp = void 0;\n _exports.isLowLevelRegister = isLowLevelRegister;\n _exports.isMachineOp = isMachineOp;\n _exports.isOp = isOp;\n const ContentType = _exports.ContentType = {\n Component: 0,\n Helper: 1,\n String: 2,\n Empty: 3,\n SafeString: 4,\n Fragment: 5,\n Node: 6,\n Other: 8\n };\n const CurriedTypes = _exports.CurriedTypes = _exports.CurriedType = {\n Component: 0,\n Helper: 1,\n Modifier: 2\n };\n const InternalComponentCapabilities = _exports.InternalComponentCapability = _exports.InternalComponentCapabilities = {\n Empty: 0,\n dynamicLayout: 0b0000000000001,\n dynamicTag: 0b0000000000010,\n prepareArgs: 0b0000000000100,\n createArgs: 0b0000000001000,\n attributeHook: 0b0000000010000,\n elementHook: 0b0000000100000,\n dynamicScope: 0b0000001000000,\n createCaller: 0b0000010000000,\n updateHook: 0b0000100000000,\n createInstance: 0b0001000000000,\n wrapped: 0b0010000000000,\n willDestroy: 0b0100000000000,\n hasSubOwner: 0b1000000000000\n };\n const ARG_SHIFT = _exports.ARG_SHIFT = 8;\n const MAX_SIZE = _exports.MAX_SIZE = 0x7fffffff;\n const TYPE_SIZE = _exports.TYPE_SIZE = 0b11111111;\n const TYPE_MASK = _exports.TYPE_MASK = 0b00000000000000000000000011111111;\n const OPERAND_LEN_MASK = _exports.OPERAND_LEN_MASK = 0b00000000000000000000001100000000;\n const MACHINE_MASK = _exports.MACHINE_MASK = 0b00000000000000000000010000000000;\n const MachineOp = _exports.MachineOp = {\n PushFrame: 0,\n PopFrame: 1,\n InvokeVirtual: 2,\n InvokeStatic: 3,\n Jump: 4,\n Return: 5,\n ReturnTo: 6,\n Size: 7\n };\n const Op = _exports.Op = {\n Helper: 16,\n SetNamedVariables: 17,\n SetBlocks: 18,\n SetVariable: 19,\n SetBlock: 20,\n GetVariable: 21,\n GetProperty: 22,\n GetBlock: 23,\n SpreadBlock: 24,\n HasBlock: 25,\n HasBlockParams: 26,\n Concat: 27,\n Constant: 28,\n ConstantReference: 29,\n Primitive: 30,\n PrimitiveReference: 31,\n ReifyU32: 32,\n Dup: 33,\n Pop: 34,\n Load: 35,\n Fetch: 36,\n RootScope: 37,\n VirtualRootScope: 38,\n ChildScope: 39,\n PopScope: 40,\n Text: 41,\n Comment: 42,\n AppendHTML: 43,\n AppendSafeHTML: 44,\n AppendDocumentFragment: 45,\n AppendNode: 46,\n AppendText: 47,\n OpenElement: 48,\n OpenDynamicElement: 49,\n PushRemoteElement: 50,\n StaticAttr: 51,\n DynamicAttr: 52,\n ComponentAttr: 53,\n FlushElement: 54,\n CloseElement: 55,\n PopRemoteElement: 56,\n Modifier: 57,\n BindDynamicScope: 58,\n PushDynamicScope: 59,\n PopDynamicScope: 60,\n CompileBlock: 61,\n PushBlockScope: 62,\n PushSymbolTable: 63,\n InvokeYield: 64,\n JumpIf: 65,\n JumpUnless: 66,\n JumpEq: 67,\n AssertSame: 68,\n Enter: 69,\n Exit: 70,\n ToBoolean: 71,\n EnterList: 72,\n ExitList: 73,\n Iterate: 74,\n Main: 75,\n ContentType: 76,\n Curry: 77,\n PushComponentDefinition: 78,\n PushDynamicComponentInstance: 79,\n ResolveDynamicComponent: 80,\n ResolveCurriedComponent: 81,\n PushArgs: 82,\n PushEmptyArgs: 83,\n PopArgs: 84,\n PrepareArgs: 85,\n CaptureArgs: 86,\n CreateComponent: 87,\n RegisterComponentDestructor: 88,\n PutComponentOperations: 89,\n GetComponentSelf: 90,\n GetComponentTagName: 91,\n GetComponentLayout: 92,\n BindEvalScope: 93,\n SetupForEval: 94,\n PopulateLayout: 95,\n InvokeComponentLayout: 96,\n BeginComponentTransaction: 97,\n CommitComponentTransaction: 98,\n DidCreateElement: 99,\n DidRenderLayout: 100,\n ResolveMaybeLocal: 102,\n Debugger: 103,\n Size: 104,\n StaticComponentAttr: 105,\n DynamicContentType: 106,\n DynamicHelper: 107,\n DynamicModifier: 108,\n IfInline: 109,\n Not: 110,\n GetDynamicVar: 111,\n Log: 112\n };\n function isMachineOp(value) {\n return value >= 0 && value <= 15;\n }\n function isOp(value) {\n return value >= 16;\n }\n\n /**\n * Registers\n *\n * For the most part, these follows MIPS naming conventions, however the\n * register numbers are different.\n */\n\n // $0 or $pc (program counter): pointer into `program` for the next insturction; -1 means exit\n const $pc = _exports.$pc = 0;\n // $1 or $ra (return address): pointer into `program` for the return\n const $ra = _exports.$ra = 1;\n // $2 or $fp (frame pointer): pointer into the `evalStack` for the base of the stack\n const $fp = _exports.$fp = 2;\n // $3 or $sp (stack pointer): pointer into the `evalStack` for the top of the stack\n const $sp = _exports.$sp = 3;\n // $4-$5 or $s0-$s1 (saved): callee saved general-purpose registers\n const $s0 = _exports.$s0 = 4;\n const $s1 = _exports.$s1 = 5;\n // $6-$7 or $t0-$t1 (temporaries): caller saved general-purpose registers\n const $t0 = _exports.$t0 = 6;\n const $t1 = _exports.$t1 = 7;\n // $8 or $v0 (return value)\n const $v0 = _exports.$v0 = 8;\n let MachineRegister = _exports.MachineRegister = /*#__PURE__*/function (MachineRegister) {\n MachineRegister[MachineRegister[\"pc\"] = 0] = \"pc\";\n MachineRegister[MachineRegister[\"ra\"] = 1] = \"ra\";\n MachineRegister[MachineRegister[\"fp\"] = 2] = \"fp\";\n MachineRegister[MachineRegister[\"sp\"] = 3] = \"sp\";\n return MachineRegister;\n }({});\n function isLowLevelRegister(register) {\n return register <= $sp;\n }\n let SavedRegister = _exports.SavedRegister = /*#__PURE__*/function (SavedRegister) {\n SavedRegister[SavedRegister[\"s0\"] = 4] = \"s0\";\n SavedRegister[SavedRegister[\"s1\"] = 5] = \"s1\";\n return SavedRegister;\n }({});\n let TemporaryRegister = _exports.TemporaryRegister = /*#__PURE__*/function (TemporaryRegister) {\n TemporaryRegister[TemporaryRegister[\"t0\"] = 6] = \"t0\";\n TemporaryRegister[TemporaryRegister[\"t1\"] = 7] = \"t1\";\n return TemporaryRegister;\n }({});\n});","define(\"@glimmer/wire-format\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.WellKnownTagNames = _exports.WellKnownAttrNames = _exports.VariableResolutionContext = _exports.SexpOpcodes = void 0;\n _exports.getStringFromValue = getStringFromValue;\n _exports.is = is;\n _exports.isArgument = isArgument;\n _exports.isAttribute = isAttribute;\n _exports.isGet = _exports.isFlushElement = void 0;\n _exports.isHelper = isHelper;\n _exports.isStringLiteral = isStringLiteral;\n const opcodes = _exports.SexpOpcodes = {\n Append: 1,\n TrustingAppend: 2,\n Comment: 3,\n Modifier: 4,\n StrictModifier: 5,\n Block: 6,\n StrictBlock: 7,\n Component: 8,\n OpenElement: 10,\n OpenElementWithSplat: 11,\n FlushElement: 12,\n CloseElement: 13,\n StaticAttr: 14,\n DynamicAttr: 15,\n ComponentAttr: 16,\n AttrSplat: 17,\n Yield: 18,\n DynamicArg: 20,\n StaticArg: 21,\n TrustingDynamicAttr: 22,\n TrustingComponentAttr: 23,\n StaticComponentAttr: 24,\n Debugger: 26,\n Undefined: 27,\n Call: 28,\n Concat: 29,\n GetSymbol: 30,\n GetLexicalSymbol: 32,\n GetStrictKeyword: 31,\n GetFreeAsComponentOrHelperHeadOrThisFallback: 34,\n GetFreeAsComponentOrHelperHead: 35,\n GetFreeAsHelperHeadOrThisFallback: 36,\n GetFreeAsDeprecatedHelperHeadOrThisFallback: 99,\n GetFreeAsHelperHead: 37,\n GetFreeAsModifierHead: 38,\n GetFreeAsComponentHead: 39,\n InElement: 40,\n If: 41,\n Each: 42,\n With: 43,\n Let: 44,\n WithDynamicVars: 45,\n InvokeComponent: 46,\n HasBlock: 48,\n HasBlockParams: 49,\n Curry: 50,\n Not: 51,\n IfInline: 52,\n GetDynamicVar: 53,\n Log: 54\n };\n\n // eslint-disable-next-line @typescript-eslint/naming-convention\n\n const resolution = _exports.VariableResolutionContext = {\n Strict: 0,\n AmbiguousAppend: 1,\n AmbiguousAppendInvoke: 2,\n AmbiguousInvoke: 3,\n ResolveAsCallHead: 5,\n ResolveAsModifierHead: 6,\n ResolveAsComponentHead: 7\n };\n const WellKnownAttrNames = _exports.WellKnownAttrNames = {\n class: 0,\n id: 1,\n value: 2,\n name: 3,\n type: 4,\n style: 5,\n href: 6\n };\n const WellKnownTagNames = _exports.WellKnownTagNames = {\n div: 0,\n span: 1,\n p: 2,\n a: 3\n };\n function is(variant) {\n return function (value) {\n return Array.isArray(value) && value[0] === variant;\n };\n }\n\n // Statements\n const isFlushElement = _exports.isFlushElement = is(opcodes.FlushElement);\n function isAttribute(val) {\n return val[0] === opcodes.StaticAttr || val[0] === opcodes.DynamicAttr || val[0] === opcodes.TrustingDynamicAttr || val[0] === opcodes.ComponentAttr || val[0] === opcodes.StaticComponentAttr || val[0] === opcodes.TrustingComponentAttr || val[0] === opcodes.AttrSplat || val[0] === opcodes.Modifier;\n }\n function isStringLiteral(expr) {\n return typeof expr === 'string';\n }\n function getStringFromValue(expr) {\n return expr;\n }\n function isArgument(val) {\n return val[0] === opcodes.StaticArg || val[0] === opcodes.DynamicArg;\n }\n function isHelper(expr) {\n return Array.isArray(expr) && expr[0] === opcodes.Call;\n }\n\n // Expressions\n const isGet = _exports.isGet = is(opcodes.GetSymbol);\n});","define(\"@handlebars/parser/index\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.Exception = Exception;\n _exports.PrintVisitor = PrintVisitor;\n _exports.Visitor = Visitor;\n _exports.WhitespaceControl = WhitespaceControl;\n _exports.parse = parse;\n _exports.parseWithoutProcessing = parseWithoutProcessing;\n _exports.parser = void 0;\n _exports.print = print;\n var errorProps = ['description', 'fileName', 'lineNumber', 'endLineNumber', 'message', 'name', 'number', 'stack'];\n function Exception(message, node) {\n var loc = node && node.loc,\n line,\n endLineNumber,\n column,\n endColumn;\n if (loc) {\n line = loc.start.line;\n endLineNumber = loc.end.line;\n column = loc.start.column;\n endColumn = loc.end.column;\n message += ' - ' + line + ':' + column;\n }\n var tmp = Error.prototype.constructor.call(this, message);\n // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.\n for (var idx = 0; idx < errorProps.length; idx++) {\n this[errorProps[idx]] = tmp[errorProps[idx]];\n }\n /* istanbul ignore else */\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, Exception);\n }\n try {\n if (loc) {\n this.lineNumber = line;\n this.endLineNumber = endLineNumber;\n // Work around issue under safari where we can't directly set the column value\n /* istanbul ignore next */\n if (Object.defineProperty) {\n Object.defineProperty(this, 'column', {\n value: column,\n enumerable: true\n });\n Object.defineProperty(this, 'endColumn', {\n value: endColumn,\n enumerable: true\n });\n } else {\n this.column = column;\n this.endColumn = endColumn;\n }\n }\n } catch (nop) {\n /* Ignore if the browser is very particular */\n }\n }\n Exception.prototype = new Error();\n function Visitor() {\n this.parents = [];\n }\n Visitor.prototype = {\n constructor: Visitor,\n mutating: false,\n // Visits a given value. If mutating, will replace the value if necessary.\n acceptKey: function (node, name) {\n var value = this.accept(node[name]);\n if (this.mutating) {\n // Hacky sanity check: This may have a few false positives for type for the helper\n // methods but will generally do the right thing without a lot of overhead.\n if (value && !Visitor.prototype[value.type]) {\n throw new Exception('Unexpected node type \"' + value.type + '\" found when accepting ' + name + ' on ' + node.type);\n }\n node[name] = value;\n }\n },\n // Performs an accept operation with added sanity check to ensure\n // required keys are not removed.\n acceptRequired: function (node, name) {\n this.acceptKey(node, name);\n if (!node[name]) {\n throw new Exception(node.type + ' requires ' + name);\n }\n },\n // Traverses a given array. If mutating, empty respnses will be removed\n // for child elements.\n acceptArray: function (array) {\n for (var i = 0, l = array.length; i < l; i++) {\n this.acceptKey(array, i);\n if (!array[i]) {\n array.splice(i, 1);\n i--;\n l--;\n }\n }\n },\n accept: function (object) {\n if (!object) {\n return;\n }\n /* istanbul ignore next: Sanity code */\n if (!this[object.type]) {\n throw new Exception('Unknown type: ' + object.type, object);\n }\n if (this.current) {\n this.parents.unshift(this.current);\n }\n this.current = object;\n var ret = this[object.type](object);\n this.current = this.parents.shift();\n if (!this.mutating || ret) {\n return ret;\n } else if (ret !== false) {\n return object;\n }\n },\n Program: function (program) {\n this.acceptArray(program.body);\n },\n MustacheStatement: visitSubExpression,\n Decorator: visitSubExpression,\n BlockStatement: visitBlock,\n DecoratorBlock: visitBlock,\n PartialStatement: visitPartial,\n PartialBlockStatement: function (partial) {\n visitPartial.call(this, partial);\n this.acceptKey(partial, 'program');\n },\n ContentStatement: function /* content */ () {},\n CommentStatement: function /* comment */ () {},\n SubExpression: visitSubExpression,\n PathExpression: function /* path */ () {},\n StringLiteral: function /* string */ () {},\n NumberLiteral: function /* number */ () {},\n BooleanLiteral: function /* bool */ () {},\n UndefinedLiteral: function /* literal */ () {},\n NullLiteral: function /* literal */ () {},\n Hash: function (hash) {\n this.acceptArray(hash.pairs);\n },\n HashPair: function (pair) {\n this.acceptRequired(pair, 'value');\n }\n };\n function visitSubExpression(mustache) {\n this.acceptRequired(mustache, 'path');\n this.acceptArray(mustache.params);\n this.acceptKey(mustache, 'hash');\n }\n function visitBlock(block) {\n visitSubExpression.call(this, block);\n this.acceptKey(block, 'program');\n this.acceptKey(block, 'inverse');\n }\n function visitPartial(partial) {\n this.acceptRequired(partial, 'name');\n this.acceptArray(partial.params);\n this.acceptKey(partial, 'hash');\n }\n function WhitespaceControl(options) {\n if (options === void 0) {\n options = {};\n }\n this.options = options;\n }\n WhitespaceControl.prototype = new Visitor();\n WhitespaceControl.prototype.Program = function (program) {\n var doStandalone = !this.options.ignoreStandalone;\n var isRoot = !this.isRootSeen;\n this.isRootSeen = true;\n var body = program.body;\n for (var i = 0, l = body.length; i < l; i++) {\n var current = body[i],\n strip = this.accept(current);\n if (!strip) {\n continue;\n }\n var _isPrevWhitespace = isPrevWhitespace(body, i, isRoot),\n _isNextWhitespace = isNextWhitespace(body, i, isRoot),\n openStandalone = strip.openStandalone && _isPrevWhitespace,\n closeStandalone = strip.closeStandalone && _isNextWhitespace,\n inlineStandalone = strip.inlineStandalone && _isPrevWhitespace && _isNextWhitespace;\n if (strip.close) {\n omitRight(body, i, true);\n }\n if (strip.open) {\n omitLeft(body, i, true);\n }\n if (doStandalone && inlineStandalone) {\n omitRight(body, i);\n if (omitLeft(body, i)) {\n // If we are on a standalone node, save the indent info for partials\n if (current.type === 'PartialStatement') {\n // Pull out the whitespace from the final line\n current.indent = /([ \\t]+$)/.exec(body[i - 1].original)[1];\n }\n }\n }\n if (doStandalone && openStandalone) {\n omitRight((current.program || current.inverse).body);\n // Strip out the previous content node if it's whitespace only\n omitLeft(body, i);\n }\n if (doStandalone && closeStandalone) {\n // Always strip the next node\n omitRight(body, i);\n omitLeft((current.inverse || current.program).body);\n }\n }\n return program;\n };\n WhitespaceControl.prototype.BlockStatement = WhitespaceControl.prototype.DecoratorBlock = WhitespaceControl.prototype.PartialBlockStatement = function (block) {\n this.accept(block.program);\n this.accept(block.inverse);\n // Find the inverse program that is involed with whitespace stripping.\n var program = block.program || block.inverse,\n inverse = block.program && block.inverse,\n firstInverse = inverse,\n lastInverse = inverse;\n if (inverse && inverse.chained) {\n firstInverse = inverse.body[0].program;\n // Walk the inverse chain to find the last inverse that is actually in the chain.\n while (lastInverse.chained) {\n lastInverse = lastInverse.body[lastInverse.body.length - 1].program;\n }\n }\n var strip = {\n open: block.openStrip.open,\n close: block.closeStrip.close,\n // Determine the standalone candiacy. Basically flag our content as being possibly standalone\n // so our parent can determine if we actually are standalone\n openStandalone: isNextWhitespace(program.body),\n closeStandalone: isPrevWhitespace((firstInverse || program).body)\n };\n if (block.openStrip.close) {\n omitRight(program.body, null, true);\n }\n if (inverse) {\n var inverseStrip = block.inverseStrip;\n if (inverseStrip.open) {\n omitLeft(program.body, null, true);\n }\n if (inverseStrip.close) {\n omitRight(firstInverse.body, null, true);\n }\n if (block.closeStrip.open) {\n omitLeft(lastInverse.body, null, true);\n }\n // Find standalone else statments\n if (!this.options.ignoreStandalone && isPrevWhitespace(program.body) && isNextWhitespace(firstInverse.body)) {\n omitLeft(program.body);\n omitRight(firstInverse.body);\n }\n } else if (block.closeStrip.open) {\n omitLeft(program.body, null, true);\n }\n return strip;\n };\n WhitespaceControl.prototype.Decorator = WhitespaceControl.prototype.MustacheStatement = function (mustache) {\n return mustache.strip;\n };\n WhitespaceControl.prototype.PartialStatement = WhitespaceControl.prototype.CommentStatement = function (node) {\n /* istanbul ignore next */\n var strip = node.strip || {};\n return {\n inlineStandalone: true,\n open: strip.open,\n close: strip.close\n };\n };\n function isPrevWhitespace(body, i, isRoot) {\n if (i === undefined) {\n i = body.length;\n }\n // Nodes that end with newlines are considered whitespace (but are special\n // cased for strip operations)\n var prev = body[i - 1],\n sibling = body[i - 2];\n if (!prev) {\n return isRoot;\n }\n if (prev.type === 'ContentStatement') {\n return (sibling || !isRoot ? /\\r?\\n\\s*?$/ : /(^|\\r?\\n)\\s*?$/).test(prev.original);\n }\n }\n function isNextWhitespace(body, i, isRoot) {\n if (i === undefined) {\n i = -1;\n }\n var next = body[i + 1],\n sibling = body[i + 2];\n if (!next) {\n return isRoot;\n }\n if (next.type === 'ContentStatement') {\n return (sibling || !isRoot ? /^\\s*?\\r?\\n/ : /^\\s*?(\\r?\\n|$)/).test(next.original);\n }\n }\n // Marks the node to the right of the position as omitted.\n // I.e. {{foo}}' ' will mark the ' ' node as omitted.\n //\n // If i is undefined, then the first child will be marked as such.\n //\n // If multiple is truthy then all whitespace will be stripped out until non-whitespace\n // content is met.\n function omitRight(body, i, multiple) {\n var current = body[i == null ? 0 : i + 1];\n if (!current || current.type !== 'ContentStatement' || !multiple && current.rightStripped) {\n return;\n }\n var original = current.value;\n current.value = current.value.replace(multiple ? /^\\s+/ : /^[ \\t]*\\r?\\n?/, '');\n current.rightStripped = current.value !== original;\n }\n // Marks the node to the left of the position as omitted.\n // I.e. ' '{{foo}} will mark the ' ' node as omitted.\n //\n // If i is undefined then the last child will be marked as such.\n //\n // If multiple is truthy then all whitespace will be stripped out until non-whitespace\n // content is met.\n function omitLeft(body, i, multiple) {\n var current = body[i == null ? body.length - 1 : i - 1];\n if (!current || current.type !== 'ContentStatement' || !multiple && current.leftStripped) {\n return;\n }\n // We omit the last node if it's whitespace only and not preceded by a non-content node.\n var original = current.value;\n current.value = current.value.replace(multiple ? /\\s+$/ : /[ \\t]+$/, '');\n current.leftStripped = current.value !== original;\n return current.leftStripped;\n }\n\n /* parser generated by jison 0.4.18 */\n /*\n Returns a Parser object of the following structure:\n \n Parser: {\n yy: {}\n }\n \n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n \n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n \n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n \n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n \n \n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n \n \n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n */\n var parser = _exports.parser = function () {\n var o = function (k, v, o, l) {\n for (o = o || {}, l = k.length; l--; o[k[l]] = v);\n return o;\n },\n $V0 = [2, 44],\n $V1 = [1, 20],\n $V2 = [5, 14, 15, 19, 29, 34, 39, 44, 47, 48, 52, 56, 60],\n $V3 = [1, 35],\n $V4 = [1, 38],\n $V5 = [1, 30],\n $V6 = [1, 31],\n $V7 = [1, 32],\n $V8 = [1, 33],\n $V9 = [1, 34],\n $Va = [1, 37],\n $Vb = [14, 15, 19, 29, 34, 39, 44, 47, 48, 52, 56, 60],\n $Vc = [14, 15, 19, 29, 34, 44, 47, 48, 52, 56, 60],\n $Vd = [15, 18],\n $Ve = [14, 15, 19, 29, 34, 47, 48, 52, 56, 60],\n $Vf = [33, 64, 71, 79, 80, 81, 82, 83, 84],\n $Vg = [23, 33, 55, 64, 67, 71, 74, 79, 80, 81, 82, 83, 84],\n $Vh = [1, 51],\n $Vi = [23, 33, 55, 64, 67, 71, 74, 79, 80, 81, 82, 83, 84, 86],\n $Vj = [2, 43],\n $Vk = [55, 64, 71, 79, 80, 81, 82, 83, 84],\n $Vl = [1, 58],\n $Vm = [1, 59],\n $Vn = [1, 66],\n $Vo = [33, 64, 71, 74, 79, 80, 81, 82, 83, 84],\n $Vp = [23, 64, 71, 79, 80, 81, 82, 83, 84],\n $Vq = [1, 76],\n $Vr = [64, 67, 71, 79, 80, 81, 82, 83, 84],\n $Vs = [33, 74],\n $Vt = [23, 33, 55, 67, 71, 74],\n $Vu = [1, 106],\n $Vv = [1, 118],\n $Vw = [71, 76];\n var parser = {\n trace: function trace() {},\n yy: {},\n symbols_: {\n \"error\": 2,\n \"root\": 3,\n \"program\": 4,\n \"EOF\": 5,\n \"program_repetition0\": 6,\n \"statement\": 7,\n \"mustache\": 8,\n \"block\": 9,\n \"rawBlock\": 10,\n \"partial\": 11,\n \"partialBlock\": 12,\n \"content\": 13,\n \"COMMENT\": 14,\n \"CONTENT\": 15,\n \"openRawBlock\": 16,\n \"rawBlock_repetition0\": 17,\n \"END_RAW_BLOCK\": 18,\n \"OPEN_RAW_BLOCK\": 19,\n \"helperName\": 20,\n \"openRawBlock_repetition0\": 21,\n \"openRawBlock_option0\": 22,\n \"CLOSE_RAW_BLOCK\": 23,\n \"openBlock\": 24,\n \"block_option0\": 25,\n \"closeBlock\": 26,\n \"openInverse\": 27,\n \"block_option1\": 28,\n \"OPEN_BLOCK\": 29,\n \"openBlock_repetition0\": 30,\n \"openBlock_option0\": 31,\n \"openBlock_option1\": 32,\n \"CLOSE\": 33,\n \"OPEN_INVERSE\": 34,\n \"openInverse_repetition0\": 35,\n \"openInverse_option0\": 36,\n \"openInverse_option1\": 37,\n \"openInverseChain\": 38,\n \"OPEN_INVERSE_CHAIN\": 39,\n \"openInverseChain_repetition0\": 40,\n \"openInverseChain_option0\": 41,\n \"openInverseChain_option1\": 42,\n \"inverseAndProgram\": 43,\n \"INVERSE\": 44,\n \"inverseChain\": 45,\n \"inverseChain_option0\": 46,\n \"OPEN_ENDBLOCK\": 47,\n \"OPEN\": 48,\n \"expr\": 49,\n \"mustache_repetition0\": 50,\n \"mustache_option0\": 51,\n \"OPEN_UNESCAPED\": 52,\n \"mustache_repetition1\": 53,\n \"mustache_option1\": 54,\n \"CLOSE_UNESCAPED\": 55,\n \"OPEN_PARTIAL\": 56,\n \"partial_repetition0\": 57,\n \"partial_option0\": 58,\n \"openPartialBlock\": 59,\n \"OPEN_PARTIAL_BLOCK\": 60,\n \"openPartialBlock_repetition0\": 61,\n \"openPartialBlock_option0\": 62,\n \"sexpr\": 63,\n \"OPEN_SEXPR\": 64,\n \"sexpr_repetition0\": 65,\n \"sexpr_option0\": 66,\n \"CLOSE_SEXPR\": 67,\n \"hash\": 68,\n \"hash_repetition_plus0\": 69,\n \"hashSegment\": 70,\n \"ID\": 71,\n \"EQUALS\": 72,\n \"blockParams\": 73,\n \"OPEN_BLOCK_PARAMS\": 74,\n \"blockParams_repetition_plus0\": 75,\n \"CLOSE_BLOCK_PARAMS\": 76,\n \"path\": 77,\n \"dataName\": 78,\n \"STRING\": 79,\n \"NUMBER\": 80,\n \"BOOLEAN\": 81,\n \"UNDEFINED\": 82,\n \"NULL\": 83,\n \"DATA\": 84,\n \"pathSegments\": 85,\n \"SEP\": 86,\n \"$accept\": 0,\n \"$end\": 1\n },\n terminals_: {\n 2: \"error\",\n 5: \"EOF\",\n 14: \"COMMENT\",\n 15: \"CONTENT\",\n 18: \"END_RAW_BLOCK\",\n 19: \"OPEN_RAW_BLOCK\",\n 23: \"CLOSE_RAW_BLOCK\",\n 29: \"OPEN_BLOCK\",\n 33: \"CLOSE\",\n 34: \"OPEN_INVERSE\",\n 39: \"OPEN_INVERSE_CHAIN\",\n 44: \"INVERSE\",\n 47: \"OPEN_ENDBLOCK\",\n 48: \"OPEN\",\n 52: \"OPEN_UNESCAPED\",\n 55: \"CLOSE_UNESCAPED\",\n 56: \"OPEN_PARTIAL\",\n 60: \"OPEN_PARTIAL_BLOCK\",\n 64: \"OPEN_SEXPR\",\n 67: \"CLOSE_SEXPR\",\n 71: \"ID\",\n 72: \"EQUALS\",\n 74: \"OPEN_BLOCK_PARAMS\",\n 76: \"CLOSE_BLOCK_PARAMS\",\n 79: \"STRING\",\n 80: \"NUMBER\",\n 81: \"BOOLEAN\",\n 82: \"UNDEFINED\",\n 83: \"NULL\",\n 84: \"DATA\",\n 86: \"SEP\"\n },\n productions_: [0, [3, 2], [4, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [7, 1], [13, 1], [10, 3], [16, 5], [9, 4], [9, 4], [24, 6], [27, 6], [38, 6], [43, 2], [45, 3], [45, 1], [26, 3], [8, 5], [8, 5], [11, 5], [12, 3], [59, 5], [49, 1], [49, 1], [63, 5], [68, 1], [70, 3], [73, 3], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [20, 1], [78, 2], [77, 1], [85, 3], [85, 1], [6, 0], [6, 2], [17, 0], [17, 2], [21, 0], [21, 2], [22, 0], [22, 1], [25, 0], [25, 1], [28, 0], [28, 1], [30, 0], [30, 2], [31, 0], [31, 1], [32, 0], [32, 1], [35, 0], [35, 2], [36, 0], [36, 1], [37, 0], [37, 1], [40, 0], [40, 2], [41, 0], [41, 1], [42, 0], [42, 1], [46, 0], [46, 1], [50, 0], [50, 2], [51, 0], [51, 1], [53, 0], [53, 2], [54, 0], [54, 1], [57, 0], [57, 2], [58, 0], [58, 1], [61, 0], [61, 2], [62, 0], [62, 1], [65, 0], [65, 2], [66, 0], [66, 1], [69, 1], [69, 2], [75, 1], [75, 2]],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n /* this == yyval */\n var $0 = $$.length - 1;\n switch (yystate) {\n case 1:\n return $$[$0 - 1];\n case 2:\n this.$ = yy.prepareProgram($$[$0]);\n break;\n case 3:\n case 4:\n case 5:\n case 6:\n case 7:\n case 8:\n case 20:\n case 27:\n case 28:\n case 33:\n case 34:\n this.$ = $$[$0];\n break;\n case 9:\n this.$ = {\n type: 'CommentStatement',\n value: yy.stripComment($$[$0]),\n strip: yy.stripFlags($$[$0], $$[$0]),\n loc: yy.locInfo(this._$)\n };\n break;\n case 10:\n this.$ = {\n type: 'ContentStatement',\n original: $$[$0],\n value: $$[$0],\n loc: yy.locInfo(this._$)\n };\n break;\n case 11:\n this.$ = yy.prepareRawBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);\n break;\n case 12:\n this.$ = {\n path: $$[$0 - 3],\n params: $$[$0 - 2],\n hash: $$[$0 - 1]\n };\n break;\n case 13:\n this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], false, this._$);\n break;\n case 14:\n this.$ = yy.prepareBlock($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0], true, this._$);\n break;\n case 15:\n this.$ = {\n open: $$[$0 - 5],\n path: $$[$0 - 4],\n params: $$[$0 - 3],\n hash: $$[$0 - 2],\n blockParams: $$[$0 - 1],\n strip: yy.stripFlags($$[$0 - 5], $$[$0])\n };\n break;\n case 16:\n case 17:\n this.$ = {\n path: $$[$0 - 4],\n params: $$[$0 - 3],\n hash: $$[$0 - 2],\n blockParams: $$[$0 - 1],\n strip: yy.stripFlags($$[$0 - 5], $$[$0])\n };\n break;\n case 18:\n this.$ = {\n strip: yy.stripFlags($$[$0 - 1], $$[$0 - 1]),\n program: $$[$0]\n };\n break;\n case 19:\n var inverse = yy.prepareBlock($$[$0 - 2], $$[$0 - 1], $$[$0], $$[$0], false, this._$),\n program = yy.prepareProgram([inverse], $$[$0 - 1].loc);\n program.chained = true;\n this.$ = {\n strip: $$[$0 - 2].strip,\n program: program,\n chain: true\n };\n break;\n case 21:\n this.$ = {\n path: $$[$0 - 1],\n strip: yy.stripFlags($$[$0 - 2], $$[$0])\n };\n break;\n case 22:\n case 23:\n this.$ = yy.prepareMustache($$[$0 - 3], $$[$0 - 2], $$[$0 - 1], $$[$0 - 4], yy.stripFlags($$[$0 - 4], $$[$0]), this._$);\n break;\n case 24:\n this.$ = {\n type: 'PartialStatement',\n name: $$[$0 - 3],\n params: $$[$0 - 2],\n hash: $$[$0 - 1],\n indent: '',\n strip: yy.stripFlags($$[$0 - 4], $$[$0]),\n loc: yy.locInfo(this._$)\n };\n break;\n case 25:\n this.$ = yy.preparePartialBlock($$[$0 - 2], $$[$0 - 1], $$[$0], this._$);\n break;\n case 26:\n this.$ = {\n path: $$[$0 - 3],\n params: $$[$0 - 2],\n hash: $$[$0 - 1],\n strip: yy.stripFlags($$[$0 - 4], $$[$0])\n };\n break;\n case 29:\n this.$ = {\n type: 'SubExpression',\n path: $$[$0 - 3],\n params: $$[$0 - 2],\n hash: $$[$0 - 1],\n loc: yy.locInfo(this._$)\n };\n break;\n case 30:\n this.$ = {\n type: 'Hash',\n pairs: $$[$0],\n loc: yy.locInfo(this._$)\n };\n break;\n case 31:\n this.$ = {\n type: 'HashPair',\n key: yy.id($$[$0 - 2]),\n value: $$[$0],\n loc: yy.locInfo(this._$)\n };\n break;\n case 32:\n this.$ = yy.id($$[$0 - 1]);\n break;\n case 35:\n this.$ = {\n type: 'StringLiteral',\n value: $$[$0],\n original: $$[$0],\n loc: yy.locInfo(this._$)\n };\n break;\n case 36:\n this.$ = {\n type: 'NumberLiteral',\n value: Number($$[$0]),\n original: Number($$[$0]),\n loc: yy.locInfo(this._$)\n };\n break;\n case 37:\n this.$ = {\n type: 'BooleanLiteral',\n value: $$[$0] === 'true',\n original: $$[$0] === 'true',\n loc: yy.locInfo(this._$)\n };\n break;\n case 38:\n this.$ = {\n type: 'UndefinedLiteral',\n original: undefined,\n value: undefined,\n loc: yy.locInfo(this._$)\n };\n break;\n case 39:\n this.$ = {\n type: 'NullLiteral',\n original: null,\n value: null,\n loc: yy.locInfo(this._$)\n };\n break;\n case 40:\n this.$ = yy.preparePath(true, $$[$0], this._$);\n break;\n case 41:\n this.$ = yy.preparePath(false, $$[$0], this._$);\n break;\n case 42:\n $$[$0 - 2].push({\n part: yy.id($$[$0]),\n original: $$[$0],\n separator: $$[$0 - 1]\n });\n this.$ = $$[$0 - 2];\n break;\n case 43:\n this.$ = [{\n part: yy.id($$[$0]),\n original: $$[$0]\n }];\n break;\n case 44:\n case 46:\n case 48:\n case 56:\n case 62:\n case 68:\n case 76:\n case 80:\n case 84:\n case 88:\n case 92:\n this.$ = [];\n break;\n case 45:\n case 47:\n case 49:\n case 57:\n case 63:\n case 69:\n case 77:\n case 81:\n case 85:\n case 89:\n case 93:\n case 97:\n case 99:\n $$[$0 - 1].push($$[$0]);\n break;\n case 96:\n case 98:\n this.$ = [$$[$0]];\n break;\n }\n },\n table: [o([5, 14, 15, 19, 29, 34, 48, 52, 56, 60], $V0, {\n 3: 1,\n 4: 2,\n 6: 3\n }), {\n 1: [3]\n }, {\n 5: [1, 4]\n }, o([5, 39, 44, 47], [2, 2], {\n 7: 5,\n 8: 6,\n 9: 7,\n 10: 8,\n 11: 9,\n 12: 10,\n 13: 11,\n 24: 15,\n 27: 16,\n 16: 17,\n 59: 19,\n 14: [1, 12],\n 15: $V1,\n 19: [1, 23],\n 29: [1, 21],\n 34: [1, 22],\n 48: [1, 13],\n 52: [1, 14],\n 56: [1, 18],\n 60: [1, 24]\n }), {\n 1: [2, 1]\n }, o($V2, [2, 45]), o($V2, [2, 3]), o($V2, [2, 4]), o($V2, [2, 5]), o($V2, [2, 6]), o($V2, [2, 7]), o($V2, [2, 8]), o($V2, [2, 9]), {\n 20: 26,\n 49: 25,\n 63: 27,\n 64: $V3,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, {\n 20: 26,\n 49: 39,\n 63: 27,\n 64: $V3,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($Vb, $V0, {\n 6: 3,\n 4: 40\n }), o($Vc, $V0, {\n 6: 3,\n 4: 41\n }), o($Vd, [2, 46], {\n 17: 42\n }), {\n 20: 26,\n 49: 43,\n 63: 27,\n 64: $V3,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($Ve, $V0, {\n 6: 3,\n 4: 44\n }), o([5, 14, 15, 18, 19, 29, 34, 39, 44, 47, 48, 52, 56, 60], [2, 10]), {\n 20: 45,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, {\n 20: 46,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, {\n 20: 47,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, {\n 20: 26,\n 49: 48,\n 63: 27,\n 64: $V3,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($Vf, [2, 76], {\n 50: 49\n }), o($Vg, [2, 27]), o($Vg, [2, 28]), o($Vg, [2, 33]), o($Vg, [2, 34]), o($Vg, [2, 35]), o($Vg, [2, 36]), o($Vg, [2, 37]), o($Vg, [2, 38]), o($Vg, [2, 39]), {\n 20: 26,\n 49: 50,\n 63: 27,\n 64: $V3,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($Vg, [2, 41], {\n 86: $Vh\n }), {\n 71: $V4,\n 85: 52\n }, o($Vi, $Vj), o($Vk, [2, 80], {\n 53: 53\n }), {\n 25: 54,\n 38: 56,\n 39: $Vl,\n 43: 57,\n 44: $Vm,\n 45: 55,\n 47: [2, 52]\n }, {\n 28: 60,\n 43: 61,\n 44: $Vm,\n 47: [2, 54]\n }, {\n 13: 63,\n 15: $V1,\n 18: [1, 62]\n }, o($Vf, [2, 84], {\n 57: 64\n }), {\n 26: 65,\n 47: $Vn\n }, o($Vo, [2, 56], {\n 30: 67\n }), o($Vo, [2, 62], {\n 35: 68\n }), o($Vp, [2, 48], {\n 21: 69\n }), o($Vf, [2, 88], {\n 61: 70\n }), {\n 20: 26,\n 33: [2, 78],\n 49: 72,\n 51: 71,\n 63: 27,\n 64: $V3,\n 68: 73,\n 69: 74,\n 70: 75,\n 71: $Vq,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($Vr, [2, 92], {\n 65: 77\n }), {\n 71: [1, 78]\n }, o($Vg, [2, 40], {\n 86: $Vh\n }), {\n 20: 26,\n 49: 80,\n 54: 79,\n 55: [2, 82],\n 63: 27,\n 64: $V3,\n 68: 81,\n 69: 74,\n 70: 75,\n 71: $Vq,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, {\n 26: 82,\n 47: $Vn\n }, {\n 47: [2, 53]\n }, o($Vb, $V0, {\n 6: 3,\n 4: 83\n }), {\n 47: [2, 20]\n }, {\n 20: 84,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($Ve, $V0, {\n 6: 3,\n 4: 85\n }), {\n 26: 86,\n 47: $Vn\n }, {\n 47: [2, 55]\n }, o($V2, [2, 11]), o($Vd, [2, 47]), {\n 20: 26,\n 33: [2, 86],\n 49: 88,\n 58: 87,\n 63: 27,\n 64: $V3,\n 68: 89,\n 69: 74,\n 70: 75,\n 71: $Vq,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($V2, [2, 25]), {\n 20: 90,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($Vs, [2, 58], {\n 20: 26,\n 63: 27,\n 77: 28,\n 78: 29,\n 85: 36,\n 69: 74,\n 70: 75,\n 31: 91,\n 49: 92,\n 68: 93,\n 64: $V3,\n 71: $Vq,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va\n }), o($Vs, [2, 64], {\n 20: 26,\n 63: 27,\n 77: 28,\n 78: 29,\n 85: 36,\n 69: 74,\n 70: 75,\n 36: 94,\n 49: 95,\n 68: 96,\n 64: $V3,\n 71: $Vq,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va\n }), {\n 20: 26,\n 22: 97,\n 23: [2, 50],\n 49: 98,\n 63: 27,\n 64: $V3,\n 68: 99,\n 69: 74,\n 70: 75,\n 71: $Vq,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, {\n 20: 26,\n 33: [2, 90],\n 49: 101,\n 62: 100,\n 63: 27,\n 64: $V3,\n 68: 102,\n 69: 74,\n 70: 75,\n 71: $Vq,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, {\n 33: [1, 103]\n }, o($Vf, [2, 77]), {\n 33: [2, 79]\n }, o([23, 33, 55, 67, 74], [2, 30], {\n 70: 104,\n 71: [1, 105]\n }), o($Vt, [2, 96]), o($Vi, $Vj, {\n 72: $Vu\n }), {\n 20: 26,\n 49: 108,\n 63: 27,\n 64: $V3,\n 66: 107,\n 67: [2, 94],\n 68: 109,\n 69: 74,\n 70: 75,\n 71: $Vq,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, o($Vi, [2, 42]), {\n 55: [1, 110]\n }, o($Vk, [2, 81]), {\n 55: [2, 83]\n }, o($V2, [2, 13]), {\n 38: 56,\n 39: $Vl,\n 43: 57,\n 44: $Vm,\n 45: 112,\n 46: 111,\n 47: [2, 74]\n }, o($Vo, [2, 68], {\n 40: 113\n }), {\n 47: [2, 18]\n }, o($V2, [2, 14]), {\n 33: [1, 114]\n }, o($Vf, [2, 85]), {\n 33: [2, 87]\n }, {\n 33: [1, 115]\n }, {\n 32: 116,\n 33: [2, 60],\n 73: 117,\n 74: $Vv\n }, o($Vo, [2, 57]), o($Vs, [2, 59]), {\n 33: [2, 66],\n 37: 119,\n 73: 120,\n 74: $Vv\n }, o($Vo, [2, 63]), o($Vs, [2, 65]), {\n 23: [1, 121]\n }, o($Vp, [2, 49]), {\n 23: [2, 51]\n }, {\n 33: [1, 122]\n }, o($Vf, [2, 89]), {\n 33: [2, 91]\n }, o($V2, [2, 22]), o($Vt, [2, 97]), {\n 72: $Vu\n }, {\n 20: 26,\n 49: 123,\n 63: 27,\n 64: $V3,\n 71: $V4,\n 77: 28,\n 78: 29,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va,\n 85: 36\n }, {\n 67: [1, 124]\n }, o($Vr, [2, 93]), {\n 67: [2, 95]\n }, o($V2, [2, 23]), {\n 47: [2, 19]\n }, {\n 47: [2, 75]\n }, o($Vs, [2, 70], {\n 20: 26,\n 63: 27,\n 77: 28,\n 78: 29,\n 85: 36,\n 69: 74,\n 70: 75,\n 41: 125,\n 49: 126,\n 68: 127,\n 64: $V3,\n 71: $Vq,\n 79: $V5,\n 80: $V6,\n 81: $V7,\n 82: $V8,\n 83: $V9,\n 84: $Va\n }), o($V2, [2, 24]), o($V2, [2, 21]), {\n 33: [1, 128]\n }, {\n 33: [2, 61]\n }, {\n 71: [1, 130],\n 75: 129\n }, {\n 33: [1, 131]\n }, {\n 33: [2, 67]\n }, o($Vd, [2, 12]), o($Ve, [2, 26]), o($Vt, [2, 31]), o($Vg, [2, 29]), {\n 33: [2, 72],\n 42: 132,\n 73: 133,\n 74: $Vv\n }, o($Vo, [2, 69]), o($Vs, [2, 71]), o($Vb, [2, 15]), {\n 71: [1, 135],\n 76: [1, 134]\n }, o($Vw, [2, 98]), o($Vc, [2, 16]), {\n 33: [1, 136]\n }, {\n 33: [2, 73]\n }, {\n 33: [2, 32]\n }, o($Vw, [2, 99]), o($Vb, [2, 17])],\n defaultActions: {\n 4: [2, 1],\n 55: [2, 53],\n 57: [2, 20],\n 61: [2, 55],\n 73: [2, 79],\n 81: [2, 83],\n 85: [2, 18],\n 89: [2, 87],\n 99: [2, 51],\n 102: [2, 91],\n 109: [2, 95],\n 111: [2, 19],\n 112: [2, 75],\n 117: [2, 61],\n 120: [2, 67],\n 133: [2, 73],\n 134: [2, 32]\n },\n parseError: function parseError(str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n },\n parse: function parse(input) {\n var self = this,\n stack = [0],\n vstack = [null],\n lstack = [],\n table = this.table,\n yytext = '',\n yylineno = 0,\n yyleng = 0,\n TERROR = 2,\n EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = {\n yy: {}\n };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n var lex = function () {\n var token;\n token = lexer.lex() || EOF;\n if (typeof token !== 'number') {\n token = self.symbols_[token] || token;\n }\n return token;\n };\n var symbol,\n state,\n action,\n r,\n yyval = {},\n p,\n len,\n newState,\n expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n }\n r = this.performAction.apply(yyval, [yytext, yyleng, yylineno, sharedState.yy, action[1], vstack, lstack].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n }\n };\n /* generated by jison-lex 0.3.4 */\n var lexer = function () {\n var lexer = {\n EOF: 1,\n parseError: function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n // resets the lexer, sets new input\n setInput: function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0, 0];\n }\n this.offset = 0;\n return this;\n },\n // consumes and returns one char from the input\n input: function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n this._input = this._input.slice(1);\n return ch;\n },\n // unshifts one char (or a string) into the input\n unput: function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ? (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length : this.yylloc.first_column - len\n };\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n // When called from action, caches matched text and appends it on next action\n more: function () {\n this._more = true;\n return this;\n },\n // When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\n reject: function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n return this;\n },\n // retain first n characters of the match\n less: function (n) {\n this.unput(this.match.slice(n));\n },\n // displays already matched input, i.e. for error messages\n pastInput: function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...' : '') + past.substr(-20).replace(/\\n/g, \"\");\n },\n // displays upcoming input, i.e. for error messages\n upcomingInput: function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20 - next.length);\n }\n return (next.substr(0, 20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n // displays the character position where the lexing error occurred, i.e. for error messages\n showPosition: function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n // test the lexed token: return FALSE when not a match, otherwise return token\n test_match: function (match, indexed_rule) {\n var token, lines, backup;\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ? lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length : this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n\n return false;\n },\n // return next match in input\n next: function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n var token, match, tempMatch, index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n // return next match that has a token\n lex: function lex() {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n // activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\n begin: function begin(condition) {\n this.conditionStack.push(condition);\n },\n // pop the previously active lexer condition state off the condition stack\n popState: function popState() {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n // produce the lexer rule set which is active for the currently active lexer condition state\n _currentRules: function _currentRules() {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n // return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\n topState: function topState(n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n // alias for begin(condition)\n pushState: function pushState(condition) {\n this.begin(condition);\n },\n // return the number of states currently on the stack\n stateStackSize: function stateStackSize() {\n return this.conditionStack.length;\n },\n options: {},\n performAction: function anonymous(yy, yy_, $avoiding_name_collisions, YY_START) {\n function strip(start, end) {\n return yy_.yytext = yy_.yytext.substring(start, yy_.yyleng - end + start);\n }\n switch ($avoiding_name_collisions) {\n case 0:\n if (yy_.yytext.slice(-2) === \"\\\\\\\\\") {\n strip(0, 1);\n this.begin(\"mu\");\n } else if (yy_.yytext.slice(-1) === \"\\\\\") {\n strip(0, 1);\n this.begin(\"emu\");\n } else {\n this.begin(\"mu\");\n }\n if (yy_.yytext) return 15;\n break;\n case 1:\n return 15;\n case 2:\n this.popState();\n return 15;\n case 3:\n this.begin('raw');\n return 15;\n case 4:\n this.popState();\n // Should be using `this.topState()` below, but it currently\n // returns the second top instead of the first top. Opened an\n // issue about it at https://github.com/zaach/jison/issues/291\n if (this.conditionStack[this.conditionStack.length - 1] === 'raw') {\n return 15;\n } else {\n strip(5, 9);\n return 18;\n }\n case 5:\n return 15;\n case 6:\n this.popState();\n return 14;\n case 7:\n return 64;\n case 8:\n return 67;\n case 9:\n return 19;\n case 10:\n this.popState();\n this.begin('raw');\n return 23;\n case 11:\n return 56;\n case 12:\n return 60;\n case 13:\n return 29;\n case 14:\n return 47;\n case 15:\n this.popState();\n return 44;\n case 16:\n this.popState();\n return 44;\n case 17:\n return 34;\n case 18:\n return 39;\n case 19:\n return 52;\n case 20:\n return 48;\n case 21:\n this.unput(yy_.yytext);\n this.popState();\n this.begin('com');\n break;\n case 22:\n this.popState();\n return 14;\n case 23:\n return 48;\n case 24:\n return 72;\n case 25:\n return 71;\n case 26:\n return 71;\n case 27:\n return 86;\n case 28:\n // ignore whitespace\n break;\n case 29:\n this.popState();\n return 55;\n case 30:\n this.popState();\n return 33;\n case 31:\n yy_.yytext = strip(1, 2).replace(/\\\\\"/g, '\"');\n return 79;\n case 32:\n yy_.yytext = strip(1, 2).replace(/\\\\'/g, \"'\");\n return 79;\n case 33:\n return 84;\n case 34:\n return 81;\n case 35:\n return 81;\n case 36:\n return 82;\n case 37:\n return 83;\n case 38:\n return 80;\n case 39:\n return 74;\n case 40:\n return 76;\n case 41:\n return 71;\n case 42:\n yy_.yytext = yy_.yytext.replace(/\\\\([\\\\\\]])/g, '$1');\n return 71;\n case 43:\n return 'INVALID';\n case 44:\n return 5;\n }\n },\n rules: [/^(?:[^\\x00]*?(?=(\\{\\{)))/, /^(?:[^\\x00]+)/, /^(?:[^\\x00]{2,}?(?=(\\{\\{|\\\\\\{\\{|\\\\\\\\\\{\\{|$)))/, /^(?:\\{\\{\\{\\{(?=[^/]))/, /^(?:\\{\\{\\{\\{\\/[^\\s!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]+(?=[=}\\s\\/.])\\}\\}\\}\\})/, /^(?:[^\\x00]+?(?=(\\{\\{\\{\\{)))/, /^(?:[\\s\\S]*?--(~)?\\}\\})/, /^(?:\\()/, /^(?:\\))/, /^(?:\\{\\{\\{\\{)/, /^(?:\\}\\}\\}\\})/, /^(?:\\{\\{(~)?>)/, /^(?:\\{\\{(~)?#>)/, /^(?:\\{\\{(~)?#\\*?)/, /^(?:\\{\\{(~)?\\/)/, /^(?:\\{\\{(~)?\\^\\s*(~)?\\}\\})/, /^(?:\\{\\{(~)?\\s*else\\s*(~)?\\}\\})/, /^(?:\\{\\{(~)?\\^)/, /^(?:\\{\\{(~)?\\s*else\\b)/, /^(?:\\{\\{(~)?\\{)/, /^(?:\\{\\{(~)?&)/, /^(?:\\{\\{(~)?!--)/, /^(?:\\{\\{(~)?![\\s\\S]*?\\}\\})/, /^(?:\\{\\{(~)?\\*?)/, /^(?:=)/, /^(?:\\.\\.)/, /^(?:\\.(?=([=~}\\s\\/.)|])))/, /^(?:[\\/.])/, /^(?:\\s+)/, /^(?:\\}(~)?\\}\\})/, /^(?:(~)?\\}\\})/, /^(?:\"(\\\\[\"]|[^\"])*\")/, /^(?:'(\\\\[']|[^'])*')/, /^(?:@)/, /^(?:true(?=([~}\\s)])))/, /^(?:false(?=([~}\\s)])))/, /^(?:undefined(?=([~}\\s)])))/, /^(?:null(?=([~}\\s)])))/, /^(?:-?[0-9]+(?:\\.[0-9]+)?(?=([~}\\s)])))/, /^(?:as\\s+\\|)/, /^(?:\\|)/, /^(?:([^\\s!\"#%-,\\.\\/;->@\\[-\\^`\\{-~]+(?=([=~}\\s\\/.)|]))))/, /^(?:\\[(\\\\\\]|[^\\]])*\\])/, /^(?:.)/, /^(?:$)/],\n conditions: {\n \"mu\": {\n \"rules\": [7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44],\n \"inclusive\": false\n },\n \"emu\": {\n \"rules\": [2],\n \"inclusive\": false\n },\n \"com\": {\n \"rules\": [6],\n \"inclusive\": false\n },\n \"raw\": {\n \"rules\": [3, 4, 5],\n \"inclusive\": false\n },\n \"INITIAL\": {\n \"rules\": [0, 1, 44],\n \"inclusive\": true\n }\n }\n };\n return lexer;\n }();\n parser.lexer = lexer;\n function Parser() {\n this.yy = {};\n }\n Parser.prototype = parser;\n parser.Parser = Parser;\n return new Parser();\n }();\n\n /* eslint-disable new-cap */\n function print(ast) {\n return new PrintVisitor().accept(ast);\n }\n function PrintVisitor() {\n this.padding = 0;\n }\n PrintVisitor.prototype = new Visitor();\n PrintVisitor.prototype.pad = function (string) {\n var out = '';\n for (var i = 0, l = this.padding; i < l; i++) {\n out += ' ';\n }\n out += string + '\\n';\n return out;\n };\n PrintVisitor.prototype.Program = function (program) {\n var out = '',\n body = program.body,\n i,\n l;\n if (program.blockParams) {\n var blockParams = 'BLOCK PARAMS: [';\n for (i = 0, l = program.blockParams.length; i < l; i++) {\n blockParams += ' ' + program.blockParams[i];\n }\n blockParams += ' ]';\n out += this.pad(blockParams);\n }\n for (i = 0, l = body.length; i < l; i++) {\n out += this.accept(body[i]);\n }\n this.padding--;\n return out;\n };\n PrintVisitor.prototype.MustacheStatement = function (mustache) {\n return this.pad('{{ ' + this.SubExpression(mustache) + ' }}');\n };\n PrintVisitor.prototype.Decorator = function (mustache) {\n return this.pad('{{ DIRECTIVE ' + this.SubExpression(mustache) + ' }}');\n };\n PrintVisitor.prototype.BlockStatement = PrintVisitor.prototype.DecoratorBlock = function (block) {\n var out = '';\n out += this.pad((block.type === 'DecoratorBlock' ? 'DIRECTIVE ' : '') + 'BLOCK:');\n this.padding++;\n out += this.pad(this.SubExpression(block));\n if (block.program) {\n out += this.pad('PROGRAM:');\n this.padding++;\n out += this.accept(block.program);\n this.padding--;\n }\n if (block.inverse) {\n if (block.program) {\n this.padding++;\n }\n out += this.pad('{{^}}');\n this.padding++;\n out += this.accept(block.inverse);\n this.padding--;\n if (block.program) {\n this.padding--;\n }\n }\n this.padding--;\n return out;\n };\n PrintVisitor.prototype.PartialStatement = function (partial) {\n var content = 'PARTIAL:' + partial.name.original;\n if (partial.params[0]) {\n content += ' ' + this.accept(partial.params[0]);\n }\n if (partial.hash) {\n content += ' ' + this.accept(partial.hash);\n }\n return this.pad('{{> ' + content + ' }}');\n };\n PrintVisitor.prototype.PartialBlockStatement = function (partial) {\n var content = 'PARTIAL BLOCK:' + partial.name.original;\n if (partial.params[0]) {\n content += ' ' + this.accept(partial.params[0]);\n }\n if (partial.hash) {\n content += ' ' + this.accept(partial.hash);\n }\n content += ' ' + this.pad('PROGRAM:');\n this.padding++;\n content += this.accept(partial.program);\n this.padding--;\n return this.pad('{{> ' + content + ' }}');\n };\n PrintVisitor.prototype.ContentStatement = function (content) {\n return this.pad(\"CONTENT[ '\" + content.value + \"' ]\");\n };\n PrintVisitor.prototype.CommentStatement = function (comment) {\n return this.pad(\"{{! '\" + comment.value + \"' }}\");\n };\n PrintVisitor.prototype.SubExpression = function (sexpr) {\n var params = sexpr.params,\n paramStrings = [],\n hash;\n for (var i = 0, l = params.length; i < l; i++) {\n paramStrings.push(this.accept(params[i]));\n }\n params = '[' + paramStrings.join(', ') + ']';\n hash = sexpr.hash ? ' ' + this.accept(sexpr.hash) : '';\n return this.accept(sexpr.path) + ' ' + params + hash;\n };\n PrintVisitor.prototype.PathExpression = function (id) {\n var path = id.parts.join('/');\n return (id.data ? '@' : '') + 'PATH:' + path;\n };\n PrintVisitor.prototype.StringLiteral = function (string) {\n return '\"' + string.value + '\"';\n };\n PrintVisitor.prototype.NumberLiteral = function (number) {\n return 'NUMBER{' + number.value + '}';\n };\n PrintVisitor.prototype.BooleanLiteral = function (bool) {\n return 'BOOLEAN{' + bool.value + '}';\n };\n PrintVisitor.prototype.UndefinedLiteral = function () {\n return 'UNDEFINED';\n };\n PrintVisitor.prototype.NullLiteral = function () {\n return 'NULL';\n };\n PrintVisitor.prototype.Hash = function (hash) {\n var pairs = hash.pairs,\n joinedPairs = [];\n for (var i = 0, l = pairs.length; i < l; i++) {\n joinedPairs.push(this.accept(pairs[i]));\n }\n return 'HASH{' + joinedPairs.join(', ') + '}';\n };\n PrintVisitor.prototype.HashPair = function (pair) {\n return pair.key + '=' + this.accept(pair.value);\n };\n /* eslint-enable new-cap */\n\n function validateClose(open, close) {\n close = close.path ? close.path.original : close;\n if (open.path.original !== close) {\n var errorNode = {\n loc: open.path.loc\n };\n throw new Exception(open.path.original + \" doesn't match \" + close, errorNode);\n }\n }\n function SourceLocation(source, locInfo) {\n this.source = source;\n this.start = {\n line: locInfo.first_line,\n column: locInfo.first_column\n };\n this.end = {\n line: locInfo.last_line,\n column: locInfo.last_column\n };\n }\n function id(token) {\n if (/^\\[.*\\]$/.test(token)) {\n return token.substring(1, token.length - 1);\n } else {\n return token;\n }\n }\n function stripFlags(open, close) {\n return {\n open: open.charAt(2) === '~',\n close: close.charAt(close.length - 3) === '~'\n };\n }\n function stripComment(comment) {\n return comment.replace(/^\\{\\{~?!-?-?/, '').replace(/-?-?~?\\}\\}$/, '');\n }\n function preparePath(data, parts, loc) {\n loc = this.locInfo(loc);\n var original = data ? '@' : '',\n dig = [],\n depth = 0;\n for (var i = 0, l = parts.length; i < l; i++) {\n var part = parts[i].part,\n // If we have [] syntax then we do not treat path references as operators,\n // i.e. foo.[this] resolves to approximately context.foo['this']\n isLiteral = parts[i].original !== part;\n original += (parts[i].separator || '') + part;\n if (!isLiteral && (part === '..' || part === '.' || part === 'this')) {\n if (dig.length > 0) {\n throw new Exception('Invalid path: ' + original, {\n loc: loc\n });\n } else if (part === '..') {\n depth++;\n }\n } else {\n dig.push(part);\n }\n }\n return {\n type: 'PathExpression',\n data: data,\n depth: depth,\n parts: dig,\n original: original,\n loc: loc\n };\n }\n function prepareMustache(path, params, hash, open, strip, locInfo) {\n // Must use charAt to support IE pre-10\n var escapeFlag = open.charAt(3) || open.charAt(2),\n escaped = escapeFlag !== '{' && escapeFlag !== '&';\n var decorator = /\\*/.test(open);\n return {\n type: decorator ? 'Decorator' : 'MustacheStatement',\n path: path,\n params: params,\n hash: hash,\n escaped: escaped,\n strip: strip,\n loc: this.locInfo(locInfo)\n };\n }\n function prepareRawBlock(openRawBlock, contents, close, locInfo) {\n validateClose(openRawBlock, close);\n locInfo = this.locInfo(locInfo);\n var program = {\n type: 'Program',\n body: contents,\n strip: {},\n loc: locInfo\n };\n return {\n type: 'BlockStatement',\n path: openRawBlock.path,\n params: openRawBlock.params,\n hash: openRawBlock.hash,\n program: program,\n openStrip: {},\n inverseStrip: {},\n closeStrip: {},\n loc: locInfo\n };\n }\n function prepareBlock(openBlock, program, inverseAndProgram, close, inverted, locInfo) {\n if (close && close.path) {\n validateClose(openBlock, close);\n }\n var decorator = /\\*/.test(openBlock.open);\n program.blockParams = openBlock.blockParams;\n var inverse, inverseStrip;\n if (inverseAndProgram) {\n if (decorator) {\n throw new Exception('Unexpected inverse block on decorator', inverseAndProgram);\n }\n if (inverseAndProgram.chain) {\n inverseAndProgram.program.body[0].closeStrip = close.strip;\n }\n inverseStrip = inverseAndProgram.strip;\n inverse = inverseAndProgram.program;\n }\n if (inverted) {\n inverted = inverse;\n inverse = program;\n program = inverted;\n }\n return {\n type: decorator ? 'DecoratorBlock' : 'BlockStatement',\n path: openBlock.path,\n params: openBlock.params,\n hash: openBlock.hash,\n program: program,\n inverse: inverse,\n openStrip: openBlock.strip,\n inverseStrip: inverseStrip,\n closeStrip: close && close.strip,\n loc: this.locInfo(locInfo)\n };\n }\n function prepareProgram(statements, loc) {\n if (!loc && statements.length) {\n var firstLoc = statements[0].loc,\n lastLoc = statements[statements.length - 1].loc;\n /* istanbul ignore else */\n if (firstLoc && lastLoc) {\n loc = {\n source: firstLoc.source,\n start: {\n line: firstLoc.start.line,\n column: firstLoc.start.column\n },\n end: {\n line: lastLoc.end.line,\n column: lastLoc.end.column\n }\n };\n }\n }\n return {\n type: 'Program',\n body: statements,\n strip: {},\n loc: loc\n };\n }\n function preparePartialBlock(open, program, close, locInfo) {\n validateClose(open, close);\n return {\n type: 'PartialBlockStatement',\n name: open.path,\n params: open.params,\n hash: open.hash,\n program: program,\n openStrip: open.strip,\n closeStrip: close && close.strip,\n loc: this.locInfo(locInfo)\n };\n }\n var Helpers = /*#__PURE__*/Object.freeze({\n __proto__: null,\n SourceLocation: SourceLocation,\n id: id,\n prepareBlock: prepareBlock,\n prepareMustache: prepareMustache,\n preparePartialBlock: preparePartialBlock,\n preparePath: preparePath,\n prepareProgram: prepareProgram,\n prepareRawBlock: prepareRawBlock,\n stripComment: stripComment,\n stripFlags: stripFlags\n });\n var baseHelpers = {};\n for (var helper in Helpers) {\n if (Object.prototype.hasOwnProperty.call(Helpers, helper)) {\n baseHelpers[helper] = Helpers[helper];\n }\n }\n function parseWithoutProcessing(input, options) {\n // Just return if an already-compiled AST was passed in.\n if (input.type === 'Program') {\n return input;\n }\n parser.yy = baseHelpers;\n // Altering the shared object here, but this is ok as parser is a sync operation\n parser.yy.locInfo = function (locInfo) {\n return new SourceLocation(options && options.srcName, locInfo);\n };\n var ast = parser.parse(input);\n return ast;\n }\n function parse(input, options) {\n var ast = parseWithoutProcessing(input, options);\n var strip = new WhitespaceControl(options);\n return strip.accept(ast);\n }\n});","define(\"ember-babel\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.assertThisInitialized = assertThisInitialized;\n _exports.classCallCheck = classCallCheck;\n _exports.classPrivateFieldLooseBase = classPrivateFieldLooseBase;\n _exports.classPrivateFieldLooseKey = classPrivateFieldLooseKey;\n _exports.createClass = createClass;\n _exports.createForOfIteratorHelperLoose = createForOfIteratorHelperLoose;\n _exports.createSuper = createSuper;\n _exports.inheritsLoose = inheritsLoose;\n _exports.objectDestructuringEmpty = objectDestructuringEmpty;\n _exports.possibleConstructorReturn = possibleConstructorReturn;\n _exports.taggedTemplateLiteralLoose = taggedTemplateLiteralLoose;\n _exports.wrapNativeSuper = wrapNativeSuper;\n /* globals Reflect */\n\n const setPrototypeOf = Object.setPrototypeOf;\n const getPrototypeOf = Object.getPrototypeOf;\n const hasReflectConstruct = typeof Reflect === 'object' && typeof Reflect.construct === 'function';\n const nativeWrapperCache = new Map();\n\n // Implementations:\n // https://github.com/babel/babel/blob/436d78920883603668666210a4aacf524257bc3b/packages/babel-helpers/src/helpers.ts#L958\n let privateFieldId = 0;\n function classPrivateFieldLooseKey(name) {\n return '__private_' + privateFieldId++ + '_' + name;\n }\n function classPrivateFieldLooseBase(receiver, privateKey) {\n if (!Object.prototype.hasOwnProperty.call(receiver, privateKey)) {\n throw new TypeError('attempted to use private field on non-instance');\n }\n return receiver;\n }\n\n // Super minimal version of Babel's wrapNativeSuper. We only use this for\n // extending Function, for ComputedDecoratorImpl and AliasDecoratorImpl. We know\n // we will never directly create an instance of these classes so no need to\n // include `construct` code or other helpers.\n function wrapNativeSuper(Class) {\n if (nativeWrapperCache.has(Class)) {\n return nativeWrapperCache.get(Class);\n }\n function Wrapper() {}\n Wrapper.prototype = Object.create(Class.prototype, {\n constructor: {\n value: Wrapper,\n enumerable: false,\n writable: true,\n configurable: true\n }\n });\n nativeWrapperCache.set(Class, Wrapper);\n return setPrototypeOf(Wrapper, Class);\n }\n function classCallCheck(instance, Constructor) {\n if (true /* DEBUG */) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError('Cannot call a class as a function');\n }\n }\n }\n\n /*\n Overrides default `inheritsLoose` to _also_ call `Object.setPrototypeOf`.\n This is needed so that we can use `loose` option with the\n `@babel/plugin-transform-classes` (because we want simple assignment to the\n prototype wherever possible) but also keep our constructor based prototypal\n inheritance working properly\n */\n function inheritsLoose(subClass, superClass) {\n if (true /* DEBUG */) {\n if (typeof superClass !== 'function' && superClass !== null) {\n throw new TypeError('Super expression must either be null or a function');\n }\n }\n subClass.prototype = Object.create(superClass === null ? null : superClass.prototype, {\n constructor: {\n value: subClass,\n writable: true,\n configurable: true\n }\n });\n if (superClass !== null) {\n setPrototypeOf(subClass, superClass);\n }\n }\n function taggedTemplateLiteralLoose(strings, raw) {\n if (!raw) {\n raw = strings.slice(0);\n }\n strings.raw = raw;\n return strings;\n }\n function _defineProperties(target, props) {\n for (let i = 0; i < props.length; i++) {\n let descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if ('value' in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n /*\n Differs from default implementation by avoiding boolean coercion of\n `protoProps` and `staticProps`.\n */\n function createClass(Constructor, protoProps, staticProps) {\n if (protoProps !== null && protoProps !== undefined) {\n _defineProperties(Constructor.prototype, protoProps);\n }\n if (staticProps !== null && staticProps !== undefined) {\n _defineProperties(Constructor, staticProps);\n }\n return Constructor;\n }\n function assertThisInitialized(self) {\n if (true /* DEBUG */ && self === void 0) {\n throw new ReferenceError(\"this hasn't been initialised - super() hasn't been called\");\n }\n return self;\n }\n\n /*\n Adds `DEBUG` guard to error being thrown, and avoids boolean coercion of `call`.\n */\n function possibleConstructorReturn(self, call) {\n if (typeof call === 'object' && call !== null || typeof call === 'function') {\n return call;\n }\n return assertThisInitialized(self);\n }\n function objectDestructuringEmpty(obj) {\n if (true /* DEBUG */ && (obj === null || obj === undefined)) {\n throw new TypeError('Cannot destructure undefined');\n }\n }\n\n /*\n Differs from default implementation by checking for _any_ `Reflect.construct`\n (the default implementation tries to ensure that `Reflect.construct` is truly\n the native one).\n \n Original source: https://github.com/babel/babel/blob/v7.9.2/packages/babel-helpers/src/helpers.js#L738-L757\n */\n function createSuper(Derived) {\n return function () {\n let Super = getPrototypeOf(Derived);\n let result;\n if (hasReflectConstruct) {\n // NOTE: This doesn't work if this.__proto__.constructor has been modified.\n let NewTarget = getPrototypeOf(this).constructor;\n result = Reflect.construct(Super, arguments, NewTarget);\n } else {\n result = Super.apply(this, arguments);\n }\n return possibleConstructorReturn(this, result);\n };\n }\n\n /*\n Does not differ from default implementation.\n */\n function arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n let arr2 = new Array(len);\n for (let i = 0; i < len; i++) {\n arr2[i] = arr[i];\n }\n return arr2;\n }\n\n /*\n Does not differ from default implementation.\n */\n function unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === 'string') return arrayLikeToArray(o, minLen);\n let n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === 'Object' && o.constructor) n = o.constructor.name;\n if (n === 'Map' || n === 'Set') return Array.from(n);\n if (n === 'Arguments' || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return arrayLikeToArray(o, minLen);\n }\n\n /*\n Does not differ from default implementation.\n */\n function createForOfIteratorHelperLoose(o) {\n let i = 0;\n if (typeof Symbol === 'undefined' || o[Symbol.iterator] == null) {\n // Fallback for engines without symbol support\n if (Array.isArray(o) || (o = unsupportedIterableToArray(o))) return function () {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n };\n throw new TypeError('Invalid attempt to iterate non-iterable instance.\\\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.');\n }\n i = o[Symbol.iterator]();\n return i.next.bind(i);\n }\n});","define(\"ember-template-compiler/index\", [\"exports\", \"ember-template-compiler/lib/public-api\", \"@ember/template-compilation\", \"ember-template-compiler/lib/system/bootstrap\", \"ember-template-compiler/lib/system/initializer\"], function (_exports, ETC, _templateCompilation, _bootstrap, _initializer) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n Object.keys(ETC).forEach(function (key) {\n if (key === \"default\" || key === \"__esModule\") return;\n if (key in _exports && _exports[key] === ETC[key]) return;\n Object.defineProperty(_exports, key, {\n enumerable: true,\n get: function () {\n return ETC[key];\n }\n });\n });\n (0, _templateCompilation.__registerTemplateCompiler)(ETC);\n // used to bootstrap templates\n\n // add domTemplates initializer (only does something if `ember-template-compiler`\n // is loaded already)\n});","define(\"ember-template-compiler/lib/plugins/assert-against-attrs\", [\"exports\", \"@ember/debug\", \"ember-template-compiler/lib/system/calculate-location-display\"], function (_exports, _debug, _calculateLocationDisplay) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = assertAgainstAttrs;\n /**\n @module ember\n */\n /**\n A Glimmer2 AST transformation that asserts against\n \n ```handlebars\n {{attrs.foo.bar}}\n ```\n \n ...as well as `{{#if attrs.foo}}`, `{{deeply (nested attrs.foobar.baz)}}`.\n \n @private\n @class AssertAgainstAttrs\n */\n function assertAgainstAttrs(env) {\n var _env$meta;\n let {\n builders: b\n } = env.syntax;\n let moduleName = (_env$meta = env.meta) == null ? void 0 : _env$meta.moduleName;\n let stack = [[]];\n function updateBlockParamsStack(blockParams) {\n let parent = stack[stack.length - 1];\n (true && !(parent) && (0, _debug.assert)('has parent', parent));\n stack.push(parent.concat(blockParams));\n }\n return {\n name: 'assert-against-attrs',\n visitor: {\n Program: {\n enter(node) {\n updateBlockParamsStack(node.blockParams);\n },\n exit() {\n stack.pop();\n }\n },\n ElementNode: {\n enter(node) {\n updateBlockParamsStack(node.blockParams);\n },\n exit() {\n stack.pop();\n }\n },\n PathExpression(node) {\n if (isAttrs(node, stack[stack.length - 1])) {\n let path = b.path(node.original.substring(6));\n (true && !(node.this !== false) && (0, _debug.assert)(\"Using {{attrs}} to reference named arguments is not supported. {{attrs.\" + path.original + \"}} should be updated to {{@\" + path.original + \"}}. \" + (0, _calculateLocationDisplay.default)(moduleName, node.loc), node.this !== false));\n }\n }\n }\n };\n }\n function isAttrs(node, symbols) {\n let name = node.parts[0];\n if (name && symbols.indexOf(name) !== -1) {\n return false;\n }\n if (name === 'attrs') {\n if (node.this === true) {\n node.parts.shift();\n node.original = node.original.slice(5);\n }\n return true;\n }\n return false;\n }\n});","define(\"ember-template-compiler/lib/plugins/assert-against-named-outlets\", [\"exports\", \"@ember/debug\", \"ember-template-compiler/lib/system/calculate-location-display\"], function (_exports, _debug, _calculateLocationDisplay) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = assertAgainstNamedOutlets;\n /**\n @module ember\n */\n /**\n Prevents usage of named outlets, a legacy concept in Ember removed in 4.0.\n \n @private\n @class AssertAgainstNamedOutlets\n */\n function assertAgainstNamedOutlets(env) {\n var _env$meta;\n let moduleName = (_env$meta = env.meta) == null ? void 0 : _env$meta.moduleName;\n return {\n name: 'assert-against-named-outlets',\n visitor: {\n MustacheStatement(node) {\n if (node.path.type === 'PathExpression' && node.path.original === 'outlet' && node.params[0]) {\n let sourceInformation = (0, _calculateLocationDisplay.default)(moduleName, node.loc);\n (true && !(false) && (0, _debug.assert)(\"Named outlets were removed in Ember 4.0. See https://deprecations.emberjs.com/v3.x#toc_route-render-template for guidance on alternative APIs for named outlet use cases. \" + sourceInformation));\n }\n }\n }\n };\n }\n});","define(\"ember-template-compiler/lib/plugins/assert-input-helper-without-block\", [\"exports\", \"@ember/debug\", \"ember-template-compiler/lib/system/calculate-location-display\", \"ember-template-compiler/lib/plugins/utils\"], function (_exports, _debug, _calculateLocationDisplay, _utils) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = errorOnInputWithContent;\n function errorOnInputWithContent(env) {\n var _env$meta;\n let moduleName = (_env$meta = env.meta) == null ? void 0 : _env$meta.moduleName;\n return {\n name: 'assert-input-helper-without-block',\n visitor: {\n BlockStatement(node) {\n if ((0, _utils.isPath)(node.path) && node.path.original === 'input') {\n (true && !(false) && (0, _debug.assert)(assertMessage(moduleName, node)));\n }\n }\n }\n };\n }\n function assertMessage(moduleName, node) {\n let sourceInformation = (0, _calculateLocationDisplay.default)(moduleName, node.loc);\n return \"The {{input}} helper cannot be used in block form. \" + sourceInformation;\n }\n});","define(\"ember-template-compiler/lib/plugins/assert-reserved-named-arguments\", [\"exports\", \"@ember/debug\", \"ember-template-compiler/lib/system/calculate-location-display\"], function (_exports, _debug, _calculateLocationDisplay) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = assertReservedNamedArguments;\n function assertReservedNamedArguments(env) {\n var _env$meta;\n let moduleName = (_env$meta = env.meta) == null ? void 0 : _env$meta.moduleName;\n return {\n name: 'assert-reserved-named-arguments',\n visitor: {\n // In general, we don't assert on the invocation side to avoid creating migration\n // hazards (e.g. using angle bracket to invoke a classic component that uses\n // `this.someReservedName`. However, we want to avoid leaking special internal\n // things, such as `__ARGS__`, so those would need to be asserted on both sides.\n AttrNode(_ref) {\n let {\n name,\n loc\n } = _ref;\n if (name === '@__ARGS__') {\n (true && !(false) && (0, _debug.assert)(assertMessage(name) + \" \" + (0, _calculateLocationDisplay.default)(moduleName, loc)));\n }\n },\n HashPair(_ref2) {\n let {\n key,\n loc\n } = _ref2;\n if (key === '__ARGS__') {\n (true && !(false) && (0, _debug.assert)(assertMessage(key) + \" \" + (0, _calculateLocationDisplay.default)(moduleName, loc)));\n }\n },\n PathExpression(_ref3) {\n let {\n original,\n loc\n } = _ref3;\n if (isReserved(original)) {\n (true && !(false) && (0, _debug.assert)(assertMessage(original) + \" \" + (0, _calculateLocationDisplay.default)(moduleName, loc)));\n }\n }\n }\n };\n }\n const RESERVED = ['@arguments', '@args', '@block', '@else'];\n function isReserved(name) {\n return RESERVED.indexOf(name) !== -1 || Boolean(name.match(/^@[^a-z]/));\n }\n function assertMessage(name) {\n return \"'\" + name + \"' is reserved.\";\n }\n});","define(\"ember-template-compiler/lib/plugins/assert-splattribute-expression\", [\"exports\", \"@ember/debug\", \"ember-template-compiler/lib/system/calculate-location-display\"], function (_exports, _debug, _calculateLocationDisplay) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = assertSplattributeExpressions;\n function assertSplattributeExpressions(env) {\n var _env$meta;\n let moduleName = (_env$meta = env.meta) == null ? void 0 : _env$meta.moduleName;\n return {\n name: 'assert-splattribute-expressions',\n visitor: {\n PathExpression(_ref) {\n let {\n original,\n loc\n } = _ref;\n if (original === '...attributes') {\n (true && !(false) && (0, _debug.assert)(errorMessage() + \" \" + (0, _calculateLocationDisplay.default)(moduleName, loc)));\n }\n }\n }\n };\n }\n function errorMessage() {\n return '`...attributes` can only be used in the element position e.g. `<div ...attributes />`. It cannot be used as a path.';\n }\n});","define(\"ember-template-compiler/lib/plugins/index\", [\"exports\", \"ember-template-compiler/lib/plugins/assert-against-attrs\", \"ember-template-compiler/lib/plugins/assert-against-named-outlets\", \"ember-template-compiler/lib/plugins/assert-input-helper-without-block\", \"ember-template-compiler/lib/plugins/assert-reserved-named-arguments\", \"ember-template-compiler/lib/plugins/assert-splattribute-expression\", \"ember-template-compiler/lib/plugins/transform-action-syntax\", \"ember-template-compiler/lib/plugins/transform-each-in-into-each\", \"ember-template-compiler/lib/plugins/transform-each-track-array\", \"ember-template-compiler/lib/plugins/transform-in-element\", \"ember-template-compiler/lib/plugins/transform-quoted-bindings-into-just-bindings\", \"ember-template-compiler/lib/plugins/transform-resolutions\", \"ember-template-compiler/lib/plugins/transform-wrap-mount-and-outlet\"], function (_exports, _assertAgainstAttrs, _assertAgainstNamedOutlets, _assertInputHelperWithoutBlock, _assertReservedNamedArguments, _assertSplattributeExpression, _transformActionSyntax, _transformEachInIntoEach, _transformEachTrackArray, _transformInElement, _transformQuotedBindingsIntoJustBindings, _transformResolutions, _transformWrapMountAndOutlet) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.STRICT_MODE_TRANSFORMS = _exports.RESOLUTION_MODE_TRANSFORMS = void 0;\n // order of plugins is important\n const RESOLUTION_MODE_TRANSFORMS = _exports.RESOLUTION_MODE_TRANSFORMS = Object.freeze([_transformQuotedBindingsIntoJustBindings.default, _assertReservedNamedArguments.default, _transformActionSyntax.default, _assertAgainstAttrs.default, _transformEachInIntoEach.default, _assertInputHelperWithoutBlock.default, _transformInElement.default, _assertSplattributeExpression.default, _transformEachTrackArray.default, _assertAgainstNamedOutlets.default, _transformWrapMountAndOutlet.default, _transformResolutions.default].filter(notNull));\n const STRICT_MODE_TRANSFORMS = _exports.STRICT_MODE_TRANSFORMS = Object.freeze([_transformQuotedBindingsIntoJustBindings.default, _assertReservedNamedArguments.default, _transformActionSyntax.default, _transformEachInIntoEach.default, _transformInElement.default, _assertSplattributeExpression.default, _transformEachTrackArray.default, _assertAgainstNamedOutlets.default, _transformWrapMountAndOutlet.default].filter(notNull));\n function notNull(value) {\n return value !== null;\n }\n});","define(\"ember-template-compiler/lib/plugins/transform-action-syntax\", [\"exports\", \"ember-template-compiler/lib/plugins/utils\"], function (_exports, _utils) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = transformActionSyntax;\n /**\n @module ember\n */\n /**\n A Glimmer2 AST transformation that replaces all instances of\n \n ```handlebars\n <button {{action 'foo'}}>\n <button onblur={{action 'foo'}}>\n <button onblur={{action (action 'foo') 'bar'}}>\n ```\n \n with\n \n ```handlebars\n <button {{action this 'foo'}}>\n <button onblur={{action this 'foo'}}>\n <button onblur={{action this (action this 'foo') 'bar'}}>\n ```\n \n @private\n @class TransformActionSyntax\n */\n function transformActionSyntax(_ref) {\n let {\n syntax\n } = _ref;\n let {\n builders: b\n } = syntax;\n return {\n name: 'transform-action-syntax',\n visitor: {\n ElementModifierStatement(node) {\n if (isAction(node)) {\n insertThisAsFirstParam(node, b);\n }\n },\n MustacheStatement(node) {\n if (isAction(node)) {\n insertThisAsFirstParam(node, b);\n }\n },\n SubExpression(node) {\n if (isAction(node)) {\n insertThisAsFirstParam(node, b);\n }\n }\n }\n };\n }\n function isAction(node) {\n return (0, _utils.isPath)(node.path) && node.path.original === 'action';\n }\n function insertThisAsFirstParam(node, builders) {\n node.params.unshift(builders.path('this'));\n }\n});","define(\"ember-template-compiler/lib/plugins/transform-each-in-into-each\", [\"exports\", \"ember-template-compiler/lib/plugins/utils\"], function (_exports, _utils) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = transformEachInIntoEach;\n /**\n @module ember\n */\n /**\n A Glimmer2 AST transformation that replaces all instances of\n \n ```handlebars\n {{#each-in iterableThing as |key value|}}\n ```\n \n with\n \n ```handlebars\n {{#each (-each-in iterableThing) as |value key|}}\n ```\n \n @private\n @class TransformHasBlockSyntax\n */\n function transformEachInIntoEach(env) {\n let {\n builders: b\n } = env.syntax;\n return {\n name: 'transform-each-in-into-each',\n visitor: {\n BlockStatement(node) {\n if ((0, _utils.isPath)(node.path) && node.path.original === 'each-in') {\n node.params[0] = b.sexpr(b.path('-each-in'), [node.params[0]]);\n let blockParams = node.program.blockParams;\n if (!blockParams || blockParams.length === 0) {\n // who uses {{#each-in}} without block params?!\n } else if (blockParams.length === 1) {\n // insert a dummy variable for the first slot\n // pick a name that won't parse so it won't shadow any real variables\n blockParams = ['( unused value )', blockParams[0]];\n } else {\n let key = blockParams.shift();\n let value = blockParams.shift();\n blockParams = [value, key, ...blockParams];\n }\n node.program.blockParams = blockParams;\n return b.block(b.path('each'), node.params, node.hash, node.program, node.inverse, node.loc);\n }\n }\n }\n };\n }\n});","define(\"ember-template-compiler/lib/plugins/transform-each-track-array\", [\"exports\", \"@ember/debug\", \"ember-template-compiler/lib/plugins/utils\"], function (_exports, _debug, _utils) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = transformEachTrackArray;\n /**\n @module ember\n */\n /**\n A Glimmer2 AST transformation that replaces all instances of\n \n ```handlebars\n {{#each iterableThing as |key value|}}\n ```\n \n with\n \n ```handlebars\n {{#each (-track-array iterableThing) as |key value|}}\n ```\n \n @private\n @class TransformHasBlockSyntax\n */\n function transformEachTrackArray(env) {\n let {\n builders: b\n } = env.syntax;\n return {\n name: 'transform-each-track-array',\n visitor: {\n BlockStatement(node) {\n if ((0, _utils.isPath)(node.path) && node.path.original === 'each') {\n let firstParam = node.params[0];\n (true && !(firstParam) && (0, _debug.assert)('has firstParam', firstParam));\n if (firstParam.type === 'SubExpression' && firstParam.path.type === 'PathExpression' && firstParam.path.original === '-each-in') {\n return;\n }\n node.params[0] = b.sexpr(b.path('-track-array'), [firstParam]);\n return b.block(b.path('each'), node.params, node.hash, node.program, node.inverse, node.loc);\n }\n }\n }\n };\n }\n});","define(\"ember-template-compiler/lib/plugins/transform-in-element\", [\"exports\", \"@ember/debug\", \"ember-template-compiler/lib/plugins/utils\"], function (_exports, _debug, _utils) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = transformInElement;\n /**\n @module ember\n */\n /**\n A Glimmer2 AST transformation that handles the public `{{in-element}}` as per RFC287.\n \n Issues a build time assertion for:\n \n ```handlebars\n {{#in-element someElement insertBefore=\"some-none-null-value\"}}\n {{modal-display text=text}}\n {{/in-element}}\n ```\n \n @private\n @class TransformInElement\n */\n function transformInElement(env) {\n let {\n builders: b\n } = env.syntax;\n return {\n name: 'transform-in-element',\n visitor: {\n BlockStatement(node) {\n if (!(0, _utils.isPath)(node.path)) return;\n if (node.path.original === 'in-element') {\n let originalValue = node.params[0];\n if (originalValue && !env.isProduction) {\n let subExpr = b.sexpr('-in-el-null', [originalValue]);\n node.params.shift();\n node.params.unshift(subExpr);\n }\n node.hash.pairs.forEach(pair => {\n if (pair.key === 'insertBefore') {\n (true && !(pair.value.type === 'NullLiteral' || pair.value.type === 'UndefinedLiteral') && (0, _debug.assert)(\"Can only pass null to insertBefore in in-element, received: \" + JSON.stringify(pair.value), pair.value.type === 'NullLiteral' || pair.value.type === 'UndefinedLiteral'));\n }\n });\n }\n }\n }\n };\n }\n});","define(\"ember-template-compiler/lib/plugins/transform-quoted-bindings-into-just-bindings\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = transformQuotedBindingsIntoJustBindings;\n function transformQuotedBindingsIntoJustBindings( /* env */\n ) {\n return {\n name: 'transform-quoted-bindings-into-just-bindings',\n visitor: {\n ElementNode(node) {\n let styleAttr = getStyleAttr(node);\n if (!validStyleAttr(styleAttr)) {\n return;\n }\n styleAttr.value = styleAttr.value.parts[0];\n }\n }\n };\n }\n function validStyleAttr(attr) {\n if (!attr) {\n return false;\n }\n let value = attr.value;\n if (!value || value.type !== 'ConcatStatement' || value.parts.length !== 1) {\n return false;\n }\n let onlyPart = value.parts[0];\n return onlyPart.type === 'MustacheStatement';\n }\n function getStyleAttr(node) {\n let attributes = node.attributes;\n for (let attribute of attributes) {\n if (attribute.name === 'style') {\n return attribute;\n }\n }\n return undefined;\n }\n});","define(\"ember-template-compiler/lib/plugins/transform-resolutions\", [\"exports\", \"@ember/debug\", \"@glimmer/syntax\", \"ember-template-compiler/lib/system/calculate-location-display\", \"ember-template-compiler/lib/plugins/utils\"], function (_exports, _debug, _syntax, _calculateLocationDisplay, _utils) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = transformResolutions;\n /**\n @module ember\n */\n /**\n A Glimmer2 AST transformation that replaces all instances of\n \n ```handlebars\n {{helper \"...\" ...}}\n ```\n \n with\n \n ```handlebars\n {{helper (-resolve \"helper:...\") ...}}\n ```\n \n and\n \n ```handlebars\n {{helper ... ...}}\n ```\n \n with\n \n ```handlebars\n {{helper (-disallow-dynamic-resolution ...) ...}}\n ```\n \n and\n \n ```handlebars\n {{modifier \"...\" ...}}\n ```\n \n with\n \n ```handlebars\n {{modifier (-resolve \"modifier:...\") ...}}\n ```\n and\n \n ```handlebars\n {{modifier ... ...}}\n ```\n \n with\n \n ```handlebars\n {{modifier (-disallow-dynamic-resolution ...) ...}}\n ```\n \n @private\n @class TransformResolutions\n */\n const TARGETS = Object.freeze(['helper', 'modifier']);\n function transformResolutions(env) {\n var _env$meta;\n let {\n builders: b\n } = env.syntax;\n let moduleName = (_env$meta = env.meta) == null ? void 0 : _env$meta.moduleName;\n let {\n hasLocal,\n node: tracker\n } = (0, _utils.trackLocals)();\n let seen;\n return {\n name: 'transform-resolutions',\n visitor: {\n Template: {\n enter() {\n seen = new Set();\n },\n exit() {\n seen = undefined;\n }\n },\n Block: tracker,\n ElementNode: {\n keys: {\n children: tracker\n }\n },\n MustacheStatement(node) {\n (true && !(seen) && (0, _debug.assert)('[BUG] seen set should be available', seen));\n if (seen.has(node)) {\n return;\n }\n if ((0, _utils.isPath)(node.path) && !isLocalVariable(node.path, hasLocal) && TARGETS.indexOf(node.path.original) !== -1) {\n let result = b.mustache(node.path, transformParams(b, node.params, node.path.original, moduleName, node.loc), node.hash, node.trusting, node.loc, node.strip);\n // Avoid double/infinite-processing\n seen.add(result);\n return result;\n }\n },\n SubExpression(node) {\n (true && !(seen) && (0, _debug.assert)('[BUG] seen set should be available', seen));\n if (seen.has(node)) {\n return;\n }\n if ((0, _utils.isPath)(node.path) && !isLocalVariable(node.path, hasLocal) && TARGETS.indexOf(node.path.original) !== -1) {\n let result = b.sexpr(node.path, transformParams(b, node.params, node.path.original, moduleName, node.loc), node.hash, node.loc);\n // Avoid double/infinite-processing\n seen.add(result);\n return result;\n }\n }\n }\n };\n }\n function isLocalVariable(node, hasLocal) {\n return !node.this && node.parts.length === 1 && hasLocal(node.parts[0]);\n }\n function transformParams(b, params, type, moduleName, loc) {\n let [first, ...rest] = params;\n (true && !(first) && (0, _debug.assert)(\"The \" + type + \" keyword requires at least one positional arguments \" + (0, _calculateLocationDisplay.default)(moduleName, loc), first));\n if ((0, _utils.isStringLiteral)(first)) {\n return [b.sexpr(b.path('-resolve', first.loc), [b.string(type + \":\" + first.value)], undefined, first.loc), ...rest];\n } else if (true /* DEBUG */) {\n return [b.sexpr(b.path('-disallow-dynamic-resolution', first.loc), [first], b.hash([b.pair('type', b.string(type), first.loc), b.pair('loc', b.string((0, _calculateLocationDisplay.default)(moduleName, loc)), first.loc), b.pair('original', b.string((0, _syntax.print)(first)))]), first.loc), ...rest];\n } else {\n return params;\n }\n }\n});","define(\"ember-template-compiler/lib/plugins/transform-wrap-mount-and-outlet\", [\"exports\", \"ember-template-compiler/lib/plugins/utils\"], function (_exports, _utils) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = transformWrapMountAndOutlet;\n /**\n @module ember\n */\n /**\n A Glimmer2 AST transformation that replaces all instances of\n \n ```handlebars\n {{mount \"engine\" model=this.model}}\n ```\n \n with\n \n ```handlebars\n {{component (-mount \"engine\" model=this.model)}}\n ```\n \n and\n \n ```handlebars\n {{outlet}}\n ```\n \n with\n \n ```handlebars\n {{component (-outlet)}}\n ```\n \n @private\n @class TransformHasBlockSyntax\n */\n function transformWrapMountAndOutlet(env) {\n let {\n builders: b\n } = env.syntax;\n let {\n hasLocal,\n node\n } = (0, _utils.trackLocals)();\n return {\n name: 'transform-wrap-mount-and-outlet',\n visitor: {\n Program: node,\n ElementNode: node,\n MustacheStatement(node) {\n if ((0, _utils.isPath)(node.path) && (node.path.original === 'mount' || node.path.original === 'outlet') && !hasLocal(node.path.original)) {\n let subexpression = b.sexpr(b.path(\"-\" + node.path.original), node.params, node.hash, node.loc);\n return b.mustache(b.path('component'), [subexpression], b.hash(), undefined, node.loc);\n }\n }\n }\n };\n }\n});","define(\"ember-template-compiler/lib/plugins/utils\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.isPath = isPath;\n _exports.isStringLiteral = isStringLiteral;\n _exports.isSubExpression = isSubExpression;\n _exports.trackLocals = trackLocals;\n function isPath(node) {\n return node.type === 'PathExpression';\n }\n function isSubExpression(node) {\n return node.type === 'SubExpression';\n }\n function isStringLiteral(node) {\n return node.type === 'StringLiteral';\n }\n function trackLocals() {\n let locals = new Map();\n let node = {\n enter(node) {\n for (let param of node.blockParams) {\n let value = locals.get(param) || 0;\n locals.set(param, value + 1);\n }\n },\n exit(node) {\n for (let param of node.blockParams) {\n let value = locals.get(param) - 1;\n if (value === 0) {\n locals.delete(param);\n } else {\n locals.set(param, value);\n }\n }\n }\n };\n return {\n hasLocal: key => locals.has(key),\n node\n };\n }\n});","define(\"ember-template-compiler/lib/public-api\", [\"exports\", \"ember\", \"ember/version\", \"@glimmer/syntax\", \"ember-template-compiler/lib/system/precompile\", \"ember-template-compiler/lib/system/compile\", \"ember-template-compiler/lib/system/compile-options\", \"ember-template-compiler/lib/plugins\", \"@glimmer/compiler\"], function (_exports, _ember, _version, _GlimmerSyntax, _precompile, _compile, _compileOptions, _plugins, _compiler) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n Object.defineProperty(_exports, \"RESOLUTION_MODE_TRANSFORMS\", {\n enumerable: true,\n get: function () {\n return _plugins.RESOLUTION_MODE_TRANSFORMS;\n }\n });\n Object.defineProperty(_exports, \"STRICT_MODE_TRANSFORMS\", {\n enumerable: true,\n get: function () {\n return _plugins.STRICT_MODE_TRANSFORMS;\n }\n });\n Object.defineProperty(_exports, \"VERSION\", {\n enumerable: true,\n get: function () {\n return _version.default;\n }\n });\n Object.defineProperty(_exports, \"_Ember\", {\n enumerable: true,\n get: function () {\n return _ember.default;\n }\n });\n _exports._GlimmerSyntax = void 0;\n Object.defineProperty(_exports, \"_buildCompileOptions\", {\n enumerable: true,\n get: function () {\n return _compileOptions.buildCompileOptions;\n }\n });\n Object.defineProperty(_exports, \"_precompile\", {\n enumerable: true,\n get: function () {\n return _compiler.precompile;\n }\n });\n Object.defineProperty(_exports, \"_preprocess\", {\n enumerable: true,\n get: function () {\n return _GlimmerSyntax.preprocess;\n }\n });\n Object.defineProperty(_exports, \"_print\", {\n enumerable: true,\n get: function () {\n return _GlimmerSyntax.print;\n }\n });\n Object.defineProperty(_exports, \"_transformsFor\", {\n enumerable: true,\n get: function () {\n return _compileOptions.transformsFor;\n }\n });\n Object.defineProperty(_exports, \"compile\", {\n enumerable: true,\n get: function () {\n return _compile.default;\n }\n });\n Object.defineProperty(_exports, \"compileOptions\", {\n enumerable: true,\n get: function () {\n return _compileOptions.default;\n }\n });\n Object.defineProperty(_exports, \"precompile\", {\n enumerable: true,\n get: function () {\n return _precompile.default;\n }\n });\n _exports._GlimmerSyntax = _GlimmerSyntax;\n});","define(\"ember-template-compiler/lib/system/bootstrap\", [\"exports\", \"ember-template-compiler/lib/system/compile\"], function (_exports, _compile) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n /**\n @module ember\n */\n\n /**\n Find templates stored in the head tag as script tags and make them available\n to `Ember.CoreView` in the global `Ember.TEMPLATES` object.\n \n Script tags with `text/x-handlebars` will be compiled\n with Ember's template compiler and are suitable for use as a view's template.\n \n @private\n @method bootstrap\n @for Ember.HTMLBars\n @static\n @param ctx\n */\n function bootstrap(_ref) {\n let {\n context,\n hasTemplate,\n setTemplate\n } = _ref;\n if (!context) {\n context = document;\n }\n let selector = 'script[type=\"text/x-handlebars\"]';\n let elements = context.querySelectorAll(selector);\n for (let script of elements) {\n // Get the name of the script\n // First look for data-template-name attribute, then fall back to its\n // id if no name is found.\n let templateName = script.getAttribute('data-template-name') || script.getAttribute('id') || 'application';\n let template;\n template = (0, _compile.default)(script.innerHTML, {\n moduleName: templateName\n });\n // Check if template of same name already exists.\n if (hasTemplate(templateName)) {\n throw new Error(\"Template named \\\"\" + templateName + \"\\\" already exists.\");\n }\n // For templates which have a name, we save them and then remove them from the DOM.\n setTemplate(templateName, template);\n // Remove script tag from DOM.\n script.parentNode.removeChild(script);\n }\n }\n var _default = _exports.default = bootstrap;\n});","define(\"ember-template-compiler/lib/system/calculate-location-display\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = calculateLocationDisplay;\n function calculateLocationDisplay(moduleName, loc) {\n let moduleInfo = '';\n if (moduleName) {\n moduleInfo += \"'\" + moduleName + \"' \";\n }\n if (loc) {\n let {\n column,\n line\n } = loc.start || {\n line: undefined,\n column: undefined\n };\n if (line !== undefined && column !== undefined) {\n if (moduleName) {\n // only prepend @ if the moduleName was present\n moduleInfo += '@ ';\n }\n moduleInfo += \"L\" + line + \":C\" + column;\n }\n }\n if (moduleInfo) {\n moduleInfo = \"(\" + moduleInfo + \") \";\n }\n return moduleInfo;\n }\n});","define(\"ember-template-compiler/lib/system/compile-options\", [\"exports\", \"@ember/debug\", \"ember-template-compiler/lib/plugins/index\", \"ember-template-compiler/lib/system/dasherize-component-name\"], function (_exports, _debug, _index, _dasherizeComponentName) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.buildCompileOptions = buildCompileOptions;\n _exports.default = compileOptions;\n _exports.transformsFor = transformsFor;\n let USER_PLUGINS = [];\n function malformedComponentLookup(string) {\n return string.indexOf('::') === -1 && string.indexOf(':') > -1;\n }\n function buildCompileOptions(_options) {\n let moduleName = _options.moduleName;\n let options = Object.assign({\n meta: {},\n isProduction: false,\n plugins: {\n ast: []\n }\n }, _options, {\n moduleName,\n customizeComponentName(tagname) {\n (true && !(!malformedComponentLookup(tagname)) && (0, _debug.assert)(\"You tried to invoke a component named <\" + tagname + \" /> in \\\"\" + (moduleName != null ? moduleName : '[NO MODULE]') + \"\\\", but that is not a valid name for a component. Did you mean to use the \\\"::\\\" syntax for nested components?\", !malformedComponentLookup(tagname)));\n return _dasherizeComponentName.default.get(tagname);\n }\n });\n if ('locals' in options && !options.locals) {\n // Glimmer's precompile options declare `locals` like:\n // locals?: string[]\n // but many in-use versions of babel-plugin-htmlbars-inline-precompile will\n // set locals to `null`. This used to work but only because glimmer was\n // ignoring locals for non-strict templates, and now it supports that case.\n delete options.locals;\n }\n // move `moduleName` into `meta` property\n if (options.moduleName) {\n let meta = options.meta;\n (true && !(meta) && (0, _debug.assert)('has meta', meta)); // We just set it\n meta.moduleName = options.moduleName;\n }\n return options;\n }\n function transformsFor(options) {\n return options.strictMode ? _index.STRICT_MODE_TRANSFORMS : _index.RESOLUTION_MODE_TRANSFORMS;\n }\n function compileOptions(_options) {\n if (_options === void 0) {\n _options = {};\n }\n let options = buildCompileOptions(_options);\n let builtInPlugins = transformsFor(options);\n if (!_options.plugins) {\n options.plugins = {\n ast: [...USER_PLUGINS, ...builtInPlugins]\n };\n } else {\n let potententialPugins = [...USER_PLUGINS, ...builtInPlugins];\n (true && !(options.plugins) && (0, _debug.assert)('expected plugins', options.plugins));\n let pluginsToAdd = potententialPugins.filter(plugin => {\n (true && !(options.plugins) && (0, _debug.assert)('expected plugins', options.plugins));\n return options.plugins.ast.indexOf(plugin) === -1;\n });\n options.plugins.ast = options.plugins.ast.concat(pluginsToAdd);\n }\n return options;\n }\n});","define(\"ember-template-compiler/lib/system/compile\", [\"exports\", \"ember-template-compiler/lib/system/precompile\", \"@ember/-internals/glimmer\"], function (_exports, _precompile, _glimmer) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = compile;\n /**\n Uses HTMLBars `compile` function to process a string into a compiled template.\n This is not present in production builds.\n @private\n @method compile\n @param {String} templateString This is the string to be compiled by HTMLBars.\n @param {Object} options This is an options hash to augment the compiler options.\n */\n function compile(templateString, options) {\n if (options === void 0) {\n options = {};\n }\n if (!_glimmer.template) {\n throw new Error('Cannot call `compile` with only the template compiler loaded. Please load `ember.debug.js` or `ember.prod.js` prior to calling `compile`.');\n }\n return (0, _glimmer.template)(evaluate((0, _precompile.default)(templateString, options)));\n }\n function evaluate(precompiled) {\n return new Function(\"return \" + precompiled)();\n }\n});","define(\"ember-template-compiler/lib/system/dasherize-component-name\", [\"exports\", \"@ember/-internals/utils\"], function (_exports, _utils) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n /*\n This diverges from `Ember.String.dasherize` so that`<XFoo />` can resolve to `x-foo`.\n `Ember.String.dasherize` would resolve it to `xfoo`..\n */\n const SIMPLE_DASHERIZE_REGEXP = /[A-Z]|::/g;\n const ALPHA = /[A-Za-z0-9]/;\n var _default = _exports.default = new _utils.Cache(1000, key => key.replace(SIMPLE_DASHERIZE_REGEXP, (char, index) => {\n if (char === '::') {\n return '/';\n }\n if (index === 0 || !ALPHA.test(key[index - 1])) {\n return char.toLowerCase();\n }\n return \"-\" + char.toLowerCase();\n }));\n});","define(\"ember-template-compiler/lib/system/initializer\", [\"ember-template-compiler/lib/system/bootstrap\", \"@ember/-internals/browser-environment\", \"@ember/-internals/glimmer\", \"@ember/application\"], function (_bootstrap, emberEnv, emberGlimmer, emberApp) {\n \"use strict\";\n\n // Globals mode template compiler\n if (emberApp.default) {\n let Application = emberApp.default;\n let {\n hasTemplate,\n setTemplate\n } = emberGlimmer;\n let {\n hasDOM\n } = emberEnv;\n Application.initializer({\n name: 'domTemplates',\n initialize() {\n if (hasDOM) {\n (0, _bootstrap.default)({\n context: document,\n hasTemplate,\n setTemplate\n });\n }\n }\n });\n }\n});","define(\"ember-template-compiler/lib/system/precompile\", [\"exports\", \"@glimmer/compiler\", \"ember-template-compiler/lib/system/compile-options\"], function (_exports, _compiler, _compileOptions) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = precompile;\n /**\n @module ember\n */\n\n /**\n Uses HTMLBars `compile` function to process a string into a compiled template string.\n The returned string must be passed through `Ember.HTMLBars.template`.\n \n This is not present in production builds.\n \n @private\n @method precompile\n @param {String} templateString This is the string to be compiled by HTMLBars.\n */\n function precompile(templateString, options) {\n if (options === void 0) {\n options = {};\n }\n return (0, _compiler.precompile)(templateString, (0, _compileOptions.default)(options));\n }\n});","define(\"ember-template-compiler/lib/types\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n});","define(\"ember-template-compiler/minimal\", [\"exports\", \"ember-template-compiler/lib/system/precompile\", \"ember-template-compiler/lib/system/compile-options\", \"@glimmer/syntax\"], function (_exports, _precompile, _compileOptions, _syntax) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n Object.defineProperty(_exports, \"_buildCompileOptions\", {\n enumerable: true,\n get: function () {\n return _compileOptions.buildCompileOptions;\n }\n });\n Object.defineProperty(_exports, \"_preprocess\", {\n enumerable: true,\n get: function () {\n return _syntax.preprocess;\n }\n });\n Object.defineProperty(_exports, \"_print\", {\n enumerable: true,\n get: function () {\n return _syntax.print;\n }\n });\n Object.defineProperty(_exports, \"precompile\", {\n enumerable: true,\n get: function () {\n return _precompile.default;\n }\n });\n});","define(\"ember/version\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.default = void 0;\n var _default = _exports.default = \"5.9.0-alpha.4\";\n});","define(\"simple-html-tokenizer\", [\"exports\"], function (_exports) {\n \"use strict\";\n\n Object.defineProperty(_exports, \"__esModule\", {\n value: true\n });\n _exports.Tokenizer = _exports.HTML5NamedCharRefs = _exports.EventedTokenizer = _exports.EntityParser = void 0;\n _exports.tokenize = tokenize;\n /**\n * generated from https://raw.githubusercontent.com/w3c/html/26b5126f96f736f796b9e29718138919dd513744/entities.json\n * do not edit\n */\n var namedCharRefs = _exports.HTML5NamedCharRefs = {\n Aacute: \"Á\",\n aacute: \"á\",\n Abreve: \"Ă\",\n abreve: \"ă\",\n ac: \"∾\",\n acd: \"∿\",\n acE: \"∾̳\",\n Acirc: \"Â\",\n acirc: \"â\",\n acute: \"´\",\n Acy: \"А\",\n acy: \"а\",\n AElig: \"Æ\",\n aelig: \"æ\",\n af: \"\\u2061\",\n Afr: \"𝔄\",\n afr: \"𝔞\",\n Agrave: \"À\",\n agrave: \"à\",\n alefsym: \"ℵ\",\n aleph: \"ℵ\",\n Alpha: \"Α\",\n alpha: \"α\",\n Amacr: \"Ā\",\n amacr: \"ā\",\n amalg: \"⨿\",\n amp: \"&\",\n AMP: \"&\",\n andand: \"⩕\",\n And: \"⩓\",\n and: \"∧\",\n andd: \"⩜\",\n andslope: \"⩘\",\n andv: \"⩚\",\n ang: \"∠\",\n ange: \"⦤\",\n angle: \"∠\",\n angmsdaa: \"⦨\",\n angmsdab: \"⦩\",\n angmsdac: \"⦪\",\n angmsdad: \"⦫\",\n angmsdae: \"⦬\",\n angmsdaf: \"⦭\",\n angmsdag: \"⦮\",\n angmsdah: \"⦯\",\n angmsd: \"∡\",\n angrt: \"∟\",\n angrtvb: \"⊾\",\n angrtvbd: \"⦝\",\n angsph: \"∢\",\n angst: \"Å\",\n angzarr: \"⍼\",\n Aogon: \"Ą\",\n aogon: \"ą\",\n Aopf: \"𝔸\",\n aopf: \"𝕒\",\n apacir: \"⩯\",\n ap: \"≈\",\n apE: \"⩰\",\n ape: \"≊\",\n apid: \"≋\",\n apos: \"'\",\n ApplyFunction: \"\\u2061\",\n approx: \"≈\",\n approxeq: \"≊\",\n Aring: \"Å\",\n aring: \"å\",\n Ascr: \"𝒜\",\n ascr: \"𝒶\",\n Assign: \"≔\",\n ast: \"*\",\n asymp: \"≈\",\n asympeq: \"≍\",\n Atilde: \"Ã\",\n atilde: \"ã\",\n Auml: \"Ä\",\n auml: \"ä\",\n awconint: \"∳\",\n awint: \"⨑\",\n backcong: \"≌\",\n backepsilon: \"϶\",\n backprime: \"‵\",\n backsim: \"∽\",\n backsimeq: \"⋍\",\n Backslash: \"∖\",\n Barv: \"⫧\",\n barvee: \"⊽\",\n barwed: \"⌅\",\n Barwed: \"⌆\",\n barwedge: \"⌅\",\n bbrk: \"⎵\",\n bbrktbrk: \"⎶\",\n bcong: \"≌\",\n Bcy: \"Б\",\n bcy: \"б\",\n bdquo: \"„\",\n becaus: \"∵\",\n because: \"∵\",\n Because: \"∵\",\n bemptyv: \"⦰\",\n bepsi: \"϶\",\n bernou: \"ℬ\",\n Bernoullis: \"ℬ\",\n Beta: \"Β\",\n beta: \"β\",\n beth: \"ℶ\",\n between: \"≬\",\n Bfr: \"𝔅\",\n bfr: \"𝔟\",\n bigcap: \"⋂\",\n bigcirc: \"◯\",\n bigcup: \"⋃\",\n bigodot: \"⨀\",\n bigoplus: \"⨁\",\n bigotimes: \"⨂\",\n bigsqcup: \"⨆\",\n bigstar: \"★\",\n bigtriangledown: \"▽\",\n bigtriangleup: \"△\",\n biguplus: \"⨄\",\n bigvee: \"⋁\",\n bigwedge: \"⋀\",\n bkarow: \"⤍\",\n blacklozenge: \"⧫\",\n blacksquare: \"▪\",\n blacktriangle: \"▴\",\n blacktriangledown: \"▾\",\n blacktriangleleft: \"◂\",\n blacktriangleright: \"▸\",\n blank: \"␣\",\n blk12: \"▒\",\n blk14: \"░\",\n blk34: \"▓\",\n block: \"█\",\n bne: \"=⃥\",\n bnequiv: \"≡⃥\",\n bNot: \"⫭\",\n bnot: \"⌐\",\n Bopf: \"𝔹\",\n bopf: \"𝕓\",\n bot: \"⊥\",\n bottom: \"⊥\",\n bowtie: \"⋈\",\n boxbox: \"⧉\",\n boxdl: \"┐\",\n boxdL: \"╕\",\n boxDl: \"╖\",\n boxDL: \"╗\",\n boxdr: \"┌\",\n boxdR: \"╒\",\n boxDr: \"╓\",\n boxDR: \"╔\",\n boxh: \"─\",\n boxH: \"═\",\n boxhd: \"┬\",\n boxHd: \"╤\",\n boxhD: \"╥\",\n boxHD: \"╦\",\n boxhu: \"┴\",\n boxHu: \"╧\",\n boxhU: \"╨\",\n boxHU: \"╩\",\n boxminus: \"⊟\",\n boxplus: \"⊞\",\n boxtimes: \"⊠\",\n boxul: \"┘\",\n boxuL: \"╛\",\n boxUl: \"╜\",\n boxUL: \"╝\",\n boxur: \"└\",\n boxuR: \"╘\",\n boxUr: \"╙\",\n boxUR: \"╚\",\n boxv: \"│\",\n boxV: \"║\",\n boxvh: \"┼\",\n boxvH: \"╪\",\n boxVh: \"╫\",\n boxVH: \"╬\",\n boxvl: \"┤\",\n boxvL: \"╡\",\n boxVl: \"╢\",\n boxVL: \"╣\",\n boxvr: \"├\",\n boxvR: \"╞\",\n boxVr: \"╟\",\n boxVR: \"╠\",\n bprime: \"‵\",\n breve: \"˘\",\n Breve: \"˘\",\n brvbar: \"¦\",\n bscr: \"𝒷\",\n Bscr: \"ℬ\",\n bsemi: \"⁏\",\n bsim: \"∽\",\n bsime: \"⋍\",\n bsolb: \"⧅\",\n bsol: \"\\\\\",\n bsolhsub: \"⟈\",\n bull: \"•\",\n bullet: \"•\",\n bump: \"≎\",\n bumpE: \"⪮\",\n bumpe: \"≏\",\n Bumpeq: \"≎\",\n bumpeq: \"≏\",\n Cacute: \"Ć\",\n cacute: \"ć\",\n capand: \"⩄\",\n capbrcup: \"⩉\",\n capcap: \"⩋\",\n cap: \"∩\",\n Cap: \"⋒\",\n capcup: \"⩇\",\n capdot: \"⩀\",\n CapitalDifferentialD: \"ⅅ\",\n caps: \"∩︀\",\n caret: \"⁁\",\n caron: \"ˇ\",\n Cayleys: \"ℭ\",\n ccaps: \"⩍\",\n Ccaron: \"Č\",\n ccaron: \"č\",\n Ccedil: \"Ç\",\n ccedil: \"ç\",\n Ccirc: \"Ĉ\",\n ccirc: \"ĉ\",\n Cconint: \"∰\",\n ccups: \"⩌\",\n ccupssm: \"⩐\",\n Cdot: \"Ċ\",\n cdot: \"ċ\",\n cedil: \"¸\",\n Cedilla: \"¸\",\n cemptyv: \"⦲\",\n cent: \"¢\",\n centerdot: \"·\",\n CenterDot: \"·\",\n cfr: \"𝔠\",\n Cfr: \"ℭ\",\n CHcy: \"Ч\",\n chcy: \"ч\",\n check: \"✓\",\n checkmark: \"✓\",\n Chi: \"Χ\",\n chi: \"χ\",\n circ: \"ˆ\",\n circeq: \"≗\",\n circlearrowleft: \"↺\",\n circlearrowright: \"↻\",\n circledast: \"⊛\",\n circledcirc: \"⊚\",\n circleddash: \"⊝\",\n CircleDot: \"⊙\",\n circledR: \"®\",\n circledS: \"Ⓢ\",\n CircleMinus: \"⊖\",\n CirclePlus: \"⊕\",\n CircleTimes: \"⊗\",\n cir: \"○\",\n cirE: \"⧃\",\n cire: \"≗\",\n cirfnint: \"⨐\",\n cirmid: \"⫯\",\n cirscir: \"⧂\",\n ClockwiseContourIntegral: \"∲\",\n CloseCurlyDoubleQuote: \"”\",\n CloseCurlyQuote: \"’\",\n clubs: \"♣\",\n clubsuit: \"♣\",\n colon: \":\",\n Colon: \"∷\",\n Colone: \"⩴\",\n colone: \"≔\",\n coloneq: \"≔\",\n comma: \",\",\n commat: \"@\",\n comp: \"∁\",\n compfn: \"∘\",\n complement: \"∁\",\n complexes: \"ℂ\",\n cong: \"≅\",\n congdot: \"⩭\",\n Congruent: \"≡\",\n conint: \"∮\",\n Conint: \"∯\",\n ContourIntegral: \"∮\",\n copf: \"𝕔\",\n Copf: \"ℂ\",\n coprod: \"∐\",\n Coproduct: \"∐\",\n copy: \"©\",\n COPY: \"©\",\n copysr: \"℗\",\n CounterClockwiseContourIntegral: \"∳\",\n crarr: \"↵\",\n cross: \"✗\",\n Cross: \"⨯\",\n Cscr: \"𝒞\",\n cscr: \"𝒸\",\n csub: \"⫏\",\n csube: \"⫑\",\n csup: \"⫐\",\n csupe: \"⫒\",\n ctdot: \"⋯\",\n cudarrl: \"⤸\",\n cudarrr: \"⤵\",\n cuepr: \"⋞\",\n cuesc: \"⋟\",\n cularr: \"↶\",\n cularrp: \"⤽\",\n cupbrcap: \"⩈\",\n cupcap: \"⩆\",\n CupCap: \"≍\",\n cup: \"∪\",\n Cup: \"⋓\",\n cupcup: \"⩊\",\n cupdot: \"⊍\",\n cupor: \"⩅\",\n cups: \"∪︀\",\n curarr: \"↷\",\n curarrm: \"⤼\",\n curlyeqprec: \"⋞\",\n curlyeqsucc: \"⋟\",\n curlyvee: \"⋎\",\n curlywedge: \"⋏\",\n curren: \"¤\",\n curvearrowleft: \"↶\",\n curvearrowright: \"↷\",\n cuvee: \"⋎\",\n cuwed: \"⋏\",\n cwconint: \"∲\",\n cwint: \"∱\",\n cylcty: \"⌭\",\n dagger: \"†\",\n Dagger: \"‡\",\n daleth: \"ℸ\",\n darr: \"↓\",\n Darr: \"↡\",\n dArr: \"⇓\",\n dash: \"‐\",\n Dashv: \"⫤\",\n dashv: \"⊣\",\n dbkarow: \"⤏\",\n dblac: \"˝\",\n Dcaron: \"Ď\",\n dcaron: \"ď\",\n Dcy: \"Д\",\n dcy: \"д\",\n ddagger: \"‡\",\n ddarr: \"⇊\",\n DD: \"ⅅ\",\n dd: \"ⅆ\",\n DDotrahd: \"⤑\",\n ddotseq: \"⩷\",\n deg: \"°\",\n Del: \"∇\",\n Delta: \"Δ\",\n delta: \"δ\",\n demptyv: \"⦱\",\n dfisht: \"⥿\",\n Dfr: \"𝔇\",\n dfr: \"𝔡\",\n dHar: \"⥥\",\n dharl: \"⇃\",\n dharr: \"⇂\",\n DiacriticalAcute: \"´\",\n DiacriticalDot: \"˙\",\n DiacriticalDoubleAcute: \"˝\",\n DiacriticalGrave: \"`\",\n DiacriticalTilde: \"˜\",\n diam: \"⋄\",\n diamond: \"⋄\",\n Diamond: \"⋄\",\n diamondsuit: \"♦\",\n diams: \"♦\",\n die: \"¨\",\n DifferentialD: \"ⅆ\",\n digamma: \"ϝ\",\n disin: \"⋲\",\n div: \"÷\",\n divide: \"÷\",\n divideontimes: \"⋇\",\n divonx: \"⋇\",\n DJcy: \"Ђ\",\n djcy: \"ђ\",\n dlcorn: \"⌞\",\n dlcrop: \"⌍\",\n dollar: \"$\",\n Dopf: \"𝔻\",\n dopf: \"𝕕\",\n Dot: \"¨\",\n dot: \"˙\",\n DotDot: \"⃜\",\n doteq: \"≐\",\n doteqdot: \"≑\",\n DotEqual: \"≐\",\n dotminus: \"∸\",\n dotplus: \"∔\",\n dotsquare: \"⊡\",\n doublebarwedge: \"⌆\",\n DoubleContourIntegral: \"∯\",\n DoubleDot: \"¨\",\n DoubleDownArrow: \"⇓\",\n DoubleLeftArrow: \"⇐\",\n DoubleLeftRightArrow: \"⇔\",\n DoubleLeftTee: \"⫤\",\n DoubleLongLeftArrow: \"⟸\",\n DoubleLongLeftRightArrow: \"⟺\",\n DoubleLongRightArrow: \"⟹\",\n DoubleRightArrow: \"⇒\",\n DoubleRightTee: \"⊨\",\n DoubleUpArrow: \"⇑\",\n DoubleUpDownArrow: \"⇕\",\n DoubleVerticalBar: \"∥\",\n DownArrowBar: \"⤓\",\n downarrow: \"↓\",\n DownArrow: \"↓\",\n Downarrow: \"⇓\",\n DownArrowUpArrow: \"⇵\",\n DownBreve: \"̑\",\n downdownarrows: \"⇊\",\n downharpoonleft: \"⇃\",\n downharpoonright: \"⇂\",\n DownLeftRightVector: \"⥐\",\n DownLeftTeeVector: \"⥞\",\n DownLeftVectorBar: \"⥖\",\n DownLeftVector: \"↽\",\n DownRightTeeVector: \"⥟\",\n DownRightVectorBar: \"⥗\",\n DownRightVector: \"⇁\",\n DownTeeArrow: \"↧\",\n DownTee: \"⊤\",\n drbkarow: \"⤐\",\n drcorn: \"⌟\",\n drcrop: \"⌌\",\n Dscr: \"𝒟\",\n dscr: \"𝒹\",\n DScy: \"Ѕ\",\n dscy: \"ѕ\",\n dsol: \"⧶\",\n Dstrok: \"Đ\",\n dstrok: \"đ\",\n dtdot: \"⋱\",\n dtri: \"▿\",\n dtrif: \"▾\",\n duarr: \"⇵\",\n duhar: \"⥯\",\n dwangle: \"⦦\",\n DZcy: \"Џ\",\n dzcy: \"џ\",\n dzigrarr: \"⟿\",\n Eacute: \"É\",\n eacute: \"é\",\n easter: \"⩮\",\n Ecaron: \"Ě\",\n ecaron: \"ě\",\n Ecirc: \"Ê\",\n ecirc: \"ê\",\n ecir: \"≖\",\n ecolon: \"≕\",\n Ecy: \"Э\",\n ecy: \"э\",\n eDDot: \"⩷\",\n Edot: \"Ė\",\n edot: \"ė\",\n eDot: \"≑\",\n ee: \"ⅇ\",\n efDot: \"≒\",\n Efr: \"𝔈\",\n efr: \"𝔢\",\n eg: \"⪚\",\n Egrave: \"È\",\n egrave: \"è\",\n egs: \"⪖\",\n egsdot: \"⪘\",\n el: \"⪙\",\n Element: \"∈\",\n elinters: \"⏧\",\n ell: \"ℓ\",\n els: \"⪕\",\n elsdot: \"⪗\",\n Emacr: \"Ē\",\n emacr: \"ē\",\n empty: \"∅\",\n emptyset: \"∅\",\n EmptySmallSquare: \"◻\",\n emptyv: \"∅\",\n EmptyVerySmallSquare: \"▫\",\n emsp13: \" \",\n emsp14: \" \",\n emsp: \" \",\n ENG: \"Ŋ\",\n eng: \"ŋ\",\n ensp: \" \",\n Eogon: \"Ę\",\n eogon: \"ę\",\n Eopf: \"𝔼\",\n eopf: \"𝕖\",\n epar: \"⋕\",\n eparsl: \"⧣\",\n eplus: \"⩱\",\n epsi: \"ε\",\n Epsilon: \"Ε\",\n epsilon: \"ε\",\n epsiv: \"ϵ\",\n eqcirc: \"≖\",\n eqcolon: \"≕\",\n eqsim: \"≂\",\n eqslantgtr: \"⪖\",\n eqslantless: \"⪕\",\n Equal: \"⩵\",\n equals: \"=\",\n EqualTilde: \"≂\",\n equest: \"≟\",\n Equilibrium: \"⇌\",\n equiv: \"≡\",\n equivDD: \"⩸\",\n eqvparsl: \"⧥\",\n erarr: \"⥱\",\n erDot: \"≓\",\n escr: \"ℯ\",\n Escr: \"ℰ\",\n esdot: \"≐\",\n Esim: \"⩳\",\n esim: \"≂\",\n Eta: \"Η\",\n eta: \"η\",\n ETH: \"Ð\",\n eth: \"ð\",\n Euml: \"Ë\",\n euml: \"ë\",\n euro: \"€\",\n excl: \"!\",\n exist: \"∃\",\n Exists: \"∃\",\n expectation: \"ℰ\",\n exponentiale: \"ⅇ\",\n ExponentialE: \"ⅇ\",\n fallingdotseq: \"≒\",\n Fcy: \"Ф\",\n fcy: \"ф\",\n female: \"♀\",\n ffilig: \"ffi\",\n fflig: \"ff\",\n ffllig: \"ffl\",\n Ffr: \"𝔉\",\n ffr: \"𝔣\",\n filig: \"fi\",\n FilledSmallSquare: \"◼\",\n FilledVerySmallSquare: \"▪\",\n fjlig: \"fj\",\n flat: \"♭\",\n fllig: \"fl\",\n fltns: \"▱\",\n fnof: \"ƒ\",\n Fopf: \"𝔽\",\n fopf: \"𝕗\",\n forall: \"∀\",\n ForAll: \"∀\",\n fork: \"⋔\",\n forkv: \"⫙\",\n Fouriertrf: \"ℱ\",\n fpartint: \"⨍\",\n frac12: \"½\",\n frac13: \"⅓\",\n frac14: \"¼\",\n frac15: \"⅕\",\n frac16: \"⅙\",\n frac18: \"⅛\",\n frac23: \"⅔\",\n frac25: \"⅖\",\n frac34: \"¾\",\n frac35: \"⅗\",\n frac38: \"⅜\",\n frac45: \"⅘\",\n frac56: \"⅚\",\n frac58: \"⅝\",\n frac78: \"⅞\",\n frasl: \"⁄\",\n frown: \"⌢\",\n fscr: \"𝒻\",\n Fscr: \"ℱ\",\n gacute: \"ǵ\",\n Gamma: \"Γ\",\n gamma: \"γ\",\n Gammad: \"Ϝ\",\n gammad: \"ϝ\",\n gap: \"⪆\",\n Gbreve: \"Ğ\",\n gbreve: \"ğ\",\n Gcedil: \"Ģ\",\n Gcirc: \"Ĝ\",\n gcirc: \"ĝ\",\n Gcy: \"Г\",\n gcy: \"г\",\n Gdot: \"Ġ\",\n gdot: \"ġ\",\n ge: \"≥\",\n gE: \"≧\",\n gEl: \"⪌\",\n gel: \"⋛\",\n geq: \"≥\",\n geqq: \"≧\",\n geqslant: \"⩾\",\n gescc: \"⪩\",\n ges: \"⩾\",\n gesdot: \"⪀\",\n gesdoto: \"⪂\",\n gesdotol: \"⪄\",\n gesl: \"⋛︀\",\n gesles: \"⪔\",\n Gfr: \"𝔊\",\n gfr: \"𝔤\",\n gg: \"≫\",\n Gg: \"⋙\",\n ggg: \"⋙\",\n gimel: \"ℷ\",\n GJcy: \"Ѓ\",\n gjcy: \"ѓ\",\n gla: \"⪥\",\n gl: \"≷\",\n glE: \"⪒\",\n glj: \"⪤\",\n gnap: \"⪊\",\n gnapprox: \"⪊\",\n gne: \"⪈\",\n gnE: \"≩\",\n gneq: \"⪈\",\n gneqq: \"≩\",\n gnsim: \"⋧\",\n Gopf: \"𝔾\",\n gopf: \"𝕘\",\n grave: \"`\",\n GreaterEqual: \"≥\",\n GreaterEqualLess: \"⋛\",\n GreaterFullEqual: \"≧\",\n GreaterGreater: \"⪢\",\n GreaterLess: \"≷\",\n GreaterSlantEqual: \"⩾\",\n GreaterTilde: \"≳\",\n Gscr: \"𝒢\",\n gscr: \"ℊ\",\n gsim: \"≳\",\n gsime: \"⪎\",\n gsiml: \"⪐\",\n gtcc: \"⪧\",\n gtcir: \"⩺\",\n gt: \">\",\n GT: \">\",\n Gt: \"≫\",\n gtdot: \"⋗\",\n gtlPar: \"⦕\",\n gtquest: \"⩼\",\n gtrapprox: \"⪆\",\n gtrarr: \"⥸\",\n gtrdot: \"⋗\",\n gtreqless: \"⋛\",\n gtreqqless: \"⪌\",\n gtrless: \"≷\",\n gtrsim: \"≳\",\n gvertneqq: \"≩︀\",\n gvnE: \"≩︀\",\n Hacek: \"ˇ\",\n hairsp: \" \",\n half: \"½\",\n hamilt: \"ℋ\",\n HARDcy: \"Ъ\",\n hardcy: \"ъ\",\n harrcir: \"⥈\",\n harr: \"↔\",\n hArr: \"⇔\",\n harrw: \"↭\",\n Hat: \"^\",\n hbar: \"ℏ\",\n Hcirc: \"Ĥ\",\n hcirc: \"ĥ\",\n hearts: \"♥\",\n heartsuit: \"♥\",\n hellip: \"…\",\n hercon: \"⊹\",\n hfr: \"𝔥\",\n Hfr: \"ℌ\",\n HilbertSpace: \"ℋ\",\n hksearow: \"⤥\",\n hkswarow: \"⤦\",\n hoarr: \"⇿\",\n homtht: \"∻\",\n hookleftarrow: \"↩\",\n hookrightarrow: \"↪\",\n hopf: \"𝕙\",\n Hopf: \"ℍ\",\n horbar: \"―\",\n HorizontalLine: \"─\",\n hscr: \"𝒽\",\n Hscr: \"ℋ\",\n hslash: \"ℏ\",\n Hstrok: \"Ħ\",\n hstrok: \"ħ\",\n HumpDownHump: \"≎\",\n HumpEqual: \"≏\",\n hybull: \"⁃\",\n hyphen: \"‐\",\n Iacute: \"Í\",\n iacute: \"í\",\n ic: \"\\u2063\",\n Icirc: \"Î\",\n icirc: \"î\",\n Icy: \"И\",\n icy: \"и\",\n Idot: \"İ\",\n IEcy: \"Е\",\n iecy: \"е\",\n iexcl: \"¡\",\n iff: \"⇔\",\n ifr: \"𝔦\",\n Ifr: \"ℑ\",\n Igrave: \"Ì\",\n igrave: \"ì\",\n ii: \"ⅈ\",\n iiiint: \"⨌\",\n iiint: \"∭\",\n iinfin: \"⧜\",\n iiota: \"℩\",\n IJlig: \"IJ\",\n ijlig: \"ij\",\n Imacr: \"Ī\",\n imacr: \"ī\",\n image: \"ℑ\",\n ImaginaryI: \"ⅈ\",\n imagline: \"ℐ\",\n imagpart: \"ℑ\",\n imath: \"ı\",\n Im: \"ℑ\",\n imof: \"⊷\",\n imped: \"Ƶ\",\n Implies: \"⇒\",\n incare: \"℅\",\n in: \"∈\",\n infin: \"∞\",\n infintie: \"⧝\",\n inodot: \"ı\",\n intcal: \"⊺\",\n int: \"∫\",\n Int: \"∬\",\n integers: \"ℤ\",\n Integral: \"∫\",\n intercal: \"⊺\",\n Intersection: \"⋂\",\n intlarhk: \"⨗\",\n intprod: \"⨼\",\n InvisibleComma: \"\\u2063\",\n InvisibleTimes: \"\\u2062\",\n IOcy: \"Ё\",\n iocy: \"ё\",\n Iogon: \"Į\",\n iogon: \"į\",\n Iopf: \"𝕀\",\n iopf: \"𝕚\",\n Iota: \"Ι\",\n iota: \"ι\",\n iprod: \"⨼\",\n iquest: \"¿\",\n iscr: \"𝒾\",\n Iscr: \"ℐ\",\n isin: \"∈\",\n isindot: \"⋵\",\n isinE: \"⋹\",\n isins: \"⋴\",\n isinsv: \"⋳\",\n isinv: \"∈\",\n it: \"\\u2062\",\n Itilde: \"Ĩ\",\n itilde: \"ĩ\",\n Iukcy: \"І\",\n iukcy: \"і\",\n Iuml: \"Ï\",\n iuml: \"ï\",\n Jcirc: \"Ĵ\",\n jcirc: \"ĵ\",\n Jcy: \"Й\",\n jcy: \"й\",\n Jfr: \"𝔍\",\n jfr: \"𝔧\",\n jmath: \"ȷ\",\n Jopf: \"𝕁\",\n jopf: \"𝕛\",\n Jscr: \"𝒥\",\n jscr: \"𝒿\",\n Jsercy: \"Ј\",\n jsercy: \"ј\",\n Jukcy: \"Є\",\n jukcy: \"є\",\n Kappa: \"Κ\",\n kappa: \"κ\",\n kappav: \"ϰ\",\n Kcedil: \"Ķ\",\n kcedil: \"ķ\",\n Kcy: \"К\",\n kcy: \"к\",\n Kfr: \"𝔎\",\n kfr: \"𝔨\",\n kgreen: \"ĸ\",\n KHcy: \"Х\",\n khcy: \"х\",\n KJcy: \"Ќ\",\n kjcy: \"ќ\",\n Kopf: \"𝕂\",\n kopf: \"𝕜\",\n Kscr: \"𝒦\",\n kscr: \"𝓀\",\n lAarr: \"⇚\",\n Lacute: \"Ĺ\",\n lacute: \"ĺ\",\n laemptyv: \"⦴\",\n lagran: \"ℒ\",\n Lambda: \"Λ\",\n lambda: \"λ\",\n lang: \"⟨\",\n Lang: \"⟪\",\n langd: \"⦑\",\n langle: \"⟨\",\n lap: \"⪅\",\n Laplacetrf: \"ℒ\",\n laquo: \"«\",\n larrb: \"⇤\",\n larrbfs: \"⤟\",\n larr: \"←\",\n Larr: \"↞\",\n lArr: \"⇐\",\n larrfs: \"⤝\",\n larrhk: \"↩\",\n larrlp: \"↫\",\n larrpl: \"⤹\",\n larrsim: \"⥳\",\n larrtl: \"↢\",\n latail: \"⤙\",\n lAtail: \"⤛\",\n lat: \"⪫\",\n late: \"⪭\",\n lates: \"⪭︀\",\n lbarr: \"⤌\",\n lBarr: \"⤎\",\n lbbrk: \"❲\",\n lbrace: \"{\",\n lbrack: \"[\",\n lbrke: \"⦋\",\n lbrksld: \"⦏\",\n lbrkslu: \"⦍\",\n Lcaron: \"Ľ\",\n lcaron: \"ľ\",\n Lcedil: \"Ļ\",\n lcedil: \"ļ\",\n lceil: \"⌈\",\n lcub: \"{\",\n Lcy: \"Л\",\n lcy: \"л\",\n ldca: \"⤶\",\n ldquo: \"“\",\n ldquor: \"„\",\n ldrdhar: \"⥧\",\n ldrushar: \"⥋\",\n ldsh: \"↲\",\n le: \"≤\",\n lE: \"≦\",\n LeftAngleBracket: \"⟨\",\n LeftArrowBar: \"⇤\",\n leftarrow: \"←\",\n LeftArrow: \"←\",\n Leftarrow: \"⇐\",\n LeftArrowRightArrow: \"⇆\",\n leftarrowtail: \"↢\",\n LeftCeiling: \"⌈\",\n LeftDoubleBracket: \"⟦\",\n LeftDownTeeVector: \"⥡\",\n LeftDownVectorBar: \"⥙\",\n LeftDownVector: \"⇃\",\n LeftFloor: \"⌊\",\n leftharpoondown: \"↽\",\n leftharpoonup: \"↼\",\n leftleftarrows: \"⇇\",\n leftrightarrow: \"↔\",\n LeftRightArrow: \"↔\",\n Leftrightarrow: \"⇔\",\n leftrightarrows: \"⇆\",\n leftrightharpoons: \"⇋\",\n leftrightsquigarrow: \"↭\",\n LeftRightVector: \"⥎\",\n LeftTeeArrow: \"↤\",\n LeftTee: \"⊣\",\n LeftTeeVector: \"⥚\",\n leftthreetimes: \"⋋\",\n LeftTriangleBar: \"⧏\",\n LeftTriangle: \"⊲\",\n LeftTriangleEqual: \"⊴\",\n LeftUpDownVector: \"⥑\",\n LeftUpTeeVector: \"⥠\",\n LeftUpVectorBar: \"⥘\",\n LeftUpVector: \"↿\",\n LeftVectorBar: \"⥒\",\n LeftVector: \"↼\",\n lEg: \"⪋\",\n leg: \"⋚\",\n leq: \"≤\",\n leqq: \"≦\",\n leqslant: \"⩽\",\n lescc: \"⪨\",\n les: \"⩽\",\n lesdot: \"⩿\",\n lesdoto: \"⪁\",\n lesdotor: \"⪃\",\n lesg: \"⋚︀\",\n lesges: \"⪓\",\n lessapprox: \"⪅\",\n lessdot: \"⋖\",\n lesseqgtr: \"⋚\",\n lesseqqgtr: \"⪋\",\n LessEqualGreater: \"⋚\",\n LessFullEqual: \"≦\",\n LessGreater: \"≶\",\n lessgtr: \"≶\",\n LessLess: \"⪡\",\n lesssim: \"≲\",\n LessSlantEqual: \"⩽\",\n LessTilde: \"≲\",\n lfisht: \"⥼\",\n lfloor: \"⌊\",\n Lfr: \"𝔏\",\n lfr: \"𝔩\",\n lg: \"≶\",\n lgE: \"⪑\",\n lHar: \"⥢\",\n lhard: \"↽\",\n lharu: \"↼\",\n lharul: \"⥪\",\n lhblk: \"▄\",\n LJcy: \"Љ\",\n ljcy: \"љ\",\n llarr: \"⇇\",\n ll: \"≪\",\n Ll: \"⋘\",\n llcorner: \"⌞\",\n Lleftarrow: \"⇚\",\n llhard: \"⥫\",\n lltri: \"◺\",\n Lmidot: \"Ŀ\",\n lmidot: \"ŀ\",\n lmoustache: \"⎰\",\n lmoust: \"⎰\",\n lnap: \"⪉\",\n lnapprox: \"⪉\",\n lne: \"⪇\",\n lnE: \"≨\",\n lneq: \"⪇\",\n lneqq: \"≨\",\n lnsim: \"⋦\",\n loang: \"⟬\",\n loarr: \"⇽\",\n lobrk: \"⟦\",\n longleftarrow: \"⟵\",\n LongLeftArrow: \"⟵\",\n Longleftarrow: \"⟸\",\n longleftrightarrow: \"⟷\",\n LongLeftRightArrow: \"⟷\",\n Longleftrightarrow: \"⟺\",\n longmapsto: \"⟼\",\n longrightarrow: \"⟶\",\n LongRightArrow: \"⟶\",\n Longrightarrow: \"⟹\",\n looparrowleft: \"↫\",\n looparrowright: \"↬\",\n lopar: \"⦅\",\n Lopf: \"𝕃\",\n lopf: \"𝕝\",\n loplus: \"⨭\",\n lotimes: \"⨴\",\n lowast: \"∗\",\n lowbar: \"_\",\n LowerLeftArrow: \"↙\",\n LowerRightArrow: \"↘\",\n loz: \"◊\",\n lozenge: \"◊\",\n lozf: \"⧫\",\n lpar: \"(\",\n lparlt: \"⦓\",\n lrarr: \"⇆\",\n lrcorner: \"⌟\",\n lrhar: \"⇋\",\n lrhard: \"⥭\",\n lrm: \"\\u200e\",\n lrtri: \"⊿\",\n lsaquo: \"‹\",\n lscr: \"𝓁\",\n Lscr: \"ℒ\",\n lsh: \"↰\",\n Lsh: \"↰\",\n lsim: \"≲\",\n lsime: \"⪍\",\n lsimg: \"⪏\",\n lsqb: \"[\",\n lsquo: \"‘\",\n lsquor: \"‚\",\n Lstrok: \"Ł\",\n lstrok: \"ł\",\n ltcc: \"⪦\",\n ltcir: \"⩹\",\n lt: \"<\",\n LT: \"<\",\n Lt: \"≪\",\n ltdot: \"⋖\",\n lthree: \"⋋\",\n ltimes: \"⋉\",\n ltlarr: \"⥶\",\n ltquest: \"⩻\",\n ltri: \"◃\",\n ltrie: \"⊴\",\n ltrif: \"◂\",\n ltrPar: \"⦖\",\n lurdshar: \"⥊\",\n luruhar: \"⥦\",\n lvertneqq: \"≨︀\",\n lvnE: \"≨︀\",\n macr: \"¯\",\n male: \"♂\",\n malt: \"✠\",\n maltese: \"✠\",\n Map: \"⤅\",\n map: \"↦\",\n mapsto: \"↦\",\n mapstodown: \"↧\",\n mapstoleft: \"↤\",\n mapstoup: \"↥\",\n marker: \"▮\",\n mcomma: \"⨩\",\n Mcy: \"М\",\n mcy: \"м\",\n mdash: \"—\",\n mDDot: \"∺\",\n measuredangle: \"∡\",\n MediumSpace: \" \",\n Mellintrf: \"ℳ\",\n Mfr: \"𝔐\",\n mfr: \"𝔪\",\n mho: \"℧\",\n micro: \"µ\",\n midast: \"*\",\n midcir: \"⫰\",\n mid: \"∣\",\n middot: \"·\",\n minusb: \"⊟\",\n minus: \"−\",\n minusd: \"∸\",\n minusdu: \"⨪\",\n MinusPlus: \"∓\",\n mlcp: \"⫛\",\n mldr: \"…\",\n mnplus: \"∓\",\n models: \"⊧\",\n Mopf: \"𝕄\",\n mopf: \"𝕞\",\n mp: \"∓\",\n mscr: \"𝓂\",\n Mscr: \"ℳ\",\n mstpos: \"∾\",\n Mu: \"Μ\",\n mu: \"μ\",\n multimap: \"⊸\",\n mumap: \"⊸\",\n nabla: \"∇\",\n Nacute: \"Ń\",\n nacute: \"ń\",\n nang: \"∠⃒\",\n nap: \"≉\",\n napE: \"⩰̸\",\n napid: \"≋̸\",\n napos: \"ʼn\",\n napprox: \"≉\",\n natural: \"♮\",\n naturals: \"ℕ\",\n natur: \"♮\",\n nbsp: \" \",\n nbump: \"≎̸\",\n nbumpe: \"≏̸\",\n ncap: \"⩃\",\n Ncaron: \"Ň\",\n ncaron: \"ň\",\n Ncedil: \"Ņ\",\n ncedil: \"ņ\",\n ncong: \"≇\",\n ncongdot: \"⩭̸\",\n ncup: \"⩂\",\n Ncy: \"Н\",\n ncy: \"н\",\n ndash: \"–\",\n nearhk: \"⤤\",\n nearr: \"↗\",\n neArr: \"⇗\",\n nearrow: \"↗\",\n ne: \"≠\",\n nedot: \"≐̸\",\n NegativeMediumSpace: \"\",\n NegativeThickSpace: \"\",\n NegativeThinSpace: \"\",\n NegativeVeryThinSpace: \"\",\n nequiv: \"≢\",\n nesear: \"⤨\",\n nesim: \"≂̸\",\n NestedGreaterGreater: \"≫\",\n NestedLessLess: \"≪\",\n NewLine: \"\\u000a\",\n nexist: \"∄\",\n nexists: \"∄\",\n Nfr: \"𝔑\",\n nfr: \"𝔫\",\n ngE: \"≧̸\",\n nge: \"≱\",\n ngeq: \"≱\",\n ngeqq: \"≧̸\",\n ngeqslant: \"⩾̸\",\n nges: \"⩾̸\",\n nGg: \"⋙̸\",\n ngsim: \"≵\",\n nGt: \"≫⃒\",\n ngt: \"≯\",\n ngtr: \"≯\",\n nGtv: \"≫̸\",\n nharr: \"↮\",\n nhArr: \"⇎\",\n nhpar: \"⫲\",\n ni: \"∋\",\n nis: \"⋼\",\n nisd: \"⋺\",\n niv: \"∋\",\n NJcy: \"Њ\",\n njcy: \"њ\",\n nlarr: \"↚\",\n nlArr: \"⇍\",\n nldr: \"‥\",\n nlE: \"≦̸\",\n nle: \"≰\",\n nleftarrow: \"↚\",\n nLeftarrow: \"⇍\",\n nleftrightarrow: \"↮\",\n nLeftrightarrow: \"⇎\",\n nleq: \"≰\",\n nleqq: \"≦̸\",\n nleqslant: \"⩽̸\",\n nles: \"⩽̸\",\n nless: \"≮\",\n nLl: \"⋘̸\",\n nlsim: \"≴\",\n nLt: \"≪⃒\",\n nlt: \"≮\",\n nltri: \"⋪\",\n nltrie: \"⋬\",\n nLtv: \"≪̸\",\n nmid: \"∤\",\n NoBreak: \"\\u2060\",\n NonBreakingSpace: \" \",\n nopf: \"𝕟\",\n Nopf: \"ℕ\",\n Not: \"⫬\",\n not: \"¬\",\n NotCongruent: \"≢\",\n NotCupCap: \"≭\",\n NotDoubleVerticalBar: \"∦\",\n NotElement: \"∉\",\n NotEqual: \"≠\",\n NotEqualTilde: \"≂̸\",\n NotExists: \"∄\",\n NotGreater: \"≯\",\n NotGreaterEqual: \"≱\",\n NotGreaterFullEqual: \"≧̸\",\n NotGreaterGreater: \"≫̸\",\n NotGreaterLess: \"≹\",\n NotGreaterSlantEqual: \"⩾̸\",\n NotGreaterTilde: \"≵\",\n NotHumpDownHump: \"≎̸\",\n NotHumpEqual: \"≏̸\",\n notin: \"∉\",\n notindot: \"⋵̸\",\n notinE: \"⋹̸\",\n notinva: \"∉\",\n notinvb: \"⋷\",\n notinvc: \"⋶\",\n NotLeftTriangleBar: \"⧏̸\",\n NotLeftTriangle: \"⋪\",\n NotLeftTriangleEqual: \"⋬\",\n NotLess: \"≮\",\n NotLessEqual: \"≰\",\n NotLessGreater: \"≸\",\n NotLessLess: \"≪̸\",\n NotLessSlantEqual: \"⩽̸\",\n NotLessTilde: \"≴\",\n NotNestedGreaterGreater: \"⪢̸\",\n NotNestedLessLess: \"⪡̸\",\n notni: \"∌\",\n notniva: \"∌\",\n notnivb: \"⋾\",\n notnivc: \"⋽\",\n NotPrecedes: \"⊀\",\n NotPrecedesEqual: \"⪯̸\",\n NotPrecedesSlantEqual: \"⋠\",\n NotReverseElement: \"∌\",\n NotRightTriangleBar: \"⧐̸\",\n NotRightTriangle: \"⋫\",\n NotRightTriangleEqual: \"⋭\",\n NotSquareSubset: \"⊏̸\",\n NotSquareSubsetEqual: \"⋢\",\n NotSquareSuperset: \"⊐̸\",\n NotSquareSupersetEqual: \"⋣\",\n NotSubset: \"⊂⃒\",\n NotSubsetEqual: \"⊈\",\n NotSucceeds: \"⊁\",\n NotSucceedsEqual: \"⪰̸\",\n NotSucceedsSlantEqual: \"⋡\",\n NotSucceedsTilde: \"≿̸\",\n NotSuperset: \"⊃⃒\",\n NotSupersetEqual: \"⊉\",\n NotTilde: \"≁\",\n NotTildeEqual: \"≄\",\n NotTildeFullEqual: \"≇\",\n NotTildeTilde: \"≉\",\n NotVerticalBar: \"∤\",\n nparallel: \"∦\",\n npar: \"∦\",\n nparsl: \"⫽⃥\",\n npart: \"∂̸\",\n npolint: \"⨔\",\n npr: \"⊀\",\n nprcue: \"⋠\",\n nprec: \"⊀\",\n npreceq: \"⪯̸\",\n npre: \"⪯̸\",\n nrarrc: \"⤳̸\",\n nrarr: \"↛\",\n nrArr: \"⇏\",\n nrarrw: \"↝̸\",\n nrightarrow: \"↛\",\n nRightarrow: \"⇏\",\n nrtri: \"⋫\",\n nrtrie: \"⋭\",\n nsc: \"⊁\",\n nsccue: \"⋡\",\n nsce: \"⪰̸\",\n Nscr: \"𝒩\",\n nscr: \"𝓃\",\n nshortmid: \"∤\",\n nshortparallel: \"∦\",\n nsim: \"≁\",\n nsime: \"≄\",\n nsimeq: \"≄\",\n nsmid: \"∤\",\n nspar: \"∦\",\n nsqsube: \"⋢\",\n nsqsupe: \"⋣\",\n nsub: \"⊄\",\n nsubE: \"⫅̸\",\n nsube: \"⊈\",\n nsubset: \"⊂⃒\",\n nsubseteq: \"⊈\",\n nsubseteqq: \"⫅̸\",\n nsucc: \"⊁\",\n nsucceq: \"⪰̸\",\n nsup: \"⊅\",\n nsupE: \"⫆̸\",\n nsupe: \"⊉\",\n nsupset: \"⊃⃒\",\n nsupseteq: \"⊉\",\n nsupseteqq: \"⫆̸\",\n ntgl: \"≹\",\n Ntilde: \"Ñ\",\n ntilde: \"ñ\",\n ntlg: \"≸\",\n ntriangleleft: \"⋪\",\n ntrianglelefteq: \"⋬\",\n ntriangleright: \"⋫\",\n ntrianglerighteq: \"⋭\",\n Nu: \"Ν\",\n nu: \"ν\",\n num: \"#\",\n numero: \"№\",\n numsp: \" \",\n nvap: \"≍⃒\",\n nvdash: \"⊬\",\n nvDash: \"⊭\",\n nVdash: \"⊮\",\n nVDash: \"⊯\",\n nvge: \"≥⃒\",\n nvgt: \">⃒\",\n nvHarr: \"⤄\",\n nvinfin: \"⧞\",\n nvlArr: \"⤂\",\n nvle: \"≤⃒\",\n nvlt: \"<⃒\",\n nvltrie: \"⊴⃒\",\n nvrArr: \"⤃\",\n nvrtrie: \"⊵⃒\",\n nvsim: \"∼⃒\",\n nwarhk: \"⤣\",\n nwarr: \"↖\",\n nwArr: \"⇖\",\n nwarrow: \"↖\",\n nwnear: \"⤧\",\n Oacute: \"Ó\",\n oacute: \"ó\",\n oast: \"⊛\",\n Ocirc: \"Ô\",\n ocirc: \"ô\",\n ocir: \"⊚\",\n Ocy: \"О\",\n ocy: \"о\",\n odash: \"⊝\",\n Odblac: \"Ő\",\n odblac: \"ő\",\n odiv: \"⨸\",\n odot: \"⊙\",\n odsold: \"⦼\",\n OElig: \"Œ\",\n oelig: \"œ\",\n ofcir: \"⦿\",\n Ofr: \"𝔒\",\n ofr: \"𝔬\",\n ogon: \"˛\",\n Ograve: \"Ò\",\n ograve: \"ò\",\n ogt: \"⧁\",\n ohbar: \"⦵\",\n ohm: \"Ω\",\n oint: \"∮\",\n olarr: \"↺\",\n olcir: \"⦾\",\n olcross: \"⦻\",\n oline: \"‾\",\n olt: \"⧀\",\n Omacr: \"Ō\",\n omacr: \"ō\",\n Omega: \"Ω\",\n omega: \"ω\",\n Omicron: \"Ο\",\n omicron: \"ο\",\n omid: \"⦶\",\n ominus: \"⊖\",\n Oopf: \"𝕆\",\n oopf: \"𝕠\",\n opar: \"⦷\",\n OpenCurlyDoubleQuote: \"“\",\n OpenCurlyQuote: \"‘\",\n operp: \"⦹\",\n oplus: \"⊕\",\n orarr: \"↻\",\n Or: \"⩔\",\n or: \"∨\",\n ord: \"⩝\",\n order: \"ℴ\",\n orderof: \"ℴ\",\n ordf: \"ª\",\n ordm: \"º\",\n origof: \"⊶\",\n oror: \"⩖\",\n orslope: \"⩗\",\n orv: \"⩛\",\n oS: \"Ⓢ\",\n Oscr: \"𝒪\",\n oscr: \"ℴ\",\n Oslash: \"Ø\",\n oslash: \"ø\",\n osol: \"⊘\",\n Otilde: \"Õ\",\n otilde: \"õ\",\n otimesas: \"⨶\",\n Otimes: \"⨷\",\n otimes: \"⊗\",\n Ouml: \"Ö\",\n ouml: \"ö\",\n ovbar: \"⌽\",\n OverBar: \"‾\",\n OverBrace: \"⏞\",\n OverBracket: \"⎴\",\n OverParenthesis: \"⏜\",\n para: \"¶\",\n parallel: \"∥\",\n par: \"∥\",\n parsim: \"⫳\",\n parsl: \"⫽\",\n part: \"∂\",\n PartialD: \"∂\",\n Pcy: \"П\",\n pcy: \"п\",\n percnt: \"%\",\n period: \".\",\n permil: \"‰\",\n perp: \"⊥\",\n pertenk: \"‱\",\n Pfr: \"𝔓\",\n pfr: \"𝔭\",\n Phi: \"Φ\",\n phi: \"φ\",\n phiv: \"ϕ\",\n phmmat: \"ℳ\",\n phone: \"☎\",\n Pi: \"Π\",\n pi: \"π\",\n pitchfork: \"⋔\",\n piv: \"ϖ\",\n planck: \"ℏ\",\n planckh: \"ℎ\",\n plankv: \"ℏ\",\n plusacir: \"⨣\",\n plusb: \"⊞\",\n pluscir: \"⨢\",\n plus: \"+\",\n plusdo: \"∔\",\n plusdu: \"⨥\",\n pluse: \"⩲\",\n PlusMinus: \"±\",\n plusmn: \"±\",\n plussim: \"⨦\",\n plustwo: \"⨧\",\n pm: \"±\",\n Poincareplane: \"ℌ\",\n pointint: \"⨕\",\n popf: \"𝕡\",\n Popf: \"ℙ\",\n pound: \"£\",\n prap: \"⪷\",\n Pr: \"⪻\",\n pr: \"≺\",\n prcue: \"≼\",\n precapprox: \"⪷\",\n prec: \"≺\",\n preccurlyeq: \"≼\",\n Precedes: \"≺\",\n PrecedesEqual: \"⪯\",\n PrecedesSlantEqual: \"≼\",\n PrecedesTilde: \"≾\",\n preceq: \"⪯\",\n precnapprox: \"⪹\",\n precneqq: \"⪵\",\n precnsim: \"⋨\",\n pre: \"⪯\",\n prE: \"⪳\",\n precsim: \"≾\",\n prime: \"′\",\n Prime: \"″\",\n primes: \"ℙ\",\n prnap: \"⪹\",\n prnE: \"⪵\",\n prnsim: \"⋨\",\n prod: \"∏\",\n Product: \"∏\",\n profalar: \"⌮\",\n profline: \"⌒\",\n profsurf: \"⌓\",\n prop: \"∝\",\n Proportional: \"∝\",\n Proportion: \"∷\",\n propto: \"∝\",\n prsim: \"≾\",\n prurel: \"⊰\",\n Pscr: \"𝒫\",\n pscr: \"𝓅\",\n Psi: \"Ψ\",\n psi: \"ψ\",\n puncsp: \" \",\n Qfr: \"𝔔\",\n qfr: \"𝔮\",\n qint: \"⨌\",\n qopf: \"𝕢\",\n Qopf: \"ℚ\",\n qprime: \"⁗\",\n Qscr: \"𝒬\",\n qscr: \"𝓆\",\n quaternions: \"ℍ\",\n quatint: \"⨖\",\n quest: \"?\",\n questeq: \"≟\",\n quot: \"\\\"\",\n QUOT: \"\\\"\",\n rAarr: \"⇛\",\n race: \"∽̱\",\n Racute: \"Ŕ\",\n racute: \"ŕ\",\n radic: \"√\",\n raemptyv: \"⦳\",\n rang: \"⟩\",\n Rang: \"⟫\",\n rangd: \"⦒\",\n range: \"⦥\",\n rangle: \"⟩\",\n raquo: \"»\",\n rarrap: \"⥵\",\n rarrb: \"⇥\",\n rarrbfs: \"⤠\",\n rarrc: \"⤳\",\n rarr: \"→\",\n Rarr: \"↠\",\n rArr: \"⇒\",\n rarrfs: \"⤞\",\n rarrhk: \"↪\",\n rarrlp: \"↬\",\n rarrpl: \"⥅\",\n rarrsim: \"⥴\",\n Rarrtl: \"⤖\",\n rarrtl: \"↣\",\n rarrw: \"↝\",\n ratail: \"⤚\",\n rAtail: \"⤜\",\n ratio: \"∶\",\n rationals: \"ℚ\",\n rbarr: \"⤍\",\n rBarr: \"⤏\",\n RBarr: \"⤐\",\n rbbrk: \"❳\",\n rbrace: \"}\",\n rbrack: \"]\",\n rbrke: \"⦌\",\n rbrksld: \"⦎\",\n rbrkslu: \"⦐\",\n Rcaron: \"Ř\",\n rcaron: \"ř\",\n Rcedil: \"Ŗ\",\n rcedil: \"ŗ\",\n rceil: \"⌉\",\n rcub: \"}\",\n Rcy: \"Р\",\n rcy: \"р\",\n rdca: \"⤷\",\n rdldhar: \"⥩\",\n rdquo: \"”\",\n rdquor: \"”\",\n rdsh: \"↳\",\n real: \"ℜ\",\n realine: \"ℛ\",\n realpart: \"ℜ\",\n reals: \"ℝ\",\n Re: \"ℜ\",\n rect: \"▭\",\n reg: \"®\",\n REG: \"®\",\n ReverseElement: \"∋\",\n ReverseEquilibrium: \"⇋\",\n ReverseUpEquilibrium: \"⥯\",\n rfisht: \"⥽\",\n rfloor: \"⌋\",\n rfr: \"𝔯\",\n Rfr: \"ℜ\",\n rHar: \"⥤\",\n rhard: \"⇁\",\n rharu: \"⇀\",\n rharul: \"⥬\",\n Rho: \"Ρ\",\n rho: \"ρ\",\n rhov: \"ϱ\",\n RightAngleBracket: \"⟩\",\n RightArrowBar: \"⇥\",\n rightarrow: \"→\",\n RightArrow: \"→\",\n Rightarrow: \"⇒\",\n RightArrowLeftArrow: \"⇄\",\n rightarrowtail: \"↣\",\n RightCeiling: \"⌉\",\n RightDoubleBracket: \"⟧\",\n RightDownTeeVector: \"⥝\",\n RightDownVectorBar: \"⥕\",\n RightDownVector: \"⇂\",\n RightFloor: \"⌋\",\n rightharpoondown: \"⇁\",\n rightharpoonup: \"⇀\",\n rightleftarrows: \"⇄\",\n rightleftharpoons: \"⇌\",\n rightrightarrows: \"⇉\",\n rightsquigarrow: \"↝\",\n RightTeeArrow: \"↦\",\n RightTee: \"⊢\",\n RightTeeVector: \"⥛\",\n rightthreetimes: \"⋌\",\n RightTriangleBar: \"⧐\",\n RightTriangle: \"⊳\",\n RightTriangleEqual: \"⊵\",\n RightUpDownVector: \"⥏\",\n RightUpTeeVector: \"⥜\",\n RightUpVectorBar: \"⥔\",\n RightUpVector: \"↾\",\n RightVectorBar: \"⥓\",\n RightVector: \"⇀\",\n ring: \"˚\",\n risingdotseq: \"≓\",\n rlarr: \"⇄\",\n rlhar: \"⇌\",\n rlm: \"\\u200f\",\n rmoustache: \"⎱\",\n rmoust: \"⎱\",\n rnmid: \"⫮\",\n roang: \"⟭\",\n roarr: \"⇾\",\n robrk: \"⟧\",\n ropar: \"⦆\",\n ropf: \"𝕣\",\n Ropf: \"ℝ\",\n roplus: \"⨮\",\n rotimes: \"⨵\",\n RoundImplies: \"⥰\",\n rpar: \")\",\n rpargt: \"⦔\",\n rppolint: \"⨒\",\n rrarr: \"⇉\",\n Rrightarrow: \"⇛\",\n rsaquo: \"›\",\n rscr: \"𝓇\",\n Rscr: \"ℛ\",\n rsh: \"↱\",\n Rsh: \"↱\",\n rsqb: \"]\",\n rsquo: \"’\",\n rsquor: \"’\",\n rthree: \"⋌\",\n rtimes: \"⋊\",\n rtri: \"▹\",\n rtrie: \"⊵\",\n rtrif: \"▸\",\n rtriltri: \"⧎\",\n RuleDelayed: \"⧴\",\n ruluhar: \"⥨\",\n rx: \"℞\",\n Sacute: \"Ś\",\n sacute: \"ś\",\n sbquo: \"‚\",\n scap: \"⪸\",\n Scaron: \"Š\",\n scaron: \"š\",\n Sc: \"⪼\",\n sc: \"≻\",\n sccue: \"≽\",\n sce: \"⪰\",\n scE: \"⪴\",\n Scedil: \"Ş\",\n scedil: \"ş\",\n Scirc: \"Ŝ\",\n scirc: \"ŝ\",\n scnap: \"⪺\",\n scnE: \"⪶\",\n scnsim: \"⋩\",\n scpolint: \"⨓\",\n scsim: \"≿\",\n Scy: \"С\",\n scy: \"с\",\n sdotb: \"⊡\",\n sdot: \"⋅\",\n sdote: \"⩦\",\n searhk: \"⤥\",\n searr: \"↘\",\n seArr: \"⇘\",\n searrow: \"↘\",\n sect: \"§\",\n semi: \";\",\n seswar: \"⤩\",\n setminus: \"∖\",\n setmn: \"∖\",\n sext: \"✶\",\n Sfr: \"𝔖\",\n sfr: \"𝔰\",\n sfrown: \"⌢\",\n sharp: \"♯\",\n SHCHcy: \"Щ\",\n shchcy: \"щ\",\n SHcy: \"Ш\",\n shcy: \"ш\",\n ShortDownArrow: \"↓\",\n ShortLeftArrow: \"←\",\n shortmid: \"∣\",\n shortparallel: \"∥\",\n ShortRightArrow: \"→\",\n ShortUpArrow: \"↑\",\n shy: \"\\u00ad\",\n Sigma: \"Σ\",\n sigma: \"σ\",\n sigmaf: \"ς\",\n sigmav: \"ς\",\n sim: \"∼\",\n simdot: \"⩪\",\n sime: \"≃\",\n simeq: \"≃\",\n simg: \"⪞\",\n simgE: \"⪠\",\n siml: \"⪝\",\n simlE: \"⪟\",\n simne: \"≆\",\n simplus: \"⨤\",\n simrarr: \"⥲\",\n slarr: \"←\",\n SmallCircle: \"∘\",\n smallsetminus: \"∖\",\n smashp: \"⨳\",\n smeparsl: \"⧤\",\n smid: \"∣\",\n smile: \"⌣\",\n smt: \"⪪\",\n smte: \"⪬\",\n smtes: \"⪬︀\",\n SOFTcy: \"Ь\",\n softcy: \"ь\",\n solbar: \"⌿\",\n solb: \"⧄\",\n sol: \"/\",\n Sopf: \"𝕊\",\n sopf: \"𝕤\",\n spades: \"♠\",\n spadesuit: \"♠\",\n spar: \"∥\",\n sqcap: \"⊓\",\n sqcaps: \"⊓︀\",\n sqcup: \"⊔\",\n sqcups: \"⊔︀\",\n Sqrt: \"√\",\n sqsub: \"⊏\",\n sqsube: \"⊑\",\n sqsubset: \"⊏\",\n sqsubseteq: \"⊑\",\n sqsup: \"⊐\",\n sqsupe: \"⊒\",\n sqsupset: \"⊐\",\n sqsupseteq: \"⊒\",\n square: \"□\",\n Square: \"□\",\n SquareIntersection: \"⊓\",\n SquareSubset: \"⊏\",\n SquareSubsetEqual: \"⊑\",\n SquareSuperset: \"⊐\",\n SquareSupersetEqual: \"⊒\",\n SquareUnion: \"⊔\",\n squarf: \"▪\",\n squ: \"□\",\n squf: \"▪\",\n srarr: \"→\",\n Sscr: \"𝒮\",\n sscr: \"𝓈\",\n ssetmn: \"∖\",\n ssmile: \"⌣\",\n sstarf: \"⋆\",\n Star: \"⋆\",\n star: \"☆\",\n starf: \"★\",\n straightepsilon: \"ϵ\",\n straightphi: \"ϕ\",\n strns: \"¯\",\n sub: \"⊂\",\n Sub: \"⋐\",\n subdot: \"⪽\",\n subE: \"⫅\",\n sube: \"⊆\",\n subedot: \"⫃\",\n submult: \"⫁\",\n subnE: \"⫋\",\n subne: \"⊊\",\n subplus: \"⪿\",\n subrarr: \"⥹\",\n subset: \"⊂\",\n Subset: \"⋐\",\n subseteq: \"⊆\",\n subseteqq: \"⫅\",\n SubsetEqual: \"⊆\",\n subsetneq: \"⊊\",\n subsetneqq: \"⫋\",\n subsim: \"⫇\",\n subsub: \"⫕\",\n subsup: \"⫓\",\n succapprox: \"⪸\",\n succ: \"≻\",\n succcurlyeq: \"≽\",\n Succeeds: \"≻\",\n SucceedsEqual: \"⪰\",\n SucceedsSlantEqual: \"≽\",\n SucceedsTilde: \"≿\",\n succeq: \"⪰\",\n succnapprox: \"⪺\",\n succneqq: \"⪶\",\n succnsim: \"⋩\",\n succsim: \"≿\",\n SuchThat: \"∋\",\n sum: \"∑\",\n Sum: \"∑\",\n sung: \"♪\",\n sup1: \"¹\",\n sup2: \"²\",\n sup3: \"³\",\n sup: \"⊃\",\n Sup: \"⋑\",\n supdot: \"⪾\",\n supdsub: \"⫘\",\n supE: \"⫆\",\n supe: \"⊇\",\n supedot: \"⫄\",\n Superset: \"⊃\",\n SupersetEqual: \"⊇\",\n suphsol: \"⟉\",\n suphsub: \"⫗\",\n suplarr: \"⥻\",\n supmult: \"⫂\",\n supnE: \"⫌\",\n supne: \"⊋\",\n supplus: \"⫀\",\n supset: \"⊃\",\n Supset: \"⋑\",\n supseteq: \"⊇\",\n supseteqq: \"⫆\",\n supsetneq: \"⊋\",\n supsetneqq: \"⫌\",\n supsim: \"⫈\",\n supsub: \"⫔\",\n supsup: \"⫖\",\n swarhk: \"⤦\",\n swarr: \"↙\",\n swArr: \"⇙\",\n swarrow: \"↙\",\n swnwar: \"⤪\",\n szlig: \"ß\",\n Tab: \"\\u0009\",\n target: \"⌖\",\n Tau: \"Τ\",\n tau: \"τ\",\n tbrk: \"⎴\",\n Tcaron: \"Ť\",\n tcaron: \"ť\",\n Tcedil: \"Ţ\",\n tcedil: \"ţ\",\n Tcy: \"Т\",\n tcy: \"т\",\n tdot: \"⃛\",\n telrec: \"⌕\",\n Tfr: \"𝔗\",\n tfr: \"𝔱\",\n there4: \"∴\",\n therefore: \"∴\",\n Therefore: \"∴\",\n Theta: \"Θ\",\n theta: \"θ\",\n thetasym: \"ϑ\",\n thetav: \"ϑ\",\n thickapprox: \"≈\",\n thicksim: \"∼\",\n ThickSpace: \" \",\n ThinSpace: \" \",\n thinsp: \" \",\n thkap: \"≈\",\n thksim: \"∼\",\n THORN: \"Þ\",\n thorn: \"þ\",\n tilde: \"˜\",\n Tilde: \"∼\",\n TildeEqual: \"≃\",\n TildeFullEqual: \"≅\",\n TildeTilde: \"≈\",\n timesbar: \"⨱\",\n timesb: \"⊠\",\n times: \"×\",\n timesd: \"⨰\",\n tint: \"∭\",\n toea: \"⤨\",\n topbot: \"⌶\",\n topcir: \"⫱\",\n top: \"⊤\",\n Topf: \"𝕋\",\n topf: \"𝕥\",\n topfork: \"⫚\",\n tosa: \"⤩\",\n tprime: \"‴\",\n trade: \"™\",\n TRADE: \"™\",\n triangle: \"▵\",\n triangledown: \"▿\",\n triangleleft: \"◃\",\n trianglelefteq: \"⊴\",\n triangleq: \"≜\",\n triangleright: \"▹\",\n trianglerighteq: \"⊵\",\n tridot: \"◬\",\n trie: \"≜\",\n triminus: \"⨺\",\n TripleDot: \"⃛\",\n triplus: \"⨹\",\n trisb: \"⧍\",\n tritime: \"⨻\",\n trpezium: \"⏢\",\n Tscr: \"𝒯\",\n tscr: \"𝓉\",\n TScy: \"Ц\",\n tscy: \"ц\",\n TSHcy: \"Ћ\",\n tshcy: \"ћ\",\n Tstrok: \"Ŧ\",\n tstrok: \"ŧ\",\n twixt: \"≬\",\n twoheadleftarrow: \"↞\",\n twoheadrightarrow: \"↠\",\n Uacute: \"Ú\",\n uacute: \"ú\",\n uarr: \"↑\",\n Uarr: \"↟\",\n uArr: \"⇑\",\n Uarrocir: \"⥉\",\n Ubrcy: \"Ў\",\n ubrcy: \"ў\",\n Ubreve: \"Ŭ\",\n ubreve: \"ŭ\",\n Ucirc: \"Û\",\n ucirc: \"û\",\n Ucy: \"У\",\n ucy: \"у\",\n udarr: \"⇅\",\n Udblac: \"Ű\",\n udblac: \"ű\",\n udhar: \"⥮\",\n ufisht: \"⥾\",\n Ufr: \"𝔘\",\n ufr: \"𝔲\",\n Ugrave: \"Ù\",\n ugrave: \"ù\",\n uHar: \"⥣\",\n uharl: \"↿\",\n uharr: \"↾\",\n uhblk: \"▀\",\n ulcorn: \"⌜\",\n ulcorner: \"⌜\",\n ulcrop: \"⌏\",\n ultri: \"◸\",\n Umacr: \"Ū\",\n umacr: \"ū\",\n uml: \"¨\",\n UnderBar: \"_\",\n UnderBrace: \"⏟\",\n UnderBracket: \"⎵\",\n UnderParenthesis: \"⏝\",\n Union: \"⋃\",\n UnionPlus: \"⊎\",\n Uogon: \"Ų\",\n uogon: \"ų\",\n Uopf: \"𝕌\",\n uopf: \"𝕦\",\n UpArrowBar: \"⤒\",\n uparrow: \"↑\",\n UpArrow: \"↑\",\n Uparrow: \"⇑\",\n UpArrowDownArrow: \"⇅\",\n updownarrow: \"↕\",\n UpDownArrow: \"↕\",\n Updownarrow: \"⇕\",\n UpEquilibrium: \"⥮\",\n upharpoonleft: \"↿\",\n upharpoonright: \"↾\",\n uplus: \"⊎\",\n UpperLeftArrow: \"↖\",\n UpperRightArrow: \"↗\",\n upsi: \"υ\",\n Upsi: \"ϒ\",\n upsih: \"ϒ\",\n Upsilon: \"Υ\",\n upsilon: \"υ\",\n UpTeeArrow: \"↥\",\n UpTee: \"⊥\",\n upuparrows: \"⇈\",\n urcorn: \"⌝\",\n urcorner: \"⌝\",\n urcrop: \"⌎\",\n Uring: \"Ů\",\n uring: \"ů\",\n urtri: \"◹\",\n Uscr: \"𝒰\",\n uscr: \"𝓊\",\n utdot: \"⋰\",\n Utilde: \"Ũ\",\n utilde: \"ũ\",\n utri: \"▵\",\n utrif: \"▴\",\n uuarr: \"⇈\",\n Uuml: \"Ü\",\n uuml: \"ü\",\n uwangle: \"⦧\",\n vangrt: \"⦜\",\n varepsilon: \"ϵ\",\n varkappa: \"ϰ\",\n varnothing: \"∅\",\n varphi: \"ϕ\",\n varpi: \"ϖ\",\n varpropto: \"∝\",\n varr: \"↕\",\n vArr: \"⇕\",\n varrho: \"ϱ\",\n varsigma: \"ς\",\n varsubsetneq: \"⊊︀\",\n varsubsetneqq: \"⫋︀\",\n varsupsetneq: \"⊋︀\",\n varsupsetneqq: \"⫌︀\",\n vartheta: \"ϑ\",\n vartriangleleft: \"⊲\",\n vartriangleright: \"⊳\",\n vBar: \"⫨\",\n Vbar: \"⫫\",\n vBarv: \"⫩\",\n Vcy: \"В\",\n vcy: \"в\",\n vdash: \"⊢\",\n vDash: \"⊨\",\n Vdash: \"⊩\",\n VDash: \"⊫\",\n Vdashl: \"⫦\",\n veebar: \"⊻\",\n vee: \"∨\",\n Vee: \"⋁\",\n veeeq: \"≚\",\n vellip: \"⋮\",\n verbar: \"|\",\n Verbar: \"‖\",\n vert: \"|\",\n Vert: \"‖\",\n VerticalBar: \"∣\",\n VerticalLine: \"|\",\n VerticalSeparator: \"❘\",\n VerticalTilde: \"≀\",\n VeryThinSpace: \" \",\n Vfr: \"𝔙\",\n vfr: \"𝔳\",\n vltri: \"⊲\",\n vnsub: \"⊂⃒\",\n vnsup: \"⊃⃒\",\n Vopf: \"𝕍\",\n vopf: \"𝕧\",\n vprop: \"∝\",\n vrtri: \"⊳\",\n Vscr: \"𝒱\",\n vscr: \"𝓋\",\n vsubnE: \"⫋︀\",\n vsubne: \"⊊︀\",\n vsupnE: \"⫌︀\",\n vsupne: \"⊋︀\",\n Vvdash: \"⊪\",\n vzigzag: \"⦚\",\n Wcirc: \"Ŵ\",\n wcirc: \"ŵ\",\n wedbar: \"⩟\",\n wedge: \"∧\",\n Wedge: \"⋀\",\n wedgeq: \"≙\",\n weierp: \"℘\",\n Wfr: \"𝔚\",\n wfr: \"𝔴\",\n Wopf: \"𝕎\",\n wopf: \"𝕨\",\n wp: \"℘\",\n wr: \"≀\",\n wreath: \"≀\",\n Wscr: \"𝒲\",\n wscr: \"𝓌\",\n xcap: \"⋂\",\n xcirc: \"◯\",\n xcup: \"⋃\",\n xdtri: \"▽\",\n Xfr: \"𝔛\",\n xfr: \"𝔵\",\n xharr: \"⟷\",\n xhArr: \"⟺\",\n Xi: \"Ξ\",\n xi: \"ξ\",\n xlarr: \"⟵\",\n xlArr: \"⟸\",\n xmap: \"⟼\",\n xnis: \"⋻\",\n xodot: \"⨀\",\n Xopf: \"𝕏\",\n xopf: \"𝕩\",\n xoplus: \"⨁\",\n xotime: \"⨂\",\n xrarr: \"⟶\",\n xrArr: \"⟹\",\n Xscr: \"𝒳\",\n xscr: \"𝓍\",\n xsqcup: \"⨆\",\n xuplus: \"⨄\",\n xutri: \"△\",\n xvee: \"⋁\",\n xwedge: \"⋀\",\n Yacute: \"Ý\",\n yacute: \"ý\",\n YAcy: \"Я\",\n yacy: \"я\",\n Ycirc: \"Ŷ\",\n ycirc: \"ŷ\",\n Ycy: \"Ы\",\n ycy: \"ы\",\n yen: \"¥\",\n Yfr: \"𝔜\",\n yfr: \"𝔶\",\n YIcy: \"Ї\",\n yicy: \"ї\",\n Yopf: \"𝕐\",\n yopf: \"𝕪\",\n Yscr: \"𝒴\",\n yscr: \"𝓎\",\n YUcy: \"Ю\",\n yucy: \"ю\",\n yuml: \"ÿ\",\n Yuml: \"Ÿ\",\n Zacute: \"Ź\",\n zacute: \"ź\",\n Zcaron: \"Ž\",\n zcaron: \"ž\",\n Zcy: \"З\",\n zcy: \"з\",\n Zdot: \"Ż\",\n zdot: \"ż\",\n zeetrf: \"ℨ\",\n ZeroWidthSpace: \"\",\n Zeta: \"Ζ\",\n zeta: \"ζ\",\n zfr: \"𝔷\",\n Zfr: \"ℨ\",\n ZHcy: \"Ж\",\n zhcy: \"ж\",\n zigrarr: \"⇝\",\n zopf: \"𝕫\",\n Zopf: \"ℤ\",\n Zscr: \"𝒵\",\n zscr: \"𝓏\",\n zwj: \"\\u200d\",\n zwnj: \"\\u200c\"\n };\n var HEXCHARCODE = /^#[xX]([A-Fa-f0-9]+)$/;\n var CHARCODE = /^#([0-9]+)$/;\n var NAMED = /^([A-Za-z0-9]+)$/;\n var EntityParser = _exports.EntityParser = /** @class */function () {\n function EntityParser(named) {\n this.named = named;\n }\n EntityParser.prototype.parse = function (entity) {\n if (!entity) {\n return;\n }\n var matches = entity.match(HEXCHARCODE);\n if (matches) {\n return String.fromCharCode(parseInt(matches[1], 16));\n }\n matches = entity.match(CHARCODE);\n if (matches) {\n return String.fromCharCode(parseInt(matches[1], 10));\n }\n matches = entity.match(NAMED);\n if (matches) {\n return this.named[matches[1]];\n }\n };\n return EntityParser;\n }();\n var WSP = /[\\t\\n\\f ]/;\n var ALPHA = /[A-Za-z]/;\n var CRLF = /\\r\\n?/g;\n function isSpace(char) {\n return WSP.test(char);\n }\n function isAlpha(char) {\n return ALPHA.test(char);\n }\n function preprocessInput(input) {\n return input.replace(CRLF, '\\n');\n }\n var EventedTokenizer = _exports.EventedTokenizer = /** @class */function () {\n function EventedTokenizer(delegate, entityParser, mode) {\n if (mode === void 0) {\n mode = 'precompile';\n }\n this.delegate = delegate;\n this.entityParser = entityParser;\n this.mode = mode;\n this.state = \"beforeData\" /* beforeData */;\n this.line = -1;\n this.column = -1;\n this.input = '';\n this.index = -1;\n this.tagNameBuffer = '';\n this.states = {\n beforeData: function () {\n var char = this.peek();\n if (char === '<' && !this.isIgnoredEndTag()) {\n this.transitionTo(\"tagOpen\" /* tagOpen */);\n this.markTagStart();\n this.consume();\n } else {\n if (this.mode === 'precompile' && char === '\\n') {\n var tag = this.tagNameBuffer.toLowerCase();\n if (tag === 'pre' || tag === 'textarea') {\n this.consume();\n }\n }\n this.transitionTo(\"data\" /* data */);\n this.delegate.beginData();\n }\n },\n data: function () {\n var char = this.peek();\n var tag = this.tagNameBuffer;\n if (char === '<' && !this.isIgnoredEndTag()) {\n this.delegate.finishData();\n this.transitionTo(\"tagOpen\" /* tagOpen */);\n this.markTagStart();\n this.consume();\n } else if (char === '&' && tag !== 'script' && tag !== 'style') {\n this.consume();\n this.delegate.appendToData(this.consumeCharRef() || '&');\n } else {\n this.consume();\n this.delegate.appendToData(char);\n }\n },\n tagOpen: function () {\n var char = this.consume();\n if (char === '!') {\n this.transitionTo(\"markupDeclarationOpen\" /* markupDeclarationOpen */);\n } else if (char === '/') {\n this.transitionTo(\"endTagOpen\" /* endTagOpen */);\n } else if (char === '@' || char === ':' || isAlpha(char)) {\n this.transitionTo(\"tagName\" /* tagName */);\n this.tagNameBuffer = '';\n this.delegate.beginStartTag();\n this.appendToTagName(char);\n }\n },\n markupDeclarationOpen: function () {\n var char = this.consume();\n if (char === '-' && this.peek() === '-') {\n this.consume();\n this.transitionTo(\"commentStart\" /* commentStart */);\n this.delegate.beginComment();\n } else {\n var maybeDoctype = char.toUpperCase() + this.input.substring(this.index, this.index + 6).toUpperCase();\n if (maybeDoctype === 'DOCTYPE') {\n this.consume();\n this.consume();\n this.consume();\n this.consume();\n this.consume();\n this.consume();\n this.transitionTo(\"doctype\" /* doctype */);\n if (this.delegate.beginDoctype) this.delegate.beginDoctype();\n }\n }\n },\n doctype: function () {\n var char = this.consume();\n if (isSpace(char)) {\n this.transitionTo(\"beforeDoctypeName\" /* beforeDoctypeName */);\n }\n },\n\n beforeDoctypeName: function () {\n var char = this.consume();\n if (isSpace(char)) {\n return;\n } else {\n this.transitionTo(\"doctypeName\" /* doctypeName */);\n if (this.delegate.appendToDoctypeName) this.delegate.appendToDoctypeName(char.toLowerCase());\n }\n },\n doctypeName: function () {\n var char = this.consume();\n if (isSpace(char)) {\n this.transitionTo(\"afterDoctypeName\" /* afterDoctypeName */);\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n if (this.delegate.appendToDoctypeName) this.delegate.appendToDoctypeName(char.toLowerCase());\n }\n },\n afterDoctypeName: function () {\n var char = this.consume();\n if (isSpace(char)) {\n return;\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n var nextSixChars = char.toUpperCase() + this.input.substring(this.index, this.index + 5).toUpperCase();\n var isPublic = nextSixChars.toUpperCase() === 'PUBLIC';\n var isSystem = nextSixChars.toUpperCase() === 'SYSTEM';\n if (isPublic || isSystem) {\n this.consume();\n this.consume();\n this.consume();\n this.consume();\n this.consume();\n this.consume();\n }\n if (isPublic) {\n this.transitionTo(\"afterDoctypePublicKeyword\" /* afterDoctypePublicKeyword */);\n } else if (isSystem) {\n this.transitionTo(\"afterDoctypeSystemKeyword\" /* afterDoctypeSystemKeyword */);\n }\n }\n },\n\n afterDoctypePublicKeyword: function () {\n var char = this.peek();\n if (isSpace(char)) {\n this.transitionTo(\"beforeDoctypePublicIdentifier\" /* beforeDoctypePublicIdentifier */);\n this.consume();\n } else if (char === '\"') {\n this.transitionTo(\"doctypePublicIdentifierDoubleQuoted\" /* doctypePublicIdentifierDoubleQuoted */);\n this.consume();\n } else if (char === \"'\") {\n this.transitionTo(\"doctypePublicIdentifierSingleQuoted\" /* doctypePublicIdentifierSingleQuoted */);\n this.consume();\n } else if (char === '>') {\n this.consume();\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n }\n },\n\n doctypePublicIdentifierDoubleQuoted: function () {\n var char = this.consume();\n if (char === '\"') {\n this.transitionTo(\"afterDoctypePublicIdentifier\" /* afterDoctypePublicIdentifier */);\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n if (this.delegate.appendToDoctypePublicIdentifier) this.delegate.appendToDoctypePublicIdentifier(char);\n }\n },\n doctypePublicIdentifierSingleQuoted: function () {\n var char = this.consume();\n if (char === \"'\") {\n this.transitionTo(\"afterDoctypePublicIdentifier\" /* afterDoctypePublicIdentifier */);\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n if (this.delegate.appendToDoctypePublicIdentifier) this.delegate.appendToDoctypePublicIdentifier(char);\n }\n },\n afterDoctypePublicIdentifier: function () {\n var char = this.consume();\n if (isSpace(char)) {\n this.transitionTo(\"betweenDoctypePublicAndSystemIdentifiers\" /* betweenDoctypePublicAndSystemIdentifiers */);\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else if (char === '\"') {\n this.transitionTo(\"doctypeSystemIdentifierDoubleQuoted\" /* doctypeSystemIdentifierDoubleQuoted */);\n } else if (char === \"'\") {\n this.transitionTo(\"doctypeSystemIdentifierSingleQuoted\" /* doctypeSystemIdentifierSingleQuoted */);\n }\n },\n\n betweenDoctypePublicAndSystemIdentifiers: function () {\n var char = this.consume();\n if (isSpace(char)) {\n return;\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else if (char === '\"') {\n this.transitionTo(\"doctypeSystemIdentifierDoubleQuoted\" /* doctypeSystemIdentifierDoubleQuoted */);\n } else if (char === \"'\") {\n this.transitionTo(\"doctypeSystemIdentifierSingleQuoted\" /* doctypeSystemIdentifierSingleQuoted */);\n }\n },\n\n doctypeSystemIdentifierDoubleQuoted: function () {\n var char = this.consume();\n if (char === '\"') {\n this.transitionTo(\"afterDoctypeSystemIdentifier\" /* afterDoctypeSystemIdentifier */);\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n if (this.delegate.appendToDoctypeSystemIdentifier) this.delegate.appendToDoctypeSystemIdentifier(char);\n }\n },\n doctypeSystemIdentifierSingleQuoted: function () {\n var char = this.consume();\n if (char === \"'\") {\n this.transitionTo(\"afterDoctypeSystemIdentifier\" /* afterDoctypeSystemIdentifier */);\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n if (this.delegate.appendToDoctypeSystemIdentifier) this.delegate.appendToDoctypeSystemIdentifier(char);\n }\n },\n afterDoctypeSystemIdentifier: function () {\n var char = this.consume();\n if (isSpace(char)) {\n return;\n } else if (char === '>') {\n if (this.delegate.endDoctype) this.delegate.endDoctype();\n this.transitionTo(\"beforeData\" /* beforeData */);\n }\n },\n\n commentStart: function () {\n var char = this.consume();\n if (char === '-') {\n this.transitionTo(\"commentStartDash\" /* commentStartDash */);\n } else if (char === '>') {\n this.delegate.finishComment();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.delegate.appendToCommentData(char);\n this.transitionTo(\"comment\" /* comment */);\n }\n },\n\n commentStartDash: function () {\n var char = this.consume();\n if (char === '-') {\n this.transitionTo(\"commentEnd\" /* commentEnd */);\n } else if (char === '>') {\n this.delegate.finishComment();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.delegate.appendToCommentData('-');\n this.transitionTo(\"comment\" /* comment */);\n }\n },\n\n comment: function () {\n var char = this.consume();\n if (char === '-') {\n this.transitionTo(\"commentEndDash\" /* commentEndDash */);\n } else {\n this.delegate.appendToCommentData(char);\n }\n },\n commentEndDash: function () {\n var char = this.consume();\n if (char === '-') {\n this.transitionTo(\"commentEnd\" /* commentEnd */);\n } else {\n this.delegate.appendToCommentData('-' + char);\n this.transitionTo(\"comment\" /* comment */);\n }\n },\n\n commentEnd: function () {\n var char = this.consume();\n if (char === '>') {\n this.delegate.finishComment();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.delegate.appendToCommentData('--' + char);\n this.transitionTo(\"comment\" /* comment */);\n }\n },\n\n tagName: function () {\n var char = this.consume();\n if (isSpace(char)) {\n this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n } else if (char === '/') {\n this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n } else if (char === '>') {\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.appendToTagName(char);\n }\n },\n endTagName: function () {\n var char = this.consume();\n if (isSpace(char)) {\n this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n this.tagNameBuffer = '';\n } else if (char === '/') {\n this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n this.tagNameBuffer = '';\n } else if (char === '>') {\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n this.tagNameBuffer = '';\n } else {\n this.appendToTagName(char);\n }\n },\n beforeAttributeName: function () {\n var char = this.peek();\n if (isSpace(char)) {\n this.consume();\n return;\n } else if (char === '/') {\n this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n this.consume();\n } else if (char === '>') {\n this.consume();\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else if (char === '=') {\n this.delegate.reportSyntaxError('attribute name cannot start with equals sign');\n this.transitionTo(\"attributeName\" /* attributeName */);\n this.delegate.beginAttribute();\n this.consume();\n this.delegate.appendToAttributeName(char);\n } else {\n this.transitionTo(\"attributeName\" /* attributeName */);\n this.delegate.beginAttribute();\n }\n },\n attributeName: function () {\n var char = this.peek();\n if (isSpace(char)) {\n this.transitionTo(\"afterAttributeName\" /* afterAttributeName */);\n this.consume();\n } else if (char === '/') {\n this.delegate.beginAttributeValue(false);\n this.delegate.finishAttributeValue();\n this.consume();\n this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n } else if (char === '=') {\n this.transitionTo(\"beforeAttributeValue\" /* beforeAttributeValue */);\n this.consume();\n } else if (char === '>') {\n this.delegate.beginAttributeValue(false);\n this.delegate.finishAttributeValue();\n this.consume();\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else if (char === '\"' || char === \"'\" || char === '<') {\n this.delegate.reportSyntaxError(char + ' is not a valid character within attribute names');\n this.consume();\n this.delegate.appendToAttributeName(char);\n } else {\n this.consume();\n this.delegate.appendToAttributeName(char);\n }\n },\n afterAttributeName: function () {\n var char = this.peek();\n if (isSpace(char)) {\n this.consume();\n return;\n } else if (char === '/') {\n this.delegate.beginAttributeValue(false);\n this.delegate.finishAttributeValue();\n this.consume();\n this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n } else if (char === '=') {\n this.consume();\n this.transitionTo(\"beforeAttributeValue\" /* beforeAttributeValue */);\n } else if (char === '>') {\n this.delegate.beginAttributeValue(false);\n this.delegate.finishAttributeValue();\n this.consume();\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.delegate.beginAttributeValue(false);\n this.delegate.finishAttributeValue();\n this.transitionTo(\"attributeName\" /* attributeName */);\n this.delegate.beginAttribute();\n this.consume();\n this.delegate.appendToAttributeName(char);\n }\n },\n beforeAttributeValue: function () {\n var char = this.peek();\n if (isSpace(char)) {\n this.consume();\n } else if (char === '\"') {\n this.transitionTo(\"attributeValueDoubleQuoted\" /* attributeValueDoubleQuoted */);\n this.delegate.beginAttributeValue(true);\n this.consume();\n } else if (char === \"'\") {\n this.transitionTo(\"attributeValueSingleQuoted\" /* attributeValueSingleQuoted */);\n this.delegate.beginAttributeValue(true);\n this.consume();\n } else if (char === '>') {\n this.delegate.beginAttributeValue(false);\n this.delegate.finishAttributeValue();\n this.consume();\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.transitionTo(\"attributeValueUnquoted\" /* attributeValueUnquoted */);\n this.delegate.beginAttributeValue(false);\n this.consume();\n this.delegate.appendToAttributeValue(char);\n }\n },\n attributeValueDoubleQuoted: function () {\n var char = this.consume();\n if (char === '\"') {\n this.delegate.finishAttributeValue();\n this.transitionTo(\"afterAttributeValueQuoted\" /* afterAttributeValueQuoted */);\n } else if (char === '&') {\n this.delegate.appendToAttributeValue(this.consumeCharRef() || '&');\n } else {\n this.delegate.appendToAttributeValue(char);\n }\n },\n attributeValueSingleQuoted: function () {\n var char = this.consume();\n if (char === \"'\") {\n this.delegate.finishAttributeValue();\n this.transitionTo(\"afterAttributeValueQuoted\" /* afterAttributeValueQuoted */);\n } else if (char === '&') {\n this.delegate.appendToAttributeValue(this.consumeCharRef() || '&');\n } else {\n this.delegate.appendToAttributeValue(char);\n }\n },\n attributeValueUnquoted: function () {\n var char = this.peek();\n if (isSpace(char)) {\n this.delegate.finishAttributeValue();\n this.consume();\n this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n } else if (char === '/') {\n this.delegate.finishAttributeValue();\n this.consume();\n this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n } else if (char === '&') {\n this.consume();\n this.delegate.appendToAttributeValue(this.consumeCharRef() || '&');\n } else if (char === '>') {\n this.delegate.finishAttributeValue();\n this.consume();\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.consume();\n this.delegate.appendToAttributeValue(char);\n }\n },\n afterAttributeValueQuoted: function () {\n var char = this.peek();\n if (isSpace(char)) {\n this.consume();\n this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n } else if (char === '/') {\n this.consume();\n this.transitionTo(\"selfClosingStartTag\" /* selfClosingStartTag */);\n } else if (char === '>') {\n this.consume();\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n }\n },\n\n selfClosingStartTag: function () {\n var char = this.peek();\n if (char === '>') {\n this.consume();\n this.delegate.markTagAsSelfClosing();\n this.delegate.finishTag();\n this.transitionTo(\"beforeData\" /* beforeData */);\n } else {\n this.transitionTo(\"beforeAttributeName\" /* beforeAttributeName */);\n }\n },\n\n endTagOpen: function () {\n var char = this.consume();\n if (char === '@' || char === ':' || isAlpha(char)) {\n this.transitionTo(\"endTagName\" /* endTagName */);\n this.tagNameBuffer = '';\n this.delegate.beginEndTag();\n this.appendToTagName(char);\n }\n }\n };\n this.reset();\n }\n EventedTokenizer.prototype.reset = function () {\n this.transitionTo(\"beforeData\" /* beforeData */);\n this.input = '';\n this.tagNameBuffer = '';\n this.index = 0;\n this.line = 1;\n this.column = 0;\n this.delegate.reset();\n };\n EventedTokenizer.prototype.transitionTo = function (state) {\n this.state = state;\n };\n EventedTokenizer.prototype.tokenize = function (input) {\n this.reset();\n this.tokenizePart(input);\n this.tokenizeEOF();\n };\n EventedTokenizer.prototype.tokenizePart = function (input) {\n this.input += preprocessInput(input);\n while (this.index < this.input.length) {\n var handler = this.states[this.state];\n if (handler !== undefined) {\n handler.call(this);\n } else {\n throw new Error(\"unhandled state \" + this.state);\n }\n }\n };\n EventedTokenizer.prototype.tokenizeEOF = function () {\n this.flushData();\n };\n EventedTokenizer.prototype.flushData = function () {\n if (this.state === 'data') {\n this.delegate.finishData();\n this.transitionTo(\"beforeData\" /* beforeData */);\n }\n };\n\n EventedTokenizer.prototype.peek = function () {\n return this.input.charAt(this.index);\n };\n EventedTokenizer.prototype.consume = function () {\n var char = this.peek();\n this.index++;\n if (char === '\\n') {\n this.line++;\n this.column = 0;\n } else {\n this.column++;\n }\n return char;\n };\n EventedTokenizer.prototype.consumeCharRef = function () {\n var endIndex = this.input.indexOf(';', this.index);\n if (endIndex === -1) {\n return;\n }\n var entity = this.input.slice(this.index, endIndex);\n var chars = this.entityParser.parse(entity);\n if (chars) {\n var count = entity.length;\n // consume the entity chars\n while (count) {\n this.consume();\n count--;\n }\n // consume the `;`\n this.consume();\n return chars;\n }\n };\n EventedTokenizer.prototype.markTagStart = function () {\n this.delegate.tagOpen();\n };\n EventedTokenizer.prototype.appendToTagName = function (char) {\n this.tagNameBuffer += char;\n this.delegate.appendToTagName(char);\n };\n EventedTokenizer.prototype.isIgnoredEndTag = function () {\n var tag = this.tagNameBuffer;\n return tag === 'title' && this.input.substring(this.index, this.index + 8) !== '</title>' || tag === 'style' && this.input.substring(this.index, this.index + 8) !== '</style>' || tag === 'script' && this.input.substring(this.index, this.index + 9) !== '</script>';\n };\n return EventedTokenizer;\n }();\n var Tokenizer = _exports.Tokenizer = /** @class */function () {\n function Tokenizer(entityParser, options) {\n if (options === void 0) {\n options = {};\n }\n this.options = options;\n this.token = null;\n this.startLine = 1;\n this.startColumn = 0;\n this.tokens = [];\n this.tokenizer = new EventedTokenizer(this, entityParser, options.mode);\n this._currentAttribute = undefined;\n }\n Tokenizer.prototype.tokenize = function (input) {\n this.tokens = [];\n this.tokenizer.tokenize(input);\n return this.tokens;\n };\n Tokenizer.prototype.tokenizePart = function (input) {\n this.tokens = [];\n this.tokenizer.tokenizePart(input);\n return this.tokens;\n };\n Tokenizer.prototype.tokenizeEOF = function () {\n this.tokens = [];\n this.tokenizer.tokenizeEOF();\n return this.tokens[0];\n };\n Tokenizer.prototype.reset = function () {\n this.token = null;\n this.startLine = 1;\n this.startColumn = 0;\n };\n Tokenizer.prototype.current = function () {\n var token = this.token;\n if (token === null) {\n throw new Error('token was unexpectedly null');\n }\n if (arguments.length === 0) {\n return token;\n }\n for (var i = 0; i < arguments.length; i++) {\n if (token.type === arguments[i]) {\n return token;\n }\n }\n throw new Error(\"token type was unexpectedly \" + token.type);\n };\n Tokenizer.prototype.push = function (token) {\n this.token = token;\n this.tokens.push(token);\n };\n Tokenizer.prototype.currentAttribute = function () {\n return this._currentAttribute;\n };\n Tokenizer.prototype.addLocInfo = function () {\n if (this.options.loc) {\n this.current().loc = {\n start: {\n line: this.startLine,\n column: this.startColumn\n },\n end: {\n line: this.tokenizer.line,\n column: this.tokenizer.column\n }\n };\n }\n this.startLine = this.tokenizer.line;\n this.startColumn = this.tokenizer.column;\n };\n // Data\n Tokenizer.prototype.beginDoctype = function () {\n this.push({\n type: \"Doctype\" /* Doctype */,\n name: ''\n });\n };\n Tokenizer.prototype.appendToDoctypeName = function (char) {\n this.current(\"Doctype\" /* Doctype */).name += char;\n };\n Tokenizer.prototype.appendToDoctypePublicIdentifier = function (char) {\n var doctype = this.current(\"Doctype\" /* Doctype */);\n if (doctype.publicIdentifier === undefined) {\n doctype.publicIdentifier = char;\n } else {\n doctype.publicIdentifier += char;\n }\n };\n Tokenizer.prototype.appendToDoctypeSystemIdentifier = function (char) {\n var doctype = this.current(\"Doctype\" /* Doctype */);\n if (doctype.systemIdentifier === undefined) {\n doctype.systemIdentifier = char;\n } else {\n doctype.systemIdentifier += char;\n }\n };\n Tokenizer.prototype.endDoctype = function () {\n this.addLocInfo();\n };\n Tokenizer.prototype.beginData = function () {\n this.push({\n type: \"Chars\" /* Chars */,\n chars: ''\n });\n };\n Tokenizer.prototype.appendToData = function (char) {\n this.current(\"Chars\" /* Chars */).chars += char;\n };\n Tokenizer.prototype.finishData = function () {\n this.addLocInfo();\n };\n // Comment\n Tokenizer.prototype.beginComment = function () {\n this.push({\n type: \"Comment\" /* Comment */,\n chars: ''\n });\n };\n Tokenizer.prototype.appendToCommentData = function (char) {\n this.current(\"Comment\" /* Comment */).chars += char;\n };\n Tokenizer.prototype.finishComment = function () {\n this.addLocInfo();\n };\n // Tags - basic\n Tokenizer.prototype.tagOpen = function () {};\n Tokenizer.prototype.beginStartTag = function () {\n this.push({\n type: \"StartTag\" /* StartTag */,\n tagName: '',\n attributes: [],\n selfClosing: false\n });\n };\n Tokenizer.prototype.beginEndTag = function () {\n this.push({\n type: \"EndTag\" /* EndTag */,\n tagName: ''\n });\n };\n Tokenizer.prototype.finishTag = function () {\n this.addLocInfo();\n };\n Tokenizer.prototype.markTagAsSelfClosing = function () {\n this.current(\"StartTag\" /* StartTag */).selfClosing = true;\n };\n // Tags - name\n Tokenizer.prototype.appendToTagName = function (char) {\n this.current(\"StartTag\" /* StartTag */, \"EndTag\" /* EndTag */).tagName += char;\n };\n // Tags - attributes\n Tokenizer.prototype.beginAttribute = function () {\n this._currentAttribute = ['', '', false];\n };\n Tokenizer.prototype.appendToAttributeName = function (char) {\n this.currentAttribute()[0] += char;\n };\n Tokenizer.prototype.beginAttributeValue = function (isQuoted) {\n this.currentAttribute()[2] = isQuoted;\n };\n Tokenizer.prototype.appendToAttributeValue = function (char) {\n this.currentAttribute()[1] += char;\n };\n Tokenizer.prototype.finishAttributeValue = function () {\n this.current(\"StartTag\" /* StartTag */).attributes.push(this._currentAttribute);\n };\n Tokenizer.prototype.reportSyntaxError = function (message) {\n this.current().syntaxError = message;\n };\n return Tokenizer;\n }();\n function tokenize(input, options) {\n var tokenizer = new Tokenizer(new EntityParser(namedCharRefs), options);\n return tokenizer.tokenize(input);\n }\n});"],"names":[],"mappings":";AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpQA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzkBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACvfA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7PA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpMA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACdA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5FA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACVA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnjHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACRA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpyLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtoBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC5MA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtHA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjwEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChNA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACpBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACxBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACZA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC9CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACjDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AClIA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3DA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC3CA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC/EA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACtDA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AChCA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACnEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACrBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACzBA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC1BA;AACA;AACA;AACA;AACA;AACA;;ACLA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AC7BA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;ACPA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;","file":"ember-template-compiler.js"}
|