diff options
author | Darius Jahandarie <djahandarie@gmail.com> | 2023-08-19 18:38:34 +0900 |
---|---|---|
committer | GitHub <noreply@github.com> | 2023-08-19 18:38:34 +0900 |
commit | a00a56c429347d872bfd6fe1597e6f8991cf7217 (patch) | |
tree | ec0342d9c48382b3457df0cfa4bfa5b485980f40 | |
parent | a59d0c8db30e852c901dfd1f35187ec2395bf464 (diff) | |
parent | 07333a2807fc23875a3ffa34f97ea0ff1e44d3d6 (diff) |
Merge pull request #209 from praschke/firefox-fixes
Firefox fixes
-rw-r--r-- | README.md | 2 | ||||
-rw-r--r-- | dev/data/manifest-variants.json | 18 | ||||
-rw-r--r-- | ext/js/background/backend.js | 4 | ||||
-rw-r--r-- | ext/js/background/request-builder.js | 1 | ||||
-rw-r--r-- | ext/js/background/script-manager.js | 115 | ||||
-rw-r--r-- | ext/js/language/text-scanner.js | 3 | ||||
-rw-r--r-- | ext/lib/handlebars.min.js.map | 7 | ||||
-rw-r--r-- | ext/permissions.html | 4 |
8 files changed, 43 insertions, 111 deletions
@@ -383,7 +383,7 @@ Required licensing notices for this project follow below: Yomitan uses several third-party libraries to function. Below are links to homepages, snapshots, and licenses of the exact versions packaged. -* Handlebars: [homepage](https://handlebarsjs.com/) - [snapshot](https://s3.amazonaws.com/builds.handlebarsjs.com/handlebars.min-v4.7.7.js) - [license](https://github.com/handlebars-lang/handlebars.js/blob/v4.7.7/LICENSE) +* Handlebars: To retain Handlebars templating without unsafe-eval, a fork of handlebars by Kibana is being used. [homepage](https://github.com/Aquafina-water-bottle/handlebars-noeval) - [snapshot](https://raw.githubusercontent.com/Aquafina-water-bottle/handlebars-noeval/10efaac28d8d2e8d7e503347281eff1a90aa3f31/handlebars.min.js) - [license](https://github.com/Aquafina-water-bottle/handlebars-noeval/blob/10efaac28d8d2e8d7e503347281eff1a90aa3f31/src/hb/LICENSE) * JSZip: [homepage](https://stuk.github.io/jszip/) - [snapshot](https://github.com/Stuk/jszip/blob/v3.9.1/dist/jszip.min.js) - [license](https://github.com/Stuk/jszip/blob/v3.9.1/LICENSE.markdown) * WanaKana: [homepage](https://wanakana.com/) - [snapshot](https://unpkg.com/wanakana@4.0.2/umd/wanakana.min.js) - [license](https://github.com/WaniKani/WanaKana/blob/4.0.2/LICENSE) * parse5: [homepage](https://github.com/inikulin/parse5) - [snapshot](https://github.com/inikulin/parse5/tree/v7.1.2/packages/parse5) - [license](https://github.com/inikulin/parse5/blob/v7.1.2/LICENSE) _(Only used in MV3 build)_ diff --git a/dev/data/manifest-variants.json b/dev/data/manifest-variants.json index 3179734f..304a3a0e 100644 --- a/dev/data/manifest-variants.json +++ b/dev/data/manifest-variants.json @@ -206,12 +206,19 @@ ] }, { + "action": "delete", + "path": [ + "content_security_policy", + "sandbox" + ] + }, + { "action": "set", "path": [ "content_security_policy", "extension_pages" ], - "value": "default-src 'self'; script-src 'self' 'unsafe-eval'; img-src blob: 'self'; style-src 'self' 'unsafe-inline'; media-src *; connect-src *" + "value": "default-src 'self'; script-src 'self'; img-src blob: 'self'; style-src 'self' 'unsafe-inline'; media-src *; connect-src *" }, { "action": "set", @@ -221,7 +228,7 @@ "value": { "gecko": { "id": "{cb7c0bec-7085-4f84-8422-7b55a7c4467c}", - "strict_min_version": "101.0" + "strict_min_version": "102.0" } } }, @@ -240,6 +247,13 @@ "items": [ "nativeMessaging" ] + }, + { + "action": "remove", + "path": [ + "permissions" + ], + "item": "declarativeNetRequest" } ], "excludeFiles": [ diff --git a/ext/js/background/backend.js b/ext/js/background/backend.js index db6cfada..dd233abb 100644 --- a/ext/js/background/backend.js +++ b/ext/js/background/backend.js @@ -593,7 +593,7 @@ class Backend { async _onApiInjectStylesheet({type, value}, sender) { const {frameId, tab} = sender; if (!isObject(tab)) { throw new Error('Invalid tab'); } - return await this._scriptManager.injectStylesheet(type, value, tab.id, frameId, false, true, 'document_start'); + return await this._scriptManager.injectStylesheet(type, value, tab.id, frameId, false); } async _onApiGetStylesheetContent({url}) { @@ -790,7 +790,7 @@ class Backend { if (typeof tabId !== 'number') { throw new Error('Sender has invalid tab ID'); } const {frameId} = sender; for (const file of files) { - await this._scriptManager.injectScript(file, tabId, frameId, false, true, 'document_start'); + await this._scriptManager.injectScript(file, tabId, frameId, false); } } diff --git a/ext/js/background/request-builder.js b/ext/js/background/request-builder.js index eca7d0d3..663e242b 100644 --- a/ext/js/background/request-builder.js +++ b/ext/js/background/request-builder.js @@ -54,7 +54,6 @@ class RequestBuilder { * @returns {Promise<Response>} The response of the `fetch` call. */ async fetchAnonymous(url, init) { - fetch(1, 2); if (isObject(chrome.declarativeNetRequest)) { return await this._fetchAnonymousDeclarative(url, init); } diff --git a/ext/js/background/script-manager.js b/ext/js/background/script-manager.js index 722a46f0..694b64db 100644 --- a/ext/js/background/script-manager.js +++ b/ext/js/background/script-manager.js @@ -36,14 +36,10 @@ class ScriptManager { * @param {number} tabId The id of the tab to inject into. * @param {number} [frameId] The id of the frame to inject into. * @param {boolean} [allFrames] Whether or not the stylesheet should be injected into all frames. - * @param {boolean} [matchAboutBlank] Whether or not the stylesheet should be injected into about:blank frames. - * @param {string} [runAt] The time to inject the stylesheet at. * @returns {Promise<void>} */ - injectStylesheet(type, content, tabId, frameId, allFrames, matchAboutBlank, runAt) { - if (isObject(chrome.tabs) && typeof chrome.tabs.insertCSS === 'function') { - return this._injectStylesheetMV2(type, content, tabId, frameId, allFrames, matchAboutBlank, runAt); - } else if (isObject(chrome.scripting) && typeof chrome.scripting.insertCSS === 'function') { + injectStylesheet(type, content, tabId, frameId, allFrames) { + if (isObject(chrome.scripting) && typeof chrome.scripting.insertCSS === 'function') { return this._injectStylesheetMV3(type, content, tabId, frameId, allFrames); } else { return Promise.reject(new Error('Stylesheet injection not supported')); @@ -56,14 +52,10 @@ class ScriptManager { * @param {number} tabId The id of the tab to inject into. * @param {number} [frameId] The id of the frame to inject into. * @param {boolean} [allFrames] Whether or not the script should be injected into all frames. - * @param {boolean} [matchAboutBlank] Whether or not the script should be injected into about:blank frames. - * @param {string} [runAt] The time to inject the script at. * @returns {Promise<{frameId: number, result: object}>} The id of the frame and the result of the script injection. */ - injectScript(file, tabId, frameId, allFrames, matchAboutBlank, runAt) { - if (isObject(chrome.tabs) && typeof chrome.tabs.executeScript === 'function') { - return this._injectScriptMV2(file, tabId, frameId, allFrames, matchAboutBlank, runAt); - } else if (isObject(chrome.scripting) && typeof chrome.scripting.executeScript === 'function') { + injectScript(file, tabId, frameId, allFrames) { + if (isObject(chrome.scripting) && typeof chrome.scripting.executeScript === 'function') { return this._injectScriptMV3(file, tabId, frameId, allFrames); } else { return Promise.reject(new Error('Script injection not supported')); @@ -122,19 +114,6 @@ class ScriptManager { throw new Error('Registration already exists'); } - // Firefox - if ( - typeof browser === 'object' && browser !== null && - isObject(browser.contentScripts) && - typeof browser.contentScripts.register === 'function' - ) { - const details2 = this._convertContentScriptRegistrationDetails(details, id, true); - const registration = await browser.contentScripts.register(details2); - this._contentScriptRegistrations.set(id, registration); - return; - } - - // Chrome if (isObject(chrome.scripting) && typeof chrome.scripting.registerContentScripts === 'function') { const details2 = this._convertContentScriptRegistrationDetails(details, id, false); await new Promise((resolve, reject) => { @@ -161,18 +140,17 @@ class ScriptManager { * @returns {Promise<boolean>} `true` if the content script was unregistered, `false` otherwise. */ async unregisterContentScript(id) { - // Chrome if (isObject(chrome.scripting) && typeof chrome.scripting.unregisterContentScripts === 'function') { this._contentScriptRegistrations.delete(id); try { - await this._unregisterContentScriptChrome(id); + await this._unregisterContentScriptMV3(id); return true; } catch (e) { return false; } } - // Firefox or fallback + // Fallback const registration = this._contentScriptRegistrations.get(id); if (typeof registration === 'undefined') { return false; } this._contentScriptRegistrations.delete(id); @@ -187,19 +165,7 @@ class ScriptManager { * @returns {string[]} An array of the required permissions, which may be empty. */ getRequiredContentScriptRegistrationPermissions() { - if ( - // Firefox - ( - typeof browser === 'object' && browser !== null && - isObject(browser.contentScripts) && - typeof browser.contentScripts.register === 'function' - ) || - // Chrome - ( - isObject(chrome.scripting) && - typeof chrome.scripting.registerContentScripts === 'function' - ) - ) { + if (isObject(chrome.scripting) && typeof chrome.scripting.registerContentScripts === 'function') { return []; } @@ -209,45 +175,12 @@ class ScriptManager { // Private - _injectStylesheetMV2(type, content, tabId, frameId, allFrames, matchAboutBlank, runAt) { - return new Promise((resolve, reject) => { - const details = ( - type === 'file' ? - { - file: content, - runAt, - cssOrigin: 'author', - allFrames, - matchAboutBlank - } : - { - code: content, - runAt, - cssOrigin: 'user', - allFrames, - matchAboutBlank - } - ); - if (typeof frameId === 'number') { - details.frameId = frameId; - } - chrome.tabs.insertCSS(tabId, details, () => { - const e = chrome.runtime.lastError; - if (e) { - reject(new Error(e.message)); - } else { - resolve(); - } - }); - }); - } - _injectStylesheetMV3(type, content, tabId, frameId, allFrames) { return new Promise((resolve, reject) => { const details = ( type === 'file' ? - {origin: chrome.scripting.StyleOrigin.AUTHOR, files: [content]} : - {origin: chrome.scripting.StyleOrigin.USER, css: content} + {origin: 'AUTHOR', files: [content]} : + {origin: 'USER', css: content} ); details.target = { tabId, @@ -267,27 +200,6 @@ class ScriptManager { }); } - _injectScriptMV2(file, tabId, frameId, allFrames, matchAboutBlank, runAt) { - return new Promise((resolve, reject) => { - const details = { - allFrames, - frameId, - file, - matchAboutBlank, - runAt - }; - chrome.tabs.executeScript(tabId, details, (results) => { - const e = chrome.runtime.lastError; - if (e) { - reject(new Error(e.message)); - } else { - const result = results[0]; - resolve({frameId, result}); - } - }); - }); - } - _injectScriptMV3(file, tabId, frameId, allFrames) { return new Promise((resolve, reject) => { const details = { @@ -310,7 +222,7 @@ class ScriptManager { }); } - _unregisterContentScriptChrome(id) { + _unregisterContentScriptMV3(id) { return new Promise((resolve, reject) => { chrome.scripting.unregisterContentScripts({ids: [id]}, () => { const e = chrome.runtime.lastError; @@ -407,7 +319,7 @@ class ScriptManager { const {urlRegex} = details; if (urlRegex !== null && !urlRegex.test(url)) { return; } - let {allFrames, css, js, matchAboutBlank, runAt} = details; + let {allFrames, css, js, runAt} = details; if (isWebNavigation) { if (allFrames) { @@ -425,14 +337,13 @@ class ScriptManager { const promises = []; if (Array.isArray(css)) { - const runAtCss = (typeof runAt === 'string' ? runAt : 'document_start'); for (const file of css) { - promises.push(this.injectStylesheet('file', file, tabId, frameId, allFrames, matchAboutBlank, runAtCss)); + promises.push(this.injectStylesheet('file', file, tabId, frameId, allFrames)); } } if (Array.isArray(js)) { for (const file of js) { - promises.push(this.injectScript(file, tabId, frameId, allFrames, matchAboutBlank, runAt)); + promises.push(this.injectScript(file, tabId, frameId, allFrames)); } } await Promise.all(promises); diff --git a/ext/js/language/text-scanner.js b/ext/js/language/text-scanner.js index 6fa7a454..af5cc8fe 100644 --- a/ext/js/language/text-scanner.js +++ b/ext/js/language/text-scanner.js @@ -145,7 +145,8 @@ class TextScanner extends EventDispatcher { if (value) { this._hookEvents(); - this._userHasNotSelectedAnythingManually = window.getSelection().isCollapsed; + const selection = window.getSelection(); + this._userHasNotSelectedAnythingManually = (selection === null) ? true : selection.isCollapsed; } } diff --git a/ext/lib/handlebars.min.js.map b/ext/lib/handlebars.min.js.map new file mode 100644 index 00000000..d9484007 --- /dev/null +++ b/ext/lib/handlebars.min.js.map @@ -0,0 +1,7 @@ +{ + "version": 3, + "sources": ["node_modules/handlebars/lib/handlebars/utils.js", "node_modules/handlebars/lib/handlebars/exception.js", "node_modules/handlebars/lib/handlebars/helpers/block-helper-missing.js", "node_modules/handlebars/lib/handlebars/helpers/each.js", "node_modules/handlebars/lib/handlebars/helpers/helper-missing.js", "node_modules/handlebars/lib/handlebars/helpers/if.js", "node_modules/handlebars/lib/handlebars/helpers/log.js", "node_modules/handlebars/lib/handlebars/helpers/lookup.js", "node_modules/handlebars/lib/handlebars/helpers/with.js", "node_modules/handlebars/lib/handlebars/helpers.js", "node_modules/handlebars/lib/handlebars/decorators/inline.js", "node_modules/handlebars/lib/handlebars/decorators.js", "node_modules/handlebars/lib/handlebars/logger.js", "node_modules/handlebars/lib/handlebars/internal/create-new-lookup-object.js", "node_modules/handlebars/lib/handlebars/internal/proto-access.js", "node_modules/handlebars/lib/handlebars/base.js", "node_modules/handlebars/lib/handlebars/safe-string.js", "node_modules/handlebars/lib/handlebars/internal/wrapHelper.js", "node_modules/handlebars/lib/handlebars/runtime.js", "node_modules/handlebars/lib/handlebars/no-conflict.js", "node_modules/handlebars/lib/handlebars.runtime.js", "node_modules/handlebars/lib/handlebars/compiler/ast.js", "node_modules/handlebars/lib/handlebars/compiler/parser.js", "node_modules/handlebars/lib/handlebars/compiler/visitor.js", "node_modules/handlebars/lib/handlebars/compiler/whitespace-control.js", "node_modules/handlebars/lib/handlebars/compiler/helpers.js", "node_modules/handlebars/lib/handlebars/compiler/base.js", "node_modules/handlebars/lib/handlebars/compiler/compiler.js", "node_modules/source-map/lib/base64.js", "node_modules/source-map/lib/base64-vlq.js", "node_modules/source-map/lib/util.js", "node_modules/source-map/lib/array-set.js", "node_modules/source-map/lib/mapping-list.js", "node_modules/source-map/lib/source-map-generator.js", "node_modules/source-map/lib/binary-search.js", "node_modules/source-map/lib/quick-sort.js", "node_modules/source-map/lib/source-map-consumer.js", "node_modules/source-map/lib/source-node.js", "node_modules/source-map/source-map.js", "node_modules/handlebars/lib/handlebars/compiler/code-gen.js", "node_modules/handlebars/lib/handlebars/compiler/javascript-compiler.js", "node_modules/handlebars/lib/handlebars.js", "node_modules/handlebars/lib/handlebars/compiler/printer.js", "node_modules/handlebars/lib/index.js", "src/hb/src/visitor.ts", "src/hb/src/symbols.ts", "src/hb/src/utils.ts", "src/hb/src/handlebars.ts", "src/hb/index.ts"], + "sourcesContent": ["const escape = {\n '&': '&',\n '<': '<',\n '>': '>',\n '\"': '"',\n \"'\": ''',\n '`': '`',\n '=': '='\n};\n\nconst badChars = /[&<>\"'`=]/g,\n possible = /[&<>\"'`=]/;\n\nfunction escapeChar(chr) {\n return escape[chr];\n}\n\nexport function extend(obj /* , ...source */) {\n for (let i = 1; i < arguments.length; i++) {\n for (let key in arguments[i]) {\n if (Object.prototype.hasOwnProperty.call(arguments[i], key)) {\n obj[key] = arguments[i][key];\n }\n }\n }\n\n return obj;\n}\n\nexport let toString = Object.prototype.toString;\n\n// Sourced from lodash\n// https://github.com/bestiejs/lodash/blob/master/LICENSE.txt\n/* eslint-disable func-style */\nlet isFunction = function(value) {\n return typeof value === 'function';\n};\n// fallback for older versions of Chrome and Safari\n/* istanbul ignore next */\nif (isFunction(/x/)) {\n isFunction = function(value) {\n return (\n typeof value === 'function' &&\n toString.call(value) === '[object Function]'\n );\n };\n}\nexport { isFunction };\n/* eslint-enable func-style */\n\n/* istanbul ignore next */\nexport const isArray =\n Array.isArray ||\n function(value) {\n return value && typeof value === 'object'\n ? toString.call(value) === '[object Array]'\n : false;\n };\n\n// Older IE versions do not directly support indexOf so we must implement our own, sadly.\nexport function indexOf(array, value) {\n for (let i = 0, len = array.length; i < len; i++) {\n if (array[i] === value) {\n return i;\n }\n }\n return -1;\n}\n\nexport function escapeExpression(string) {\n if (typeof string !== 'string') {\n // don't escape SafeStrings, since they're already safe\n if (string && string.toHTML) {\n return string.toHTML();\n } else if (string == null) {\n return '';\n } else if (!string) {\n return string + '';\n }\n\n // Force a string conversion as this will be done by the append regardless and\n // the regex test will do this transparently behind the scenes, causing issues if\n // an object's to string has escaped characters in it.\n string = '' + string;\n }\n\n if (!possible.test(string)) {\n return string;\n }\n return string.replace(badChars, escapeChar);\n}\n\nexport function isEmpty(value) {\n if (!value && value !== 0) {\n return true;\n } else if (isArray(value) && value.length === 0) {\n return true;\n } else {\n return false;\n }\n}\n\nexport function createFrame(object) {\n let frame = extend({}, object);\n frame._parent = object;\n return frame;\n}\n\nexport function blockParams(params, ids) {\n params.path = ids;\n return params;\n}\n\nexport function appendContextPath(contextPath, id) {\n return (contextPath ? contextPath + '.' : '') + id;\n}\n", "const errorProps = [\n 'description',\n 'fileName',\n 'lineNumber',\n 'endLineNumber',\n 'message',\n 'name',\n 'number',\n 'stack'\n];\n\nfunction Exception(message, node) {\n let loc = node && node.loc,\n line,\n endLineNumber,\n column,\n endColumn;\n\n if (loc) {\n line = loc.start.line;\n endLineNumber = loc.end.line;\n column = loc.start.column;\n endColumn = loc.end.column;\n\n message += ' - ' + line + ':' + column;\n }\n\n let tmp = Error.prototype.constructor.call(this, message);\n\n // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.\n for (let idx = 0; idx < errorProps.length; idx++) {\n this[errorProps[idx]] = tmp[errorProps[idx]];\n }\n\n /* istanbul ignore else */\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, Exception);\n }\n\n try {\n if (loc) {\n this.lineNumber = line;\n this.endLineNumber = endLineNumber;\n\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\nException.prototype = new Error();\n\nexport default Exception;\n", "import { appendContextPath, createFrame, isArray } from '../utils';\n\nexport default function(instance) {\n instance.registerHelper('blockHelperMissing', function(context, options) {\n let inverse = options.inverse,\n fn = options.fn;\n\n if (context === true) {\n return fn(this);\n } else if (context === false || context == null) {\n return inverse(this);\n } else if (isArray(context)) {\n if (context.length > 0) {\n if (options.ids) {\n options.ids = [options.name];\n }\n\n return instance.helpers.each(context, options);\n } else {\n return inverse(this);\n }\n } else {\n if (options.data && options.ids) {\n let data = createFrame(options.data);\n data.contextPath = appendContextPath(\n options.data.contextPath,\n options.name\n );\n options = { data: data };\n }\n\n return fn(context, options);\n }\n });\n}\n", "import {\n appendContextPath,\n blockParams,\n createFrame,\n isArray,\n isFunction\n} from '../utils';\nimport Exception from '../exception';\n\nexport default function(instance) {\n instance.registerHelper('each', function(context, options) {\n if (!options) {\n throw new Exception('Must pass iterator to #each');\n }\n\n let fn = options.fn,\n inverse = options.inverse,\n i = 0,\n ret = '',\n data,\n contextPath;\n\n if (options.data && options.ids) {\n contextPath =\n appendContextPath(options.data.contextPath, options.ids[0]) + '.';\n }\n\n if (isFunction(context)) {\n context = context.call(this);\n }\n\n if (options.data) {\n data = createFrame(options.data);\n }\n\n function execIteration(field, index, last) {\n if (data) {\n data.key = field;\n data.index = index;\n data.first = index === 0;\n data.last = !!last;\n\n if (contextPath) {\n data.contextPath = contextPath + field;\n }\n }\n\n ret =\n ret +\n fn(context[field], {\n data: data,\n blockParams: blockParams(\n [context[field], field],\n [contextPath + field, null]\n )\n });\n }\n\n if (context && typeof context === 'object') {\n if (isArray(context)) {\n for (let j = context.length; i < j; i++) {\n if (i in context) {\n execIteration(i, i, i === context.length - 1);\n }\n }\n } else if (global.Symbol && context[global.Symbol.iterator]) {\n const newContext = [];\n const iterator = context[global.Symbol.iterator]();\n for (let it = iterator.next(); !it.done; it = iterator.next()) {\n newContext.push(it.value);\n }\n context = newContext;\n for (let j = context.length; i < j; i++) {\n execIteration(i, i, i === context.length - 1);\n }\n } else {\n let priorKey;\n\n Object.keys(context).forEach(key => {\n // We're running the iterations one step out of sync so we can detect\n // the last iteration without have to scan the object twice and create\n // an itermediate keys array.\n if (priorKey !== undefined) {\n execIteration(priorKey, i - 1);\n }\n priorKey = key;\n i++;\n });\n if (priorKey !== undefined) {\n execIteration(priorKey, i - 1, true);\n }\n }\n }\n\n if (i === 0) {\n ret = inverse(this);\n }\n\n return ret;\n });\n}\n", "import Exception from '../exception';\n\nexport default function(instance) {\n instance.registerHelper('helperMissing', function(/* [args, ]options */) {\n if (arguments.length === 1) {\n // A missing field in a {{foo}} construct.\n return undefined;\n } else {\n // Someone is actually trying to call something, blow up.\n throw new Exception(\n 'Missing helper: \"' + arguments[arguments.length - 1].name + '\"'\n );\n }\n });\n}\n", "import { isEmpty, isFunction } from '../utils';\nimport Exception from '../exception';\n\nexport default function(instance) {\n instance.registerHelper('if', function(conditional, options) {\n if (arguments.length != 2) {\n throw new Exception('#if requires exactly one argument');\n }\n if (isFunction(conditional)) {\n conditional = conditional.call(this);\n }\n\n // Default behavior is to render the positive path if the value is truthy and not empty.\n // The `includeZero` option may be set to treat the condtional as purely not empty based on the\n // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative.\n if ((!options.hash.includeZero && !conditional) || isEmpty(conditional)) {\n return options.inverse(this);\n } else {\n return options.fn(this);\n }\n });\n\n instance.registerHelper('unless', function(conditional, options) {\n if (arguments.length != 2) {\n throw new Exception('#unless requires exactly one argument');\n }\n return instance.helpers['if'].call(this, conditional, {\n fn: options.inverse,\n inverse: options.fn,\n hash: options.hash\n });\n });\n}\n", "export default function(instance) {\n instance.registerHelper('log', function(/* message, options */) {\n let args = [undefined],\n options = arguments[arguments.length - 1];\n for (let i = 0; i < arguments.length - 1; i++) {\n args.push(arguments[i]);\n }\n\n let level = 1;\n if (options.hash.level != null) {\n level = options.hash.level;\n } else if (options.data && options.data.level != null) {\n level = options.data.level;\n }\n args[0] = level;\n\n instance.log(...args);\n });\n}\n", "export default function(instance) {\n instance.registerHelper('lookup', function(obj, field, options) {\n if (!obj) {\n // Note for 5.0: Change to \"obj == null\" in 5.0\n return obj;\n }\n return options.lookupProperty(obj, field);\n });\n}\n", "import {\n appendContextPath,\n blockParams,\n createFrame,\n isEmpty,\n isFunction\n} from '../utils';\nimport Exception from '../exception';\n\nexport default function(instance) {\n instance.registerHelper('with', function(context, options) {\n if (arguments.length != 2) {\n throw new Exception('#with requires exactly one argument');\n }\n if (isFunction(context)) {\n context = context.call(this);\n }\n\n let fn = options.fn;\n\n if (!isEmpty(context)) {\n let data = options.data;\n if (options.data && options.ids) {\n data = createFrame(options.data);\n data.contextPath = appendContextPath(\n options.data.contextPath,\n options.ids[0]\n );\n }\n\n return fn(context, {\n data: data,\n blockParams: blockParams([context], [data && data.contextPath])\n });\n } else {\n return options.inverse(this);\n }\n });\n}\n", "import registerBlockHelperMissing from './helpers/block-helper-missing';\nimport registerEach from './helpers/each';\nimport registerHelperMissing from './helpers/helper-missing';\nimport registerIf from './helpers/if';\nimport registerLog from './helpers/log';\nimport registerLookup from './helpers/lookup';\nimport registerWith from './helpers/with';\n\nexport function registerDefaultHelpers(instance) {\n registerBlockHelperMissing(instance);\n registerEach(instance);\n registerHelperMissing(instance);\n registerIf(instance);\n registerLog(instance);\n registerLookup(instance);\n registerWith(instance);\n}\n\nexport function moveHelperToHooks(instance, helperName, keepHelper) {\n if (instance.helpers[helperName]) {\n instance.hooks[helperName] = instance.helpers[helperName];\n if (!keepHelper) {\n delete instance.helpers[helperName];\n }\n }\n}\n", "import { extend } from '../utils';\n\nexport default function(instance) {\n instance.registerDecorator('inline', function(fn, props, container, options) {\n let ret = fn;\n if (!props.partials) {\n props.partials = {};\n ret = function(context, options) {\n // Create a new partials stack frame prior to exec.\n let original = container.partials;\n container.partials = extend({}, original, props.partials);\n let ret = fn(context, options);\n container.partials = original;\n return ret;\n };\n }\n\n props.partials[options.args[0]] = options.fn;\n\n return ret;\n });\n}\n", "import registerInline from './decorators/inline';\n\nexport function registerDefaultDecorators(instance) {\n registerInline(instance);\n}\n", "import { indexOf } from './utils';\n\nlet logger = {\n methodMap: ['debug', 'info', 'warn', 'error'],\n level: 'info',\n\n // Maps a given level value to the `methodMap` indexes above.\n lookupLevel: function(level) {\n if (typeof level === 'string') {\n let levelMap = indexOf(logger.methodMap, level.toLowerCase());\n if (levelMap >= 0) {\n level = levelMap;\n } else {\n level = parseInt(level, 10);\n }\n }\n\n return level;\n },\n\n // Can be overridden in the host environment\n log: function(level, ...message) {\n level = logger.lookupLevel(level);\n\n if (\n typeof console !== 'undefined' &&\n logger.lookupLevel(logger.level) <= level\n ) {\n let method = logger.methodMap[level];\n // eslint-disable-next-line no-console\n if (!console[method]) {\n method = 'log';\n }\n console[method](...message); // eslint-disable-line no-console\n }\n }\n};\n\nexport default logger;\n", "import { extend } from '../utils';\n\n/**\n * Create a new object with \"null\"-prototype to avoid truthy results on prototype properties.\n * The resulting object can be used with \"object[property]\" to check if a property exists\n * @param {...object} sources a varargs parameter of source objects that will be merged\n * @returns {object}\n */\nexport function createNewLookupObject(...sources) {\n return extend(Object.create(null), ...sources);\n}\n", "import { createNewLookupObject } from './create-new-lookup-object';\nimport * as logger from '../logger';\n\nconst loggedProperties = Object.create(null);\n\nexport function createProtoAccessControl(runtimeOptions) {\n let defaultMethodWhiteList = Object.create(null);\n defaultMethodWhiteList['constructor'] = false;\n defaultMethodWhiteList['__defineGetter__'] = false;\n defaultMethodWhiteList['__defineSetter__'] = false;\n defaultMethodWhiteList['__lookupGetter__'] = false;\n\n let defaultPropertyWhiteList = Object.create(null);\n // eslint-disable-next-line no-proto\n defaultPropertyWhiteList['__proto__'] = false;\n\n return {\n properties: {\n whitelist: createNewLookupObject(\n defaultPropertyWhiteList,\n runtimeOptions.allowedProtoProperties\n ),\n defaultValue: runtimeOptions.allowProtoPropertiesByDefault\n },\n methods: {\n whitelist: createNewLookupObject(\n defaultMethodWhiteList,\n runtimeOptions.allowedProtoMethods\n ),\n defaultValue: runtimeOptions.allowProtoMethodsByDefault\n }\n };\n}\n\nexport function resultIsAllowed(result, protoAccessControl, propertyName) {\n if (typeof result === 'function') {\n return checkWhiteList(protoAccessControl.methods, propertyName);\n } else {\n return checkWhiteList(protoAccessControl.properties, propertyName);\n }\n}\n\nfunction checkWhiteList(protoAccessControlForType, propertyName) {\n if (protoAccessControlForType.whitelist[propertyName] !== undefined) {\n return protoAccessControlForType.whitelist[propertyName] === true;\n }\n if (protoAccessControlForType.defaultValue !== undefined) {\n return protoAccessControlForType.defaultValue;\n }\n logUnexpecedPropertyAccessOnce(propertyName);\n return false;\n}\n\nfunction logUnexpecedPropertyAccessOnce(propertyName) {\n if (loggedProperties[propertyName] !== true) {\n loggedProperties[propertyName] = true;\n logger.log(\n 'error',\n `Handlebars: Access has been denied to resolve the property \"${propertyName}\" because it is not an \"own property\" of its parent.\\n` +\n `You can add a runtime option to disable the check or this warning:\\n` +\n `See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details`\n );\n }\n}\n\nexport function resetLoggedProperties() {\n Object.keys(loggedProperties).forEach(propertyName => {\n delete loggedProperties[propertyName];\n });\n}\n", "import { createFrame, extend, toString } from './utils';\nimport Exception from './exception';\nimport { registerDefaultHelpers } from './helpers';\nimport { registerDefaultDecorators } from './decorators';\nimport logger from './logger';\nimport { resetLoggedProperties } from './internal/proto-access';\n\nexport const VERSION = '4.7.7';\nexport const COMPILER_REVISION = 8;\nexport const LAST_COMPATIBLE_COMPILER_REVISION = 7;\n\nexport const REVISION_CHANGES = {\n 1: '<= 1.0.rc.2', // 1.0.rc.2 is actually rev2 but doesn't report it\n 2: '== 1.0.0-rc.3',\n 3: '== 1.0.0-rc.4',\n 4: '== 1.x.x',\n 5: '== 2.0.0-alpha.x',\n 6: '>= 2.0.0-beta.1',\n 7: '>= 4.0.0 <4.3.0',\n 8: '>= 4.3.0'\n};\n\nconst objectType = '[object Object]';\n\nexport function HandlebarsEnvironment(helpers, partials, decorators) {\n this.helpers = helpers || {};\n this.partials = partials || {};\n this.decorators = decorators || {};\n\n registerDefaultHelpers(this);\n registerDefaultDecorators(this);\n}\n\nHandlebarsEnvironment.prototype = {\n constructor: HandlebarsEnvironment,\n\n logger: logger,\n log: logger.log,\n\n registerHelper: function(name, fn) {\n if (toString.call(name) === objectType) {\n if (fn) {\n throw new Exception('Arg not supported with multiple helpers');\n }\n extend(this.helpers, name);\n } else {\n this.helpers[name] = fn;\n }\n },\n unregisterHelper: function(name) {\n delete this.helpers[name];\n },\n\n registerPartial: function(name, partial) {\n if (toString.call(name) === objectType) {\n extend(this.partials, name);\n } else {\n if (typeof partial === 'undefined') {\n throw new Exception(\n `Attempting to register a partial called \"${name}\" as undefined`\n );\n }\n this.partials[name] = partial;\n }\n },\n unregisterPartial: function(name) {\n delete this.partials[name];\n },\n\n registerDecorator: function(name, fn) {\n if (toString.call(name) === objectType) {\n if (fn) {\n throw new Exception('Arg not supported with multiple decorators');\n }\n extend(this.decorators, name);\n } else {\n this.decorators[name] = fn;\n }\n },\n unregisterDecorator: function(name) {\n delete this.decorators[name];\n },\n /**\n * Reset the memory of illegal property accesses that have already been logged.\n * @deprecated should only be used in handlebars test-cases\n */\n resetLoggedPropertyAccesses() {\n resetLoggedProperties();\n }\n};\n\nexport let log = logger.log;\n\nexport { createFrame, logger };\n", "// Build out our basic SafeString type\nfunction SafeString(string) {\n this.string = string;\n}\n\nSafeString.prototype.toString = SafeString.prototype.toHTML = function() {\n return '' + this.string;\n};\n\nexport default SafeString;\n", "export function wrapHelper(helper, transformOptionsFn) {\n if (typeof helper !== 'function') {\n // This should not happen, but apparently it does in https://github.com/wycats/handlebars.js/issues/1639\n // We try to make the wrapper least-invasive by not wrapping it, if the helper is not a function.\n return helper;\n }\n let wrapper = function(/* dynamic arguments */) {\n const options = arguments[arguments.length - 1];\n arguments[arguments.length - 1] = transformOptionsFn(options);\n return helper.apply(this, arguments);\n };\n return wrapper;\n}\n", "import * as Utils from './utils';\nimport Exception from './exception';\nimport {\n COMPILER_REVISION,\n createFrame,\n LAST_COMPATIBLE_COMPILER_REVISION,\n REVISION_CHANGES\n} from './base';\nimport { moveHelperToHooks } from './helpers';\nimport { wrapHelper } from './internal/wrapHelper';\nimport {\n createProtoAccessControl,\n resultIsAllowed\n} from './internal/proto-access';\n\nexport function checkRevision(compilerInfo) {\n const compilerRevision = (compilerInfo && compilerInfo[0]) || 1,\n currentRevision = COMPILER_REVISION;\n\n if (\n compilerRevision >= LAST_COMPATIBLE_COMPILER_REVISION &&\n compilerRevision <= COMPILER_REVISION\n ) {\n return;\n }\n\n if (compilerRevision < LAST_COMPATIBLE_COMPILER_REVISION) {\n const runtimeVersions = REVISION_CHANGES[currentRevision],\n compilerVersions = REVISION_CHANGES[compilerRevision];\n throw new Exception(\n 'Template was precompiled with an older version of Handlebars than the current runtime. ' +\n 'Please update your precompiler to a newer version (' +\n runtimeVersions +\n ') or downgrade your runtime to an older version (' +\n compilerVersions +\n ').'\n );\n } else {\n // Use the embedded version info since the runtime doesn't know about this revision yet\n throw new Exception(\n 'Template was precompiled with a newer version of Handlebars than the current runtime. ' +\n 'Please update your runtime to a newer version (' +\n compilerInfo[1] +\n ').'\n );\n }\n}\n\nexport function template(templateSpec, env) {\n /* istanbul ignore next */\n if (!env) {\n throw new Exception('No environment passed to template');\n }\n if (!templateSpec || !templateSpec.main) {\n throw new Exception('Unknown template object: ' + typeof templateSpec);\n }\n\n templateSpec.main.decorator = templateSpec.main_d;\n\n // Note: Using env.VM references rather than local var references throughout this section to allow\n // for external users to override these as pseudo-supported APIs.\n env.VM.checkRevision(templateSpec.compiler);\n\n // backwards compatibility for precompiled templates with compiler-version 7 (<4.3.0)\n const templateWasPrecompiledWithCompilerV7 =\n templateSpec.compiler && templateSpec.compiler[0] === 7;\n\n function invokePartialWrapper(partial, context, options) {\n if (options.hash) {\n context = Utils.extend({}, context, options.hash);\n if (options.ids) {\n options.ids[0] = true;\n }\n }\n partial = env.VM.resolvePartial.call(this, partial, context, options);\n\n let extendedOptions = Utils.extend({}, options, {\n hooks: this.hooks,\n protoAccessControl: this.protoAccessControl\n });\n\n let result = env.VM.invokePartial.call(\n this,\n partial,\n context,\n extendedOptions\n );\n\n if (result == null && env.compile) {\n options.partials[options.name] = env.compile(\n partial,\n templateSpec.compilerOptions,\n env\n );\n result = options.partials[options.name](context, extendedOptions);\n }\n if (result != null) {\n if (options.indent) {\n let lines = result.split('\\n');\n for (let i = 0, l = lines.length; i < l; i++) {\n if (!lines[i] && i + 1 === l) {\n break;\n }\n\n lines[i] = options.indent + lines[i];\n }\n result = lines.join('\\n');\n }\n return result;\n } else {\n throw new Exception(\n 'The partial ' +\n options.name +\n ' could not be compiled when running in runtime-only mode'\n );\n }\n }\n\n // Just add water\n let container = {\n strict: function(obj, name, loc) {\n if (!obj || !(name in obj)) {\n throw new Exception('\"' + name + '\" not defined in ' + obj, {\n loc: loc\n });\n }\n return container.lookupProperty(obj, name);\n },\n lookupProperty: function(parent, propertyName) {\n let result = parent[propertyName];\n if (result == null) {\n return result;\n }\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return result;\n }\n\n if (resultIsAllowed(result, container.protoAccessControl, propertyName)) {\n return result;\n }\n return undefined;\n },\n lookup: function(depths, name) {\n const len = depths.length;\n for (let i = 0; i < len; i++) {\n let result = depths[i] && container.lookupProperty(depths[i], name);\n if (result != null) {\n return depths[i][name];\n }\n }\n },\n lambda: function(current, context) {\n return typeof current === 'function' ? current.call(context) : current;\n },\n\n escapeExpression: Utils.escapeExpression,\n invokePartial: invokePartialWrapper,\n\n fn: function(i) {\n let ret = templateSpec[i];\n ret.decorator = templateSpec[i + '_d'];\n return ret;\n },\n\n programs: [],\n program: function(i, data, declaredBlockParams, blockParams, depths) {\n let programWrapper = this.programs[i],\n fn = this.fn(i);\n if (data || depths || blockParams || declaredBlockParams) {\n programWrapper = wrapProgram(\n this,\n i,\n fn,\n data,\n declaredBlockParams,\n blockParams,\n depths\n );\n } else if (!programWrapper) {\n programWrapper = this.programs[i] = wrapProgram(this, i, fn);\n }\n return programWrapper;\n },\n\n data: function(value, depth) {\n while (value && depth--) {\n value = value._parent;\n }\n return value;\n },\n mergeIfNeeded: function(param, common) {\n let obj = param || common;\n\n if (param && common && param !== common) {\n obj = Utils.extend({}, common, param);\n }\n\n return obj;\n },\n // An empty object to use as replacement for null-contexts\n nullContext: Object.seal({}),\n\n noop: env.VM.noop,\n compilerInfo: templateSpec.compiler\n };\n\n function ret(context, options = {}) {\n let data = options.data;\n\n ret._setup(options);\n if (!options.partial && templateSpec.useData) {\n data = initData(context, data);\n }\n let depths,\n blockParams = templateSpec.useBlockParams ? [] : undefined;\n if (templateSpec.useDepths) {\n if (options.depths) {\n depths =\n context != options.depths[0]\n ? [context].concat(options.depths)\n : options.depths;\n } else {\n depths = [context];\n }\n }\n\n function main(context /*, options*/) {\n return (\n '' +\n templateSpec.main(\n container,\n context,\n container.helpers,\n container.partials,\n data,\n blockParams,\n depths\n )\n );\n }\n\n main = executeDecorators(\n templateSpec.main,\n main,\n container,\n options.depths || [],\n data,\n blockParams\n );\n return main(context, options);\n }\n\n ret.isTop = true;\n\n ret._setup = function(options) {\n if (!options.partial) {\n let mergedHelpers = Utils.extend({}, env.helpers, options.helpers);\n wrapHelpersToPassLookupProperty(mergedHelpers, container);\n container.helpers = mergedHelpers;\n\n if (templateSpec.usePartial) {\n // Use mergeIfNeeded here to prevent compiling global partials multiple times\n container.partials = container.mergeIfNeeded(\n options.partials,\n env.partials\n );\n }\n if (templateSpec.usePartial || templateSpec.useDecorators) {\n container.decorators = Utils.extend(\n {},\n env.decorators,\n options.decorators\n );\n }\n\n container.hooks = {};\n container.protoAccessControl = createProtoAccessControl(options);\n\n let keepHelperInHelpers =\n options.allowCallsToHelperMissing ||\n templateWasPrecompiledWithCompilerV7;\n moveHelperToHooks(container, 'helperMissing', keepHelperInHelpers);\n moveHelperToHooks(container, 'blockHelperMissing', keepHelperInHelpers);\n } else {\n container.protoAccessControl = options.protoAccessControl; // internal option\n container.helpers = options.helpers;\n container.partials = options.partials;\n container.decorators = options.decorators;\n container.hooks = options.hooks;\n }\n };\n\n ret._child = function(i, data, blockParams, depths) {\n if (templateSpec.useBlockParams && !blockParams) {\n throw new Exception('must pass block params');\n }\n if (templateSpec.useDepths && !depths) {\n throw new Exception('must pass parent depths');\n }\n\n return wrapProgram(\n container,\n i,\n templateSpec[i],\n data,\n 0,\n blockParams,\n depths\n );\n };\n return ret;\n}\n\nexport function wrapProgram(\n container,\n i,\n fn,\n data,\n declaredBlockParams,\n blockParams,\n depths\n) {\n function prog(context, options = {}) {\n let currentDepths = depths;\n if (\n depths &&\n context != depths[0] &&\n !(context === container.nullContext && depths[0] === null)\n ) {\n currentDepths = [context].concat(depths);\n }\n\n return fn(\n container,\n context,\n container.helpers,\n container.partials,\n options.data || data,\n blockParams && [options.blockParams].concat(blockParams),\n currentDepths\n );\n }\n\n prog = executeDecorators(fn, prog, container, depths, data, blockParams);\n\n prog.program = i;\n prog.depth = depths ? depths.length : 0;\n prog.blockParams = declaredBlockParams || 0;\n return prog;\n}\n\n/**\n * This is currently part of the official API, therefore implementation details should not be changed.\n */\nexport function resolvePartial(partial, context, options) {\n if (!partial) {\n if (options.name === '@partial-block') {\n partial = options.data['partial-block'];\n } else {\n partial = options.partials[options.name];\n }\n } else if (!partial.call && !options.name) {\n // This is a dynamic partial that returned a string\n options.name = partial;\n partial = options.partials[partial];\n }\n return partial;\n}\n\nexport function invokePartial(partial, context, options) {\n // Use the current closure context to save the partial-block if this partial\n const currentPartialBlock = options.data && options.data['partial-block'];\n options.partial = true;\n if (options.ids) {\n options.data.contextPath = options.ids[0] || options.data.contextPath;\n }\n\n let partialBlock;\n if (options.fn && options.fn !== noop) {\n options.data = createFrame(options.data);\n // Wrapper function to get access to currentPartialBlock from the closure\n let fn = options.fn;\n partialBlock = options.data['partial-block'] = function partialBlockWrapper(\n context,\n options = {}\n ) {\n // Restore the partial-block from the closure for the execution of the block\n // i.e. the part inside the block of the partial call.\n options.data = createFrame(options.data);\n options.data['partial-block'] = currentPartialBlock;\n return fn(context, options);\n };\n if (fn.partials) {\n options.partials = Utils.extend({}, options.partials, fn.partials);\n }\n }\n\n if (partial === undefined && partialBlock) {\n partial = partialBlock;\n }\n\n if (partial === undefined) {\n throw new Exception('The partial ' + options.name + ' could not be found');\n } else if (partial instanceof Function) {\n return partial(context, options);\n }\n}\n\nexport function noop() {\n return '';\n}\n\nfunction initData(context, data) {\n if (!data || !('root' in data)) {\n data = data ? createFrame(data) : {};\n data.root = context;\n }\n return data;\n}\n\nfunction executeDecorators(fn, prog, container, depths, data, blockParams) {\n if (fn.decorator) {\n let props = {};\n prog = fn.decorator(\n prog,\n props,\n container,\n depths && depths[0],\n data,\n blockParams,\n depths\n );\n Utils.extend(prog, props);\n }\n return prog;\n}\n\nfunction wrapHelpersToPassLookupProperty(mergedHelpers, container) {\n Object.keys(mergedHelpers).forEach(helperName => {\n let helper = mergedHelpers[helperName];\n mergedHelpers[helperName] = passLookupPropertyOption(helper, container);\n });\n}\n\nfunction passLookupPropertyOption(helper, container) {\n const lookupProperty = container.lookupProperty;\n return wrapHelper(helper, options => {\n return Utils.extend({ lookupProperty }, options);\n });\n}\n", "export default function(Handlebars) {\n /* istanbul ignore next */\n let root = typeof global !== 'undefined' ? global : window,\n $Handlebars = root.Handlebars;\n /* istanbul ignore next */\n Handlebars.noConflict = function() {\n if (root.Handlebars === Handlebars) {\n root.Handlebars = $Handlebars;\n }\n return Handlebars;\n };\n}\n", "import * as base from './handlebars/base';\n\n// Each of these augment the Handlebars object. No need to setup here.\n// (This is done to easily share code between commonjs and browse envs)\nimport SafeString from './handlebars/safe-string';\nimport Exception from './handlebars/exception';\nimport * as Utils from './handlebars/utils';\nimport * as runtime from './handlebars/runtime';\n\nimport noConflict from './handlebars/no-conflict';\n\n// For compatibility and usage outside of module systems, make the Handlebars object a namespace\nfunction create() {\n let hb = new base.HandlebarsEnvironment();\n\n Utils.extend(hb, base);\n hb.SafeString = SafeString;\n hb.Exception = Exception;\n hb.Utils = Utils;\n hb.escapeExpression = Utils.escapeExpression;\n\n hb.VM = runtime;\n hb.template = function(spec) {\n return runtime.template(spec, hb);\n };\n\n return hb;\n}\n\nlet inst = create();\ninst.create = create;\n\nnoConflict(inst);\n\ninst['default'] = inst;\n\nexport default inst;\n", "let AST = {\n // Public API used to evaluate derived attributes regarding AST nodes\n helpers: {\n // a mustache is definitely a helper if:\n // * it is an eligible helper, and\n // * it has at least one parameter or hash segment\n helperExpression: function(node) {\n return (\n node.type === 'SubExpression' ||\n ((node.type === 'MustacheStatement' ||\n node.type === 'BlockStatement') &&\n !!((node.params && node.params.length) || node.hash))\n );\n },\n\n scopedId: function(path) {\n return /^\\.|this\\b/.test(path.original);\n },\n\n // an ID is simple if it only has one part, and that part is not\n // `..` or `this`.\n simpleId: function(path) {\n return (\n path.parts.length === 1 && !AST.helpers.scopedId(path) && !path.depth\n );\n }\n }\n};\n\n// Must be exported as an object rather than the root of the module as the jison lexer\n// must modify the object to operate properly.\nexport default AST;\n", "// File ignored in coverage tests via setting in .istanbul.yml\n/* Jison generated parser */\nvar handlebars = (function(){\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"root\":3,\"program\":4,\"EOF\":5,\"program_repetition0\":6,\"statement\":7,\"mustache\":8,\"block\":9,\"rawBlock\":10,\"partial\":11,\"partialBlock\":12,\"content\":13,\"COMMENT\":14,\"CONTENT\":15,\"openRawBlock\":16,\"rawBlock_repetition0\":17,\"END_RAW_BLOCK\":18,\"OPEN_RAW_BLOCK\":19,\"helperName\":20,\"openRawBlock_repetition0\":21,\"openRawBlock_option0\":22,\"CLOSE_RAW_BLOCK\":23,\"openBlock\":24,\"block_option0\":25,\"closeBlock\":26,\"openInverse\":27,\"block_option1\":28,\"OPEN_BLOCK\":29,\"openBlock_repetition0\":30,\"openBlock_option0\":31,\"openBlock_option1\":32,\"CLOSE\":33,\"OPEN_INVERSE\":34,\"openInverse_repetition0\":35,\"openInverse_option0\":36,\"openInverse_option1\":37,\"openInverseChain\":38,\"OPEN_INVERSE_CHAIN\":39,\"openInverseChain_repetition0\":40,\"openInverseChain_option0\":41,\"openInverseChain_option1\":42,\"inverseAndProgram\":43,\"INVERSE\":44,\"inverseChain\":45,\"inverseChain_option0\":46,\"OPEN_ENDBLOCK\":47,\"OPEN\":48,\"mustache_repetition0\":49,\"mustache_option0\":50,\"OPEN_UNESCAPED\":51,\"mustache_repetition1\":52,\"mustache_option1\":53,\"CLOSE_UNESCAPED\":54,\"OPEN_PARTIAL\":55,\"partialName\":56,\"partial_repetition0\":57,\"partial_option0\":58,\"openPartialBlock\":59,\"OPEN_PARTIAL_BLOCK\":60,\"openPartialBlock_repetition0\":61,\"openPartialBlock_option0\":62,\"param\":63,\"sexpr\":64,\"OPEN_SEXPR\":65,\"sexpr_repetition0\":66,\"sexpr_option0\":67,\"CLOSE_SEXPR\":68,\"hash\":69,\"hash_repetition_plus0\":70,\"hashSegment\":71,\"ID\":72,\"EQUALS\":73,\"blockParams\":74,\"OPEN_BLOCK_PARAMS\":75,\"blockParams_repetition_plus0\":76,\"CLOSE_BLOCK_PARAMS\":77,\"path\":78,\"dataName\":79,\"STRING\":80,\"NUMBER\":81,\"BOOLEAN\":82,\"UNDEFINED\":83,\"NULL\":84,\"DATA\":85,\"pathSegments\":86,\"SEP\":87,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",5:\"EOF\",14:\"COMMENT\",15:\"CONTENT\",18:\"END_RAW_BLOCK\",19:\"OPEN_RAW_BLOCK\",23:\"CLOSE_RAW_BLOCK\",29:\"OPEN_BLOCK\",33:\"CLOSE\",34:\"OPEN_INVERSE\",39:\"OPEN_INVERSE_CHAIN\",44:\"INVERSE\",47:\"OPEN_ENDBLOCK\",48:\"OPEN\",51:\"OPEN_UNESCAPED\",54:\"CLOSE_UNESCAPED\",55:\"OPEN_PARTIAL\",60:\"OPEN_PARTIAL_BLOCK\",65:\"OPEN_SEXPR\",68:\"CLOSE_SEXPR\",72:\"ID\",73:\"EQUALS\",75:\"OPEN_BLOCK_PARAMS\",77:\"CLOSE_BLOCK_PARAMS\",80:\"STRING\",81:\"NUMBER\",82:\"BOOLEAN\",83:\"UNDEFINED\",84:\"NULL\",85:\"DATA\",87:\"SEP\"},\nproductions_: [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],[63,1],[63,1],[64,5],[69,1],[71,3],[74,3],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[20,1],[56,1],[56,1],[79,2],[78,1],[86,3],[86,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],[49,0],[49,2],[50,0],[50,1],[52,0],[52,2],[53,0],[53,1],[57,0],[57,2],[58,0],[58,1],[61,0],[61,2],[62,0],[62,1],[66,0],[66,2],[67,0],[67,1],[70,1],[70,2],[76,1],[76,2]],\nperformAction: function anonymous(yytext,yyleng,yylineno,yy,yystate,$$,_$\n) {\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1: return $$[$0-1]; \nbreak;\ncase 2:this.$ = yy.prepareProgram($$[$0]);\nbreak;\ncase 3:this.$ = $$[$0];\nbreak;\ncase 4:this.$ = $$[$0];\nbreak;\ncase 5:this.$ = $$[$0];\nbreak;\ncase 6:this.$ = $$[$0];\nbreak;\ncase 7:this.$ = $$[$0];\nbreak;\ncase 8:this.$ = $$[$0];\nbreak;\ncase 9:\n this.$ = {\n type: 'CommentStatement',\n value: yy.stripComment($$[$0]),\n strip: yy.stripFlags($$[$0], $$[$0]),\n loc: yy.locInfo(this._$)\n };\n \nbreak;\ncase 10:\n this.$ = {\n type: 'ContentStatement',\n original: $$[$0],\n value: $$[$0],\n loc: yy.locInfo(this._$)\n };\n \nbreak;\ncase 11:this.$ = yy.prepareRawBlock($$[$0-2], $$[$0-1], $$[$0], this._$);\nbreak;\ncase 12:this.$ = { path: $$[$0-3], params: $$[$0-2], hash: $$[$0-1] };\nbreak;\ncase 13:this.$ = yy.prepareBlock($$[$0-3], $$[$0-2], $$[$0-1], $$[$0], false, this._$);\nbreak;\ncase 14:this.$ = yy.prepareBlock($$[$0-3], $$[$0-2], $$[$0-1], $$[$0], true, this._$);\nbreak;\ncase 15:this.$ = { open: $$[$0-5], path: $$[$0-4], params: $$[$0-3], hash: $$[$0-2], blockParams: $$[$0-1], strip: yy.stripFlags($$[$0-5], $$[$0]) };\nbreak;\ncase 16:this.$ = { path: $$[$0-4], params: $$[$0-3], hash: $$[$0-2], blockParams: $$[$0-1], strip: yy.stripFlags($$[$0-5], $$[$0]) };\nbreak;\ncase 17:this.$ = { path: $$[$0-4], params: $$[$0-3], hash: $$[$0-2], blockParams: $$[$0-1], strip: yy.stripFlags($$[$0-5], $$[$0]) };\nbreak;\ncase 18:this.$ = { strip: yy.stripFlags($$[$0-1], $$[$0-1]), program: $$[$0] };\nbreak;\ncase 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\n this.$ = { strip: $$[$0-2].strip, program: program, chain: true };\n \nbreak;\ncase 20:this.$ = $$[$0];\nbreak;\ncase 21:this.$ = {path: $$[$0-1], strip: yy.stripFlags($$[$0-2], $$[$0])};\nbreak;\ncase 22:this.$ = yy.prepareMustache($$[$0-3], $$[$0-2], $$[$0-1], $$[$0-4], yy.stripFlags($$[$0-4], $$[$0]), this._$);\nbreak;\ncase 23:this.$ = yy.prepareMustache($$[$0-3], $$[$0-2], $$[$0-1], $$[$0-4], yy.stripFlags($$[$0-4], $$[$0]), this._$);\nbreak;\ncase 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 \nbreak;\ncase 25:this.$ = yy.preparePartialBlock($$[$0-2], $$[$0-1], $$[$0], this._$);\nbreak;\ncase 26:this.$ = { path: $$[$0-3], params: $$[$0-2], hash: $$[$0-1], strip: yy.stripFlags($$[$0-4], $$[$0]) };\nbreak;\ncase 27:this.$ = $$[$0];\nbreak;\ncase 28:this.$ = $$[$0];\nbreak;\ncase 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 \nbreak;\ncase 30:this.$ = {type: 'Hash', pairs: $$[$0], loc: yy.locInfo(this._$)};\nbreak;\ncase 31:this.$ = {type: 'HashPair', key: yy.id($$[$0-2]), value: $$[$0], loc: yy.locInfo(this._$)};\nbreak;\ncase 32:this.$ = yy.id($$[$0-1]);\nbreak;\ncase 33:this.$ = $$[$0];\nbreak;\ncase 34:this.$ = $$[$0];\nbreak;\ncase 35:this.$ = {type: 'StringLiteral', value: $$[$0], original: $$[$0], loc: yy.locInfo(this._$)};\nbreak;\ncase 36:this.$ = {type: 'NumberLiteral', value: Number($$[$0]), original: Number($$[$0]), loc: yy.locInfo(this._$)};\nbreak;\ncase 37:this.$ = {type: 'BooleanLiteral', value: $$[$0] === 'true', original: $$[$0] === 'true', loc: yy.locInfo(this._$)};\nbreak;\ncase 38:this.$ = {type: 'UndefinedLiteral', original: undefined, value: undefined, loc: yy.locInfo(this._$)};\nbreak;\ncase 39:this.$ = {type: 'NullLiteral', original: null, value: null, loc: yy.locInfo(this._$)};\nbreak;\ncase 40:this.$ = $$[$0];\nbreak;\ncase 41:this.$ = $$[$0];\nbreak;\ncase 42:this.$ = yy.preparePath(true, $$[$0], this._$);\nbreak;\ncase 43:this.$ = yy.preparePath(false, $$[$0], this._$);\nbreak;\ncase 44: $$[$0-2].push({part: yy.id($$[$0]), original: $$[$0], separator: $$[$0-1]}); this.$ = $$[$0-2]; \nbreak;\ncase 45:this.$ = [{part: yy.id($$[$0]), original: $$[$0]}];\nbreak;\ncase 46:this.$ = [];\nbreak;\ncase 47:$$[$0-1].push($$[$0]);\nbreak;\ncase 48:this.$ = [];\nbreak;\ncase 49:$$[$0-1].push($$[$0]);\nbreak;\ncase 50:this.$ = [];\nbreak;\ncase 51:$$[$0-1].push($$[$0]);\nbreak;\ncase 58:this.$ = [];\nbreak;\ncase 59:$$[$0-1].push($$[$0]);\nbreak;\ncase 64:this.$ = [];\nbreak;\ncase 65:$$[$0-1].push($$[$0]);\nbreak;\ncase 70:this.$ = [];\nbreak;\ncase 71:$$[$0-1].push($$[$0]);\nbreak;\ncase 78:this.$ = [];\nbreak;\ncase 79:$$[$0-1].push($$[$0]);\nbreak;\ncase 82:this.$ = [];\nbreak;\ncase 83:$$[$0-1].push($$[$0]);\nbreak;\ncase 86:this.$ = [];\nbreak;\ncase 87:$$[$0-1].push($$[$0]);\nbreak;\ncase 90:this.$ = [];\nbreak;\ncase 91:$$[$0-1].push($$[$0]);\nbreak;\ncase 94:this.$ = [];\nbreak;\ncase 95:$$[$0-1].push($$[$0]);\nbreak;\ncase 98:this.$ = [$$[$0]];\nbreak;\ncase 99:$$[$0-1].push($$[$0]);\nbreak;\ncase 100:this.$ = [$$[$0]];\nbreak;\ncase 101:$$[$0-1].push($$[$0]);\nbreak;\n}\n},\ntable: [{3:1,4:2,5:[2,46],6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{1:[3]},{5:[1,4]},{5:[2,2],7:5,8:6,9:7,10:8,11:9,12:10,13:11,14:[1,12],15:[1,20],16:17,19:[1,23],24:15,27:16,29:[1,21],34:[1,22],39:[2,2],44:[2,2],47:[2,2],48:[1,13],51:[1,14],55:[1,18],59:19,60:[1,24]},{1:[2,1]},{5:[2,47],14:[2,47],15:[2,47],19:[2,47],29:[2,47],34:[2,47],39:[2,47],44:[2,47],47:[2,47],48:[2,47],51:[2,47],55:[2,47],60:[2,47]},{5:[2,3],14:[2,3],15:[2,3],19:[2,3],29:[2,3],34:[2,3],39:[2,3],44:[2,3],47:[2,3],48:[2,3],51:[2,3],55:[2,3],60:[2,3]},{5:[2,4],14:[2,4],15:[2,4],19:[2,4],29:[2,4],34:[2,4],39:[2,4],44:[2,4],47:[2,4],48:[2,4],51:[2,4],55:[2,4],60:[2,4]},{5:[2,5],14:[2,5],15:[2,5],19:[2,5],29:[2,5],34:[2,5],39:[2,5],44:[2,5],47:[2,5],48:[2,5],51:[2,5],55:[2,5],60:[2,5]},{5:[2,6],14:[2,6],15:[2,6],19:[2,6],29:[2,6],34:[2,6],39:[2,6],44:[2,6],47:[2,6],48:[2,6],51:[2,6],55:[2,6],60:[2,6]},{5:[2,7],14:[2,7],15:[2,7],19:[2,7],29:[2,7],34:[2,7],39:[2,7],44:[2,7],47:[2,7],48:[2,7],51:[2,7],55:[2,7],60:[2,7]},{5:[2,8],14:[2,8],15:[2,8],19:[2,8],29:[2,8],34:[2,8],39:[2,8],44:[2,8],47:[2,8],48:[2,8],51:[2,8],55:[2,8],60:[2,8]},{5:[2,9],14:[2,9],15:[2,9],19:[2,9],29:[2,9],34:[2,9],39:[2,9],44:[2,9],47:[2,9],48:[2,9],51:[2,9],55:[2,9],60:[2,9]},{20:25,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:36,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:37,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{4:38,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{15:[2,48],17:39,18:[2,48]},{20:41,56:40,64:42,65:[1,43],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:44,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{5:[2,10],14:[2,10],15:[2,10],18:[2,10],19:[2,10],29:[2,10],34:[2,10],39:[2,10],44:[2,10],47:[2,10],48:[2,10],51:[2,10],55:[2,10],60:[2,10]},{20:45,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:46,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:47,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:41,56:48,64:42,65:[1,43],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[2,78],49:49,65:[2,78],72:[2,78],80:[2,78],81:[2,78],82:[2,78],83:[2,78],84:[2,78],85:[2,78]},{23:[2,33],33:[2,33],54:[2,33],65:[2,33],68:[2,33],72:[2,33],75:[2,33],80:[2,33],81:[2,33],82:[2,33],83:[2,33],84:[2,33],85:[2,33]},{23:[2,34],33:[2,34],54:[2,34],65:[2,34],68:[2,34],72:[2,34],75:[2,34],80:[2,34],81:[2,34],82:[2,34],83:[2,34],84:[2,34],85:[2,34]},{23:[2,35],33:[2,35],54:[2,35],65:[2,35],68:[2,35],72:[2,35],75:[2,35],80:[2,35],81:[2,35],82:[2,35],83:[2,35],84:[2,35],85:[2,35]},{23:[2,36],33:[2,36],54:[2,36],65:[2,36],68:[2,36],72:[2,36],75:[2,36],80:[2,36],81:[2,36],82:[2,36],83:[2,36],84:[2,36],85:[2,36]},{23:[2,37],33:[2,37],54:[2,37],65:[2,37],68:[2,37],72:[2,37],75:[2,37],80:[2,37],81:[2,37],82:[2,37],83:[2,37],84:[2,37],85:[2,37]},{23:[2,38],33:[2,38],54:[2,38],65:[2,38],68:[2,38],72:[2,38],75:[2,38],80:[2,38],81:[2,38],82:[2,38],83:[2,38],84:[2,38],85:[2,38]},{23:[2,39],33:[2,39],54:[2,39],65:[2,39],68:[2,39],72:[2,39],75:[2,39],80:[2,39],81:[2,39],82:[2,39],83:[2,39],84:[2,39],85:[2,39]},{23:[2,43],33:[2,43],54:[2,43],65:[2,43],68:[2,43],72:[2,43],75:[2,43],80:[2,43],81:[2,43],82:[2,43],83:[2,43],84:[2,43],85:[2,43],87:[1,50]},{72:[1,35],86:51},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{52:52,54:[2,82],65:[2,82],72:[2,82],80:[2,82],81:[2,82],82:[2,82],83:[2,82],84:[2,82],85:[2,82]},{25:53,38:55,39:[1,57],43:56,44:[1,58],45:54,47:[2,54]},{28:59,43:60,44:[1,58],47:[2,56]},{13:62,15:[1,20],18:[1,61]},{33:[2,86],57:63,65:[2,86],72:[2,86],80:[2,86],81:[2,86],82:[2,86],83:[2,86],84:[2,86],85:[2,86]},{33:[2,40],65:[2,40],72:[2,40],80:[2,40],81:[2,40],82:[2,40],83:[2,40],84:[2,40],85:[2,40]},{33:[2,41],65:[2,41],72:[2,41],80:[2,41],81:[2,41],82:[2,41],83:[2,41],84:[2,41],85:[2,41]},{20:64,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:65,47:[1,66]},{30:67,33:[2,58],65:[2,58],72:[2,58],75:[2,58],80:[2,58],81:[2,58],82:[2,58],83:[2,58],84:[2,58],85:[2,58]},{33:[2,64],35:68,65:[2,64],72:[2,64],75:[2,64],80:[2,64],81:[2,64],82:[2,64],83:[2,64],84:[2,64],85:[2,64]},{21:69,23:[2,50],65:[2,50],72:[2,50],80:[2,50],81:[2,50],82:[2,50],83:[2,50],84:[2,50],85:[2,50]},{33:[2,90],61:70,65:[2,90],72:[2,90],80:[2,90],81:[2,90],82:[2,90],83:[2,90],84:[2,90],85:[2,90]},{20:74,33:[2,80],50:71,63:72,64:75,65:[1,43],69:73,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{72:[1,79]},{23:[2,42],33:[2,42],54:[2,42],65:[2,42],68:[2,42],72:[2,42],75:[2,42],80:[2,42],81:[2,42],82:[2,42],83:[2,42],84:[2,42],85:[2,42],87:[1,50]},{20:74,53:80,54:[2,84],63:81,64:75,65:[1,43],69:82,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{26:83,47:[1,66]},{47:[2,55]},{4:84,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],39:[2,46],44:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{47:[2,20]},{20:85,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{4:86,6:3,14:[2,46],15:[2,46],19:[2,46],29:[2,46],34:[2,46],47:[2,46],48:[2,46],51:[2,46],55:[2,46],60:[2,46]},{26:87,47:[1,66]},{47:[2,57]},{5:[2,11],14:[2,11],15:[2,11],19:[2,11],29:[2,11],34:[2,11],39:[2,11],44:[2,11],47:[2,11],48:[2,11],51:[2,11],55:[2,11],60:[2,11]},{15:[2,49],18:[2,49]},{20:74,33:[2,88],58:88,63:89,64:75,65:[1,43],69:90,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{65:[2,94],66:91,68:[2,94],72:[2,94],80:[2,94],81:[2,94],82:[2,94],83:[2,94],84:[2,94],85:[2,94]},{5:[2,25],14:[2,25],15:[2,25],19:[2,25],29:[2,25],34:[2,25],39:[2,25],44:[2,25],47:[2,25],48:[2,25],51:[2,25],55:[2,25],60:[2,25]},{20:92,72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:74,31:93,33:[2,60],63:94,64:75,65:[1,43],69:95,70:76,71:77,72:[1,78],75:[2,60],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:74,33:[2,66],36:96,63:97,64:75,65:[1,43],69:98,70:76,71:77,72:[1,78],75:[2,66],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:74,22:99,23:[2,52],63:100,64:75,65:[1,43],69:101,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{20:74,33:[2,92],62:102,63:103,64:75,65:[1,43],69:104,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,105]},{33:[2,79],65:[2,79],72:[2,79],80:[2,79],81:[2,79],82:[2,79],83:[2,79],84:[2,79],85:[2,79]},{33:[2,81]},{23:[2,27],33:[2,27],54:[2,27],65:[2,27],68:[2,27],72:[2,27],75:[2,27],80:[2,27],81:[2,27],82:[2,27],83:[2,27],84:[2,27],85:[2,27]},{23:[2,28],33:[2,28],54:[2,28],65:[2,28],68:[2,28],72:[2,28],75:[2,28],80:[2,28],81:[2,28],82:[2,28],83:[2,28],84:[2,28],85:[2,28]},{23:[2,30],33:[2,30],54:[2,30],68:[2,30],71:106,72:[1,107],75:[2,30]},{23:[2,98],33:[2,98],54:[2,98],68:[2,98],72:[2,98],75:[2,98]},{23:[2,45],33:[2,45],54:[2,45],65:[2,45],68:[2,45],72:[2,45],73:[1,108],75:[2,45],80:[2,45],81:[2,45],82:[2,45],83:[2,45],84:[2,45],85:[2,45],87:[2,45]},{23:[2,44],33:[2,44],54:[2,44],65:[2,44],68:[2,44],72:[2,44],75:[2,44],80:[2,44],81:[2,44],82:[2,44],83:[2,44],84:[2,44],85:[2,44],87:[2,44]},{54:[1,109]},{54:[2,83],65:[2,83],72:[2,83],80:[2,83],81:[2,83],82:[2,83],83:[2,83],84:[2,83],85:[2,83]},{54:[2,85]},{5:[2,13],14:[2,13],15:[2,13],19:[2,13],29:[2,13],34:[2,13],39:[2,13],44:[2,13],47:[2,13],48:[2,13],51:[2,13],55:[2,13],60:[2,13]},{38:55,39:[1,57],43:56,44:[1,58],45:111,46:110,47:[2,76]},{33:[2,70],40:112,65:[2,70],72:[2,70],75:[2,70],80:[2,70],81:[2,70],82:[2,70],83:[2,70],84:[2,70],85:[2,70]},{47:[2,18]},{5:[2,14],14:[2,14],15:[2,14],19:[2,14],29:[2,14],34:[2,14],39:[2,14],44:[2,14],47:[2,14],48:[2,14],51:[2,14],55:[2,14],60:[2,14]},{33:[1,113]},{33:[2,87],65:[2,87],72:[2,87],80:[2,87],81:[2,87],82:[2,87],83:[2,87],84:[2,87],85:[2,87]},{33:[2,89]},{20:74,63:115,64:75,65:[1,43],67:114,68:[2,96],69:116,70:76,71:77,72:[1,78],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{33:[1,117]},{32:118,33:[2,62],74:119,75:[1,120]},{33:[2,59],65:[2,59],72:[2,59],75:[2,59],80:[2,59],81:[2,59],82:[2,59],83:[2,59],84:[2,59],85:[2,59]},{33:[2,61],75:[2,61]},{33:[2,68],37:121,74:122,75:[1,120]},{33:[2,65],65:[2,65],72:[2,65],75:[2,65],80:[2,65],81:[2,65],82:[2,65],83:[2,65],84:[2,65],85:[2,65]},{33:[2,67],75:[2,67]},{23:[1,123]},{23:[2,51],65:[2,51],72:[2,51],80:[2,51],81:[2,51],82:[2,51],83:[2,51],84:[2,51],85:[2,51]},{23:[2,53]},{33:[1,124]},{33:[2,91],65:[2,91],72:[2,91],80:[2,91],81:[2,91],82:[2,91],83:[2,91],84:[2,91],85:[2,91]},{33:[2,93]},{5:[2,22],14:[2,22],15:[2,22],19:[2,22],29:[2,22],34:[2,22],39:[2,22],44:[2,22],47:[2,22],48:[2,22],51:[2,22],55:[2,22],60:[2,22]},{23:[2,99],33:[2,99],54:[2,99],68:[2,99],72:[2,99],75:[2,99]},{73:[1,108]},{20:74,63:125,64:75,65:[1,43],72:[1,35],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,23],14:[2,23],15:[2,23],19:[2,23],29:[2,23],34:[2,23],39:[2,23],44:[2,23],47:[2,23],48:[2,23],51:[2,23],55:[2,23],60:[2,23]},{47:[2,19]},{47:[2,77]},{20:74,33:[2,72],41:126,63:127,64:75,65:[1,43],69:128,70:76,71:77,72:[1,78],75:[2,72],78:26,79:27,80:[1,28],81:[1,29],82:[1,30],83:[1,31],84:[1,32],85:[1,34],86:33},{5:[2,24],14:[2,24],15:[2,24],19:[2,24],29:[2,24],34:[2,24],39:[2,24],44:[2,24],47:[2,24],48:[2,24],51:[2,24],55:[2,24],60:[2,24]},{68:[1,129]},{65:[2,95],68:[2,95],72:[2,95],80:[2,95],81:[2,95],82:[2,95],83:[2,95],84:[2,95],85:[2,95]},{68:[2,97]},{5:[2,21],14:[2,21],15:[2,21],19:[2,21],29:[2,21],34:[2,21],39:[2,21],44:[2,21],47:[2,21],48:[2,21],51:[2,21],55:[2,21],60:[2,21]},{33:[1,130]},{33:[2,63]},{72:[1,132],76:131},{33:[1,133]},{33:[2,69]},{15:[2,12],18:[2,12]},{14:[2,26],15:[2,26],19:[2,26],29:[2,26],34:[2,26],47:[2,26],48:[2,26],51:[2,26],55:[2,26],60:[2,26]},{23:[2,31],33:[2,31],54:[2,31],68:[2,31],72:[2,31],75:[2,31]},{33:[2,74],42:134,74:135,75:[1,120]},{33:[2,71],65:[2,71],72:[2,71],75:[2,71],80:[2,71],81:[2,71],82:[2,71],83:[2,71],84:[2,71],85:[2,71]},{33:[2,73],75:[2,73]},{23:[2,29],33:[2,29],54:[2,29],65:[2,29],68:[2,29],72:[2,29],75:[2,29],80:[2,29],81:[2,29],82:[2,29],83:[2,29],84:[2,29],85:[2,29]},{14:[2,15],15:[2,15],19:[2,15],29:[2,15],34:[2,15],39:[2,15],44:[2,15],47:[2,15],48:[2,15],51:[2,15],55:[2,15],60:[2,15]},{72:[1,137],77:[1,136]},{72:[2,100],77:[2,100]},{14:[2,16],15:[2,16],19:[2,16],29:[2,16],34:[2,16],44:[2,16],47:[2,16],48:[2,16],51:[2,16],55:[2,16],60:[2,16]},{33:[1,138]},{33:[2,75]},{33:[2,32]},{72:[2,101],77:[2,101]},{14:[2,17],15:[2,17],19:[2,17],29:[2,17],34:[2,17],39:[2,17],44:[2,17],47:[2,17],48:[2,17],51:[2,17],55:[2,17],60:[2,17]}],\ndefaultActions: {4:[2,1],54:[2,55],56:[2,20],60:[2,57],73:[2,81],82:[2,85],86:[2,18],90:[2,89],101:[2,53],104:[2,93],110:[2,19],111:[2,77],116:[2,97],119:[2,63],122:[2,69],135:[2,75],136:[2,32]},\nparseError: function parseError (str, hash) {\n throw new Error(str);\n},\nparse: function parse(input) {\n var self = this, stack = [0], vstack = [null], lstack = [], table = this.table, yytext = \"\", yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n this.lexer.setInput(input);\n this.lexer.yy = this.yy;\n this.yy.lexer = this.lexer;\n this.yy.parser = this;\n if (typeof this.lexer.yylloc == \"undefined\")\n this.lexer.yylloc = {};\n var yyloc = this.lexer.yylloc;\n lstack.push(yyloc);\n var ranges = this.lexer.options && this.lexer.options.ranges;\n if (typeof this.yy.parseError === \"function\")\n this.parseError = this.yy.parseError;\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n function lex() {\n var token;\n token = self.lexer.lex() || 1;\n if (typeof token !== \"number\") {\n token = self.symbols_[token] || token;\n }\n return token;\n }\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, 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 if (!recovering) {\n expected = [];\n for (p in table[state])\n if (this.terminals_[p] && p > 2) {\n expected.push(\"'\" + this.terminals_[p] + \"'\");\n }\n if (this.lexer.showPosition) {\n errStr = \"Parse error on line \" + (yylineno + 1) + \":\\n\" + this.lexer.showPosition() + \"\\nExpecting \" + expected.join(\", \") + \", got '\" + (this.terminals_[symbol] || symbol) + \"'\";\n } else {\n errStr = \"Parse error on line \" + (yylineno + 1) + \": Unexpected \" + (symbol == 1?\"end of input\":\"'\" + (this.terminals_[symbol] || symbol) + \"'\");\n }\n this.parseError(errStr, {text: this.lexer.match, token: this.terminals_[symbol] || symbol, line: this.lexer.yylineno, loc: yyloc, 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(this.lexer.yytext);\n lstack.push(this.lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = this.lexer.yyleng;\n yytext = this.lexer.yytext;\n yylineno = this.lexer.yylineno;\n yyloc = this.lexer.yylloc;\n if (recovering > 0)\n recovering--;\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {first_line: lstack[lstack.length - (len || 1)].first_line, last_line: lstack[lstack.length - 1].last_line, first_column: lstack[lstack.length - (len || 1)].first_column, last_column: lstack[lstack.length - 1].last_column};\n if (ranges) {\n yyval._$.range = [lstack[lstack.length - (len || 1)].range[0], lstack[lstack.length - 1].range[1]];\n }\n r = this.performAction.call(yyval, yytext, yyleng, yylineno, this.yy, action[1], vstack, lstack);\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/* Jison generated lexer */\nvar lexer = (function(){\nvar lexer = ({EOF:1,\nparseError: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 },\nsetInput:function (input) {\n this._input = input;\n this._more = this._less = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {first_line:1,first_column:0,last_line:1,last_column:0};\n if (this.options.ranges) this.yylloc.range = [0,0];\n this.offset = 0;\n return this;\n },\ninput: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) this.yylloc.range[1]++;\n\n this._input = this._input.slice(1);\n return ch;\n },\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length-len-1);\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\n if (lines.length-1) this.yylineno -= lines.length-1;\n var r = this.yylloc.range;\n\n this.yylloc = {first_line: this.yylloc.first_line,\n last_line: this.yylineno+1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0) + oldLines[oldLines.length - lines.length].length - lines[0].length:\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n return this;\n },\nmore:function () {\n this._more = true;\n return this;\n },\nless:function (n) {\n this.unput(this.match.slice(n));\n },\npastInput: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 },\nupcomingInput: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 },\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c+\"^\";\n },\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) this.done = true;\n\n var token,\n match,\n tempMatch,\n index,\n col,\n lines;\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.flex) break;\n }\n }\n if (match) {\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) this.yylineno += lines.length;\n this.yylloc = {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 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._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, rules[index],this.conditionStack[this.conditionStack.length-1]);\n if (this.done && this._input) this.done = false;\n if (token) return token;\n else return;\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: \"\", token: null, line: this.yylineno});\n }\n },\nlex:function lex () {\n var r = this.next();\n if (typeof r !== 'undefined') {\n return r;\n } else {\n return this.lex();\n }\n },\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\npopState:function popState () {\n return this.conditionStack.pop();\n },\n_currentRules:function _currentRules () {\n return this.conditions[this.conditionStack[this.conditionStack.length-1]].rules;\n },\ntopState:function () {\n return this.conditionStack[this.conditionStack.length-2];\n },\npushState:function begin (condition) {\n this.begin(condition);\n }});\nlexer.options = {};\nlexer.performAction = function anonymous(yy,yy_,$avoiding_name_collisions,YY_START\n) {\n\n\nfunction strip(start, end) {\n return yy_.yytext = yy_.yytext.substring(start, yy_.yyleng - end + start);\n}\n\n\nvar YYSTATE=YY_START\nswitch($avoiding_name_collisions) {\ncase 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 \nbreak;\ncase 1:return 15;\nbreak;\ncase 2:\n this.popState();\n return 15;\n \nbreak;\ncase 3:this.begin('raw'); return 15;\nbreak;\ncase 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 'END_RAW_BLOCK';\n }\n \nbreak;\ncase 5: return 15; \nbreak;\ncase 6:\n this.popState();\n return 14;\n\nbreak;\ncase 7:return 65;\nbreak;\ncase 8:return 68;\nbreak;\ncase 9: return 19; \nbreak;\ncase 10:\n this.popState();\n this.begin('raw');\n return 23;\n \nbreak;\ncase 11:return 55;\nbreak;\ncase 12:return 60;\nbreak;\ncase 13:return 29;\nbreak;\ncase 14:return 47;\nbreak;\ncase 15:this.popState(); return 44;\nbreak;\ncase 16:this.popState(); return 44;\nbreak;\ncase 17:return 34;\nbreak;\ncase 18:return 39;\nbreak;\ncase 19:return 51;\nbreak;\ncase 20:return 48;\nbreak;\ncase 21:\n this.unput(yy_.yytext);\n this.popState();\n this.begin('com');\n\nbreak;\ncase 22:\n this.popState();\n return 14;\n\nbreak;\ncase 23:return 48;\nbreak;\ncase 24:return 73;\nbreak;\ncase 25:return 72;\nbreak;\ncase 26:return 72;\nbreak;\ncase 27:return 87;\nbreak;\ncase 28:// ignore whitespace\nbreak;\ncase 29:this.popState(); return 54;\nbreak;\ncase 30:this.popState(); return 33;\nbreak;\ncase 31:yy_.yytext = strip(1,2).replace(/\\\\\"/g,'\"'); return 80;\nbreak;\ncase 32:yy_.yytext = strip(1,2).replace(/\\\\'/g,\"'\"); return 80;\nbreak;\ncase 33:return 85;\nbreak;\ncase 34:return 82;\nbreak;\ncase 35:return 82;\nbreak;\ncase 36:return 83;\nbreak;\ncase 37:return 84;\nbreak;\ncase 38:return 81;\nbreak;\ncase 39:return 75;\nbreak;\ncase 40:return 77;\nbreak;\ncase 41:return 72;\nbreak;\ncase 42:yy_.yytext = yy_.yytext.replace(/\\\\([\\\\\\]])/g,'$1'); return 72;\nbreak;\ncase 43:return 'INVALID';\nbreak;\ncase 44:return 5;\nbreak;\n}\n};\nlexer.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\\/.)|]))))/,/^(?:\\[(\\\\\\]|[^\\]])*\\])/,/^(?:.)/,/^(?:$)/];\nlexer.conditions = {\"mu\":{\"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],\"inclusive\":false},\"emu\":{\"rules\":[2],\"inclusive\":false},\"com\":{\"rules\":[6],\"inclusive\":false},\"raw\":{\"rules\":[3,4,5],\"inclusive\":false},\"INITIAL\":{\"rules\":[0,1,44],\"inclusive\":true}};\nreturn lexer;})()\nparser.lexer = lexer;\nfunction Parser () { this.yy = {}; }Parser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();export default handlebars;\n", "import Exception from '../exception';\n\nfunction Visitor() {\n this.parents = [];\n}\n\nVisitor.prototype = {\n constructor: Visitor,\n mutating: false,\n\n // Visits a given value. If mutating, will replace the value if necessary.\n acceptKey: function(node, name) {\n let 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(\n 'Unexpected node type \"' +\n value.type +\n '\" found when accepting ' +\n name +\n ' on ' +\n node.type\n );\n }\n node[name] = value;\n }\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\n if (!node[name]) {\n throw new Exception(node.type + ' requires ' + name);\n }\n },\n\n // Traverses a given array. If mutating, empty respnses will be removed\n // for child elements.\n acceptArray: function(array) {\n for (let i = 0, l = array.length; i < l; i++) {\n this.acceptKey(array, i);\n\n if (!array[i]) {\n array.splice(i, 1);\n i--;\n l--;\n }\n }\n },\n\n accept: function(object) {\n if (!object) {\n return;\n }\n\n /* istanbul ignore next: Sanity code */\n if (!this[object.type]) {\n throw new Exception('Unknown type: ' + object.type, object);\n }\n\n if (this.current) {\n this.parents.unshift(this.current);\n }\n this.current = object;\n\n let ret = this[object.type](object);\n\n this.current = this.parents.shift();\n\n if (!this.mutating || ret) {\n return ret;\n } else if (ret !== false) {\n return object;\n }\n },\n\n Program: function(program) {\n this.acceptArray(program.body);\n },\n\n MustacheStatement: visitSubExpression,\n Decorator: visitSubExpression,\n\n BlockStatement: visitBlock,\n DecoratorBlock: visitBlock,\n\n PartialStatement: visitPartial,\n PartialBlockStatement: function(partial) {\n visitPartial.call(this, partial);\n\n this.acceptKey(partial, 'program');\n },\n\n ContentStatement: function(/* content */) {},\n CommentStatement: function(/* comment */) {},\n\n SubExpression: visitSubExpression,\n\n PathExpression: function(/* path */) {},\n\n StringLiteral: function(/* string */) {},\n NumberLiteral: function(/* number */) {},\n BooleanLiteral: function(/* bool */) {},\n UndefinedLiteral: function(/* literal */) {},\n NullLiteral: function(/* literal */) {},\n\n Hash: function(hash) {\n this.acceptArray(hash.pairs);\n },\n HashPair: function(pair) {\n this.acceptRequired(pair, 'value');\n }\n};\n\nfunction visitSubExpression(mustache) {\n this.acceptRequired(mustache, 'path');\n this.acceptArray(mustache.params);\n this.acceptKey(mustache, 'hash');\n}\nfunction visitBlock(block) {\n visitSubExpression.call(this, block);\n\n this.acceptKey(block, 'program');\n this.acceptKey(block, 'inverse');\n}\nfunction visitPartial(partial) {\n this.acceptRequired(partial, 'name');\n this.acceptArray(partial.params);\n this.acceptKey(partial, 'hash');\n}\n\nexport default Visitor;\n", "import Visitor from './visitor';\n\nfunction WhitespaceControl(options = {}) {\n this.options = options;\n}\nWhitespaceControl.prototype = new Visitor();\n\nWhitespaceControl.prototype.Program = function(program) {\n const doStandalone = !this.options.ignoreStandalone;\n\n let isRoot = !this.isRootSeen;\n this.isRootSeen = true;\n\n let body = program.body;\n for (let i = 0, l = body.length; i < l; i++) {\n let current = body[i],\n strip = this.accept(current);\n\n if (!strip) {\n continue;\n }\n\n let _isPrevWhitespace = isPrevWhitespace(body, i, isRoot),\n _isNextWhitespace = isNextWhitespace(body, i, isRoot),\n openStandalone = strip.openStandalone && _isPrevWhitespace,\n closeStandalone = strip.closeStandalone && _isNextWhitespace,\n inlineStandalone =\n strip.inlineStandalone && _isPrevWhitespace && _isNextWhitespace;\n\n if (strip.close) {\n omitRight(body, i, true);\n }\n if (strip.open) {\n omitLeft(body, i, true);\n }\n\n if (doStandalone && inlineStandalone) {\n omitRight(body, i);\n\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\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\n omitLeft((current.inverse || current.program).body);\n }\n }\n\n return program;\n};\n\nWhitespaceControl.prototype.BlockStatement = WhitespaceControl.prototype.DecoratorBlock = WhitespaceControl.prototype.PartialBlockStatement = function(\n block\n) {\n this.accept(block.program);\n this.accept(block.inverse);\n\n // Find the inverse program that is involed with whitespace stripping.\n let program = block.program || block.inverse,\n inverse = block.program && block.inverse,\n firstInverse = inverse,\n lastInverse = inverse;\n\n if (inverse && inverse.chained) {\n firstInverse = inverse.body[0].program;\n\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\n let strip = {\n open: block.openStrip.open,\n close: block.closeStrip.close,\n\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\n if (block.openStrip.close) {\n omitRight(program.body, null, true);\n }\n\n if (inverse) {\n let inverseStrip = block.inverseStrip;\n\n if (inverseStrip.open) {\n omitLeft(program.body, null, true);\n }\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\n // Find standalone else statments\n if (\n !this.options.ignoreStandalone &&\n isPrevWhitespace(program.body) &&\n isNextWhitespace(firstInverse.body)\n ) {\n omitLeft(program.body);\n omitRight(firstInverse.body);\n }\n } else if (block.closeStrip.open) {\n omitLeft(program.body, null, true);\n }\n\n return strip;\n};\n\nWhitespaceControl.prototype.Decorator = WhitespaceControl.prototype.MustacheStatement = function(\n mustache\n) {\n return mustache.strip;\n};\n\nWhitespaceControl.prototype.PartialStatement = WhitespaceControl.prototype.CommentStatement = function(\n node\n) {\n /* istanbul ignore next */\n let strip = node.strip || {};\n return {\n inlineStandalone: true,\n open: strip.open,\n close: strip.close\n };\n};\n\nfunction isPrevWhitespace(body, i, isRoot) {\n if (i === undefined) {\n i = body.length;\n }\n\n // Nodes that end with newlines are considered whitespace (but are special\n // cased for strip operations)\n let prev = body[i - 1],\n sibling = body[i - 2];\n if (!prev) {\n return isRoot;\n }\n\n if (prev.type === 'ContentStatement') {\n return (sibling || !isRoot ? /\\r?\\n\\s*?$/ : /(^|\\r?\\n)\\s*?$/).test(\n prev.original\n );\n }\n}\nfunction isNextWhitespace(body, i, isRoot) {\n if (i === undefined) {\n i = -1;\n }\n\n let next = body[i + 1],\n sibling = body[i + 2];\n if (!next) {\n return isRoot;\n }\n\n if (next.type === 'ContentStatement') {\n return (sibling || !isRoot ? /^\\s*?\\r?\\n/ : /^\\s*?(\\r?\\n|$)/).test(\n next.original\n );\n }\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 mulitple is truthy then all whitespace will be stripped out until non-whitespace\n// content is met.\nfunction omitRight(body, i, multiple) {\n let current = body[i == null ? 0 : i + 1];\n if (\n !current ||\n current.type !== 'ContentStatement' ||\n (!multiple && current.rightStripped)\n ) {\n return;\n }\n\n let original = current.value;\n current.value = current.value.replace(\n multiple ? /^\\s+/ : /^[ \\t]*\\r?\\n?/,\n ''\n );\n current.rightStripped = current.value !== original;\n}\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 mulitple is truthy then all whitespace will be stripped out until non-whitespace\n// content is met.\nfunction omitLeft(body, i, multiple) {\n let current = body[i == null ? body.length - 1 : i - 1];\n if (\n !current ||\n current.type !== 'ContentStatement' ||\n (!multiple && current.leftStripped)\n ) {\n return;\n }\n\n // We omit the last node if it's whitespace only and not preceded by a non-content node.\n let original = current.value;\n current.value = current.value.replace(multiple ? /\\s+$/ : /[ \\t]+$/, '');\n current.leftStripped = current.value !== original;\n return current.leftStripped;\n}\n\nexport default WhitespaceControl;\n", "import Exception from '../exception';\n\nfunction validateClose(open, close) {\n close = close.path ? close.path.original : close;\n\n if (open.path.original !== close) {\n let errorNode = { loc: open.path.loc };\n\n throw new Exception(\n open.path.original + \" doesn't match \" + close,\n errorNode\n );\n }\n}\n\nexport 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\nexport function id(token) {\n if (/^\\[.*\\]$/.test(token)) {\n return token.substring(1, token.length - 1);\n } else {\n return token;\n }\n}\n\nexport function stripFlags(open, close) {\n return {\n open: open.charAt(2) === '~',\n close: close.charAt(close.length - 3) === '~'\n };\n}\n\nexport function stripComment(comment) {\n return comment.replace(/^\\{\\{~?!-?-?/, '').replace(/-?-?~?\\}\\}$/, '');\n}\n\nexport function preparePath(data, parts, loc) {\n loc = this.locInfo(loc);\n\n let original = data ? '@' : '',\n dig = [],\n depth = 0;\n\n for (let i = 0, l = parts.length; i < l; i++) {\n let 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\n if (!isLiteral && (part === '..' || part === '.' || part === 'this')) {\n if (dig.length > 0) {\n throw new Exception('Invalid path: ' + original, { loc });\n } else if (part === '..') {\n depth++;\n }\n } else {\n dig.push(part);\n }\n }\n\n return {\n type: 'PathExpression',\n data,\n depth,\n parts: dig,\n original,\n loc\n };\n}\n\nexport function prepareMustache(path, params, hash, open, strip, locInfo) {\n // Must use charAt to support IE pre-10\n let escapeFlag = open.charAt(3) || open.charAt(2),\n escaped = escapeFlag !== '{' && escapeFlag !== '&';\n\n let decorator = /\\*/.test(open);\n return {\n type: decorator ? 'Decorator' : 'MustacheStatement',\n path,\n params,\n hash,\n escaped,\n strip,\n loc: this.locInfo(locInfo)\n };\n}\n\nexport function prepareRawBlock(openRawBlock, contents, close, locInfo) {\n validateClose(openRawBlock, close);\n\n locInfo = this.locInfo(locInfo);\n let program = {\n type: 'Program',\n body: contents,\n strip: {},\n loc: locInfo\n };\n\n return {\n type: 'BlockStatement',\n path: openRawBlock.path,\n params: openRawBlock.params,\n hash: openRawBlock.hash,\n program,\n openStrip: {},\n inverseStrip: {},\n closeStrip: {},\n loc: locInfo\n };\n}\n\nexport function prepareBlock(\n openBlock,\n program,\n inverseAndProgram,\n close,\n inverted,\n locInfo\n) {\n if (close && close.path) {\n validateClose(openBlock, close);\n }\n\n let decorator = /\\*/.test(openBlock.open);\n\n program.blockParams = openBlock.blockParams;\n\n let inverse, inverseStrip;\n\n if (inverseAndProgram) {\n if (decorator) {\n throw new Exception(\n 'Unexpected inverse block on decorator',\n inverseAndProgram\n );\n }\n\n if (inverseAndProgram.chain) {\n inverseAndProgram.program.body[0].closeStrip = close.strip;\n }\n\n inverseStrip = inverseAndProgram.strip;\n inverse = inverseAndProgram.program;\n }\n\n if (inverted) {\n inverted = inverse;\n inverse = program;\n program = inverted;\n }\n\n return {\n type: decorator ? 'DecoratorBlock' : 'BlockStatement',\n path: openBlock.path,\n params: openBlock.params,\n hash: openBlock.hash,\n program,\n inverse,\n openStrip: openBlock.strip,\n inverseStrip,\n closeStrip: close && close.strip,\n loc: this.locInfo(locInfo)\n };\n}\n\nexport function prepareProgram(statements, loc) {\n if (!loc && statements.length) {\n const firstLoc = statements[0].loc,\n lastLoc = statements[statements.length - 1].loc;\n\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\n return {\n type: 'Program',\n body: statements,\n strip: {},\n loc: loc\n };\n}\n\nexport function preparePartialBlock(open, program, close, locInfo) {\n validateClose(open, close);\n\n return {\n type: 'PartialBlockStatement',\n name: open.path,\n params: open.params,\n hash: open.hash,\n program,\n openStrip: open.strip,\n closeStrip: close && close.strip,\n loc: this.locInfo(locInfo)\n };\n}\n", "import parser from './parser';\nimport WhitespaceControl from './whitespace-control';\nimport * as Helpers from './helpers';\nimport { extend } from '../utils';\n\nexport { parser };\n\nlet yy = {};\nextend(yy, Helpers);\n\nexport 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\n parser.yy = yy;\n\n // Altering the shared object here, but this is ok as parser is a sync operation\n yy.locInfo = function(locInfo) {\n return new yy.SourceLocation(options && options.srcName, locInfo);\n };\n\n let ast = parser.parse(input);\n\n return ast;\n}\n\nexport function parse(input, options) {\n let ast = parseWithoutProcessing(input, options);\n let strip = new WhitespaceControl(options);\n\n return strip.accept(ast);\n}\n", "/* eslint-disable new-cap */\n\nimport Exception from '../exception';\nimport { isArray, indexOf, extend } from '../utils';\nimport AST from './ast';\n\nconst slice = [].slice;\n\nexport function Compiler() {}\n\n// the foundHelper register will disambiguate helper lookup from finding a\n// function in a context. This is necessary for mustache compatibility, which\n// requires that context functions in blocks are evaluated by blockHelperMissing,\n// and then proceed as if the resulting value was provided to blockHelperMissing.\n\nCompiler.prototype = {\n compiler: Compiler,\n\n equals: function(other) {\n let len = this.opcodes.length;\n if (other.opcodes.length !== len) {\n return false;\n }\n\n for (let i = 0; i < len; i++) {\n let opcode = this.opcodes[i],\n otherOpcode = other.opcodes[i];\n if (\n opcode.opcode !== otherOpcode.opcode ||\n !argEquals(opcode.args, otherOpcode.args)\n ) {\n return false;\n }\n }\n\n // We know that length is the same between the two arrays because they are directly tied\n // to the opcode behavior above.\n len = this.children.length;\n for (let i = 0; i < len; i++) {\n if (!this.children[i].equals(other.children[i])) {\n return false;\n }\n }\n\n return true;\n },\n\n guid: 0,\n\n compile: function(program, options) {\n this.sourceNode = [];\n this.opcodes = [];\n this.children = [];\n this.options = options;\n this.stringParams = options.stringParams;\n this.trackIds = options.trackIds;\n\n options.blockParams = options.blockParams || [];\n\n options.knownHelpers = extend(\n Object.create(null),\n {\n helperMissing: true,\n blockHelperMissing: true,\n each: true,\n if: true,\n unless: true,\n with: true,\n log: true,\n lookup: true\n },\n options.knownHelpers\n );\n\n return this.accept(program);\n },\n\n compileProgram: function(program) {\n let childCompiler = new this.compiler(), // eslint-disable-line new-cap\n result = childCompiler.compile(program, this.options),\n guid = this.guid++;\n\n this.usePartial = this.usePartial || result.usePartial;\n\n this.children[guid] = result;\n this.useDepths = this.useDepths || result.useDepths;\n\n return guid;\n },\n\n accept: function(node) {\n /* istanbul ignore next: Sanity code */\n if (!this[node.type]) {\n throw new Exception('Unknown type: ' + node.type, node);\n }\n\n this.sourceNode.unshift(node);\n let ret = this[node.type](node);\n this.sourceNode.shift();\n return ret;\n },\n\n Program: function(program) {\n this.options.blockParams.unshift(program.blockParams);\n\n let body = program.body,\n bodyLength = body.length;\n for (let i = 0; i < bodyLength; i++) {\n this.accept(body[i]);\n }\n\n this.options.blockParams.shift();\n\n this.isSimple = bodyLength === 1;\n this.blockParams = program.blockParams ? program.blockParams.length : 0;\n\n return this;\n },\n\n BlockStatement: function(block) {\n transformLiteralToPath(block);\n\n let program = block.program,\n inverse = block.inverse;\n\n program = program && this.compileProgram(program);\n inverse = inverse && this.compileProgram(inverse);\n\n let type = this.classifySexpr(block);\n\n if (type === 'helper') {\n this.helperSexpr(block, program, inverse);\n } else if (type === 'simple') {\n this.simpleSexpr(block);\n\n // now that the simple mustache is resolved, we need to\n // evaluate it by executing `blockHelperMissing`\n this.opcode('pushProgram', program);\n this.opcode('pushProgram', inverse);\n this.opcode('emptyHash');\n this.opcode('blockValue', block.path.original);\n } else {\n this.ambiguousSexpr(block, program, inverse);\n\n // now that the simple mustache is resolved, we need to\n // evaluate it by executing `blockHelperMissing`\n this.opcode('pushProgram', program);\n this.opcode('pushProgram', inverse);\n this.opcode('emptyHash');\n this.opcode('ambiguousBlockValue');\n }\n\n this.opcode('append');\n },\n\n DecoratorBlock(decorator) {\n let program = decorator.program && this.compileProgram(decorator.program);\n let params = this.setupFullMustacheParams(decorator, program, undefined),\n path = decorator.path;\n\n this.useDecorators = true;\n this.opcode('registerDecorator', params.length, path.original);\n },\n\n PartialStatement: function(partial) {\n this.usePartial = true;\n\n let program = partial.program;\n if (program) {\n program = this.compileProgram(partial.program);\n }\n\n let params = partial.params;\n if (params.length > 1) {\n throw new Exception(\n 'Unsupported number of partial arguments: ' + params.length,\n partial\n );\n } else if (!params.length) {\n if (this.options.explicitPartialContext) {\n this.opcode('pushLiteral', 'undefined');\n } else {\n params.push({ type: 'PathExpression', parts: [], depth: 0 });\n }\n }\n\n let partialName = partial.name.original,\n isDynamic = partial.name.type === 'SubExpression';\n if (isDynamic) {\n this.accept(partial.name);\n }\n\n this.setupFullMustacheParams(partial, program, undefined, true);\n\n let indent = partial.indent || '';\n if (this.options.preventIndent && indent) {\n this.opcode('appendContent', indent);\n indent = '';\n }\n\n this.opcode('invokePartial', isDynamic, partialName, indent);\n this.opcode('append');\n },\n PartialBlockStatement: function(partialBlock) {\n this.PartialStatement(partialBlock);\n },\n\n MustacheStatement: function(mustache) {\n this.SubExpression(mustache);\n\n if (mustache.escaped && !this.options.noEscape) {\n this.opcode('appendEscaped');\n } else {\n this.opcode('append');\n }\n },\n Decorator(decorator) {\n this.DecoratorBlock(decorator);\n },\n\n ContentStatement: function(content) {\n if (content.value) {\n this.opcode('appendContent', content.value);\n }\n },\n\n CommentStatement: function() {},\n\n SubExpression: function(sexpr) {\n transformLiteralToPath(sexpr);\n let type = this.classifySexpr(sexpr);\n\n if (type === 'simple') {\n this.simpleSexpr(sexpr);\n } else if (type === 'helper') {\n this.helperSexpr(sexpr);\n } else {\n this.ambiguousSexpr(sexpr);\n }\n },\n ambiguousSexpr: function(sexpr, program, inverse) {\n let path = sexpr.path,\n name = path.parts[0],\n isBlock = program != null || inverse != null;\n\n this.opcode('getContext', path.depth);\n\n this.opcode('pushProgram', program);\n this.opcode('pushProgram', inverse);\n\n path.strict = true;\n this.accept(path);\n\n this.opcode('invokeAmbiguous', name, isBlock);\n },\n\n simpleSexpr: function(sexpr) {\n let path = sexpr.path;\n path.strict = true;\n this.accept(path);\n this.opcode('resolvePossibleLambda');\n },\n\n helperSexpr: function(sexpr, program, inverse) {\n let params = this.setupFullMustacheParams(sexpr, program, inverse),\n path = sexpr.path,\n name = path.parts[0];\n\n if (this.options.knownHelpers[name]) {\n this.opcode('invokeKnownHelper', params.length, name);\n } else if (this.options.knownHelpersOnly) {\n throw new Exception(\n 'You specified knownHelpersOnly, but used the unknown helper ' + name,\n sexpr\n );\n } else {\n path.strict = true;\n path.falsy = true;\n\n this.accept(path);\n this.opcode(\n 'invokeHelper',\n params.length,\n path.original,\n AST.helpers.simpleId(path)\n );\n }\n },\n\n PathExpression: function(path) {\n this.addDepth(path.depth);\n this.opcode('getContext', path.depth);\n\n let name = path.parts[0],\n scoped = AST.helpers.scopedId(path),\n blockParamId = !path.depth && !scoped && this.blockParamIndex(name);\n\n if (blockParamId) {\n this.opcode('lookupBlockParam', blockParamId, path.parts);\n } else if (!name) {\n // Context reference, i.e. `{{foo .}}` or `{{foo ..}}`\n this.opcode('pushContext');\n } else if (path.data) {\n this.options.data = true;\n this.opcode('lookupData', path.depth, path.parts, path.strict);\n } else {\n this.opcode(\n 'lookupOnContext',\n path.parts,\n path.falsy,\n path.strict,\n scoped\n );\n }\n },\n\n StringLiteral: function(string) {\n this.opcode('pushString', string.value);\n },\n\n NumberLiteral: function(number) {\n this.opcode('pushLiteral', number.value);\n },\n\n BooleanLiteral: function(bool) {\n this.opcode('pushLiteral', bool.value);\n },\n\n UndefinedLiteral: function() {\n this.opcode('pushLiteral', 'undefined');\n },\n\n NullLiteral: function() {\n this.opcode('pushLiteral', 'null');\n },\n\n Hash: function(hash) {\n let pairs = hash.pairs,\n i = 0,\n l = pairs.length;\n\n this.opcode('pushHash');\n\n for (; i < l; i++) {\n this.pushParam(pairs[i].value);\n }\n while (i--) {\n this.opcode('assignToHash', pairs[i].key);\n }\n this.opcode('popHash');\n },\n\n // HELPERS\n opcode: function(name) {\n this.opcodes.push({\n opcode: name,\n args: slice.call(arguments, 1),\n loc: this.sourceNode[0].loc\n });\n },\n\n addDepth: function(depth) {\n if (!depth) {\n return;\n }\n\n this.useDepths = true;\n },\n\n classifySexpr: function(sexpr) {\n let isSimple = AST.helpers.simpleId(sexpr.path);\n\n let isBlockParam = isSimple && !!this.blockParamIndex(sexpr.path.parts[0]);\n\n // a mustache is an eligible helper if:\n // * its id is simple (a single part, not `this` or `..`)\n let isHelper = !isBlockParam && AST.helpers.helperExpression(sexpr);\n\n // if a mustache is an eligible helper but not a definite\n // helper, it is ambiguous, and will be resolved in a later\n // pass or at runtime.\n let isEligible = !isBlockParam && (isHelper || isSimple);\n\n // if ambiguous, we can possibly resolve the ambiguity now\n // An eligible helper is one that does not have a complex path, i.e. `this.foo`, `../foo` etc.\n if (isEligible && !isHelper) {\n let name = sexpr.path.parts[0],\n options = this.options;\n if (options.knownHelpers[name]) {\n isHelper = true;\n } else if (options.knownHelpersOnly) {\n isEligible = false;\n }\n }\n\n if (isHelper) {\n return 'helper';\n } else if (isEligible) {\n return 'ambiguous';\n } else {\n return 'simple';\n }\n },\n\n pushParams: function(params) {\n for (let i = 0, l = params.length; i < l; i++) {\n this.pushParam(params[i]);\n }\n },\n\n pushParam: function(val) {\n let value = val.value != null ? val.value : val.original || '';\n\n if (this.stringParams) {\n if (value.replace) {\n value = value.replace(/^(\\.?\\.\\/)*/g, '').replace(/\\//g, '.');\n }\n\n if (val.depth) {\n this.addDepth(val.depth);\n }\n this.opcode('getContext', val.depth || 0);\n this.opcode('pushStringParam', value, val.type);\n\n if (val.type === 'SubExpression') {\n // SubExpressions get evaluated and passed in\n // in string params mode.\n this.accept(val);\n }\n } else {\n if (this.trackIds) {\n let blockParamIndex;\n if (val.parts && !AST.helpers.scopedId(val) && !val.depth) {\n blockParamIndex = this.blockParamIndex(val.parts[0]);\n }\n if (blockParamIndex) {\n let blockParamChild = val.parts.slice(1).join('.');\n this.opcode('pushId', 'BlockParam', blockParamIndex, blockParamChild);\n } else {\n value = val.original || value;\n if (value.replace) {\n value = value\n .replace(/^this(?:\\.|$)/, '')\n .replace(/^\\.\\//, '')\n .replace(/^\\.$/, '');\n }\n\n this.opcode('pushId', val.type, value);\n }\n }\n this.accept(val);\n }\n },\n\n setupFullMustacheParams: function(sexpr, program, inverse, omitEmpty) {\n let params = sexpr.params;\n this.pushParams(params);\n\n this.opcode('pushProgram', program);\n this.opcode('pushProgram', inverse);\n\n if (sexpr.hash) {\n this.accept(sexpr.hash);\n } else {\n this.opcode('emptyHash', omitEmpty);\n }\n\n return params;\n },\n\n blockParamIndex: function(name) {\n for (\n let depth = 0, len = this.options.blockParams.length;\n depth < len;\n depth++\n ) {\n let blockParams = this.options.blockParams[depth],\n param = blockParams && indexOf(blockParams, name);\n if (blockParams && param >= 0) {\n return [depth, param];\n }\n }\n }\n};\n\nexport function precompile(input, options, env) {\n if (\n input == null ||\n (typeof input !== 'string' && input.type !== 'Program')\n ) {\n throw new Exception(\n 'You must pass a string or Handlebars AST to Handlebars.precompile. You passed ' +\n input\n );\n }\n\n options = options || {};\n if (!('data' in options)) {\n options.data = true;\n }\n if (options.compat) {\n options.useDepths = true;\n }\n\n let ast = env.parse(input, options),\n environment = new env.Compiler().compile(ast, options);\n return new env.JavaScriptCompiler().compile(environment, options);\n}\n\nexport function compile(input, options = {}, env) {\n if (\n input == null ||\n (typeof input !== 'string' && input.type !== 'Program')\n ) {\n throw new Exception(\n 'You must pass a string or Handlebars AST to Handlebars.compile. You passed ' +\n input\n );\n }\n\n options = extend({}, options);\n if (!('data' in options)) {\n options.data = true;\n }\n if (options.compat) {\n options.useDepths = true;\n }\n\n let compiled;\n\n function compileInput() {\n let ast = env.parse(input, options),\n environment = new env.Compiler().compile(ast, options),\n templateSpec = new env.JavaScriptCompiler().compile(\n environment,\n options,\n undefined,\n true\n );\n return env.template(templateSpec);\n }\n\n // Template is only compiled on first use and cached after that point.\n function ret(context, execOptions) {\n if (!compiled) {\n compiled = compileInput();\n }\n return compiled.call(this, context, execOptions);\n }\n ret._setup = function(setupOptions) {\n if (!compiled) {\n compiled = compileInput();\n }\n return compiled._setup(setupOptions);\n };\n ret._child = function(i, data, blockParams, depths) {\n if (!compiled) {\n compiled = compileInput();\n }\n return compiled._child(i, data, blockParams, depths);\n };\n return ret;\n}\n\nfunction argEquals(a, b) {\n if (a === b) {\n return true;\n }\n\n if (isArray(a) && isArray(b) && a.length === b.length) {\n for (let i = 0; i < a.length; i++) {\n if (!argEquals(a[i], b[i])) {\n return false;\n }\n }\n return true;\n }\n}\n\nfunction transformLiteralToPath(sexpr) {\n if (!sexpr.path.parts) {\n let literal = sexpr.path;\n // Casting to string here to make false and 0 literal values play nicely with the rest\n // of the system.\n sexpr.path = {\n type: 'PathExpression',\n data: false,\n depth: 0,\n parts: [literal.original + ''],\n original: literal.original + '',\n loc: literal.loc\n };\n }\n}\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar intToCharMap = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'.split('');\n\n/**\n * Encode an integer in the range of 0 to 63 to a single base 64 digit.\n */\nexports.encode = function (number) {\n if (0 <= number && number < intToCharMap.length) {\n return intToCharMap[number];\n }\n throw new TypeError(\"Must be between 0 and 63: \" + number);\n};\n\n/**\n * Decode a single base 64 character code digit to an integer. Returns -1 on\n * failure.\n */\nexports.decode = function (charCode) {\n var bigA = 65; // 'A'\n var bigZ = 90; // 'Z'\n\n var littleA = 97; // 'a'\n var littleZ = 122; // 'z'\n\n var zero = 48; // '0'\n var nine = 57; // '9'\n\n var plus = 43; // '+'\n var slash = 47; // '/'\n\n var littleOffset = 26;\n var numberOffset = 52;\n\n // 0 - 25: ABCDEFGHIJKLMNOPQRSTUVWXYZ\n if (bigA <= charCode && charCode <= bigZ) {\n return (charCode - bigA);\n }\n\n // 26 - 51: abcdefghijklmnopqrstuvwxyz\n if (littleA <= charCode && charCode <= littleZ) {\n return (charCode - littleA + littleOffset);\n }\n\n // 52 - 61: 0123456789\n if (zero <= charCode && charCode <= nine) {\n return (charCode - zero + numberOffset);\n }\n\n // 62: +\n if (charCode == plus) {\n return 62;\n }\n\n // 63: /\n if (charCode == slash) {\n return 63;\n }\n\n // Invalid base64 digit.\n return -1;\n};\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n *\n * Based on the Base 64 VLQ implementation in Closure Compiler:\n * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java\n *\n * Copyright 2011 The Closure Compiler Authors. All rights reserved.\n * Redistribution and use in source and binary forms, with or without\n * modification, are permitted provided that the following conditions are\n * met:\n *\n * * Redistributions of source code must retain the above copyright\n * notice, this list of conditions and the following disclaimer.\n * * Redistributions in binary form must reproduce the above\n * copyright notice, this list of conditions and the following\n * disclaimer in the documentation and/or other materials provided\n * with the distribution.\n * * Neither the name of Google Inc. nor the names of its\n * contributors may be used to endorse or promote products derived\n * from this software without specific prior written permission.\n *\n * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS\n * \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT\n * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR\n * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT\n * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,\n * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT\n * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,\n * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY\n * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT\n * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\n * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n */\n\nvar base64 = require('./base64');\n\n// A single base 64 digit can contain 6 bits of data. For the base 64 variable\n// length quantities we use in the source map spec, the first bit is the sign,\n// the next four bits are the actual value, and the 6th bit is the\n// continuation bit. The continuation bit tells us whether there are more\n// digits in this value following this digit.\n//\n// Continuation\n// | Sign\n// | |\n// V V\n// 101011\n\nvar VLQ_BASE_SHIFT = 5;\n\n// binary: 100000\nvar VLQ_BASE = 1 << VLQ_BASE_SHIFT;\n\n// binary: 011111\nvar VLQ_BASE_MASK = VLQ_BASE - 1;\n\n// binary: 100000\nvar VLQ_CONTINUATION_BIT = VLQ_BASE;\n\n/**\n * Converts from a two-complement value to a value where the sign bit is\n * placed in the least significant bit. For example, as decimals:\n * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary)\n * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary)\n */\nfunction toVLQSigned(aValue) {\n return aValue < 0\n ? ((-aValue) << 1) + 1\n : (aValue << 1) + 0;\n}\n\n/**\n * Converts to a two-complement value from a value where the sign bit is\n * placed in the least significant bit. For example, as decimals:\n * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1\n * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2\n */\nfunction fromVLQSigned(aValue) {\n var isNegative = (aValue & 1) === 1;\n var shifted = aValue >> 1;\n return isNegative\n ? -shifted\n : shifted;\n}\n\n/**\n * Returns the base 64 VLQ encoded value.\n */\nexports.encode = function base64VLQ_encode(aValue) {\n var encoded = \"\";\n var digit;\n\n var vlq = toVLQSigned(aValue);\n\n do {\n digit = vlq & VLQ_BASE_MASK;\n vlq >>>= VLQ_BASE_SHIFT;\n if (vlq > 0) {\n // There are still more digits in this value, so we must make sure the\n // continuation bit is marked.\n digit |= VLQ_CONTINUATION_BIT;\n }\n encoded += base64.encode(digit);\n } while (vlq > 0);\n\n return encoded;\n};\n\n/**\n * Decodes the next base 64 VLQ value from the given string and returns the\n * value and the rest of the string via the out parameter.\n */\nexports.decode = function base64VLQ_decode(aStr, aIndex, aOutParam) {\n var strLen = aStr.length;\n var result = 0;\n var shift = 0;\n var continuation, digit;\n\n do {\n if (aIndex >= strLen) {\n throw new Error(\"Expected more digits in base 64 VLQ value.\");\n }\n\n digit = base64.decode(aStr.charCodeAt(aIndex++));\n if (digit === -1) {\n throw new Error(\"Invalid base64 digit: \" + aStr.charAt(aIndex - 1));\n }\n\n continuation = !!(digit & VLQ_CONTINUATION_BIT);\n digit &= VLQ_BASE_MASK;\n result = result + (digit << shift);\n shift += VLQ_BASE_SHIFT;\n } while (continuation);\n\n aOutParam.value = fromVLQSigned(result);\n aOutParam.rest = aIndex;\n};\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n/**\n * This is a helper function for getting values from parameter/options\n * objects.\n *\n * @param args The object we are extracting values from\n * @param name The name of the property we are getting.\n * @param defaultValue An optional value to return if the property is missing\n * from the object. If this is not specified and the property is missing, an\n * error will be thrown.\n */\nfunction getArg(aArgs, aName, aDefaultValue) {\n if (aName in aArgs) {\n return aArgs[aName];\n } else if (arguments.length === 3) {\n return aDefaultValue;\n } else {\n throw new Error('\"' + aName + '\" is a required argument.');\n }\n}\nexports.getArg = getArg;\n\nvar urlRegexp = /^(?:([\\w+\\-.]+):)?\\/\\/(?:(\\w+:\\w+)@)?([\\w.-]*)(?::(\\d+))?(.*)$/;\nvar dataUrlRegexp = /^data:.+\\,.+$/;\n\nfunction urlParse(aUrl) {\n var match = aUrl.match(urlRegexp);\n if (!match) {\n return null;\n }\n return {\n scheme: match[1],\n auth: match[2],\n host: match[3],\n port: match[4],\n path: match[5]\n };\n}\nexports.urlParse = urlParse;\n\nfunction urlGenerate(aParsedUrl) {\n var url = '';\n if (aParsedUrl.scheme) {\n url += aParsedUrl.scheme + ':';\n }\n url += '//';\n if (aParsedUrl.auth) {\n url += aParsedUrl.auth + '@';\n }\n if (aParsedUrl.host) {\n url += aParsedUrl.host;\n }\n if (aParsedUrl.port) {\n url += \":\" + aParsedUrl.port\n }\n if (aParsedUrl.path) {\n url += aParsedUrl.path;\n }\n return url;\n}\nexports.urlGenerate = urlGenerate;\n\n/**\n * Normalizes a path, or the path portion of a URL:\n *\n * - Replaces consecutive slashes with one slash.\n * - Removes unnecessary '.' parts.\n * - Removes unnecessary '<dir>/..' parts.\n *\n * Based on code in the Node.js 'path' core module.\n *\n * @param aPath The path or url to normalize.\n */\nfunction normalize(aPath) {\n var path = aPath;\n var url = urlParse(aPath);\n if (url) {\n if (!url.path) {\n return aPath;\n }\n path = url.path;\n }\n var isAbsolute = exports.isAbsolute(path);\n\n var parts = path.split(/\\/+/);\n for (var part, up = 0, i = parts.length - 1; i >= 0; i--) {\n part = parts[i];\n if (part === '.') {\n parts.splice(i, 1);\n } else if (part === '..') {\n up++;\n } else if (up > 0) {\n if (part === '') {\n // The first part is blank if the path is absolute. Trying to go\n // above the root is a no-op. Therefore we can remove all '..' parts\n // directly after the root.\n parts.splice(i + 1, up);\n up = 0;\n } else {\n parts.splice(i, 2);\n up--;\n }\n }\n }\n path = parts.join('/');\n\n if (path === '') {\n path = isAbsolute ? '/' : '.';\n }\n\n if (url) {\n url.path = path;\n return urlGenerate(url);\n }\n return path;\n}\nexports.normalize = normalize;\n\n/**\n * Joins two paths/URLs.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be joined with the root.\n *\n * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a\n * scheme-relative URL: Then the scheme of aRoot, if any, is prepended\n * first.\n * - Otherwise aPath is a path. If aRoot is a URL, then its path portion\n * is updated with the result and aRoot is returned. Otherwise the result\n * is returned.\n * - If aPath is absolute, the result is aPath.\n * - Otherwise the two paths are joined with a slash.\n * - Joining for example 'http://' and 'www.example.com' is also supported.\n */\nfunction join(aRoot, aPath) {\n if (aRoot === \"\") {\n aRoot = \".\";\n }\n if (aPath === \"\") {\n aPath = \".\";\n }\n var aPathUrl = urlParse(aPath);\n var aRootUrl = urlParse(aRoot);\n if (aRootUrl) {\n aRoot = aRootUrl.path || '/';\n }\n\n // `join(foo, '//www.example.org')`\n if (aPathUrl && !aPathUrl.scheme) {\n if (aRootUrl) {\n aPathUrl.scheme = aRootUrl.scheme;\n }\n return urlGenerate(aPathUrl);\n }\n\n if (aPathUrl || aPath.match(dataUrlRegexp)) {\n return aPath;\n }\n\n // `join('http://', 'www.example.com')`\n if (aRootUrl && !aRootUrl.host && !aRootUrl.path) {\n aRootUrl.host = aPath;\n return urlGenerate(aRootUrl);\n }\n\n var joined = aPath.charAt(0) === '/'\n ? aPath\n : normalize(aRoot.replace(/\\/+$/, '') + '/' + aPath);\n\n if (aRootUrl) {\n aRootUrl.path = joined;\n return urlGenerate(aRootUrl);\n }\n return joined;\n}\nexports.join = join;\n\nexports.isAbsolute = function (aPath) {\n return aPath.charAt(0) === '/' || urlRegexp.test(aPath);\n};\n\n/**\n * Make a path relative to a URL or another path.\n *\n * @param aRoot The root path or URL.\n * @param aPath The path or URL to be made relative to aRoot.\n */\nfunction relative(aRoot, aPath) {\n if (aRoot === \"\") {\n aRoot = \".\";\n }\n\n aRoot = aRoot.replace(/\\/$/, '');\n\n // It is possible for the path to be above the root. In this case, simply\n // checking whether the root is a prefix of the path won't work. Instead, we\n // need to remove components from the root one by one, until either we find\n // a prefix that fits, or we run out of components to remove.\n var level = 0;\n while (aPath.indexOf(aRoot + '/') !== 0) {\n var index = aRoot.lastIndexOf(\"/\");\n if (index < 0) {\n return aPath;\n }\n\n // If the only part of the root that is left is the scheme (i.e. http://,\n // file:///, etc.), one or more slashes (/), or simply nothing at all, we\n // have exhausted all components, so the path is not relative to the root.\n aRoot = aRoot.slice(0, index);\n if (aRoot.match(/^([^\\/]+:\\/)?\\/*$/)) {\n return aPath;\n }\n\n ++level;\n }\n\n // Make sure we add a \"../\" for each component we removed from the root.\n return Array(level + 1).join(\"../\") + aPath.substr(aRoot.length + 1);\n}\nexports.relative = relative;\n\nvar supportsNullProto = (function () {\n var obj = Object.create(null);\n return !('__proto__' in obj);\n}());\n\nfunction identity (s) {\n return s;\n}\n\n/**\n * Because behavior goes wacky when you set `__proto__` on objects, we\n * have to prefix all the strings in our set with an arbitrary character.\n *\n * See https://github.com/mozilla/source-map/pull/31 and\n * https://github.com/mozilla/source-map/issues/30\n *\n * @param String aStr\n */\nfunction toSetString(aStr) {\n if (isProtoString(aStr)) {\n return '$' + aStr;\n }\n\n return aStr;\n}\nexports.toSetString = supportsNullProto ? identity : toSetString;\n\nfunction fromSetString(aStr) {\n if (isProtoString(aStr)) {\n return aStr.slice(1);\n }\n\n return aStr;\n}\nexports.fromSetString = supportsNullProto ? identity : fromSetString;\n\nfunction isProtoString(s) {\n if (!s) {\n return false;\n }\n\n var length = s.length;\n\n if (length < 9 /* \"__proto__\".length */) {\n return false;\n }\n\n if (s.charCodeAt(length - 1) !== 95 /* '_' */ ||\n s.charCodeAt(length - 2) !== 95 /* '_' */ ||\n s.charCodeAt(length - 3) !== 111 /* 'o' */ ||\n s.charCodeAt(length - 4) !== 116 /* 't' */ ||\n s.charCodeAt(length - 5) !== 111 /* 'o' */ ||\n s.charCodeAt(length - 6) !== 114 /* 'r' */ ||\n s.charCodeAt(length - 7) !== 112 /* 'p' */ ||\n s.charCodeAt(length - 8) !== 95 /* '_' */ ||\n s.charCodeAt(length - 9) !== 95 /* '_' */) {\n return false;\n }\n\n for (var i = length - 10; i >= 0; i--) {\n if (s.charCodeAt(i) !== 36 /* '$' */) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Comparator between two mappings where the original positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same original source/line/column, but different generated\n * line and column the same. Useful when searching for a mapping with a\n * stubbed out mapping.\n */\nfunction compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) {\n var cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0 || onlyCompareOriginal) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByOriginalPositions = compareByOriginalPositions;\n\n/**\n * Comparator between two mappings with deflated source and name indices where\n * the generated positions are compared.\n *\n * Optionally pass in `true` as `onlyCompareGenerated` to consider two\n * mappings with the same generated line and column, but different\n * source/name/original line and column the same. Useful when searching for a\n * mapping with a stubbed out mapping.\n */\nfunction compareByGeneratedPositionsDeflated(mappingA, mappingB, onlyCompareGenerated) {\n var cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0 || onlyCompareGenerated) {\n return cmp;\n }\n\n cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsDeflated = compareByGeneratedPositionsDeflated;\n\nfunction strcmp(aStr1, aStr2) {\n if (aStr1 === aStr2) {\n return 0;\n }\n\n if (aStr1 === null) {\n return 1; // aStr2 !== null\n }\n\n if (aStr2 === null) {\n return -1; // aStr1 !== null\n }\n\n if (aStr1 > aStr2) {\n return 1;\n }\n\n return -1;\n}\n\n/**\n * Comparator between two mappings with inflated source and name strings where\n * the generated positions are compared.\n */\nfunction compareByGeneratedPositionsInflated(mappingA, mappingB) {\n var cmp = mappingA.generatedLine - mappingB.generatedLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.generatedColumn - mappingB.generatedColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = strcmp(mappingA.source, mappingB.source);\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalLine - mappingB.originalLine;\n if (cmp !== 0) {\n return cmp;\n }\n\n cmp = mappingA.originalColumn - mappingB.originalColumn;\n if (cmp !== 0) {\n return cmp;\n }\n\n return strcmp(mappingA.name, mappingB.name);\n}\nexports.compareByGeneratedPositionsInflated = compareByGeneratedPositionsInflated;\n\n/**\n * Strip any JSON XSSI avoidance prefix from the string (as documented\n * in the source maps specification), and then parse the string as\n * JSON.\n */\nfunction parseSourceMapInput(str) {\n return JSON.parse(str.replace(/^\\)]}'[^\\n]*\\n/, ''));\n}\nexports.parseSourceMapInput = parseSourceMapInput;\n\n/**\n * Compute the URL of a source given the the source root, the source's\n * URL, and the source map's URL.\n */\nfunction computeSourceURL(sourceRoot, sourceURL, sourceMapURL) {\n sourceURL = sourceURL || '';\n\n if (sourceRoot) {\n // This follows what Chrome does.\n if (sourceRoot[sourceRoot.length - 1] !== '/' && sourceURL[0] !== '/') {\n sourceRoot += '/';\n }\n // The spec says:\n // Line 4: An optional source root, useful for relocating source\n // files on a server or removing repeated values in the\n // \u201Csources\u201D entry. This value is prepended to the individual\n // entries in the \u201Csource\u201D field.\n sourceURL = sourceRoot + sourceURL;\n }\n\n // Historically, SourceMapConsumer did not take the sourceMapURL as\n // a parameter. This mode is still somewhat supported, which is why\n // this code block is conditional. However, it's preferable to pass\n // the source map URL to SourceMapConsumer, so that this function\n // can implement the source URL resolution algorithm as outlined in\n // the spec. This block is basically the equivalent of:\n // new URL(sourceURL, sourceMapURL).toString()\n // ... except it avoids using URL, which wasn't available in the\n // older releases of node still supported by this library.\n //\n // The spec says:\n // If the sources are not absolute URLs after prepending of the\n // \u201CsourceRoot\u201D, the sources are resolved relative to the\n // SourceMap (like resolving script src in a html document).\n if (sourceMapURL) {\n var parsed = urlParse(sourceMapURL);\n if (!parsed) {\n throw new Error(\"sourceMapURL could not be parsed\");\n }\n if (parsed.path) {\n // Strip the last path component, but keep the \"/\".\n var index = parsed.path.lastIndexOf('/');\n if (index >= 0) {\n parsed.path = parsed.path.substring(0, index + 1);\n }\n }\n sourceURL = join(urlGenerate(parsed), sourceURL);\n }\n\n return normalize(sourceURL);\n}\nexports.computeSourceURL = computeSourceURL;\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar has = Object.prototype.hasOwnProperty;\nvar hasNativeMap = typeof Map !== \"undefined\";\n\n/**\n * A data structure which is a combination of an array and a set. Adding a new\n * member is O(1), testing for membership is O(1), and finding the index of an\n * element is O(1). Removing elements from the set is not supported. Only\n * strings are supported for membership.\n */\nfunction ArraySet() {\n this._array = [];\n this._set = hasNativeMap ? new Map() : Object.create(null);\n}\n\n/**\n * Static method for creating ArraySet instances from an existing array.\n */\nArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) {\n var set = new ArraySet();\n for (var i = 0, len = aArray.length; i < len; i++) {\n set.add(aArray[i], aAllowDuplicates);\n }\n return set;\n};\n\n/**\n * Return how many unique items are in this ArraySet. If duplicates have been\n * added, than those do not count towards the size.\n *\n * @returns Number\n */\nArraySet.prototype.size = function ArraySet_size() {\n return hasNativeMap ? this._set.size : Object.getOwnPropertyNames(this._set).length;\n};\n\n/**\n * Add the given string to this set.\n *\n * @param String aStr\n */\nArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) {\n var sStr = hasNativeMap ? aStr : util.toSetString(aStr);\n var isDuplicate = hasNativeMap ? this.has(aStr) : has.call(this._set, sStr);\n var idx = this._array.length;\n if (!isDuplicate || aAllowDuplicates) {\n this._array.push(aStr);\n }\n if (!isDuplicate) {\n if (hasNativeMap) {\n this._set.set(aStr, idx);\n } else {\n this._set[sStr] = idx;\n }\n }\n};\n\n/**\n * Is the given string a member of this set?\n *\n * @param String aStr\n */\nArraySet.prototype.has = function ArraySet_has(aStr) {\n if (hasNativeMap) {\n return this._set.has(aStr);\n } else {\n var sStr = util.toSetString(aStr);\n return has.call(this._set, sStr);\n }\n};\n\n/**\n * What is the index of the given string in the array?\n *\n * @param String aStr\n */\nArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) {\n if (hasNativeMap) {\n var idx = this._set.get(aStr);\n if (idx >= 0) {\n return idx;\n }\n } else {\n var sStr = util.toSetString(aStr);\n if (has.call(this._set, sStr)) {\n return this._set[sStr];\n }\n }\n\n throw new Error('\"' + aStr + '\" is not in the set.');\n};\n\n/**\n * What is the element at the given index?\n *\n * @param Number aIdx\n */\nArraySet.prototype.at = function ArraySet_at(aIdx) {\n if (aIdx >= 0 && aIdx < this._array.length) {\n return this._array[aIdx];\n }\n throw new Error('No element indexed by ' + aIdx);\n};\n\n/**\n * Returns the array representation of this set (which has the proper indices\n * indicated by indexOf). Note that this is a copy of the internal array used\n * for storing the members so that no one can mess with internal state.\n */\nArraySet.prototype.toArray = function ArraySet_toArray() {\n return this._array.slice();\n};\n\nexports.ArraySet = ArraySet;\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2014 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\n\n/**\n * Determine whether mappingB is after mappingA with respect to generated\n * position.\n */\nfunction generatedPositionAfter(mappingA, mappingB) {\n // Optimized for most common case\n var lineA = mappingA.generatedLine;\n var lineB = mappingB.generatedLine;\n var columnA = mappingA.generatedColumn;\n var columnB = mappingB.generatedColumn;\n return lineB > lineA || lineB == lineA && columnB >= columnA ||\n util.compareByGeneratedPositionsInflated(mappingA, mappingB) <= 0;\n}\n\n/**\n * A data structure to provide a sorted view of accumulated mappings in a\n * performance conscious manner. It trades a neglibable overhead in general\n * case for a large speedup in case of mappings being added in order.\n */\nfunction MappingList() {\n this._array = [];\n this._sorted = true;\n // Serves as infimum\n this._last = {generatedLine: -1, generatedColumn: 0};\n}\n\n/**\n * Iterate through internal items. This method takes the same arguments that\n * `Array.prototype.forEach` takes.\n *\n * NOTE: The order of the mappings is NOT guaranteed.\n */\nMappingList.prototype.unsortedForEach =\n function MappingList_forEach(aCallback, aThisArg) {\n this._array.forEach(aCallback, aThisArg);\n };\n\n/**\n * Add the given source mapping.\n *\n * @param Object aMapping\n */\nMappingList.prototype.add = function MappingList_add(aMapping) {\n if (generatedPositionAfter(this._last, aMapping)) {\n this._last = aMapping;\n this._array.push(aMapping);\n } else {\n this._sorted = false;\n this._array.push(aMapping);\n }\n};\n\n/**\n * Returns the flat, sorted array of mappings. The mappings are sorted by\n * generated position.\n *\n * WARNING: This method returns internal data without copying, for\n * performance. The return value must NOT be mutated, and should be treated as\n * an immutable borrow. If you want to take ownership, you must make your own\n * copy.\n */\nMappingList.prototype.toArray = function MappingList_toArray() {\n if (!this._sorted) {\n this._array.sort(util.compareByGeneratedPositionsInflated);\n this._sorted = true;\n }\n return this._array;\n};\n\nexports.MappingList = MappingList;\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar base64VLQ = require('./base64-vlq');\nvar util = require('./util');\nvar ArraySet = require('./array-set').ArraySet;\nvar MappingList = require('./mapping-list').MappingList;\n\n/**\n * An instance of the SourceMapGenerator represents a source map which is\n * being built incrementally. You may pass an object with the following\n * properties:\n *\n * - file: The filename of the generated source.\n * - sourceRoot: A root for all relative URLs in this source map.\n */\nfunction SourceMapGenerator(aArgs) {\n if (!aArgs) {\n aArgs = {};\n }\n this._file = util.getArg(aArgs, 'file', null);\n this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null);\n this._skipValidation = util.getArg(aArgs, 'skipValidation', false);\n this._sources = new ArraySet();\n this._names = new ArraySet();\n this._mappings = new MappingList();\n this._sourcesContents = null;\n}\n\nSourceMapGenerator.prototype._version = 3;\n\n/**\n * Creates a new SourceMapGenerator based on a SourceMapConsumer\n *\n * @param aSourceMapConsumer The SourceMap.\n */\nSourceMapGenerator.fromSourceMap =\n function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) {\n var sourceRoot = aSourceMapConsumer.sourceRoot;\n var generator = new SourceMapGenerator({\n file: aSourceMapConsumer.file,\n sourceRoot: sourceRoot\n });\n aSourceMapConsumer.eachMapping(function (mapping) {\n var newMapping = {\n generated: {\n line: mapping.generatedLine,\n column: mapping.generatedColumn\n }\n };\n\n if (mapping.source != null) {\n newMapping.source = mapping.source;\n if (sourceRoot != null) {\n newMapping.source = util.relative(sourceRoot, newMapping.source);\n }\n\n newMapping.original = {\n line: mapping.originalLine,\n column: mapping.originalColumn\n };\n\n if (mapping.name != null) {\n newMapping.name = mapping.name;\n }\n }\n\n generator.addMapping(newMapping);\n });\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var sourceRelative = sourceFile;\n if (sourceRoot !== null) {\n sourceRelative = util.relative(sourceRoot, sourceFile);\n }\n\n if (!generator._sources.has(sourceRelative)) {\n generator._sources.add(sourceRelative);\n }\n\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n generator.setSourceContent(sourceFile, content);\n }\n });\n return generator;\n };\n\n/**\n * Add a single mapping from original source line and column to the generated\n * source's line and column for this source map being created. The mapping\n * object should have the following properties:\n *\n * - generated: An object with the generated line and column positions.\n * - original: An object with the original line and column positions.\n * - source: The original source file (relative to the sourceRoot).\n * - name: An optional original token name for this mapping.\n */\nSourceMapGenerator.prototype.addMapping =\n function SourceMapGenerator_addMapping(aArgs) {\n var generated = util.getArg(aArgs, 'generated');\n var original = util.getArg(aArgs, 'original', null);\n var source = util.getArg(aArgs, 'source', null);\n var name = util.getArg(aArgs, 'name', null);\n\n if (!this._skipValidation) {\n this._validateMapping(generated, original, source, name);\n }\n\n if (source != null) {\n source = String(source);\n if (!this._sources.has(source)) {\n this._sources.add(source);\n }\n }\n\n if (name != null) {\n name = String(name);\n if (!this._names.has(name)) {\n this._names.add(name);\n }\n }\n\n this._mappings.add({\n generatedLine: generated.line,\n generatedColumn: generated.column,\n originalLine: original != null && original.line,\n originalColumn: original != null && original.column,\n source: source,\n name: name\n });\n };\n\n/**\n * Set the source content for a source file.\n */\nSourceMapGenerator.prototype.setSourceContent =\n function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) {\n var source = aSourceFile;\n if (this._sourceRoot != null) {\n source = util.relative(this._sourceRoot, source);\n }\n\n if (aSourceContent != null) {\n // Add the source content to the _sourcesContents map.\n // Create a new _sourcesContents map if the property is null.\n if (!this._sourcesContents) {\n this._sourcesContents = Object.create(null);\n }\n this._sourcesContents[util.toSetString(source)] = aSourceContent;\n } else if (this._sourcesContents) {\n // Remove the source file from the _sourcesContents map.\n // If the _sourcesContents map is empty, set the property to null.\n delete this._sourcesContents[util.toSetString(source)];\n if (Object.keys(this._sourcesContents).length === 0) {\n this._sourcesContents = null;\n }\n }\n };\n\n/**\n * Applies the mappings of a sub-source-map for a specific source file to the\n * source map being generated. Each mapping to the supplied source file is\n * rewritten using the supplied source map. Note: The resolution for the\n * resulting mappings is the minimium of this map and the supplied map.\n *\n * @param aSourceMapConsumer The source map to be applied.\n * @param aSourceFile Optional. The filename of the source file.\n * If omitted, SourceMapConsumer's file property will be used.\n * @param aSourceMapPath Optional. The dirname of the path to the source map\n * to be applied. If relative, it is relative to the SourceMapConsumer.\n * This parameter is needed when the two source maps aren't in the same\n * directory, and the source map to be applied contains relative source\n * paths. If so, those relative source paths need to be rewritten\n * relative to the SourceMapGenerator.\n */\nSourceMapGenerator.prototype.applySourceMap =\n function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) {\n var sourceFile = aSourceFile;\n // If aSourceFile is omitted, we will use the file property of the SourceMap\n if (aSourceFile == null) {\n if (aSourceMapConsumer.file == null) {\n throw new Error(\n 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' +\n 'or the source map\\'s \"file\" property. Both were omitted.'\n );\n }\n sourceFile = aSourceMapConsumer.file;\n }\n var sourceRoot = this._sourceRoot;\n // Make \"sourceFile\" relative if an absolute Url is passed.\n if (sourceRoot != null) {\n sourceFile = util.relative(sourceRoot, sourceFile);\n }\n // Applying the SourceMap can add and remove items from the sources and\n // the names array.\n var newSources = new ArraySet();\n var newNames = new ArraySet();\n\n // Find mappings for the \"sourceFile\"\n this._mappings.unsortedForEach(function (mapping) {\n if (mapping.source === sourceFile && mapping.originalLine != null) {\n // Check if it can be mapped by the source map, then update the mapping.\n var original = aSourceMapConsumer.originalPositionFor({\n line: mapping.originalLine,\n column: mapping.originalColumn\n });\n if (original.source != null) {\n // Copy mapping\n mapping.source = original.source;\n if (aSourceMapPath != null) {\n mapping.source = util.join(aSourceMapPath, mapping.source)\n }\n if (sourceRoot != null) {\n mapping.source = util.relative(sourceRoot, mapping.source);\n }\n mapping.originalLine = original.line;\n mapping.originalColumn = original.column;\n if (original.name != null) {\n mapping.name = original.name;\n }\n }\n }\n\n var source = mapping.source;\n if (source != null && !newSources.has(source)) {\n newSources.add(source);\n }\n\n var name = mapping.name;\n if (name != null && !newNames.has(name)) {\n newNames.add(name);\n }\n\n }, this);\n this._sources = newSources;\n this._names = newNames;\n\n // Copy sourcesContents of applied map.\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n if (aSourceMapPath != null) {\n sourceFile = util.join(aSourceMapPath, sourceFile);\n }\n if (sourceRoot != null) {\n sourceFile = util.relative(sourceRoot, sourceFile);\n }\n this.setSourceContent(sourceFile, content);\n }\n }, this);\n };\n\n/**\n * A mapping can have one of the three levels of data:\n *\n * 1. Just the generated position.\n * 2. The Generated position, original position, and original source.\n * 3. Generated and original position, original source, as well as a name\n * token.\n *\n * To maintain consistency, we validate that any new mapping being added falls\n * in to one of these categories.\n */\nSourceMapGenerator.prototype._validateMapping =\n function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource,\n aName) {\n // When aOriginal is truthy but has empty values for .line and .column,\n // it is most likely a programmer error. In this case we throw a very\n // specific error message to try to guide them the right way.\n // For example: https://github.com/Polymer/polymer-bundler/pull/519\n if (aOriginal && typeof aOriginal.line !== 'number' && typeof aOriginal.column !== 'number') {\n throw new Error(\n 'original.line and original.column are not numbers -- you probably meant to omit ' +\n 'the original mapping entirely and only map the generated position. If so, pass ' +\n 'null for the original mapping instead of an object with empty or null values.'\n );\n }\n\n if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n && aGenerated.line > 0 && aGenerated.column >= 0\n && !aOriginal && !aSource && !aName) {\n // Case 1.\n return;\n }\n else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated\n && aOriginal && 'line' in aOriginal && 'column' in aOriginal\n && aGenerated.line > 0 && aGenerated.column >= 0\n && aOriginal.line > 0 && aOriginal.column >= 0\n && aSource) {\n // Cases 2 and 3.\n return;\n }\n else {\n throw new Error('Invalid mapping: ' + JSON.stringify({\n generated: aGenerated,\n source: aSource,\n original: aOriginal,\n name: aName\n }));\n }\n };\n\n/**\n * Serialize the accumulated mappings in to the stream of base 64 VLQs\n * specified by the source map format.\n */\nSourceMapGenerator.prototype._serializeMappings =\n function SourceMapGenerator_serializeMappings() {\n var previousGeneratedColumn = 0;\n var previousGeneratedLine = 1;\n var previousOriginalColumn = 0;\n var previousOriginalLine = 0;\n var previousName = 0;\n var previousSource = 0;\n var result = '';\n var next;\n var mapping;\n var nameIdx;\n var sourceIdx;\n\n var mappings = this._mappings.toArray();\n for (var i = 0, len = mappings.length; i < len; i++) {\n mapping = mappings[i];\n next = ''\n\n if (mapping.generatedLine !== previousGeneratedLine) {\n previousGeneratedColumn = 0;\n while (mapping.generatedLine !== previousGeneratedLine) {\n next += ';';\n previousGeneratedLine++;\n }\n }\n else {\n if (i > 0) {\n if (!util.compareByGeneratedPositionsInflated(mapping, mappings[i - 1])) {\n continue;\n }\n next += ',';\n }\n }\n\n next += base64VLQ.encode(mapping.generatedColumn\n - previousGeneratedColumn);\n previousGeneratedColumn = mapping.generatedColumn;\n\n if (mapping.source != null) {\n sourceIdx = this._sources.indexOf(mapping.source);\n next += base64VLQ.encode(sourceIdx - previousSource);\n previousSource = sourceIdx;\n\n // lines are stored 0-based in SourceMap spec version 3\n next += base64VLQ.encode(mapping.originalLine - 1\n - previousOriginalLine);\n previousOriginalLine = mapping.originalLine - 1;\n\n next += base64VLQ.encode(mapping.originalColumn\n - previousOriginalColumn);\n previousOriginalColumn = mapping.originalColumn;\n\n if (mapping.name != null) {\n nameIdx = this._names.indexOf(mapping.name);\n next += base64VLQ.encode(nameIdx - previousName);\n previousName = nameIdx;\n }\n }\n\n result += next;\n }\n\n return result;\n };\n\nSourceMapGenerator.prototype._generateSourcesContent =\n function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) {\n return aSources.map(function (source) {\n if (!this._sourcesContents) {\n return null;\n }\n if (aSourceRoot != null) {\n source = util.relative(aSourceRoot, source);\n }\n var key = util.toSetString(source);\n return Object.prototype.hasOwnProperty.call(this._sourcesContents, key)\n ? this._sourcesContents[key]\n : null;\n }, this);\n };\n\n/**\n * Externalize the source map.\n */\nSourceMapGenerator.prototype.toJSON =\n function SourceMapGenerator_toJSON() {\n var map = {\n version: this._version,\n sources: this._sources.toArray(),\n names: this._names.toArray(),\n mappings: this._serializeMappings()\n };\n if (this._file != null) {\n map.file = this._file;\n }\n if (this._sourceRoot != null) {\n map.sourceRoot = this._sourceRoot;\n }\n if (this._sourcesContents) {\n map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot);\n }\n\n return map;\n };\n\n/**\n * Render the source map being generated to a string.\n */\nSourceMapGenerator.prototype.toString =\n function SourceMapGenerator_toString() {\n return JSON.stringify(this.toJSON());\n };\n\nexports.SourceMapGenerator = SourceMapGenerator;\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nexports.GREATEST_LOWER_BOUND = 1;\nexports.LEAST_UPPER_BOUND = 2;\n\n/**\n * Recursive implementation of binary search.\n *\n * @param aLow Indices here and lower do not contain the needle.\n * @param aHigh Indices here and higher do not contain the needle.\n * @param aNeedle The element being searched for.\n * @param aHaystack The non-empty array being searched.\n * @param aCompare Function which takes two elements and returns -1, 0, or 1.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n */\nfunction recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare, aBias) {\n // This function terminates when one of the following is true:\n //\n // 1. We find the exact element we are looking for.\n //\n // 2. We did not find the exact element, but we can return the index of\n // the next-closest element.\n //\n // 3. We did not find the exact element, and there is no next-closest\n // element than the one we are searching for, so we return -1.\n var mid = Math.floor((aHigh - aLow) / 2) + aLow;\n var cmp = aCompare(aNeedle, aHaystack[mid], true);\n if (cmp === 0) {\n // Found the element we are looking for.\n return mid;\n }\n else if (cmp > 0) {\n // Our needle is greater than aHaystack[mid].\n if (aHigh - mid > 1) {\n // The element is in the upper half.\n return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare, aBias);\n }\n\n // The exact needle element was not found in this haystack. Determine if\n // we are in termination case (3) or (2) and return the appropriate thing.\n if (aBias == exports.LEAST_UPPER_BOUND) {\n return aHigh < aHaystack.length ? aHigh : -1;\n } else {\n return mid;\n }\n }\n else {\n // Our needle is less than aHaystack[mid].\n if (mid - aLow > 1) {\n // The element is in the lower half.\n return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare, aBias);\n }\n\n // we are in termination case (3) or (2) and return the appropriate thing.\n if (aBias == exports.LEAST_UPPER_BOUND) {\n return mid;\n } else {\n return aLow < 0 ? -1 : aLow;\n }\n }\n}\n\n/**\n * This is an implementation of binary search which will always try and return\n * the index of the closest element if there is no exact hit. This is because\n * mappings between original and generated line/col pairs are single points,\n * and there is an implicit region between each of them, so a miss just means\n * that you aren't on the very start of a region.\n *\n * @param aNeedle The element you are looking for.\n * @param aHaystack The array that is being searched.\n * @param aCompare A function which takes the needle and an element in the\n * array and returns -1, 0, or 1 depending on whether the needle is less\n * than, equal to, or greater than the element, respectively.\n * @param aBias Either 'binarySearch.GREATEST_LOWER_BOUND' or\n * 'binarySearch.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'binarySearch.GREATEST_LOWER_BOUND'.\n */\nexports.search = function search(aNeedle, aHaystack, aCompare, aBias) {\n if (aHaystack.length === 0) {\n return -1;\n }\n\n var index = recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack,\n aCompare, aBias || exports.GREATEST_LOWER_BOUND);\n if (index < 0) {\n return -1;\n }\n\n // We have found either the exact element, or the next-closest element than\n // the one we are searching for. However, there may be more than one such\n // element. Make sure we always return the smallest of these.\n while (index - 1 >= 0) {\n if (aCompare(aHaystack[index], aHaystack[index - 1], true) !== 0) {\n break;\n }\n --index;\n }\n\n return index;\n};\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\n// It turns out that some (most?) JavaScript engines don't self-host\n// `Array.prototype.sort`. This makes sense because C++ will likely remain\n// faster than JS when doing raw CPU-intensive sorting. However, when using a\n// custom comparator function, calling back and forth between the VM's C++ and\n// JIT'd JS is rather slow *and* loses JIT type information, resulting in\n// worse generated code for the comparator function than would be optimal. In\n// fact, when sorting with a comparator, these costs outweigh the benefits of\n// sorting in C++. By using our own JS-implemented Quick Sort (below), we get\n// a ~3500ms mean speed-up in `bench/bench.html`.\n\n/**\n * Swap the elements indexed by `x` and `y` in the array `ary`.\n *\n * @param {Array} ary\n * The array.\n * @param {Number} x\n * The index of the first item.\n * @param {Number} y\n * The index of the second item.\n */\nfunction swap(ary, x, y) {\n var temp = ary[x];\n ary[x] = ary[y];\n ary[y] = temp;\n}\n\n/**\n * Returns a random integer within the range `low .. high` inclusive.\n *\n * @param {Number} low\n * The lower bound on the range.\n * @param {Number} high\n * The upper bound on the range.\n */\nfunction randomIntInRange(low, high) {\n return Math.round(low + (Math.random() * (high - low)));\n}\n\n/**\n * The Quick Sort algorithm.\n *\n * @param {Array} ary\n * An array to sort.\n * @param {function} comparator\n * Function to use to compare two items.\n * @param {Number} p\n * Start index of the array\n * @param {Number} r\n * End index of the array\n */\nfunction doQuickSort(ary, comparator, p, r) {\n // If our lower bound is less than our upper bound, we (1) partition the\n // array into two pieces and (2) recurse on each half. If it is not, this is\n // the empty array and our base case.\n\n if (p < r) {\n // (1) Partitioning.\n //\n // The partitioning chooses a pivot between `p` and `r` and moves all\n // elements that are less than or equal to the pivot to the before it, and\n // all the elements that are greater than it after it. The effect is that\n // once partition is done, the pivot is in the exact place it will be when\n // the array is put in sorted order, and it will not need to be moved\n // again. This runs in O(n) time.\n\n // Always choose a random pivot so that an input array which is reverse\n // sorted does not cause O(n^2) running time.\n var pivotIndex = randomIntInRange(p, r);\n var i = p - 1;\n\n swap(ary, pivotIndex, r);\n var pivot = ary[r];\n\n // Immediately after `j` is incremented in this loop, the following hold\n // true:\n //\n // * Every element in `ary[p .. i]` is less than or equal to the pivot.\n //\n // * Every element in `ary[i+1 .. j-1]` is greater than the pivot.\n for (var j = p; j < r; j++) {\n if (comparator(ary[j], pivot) <= 0) {\n i += 1;\n swap(ary, i, j);\n }\n }\n\n swap(ary, i + 1, j);\n var q = i + 1;\n\n // (2) Recurse on each half.\n\n doQuickSort(ary, comparator, p, q - 1);\n doQuickSort(ary, comparator, q + 1, r);\n }\n}\n\n/**\n * Sort the given array in-place with the given comparator function.\n *\n * @param {Array} ary\n * An array to sort.\n * @param {function} comparator\n * Function to use to compare two items.\n */\nexports.quickSort = function (ary, comparator) {\n doQuickSort(ary, comparator, 0, ary.length - 1);\n};\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar util = require('./util');\nvar binarySearch = require('./binary-search');\nvar ArraySet = require('./array-set').ArraySet;\nvar base64VLQ = require('./base64-vlq');\nvar quickSort = require('./quick-sort').quickSort;\n\nfunction SourceMapConsumer(aSourceMap, aSourceMapURL) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = util.parseSourceMapInput(aSourceMap);\n }\n\n return sourceMap.sections != null\n ? new IndexedSourceMapConsumer(sourceMap, aSourceMapURL)\n : new BasicSourceMapConsumer(sourceMap, aSourceMapURL);\n}\n\nSourceMapConsumer.fromSourceMap = function(aSourceMap, aSourceMapURL) {\n return BasicSourceMapConsumer.fromSourceMap(aSourceMap, aSourceMapURL);\n}\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nSourceMapConsumer.prototype._version = 3;\n\n// `__generatedMappings` and `__originalMappings` are arrays that hold the\n// parsed mapping coordinates from the source map's \"mappings\" attribute. They\n// are lazily instantiated, accessed via the `_generatedMappings` and\n// `_originalMappings` getters respectively, and we only parse the mappings\n// and create these arrays once queried for a source location. We jump through\n// these hoops because there can be many thousands of mappings, and parsing\n// them is expensive, so we only want to do it if we must.\n//\n// Each object in the arrays is of the form:\n//\n// {\n// generatedLine: The line number in the generated code,\n// generatedColumn: The column number in the generated code,\n// source: The path to the original source file that generated this\n// chunk of code,\n// originalLine: The line number in the original source that\n// corresponds to this chunk of generated code,\n// originalColumn: The column number in the original source that\n// corresponds to this chunk of generated code,\n// name: The name of the original symbol which generated this chunk of\n// code.\n// }\n//\n// All properties except for `generatedLine` and `generatedColumn` can be\n// `null`.\n//\n// `_generatedMappings` is ordered by the generated positions.\n//\n// `_originalMappings` is ordered by the original positions.\n\nSourceMapConsumer.prototype.__generatedMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', {\n configurable: true,\n enumerable: true,\n get: function () {\n if (!this.__generatedMappings) {\n this._parseMappings(this._mappings, this.sourceRoot);\n }\n\n return this.__generatedMappings;\n }\n});\n\nSourceMapConsumer.prototype.__originalMappings = null;\nObject.defineProperty(SourceMapConsumer.prototype, '_originalMappings', {\n configurable: true,\n enumerable: true,\n get: function () {\n if (!this.__originalMappings) {\n this._parseMappings(this._mappings, this.sourceRoot);\n }\n\n return this.__originalMappings;\n }\n});\n\nSourceMapConsumer.prototype._charIsMappingSeparator =\n function SourceMapConsumer_charIsMappingSeparator(aStr, index) {\n var c = aStr.charAt(index);\n return c === \";\" || c === \",\";\n };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nSourceMapConsumer.prototype._parseMappings =\n function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n throw new Error(\"Subclasses must implement _parseMappings\");\n };\n\nSourceMapConsumer.GENERATED_ORDER = 1;\nSourceMapConsumer.ORIGINAL_ORDER = 2;\n\nSourceMapConsumer.GREATEST_LOWER_BOUND = 1;\nSourceMapConsumer.LEAST_UPPER_BOUND = 2;\n\n/**\n * Iterate over each mapping between an original source/line/column and a\n * generated line/column in this source map.\n *\n * @param Function aCallback\n * The function that is called with each mapping.\n * @param Object aContext\n * Optional. If specified, this object will be the value of `this` every\n * time that `aCallback` is called.\n * @param aOrder\n * Either `SourceMapConsumer.GENERATED_ORDER` or\n * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to\n * iterate over the mappings sorted by the generated file's line/column\n * order or the original's source/line/column order, respectively. Defaults to\n * `SourceMapConsumer.GENERATED_ORDER`.\n */\nSourceMapConsumer.prototype.eachMapping =\n function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) {\n var context = aContext || null;\n var order = aOrder || SourceMapConsumer.GENERATED_ORDER;\n\n var mappings;\n switch (order) {\n case SourceMapConsumer.GENERATED_ORDER:\n mappings = this._generatedMappings;\n break;\n case SourceMapConsumer.ORIGINAL_ORDER:\n mappings = this._originalMappings;\n break;\n default:\n throw new Error(\"Unknown order of iteration.\");\n }\n\n var sourceRoot = this.sourceRoot;\n mappings.map(function (mapping) {\n var source = mapping.source === null ? null : this._sources.at(mapping.source);\n source = util.computeSourceURL(sourceRoot, source, this._sourceMapURL);\n return {\n source: source,\n generatedLine: mapping.generatedLine,\n generatedColumn: mapping.generatedColumn,\n originalLine: mapping.originalLine,\n originalColumn: mapping.originalColumn,\n name: mapping.name === null ? null : this._names.at(mapping.name)\n };\n }, this).forEach(aCallback, context);\n };\n\n/**\n * Returns all generated line and column information for the original source,\n * line, and column provided. If no column is provided, returns all mappings\n * corresponding to a either the line we are searching for or the next\n * closest line that has any mappings. Otherwise, returns all mappings\n * corresponding to the given line and either the column we are searching for\n * or the next closest column that has any offsets.\n *\n * The only argument is an object with the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source. The line number is 1-based.\n * - column: Optional. the column number in the original source.\n * The column number is 0-based.\n *\n * and an array of objects is returned, each with the following properties:\n *\n * - line: The line number in the generated source, or null. The\n * line number is 1-based.\n * - column: The column number in the generated source, or null.\n * The column number is 0-based.\n */\nSourceMapConsumer.prototype.allGeneratedPositionsFor =\n function SourceMapConsumer_allGeneratedPositionsFor(aArgs) {\n var line = util.getArg(aArgs, 'line');\n\n // When there is no exact match, BasicSourceMapConsumer.prototype._findMapping\n // returns the index of the closest mapping less than the needle. By\n // setting needle.originalColumn to 0, we thus find the last mapping for\n // the given line, provided such a mapping exists.\n var needle = {\n source: util.getArg(aArgs, 'source'),\n originalLine: line,\n originalColumn: util.getArg(aArgs, 'column', 0)\n };\n\n needle.source = this._findSourceIndex(needle.source);\n if (needle.source < 0) {\n return [];\n }\n\n var mappings = [];\n\n var index = this._findMapping(needle,\n this._originalMappings,\n \"originalLine\",\n \"originalColumn\",\n util.compareByOriginalPositions,\n binarySearch.LEAST_UPPER_BOUND);\n if (index >= 0) {\n var mapping = this._originalMappings[index];\n\n if (aArgs.column === undefined) {\n var originalLine = mapping.originalLine;\n\n // Iterate until either we run out of mappings, or we run into\n // a mapping for a different line than the one we found. Since\n // mappings are sorted, this is guaranteed to find all mappings for\n // the line we found.\n while (mapping && mapping.originalLine === originalLine) {\n mappings.push({\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n });\n\n mapping = this._originalMappings[++index];\n }\n } else {\n var originalColumn = mapping.originalColumn;\n\n // Iterate until either we run out of mappings, or we run into\n // a mapping for a different line than the one we were searching for.\n // Since mappings are sorted, this is guaranteed to find all mappings for\n // the line we are searching for.\n while (mapping &&\n mapping.originalLine === line &&\n mapping.originalColumn == originalColumn) {\n mappings.push({\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n });\n\n mapping = this._originalMappings[++index];\n }\n }\n }\n\n return mappings;\n };\n\nexports.SourceMapConsumer = SourceMapConsumer;\n\n/**\n * A BasicSourceMapConsumer instance represents a parsed source map which we can\n * query for information about the original file positions by giving it a file\n * position in the generated source.\n *\n * The first parameter is the raw source map (either as a JSON string, or\n * already parsed to an object). According to the spec, source maps have the\n * following attributes:\n *\n * - version: Which version of the source map spec this map is following.\n * - sources: An array of URLs to the original source files.\n * - names: An array of identifiers which can be referrenced by individual mappings.\n * - sourceRoot: Optional. The URL root from which all sources are relative.\n * - sourcesContent: Optional. An array of contents of the original source files.\n * - mappings: A string of base64 VLQs which contain the actual mappings.\n * - file: Optional. The generated file this source map is associated with.\n *\n * Here is an example source map, taken from the source map spec[0]:\n *\n * {\n * version : 3,\n * file: \"out.js\",\n * sourceRoot : \"\",\n * sources: [\"foo.js\", \"bar.js\"],\n * names: [\"src\", \"maps\", \"are\", \"fun\"],\n * mappings: \"AA,AB;;ABCDE;\"\n * }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found. This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1#\n */\nfunction BasicSourceMapConsumer(aSourceMap, aSourceMapURL) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = util.parseSourceMapInput(aSourceMap);\n }\n\n var version = util.getArg(sourceMap, 'version');\n var sources = util.getArg(sourceMap, 'sources');\n // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which\n // requires the array) to play nice here.\n var names = util.getArg(sourceMap, 'names', []);\n var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null);\n var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null);\n var mappings = util.getArg(sourceMap, 'mappings');\n var file = util.getArg(sourceMap, 'file', null);\n\n // Once again, Sass deviates from the spec and supplies the version as a\n // string rather than a number, so we use loose equality checking here.\n if (version != this._version) {\n throw new Error('Unsupported version: ' + version);\n }\n\n if (sourceRoot) {\n sourceRoot = util.normalize(sourceRoot);\n }\n\n sources = sources\n .map(String)\n // Some source maps produce relative source paths like \"./foo.js\" instead of\n // \"foo.js\". Normalize these first so that future comparisons will succeed.\n // See bugzil.la/1090768.\n .map(util.normalize)\n // Always ensure that absolute sources are internally stored relative to\n // the source root, if the source root is absolute. Not doing this would\n // be particularly problematic when the source root is a prefix of the\n // source (valid, but why??). See github issue #199 and bugzil.la/1188982.\n .map(function (source) {\n return sourceRoot && util.isAbsolute(sourceRoot) && util.isAbsolute(source)\n ? util.relative(sourceRoot, source)\n : source;\n });\n\n // Pass `true` below to allow duplicate names and sources. While source maps\n // are intended to be compressed and deduplicated, the TypeScript compiler\n // sometimes generates source maps with duplicates in them. See Github issue\n // #72 and bugzil.la/889492.\n this._names = ArraySet.fromArray(names.map(String), true);\n this._sources = ArraySet.fromArray(sources, true);\n\n this._absoluteSources = this._sources.toArray().map(function (s) {\n return util.computeSourceURL(sourceRoot, s, aSourceMapURL);\n });\n\n this.sourceRoot = sourceRoot;\n this.sourcesContent = sourcesContent;\n this._mappings = mappings;\n this._sourceMapURL = aSourceMapURL;\n this.file = file;\n}\n\nBasicSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nBasicSourceMapConsumer.prototype.consumer = SourceMapConsumer;\n\n/**\n * Utility function to find the index of a source. Returns -1 if not\n * found.\n */\nBasicSourceMapConsumer.prototype._findSourceIndex = function(aSource) {\n var relativeSource = aSource;\n if (this.sourceRoot != null) {\n relativeSource = util.relative(this.sourceRoot, relativeSource);\n }\n\n if (this._sources.has(relativeSource)) {\n return this._sources.indexOf(relativeSource);\n }\n\n // Maybe aSource is an absolute URL as returned by |sources|. In\n // this case we can't simply undo the transform.\n var i;\n for (i = 0; i < this._absoluteSources.length; ++i) {\n if (this._absoluteSources[i] == aSource) {\n return i;\n }\n }\n\n return -1;\n};\n\n/**\n * Create a BasicSourceMapConsumer from a SourceMapGenerator.\n *\n * @param SourceMapGenerator aSourceMap\n * The source map that will be consumed.\n * @param String aSourceMapURL\n * The URL at which the source map can be found (optional)\n * @returns BasicSourceMapConsumer\n */\nBasicSourceMapConsumer.fromSourceMap =\n function SourceMapConsumer_fromSourceMap(aSourceMap, aSourceMapURL) {\n var smc = Object.create(BasicSourceMapConsumer.prototype);\n\n var names = smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true);\n var sources = smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true);\n smc.sourceRoot = aSourceMap._sourceRoot;\n smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(),\n smc.sourceRoot);\n smc.file = aSourceMap._file;\n smc._sourceMapURL = aSourceMapURL;\n smc._absoluteSources = smc._sources.toArray().map(function (s) {\n return util.computeSourceURL(smc.sourceRoot, s, aSourceMapURL);\n });\n\n // Because we are modifying the entries (by converting string sources and\n // names to indices into the sources and names ArraySets), we have to make\n // a copy of the entry or else bad things happen. Shared mutable state\n // strikes again! See github issue #191.\n\n var generatedMappings = aSourceMap._mappings.toArray().slice();\n var destGeneratedMappings = smc.__generatedMappings = [];\n var destOriginalMappings = smc.__originalMappings = [];\n\n for (var i = 0, length = generatedMappings.length; i < length; i++) {\n var srcMapping = generatedMappings[i];\n var destMapping = new Mapping;\n destMapping.generatedLine = srcMapping.generatedLine;\n destMapping.generatedColumn = srcMapping.generatedColumn;\n\n if (srcMapping.source) {\n destMapping.source = sources.indexOf(srcMapping.source);\n destMapping.originalLine = srcMapping.originalLine;\n destMapping.originalColumn = srcMapping.originalColumn;\n\n if (srcMapping.name) {\n destMapping.name = names.indexOf(srcMapping.name);\n }\n\n destOriginalMappings.push(destMapping);\n }\n\n destGeneratedMappings.push(destMapping);\n }\n\n quickSort(smc.__originalMappings, util.compareByOriginalPositions);\n\n return smc;\n };\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nBasicSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(BasicSourceMapConsumer.prototype, 'sources', {\n get: function () {\n return this._absoluteSources.slice();\n }\n});\n\n/**\n * Provide the JIT with a nice shape / hidden class.\n */\nfunction Mapping() {\n this.generatedLine = 0;\n this.generatedColumn = 0;\n this.source = null;\n this.originalLine = null;\n this.originalColumn = null;\n this.name = null;\n}\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nBasicSourceMapConsumer.prototype._parseMappings =\n function SourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n var generatedLine = 1;\n var previousGeneratedColumn = 0;\n var previousOriginalLine = 0;\n var previousOriginalColumn = 0;\n var previousSource = 0;\n var previousName = 0;\n var length = aStr.length;\n var index = 0;\n var cachedSegments = {};\n var temp = {};\n var originalMappings = [];\n var generatedMappings = [];\n var mapping, str, segment, end, value;\n\n while (index < length) {\n if (aStr.charAt(index) === ';') {\n generatedLine++;\n index++;\n previousGeneratedColumn = 0;\n }\n else if (aStr.charAt(index) === ',') {\n index++;\n }\n else {\n mapping = new Mapping();\n mapping.generatedLine = generatedLine;\n\n // Because each offset is encoded relative to the previous one,\n // many segments often have the same encoding. We can exploit this\n // fact by caching the parsed variable length fields of each segment,\n // allowing us to avoid a second parse if we encounter the same\n // segment again.\n for (end = index; end < length; end++) {\n if (this._charIsMappingSeparator(aStr, end)) {\n break;\n }\n }\n str = aStr.slice(index, end);\n\n segment = cachedSegments[str];\n if (segment) {\n index += str.length;\n } else {\n segment = [];\n while (index < end) {\n base64VLQ.decode(aStr, index, temp);\n value = temp.value;\n index = temp.rest;\n segment.push(value);\n }\n\n if (segment.length === 2) {\n throw new Error('Found a source, but no line and column');\n }\n\n if (segment.length === 3) {\n throw new Error('Found a source and line, but no column');\n }\n\n cachedSegments[str] = segment;\n }\n\n // Generated column.\n mapping.generatedColumn = previousGeneratedColumn + segment[0];\n previousGeneratedColumn = mapping.generatedColumn;\n\n if (segment.length > 1) {\n // Original source.\n mapping.source = previousSource + segment[1];\n previousSource += segment[1];\n\n // Original line.\n mapping.originalLine = previousOriginalLine + segment[2];\n previousOriginalLine = mapping.originalLine;\n // Lines are stored 0-based\n mapping.originalLine += 1;\n\n // Original column.\n mapping.originalColumn = previousOriginalColumn + segment[3];\n previousOriginalColumn = mapping.originalColumn;\n\n if (segment.length > 4) {\n // Original name.\n mapping.name = previousName + segment[4];\n previousName += segment[4];\n }\n }\n\n generatedMappings.push(mapping);\n if (typeof mapping.originalLine === 'number') {\n originalMappings.push(mapping);\n }\n }\n }\n\n quickSort(generatedMappings, util.compareByGeneratedPositionsDeflated);\n this.__generatedMappings = generatedMappings;\n\n quickSort(originalMappings, util.compareByOriginalPositions);\n this.__originalMappings = originalMappings;\n };\n\n/**\n * Find the mapping that best matches the hypothetical \"needle\" mapping that\n * we are searching for in the given \"haystack\" of mappings.\n */\nBasicSourceMapConsumer.prototype._findMapping =\n function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName,\n aColumnName, aComparator, aBias) {\n // To return the position we are searching for, we must first find the\n // mapping for the given position and then return the opposite position it\n // points to. Because the mappings are sorted, we can use binary search to\n // find the best mapping.\n\n if (aNeedle[aLineName] <= 0) {\n throw new TypeError('Line must be greater than or equal to 1, got '\n + aNeedle[aLineName]);\n }\n if (aNeedle[aColumnName] < 0) {\n throw new TypeError('Column must be greater than or equal to 0, got '\n + aNeedle[aColumnName]);\n }\n\n return binarySearch.search(aNeedle, aMappings, aComparator, aBias);\n };\n\n/**\n * Compute the last column for each generated mapping. The last column is\n * inclusive.\n */\nBasicSourceMapConsumer.prototype.computeColumnSpans =\n function SourceMapConsumer_computeColumnSpans() {\n for (var index = 0; index < this._generatedMappings.length; ++index) {\n var mapping = this._generatedMappings[index];\n\n // Mappings do not contain a field for the last generated columnt. We\n // can come up with an optimistic estimate, however, by assuming that\n // mappings are contiguous (i.e. given two consecutive mappings, the\n // first mapping ends where the second one starts).\n if (index + 1 < this._generatedMappings.length) {\n var nextMapping = this._generatedMappings[index + 1];\n\n if (mapping.generatedLine === nextMapping.generatedLine) {\n mapping.lastGeneratedColumn = nextMapping.generatedColumn - 1;\n continue;\n }\n }\n\n // The last mapping for each line spans the entire line.\n mapping.lastGeneratedColumn = Infinity;\n }\n };\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n * - line: The line number in the generated source. The line number\n * is 1-based.\n * - column: The column number in the generated source. The column\n * number is 0-based.\n * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n * - source: The original source file, or null.\n * - line: The line number in the original source, or null. The\n * line number is 1-based.\n * - column: The column number in the original source, or null. The\n * column number is 0-based.\n * - name: The original identifier, or null.\n */\nBasicSourceMapConsumer.prototype.originalPositionFor =\n function SourceMapConsumer_originalPositionFor(aArgs) {\n var needle = {\n generatedLine: util.getArg(aArgs, 'line'),\n generatedColumn: util.getArg(aArgs, 'column')\n };\n\n var index = this._findMapping(\n needle,\n this._generatedMappings,\n \"generatedLine\",\n \"generatedColumn\",\n util.compareByGeneratedPositionsDeflated,\n util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n );\n\n if (index >= 0) {\n var mapping = this._generatedMappings[index];\n\n if (mapping.generatedLine === needle.generatedLine) {\n var source = util.getArg(mapping, 'source', null);\n if (source !== null) {\n source = this._sources.at(source);\n source = util.computeSourceURL(this.sourceRoot, source, this._sourceMapURL);\n }\n var name = util.getArg(mapping, 'name', null);\n if (name !== null) {\n name = this._names.at(name);\n }\n return {\n source: source,\n line: util.getArg(mapping, 'originalLine', null),\n column: util.getArg(mapping, 'originalColumn', null),\n name: name\n };\n }\n }\n\n return {\n source: null,\n line: null,\n column: null,\n name: null\n };\n };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nBasicSourceMapConsumer.prototype.hasContentsOfAllSources =\n function BasicSourceMapConsumer_hasContentsOfAllSources() {\n if (!this.sourcesContent) {\n return false;\n }\n return this.sourcesContent.length >= this._sources.size() &&\n !this.sourcesContent.some(function (sc) { return sc == null; });\n };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nBasicSourceMapConsumer.prototype.sourceContentFor =\n function SourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n if (!this.sourcesContent) {\n return null;\n }\n\n var index = this._findSourceIndex(aSource);\n if (index >= 0) {\n return this.sourcesContent[index];\n }\n\n var relativeSource = aSource;\n if (this.sourceRoot != null) {\n relativeSource = util.relative(this.sourceRoot, relativeSource);\n }\n\n var url;\n if (this.sourceRoot != null\n && (url = util.urlParse(this.sourceRoot))) {\n // XXX: file:// URIs and absolute paths lead to unexpected behavior for\n // many users. We can help them out when they expect file:// URIs to\n // behave like it would if they were running a local HTTP server. See\n // https://bugzilla.mozilla.org/show_bug.cgi?id=885597.\n var fileUriAbsPath = relativeSource.replace(/^file:\\/\\//, \"\");\n if (url.scheme == \"file\"\n && this._sources.has(fileUriAbsPath)) {\n return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)]\n }\n\n if ((!url.path || url.path == \"/\")\n && this._sources.has(\"/\" + relativeSource)) {\n return this.sourcesContent[this._sources.indexOf(\"/\" + relativeSource)];\n }\n }\n\n // This function is used recursively from\n // IndexedSourceMapConsumer.prototype.sourceContentFor. In that case, we\n // don't want to throw if we can't find the source - we just want to\n // return null, so we provide a flag to exit gracefully.\n if (nullOnMissing) {\n return null;\n }\n else {\n throw new Error('\"' + relativeSource + '\" is not in the SourceMap.');\n }\n };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source. The line number\n * is 1-based.\n * - column: The column number in the original source. The column\n * number is 0-based.\n * - bias: Either 'SourceMapConsumer.GREATEST_LOWER_BOUND' or\n * 'SourceMapConsumer.LEAST_UPPER_BOUND'. Specifies whether to return the\n * closest element that is smaller than or greater than the one we are\n * searching for, respectively, if the exact element cannot be found.\n * Defaults to 'SourceMapConsumer.GREATEST_LOWER_BOUND'.\n *\n * and an object is returned with the following properties:\n *\n * - line: The line number in the generated source, or null. The\n * line number is 1-based.\n * - column: The column number in the generated source, or null.\n * The column number is 0-based.\n */\nBasicSourceMapConsumer.prototype.generatedPositionFor =\n function SourceMapConsumer_generatedPositionFor(aArgs) {\n var source = util.getArg(aArgs, 'source');\n source = this._findSourceIndex(source);\n if (source < 0) {\n return {\n line: null,\n column: null,\n lastColumn: null\n };\n }\n\n var needle = {\n source: source,\n originalLine: util.getArg(aArgs, 'line'),\n originalColumn: util.getArg(aArgs, 'column')\n };\n\n var index = this._findMapping(\n needle,\n this._originalMappings,\n \"originalLine\",\n \"originalColumn\",\n util.compareByOriginalPositions,\n util.getArg(aArgs, 'bias', SourceMapConsumer.GREATEST_LOWER_BOUND)\n );\n\n if (index >= 0) {\n var mapping = this._originalMappings[index];\n\n if (mapping.source === needle.source) {\n return {\n line: util.getArg(mapping, 'generatedLine', null),\n column: util.getArg(mapping, 'generatedColumn', null),\n lastColumn: util.getArg(mapping, 'lastGeneratedColumn', null)\n };\n }\n }\n\n return {\n line: null,\n column: null,\n lastColumn: null\n };\n };\n\nexports.BasicSourceMapConsumer = BasicSourceMapConsumer;\n\n/**\n * An IndexedSourceMapConsumer instance represents a parsed source map which\n * we can query for information. It differs from BasicSourceMapConsumer in\n * that it takes \"indexed\" source maps (i.e. ones with a \"sections\" field) as\n * input.\n *\n * The first parameter is a raw source map (either as a JSON string, or already\n * parsed to an object). According to the spec for indexed source maps, they\n * have the following attributes:\n *\n * - version: Which version of the source map spec this map is following.\n * - file: Optional. The generated file this source map is associated with.\n * - sections: A list of section definitions.\n *\n * Each value under the \"sections\" field has two fields:\n * - offset: The offset into the original specified at which this section\n * begins to apply, defined as an object with a \"line\" and \"column\"\n * field.\n * - map: A source map definition. This source map could also be indexed,\n * but doesn't have to be.\n *\n * Instead of the \"map\" field, it's also possible to have a \"url\" field\n * specifying a URL to retrieve a source map from, but that's currently\n * unsupported.\n *\n * Here's an example source map, taken from the source map spec[0], but\n * modified to omit a section which uses the \"url\" field.\n *\n * {\n * version : 3,\n * file: \"app.js\",\n * sections: [{\n * offset: {line:100, column:10},\n * map: {\n * version : 3,\n * file: \"section.js\",\n * sources: [\"foo.js\", \"bar.js\"],\n * names: [\"src\", \"maps\", \"are\", \"fun\"],\n * mappings: \"AAAA,E;;ABCDE;\"\n * }\n * }],\n * }\n *\n * The second parameter, if given, is a string whose value is the URL\n * at which the source map was found. This URL is used to compute the\n * sources array.\n *\n * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit#heading=h.535es3xeprgt\n */\nfunction IndexedSourceMapConsumer(aSourceMap, aSourceMapURL) {\n var sourceMap = aSourceMap;\n if (typeof aSourceMap === 'string') {\n sourceMap = util.parseSourceMapInput(aSourceMap);\n }\n\n var version = util.getArg(sourceMap, 'version');\n var sections = util.getArg(sourceMap, 'sections');\n\n if (version != this._version) {\n throw new Error('Unsupported version: ' + version);\n }\n\n this._sources = new ArraySet();\n this._names = new ArraySet();\n\n var lastOffset = {\n line: -1,\n column: 0\n };\n this._sections = sections.map(function (s) {\n if (s.url) {\n // The url field will require support for asynchronicity.\n // See https://github.com/mozilla/source-map/issues/16\n throw new Error('Support for url field in sections not implemented.');\n }\n var offset = util.getArg(s, 'offset');\n var offsetLine = util.getArg(offset, 'line');\n var offsetColumn = util.getArg(offset, 'column');\n\n if (offsetLine < lastOffset.line ||\n (offsetLine === lastOffset.line && offsetColumn < lastOffset.column)) {\n throw new Error('Section offsets must be ordered and non-overlapping.');\n }\n lastOffset = offset;\n\n return {\n generatedOffset: {\n // The offset fields are 0-based, but we use 1-based indices when\n // encoding/decoding from VLQ.\n generatedLine: offsetLine + 1,\n generatedColumn: offsetColumn + 1\n },\n consumer: new SourceMapConsumer(util.getArg(s, 'map'), aSourceMapURL)\n }\n });\n}\n\nIndexedSourceMapConsumer.prototype = Object.create(SourceMapConsumer.prototype);\nIndexedSourceMapConsumer.prototype.constructor = SourceMapConsumer;\n\n/**\n * The version of the source mapping spec that we are consuming.\n */\nIndexedSourceMapConsumer.prototype._version = 3;\n\n/**\n * The list of original sources.\n */\nObject.defineProperty(IndexedSourceMapConsumer.prototype, 'sources', {\n get: function () {\n var sources = [];\n for (var i = 0; i < this._sections.length; i++) {\n for (var j = 0; j < this._sections[i].consumer.sources.length; j++) {\n sources.push(this._sections[i].consumer.sources[j]);\n }\n }\n return sources;\n }\n});\n\n/**\n * Returns the original source, line, and column information for the generated\n * source's line and column positions provided. The only argument is an object\n * with the following properties:\n *\n * - line: The line number in the generated source. The line number\n * is 1-based.\n * - column: The column number in the generated source. The column\n * number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n * - source: The original source file, or null.\n * - line: The line number in the original source, or null. The\n * line number is 1-based.\n * - column: The column number in the original source, or null. The\n * column number is 0-based.\n * - name: The original identifier, or null.\n */\nIndexedSourceMapConsumer.prototype.originalPositionFor =\n function IndexedSourceMapConsumer_originalPositionFor(aArgs) {\n var needle = {\n generatedLine: util.getArg(aArgs, 'line'),\n generatedColumn: util.getArg(aArgs, 'column')\n };\n\n // Find the section containing the generated position we're trying to map\n // to an original position.\n var sectionIndex = binarySearch.search(needle, this._sections,\n function(needle, section) {\n var cmp = needle.generatedLine - section.generatedOffset.generatedLine;\n if (cmp) {\n return cmp;\n }\n\n return (needle.generatedColumn -\n section.generatedOffset.generatedColumn);\n });\n var section = this._sections[sectionIndex];\n\n if (!section) {\n return {\n source: null,\n line: null,\n column: null,\n name: null\n };\n }\n\n return section.consumer.originalPositionFor({\n line: needle.generatedLine -\n (section.generatedOffset.generatedLine - 1),\n column: needle.generatedColumn -\n (section.generatedOffset.generatedLine === needle.generatedLine\n ? section.generatedOffset.generatedColumn - 1\n : 0),\n bias: aArgs.bias\n });\n };\n\n/**\n * Return true if we have the source content for every source in the source\n * map, false otherwise.\n */\nIndexedSourceMapConsumer.prototype.hasContentsOfAllSources =\n function IndexedSourceMapConsumer_hasContentsOfAllSources() {\n return this._sections.every(function (s) {\n return s.consumer.hasContentsOfAllSources();\n });\n };\n\n/**\n * Returns the original source content. The only argument is the url of the\n * original source file. Returns null if no original source content is\n * available.\n */\nIndexedSourceMapConsumer.prototype.sourceContentFor =\n function IndexedSourceMapConsumer_sourceContentFor(aSource, nullOnMissing) {\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n\n var content = section.consumer.sourceContentFor(aSource, true);\n if (content) {\n return content;\n }\n }\n if (nullOnMissing) {\n return null;\n }\n else {\n throw new Error('\"' + aSource + '\" is not in the SourceMap.');\n }\n };\n\n/**\n * Returns the generated line and column information for the original source,\n * line, and column positions provided. The only argument is an object with\n * the following properties:\n *\n * - source: The filename of the original source.\n * - line: The line number in the original source. The line number\n * is 1-based.\n * - column: The column number in the original source. The column\n * number is 0-based.\n *\n * and an object is returned with the following properties:\n *\n * - line: The line number in the generated source, or null. The\n * line number is 1-based. \n * - column: The column number in the generated source, or null.\n * The column number is 0-based.\n */\nIndexedSourceMapConsumer.prototype.generatedPositionFor =\n function IndexedSourceMapConsumer_generatedPositionFor(aArgs) {\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n\n // Only consider this section if the requested source is in the list of\n // sources of the consumer.\n if (section.consumer._findSourceIndex(util.getArg(aArgs, 'source')) === -1) {\n continue;\n }\n var generatedPosition = section.consumer.generatedPositionFor(aArgs);\n if (generatedPosition) {\n var ret = {\n line: generatedPosition.line +\n (section.generatedOffset.generatedLine - 1),\n column: generatedPosition.column +\n (section.generatedOffset.generatedLine === generatedPosition.line\n ? section.generatedOffset.generatedColumn - 1\n : 0)\n };\n return ret;\n }\n }\n\n return {\n line: null,\n column: null\n };\n };\n\n/**\n * Parse the mappings in a string in to a data structure which we can easily\n * query (the ordered arrays in the `this.__generatedMappings` and\n * `this.__originalMappings` properties).\n */\nIndexedSourceMapConsumer.prototype._parseMappings =\n function IndexedSourceMapConsumer_parseMappings(aStr, aSourceRoot) {\n this.__generatedMappings = [];\n this.__originalMappings = [];\n for (var i = 0; i < this._sections.length; i++) {\n var section = this._sections[i];\n var sectionMappings = section.consumer._generatedMappings;\n for (var j = 0; j < sectionMappings.length; j++) {\n var mapping = sectionMappings[j];\n\n var source = section.consumer._sources.at(mapping.source);\n source = util.computeSourceURL(section.consumer.sourceRoot, source, this._sourceMapURL);\n this._sources.add(source);\n source = this._sources.indexOf(source);\n\n var name = null;\n if (mapping.name) {\n name = section.consumer._names.at(mapping.name);\n this._names.add(name);\n name = this._names.indexOf(name);\n }\n\n // The mappings coming from the consumer for the section have\n // generated positions relative to the start of the section, so we\n // need to offset them to be relative to the start of the concatenated\n // generated file.\n var adjustedMapping = {\n source: source,\n generatedLine: mapping.generatedLine +\n (section.generatedOffset.generatedLine - 1),\n generatedColumn: mapping.generatedColumn +\n (section.generatedOffset.generatedLine === mapping.generatedLine\n ? section.generatedOffset.generatedColumn - 1\n : 0),\n originalLine: mapping.originalLine,\n originalColumn: mapping.originalColumn,\n name: name\n };\n\n this.__generatedMappings.push(adjustedMapping);\n if (typeof adjustedMapping.originalLine === 'number') {\n this.__originalMappings.push(adjustedMapping);\n }\n }\n }\n\n quickSort(this.__generatedMappings, util.compareByGeneratedPositionsDeflated);\n quickSort(this.__originalMappings, util.compareByOriginalPositions);\n };\n\nexports.IndexedSourceMapConsumer = IndexedSourceMapConsumer;\n", "/* -*- Mode: js; js-indent-level: 2; -*- */\n/*\n * Copyright 2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\n\nvar SourceMapGenerator = require('./source-map-generator').SourceMapGenerator;\nvar util = require('./util');\n\n// Matches a Windows-style `\\r\\n` newline or a `\\n` newline used by all other\n// operating systems these days (capturing the result).\nvar REGEX_NEWLINE = /(\\r?\\n)/;\n\n// Newline character code for charCodeAt() comparisons\nvar NEWLINE_CODE = 10;\n\n// Private symbol for identifying `SourceNode`s when multiple versions of\n// the source-map library are loaded. This MUST NOT CHANGE across\n// versions!\nvar isSourceNode = \"$$$isSourceNode$$$\";\n\n/**\n * SourceNodes provide a way to abstract over interpolating/concatenating\n * snippets of generated JavaScript source code while maintaining the line and\n * column information associated with the original source code.\n *\n * @param aLine The original line number.\n * @param aColumn The original column number.\n * @param aSource The original source's filename.\n * @param aChunks Optional. An array of strings which are snippets of\n * generated JS, or other SourceNodes.\n * @param aName The original identifier.\n */\nfunction SourceNode(aLine, aColumn, aSource, aChunks, aName) {\n this.children = [];\n this.sourceContents = {};\n this.line = aLine == null ? null : aLine;\n this.column = aColumn == null ? null : aColumn;\n this.source = aSource == null ? null : aSource;\n this.name = aName == null ? null : aName;\n this[isSourceNode] = true;\n if (aChunks != null) this.add(aChunks);\n}\n\n/**\n * Creates a SourceNode from generated code and a SourceMapConsumer.\n *\n * @param aGeneratedCode The generated code\n * @param aSourceMapConsumer The SourceMap for the generated code\n * @param aRelativePath Optional. The path that relative sources in the\n * SourceMapConsumer should be relative to.\n */\nSourceNode.fromStringWithSourceMap =\n function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer, aRelativePath) {\n // The SourceNode we want to fill with the generated code\n // and the SourceMap\n var node = new SourceNode();\n\n // All even indices of this array are one line of the generated code,\n // while all odd indices are the newlines between two adjacent lines\n // (since `REGEX_NEWLINE` captures its match).\n // Processed fragments are accessed by calling `shiftNextLine`.\n var remainingLines = aGeneratedCode.split(REGEX_NEWLINE);\n var remainingLinesIndex = 0;\n var shiftNextLine = function() {\n var lineContents = getNextLine();\n // The last line of a file might not have a newline.\n var newLine = getNextLine() || \"\";\n return lineContents + newLine;\n\n function getNextLine() {\n return remainingLinesIndex < remainingLines.length ?\n remainingLines[remainingLinesIndex++] : undefined;\n }\n };\n\n // We need to remember the position of \"remainingLines\"\n var lastGeneratedLine = 1, lastGeneratedColumn = 0;\n\n // The generate SourceNodes we need a code range.\n // To extract it current and last mapping is used.\n // Here we store the last mapping.\n var lastMapping = null;\n\n aSourceMapConsumer.eachMapping(function (mapping) {\n if (lastMapping !== null) {\n // We add the code from \"lastMapping\" to \"mapping\":\n // First check if there is a new line in between.\n if (lastGeneratedLine < mapping.generatedLine) {\n // Associate first line with \"lastMapping\"\n addMappingWithCode(lastMapping, shiftNextLine());\n lastGeneratedLine++;\n lastGeneratedColumn = 0;\n // The remaining code is added without mapping\n } else {\n // There is no new line in between.\n // Associate the code between \"lastGeneratedColumn\" and\n // \"mapping.generatedColumn\" with \"lastMapping\"\n var nextLine = remainingLines[remainingLinesIndex] || '';\n var code = nextLine.substr(0, mapping.generatedColumn -\n lastGeneratedColumn);\n remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn -\n lastGeneratedColumn);\n lastGeneratedColumn = mapping.generatedColumn;\n addMappingWithCode(lastMapping, code);\n // No more remaining code, continue\n lastMapping = mapping;\n return;\n }\n }\n // We add the generated code until the first mapping\n // to the SourceNode without any mapping.\n // Each line is added as separate string.\n while (lastGeneratedLine < mapping.generatedLine) {\n node.add(shiftNextLine());\n lastGeneratedLine++;\n }\n if (lastGeneratedColumn < mapping.generatedColumn) {\n var nextLine = remainingLines[remainingLinesIndex] || '';\n node.add(nextLine.substr(0, mapping.generatedColumn));\n remainingLines[remainingLinesIndex] = nextLine.substr(mapping.generatedColumn);\n lastGeneratedColumn = mapping.generatedColumn;\n }\n lastMapping = mapping;\n }, this);\n // We have processed all mappings.\n if (remainingLinesIndex < remainingLines.length) {\n if (lastMapping) {\n // Associate the remaining code in the current line with \"lastMapping\"\n addMappingWithCode(lastMapping, shiftNextLine());\n }\n // and add the remaining lines without any mapping\n node.add(remainingLines.splice(remainingLinesIndex).join(\"\"));\n }\n\n // Copy sourcesContent into SourceNode\n aSourceMapConsumer.sources.forEach(function (sourceFile) {\n var content = aSourceMapConsumer.sourceContentFor(sourceFile);\n if (content != null) {\n if (aRelativePath != null) {\n sourceFile = util.join(aRelativePath, sourceFile);\n }\n node.setSourceContent(sourceFile, content);\n }\n });\n\n return node;\n\n function addMappingWithCode(mapping, code) {\n if (mapping === null || mapping.source === undefined) {\n node.add(code);\n } else {\n var source = aRelativePath\n ? util.join(aRelativePath, mapping.source)\n : mapping.source;\n node.add(new SourceNode(mapping.originalLine,\n mapping.originalColumn,\n source,\n code,\n mapping.name));\n }\n }\n };\n\n/**\n * Add a chunk of generated JS to this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n * SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.add = function SourceNode_add(aChunk) {\n if (Array.isArray(aChunk)) {\n aChunk.forEach(function (chunk) {\n this.add(chunk);\n }, this);\n }\n else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n if (aChunk) {\n this.children.push(aChunk);\n }\n }\n else {\n throw new TypeError(\n \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n );\n }\n return this;\n};\n\n/**\n * Add a chunk of generated JS to the beginning of this source node.\n *\n * @param aChunk A string snippet of generated JS code, another instance of\n * SourceNode, or an array where each member is one of those things.\n */\nSourceNode.prototype.prepend = function SourceNode_prepend(aChunk) {\n if (Array.isArray(aChunk)) {\n for (var i = aChunk.length-1; i >= 0; i--) {\n this.prepend(aChunk[i]);\n }\n }\n else if (aChunk[isSourceNode] || typeof aChunk === \"string\") {\n this.children.unshift(aChunk);\n }\n else {\n throw new TypeError(\n \"Expected a SourceNode, string, or an array of SourceNodes and strings. Got \" + aChunk\n );\n }\n return this;\n};\n\n/**\n * Walk over the tree of JS snippets in this node and its children. The\n * walking function is called once for each snippet of JS and is passed that\n * snippet and the its original associated source's line/column location.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walk = function SourceNode_walk(aFn) {\n var chunk;\n for (var i = 0, len = this.children.length; i < len; i++) {\n chunk = this.children[i];\n if (chunk[isSourceNode]) {\n chunk.walk(aFn);\n }\n else {\n if (chunk !== '') {\n aFn(chunk, { source: this.source,\n line: this.line,\n column: this.column,\n name: this.name });\n }\n }\n }\n};\n\n/**\n * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between\n * each of `this.children`.\n *\n * @param aSep The separator.\n */\nSourceNode.prototype.join = function SourceNode_join(aSep) {\n var newChildren;\n var i;\n var len = this.children.length;\n if (len > 0) {\n newChildren = [];\n for (i = 0; i < len-1; i++) {\n newChildren.push(this.children[i]);\n newChildren.push(aSep);\n }\n newChildren.push(this.children[i]);\n this.children = newChildren;\n }\n return this;\n};\n\n/**\n * Call String.prototype.replace on the very right-most source snippet. Useful\n * for trimming whitespace from the end of a source node, etc.\n *\n * @param aPattern The pattern to replace.\n * @param aReplacement The thing to replace the pattern with.\n */\nSourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) {\n var lastChild = this.children[this.children.length - 1];\n if (lastChild[isSourceNode]) {\n lastChild.replaceRight(aPattern, aReplacement);\n }\n else if (typeof lastChild === 'string') {\n this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement);\n }\n else {\n this.children.push(''.replace(aPattern, aReplacement));\n }\n return this;\n};\n\n/**\n * Set the source content for a source file. This will be added to the SourceMapGenerator\n * in the sourcesContent field.\n *\n * @param aSourceFile The filename of the source file\n * @param aSourceContent The content of the source file\n */\nSourceNode.prototype.setSourceContent =\n function SourceNode_setSourceContent(aSourceFile, aSourceContent) {\n this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent;\n };\n\n/**\n * Walk over the tree of SourceNodes. The walking function is called for each\n * source file content and is passed the filename and source content.\n *\n * @param aFn The traversal function.\n */\nSourceNode.prototype.walkSourceContents =\n function SourceNode_walkSourceContents(aFn) {\n for (var i = 0, len = this.children.length; i < len; i++) {\n if (this.children[i][isSourceNode]) {\n this.children[i].walkSourceContents(aFn);\n }\n }\n\n var sources = Object.keys(this.sourceContents);\n for (var i = 0, len = sources.length; i < len; i++) {\n aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]);\n }\n };\n\n/**\n * Return the string representation of this source node. Walks over the tree\n * and concatenates all the various snippets together to one string.\n */\nSourceNode.prototype.toString = function SourceNode_toString() {\n var str = \"\";\n this.walk(function (chunk) {\n str += chunk;\n });\n return str;\n};\n\n/**\n * Returns the string representation of this source node along with a source\n * map.\n */\nSourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) {\n var generated = {\n code: \"\",\n line: 1,\n column: 0\n };\n var map = new SourceMapGenerator(aArgs);\n var sourceMappingActive = false;\n var lastOriginalSource = null;\n var lastOriginalLine = null;\n var lastOriginalColumn = null;\n var lastOriginalName = null;\n this.walk(function (chunk, original) {\n generated.code += chunk;\n if (original.source !== null\n && original.line !== null\n && original.column !== null) {\n if(lastOriginalSource !== original.source\n || lastOriginalLine !== original.line\n || lastOriginalColumn !== original.column\n || lastOriginalName !== original.name) {\n map.addMapping({\n source: original.source,\n original: {\n line: original.line,\n column: original.column\n },\n generated: {\n line: generated.line,\n column: generated.column\n },\n name: original.name\n });\n }\n lastOriginalSource = original.source;\n lastOriginalLine = original.line;\n lastOriginalColumn = original.column;\n lastOriginalName = original.name;\n sourceMappingActive = true;\n } else if (sourceMappingActive) {\n map.addMapping({\n generated: {\n line: generated.line,\n column: generated.column\n }\n });\n lastOriginalSource = null;\n sourceMappingActive = false;\n }\n for (var idx = 0, length = chunk.length; idx < length; idx++) {\n if (chunk.charCodeAt(idx) === NEWLINE_CODE) {\n generated.line++;\n generated.column = 0;\n // Mappings end at eol\n if (idx + 1 === length) {\n lastOriginalSource = null;\n sourceMappingActive = false;\n } else if (sourceMappingActive) {\n map.addMapping({\n source: original.source,\n original: {\n line: original.line,\n column: original.column\n },\n generated: {\n line: generated.line,\n column: generated.column\n },\n name: original.name\n });\n }\n } else {\n generated.column++;\n }\n }\n });\n this.walkSourceContents(function (sourceFile, sourceContent) {\n map.setSourceContent(sourceFile, sourceContent);\n });\n\n return { code: generated.code, map: map };\n};\n\nexports.SourceNode = SourceNode;\n", "/*\n * Copyright 2009-2011 Mozilla Foundation and contributors\n * Licensed under the New BSD license. See LICENSE.txt or:\n * http://opensource.org/licenses/BSD-3-Clause\n */\nexports.SourceMapGenerator = require('./lib/source-map-generator').SourceMapGenerator;\nexports.SourceMapConsumer = require('./lib/source-map-consumer').SourceMapConsumer;\nexports.SourceNode = require('./lib/source-node').SourceNode;\n", "/* global define */\nimport { isArray } from '../utils';\n\nlet SourceNode;\n\ntry {\n /* istanbul ignore next */\n if (typeof define !== 'function' || !define.amd) {\n // We don't support this in AMD environments. For these environments, we asusme that\n // they are running on the browser and thus have no need for the source-map library.\n let SourceMap = require('source-map');\n SourceNode = SourceMap.SourceNode;\n }\n} catch (err) {\n /* NOP */\n}\n\n/* istanbul ignore if: tested but not covered in istanbul due to dist build */\nif (!SourceNode) {\n SourceNode = function(line, column, srcFile, chunks) {\n this.src = '';\n if (chunks) {\n this.add(chunks);\n }\n };\n /* istanbul ignore next */\n SourceNode.prototype = {\n add: function(chunks) {\n if (isArray(chunks)) {\n chunks = chunks.join('');\n }\n this.src += chunks;\n },\n prepend: function(chunks) {\n if (isArray(chunks)) {\n chunks = chunks.join('');\n }\n this.src = chunks + this.src;\n },\n toStringWithSourceMap: function() {\n return { code: this.toString() };\n },\n toString: function() {\n return this.src;\n }\n };\n}\n\nfunction castChunk(chunk, codeGen, loc) {\n if (isArray(chunk)) {\n let ret = [];\n\n for (let i = 0, len = chunk.length; i < len; i++) {\n ret.push(codeGen.wrap(chunk[i], loc));\n }\n return ret;\n } else if (typeof chunk === 'boolean' || typeof chunk === 'number') {\n // Handle primitives that the SourceNode will throw up on\n return chunk + '';\n }\n return chunk;\n}\n\nfunction CodeGen(srcFile) {\n this.srcFile = srcFile;\n this.source = [];\n}\n\nCodeGen.prototype = {\n isEmpty() {\n return !this.source.length;\n },\n prepend: function(source, loc) {\n this.source.unshift(this.wrap(source, loc));\n },\n push: function(source, loc) {\n this.source.push(this.wrap(source, loc));\n },\n\n merge: function() {\n let source = this.empty();\n this.each(function(line) {\n source.add([' ', line, '\\n']);\n });\n return source;\n },\n\n each: function(iter) {\n for (let i = 0, len = this.source.length; i < len; i++) {\n iter(this.source[i]);\n }\n },\n\n empty: function() {\n let loc = this.currentLocation || { start: {} };\n return new SourceNode(loc.start.line, loc.start.column, this.srcFile);\n },\n wrap: function(chunk, loc = this.currentLocation || { start: {} }) {\n if (chunk instanceof SourceNode) {\n return chunk;\n }\n\n chunk = castChunk(chunk, this, loc);\n\n return new SourceNode(\n loc.start.line,\n loc.start.column,\n this.srcFile,\n chunk\n );\n },\n\n functionCall: function(fn, type, params) {\n params = this.generateList(params);\n return this.wrap([fn, type ? '.' + type + '(' : '(', params, ')']);\n },\n\n quotedString: function(str) {\n return (\n '\"' +\n (str + '')\n .replace(/\\\\/g, '\\\\\\\\')\n .replace(/\"/g, '\\\\\"')\n .replace(/\\n/g, '\\\\n')\n .replace(/\\r/g, '\\\\r')\n .replace(/\\u2028/g, '\\\\u2028') // Per Ecma-262 7.3 + 7.8.4\n .replace(/\\u2029/g, '\\\\u2029') +\n '\"'\n );\n },\n\n objectLiteral: function(obj) {\n let pairs = [];\n\n Object.keys(obj).forEach(key => {\n let value = castChunk(obj[key], this);\n if (value !== 'undefined') {\n pairs.push([this.quotedString(key), ':', value]);\n }\n });\n\n let ret = this.generateList(pairs);\n ret.prepend('{');\n ret.add('}');\n return ret;\n },\n\n generateList: function(entries) {\n let ret = this.empty();\n\n for (let i = 0, len = entries.length; i < len; i++) {\n if (i) {\n ret.add(',');\n }\n\n ret.add(castChunk(entries[i], this));\n }\n\n return ret;\n },\n\n generateArray: function(entries) {\n let ret = this.generateList(entries);\n ret.prepend('[');\n ret.add(']');\n\n return ret;\n }\n};\n\nexport default CodeGen;\n", "import { COMPILER_REVISION, REVISION_CHANGES } from '../base';\nimport Exception from '../exception';\nimport { isArray } from '../utils';\nimport CodeGen from './code-gen';\n\nfunction Literal(value) {\n this.value = value;\n}\n\nfunction JavaScriptCompiler() {}\n\nJavaScriptCompiler.prototype = {\n // PUBLIC API: You can override these methods in a subclass to provide\n // alternative compiled forms for name lookup and buffering semantics\n nameLookup: function(parent, name /*, type */) {\n return this.internalNameLookup(parent, name);\n },\n depthedLookup: function(name) {\n return [\n this.aliasable('container.lookup'),\n '(depths, ',\n JSON.stringify(name),\n ')'\n ];\n },\n\n compilerInfo: function() {\n const revision = COMPILER_REVISION,\n versions = REVISION_CHANGES[revision];\n return [revision, versions];\n },\n\n appendToBuffer: function(source, location, explicit) {\n // Force a source as this simplifies the merge logic.\n if (!isArray(source)) {\n source = [source];\n }\n source = this.source.wrap(source, location);\n\n if (this.environment.isSimple) {\n return ['return ', source, ';'];\n } else if (explicit) {\n // This is a case where the buffer operation occurs as a child of another\n // construct, generally braces. We have to explicitly output these buffer\n // operations to ensure that the emitted code goes in the correct location.\n return ['buffer += ', source, ';'];\n } else {\n source.appendToBuffer = true;\n return source;\n }\n },\n\n initializeBuffer: function() {\n return this.quotedString('');\n },\n // END PUBLIC API\n internalNameLookup: function(parent, name) {\n this.lookupPropertyFunctionIsUsed = true;\n return ['lookupProperty(', parent, ',', JSON.stringify(name), ')'];\n },\n\n lookupPropertyFunctionIsUsed: false,\n\n compile: function(environment, options, context, asObject) {\n this.environment = environment;\n this.options = options;\n this.stringParams = this.options.stringParams;\n this.trackIds = this.options.trackIds;\n this.precompile = !asObject;\n\n this.name = this.environment.name;\n this.isChild = !!context;\n this.context = context || {\n decorators: [],\n programs: [],\n environments: []\n };\n\n this.preamble();\n\n this.stackSlot = 0;\n this.stackVars = [];\n this.aliases = {};\n this.registers = { list: [] };\n this.hashes = [];\n this.compileStack = [];\n this.inlineStack = [];\n this.blockParams = [];\n\n this.compileChildren(environment, options);\n\n this.useDepths =\n this.useDepths ||\n environment.useDepths ||\n environment.useDecorators ||\n this.options.compat;\n this.useBlockParams = this.useBlockParams || environment.useBlockParams;\n\n let opcodes = environment.opcodes,\n opcode,\n firstLoc,\n i,\n l;\n\n for (i = 0, l = opcodes.length; i < l; i++) {\n opcode = opcodes[i];\n\n this.source.currentLocation = opcode.loc;\n firstLoc = firstLoc || opcode.loc;\n this[opcode.opcode].apply(this, opcode.args);\n }\n\n // Flush any trailing content that might be pending.\n this.source.currentLocation = firstLoc;\n this.pushSource('');\n\n /* istanbul ignore next */\n if (this.stackSlot || this.inlineStack.length || this.compileStack.length) {\n throw new Exception('Compile completed with content left on stack');\n }\n\n if (!this.decorators.isEmpty()) {\n this.useDecorators = true;\n\n this.decorators.prepend([\n 'var decorators = container.decorators, ',\n this.lookupPropertyFunctionVarDeclaration(),\n ';\\n'\n ]);\n this.decorators.push('return fn;');\n\n if (asObject) {\n this.decorators = Function.apply(this, [\n 'fn',\n 'props',\n 'container',\n 'depth0',\n 'data',\n 'blockParams',\n 'depths',\n this.decorators.merge()\n ]);\n } else {\n this.decorators.prepend(\n 'function(fn, props, container, depth0, data, blockParams, depths) {\\n'\n );\n this.decorators.push('}\\n');\n this.decorators = this.decorators.merge();\n }\n } else {\n this.decorators = undefined;\n }\n\n let fn = this.createFunctionContext(asObject);\n if (!this.isChild) {\n let ret = {\n compiler: this.compilerInfo(),\n main: fn\n };\n\n if (this.decorators) {\n ret.main_d = this.decorators; // eslint-disable-line camelcase\n ret.useDecorators = true;\n }\n\n let { programs, decorators } = this.context;\n for (i = 0, l = programs.length; i < l; i++) {\n if (programs[i]) {\n ret[i] = programs[i];\n if (decorators[i]) {\n ret[i + '_d'] = decorators[i];\n ret.useDecorators = true;\n }\n }\n }\n\n if (this.environment.usePartial) {\n ret.usePartial = true;\n }\n if (this.options.data) {\n ret.useData = true;\n }\n if (this.useDepths) {\n ret.useDepths = true;\n }\n if (this.useBlockParams) {\n ret.useBlockParams = true;\n }\n if (this.options.compat) {\n ret.compat = true;\n }\n\n if (!asObject) {\n ret.compiler = JSON.stringify(ret.compiler);\n\n this.source.currentLocation = { start: { line: 1, column: 0 } };\n ret = this.objectLiteral(ret);\n\n if (options.srcName) {\n ret = ret.toStringWithSourceMap({ file: options.destName });\n ret.map = ret.map && ret.map.toString();\n } else {\n ret = ret.toString();\n }\n } else {\n ret.compilerOptions = this.options;\n }\n\n return ret;\n } else {\n return fn;\n }\n },\n\n preamble: function() {\n // track the last context pushed into place to allow skipping the\n // getContext opcode when it would be a noop\n this.lastContext = 0;\n this.source = new CodeGen(this.options.srcName);\n this.decorators = new CodeGen(this.options.srcName);\n },\n\n createFunctionContext: function(asObject) {\n let varDeclarations = '';\n\n let locals = this.stackVars.concat(this.registers.list);\n if (locals.length > 0) {\n varDeclarations += ', ' + locals.join(', ');\n }\n\n // Generate minimizer alias mappings\n //\n // When using true SourceNodes, this will update all references to the given alias\n // as the source nodes are reused in situ. For the non-source node compilation mode,\n // aliases will not be used, but this case is already being run on the client and\n // we aren't concern about minimizing the template size.\n let aliasCount = 0;\n Object.keys(this.aliases).forEach(alias => {\n let node = this.aliases[alias];\n if (node.children && node.referenceCount > 1) {\n varDeclarations += ', alias' + ++aliasCount + '=' + alias;\n node.children[0] = 'alias' + aliasCount;\n }\n });\n\n if (this.lookupPropertyFunctionIsUsed) {\n varDeclarations += ', ' + this.lookupPropertyFunctionVarDeclaration();\n }\n\n let params = ['container', 'depth0', 'helpers', 'partials', 'data'];\n\n if (this.useBlockParams || this.useDepths) {\n params.push('blockParams');\n }\n if (this.useDepths) {\n params.push('depths');\n }\n\n // Perform a second pass over the output to merge content when possible\n let source = this.mergeSource(varDeclarations);\n\n if (asObject) {\n params.push(source);\n\n return Function.apply(this, params);\n } else {\n return this.source.wrap([\n 'function(',\n params.join(','),\n ') {\\n ',\n source,\n '}'\n ]);\n }\n },\n mergeSource: function(varDeclarations) {\n let isSimple = this.environment.isSimple,\n appendOnly = !this.forceBuffer,\n appendFirst,\n sourceSeen,\n bufferStart,\n bufferEnd;\n this.source.each(line => {\n if (line.appendToBuffer) {\n if (bufferStart) {\n line.prepend(' + ');\n } else {\n bufferStart = line;\n }\n bufferEnd = line;\n } else {\n if (bufferStart) {\n if (!sourceSeen) {\n appendFirst = true;\n } else {\n bufferStart.prepend('buffer += ');\n }\n bufferEnd.add(';');\n bufferStart = bufferEnd = undefined;\n }\n\n sourceSeen = true;\n if (!isSimple) {\n appendOnly = false;\n }\n }\n });\n\n if (appendOnly) {\n if (bufferStart) {\n bufferStart.prepend('return ');\n bufferEnd.add(';');\n } else if (!sourceSeen) {\n this.source.push('return \"\";');\n }\n } else {\n varDeclarations +=\n ', buffer = ' + (appendFirst ? '' : this.initializeBuffer());\n\n if (bufferStart) {\n bufferStart.prepend('return buffer + ');\n bufferEnd.add(';');\n } else {\n this.source.push('return buffer;');\n }\n }\n\n if (varDeclarations) {\n this.source.prepend(\n 'var ' + varDeclarations.substring(2) + (appendFirst ? '' : ';\\n')\n );\n }\n\n return this.source.merge();\n },\n\n lookupPropertyFunctionVarDeclaration: function() {\n return `\n lookupProperty = container.lookupProperty || function(parent, propertyName) {\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return parent[propertyName];\n }\n return undefined\n }\n `.trim();\n },\n\n // [blockValue]\n //\n // On stack, before: hash, inverse, program, value\n // On stack, after: return value of blockHelperMissing\n //\n // The purpose of this opcode is to take a block of the form\n // `{{#this.foo}}...{{/this.foo}}`, resolve the value of `foo`, and\n // replace it on the stack with the result of properly\n // invoking blockHelperMissing.\n blockValue: function(name) {\n let blockHelperMissing = this.aliasable(\n 'container.hooks.blockHelperMissing'\n ),\n params = [this.contextName(0)];\n this.setupHelperArgs(name, 0, params);\n\n let blockName = this.popStack();\n params.splice(1, 0, blockName);\n\n this.push(this.source.functionCall(blockHelperMissing, 'call', params));\n },\n\n // [ambiguousBlockValue]\n //\n // On stack, before: hash, inverse, program, value\n // Compiler value, before: lastHelper=value of last found helper, if any\n // On stack, after, if no lastHelper: same as [blockValue]\n // On stack, after, if lastHelper: value\n ambiguousBlockValue: function() {\n // We're being a bit cheeky and reusing the options value from the prior exec\n let blockHelperMissing = this.aliasable(\n 'container.hooks.blockHelperMissing'\n ),\n params = [this.contextName(0)];\n this.setupHelperArgs('', 0, params, true);\n\n this.flushInline();\n\n let current = this.topStack();\n params.splice(1, 0, current);\n\n this.pushSource([\n 'if (!',\n this.lastHelper,\n ') { ',\n current,\n ' = ',\n this.source.functionCall(blockHelperMissing, 'call', params),\n '}'\n ]);\n },\n\n // [appendContent]\n //\n // On stack, before: ...\n // On stack, after: ...\n //\n // Appends the string value of `content` to the current buffer\n appendContent: function(content) {\n if (this.pendingContent) {\n content = this.pendingContent + content;\n } else {\n this.pendingLocation = this.source.currentLocation;\n }\n\n this.pendingContent = content;\n },\n\n // [append]\n //\n // On stack, before: value, ...\n // On stack, after: ...\n //\n // Coerces `value` to a String and appends it to the current buffer.\n //\n // If `value` is truthy, or 0, it is coerced into a string and appended\n // Otherwise, the empty string is appended\n append: function() {\n if (this.isInline()) {\n this.replaceStack(current => [' != null ? ', current, ' : \"\"']);\n\n this.pushSource(this.appendToBuffer(this.popStack()));\n } else {\n let local = this.popStack();\n this.pushSource([\n 'if (',\n local,\n ' != null) { ',\n this.appendToBuffer(local, undefined, true),\n ' }'\n ]);\n if (this.environment.isSimple) {\n this.pushSource([\n 'else { ',\n this.appendToBuffer(\"''\", undefined, true),\n ' }'\n ]);\n }\n }\n },\n\n // [appendEscaped]\n //\n // On stack, before: value, ...\n // On stack, after: ...\n //\n // Escape `value` and append it to the buffer\n appendEscaped: function() {\n this.pushSource(\n this.appendToBuffer([\n this.aliasable('container.escapeExpression'),\n '(',\n this.popStack(),\n ')'\n ])\n );\n },\n\n // [getContext]\n //\n // On stack, before: ...\n // On stack, after: ...\n // Compiler value, after: lastContext=depth\n //\n // Set the value of the `lastContext` compiler value to the depth\n getContext: function(depth) {\n this.lastContext = depth;\n },\n\n // [pushContext]\n //\n // On stack, before: ...\n // On stack, after: currentContext, ...\n //\n // Pushes the value of the current context onto the stack.\n pushContext: function() {\n this.pushStackLiteral(this.contextName(this.lastContext));\n },\n\n // [lookupOnContext]\n //\n // On stack, before: ...\n // On stack, after: currentContext[name], ...\n //\n // Looks up the value of `name` on the current context and pushes\n // it onto the stack.\n lookupOnContext: function(parts, falsy, strict, scoped) {\n let i = 0;\n\n if (!scoped && this.options.compat && !this.lastContext) {\n // The depthed query is expected to handle the undefined logic for the root level that\n // is implemented below, so we evaluate that directly in compat mode\n this.push(this.depthedLookup(parts[i++]));\n } else {\n this.pushContext();\n }\n\n this.resolvePath('context', parts, i, falsy, strict);\n },\n\n // [lookupBlockParam]\n //\n // On stack, before: ...\n // On stack, after: blockParam[name], ...\n //\n // Looks up the value of `parts` on the given block param and pushes\n // it onto the stack.\n lookupBlockParam: function(blockParamId, parts) {\n this.useBlockParams = true;\n\n this.push(['blockParams[', blockParamId[0], '][', blockParamId[1], ']']);\n this.resolvePath('context', parts, 1);\n },\n\n // [lookupData]\n //\n // On stack, before: ...\n // On stack, after: data, ...\n //\n // Push the data lookup operator\n lookupData: function(depth, parts, strict) {\n if (!depth) {\n this.pushStackLiteral('data');\n } else {\n this.pushStackLiteral('container.data(data, ' + depth + ')');\n }\n\n this.resolvePath('data', parts, 0, true, strict);\n },\n\n resolvePath: function(type, parts, i, falsy, strict) {\n if (this.options.strict || this.options.assumeObjects) {\n this.push(strictLookup(this.options.strict && strict, this, parts, type));\n return;\n }\n\n let len = parts.length;\n for (; i < len; i++) {\n /* eslint-disable no-loop-func */\n this.replaceStack(current => {\n let lookup = this.nameLookup(current, parts[i], type);\n // We want to ensure that zero and false are handled properly if the context (falsy flag)\n // needs to have the special handling for these values.\n if (!falsy) {\n return [' != null ? ', lookup, ' : ', current];\n } else {\n // Otherwise we can use generic falsy handling\n return [' && ', lookup];\n }\n });\n /* eslint-enable no-loop-func */\n }\n },\n\n // [resolvePossibleLambda]\n //\n // On stack, before: value, ...\n // On stack, after: resolved value, ...\n //\n // If the `value` is a lambda, replace it on the stack by\n // the return value of the lambda\n resolvePossibleLambda: function() {\n this.push([\n this.aliasable('container.lambda'),\n '(',\n this.popStack(),\n ', ',\n this.contextName(0),\n ')'\n ]);\n },\n\n // [pushStringParam]\n //\n // On stack, before: ...\n // On stack, after: string, currentContext, ...\n //\n // This opcode is designed for use in string mode, which\n // provides the string value of a parameter along with its\n // depth rather than resolving it immediately.\n pushStringParam: function(string, type) {\n this.pushContext();\n this.pushString(type);\n\n // If it's a subexpression, the string result\n // will be pushed after this opcode.\n if (type !== 'SubExpression') {\n if (typeof string === 'string') {\n this.pushString(string);\n } else {\n this.pushStackLiteral(string);\n }\n }\n },\n\n emptyHash: function(omitEmpty) {\n if (this.trackIds) {\n this.push('{}'); // hashIds\n }\n if (this.stringParams) {\n this.push('{}'); // hashContexts\n this.push('{}'); // hashTypes\n }\n this.pushStackLiteral(omitEmpty ? 'undefined' : '{}');\n },\n pushHash: function() {\n if (this.hash) {\n this.hashes.push(this.hash);\n }\n this.hash = { values: {}, types: [], contexts: [], ids: [] };\n },\n popHash: function() {\n let hash = this.hash;\n this.hash = this.hashes.pop();\n\n if (this.trackIds) {\n this.push(this.objectLiteral(hash.ids));\n }\n if (this.stringParams) {\n this.push(this.objectLiteral(hash.contexts));\n this.push(this.objectLiteral(hash.types));\n }\n\n this.push(this.objectLiteral(hash.values));\n },\n\n // [pushString]\n //\n // On stack, before: ...\n // On stack, after: quotedString(string), ...\n //\n // Push a quoted version of `string` onto the stack\n pushString: function(string) {\n this.pushStackLiteral(this.quotedString(string));\n },\n\n // [pushLiteral]\n //\n // On stack, before: ...\n // On stack, after: value, ...\n //\n // Pushes a value onto the stack. This operation prevents\n // the compiler from creating a temporary variable to hold\n // it.\n pushLiteral: function(value) {\n this.pushStackLiteral(value);\n },\n\n // [pushProgram]\n //\n // On stack, before: ...\n // On stack, after: program(guid), ...\n //\n // Push a program expression onto the stack. This takes\n // a compile-time guid and converts it into a runtime-accessible\n // expression.\n pushProgram: function(guid) {\n if (guid != null) {\n this.pushStackLiteral(this.programExpression(guid));\n } else {\n this.pushStackLiteral(null);\n }\n },\n\n // [registerDecorator]\n //\n // On stack, before: hash, program, params..., ...\n // On stack, after: ...\n //\n // Pops off the decorator's parameters, invokes the decorator,\n // and inserts the decorator into the decorators list.\n registerDecorator(paramSize, name) {\n let foundDecorator = this.nameLookup('decorators', name, 'decorator'),\n options = this.setupHelperArgs(name, paramSize);\n\n this.decorators.push([\n 'fn = ',\n this.decorators.functionCall(foundDecorator, '', [\n 'fn',\n 'props',\n 'container',\n options\n ]),\n ' || fn;'\n ]);\n },\n\n // [invokeHelper]\n //\n // On stack, before: hash, inverse, program, params..., ...\n // On stack, after: result of helper invocation\n //\n // Pops off the helper's parameters, invokes the helper,\n // and pushes the helper's return value onto the stack.\n //\n // If the helper is not found, `helperMissing` is called.\n invokeHelper: function(paramSize, name, isSimple) {\n let nonHelper = this.popStack(),\n helper = this.setupHelper(paramSize, name);\n\n let possibleFunctionCalls = [];\n\n if (isSimple) {\n // direct call to helper\n possibleFunctionCalls.push(helper.name);\n }\n // call a function from the input object\n possibleFunctionCalls.push(nonHelper);\n if (!this.options.strict) {\n possibleFunctionCalls.push(\n this.aliasable('container.hooks.helperMissing')\n );\n }\n\n let functionLookupCode = [\n '(',\n this.itemsSeparatedBy(possibleFunctionCalls, '||'),\n ')'\n ];\n let functionCall = this.source.functionCall(\n functionLookupCode,\n 'call',\n helper.callParams\n );\n this.push(functionCall);\n },\n\n itemsSeparatedBy: function(items, separator) {\n let result = [];\n result.push(items[0]);\n for (let i = 1; i < items.length; i++) {\n result.push(separator, items[i]);\n }\n return result;\n },\n // [invokeKnownHelper]\n //\n // On stack, before: hash, inverse, program, params..., ...\n // On stack, after: result of helper invocation\n //\n // This operation is used when the helper is known to exist,\n // so a `helperMissing` fallback is not required.\n invokeKnownHelper: function(paramSize, name) {\n let helper = this.setupHelper(paramSize, name);\n this.push(this.source.functionCall(helper.name, 'call', helper.callParams));\n },\n\n // [invokeAmbiguous]\n //\n // On stack, before: hash, inverse, program, params..., ...\n // On stack, after: result of disambiguation\n //\n // This operation is used when an expression like `{{foo}}`\n // is provided, but we don't know at compile-time whether it\n // is a helper or a path.\n //\n // This operation emits more code than the other options,\n // and can be avoided by passing the `knownHelpers` and\n // `knownHelpersOnly` flags at compile-time.\n invokeAmbiguous: function(name, helperCall) {\n this.useRegister('helper');\n\n let nonHelper = this.popStack();\n\n this.emptyHash();\n let helper = this.setupHelper(0, name, helperCall);\n\n let helperName = (this.lastHelper = this.nameLookup(\n 'helpers',\n name,\n 'helper'\n ));\n\n let lookup = ['(', '(helper = ', helperName, ' || ', nonHelper, ')'];\n if (!this.options.strict) {\n lookup[0] = '(helper = ';\n lookup.push(\n ' != null ? helper : ',\n this.aliasable('container.hooks.helperMissing')\n );\n }\n\n this.push([\n '(',\n lookup,\n helper.paramsInit ? ['),(', helper.paramsInit] : [],\n '),',\n '(typeof helper === ',\n this.aliasable('\"function\"'),\n ' ? ',\n this.source.functionCall('helper', 'call', helper.callParams),\n ' : helper))'\n ]);\n },\n\n // [invokePartial]\n //\n // On stack, before: context, ...\n // On stack after: result of partial invocation\n //\n // This operation pops off a context, invokes a partial with that context,\n // and pushes the result of the invocation back.\n invokePartial: function(isDynamic, name, indent) {\n let params = [],\n options = this.setupParams(name, 1, params);\n\n if (isDynamic) {\n name = this.popStack();\n delete options.name;\n }\n\n if (indent) {\n options.indent = JSON.stringify(indent);\n }\n options.helpers = 'helpers';\n options.partials = 'partials';\n options.decorators = 'container.decorators';\n\n if (!isDynamic) {\n params.unshift(this.nameLookup('partials', name, 'partial'));\n } else {\n params.unshift(name);\n }\n\n if (this.options.compat) {\n options.depths = 'depths';\n }\n options = this.objectLiteral(options);\n params.push(options);\n\n this.push(this.source.functionCall('container.invokePartial', '', params));\n },\n\n // [assignToHash]\n //\n // On stack, before: value, ..., hash, ...\n // On stack, after: ..., hash, ...\n //\n // Pops a value off the stack and assigns it to the current hash\n assignToHash: function(key) {\n let value = this.popStack(),\n context,\n type,\n id;\n\n if (this.trackIds) {\n id = this.popStack();\n }\n if (this.stringParams) {\n type = this.popStack();\n context = this.popStack();\n }\n\n let hash = this.hash;\n if (context) {\n hash.contexts[key] = context;\n }\n if (type) {\n hash.types[key] = type;\n }\n if (id) {\n hash.ids[key] = id;\n }\n hash.values[key] = value;\n },\n\n pushId: function(type, name, child) {\n if (type === 'BlockParam') {\n this.pushStackLiteral(\n 'blockParams[' +\n name[0] +\n '].path[' +\n name[1] +\n ']' +\n (child ? ' + ' + JSON.stringify('.' + child) : '')\n );\n } else if (type === 'PathExpression') {\n this.pushString(name);\n } else if (type === 'SubExpression') {\n this.pushStackLiteral('true');\n } else {\n this.pushStackLiteral('null');\n }\n },\n\n // HELPERS\n\n compiler: JavaScriptCompiler,\n\n compileChildren: function(environment, options) {\n let children = environment.children,\n child,\n compiler;\n\n for (let i = 0, l = children.length; i < l; i++) {\n child = children[i];\n compiler = new this.compiler(); // eslint-disable-line new-cap\n\n let existing = this.matchExistingProgram(child);\n\n if (existing == null) {\n this.context.programs.push(''); // Placeholder to prevent name conflicts for nested children\n let index = this.context.programs.length;\n child.index = index;\n child.name = 'program' + index;\n this.context.programs[index] = compiler.compile(\n child,\n options,\n this.context,\n !this.precompile\n );\n this.context.decorators[index] = compiler.decorators;\n this.context.environments[index] = child;\n\n this.useDepths = this.useDepths || compiler.useDepths;\n this.useBlockParams = this.useBlockParams || compiler.useBlockParams;\n child.useDepths = this.useDepths;\n child.useBlockParams = this.useBlockParams;\n } else {\n child.index = existing.index;\n child.name = 'program' + existing.index;\n\n this.useDepths = this.useDepths || existing.useDepths;\n this.useBlockParams = this.useBlockParams || existing.useBlockParams;\n }\n }\n },\n matchExistingProgram: function(child) {\n for (let i = 0, len = this.context.environments.length; i < len; i++) {\n let environment = this.context.environments[i];\n if (environment && environment.equals(child)) {\n return environment;\n }\n }\n },\n\n programExpression: function(guid) {\n let child = this.environment.children[guid],\n programParams = [child.index, 'data', child.blockParams];\n\n if (this.useBlockParams || this.useDepths) {\n programParams.push('blockParams');\n }\n if (this.useDepths) {\n programParams.push('depths');\n }\n\n return 'container.program(' + programParams.join(', ') + ')';\n },\n\n useRegister: function(name) {\n if (!this.registers[name]) {\n this.registers[name] = true;\n this.registers.list.push(name);\n }\n },\n\n push: function(expr) {\n if (!(expr instanceof Literal)) {\n expr = this.source.wrap(expr);\n }\n\n this.inlineStack.push(expr);\n return expr;\n },\n\n pushStackLiteral: function(item) {\n this.push(new Literal(item));\n },\n\n pushSource: function(source) {\n if (this.pendingContent) {\n this.source.push(\n this.appendToBuffer(\n this.source.quotedString(this.pendingContent),\n this.pendingLocation\n )\n );\n this.pendingContent = undefined;\n }\n\n if (source) {\n this.source.push(source);\n }\n },\n\n replaceStack: function(callback) {\n let prefix = ['('],\n stack,\n createdStack,\n usedLiteral;\n\n /* istanbul ignore next */\n if (!this.isInline()) {\n throw new Exception('replaceStack on non-inline');\n }\n\n // We want to merge the inline statement into the replacement statement via ','\n let top = this.popStack(true);\n\n if (top instanceof Literal) {\n // Literals do not need to be inlined\n stack = [top.value];\n prefix = ['(', stack];\n usedLiteral = true;\n } else {\n // Get or create the current stack name for use by the inline\n createdStack = true;\n let name = this.incrStack();\n\n prefix = ['((', this.push(name), ' = ', top, ')'];\n stack = this.topStack();\n }\n\n let item = callback.call(this, stack);\n\n if (!usedLiteral) {\n this.popStack();\n }\n if (createdStack) {\n this.stackSlot--;\n }\n this.push(prefix.concat(item, ')'));\n },\n\n incrStack: function() {\n this.stackSlot++;\n if (this.stackSlot > this.stackVars.length) {\n this.stackVars.push('stack' + this.stackSlot);\n }\n return this.topStackName();\n },\n topStackName: function() {\n return 'stack' + this.stackSlot;\n },\n flushInline: function() {\n let inlineStack = this.inlineStack;\n this.inlineStack = [];\n for (let i = 0, len = inlineStack.length; i < len; i++) {\n let entry = inlineStack[i];\n /* istanbul ignore if */\n if (entry instanceof Literal) {\n this.compileStack.push(entry);\n } else {\n let stack = this.incrStack();\n this.pushSource([stack, ' = ', entry, ';']);\n this.compileStack.push(stack);\n }\n }\n },\n isInline: function() {\n return this.inlineStack.length;\n },\n\n popStack: function(wrapped) {\n let inline = this.isInline(),\n item = (inline ? this.inlineStack : this.compileStack).pop();\n\n if (!wrapped && item instanceof Literal) {\n return item.value;\n } else {\n if (!inline) {\n /* istanbul ignore next */\n if (!this.stackSlot) {\n throw new Exception('Invalid stack pop');\n }\n this.stackSlot--;\n }\n return item;\n }\n },\n\n topStack: function() {\n let stack = this.isInline() ? this.inlineStack : this.compileStack,\n item = stack[stack.length - 1];\n\n /* istanbul ignore if */\n if (item instanceof Literal) {\n return item.value;\n } else {\n return item;\n }\n },\n\n contextName: function(context) {\n if (this.useDepths && context) {\n return 'depths[' + context + ']';\n } else {\n return 'depth' + context;\n }\n },\n\n quotedString: function(str) {\n return this.source.quotedString(str);\n },\n\n objectLiteral: function(obj) {\n return this.source.objectLiteral(obj);\n },\n\n aliasable: function(name) {\n let ret = this.aliases[name];\n if (ret) {\n ret.referenceCount++;\n return ret;\n }\n\n ret = this.aliases[name] = this.source.wrap(name);\n ret.aliasable = true;\n ret.referenceCount = 1;\n\n return ret;\n },\n\n setupHelper: function(paramSize, name, blockHelper) {\n let params = [],\n paramsInit = this.setupHelperArgs(name, paramSize, params, blockHelper);\n let foundHelper = this.nameLookup('helpers', name, 'helper'),\n callContext = this.aliasable(\n `${this.contextName(0)} != null ? ${this.contextName(\n 0\n )} : (container.nullContext || {})`\n );\n\n return {\n params: params,\n paramsInit: paramsInit,\n name: foundHelper,\n callParams: [callContext].concat(params)\n };\n },\n\n setupParams: function(helper, paramSize, params) {\n let options = {},\n contexts = [],\n types = [],\n ids = [],\n objectArgs = !params,\n param;\n\n if (objectArgs) {\n params = [];\n }\n\n options.name = this.quotedString(helper);\n options.hash = this.popStack();\n\n if (this.trackIds) {\n options.hashIds = this.popStack();\n }\n if (this.stringParams) {\n options.hashTypes = this.popStack();\n options.hashContexts = this.popStack();\n }\n\n let inverse = this.popStack(),\n program = this.popStack();\n\n // Avoid setting fn and inverse if neither are set. This allows\n // helpers to do a check for `if (options.fn)`\n if (program || inverse) {\n options.fn = program || 'container.noop';\n options.inverse = inverse || 'container.noop';\n }\n\n // The parameters go on to the stack in order (making sure that they are evaluated in order)\n // so we need to pop them off the stack in reverse order\n let i = paramSize;\n while (i--) {\n param = this.popStack();\n params[i] = param;\n\n if (this.trackIds) {\n ids[i] = this.popStack();\n }\n if (this.stringParams) {\n types[i] = this.popStack();\n contexts[i] = this.popStack();\n }\n }\n\n if (objectArgs) {\n options.args = this.source.generateArray(params);\n }\n\n if (this.trackIds) {\n options.ids = this.source.generateArray(ids);\n }\n if (this.stringParams) {\n options.types = this.source.generateArray(types);\n options.contexts = this.source.generateArray(contexts);\n }\n\n if (this.options.data) {\n options.data = 'data';\n }\n if (this.useBlockParams) {\n options.blockParams = 'blockParams';\n }\n return options;\n },\n\n setupHelperArgs: function(helper, paramSize, params, useRegister) {\n let options = this.setupParams(helper, paramSize, params);\n options.loc = JSON.stringify(this.source.currentLocation);\n options = this.objectLiteral(options);\n if (useRegister) {\n this.useRegister('options');\n params.push('options');\n return ['options=', options];\n } else if (params) {\n params.push(options);\n return '';\n } else {\n return options;\n }\n }\n};\n\n(function() {\n const reservedWords = (\n 'break else new var' +\n ' case finally return void' +\n ' catch for switch while' +\n ' continue function this with' +\n ' default if throw' +\n ' delete in try' +\n ' do instanceof typeof' +\n ' abstract enum int short' +\n ' boolean export interface static' +\n ' byte extends long super' +\n ' char final native synchronized' +\n ' class float package throws' +\n ' const goto private transient' +\n ' debugger implements protected volatile' +\n ' double import public let yield await' +\n ' null true false'\n ).split(' ');\n\n const compilerWords = (JavaScriptCompiler.RESERVED_WORDS = {});\n\n for (let i = 0, l = reservedWords.length; i < l; i++) {\n compilerWords[reservedWords[i]] = true;\n }\n})();\n\n/**\n * @deprecated May be removed in the next major version\n */\nJavaScriptCompiler.isValidJavaScriptVariableName = function(name) {\n return (\n !JavaScriptCompiler.RESERVED_WORDS[name] &&\n /^[a-zA-Z_$][0-9a-zA-Z_$]*$/.test(name)\n );\n};\n\nfunction strictLookup(requireTerminal, compiler, parts, type) {\n let stack = compiler.popStack(),\n i = 0,\n len = parts.length;\n if (requireTerminal) {\n len--;\n }\n\n for (; i < len; i++) {\n stack = compiler.nameLookup(stack, parts[i], type);\n }\n\n if (requireTerminal) {\n return [\n compiler.aliasable('container.strict'),\n '(',\n stack,\n ', ',\n compiler.quotedString(parts[i]),\n ', ',\n JSON.stringify(compiler.source.currentLocation),\n ' )'\n ];\n } else {\n return stack;\n }\n}\n\nexport default JavaScriptCompiler;\n", "import runtime from './handlebars.runtime';\n\n// Compiler imports\nimport AST from './handlebars/compiler/ast';\nimport {\n parser as Parser,\n parse,\n parseWithoutProcessing\n} from './handlebars/compiler/base';\nimport { Compiler, compile, precompile } from './handlebars/compiler/compiler';\nimport JavaScriptCompiler from './handlebars/compiler/javascript-compiler';\nimport Visitor from './handlebars/compiler/visitor';\n\nimport noConflict from './handlebars/no-conflict';\n\nlet _create = runtime.create;\nfunction create() {\n let hb = _create();\n\n hb.compile = function(input, options) {\n return compile(input, options, hb);\n };\n hb.precompile = function(input, options) {\n return precompile(input, options, hb);\n };\n\n hb.AST = AST;\n hb.Compiler = Compiler;\n hb.JavaScriptCompiler = JavaScriptCompiler;\n hb.Parser = Parser;\n hb.parse = parse;\n hb.parseWithoutProcessing = parseWithoutProcessing;\n\n return hb;\n}\n\nlet inst = create();\ninst.create = create;\n\nnoConflict(inst);\n\ninst.Visitor = Visitor;\n\ninst['default'] = inst;\n\nexport default inst;\n", "/* eslint-disable new-cap */\nimport Visitor from './visitor';\n\nexport function print(ast) {\n return new PrintVisitor().accept(ast);\n}\n\nexport function PrintVisitor() {\n this.padding = 0;\n}\n\nPrintVisitor.prototype = new Visitor();\n\nPrintVisitor.prototype.pad = function(string) {\n let out = '';\n\n for (let i = 0, l = this.padding; i < l; i++) {\n out += ' ';\n }\n\n out += string + '\\n';\n return out;\n};\n\nPrintVisitor.prototype.Program = function(program) {\n let out = '',\n body = program.body,\n i,\n l;\n\n if (program.blockParams) {\n let 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\n for (i = 0, l = body.length; i < l; i++) {\n out += this.accept(body[i]);\n }\n\n this.padding--;\n\n return out;\n};\n\nPrintVisitor.prototype.MustacheStatement = function(mustache) {\n return this.pad('{{ ' + this.SubExpression(mustache) + ' }}');\n};\nPrintVisitor.prototype.Decorator = function(mustache) {\n return this.pad('{{ DIRECTIVE ' + this.SubExpression(mustache) + ' }}');\n};\n\nPrintVisitor.prototype.BlockStatement = PrintVisitor.prototype.DecoratorBlock = function(\n block\n) {\n let out = '';\n\n out += this.pad(\n (block.type === 'DecoratorBlock' ? 'DIRECTIVE ' : '') + 'BLOCK:'\n );\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\n return out;\n};\n\nPrintVisitor.prototype.PartialStatement = function(partial) {\n let 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};\nPrintVisitor.prototype.PartialBlockStatement = function(partial) {\n let 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\n content += ' ' + this.pad('PROGRAM:');\n this.padding++;\n content += this.accept(partial.program);\n this.padding--;\n\n return this.pad('{{> ' + content + ' }}');\n};\n\nPrintVisitor.prototype.ContentStatement = function(content) {\n return this.pad(\"CONTENT[ '\" + content.value + \"' ]\");\n};\n\nPrintVisitor.prototype.CommentStatement = function(comment) {\n return this.pad(\"{{! '\" + comment.value + \"' }}\");\n};\n\nPrintVisitor.prototype.SubExpression = function(sexpr) {\n let params = sexpr.params,\n paramStrings = [],\n hash;\n\n for (let i = 0, l = params.length; i < l; i++) {\n paramStrings.push(this.accept(params[i]));\n }\n\n params = '[' + paramStrings.join(', ') + ']';\n\n hash = sexpr.hash ? ' ' + this.accept(sexpr.hash) : '';\n\n return this.accept(sexpr.path) + ' ' + params + hash;\n};\n\nPrintVisitor.prototype.PathExpression = function(id) {\n let path = id.parts.join('/');\n return (id.data ? '@' : '') + 'PATH:' + path;\n};\n\nPrintVisitor.prototype.StringLiteral = function(string) {\n return '\"' + string.value + '\"';\n};\n\nPrintVisitor.prototype.NumberLiteral = function(number) {\n return 'NUMBER{' + number.value + '}';\n};\n\nPrintVisitor.prototype.BooleanLiteral = function(bool) {\n return 'BOOLEAN{' + bool.value + '}';\n};\n\nPrintVisitor.prototype.UndefinedLiteral = function() {\n return 'UNDEFINED';\n};\n\nPrintVisitor.prototype.NullLiteral = function() {\n return 'NULL';\n};\n\nPrintVisitor.prototype.Hash = function(hash) {\n let pairs = hash.pairs,\n joinedPairs = [];\n\n for (let i = 0, l = pairs.length; i < l; i++) {\n joinedPairs.push(this.accept(pairs[i]));\n }\n\n return 'HASH{' + joinedPairs.join(', ') + '}';\n};\nPrintVisitor.prototype.HashPair = function(pair) {\n return pair.key + '=' + this.accept(pair.value);\n};\n/* eslint-enable new-cap */\n", "// USAGE:\n// var handlebars = require('handlebars');\n/* eslint-disable no-var */\n\n// var local = handlebars.create();\n\nvar handlebars = require('../dist/cjs/handlebars')['default'];\n\nvar printer = require('../dist/cjs/handlebars/compiler/printer');\nhandlebars.PrintVisitor = printer.PrintVisitor;\nhandlebars.print = printer.print;\n\nmodule.exports = handlebars;\n\n// Publish a Node.js require() handler for .handlebars and .hbs files\nfunction extension(module, filename) {\n var fs = require('fs');\n var templateString = fs.readFileSync(filename, 'utf8');\n module.exports = handlebars.compile(templateString);\n}\n/* istanbul ignore else */\nif (typeof require !== 'undefined' && require.extensions) {\n require.extensions['.handlebars'] = extension;\n require.extensions['.hbs'] = extension;\n}\n", "/*\n * Elasticsearch B.V licenses this file to you under the MIT License.\n * See `packages/kbn-handlebars/LICENSE` for more information.\n */\n\nimport Handlebars from 'handlebars';\nimport {\n createProtoAccessControl,\n resultIsAllowed,\n // @ts-expect-error: Could not find a declaration file for module\n} from 'handlebars/dist/cjs/handlebars/internal/proto-access';\n// @ts-expect-error: Could not find a declaration file for module\nimport AST from 'handlebars/dist/cjs/handlebars/compiler/ast';\n// @ts-expect-error: Could not find a declaration file for module\nimport { indexOf, createFrame } from 'handlebars/dist/cjs/handlebars/utils';\n// @ts-expect-error: Could not find a declaration file for module\nimport { moveHelperToHooks } from 'handlebars/dist/cjs/handlebars/helpers';\n\nimport type {\n AmbiguousHelperOptions,\n CompileOptions,\n Container,\n DecoratorDelegate,\n DecoratorsHash,\n HelperOptions,\n NodeType,\n NonBlockHelperOptions,\n ProcessableBlockStatementNode,\n ProcessableNode,\n ProcessableNodeWithPathParts,\n ProcessableNodeWithPathPartsOrLiteral,\n ProcessableStatementNode,\n ResolvePartialOptions,\n RuntimeOptions,\n Template,\n TemplateDelegate,\n VisitorHelper,\n} from './types';\nimport { kAmbiguous, kHelper, kSimple } from './symbols';\nimport {\n initData,\n isBlock,\n isDecorator,\n noop,\n toDecoratorOptions,\n transformLiteralToPath,\n} from './utils';\n\nexport class ElasticHandlebarsVisitor extends Handlebars.Visitor {\n private env: typeof Handlebars;\n private contexts: any[] = [];\n private output: any[] = [];\n private template?: string;\n private compileOptions: CompileOptions;\n private runtimeOptions?: RuntimeOptions;\n private blockParamNames: any[][] = [];\n private blockParamValues: any[][] = [];\n private ast?: hbs.AST.Program;\n private container: Container;\n private defaultHelperOptions: Pick<NonBlockHelperOptions, 'lookupProperty'>;\n private processedRootDecorators = false; // Root decorators should not have access to input arguments. This flag helps us detect them.\n private processedDecoratorsForProgram = new Set(); // It's important that a given program node only has its decorators run once, we use this Map to keep track of them\n\n constructor(\n env: typeof Handlebars,\n input: string | hbs.AST.Program,\n options: CompileOptions = {}\n ) {\n super();\n\n this.env = env;\n\n if (typeof input !== 'string' && input.type === 'Program') {\n this.ast = input;\n } else {\n this.template = input as string;\n }\n\n this.compileOptions = { data: true, ...options };\n this.compileOptions.knownHelpers = Object.assign(\n Object.create(null),\n {\n helperMissing: true,\n blockHelperMissing: true,\n each: true,\n if: true,\n unless: true,\n with: true,\n log: true,\n lookup: true,\n },\n this.compileOptions.knownHelpers\n );\n\n const protoAccessControl = createProtoAccessControl({});\n\n const container: Container = (this.container = {\n helpers: {},\n partials: {},\n decorators: {},\n strict(obj, name, loc) {\n if (!obj || !(name in obj)) {\n throw new Handlebars.Exception('\"' + name + '\" not defined in ' + obj, {\n loc,\n } as hbs.AST.Node);\n }\n return container.lookupProperty(obj, name);\n },\n // this function is lifted from the handlebars source and slightly modified (lib/handlebars/runtime.js)\n lookupProperty(parent, propertyName) {\n const result = parent[propertyName];\n if (result == null) {\n return result;\n }\n if (Object.prototype.hasOwnProperty.call(parent, propertyName)) {\n return result;\n }\n\n if (resultIsAllowed(result, protoAccessControl, propertyName)) {\n return result;\n }\n return undefined;\n },\n // this function is lifted from the handlebars source and slightly modified (lib/handlebars/runtime.js)\n lambda(current, context) {\n return typeof current === 'function' ? current.call(context) : current;\n },\n data(value: any, depth: number) {\n while (value && depth--) {\n value = value._parent;\n }\n return value;\n },\n hooks: {},\n });\n\n this.defaultHelperOptions = {\n lookupProperty: container.lookupProperty,\n };\n }\n\n render(context: any, options: RuntimeOptions = {}): string {\n this.contexts = [context];\n this.output = [];\n this.runtimeOptions = { ...options };\n this.container.helpers = { ...this.env.helpers, ...options.helpers };\n this.container.partials = { ...this.env.partials, ...options.partials };\n this.container.decorators = {\n ...(this.env.decorators as DecoratorsHash),\n ...options.decorators,\n };\n this.container.hooks = {};\n this.processedRootDecorators = false;\n this.processedDecoratorsForProgram.clear();\n\n if (this.compileOptions.data) {\n this.runtimeOptions.data = initData(context, this.runtimeOptions.data);\n }\n\n const keepHelperInHelpers = false;\n moveHelperToHooks(this.container, 'helperMissing', keepHelperInHelpers);\n moveHelperToHooks(this.container, 'blockHelperMissing', keepHelperInHelpers);\n\n if (!this.ast) {\n this.ast = Handlebars.parse(this.template!);\n }\n\n // The `defaultMain` function contains the default behavior:\n //\n // Generate a \"program\" function based on the root `Program` in the AST and\n // call it. This will start the processing of all the child nodes in the\n // AST.\n const defaultMain: TemplateDelegate = (_context) => {\n const prog = this.generateProgramFunction(this.ast!);\n return prog(_context, this.runtimeOptions);\n };\n\n // Run any decorators that might exist on the root:\n //\n // The `defaultMain` function is passed in, and if there are no root\n // decorators, or if the decorators chooses to do so, the same function is\n // returned from `processDecorators` and the default behavior is retained.\n //\n // Alternatively any of the root decorators might call the `defaultMain`\n // function themselves, process its return value, and return a completely\n // different `main` function.\n const main = this.processDecorators(this.ast, defaultMain);\n this.processedRootDecorators = true;\n\n // Call the `main` function and add the result to the final output.\n const result = main(this.context, options);\n\n if (main === defaultMain) {\n this.output.push(result);\n return this.output.join('');\n } else {\n // We normally expect the return value of `main` to be a string. However,\n // if a decorator is used to override the `defaultMain` function, the\n // return value can be any type. To match the upstream handlebars project\n // behavior, we want the result of rendering the template to be the\n // literal value returned by the decorator.\n //\n // Since the output array in this case always will be empty, we just\n // return that single value instead of attempting to join all the array\n // elements as strings.\n return result;\n }\n }\n\n // ********************************************** //\n // *** Visitor AST Traversal Functions *** //\n // ********************************************** //\n\n Program(program: hbs.AST.Program) {\n this.blockParamNames.unshift(program.blockParams);\n super.Program(program);\n this.blockParamNames.shift();\n }\n\n MustacheStatement(mustache: hbs.AST.MustacheStatement) {\n this.processStatementOrExpression(mustache);\n }\n\n BlockStatement(block: hbs.AST.BlockStatement) {\n this.processStatementOrExpression(block);\n }\n\n PartialStatement(partial: hbs.AST.PartialStatement) {\n this.invokePartial(partial);\n }\n\n PartialBlockStatement(partial: hbs.AST.PartialBlockStatement) {\n this.invokePartial(partial);\n }\n\n // This space is intentionally left blank: We want to override the Visitor\n // class implementation of this method, but since we handle decorators\n // separately before traversing the nodes, we just want to make this a no-op.\n DecoratorBlock(decorator: hbs.AST.DecoratorBlock) {}\n\n // This space is intentionally left blank: We want to override the Visitor\n // class implementation of this method, but since we handle decorators\n // separately before traversing the nodes, we just want to make this a no-op.\n Decorator(decorator: hbs.AST.Decorator) {}\n\n SubExpression(sexpr: hbs.AST.SubExpression) {\n this.processStatementOrExpression(sexpr);\n }\n\n PathExpression(path: hbs.AST.PathExpression) {\n const blockParamId =\n !path.depth && !AST.helpers.scopedId(path) && this.blockParamIndex(path.parts[0]);\n\n let result;\n if (blockParamId) {\n result = this.lookupBlockParam(blockParamId, path);\n } else if (path.data) {\n result = this.lookupData(this.runtimeOptions!.data, path);\n } else {\n result = this.resolvePath(this.contexts[path.depth], path);\n }\n\n this.output.push(result);\n }\n\n ContentStatement(content: hbs.AST.ContentStatement) {\n this.output.push(content.value);\n }\n\n StringLiteral(string: hbs.AST.StringLiteral) {\n this.output.push(string.value);\n }\n\n NumberLiteral(number: hbs.AST.NumberLiteral) {\n this.output.push(number.value);\n }\n\n BooleanLiteral(bool: hbs.AST.BooleanLiteral) {\n this.output.push(bool.value);\n }\n\n UndefinedLiteral() {\n this.output.push(undefined);\n }\n\n NullLiteral() {\n this.output.push(null);\n }\n\n // ********************************************** //\n // *** Visitor AST Helper Functions *** //\n // ********************************************** //\n\n /**\n * Special code for decorators, since they have to be executed ahead of time (before the wrapping program).\n * So we have to look into the program AST body and see if it contains any decorators that we have to process\n * before we can finish processing of the wrapping program.\n */\n private processDecorators(program: hbs.AST.Program, prog: TemplateDelegate) {\n if (!this.processedDecoratorsForProgram.has(program)) {\n this.processedDecoratorsForProgram.add(program);\n const props = {};\n for (const node of program.body) {\n if (isDecorator(node)) {\n prog = this.processDecorator(node, prog, props);\n }\n }\n }\n\n return prog;\n }\n\n private processDecorator(\n decorator: hbs.AST.DecoratorBlock | hbs.AST.Decorator,\n prog: TemplateDelegate,\n props: Record<string, any>\n ) {\n const options = this.setupDecoratorOptions(decorator);\n\n const result = this.container.lookupProperty<DecoratorDelegate>(\n this.container.decorators,\n options.name\n )(prog, props, this.container, options);\n\n return Object.assign(result || prog, props);\n }\n\n private processStatementOrExpression(node: ProcessableNodeWithPathPartsOrLiteral) {\n // Calling `transformLiteralToPath` has side-effects!\n // It converts a node from type `ProcessableNodeWithPathPartsOrLiteral` to `ProcessableNodeWithPathParts`\n transformLiteralToPath(node);\n\n switch (this.classifyNode(node as ProcessableNodeWithPathParts)) {\n case kSimple:\n this.processSimpleNode(node as ProcessableNodeWithPathParts);\n break;\n case kHelper:\n this.processHelperNode(node as ProcessableNodeWithPathParts);\n break;\n case kAmbiguous:\n this.processAmbiguousNode(node as ProcessableNodeWithPathParts);\n break;\n }\n }\n\n // Liftet from lib/handlebars/compiler/compiler.js (original name: classifySexpr)\n private classifyNode(node: { path: hbs.AST.PathExpression }): NodeType {\n const isSimple = AST.helpers.simpleId(node.path);\n const isBlockParam = isSimple && !!this.blockParamIndex(node.path.parts[0]);\n\n // a mustache is an eligible helper if:\n // * its id is simple (a single part, not `this` or `..`)\n let isHelper = !isBlockParam && AST.helpers.helperExpression(node);\n\n // if a mustache is an eligible helper but not a definite\n // helper, it is ambiguous, and will be resolved in a later\n // pass or at runtime.\n let isEligible = !isBlockParam && (isHelper || isSimple);\n\n // if ambiguous, we can possibly resolve the ambiguity now\n // An eligible helper is one that does not have a complex path, i.e. `this.foo`, `../foo` etc.\n if (isEligible && !isHelper) {\n const name = node.path.parts[0];\n const options = this.compileOptions;\n if (options.knownHelpers && options.knownHelpers[name]) {\n isHelper = true;\n } else if (options.knownHelpersOnly) {\n isEligible = false;\n }\n }\n\n if (isHelper) {\n return kHelper;\n } else if (isEligible) {\n return kAmbiguous;\n } else {\n return kSimple;\n }\n }\n\n // Liftet from lib/handlebars/compiler/compiler.js\n private blockParamIndex(name: string): [number, any] | undefined {\n for (let depth = 0, len = this.blockParamNames.length; depth < len; depth++) {\n const blockParams = this.blockParamNames[depth];\n const param = blockParams && indexOf(blockParams, name);\n if (blockParams && param >= 0) {\n return [depth, param];\n }\n }\n }\n\n // Looks up the value of `parts` on the given block param and pushes\n // it onto the stack.\n private lookupBlockParam(blockParamId: [number, any], path: hbs.AST.PathExpression) {\n const value = this.blockParamValues[blockParamId[0]][blockParamId[1]];\n return this.resolvePath(value, path, 1);\n }\n\n // Push the data lookup operator\n private lookupData(data: any, path: hbs.AST.PathExpression) {\n if (path.depth) {\n data = this.container.data(data, path.depth);\n }\n\n return this.resolvePath(data, path);\n }\n\n private processSimpleNode(node: ProcessableNodeWithPathParts) {\n const path = node.path;\n // @ts-expect-error strict is not a valid property on PathExpression, but we used in the same way it's also used in the original handlebars\n path.strict = true;\n const result = this.resolveNodes(path)[0];\n const lambdaResult = this.container.lambda(result, this.context);\n\n if (isBlock(node)) {\n this.blockValue(node, lambdaResult);\n } else {\n this.output.push(lambdaResult);\n }\n }\n\n // The purpose of this opcode is to take a block of the form\n // `{{#this.foo}}...{{/this.foo}}`, resolve the value of `foo`, and\n // replace it on the stack with the result of properly\n // invoking blockHelperMissing.\n private blockValue(node: hbs.AST.BlockStatement, value: any) {\n const name = node.path.original;\n const options = this.setupParams(node, name);\n\n const result = this.container.hooks.blockHelperMissing!.call(this.context, value, options);\n\n this.output.push(result);\n }\n\n private processHelperNode(node: ProcessableNodeWithPathParts) {\n const path = node.path;\n const name = path.parts[0];\n\n if (this.compileOptions.knownHelpers && this.compileOptions.knownHelpers[name]) {\n this.invokeKnownHelper(node);\n } else if (this.compileOptions.knownHelpersOnly) {\n throw new Handlebars.Exception(\n 'You specified knownHelpersOnly, but used the unknown helper ' + name,\n node\n );\n } else {\n this.invokeHelper(node);\n }\n }\n\n // This operation is used when the helper is known to exist,\n // so a `helperMissing` fallback is not required.\n private invokeKnownHelper(node: ProcessableNodeWithPathParts) {\n const name = node.path.parts[0];\n const helper = this.setupHelper(node, name);\n // TypeScript: `helper.fn` might be `undefined` at this point, but to match the upstream behavior we call it without any guards\n const result = helper.fn!.call(helper.context, ...helper.params, helper.options);\n this.output.push(result);\n }\n\n // Pops off the helper's parameters, invokes the helper,\n // and pushes the helper's return value onto the stack.\n //\n // If the helper is not found, `helperMissing` is called.\n private invokeHelper(node: ProcessableNodeWithPathParts) {\n const path = node.path;\n const name = path.original;\n const isSimple = AST.helpers.simpleId(path);\n const helper = this.setupHelper(node, name);\n\n const loc = isSimple && helper.fn ? node.loc : path.loc;\n helper.fn = (isSimple && helper.fn) || this.resolveNodes(path)[0];\n\n if (!helper.fn) {\n if (this.compileOptions.strict) {\n helper.fn = this.container.strict(helper.context, name, loc);\n } else {\n helper.fn = this.container.hooks.helperMissing;\n }\n }\n\n // TypeScript: `helper.fn` might be `undefined` at this point, but to match the upstream behavior we call it without any guards\n const result = helper.fn!.call(helper.context, ...helper.params, helper.options);\n\n this.output.push(result);\n }\n\n private invokePartial(partial: hbs.AST.PartialStatement | hbs.AST.PartialBlockStatement) {\n const { params } = partial;\n if (params.length > 1) {\n throw new Handlebars.Exception(\n `Unsupported number of partial arguments: ${params.length}`,\n partial\n );\n }\n\n const isDynamic = partial.name.type === 'SubExpression';\n const name = isDynamic\n ? this.resolveNodes(partial.name).join('')\n : (partial.name as hbs.AST.PathExpression).original;\n\n const options: AmbiguousHelperOptions & ResolvePartialOptions = this.setupParams(partial, name);\n options.helpers = this.container.helpers;\n options.partials = this.container.partials;\n options.decorators = this.container.decorators;\n\n let partialBlock;\n if ('fn' in options && options.fn !== noop) {\n const { fn } = options;\n const currentPartialBlock = options.data?.['partial-block'];\n options.data = createFrame(options.data);\n\n // Wrapper function to get access to currentPartialBlock from the closure\n partialBlock = options.data['partial-block'] = function partialBlockWrapper(\n context: any,\n wrapperOptions: { data?: HelperOptions['data'] } = {}\n ) {\n // Restore the partial-block from the closure for the execution of the block\n // i.e. the part inside the block of the partial call.\n wrapperOptions.data = createFrame(wrapperOptions.data);\n wrapperOptions.data['partial-block'] = currentPartialBlock;\n return fn(context, wrapperOptions);\n };\n\n if (fn.partials) {\n options.partials = { ...options.partials, ...fn.partials };\n }\n }\n\n let context = {};\n if (params.length === 0 && !this.compileOptions.explicitPartialContext) {\n context = this.context;\n } else if (params.length === 1) {\n context = this.resolveNodes(params[0])[0];\n }\n\n if (Object.keys(options.hash).length > 0) {\n // TODO: context can be an array, but maybe never when we have a hash???\n context = Object.assign({}, context, options.hash);\n }\n\n const partialTemplate: Template | undefined =\n this.container.partials[name] ??\n partialBlock ??\n // TypeScript note: We extend ResolvePartialOptions in our types.ts file\n // to fix an error in the upstream type. When calling back into the\n // upstream code, we just cast back to the non-extended type\n Handlebars.VM.resolvePartial(\n undefined,\n undefined,\n options as Handlebars.ResolvePartialOptions\n );\n\n if (partialTemplate === undefined) {\n throw new Handlebars.Exception(`The partial ${name} could not be found`);\n }\n\n let render;\n if (typeof partialTemplate === 'string') {\n render = this.env.compileAST(partialTemplate, this.compileOptions);\n if (name in this.container.partials) {\n this.container.partials[name] = render;\n }\n } else {\n render = partialTemplate;\n }\n\n let result = render(context, options);\n\n if ('indent' in partial) {\n result =\n partial.indent +\n (this.compileOptions.preventIndent\n ? result\n : result.replace(/\\n(?!$)/g, `\\n${partial.indent}`)); // indent each line, ignoring any trailing linebreak\n }\n\n this.output.push(result);\n }\n\n private processAmbiguousNode(node: ProcessableNodeWithPathParts) {\n const name = node.path.parts[0];\n const helper = this.setupHelper(node, name);\n let { fn: helperFn } = helper;\n\n const loc = helperFn ? node.loc : node.path.loc;\n helperFn = helperFn ?? this.resolveNodes(node.path)[0];\n\n if (helperFn === undefined) {\n if (this.compileOptions.strict) {\n helperFn = this.container.strict(helper.context, name, loc);\n } else {\n helperFn =\n helper.context != null\n ? this.container.lookupProperty(helper.context, name)\n : helper.context;\n if (helperFn == null) helperFn = this.container.hooks.helperMissing;\n }\n }\n\n const helperResult =\n typeof helperFn === 'function'\n ? helperFn.call(helper.context, ...helper.params, helper.options)\n : helperFn;\n\n if (isBlock(node)) {\n const result = helper.fn\n ? helperResult\n : this.container.hooks.blockHelperMissing!.call(this.context, helperResult, helper.options);\n if (result != null) {\n this.output.push(result);\n }\n } else {\n if (\n (node as hbs.AST.MustacheStatement).escaped === false ||\n this.compileOptions.noEscape === true ||\n typeof helperResult !== 'string'\n ) {\n this.output.push(helperResult);\n } else {\n this.output.push(Handlebars.escapeExpression(helperResult));\n }\n }\n }\n\n private setupHelper(node: ProcessableNode, helperName: string): VisitorHelper {\n return {\n fn: this.container.lookupProperty(this.container.helpers, helperName),\n context: this.context,\n params: this.resolveNodes(node.params),\n options: this.setupParams(node, helperName),\n };\n }\n\n private setupDecoratorOptions(decorator: hbs.AST.Decorator | hbs.AST.DecoratorBlock) {\n // TypeScript: The types indicate that `decorator.path` technically can be an `hbs.AST.Literal`. However, the upstream codebase always treats it as an `hbs.AST.PathExpression`, so we do too.\n const name = (decorator.path as hbs.AST.PathExpression).original;\n const options = toDecoratorOptions(this.setupParams(decorator, name));\n\n if (decorator.params.length > 0) {\n if (!this.processedRootDecorators) {\n // When processing the root decorators, temporarily remove the root context so it's not accessible to the decorator\n const context = this.contexts.shift();\n options.args = this.resolveNodes(decorator.params);\n this.contexts.unshift(context);\n } else {\n options.args = this.resolveNodes(decorator.params);\n }\n } else {\n options.args = [];\n }\n\n return options;\n }\n\n private setupParams(node: ProcessableBlockStatementNode, name: string): HelperOptions;\n private setupParams(node: ProcessableStatementNode, name: string): NonBlockHelperOptions;\n private setupParams(node: ProcessableNode, name: string): AmbiguousHelperOptions;\n private setupParams(node: ProcessableNode, name: string) {\n const options: AmbiguousHelperOptions = {\n name,\n hash: this.getHash(node),\n data: this.runtimeOptions!.data,\n loc: { start: node.loc.start, end: node.loc.end },\n ...this.defaultHelperOptions,\n };\n\n if (isBlock(node)) {\n (options as HelperOptions).fn = node.program\n ? this.processDecorators(node.program, this.generateProgramFunction(node.program))\n : noop;\n (options as HelperOptions).inverse = node.inverse\n ? this.processDecorators(node.inverse, this.generateProgramFunction(node.inverse))\n : noop;\n }\n\n return options;\n }\n\n private generateProgramFunction(program: hbs.AST.Program) {\n if (!program) return noop;\n\n const prog: TemplateDelegate = (nextContext: any, runtimeOptions: RuntimeOptions = {}) => {\n runtimeOptions = { ...runtimeOptions };\n\n // inherit data in blockParams from parent program\n runtimeOptions.data = runtimeOptions.data || this.runtimeOptions!.data;\n if (runtimeOptions.blockParams) {\n runtimeOptions.blockParams = runtimeOptions.blockParams.concat(\n this.runtimeOptions!.blockParams\n );\n }\n\n // inherit partials from parent program\n runtimeOptions.partials = runtimeOptions.partials || this.runtimeOptions!.partials;\n\n // stash parent program data\n const tmpRuntimeOptions = this.runtimeOptions;\n this.runtimeOptions = runtimeOptions;\n const shiftContext = nextContext !== this.context;\n if (shiftContext) this.contexts.unshift(nextContext);\n this.blockParamValues.unshift(runtimeOptions.blockParams || []);\n\n // execute child program\n const result = this.resolveNodes(program).join('');\n\n // unstash parent program data\n this.blockParamValues.shift();\n if (shiftContext) this.contexts.shift();\n this.runtimeOptions = tmpRuntimeOptions;\n\n // return result of child program\n return result;\n };\n\n prog.blockParams = program.blockParams?.length ?? 0;\n return prog;\n }\n\n private getHash(statement: { hash?: hbs.AST.Hash }) {\n const result: { [key: string]: any } = {};\n if (!statement.hash) return result;\n for (const { key, value } of statement.hash.pairs) {\n result[key] = this.resolveNodes(value)[0];\n }\n return result;\n }\n\n private resolvePath(obj: any, path: hbs.AST.PathExpression, index = 0) {\n if (this.compileOptions.strict || this.compileOptions.assumeObjects) {\n return this.strictLookup(obj, path);\n }\n\n for (; index < path.parts.length; index++) {\n if (obj == null) return;\n obj = this.container.lookupProperty(obj, path.parts[index]);\n }\n\n return obj;\n }\n\n private strictLookup(obj: any, path: hbs.AST.PathExpression) {\n // @ts-expect-error strict is not a valid property on PathExpression, but we used in the same way it's also used in the original handlebars\n const requireTerminal = this.compileOptions.strict && path.strict;\n const len = path.parts.length - (requireTerminal ? 1 : 0);\n\n for (let i = 0; i < len; i++) {\n obj = this.container.lookupProperty(obj, path.parts[i]);\n }\n\n if (requireTerminal) {\n return this.container.strict(obj, path.parts[len], path.loc);\n } else {\n return obj;\n }\n }\n\n private resolveNodes(nodes: hbs.AST.Node | hbs.AST.Node[]): any[] {\n const currentOutput = this.output;\n this.output = [];\n\n if (Array.isArray(nodes)) {\n this.acceptArray(nodes);\n } else {\n this.accept(nodes);\n }\n\n const result = this.output;\n\n this.output = currentOutput;\n\n return result;\n }\n\n private get context() {\n return this.contexts[0];\n }\n}\n", "/*\n * Elasticsearch B.V licenses this file to you under the MIT License.\n * See `packages/kbn-handlebars/LICENSE` for more information.\n */\n\nexport const kHelper = Symbol('helper');\nexport const kAmbiguous = Symbol('ambiguous');\nexport const kSimple = Symbol('simple');\n", "/*\n * Elasticsearch B.V licenses this file to you under the MIT License.\n * See `packages/kbn-handlebars/LICENSE` for more information.\n */\n\n// @ts-expect-error: Could not find a declaration file for module\nimport { createFrame } from 'handlebars/dist/cjs/handlebars/utils';\n\nimport type { AmbiguousHelperOptions, DecoratorOptions } from './types';\n\nexport function isBlock(node: hbs.AST.Node): node is hbs.AST.BlockStatement {\n return 'program' in node || 'inverse' in node;\n}\n\nexport function isDecorator(\n node: hbs.AST.Node\n): node is hbs.AST.Decorator | hbs.AST.DecoratorBlock {\n return node.type === 'Decorator' || node.type === 'DecoratorBlock';\n}\n\nexport function toDecoratorOptions(options: AmbiguousHelperOptions) {\n // There's really no tests/documentation on this, but to match the upstream codebase we'll remove `lookupProperty` from the decorator context\n delete (options as any).lookupProperty;\n\n return options as DecoratorOptions;\n}\n\nexport function noop() {\n return '';\n}\n\n// liftet from handlebars lib/handlebars/runtime.js\nexport function initData(context: any, data: any) {\n if (!data || !('root' in data)) {\n data = data ? createFrame(data) : {};\n data.root = context;\n }\n return data;\n}\n\n// liftet from handlebars lib/handlebars/compiler/compiler.js\nexport function transformLiteralToPath(node: { path: hbs.AST.PathExpression | hbs.AST.Literal }) {\n const pathIsLiteral = 'parts' in node.path === false;\n\n if (pathIsLiteral) {\n const literal = node.path;\n // @ts-expect-error: Not all `hbs.AST.Literal` sub-types has an `original` property, but that's ok, in that case we just want `undefined`\n const original = literal.original;\n // Casting to string here to make false and 0 literal values play nicely with the rest\n // of the system.\n node.path = {\n type: 'PathExpression',\n data: false,\n depth: 0,\n parts: [original + ''],\n original: original + '',\n loc: literal.loc,\n };\n }\n}\n\nexport function allowUnsafeEval() {\n try {\n new Function();\n return true;\n } catch (e) {\n return false;\n }\n}\n", "/*\n * Elasticsearch B.V licenses this file to you under the MIT License.\n * See `packages/kbn-handlebars/LICENSE` for more information.\n */\n\n// The handlebars module uses `export =`, so we should technically use `import Handlebars = require('handlebars')`, but Babel will not allow this:\n// https://www.typescriptlang.org/docs/handbook/modules.html#export--and-import--require\nimport Handlebars = require('handlebars');\n\nimport type { CompileOptions, RuntimeOptions, TemplateDelegate } from './types';\nimport { ElasticHandlebarsVisitor } from './visitor';\n\nconst originalCreate = Handlebars.create;\n\nexport { Handlebars };\n\n/**\n * Creates an isolated Handlebars environment.\n *\n * Each environment has its own helpers.\n * This is only necessary for use cases that demand distinct helpers.\n * Most use cases can use the root Handlebars environment directly.\n *\n * @returns A sandboxed/scoped version of the @kbn/handlebars module\n */\nHandlebars.create = function (): typeof Handlebars {\n const SandboxedHandlebars = originalCreate.call(Handlebars) as typeof Handlebars;\n // When creating new Handlebars environments, ensure the custom compileAST function is present in the new environment as well\n SandboxedHandlebars.compileAST = Handlebars.compileAST;\n return SandboxedHandlebars;\n};\n\nHandlebars.compileAST = function (\n input: string | hbs.AST.Program,\n options?: CompileOptions\n): TemplateDelegate {\n if (input == null || (typeof input !== 'string' && input.type !== 'Program')) {\n throw new Handlebars.Exception(\n `You must pass a string or Handlebars AST to Handlebars.compileAST. You passed ${input}`\n );\n }\n\n // If `Handlebars.compileAST` is reassigned, `this` will be undefined.\n const visitor = new ElasticHandlebarsVisitor(this ?? Handlebars, input, options);\n\n return (context: any, runtimeOptions?: RuntimeOptions) => visitor.render(context, runtimeOptions);\n};\n", "/*\n * Elasticsearch B.V licenses this file to you under the MIT License.\n * See `packages/kbn-handlebars/LICENSE` for more information.\n */\n\nimport { Handlebars } from './src/handlebars';\nimport { allowUnsafeEval } from './src/utils';\n\n// The handlebars module uses `export =`, so it can't be re-exported using `export *`.\n// However, because of Babel, we're not allowed to use `export =` ourselves.\n// So we have to resort to using `exports default` even though eslint doesn't like it.\n//\n// eslint-disable-next-line import/no-default-export\nglobalThis.Handlebars = Handlebars;\n\n/**\n * If the `unsafe-eval` CSP is set, this string constant will be `compile`,\n * otherwise `compileAST`.\n *\n * This can be used to call the more optimized `compile` function in\n * environments that support it, or fall back to `compileAST` on environments\n * that don't.\n */\nglobalThis.handlebarsCompileFnName = allowUnsafeEval() ? 'compile' : 'compileAST';\n\nexport type {\n CompileOptions,\n RuntimeOptions,\n HelperDelegate,\n TemplateDelegate,\n DecoratorDelegate,\n HelperOptions,\n} from './src/types';\n"], + "mappings": "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AE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,EACpsB,cAAe,SAAmBC,EAAOC,EAAOC,EAASC,EAAGC,EAAQC,EAAGC,EACrE,CAEF,IAAIC,EAAKF,EAAG,OAAS,EACrB,OAAQD,EAAO,CACf,IAAK,GAAG,OAAOC,EAAGE,EAAG,CAAC,EAEtB,IAAK,GAAE,KAAK,EAAIJ,EAAG,eAAeE,EAAGE,CAAE,CAAC,EACxC,MACA,IAAK,GAAE,KAAK,EAAIF,EAAGE,CAAE,EACrB,MACA,IAAK,GAAE,KAAK,EAAIF,EAAGE,CAAE,EACrB,MACA,IAAK,GAAE,KAAK,EAAIF,EAAGE,CAAE,EACrB,MACA,IAAK,GAAE,KAAK,EAAIF,EAAGE,CAAE,EACrB,MACA,IAAK,GAAE,KAAK,EAAIF,EAAGE,CAAE,EACrB,MACA,IAAK,GAAE,KAAK,EAAIF,EAAGE,CAAE,EACrB,MACA,IAAK,GACD,KAAK,EAAI,CACP,KAAM,mBACN,MAAOJ,EAAG,aAAaE,EAAGE,CAAE,CAAC,EAC7B,MAAOJ,EAAG,WAAWE,EAAGE,CAAE,EAAGF,EAAGE,CAAE,CAAC,EACnC,IAAKJ,EAAG,QAAQ,KAAK,EAAE,GAG7B,MACA,IAAK,IACD,KAAK,EAAI,CACP,KAAM,mBACN,SAAUE,EAAGE,CAAE,EACf,MAAOF,EAAGE,CAAE,EACZ,IAAKJ,EAAG,QAAQ,KAAK,EAAE,GAG7B,MACA,IAAK,IAAG,KAAK,EAAIA,EAAG,gBAAgBE,EAAGE,EAAG,CAAC,EAAGF,EAAGE,EAAG,CAAC,EAAGF,EAAGE,CAAE,EAAG,KAAK,EAAE,EACvE,MACA,IAAK,IAAG,KAAK,EAAI,CAAE,KAAMF,EAAGE,EAAG,CAAC,EAAG,OAAQF,EAAGE,EAAG,CAAC,EAAG,KAAMF,EAAGE,EAAG,CAAC,CAAC,EACnE,MACA,IAAK,IAAG,KAAK,EAAIJ,EAAG,aAAaE,EAAGE,EAAG,CAAC,EAAGF,EAAGE,EAAG,CAAC,EAAGF,EAAGE,EAAG,CAAC,EAAGF,EAAGE,CAAE,EAAG,GAAO,KAAK,EAAE,EACrF,MACA,IAAK,IAAG,KAAK,EAAIJ,EAAG,aAAaE,EAAGE,EAAG,CAAC,EAAGF,EAAGE,EAAG,CAAC,EAAGF,EAAGE,EAAG,CAAC,EAAGF,EAAGE,CAAE,EAAG,GAAM,KAAK,EAAE,EACpF,MACA,IAAK,IAAG,KAAK,EAAI,CAAE,KAAMF,EAAGE,EAAG,CAAC,EAAG,KAAMF,EAAGE,EAAG,CAAC,EAAG,OAAQF,EAAGE,EAAG,CAAC,EAAG,KAAMF,EAAGE,EAAG,CAAC,EAAG,YAAaF,EAAGE,EAAG,CAAC,EAAG,MAAOJ,EAAG,WAAWE,EAAGE,EAAG,CAAC,EAAGF,EAAGE,CAAE,CAAC,CAAC,EAClJ,MACA,IAAK,IAAG,KAAK,EAAI,CAAE,KAAMF,EAAGE,EAAG,CAAC,EAAG,OAAQF,EAAGE,EAAG,CAAC,EAAG,KAAMF,EAAGE,EAAG,CAAC,EAAG,YAAaF,EAAGE,EAAG,CAAC,EAAG,MAAOJ,EAAG,WAAWE,EAAGE,EAAG,CAAC,EAAGF,EAAGE,CAAE,CAAC,CAAC,EAClI,MACA,IAAK,IAAG,KAAK,EAAI,CAAE,KAAMF,EAAGE,EAAG,CAAC,EAAG,OAAQF,EAAGE,EAAG,CAAC,EAAG,KAAMF,EAAGE,EAAG,CAAC,EAAG,YAAaF,EAAGE,EAAG,CAAC,EAAG,MAAOJ,EAAG,WAAWE,EAAGE,EAAG,CAAC,EAAGF,EAAGE,CAAE,CAAC,CAAC,EAClI,MACA,IAAK,IAAG,KAAK,EAAI,CAAE,MAAOJ,EAAG,WAAWE,EAAGE,EAAG,CAAC,EAAGF,EAAGE,EAAG,CAAC,CAAC,EAAG,QAASF,EAAGE,CAAE,CAAC,EAC5E,MACA,IAAK,IACD,IAAIC,EAAUL,EAAG,aAAaE,EAAGE,EAAG,CAAC,EAAGF,EAAGE,EAAG,CAAC,EAAGF,EAAGE,CAAE,EAAGF,EAAGE,CAAE,EAAG,GAAO,KAAK,EAAE,EAC5EE,EAAUN,EAAG,eAAe,CAACK,CAAO,EAAGH,EAAGE,EAAG,CAAC,EAAE,GAAG,EACvDE,EAAQ,QAAU,GAElB,KAAK,EAAI,CAAE,MAAOJ,EAAGE,EAAG,CAAC,EAAE,MAAO,QAASE,EAAS,MAAO,EAAI,EAEnE,MACA,IAAK,IAAG,KAAK,EAAIJ,EAAGE,CAAE,EACtB,MACA,IAAK,IAAG,KAAK,EAAI,CAAC,KAAMF,EAAGE,EAAG,CAAC,EAAG,MAAOJ,EAAG,WAAWE,EAAGE,EAAG,CAAC,EAAGF,EAAGE,CAAE,CAAC,CAAC,EACxE,MACA,IAAK,IAAG,KAAK,EAAIJ,EAAG,gBAAgBE,EAAGE,EAAG,CAAC,EAAGF,EAAGE,EAAG,CAAC,EAAGF,EAAGE,EAAG,CAAC,EAAGF,EAAGE,EAAG,CAAC,EAAGJ,EAAG,WAAWE,EAAGE,EAAG,CAAC,EAAGF,EAAGE,CAAE,CAAC,EAAG,KAAK,EAAE,EACpH,MACA,IAAK,IAAG,KAAK,EAAIJ,EAAG,gBAAgBE,EAAGE,EAAG,CAAC,EAAGF,EAAGE,EAAG,CAAC,EAAGF,EAAGE,EAAG,CAAC,EAAGF,EAAGE,EAAG,CAAC,EAAGJ,EAAG,WAAWE,EAAGE,EAAG,CAAC,EAAGF,EAAGE,CAAE,CAAC,EAAG,KAAK,EAAE,EACpH,MACA,IAAK,IACD,KAAK,EAAI,CACP,KAAM,mBACN,KAAMF,EAAGE,EAAG,CAAC,EACb,OAAQF,EAAGE,EAAG,CAAC,EACf,KAAMF,EAAGE,EAAG,CAAC,EACb,OAAQ,GACR,MAAOJ,EAAG,WAAWE,EAAGE,EAAG,CAAC,EAAGF,EAAGE,CAAE,CAAC,EACrC,IAAKJ,EAAG,QAAQ,KAAK,EAAE,GAG7B,MACA,IAAK,IAAG,KAAK,EAAIA,EAAG,oBAAoBE,EAAGE,EAAG,CAAC,EAAGF,EAAGE,EAAG,CAAC,EAAGF,EAAGE,CAAE,EAAG,KAAK,EAAE,EAC3E,MACA,IAAK,IAAG,KAAK,EAAI,CAAE,KAAMF,EAAGE,EAAG,CAAC,EAAG,OAAQF,EAAGE,EAAG,CAAC,EAAG,KAAMF,EAAGE,EAAG,CAAC,EAAG,MAAOJ,EAAG,WAAWE,EAAGE,EAAG,CAAC,EAAGF,EAAGE,CAAE,CAAC,CAAC,EAC3G,MACA,IAAK,IAAG,KAAK,EAAIF,EAAGE,CAAE,EACtB,MACA,IAAK,IAAG,KAAK,EAAIF,EAAGE,CAAE,EACtB,MACA,IAAK,IACD,KAAK,EAAI,CACP,KAAM,gBACN,KAAMF,EAAGE,EAAG,CAAC,EACb,OAAQF,EAAGE,EAAG,CAAC,EACf,KAAMF,EAAGE,EAAG,CAAC,EACb,IAAKJ,EAAG,QAAQ,KAAK,EAAE,GAG7B,MACA,IAAK,IAAG,KAAK,EAAI,CAAC,KAAM,OAAQ,MAAOE,EAAGE,CAAE,EAAG,IAAKJ,EAAG,QAAQ,KAAK,EAAE,CAAC,EACvE,MACA,IAAK,IAAG,KAAK,EAAI,CAAC,KAAM,WAAY,IAAKA,EAAG,GAAGE,EAAGE,EAAG,CAAC,CAAC,EAAG,MAAOF,EAAGE,CAAE,EAAG,IAAKJ,EAAG,QAAQ,KAAK,EAAE,CAAC,EACjG,MACA,IAAK,IAAG,KAAK,EAAIA,EAAG,GAAGE,EAAGE,EAAG,CAAC,CAAC,EAC/B,MACA,IAAK,IAAG,KAAK,EAAIF,EAAGE,CAAE,EACtB,MACA,IAAK,IAAG,KAAK,EAAIF,EAAGE,CAAE,EACtB,MACA,IAAK,IAAG,KAAK,EAAI,CAAC,KAAM,gBAAiB,MAAOF,EAAGE,CAAE,EAAG,SAAUF,EAAGE,CAAE,EAAG,IAAKJ,EAAG,QAAQ,KAAK,EAAE,CAAC,EAClG,MACA,IAAK,IAAG,KAAK,EAAI,CAAC,KAAM,gBAAiB,MAAO,OAAOE,EAAGE,CAAE,CAAC,EAAG,SAAU,OAAOF,EAAGE,CAAE,CAAC,EAAG,IAAKJ,EAAG,QAAQ,KAAK,EAAE,CAAC,EAClH,MACA,IAAK,IAAG,KAAK,EAAI,CAAC,KAAM,iBAAkB,MAAOE,EAAGE,CAAE,IAAM,OAAQ,SAAUF,EAAGE,CAAE,IAAM,OAAQ,IAAKJ,EAAG,QAAQ,KAAK,EAAE,CAAC,EACzH,MACA,IAAK,IAAG,KAAK,EAAI,CAAC,KAAM,mBAAoB,SAAU,OAAW,MAAO,OAAW,IAAKA,EAAG,QAAQ,KAAK,EAAE,CAAC,EAC3G,MACA,IAAK,IAAG,KAAK,EAAI,CAAC,KAAM,cAAe,SAAU,KAAM,MAAO,KAAM,IAAKA,EAAG,QAAQ,KAAK,EAAE,CAAC,EAC5F,MACA,IAAK,IAAG,KAAK,EAAIE,EAAGE,CAAE,EACtB,MACA,IAAK,IAAG,KAAK,EAAIF,EAAGE,CAAE,EACtB,MACA,IAAK,IAAG,KAAK,EAAIJ,EAAG,YAAY,GAAME,EAAGE,CAAE,EAAG,KAAK,EAAE,EACrD,MACA,IAAK,IAAG,KAAK,EAAIJ,EAAG,YAAY,GAAOE,EAAGE,CAAE,EAAG,KAAK,EAAE,EACtD,MACA,IAAK,IAAIF,EAAGE,EAAG,CAAC,EAAE,KAAK,CAAC,KAAMJ,EAAG,GAAGE,EAAGE,CAAE,CAAC,EAAG,SAAUF,EAAGE,CAAE,EAAG,UAAWF,EAAGE,EAAG,CAAC,CAAC,CAAC,EAAG,KAAK,EAAIF,EAAGE,EAAG,CAAC,EACtG,MACA,IAAK,IAAG,KAAK,EAAI,CAAC,CAAC,KAAMJ,EAAG,GAAGE,EAAGE,CAAE,CAAC,EAAG,SAAUF,EAAGE,CAAE,CAAC,CAAC,EACzD,MACA,IAAK,IAAG,KAAK,EAAI,CAAA,EACjB,MACA,IAAK,IAAGF,EAAGE,EAAG,CAAC,EAAE,KAAKF,EAAGE,CAAE,CAAC,EAC5B,MACA,IAAK,IAAG,KAAK,EAAI,CAAA,EACjB,MACA,IAAK,IAAGF,EAAGE,EAAG,CAAC,EAAE,KAAKF,EAAGE,CAAE,CAAC,EAC5B,MACA,IAAK,IAAG,KAAK,EAAI,CAAA,EACjB,MACA,IAAK,IAAGF,EAAGE,EAAG,CAAC,EAAE,KAAKF,EAAGE,CAAE,CAAC,EAC5B,MACA,IAAK,IAAG,KAAK,EAAI,CAAA,EACjB,MACA,IAAK,IAAGF,EAAGE,EAAG,CAAC,EAAE,KAAKF,EAAGE,CAAE,CAAC,EAC5B,MACA,IAAK,IAAG,KAAK,EAAI,CAAA,EACjB,MACA,IAAK,IAAGF,EAAGE,EAAG,CAAC,EAAE,KAAKF,EAAGE,CAAE,CAAC,EAC5B,MACA,IAAK,IAAG,KAAK,EAAI,CAAA,EACjB,MACA,IAAK,IAAGF,EAAGE,EAAG,CAAC,EAAE,KAAKF,EAAGE,CAAE,CAAC,EAC5B,MACA,IAAK,IAAG,KAAK,EAAI,CAAA,EACjB,MACA,IAAK,IAAGF,EAAGE,EAAG,CAAC,EAAE,KAAKF,EAAGE,CAAE,CAAC,EAC5B,MACA,IAAK,IAAG,KAAK,EAAI,CAAA,EACjB,MACA,IAAK,IAAGF,EAAGE,EAAG,CAAC,EAAE,KAAKF,EAAGE,CAAE,CAAC,EAC5B,MACA,IAAK,IAAG,KAAK,EAAI,CAAA,EACjB,MACA,IAAK,IAAGF,EAAGE,EAAG,CAAC,EAAE,KAAKF,EAAGE,CAAE,CAAC,EAC5B,MACA,IAAK,IAAG,KAAK,EAAI,CAAA,EACjB,MACA,IAAK,IAAGF,EAAGE,EAAG,CAAC,EAAE,KAAKF,EAAGE,CAAE,CAAC,EAC5B,MACA,IAAK,IAAG,KAAK,EAAI,CAAA,EACjB,MACA,IAAK,IAAGF,EAAGE,EAAG,CAAC,EAAE,KAAKF,EAAGE,CAAE,CAAC,EAC5B,MACA,IAAK,IAAG,KAAK,EAAI,CAACF,EAAGE,CAAE,CAAC,EACxB,MACA,IAAK,IAAGF,EAAGE,EAAG,CAAC,EAAE,KAAKF,EAAGE,CAAE,CAAC,EAC5B,MACA,IAAK,KAAI,KAAK,EAAI,CAACF,EAAGE,CAAE,CAAC,EACzB,MACA,IAAK,KAAIF,EAAGE,EAAG,CAAC,EAAE,KAAKF,EAAGE,CAAE,CAAC,EAC7B,KAAM,GAGN,MAAO,CAAC,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,EAA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", + "names": ["escape", "badChars", "possible", "escapeChar", "chr", "extend", "obj", "i", "key", "toString", "isFunction", "value", "exports", "isArray", "indexOf", "array", "len", "escapeExpression", "string", "isEmpty", "createFrame", "object", "frame", "blockParams", "params", "ids", "appendContextPath", "contextPath", "id", "errorProps", "Exception", "message", "node", "loc", "line", "endLineNumber", "column", "endColumn", "tmp", "idx", "nop", "instance", "context", "options", "inverse", "fn", "_utils", "data", "instance", "context", "options", "_exception2", "fn", "inverse", "i", "ret", "data", "contextPath", "_utils", "execIteration", "field", "index", "last", "j", "newContext", "iterator", "it", "priorKey", "key", "instance", "_exception2", "instance", "conditional", "options", "_exception2", "_utils", "instance", "args", "options", "i", "level", "instance", "obj", "field", "options", "instance", "context", "options", "_exception2", "_utils", "fn", "data", "registerDefaultHelpers", "instance", "_helpersBlockHelperMissing2", "_helpersEach2", "_helpersHelperMissing2", "_helpersIf2", "_helpersLog2", "_helpersLookup2", "_helpersWith2", "moveHelperToHooks", "helperName", "keepHelper", "instance", "fn", "props", "container", "options", "ret", "context", "original", "_utils", "registerDefaultDecorators", "instance", "_decoratorsInline2", "logger", "level", "levelMap", "_utils", "method", "message", "_len", "_key", "createNewLookupObject", "sources", "_len", "_key", "_utils", "logger", "_interopRequireWildcard", "_logger", "loggedProperties", "createProtoAccessControl", "runtimeOptions", "defaultMethodWhiteList", "defaultPropertyWhiteList", "_createNewLookupObject", "resultIsAllowed", "result", "protoAccessControl", "propertyName", "checkWhiteList", "protoAccessControlForType", "logUnexpecedPropertyAccessOnce", "resetLoggedProperties", "VERSION", "COMPILER_REVISION", "LAST_COMPATIBLE_COMPILER_REVISION", "REVISION_CHANGES", "objectType", "HandlebarsEnvironment", "helpers", "partials", "decorators", "_helpers", "_decorators", "_logger2", "name", "fn", "_utils", "_exception2", "partial", "_internalProtoAccess", "log", "SafeString", "string", "wrapHelper", "helper", "transformOptionsFn", "wrapper", "options", "Utils", "_interopRequireWildcard", "_utils", "checkRevision", "compilerInfo", "compilerRevision", "currentRevision", "_base", "runtimeVersions", "compilerVersions", "_exception2", "template", "templateSpec", "env", "templateWasPrecompiledWithCompilerV7", "invokePartialWrapper", "partial", "context", "options", "extendedOptions", "result", "lines", "i", "l", "container", "obj", "name", "loc", "parent", "propertyName", "_internalProtoAccess", "depths", "len", "current", "ret", "data", "declaredBlockParams", "blockParams", "programWrapper", "fn", "wrapProgram", "value", "depth", "param", "common", "initData", "main", "executeDecorators", "mergedHelpers", "wrapHelpersToPassLookupProperty", "keepHelperInHelpers", "_helpers", "prog", "currentDepths", "resolvePartial", "invokePartial", "currentPartialBlock", "partialBlock", "noop", "props", "helperName", "helper", "passLookupPropertyOption", "lookupProperty", "_internalWrapHelper", "Handlebars", "root", "$Handlebars", "base", "_interopRequireWildcard", "_handlebarsBase", "Utils", "_handlebarsUtils", "runtime", "_handlebarsRuntime", "create", "hb", "_handlebarsSafeString2", "_handlebarsException2", "spec", "inst", "_handlebarsNoConflict2", "AST", "node", "path", "handlebars", "parser", "yytext", "yyleng", "yylineno", "yy", "yystate", "$$", "_$", "$0", "inverse", "program", "str", "hash", "input", "self", "stack", "vstack", "lstack", "table", "recovering", "TERROR", "EOF", "yyloc", "ranges", "popStack", "n", "lex", "token", "symbol", "preErrorSymbol", "state", "action", "a", "r", "yyval", "p", "len", "newState", "expected", "errStr", "lexer", "ch", "lines", "oldLines", "past", "next", "pre", "c", "match", "tempMatch", "index", "col", "rules", "i", "condition", "yy_", "$avoiding_name_collisions", "YY_START", "strip", "start", "end", "YYSTATE", "Parser", "exports", "Visitor", "node", "name", "value", "_exception2", "array", "i", "l", "object", "ret", "program", "visitSubExpression", "visitBlock", "visitPartial", "partial", "hash", "pair", "mustache", "block", "WhitespaceControl", "options", "_visitor2", "program", "doStandalone", "isRoot", "body", "l", "current", "strip", "_isPrevWhitespace", "isPrevWhitespace", "_isNextWhitespace", "isNextWhitespace", "openStandalone", "closeStandalone", "inlineStandalone", "omitRight", "omitLeft", "block", "inverse", "firstInverse", "lastInverse", "inverseStrip", "mustache", "node", "i", "prev", "sibling", "next", "multiple", "original", "validateClose", "open", "close", "errorNode", "_exception2", "SourceLocation", "source", "locInfo", "id", "token", "stripFlags", "stripComment", "comment", "preparePath", "data", "parts", "loc", "original", "dig", "depth", "i", "l", "part", "isLiteral", "prepareMustache", "path", "params", "hash", "strip", "escapeFlag", "escaped", "decorator", "prepareRawBlock", "openRawBlock", "contents", "program", "prepareBlock", "openBlock", "inverseAndProgram", "inverted", "inverse", "inverseStrip", "prepareProgram", "statements", "firstLoc", "lastLoc", "preparePartialBlock", "Helpers", "_interopRequireWildcard", "_helpers", "_parser2", "yy", "_utils", "parseWithoutProcessing", "input", "options", "locInfo", "ast", "parse", "strip", "_whitespaceControl2", "slice", "Compiler", "other", "len", "i", "opcode", "otherOpcode", "argEquals", "program", "options", "_utils", "childCompiler", "result", "guid", "node", "_exception2", "ret", "body", "bodyLength", "block", "transformLiteralToPath", "inverse", "type", "decorator", "params", "path", "partial", "partialName", "isDynamic", "indent", "partialBlock", "mustache", "content", "sexpr", "name", "isBlock", "_ast2", "scoped", "blockParamId", "string", "number", "bool", "hash", "pairs", "l", "depth", "isSimple", "isBlockParam", "isHelper", "isEligible", "_name", "val", "value", "blockParamIndex", "blockParamChild", "omitEmpty", "blockParams", "param", "precompile", "input", "env", "ast", "environment", "compile", "compiled", "compileInput", "templateSpec", "context", "execOptions", "setupOptions", "data", "depths", "a", "b", "literal", "require_base64", "__commonJSMin", "exports", "intToCharMap", "number", "charCode", "bigA", "bigZ", "littleA", "littleZ", "zero", "nine", "plus", "slash", "littleOffset", "numberOffset", "require_base64_vlq", "__commonJSMin", "exports", "base64", "VLQ_BASE_SHIFT", "VLQ_BASE", "VLQ_BASE_MASK", "VLQ_CONTINUATION_BIT", "toVLQSigned", "aValue", "fromVLQSigned", "isNegative", "shifted", "encoded", "digit", "vlq", "aStr", "aIndex", "aOutParam", "strLen", "result", "shift", "continuation", "require_util", "__commonJSMin", "exports", "getArg", "aArgs", "aName", "aDefaultValue", "urlRegexp", "dataUrlRegexp", "urlParse", "aUrl", "match", "urlGenerate", "aParsedUrl", "url", "normalize", "aPath", "path", "isAbsolute", "parts", "part", "up", "i", "join", "aRoot", "aPathUrl", "aRootUrl", "joined", "relative", "level", "index", "supportsNullProto", "obj", "identity", "s", "toSetString", "aStr", "isProtoString", "fromSetString", "length", "compareByOriginalPositions", "mappingA", "mappingB", "onlyCompareOriginal", "cmp", "strcmp", "compareByGeneratedPositionsDeflated", "onlyCompareGenerated", "aStr1", "aStr2", "compareByGeneratedPositionsInflated", "parseSourceMapInput", "str", "computeSourceURL", "sourceRoot", "sourceURL", "sourceMapURL", "parsed", "require_array_set", "__commonJSMin", "exports", "util", "has", "hasNativeMap", "ArraySet", "aArray", "aAllowDuplicates", "set", "len", "aStr", "sStr", "isDuplicate", "idx", "aIdx", "require_mapping_list", "__commonJSMin", "exports", "util", "generatedPositionAfter", "mappingA", "mappingB", "lineA", "lineB", "columnA", "columnB", "MappingList", "aCallback", "aThisArg", "aMapping", "require_source_map_generator", "__commonJSMin", "exports", "base64VLQ", "util", "ArraySet", "MappingList", "SourceMapGenerator", "aArgs", "aSourceMapConsumer", "sourceRoot", "generator", "mapping", "newMapping", "sourceFile", "sourceRelative", "content", "generated", "original", "source", "name", "aSourceFile", "aSourceContent", "aSourceMapPath", "newSources", "newNames", "aGenerated", "aOriginal", "aSource", "aName", "previousGeneratedColumn", "previousGeneratedLine", "previousOriginalColumn", "previousOriginalLine", "previousName", "previousSource", "result", "next", "nameIdx", "sourceIdx", "mappings", "i", "len", "aSources", "aSourceRoot", "key", "map", "require_binary_search", "__commonJSMin", "exports", "recursiveSearch", "aLow", "aHigh", "aNeedle", "aHaystack", "aCompare", "aBias", "mid", "cmp", "index", "require_quick_sort", "__commonJSMin", "exports", "swap", "ary", "x", "y", "temp", "randomIntInRange", "low", "high", "doQuickSort", "comparator", "p", "r", "pivotIndex", "i", "pivot", "j", "q", "require_source_map_consumer", "__commonJSMin", "exports", "util", "binarySearch", "ArraySet", "base64VLQ", "quickSort", "SourceMapConsumer", "aSourceMap", "aSourceMapURL", "sourceMap", "IndexedSourceMapConsumer", "BasicSourceMapConsumer", "aStr", "index", "c", "aSourceRoot", "aCallback", "aContext", "aOrder", "context", "order", "mappings", "sourceRoot", "mapping", "source", "aArgs", "line", "needle", "originalLine", "originalColumn", "version", "sources", "names", "sourcesContent", "file", "s", "aSource", "relativeSource", "i", "smc", "generatedMappings", "destGeneratedMappings", "destOriginalMappings", "length", "srcMapping", "destMapping", "Mapping", "generatedLine", "previousGeneratedColumn", "previousOriginalLine", "previousOriginalColumn", "previousSource", "previousName", "cachedSegments", "temp", "originalMappings", "str", "segment", "end", "value", "aNeedle", "aMappings", "aLineName", "aColumnName", "aComparator", "aBias", "nextMapping", "name", "sc", "nullOnMissing", "url", "fileUriAbsPath", "sections", "lastOffset", "offset", "offsetLine", "offsetColumn", "j", "sectionIndex", "section", "cmp", "content", "generatedPosition", "ret", "sectionMappings", "adjustedMapping", "require_source_node", "__commonJSMin", "exports", "SourceMapGenerator", "util", "REGEX_NEWLINE", "NEWLINE_CODE", "isSourceNode", "SourceNode", "aLine", "aColumn", "aSource", "aChunks", "aName", "aGeneratedCode", "aSourceMapConsumer", "aRelativePath", "node", "remainingLines", "remainingLinesIndex", "shiftNextLine", "lineContents", "getNextLine", "newLine", "lastGeneratedLine", "lastGeneratedColumn", "lastMapping", "mapping", "addMappingWithCode", "nextLine", "code", "sourceFile", "content", "source", "aChunk", "chunk", "i", "aFn", "len", "aSep", "newChildren", "aPattern", "aReplacement", "lastChild", "aSourceFile", "aSourceContent", "sources", "str", "aArgs", "generated", "map", "sourceMappingActive", "lastOriginalSource", "lastOriginalLine", "lastOriginalColumn", "lastOriginalName", "original", "idx", "length", "sourceContent", "require_source_map", "__commonJSMin", "exports", "SourceNode", "SourceMap", "err", "line", "column", "srcFile", "chunks", "_utils", "castChunk", "chunk", "codeGen", "loc", "ret", "len", "CodeGen", "source", "iter", "i", "fn", "type", "params", "str", "obj", "pairs", "key", "value", "_this", "entries", "Literal", "value", "JavaScriptCompiler", "parent", "name", "revision", "_base", "versions", "source", "location", "explicit", "_utils", "environment", "options", "context", "asObject", "opcodes", "opcode", "firstLoc", "i", "l", "_exception2", "fn", "ret", "programs", "_context", "decorators", "_codeGen2", "varDeclarations", "locals", "aliasCount", "alias", "node", "_this", "params", "isSimple", "appendOnly", "appendFirst", "sourceSeen", "bufferStart", "bufferEnd", "line", "blockHelperMissing", "blockName", "current", "content", "local", "depth", "parts", "falsy", "strict", "scoped", "blockParamId", "type", "strictLookup", "len", "lookup", "_this2", "string", "omitEmpty", "hash", "guid", "paramSize", "foundDecorator", "nonHelper", "helper", "possibleFunctionCalls", "functionLookupCode", "functionCall", "items", "separator", "result", "helperCall", "helperName", "isDynamic", "indent", "key", "id", "child", "children", "compiler", "existing", "index", "programParams", "expr", "item", "callback", "prefix", "stack", "createdStack", "usedLiteral", "top", "_name", "inlineStack", "entry", "wrapped", "inline", "str", "obj", "blockHelper", "paramsInit", "foundHelper", "callContext", "contexts", "types", "ids", "objectArgs", "param", "inverse", "program", "useRegister", "reservedWords", "compilerWords", "requireTerminal", "_create", "_handlebarsRuntime2", "create", "hb", "input", "options", "_handlebarsCompilerCompiler", "_handlebarsCompilerAst2", "_handlebarsCompilerJavascriptCompiler2", "_handlebarsCompilerBase", "inst", "_handlebarsNoConflict2", "_handlebarsCompilerVisitor2", "print", "ast", "PrintVisitor", "_visitor2", "string", "out", "i", "l", "program", "body", "blockParams", "mustache", "block", "partial", "content", "comment", "sexpr", "params", "paramStrings", "hash", "id", "path", "number", "bool", "pairs", "joinedPairs", "pair", "require_lib", "__commonJSMin", "exports", "module", "handlebars", "printer", "extension", "filename", "fs", "templateString", "__require", "import_handlebars", "import_proto_access", "import_ast", "import_utils", "import_helpers", "kHelper", "kAmbiguous", "kSimple", "import_utils", "isBlock", "node", "isDecorator", "toDecoratorOptions", "options", "noop", "initData", "context", "data", "transformLiteralToPath", "literal", "original", "allowUnsafeEval", "e", "ElasticHandlebarsVisitor", "Handlebars", "env", "input", "options", "__spreadValues", "protoAccessControl", "container", "obj", "name", "loc", "parent", "propertyName", "result", "current", "context", "value", "depth", "initData", "keepHelperInHelpers", "defaultMain", "_context", "main", "program", "mustache", "block", "partial", "decorator", "sexpr", "path", "blockParamId", "AST", "content", "string", "number", "bool", "prog", "props", "node", "isDecorator", "transformLiteralToPath", "kSimple", "kHelper", "kAmbiguous", "isSimple", "isBlockParam", "isHelper", "isEligible", "len", "blockParams", "param", "data", "lambdaResult", "isBlock", "helper", "_a", "_b", "_c", "params", "partialBlock", "noop", "fn", "currentPartialBlock", "wrapperOptions", "partialTemplate", "render", "helperFn", "helperResult", "helperName", "toDecoratorOptions", "nextContext", "runtimeOptions", "tmpRuntimeOptions", "shiftContext", "statement", "key", "index", "requireTerminal", "i", "nodes", "currentOutput", "Handlebars", "originalCreate", "Handlebars", "SandboxedHandlebars", "originalCreate", "input", "options", "visitor", "ElasticHandlebarsVisitor", "context", "runtimeOptions", "Handlebars", "allowUnsafeEval"] +} diff --git a/ext/permissions.html b/ext/permissions.html index b76b1fb0..bd97e94d 100644 --- a/ext/permissions.html +++ b/ext/permissions.html @@ -47,7 +47,7 @@ </div> </div> </div></div> - <div class="settings-item" data-hide-for-manifest-version="3"><div class="settings-item-inner"> + <div class="settings-item" data-show-for-browser="firefox firefox-mobile"><div class="settings-item-inner"> <div class="settings-item-left"> <div class="settings-item-label"><code>webRequest</code> and <code>webRequestBlocking</code></div> <div class="settings-item-description"> @@ -62,7 +62,7 @@ </div> </div> </div></div> - <div class="settings-item" data-show-for-manifest-version="3"><div class="settings-item-inner"> + <div class="settings-item" data-show-for-browser="chrome edge"><div class="settings-item-inner"> <div class="settings-item-left"> <div class="settings-item-label"><code>declarativeNetRequest</code></div> <div class="settings-item-description"> |